@eco-incorp/sauce 0.99.6 → 0.99.7
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 +324 -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 +80 -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 +1442 -0
- package/docs/guides/compiling.md +19 -7
- package/docs/guides/intents.md +228 -15
- package/docs/guides/mcp.md +539 -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 +1497 -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 +170 -0
- package/sdk/dist/cli/chain.d.ts.map +1 -0
- package/sdk/dist/cli/chain.js +457 -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 +200 -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 +197 -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 +3162 -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 +183 -0
- package/sdk/dist/cli/solana.d.ts.map +1 -0
- package/sdk/dist/cli/solana.js +1360 -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 +5523 -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 +174 -0
- package/sdk/dist/routes/source-globals.js.map +1 -0
- package/sdk/dist/routes/stock-tokens.d.ts +69 -0
- package/sdk/dist/routes/stock-tokens.d.ts.map +1 -0
- package/sdk/dist/routes/stock-tokens.generated.d.ts +4 -0
- package/sdk/dist/routes/stock-tokens.generated.d.ts.map +1 -0
- package/sdk/dist/routes/stock-tokens.generated.js +1836 -0
- package/sdk/dist/routes/stock-tokens.generated.js.map +1 -0
- package/sdk/dist/routes/stock-tokens.js +65 -0
- package/sdk/dist/routes/stock-tokens.js.map +1 -0
- package/sdk/dist/routes/token-registry.d.ts +64 -8
- package/sdk/dist/routes/token-registry.d.ts.map +1 -1
- package/sdk/dist/routes/token-registry.js +202 -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.md +53 -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 +175 -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 +1824 -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 +322 -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,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the `sauce` command asks of a chain: which endpoint, that it is the chain named, the
|
|
3
|
+
* Kitchen's fee, a Pot's state, a dry run, and a transaction sent and waited for — with a revert
|
|
4
|
+
* reported as its decoded reason rather than as viem's error dump.
|
|
5
|
+
*
|
|
6
|
+
* The endpoint comes from `--rpc-url`, or from the chain's entry in a `--config` file; nothing else.
|
|
7
|
+
* No message here repeats it: a provider URL often carries a key.
|
|
8
|
+
*/
|
|
9
|
+
import { type Abi, type Address, type Hex, type PublicClient, type TransactionReceipt } from "viem";
|
|
10
|
+
import type { PrivateKeyAccount } from "viem/accounts";
|
|
11
|
+
import { type CanonicalChain } from "../chains/canonical.js";
|
|
12
|
+
/** A transaction to send or simulate. */
|
|
13
|
+
export interface TxRequest {
|
|
14
|
+
readonly to: Address;
|
|
15
|
+
readonly data: Hex;
|
|
16
|
+
readonly value: bigint;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The endpoint for `chain`: `--rpc-url`, else the `--config` file's `rpcUrls` entry for the chain's
|
|
20
|
+
* id. `config` is the file's path and text, when one was given.
|
|
21
|
+
*/
|
|
22
|
+
export declare function endpointFor(chain: CanonicalChain, rpcUrl: string | undefined, config: {
|
|
23
|
+
readonly path: string;
|
|
24
|
+
readonly text: string;
|
|
25
|
+
} | undefined): string | undefined;
|
|
26
|
+
/** A client for `url`, checked to serve `chain`. */
|
|
27
|
+
export declare function connect(url: string, chain: CanonicalChain): Promise<PublicClient>;
|
|
28
|
+
/** One view call for {@link readAll}: a contract, an ABI holding the function, and its arguments. */
|
|
29
|
+
export interface ViewCall {
|
|
30
|
+
readonly address: Address;
|
|
31
|
+
readonly abi: Abi;
|
|
32
|
+
readonly functionName: string;
|
|
33
|
+
readonly args?: readonly unknown[];
|
|
34
|
+
}
|
|
35
|
+
/** What one {@link ViewCall} answered: its decoded result, or why it has none. */
|
|
36
|
+
export type ViewResult = {
|
|
37
|
+
readonly ok: true;
|
|
38
|
+
readonly value: unknown;
|
|
39
|
+
} | {
|
|
40
|
+
readonly ok: false;
|
|
41
|
+
readonly error: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* `calls` through Multicall3's `aggregate3`, sent deployless (the call carries the contract's
|
|
45
|
+
* code), so nothing needs to be deployed on the chain: one `eth_call` per
|
|
46
|
+
* {@link CALLS_PER_REQUEST} calls, all sent at once. A call that reverts, or reaches an address
|
|
47
|
+
* with no code, fails alone; a request that fails fails the command, naming `what` it was reading.
|
|
48
|
+
*/
|
|
49
|
+
export declare function readAll(client: PublicClient, what: string, calls: readonly ViewCall[]): Promise<ViewResult[]>;
|
|
50
|
+
/** `params` of `method` with its block, where the request names a moving one (or none), pinned. */
|
|
51
|
+
export declare function pinnedParams(method: string, params: unknown, block: Hex): unknown;
|
|
52
|
+
/**
|
|
53
|
+
* The chain `url` serves, read as of one block: every state read the client sends (`eth_call`,
|
|
54
|
+
* `eth_simulateV1`, balances, code, storage, gas estimates) at `block`, so a rehearsal and what it
|
|
55
|
+
* reads first agree, and say which block they saw. `block` is `--block`'s text; without it, the
|
|
56
|
+
* latest block when the command starts.
|
|
57
|
+
*/
|
|
58
|
+
export declare function connectAt(url: string, chain: CanonicalChain, block: string | undefined): Promise<{
|
|
59
|
+
readonly client: PublicClient;
|
|
60
|
+
readonly block: bigint;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* A transaction's receipt, or `undefined` while it has none (pending, or dropped). Any other failure
|
|
64
|
+
* to read it is an error, not a pending transaction.
|
|
65
|
+
*/
|
|
66
|
+
export declare function receiptOf(client: PublicClient, hash: Hex): Promise<TransactionReceipt | undefined>;
|
|
67
|
+
/** The canonical chain `url` serves, for a command given an endpoint and no `--chain`. */
|
|
68
|
+
export declare function chainServedBy(url: string): Promise<CanonicalChain>;
|
|
69
|
+
/** The released Kitchen's current execution fee on the connected chain. */
|
|
70
|
+
export declare function kitchenFee(client: PublicClient, chain: CanonicalChain): Promise<bigint>;
|
|
71
|
+
/** Whether the released Sauce contracts a cook needs are on a chain, and its Kitchen's fee. */
|
|
72
|
+
export interface Released {
|
|
73
|
+
readonly engine: {
|
|
74
|
+
readonly address: Address;
|
|
75
|
+
readonly deployed: boolean;
|
|
76
|
+
};
|
|
77
|
+
readonly kitchen: {
|
|
78
|
+
readonly address: Address;
|
|
79
|
+
readonly deployed: boolean;
|
|
80
|
+
/** The fee a cook pays, read where the Kitchen is there. */
|
|
81
|
+
readonly executionFee?: bigint;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** The released engine and Kitchen on the connected chain: whether each has code, and the fee. */
|
|
85
|
+
export declare function releasedContracts(client: PublicClient): Promise<Released>;
|
|
86
|
+
/** Whether `pot` is deployed, and whose it is. */
|
|
87
|
+
export declare function potState(client: PublicClient, pot: Address): Promise<{
|
|
88
|
+
readonly deployed: boolean;
|
|
89
|
+
readonly owner?: Address;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* Waits, briefly, until the endpoint's latest block is `block` or later — so what the command
|
|
93
|
+
* reads next (an allowance it just approved, a Pot it just deployed) is read from state that has
|
|
94
|
+
* the transaction in it. It never fails: a node that stays behind is caught by the read that
|
|
95
|
+
* depends on it (`awaitPot`), or by the rehearsal of the transaction after it.
|
|
96
|
+
*/
|
|
97
|
+
export declare function caughtUp(client: PublicClient, block: bigint, wait?: {
|
|
98
|
+
readonly tries: number;
|
|
99
|
+
readonly delayMs: number;
|
|
100
|
+
}): Promise<void>;
|
|
101
|
+
/** How long {@link awaitPot} waits for a lagging endpoint, and how often it asks. */
|
|
102
|
+
export declare const POT_WAIT: {
|
|
103
|
+
tries: number;
|
|
104
|
+
delayMs: number;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Waits until the endpoint's latest state has `pot`'s code, after a deployment that succeeded in
|
|
108
|
+
* `block`. A receipt is not proof the node answering the next request has that block: behind a
|
|
109
|
+
* load balancer, the node that served the receipt and the one asked for the code can differ, so
|
|
110
|
+
* an immediate `getCode` may read a Pot that is there as missing — and a cook simulated on that
|
|
111
|
+
* state "succeeds" on an address without code. This asks again until it sees the code, and fails,
|
|
112
|
+
* saying so, when it never does.
|
|
113
|
+
*/
|
|
114
|
+
export declare function awaitPot(client: PublicClient, pot: Address, block: bigint, wait?: {
|
|
115
|
+
readonly tries: number;
|
|
116
|
+
readonly delayMs: number;
|
|
117
|
+
}): Promise<void>;
|
|
118
|
+
/** A short revert string's meaning, when it is a pool's, a pair's or a token helper's. */
|
|
119
|
+
export declare function poolRevertMeaning(message: string): string | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Why a call reverted: the Pot's, Kitchen's and Permit2's errors by name (`FeeNotPaid(1234, 0)`,
|
|
122
|
+
* `NotOwner()`, `InvalidNonce()`), a contract's `require` message, a panic as its code, the message a program
|
|
123
|
+
* `throw`s — else the raw data, else viem's own one line.
|
|
124
|
+
*/
|
|
125
|
+
export declare function revertReason(error: unknown): string;
|
|
126
|
+
/** A dry run of `tx` from `from`: what it returns and the gas it needs, or why it reverts. */
|
|
127
|
+
export declare function simulate(client: PublicClient, from: Address, tx: TxRequest): Promise<{
|
|
128
|
+
readonly ok: true;
|
|
129
|
+
readonly returns: Hex;
|
|
130
|
+
readonly gas: bigint;
|
|
131
|
+
} | {
|
|
132
|
+
readonly ok: false;
|
|
133
|
+
readonly reason: string;
|
|
134
|
+
}>;
|
|
135
|
+
export interface Sent {
|
|
136
|
+
readonly hash: Hex;
|
|
137
|
+
readonly status: "success" | "reverted";
|
|
138
|
+
readonly gasUsed: bigint;
|
|
139
|
+
readonly blockNumber: bigint;
|
|
140
|
+
/** The logs it emitted, as the receipt holds them. */
|
|
141
|
+
readonly logs: ReadonlyArray<{
|
|
142
|
+
readonly address: Address;
|
|
143
|
+
readonly topics: readonly Hex[];
|
|
144
|
+
readonly data: Hex;
|
|
145
|
+
}>;
|
|
146
|
+
/** When it reverted: why, replayed at its block. */
|
|
147
|
+
readonly reason?: string;
|
|
148
|
+
/** The receipt it landed with: what it cost, and its logs. */
|
|
149
|
+
readonly receipt?: TransactionReceipt;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Signs `tx` as `account`, sends it through `url`, and waits for its receipt. It is simulated
|
|
153
|
+
* first, so a transaction that would revert is refused with its reason and never sent. From a
|
|
154
|
+
* wallet (`--wallet`), it is held to the wallet's policy too (`policy.ts`), and what it spends is
|
|
155
|
+
* reserved in the wallet's ledger before it is sent.
|
|
156
|
+
*/
|
|
157
|
+
export declare function sendAndWait(client: PublicClient, url: string, account: PrivateKeyAccount, tx: TxRequest): Promise<Sent>;
|
|
158
|
+
/** One registered token's balance; `null` where the token could not be read on this chain. */
|
|
159
|
+
export interface RegisteredBalance {
|
|
160
|
+
readonly symbol: string;
|
|
161
|
+
readonly address: Address;
|
|
162
|
+
readonly decimals: number;
|
|
163
|
+
readonly balance: bigint | null;
|
|
164
|
+
}
|
|
165
|
+
/** `holder`'s native balance, and its balance of every token `chain` registers by symbol. */
|
|
166
|
+
export declare function registeredBalances(client: PublicClient, chain: CanonicalChain, holder: Address): Promise<{
|
|
167
|
+
readonly native: bigint;
|
|
168
|
+
readonly tokens: readonly RegisteredBalance[];
|
|
169
|
+
}>;
|
|
170
|
+
//# sourceMappingURL=chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/cli/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the `sauce` command asks of a chain: which endpoint, that it is the chain named, the
|
|
3
|
+
* Kitchen's fee, a Pot's state, a dry run, and a transaction sent and waited for — with a revert
|
|
4
|
+
* reported as its decoded reason rather than as viem's error dump.
|
|
5
|
+
*
|
|
6
|
+
* The endpoint comes from `--rpc-url`, or from the chain's entry in a `--config` file; nothing else.
|
|
7
|
+
* No message here repeats it: a provider URL often carries a key.
|
|
8
|
+
*/
|
|
9
|
+
import { createPublicClient, createWalletClient, custom, decodeErrorResult, getAddress, hexToBytes, http, numberToHex, parseAbi, TransactionReceiptNotFoundError, } from "viem";
|
|
10
|
+
import kitchenArtifact from "../artifacts/V12Kitchen.json" with { type: "json" };
|
|
11
|
+
import potArtifact from "../artifacts/V12Pot.json" with { type: "json" };
|
|
12
|
+
import routerArtifact from "../artifacts/Router.json" with { type: "json" };
|
|
13
|
+
import { resolveChain } from "../chains/canonical.js";
|
|
14
|
+
import { v12EngineAddress, v12KitchenAddress } from "../deployments/index.js";
|
|
15
|
+
import { v12Pot } from "../evm/engine.js";
|
|
16
|
+
import { destinationExecutionFee } from "../evm/execution-fee.js";
|
|
17
|
+
import { PortalABI, ProverABI } from "../protocols/eco-routes/abis.js";
|
|
18
|
+
import { Permit2ABI } from "../protocols/permit2/abis.js";
|
|
19
|
+
import { TOKEN_REGISTRY } from "../routes/token-registry.js";
|
|
20
|
+
import { UsageError } from "./args.js";
|
|
21
|
+
import { CliError } from "./args.js";
|
|
22
|
+
import { guardOf } from "./policy.js";
|
|
23
|
+
/**
|
|
24
|
+
* The endpoint for `chain`: `--rpc-url`, else the `--config` file's `rpcUrls` entry for the chain's
|
|
25
|
+
* id. `config` is the file's path and text, when one was given.
|
|
26
|
+
*/
|
|
27
|
+
export function endpointFor(chain, rpcUrl, config) {
|
|
28
|
+
if (rpcUrl !== undefined)
|
|
29
|
+
return rpcUrl;
|
|
30
|
+
if (config === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
let parsed;
|
|
33
|
+
try {
|
|
34
|
+
parsed = JSON.parse(config.text);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new UsageError(`--config ${config.path}: not JSON`);
|
|
38
|
+
}
|
|
39
|
+
const urls = parsed?.rpcUrls;
|
|
40
|
+
if (urls === null || typeof urls !== "object" || Array.isArray(urls)) {
|
|
41
|
+
throw new UsageError(`--config ${config.path}: expected { "rpcUrls": { "<chain id>": "<url>" } }`);
|
|
42
|
+
}
|
|
43
|
+
const url = urls[String(chain.id)];
|
|
44
|
+
if (url === undefined) {
|
|
45
|
+
throw new UsageError(`--config ${config.path} has no rpcUrls entry for ${chain.slug} (chain id ${chain.id})`);
|
|
46
|
+
}
|
|
47
|
+
if (typeof url !== "string" || /^<.*>$/.test(url)) {
|
|
48
|
+
throw new UsageError(`--config ${config.path}: rpcUrls["${chain.id}"] is not a URL; replace the placeholder`);
|
|
49
|
+
}
|
|
50
|
+
return url;
|
|
51
|
+
}
|
|
52
|
+
/** viem's one-line reason for a failed request, never its details, which repeat the URL. */
|
|
53
|
+
const reasonOf = (error) => error.shortMessage ?? "the request failed";
|
|
54
|
+
async function request(what, read) {
|
|
55
|
+
try {
|
|
56
|
+
return await read();
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new CliError(`reading ${what} failed: ${reasonOf(error)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** A client for `url`, checked to serve `chain`. */
|
|
63
|
+
export async function connect(url, chain) {
|
|
64
|
+
const client = createPublicClient({ transport: http(url) });
|
|
65
|
+
const chainId = await request("the chain id", () => client.getChainId());
|
|
66
|
+
if (chainId !== chain.id) {
|
|
67
|
+
throw new CliError(`the RPC endpoint serves chain ${chainId}, but ${chain.slug} is ${chain.id}`);
|
|
68
|
+
}
|
|
69
|
+
return client;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* How many calls one {@link readAll} `eth_call` carries. A deployless call returns its answers as
|
|
73
|
+
* the code of a contract it creates, which may not pass 24,576 bytes (EIP-170): about 64 of a V3
|
|
74
|
+
* pool's eight-word `ticks()`. A Slipstream tick is ten words, so this leaves room.
|
|
75
|
+
*/
|
|
76
|
+
const CALLS_PER_REQUEST = 32;
|
|
77
|
+
/**
|
|
78
|
+
* `calls` through Multicall3's `aggregate3`, sent deployless (the call carries the contract's
|
|
79
|
+
* code), so nothing needs to be deployed on the chain: one `eth_call` per
|
|
80
|
+
* {@link CALLS_PER_REQUEST} calls, all sent at once. A call that reverts, or reaches an address
|
|
81
|
+
* with no code, fails alone; a request that fails fails the command, naming `what` it was reading.
|
|
82
|
+
*/
|
|
83
|
+
export async function readAll(client, what, calls) {
|
|
84
|
+
const chunks = Array.from({ length: Math.ceil(calls.length / CALLS_PER_REQUEST) }, (_, index) => calls.slice(index * CALLS_PER_REQUEST, (index + 1) * CALLS_PER_REQUEST));
|
|
85
|
+
const answered = await Promise.all(chunks.map((chunk) => request(what, () => client.multicall({
|
|
86
|
+
contracts: chunk,
|
|
87
|
+
allowFailure: true,
|
|
88
|
+
deployless: true,
|
|
89
|
+
// The chunk is the batch: viem's own splits by calldata size, not by what comes back.
|
|
90
|
+
batchSize: 0,
|
|
91
|
+
}))));
|
|
92
|
+
return answered.flat().map((result) => {
|
|
93
|
+
if (result.status === "success")
|
|
94
|
+
return { ok: true, value: result.result };
|
|
95
|
+
// The aggregate call itself failed — the endpoint, not one of the calls in it.
|
|
96
|
+
if (result.error.functionName === "aggregate3") {
|
|
97
|
+
throw new CliError(`reading ${what} failed: ${reasonOf(result.error)}`);
|
|
98
|
+
}
|
|
99
|
+
return { ok: false, error: reasonOf(result.error) };
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/** Where each state-reading method takes its block, among its parameters. */
|
|
103
|
+
const BLOCK_PARAM = {
|
|
104
|
+
eth_call: 1,
|
|
105
|
+
eth_estimateGas: 1,
|
|
106
|
+
eth_simulateV1: 1,
|
|
107
|
+
eth_createAccessList: 1,
|
|
108
|
+
eth_getBalance: 1,
|
|
109
|
+
eth_getCode: 1,
|
|
110
|
+
eth_getTransactionCount: 1,
|
|
111
|
+
eth_getStorageAt: 2,
|
|
112
|
+
eth_getProof: 2,
|
|
113
|
+
};
|
|
114
|
+
const MOVING = new Set(["latest", "pending", "safe", "finalized"]);
|
|
115
|
+
/** `params` of `method` with its block, where the request names a moving one (or none), pinned. */
|
|
116
|
+
export function pinnedParams(method, params, block) {
|
|
117
|
+
const at = BLOCK_PARAM[method];
|
|
118
|
+
if (at === undefined || !Array.isArray(params))
|
|
119
|
+
return params;
|
|
120
|
+
const pinned = [...params];
|
|
121
|
+
const given = pinned[at];
|
|
122
|
+
if (given === undefined || given === null || (typeof given === "string" && MOVING.has(given))) {
|
|
123
|
+
while (pinned.length < at)
|
|
124
|
+
pinned.push(null);
|
|
125
|
+
pinned[at] = block;
|
|
126
|
+
}
|
|
127
|
+
return pinned;
|
|
128
|
+
}
|
|
129
|
+
/** The block `--block` names: a number (decimal or 0x hex) or a tag; the latest when none. */
|
|
130
|
+
async function blockNumberOf(client, given) {
|
|
131
|
+
if (given === undefined || given === "latest") {
|
|
132
|
+
return request("the latest block", () => client.getBlockNumber({ cacheTime: 0 }));
|
|
133
|
+
}
|
|
134
|
+
if (/^(\d+|0x[0-9a-fA-F]+)$/.test(given))
|
|
135
|
+
return BigInt(given);
|
|
136
|
+
if (given === "safe" || given === "finalized" || given === "earliest") {
|
|
137
|
+
const block = await request(`the ${given} block`, () => client.getBlock({ blockTag: given }));
|
|
138
|
+
return block.number;
|
|
139
|
+
}
|
|
140
|
+
throw new UsageError(`--block: '${given}' is not a block number or a tag (latest, safe, finalized, earliest)`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* The chain `url` serves, read as of one block: every state read the client sends (`eth_call`,
|
|
144
|
+
* `eth_simulateV1`, balances, code, storage, gas estimates) at `block`, so a rehearsal and what it
|
|
145
|
+
* reads first agree, and say which block they saw. `block` is `--block`'s text; without it, the
|
|
146
|
+
* latest block when the command starts.
|
|
147
|
+
*/
|
|
148
|
+
export async function connectAt(url, chain, block) {
|
|
149
|
+
const free = await connect(url, chain);
|
|
150
|
+
const number = await blockNumberOf(free, block);
|
|
151
|
+
const tag = numberToHex(number);
|
|
152
|
+
const client = createPublicClient({
|
|
153
|
+
transport: custom({
|
|
154
|
+
request: ({ method, params }) => free.request({ method, params: pinnedParams(method, params, tag) }),
|
|
155
|
+
}),
|
|
156
|
+
});
|
|
157
|
+
return { client, block: number };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* A transaction's receipt, or `undefined` while it has none (pending, or dropped). Any other failure
|
|
161
|
+
* to read it is an error, not a pending transaction.
|
|
162
|
+
*/
|
|
163
|
+
export async function receiptOf(client, hash) {
|
|
164
|
+
try {
|
|
165
|
+
return await client.getTransactionReceipt({ hash });
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (error instanceof TransactionReceiptNotFoundError)
|
|
169
|
+
return undefined;
|
|
170
|
+
throw new CliError(`reading the transaction's receipt failed: ${reasonOf(error)}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/** The canonical chain `url` serves, for a command given an endpoint and no `--chain`. */
|
|
174
|
+
export async function chainServedBy(url) {
|
|
175
|
+
const client = createPublicClient({ transport: http(url) });
|
|
176
|
+
const chainId = await request("the chain id", () => client.getChainId());
|
|
177
|
+
const chain = resolveChain(chainId);
|
|
178
|
+
if (chain === undefined) {
|
|
179
|
+
throw new CliError(`the RPC endpoint serves chain ${chainId}, which is not a chain Sauce knows`);
|
|
180
|
+
}
|
|
181
|
+
return chain;
|
|
182
|
+
}
|
|
183
|
+
/** The released Kitchen's current execution fee on the connected chain. */
|
|
184
|
+
export async function kitchenFee(client, chain) {
|
|
185
|
+
const fee = destinationExecutionFee();
|
|
186
|
+
const answer = await request("the Kitchen's executionFee()", () => client.call({ to: fee.to, data: fee.data }));
|
|
187
|
+
if (answer.data === undefined || answer.data === "0x") {
|
|
188
|
+
throw new CliError(`the Kitchen ${getAddress(fee.to)} has no code on ${chain.slug}: the released Sauce ` +
|
|
189
|
+
"contracts are not deployed there");
|
|
190
|
+
}
|
|
191
|
+
return fee.decode(answer.data);
|
|
192
|
+
}
|
|
193
|
+
/** The released engine and Kitchen on the connected chain: whether each has code, and the fee. */
|
|
194
|
+
export async function releasedContracts(client) {
|
|
195
|
+
const engine = getAddress(v12EngineAddress());
|
|
196
|
+
const kitchen = getAddress(v12KitchenAddress());
|
|
197
|
+
const hasCode = async (address, what) => {
|
|
198
|
+
const code = await request(what, () => client.getCode({ address }));
|
|
199
|
+
return code !== undefined && code !== "0x";
|
|
200
|
+
};
|
|
201
|
+
const [engineThere, kitchenThere] = await Promise.all([
|
|
202
|
+
hasCode(engine, "the engine's code"),
|
|
203
|
+
hasCode(kitchen, "the Kitchen's code"),
|
|
204
|
+
]);
|
|
205
|
+
let executionFee;
|
|
206
|
+
if (kitchenThere) {
|
|
207
|
+
const fee = destinationExecutionFee(kitchen);
|
|
208
|
+
const answer = await request("the Kitchen's executionFee()", () => client.call({ to: fee.to, data: fee.data }));
|
|
209
|
+
executionFee = answer.data === undefined ? undefined : fee.decode(answer.data);
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
engine: { address: engine, deployed: engineThere },
|
|
213
|
+
kitchen: {
|
|
214
|
+
address: kitchen,
|
|
215
|
+
deployed: kitchenThere,
|
|
216
|
+
...(executionFee === undefined ? {} : { executionFee }),
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/** Whether `pot` is deployed, and whose it is. */
|
|
221
|
+
export async function potState(client, pot) {
|
|
222
|
+
const code = await request("the Pot's code", () => client.getCode({ address: pot }));
|
|
223
|
+
if (code === undefined || code === "0x")
|
|
224
|
+
return { deployed: false };
|
|
225
|
+
const owner = await request("the Pot's owner()", () => client.readContract({ address: pot, abi: v12Pot.abi, functionName: "owner" }));
|
|
226
|
+
return { deployed: true, owner };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Waits, briefly, until the endpoint's latest block is `block` or later — so what the command
|
|
230
|
+
* reads next (an allowance it just approved, a Pot it just deployed) is read from state that has
|
|
231
|
+
* the transaction in it. It never fails: a node that stays behind is caught by the read that
|
|
232
|
+
* depends on it (`awaitPot`), or by the rehearsal of the transaction after it.
|
|
233
|
+
*/
|
|
234
|
+
export async function caughtUp(client, block, wait = POT_WAIT) {
|
|
235
|
+
for (let attempt = 0; attempt < wait.tries; attempt++) {
|
|
236
|
+
const latest = await client.getBlockNumber({ cacheTime: 0 }).catch(() => undefined);
|
|
237
|
+
if (latest !== undefined && latest >= block)
|
|
238
|
+
return;
|
|
239
|
+
await new Promise((resolve) => setTimeout(resolve, wait.delayMs));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/** How long {@link awaitPot} waits for a lagging endpoint, and how often it asks. */
|
|
243
|
+
export const POT_WAIT = { tries: 30, delayMs: 500 };
|
|
244
|
+
/**
|
|
245
|
+
* Waits until the endpoint's latest state has `pot`'s code, after a deployment that succeeded in
|
|
246
|
+
* `block`. A receipt is not proof the node answering the next request has that block: behind a
|
|
247
|
+
* load balancer, the node that served the receipt and the one asked for the code can differ, so
|
|
248
|
+
* an immediate `getCode` may read a Pot that is there as missing — and a cook simulated on that
|
|
249
|
+
* state "succeeds" on an address without code. This asks again until it sees the code, and fails,
|
|
250
|
+
* saying so, when it never does.
|
|
251
|
+
*/
|
|
252
|
+
export async function awaitPot(client, pot, block, wait = POT_WAIT) {
|
|
253
|
+
for (let attempt = 0; attempt < wait.tries; attempt++) {
|
|
254
|
+
// A node behind the deployment fails or answers empty: both mean "not yet".
|
|
255
|
+
const code = await client.getCode({ address: pot }).catch(() => undefined);
|
|
256
|
+
if (code !== undefined && code !== "0x")
|
|
257
|
+
return;
|
|
258
|
+
await new Promise((resolve) => setTimeout(resolve, wait.delayMs));
|
|
259
|
+
}
|
|
260
|
+
throw new CliError(`the Pot ${pot} was deployed in block ${block}, but the endpoint still shows no code there ` +
|
|
261
|
+
`after ${(wait.tries * wait.delayMs) / 1000}s: it is behind the chain. Run the command again ` +
|
|
262
|
+
"once it has caught up; the deployment is not repeated.");
|
|
263
|
+
}
|
|
264
|
+
/** ERC-20's standard errors (EIP-6093), which OpenZeppelin's tokens revert with. */
|
|
265
|
+
const ERC20_ERRORS = parseAbi([
|
|
266
|
+
"error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)",
|
|
267
|
+
"error ERC20InvalidSender(address sender)",
|
|
268
|
+
"error ERC20InvalidReceiver(address receiver)",
|
|
269
|
+
"error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)",
|
|
270
|
+
"error ERC20InvalidApprover(address approver)",
|
|
271
|
+
"error ERC20InvalidSpender(address spender)",
|
|
272
|
+
]);
|
|
273
|
+
/** The errors a cook or a publish can revert with by name: the Pot's, the Kitchen's, the Pot's
|
|
274
|
+
* Router's (which `@sauce/router` swaps through), Permit2's (which `--fund` pulls through),
|
|
275
|
+
* whatever the registry's Portal and prover ABIs declare, and ERC-20's standard ones. */
|
|
276
|
+
const ERRORS = [
|
|
277
|
+
...potArtifact.abi,
|
|
278
|
+
...kitchenArtifact.abi,
|
|
279
|
+
...routerArtifact.abi,
|
|
280
|
+
...Permit2ABI,
|
|
281
|
+
...PortalABI,
|
|
282
|
+
...ProverABI,
|
|
283
|
+
...ERC20_ERRORS,
|
|
284
|
+
].filter((item) => item.type === "error");
|
|
285
|
+
/**
|
|
286
|
+
* What a pool's short revert string means. A Uniswap V3 pool reverts with a code of a few letters,
|
|
287
|
+
* and so do its forks (PancakeSwap V3, Aerodrome Slipstream and the rest keep the strings), the
|
|
288
|
+
* `TransferHelper` they pay through, and Uniswap's periphery.
|
|
289
|
+
*/
|
|
290
|
+
const POOL_REVERTS = {
|
|
291
|
+
SPL: "a V3-style pool's price-limit check: the limit is on the wrong side of the pool's current " +
|
|
292
|
+
"price, or at or past a bound (it must lie strictly between MIN_SQRT_RATIO and " +
|
|
293
|
+
"MAX_SQRT_RATIO); `sauce price` gives the limit for a price",
|
|
294
|
+
AS: "a V3-style pool's check that the amount is not zero",
|
|
295
|
+
LOK: "a V3-style pool's lock: the pool is not initialized, or was re-entered mid-swap",
|
|
296
|
+
IIA: "a V3-style pool's check that its swap callback paid all the input it asked for",
|
|
297
|
+
TF: "a V3-style pool could not transfer the output token out",
|
|
298
|
+
STF: "a token's transferFrom failed: the payer's allowance or balance is short",
|
|
299
|
+
ST: "a token's transfer failed: the sender's balance is short",
|
|
300
|
+
SA: "a token's approve failed",
|
|
301
|
+
STE: "a native transfer failed",
|
|
302
|
+
"Too little received": "the swap's output is below its minimum",
|
|
303
|
+
"Too much requested": "the swap needs more input than its maximum",
|
|
304
|
+
"Transaction too old": "the swap's deadline has passed",
|
|
305
|
+
};
|
|
306
|
+
/** What a V2-style pair's `<Name>: REASON` means (UniswapV2, Pancake and the other forks). */
|
|
307
|
+
const PAIR_REVERTS = {
|
|
308
|
+
K: "the pair's constant-product check: it was paid too little input for the output taken (or a fee stated too low)",
|
|
309
|
+
INSUFFICIENT_OUTPUT_AMOUNT: "the pair was asked for no output",
|
|
310
|
+
INSUFFICIENT_INPUT_AMOUNT: "the pair received no input before the swap",
|
|
311
|
+
INSUFFICIENT_LIQUIDITY: "the pair's reserves cannot pay the output asked for",
|
|
312
|
+
LOCKED: "the pair was re-entered mid-swap",
|
|
313
|
+
TRANSFER_FAILED: "the pair could not transfer the output token out",
|
|
314
|
+
};
|
|
315
|
+
/** What the Pot's Router's own errors mean. */
|
|
316
|
+
const ROUTER_REVERTS = {
|
|
317
|
+
InvalidPool: "the Router's check that the pool's token0 and token1 are the pair passed",
|
|
318
|
+
InputExceedsAuthorized: "the pool asked the Router for more input than the exact input offered",
|
|
319
|
+
};
|
|
320
|
+
/** A short revert string's meaning, when it is a pool's, a pair's or a token helper's. */
|
|
321
|
+
export function poolRevertMeaning(message) {
|
|
322
|
+
// A pair's own `UniswapV2: K`; a router's `UniswapV2Router: …` is the router's, and means other things.
|
|
323
|
+
const pair = /^(\w+): ([A-Z_]+)$/.exec(message);
|
|
324
|
+
const fromPair = pair !== null && !/Router/.test(pair[1]);
|
|
325
|
+
return POOL_REVERTS[message] ?? (fromPair ? PAIR_REVERTS[pair[2]] : undefined);
|
|
326
|
+
}
|
|
327
|
+
/** The revert data somewhere in viem's error chain, if the node returned any. */
|
|
328
|
+
function revertData(error) {
|
|
329
|
+
for (let at = error; at !== undefined && at !== null;) {
|
|
330
|
+
const data = at.data;
|
|
331
|
+
if (typeof data === "string" && /^0x[0-9a-fA-F]*$/.test(data) && data.length > 2) {
|
|
332
|
+
return data;
|
|
333
|
+
}
|
|
334
|
+
if (data !== null && typeof data === "object") {
|
|
335
|
+
const inner = data.data;
|
|
336
|
+
if (typeof inner === "string" && /^0x[0-9a-fA-F]+$/.test(inner))
|
|
337
|
+
return inner;
|
|
338
|
+
}
|
|
339
|
+
at = at.cause;
|
|
340
|
+
}
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
/** `data` as the text a program's `throw "…"` reverts with — its UTF-8 bytes, nothing else — or
|
|
344
|
+
* `undefined` when it is not printable text. */
|
|
345
|
+
function thrownText(data) {
|
|
346
|
+
try {
|
|
347
|
+
const text = new TextDecoder("utf-8", { fatal: true }).decode(hexToBytes(data));
|
|
348
|
+
return /^[\p{L}\p{N}\p{P}\p{S}\p{Zs}]+$/u.test(text) ? text : undefined;
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Why a call reverted: the Pot's, Kitchen's and Permit2's errors by name (`FeeNotPaid(1234, 0)`,
|
|
356
|
+
* `NotOwner()`, `InvalidNonce()`), a contract's `require` message, a panic as its code, the message a program
|
|
357
|
+
* `throw`s — else the raw data, else viem's own one line.
|
|
358
|
+
*/
|
|
359
|
+
export function revertReason(error) {
|
|
360
|
+
const data = revertData(error);
|
|
361
|
+
if (data === undefined)
|
|
362
|
+
return reasonOf(error);
|
|
363
|
+
try {
|
|
364
|
+
const decoded = decodeErrorResult({ abi: ERRORS, data });
|
|
365
|
+
const args = (decoded.args ?? []).map((arg) => String(arg));
|
|
366
|
+
if (decoded.errorName === "Error") {
|
|
367
|
+
const message = args[0] ?? "";
|
|
368
|
+
const meaning = poolRevertMeaning(message);
|
|
369
|
+
return `${JSON.stringify(message)}${meaning === undefined ? "" : ` (${meaning})`}`;
|
|
370
|
+
}
|
|
371
|
+
const meaning = ROUTER_REVERTS[decoded.errorName];
|
|
372
|
+
return `${decoded.errorName}(${args.join(", ")})${meaning === undefined ? "" : ` (${meaning})`}`;
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// A program's `throw "message"` reverts with the message's bytes as they are.
|
|
376
|
+
const thrown = thrownText(data);
|
|
377
|
+
return thrown === undefined
|
|
378
|
+
? `revert data ${data}`
|
|
379
|
+
: `the program threw ${JSON.stringify(thrown)}`;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/** A dry run of `tx` from `from`: what it returns and the gas it needs, or why it reverts. */
|
|
383
|
+
export async function simulate(client, from, tx) {
|
|
384
|
+
try {
|
|
385
|
+
const { data } = await client.call({ account: from, ...tx });
|
|
386
|
+
const gas = await client.estimateGas({ account: from, ...tx });
|
|
387
|
+
return { ok: true, returns: data ?? "0x", gas };
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
return { ok: false, reason: revertReason(error) };
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Signs `tx` as `account`, sends it through `url`, and waits for its receipt. It is simulated
|
|
395
|
+
* first, so a transaction that would revert is refused with its reason and never sent. From a
|
|
396
|
+
* wallet (`--wallet`), it is held to the wallet's policy too (`policy.ts`), and what it spends is
|
|
397
|
+
* reserved in the wallet's ledger before it is sent.
|
|
398
|
+
*/
|
|
399
|
+
export async function sendAndWait(client, url, account, tx) {
|
|
400
|
+
const rehearsal = await simulate(client, account.address, tx);
|
|
401
|
+
if (!rehearsal.ok)
|
|
402
|
+
throw new CliError(`not sent — it would revert: ${rehearsal.reason}`);
|
|
403
|
+
const reservation = await guardOf(account.address)?.evm(client, tx);
|
|
404
|
+
const wallet = createWalletClient({ account, transport: http(url) });
|
|
405
|
+
let hash;
|
|
406
|
+
try {
|
|
407
|
+
hash = await wallet.sendTransaction({ chain: null, ...tx, gas: (rehearsal.gas * 12n) / 10n });
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
reservation?.released("sending failed");
|
|
411
|
+
throw new CliError(`sending failed: ${reasonOf(error)}`);
|
|
412
|
+
}
|
|
413
|
+
const receipt = await request(`the receipt of ${hash}`, () => client.waitForTransactionReceipt({ hash }));
|
|
414
|
+
if (receipt.status === "success")
|
|
415
|
+
reservation?.sent(hash);
|
|
416
|
+
else
|
|
417
|
+
reservation?.released(`${hash} reverted`);
|
|
418
|
+
const sent = {
|
|
419
|
+
hash,
|
|
420
|
+
status: receipt.status,
|
|
421
|
+
gasUsed: receipt.gasUsed,
|
|
422
|
+
blockNumber: receipt.blockNumber,
|
|
423
|
+
logs: receipt.logs.map((log) => ({
|
|
424
|
+
address: getAddress(log.address),
|
|
425
|
+
topics: log.topics,
|
|
426
|
+
data: log.data,
|
|
427
|
+
})),
|
|
428
|
+
receipt,
|
|
429
|
+
};
|
|
430
|
+
if (receipt.status === "success") {
|
|
431
|
+
await caughtUp(client, receipt.blockNumber);
|
|
432
|
+
return sent;
|
|
433
|
+
}
|
|
434
|
+
const replay = await client
|
|
435
|
+
.call({ account: account.address, ...tx, blockNumber: receipt.blockNumber - 1n })
|
|
436
|
+
.then(() => "it succeeds when replayed, so the state it ran on changed", (error) => revertReason(error));
|
|
437
|
+
return { ...sent, reason: replay };
|
|
438
|
+
}
|
|
439
|
+
const BALANCE_OF = parseAbi(["function balanceOf(address) view returns (uint256)"]);
|
|
440
|
+
/** `holder`'s native balance, and its balance of every token `chain` registers by symbol. */
|
|
441
|
+
export async function registeredBalances(client, chain, holder) {
|
|
442
|
+
const native = await request("the native balance", () => client.getBalance({ address: holder }));
|
|
443
|
+
const tokens = await Promise.all((TOKEN_REGISTRY[chain.id] ?? []).map(async (row) => {
|
|
444
|
+
const token = getAddress(row.address);
|
|
445
|
+
const balance = await client
|
|
446
|
+
.readContract({
|
|
447
|
+
address: token,
|
|
448
|
+
abi: BALANCE_OF,
|
|
449
|
+
functionName: "balanceOf",
|
|
450
|
+
args: [holder],
|
|
451
|
+
})
|
|
452
|
+
.catch(() => null);
|
|
453
|
+
return { symbol: row.symbol, address: token, decimals: row.decimals, balance };
|
|
454
|
+
}));
|
|
455
|
+
return { native, tokens };
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=chain.js.map
|