@eco-incorp/sauce 0.99.6 → 0.99.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1159) hide show
  1. package/README.md +58 -16
  2. package/actions/action-program.schema.json +480 -379
  3. package/actions/dist/abis.d.ts +19 -18
  4. package/actions/dist/abis.d.ts.map +1 -1
  5. package/actions/dist/abis.js +29 -29
  6. package/actions/dist/compile.d.ts +4 -4
  7. package/actions/dist/compile.d.ts.map +1 -1
  8. package/actions/dist/compile.js +3 -1
  9. package/actions/dist/compose.d.ts +63 -6
  10. package/actions/dist/compose.d.ts.map +1 -1
  11. package/actions/dist/compose.js +100 -16
  12. package/actions/dist/index.d.ts +1 -1
  13. package/actions/dist/index.d.ts.map +1 -1
  14. package/actions/dist/names.d.ts +88 -0
  15. package/actions/dist/names.d.ts.map +1 -0
  16. package/actions/dist/names.js +334 -0
  17. package/actions/dist/program.d.ts.map +1 -1
  18. package/actions/dist/program.js +115 -5
  19. package/actions/dist/registry.d.ts +10 -8
  20. package/actions/dist/registry.d.ts.map +1 -1
  21. package/actions/dist/registry.js +10 -8
  22. package/actions/dist/schema.d.ts.map +1 -1
  23. package/actions/dist/schema.js +99 -12
  24. package/actions/dist/semantics.d.ts +12 -2
  25. package/actions/dist/semantics.d.ts.map +1 -1
  26. package/actions/dist/semantics.js +78 -8
  27. package/actions/dist/spec.d.ts +30 -0
  28. package/actions/dist/spec.d.ts.map +1 -1
  29. package/actions/dist/spec.js +151 -138
  30. package/actions/dist/split-swap.d.ts +10 -5
  31. package/actions/dist/split-swap.d.ts.map +1 -1
  32. package/actions/dist/split-swap.js +48 -7
  33. package/actions/dist/to-quote.d.ts +14 -5
  34. package/actions/dist/to-quote.d.ts.map +1 -1
  35. package/actions/dist/to-quote.js +210 -244
  36. package/actions/dist/to-sauce.d.ts +18 -4
  37. package/actions/dist/to-sauce.d.ts.map +1 -1
  38. package/actions/dist/to-sauce.js +232 -205
  39. package/actions/dist/types.d.ts +245 -147
  40. package/actions/dist/types.d.ts.map +1 -1
  41. package/actions/dist/types.js +4 -0
  42. package/docs/README.md +38 -0
  43. package/docs/api/README.md +37 -23
  44. package/docs/api/compiler.md +53 -12
  45. package/docs/api/contracts.md +105 -0
  46. package/docs/api/coverage.md +96 -57
  47. package/docs/api/router.md +238 -0
  48. package/docs/api/routes.md +31 -22
  49. package/docs/concepts/architecture.md +26 -3
  50. package/docs/concepts/saucescript.md +35 -55
  51. package/docs/examples/README.md +21 -14
  52. package/docs/examples/action-program.ts +51 -35
  53. package/docs/examples/cross-chain-cascade.sauce.ts +4 -0
  54. package/docs/examples/cross-chain-intent.sauce.ts +2 -1
  55. package/docs/examples/evm-execution.ts +2 -4
  56. package/docs/examples/first-intent.ts +7 -2
  57. package/docs/examples/pot-router.ts +19 -0
  58. package/docs/examples/registry-names.ts +52 -0
  59. package/docs/examples/router-route.sauce.ts +31 -0
  60. package/docs/examples/router-route.ts +72 -0
  61. package/docs/examples/router-swap.sauce.ts +16 -0
  62. package/docs/examples/router-swap.ts +47 -0
  63. package/docs/examples/venue-where-deployed.sauce.ts +14 -0
  64. package/docs/guides/actions.md +230 -120
  65. package/docs/guides/builders-and-actions.md +20 -14
  66. package/docs/guides/cli.md +1446 -0
  67. package/docs/guides/compiling.md +19 -7
  68. package/docs/guides/intents.md +228 -15
  69. package/docs/guides/mcp.md +540 -0
  70. package/docs/guides/nested-intents.md +21 -6
  71. package/docs/guides/protocols-and-tokens.md +218 -39
  72. package/docs/guides/quick-start.md +5 -0
  73. package/docs/guides/solana.md +199 -52
  74. package/docs/guides/verification.md +2 -2
  75. package/mcp/dist/config.js +78 -0
  76. package/mcp/dist/config.js.map +1 -0
  77. package/mcp/dist/entry.js +112 -0
  78. package/mcp/dist/entry.js.map +1 -0
  79. package/mcp/dist/files.js +64 -0
  80. package/mcp/dist/files.js.map +1 -0
  81. package/mcp/dist/guard.js +262 -0
  82. package/mcp/dist/guard.js.map +1 -0
  83. package/mcp/dist/http.js +111 -0
  84. package/mcp/dist/http.js.map +1 -0
  85. package/mcp/dist/intents.js +579 -0
  86. package/mcp/dist/intents.js.map +1 -0
  87. package/mcp/dist/prompts.js +153 -0
  88. package/mcp/dist/prompts.js.map +1 -0
  89. package/mcp/dist/reach.js +98 -0
  90. package/mcp/dist/reach.js.map +1 -0
  91. package/mcp/dist/resources.js +154 -0
  92. package/mcp/dist/resources.js.map +1 -0
  93. package/mcp/dist/sdk.js +34 -0
  94. package/mcp/dist/sdk.js.map +1 -0
  95. package/mcp/dist/server.js +119 -0
  96. package/mcp/dist/server.js.map +1 -0
  97. package/mcp/dist/setup.js +189 -0
  98. package/mcp/dist/setup.js.map +1 -0
  99. package/mcp/dist/skilltools.js +520 -0
  100. package/mcp/dist/skilltools.js.map +1 -0
  101. package/mcp/dist/terms.js +93 -0
  102. package/mcp/dist/terms.js.map +1 -0
  103. package/mcp/dist/tools.js +1499 -0
  104. package/mcp/dist/tools.js.map +1 -0
  105. package/mcp/dist/wallets.js +168 -0
  106. package/mcp/dist/wallets.js.map +1 -0
  107. package/package.json +18 -13
  108. package/sdk/dist/artifacts/V12Deployments.json +3 -1
  109. package/sdk/dist/artifacts/V12EngineGate.json +1 -2
  110. package/sdk/dist/artifacts/V12KitchenProxy.json +1 -0
  111. package/sdk/dist/chains/canonical.d.ts +15 -24
  112. package/sdk/dist/chains/canonical.d.ts.map +1 -1
  113. package/sdk/dist/chains/canonical.js +18 -29
  114. package/sdk/dist/chains/canonical.js.map +1 -1
  115. package/sdk/dist/cli/actions.d.ts +29 -0
  116. package/sdk/dist/cli/actions.d.ts.map +1 -0
  117. package/sdk/dist/cli/actions.js +122 -0
  118. package/sdk/dist/cli/actions.js.map +1 -0
  119. package/sdk/dist/cli/args.d.ts +118 -0
  120. package/sdk/dist/cli/args.d.ts.map +1 -0
  121. package/sdk/dist/cli/args.js +354 -0
  122. package/sdk/dist/cli/args.js.map +1 -0
  123. package/sdk/dist/cli/assume.d.ts +51 -0
  124. package/sdk/dist/cli/assume.d.ts.map +1 -0
  125. package/sdk/dist/cli/assume.js +207 -0
  126. package/sdk/dist/cli/assume.js.map +1 -0
  127. package/sdk/dist/cli/chain.d.ts +173 -0
  128. package/sdk/dist/cli/chain.d.ts.map +1 -0
  129. package/sdk/dist/cli/chain.js +462 -0
  130. package/sdk/dist/cli/chain.js.map +1 -0
  131. package/sdk/dist/cli/commands.d.ts +226 -0
  132. package/sdk/dist/cli/commands.d.ts.map +1 -0
  133. package/sdk/dist/cli/commands.js +637 -0
  134. package/sdk/dist/cli/commands.js.map +1 -0
  135. package/sdk/dist/cli/create.d.ts +70 -0
  136. package/sdk/dist/cli/create.d.ts.map +1 -0
  137. package/sdk/dist/cli/create.js +483 -0
  138. package/sdk/dist/cli/create.js.map +1 -0
  139. package/sdk/dist/cli/diagnostics.d.ts +12 -0
  140. package/sdk/dist/cli/diagnostics.d.ts.map +1 -0
  141. package/sdk/dist/cli/diagnostics.js +225 -0
  142. package/sdk/dist/cli/diagnostics.js.map +1 -0
  143. package/sdk/dist/cli/effects.d.ts +71 -0
  144. package/sdk/dist/cli/effects.d.ts.map +1 -0
  145. package/sdk/dist/cli/effects.js +279 -0
  146. package/sdk/dist/cli/effects.js.map +1 -0
  147. package/sdk/dist/cli/fill.d.ts +83 -0
  148. package/sdk/dist/cli/fill.d.ts.map +1 -0
  149. package/sdk/dist/cli/fill.js +734 -0
  150. package/sdk/dist/cli/fill.js.map +1 -0
  151. package/sdk/dist/cli/funding.d.ts +126 -0
  152. package/sdk/dist/cli/funding.d.ts.map +1 -0
  153. package/sdk/dist/cli/funding.js +514 -0
  154. package/sdk/dist/cli/funding.js.map +1 -0
  155. package/sdk/dist/cli/globals.d.ts +16 -0
  156. package/sdk/dist/cli/globals.d.ts.map +1 -0
  157. package/sdk/dist/cli/globals.js +219 -0
  158. package/sdk/dist/cli/globals.js.map +1 -0
  159. package/sdk/dist/cli/init.d.ts +34 -0
  160. package/sdk/dist/cli/init.d.ts.map +1 -0
  161. package/sdk/dist/cli/init.js +181 -0
  162. package/sdk/dist/cli/init.js.map +1 -0
  163. package/sdk/dist/cli/inputs.d.ts +72 -0
  164. package/sdk/dist/cli/inputs.d.ts.map +1 -0
  165. package/sdk/dist/cli/inputs.js +152 -0
  166. package/sdk/dist/cli/inputs.js.map +1 -0
  167. package/sdk/dist/cli/inspect.d.ts +48 -0
  168. package/sdk/dist/cli/inspect.d.ts.map +1 -0
  169. package/sdk/dist/cli/inspect.js +536 -0
  170. package/sdk/dist/cli/inspect.js.map +1 -0
  171. package/sdk/dist/cli/intent-commands.d.ts +71 -0
  172. package/sdk/dist/cli/intent-commands.d.ts.map +1 -0
  173. package/sdk/dist/cli/intent-commands.js +698 -0
  174. package/sdk/dist/cli/intent-commands.js.map +1 -0
  175. package/sdk/dist/cli/intent-svm.d.ts +15 -0
  176. package/sdk/dist/cli/intent-svm.d.ts.map +1 -0
  177. package/sdk/dist/cli/intent-svm.js +222 -0
  178. package/sdk/dist/cli/intent-svm.js.map +1 -0
  179. package/sdk/dist/cli/intents.d.ts +43 -0
  180. package/sdk/dist/cli/intents.d.ts.map +1 -0
  181. package/sdk/dist/cli/intents.js +89 -0
  182. package/sdk/dist/cli/intents.js.map +1 -0
  183. package/sdk/dist/cli/interactive.d.ts +11 -0
  184. package/sdk/dist/cli/interactive.d.ts.map +1 -0
  185. package/sdk/dist/cli/interactive.js +161 -0
  186. package/sdk/dist/cli/interactive.js.map +1 -0
  187. package/sdk/dist/cli/lifecycle-svm.d.ts +109 -0
  188. package/sdk/dist/cli/lifecycle-svm.d.ts.map +1 -0
  189. package/sdk/dist/cli/lifecycle-svm.js +299 -0
  190. package/sdk/dist/cli/lifecycle-svm.js.map +1 -0
  191. package/sdk/dist/cli/lifecycle.d.ts +439 -0
  192. package/sdk/dist/cli/lifecycle.d.ts.map +1 -0
  193. package/sdk/dist/cli/lifecycle.js +1721 -0
  194. package/sdk/dist/cli/lifecycle.js.map +1 -0
  195. package/sdk/dist/cli/main.d.ts +3 -0
  196. package/sdk/dist/cli/main.d.ts.map +1 -0
  197. package/sdk/dist/cli/main.js +8 -0
  198. package/sdk/dist/cli/main.js.map +1 -0
  199. package/sdk/dist/cli/mcp.d.ts +66 -0
  200. package/sdk/dist/cli/mcp.d.ts.map +1 -0
  201. package/sdk/dist/cli/mcp.js +169 -0
  202. package/sdk/dist/cli/mcp.js.map +1 -0
  203. package/sdk/dist/cli/password.d.ts +54 -0
  204. package/sdk/dist/cli/password.d.ts.map +1 -0
  205. package/sdk/dist/cli/password.js +148 -0
  206. package/sdk/dist/cli/password.js.map +1 -0
  207. package/sdk/dist/cli/policy.d.ts +130 -0
  208. package/sdk/dist/cli/policy.d.ts.map +1 -0
  209. package/sdk/dist/cli/policy.js +702 -0
  210. package/sdk/dist/cli/policy.js.map +1 -0
  211. package/sdk/dist/cli/pools.d.ts +140 -0
  212. package/sdk/dist/cli/pools.d.ts.map +1 -0
  213. package/sdk/dist/cli/pools.js +658 -0
  214. package/sdk/dist/cli/pools.js.map +1 -0
  215. package/sdk/dist/cli/price.d.ts +74 -0
  216. package/sdk/dist/cli/price.d.ts.map +1 -0
  217. package/sdk/dist/cli/price.js +321 -0
  218. package/sdk/dist/cli/price.js.map +1 -0
  219. package/sdk/dist/cli/prompt.d.ts +30 -0
  220. package/sdk/dist/cli/prompt.d.ts.map +1 -0
  221. package/sdk/dist/cli/prompt.js +53 -0
  222. package/sdk/dist/cli/prompt.js.map +1 -0
  223. package/sdk/dist/cli/publish.d.ts +48 -0
  224. package/sdk/dist/cli/publish.d.ts.map +1 -0
  225. package/sdk/dist/cli/publish.js +480 -0
  226. package/sdk/dist/cli/publish.js.map +1 -0
  227. package/sdk/dist/cli/receipt.d.ts +35 -0
  228. package/sdk/dist/cli/receipt.d.ts.map +1 -0
  229. package/sdk/dist/cli/receipt.js +63 -0
  230. package/sdk/dist/cli/receipt.js.map +1 -0
  231. package/sdk/dist/cli/rehearse.d.ts +80 -0
  232. package/sdk/dist/cli/rehearse.d.ts.map +1 -0
  233. package/sdk/dist/cli/rehearse.js +265 -0
  234. package/sdk/dist/cli/rehearse.js.map +1 -0
  235. package/sdk/dist/cli/report.d.ts +69 -0
  236. package/sdk/dist/cli/report.d.ts.map +1 -0
  237. package/sdk/dist/cli/report.js +206 -0
  238. package/sdk/dist/cli/report.js.map +1 -0
  239. package/sdk/dist/cli/returned.d.ts +16 -0
  240. package/sdk/dist/cli/returned.d.ts.map +1 -0
  241. package/sdk/dist/cli/returned.js +111 -0
  242. package/sdk/dist/cli/returned.js.map +1 -0
  243. package/sdk/dist/cli/run.d.ts +40 -0
  244. package/sdk/dist/cli/run.d.ts.map +1 -0
  245. package/sdk/dist/cli/run.js +3163 -0
  246. package/sdk/dist/cli/run.js.map +1 -0
  247. package/sdk/dist/cli/signer.d.ts +72 -0
  248. package/sdk/dist/cli/signer.d.ts.map +1 -0
  249. package/sdk/dist/cli/signer.js +243 -0
  250. package/sdk/dist/cli/signer.js.map +1 -0
  251. package/sdk/dist/cli/simulate.d.ts +11 -0
  252. package/sdk/dist/cli/simulate.d.ts.map +1 -0
  253. package/sdk/dist/cli/simulate.js +246 -0
  254. package/sdk/dist/cli/simulate.js.map +1 -0
  255. package/sdk/dist/cli/skills.d.ts +77 -0
  256. package/sdk/dist/cli/skills.d.ts.map +1 -0
  257. package/sdk/dist/cli/skills.js +527 -0
  258. package/sdk/dist/cli/skills.js.map +1 -0
  259. package/sdk/dist/cli/solana.d.ts +184 -0
  260. package/sdk/dist/cli/solana.d.ts.map +1 -0
  261. package/sdk/dist/cli/solana.js +1370 -0
  262. package/sdk/dist/cli/solana.js.map +1 -0
  263. package/sdk/dist/cli/store.d.ts +60 -0
  264. package/sdk/dist/cli/store.d.ts.map +1 -0
  265. package/sdk/dist/cli/store.js +196 -0
  266. package/sdk/dist/cli/store.js.map +1 -0
  267. package/sdk/dist/cli/support.d.ts +144 -0
  268. package/sdk/dist/cli/support.d.ts.map +1 -0
  269. package/sdk/dist/cli/support.js +217 -0
  270. package/sdk/dist/cli/support.js.map +1 -0
  271. package/sdk/dist/cli/svm-effects.d.ts +50 -0
  272. package/sdk/dist/cli/svm-effects.d.ts.map +1 -0
  273. package/sdk/dist/cli/svm-effects.js +196 -0
  274. package/sdk/dist/cli/svm-effects.js.map +1 -0
  275. package/sdk/dist/cli/terminal.d.ts +42 -0
  276. package/sdk/dist/cli/terminal.d.ts.map +1 -0
  277. package/sdk/dist/cli/terminal.js +136 -0
  278. package/sdk/dist/cli/terminal.js.map +1 -0
  279. package/sdk/dist/cli/verify.d.ts +32 -0
  280. package/sdk/dist/cli/verify.d.ts.map +1 -0
  281. package/sdk/dist/cli/verify.js +185 -0
  282. package/sdk/dist/cli/verify.js.map +1 -0
  283. package/sdk/dist/cli/wallet-commands.d.ts +59 -0
  284. package/sdk/dist/cli/wallet-commands.d.ts.map +1 -0
  285. package/sdk/dist/cli/wallet-commands.js +222 -0
  286. package/sdk/dist/cli/wallet-commands.js.map +1 -0
  287. package/sdk/dist/cli/wallet-send.d.ts +38 -0
  288. package/sdk/dist/cli/wallet-send.d.ts.map +1 -0
  289. package/sdk/dist/cli/wallet-send.js +303 -0
  290. package/sdk/dist/cli/wallet-send.js.map +1 -0
  291. package/sdk/dist/cli/wallets.d.ts +79 -0
  292. package/sdk/dist/cli/wallets.d.ts.map +1 -0
  293. package/sdk/dist/cli/wallets.js +297 -0
  294. package/sdk/dist/cli/wallets.js.map +1 -0
  295. package/sdk/dist/deployments/index.d.ts +4 -62
  296. package/sdk/dist/deployments/index.d.ts.map +1 -1
  297. package/sdk/dist/deployments/index.js +4 -84
  298. package/sdk/dist/deployments/index.js.map +1 -1
  299. package/sdk/dist/deployments/pot.d.ts +17 -7
  300. package/sdk/dist/deployments/pot.d.ts.map +1 -1
  301. package/sdk/dist/deployments/pot.js +25 -10
  302. package/sdk/dist/deployments/pot.js.map +1 -1
  303. package/sdk/dist/deployments/releases.d.ts +36 -0
  304. package/sdk/dist/deployments/releases.d.ts.map +1 -0
  305. package/sdk/dist/deployments/releases.js +61 -0
  306. package/sdk/dist/deployments/releases.js.map +1 -0
  307. package/sdk/dist/deployments/releases.json +76 -0
  308. package/sdk/dist/deployments/v12-addresses.d.ts +13 -0
  309. package/sdk/dist/deployments/v12-addresses.d.ts.map +1 -1
  310. package/sdk/dist/deployments/v12-addresses.js +16 -3
  311. package/sdk/dist/deployments/v12-addresses.js.map +1 -1
  312. package/sdk/dist/deposit/index.d.ts +6 -6
  313. package/sdk/dist/deposit/index.d.ts.map +1 -1
  314. package/sdk/dist/deposit/index.js +1 -1
  315. package/sdk/dist/deposit/index.js.map +1 -1
  316. package/sdk/dist/deposit/params.d.ts +4 -4
  317. package/sdk/dist/deposit/params.d.ts.map +1 -1
  318. package/sdk/dist/deposit/params.js +7 -4
  319. package/sdk/dist/deposit/params.js.map +1 -1
  320. package/sdk/dist/deposit/source.d.ts +3 -30
  321. package/sdk/dist/deposit/source.d.ts.map +1 -1
  322. package/sdk/dist/deposit/source.js +7 -83
  323. package/sdk/dist/deposit/source.js.map +1 -1
  324. package/sdk/dist/deposit/templates.d.ts +1 -2
  325. package/sdk/dist/deposit/templates.d.ts.map +1 -1
  326. package/sdk/dist/deposit/templates.js +10 -2
  327. package/sdk/dist/deposit/templates.js.map +1 -1
  328. package/sdk/dist/deposit/types.d.ts +14 -12
  329. package/sdk/dist/deposit/types.d.ts.map +1 -1
  330. package/sdk/dist/deposit/types.js +6 -0
  331. package/sdk/dist/deposit/types.js.map +1 -1
  332. package/sdk/dist/descriptors/accessors.d.ts +38 -35
  333. package/sdk/dist/descriptors/accessors.d.ts.map +1 -1
  334. package/sdk/dist/descriptors/accessors.js +16 -0
  335. package/sdk/dist/descriptors/accessors.js.map +1 -1
  336. package/sdk/dist/descriptors/call.d.ts +66 -14
  337. package/sdk/dist/descriptors/call.d.ts.map +1 -1
  338. package/sdk/dist/descriptors/call.js +94 -13
  339. package/sdk/dist/descriptors/call.js.map +1 -1
  340. package/sdk/dist/descriptors/contracts.generated.d.ts +3393 -0
  341. package/sdk/dist/descriptors/contracts.generated.d.ts.map +1 -0
  342. package/sdk/dist/descriptors/contracts.generated.js +728 -0
  343. package/sdk/dist/descriptors/contracts.generated.js.map +1 -0
  344. package/sdk/dist/descriptors/derive.d.ts +20 -11
  345. package/sdk/dist/descriptors/derive.d.ts.map +1 -1
  346. package/sdk/dist/descriptors/derive.js +68 -30
  347. package/sdk/dist/descriptors/derive.js.map +1 -1
  348. package/sdk/dist/descriptors/index.d.ts +6 -7
  349. package/sdk/dist/descriptors/index.d.ts.map +1 -1
  350. package/sdk/dist/descriptors/index.js +2 -2
  351. package/sdk/dist/descriptors/index.js.map +1 -1
  352. package/sdk/dist/descriptors/links.d.ts +23 -214
  353. package/sdk/dist/descriptors/links.d.ts.map +1 -1
  354. package/sdk/dist/descriptors/links.js +1 -232
  355. package/sdk/dist/descriptors/links.js.map +1 -1
  356. package/sdk/dist/descriptors/query.d.ts +1 -1
  357. package/sdk/dist/descriptors/query.d.ts.map +1 -1
  358. package/sdk/dist/descriptors/query.js +1 -1
  359. package/sdk/dist/descriptors/query.js.map +1 -1
  360. package/sdk/dist/descriptors/registry.d.ts +2 -5
  361. package/sdk/dist/descriptors/registry.d.ts.map +1 -1
  362. package/sdk/dist/descriptors/registry.js +11 -66
  363. package/sdk/dist/descriptors/registry.js.map +1 -1
  364. package/sdk/dist/embedded/resolve.d.ts +4 -4
  365. package/sdk/dist/embedded/resolve.d.ts.map +1 -1
  366. package/sdk/dist/embedded/resolve.js +12 -8
  367. package/sdk/dist/embedded/resolve.js.map +1 -1
  368. package/sdk/dist/embedded/skills.generated.d.ts +1 -1
  369. package/sdk/dist/embedded/skills.generated.d.ts.map +1 -1
  370. package/sdk/dist/embedded/skills.generated.js +137 -136
  371. package/sdk/dist/embedded/skills.generated.js.map +1 -1
  372. package/sdk/dist/embedded/sources.generated.d.ts.map +1 -1
  373. package/sdk/dist/embedded/sources.generated.js +40 -6
  374. package/sdk/dist/embedded/sources.generated.js.map +1 -1
  375. package/sdk/dist/evm/engine.d.ts +813 -10
  376. package/sdk/dist/evm/engine.d.ts.map +1 -1
  377. package/sdk/dist/evm/engine.js +127 -8
  378. package/sdk/dist/evm/engine.js.map +1 -1
  379. package/sdk/dist/index.d.ts +3 -2
  380. package/sdk/dist/index.d.ts.map +1 -1
  381. package/sdk/dist/index.js +6 -2
  382. package/sdk/dist/index.js.map +1 -1
  383. package/sdk/dist/price.d.ts +40 -0
  384. package/sdk/dist/price.d.ts.map +1 -0
  385. package/sdk/dist/price.js +101 -0
  386. package/sdk/dist/price.js.map +1 -0
  387. package/sdk/dist/protocols/aerodrome/abis.d.ts +76 -0
  388. package/sdk/dist/protocols/aerodrome/abis.d.ts.map +1 -1
  389. package/sdk/dist/protocols/aerodrome/abis.js +61 -0
  390. package/sdk/dist/protocols/aerodrome/abis.js.map +1 -1
  391. package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts +70 -0
  392. package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts.map +1 -1
  393. package/sdk/dist/protocols/aerodrome-slipstream/abis.js +54 -0
  394. package/sdk/dist/protocols/aerodrome-slipstream/abis.js.map +1 -1
  395. package/sdk/dist/protocols/camelot/abis.d.ts +178 -0
  396. package/sdk/dist/protocols/camelot/abis.d.ts.map +1 -1
  397. package/sdk/dist/protocols/camelot/abis.js +139 -0
  398. package/sdk/dist/protocols/camelot/abis.js.map +1 -1
  399. package/sdk/dist/protocols/eco-routes/abis.d.ts +792 -50
  400. package/sdk/dist/protocols/eco-routes/abis.d.ts.map +1 -1
  401. package/sdk/dist/protocols/eco-routes/abis.js +1058 -49
  402. package/sdk/dist/protocols/eco-routes/abis.js.map +1 -1
  403. package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts +44 -61
  404. package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts.map +1 -1
  405. package/sdk/dist/protocols/eco-routes/addresses.generated.js +45 -62
  406. package/sdk/dist/protocols/eco-routes/addresses.generated.js.map +1 -1
  407. package/sdk/dist/protocols/eco-routes/lookup.d.ts +10 -0
  408. package/sdk/dist/protocols/eco-routes/lookup.d.ts.map +1 -1
  409. package/sdk/dist/protocols/eco-routes/lookup.js +16 -0
  410. package/sdk/dist/protocols/eco-routes/lookup.js.map +1 -1
  411. package/sdk/dist/protocols/maverick/abis.d.ts +77 -0
  412. package/sdk/dist/protocols/maverick/abis.d.ts.map +1 -1
  413. package/sdk/dist/protocols/maverick/abis.js +58 -0
  414. package/sdk/dist/protocols/maverick/abis.js.map +1 -1
  415. package/sdk/dist/protocols/maverick/addresses.d.ts.map +1 -1
  416. package/sdk/dist/protocols/maverick/addresses.js +4 -0
  417. package/sdk/dist/protocols/maverick/addresses.js.map +1 -1
  418. package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts +52 -0
  419. package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts.map +1 -1
  420. package/sdk/dist/protocols/pancakeswap-v2/abis.js +43 -0
  421. package/sdk/dist/protocols/pancakeswap-v2/abis.js.map +1 -1
  422. package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts +73 -0
  423. package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts.map +1 -1
  424. package/sdk/dist/protocols/pancakeswap-v3/abis.js +56 -0
  425. package/sdk/dist/protocols/pancakeswap-v3/abis.js.map +1 -1
  426. package/sdk/dist/protocols/permit2/abis.d.ts +113 -0
  427. package/sdk/dist/protocols/permit2/abis.d.ts.map +1 -1
  428. package/sdk/dist/protocols/permit2/abis.js +63 -0
  429. package/sdk/dist/protocols/permit2/abis.js.map +1 -1
  430. package/sdk/dist/protocols/quickswap/abis.d.ts +148 -0
  431. package/sdk/dist/protocols/quickswap/abis.d.ts.map +1 -1
  432. package/sdk/dist/protocols/quickswap/abis.js +119 -0
  433. package/sdk/dist/protocols/quickswap/abis.js.map +1 -1
  434. package/sdk/dist/protocols/sushiswap-v2/abis.d.ts +52 -0
  435. package/sdk/dist/protocols/sushiswap-v2/abis.d.ts.map +1 -1
  436. package/sdk/dist/protocols/sushiswap-v2/abis.js +42 -0
  437. package/sdk/dist/protocols/sushiswap-v2/abis.js.map +1 -1
  438. package/sdk/dist/protocols/synthra-v3/abis.d.ts +73 -0
  439. package/sdk/dist/protocols/synthra-v3/abis.d.ts.map +1 -1
  440. package/sdk/dist/protocols/synthra-v3/abis.js +55 -0
  441. package/sdk/dist/protocols/synthra-v3/abis.js.map +1 -1
  442. package/sdk/dist/protocols/trader-joe/abis.d.ts +133 -0
  443. package/sdk/dist/protocols/trader-joe/abis.d.ts.map +1 -1
  444. package/sdk/dist/protocols/trader-joe/abis.js +101 -0
  445. package/sdk/dist/protocols/trader-joe/abis.js.map +1 -1
  446. package/sdk/dist/protocols/trader-joe/addresses.d.ts.map +1 -1
  447. package/sdk/dist/protocols/trader-joe/addresses.js +5 -0
  448. package/sdk/dist/protocols/trader-joe/addresses.js.map +1 -1
  449. package/sdk/dist/protocols/uniswap-v2/abis.d.ts +52 -0
  450. package/sdk/dist/protocols/uniswap-v2/abis.d.ts.map +1 -1
  451. package/sdk/dist/protocols/uniswap-v2/abis.js +44 -0
  452. package/sdk/dist/protocols/uniswap-v2/abis.js.map +1 -1
  453. package/sdk/dist/protocols/uniswap-v3/abis.d.ts +73 -0
  454. package/sdk/dist/protocols/uniswap-v3/abis.d.ts.map +1 -1
  455. package/sdk/dist/protocols/uniswap-v3/abis.js +55 -0
  456. package/sdk/dist/protocols/uniswap-v3/abis.js.map +1 -1
  457. package/sdk/dist/protocols/uniswap-v4/abis.d.ts +247 -0
  458. package/sdk/dist/protocols/uniswap-v4/abis.d.ts.map +1 -1
  459. package/sdk/dist/protocols/uniswap-v4/abis.js +167 -0
  460. package/sdk/dist/protocols/uniswap-v4/abis.js.map +1 -1
  461. package/sdk/dist/protocols/uniswap-v4/addresses.d.ts.map +1 -1
  462. package/sdk/dist/protocols/uniswap-v4/addresses.js +50 -0
  463. package/sdk/dist/protocols/uniswap-v4/addresses.js.map +1 -1
  464. package/sdk/dist/protocols/unitflow-v3/abis.d.ts +73 -0
  465. package/sdk/dist/protocols/unitflow-v3/abis.d.ts.map +1 -1
  466. package/sdk/dist/protocols/unitflow-v3/abis.js +56 -0
  467. package/sdk/dist/protocols/unitflow-v3/abis.js.map +1 -1
  468. package/sdk/dist/protocols/velodrome/abis.d.ts +76 -0
  469. package/sdk/dist/protocols/velodrome/abis.d.ts.map +1 -1
  470. package/sdk/dist/protocols/velodrome/abis.js +61 -0
  471. package/sdk/dist/protocols/velodrome/abis.js.map +1 -1
  472. package/sdk/dist/recipes/cctp-split.sauce.ts +2 -2
  473. package/sdk/dist/recipes/plain-transfer.sauce.ts +2 -2
  474. package/sdk/dist/routes/accessor-index.d.ts +2 -2
  475. package/sdk/dist/routes/accessor-index.d.ts.map +1 -1
  476. package/sdk/dist/routes/accessor-index.js +4 -3
  477. package/sdk/dist/routes/accessor-index.js.map +1 -1
  478. package/sdk/dist/routes/ambient.d.ts +5 -0
  479. package/sdk/dist/routes/ambient.d.ts.map +1 -1
  480. package/sdk/dist/routes/ambient.js +20 -0
  481. package/sdk/dist/routes/ambient.js.map +1 -1
  482. package/sdk/dist/routes/ast-walk.d.ts +17 -3
  483. package/sdk/dist/routes/ast-walk.d.ts.map +1 -1
  484. package/sdk/dist/routes/ast-walk.js +24 -2
  485. package/sdk/dist/routes/ast-walk.js.map +1 -1
  486. package/sdk/dist/routes/available.d.ts +43 -0
  487. package/sdk/dist/routes/available.d.ts.map +1 -0
  488. package/sdk/dist/routes/available.js +230 -0
  489. package/sdk/dist/routes/available.js.map +1 -0
  490. package/sdk/dist/routes/builtins.generated.d.ts +180 -0
  491. package/sdk/dist/routes/builtins.generated.d.ts.map +1 -0
  492. package/sdk/dist/routes/builtins.generated.js +2 -0
  493. package/sdk/dist/routes/builtins.generated.js.map +1 -0
  494. package/sdk/dist/routes/chain-exports.generated.d.ts +13 -8
  495. package/sdk/dist/routes/chain-exports.generated.d.ts.map +1 -1
  496. package/sdk/dist/routes/chain-exports.generated.js.map +1 -1
  497. package/sdk/dist/routes/closure.d.ts.map +1 -1
  498. package/sdk/dist/routes/closure.js +13 -26
  499. package/sdk/dist/routes/closure.js.map +1 -1
  500. package/sdk/dist/routes/composed.d.ts.map +1 -1
  501. package/sdk/dist/routes/composed.js +20 -8
  502. package/sdk/dist/routes/composed.js.map +1 -1
  503. package/sdk/dist/routes/encode.d.ts +17 -0
  504. package/sdk/dist/routes/encode.d.ts.map +1 -1
  505. package/sdk/dist/routes/encode.js +14 -11
  506. package/sdk/dist/routes/encode.js.map +1 -1
  507. package/sdk/dist/routes/entry.d.ts +76 -0
  508. package/sdk/dist/routes/entry.d.ts.map +1 -0
  509. package/sdk/dist/routes/entry.js +478 -0
  510. package/sdk/dist/routes/entry.js.map +1 -0
  511. package/sdk/dist/routes/index.d.ts +19 -12
  512. package/sdk/dist/routes/index.d.ts.map +1 -1
  513. package/sdk/dist/routes/index.js +11 -8
  514. package/sdk/dist/routes/index.js.map +1 -1
  515. package/sdk/dist/routes/intent-body.d.ts +97 -0
  516. package/sdk/dist/routes/intent-body.d.ts.map +1 -0
  517. package/sdk/dist/routes/intent-body.js +441 -0
  518. package/sdk/dist/routes/intent-body.js.map +1 -0
  519. package/sdk/dist/routes/intent-dsl.d.ts +21 -6
  520. package/sdk/dist/routes/intent-dsl.d.ts.map +1 -1
  521. package/sdk/dist/routes/intent-dsl.js +34 -17
  522. package/sdk/dist/routes/intent-dsl.js.map +1 -1
  523. package/sdk/dist/routes/intent-sugar.d.ts +77 -4
  524. package/sdk/dist/routes/intent-sugar.d.ts.map +1 -1
  525. package/sdk/dist/routes/intent-sugar.js +318 -129
  526. package/sdk/dist/routes/intent-sugar.js.map +1 -1
  527. package/sdk/dist/routes/intent.d.ts +13 -1
  528. package/sdk/dist/routes/intent.d.ts.map +1 -1
  529. package/sdk/dist/routes/intent.js +37 -1
  530. package/sdk/dist/routes/intent.js.map +1 -1
  531. package/sdk/dist/routes/nest.d.ts +3 -2
  532. package/sdk/dist/routes/nest.d.ts.map +1 -1
  533. package/sdk/dist/routes/nest.js +5 -3
  534. package/sdk/dist/routes/nest.js.map +1 -1
  535. package/sdk/dist/routes/parse.d.ts +6 -0
  536. package/sdk/dist/routes/parse.d.ts.map +1 -0
  537. package/sdk/dist/routes/parse.js +39 -0
  538. package/sdk/dist/routes/parse.js.map +1 -0
  539. package/sdk/dist/routes/portal.d.ts +258 -4
  540. package/sdk/dist/routes/portal.d.ts.map +1 -1
  541. package/sdk/dist/routes/portal.js +588 -9
  542. package/sdk/dist/routes/portal.js.map +1 -1
  543. package/sdk/dist/routes/protocol-rewrite.d.ts +71 -1
  544. package/sdk/dist/routes/protocol-rewrite.d.ts.map +1 -1
  545. package/sdk/dist/routes/protocol-rewrite.js +178 -54
  546. package/sdk/dist/routes/protocol-rewrite.js.map +1 -1
  547. package/sdk/dist/routes/rs-compile.d.ts +25 -22
  548. package/sdk/dist/routes/rs-compile.d.ts.map +1 -1
  549. package/sdk/dist/routes/rs-compile.js +55 -49
  550. package/sdk/dist/routes/rs-compile.js.map +1 -1
  551. package/sdk/dist/routes/sauce-calls.d.ts +26 -12
  552. package/sdk/dist/routes/sauce-calls.d.ts.map +1 -1
  553. package/sdk/dist/routes/sauce-calls.js +16 -23
  554. package/sdk/dist/routes/sauce-calls.js.map +1 -1
  555. package/sdk/dist/routes/sauce-route.d.ts +74 -7
  556. package/sdk/dist/routes/sauce-route.d.ts.map +1 -1
  557. package/sdk/dist/routes/sauce-route.js +225 -75
  558. package/sdk/dist/routes/sauce-route.js.map +1 -1
  559. package/sdk/dist/routes/source-globals.d.ts +107 -0
  560. package/sdk/dist/routes/source-globals.d.ts.map +1 -0
  561. package/sdk/dist/routes/source-globals.generated.d.ts +5601 -933
  562. package/sdk/dist/routes/source-globals.generated.d.ts.map +1 -1
  563. package/sdk/dist/routes/source-globals.generated.js +3 -4
  564. package/sdk/dist/routes/source-globals.generated.js.map +1 -1
  565. package/sdk/dist/routes/source-globals.js +175 -0
  566. package/sdk/dist/routes/source-globals.js.map +1 -0
  567. package/sdk/dist/routes/stock-tokens.d.ts +89 -0
  568. package/sdk/dist/routes/stock-tokens.d.ts.map +1 -0
  569. package/sdk/dist/routes/stock-tokens.generated.d.ts +7 -0
  570. package/sdk/dist/routes/stock-tokens.generated.d.ts.map +1 -0
  571. package/sdk/dist/routes/stock-tokens.generated.js +3664 -0
  572. package/sdk/dist/routes/stock-tokens.generated.js.map +1 -0
  573. package/sdk/dist/routes/stock-tokens.js +89 -0
  574. package/sdk/dist/routes/stock-tokens.js.map +1 -0
  575. package/sdk/dist/routes/token-registry.d.ts +68 -8
  576. package/sdk/dist/routes/token-registry.d.ts.map +1 -1
  577. package/sdk/dist/routes/token-registry.js +218 -32
  578. package/sdk/dist/routes/token-registry.js.map +1 -1
  579. package/sdk/dist/routes/token-rewrite.d.ts +1 -1
  580. package/sdk/dist/routes/token-rewrite.d.ts.map +1 -1
  581. package/sdk/dist/routes/token-rewrite.js +5 -9
  582. package/sdk/dist/routes/token-rewrite.js.map +1 -1
  583. package/sdk/dist/routes/unknown-global.d.ts +32 -0
  584. package/sdk/dist/routes/unknown-global.d.ts.map +1 -0
  585. package/sdk/dist/routes/unknown-global.js +106 -0
  586. package/sdk/dist/routes/unknown-global.js.map +1 -0
  587. package/sdk/dist/routes/vault.d.ts +38 -8
  588. package/sdk/dist/routes/vault.d.ts.map +1 -1
  589. package/sdk/dist/routes/vault.js +47 -8
  590. package/sdk/dist/routes/vault.js.map +1 -1
  591. package/sdk/dist/sauce-script/builtins.d.ts +309 -0
  592. package/sdk/dist/sauce-script/declarations.d.ts +3 -0
  593. package/sdk/dist/sauce-script/declarations.d.ts.map +1 -0
  594. package/sdk/dist/sauce-script/declarations.js +229 -0
  595. package/sdk/dist/sauce-script/declarations.js.map +1 -0
  596. package/sdk/dist/sauce-script/index.d.ts +2714 -0
  597. package/sdk/dist/sauce-script/ts-plugin.cjs +85 -0
  598. package/sdk/dist/skills/loader.d.ts.map +1 -1
  599. package/sdk/dist/skills/loader.js +4 -3
  600. package/sdk/dist/skills/loader.js.map +1 -1
  601. package/sdk/dist/std/router/balancer-v2-vault.abi.json +78 -0
  602. package/sdk/dist/std/router/curve-cryptoswap.abi.json +29 -0
  603. package/sdk/dist/std/router/curve-stableswap.abi.json +29 -0
  604. package/sdk/dist/std/router/dodo-v2-pool.abi.json +39 -0
  605. package/sdk/dist/std/router/lb-pair.abi.json +55 -0
  606. package/sdk/dist/std/router/package.json +7 -0
  607. package/sdk/dist/std/router/router.evm.js +567 -0
  608. package/sdk/dist/std/router/sauce-router.abi.json +202 -0
  609. package/sdk/dist/std/router/uniswap-v2-pair.abi.json +49 -0
  610. package/sdk/dist/std/router/woo-pp-v2.abi.json +42 -0
  611. package/sdk/dist/std/token/permit2.abi.json +226 -0
  612. package/sdk/dist/std/token/token.evm.js +73 -0
  613. package/sdk/dist/std/token/token.svm.js +194 -41
  614. package/sdk/dist/svm/client.d.ts +62 -15
  615. package/sdk/dist/svm/client.d.ts.map +1 -1
  616. package/sdk/dist/svm/client.js +103 -42
  617. package/sdk/dist/svm/client.js.map +1 -1
  618. package/sdk/dist/svm/engine.d.ts +66 -5
  619. package/sdk/dist/svm/engine.d.ts.map +1 -1
  620. package/sdk/dist/svm/engine.js +73 -5
  621. package/sdk/dist/svm/engine.js.map +1 -1
  622. package/sdk/dist/svm/index.d.ts +2 -0
  623. package/sdk/dist/svm/index.d.ts.map +1 -1
  624. package/sdk/dist/svm/index.js +2 -0
  625. package/sdk/dist/svm/index.js.map +1 -1
  626. package/sdk/dist/svm/instructions.d.ts +72 -1
  627. package/sdk/dist/svm/instructions.d.ts.map +1 -1
  628. package/sdk/dist/svm/instructions.js +81 -2
  629. package/sdk/dist/svm/instructions.js.map +1 -1
  630. package/sdk/dist/svm/kitchen.d.ts +20 -1
  631. package/sdk/dist/svm/kitchen.d.ts.map +1 -1
  632. package/sdk/dist/svm/kitchen.js +47 -1
  633. package/sdk/dist/svm/kitchen.js.map +1 -1
  634. package/sdk/dist/svm/portal.d.ts +250 -0
  635. package/sdk/dist/svm/portal.d.ts.map +1 -0
  636. package/sdk/dist/svm/portal.js +462 -0
  637. package/sdk/dist/svm/portal.js.map +1 -0
  638. package/sdk/dist/svm/send.d.ts +18 -2
  639. package/sdk/dist/svm/send.d.ts.map +1 -1
  640. package/sdk/dist/svm/send.js +28 -3
  641. package/sdk/dist/svm/send.js.map +1 -1
  642. package/sdk/dist/svm/token-accounts.d.ts +49 -0
  643. package/sdk/dist/svm/token-accounts.d.ts.map +1 -0
  644. package/sdk/dist/svm/token-accounts.js +58 -0
  645. package/sdk/dist/svm/token-accounts.js.map +1 -0
  646. package/sdk/dist/svm/token-extensions.d.ts +18 -7
  647. package/sdk/dist/svm/token-extensions.d.ts.map +1 -1
  648. package/sdk/dist/svm/token-extensions.js +58 -5
  649. package/sdk/dist/svm/token-extensions.js.map +1 -1
  650. package/sdk/dist/token/evm.js +1 -1
  651. package/sdk/dist/token/index.d.ts +1 -1
  652. package/sdk/dist/token/index.js +1 -1
  653. package/sdk/dist/token/params.js +1 -1
  654. package/sdk/dist/token/source.js +3 -3
  655. package/sdk/dist/token/source.js.map +1 -1
  656. package/sdk/dist/token/types.d.ts +2 -2
  657. package/sdk/dist/token/types.js +2 -2
  658. package/sdk/src/protocols/aerodrome/AerodromePoolABI.json +105 -0
  659. package/sdk/src/protocols/aerodrome/abis.ts +62 -0
  660. package/sdk/src/protocols/aerodrome-slipstream/AerodromeSlipstreamPoolABI.json +96 -0
  661. package/sdk/src/protocols/aerodrome-slipstream/abis.ts +55 -0
  662. package/sdk/src/protocols/camelot/CamelotV2FactoryABI.json +25 -0
  663. package/sdk/src/protocols/camelot/CamelotV2PairABI.json +109 -0
  664. package/sdk/src/protocols/camelot/CamelotV3FactoryABI.json +25 -0
  665. package/sdk/src/protocols/camelot/CamelotV3PoolABI.json +92 -0
  666. package/sdk/src/protocols/camelot/abis.ts +143 -0
  667. package/sdk/src/protocols/eco-routes/PortalABI.json +1448 -0
  668. package/sdk/src/protocols/eco-routes/ProverABI.json +162 -0
  669. package/sdk/src/protocols/eco-routes/abis.ts +1060 -51
  670. package/sdk/src/protocols/eco-routes/addresses.generated.ts +45 -62
  671. package/sdk/src/protocols/eco-routes/lookup.ts +18 -0
  672. package/sdk/src/protocols/maverick/MaverickV2PoolABI.json +107 -0
  673. package/sdk/src/protocols/maverick/abis.ts +59 -0
  674. package/sdk/src/protocols/maverick/addresses.ts +4 -0
  675. package/sdk/src/protocols/pancakeswap-v2/PancakeSwapV2PairABI.json +72 -0
  676. package/sdk/src/protocols/pancakeswap-v2/abis.ts +44 -0
  677. package/sdk/src/protocols/pancakeswap-v3/PancakeSwapV3PoolABI.json +100 -0
  678. package/sdk/src/protocols/pancakeswap-v3/abis.ts +57 -0
  679. package/sdk/src/protocols/permit2/Permit2ABI.json +154 -0
  680. package/sdk/src/protocols/permit2/abis.ts +63 -0
  681. package/sdk/src/protocols/quickswap/QuickSwapV2FactoryABI.json +25 -0
  682. package/sdk/src/protocols/quickswap/QuickSwapV2PairABI.json +72 -0
  683. package/sdk/src/protocols/quickswap/QuickSwapV3FactoryABI.json +25 -0
  684. package/sdk/src/protocols/quickswap/QuickSwapV3PoolABI.json +88 -0
  685. package/sdk/src/protocols/quickswap/abis.ts +123 -0
  686. package/sdk/src/protocols/sushiswap-v2/SushiSwapV2PairABI.json +72 -0
  687. package/sdk/src/protocols/sushiswap-v2/abis.ts +43 -0
  688. package/sdk/src/protocols/synthra-v3/SynthraV3PoolABI.json +100 -0
  689. package/sdk/src/protocols/synthra-v3/abis.ts +56 -0
  690. package/sdk/src/protocols/trader-joe/LBPairABI.json +185 -0
  691. package/sdk/src/protocols/trader-joe/abis.ts +102 -0
  692. package/sdk/src/protocols/trader-joe/addresses.ts +5 -0
  693. package/sdk/src/protocols/uniswap-v2/UniswapV2PairABI.json +72 -0
  694. package/sdk/src/protocols/uniswap-v2/abis.ts +45 -0
  695. package/sdk/src/protocols/uniswap-v3/UniswapV3PoolABI.json +100 -0
  696. package/sdk/src/protocols/uniswap-v3/abis.ts +56 -0
  697. package/sdk/src/protocols/uniswap-v4/UniswapV4PoolManagerABI.json +38 -0
  698. package/sdk/src/protocols/uniswap-v4/UniswapV4StateViewABI.json +307 -0
  699. package/sdk/src/protocols/uniswap-v4/abis.ts +168 -0
  700. package/sdk/src/protocols/uniswap-v4/addresses.ts +50 -0
  701. package/sdk/src/protocols/unitflow-v3/UnitFlowV3PoolABI.json +100 -0
  702. package/sdk/src/protocols/unitflow-v3/abis.ts +57 -0
  703. package/sdk/src/protocols/velodrome/VelodromePoolABI.json +105 -0
  704. package/sdk/src/protocols/velodrome/abis.ts +62 -0
  705. package/skills/sauce-actions/SKILL.md +166 -0
  706. package/skills/sauce-actions/examples/swap-and-supply.json +24 -0
  707. package/skills/sauce-actions/examples/swap-by-key.json +15 -0
  708. package/skills/sauce-actions/references/actions.md +731 -0
  709. package/skills/sauce-chains/SKILL.md +137 -0
  710. package/skills/sauce-chains/examples/chains.sauce.ts +25 -0
  711. package/skills/sauce-chains/references/arbitrum.md +158 -0
  712. package/skills/sauce-chains/references/arc.md +107 -0
  713. package/skills/sauce-chains/references/aurora.md +33 -0
  714. package/skills/sauce-chains/references/avalanche.md +106 -0
  715. package/skills/sauce-chains/references/base-stocks.md +77 -0
  716. package/skills/sauce-chains/references/base.md +141 -0
  717. package/skills/sauce-chains/references/berachain.md +33 -0
  718. package/skills/sauce-chains/references/blast.md +60 -0
  719. package/skills/sauce-chains/references/boba.md +33 -0
  720. package/skills/sauce-chains/references/bsc.md +97 -0
  721. package/skills/sauce-chains/references/celo.md +57 -0
  722. package/skills/sauce-chains/references/core.md +33 -0
  723. package/skills/sauce-chains/references/cronos.md +33 -0
  724. package/skills/sauce-chains/references/ethereum-stocks.md +1741 -0
  725. package/skills/sauce-chains/references/ethereum.md +255 -0
  726. package/skills/sauce-chains/references/evmos.md +33 -0
  727. package/skills/sauce-chains/references/fantom.md +61 -0
  728. package/skills/sauce-chains/references/fuse.md +33 -0
  729. package/skills/sauce-chains/references/gnosis.md +57 -0
  730. package/skills/sauce-chains/references/index.md +58 -0
  731. package/skills/sauce-chains/references/ink.md +55 -0
  732. package/skills/sauce-chains/references/kava.md +33 -0
  733. package/skills/sauce-chains/references/klaytn.md +33 -0
  734. package/skills/sauce-chains/references/linea.md +65 -0
  735. package/skills/sauce-chains/references/manta.md +33 -0
  736. package/skills/sauce-chains/references/mantle.md +33 -0
  737. package/skills/sauce-chains/references/metis.md +54 -0
  738. package/skills/sauce-chains/references/mode.md +55 -0
  739. package/skills/sauce-chains/references/monad.md +79 -0
  740. package/skills/sauce-chains/references/moonbeam.md +33 -0
  741. package/skills/sauce-chains/references/opbnb.md +55 -0
  742. package/skills/sauce-chains/references/optimism.md +123 -0
  743. package/skills/sauce-chains/references/plasma.md +35 -0
  744. package/skills/sauce-chains/references/polygon.md +123 -0
  745. package/skills/sauce-chains/references/pulsechain.md +33 -0
  746. package/skills/sauce-chains/references/ronin.md +35 -0
  747. package/skills/sauce-chains/references/scroll.md +62 -0
  748. package/skills/sauce-chains/references/sei.md +55 -0
  749. package/skills/sauce-chains/references/solana-stocks.md +1812 -0
  750. package/skills/sauce-chains/references/solana.md +56 -0
  751. package/skills/sauce-chains/references/sonic.md +57 -0
  752. package/skills/sauce-chains/references/unichain.md +61 -0
  753. package/skills/sauce-chains/references/zetachain.md +33 -0
  754. package/skills/sauce-chains/references/zksync.md +59 -0
  755. package/skills/sauce-chains/references/zora.md +57 -0
  756. package/skills/sauce-cli/SKILL.md +366 -0
  757. package/skills/sauce-cli/examples/pay.sauce.ts +23 -0
  758. package/skills/sauce-cli/examples/split.sauce.ts +30 -0
  759. package/skills/sauce-distributed-swap/SKILL.md +392 -0
  760. package/skills/sauce-distributed-swap/examples/distributed-swap.mts +251 -0
  761. package/skills/sauce-distributed-swap/examples/distributed-swap.sauce.ts +115 -0
  762. package/skills/sauce-examples/SKILL.md +96 -0
  763. package/skills/sauce-globals/SKILL.md +213 -0
  764. package/skills/sauce-globals/examples/globals.mts +111 -0
  765. package/skills/sauce-globals/examples/globals.sauce.ts +47 -0
  766. package/skills/sauce-globals/references/chains.md +53 -0
  767. package/skills/sauce-globals/references/protocols.md +405 -0
  768. package/skills/sauce-globals/references/stocks.md +3635 -0
  769. package/skills/sauce-globals/references/tokens.md +53 -0
  770. package/skills/sauce-intents/SKILL.md +505 -0
  771. package/skills/sauce-intents/examples/cross-chain.sauce.ts +37 -0
  772. package/skills/sauce-intents/examples/fund-by-transfer.sauce.ts +54 -0
  773. package/skills/sauce-intents/examples/intents.mts +343 -0
  774. package/skills/sauce-intents/examples/swap-on-base.sauce.ts +135 -0
  775. package/skills/sauce-intents/references/portal.md +77 -0
  776. package/skills/sauce-overview/SKILL.md +161 -0
  777. package/skills/sauce-protocols/SKILL.md +118 -0
  778. package/skills/sauce-protocols/examples/protocols.mts +77 -0
  779. package/skills/sauce-protocols/examples/protocols.sauce.ts +27 -0
  780. package/{sdk/src/skills → skills/sauce-protocols/references}/aave-v2.md +35 -17
  781. package/skills/sauce-protocols/references/aave-v3.md +144 -0
  782. package/skills/sauce-protocols/references/aave-v4.md +50 -0
  783. package/skills/sauce-protocols/references/abracadabra.md +72 -0
  784. package/skills/sauce-protocols/references/across.md +73 -0
  785. package/skills/sauce-protocols/references/aerodrome-slipstream.md +50 -0
  786. package/{sdk/src/skills → skills/sauce-protocols/references}/aerodrome.md +43 -24
  787. package/skills/sauce-protocols/references/aevo.md +49 -0
  788. package/{sdk/src/skills → skills/sauce-protocols/references}/alchemix.md +10 -25
  789. package/{sdk/src/skills → skills/sauce-protocols/references}/ambient.md +14 -21
  790. package/{sdk/src/skills → skills/sauce-protocols/references}/arbitrum-bridge.md +11 -14
  791. package/{sdk/src/skills → skills/sauce-protocols/references}/arrakis.md +10 -26
  792. package/skills/sauce-protocols/references/axelar.md +56 -0
  793. package/{sdk/src/skills → skills/sauce-protocols/references}/balancer-v2.md +13 -29
  794. package/{sdk/src/skills → skills/sauce-protocols/references}/base-bridge.md +11 -16
  795. package/{sdk/src/skills → skills/sauce-protocols/references}/baseswap.md +12 -19
  796. package/{sdk/src/skills → skills/sauce-protocols/references}/beefy.md +10 -30
  797. package/{sdk/src/skills → skills/sauce-protocols/references}/benqi.md +11 -21
  798. package/{sdk/src/skills → skills/sauce-protocols/references}/camelot.md +13 -27
  799. package/{sdk/src/skills → skills/sauce-protocols/references}/cbeth.md +10 -22
  800. package/skills/sauce-protocols/references/cctp.md +47 -0
  801. package/{sdk/src/skills → skills/sauce-protocols/references}/celer.md +11 -18
  802. package/{sdk/src/skills → skills/sauce-protocols/references}/chainlink-ccip.md +11 -21
  803. package/skills/sauce-protocols/references/chainlink.md +47 -0
  804. package/{sdk/src/skills → skills/sauce-protocols/references}/circle-gateway.md +12 -38
  805. package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v2.md +11 -25
  806. package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v3.md +43 -27
  807. package/{sdk/src/skills → skills/sauce-protocols/references}/connext.md +11 -15
  808. package/{sdk/src/skills → skills/sauce-protocols/references}/convex.md +10 -28
  809. package/{sdk/src/skills → skills/sauce-protocols/references}/cowswap.md +12 -19
  810. package/{sdk/src/skills → skills/sauce-protocols/references}/crvusd.md +10 -19
  811. package/skills/sauce-protocols/references/curve.md +98 -0
  812. package/{sdk/src/skills → skills/sauce-protocols/references}/debridge.md +11 -33
  813. package/{sdk/src/skills → skills/sauce-protocols/references}/dodo.md +13 -18
  814. package/skills/sauce-protocols/references/eigenlayer.md +48 -0
  815. package/{sdk/src/skills → skills/sauce-protocols/references}/ens.md +10 -26
  816. package/{sdk/src/skills → skills/sauce-protocols/references}/erc20.md +10 -24
  817. package/{sdk/src/skills → skills/sauce-protocols/references}/erc3156.md +10 -13
  818. package/{sdk/src/skills → skills/sauce-protocols/references}/erc4626.md +11 -27
  819. package/{sdk/src/skills → skills/sauce-protocols/references}/ethena.md +10 -27
  820. package/{sdk/src/skills → skills/sauce-protocols/references}/etherfi.md +10 -32
  821. package/{sdk/src/skills → skills/sauce-protocols/references}/euler-v2.md +11 -21
  822. package/{sdk/src/skills → skills/sauce-protocols/references}/fenix.md +12 -18
  823. package/{sdk/src/skills → skills/sauce-protocols/references}/fluid.md +11 -20
  824. package/{sdk/src/skills → skills/sauce-protocols/references}/frax-ether.md +10 -26
  825. package/{sdk/src/skills → skills/sauce-protocols/references}/frax.md +10 -19
  826. package/{sdk/src/skills → skills/sauce-protocols/references}/gains-network.md +11 -28
  827. package/skills/sauce-protocols/references/gamma.md +57 -0
  828. package/{sdk/src/skills → skills/sauce-protocols/references}/gelato.md +12 -20
  829. package/{sdk/src/skills → skills/sauce-protocols/references}/gho.md +10 -19
  830. package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v1.md +12 -34
  831. package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v2.md +15 -28
  832. package/skills/sauce-protocols/references/harvest.md +41 -0
  833. package/{sdk/src/skills → skills/sauce-protocols/references}/hegic.md +10 -18
  834. package/{sdk/src/skills → skills/sauce-protocols/references}/hop.md +11 -21
  835. package/{sdk/src/skills → skills/sauce-protocols/references}/hyperlane.md +11 -21
  836. package/skills/sauce-protocols/references/index.md +355 -0
  837. package/{sdk/src/skills → skills/sauce-protocols/references}/instadapp.md +10 -18
  838. package/skills/sauce-protocols/references/kelp.md +46 -0
  839. package/{sdk/src/skills → skills/sauce-protocols/references}/kim.md +12 -18
  840. package/{sdk/src/skills → skills/sauce-protocols/references}/kyberswap-aggregator.md +12 -35
  841. package/skills/sauce-protocols/references/kyberswap.md +72 -0
  842. package/{sdk/src/skills → skills/sauce-protocols/references}/layerbank.md +11 -26
  843. package/{sdk/src/skills → skills/sauce-protocols/references}/layerzero.md +11 -25
  844. package/{sdk/src/skills → skills/sauce-protocols/references}/level-finance.md +10 -24
  845. package/{sdk/src/skills → skills/sauce-protocols/references}/lido.md +10 -28
  846. package/{sdk/src/skills → skills/sauce-protocols/references}/lifi.md +11 -25
  847. package/{sdk/src/skills → skills/sauce-protocols/references}/linea-bridge.md +11 -14
  848. package/{sdk/src/skills → skills/sauce-protocols/references}/liquity-v1.md +10 -21
  849. package/{sdk/src/skills → skills/sauce-protocols/references}/liquity-v2.md +10 -19
  850. package/{sdk/src/skills → skills/sauce-protocols/references}/lynex.md +12 -18
  851. package/skills/sauce-protocols/references/maker.md +57 -0
  852. package/skills/sauce-protocols/references/mantle-meth.md +43 -0
  853. package/{sdk/src/skills → skills/sauce-protocols/references}/maverick.md +13 -25
  854. package/{sdk/src/skills → skills/sauce-protocols/references}/moonwell.md +11 -21
  855. package/{sdk/src/skills → skills/sauce-protocols/references}/morpho-blue.md +44 -21
  856. package/{sdk/src/skills → skills/sauce-protocols/references}/mux-protocol.md +10 -30
  857. package/skills/sauce-protocols/references/olympus.md +39 -0
  858. package/skills/sauce-protocols/references/oneinch.md +81 -0
  859. package/skills/sauce-protocols/references/openocean.md +69 -0
  860. package/{sdk/src/skills → skills/sauce-protocols/references}/optimism-bridge.md +11 -16
  861. package/{sdk/src/skills → skills/sauce-protocols/references}/opyn.md +10 -21
  862. package/{sdk/src/skills → skills/sauce-protocols/references}/pancakeswap-v2.md +39 -41
  863. package/skills/sauce-protocols/references/pancakeswap-v3.md +72 -0
  864. package/skills/sauce-protocols/references/paraswap.md +39 -0
  865. package/{sdk/src/skills → skills/sauce-protocols/references}/pendle.md +47 -29
  866. package/skills/sauce-protocols/references/permit2.md +101 -0
  867. package/skills/sauce-protocols/references/perpetual-protocol.md +53 -0
  868. package/{sdk/src/skills → skills/sauce-protocols/references}/polygon-bridge.md +11 -17
  869. package/{sdk/src/skills → skills/sauce-protocols/references}/premia.md +10 -19
  870. package/{sdk/src/skills → skills/sauce-protocols/references}/puffer.md +10 -21
  871. package/skills/sauce-protocols/references/pyth.md +45 -0
  872. package/{sdk/src/skills → skills/sauce-protocols/references}/quickswap.md +13 -27
  873. package/{sdk/src/skills → skills/sauce-protocols/references}/radiant.md +11 -15
  874. package/{sdk/src/skills → skills/sauce-protocols/references}/ramses.md +12 -18
  875. package/skills/sauce-protocols/references/reflexer.md +52 -0
  876. package/skills/sauce-protocols/references/registry/aave-v2.md +43 -0
  877. package/skills/sauce-protocols/references/registry/aave-v3.md +62 -0
  878. package/skills/sauce-protocols/references/registry/aave-v4.md +80 -0
  879. package/skills/sauce-protocols/references/registry/abracadabra.md +54 -0
  880. package/skills/sauce-protocols/references/registry/across.md +57 -0
  881. package/skills/sauce-protocols/references/registry/aerodrome-slipstream.md +72 -0
  882. package/skills/sauce-protocols/references/registry/aerodrome.md +58 -0
  883. package/skills/sauce-protocols/references/registry/aevo.md +39 -0
  884. package/skills/sauce-protocols/references/registry/alchemix.md +46 -0
  885. package/skills/sauce-protocols/references/registry/ambient.md +40 -0
  886. package/skills/sauce-protocols/references/registry/arbitrum-bridge.md +40 -0
  887. package/skills/sauce-protocols/references/registry/arrakis.md +49 -0
  888. package/skills/sauce-protocols/references/registry/axelar.md +65 -0
  889. package/skills/sauce-protocols/references/registry/balancer-v2.md +50 -0
  890. package/skills/sauce-protocols/references/registry/base-bridge.md +42 -0
  891. package/skills/sauce-protocols/references/registry/baseswap.md +40 -0
  892. package/skills/sauce-protocols/references/registry/beefy.md +51 -0
  893. package/skills/sauce-protocols/references/registry/benqi.md +49 -0
  894. package/skills/sauce-protocols/references/registry/camelot.md +82 -0
  895. package/skills/sauce-protocols/references/registry/cbeth.md +43 -0
  896. package/skills/sauce-protocols/references/registry/cctp.md +48 -0
  897. package/skills/sauce-protocols/references/registry/celer.md +44 -0
  898. package/skills/sauce-protocols/references/registry/chainlink-ccip.md +45 -0
  899. package/skills/sauce-protocols/references/registry/chainlink.md +49 -0
  900. package/skills/sauce-protocols/references/registry/circle-gateway.md +70 -0
  901. package/skills/sauce-protocols/references/registry/compound-v2.md +53 -0
  902. package/skills/sauce-protocols/references/registry/compound-v3.md +52 -0
  903. package/skills/sauce-protocols/references/registry/connext.md +41 -0
  904. package/skills/sauce-protocols/references/registry/convex.md +51 -0
  905. package/skills/sauce-protocols/references/registry/cowswap.md +40 -0
  906. package/skills/sauce-protocols/references/registry/crvusd.md +40 -0
  907. package/skills/sauce-protocols/references/registry/curve.md +81 -0
  908. package/skills/sauce-protocols/references/registry/debridge.md +59 -0
  909. package/skills/sauce-protocols/references/registry/dodo.md +39 -0
  910. package/skills/sauce-protocols/references/registry/eco-routes.md +65 -0
  911. package/skills/sauce-protocols/references/registry/eigenlayer.md +58 -0
  912. package/skills/sauce-protocols/references/registry/ens.md +49 -0
  913. package/skills/sauce-protocols/references/registry/erc20.md +44 -0
  914. package/skills/sauce-protocols/references/registry/erc3156.md +38 -0
  915. package/skills/sauce-protocols/references/registry/erc4626.md +51 -0
  916. package/skills/sauce-protocols/references/registry/ethena.md +50 -0
  917. package/skills/sauce-protocols/references/registry/etherfi.md +57 -0
  918. package/skills/sauce-protocols/references/registry/euler-v2.md +49 -0
  919. package/skills/sauce-protocols/references/registry/fenix.md +39 -0
  920. package/skills/sauce-protocols/references/registry/fluid.md +48 -0
  921. package/skills/sauce-protocols/references/registry/frax-ether.md +49 -0
  922. package/skills/sauce-protocols/references/registry/frax.md +40 -0
  923. package/skills/sauce-protocols/references/registry/gains-network.md +43 -0
  924. package/skills/sauce-protocols/references/registry/gamma.md +56 -0
  925. package/skills/sauce-protocols/references/registry/gelato.md +45 -0
  926. package/skills/sauce-protocols/references/registry/gho.md +40 -0
  927. package/skills/sauce-protocols/references/registry/gmx-v1.md +59 -0
  928. package/skills/sauce-protocols/references/registry/gmx-v2.md +41 -0
  929. package/skills/sauce-protocols/references/registry/harvest.md +44 -0
  930. package/skills/sauce-protocols/references/registry/hegic.md +39 -0
  931. package/skills/sauce-protocols/references/registry/hop.md +49 -0
  932. package/skills/sauce-protocols/references/registry/hyperlane.md +48 -0
  933. package/skills/sauce-protocols/references/registry/instadapp.md +39 -0
  934. package/skills/sauce-protocols/references/registry/kelp.md +47 -0
  935. package/skills/sauce-protocols/references/registry/kim.md +39 -0
  936. package/skills/sauce-protocols/references/registry/kyberswap-aggregator.md +49 -0
  937. package/skills/sauce-protocols/references/registry/kyberswap.md +63 -0
  938. package/skills/sauce-protocols/references/registry/layerbank.md +54 -0
  939. package/skills/sauce-protocols/references/registry/layerzero.md +49 -0
  940. package/skills/sauce-protocols/references/registry/level-finance.md +41 -0
  941. package/skills/sauce-protocols/references/registry/lido.md +51 -0
  942. package/skills/sauce-protocols/references/registry/lifi.md +48 -0
  943. package/skills/sauce-protocols/references/registry/linea-bridge.md +40 -0
  944. package/skills/sauce-protocols/references/registry/liquity-v1.md +42 -0
  945. package/skills/sauce-protocols/references/registry/liquity-v2.md +40 -0
  946. package/skills/sauce-protocols/references/registry/lynex.md +39 -0
  947. package/skills/sauce-protocols/references/registry/maker.md +55 -0
  948. package/skills/sauce-protocols/references/registry/mantle-meth.md +48 -0
  949. package/skills/sauce-protocols/references/registry/maverick.md +60 -0
  950. package/skills/sauce-protocols/references/registry/moonwell.md +49 -0
  951. package/skills/sauce-protocols/references/registry/morpho-blue.md +47 -0
  952. package/skills/sauce-protocols/references/registry/mux-protocol.md +49 -0
  953. package/skills/sauce-protocols/references/registry/olympus.md +42 -0
  954. package/skills/sauce-protocols/references/registry/oneinch.md +45 -0
  955. package/skills/sauce-protocols/references/registry/openocean.md +44 -0
  956. package/skills/sauce-protocols/references/registry/optimism-bridge.md +42 -0
  957. package/skills/sauce-protocols/references/registry/opyn.md +42 -0
  958. package/skills/sauce-protocols/references/registry/pancakeswap-v2.md +71 -0
  959. package/skills/sauce-protocols/references/registry/pancakeswap-v3.md +76 -0
  960. package/skills/sauce-protocols/references/registry/paraswap.md +51 -0
  961. package/skills/sauce-protocols/references/registry/pendle.md +43 -0
  962. package/skills/sauce-protocols/references/registry/permit2.md +50 -0
  963. package/skills/sauce-protocols/references/registry/perpetual-protocol.md +49 -0
  964. package/skills/sauce-protocols/references/registry/polygon-bridge.md +43 -0
  965. package/skills/sauce-protocols/references/registry/premia.md +40 -0
  966. package/skills/sauce-protocols/references/registry/puffer.md +43 -0
  967. package/skills/sauce-protocols/references/registry/pyth.md +40 -0
  968. package/skills/sauce-protocols/references/registry/quickswap.md +80 -0
  969. package/skills/sauce-protocols/references/registry/radiant.md +41 -0
  970. package/skills/sauce-protocols/references/registry/ramses.md +39 -0
  971. package/skills/sauce-protocols/references/registry/reflexer.md +56 -0
  972. package/skills/sauce-protocols/references/registry/renzo.md +47 -0
  973. package/skills/sauce-protocols/references/registry/rocket-pool.md +49 -0
  974. package/skills/sauce-protocols/references/registry/sablier.md +40 -0
  975. package/skills/sauce-protocols/references/registry/safe.md +47 -0
  976. package/skills/sauce-protocols/references/registry/scroll-bridge.md +48 -0
  977. package/skills/sauce-protocols/references/registry/seamless.md +42 -0
  978. package/skills/sauce-protocols/references/registry/seaport.md +44 -0
  979. package/skills/sauce-protocols/references/registry/silo.md +48 -0
  980. package/skills/sauce-protocols/references/registry/socket.md +44 -0
  981. package/skills/sauce-protocols/references/registry/sommelier.md +43 -0
  982. package/skills/sauce-protocols/references/registry/spark.md +42 -0
  983. package/skills/sauce-protocols/references/registry/spookyswap.md +40 -0
  984. package/skills/sauce-protocols/references/registry/squid.md +45 -0
  985. package/skills/sauce-protocols/references/registry/stader.md +47 -0
  986. package/skills/sauce-protocols/references/registry/stargate.md +45 -0
  987. package/skills/sauce-protocols/references/registry/superfluid.md +49 -0
  988. package/skills/sauce-protocols/references/registry/sushiswap-v2.md +71 -0
  989. package/skills/sauce-protocols/references/registry/swell.md +49 -0
  990. package/skills/sauce-protocols/references/registry/synapse.md +46 -0
  991. package/skills/sauce-protocols/references/registry/syncswap.md +38 -0
  992. package/skills/sauce-protocols/references/registry/synthetix-v3.md +48 -0
  993. package/skills/sauce-protocols/references/registry/synthra-v3.md +77 -0
  994. package/skills/sauce-protocols/references/registry/thales.md +51 -0
  995. package/skills/sauce-protocols/references/registry/thena.md +39 -0
  996. package/skills/sauce-protocols/references/registry/thruster.md +38 -0
  997. package/skills/sauce-protocols/references/registry/tokemak.md +45 -0
  998. package/skills/sauce-protocols/references/registry/trader-joe.md +66 -0
  999. package/skills/sauce-protocols/references/registry/uniswap-v2.md +77 -0
  1000. package/skills/sauce-protocols/references/registry/uniswap-v3.md +113 -0
  1001. package/skills/sauce-protocols/references/registry/uniswap-v4.md +117 -0
  1002. package/skills/sauce-protocols/references/registry/unitflow-v3.md +65 -0
  1003. package/skills/sauce-protocols/references/registry/velodrome.md +58 -0
  1004. package/skills/sauce-protocols/references/registry/venus.md +62 -0
  1005. package/skills/sauce-protocols/references/registry/vertex.md +46 -0
  1006. package/skills/sauce-protocols/references/registry/wormhole.md +59 -0
  1007. package/skills/sauce-protocols/references/registry/yearn-v3.md +46 -0
  1008. package/skills/sauce-protocols/references/registry/zerolend.md +41 -0
  1009. package/skills/sauce-protocols/references/registry/zerox.md +44 -0
  1010. package/skills/sauce-protocols/references/registry/zksync-bridge.md +40 -0
  1011. package/{sdk/src/skills → skills/sauce-protocols/references}/renzo.md +10 -24
  1012. package/{sdk/src/skills → skills/sauce-protocols/references}/rocket-pool.md +10 -26
  1013. package/{sdk/src/skills → skills/sauce-protocols/references}/sablier.md +10 -27
  1014. package/skills/sauce-protocols/references/safe.md +42 -0
  1015. package/{sdk/src/skills → skills/sauce-protocols/references}/scroll-bridge.md +11 -20
  1016. package/{sdk/src/skills → skills/sauce-protocols/references}/seamless.md +11 -16
  1017. package/skills/sauce-protocols/references/seaport.md +38 -0
  1018. package/{sdk/src/skills → skills/sauce-protocols/references}/silo.md +11 -20
  1019. package/{sdk/src/skills → skills/sauce-protocols/references}/socket.md +11 -18
  1020. package/skills/sauce-protocols/references/sommelier.md +40 -0
  1021. package/{sdk/src/skills → skills/sauce-protocols/references}/spark.md +11 -16
  1022. package/{sdk/src/skills → skills/sauce-protocols/references}/spookyswap.md +12 -19
  1023. package/{sdk/src/skills → skills/sauce-protocols/references}/squid.md +11 -21
  1024. package/skills/sauce-protocols/references/stader.md +39 -0
  1025. package/{sdk/src/skills → skills/sauce-protocols/references}/stargate.md +11 -22
  1026. package/{sdk/src/skills → skills/sauce-protocols/references}/superfluid.md +10 -28
  1027. package/{sdk/src/skills → skills/sauce-protocols/references}/sushiswap-v2.md +38 -43
  1028. package/skills/sauce-protocols/references/swell.md +49 -0
  1029. package/skills/sauce-protocols/references/synapse.md +54 -0
  1030. package/{sdk/src/skills → skills/sauce-protocols/references}/syncswap.md +12 -17
  1031. package/{sdk/src/skills → skills/sauce-protocols/references}/synthetix-v3.md +10 -29
  1032. package/skills/sauce-protocols/references/synthra-v3.md +63 -0
  1033. package/skills/sauce-protocols/references/thales.md +58 -0
  1034. package/{sdk/src/skills → skills/sauce-protocols/references}/thena.md +12 -18
  1035. package/{sdk/src/skills → skills/sauce-protocols/references}/thruster.md +13 -18
  1036. package/skills/sauce-protocols/references/tokemak.md +40 -0
  1037. package/{sdk/src/skills → skills/sauce-protocols/references}/trader-joe.md +13 -26
  1038. package/{sdk/src/skills → skills/sauce-protocols/references}/uniswap-v2.md +46 -44
  1039. package/skills/sauce-protocols/references/uniswap-v3.md +188 -0
  1040. package/skills/sauce-protocols/references/uniswap-v4.md +155 -0
  1041. package/skills/sauce-protocols/references/unitflow-v3.md +63 -0
  1042. package/{sdk/src/skills → skills/sauce-protocols/references}/velodrome.md +12 -24
  1043. package/{sdk/src/skills → skills/sauce-protocols/references}/venus.md +12 -31
  1044. package/skills/sauce-protocols/references/vertex.md +42 -0
  1045. package/skills/sauce-protocols/references/wormhole.md +57 -0
  1046. package/{sdk/src/skills → skills/sauce-protocols/references}/yearn-v3.md +10 -25
  1047. package/{sdk/src/skills → skills/sauce-protocols/references}/zerolend.md +11 -15
  1048. package/skills/sauce-protocols/references/zerox.md +39 -0
  1049. package/{sdk/src/skills → skills/sauce-protocols/references}/zksync-bridge.md +11 -14
  1050. package/skills/sauce-script/SKILL.md +407 -0
  1051. package/skills/sauce-script/examples/IOracle.json +12 -0
  1052. package/skills/sauce-script/examples/saucescript.mts +167 -0
  1053. package/skills/sauce-script/examples/twap.sauce.ts +29 -0
  1054. package/skills/sauce-script/references/builtins.json +823 -0
  1055. package/skills/sauce-script/references/builtins.md +674 -0
  1056. package/skills/sauce-solana/SKILL.md +324 -0
  1057. package/skills/sauce-solana/examples/solana.mts +166 -0
  1058. package/skills/sauce-solana/examples/solana.sauce.ts +45 -0
  1059. package/skills/sauce-solana/examples/token-2022.sauce.ts +38 -0
  1060. package/skills/sauce-swaps/SKILL.md +200 -0
  1061. package/skills/sauce-swaps/examples/swap-leg.sauce.ts +50 -0
  1062. package/skills/sauce-swaps/examples/swaps.mts +124 -0
  1063. package/skills/sauce-typescript/SKILL.md +178 -0
  1064. package/skills/sauce-typescript/examples/actions.mts +100 -0
  1065. package/skills/sauce-typescript/examples/compiler.mts +69 -0
  1066. package/skills/sauce-typescript/examples/cook.mts +65 -0
  1067. package/skills/sauce-typescript/examples/verify.mts +104 -0
  1068. package/dev-tools/README.md +0 -16
  1069. package/dev-tools/artifacts/IERC20.json +0 -1
  1070. package/dev-tools/artifacts/ISauceRouter.json +0 -1
  1071. package/dev-tools/artifacts/IUniswapV3Pool.json +0 -1
  1072. package/dev-tools/artifacts/Router.json +0 -1
  1073. package/dev-tools/hardhat.config.cjs +0 -18
  1074. package/dev-tools/sauce/js/add.js +0 -4
  1075. package/dev-tools/sauce/js/call.js +0 -8
  1076. package/dev-tools/sauce/js/erc20.js +0 -18
  1077. package/dev-tools/sauce/js/example.js +0 -6
  1078. package/dev-tools/sauce/js/fibonacci.js +0 -13
  1079. package/dev-tools/sauce/ts/add.ts +0 -4
  1080. package/dev-tools/sauce/ts/call.ts +0 -8
  1081. package/dev-tools/sauce/ts/erc20.ts +0 -18
  1082. package/dev-tools/sauce/ts/example.ts +0 -6
  1083. package/dev-tools/sauce/ts/fibonacci.ts +0 -13
  1084. package/dev-tools/sauce/ts/saucescript.d.ts +0 -1
  1085. package/dev-tools/sauce/ts/tsconfig.json +0 -12
  1086. package/dev-tools/scripts/deploy.ts +0 -107
  1087. package/dev-tools/scripts/init.js +0 -132
  1088. package/dev-tools/scripts/run.ts +0 -67
  1089. package/dev-tools/scripts/start-fork.sh +0 -92
  1090. package/dev-tools/scripts/start-local.sh +0 -120
  1091. package/dev-tools/scripts/stop-local.sh +0 -40
  1092. package/dev-tools/scripts/sync-artifacts.js +0 -46
  1093. package/dev-tools/scripts/sync-price.ts +0 -58
  1094. package/dev-tools/src/contracts.ts +0 -59
  1095. package/dev-tools/src/runner.ts +0 -355
  1096. package/dev-tools/src/svm-local.ts +0 -305
  1097. package/dev-tools/src/sync-price.ts +0 -217
  1098. package/sdk/dist/deployments/v12.generated.d.ts +0 -95
  1099. package/sdk/dist/deployments/v12.generated.d.ts.map +0 -1
  1100. package/sdk/dist/deployments/v12.generated.js +0 -50
  1101. package/sdk/dist/deployments/v12.generated.js.map +0 -1
  1102. package/sdk/dist/swap/index.d.ts +0 -29
  1103. package/sdk/dist/swap/index.d.ts.map +0 -1
  1104. package/sdk/dist/swap/index.js +0 -27
  1105. package/sdk/dist/swap/index.js.map +0 -1
  1106. package/sdk/dist/swap/params.d.ts +0 -29
  1107. package/sdk/dist/swap/params.d.ts.map +0 -1
  1108. package/sdk/dist/swap/params.js +0 -123
  1109. package/sdk/dist/swap/params.js.map +0 -1
  1110. package/sdk/dist/swap/source.d.ts +0 -30
  1111. package/sdk/dist/swap/source.d.ts.map +0 -1
  1112. package/sdk/dist/swap/source.js +0 -101
  1113. package/sdk/dist/swap/source.js.map +0 -1
  1114. package/sdk/dist/swap/types.d.ts +0 -160
  1115. package/sdk/dist/swap/types.d.ts.map +0 -1
  1116. package/sdk/dist/swap/types.js +0 -106
  1117. package/sdk/dist/swap/types.js.map +0 -1
  1118. package/sdk/src/skills/aave-v3.md +0 -134
  1119. package/sdk/src/skills/aave-v4.md +0 -91
  1120. package/sdk/src/skills/abracadabra.md +0 -93
  1121. package/sdk/src/skills/across.md +0 -90
  1122. package/sdk/src/skills/aerodrome-slipstream.md +0 -57
  1123. package/sdk/src/skills/aevo.md +0 -58
  1124. package/sdk/src/skills/axelar.md +0 -80
  1125. package/sdk/src/skills/chainlink.md +0 -62
  1126. package/sdk/src/skills/curve.md +0 -141
  1127. package/sdk/src/skills/eigenlayer.md +0 -71
  1128. package/sdk/src/skills/gamma.md +0 -79
  1129. package/sdk/src/skills/harvest.md +0 -49
  1130. package/sdk/src/skills/index.md +0 -299
  1131. package/sdk/src/skills/kelp.md +0 -60
  1132. package/sdk/src/skills/kyberswap.md +0 -100
  1133. package/sdk/src/skills/loader.ts +0 -46
  1134. package/sdk/src/skills/maker.md +0 -79
  1135. package/sdk/src/skills/mantle-meth.md +0 -60
  1136. package/sdk/src/skills/olympus.md +0 -46
  1137. package/sdk/src/skills/oneinch.md +0 -64
  1138. package/sdk/src/skills/openocean.md +0 -86
  1139. package/sdk/src/skills/pancakeswap-v3.md +0 -104
  1140. package/sdk/src/skills/paraswap.md +0 -67
  1141. package/sdk/src/skills/permit2.md +0 -73
  1142. package/sdk/src/skills/perpetual-protocol.md +0 -73
  1143. package/sdk/src/skills/pyth.md +0 -58
  1144. package/sdk/src/skills/reflexer.md +0 -73
  1145. package/sdk/src/skills/safe.md +0 -56
  1146. package/sdk/src/skills/seaport.md +0 -65
  1147. package/sdk/src/skills/sommelier.md +0 -47
  1148. package/sdk/src/skills/stader.md +0 -53
  1149. package/sdk/src/skills/swell.md +0 -65
  1150. package/sdk/src/skills/synapse.md +0 -63
  1151. package/sdk/src/skills/synthra-v3.md +0 -57
  1152. package/sdk/src/skills/thales.md +0 -74
  1153. package/sdk/src/skills/tokemak.md +0 -48
  1154. package/sdk/src/skills/uniswap-v3.md +0 -202
  1155. package/sdk/src/skills/uniswap-v4.md +0 -125
  1156. package/sdk/src/skills/unitflow-v3.md +0 -62
  1157. package/sdk/src/skills/vertex.md +0 -55
  1158. package/sdk/src/skills/wormhole.md +0 -76
  1159. package/sdk/src/skills/zerox.md +0 -51
