@@ -657,8 +657,20 @@ export class PgWriteStore extends PgStore {
657657 async updateBurnBlockPoxTxs ( args : { burnBlockPoxTxs : DbBurnBlockPoxTx [ ] } ) : Promise < void > {
658658 if ( args . burnBlockPoxTxs . length === 0 ) return ;
659659 await this . sql `
660- INSERT INTO burn_block_pox_txs ${ this . sql ( args . burnBlockPoxTxs ) }
661- ON CONFLICT ON CONSTRAINT burn_block_pox_txs_unique_idx DO NOTHING
660+ WITH inserts AS (
661+ INSERT INTO burn_block_pox_txs ${ this . sql ( args . burnBlockPoxTxs ) }
662+ ON CONFLICT ON CONSTRAINT burn_block_pox_txs_unique_idx DO NOTHING
663+ RETURNING recipient, canonical
664+ ),
665+ count_deltas AS (
666+ SELECT recipient, COUNT(*) AS count
667+ FROM inserts
668+ WHERE canonical = true
669+ GROUP BY recipient
670+ )
671+ INSERT INTO burn_block_pox_tx_counts (recipient, count)
672+ (SELECT recipient, count FROM count_deltas)
673+ ON CONFLICT (recipient) DO UPDATE SET count = burn_block_pox_tx_counts.count + EXCLUDED.count
662674 ` ;
663675 }
664676
@@ -3716,9 +3728,21 @@ export class PgWriteStore extends PgStore {
37163728 } ) ;
37173729 q . enqueue ( async ( ) => {
37183730 await sql `
3719- UPDATE burn_block_pox_txs
3720- SET canonical = ${ canonical }
3721- WHERE burn_block_hash = ${ burnBlockHash } AND canonical != ${ canonical }
3731+ WITH updates AS (
3732+ UPDATE burn_block_pox_txs
3733+ SET canonical = ${ canonical }
3734+ WHERE burn_block_hash = ${ burnBlockHash } AND canonical != ${ canonical }
3735+ RETURNING recipient
3736+ ),
3737+ count_deltas AS (
3738+ SELECT recipient, COUNT(*) AS count
3739+ FROM updates
3740+ GROUP BY recipient
3741+ )
3742+ UPDATE burn_block_pox_tx_counts AS pc
3743+ SET count = ${ canonical ? sql `pc.count + cd.count` : sql `pc.count - cd.count` }
3744+ FROM count_deltas AS cd
3745+ WHERE pc.recipient = cd.recipient
37223746 ` ;
37233747 } ) ;
37243748
0 commit comments