@eco-incorp/sauce 0.99.6 → 0.99.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -16
- package/actions/action-program.schema.json +480 -379
- package/actions/dist/abis.d.ts +19 -18
- package/actions/dist/abis.d.ts.map +1 -1
- package/actions/dist/abis.js +29 -29
- package/actions/dist/compile.d.ts +4 -4
- package/actions/dist/compile.d.ts.map +1 -1
- package/actions/dist/compile.js +3 -1
- package/actions/dist/compose.d.ts +63 -6
- package/actions/dist/compose.d.ts.map +1 -1
- package/actions/dist/compose.js +100 -16
- package/actions/dist/index.d.ts +1 -1
- package/actions/dist/index.d.ts.map +1 -1
- package/actions/dist/names.d.ts +88 -0
- package/actions/dist/names.d.ts.map +1 -0
- package/actions/dist/names.js +334 -0
- package/actions/dist/program.d.ts.map +1 -1
- package/actions/dist/program.js +115 -5
- package/actions/dist/registry.d.ts +10 -8
- package/actions/dist/registry.d.ts.map +1 -1
- package/actions/dist/registry.js +10 -8
- package/actions/dist/schema.d.ts.map +1 -1
- package/actions/dist/schema.js +99 -12
- package/actions/dist/semantics.d.ts +12 -2
- package/actions/dist/semantics.d.ts.map +1 -1
- package/actions/dist/semantics.js +78 -8
- package/actions/dist/spec.d.ts +30 -0
- package/actions/dist/spec.d.ts.map +1 -1
- package/actions/dist/spec.js +151 -138
- package/actions/dist/split-swap.d.ts +10 -5
- package/actions/dist/split-swap.d.ts.map +1 -1
- package/actions/dist/split-swap.js +48 -7
- package/actions/dist/to-quote.d.ts +14 -5
- package/actions/dist/to-quote.d.ts.map +1 -1
- package/actions/dist/to-quote.js +210 -244
- package/actions/dist/to-sauce.d.ts +18 -4
- package/actions/dist/to-sauce.d.ts.map +1 -1
- package/actions/dist/to-sauce.js +232 -205
- package/actions/dist/types.d.ts +245 -147
- package/actions/dist/types.d.ts.map +1 -1
- package/actions/dist/types.js +4 -0
- package/docs/README.md +38 -0
- package/docs/api/README.md +37 -23
- package/docs/api/compiler.md +53 -12
- package/docs/api/contracts.md +105 -0
- package/docs/api/coverage.md +96 -57
- package/docs/api/router.md +238 -0
- package/docs/api/routes.md +31 -22
- package/docs/concepts/architecture.md +26 -3
- package/docs/concepts/saucescript.md +35 -55
- package/docs/examples/README.md +21 -14
- package/docs/examples/action-program.ts +51 -35
- package/docs/examples/cross-chain-cascade.sauce.ts +4 -0
- package/docs/examples/cross-chain-intent.sauce.ts +2 -1
- package/docs/examples/evm-execution.ts +2 -4
- package/docs/examples/first-intent.ts +7 -2
- package/docs/examples/pot-router.ts +19 -0
- package/docs/examples/registry-names.ts +52 -0
- package/docs/examples/router-route.sauce.ts +31 -0
- package/docs/examples/router-route.ts +72 -0
- package/docs/examples/router-swap.sauce.ts +16 -0
- package/docs/examples/router-swap.ts +47 -0
- package/docs/examples/venue-where-deployed.sauce.ts +14 -0
- package/docs/guides/actions.md +230 -120
- package/docs/guides/builders-and-actions.md +20 -14
- package/docs/guides/cli.md +1446 -0
- package/docs/guides/compiling.md +19 -7
- package/docs/guides/intents.md +228 -15
- package/docs/guides/mcp.md +540 -0
- package/docs/guides/nested-intents.md +21 -6
- package/docs/guides/protocols-and-tokens.md +218 -39
- package/docs/guides/quick-start.md +5 -0
- package/docs/guides/solana.md +199 -52
- package/docs/guides/verification.md +2 -2
- package/mcp/dist/config.js +78 -0
- package/mcp/dist/config.js.map +1 -0
- package/mcp/dist/entry.js +112 -0
- package/mcp/dist/entry.js.map +1 -0
- package/mcp/dist/files.js +64 -0
- package/mcp/dist/files.js.map +1 -0
- package/mcp/dist/guard.js +262 -0
- package/mcp/dist/guard.js.map +1 -0
- package/mcp/dist/http.js +111 -0
- package/mcp/dist/http.js.map +1 -0
- package/mcp/dist/intents.js +579 -0
- package/mcp/dist/intents.js.map +1 -0
- package/mcp/dist/prompts.js +153 -0
- package/mcp/dist/prompts.js.map +1 -0
- package/mcp/dist/reach.js +98 -0
- package/mcp/dist/reach.js.map +1 -0
- package/mcp/dist/resources.js +154 -0
- package/mcp/dist/resources.js.map +1 -0
- package/mcp/dist/sdk.js +34 -0
- package/mcp/dist/sdk.js.map +1 -0
- package/mcp/dist/server.js +119 -0
- package/mcp/dist/server.js.map +1 -0
- package/mcp/dist/setup.js +189 -0
- package/mcp/dist/setup.js.map +1 -0
- package/mcp/dist/skilltools.js +520 -0
- package/mcp/dist/skilltools.js.map +1 -0
- package/mcp/dist/terms.js +93 -0
- package/mcp/dist/terms.js.map +1 -0
- package/mcp/dist/tools.js +1499 -0
- package/mcp/dist/tools.js.map +1 -0
- package/mcp/dist/wallets.js +168 -0
- package/mcp/dist/wallets.js.map +1 -0
- package/package.json +18 -13
- package/sdk/dist/artifacts/V12Deployments.json +3 -1
- package/sdk/dist/artifacts/V12EngineGate.json +1 -2
- package/sdk/dist/artifacts/V12KitchenProxy.json +1 -0
- package/sdk/dist/chains/canonical.d.ts +15 -24
- package/sdk/dist/chains/canonical.d.ts.map +1 -1
- package/sdk/dist/chains/canonical.js +18 -29
- package/sdk/dist/chains/canonical.js.map +1 -1
- package/sdk/dist/cli/actions.d.ts +29 -0
- package/sdk/dist/cli/actions.d.ts.map +1 -0
- package/sdk/dist/cli/actions.js +122 -0
- package/sdk/dist/cli/actions.js.map +1 -0
- package/sdk/dist/cli/args.d.ts +118 -0
- package/sdk/dist/cli/args.d.ts.map +1 -0
- package/sdk/dist/cli/args.js +354 -0
- package/sdk/dist/cli/args.js.map +1 -0
- package/sdk/dist/cli/assume.d.ts +51 -0
- package/sdk/dist/cli/assume.d.ts.map +1 -0
- package/sdk/dist/cli/assume.js +207 -0
- package/sdk/dist/cli/assume.js.map +1 -0
- package/sdk/dist/cli/chain.d.ts +173 -0
- package/sdk/dist/cli/chain.d.ts.map +1 -0
- package/sdk/dist/cli/chain.js +462 -0
- package/sdk/dist/cli/chain.js.map +1 -0
- package/sdk/dist/cli/commands.d.ts +226 -0
- package/sdk/dist/cli/commands.d.ts.map +1 -0
- package/sdk/dist/cli/commands.js +637 -0
- package/sdk/dist/cli/commands.js.map +1 -0
- package/sdk/dist/cli/create.d.ts +70 -0
- package/sdk/dist/cli/create.d.ts.map +1 -0
- package/sdk/dist/cli/create.js +483 -0
- package/sdk/dist/cli/create.js.map +1 -0
- package/sdk/dist/cli/diagnostics.d.ts +12 -0
- package/sdk/dist/cli/diagnostics.d.ts.map +1 -0
- package/sdk/dist/cli/diagnostics.js +225 -0
- package/sdk/dist/cli/diagnostics.js.map +1 -0
- package/sdk/dist/cli/effects.d.ts +71 -0
- package/sdk/dist/cli/effects.d.ts.map +1 -0
- package/sdk/dist/cli/effects.js +279 -0
- package/sdk/dist/cli/effects.js.map +1 -0
- package/sdk/dist/cli/fill.d.ts +83 -0
- package/sdk/dist/cli/fill.d.ts.map +1 -0
- package/sdk/dist/cli/fill.js +734 -0
- package/sdk/dist/cli/fill.js.map +1 -0
- package/sdk/dist/cli/funding.d.ts +126 -0
- package/sdk/dist/cli/funding.d.ts.map +1 -0
- package/sdk/dist/cli/funding.js +514 -0
- package/sdk/dist/cli/funding.js.map +1 -0
- package/sdk/dist/cli/globals.d.ts +16 -0
- package/sdk/dist/cli/globals.d.ts.map +1 -0
- package/sdk/dist/cli/globals.js +219 -0
- package/sdk/dist/cli/globals.js.map +1 -0
- package/sdk/dist/cli/init.d.ts +34 -0
- package/sdk/dist/cli/init.d.ts.map +1 -0
- package/sdk/dist/cli/init.js +181 -0
- package/sdk/dist/cli/init.js.map +1 -0
- package/sdk/dist/cli/inputs.d.ts +72 -0
- package/sdk/dist/cli/inputs.d.ts.map +1 -0
- package/sdk/dist/cli/inputs.js +152 -0
- package/sdk/dist/cli/inputs.js.map +1 -0
- package/sdk/dist/cli/inspect.d.ts +48 -0
- package/sdk/dist/cli/inspect.d.ts.map +1 -0
- package/sdk/dist/cli/inspect.js +536 -0
- package/sdk/dist/cli/inspect.js.map +1 -0
- package/sdk/dist/cli/intent-commands.d.ts +71 -0
- package/sdk/dist/cli/intent-commands.d.ts.map +1 -0
- package/sdk/dist/cli/intent-commands.js +698 -0
- package/sdk/dist/cli/intent-commands.js.map +1 -0
- package/sdk/dist/cli/intent-svm.d.ts +15 -0
- package/sdk/dist/cli/intent-svm.d.ts.map +1 -0
- package/sdk/dist/cli/intent-svm.js +222 -0
- package/sdk/dist/cli/intent-svm.js.map +1 -0
- package/sdk/dist/cli/intents.d.ts +43 -0
- package/sdk/dist/cli/intents.d.ts.map +1 -0
- package/sdk/dist/cli/intents.js +89 -0
- package/sdk/dist/cli/intents.js.map +1 -0
- package/sdk/dist/cli/interactive.d.ts +11 -0
- package/sdk/dist/cli/interactive.d.ts.map +1 -0
- package/sdk/dist/cli/interactive.js +161 -0
- package/sdk/dist/cli/interactive.js.map +1 -0
- package/sdk/dist/cli/lifecycle-svm.d.ts +109 -0
- package/sdk/dist/cli/lifecycle-svm.d.ts.map +1 -0
- package/sdk/dist/cli/lifecycle-svm.js +299 -0
- package/sdk/dist/cli/lifecycle-svm.js.map +1 -0
- package/sdk/dist/cli/lifecycle.d.ts +439 -0
- package/sdk/dist/cli/lifecycle.d.ts.map +1 -0
- package/sdk/dist/cli/lifecycle.js +1721 -0
- package/sdk/dist/cli/lifecycle.js.map +1 -0
- package/sdk/dist/cli/main.d.ts +3 -0
- package/sdk/dist/cli/main.d.ts.map +1 -0
- package/sdk/dist/cli/main.js +8 -0
- package/sdk/dist/cli/main.js.map +1 -0
- package/sdk/dist/cli/mcp.d.ts +66 -0
- package/sdk/dist/cli/mcp.d.ts.map +1 -0
- package/sdk/dist/cli/mcp.js +169 -0
- package/sdk/dist/cli/mcp.js.map +1 -0
- package/sdk/dist/cli/password.d.ts +54 -0
- package/sdk/dist/cli/password.d.ts.map +1 -0
- package/sdk/dist/cli/password.js +148 -0
- package/sdk/dist/cli/password.js.map +1 -0
- package/sdk/dist/cli/policy.d.ts +130 -0
- package/sdk/dist/cli/policy.d.ts.map +1 -0
- package/sdk/dist/cli/policy.js +702 -0
- package/sdk/dist/cli/policy.js.map +1 -0
- package/sdk/dist/cli/pools.d.ts +140 -0
- package/sdk/dist/cli/pools.d.ts.map +1 -0
- package/sdk/dist/cli/pools.js +658 -0
- package/sdk/dist/cli/pools.js.map +1 -0
- package/sdk/dist/cli/price.d.ts +74 -0
- package/sdk/dist/cli/price.d.ts.map +1 -0
- package/sdk/dist/cli/price.js +321 -0
- package/sdk/dist/cli/price.js.map +1 -0
- package/sdk/dist/cli/prompt.d.ts +30 -0
- package/sdk/dist/cli/prompt.d.ts.map +1 -0
- package/sdk/dist/cli/prompt.js +53 -0
- package/sdk/dist/cli/prompt.js.map +1 -0
- package/sdk/dist/cli/publish.d.ts +48 -0
- package/sdk/dist/cli/publish.d.ts.map +1 -0
- package/sdk/dist/cli/publish.js +480 -0
- package/sdk/dist/cli/publish.js.map +1 -0
- package/sdk/dist/cli/receipt.d.ts +35 -0
- package/sdk/dist/cli/receipt.d.ts.map +1 -0
- package/sdk/dist/cli/receipt.js +63 -0
- package/sdk/dist/cli/receipt.js.map +1 -0
- package/sdk/dist/cli/rehearse.d.ts +80 -0
- package/sdk/dist/cli/rehearse.d.ts.map +1 -0
- package/sdk/dist/cli/rehearse.js +265 -0
- package/sdk/dist/cli/rehearse.js.map +1 -0
- package/sdk/dist/cli/report.d.ts +69 -0
- package/sdk/dist/cli/report.d.ts.map +1 -0
- package/sdk/dist/cli/report.js +206 -0
- package/sdk/dist/cli/report.js.map +1 -0
- package/sdk/dist/cli/returned.d.ts +16 -0
- package/sdk/dist/cli/returned.d.ts.map +1 -0
- package/sdk/dist/cli/returned.js +111 -0
- package/sdk/dist/cli/returned.js.map +1 -0
- package/sdk/dist/cli/run.d.ts +40 -0
- package/sdk/dist/cli/run.d.ts.map +1 -0
- package/sdk/dist/cli/run.js +3163 -0
- package/sdk/dist/cli/run.js.map +1 -0
- package/sdk/dist/cli/signer.d.ts +72 -0
- package/sdk/dist/cli/signer.d.ts.map +1 -0
- package/sdk/dist/cli/signer.js +243 -0
- package/sdk/dist/cli/signer.js.map +1 -0
- package/sdk/dist/cli/simulate.d.ts +11 -0
- package/sdk/dist/cli/simulate.d.ts.map +1 -0
- package/sdk/dist/cli/simulate.js +246 -0
- package/sdk/dist/cli/simulate.js.map +1 -0
- package/sdk/dist/cli/skills.d.ts +77 -0
- package/sdk/dist/cli/skills.d.ts.map +1 -0
- package/sdk/dist/cli/skills.js +527 -0
- package/sdk/dist/cli/skills.js.map +1 -0
- package/sdk/dist/cli/solana.d.ts +184 -0
- package/sdk/dist/cli/solana.d.ts.map +1 -0
- package/sdk/dist/cli/solana.js +1370 -0
- package/sdk/dist/cli/solana.js.map +1 -0
- package/sdk/dist/cli/store.d.ts +60 -0
- package/sdk/dist/cli/store.d.ts.map +1 -0
- package/sdk/dist/cli/store.js +196 -0
- package/sdk/dist/cli/store.js.map +1 -0
- package/sdk/dist/cli/support.d.ts +144 -0
- package/sdk/dist/cli/support.d.ts.map +1 -0
- package/sdk/dist/cli/support.js +217 -0
- package/sdk/dist/cli/support.js.map +1 -0
- package/sdk/dist/cli/svm-effects.d.ts +50 -0
- package/sdk/dist/cli/svm-effects.d.ts.map +1 -0
- package/sdk/dist/cli/svm-effects.js +196 -0
- package/sdk/dist/cli/svm-effects.js.map +1 -0
- package/sdk/dist/cli/terminal.d.ts +42 -0
- package/sdk/dist/cli/terminal.d.ts.map +1 -0
- package/sdk/dist/cli/terminal.js +136 -0
- package/sdk/dist/cli/terminal.js.map +1 -0
- package/sdk/dist/cli/verify.d.ts +32 -0
- package/sdk/dist/cli/verify.d.ts.map +1 -0
- package/sdk/dist/cli/verify.js +185 -0
- package/sdk/dist/cli/verify.js.map +1 -0
- package/sdk/dist/cli/wallet-commands.d.ts +59 -0
- package/sdk/dist/cli/wallet-commands.d.ts.map +1 -0
- package/sdk/dist/cli/wallet-commands.js +222 -0
- package/sdk/dist/cli/wallet-commands.js.map +1 -0
- package/sdk/dist/cli/wallet-send.d.ts +38 -0
- package/sdk/dist/cli/wallet-send.d.ts.map +1 -0
- package/sdk/dist/cli/wallet-send.js +303 -0
- package/sdk/dist/cli/wallet-send.js.map +1 -0
- package/sdk/dist/cli/wallets.d.ts +79 -0
- package/sdk/dist/cli/wallets.d.ts.map +1 -0
- package/sdk/dist/cli/wallets.js +297 -0
- package/sdk/dist/cli/wallets.js.map +1 -0
- package/sdk/dist/deployments/index.d.ts +4 -62
- package/sdk/dist/deployments/index.d.ts.map +1 -1
- package/sdk/dist/deployments/index.js +4 -84
- package/sdk/dist/deployments/index.js.map +1 -1
- package/sdk/dist/deployments/pot.d.ts +17 -7
- package/sdk/dist/deployments/pot.d.ts.map +1 -1
- package/sdk/dist/deployments/pot.js +25 -10
- package/sdk/dist/deployments/pot.js.map +1 -1
- package/sdk/dist/deployments/releases.d.ts +36 -0
- package/sdk/dist/deployments/releases.d.ts.map +1 -0
- package/sdk/dist/deployments/releases.js +61 -0
- package/sdk/dist/deployments/releases.js.map +1 -0
- package/sdk/dist/deployments/releases.json +76 -0
- package/sdk/dist/deployments/v12-addresses.d.ts +13 -0
- package/sdk/dist/deployments/v12-addresses.d.ts.map +1 -1
- package/sdk/dist/deployments/v12-addresses.js +16 -3
- package/sdk/dist/deployments/v12-addresses.js.map +1 -1
- package/sdk/dist/deposit/index.d.ts +6 -6
- package/sdk/dist/deposit/index.d.ts.map +1 -1
- package/sdk/dist/deposit/index.js +1 -1
- package/sdk/dist/deposit/index.js.map +1 -1
- package/sdk/dist/deposit/params.d.ts +4 -4
- package/sdk/dist/deposit/params.d.ts.map +1 -1
- package/sdk/dist/deposit/params.js +7 -4
- package/sdk/dist/deposit/params.js.map +1 -1
- package/sdk/dist/deposit/source.d.ts +3 -30
- package/sdk/dist/deposit/source.d.ts.map +1 -1
- package/sdk/dist/deposit/source.js +7 -83
- package/sdk/dist/deposit/source.js.map +1 -1
- package/sdk/dist/deposit/templates.d.ts +1 -2
- package/sdk/dist/deposit/templates.d.ts.map +1 -1
- package/sdk/dist/deposit/templates.js +10 -2
- package/sdk/dist/deposit/templates.js.map +1 -1
- package/sdk/dist/deposit/types.d.ts +14 -12
- package/sdk/dist/deposit/types.d.ts.map +1 -1
- package/sdk/dist/deposit/types.js +6 -0
- package/sdk/dist/deposit/types.js.map +1 -1
- package/sdk/dist/descriptors/accessors.d.ts +38 -35
- package/sdk/dist/descriptors/accessors.d.ts.map +1 -1
- package/sdk/dist/descriptors/accessors.js +16 -0
- package/sdk/dist/descriptors/accessors.js.map +1 -1
- package/sdk/dist/descriptors/call.d.ts +66 -14
- package/sdk/dist/descriptors/call.d.ts.map +1 -1
- package/sdk/dist/descriptors/call.js +94 -13
- package/sdk/dist/descriptors/call.js.map +1 -1
- package/sdk/dist/descriptors/contracts.generated.d.ts +3393 -0
- package/sdk/dist/descriptors/contracts.generated.d.ts.map +1 -0
- package/sdk/dist/descriptors/contracts.generated.js +728 -0
- package/sdk/dist/descriptors/contracts.generated.js.map +1 -0
- package/sdk/dist/descriptors/derive.d.ts +20 -11
- package/sdk/dist/descriptors/derive.d.ts.map +1 -1
- package/sdk/dist/descriptors/derive.js +68 -30
- package/sdk/dist/descriptors/derive.js.map +1 -1
- package/sdk/dist/descriptors/index.d.ts +6 -7
- package/sdk/dist/descriptors/index.d.ts.map +1 -1
- package/sdk/dist/descriptors/index.js +2 -2
- package/sdk/dist/descriptors/index.js.map +1 -1
- package/sdk/dist/descriptors/links.d.ts +23 -214
- package/sdk/dist/descriptors/links.d.ts.map +1 -1
- package/sdk/dist/descriptors/links.js +1 -232
- package/sdk/dist/descriptors/links.js.map +1 -1
- package/sdk/dist/descriptors/query.d.ts +1 -1
- package/sdk/dist/descriptors/query.d.ts.map +1 -1
- package/sdk/dist/descriptors/query.js +1 -1
- package/sdk/dist/descriptors/query.js.map +1 -1
- package/sdk/dist/descriptors/registry.d.ts +2 -5
- package/sdk/dist/descriptors/registry.d.ts.map +1 -1
- package/sdk/dist/descriptors/registry.js +11 -66
- package/sdk/dist/descriptors/registry.js.map +1 -1
- package/sdk/dist/embedded/resolve.d.ts +4 -4
- package/sdk/dist/embedded/resolve.d.ts.map +1 -1
- package/sdk/dist/embedded/resolve.js +12 -8
- package/sdk/dist/embedded/resolve.js.map +1 -1
- package/sdk/dist/embedded/skills.generated.d.ts +1 -1
- package/sdk/dist/embedded/skills.generated.d.ts.map +1 -1
- package/sdk/dist/embedded/skills.generated.js +137 -136
- package/sdk/dist/embedded/skills.generated.js.map +1 -1
- package/sdk/dist/embedded/sources.generated.d.ts.map +1 -1
- package/sdk/dist/embedded/sources.generated.js +40 -6
- package/sdk/dist/embedded/sources.generated.js.map +1 -1
- package/sdk/dist/evm/engine.d.ts +813 -10
- package/sdk/dist/evm/engine.d.ts.map +1 -1
- package/sdk/dist/evm/engine.js +127 -8
- package/sdk/dist/evm/engine.js.map +1 -1
- package/sdk/dist/index.d.ts +3 -2
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +6 -2
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/price.d.ts +40 -0
- package/sdk/dist/price.d.ts.map +1 -0
- package/sdk/dist/price.js +101 -0
- package/sdk/dist/price.js.map +1 -0
- package/sdk/dist/protocols/aerodrome/abis.d.ts +76 -0
- package/sdk/dist/protocols/aerodrome/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/aerodrome/abis.js +61 -0
- package/sdk/dist/protocols/aerodrome/abis.js.map +1 -1
- package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts +70 -0
- package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/aerodrome-slipstream/abis.js +54 -0
- package/sdk/dist/protocols/aerodrome-slipstream/abis.js.map +1 -1
- package/sdk/dist/protocols/camelot/abis.d.ts +178 -0
- package/sdk/dist/protocols/camelot/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/camelot/abis.js +139 -0
- package/sdk/dist/protocols/camelot/abis.js.map +1 -1
- package/sdk/dist/protocols/eco-routes/abis.d.ts +792 -50
- package/sdk/dist/protocols/eco-routes/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/eco-routes/abis.js +1058 -49
- package/sdk/dist/protocols/eco-routes/abis.js.map +1 -1
- package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts +44 -61
- package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts.map +1 -1
- package/sdk/dist/protocols/eco-routes/addresses.generated.js +45 -62
- package/sdk/dist/protocols/eco-routes/addresses.generated.js.map +1 -1
- package/sdk/dist/protocols/eco-routes/lookup.d.ts +10 -0
- package/sdk/dist/protocols/eco-routes/lookup.d.ts.map +1 -1
- package/sdk/dist/protocols/eco-routes/lookup.js +16 -0
- package/sdk/dist/protocols/eco-routes/lookup.js.map +1 -1
- package/sdk/dist/protocols/maverick/abis.d.ts +77 -0
- package/sdk/dist/protocols/maverick/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/maverick/abis.js +58 -0
- package/sdk/dist/protocols/maverick/abis.js.map +1 -1
- package/sdk/dist/protocols/maverick/addresses.d.ts.map +1 -1
- package/sdk/dist/protocols/maverick/addresses.js +4 -0
- package/sdk/dist/protocols/maverick/addresses.js.map +1 -1
- package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts +52 -0
- package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/pancakeswap-v2/abis.js +43 -0
- package/sdk/dist/protocols/pancakeswap-v2/abis.js.map +1 -1
- package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts +73 -0
- package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/pancakeswap-v3/abis.js +56 -0
- package/sdk/dist/protocols/pancakeswap-v3/abis.js.map +1 -1
- package/sdk/dist/protocols/permit2/abis.d.ts +113 -0
- package/sdk/dist/protocols/permit2/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/permit2/abis.js +63 -0
- package/sdk/dist/protocols/permit2/abis.js.map +1 -1
- package/sdk/dist/protocols/quickswap/abis.d.ts +148 -0
- package/sdk/dist/protocols/quickswap/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/quickswap/abis.js +119 -0
- package/sdk/dist/protocols/quickswap/abis.js.map +1 -1
- package/sdk/dist/protocols/sushiswap-v2/abis.d.ts +52 -0
- package/sdk/dist/protocols/sushiswap-v2/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/sushiswap-v2/abis.js +42 -0
- package/sdk/dist/protocols/sushiswap-v2/abis.js.map +1 -1
- package/sdk/dist/protocols/synthra-v3/abis.d.ts +73 -0
- package/sdk/dist/protocols/synthra-v3/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/synthra-v3/abis.js +55 -0
- package/sdk/dist/protocols/synthra-v3/abis.js.map +1 -1
- package/sdk/dist/protocols/trader-joe/abis.d.ts +133 -0
- package/sdk/dist/protocols/trader-joe/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/trader-joe/abis.js +101 -0
- package/sdk/dist/protocols/trader-joe/abis.js.map +1 -1
- package/sdk/dist/protocols/trader-joe/addresses.d.ts.map +1 -1
- package/sdk/dist/protocols/trader-joe/addresses.js +5 -0
- package/sdk/dist/protocols/trader-joe/addresses.js.map +1 -1
- package/sdk/dist/protocols/uniswap-v2/abis.d.ts +52 -0
- package/sdk/dist/protocols/uniswap-v2/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/uniswap-v2/abis.js +44 -0
- package/sdk/dist/protocols/uniswap-v2/abis.js.map +1 -1
- package/sdk/dist/protocols/uniswap-v3/abis.d.ts +73 -0
- package/sdk/dist/protocols/uniswap-v3/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/uniswap-v3/abis.js +55 -0
- package/sdk/dist/protocols/uniswap-v3/abis.js.map +1 -1
- package/sdk/dist/protocols/uniswap-v4/abis.d.ts +247 -0
- package/sdk/dist/protocols/uniswap-v4/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/uniswap-v4/abis.js +167 -0
- package/sdk/dist/protocols/uniswap-v4/abis.js.map +1 -1
- package/sdk/dist/protocols/uniswap-v4/addresses.d.ts.map +1 -1
- package/sdk/dist/protocols/uniswap-v4/addresses.js +50 -0
- package/sdk/dist/protocols/uniswap-v4/addresses.js.map +1 -1
- package/sdk/dist/protocols/unitflow-v3/abis.d.ts +73 -0
- package/sdk/dist/protocols/unitflow-v3/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/unitflow-v3/abis.js +56 -0
- package/sdk/dist/protocols/unitflow-v3/abis.js.map +1 -1
- package/sdk/dist/protocols/velodrome/abis.d.ts +76 -0
- package/sdk/dist/protocols/velodrome/abis.d.ts.map +1 -1
- package/sdk/dist/protocols/velodrome/abis.js +61 -0
- package/sdk/dist/protocols/velodrome/abis.js.map +1 -1
- package/sdk/dist/recipes/cctp-split.sauce.ts +2 -2
- package/sdk/dist/recipes/plain-transfer.sauce.ts +2 -2
- package/sdk/dist/routes/accessor-index.d.ts +2 -2
- package/sdk/dist/routes/accessor-index.d.ts.map +1 -1
- package/sdk/dist/routes/accessor-index.js +4 -3
- package/sdk/dist/routes/accessor-index.js.map +1 -1
- package/sdk/dist/routes/ambient.d.ts +5 -0
- package/sdk/dist/routes/ambient.d.ts.map +1 -1
- package/sdk/dist/routes/ambient.js +20 -0
- package/sdk/dist/routes/ambient.js.map +1 -1
- package/sdk/dist/routes/ast-walk.d.ts +17 -3
- package/sdk/dist/routes/ast-walk.d.ts.map +1 -1
- package/sdk/dist/routes/ast-walk.js +24 -2
- package/sdk/dist/routes/ast-walk.js.map +1 -1
- package/sdk/dist/routes/available.d.ts +43 -0
- package/sdk/dist/routes/available.d.ts.map +1 -0
- package/sdk/dist/routes/available.js +230 -0
- package/sdk/dist/routes/available.js.map +1 -0
- package/sdk/dist/routes/builtins.generated.d.ts +180 -0
- package/sdk/dist/routes/builtins.generated.d.ts.map +1 -0
- package/sdk/dist/routes/builtins.generated.js +2 -0
- package/sdk/dist/routes/builtins.generated.js.map +1 -0
- package/sdk/dist/routes/chain-exports.generated.d.ts +13 -8
- package/sdk/dist/routes/chain-exports.generated.d.ts.map +1 -1
- package/sdk/dist/routes/chain-exports.generated.js.map +1 -1
- package/sdk/dist/routes/closure.d.ts.map +1 -1
- package/sdk/dist/routes/closure.js +13 -26
- package/sdk/dist/routes/closure.js.map +1 -1
- package/sdk/dist/routes/composed.d.ts.map +1 -1
- package/sdk/dist/routes/composed.js +20 -8
- package/sdk/dist/routes/composed.js.map +1 -1
- package/sdk/dist/routes/encode.d.ts +17 -0
- package/sdk/dist/routes/encode.d.ts.map +1 -1
- package/sdk/dist/routes/encode.js +14 -11
- package/sdk/dist/routes/encode.js.map +1 -1
- package/sdk/dist/routes/entry.d.ts +76 -0
- package/sdk/dist/routes/entry.d.ts.map +1 -0
- package/sdk/dist/routes/entry.js +478 -0
- package/sdk/dist/routes/entry.js.map +1 -0
- package/sdk/dist/routes/index.d.ts +19 -12
- package/sdk/dist/routes/index.d.ts.map +1 -1
- package/sdk/dist/routes/index.js +11 -8
- package/sdk/dist/routes/index.js.map +1 -1
- package/sdk/dist/routes/intent-body.d.ts +97 -0
- package/sdk/dist/routes/intent-body.d.ts.map +1 -0
- package/sdk/dist/routes/intent-body.js +441 -0
- package/sdk/dist/routes/intent-body.js.map +1 -0
- package/sdk/dist/routes/intent-dsl.d.ts +21 -6
- package/sdk/dist/routes/intent-dsl.d.ts.map +1 -1
- package/sdk/dist/routes/intent-dsl.js +34 -17
- package/sdk/dist/routes/intent-dsl.js.map +1 -1
- package/sdk/dist/routes/intent-sugar.d.ts +77 -4
- package/sdk/dist/routes/intent-sugar.d.ts.map +1 -1
- package/sdk/dist/routes/intent-sugar.js +318 -129
- package/sdk/dist/routes/intent-sugar.js.map +1 -1
- package/sdk/dist/routes/intent.d.ts +13 -1
- package/sdk/dist/routes/intent.d.ts.map +1 -1
- package/sdk/dist/routes/intent.js +37 -1
- package/sdk/dist/routes/intent.js.map +1 -1
- package/sdk/dist/routes/nest.d.ts +3 -2
- package/sdk/dist/routes/nest.d.ts.map +1 -1
- package/sdk/dist/routes/nest.js +5 -3
- package/sdk/dist/routes/nest.js.map +1 -1
- package/sdk/dist/routes/parse.d.ts +6 -0
- package/sdk/dist/routes/parse.d.ts.map +1 -0
- package/sdk/dist/routes/parse.js +39 -0
- package/sdk/dist/routes/parse.js.map +1 -0
- package/sdk/dist/routes/portal.d.ts +258 -4
- package/sdk/dist/routes/portal.d.ts.map +1 -1
- package/sdk/dist/routes/portal.js +588 -9
- package/sdk/dist/routes/portal.js.map +1 -1
- package/sdk/dist/routes/protocol-rewrite.d.ts +71 -1
- package/sdk/dist/routes/protocol-rewrite.d.ts.map +1 -1
- package/sdk/dist/routes/protocol-rewrite.js +178 -54
- package/sdk/dist/routes/protocol-rewrite.js.map +1 -1
- package/sdk/dist/routes/rs-compile.d.ts +25 -22
- package/sdk/dist/routes/rs-compile.d.ts.map +1 -1
- package/sdk/dist/routes/rs-compile.js +55 -49
- package/sdk/dist/routes/rs-compile.js.map +1 -1
- package/sdk/dist/routes/sauce-calls.d.ts +26 -12
- package/sdk/dist/routes/sauce-calls.d.ts.map +1 -1
- package/sdk/dist/routes/sauce-calls.js +16 -23
- package/sdk/dist/routes/sauce-calls.js.map +1 -1
- package/sdk/dist/routes/sauce-route.d.ts +74 -7
- package/sdk/dist/routes/sauce-route.d.ts.map +1 -1
- package/sdk/dist/routes/sauce-route.js +225 -75
- package/sdk/dist/routes/sauce-route.js.map +1 -1
- package/sdk/dist/routes/source-globals.d.ts +107 -0
- package/sdk/dist/routes/source-globals.d.ts.map +1 -0
- package/sdk/dist/routes/source-globals.generated.d.ts +5601 -933
- package/sdk/dist/routes/source-globals.generated.d.ts.map +1 -1
- package/sdk/dist/routes/source-globals.generated.js +3 -4
- package/sdk/dist/routes/source-globals.generated.js.map +1 -1
- package/sdk/dist/routes/source-globals.js +175 -0
- package/sdk/dist/routes/source-globals.js.map +1 -0
- package/sdk/dist/routes/stock-tokens.d.ts +89 -0
- package/sdk/dist/routes/stock-tokens.d.ts.map +1 -0
- package/sdk/dist/routes/stock-tokens.generated.d.ts +7 -0
- package/sdk/dist/routes/stock-tokens.generated.d.ts.map +1 -0
- package/sdk/dist/routes/stock-tokens.generated.js +3664 -0
- package/sdk/dist/routes/stock-tokens.generated.js.map +1 -0
- package/sdk/dist/routes/stock-tokens.js +89 -0
- package/sdk/dist/routes/stock-tokens.js.map +1 -0
- package/sdk/dist/routes/token-registry.d.ts +68 -8
- package/sdk/dist/routes/token-registry.d.ts.map +1 -1
- package/sdk/dist/routes/token-registry.js +218 -32
- package/sdk/dist/routes/token-registry.js.map +1 -1
- package/sdk/dist/routes/token-rewrite.d.ts +1 -1
- package/sdk/dist/routes/token-rewrite.d.ts.map +1 -1
- package/sdk/dist/routes/token-rewrite.js +5 -9
- package/sdk/dist/routes/token-rewrite.js.map +1 -1
- package/sdk/dist/routes/unknown-global.d.ts +32 -0
- package/sdk/dist/routes/unknown-global.d.ts.map +1 -0
- package/sdk/dist/routes/unknown-global.js +106 -0
- package/sdk/dist/routes/unknown-global.js.map +1 -0
- package/sdk/dist/routes/vault.d.ts +38 -8
- package/sdk/dist/routes/vault.d.ts.map +1 -1
- package/sdk/dist/routes/vault.js +47 -8
- package/sdk/dist/routes/vault.js.map +1 -1
- package/sdk/dist/sauce-script/builtins.d.ts +309 -0
- package/sdk/dist/sauce-script/declarations.d.ts +3 -0
- package/sdk/dist/sauce-script/declarations.d.ts.map +1 -0
- package/sdk/dist/sauce-script/declarations.js +229 -0
- package/sdk/dist/sauce-script/declarations.js.map +1 -0
- package/sdk/dist/sauce-script/index.d.ts +2714 -0
- package/sdk/dist/sauce-script/ts-plugin.cjs +85 -0
- package/sdk/dist/skills/loader.d.ts.map +1 -1
- package/sdk/dist/skills/loader.js +4 -3
- package/sdk/dist/skills/loader.js.map +1 -1
- package/sdk/dist/std/router/balancer-v2-vault.abi.json +78 -0
- package/sdk/dist/std/router/curve-cryptoswap.abi.json +29 -0
- package/sdk/dist/std/router/curve-stableswap.abi.json +29 -0
- package/sdk/dist/std/router/dodo-v2-pool.abi.json +39 -0
- package/sdk/dist/std/router/lb-pair.abi.json +55 -0
- package/sdk/dist/std/router/package.json +7 -0
- package/sdk/dist/std/router/router.evm.js +567 -0
- package/sdk/dist/std/router/sauce-router.abi.json +202 -0
- package/sdk/dist/std/router/uniswap-v2-pair.abi.json +49 -0
- package/sdk/dist/std/router/woo-pp-v2.abi.json +42 -0
- package/sdk/dist/std/token/permit2.abi.json +226 -0
- package/sdk/dist/std/token/token.evm.js +73 -0
- package/sdk/dist/std/token/token.svm.js +194 -41
- package/sdk/dist/svm/client.d.ts +62 -15
- package/sdk/dist/svm/client.d.ts.map +1 -1
- package/sdk/dist/svm/client.js +103 -42
- package/sdk/dist/svm/client.js.map +1 -1
- package/sdk/dist/svm/engine.d.ts +66 -5
- package/sdk/dist/svm/engine.d.ts.map +1 -1
- package/sdk/dist/svm/engine.js +73 -5
- package/sdk/dist/svm/engine.js.map +1 -1
- package/sdk/dist/svm/index.d.ts +2 -0
- package/sdk/dist/svm/index.d.ts.map +1 -1
- package/sdk/dist/svm/index.js +2 -0
- package/sdk/dist/svm/index.js.map +1 -1
- package/sdk/dist/svm/instructions.d.ts +72 -1
- package/sdk/dist/svm/instructions.d.ts.map +1 -1
- package/sdk/dist/svm/instructions.js +81 -2
- package/sdk/dist/svm/instructions.js.map +1 -1
- package/sdk/dist/svm/kitchen.d.ts +20 -1
- package/sdk/dist/svm/kitchen.d.ts.map +1 -1
- package/sdk/dist/svm/kitchen.js +47 -1
- package/sdk/dist/svm/kitchen.js.map +1 -1
- package/sdk/dist/svm/portal.d.ts +250 -0
- package/sdk/dist/svm/portal.d.ts.map +1 -0
- package/sdk/dist/svm/portal.js +462 -0
- package/sdk/dist/svm/portal.js.map +1 -0
- package/sdk/dist/svm/send.d.ts +18 -2
- package/sdk/dist/svm/send.d.ts.map +1 -1
- package/sdk/dist/svm/send.js +28 -3
- package/sdk/dist/svm/send.js.map +1 -1
- package/sdk/dist/svm/token-accounts.d.ts +49 -0
- package/sdk/dist/svm/token-accounts.d.ts.map +1 -0
- package/sdk/dist/svm/token-accounts.js +58 -0
- package/sdk/dist/svm/token-accounts.js.map +1 -0
- package/sdk/dist/svm/token-extensions.d.ts +18 -7
- package/sdk/dist/svm/token-extensions.d.ts.map +1 -1
- package/sdk/dist/svm/token-extensions.js +58 -5
- package/sdk/dist/svm/token-extensions.js.map +1 -1
- package/sdk/dist/token/evm.js +1 -1
- package/sdk/dist/token/index.d.ts +1 -1
- package/sdk/dist/token/index.js +1 -1
- package/sdk/dist/token/params.js +1 -1
- package/sdk/dist/token/source.js +3 -3
- package/sdk/dist/token/source.js.map +1 -1
- package/sdk/dist/token/types.d.ts +2 -2
- package/sdk/dist/token/types.js +2 -2
- package/sdk/src/protocols/aerodrome/AerodromePoolABI.json +105 -0
- package/sdk/src/protocols/aerodrome/abis.ts +62 -0
- package/sdk/src/protocols/aerodrome-slipstream/AerodromeSlipstreamPoolABI.json +96 -0
- package/sdk/src/protocols/aerodrome-slipstream/abis.ts +55 -0
- package/sdk/src/protocols/camelot/CamelotV2FactoryABI.json +25 -0
- package/sdk/src/protocols/camelot/CamelotV2PairABI.json +109 -0
- package/sdk/src/protocols/camelot/CamelotV3FactoryABI.json +25 -0
- package/sdk/src/protocols/camelot/CamelotV3PoolABI.json +92 -0
- package/sdk/src/protocols/camelot/abis.ts +143 -0
- package/sdk/src/protocols/eco-routes/PortalABI.json +1448 -0
- package/sdk/src/protocols/eco-routes/ProverABI.json +162 -0
- package/sdk/src/protocols/eco-routes/abis.ts +1060 -51
- package/sdk/src/protocols/eco-routes/addresses.generated.ts +45 -62
- package/sdk/src/protocols/eco-routes/lookup.ts +18 -0
- package/sdk/src/protocols/maverick/MaverickV2PoolABI.json +107 -0
- package/sdk/src/protocols/maverick/abis.ts +59 -0
- package/sdk/src/protocols/maverick/addresses.ts +4 -0
- package/sdk/src/protocols/pancakeswap-v2/PancakeSwapV2PairABI.json +72 -0
- package/sdk/src/protocols/pancakeswap-v2/abis.ts +44 -0
- package/sdk/src/protocols/pancakeswap-v3/PancakeSwapV3PoolABI.json +100 -0
- package/sdk/src/protocols/pancakeswap-v3/abis.ts +57 -0
- package/sdk/src/protocols/permit2/Permit2ABI.json +154 -0
- package/sdk/src/protocols/permit2/abis.ts +63 -0
- package/sdk/src/protocols/quickswap/QuickSwapV2FactoryABI.json +25 -0
- package/sdk/src/protocols/quickswap/QuickSwapV2PairABI.json +72 -0
- package/sdk/src/protocols/quickswap/QuickSwapV3FactoryABI.json +25 -0
- package/sdk/src/protocols/quickswap/QuickSwapV3PoolABI.json +88 -0
- package/sdk/src/protocols/quickswap/abis.ts +123 -0
- package/sdk/src/protocols/sushiswap-v2/SushiSwapV2PairABI.json +72 -0
- package/sdk/src/protocols/sushiswap-v2/abis.ts +43 -0
- package/sdk/src/protocols/synthra-v3/SynthraV3PoolABI.json +100 -0
- package/sdk/src/protocols/synthra-v3/abis.ts +56 -0
- package/sdk/src/protocols/trader-joe/LBPairABI.json +185 -0
- package/sdk/src/protocols/trader-joe/abis.ts +102 -0
- package/sdk/src/protocols/trader-joe/addresses.ts +5 -0
- package/sdk/src/protocols/uniswap-v2/UniswapV2PairABI.json +72 -0
- package/sdk/src/protocols/uniswap-v2/abis.ts +45 -0
- package/sdk/src/protocols/uniswap-v3/UniswapV3PoolABI.json +100 -0
- package/sdk/src/protocols/uniswap-v3/abis.ts +56 -0
- package/sdk/src/protocols/uniswap-v4/UniswapV4PoolManagerABI.json +38 -0
- package/sdk/src/protocols/uniswap-v4/UniswapV4StateViewABI.json +307 -0
- package/sdk/src/protocols/uniswap-v4/abis.ts +168 -0
- package/sdk/src/protocols/uniswap-v4/addresses.ts +50 -0
- package/sdk/src/protocols/unitflow-v3/UnitFlowV3PoolABI.json +100 -0
- package/sdk/src/protocols/unitflow-v3/abis.ts +57 -0
- package/sdk/src/protocols/velodrome/VelodromePoolABI.json +105 -0
- package/sdk/src/protocols/velodrome/abis.ts +62 -0
- package/skills/sauce-actions/SKILL.md +166 -0
- package/skills/sauce-actions/examples/swap-and-supply.json +24 -0
- package/skills/sauce-actions/examples/swap-by-key.json +15 -0
- package/skills/sauce-actions/references/actions.md +731 -0
- package/skills/sauce-chains/SKILL.md +137 -0
- package/skills/sauce-chains/examples/chains.sauce.ts +25 -0
- package/skills/sauce-chains/references/arbitrum.md +158 -0
- package/skills/sauce-chains/references/arc.md +107 -0
- package/skills/sauce-chains/references/aurora.md +33 -0
- package/skills/sauce-chains/references/avalanche.md +106 -0
- package/skills/sauce-chains/references/base-stocks.md +77 -0
- package/skills/sauce-chains/references/base.md +141 -0
- package/skills/sauce-chains/references/berachain.md +33 -0
- package/skills/sauce-chains/references/blast.md +60 -0
- package/skills/sauce-chains/references/boba.md +33 -0
- package/skills/sauce-chains/references/bsc.md +97 -0
- package/skills/sauce-chains/references/celo.md +57 -0
- package/skills/sauce-chains/references/core.md +33 -0
- package/skills/sauce-chains/references/cronos.md +33 -0
- package/skills/sauce-chains/references/ethereum-stocks.md +1741 -0
- package/skills/sauce-chains/references/ethereum.md +255 -0
- package/skills/sauce-chains/references/evmos.md +33 -0
- package/skills/sauce-chains/references/fantom.md +61 -0
- package/skills/sauce-chains/references/fuse.md +33 -0
- package/skills/sauce-chains/references/gnosis.md +57 -0
- package/skills/sauce-chains/references/index.md +58 -0
- package/skills/sauce-chains/references/ink.md +55 -0
- package/skills/sauce-chains/references/kava.md +33 -0
- package/skills/sauce-chains/references/klaytn.md +33 -0
- package/skills/sauce-chains/references/linea.md +65 -0
- package/skills/sauce-chains/references/manta.md +33 -0
- package/skills/sauce-chains/references/mantle.md +33 -0
- package/skills/sauce-chains/references/metis.md +54 -0
- package/skills/sauce-chains/references/mode.md +55 -0
- package/skills/sauce-chains/references/monad.md +79 -0
- package/skills/sauce-chains/references/moonbeam.md +33 -0
- package/skills/sauce-chains/references/opbnb.md +55 -0
- package/skills/sauce-chains/references/optimism.md +123 -0
- package/skills/sauce-chains/references/plasma.md +35 -0
- package/skills/sauce-chains/references/polygon.md +123 -0
- package/skills/sauce-chains/references/pulsechain.md +33 -0
- package/skills/sauce-chains/references/ronin.md +35 -0
- package/skills/sauce-chains/references/scroll.md +62 -0
- package/skills/sauce-chains/references/sei.md +55 -0
- package/skills/sauce-chains/references/solana-stocks.md +1812 -0
- package/skills/sauce-chains/references/solana.md +56 -0
- package/skills/sauce-chains/references/sonic.md +57 -0
- package/skills/sauce-chains/references/unichain.md +61 -0
- package/skills/sauce-chains/references/zetachain.md +33 -0
- package/skills/sauce-chains/references/zksync.md +59 -0
- package/skills/sauce-chains/references/zora.md +57 -0
- package/skills/sauce-cli/SKILL.md +366 -0
- package/skills/sauce-cli/examples/pay.sauce.ts +23 -0
- package/skills/sauce-cli/examples/split.sauce.ts +30 -0
- package/skills/sauce-distributed-swap/SKILL.md +392 -0
- package/skills/sauce-distributed-swap/examples/distributed-swap.mts +251 -0
- package/skills/sauce-distributed-swap/examples/distributed-swap.sauce.ts +115 -0
- package/skills/sauce-examples/SKILL.md +96 -0
- package/skills/sauce-globals/SKILL.md +213 -0
- package/skills/sauce-globals/examples/globals.mts +111 -0
- package/skills/sauce-globals/examples/globals.sauce.ts +47 -0
- package/skills/sauce-globals/references/chains.md +53 -0
- package/skills/sauce-globals/references/protocols.md +405 -0
- package/skills/sauce-globals/references/stocks.md +3635 -0
- package/skills/sauce-globals/references/tokens.md +53 -0
- package/skills/sauce-intents/SKILL.md +505 -0
- package/skills/sauce-intents/examples/cross-chain.sauce.ts +37 -0
- package/skills/sauce-intents/examples/fund-by-transfer.sauce.ts +54 -0
- package/skills/sauce-intents/examples/intents.mts +343 -0
- package/skills/sauce-intents/examples/swap-on-base.sauce.ts +135 -0
- package/skills/sauce-intents/references/portal.md +77 -0
- package/skills/sauce-overview/SKILL.md +161 -0
- package/skills/sauce-protocols/SKILL.md +118 -0
- package/skills/sauce-protocols/examples/protocols.mts +77 -0
- package/skills/sauce-protocols/examples/protocols.sauce.ts +27 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/aave-v2.md +35 -17
- package/skills/sauce-protocols/references/aave-v3.md +144 -0
- package/skills/sauce-protocols/references/aave-v4.md +50 -0
- package/skills/sauce-protocols/references/abracadabra.md +72 -0
- package/skills/sauce-protocols/references/across.md +73 -0
- package/skills/sauce-protocols/references/aerodrome-slipstream.md +50 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/aerodrome.md +43 -24
- package/skills/sauce-protocols/references/aevo.md +49 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/alchemix.md +10 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/ambient.md +14 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/arbitrum-bridge.md +11 -14
- package/{sdk/src/skills → skills/sauce-protocols/references}/arrakis.md +10 -26
- package/skills/sauce-protocols/references/axelar.md +56 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/balancer-v2.md +13 -29
- package/{sdk/src/skills → skills/sauce-protocols/references}/base-bridge.md +11 -16
- package/{sdk/src/skills → skills/sauce-protocols/references}/baseswap.md +12 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/beefy.md +10 -30
- package/{sdk/src/skills → skills/sauce-protocols/references}/benqi.md +11 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/camelot.md +13 -27
- package/{sdk/src/skills → skills/sauce-protocols/references}/cbeth.md +10 -22
- package/skills/sauce-protocols/references/cctp.md +47 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/celer.md +11 -18
- package/{sdk/src/skills → skills/sauce-protocols/references}/chainlink-ccip.md +11 -21
- package/skills/sauce-protocols/references/chainlink.md +47 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/circle-gateway.md +12 -38
- package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v2.md +11 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v3.md +43 -27
- package/{sdk/src/skills → skills/sauce-protocols/references}/connext.md +11 -15
- package/{sdk/src/skills → skills/sauce-protocols/references}/convex.md +10 -28
- package/{sdk/src/skills → skills/sauce-protocols/references}/cowswap.md +12 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/crvusd.md +10 -19
- package/skills/sauce-protocols/references/curve.md +98 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/debridge.md +11 -33
- package/{sdk/src/skills → skills/sauce-protocols/references}/dodo.md +13 -18
- package/skills/sauce-protocols/references/eigenlayer.md +48 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/ens.md +10 -26
- package/{sdk/src/skills → skills/sauce-protocols/references}/erc20.md +10 -24
- package/{sdk/src/skills → skills/sauce-protocols/references}/erc3156.md +10 -13
- package/{sdk/src/skills → skills/sauce-protocols/references}/erc4626.md +11 -27
- package/{sdk/src/skills → skills/sauce-protocols/references}/ethena.md +10 -27
- package/{sdk/src/skills → skills/sauce-protocols/references}/etherfi.md +10 -32
- package/{sdk/src/skills → skills/sauce-protocols/references}/euler-v2.md +11 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/fenix.md +12 -18
- package/{sdk/src/skills → skills/sauce-protocols/references}/fluid.md +11 -20
- package/{sdk/src/skills → skills/sauce-protocols/references}/frax-ether.md +10 -26
- package/{sdk/src/skills → skills/sauce-protocols/references}/frax.md +10 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/gains-network.md +11 -28
- package/skills/sauce-protocols/references/gamma.md +57 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/gelato.md +12 -20
- package/{sdk/src/skills → skills/sauce-protocols/references}/gho.md +10 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v1.md +12 -34
- package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v2.md +15 -28
- package/skills/sauce-protocols/references/harvest.md +41 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/hegic.md +10 -18
- package/{sdk/src/skills → skills/sauce-protocols/references}/hop.md +11 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/hyperlane.md +11 -21
- package/skills/sauce-protocols/references/index.md +355 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/instadapp.md +10 -18
- package/skills/sauce-protocols/references/kelp.md +46 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/kim.md +12 -18
- package/{sdk/src/skills → skills/sauce-protocols/references}/kyberswap-aggregator.md +12 -35
- package/skills/sauce-protocols/references/kyberswap.md +72 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/layerbank.md +11 -26
- package/{sdk/src/skills → skills/sauce-protocols/references}/layerzero.md +11 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/level-finance.md +10 -24
- package/{sdk/src/skills → skills/sauce-protocols/references}/lido.md +10 -28
- package/{sdk/src/skills → skills/sauce-protocols/references}/lifi.md +11 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/linea-bridge.md +11 -14
- package/{sdk/src/skills → skills/sauce-protocols/references}/liquity-v1.md +10 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/liquity-v2.md +10 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/lynex.md +12 -18
- package/skills/sauce-protocols/references/maker.md +57 -0
- package/skills/sauce-protocols/references/mantle-meth.md +43 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/maverick.md +13 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/moonwell.md +11 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/morpho-blue.md +44 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/mux-protocol.md +10 -30
- package/skills/sauce-protocols/references/olympus.md +39 -0
- package/skills/sauce-protocols/references/oneinch.md +81 -0
- package/skills/sauce-protocols/references/openocean.md +69 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/optimism-bridge.md +11 -16
- package/{sdk/src/skills → skills/sauce-protocols/references}/opyn.md +10 -21
- package/{sdk/src/skills → skills/sauce-protocols/references}/pancakeswap-v2.md +39 -41
- package/skills/sauce-protocols/references/pancakeswap-v3.md +72 -0
- package/skills/sauce-protocols/references/paraswap.md +39 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/pendle.md +47 -29
- package/skills/sauce-protocols/references/permit2.md +101 -0
- package/skills/sauce-protocols/references/perpetual-protocol.md +53 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/polygon-bridge.md +11 -17
- package/{sdk/src/skills → skills/sauce-protocols/references}/premia.md +10 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/puffer.md +10 -21
- package/skills/sauce-protocols/references/pyth.md +45 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/quickswap.md +13 -27
- package/{sdk/src/skills → skills/sauce-protocols/references}/radiant.md +11 -15
- package/{sdk/src/skills → skills/sauce-protocols/references}/ramses.md +12 -18
- package/skills/sauce-protocols/references/reflexer.md +52 -0
- package/skills/sauce-protocols/references/registry/aave-v2.md +43 -0
- package/skills/sauce-protocols/references/registry/aave-v3.md +62 -0
- package/skills/sauce-protocols/references/registry/aave-v4.md +80 -0
- package/skills/sauce-protocols/references/registry/abracadabra.md +54 -0
- package/skills/sauce-protocols/references/registry/across.md +57 -0
- package/skills/sauce-protocols/references/registry/aerodrome-slipstream.md +72 -0
- package/skills/sauce-protocols/references/registry/aerodrome.md +58 -0
- package/skills/sauce-protocols/references/registry/aevo.md +39 -0
- package/skills/sauce-protocols/references/registry/alchemix.md +46 -0
- package/skills/sauce-protocols/references/registry/ambient.md +40 -0
- package/skills/sauce-protocols/references/registry/arbitrum-bridge.md +40 -0
- package/skills/sauce-protocols/references/registry/arrakis.md +49 -0
- package/skills/sauce-protocols/references/registry/axelar.md +65 -0
- package/skills/sauce-protocols/references/registry/balancer-v2.md +50 -0
- package/skills/sauce-protocols/references/registry/base-bridge.md +42 -0
- package/skills/sauce-protocols/references/registry/baseswap.md +40 -0
- package/skills/sauce-protocols/references/registry/beefy.md +51 -0
- package/skills/sauce-protocols/references/registry/benqi.md +49 -0
- package/skills/sauce-protocols/references/registry/camelot.md +82 -0
- package/skills/sauce-protocols/references/registry/cbeth.md +43 -0
- package/skills/sauce-protocols/references/registry/cctp.md +48 -0
- package/skills/sauce-protocols/references/registry/celer.md +44 -0
- package/skills/sauce-protocols/references/registry/chainlink-ccip.md +45 -0
- package/skills/sauce-protocols/references/registry/chainlink.md +49 -0
- package/skills/sauce-protocols/references/registry/circle-gateway.md +70 -0
- package/skills/sauce-protocols/references/registry/compound-v2.md +53 -0
- package/skills/sauce-protocols/references/registry/compound-v3.md +52 -0
- package/skills/sauce-protocols/references/registry/connext.md +41 -0
- package/skills/sauce-protocols/references/registry/convex.md +51 -0
- package/skills/sauce-protocols/references/registry/cowswap.md +40 -0
- package/skills/sauce-protocols/references/registry/crvusd.md +40 -0
- package/skills/sauce-protocols/references/registry/curve.md +81 -0
- package/skills/sauce-protocols/references/registry/debridge.md +59 -0
- package/skills/sauce-protocols/references/registry/dodo.md +39 -0
- package/skills/sauce-protocols/references/registry/eco-routes.md +65 -0
- package/skills/sauce-protocols/references/registry/eigenlayer.md +58 -0
- package/skills/sauce-protocols/references/registry/ens.md +49 -0
- package/skills/sauce-protocols/references/registry/erc20.md +44 -0
- package/skills/sauce-protocols/references/registry/erc3156.md +38 -0
- package/skills/sauce-protocols/references/registry/erc4626.md +51 -0
- package/skills/sauce-protocols/references/registry/ethena.md +50 -0
- package/skills/sauce-protocols/references/registry/etherfi.md +57 -0
- package/skills/sauce-protocols/references/registry/euler-v2.md +49 -0
- package/skills/sauce-protocols/references/registry/fenix.md +39 -0
- package/skills/sauce-protocols/references/registry/fluid.md +48 -0
- package/skills/sauce-protocols/references/registry/frax-ether.md +49 -0
- package/skills/sauce-protocols/references/registry/frax.md +40 -0
- package/skills/sauce-protocols/references/registry/gains-network.md +43 -0
- package/skills/sauce-protocols/references/registry/gamma.md +56 -0
- package/skills/sauce-protocols/references/registry/gelato.md +45 -0
- package/skills/sauce-protocols/references/registry/gho.md +40 -0
- package/skills/sauce-protocols/references/registry/gmx-v1.md +59 -0
- package/skills/sauce-protocols/references/registry/gmx-v2.md +41 -0
- package/skills/sauce-protocols/references/registry/harvest.md +44 -0
- package/skills/sauce-protocols/references/registry/hegic.md +39 -0
- package/skills/sauce-protocols/references/registry/hop.md +49 -0
- package/skills/sauce-protocols/references/registry/hyperlane.md +48 -0
- package/skills/sauce-protocols/references/registry/instadapp.md +39 -0
- package/skills/sauce-protocols/references/registry/kelp.md +47 -0
- package/skills/sauce-protocols/references/registry/kim.md +39 -0
- package/skills/sauce-protocols/references/registry/kyberswap-aggregator.md +49 -0
- package/skills/sauce-protocols/references/registry/kyberswap.md +63 -0
- package/skills/sauce-protocols/references/registry/layerbank.md +54 -0
- package/skills/sauce-protocols/references/registry/layerzero.md +49 -0
- package/skills/sauce-protocols/references/registry/level-finance.md +41 -0
- package/skills/sauce-protocols/references/registry/lido.md +51 -0
- package/skills/sauce-protocols/references/registry/lifi.md +48 -0
- package/skills/sauce-protocols/references/registry/linea-bridge.md +40 -0
- package/skills/sauce-protocols/references/registry/liquity-v1.md +42 -0
- package/skills/sauce-protocols/references/registry/liquity-v2.md +40 -0
- package/skills/sauce-protocols/references/registry/lynex.md +39 -0
- package/skills/sauce-protocols/references/registry/maker.md +55 -0
- package/skills/sauce-protocols/references/registry/mantle-meth.md +48 -0
- package/skills/sauce-protocols/references/registry/maverick.md +60 -0
- package/skills/sauce-protocols/references/registry/moonwell.md +49 -0
- package/skills/sauce-protocols/references/registry/morpho-blue.md +47 -0
- package/skills/sauce-protocols/references/registry/mux-protocol.md +49 -0
- package/skills/sauce-protocols/references/registry/olympus.md +42 -0
- package/skills/sauce-protocols/references/registry/oneinch.md +45 -0
- package/skills/sauce-protocols/references/registry/openocean.md +44 -0
- package/skills/sauce-protocols/references/registry/optimism-bridge.md +42 -0
- package/skills/sauce-protocols/references/registry/opyn.md +42 -0
- package/skills/sauce-protocols/references/registry/pancakeswap-v2.md +71 -0
- package/skills/sauce-protocols/references/registry/pancakeswap-v3.md +76 -0
- package/skills/sauce-protocols/references/registry/paraswap.md +51 -0
- package/skills/sauce-protocols/references/registry/pendle.md +43 -0
- package/skills/sauce-protocols/references/registry/permit2.md +50 -0
- package/skills/sauce-protocols/references/registry/perpetual-protocol.md +49 -0
- package/skills/sauce-protocols/references/registry/polygon-bridge.md +43 -0
- package/skills/sauce-protocols/references/registry/premia.md +40 -0
- package/skills/sauce-protocols/references/registry/puffer.md +43 -0
- package/skills/sauce-protocols/references/registry/pyth.md +40 -0
- package/skills/sauce-protocols/references/registry/quickswap.md +80 -0
- package/skills/sauce-protocols/references/registry/radiant.md +41 -0
- package/skills/sauce-protocols/references/registry/ramses.md +39 -0
- package/skills/sauce-protocols/references/registry/reflexer.md +56 -0
- package/skills/sauce-protocols/references/registry/renzo.md +47 -0
- package/skills/sauce-protocols/references/registry/rocket-pool.md +49 -0
- package/skills/sauce-protocols/references/registry/sablier.md +40 -0
- package/skills/sauce-protocols/references/registry/safe.md +47 -0
- package/skills/sauce-protocols/references/registry/scroll-bridge.md +48 -0
- package/skills/sauce-protocols/references/registry/seamless.md +42 -0
- package/skills/sauce-protocols/references/registry/seaport.md +44 -0
- package/skills/sauce-protocols/references/registry/silo.md +48 -0
- package/skills/sauce-protocols/references/registry/socket.md +44 -0
- package/skills/sauce-protocols/references/registry/sommelier.md +43 -0
- package/skills/sauce-protocols/references/registry/spark.md +42 -0
- package/skills/sauce-protocols/references/registry/spookyswap.md +40 -0
- package/skills/sauce-protocols/references/registry/squid.md +45 -0
- package/skills/sauce-protocols/references/registry/stader.md +47 -0
- package/skills/sauce-protocols/references/registry/stargate.md +45 -0
- package/skills/sauce-protocols/references/registry/superfluid.md +49 -0
- package/skills/sauce-protocols/references/registry/sushiswap-v2.md +71 -0
- package/skills/sauce-protocols/references/registry/swell.md +49 -0
- package/skills/sauce-protocols/references/registry/synapse.md +46 -0
- package/skills/sauce-protocols/references/registry/syncswap.md +38 -0
- package/skills/sauce-protocols/references/registry/synthetix-v3.md +48 -0
- package/skills/sauce-protocols/references/registry/synthra-v3.md +77 -0
- package/skills/sauce-protocols/references/registry/thales.md +51 -0
- package/skills/sauce-protocols/references/registry/thena.md +39 -0
- package/skills/sauce-protocols/references/registry/thruster.md +38 -0
- package/skills/sauce-protocols/references/registry/tokemak.md +45 -0
- package/skills/sauce-protocols/references/registry/trader-joe.md +66 -0
- package/skills/sauce-protocols/references/registry/uniswap-v2.md +77 -0
- package/skills/sauce-protocols/references/registry/uniswap-v3.md +113 -0
- package/skills/sauce-protocols/references/registry/uniswap-v4.md +117 -0
- package/skills/sauce-protocols/references/registry/unitflow-v3.md +65 -0
- package/skills/sauce-protocols/references/registry/velodrome.md +58 -0
- package/skills/sauce-protocols/references/registry/venus.md +62 -0
- package/skills/sauce-protocols/references/registry/vertex.md +46 -0
- package/skills/sauce-protocols/references/registry/wormhole.md +59 -0
- package/skills/sauce-protocols/references/registry/yearn-v3.md +46 -0
- package/skills/sauce-protocols/references/registry/zerolend.md +41 -0
- package/skills/sauce-protocols/references/registry/zerox.md +44 -0
- package/skills/sauce-protocols/references/registry/zksync-bridge.md +40 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/renzo.md +10 -24
- package/{sdk/src/skills → skills/sauce-protocols/references}/rocket-pool.md +10 -26
- package/{sdk/src/skills → skills/sauce-protocols/references}/sablier.md +10 -27
- package/skills/sauce-protocols/references/safe.md +42 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/scroll-bridge.md +11 -20
- package/{sdk/src/skills → skills/sauce-protocols/references}/seamless.md +11 -16
- package/skills/sauce-protocols/references/seaport.md +38 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/silo.md +11 -20
- package/{sdk/src/skills → skills/sauce-protocols/references}/socket.md +11 -18
- package/skills/sauce-protocols/references/sommelier.md +40 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/spark.md +11 -16
- package/{sdk/src/skills → skills/sauce-protocols/references}/spookyswap.md +12 -19
- package/{sdk/src/skills → skills/sauce-protocols/references}/squid.md +11 -21
- package/skills/sauce-protocols/references/stader.md +39 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/stargate.md +11 -22
- package/{sdk/src/skills → skills/sauce-protocols/references}/superfluid.md +10 -28
- package/{sdk/src/skills → skills/sauce-protocols/references}/sushiswap-v2.md +38 -43
- package/skills/sauce-protocols/references/swell.md +49 -0
- package/skills/sauce-protocols/references/synapse.md +54 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/syncswap.md +12 -17
- package/{sdk/src/skills → skills/sauce-protocols/references}/synthetix-v3.md +10 -29
- package/skills/sauce-protocols/references/synthra-v3.md +63 -0
- package/skills/sauce-protocols/references/thales.md +58 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/thena.md +12 -18
- package/{sdk/src/skills → skills/sauce-protocols/references}/thruster.md +13 -18
- package/skills/sauce-protocols/references/tokemak.md +40 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/trader-joe.md +13 -26
- package/{sdk/src/skills → skills/sauce-protocols/references}/uniswap-v2.md +46 -44
- package/skills/sauce-protocols/references/uniswap-v3.md +188 -0
- package/skills/sauce-protocols/references/uniswap-v4.md +155 -0
- package/skills/sauce-protocols/references/unitflow-v3.md +63 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/velodrome.md +12 -24
- package/{sdk/src/skills → skills/sauce-protocols/references}/venus.md +12 -31
- package/skills/sauce-protocols/references/vertex.md +42 -0
- package/skills/sauce-protocols/references/wormhole.md +57 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/yearn-v3.md +10 -25
- package/{sdk/src/skills → skills/sauce-protocols/references}/zerolend.md +11 -15
- package/skills/sauce-protocols/references/zerox.md +39 -0
- package/{sdk/src/skills → skills/sauce-protocols/references}/zksync-bridge.md +11 -14
- package/skills/sauce-script/SKILL.md +407 -0
- package/skills/sauce-script/examples/IOracle.json +12 -0
- package/skills/sauce-script/examples/saucescript.mts +167 -0
- package/skills/sauce-script/examples/twap.sauce.ts +29 -0
- package/skills/sauce-script/references/builtins.json +823 -0
- package/skills/sauce-script/references/builtins.md +674 -0
- package/skills/sauce-solana/SKILL.md +324 -0
- package/skills/sauce-solana/examples/solana.mts +166 -0
- package/skills/sauce-solana/examples/solana.sauce.ts +45 -0
- package/skills/sauce-solana/examples/token-2022.sauce.ts +38 -0
- package/skills/sauce-swaps/SKILL.md +200 -0
- package/skills/sauce-swaps/examples/swap-leg.sauce.ts +50 -0
- package/skills/sauce-swaps/examples/swaps.mts +124 -0
- package/skills/sauce-typescript/SKILL.md +178 -0
- package/skills/sauce-typescript/examples/actions.mts +100 -0
- package/skills/sauce-typescript/examples/compiler.mts +69 -0
- package/skills/sauce-typescript/examples/cook.mts +65 -0
- package/skills/sauce-typescript/examples/verify.mts +104 -0
- package/dev-tools/README.md +0 -16
- package/dev-tools/artifacts/IERC20.json +0 -1
- package/dev-tools/artifacts/ISauceRouter.json +0 -1
- package/dev-tools/artifacts/IUniswapV3Pool.json +0 -1
- package/dev-tools/artifacts/Router.json +0 -1
- package/dev-tools/hardhat.config.cjs +0 -18
- package/dev-tools/sauce/js/add.js +0 -4
- package/dev-tools/sauce/js/call.js +0 -8
- package/dev-tools/sauce/js/erc20.js +0 -18
- package/dev-tools/sauce/js/example.js +0 -6
- package/dev-tools/sauce/js/fibonacci.js +0 -13
- package/dev-tools/sauce/ts/add.ts +0 -4
- package/dev-tools/sauce/ts/call.ts +0 -8
- package/dev-tools/sauce/ts/erc20.ts +0 -18
- package/dev-tools/sauce/ts/example.ts +0 -6
- package/dev-tools/sauce/ts/fibonacci.ts +0 -13
- package/dev-tools/sauce/ts/saucescript.d.ts +0 -1
- package/dev-tools/sauce/ts/tsconfig.json +0 -12
- package/dev-tools/scripts/deploy.ts +0 -107
- package/dev-tools/scripts/init.js +0 -132
- package/dev-tools/scripts/run.ts +0 -67
- package/dev-tools/scripts/start-fork.sh +0 -92
- package/dev-tools/scripts/start-local.sh +0 -120
- package/dev-tools/scripts/stop-local.sh +0 -40
- package/dev-tools/scripts/sync-artifacts.js +0 -46
- package/dev-tools/scripts/sync-price.ts +0 -58
- package/dev-tools/src/contracts.ts +0 -59
- package/dev-tools/src/runner.ts +0 -355
- package/dev-tools/src/svm-local.ts +0 -305
- package/dev-tools/src/sync-price.ts +0 -217
- package/sdk/dist/deployments/v12.generated.d.ts +0 -95
- package/sdk/dist/deployments/v12.generated.d.ts.map +0 -1
- package/sdk/dist/deployments/v12.generated.js +0 -50
- package/sdk/dist/deployments/v12.generated.js.map +0 -1
- package/sdk/dist/swap/index.d.ts +0 -29
- package/sdk/dist/swap/index.d.ts.map +0 -1
- package/sdk/dist/swap/index.js +0 -27
- package/sdk/dist/swap/index.js.map +0 -1
- package/sdk/dist/swap/params.d.ts +0 -29
- package/sdk/dist/swap/params.d.ts.map +0 -1
- package/sdk/dist/swap/params.js +0 -123
- package/sdk/dist/swap/params.js.map +0 -1
- package/sdk/dist/swap/source.d.ts +0 -30
- package/sdk/dist/swap/source.d.ts.map +0 -1
- package/sdk/dist/swap/source.js +0 -101
- package/sdk/dist/swap/source.js.map +0 -1
- package/sdk/dist/swap/types.d.ts +0 -160
- package/sdk/dist/swap/types.d.ts.map +0 -1
- package/sdk/dist/swap/types.js +0 -106
- package/sdk/dist/swap/types.js.map +0 -1
- package/sdk/src/skills/aave-v3.md +0 -134
- package/sdk/src/skills/aave-v4.md +0 -91
- package/sdk/src/skills/abracadabra.md +0 -93
- package/sdk/src/skills/across.md +0 -90
- package/sdk/src/skills/aerodrome-slipstream.md +0 -57
- package/sdk/src/skills/aevo.md +0 -58
- package/sdk/src/skills/axelar.md +0 -80
- package/sdk/src/skills/chainlink.md +0 -62
- package/sdk/src/skills/curve.md +0 -141
- package/sdk/src/skills/eigenlayer.md +0 -71
- package/sdk/src/skills/gamma.md +0 -79
- package/sdk/src/skills/harvest.md +0 -49
- package/sdk/src/skills/index.md +0 -299
- package/sdk/src/skills/kelp.md +0 -60
- package/sdk/src/skills/kyberswap.md +0 -100
- package/sdk/src/skills/loader.ts +0 -46
- package/sdk/src/skills/maker.md +0 -79
- package/sdk/src/skills/mantle-meth.md +0 -60
- package/sdk/src/skills/olympus.md +0 -46
- package/sdk/src/skills/oneinch.md +0 -64
- package/sdk/src/skills/openocean.md +0 -86
- package/sdk/src/skills/pancakeswap-v3.md +0 -104
- package/sdk/src/skills/paraswap.md +0 -67
- package/sdk/src/skills/permit2.md +0 -73
- package/sdk/src/skills/perpetual-protocol.md +0 -73
- package/sdk/src/skills/pyth.md +0 -58
- package/sdk/src/skills/reflexer.md +0 -73
- package/sdk/src/skills/safe.md +0 -56
- package/sdk/src/skills/seaport.md +0 -65
- package/sdk/src/skills/sommelier.md +0 -47
- package/sdk/src/skills/stader.md +0 -53
- package/sdk/src/skills/swell.md +0 -65
- package/sdk/src/skills/synapse.md +0 -63
- package/sdk/src/skills/synthra-v3.md +0 -57
- package/sdk/src/skills/thales.md +0 -74
- package/sdk/src/skills/tokemak.md +0 -48
- package/sdk/src/skills/uniswap-v3.md +0 -202
- package/sdk/src/skills/uniswap-v4.md +0 -125
- package/sdk/src/skills/unitflow-v3.md +0 -62
- package/sdk/src/skills/vertex.md +0 -55
- package/sdk/src/skills/wormhole.md +0 -76
- package/sdk/src/skills/zerox.md +0 -51
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// A limit buy spread over Base's Aerodrome Slipstream and Uniswap V3 pools: spends up to `budget`
|
|
2
|
+
// of `payToken` on `buyToken`, never paying more than `maxPrice` for any unit, fees included.
|
|
3
|
+
// Returns abi.encode(spent, bought, unspent).
|
|
4
|
+
//
|
|
5
|
+
// sauce run distributed-swap.sauce.ts --chain <chain> --config sauce.config.json \
|
|
6
|
+
// --keystore <keystore> --fund <payToken>:<budget> \
|
|
7
|
+
// --args <payToken> <buyToken> <budget> <maxPrice> <minTokens> <maxAvgPrice> \
|
|
8
|
+
// <recipient> <refundTo>
|
|
9
|
+
//
|
|
10
|
+
// payToken: Address the token paid; the budget must be in the Pot (`--fund` pulls it in)
|
|
11
|
+
// buyToken: Address the token bought
|
|
12
|
+
// budget: Uint256 the most payToken to spend, in its base units: 1000000000 is 1,000 USDC
|
|
13
|
+
// maxPrice: Uint256 the most one buyToken may cost, fees included, as payToken base units per
|
|
14
|
+
// buyToken base unit times 1e18: the price in whole tokens times
|
|
15
|
+
// 10^(18 + payDecimals - buyDecimals), so 150 USDC (6 decimals) for SPCXc
|
|
16
|
+
// (8 decimals) is 150 × 10^16 = 1500000000000000000
|
|
17
|
+
// minTokens: Uint256 the least buyToken to receive, in its base units; less reverts the cook
|
|
18
|
+
// maxAvgPrice: Uint256 the most the average may cost, in maxPrice's units; 0 turns it off
|
|
19
|
+
// recipient: Address receives what is bought
|
|
20
|
+
// refundTo: Address receives what is left of the budget
|
|
21
|
+
//
|
|
22
|
+
// Buying SPCXc (8 decimals) on Base with up to 1,000 USDC, at most 150 USDC each, at least 6.6
|
|
23
|
+
// SPCXc in all and an average of at most 149.5:
|
|
24
|
+
// sauce run distributed-swap.sauce.ts --chain base --config sauce.config.json \
|
|
25
|
+
// --keystore <keystore> --fund USDC:1000 \
|
|
26
|
+
// --args 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 0xb2000000000000000000007b9fcbd005511aCBd5 \
|
|
27
|
+
// 1000000000 1500000000000000000 660000000 1495000000000000000 <recipient> <refundTo>
|
|
28
|
+
import { uniswapV3 } from "@sauce/router";
|
|
29
|
+
|
|
30
|
+
// One pool, from either venue: skipped when missing, empty or already past its own limit, else
|
|
31
|
+
// offered all of the budget still unspent, up to its own limit. Returns what it bought.
|
|
32
|
+
// `slipstream` picks the pool's ABI: a Slipstream pool's slot0 has no feeProtocol.
|
|
33
|
+
function trade(
|
|
34
|
+
pool: Address,
|
|
35
|
+
slipstream: bool,
|
|
36
|
+
payToken: Address,
|
|
37
|
+
buyToken: Address,
|
|
38
|
+
kept: Uint256,
|
|
39
|
+
limit: Uint256,
|
|
40
|
+
recipient: Address,
|
|
41
|
+
): Uint256 {
|
|
42
|
+
const unspent = Token(payToken).balanceOf(ctx.self()) - kept;
|
|
43
|
+
if (pool == 0n || unspent == 0n) {
|
|
44
|
+
return 0n;
|
|
45
|
+
}
|
|
46
|
+
let liquidity = 0n;
|
|
47
|
+
let price = 0n;
|
|
48
|
+
let fee = 0n;
|
|
49
|
+
if (slipstream) {
|
|
50
|
+
liquidity = AerodromeSlipstream.Pool(pool).liquidity();
|
|
51
|
+
price = AerodromeSlipstream.Pool(pool).slot0().sqrtPriceX96;
|
|
52
|
+
fee = AerodromeSlipstream.Pool(pool).fee();
|
|
53
|
+
} else {
|
|
54
|
+
liquidity = UniswapV3.Pool(pool).liquidity();
|
|
55
|
+
price = UniswapV3.Pool(pool).slot0().sqrtPriceX96;
|
|
56
|
+
fee = UniswapV3.Pool(pool).fee();
|
|
57
|
+
}
|
|
58
|
+
// The pool's own limit: the caller's moved by √(1 − fee), so that its last unit, fee paid,
|
|
59
|
+
// costs exactly maxPrice. Paying token0 pushes the price down, token1 pushes it up.
|
|
60
|
+
const paysToken0 = payToken < buyToken;
|
|
61
|
+
const root = Math.sqrt((1000000n - fee) * 10n ** 30n); // √(1 − fee), times 1e18
|
|
62
|
+
const own = paysToken0
|
|
63
|
+
? Math.mulDiv(limit, 10n ** 18n, root)
|
|
64
|
+
: Math.mulDiv(limit, root, 10n ** 18n);
|
|
65
|
+
const better = paysToken0 ? price > own : price < own;
|
|
66
|
+
if (liquidity == 0n || !better) {
|
|
67
|
+
return 0n;
|
|
68
|
+
}
|
|
69
|
+
return uniswapV3(pool, payToken, buyToken, unspent, own, 0n, recipient);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function main(
|
|
73
|
+
payToken: Address,
|
|
74
|
+
buyToken: Address,
|
|
75
|
+
budget: Uint256,
|
|
76
|
+
maxPrice: Uint256,
|
|
77
|
+
minTokens: Uint256,
|
|
78
|
+
maxAvgPrice: Uint256,
|
|
79
|
+
recipient: Address,
|
|
80
|
+
refundTo: Address,
|
|
81
|
+
): bytes {
|
|
82
|
+
const self = ctx.self();
|
|
83
|
+
const pay = Token(payToken);
|
|
84
|
+
require(maxPrice > 0n, "maxPrice is 0");
|
|
85
|
+
require(pay.balanceOf(self) >= budget, "budget is not in the Pot");
|
|
86
|
+
const kept = pay.balanceOf(self) - budget; // the Pot's other payToken, never spent
|
|
87
|
+
let bought = 0n;
|
|
88
|
+
|
|
89
|
+
// maxPrice as a pool's sqrt price (token1 per token0, times 2^96): where a unit costs maxPrice.
|
|
90
|
+
let limit = Math.sqrt(Math.mulDiv(maxPrice, 1n << 192n, 10n ** 18n));
|
|
91
|
+
if (payToken < buyToken) {
|
|
92
|
+
limit = Math.sqrt(Math.mulDiv(1n << 192n, 10n ** 18n, maxPrice));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// The loops only find pools; trade() decides and swaps. Slipstream, keyed by tick spacing.
|
|
96
|
+
for (const spacing of [1n, 10n, 50n, 80n, 100n, 150n, 200n, 500n, 2000n]) {
|
|
97
|
+
const pool = AerodromeSlipstream.CLFactoryGaugesV3.getPool(payToken, buyToken, spacing);
|
|
98
|
+
bought += trade(pool, true, payToken, buyToken, kept, limit, recipient);
|
|
99
|
+
}
|
|
100
|
+
// Uniswap V3, keyed by fee tier: the seven Base's factory enables.
|
|
101
|
+
for (const fee of [100n, 200n, 300n, 400n, 500n, 3000n, 10000n]) {
|
|
102
|
+
const pool = UniswapV3.Factory.getPool(payToken, buyToken, fee);
|
|
103
|
+
bought += trade(pool, false, payToken, buyToken, kept, limit, recipient);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Settle: what was bought is already with the recipient; what is left of the budget goes back.
|
|
107
|
+
const unspent = pay.balanceOf(self) - kept;
|
|
108
|
+
const spent = budget - unspent;
|
|
109
|
+
require(bought >= minTokens, "bought below minTokens");
|
|
110
|
+
require(maxAvgPrice == 0n || spent * 10n ** 18n <= maxAvgPrice * bought, "average too high");
|
|
111
|
+
if (unspent > 0n) {
|
|
112
|
+
pay.transfer(refundTo, unspent);
|
|
113
|
+
}
|
|
114
|
+
return abi.encode(spent, bought, unspent);
|
|
115
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sauce-examples
|
|
3
|
+
description: Index of every example in the Sauce skills — each SauceScript program (.sauce.ts) with the chains it is checked on and the sauce command that runs it, and each TypeScript runner (.mts), what it demonstrates and which skill explains it. Use when the user says "show me an example", "sample Sauce program", "example .sauce file", "how do I write X in Sauce", or wants to see how a complete program does something (a payment, a swap, a distributed swap, a cross-chain intent, a protocol call, a Solana transfer).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sauce examples
|
|
7
|
+
|
|
8
|
+
Every example lives in the skill that explains it, and demonstrates an idiom. Read one for the
|
|
9
|
+
pattern, with its skill, then write the program the task needs (`sauce-overview`): an example is not
|
|
10
|
+
a template to fill in. A program names no chain: `--chain` picks one, and the chains below are the
|
|
11
|
+
ones it is checked on. Each program's first comment lines say what it does, give the `sauce`
|
|
12
|
+
command that runs it with every `main` parameter named, say what each parameter is and its units,
|
|
13
|
+
and show one run on a supported chain with real values.
|
|
14
|
+
|
|
15
|
+
For the initial release, Sauce supports transactions on Ethereum, Base and Solana. A chain marked
|
|
16
|
+
(preview) is a preview chain: the program is compiled for it, and its cook is checked to be
|
|
17
|
+
refused there, as the `sauce` command and the MCP server refuse every transaction on a preview
|
|
18
|
+
chain. Run an example's transaction on a supported chain; on a preview chain compile and simulate
|
|
19
|
+
it, and to run it there,
|
|
20
|
+
[request the chain](https://github.com/eco-incorp/sauce/issues/new?template=chain-support.yml)
|
|
21
|
+
(or add the use case to its
|
|
22
|
+
[existing request](https://github.com/eco-incorp/sauce/issues?q=is%3Aissue+label%3Achain-support)). Each program's first comment lines say what it does and give the `sauce`
|
|
23
|
+
command that runs it; runtime inputs are `main(...)` parameters passed with `--args`, and an intent
|
|
24
|
+
file's values are defines (`sauce-script`).
|
|
25
|
+
|
|
26
|
+
Before writing a program, look its names up: the chain's file in `sauce-chains`
|
|
27
|
+
([../sauce-chains/references/index.md](../sauce-chains/references/index.md)) lists its tokens and
|
|
28
|
+
every protocol there with how a program names it, and the generated indexes of globals list the
|
|
29
|
+
names alone ([../sauce-globals/references/tokens.md](../sauce-globals/references/tokens.md),
|
|
30
|
+
[../sauce-globals/references/protocols.md](../sauce-globals/references/protocols.md),
|
|
31
|
+
[../sauce-globals/references/chains.md](../sauce-globals/references/chains.md)); or run
|
|
32
|
+
`npx sauce globals --chain <chain>`.
|
|
33
|
+
|
|
34
|
+
## SauceScript programs
|
|
35
|
+
|
|
36
|
+
| Program | Chains | Demonstrates | Skill |
|
|
37
|
+
| ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
38
|
+
| [`../sauce-cli/examples/pay.sauce.ts`](../sauce-cli/examples/pay.sauce.ts) | `ethereum`, `optimism` (preview) | The smallest complete program: pay a recipient in USDC and USDT, SafeERC20 writes, both values `main` inputs | `sauce-cli` |
|
|
39
|
+
| [`../sauce-cli/examples/split.sauce.ts`](../sauce-cli/examples/split.sauce.ts) | `base`, `arbitrum` (preview), `ethereum` | Array and bool arguments: pay several recipients any token, and the chain's USDC as well | `sauce-cli` |
|
|
40
|
+
| [`../sauce-chains/examples/chains.sauce.ts`](../sauce-chains/examples/chains.sauce.ts) | `base`, `arbitrum` (preview), `ethereum` | One file for every chain: each name resolves on the chain it is compiled for, and the cook `sauce tx` prints for any signer | `sauce-chains` |
|
|
41
|
+
| [`../sauce-script/examples/twap.sauce.ts`](../sauce-script/examples/twap.sauce.ts) | `base`, `ethereum` | Calling a contract: namespaces (the Uniswap V3 factory, and a pool it returns through `UniswapV3.Pool`) and the program's own ABI beside it ([`IOracle.json`](../sauce-script/examples/IOracle.json)) for the function the registry's pool ABI lacks, a tuple result destructured to the one field needed | `sauce-script` |
|
|
42
|
+
| [`../sauce-globals/examples/globals.sauce.ts`](../sauce-globals/examples/globals.sauce.ts) | `ethereum`, `optimism` (preview) | Every name available without an import: `USDT`/`USDC`, `Token(address)` bound once, `@sauce/token` functions, `AaveV3.Pool`, `ctx` | `sauce-globals` |
|
|
43
|
+
| [`../sauce-protocols/examples/protocols.sauce.ts`](../sauce-protocols/examples/protocols.sauce.ts) | `base`, `arbitrum` (preview), `optimism` (preview) | Protocols through their namespaces: Aave V3, and a PancakeSwap V3 factory lookup where the chain has one (`available(...)`) | `sauce-protocols` |
|
|
44
|
+
| [`../sauce-swaps/examples/swap-leg.sauce.ts`](../sauce-swaps/examples/swap-leg.sauce.ts) | `base`, `arbitrum` (preview) | One guarded Uniswap V3 leg: a price limit, the output measured as a delta, `minOut`, the unspent input returned | `sauce-swaps` |
|
|
45
|
+
| [`../sauce-distributed-swap/examples/distributed-swap.sauce.ts`](../sauce-distributed-swap/examples/distributed-swap.sauce.ts) | `base` | A limit buy (SPCXc with USDC in its header) over Base's Aerodrome Slipstream and Uniswap V3 pools: one `trade` helper per pool that skips missing, empty and past-limit pools and swaps up to the pool's fee-adjusted limit from one `maxPrice`, loops that only find pools, minimum and average-price checks, the unspent budget refunded, the outcome returned | `sauce-distributed-swap` |
|
|
46
|
+
| [`../sauce-intents/examples/cross-chain.sauce.ts`](../sauce-intents/examples/cross-chain.sauce.ts) | `base` | An intent file (top-level statements, values as defines): forward the Pot's measured USDC to Ethereum and supply it to Aave there, with a solver margin | `sauce-intents` |
|
|
47
|
+
| [`../sauce-intents/examples/swap-on-base.sauce.ts`](../sauce-intents/examples/swap-on-base.sauce.ts) | `ethereum` | An intent file whose body is a distributed swap in one pass: WETH delivered on Base is offered to every Uniswap V3 and V4 pool with liquidity, each up to its own fee-adjusted limit, and the solver is paid in WETH on the source chain | `sauce-intents` |
|
|
48
|
+
| [`../sauce-intents/examples/fund-by-transfer.sauce.ts`](../sauce-intents/examples/fund-by-transfer.sauce.ts) | `base`, `ethereum` | Funds an intent by a transfer into its vault, then publishes it: one cook on a Pot, no approval | `sauce-intents` |
|
|
49
|
+
| [`../sauce-solana/examples/solana.sauce.ts`](../sauce-solana/examples/solana.sauce.ts) | `solana` | A Solana program: `Account` parameters with roles, the mint as a define, the `@sauce/token` SPL arm, proof the destination received the amount | `sauce-solana` |
|
|
50
|
+
| [`../sauce-solana/examples/token-2022.sauce.ts`](../sauce-solana/examples/token-2022.sauce.ts) | `solana` | A Token-2022 transfer: PYUSD moved with `transferChecked`, the mint and its token program as accounts, what arrived measured | `sauce-solana` |
|
|
51
|
+
|
|
52
|
+
## Actions documents
|
|
53
|
+
|
|
54
|
+
| Document | Chains | Demonstrates | Skill |
|
|
55
|
+
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------- |
|
|
56
|
+
| [`../sauce-actions/examples/swap-by-key.json`](../sauce-actions/examples/swap-by-key.json) | `ethereum`, `base`, `arbitrum` (preview) | One swap by token symbols and a pool's factory key, the amount an argument: no chain and no address in the document | `sauce-actions` |
|
|
57
|
+
| [`../sauce-actions/examples/swap-and-supply.json`](../sauce-actions/examples/swap-and-supply.json) | `ethereum`, `base`, `arbitrum` (preview), `optimism` (preview) | Chaining: a swap's output saved by name, approved to the Aave pool and supplied on the Pot's behalf | `sauce-actions` |
|
|
58
|
+
|
|
59
|
+
## TypeScript runners
|
|
60
|
+
|
|
61
|
+
| Runner | Compiles and checks | Skill |
|
|
62
|
+
| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------ |
|
|
63
|
+
| [`../sauce-script/examples/saucescript.mts`](../sauce-script/examples/saucescript.mts) | what compiles, what a define changes, each rejected construct, per-target differences, and what compiling for a chain adds | `sauce-script` |
|
|
64
|
+
| [`../sauce-globals/examples/globals.mts`](../sauce-globals/examples/globals.mts) | the globals program, the SafeERC20 lowering of every write, the `IERC20` import rule, family aliases and `available(...)` | `sauce-globals` |
|
|
65
|
+
| [`../sauce-protocols/examples/protocols.mts`](../sauce-protocols/examples/protocols.mts) | the protocols program on chains with and without PancakeSwap V3, registry lookups, a per-protocol document, a protocol template | `sauce-protocols` |
|
|
66
|
+
| [`../sauce-swaps/examples/swaps.mts`](../sauce-swaps/examples/swaps.mts) | the guarded leg on two chains, `@sauce/router`'s functions, and the Router's entry points, price parameters and callbacks | `sauce-swaps` |
|
|
67
|
+
| [`../sauce-distributed-swap/examples/distributed-swap.mts`](../sauce-distributed-swap/examples/distributed-swap.mts) | the distributed swap for Base: the skill's copy of its code, its typed pool reads and venues, `maxPrice` for SPCXc and WETH and the limits they give, per-pool limits, `minTokens`, the three rehearsals' arguments, the cooks | `sauce-distributed-swap` |
|
|
68
|
+
| [`../sauce-intents/examples/intents.mts`](../sauce-intents/examples/intents.mts) | both intent files: on which chain each name resolves, the fee requirement, a token-only child, the pool ABI's selectors, and the transactions that rehearse a body on a fork | `sauce-intents` |
|
|
69
|
+
| [`../sauce-solana/examples/solana.mts`](../sauce-solana/examples/solana.mts) | the Solana programs' manifests and arguments, the mints' token programs, and the client's `rpcUrl` requirement | `sauce-solana` |
|
|
70
|
+
| [`../sauce-typescript/examples/cook.mts`](../sauce-typescript/examples/cook.mts) | owner, Pot, deploy call, a program compiled with its arguments, the cook transaction, and the packaged Solana binaries | `sauce-typescript` |
|
|
71
|
+
| [`../sauce-typescript/examples/compiler.mts`](../sauce-typescript/examples/compiler.mts) | raw compilation, ABI-v1 and compact-v1 arguments, `@sauce/token` through the package's resolvers | `sauce-typescript` |
|
|
72
|
+
| [`../sauce-typescript/examples/actions.mts`](../sauce-typescript/examples/actions.mts) | JSON action programs: validation, runtime amounts, a quote | `sauce-typescript` |
|
|
73
|
+
| [`../sauce-typescript/examples/verify.mts`](../sauce-typescript/examples/verify.mts) | settlement verification: a payload, a cook, a tampered program, pins, reproduction | `sauce-typescript` |
|
|
74
|
+
|
|
75
|
+
## Run them
|
|
76
|
+
|
|
77
|
+
A program runs with the command in its first comment lines, from a project with
|
|
78
|
+
`@eco-incorp/sauce` installed:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
npx sauce compile ../sauce-cli/examples/pay.sauce.ts --chain ethereum
|
|
82
|
+
npx sauce tx ../sauce-cli/examples/pay.sauce.ts --chain ethereum --owner <address> --value 0 \
|
|
83
|
+
--args <recipient> 1000000
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
A runner runs with Node, from its own directory, with the inputs its usage line names (the owner of
|
|
87
|
+
a Pot, a recipient, a fee in wei); none touches a network:
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
node ../sauce-distributed-swap/examples/distributed-swap.mts --owner <address> --recipient <address>
|
|
91
|
+
node ../sauce-typescript/examples/cook.mts --owner <address> --recipient <address>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Every program here is compiled through the `sauce` command on each chain listed, its command line
|
|
95
|
+
run offline (its cook built on each supported chain, and refused on each preview chain), and every
|
|
96
|
+
runner executed, by the package's own checks before it ships.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sauce-globals
|
|
3
|
+
description: The names a Sauce program uses without any import, and how they resolve on the chain it is compiled for — token symbols (USDC, USDT, WETH, …) and tokenized stocks (SPCXc, TSLAon, TSLAx, NVDA_US, SPACEX, …, on Ethereum, Base and Solana), Token(address) and a bound const t = Token(x), the token methods .transfer/.approve/.transferFrom/.balanceOf with SafeERC20 behaviour and USDT, the @sauce/token functions, protocol namespaces (UniswapV3.Factory, UniswapV4.StateView, AaveV3.Pool, …) and family aliases, available(...) for a venue a chain may lack, the Namespace_Contract compile-time defines, chain names, chainId and ctx.*. Links generated indexes of every token, protocol contract and chain, the same lists sauce globals prints. Use when writing any Sauce program that moves tokens, calls a protocol or names a chain, when checking whether a name exists on a chain, or when a name does not resolve ("is not a declared variable", "ambiguous", "is not deployed").
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Globals in a Sauce program
|
|
7
|
+
|
|
8
|
+
A program compiled for a chain resolves these names against **that chain**, with no import. They
|
|
9
|
+
are program syntax, not JavaScript values. **Look names up before writing a program**:
|
|
10
|
+
`npx sauce globals --chain <chain>` lists one chain's, and these indexes list every chain's, from
|
|
11
|
+
the same registries the compile reads:
|
|
12
|
+
|
|
13
|
+
- [references/tokens.md](references/tokens.md): every token symbol per chain, with its decimals,
|
|
14
|
+
and the `@sauce/token` functions.
|
|
15
|
+
- [references/stocks.md](references/stocks.md): every tokenized stock per chain, with what it is
|
|
16
|
+
and its issuer.
|
|
17
|
+
- [references/protocols.md](references/protocols.md): every `Namespace.Contract`, and the family
|
|
18
|
+
aliases.
|
|
19
|
+
- [references/chains.md](references/chains.md): every chain name, its id, and whether it takes
|
|
20
|
+
intents.
|
|
21
|
+
|
|
22
|
+
These are the names. Where each is deployed and its address there are the full map: per chain in
|
|
23
|
+
`sauce-chains` ([../sauce-chains/references/index.md](../sauce-chains/references/index.md)), and per
|
|
24
|
+
protocol in `sauce-protocols`
|
|
25
|
+
([../sauce-protocols/references/index.md](../sauce-protocols/references/index.md)).
|
|
26
|
+
|
|
27
|
+
A name that is absent on the target chain (a token the chain does not register, a contract not
|
|
28
|
+
deployed there) is a **compile error**, never a wrong address at run time.
|
|
29
|
+
|
|
30
|
+
The language's own builtins (`ctx`, `crypto`, `Math`, `abi`, `evm`, `svm`, methods on values) are
|
|
31
|
+
in [../sauce-script/references/builtins.md](../sauce-script/references/builtins.md): look a builtin
|
|
32
|
+
up there before using it.
|
|
33
|
+
|
|
34
|
+
## Tokens
|
|
35
|
+
|
|
36
|
+
A symbol is that chain's token address: a value (`balanceOf(USDC, account)`) or the target of its
|
|
37
|
+
methods. Any other ERC-20 is `Token(address)`, or bound once: `const t = Token(address);` (declared
|
|
38
|
+
once, never reassigned, used only as `t.<method>(...)`).
|
|
39
|
+
|
|
40
|
+
| Method | Behaviour |
|
|
41
|
+
| --------------------------------- | --------------------------------------------------------- |
|
|
42
|
+
| `.transfer(to, amount)` | SafeERC20 transfer |
|
|
43
|
+
| `.transferFrom(from, to, amount)` | SafeERC20 transferFrom |
|
|
44
|
+
| `.approve(spender, amount)` | forceApprove: a non-zero allowance is reset to zero first |
|
|
45
|
+
| `.balanceOf(owner)` | balance read; `self.USDC` is `USDC.balanceOf(ctx.self())` |
|
|
46
|
+
|
|
47
|
+
Writes are **SafeERC20**: a token that returns nothing (USDT) works when it has code; a `false`
|
|
48
|
+
return, a malformed return or an address with no code reverts the program. A write returns
|
|
49
|
+
nothing, so `const ok = USDT.transfer(...)` does not compile. Approve exactly what the next call
|
|
50
|
+
spends: a standing allowance outlives the program.
|
|
51
|
+
|
|
52
|
+
The same library as functions, token first: `transfer(token, to, amount)`,
|
|
53
|
+
`transferFrom(token, from, to, amount)`, `approve(token, spender, amount)`,
|
|
54
|
+
`balanceOf(token, account)`, `allowance(token, owner, spender)`, `totalSupply(token)`,
|
|
55
|
+
`decimals(token)`, and the signature pulls `permit` and `permitTransferFrom` (the bottom of
|
|
56
|
+
[references/tokens.md](references/tokens.md) has every signature). The methods compile to exactly
|
|
57
|
+
these.
|
|
58
|
+
|
|
59
|
+
```sauce chain=ethereum,optimism
|
|
60
|
+
function main(payee: Address, amount: Uint256) {
|
|
61
|
+
require(USDT.balanceOf(ctx.self()) >= amount, "not enough USDT");
|
|
62
|
+
USDT.transfer(payee, amount);
|
|
63
|
+
require(allowance(USDT, ctx.self(), payee) == 0n, "no allowance left standing");
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**`IERC20` is low level, and only imported.** `import { IERC20 as Erc20 } from
|
|
68
|
+
"./artifacts/IERC20.json"` binds the raw ERC-20 ABI for a call the token syntax does not offer. Its
|
|
69
|
+
writes decode the declared `bool`, so they are not SafeERC20 (USDT's `transfer` reverts there, and
|
|
70
|
+
a `false` return passes): never write a token transfer or approval through it. Import it under a
|
|
71
|
+
name of its own, as here, in a file that also uses the token syntax, which binds `IERC20` itself.
|
|
72
|
+
|
|
73
|
+
## Tokenized stocks
|
|
74
|
+
|
|
75
|
+
A tokenized stock is a token like any other, named by its symbol with no import:
|
|
76
|
+
`SPCXc.balanceOf(ctx.self())`, `SPCXc.transfer(to, amount)`, a value for `@sauce/token`'s
|
|
77
|
+
functions, a token a swap buys or sells.
|
|
78
|
+
|
|
79
|
+
- **Ethereum**: Backed's xStocks (`TSLAx`, `SPCXx`) and bTokens (`bTSLA`), Ondo Global Markets'
|
|
80
|
+
(`TSLAon`, `SPCXon`), and Mt Pelerin's own shares (`MPS`).
|
|
81
|
+
- **Base**: Coinbase's (`TSLAc`, `SPCXc`) and Backed's bTokens.
|
|
82
|
+
- **Solana**: Backed's xStocks (`TSLAx`), Ondo Global Markets' (`TSLAon`), Backpack Securities'
|
|
83
|
+
(`NVDA_US`, `SPCX_US`) and PreStocks' shares of private companies (`SPACEX`, `OPENAI`), each a
|
|
84
|
+
Token-2022 mint (below).
|
|
85
|
+
|
|
86
|
+
The symbol is the issuer's own ticker for the token, in its case: symbols are case-sensitive, and
|
|
87
|
+
`SPCXC` is not `SPCXc`. A `.` in a ticker is written `_`: `BRK.Bx` is `BRK_Bx`, and Backpack's
|
|
88
|
+
`NVDA.US` is `NVDA_US`. PreStocks' symbol is the company's name, `SPACEX`. One company has one token
|
|
89
|
+
per issuer: SpaceX is `SPCXx` and `SPCXon` on Ethereum, `SPCXc` on Base, and `SPCXx`, `SPCXon`,
|
|
90
|
+
`SPCX_US` and `SPACEX` on Solana. Find one by the company's name or ticker with
|
|
91
|
+
`npx sauce globals --chain base --search spacex`, list a chain's with `--stocks`, or read
|
|
92
|
+
[references/stocks.md](references/stocks.md).
|
|
93
|
+
|
|
94
|
+
Buying and selling one on a DEX needs no account with its issuer, and any contract can hold it,
|
|
95
|
+
the program's Pot included; only minting and redeeming with the issuer need KYC. What differs from
|
|
96
|
+
a plain ERC-20:
|
|
97
|
+
|
|
98
|
+
- An issuer can pause its token, and refuses a sanctioned or blocked address.
|
|
99
|
+
- Backed's tokens rebase: a balance is shares times a multiplier the issuer moves, so it changes
|
|
100
|
+
between transactions, never within one. A transfer can credit one unit less than sent, so paying
|
|
101
|
+
one into a pool that checks what it received can fail; buying one is unaffected.
|
|
102
|
+
- Ondo's keep their balance: dividends raise the shares each token stands for (Ondo's multiplier),
|
|
103
|
+
so its price follows the stock with dividends reinvested.
|
|
104
|
+
- Coinbase's are B20 tokens, built into the Base node: they run on Base, and not in a local copy of
|
|
105
|
+
the chain. Rehearse a program that moves one with `sauce simulate` against Base itself.
|
|
106
|
+
|
|
107
|
+
```sauce chain=base
|
|
108
|
+
function main(recipient: Address, amount: Uint256) {
|
|
109
|
+
require(SPCXc.balanceOf(ctx.self()) >= amount, "not enough SPCXc");
|
|
110
|
+
SPCXc.transfer(recipient, amount);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### On Solana
|
|
115
|
+
|
|
116
|
+
A stock on Solana is a Token-2022 mint, and its symbol is the mint's 32-byte key, a value for
|
|
117
|
+
`@sauce/token`'s functions: `balanceOf(TSLAx, account)`. A program moves one with the checked
|
|
118
|
+
writes, `transferChecked` and `approveChecked`, which take the mint's token program, the mint and
|
|
119
|
+
its decimals beside the token accounts (`transfer` and `approve` take legacy SPL Token mints only).
|
|
120
|
+
`sauce` names each of those accounts by the symbol: `program:TSLAx` the token program,
|
|
121
|
+
`mint:TSLAx` the mint, `pot:TSLAx` the Pot's token account and `owner:TSLAx` the owner's.
|
|
122
|
+
|
|
123
|
+
- Amounts are raw, in the mint's decimals. The issuer's multiplier, by which a wallet shows them,
|
|
124
|
+
moves for splits and dividends, so a raw unit is not always one share.
|
|
125
|
+
- PreStocks' mints charge a transfer fee: the token program keeps part of every transfer, so the
|
|
126
|
+
recipient gets less than was sent. Measure what arrived, as below; the references mark each mint
|
|
127
|
+
that charges one.
|
|
128
|
+
- Every stock mint has a transfer hook that names no program, which is no hook. `@sauce/token`
|
|
129
|
+
refuses a mint whose hook names a program (`transfer hook`), and no registered mint has one.
|
|
130
|
+
- The issuer can pause its mint, and can hold a permanent delegate, which can move or burn any
|
|
131
|
+
balance. A new token account is usable, not frozen.
|
|
132
|
+
|
|
133
|
+
```sauce chain=solana
|
|
134
|
+
function main(
|
|
135
|
+
tokenProgram: Account,
|
|
136
|
+
source: Account<Writable>,
|
|
137
|
+
mint: Account,
|
|
138
|
+
destination: Account<Writable>,
|
|
139
|
+
pot: Account<Signer>,
|
|
140
|
+
amount: Uint256,
|
|
141
|
+
): Uint256 {
|
|
142
|
+
const before = balanceOf(SPACEX, destination);
|
|
143
|
+
transferChecked(SPACEX, tokenProgram, source, mint, destination, pot, amount, 9n);
|
|
144
|
+
return balanceOf(SPACEX, destination) - before;
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Protocols
|
|
149
|
+
|
|
150
|
+
- `Namespace.Contract` is the contract's address on the program's chain where a value is expected,
|
|
151
|
+
and a bound contract where a method is called: `UniswapV3.Factory.getPool(a, b, 500n)`. A
|
|
152
|
+
Uniswap fee is in millionths: `500n` is the 0.05% tier, `3000n` 0.3%.
|
|
153
|
+
- A namespace's default contract is also called by the namespace alone:
|
|
154
|
+
`Cctp.depositForBurn(...)` calls `Cctp.TokenMessenger`.
|
|
155
|
+
- A family alias (`Uniswap`, `Aave`, …) names a contract only when one member has it on the chain:
|
|
156
|
+
`Uniswap.UniversalRouter` is `UniswapV4.UniversalRouter`; `Uniswap.Factory` is ambiguous.
|
|
157
|
+
- `Ethereum.UniswapV4.UniversalRouter` takes Ethereum's address but still executes on the program's
|
|
158
|
+
own chain; running on another chain is an intent (`sauce-intents`).
|
|
159
|
+
- Every catalogued protocol has a namespace. An interface, such as `Erc4626.Vault` or
|
|
160
|
+
`UniswapV3.Pool`, has no one address and is called with one, together with a method in the same
|
|
161
|
+
expression: `Erc4626.Vault(vault).deposit(...)`, or `UniswapV3.Pool(pool).liquidity()` for a pool
|
|
162
|
+
its factory returned (`.at(pool)` is the same).
|
|
163
|
+
[references/protocols.md](references/protocols.md) lists every interface.
|
|
164
|
+
|
|
165
|
+
**A venue a chain may not have** is asked with `available(<name>)`, decided when the program is
|
|
166
|
+
compiled for a chain: `if (available(UniswapV3.Factory)) { ... }` keeps its branch where the chain
|
|
167
|
+
has the contract, and removes it, names and all, where it does not. It takes a contract or a token
|
|
168
|
+
symbol (`available(USDT)`); it folds `if`/`else`, `?:`, `&&`, `||` and `!`; and a guard
|
|
169
|
+
`if (!available(X)) { return 0n; }` drops the rest of its function. A name no chain has is an
|
|
170
|
+
error rather than `false`, so a typo cannot quietly drop a branch. `Namespace.Contract` without it
|
|
171
|
+
is for a contract the program requires: on a chain without it, the program does not compile.
|
|
172
|
+
|
|
173
|
+
```sauce chain=base,linea
|
|
174
|
+
function main(tokenA: Address, tokenB: Address) {
|
|
175
|
+
if (available(UniswapV3.Factory)) {
|
|
176
|
+
const pool = UniswapV3.Factory.getPool(tokenA, tokenB, 500n);
|
|
177
|
+
require(pool != 0n, "no 0.05% pool");
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Chains, context, imports
|
|
183
|
+
|
|
184
|
+
- **Chain names** (`Base`, `Ethereum`, … in [references/chains.md](references/chains.md)) open an
|
|
185
|
+
intent from inside a program: `Ethereum(() => { ... }).reward({ ... })`. Every chain's names
|
|
186
|
+
compile; for the initial release its transactions are built and sent only on Ethereum, Base and
|
|
187
|
+
Solana, and [references/chains.md](references/chains.md) marks every other chain a preview chain
|
|
188
|
+
(`sauce-chains` says how to request one).
|
|
189
|
+
- **`chainId`** is the chain the program is compiled for.
|
|
190
|
+
- **`ctx`**: context reads, each a call. The complete list, with what each returns per target, is
|
|
191
|
+
section 6 of [../sauce-script/references/builtins.md](../sauce-script/references/builtins.md).
|
|
192
|
+
|
|
193
|
+
| Read | EVM | Solana |
|
|
194
|
+
| ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------- | -------------------------------------------------------- |
|
|
195
|
+
| `ctx.self()` | the executing contract: the Pot, which holds balances | the executing Sauce program's id |
|
|
196
|
+
| `ctx.msgSender()` | the immediate caller | the transaction's first signer |
|
|
197
|
+
| `ctx.msgData()` | the program's whole input | the instruction data |
|
|
198
|
+
| `ctx.timestamp()`, `ctx.chainId()`, `ctx.selfBalance()` | yes | yes |
|
|
199
|
+
| `ctx.balance(a)` | the balance of `a` | the lamports of an attached account: pass `acct.address` |
|
|
200
|
+
| `ctx.blockNumber()` | block number | slot |
|
|
201
|
+
| `ctx.msgValue()`, `ctx.gasLeft()`, `ctx.codeSize(a)`, `ctx.codeHash(a)`, `ctx.isContract(a)`, `ctx.isEOA(a)` | yes | rejected |
|
|
202
|
+
|
|
203
|
+
There is no read for the transaction origin.
|
|
204
|
+
|
|
205
|
+
- **Imports the package serves** to a program: `@sauce/router` (the swap library, `sauce-swaps`),
|
|
206
|
+
`@sauce/token`, `./artifacts/IERC20.json`, `./artifacts/ISauceRouter.json` (the Router itself),
|
|
207
|
+
and every protocol ABI as `./protocols/<slug>/<Export>.json`.
|
|
208
|
+
|
|
209
|
+
## Example
|
|
210
|
+
|
|
211
|
+
[examples/globals.sauce.ts](examples/globals.sauce.ts) uses each kind of name;
|
|
212
|
+
[examples/globals.mts](examples/globals.mts) compiles it and pins the SafeERC20 lowering, the
|
|
213
|
+
`IERC20` import rule, the family-alias rules and `available(...)`.
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// Compiles globals.sauce.ts the way `sauce compile` does (`routes.compileSauceProgram`, with the
|
|
2
|
+
// chain's names), and pins how token writes lower: every spelling becomes a SafeERC20 function of
|
|
3
|
+
// @sauce/token, reads stay typed calls, and a write returns nothing. The name tables live in
|
|
4
|
+
// ../references/, generated from the registries.
|
|
5
|
+
//
|
|
6
|
+
// node globals.mts
|
|
7
|
+
import { readFileSync } from "node:fs";
|
|
8
|
+
|
|
9
|
+
import { routes } from "@eco-incorp/sauce";
|
|
10
|
+
|
|
11
|
+
function check(condition: unknown, message: string): asserts condition {
|
|
12
|
+
if (!condition) throw new Error(`check failed: ${message}`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const source = readFileSync(new URL("./globals.sauce.ts", import.meta.url), "utf8");
|
|
16
|
+
for (const slug of ["ethereum", "optimism"]) {
|
|
17
|
+
const program = routes.compileSauceProgram(slug, source);
|
|
18
|
+
console.log(`globals.sauce.ts on ${slug}: ${program.bytecode.length} bytes`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Writes lower to @sauce/token in every spelling; reads stay typed IERC20 calls.
|
|
22
|
+
const writes = routes.compileSauceProgram(
|
|
23
|
+
"ethereum",
|
|
24
|
+
"function main(to: Address, token: Address, amount: Uint256) { USDT.transfer(to, amount); USDT.approve(to, amount); const t = Token(token); t.transferFrom(to, ctx.self(), amount); require(USDC.balanceOf(ctx.self()) > 0n); }",
|
|
25
|
+
).source;
|
|
26
|
+
check(/__sauce_transfer\(USDT,/.test(writes), "USDT.transfer is SafeERC20");
|
|
27
|
+
check(/__sauce_approve\(USDT,/.test(writes), "USDT.approve is forceApprove");
|
|
28
|
+
check(/__sauce_transferFrom\(t,/.test(writes), "a bound Token's transferFrom is SafeERC20");
|
|
29
|
+
check(/IERC20\.at\(USDC\)\.balanceOf\(/.test(writes), "reads are plain typed calls");
|
|
30
|
+
check(!/IERC20\.at\([^)]*\)\.(transfer|approve|transferFrom)\(/.test(writes), "no raw writes");
|
|
31
|
+
|
|
32
|
+
const rejects = (slug: string, body: string) => {
|
|
33
|
+
try {
|
|
34
|
+
routes.compileSauceProgram(slug, body);
|
|
35
|
+
} catch {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
};
|
|
40
|
+
// A write returns nothing.
|
|
41
|
+
check(
|
|
42
|
+
rejects("ethereum", "function main(to: Address) { const ok = USDT.transfer(to, 1n); }"),
|
|
43
|
+
"no bool to read",
|
|
44
|
+
);
|
|
45
|
+
// IERC20 is imported, never ambient, and under its own name it collides with the binding a token
|
|
46
|
+
// read brings in; an alias does not.
|
|
47
|
+
check(
|
|
48
|
+
rejects(
|
|
49
|
+
"base",
|
|
50
|
+
"function main(t: Address) { require(IERC20.at(t).balanceOf(ctx.self()) > 0n); }",
|
|
51
|
+
),
|
|
52
|
+
"IERC20 needs an import",
|
|
53
|
+
);
|
|
54
|
+
check(
|
|
55
|
+
!rejects(
|
|
56
|
+
"base",
|
|
57
|
+
'import { IERC20 as Erc20 } from "./artifacts/IERC20.json";\nfunction main(t: Address) { require(Erc20.at(t).balanceOf(ctx.self()) > USDC.balanceOf(ctx.self())); }',
|
|
58
|
+
),
|
|
59
|
+
"IERC20 imported under another name, beside a token read",
|
|
60
|
+
);
|
|
61
|
+
// A family alias resolves only where one member owns the name.
|
|
62
|
+
check(
|
|
63
|
+
!rejects("base", "function main() { require(Uniswap.UniversalRouter != 0n); }"),
|
|
64
|
+
"Uniswap.UniversalRouter",
|
|
65
|
+
);
|
|
66
|
+
check(
|
|
67
|
+
rejects("base", "function main() { require(Uniswap.Factory != 0n); }"),
|
|
68
|
+
"Uniswap.Factory is ambiguous",
|
|
69
|
+
);
|
|
70
|
+
// A namespace's default contract is called by the namespace alone.
|
|
71
|
+
check(
|
|
72
|
+
!rejects(
|
|
73
|
+
"base",
|
|
74
|
+
"function main(amount: Uint256, to: Uint256) { Cctp.depositForBurn(amount, 3n, to, USDC, 0n, 0n, 2000n); }",
|
|
75
|
+
),
|
|
76
|
+
"Cctp.depositForBurn calls Cctp.TokenMessenger",
|
|
77
|
+
);
|
|
78
|
+
// A namespace absent on the chain is a compile error, unless `available(...)` rules its branch out;
|
|
79
|
+
// a name no chain has is an error either way.
|
|
80
|
+
check(
|
|
81
|
+
rejects("linea", "function main() { require(UniswapV3.Factory != 0n); }"),
|
|
82
|
+
"absent namespace",
|
|
83
|
+
);
|
|
84
|
+
check(
|
|
85
|
+
!rejects(
|
|
86
|
+
"linea",
|
|
87
|
+
"function main() { if (available(UniswapV3.Factory)) { require(UniswapV3.Factory != 0n); } }",
|
|
88
|
+
),
|
|
89
|
+
"available() removes the branch where the chain lacks the contract",
|
|
90
|
+
);
|
|
91
|
+
// It takes a token symbol too: Base registers no USDT, so the guarded transfer is removed there.
|
|
92
|
+
check(rejects("base", "function main() { USDT.transfer(ctx.self(), 1n); }"), "no USDT on Base");
|
|
93
|
+
check(
|
|
94
|
+
!rejects("base", "function main() { if (available(USDT)) { USDT.transfer(ctx.self(), 1n); } }"),
|
|
95
|
+
"available(USDT) removes the branch on Base",
|
|
96
|
+
);
|
|
97
|
+
check(
|
|
98
|
+
rejects("base", "function main() { if (available(UniswapV9.Factory)) { require(false); } }"),
|
|
99
|
+
"available() of a name no chain has is an error",
|
|
100
|
+
);
|
|
101
|
+
// The Pot's own balance of a symbol, and the chain's id.
|
|
102
|
+
check(
|
|
103
|
+
!rejects("base", "function main() { require(self.USDC >= 0n && chainId == 8453n); }"),
|
|
104
|
+
"self.USDC and chainId",
|
|
105
|
+
);
|
|
106
|
+
console.log(
|
|
107
|
+
writes
|
|
108
|
+
.split("\n")
|
|
109
|
+
.filter((line) => line.includes("__sauce_"))
|
|
110
|
+
.join("\n"),
|
|
111
|
+
);
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Every kind of name a program uses without an import. USDC and USDT are the chain's registered
|
|
2
|
+
// token symbols; AaveV3.Pool is a registry contract (an address as a value, a bound contract as a
|
|
3
|
+
// call target); Token(address) covers any other ERC-20; allowance(...) is a @sauce/token function.
|
|
4
|
+
// Every write is SafeERC20, so USDT works and a false return reverts. The addresses and amounts are
|
|
5
|
+
// main(...) inputs, passed with the transaction.
|
|
6
|
+
//
|
|
7
|
+
// sauce run globals.sauce.ts --chain <chain> --config sauce.config.json --keystore <keystore> \
|
|
8
|
+
// --args <payee> <payer> <otherToken> <usdtAmount> <otherAmount> <usdcAmount>
|
|
9
|
+
//
|
|
10
|
+
// payee: Address who receives the USDT and the other token, and the Aave position
|
|
11
|
+
// payer: Address whose `otherToken` moves: it approved this Pot for `otherAmount`
|
|
12
|
+
// otherToken: Address any ERC-20 the chain does not name, such as its WETH
|
|
13
|
+
// usdtAmount: Uint256 USDT from the Pot to `payee`, in its smallest units (6 decimals):
|
|
14
|
+
// 1000000 is 1 USDT
|
|
15
|
+
// otherAmount: Uint256 `otherToken` from `payer` to `payee`, in its smallest units:
|
|
16
|
+
// 1000000000000000 is 0.001 WETH (18 decimals)
|
|
17
|
+
// usdcAmount: Uint256 the Pot's USDC supplied to Aave V3 for `payee`, in its smallest units
|
|
18
|
+
// (6 decimals): 1000000 is 1 USDC
|
|
19
|
+
//
|
|
20
|
+
// On Ethereum, 1 USDT, 0.001 WETH from the payer, and 1 USDC supplied to Aave:
|
|
21
|
+
//
|
|
22
|
+
// sauce run globals.sauce.ts --chain ethereum --config sauce.config.json \
|
|
23
|
+
// --keystore <keystore> --args <payee> <payer> 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 \
|
|
24
|
+
// 1000000 1000000000000000 1000000
|
|
25
|
+
function main(
|
|
26
|
+
payee: Address,
|
|
27
|
+
payer: Address,
|
|
28
|
+
otherToken: Address,
|
|
29
|
+
usdtAmount: Uint256,
|
|
30
|
+
otherAmount: Uint256,
|
|
31
|
+
usdcAmount: Uint256,
|
|
32
|
+
) {
|
|
33
|
+
const me = ctx.self();
|
|
34
|
+
|
|
35
|
+
// Registered symbols, and the Pot's own balance.
|
|
36
|
+
require(USDT.balanceOf(me) >= usdtAmount, "not enough USDT in the Pot");
|
|
37
|
+
USDT.transfer(payee, usdtAmount);
|
|
38
|
+
|
|
39
|
+
// Any ERC-20, bound once: move `payer`'s tokens, which it approved to this Pot, to `payee`.
|
|
40
|
+
const other = Token(otherToken);
|
|
41
|
+
other.transferFrom(payer, payee, otherAmount);
|
|
42
|
+
|
|
43
|
+
// A protocol call. The approve is exact, so no allowance is left standing afterwards.
|
|
44
|
+
USDC.approve(AaveV3.Pool, usdcAmount);
|
|
45
|
+
AaveV3.Pool.supply(USDC, usdcAmount, payee, 0n);
|
|
46
|
+
require(allowance(USDC, me, AaveV3.Pool) == 0n, "an allowance was left standing");
|
|
47
|
+
}
|