Wallet-policy test cases The team, quote, balances and results are invented for an educational example. These tests do not verify an active custody policy. Replace account and contract aliases with verified identities in a controlled native test workflow. USDC amounts use six decimals. WETH amounts use eighteen decimals. Amount strings are raw units. Times are example seconds. PROCEED_IN_MODEL means the example policy allows the request, both independent approvers are present and the assumed simulation results is complete. Otherwise the review decision is HOLD. Identities: TradingWallet: The team trading wallet ApprovedRouter: The exact approved Ethereum Uniswap v3 SwapRouter deployment, to be identified before a native test TradeOp: The authorized trading account OtherOp: An account without trading permission ApproverOne: The first independent approver ApproverTwo: The second independent approver OtherWallet: A wallet outside the permitted proceeds destination Swap assumptions: method: exactInputSingle fee: 3000 sqrtPriceLimitX96: 0 quote_output_weth_raw: 400000000000000000 minimum_output_weth_raw: 396000000000000000 starting_wallet_usdc_raw: 50000000000 receiver_field: The receiver input below maps to the recipient argument in the router ABI. These are decoded test fields, not broadcastable transaction payloads. WP-01: Swap 1,000 USDC for at least 0.396 WETH back to the trading wallet. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: ALLOW Expected review: PROCEED_IN_MODEL Reason: The swap conditions, independent approvals and assumed simulation results are complete. Checks still required: Native active-policy revision, encoded request, authenticated identities, rule trace and fresh exact-request simulation. No native test has been run. WP-02: Redirect the same swap output under the flawed policy. Policy: v1 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: OtherWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: False approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: ALLOW Expected review: HOLD Reason: V1 omits the receiver condition. Expected effects violate the custody instruction. Checks still required: Native V1 rule trace and isolated simulation showing the output recipient. Do not broadcast the unwanted transfer. WP-03: Attempt output redirection under the receiver fix. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: OtherWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: V2 requires receiver = TradingWallet. Checks still required: Native rejection and matched default-block rule for the altered encoded receiver. WP-04: Try the wrong receiver when a broad allow comes first. Policy: broad_first Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: OtherWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: False approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: ALLOW Expected review: HOLD Reason: The earlier router allow matches before the later receiver block. Checks still required: Full effective ordered policy and native evaluation trace proving which rule wins. WP-05: Submit a swap with the receiver field missing. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: None deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: A missing receiver cannot equal TradingWallet. Checks still required: Native decoder behavior for an absent or truncated receiver and confirmation of rejection. WP-06: Exceed the input ceiling by one raw unit. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000001 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: The input exceeds 1,000 USDC by 0.000001 USDC. Checks still required: Native raw-unit interpretation and amount boundary rejection. WP-07: Buy a different output asset. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: Token C amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: Only WETH is permitted. Checks still required: Exact token addresses, chain and native rejection of the changed asset. WP-08: Wrap the request in an unsupported batch method. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: multicall decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: The single-swap allow does not cover batches. Checks still required: Native batch decoding and confirmation that no other rule admits the wrapper. WP-09: Grant the exact next-trade allowance from a zero starting allowance. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: USDC method: approve decoded: True token_in: None token_out: None amount_in: None min_out: None receiver: None deadline: None spender: ApprovedRouter approval_amount: 1000000000 fee: None sqrt_price_limit_x96: None Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: ALLOW Expected review: PROCEED_IN_MODEL Reason: The separate approval rule permits exactly 1,000 USDC to ApprovedRouter. Checks still required: Native zero starting allowance, spender identity, approval trace and post-approval allowance. WP-10: Grant an unlimited token allowance. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: USDC method: approve decoded: True token_in: None token_out: None amount_in: None min_out: None receiver: None deadline: None spender: ApprovedRouter approval_amount: 115792089237316195423570985008687907853269984665640564039457584007913129639935 fee: None sqrt_price_limit_x96: None Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: The approval amount is neither zero nor exactly 1,000 USDC. Checks still required: Native rejection of maximum uint256 approval and remaining allowance inventory. WP-11: Approve one raw unit more than the next trade. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: USDC method: approve decoded: True token_in: None token_out: None amount_in: None min_out: None receiver: None deadline: None spender: ApprovedRouter approval_amount: 1000000001 fee: None sqrt_price_limit_x96: None Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: The separate approval rule rejects an amount above the exact allowance. Checks still required: Native approval-amount boundary rejection. The swap ceiling alone is insufficient. WP-12: Propose the otherwise valid swap as OtherOp. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: OtherOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: Only authenticated TradeOp may initiate this permission. Checks still required: Native credential-to-initiator mapping and unauthorized-initiation result. WP-13: Count the same approver twice for the valid swap. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverOne'] Expected policy: ALLOW Expected review: HOLD Reason: The swap fits the policy but the independent approval pair is absent. Checks still required: Native distinct-approver enforcement, group membership and binding to the exact transaction. WP-14: Request signing without available simulation results. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: True token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: False exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: ALLOW Expected review: HOLD Reason: A policy match cannot replace missing simulation results. Checks still required: Fresh exact-request simulation with trace, balance changes, allowances and snapshot identity. WP-15: Submit calldata that cannot be decoded. Policy: v2 Inputs: chain: Ethereum source: TradingWallet initiator: TradeOp operation: CALL native_value: 0 destination: ApprovedRouter method: exactInputSingle decoded: False token_in: USDC token_out: WETH amount_in: 1000000000 min_out: 396000000000000000 receiver: TradingWallet deadline: 1120 spender: None approval_amount: None fee: 3000 sqrt_price_limit_x96: 0 Assumed checks: snapshot_time: 1000 simulation_available: True exact_request: True successful: True effects_match_intent: True approvers: ['ApproverOne', 'ApproverTwo'] Expected policy: BLOCK Expected review: HOLD Reason: Unreadable calldata cannot satisfy the narrow method and argument checks. Checks still required: Native malformed-payload rejection and confirmation of the default behavior on decode failure.