Skip to main content
@eco-incorp/sauce/verify validates an EVM settlement payload against the pinned settle program (SETTLE_WIRE: compiler 2.3.0, 356 bytes) and decodes its runtime argument tail. It depends on viem only, so it runs in browsers and edge runtimes without loading the compiler. This page covers sdk/dist/verify/vectors.d.ts.
Generated from the type declarations shipped in @eco-incorp/sauce 0.99.4. Each entry shows the package authors’ JSDoc and declaration for this SDK version. For runtime compatibility and deployed addresses, see architecture and deployments.

SETTLE_PROGRAM

Variable · sdk/dist/verify/vectors.d.ts The compiled recipes/settle.sauce.ts program - 356 bytes, measured by compiling it with the published Rust compiler (@eco-incorp/sauce-compiler) against the package’s own artifacts/IERC20.json. ONE constant covers the whole corpus because the program is INVARIANT: main takes (tokens, minOut, recipient) as runtime entry arguments, so no caller value reaches the compiler. That is the property the appended-args model rests on, and verify.compile.test.ts recompiles this and compares - a LIVE pin, unlike the v1 corpus it replaces, whose compiler no longer exists.

SETTLE_VECTORS

Variable · sdk/dist/verify/vectors.d.ts Golden wire-format vectors - the Go/Solidity/Python conformance corpus, and the definition of the layout for anyone reimplementing the decoder. Each args tail is proven by EXECUTION, not by construction: verify-execution.e2e.test.ts runs settlePayload(v.args) on a real v12 runtime against real ERC20s and asserts the engine sweeps exactly v.tokens to v.recipient under v.minOut. The bytes below are what the engine reads, not what this package’s encoder happens to emit. v3 carries Z = 0x0000000000000000000000000000000000ff00aa - the address the retired v1 corpus used as its trap, because a minimal-length PUSH squeezed it into 3 bytes and a fixed 20-byte read misframed everything after it. On THIS wire it is an ordinary 32-byte word: the layout is fixed-width, so leading zero bytes cost nothing and mean nothing. The hazard moved, and SETTLE_REJECTIONS is where it went.

SETTLE_REJECTIONS

Variable · sdk/dist/verify/vectors.d.ts Payloads a conformant decoder MUST refuse - the successor to the v1 corpus’s v3 trap. The engineAccepts rows are the trap proper, and they are the reason this corpus exists at all: the engine RUNS them and produces exactly the behavior of the canonical payload beside them, so they are distinct byte strings with identical meaning. A decoder that accepts any of them is not injective, and encodeSettleProgram re-encode-and-compare stops agreeing with decode-and-compare. upperBytes is the sharpest: the engine masks a call target to 160 bits, so twelve arbitrary bytes ride along in a token word and sweep the very same token. Each vector’s code is reachable under ANY check order, so a Go or Solidity reimplementation is not required to match this decoder’s sequence to pass. tokensPointer is the one that has to be built for that: its padding word is 0x02 so that the count read at the canonical offset agrees with the tail length, leaving the non-canonical pointer as the only complaint. A length-first decoder and a pointer-first decoder both report TOKENS_OFFSET. (The engine reads its array from offset 128, so that word is not in its read path — engineAccepts is unaffected by its value.)

settlePayload

Function · sdk/dist/verify/vectors.d.ts The full on-the-wire payload for a vector’s tail: program || args. Exported from ./verify, so it takes a caller’s hex rather than only this file’s literals: an unprefixed tail would otherwise lose its first byte to the slice and resurface as a puzzling ARGS_TRUNCATED, and a 0X prefix - which the decoder itself tolerates - would produce garbage. Requires the canonical 0x, consistent with encodeSettleProgram’s inputs.

ConformanceVector

Interface · sdk/dist/verify/vectors.d.ts

RejectionVector

Interface · sdk/dist/verify/vectors.d.ts