From e18cb1ffd1f6b3ab09f12a48f9ca8b91e152602f Mon Sep 17 00:00:00 2001 From: youngkidwarrior Date: Sat, 4 Oct 2025 01:33:36 -0700 Subject: [PATCH] workflows: wire post-confirmation SEND balance + hodler Why: - After confirmation, update balances and hodler verifications for sender and receiver. - Native deposits remain trigger-driven; SEND is workflow-driven to avoid double counting. Test plan: - Simulate or run a SEND transfer: - token_balances upsert for both addresses with correct chain/token. - distribution_verifications upsert with type=send_token_hodler and preserved weight. --- packages/workflows/package.json | 2 +- .../src/transfer-workflow/workflow.ts | 36 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/workflows/package.json b/packages/workflows/package.json index f685a77b0..879bcaf77 100644 --- a/packages/workflows/package.json +++ b/packages/workflows/package.json @@ -1,6 +1,6 @@ { "name": "@my/workflows", - "version": "0.0.8", + "version": "0.0.9", "files": [ "package.json", "src" diff --git a/packages/workflows/src/transfer-workflow/workflow.ts b/packages/workflows/src/transfer-workflow/workflow.ts index b749d260a..2a4460bd5 100644 --- a/packages/workflows/src/transfer-workflow/workflow.ts +++ b/packages/workflows/src/transfer-workflow/workflow.ts @@ -13,6 +13,9 @@ const { decodeTransferUserOpActivity, updateTemporalSendAccountTransferActivity, getEventFromTransferActivity, + readBalanceActivity, + persistBalanceActivity, + upsertSendTokenHodlerVerificationActivity, } = proxyActivities>({ // TODO: make this configurable startToCloseTimeout: '10 minutes', @@ -129,6 +132,39 @@ export async function transfer(userOp: UserOperation<'v0.7'>, note?: string) { to, }) + // After confirmation, read and persist balances for SEND-only + if (token) { + const fromRead = await readBalanceActivity({ token, account: from }) + if (fromRead) { + await persistBalanceActivity({ + userId: fromRead.userId, + token: fromRead.token, + balance: fromRead.balance, + address: fromRead.address, + chainId: fromRead.chainId, + }) + await upsertSendTokenHodlerVerificationActivity({ + userId: fromRead.userId, + balance: fromRead.balance, + }) + } + + const toRead = await readBalanceActivity({ token, account: to }) + if (toRead) { + await persistBalanceActivity({ + userId: toRead.userId, + token: toRead.token, + balance: toRead.balance, + address: toRead.address, + chainId: toRead.chainId, + }) + await upsertSendTokenHodlerVerificationActivity({ + userId: toRead.userId, + balance: toRead.balance, + }) + } + } + await updateTemporalSendAccountTransferActivity({ workflow_id: workflowId, status: 'confirmed',