Ich hoffe ich sag nix falsches:
int pin = 13;
Heißt nur das die Variable pin ein Integer ist und 13 enthält.
attachInterrupt(0, blink, CHANGE);
Heißt das wenn sich der Status an Interrupt 0 also pin 2 ÄNDERT wird blink aufgerufen.
digitalWrite(pin, state);
Hier wird pin (also 13) auf den Wert state gesetzt.
state = !state;
Hier wird state gleich nicht state gesetzt. Also wenns low war wirds high und umgekehrt.
Dein angehängter code macht nichts anderes wie den state immer auf den pin (also 13) zu schreiben.
Kommt nun ein change an 0 (pin2) wird blink aufgerufen und hier wird state geändert.
Dadurch wird im nächsten loop der neue state geschrieben.
So glaube ich.