You have to attach interrupt 1 as well. You are only processing encoder changes when A changes and are entirely missing changes on B.
The encoder came without any documentation and all configurations I came across online have the ground in the middle.
Code: [Select] attachInterrupt(0, doEncoder, CHANGE);
attachInterrupt(0, doEncoder, CHANGE);