В базу записывай транзакции (идентифицируй по txid и учитывай количество подтверждений) в цикле постранично запрашивая транзакции до тех пор, пока не встретим транзакцию, уже записанную в базе.
// далее $saved_txs определен для простоты, но это не переменная а база данных
while(!isset($saved_txs[$tx.txid])||(!$saved_txs[$tx.txid].isCompleted&&$saved_txs[$tx.txid].conformation{
... // запрос следующей $tx входящей транзакции из результата listtransactions, если список закончился, запрашиваем следующую страницу listtransaction, увеличив from на размер count
... // помним, что в процессе загрузки данных могут появиться новые транзакции, к сожалению кошелек не предоставляет механизмов по обработке таких ситуаций, особенно если скорость их появления больше размера count
$saved_txs[$tx.txid]=$tx; // тут будет сложнее, для обработки сложных транзакций на несколько адресов
.... // обрабатываем транзакции
$saved_txs[$tx.txid].isCompleted=false;
// сохраняем список новых не обработанных транзакций
$todo[$tx.txid]=true;
}
foreach($todo as $txid=>$t)
{
... // обрабатываем транзакцию
$saved_txs[$tx.txid].isCompleted=true;
}
Код будет немного сложнее, так как listtransactions для сложных транзакций (входящие, на несколько адресов кошелька) вернет несколько записей, по одной на каждый входящий адрес. Для этого можно либо хитро хранить транзакции, либо формировать свой идентификатор транзакции, например из txid и address
Опрос кошелька нужно делать не по крону, а настроив калбак в кошельке на нахождение нового блока или входящую транзакцию
-blocknotify= Execute command when the best block changes (%s in cmd is replaced by block hash)
-walletnotify= Execute command when a wallet transaction changes (%s in cmd is replaced by TxID)