← Research

CryptOps Research · Control guide

Pre-Signing Transaction Verification for Institutional Wallets

What to check before a transaction is signed, where that check should sit, and what two September 2026 incidents show about checks that trust upstream systems.

By StratEdge Workflow Systems · Published October 4, 2026 · Facts as of October 4, 2026

Pre-signing verification is the last check before a transaction becomes irreversible. It asks whether this exact transaction, with this destination, amount and effect, was approved under policy. It also asks whether the value being moved is real. Two September 2026 incidents show what happens when that check relies on the system it is meant to check. At Bitget, forged withdrawal commands skipped the risk checks. At Liquid, the peg-out key authenticated a genuine request against value that should never have existed.

What to verify before signing

CheckQuestion to answerPublished guidance
DestinationIs the full address on the allowlist? Was it added by someone other than the requester, and has its cooling-off period ended?SEAL recommends a different approver for each allowlist addition and a 24–48 hour cooling-off period (72 hours for high security)[3]. Check the full address, not only the first and last four characters: attackers create lookalike Safes that match those[4]. One measurement of address poisoning found at least $83.8 million lost across 6,633 incidents on Ethereum and BSC through June 30, 2024[5].
Amount, asset, networkDo the exact amount in native units, the token contract and the chain ID match the approval?Read the parameters aloud and have each approver verify them on their own device[3].
Effect (calldata)What does the transaction actually do: which function, which target, which parameters?"Verify Calldata, Not Just Hashes." Watch for unexpected DELEGATECALL, approve calls or hidden batch operations[4].
OriginIs there an approved request, recorded outside the initiating system, that matches this exact transaction?At Bitget, forged commands were processed as normal withdrawals before withdrawal records existed[1].
Size, velocity, historyIs the transfer within per-transfer and per-period limits? Is this the first payment to this destination? How large is it relative to the balance or supply?At Liquid, the peg-out service applied "no size limit, velocity control, or wallet-history check"[2].
Backing (bridges, redemptions)Does the value being redeemed exist and match the reserve?Liquid had "no separate, off-chain reserve check at peg-out time"[2].

Where the check should sit

Verification can run in three places: in the system that initiates transfers, at the signer (an HSM or MPC policy engine), or as a separate gate between approval and signing or broadcast. The location matters less than where the check gets its inputs. A check that reads the request, the approval and the policy from the same system that could be compromised will fail along with that system.

Both cases below fit that pattern. At Bitget, the risk checks lived on a path the forged commands never took. At Liquid, the authorization key confirmed who was asking and where the funds would go. Nothing checked whether the value being redeemed existed.

Case: Bitget, September 24, 2026

Per Bitget's official incident page, last updated October 4, 2026[1]: attackers used a zero-day vulnerability in a third-party security product to steal internal credentials. They then "directly wrote forged withdrawal commands into the wallet system. This caused the wallet to process them as normal withdrawals, bypassing the risk control verification process before withdrawal records were generated." The final verified figure is approximately $388M, involving 12 hot and warm wallet addresses. "Private keys were not compromised," and cold wallets were unaffected. The attackers later deleted traces of the forged commands. Bitget's remediation includes "strengthened independent withdrawal verification."

For pre-signing verification:a check that sits on the normal request path, or that trusts the wallet system's own records, does not see a command written below it. The signer, or the last gate before it, needs to confirm that a matching approval exists somewhere the attacker could not write.

Case: Liquid Network, September 6, 2026

Per Blockstream's technical assessment of September 23, 2026[2]: a defect in Elements' rangeproof verification cache let a transaction that "was not backed by its inputs" pass validation. Liquid nodes, including federation functionary nodes, accepted it, creating about 4,000 unbacked LBTC. The attacker redeemed it through the standard peg-out process via SideSwap, a federation member, for about 4,000 BTC. The reserve fell from about 4,205 BTC to 197 BTC before the halt, with routine peg-outs already in progress also contributing. Of the amount attributable to the unauthorized transactions, 3,400 BTC was returned. About 602 BTC remained subject to recovery efforts. "The SideSwap PAK itself was not compromised, forged or stolen." The peg-out mechanism "authenticated a real signature request against LBTC that consensus had, incorrectly, already accepted as real."

For pre-signing verification: destination and requester checks both passed, because neither was what failed. For bridges, redemptions and any flow that releases value against a claim, the check before signing should also confirm that the claim is backed, using a source independent of the system that validated it.

Pre-signing checklist

  1. Confirm that a matching approved request exists, recorded outside the system that initiated the transaction. Refuse to sign if it doesn't.
  2. Verify the full destination address against the allowlist, check who added it and when, and confirm its cooling-off period has ended.
  3. Verify the exact amount in native units, the token contract and the chain ID against the approval.
  4. Decode the calldata. Confirm the function, target and parameters. Stop on an unexpected DELEGATECALL, approve call or batch.
  5. Apply per-transfer and per-period limits, and hold first payments to new destinations.
  6. Compare the size with the balance or outstanding supply. Large shares need human review.
  7. For redemptions and bridges, check backing against an independent reserve figure before release.
  8. Collect the second approval through a channel separate from the one that carried the request.
  9. Write the verification result and the rules that fired to a write-once record before broadcast.
  10. Treat urgency, address changes and requests to skip test transactions as triggers for out-of-band verification.

For who should hold each role, see crypto treasury segregation of duties.

How CryptOps approaches this

CryptOps.ai is a live digital-asset operations and transaction-control platform built by StratEdge Workflow Systems. It is designed as a non-custodial check before broadcast that evaluates each outbound transfer on its own terms, whatever upstream systems approved. It scores the transfer, returns Block, Hold or Clear with the rules that fired, requires out-of-band dual control where policy calls for it, and writes an audit trail.

We know only what Bitget and Blockstream have published about their systems. We do not claim that CryptOps, or any product, would have prevented either incident.

Sources

  1. Bitget, “Bitget Security Incident” official progress update (last updated 4 October 2026, 00:00 UTC)
  2. Blockstream, “Liquid Network Security Incident Assessment” (23 September 2026; republished on the Liquid blog 25 September 2026)
  3. Security Alliance (SEAL) Frameworks, Treasury Operations, “Guide: Large Cryptocurrency Transfers”
  4. Security Alliance (SEAL) Frameworks, Multisig for Protocols, “Key Takeaways”
  5. Tsuchiya, Dong, Soska, Christin, “Blockchain Address Poisoning”, USENIX Security 2025

How to cite

StratEdge Workflow Systems (2026). Pre-Signing Transaction Verification for Institutional Wallets. https://cryptops.ai/research/pre-signing-transaction-verification. Published October 4, 2026. Accessed [date].

For individual facts and figures, cite the primary source listed above.