@@ -0,0 +1,674 @@
1
+ # SauceScript reference
2
+
3
+ SauceScript is the checked subset of TypeScript that Sauce programs are written in. You compile a program for
4
+ one of two targets:
5
+
6
+ - **EVM** (`target: "evm"`): Ethereum and other EVM chains.
7
+ - **SVM** (`target: "svm"`): Solana.
8
+
9
+ Every entry below says where it works: **Both**, **EVM** or **SVM**. Using something on the wrong target is a
10
+ compile error, never a silent difference.
11
+
12
+ Every example compiles on each target it names, and every error message is quoted as the compiler prints it,
13
+ with `N` for a number and `…` where text is elided. The machine-readable list of every documented builtin, with one
14
+ example program each, is `builtins.json`.
15
+
16
+ **Contents**
17
+
18
+ 1. [Types](#1-types)
19
+ 2. [Literals](#2-literals)
20
+ 3. [Operators](#3-operators)
21
+ 4. [Variables, control flow, functions and modules](#4-variables-control-flow-functions-and-modules)
22
+ 5. [`require`, `revert`, `throw`, `log`, `eval`](#5-require-revert-throw-log-eval)
23
+ 6. [`ctx`: context reads](#6-ctx-context-reads)
24
+ 7. [`crypto`](#7-crypto)
25
+ 8. [`Math`](#8-math)
26
+ 9. [`abi`](#9-abi-evm) (EVM)
27
+ 10. [`evm`](#10-evm-evm) (EVM)
28
+ 11. [`svm`](#11-svm-svm) (SVM)
29
+ 12. [Methods on values, and account properties](#12-methods-on-values-and-account-properties)
30
+ 13. [Contract bindings and `.catch()`](#13-contract-bindings-and-catch-evm) (EVM)
31
+ 14. [Not supported, and what to write instead](#14-not-supported-and-what-to-write-instead)
32
+ 15. [Limits](#15-limits)
33
+
34
+ **On Solana (SVM), at a glance.** Entries marked **Both** work there too. What differs:
35
+
36
+ - Accounts are `main` parameters with roles: `Account` in §1, account properties in §12, and the
37
+ `svm` calls in §11, which only SVM has.
38
+ - `ctx` (§6): `ctx.self()` is the engine's program id (it owns every Pot account, and not only
39
+ Pot accounts),
40
+ `ctx.msgSender()` the first signer among the accounts the engine receives, and
41
+ `ctx.msgValue`, `gasLeft`, `codeSize`, `codeHash`, `isContract` and `isEOA` do not exist.
42
+ - `log` takes no topics (§5).
43
+ - `abi`, `evm` and contract bindings with `.catch()` (§9, §10, §13) are EVM only: a call to another
44
+ program is `svm.call`.
45
+ - Limits (§15): 64 KiB of working memory, and the program, its arguments and the cook together in
46
+ one 1,232-byte transaction unless the program is staged.
47
+
48
+ ---
49
+
50
+ ## 1. Types
51
+
52
+ - `Uint256`, `Address`, `number`, `bigint`: A **number**: one unsigned 256-bit integer. An address
53
+ is a number.
54
+ - `bool`, `boolean`: A **bool**: true or false. It is kept apart from numbers, so `flag + 1n` is an
55
+ error. Comparisons produce bools.
56
+ - `bytes`, `string`: A **bytes value**. A `"text"` literal is its UTF-8 bytes.
57
+ - `T[]`: An array whose elements all have type `T`
58
+ - `{ a: T, b: U }`, or the name of an `interface`: A **record** with named fields
59
+ - `Account`, `Account<Writable>`, `Account<Signer>`, `Account<Writable, Signer>`: **SVM:** an
60
+ account the transaction attaches, declared as a `main` parameter, optionally with the roles it
61
+ must have. **EVM:** `Account` is just an address, and roles are an error: "`an Account role` is
62
+ not available on the evm target; an `Account` is an address value on the EVM — write `Account`
63
+ alone".
64
+ - `void`: No value (return type only)
65
+
66
+ - A parameter without an annotation is a number. So is the result of a function without a return annotation,
67
+ even one that returns a comparison or `true`: it comes back as 1 or 0. `if`, `while`, `&&` and `!` take that,
68
+ but a `: bool` function cannot return it: "a return value: expected a bool, found a number". Give a helper
69
+ that answers yes or no a `: bool` return type.
70
+ - An unknown type name is rejected with a list of the valid ones, as in "`uint256` is not a type — write
71
+ `Uint256`, `Address`, `Account`, `bool`, `bytes` or `string`, an array `T[]`, an inline object type `{ a: Uint256 }`
72
+ for a tuple …". Union types, `Array<T>` and `[A, B]` tuple types are rejected the same way.
73
+ - In this reference, **scalar** means a number or a bool.
74
+
75
+ Common type errors:
76
+
77
+ - "`<what>` requires a scalar value": you passed bytes, an array or a record where one value is needed.
78
+ - "`<what>` requires a bytes value": you passed a value where bytes are needed.
79
+ - "`<what>`: expected a number, found a bool". At a call site, "a function argument: expected a number,
80
+ found a bool" usually means the function's parameter has no annotation, so it is a number:
81
+ annotate it, `flag: bool`.
82
+ - "`<what>`: expected an account, found a value" (and the reverse).
83
+
84
+ A builtin that does not exist on your target fails as "`<name>` is not available on the `<evm|svm>` target",
85
+ usually followed by what to use instead.
86
+
87
+ ## 2. Literals
88
+
89
+ | Literal | Meaning | Example |
90
+ | ----------------------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------ |
91
+ | integers: `1n`, `0xffn`, `1_000n`, `1`, `0xff`, `1_000_000` | numbers | `const ONE_TOKEN = 1000000000000000000n;` |
92
+ | `true`, `false` | bools | `let filled = true;` |
93
+ | `"text"` | bytes (UTF-8) | `throw "below floor";` |
94
+ | `` hex`…` `` | raw bytes: an even number of hex digits, optional `0x`, spaces ignored | ``const selector = hex`a9059cbb`;`` |
95
+ | `[a, b, c]` | an array; every element has the same type | `const amounts = [100n, 200n];` |
96
+ | `{ a: 1n, b }` | a record; shorthand fields work | `const order = { amount, recipient: to };` |
97
+
98
+ **Not literals:**
99
+
100
+ | Rejected | Error | Write instead |
101
+ | --------------------------- | ------------------------------------------------------------------------------------------------------------- | --------------------------------------- |
102
+ | `1e18` | "not a valid integer literal" | `10n ** 18n` or `1000000000000000000n` |
103
+ | `1.5` | "`1.5` is not a valid 256-bit literal" | integers in the smallest unit |
104
+ | `null`, `undefined` | rejected | `0n` or a flag |
105
+ | `` `text` ``, `` `a${b}` `` | rejected, with or without `${}` | `"text"`, or bytes built with `.concat` |
106
+ | a bad `hex` | "`hex`…`` is not a valid hex literal (expected an even number of `[0-9a-fA-F]` digits, optional `0x` prefix)" | |
107
+ | `[]` with no declared type | "an array literal must have at least one element" | `let xs: Uint256[] = [];` |
108
+ | `[1n, true]` | "every element of an array literal must have the same type — …" | |
109
+
110
+ ## 3. Operators
111
+
112
+ - `+ - * / % **`, on numbers → number
113
+ - **Checked.** Overflow, underflow and division by zero revert. With constant operands they are
114
+ compile errors: "constant `-` expression overflows 256 bits", "constant `/` expression divides
115
+ by zero".
116
+ - `-x`, on a number → number
117
+ - Two's-complement negation; it never fails. **Use `-x` for a negative amount.** `~x + 1n` reverts
118
+ when `x` is `0`, because the `+` is checked. `-1n` is 2²⁵⁶ − 1.
119
+ - `~x`, on a number → number
120
+ - bitwise NOT. `~0n` is the maximum value.
121
+ - `& | ^ << >>`, on numbers → number
122
+ - Bitwise. `>>` fills with zeros; use `Math.sShr` for a signed shift.
123
+ - `< <= > >=`, on scalars → bool
124
+ - unsigned; use `Math.sLt` and friends for signed
125
+ - `== === != !==`, on scalars, or two accounts → bool
126
+ - Bytes cannot be compared: "a comparison operator requires a scalar value". Compare
127
+ `crypto.keccak256(a) == crypto.keccak256(b)` instead.
128
+ - `!x`, on a scalar → bool
129
+ - `a && b`, `a || b`, on scalars → bool
130
+ - Short-circuit. The result is true or false, not one of the operands.
131
+ - `c ? a : b`, on `a` and `b` of the same type → that type
132
+ - "the two arms of `? :` must have the same type — …"
133
+ - `=`, and `+= -= *= /= %= **= &= |= ^= <<= >>=`
134
+ - Compound forms work on plain variables only: "a compound assignment to an array element …", "a
135
+ compound assignment to a tuple field …".
136
+ - `x++`, `x--`, `++x`, `--x`, on a plain variable, **as a statement only**
137
+ - "`++`/`--` as a value (they are statement-only here — write `i += 1n`)"
138
+
139
+ Accounts compare only with `==` and `!=`: "accounts compare for identity only — `==` and `!=`. …".
140
+ `>>>`, `??`, `typeof`, `instanceof`, `in`, `void`, `delete` and unary `+` are not supported (see §14).
141
+
142
+ ## 4. Variables, control flow, functions and modules
143
+
144
+ **Variables**
145
+
146
+ - `let` and `const`, with several declarators per statement and optional annotations.
147
+ - A variable keeps its type: "`a` cannot be reassigned a value of a different type — …". A `const` cannot be
148
+ reassigned: "`a` is declared `const` and cannot be reassigned".
149
+ - Read an array or bytes value with `a[i]`. A record is read by name (`t.amount`) or by a constant position
150
+ (`t[0]`). A computed position is rejected: "a tuple index must be a number literal or a `const` bound to one — …".
151
+ - Write with `a[i] = v` or `t.amount = v`. An out-of-range constant index is a compile error ("array index 5 is
152
+ out of range — this array has 2 element(s). …"), and a computed out-of-range index reverts.
153
+ - **Destructuring:** `const [a, b] = …` works on anything that produces a record: a multi-output contract call,
154
+ `abi.decode`, a record, or `crypto.findPDA`. It does not work on an array: "a destructuring binding needs an
155
+ initializer that produces a tuple — this one does not, so bind it to one name instead".
156
+ - `new Array(n)` makes an array of `n` zeros to fill by index.
157
+
158
+ **Control flow:** `if`/`else`, `while`, `for (init; test; update)`, `for (const x of array)`, unlabeled
159
+ `break`/`continue`, `return`, and blocks.
160
+
161
+ **Functions**
162
+
163
+ - Declare functions at the top level. They may call each other and recurse.
164
+ - A function other than `main` that returns bytes, an array or a record needs a return type: "returning a bytes
165
+ value from a function other than `main` needs a return-type annotation — …".
166
+ - Every path must return ("`f` does not return on every path"). A bare `return;` is allowed only in a `: void`
167
+ function.
168
+ - A `: void` function's result is not a value: "a call to a `: void` function produces no value, so its result
169
+ can't be used as one — call it as a statement instead".
170
+ - `main` is the entry point and cannot be called from your code.
171
+ - A function other than `main` has a fixed budget for its parameters and the values its body keeps live at
172
+ once: about sixteen. Seventeen parameters still compile when the body reads each one once. Past the
173
+ budget — sixteen parameters with a local held beside them, or seventeen with the first one read again — the
174
+ compile fails with "`f` does not fit …". Pass a record or an array instead of a long list of numbers. `main`'s
175
+ parameters are the program's arguments and are not limited this way.
176
+ - **Arrays and records are passed by reference.** A helper that writes `xs[i] = v` or `r.amount = v` changes
177
+ the caller's array or record, so a helper can fill an array it is given. Numbers, bools and bytes are passed
178
+ by value. A helper cannot replace an array parameter with a new array: "`<name>` cannot be reassigned a value
179
+ of a different type — expected an element count known only at run time, found N element(s)".
180
+
181
+ **`main`'s arguments**
182
+
183
+ - `main`'s parameters are the program's runtime inputs. One compiled program serves every argument value.
184
+ - By default the arguments are ABI-encoded. With the compile option `compactArgs: true` they use the smaller
185
+ compact encoding; encode them with `encodeCompactArguments` and the schema the compile returns.
186
+ - Parameters may be any combination of scalars, bytes, arrays and records, with at most 4 levels of nested
187
+ arrays.
188
+ - On **SVM**, `Account` parameters are not encoded arguments: they are the accounts attached to the transaction,
189
+ in declaration order.
190
+
191
+ **Scripts:** a file with top-level statements and no `main` runs as `main(): void`. Its top-level `const` and
192
+ `let` are locals of that entry, so a function cannot read them, and it cannot `return`. Declare `main` to share
193
+ a module-level constant with functions, or to return a value.
194
+
195
+ **Module constants and defines**
196
+
197
+ - A top-level `const` must be a literal or a constant expression over other `const`s.
198
+ - A top-level `const` array, `const FEES = [100n, 500n];`, is a lookup table: it is read only at a literal index,
199
+ `FEES[0]`. A loop over it, `.length` or a write gives "a module-scope lookup table `<name>` can only be read
200
+ by a literal index or a field name …", and a computed index "a module-scope lookup table can only be indexed by
201
+ a non-negative integer literal or a `const` bound to one …". Declare an array you loop over or index at run
202
+ time inside a function.
203
+ - A top-level `let` is scratch space, reset on every run. It is not persistent storage.
204
+ - A top-level `let` starts as a number, address or boolean literal, nothing else: "a module-scope `let <name>`
205
+ must be initialized with a literal — a number, address or boolean literal. …". An array, bytes, a record, a
206
+ negative number, an expression or a call goes inside a function.
207
+ - The compile option `defines` replaces a `const` of the same name.
208
+
209
+ **Imports**
210
+
211
+ | Import | Binds |
212
+ | ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
213
+ | `import { f, FEE, Order } from "./lib.ts"` (also `.js`, `.mjs`, `.mts`) | exported functions, constants and interfaces |
214
+ | `import ERC20 from "./erc20.abi.json"` | a contract ABI (§13) |
215
+ | `import cfg from "./config.json" with { type: "json" }` | JSON data, read as compile-time constants (`cfg.fee`) |
216
+ | `import { approve } from "@sauce/token"` | a package. Import the package itself, not a file inside it ("subpath imports are not supported: …"). |
217
+
218
+ A default import of a SauceScript module is rejected: "a `.js` module import must be named — … has no `default`
219
+ export".
220
+
221
+ ## 5. `require`, `revert`, `throw`, `log`, `eval`
222
+
223
+ Available on **Both** targets. These are statements, except `eval`, which returns a value. Their names are
224
+ reserved: you cannot declare a function named `require`, `revert`, `log` or `eval` ("`log` is a reserved
225
+ builtin and cannot be a function name").
226
+
227
+ - `require(cond)`, `require(cond, message)`
228
+ - Types: `cond`: scalar. `message`: bytes.
229
+ - Reverts unless `cond` is nonzero. "`require` takes 1 or 2 arguments (a condition and an optional
230
+ bytes payload), got N"; "a `require` condition requires a scalar value". Used as a value:
231
+ "`require` aborts execution and produces no value — use it as a statement".
232
+ - Example: `require(out >= minOut, "slippage");`
233
+ - `revert()`, `revert(data)`
234
+ - Types: `data`: bytes
235
+ - Reverts with `data` as the revert data. "`revert` takes at most 1 argument (an optional bytes
236
+ payload), got 2"; "a revert payload requires a bytes value"
237
+ - Example: `revert(code.toBytesBe(32n));`
238
+ - `throw data`
239
+ - Types: `data`: bytes
240
+ - The same as `revert(data)`. "a `throw` payload requires a bytes value".
241
+ - Example: `throw "below floor";`
242
+ - `log(data)`, `log(data, topic1, …)`
243
+ - Types: `data`: bytes. Up to 4 scalar topics, **EVM only**.
244
+ - Emits a log record. On SVM pass `data` alone: "`log with topics` is not available on the svm
245
+ target; … call log(data) alone and fold any event discriminator into data (concat or abi.encode
246
+ it in front of the fields)". Other errors: "`log` requires a bytes data payload — `log()`
247
+ records nothing"; "`log` carries at most 4 indexed topics after its data payload, got 5".
248
+ - Example: `log(amount.toBytesLe(8n));`
249
+ - `eval(program, ...args)`
250
+ - Types: `program`: compiled Sauce program bytes. Up to 16 scalar `args`. Returns bytes.
251
+ - Runs another program and returns what it returns; `args` become its `main` arguments. If the
252
+ inner program reverts, so does the outer one. On SVM the inner program can read accounts but
253
+ cannot write them. Errors: "`eval` requires bytecode to run — `eval()` has nothing to execute";
254
+ "`eval` takes at most 16 arguments after its bytecode, got 17"; "an eval argument requires a
255
+ scalar value".
256
+ - Example: `const result = eval(program, amount);`
257
+
258
+ **Failure is atomic.** `require`, `revert`, `throw`, a failing call and every checked operation revert the whole
259
+ transaction; nothing that ran before them survives. The only failure a program can survive is a failed
260
+ external call on EVM, with `.catch()` (§13).
261
+
262
+ ## 6. `ctx`: context reads
263
+
264
+ Every read is a call: `ctx.self()`, not `ctx.self` (which gives "`ctx` is not a declared variable").
265
+
266
+ - `ctx.msgSender()` → number, **Both**
267
+ - On EVM: the immediate caller (`msg.sender`)
268
+ - On SVM: the first signer among the accounts the engine receives: the Pot, when a slot is
269
+ attached as the Pot. Not proof of who sent the transaction.
270
+ - Example: `require(ctx.msgSender() == OWNER);`
271
+ - `ctx.self()` → number, **Both**
272
+ - On EVM: the executing contract: the Pot, which holds the program's balances and allowances
273
+ - On SVM: the engine's program id, which owns every Pot account: `pot.owner == ctx.self()`
274
+ holds for a Pot, and for any other account assigned to the engine, so it does not prove an
275
+ account is the Pot; re-deriving the Pot's address does
276
+ - Example: `log(ctx.self().toBytesBe(32n));`
277
+ - `ctx.chainId()` → number, **Both**
278
+ - On EVM: the chain id
279
+ - On SVM: 1399811149 on mainnet, 1399811150 on devnet
280
+ - Example: `if (ctx.chainId() == 8453n) { … }`
281
+ - `ctx.blockNumber()` → number, **Both**
282
+ - On EVM: the block number
283
+ - On SVM: the **slot**
284
+ - Example: `const at = ctx.blockNumber();`
285
+ - `ctx.timestamp()` → number, **Both**
286
+ - On EVM: the block time, in seconds
287
+ - On SVM: the cluster time, in seconds
288
+ - Example: `require(ctx.timestamp() <= deadline);`
289
+ - `ctx.selfBalance()` → number, **Both**
290
+ - On EVM: the executing contract's balance, in wei
291
+ - On SVM: the executing program's lamports
292
+ - Example: `const wei = ctx.selfBalance();`
293
+ - `ctx.msgData()` → bytes, **Both**
294
+ - On EVM: the program's whole input, arguments included
295
+ - On SVM: the instruction data
296
+ - Example: `const input = ctx.msgData();`
297
+ - `ctx.balance(address)` → number, **Both**
298
+ - On EVM: the balance of `address`
299
+ - On SVM: the lamports of the attached account with that key. Pass `acct.address`, not the account
300
+ itself ("ctx.balance's address: expected a value, found an account"). A key that is not attached
301
+ fails at run time.
302
+ - Example: `ctx.balance(vault.address)`
303
+ - `ctx.msgValue()` → number, **EVM**
304
+ - On EVM: the native value sent (`msg.value`)
305
+ - On SVM: not available: "…; pass the amount as an argument and move the lamports with a
306
+ system-program transfer through svm.call"
307
+ - Example: `require(ctx.msgValue() >= fee);`
308
+ - `ctx.gasLeft()` → number, **EVM**
309
+ - On EVM: the gas remaining
310
+ - On SVM: not available
311
+ - Example: `const gas = ctx.gasLeft();`
312
+ - `ctx.codeSize(address)` → number, **EVM**
313
+ - On EVM: the size of `address`'s code
314
+ - On SVM: not available
315
+ - Example: `require(ctx.codeSize(token) > 0n);`
316
+ - `ctx.codeHash(address)` → number, **EVM**
317
+ - On EVM: the hash of `address`'s code
318
+ - On SVM: not available
319
+ - Example: `require(ctx.codeHash(pool) == POOL_CODEHASH);`
320
+ - `ctx.isContract(address)` → bool, **EVM**
321
+ - On EVM: true if `address` has code
322
+ - On SVM: not available; check `acct.owner` instead
323
+ - Example: `require(ctx.isContract(token));`
324
+ - `ctx.isEOA(address)` → bool, **EVM**
325
+ - On EVM: true if `address` has no code
326
+ - On SVM: not available
327
+ - Example: `require(ctx.isEOA(ctx.msgSender()));`
328
+
329
+ - A wrong argument count gives "`ctx.timestamp` takes 0 argument(s), but this call passes 1".
330
+ - An unknown name gives "`ctx.origin` is not a context builtin".
331
+ - A bare `gasLeft()` gives "… is called but never declared; write `ctx.gasLeft()` instead".
332
+ - There is no read for the transaction origin, the block hash, the base fee or the gas price. Pass such a value
333
+ in as a `main` argument.
334
+
335
+ ## 7. `crypto`
336
+
337
+ - `crypto.keccak256(data)`, **Both**
338
+ - Types: `(bytes) → number`
339
+ - The keccak-256 hash. A number argument gives "keccak256's argument requires a bytes value"; hash
340
+ a word with `crypto.keccak256(x.toBytesBe(32n))`.
341
+ - Example: `const topic = crypto.keccak256("Transfer(address,address,uint256)");`
342
+ - `crypto.ecdsaVerify(hash, signature, signer)`, **Both**
343
+ - Types: `(scalar, bytes, scalar) → bool`. `signature` is the 65-byte `r‖s‖v`.
344
+ - True if `signer` signed `hash`. On EVM a contract signer is also checked (EIP-1271); on SVM only
345
+ key signatures are checked. "ecdsaVerify's signature requires a bytes value"
346
+ - Example: `require(crypto.ecdsaVerify(digest, sig, owner));`
347
+ - `const [address, bump] = crypto.findPDA(programId, seeds)`, **Both** (on EVM it derives the same
348
+ Solana address)
349
+ - Types: `programId`: number. `seeds`: `bytes[]`. Gives two numbers.
350
+ - Derives a Solana program address and its bump. **It must be destructured:** "`crypto.findPDA`
351
+ produces two values — bind them by destructuring, as
352
+ `const [address, bump] = crypto.findPDA(programId, seeds)`". `[a]` and `[, bump]` are fine.
353
+ Seeds must be a `bytes[]` ("`crypto.findPDA`'s seeds argument must be a `bytes[]`, got …"). **At
354
+ most 15 seeds;** more compile but fail when run.
355
+ - Example: ``const [vault, bump] = crypto.findPDA(PROGRAM, [hex`01`, "vault"]);``
356
+
357
+ An unknown name gives "`crypto.sha256` is not a crypto intrinsic".
358
+
359
+ ## 8. `Math`
360
+
361
+ These are SauceScript's integer functions, on **Both** targets. They are not JavaScript's `Math`: `Math.min`,
362
+ `max`, `abs`, `pow`, `floor` and the rest give "`Math.min` is not a Math intrinsic".
363
+
364
+ - Every argument is a scalar.
365
+ - Every result is a **number**, including the signed comparisons. `if (Math.sLt(a, b)) { … }` works, but
366
+ returning one from a `: bool` function fails with "a return value: expected a bool, found a number".
367
+
368
+ - `Math.sqrt(x)`: the integer square root
369
+ - Reverts when: never
370
+ - Example: `const root = Math.sqrt(k);`
371
+ - `Math.mulDiv(x, y, d)`: ⌊x·y / d⌋, without intermediate overflow
372
+ - Reverts when: `d` is 0, or the result does not fit 256 bits
373
+ - Example: `const fee = Math.mulDiv(amount, bps, 10000n);`
374
+ - `Math.addMod(a, b, n)`: (a + b) mod n
375
+ - Reverts when: `n` is 0
376
+ - Example: `Math.addMod(a, b, P)`
377
+ - `Math.mulMod(a, b, n)`: (a · b) mod n
378
+ - Reverts when: `n` is 0
379
+ - Example: `Math.mulMod(a, b, P)`
380
+ - `Math.sDiv(a, b)`: signed division
381
+ - Reverts when: `b` is 0
382
+ - Example: `Math.sDiv(delta, 2n)`
383
+ - `Math.sMod(a, b)`: signed remainder
384
+ - Reverts when: `b` is 0
385
+ - Example: `Math.sMod(delta, 3n)`
386
+ - `Math.sShr(value, bits)`: signed (arithmetic) right shift
387
+ - Reverts when: never
388
+ - Example: `Math.sShr(tick, 1n)`
389
+ - `Math.signExtend(value, byte)`: sign-extends from byte `byte`, where 0 is the lowest byte
390
+ - Reverts when: never
391
+ - Example: `Math.signExtend(raw, 2n)` for an int24
392
+ - `Math.sLt(a, b)`, `Math.sGt(a, b)`, `Math.sLte(a, b)`, `Math.sGte(a, b)`: signed comparisons,
393
+ giving 1 or 0
394
+ - Reverts when: never
395
+ - Example: `if (Math.sLt(tick, 0n)) { … }`
396
+
397
+ A wrong argument count gives "`Math.sqrt` takes 1 argument(s), but this call passes 2".
398
+
399
+ ## 9. `abi` (EVM)
400
+
401
+ On SVM both give "`abi.encode` is not available on the svm target" (or `abi.decode`). Program arguments still
402
+ work on SVM; they are decoded separately.
403
+
404
+ - `abi.encode(v1, …, vN)`
405
+ - Types: 1 to 255 values of any type except accounts; returns bytes
406
+ - Standard Solidity ABI encoding of the values as one argument list. A single record argument is
407
+ encoded as its fields. "abi.encode requires at least one value to encode"; "abi.encode has 256
408
+ arguments, beyond the 255 …"
409
+ - Example: `return abi.encode(total, recipient);`
410
+ - `abi.decode(data, ["Shape", …])`
411
+ - Types: `data`: bytes. The shapes must be written in place as an array of strings. Returns a
412
+ record with unnamed fields.
413
+ - Read fields by position or by destructuring. Field types use SauceScript names: `"Uint256"`,
414
+ `"Address"`, `"bool"`, `"bytes"`, `"string"`, `"number"`, `"bigint"`, `"boolean"`, any of them
415
+ followed by `[]`, and records `"{Uint256, bool}"`. Solidity spellings are rejected: "`uint256`
416
+ is not an abi.decode field type — …". Errors: "abi.decode takes exactly 2 arguments (data,
417
+ shape), got N"; "abi.decode's first argument must be bytes"; shapes held in a variable give
418
+ "abi.decode's second argument must be an array literal of shape strings, e.g. ["Uint256",
419
+ "bytes[]"]"; `.name` on the result gives "this tuple's N field(s) are unnamed, so `.name`
420
+ resolves against nothing — read a field by position instead (`t[0]`)".
421
+ - Example: `const [amount, to] = abi.decode(data, ["Uint256", "Address"]);`
422
+
423
+ A `"bool"` field decodes as a bool, an `"Address"` field keeps only the address-sized low 20 bytes, and every
424
+ other single-value field decodes as a number.
425
+
426
+ ## 10. `evm` (EVM)
427
+
428
+ On SVM every function here gives "`evm.<name>` is not available on the svm target", with a pointer to the `svm`
429
+ equivalent.
430
+
431
+ - `evm.call(address, value, data)`: `(scalar, scalar, bytes) → bytes`
432
+ - A call with native `value`; returns the raw return data. **This is the only way to send value
433
+ with a call.** "`evm.call()` expects 3 argument(s), but this call passes 2"; "`evm.call()`'s
434
+ calldata argument must be bytes"
435
+ - Example: ``evm.call(WETH, amount, hex`d0e30db0`);``
436
+ - `evm.static(address, data)`: `(scalar, bytes) → bytes`
437
+ - A read-only call (staticcall)
438
+ - Example: `const reply = evm.static(pool, query);`
439
+ - `evm.delegate(address, data)`: `(scalar, bytes) → bytes`
440
+ - A delegatecall
441
+ - Example: `evm.delegate(library, data);`
442
+ - `evm.sload(slot)`: `(scalar) → number`
443
+ - Reads the executing contract's storage
444
+ - Example: `const count = evm.sload(0n);`
445
+ - `evm.sstore(slot, value)`: `(scalar, scalar)`, a statement
446
+ - Writes storage. Used as a value: "`evm.sstore` writes storage and produces no value — use it as
447
+ a statement".
448
+ - Example: `evm.sstore(0n, count + 1n);`
449
+ - `evm.tload(key)`: `(scalar) → number`
450
+ - Reads transient storage (EIP-1153), which is cleared after the transaction
451
+ - Example: `const seen = evm.tload(KEY);`
452
+ - `evm.tstore(key, value)`: `(scalar, scalar)`, a statement
453
+ - Writes transient storage
454
+ - Example: `evm.tstore(KEY, 1n);`
455
+
456
+ - Storage belongs to the executing contract, the Pot.
457
+ - An unknown name gives "`evm.create` is not an evm builtin; `evm` is a reserved namespace root".
458
+ - SauceScript cannot deploy contracts.
459
+
460
+ ## 11. `svm` (SVM)
461
+
462
+ On EVM every function here gives "`svm.<name>` is not available on the evm target", with a pointer to the
463
+ `evm` equivalent.
464
+
465
+ - `svm.sload(account, offset, length)`: `(Account, scalar, scalar) → bytes`
466
+ - Reads `length` bytes of the account's data, starting at `offset`. Reading past the end fails the
467
+ transaction, and that failure cannot be caught, so check `acct.dataLen` first. A number instead
468
+ of an account gives "svm.sload's account: expected an account, found a value".
469
+ - Example: `const amount = svm.sload(tokenAccount, 64n, 8n).toLe();`
470
+ - `svm.sstore(account, offset, data)`: `(Account, scalar, bytes)`, a statement
471
+ - Writes `data` into the account's data at `offset`. A `main` account parameter must be declared
472
+ `Account<Writable, Signer>`: "`state` is not declared writable, so `svm.sstore` may not write it
473
+ — declare it `Account<Writable>` (or `Account<Writable, Signer>`)", then "`state` is not
474
+ declared a signer, so `svm.sstore` may not write it — … declare it `Account<Writable, Signer>`".
475
+ The data must be bytes ("svm.sstore's value requires a bytes value").
476
+ - Example: `svm.sstore(state, 0n, counter.toBytesLe(8n));`
477
+ - `svm.call(program, accounts, data)`: `(Account, Account[], bytes) → bytes`
478
+ - Invokes another program with the listed accounts and returns the return data. The program is an
479
+ account parameter too ("svm.call's program — declare the callee as an `Account` param: …"). The
480
+ list must hold accounts, not numbers ("`svm.call`'s accounts argument must be an array of
481
+ accounts, e.g. `[a, b]` of `Account` params"). `[]` is fine. **A failed call fails the whole
482
+ transaction.**
483
+ - Example: `svm.call(tokenProgram, [source, destination, owner], instruction);`
484
+ - `svm.remainingAccount(i)`: `(number) → Account`
485
+ - The `i`-th account attached after the ones `main` declares. **Only inside `main`.**
486
+ "`svm.remainingAccount` takes one index, got N"
487
+ - Example: `const extra = svm.remainingAccount(0n);`
488
+ - `const rest = svm.remainingAccounts()`: `() → Account[]`
489
+ - Every account attached after the declared ones. **Only as a `let`/`const` initializer, and only
490
+ inside `main`:** "`svm.remainingAccounts()` can only initialize a `let`/`const` — … Bind it
491
+ first (`const rest = svm.remainingAccounts();`), then use the binding".
492
+ - Example: `const rest = svm.remainingAccounts(); svm.call(router, rest, data);`
493
+
494
+ An unknown name gives "`svm.rent` is not an svm builtin; `svm` is a reserved namespace root".
495
+
496
+ ## 12. Methods on values, and account properties
497
+
498
+ ### Methods (Both targets)
499
+
500
+ - `.slice(start, end)`, on bytes
501
+ - Types: `(scalar, scalar) → bytes`
502
+ - Covers bytes `start` up to, but not including, `end`. `end < start` reverts. Arrays have no
503
+ `.slice`: "a bytes method's receiver requires a bytes value". "`.slice` takes exactly 2
504
+ arguments (start, end), got N"
505
+ - Example: `const args = input.slice(4n, 68n);`
506
+ - `.concat(b1, b2, …)`, on bytes
507
+ - Types: `(...bytes) → bytes`
508
+ - Joins bytes values. "a `.concat` argument requires a bytes value"
509
+ - Example: `const call = selector.concat(to.toBytesBe(32n), amount.toBytesBe(32n));`
510
+ - `.toBe()`, on bytes, at most 32
511
+ - Types: `() → number`
512
+ - Reads the bytes as a big-endian number. Longer input fails when run.
513
+ - Example: `const word = input.slice(4n, 36n).toBe();`
514
+ - `.toLe()`, on bytes, at most 32
515
+ - Types: `() → number`
516
+ - Reads the bytes as a little-endian number (Solana's layout)
517
+ - Example: `const amount = input.slice(64n, 72n).toLe();`
518
+ - `.toBytesBe(width)`, on a scalar
519
+ - Types: `(scalar) → bytes`
520
+ - The low `width` bytes, big-endian, with `width` from 1 to 32. A constant outside that range
521
+ gives "a `.toBytesBe`/`.toBytesLe` width must be between 1 and 32 bytes, got 33". A computed
522
+ width above 32 reverts, and a computed 0 gives empty bytes.
523
+ - Example: `log(total.toBytesBe(32n));`
524
+ - `.toBytesLe(width)`, on a scalar
525
+ - Types: `(scalar) → bytes`
526
+ - The same, little-endian
527
+ - Example: `const field = amount.toBytesLe(8n);`
528
+ - `.length`, on bytes or an array
529
+ - Types: number
530
+ - The byte count or the element count. On a record, `.length` looks for a field named `length`
531
+ ("`length` is not a field of this tuple — …"). It cannot be assigned.
532
+ - Example: `for (let i = 0n; i < amounts.length; i++) { … }`
533
+
534
+ **Call methods on a variable, not on a literal.** ``hex`a9`.concat(d)`` and `"ab".concat(d)` are rejected
535
+ ("calling anything other than a plain function name …"). Write ``const selector = hex`a9059cbb`; selector.concat(d)``.
536
+
537
+ ### Account properties
538
+
539
+ - `acct.address` → number, **Both**
540
+ - On SVM: the account's public key
541
+ - On EVM: the address itself
542
+ - Example: `require(acct.address == EXPECTED_MINT);`
543
+ - `acct.owner` → number, **SVM**
544
+ - On SVM: the program that owns the account
545
+ - On EVM: not available: "`account.owner` is not available on the evm target; an address on the
546
+ EVM is the code — check it with ctx.isContract"
547
+ - Example: `require(acct.owner == TOKEN_PROGRAM);`
548
+ - `acct.dataLen` → number, **SVM**
549
+ - On SVM: the account's data size, in bytes
550
+ - On EVM: not available
551
+ - Example: `require(acct.dataLen == 165n);`
552
+
553
+ - These properties are read-only: "`.owner` is read-only — …".
554
+ - On SVM, compare accounts with `a == b` or `a != b`; ordering comparisons are rejected.
555
+ - On SVM an account is not an ordinary value. Returning one gives "a return value can't be an account — …", and
556
+ using one where a number is expected, as in arithmetic, gives "…: expected a number, found an account". Use
557
+ `acct.address` when you need its key.
558
+
559
+ ## 13. Contract bindings and `.catch()` (EVM)
560
+
561
+ **Bind an ABI** with `import ERC20 from "./erc20.abi.json"`, or with the compile option
562
+ `inlineContracts: [["ERC20", abiJson]]`. Then call through it:
563
+
564
+ - `ERC20.at(address).method(args)`: read-only for `view` and `pure` methods; otherwise a regular
565
+ call sending no value
566
+ - Example: `const balance = ERC20.at(token).balanceOf(ctx.self());`
567
+ - `ERC20.view(address).method(args)`: always read-only
568
+ - Example: `const supply = ERC20.view(token).totalSupply();`
569
+ - `ERC20.lib(address).method(args)`: always a delegatecall
570
+ - Example: `Library.lib(lib).run(x);`
571
+ - `const t = ERC20.at(address); t.method(args)`: the same, through a variable
572
+ - Example: `const t = ERC20.at(token); t.approve(router, amount);`
573
+
574
+ - **Results.**
575
+ - A method with no outputs returns its raw return bytes.
576
+ - A method with one output returns that output.
577
+ - A method with several outputs returns a record named after the ABI's outputs: read `.amountOut` or `[0]`,
578
+ or destructure it with `const [a, b] = …`.
579
+ - **Every single-value output is typed as a number, `bool` and `address` included.** Write
580
+ `ERC20.at(t).transfer(to, x) == 1n` if you need a bool. A `: bool` function cannot return the call directly
581
+ ("a return value: expected a bool, found a number").
582
+ - **Struct arguments** can be object literals with the fields in any order; they are matched to the ABI by name.
583
+ - **No value.** A bound call never sends value. Use `evm.call(address, value, data)` (§10) when you need to.
584
+ - **Token transfers.** For ERC-20 `transfer` and `approve`, prefer `@sauce/token` (`import { transfer, approve }
585
+ from "@sauce/token"`), which handles tokens that return nothing, such as USDT. A bound call decodes exactly
586
+ what the ABI declares.
587
+ - **Errors.**
588
+ - "`ERC20` has no method named `totalSupply`".
589
+ - "`ERC20.transfer()` expects 2 argument(s), but this call passes 1".
590
+ - "`.at()` (a contract binding) takes exactly 1 argument (the address)".
591
+ - Overloaded methods with the same argument count are not supported.
592
+ - On SVM: "`Contract.at` is not available on the svm target; invoke another program with svm.call(program,
593
+ accounts, calldata), or import a library's SVM arm (@sauce/token)".
594
+
595
+ ### `.catch()`: surviving a failed external call (EVM)
596
+
597
+ - `<call>.catch(() => { … });`
598
+ - If the call fails, its effects are undone and the block runs instead. The block may use and
599
+ assign the enclosing function's variables. Works on bound contract calls and on `evm.call`,
600
+ `evm.static` and `evm.delegate`.
601
+ - Example: `ERC20.at(t).approve(spender, amount).catch(() => { approved = false; });`
602
+ - `const v = <call>.catch(() => { return <constant>; });`
603
+ - If the call fails, `v` is the constant. The call must return one value: a bound method with
604
+ one output. A raw `evm.call`, `evm.static` or `evm.delegate` returns bytes, which no constant
605
+ stands in for ("a `.catch()` fallback: expected a bytes value, found a number"); test a raw
606
+ read with the statement form, then read again only when it worked.
607
+ - Example: `const balance = ERC20.at(t).balanceOf(who).catch(() => { return 0n; });`
608
+ - A call to an address with no code does not revert: it succeeds with no return data, so
609
+ `.catch()` never runs, and decoding that nothing reverts the cook. Check
610
+ `ctx.codeSize(address) > 0n` first when the address may have no code.
611
+
612
+ Rules and errors:
613
+
614
+ - The block takes no parameter: "a `.catch()` handler parameter (the caught error is not supported)".
615
+ - Use a `{ … }` block, not `() => value`. Arrow functions are allowed nowhere else.
616
+ - A `return`, or a `break`/`continue` leaving the block, is not allowed in the statement form ("a `return` in a
617
+ `.catch()` handler …").
618
+ - The value form needs exactly `return <constant>;`:
619
+ - "a captured `.catch()` requires exactly `return <constant scalar>;` in its handler";
620
+ - "the `.catch()` fallback must be a constant scalar that fits the declared ABI result width".
621
+ - A long block can be too large ("a `.catch()` handler is N bytes, beyond the 255 …"). Move the work into a
622
+ function and call it.
623
+ - On anything other than an external EVM call, the compiler rejects it ("a `.catch()` on something other than an
624
+ external contract call …"). On SVM: "`.catch()` is not available on the svm target".
625
+
626
+ ## 14. Not supported, and what to write instead
627
+
628
+ | Not supported | Write instead |
629
+ | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
630
+ | `switch` | `if` / `else if` chains |
631
+ | `do { } while (…)` | `while (true) { …; if (!cond) { break; } }` |
632
+ | `for (k in obj)`, `for await` | an index loop or `for (const x of array)` |
633
+ | `try { } catch { }`, `throw new Error(…)` | `require(cond, "reason")`, `throw "reason"`; `.catch()` for a failing EVM call |
634
+ | arrow functions, function expressions, nested functions | top-level `function` declarations (`.catch(() => { … })` is the one exception) |
635
+ | `class`, `enum`, `type` aliases, generics, `namespace` | records, `interface`, constants |
636
+ | `async function`, `await` | plain functions. **`async function` and `function*` compile today, but as ordinary functions: don't write them.** |
637
+ | default parameters, rest parameters, destructuring parameters | plain parameters |
638
+ | object destructuring `const { a } = t` | `const a = t.a;` |
639
+ | spread `[...xs]`, `f(...xs)` | explicit elements, or a loop |
640
+ | `?.`, `??`, `x!`, `as`, `satisfies` | explicit checks; annotations |
641
+ | `>>>`, `typeof`, `instanceof`, `in`, `delete`, `void`, unary `+` | `Math.sShr`, or plain values |
642
+ | `>>>=`, `\|\|=`, `&&=`, `??=` | `x = …` |
643
+ | `a[i] += v`, `t.f += v`, `a[i]++` | `a[i] = a[i] + v` |
644
+ | `i++` used as a value | `i += 1n` on its own line |
645
+ | `t[0] = v` on a record | `t.field = v` |
646
+ | template strings | `"text"`, or bytes built with `.concat` |
647
+ | `1e18`, `1.5`, `null`, `undefined` | `10n ** 18n`, integers in the smallest unit, `0n` |
648
+ | `xs.push(v)`, `console.log`, any JavaScript library | `new Array(n)` with an index; `log(…)` |
649
+ | `Math.min`, `max`, `abs`, `pow` | `if` or a ternary; `**` |
650
+ | comparing bytes with `==` | compare `crypto.keccak256` of each |
651
+ | `export default`, `export { … }`, `import * as X` | `export function` / `export const`; named imports |
652
+ | a method on a literal (``hex`…`.concat(d)``) | bind the literal to a `const` first |
653
+ | sending value through a bound call | `evm.call(address, value, data)` |
654
+ | labeled statements, labeled `break`/`continue` | a flag variable |
655
+ | computed object keys, object methods | plain named fields |
656
+
657
+ The compiler rejects each of these. Most messages read "… is not supported", naming the construct.
658
+
659
+ ## 15. Limits
660
+
661
+ | Limit | Value |
662
+ | --------------------------------------------------------------------------------------- | ------------------------------------------------ |
663
+ | Parameters of a function other than `main`, plus the values its body keeps live at once | about 16 (§4) |
664
+ | `log` topics | 4 on EVM; none on SVM |
665
+ | `eval` arguments | 16 |
666
+ | `abi.encode` values, record fields encoded, `abi.decode` fields | 255 |
667
+ | Elements in an array literal | 65,535 |
668
+ | Bytes in a string or `hex` literal | 65,535 |
669
+ | `.catch()` block | about 255 bytes of compiled code |
670
+ | `crypto.findPDA` seeds | 15 (checked when run) |
671
+ | Nested arrays in a `main` parameter | 4 levels |
672
+ | One caller-supplied collection in `main`'s arguments | 16 KiB |
673
+ | Working memory on SVM | 64 KiB per run |
674
+ | One Solana transaction: the program, its arguments and the cook | 1,232 bytes; `sauce run` stages a larger program |