One row per on-chain transaction touching a CFX wallet, whoever signed it,
and every message a CFX key signs (WALLETS.md §5.3). wallet-api writes a CFX
row before broadcast, signed last and never half-signed, idempotent on
(reference, messageHash); every signature is a wallet_signature row.
account-sync fills the chain columns on what it observes and inserts EXTERNAL
rows, matching on (chainId, txHash). The signing columns are all set or all
null, and null on every EXTERNAL row.
dbmate owns the DDL: 20261018164931_wallet_transaction.sql, then
20261019165453_wallet_transaction_chain_rows.sql and
20261023193347_wallet_transaction_network.sql, whose trigger fills
chainId on a SOLANA row inserted without one (wallet-api's signer), and
20261102153615_wallet_transaction_awaiting_signature.sql (Utila signing),
and 20261107225014_wallet_transaction_evm_nonce.sql (EVM gas station nonces).
One row per on-chain transaction touching a CFX wallet, whoever signed it, and every message a CFX key signs (WALLETS.md §5.3). wallet-api writes a CFX row before broadcast, signed last and never half-signed, idempotent on
(reference, messageHash); every signature is awallet_signaturerow. account-sync fills the chain columns on what it observes and inserts EXTERNAL rows, matching on(chainId, txHash). The signing columns are all set or all null, and null on every EXTERNAL row.dbmate owns the DDL:
20261018164931_wallet_transaction.sql, then20261019165453_wallet_transaction_chain_rows.sqland20261023193347_wallet_transaction_network.sql, whose trigger fillschainIdon a SOLANA row inserted without one (wallet-api's signer), and20261102153615_wallet_transaction_awaiting_signature.sql(Utila signing), and20261107225014_wallet_transaction_evm_nonce.sql(EVM gas station nonces).