When an in app purchase is restored, the following delegate method is called:
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
NSLog(@"%@", queue.transactions);
for (SKPaymentTransaction *transaction in queue.transactions) {
//restore
}
}
There are a lot of transactions in queue.transactions while only one product was restored (in this example there were over twenty transactions written to the log). Why? Shouldn’t there be just one transaction? Were I to start downloading the product from my server, it would be doing twenty downloads since there are too many transactions in the array!

You are supposed to process the transaction in the
paymentQueue:updatedTransactions:method. ThepaymentQueueRestoreCompletedTransactionsFinished:is there to tell you that it is done.