@eco-incorp/sauce 0.99.5 → 0.99.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1197) 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 +324 -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 +80 -57
  47. package/docs/api/router.md +238 -0
  48. package/docs/api/routes.md +31 -22
  49. package/docs/concepts/architecture.md +30 -5
  50. package/docs/concepts/saucescript.md +53 -56
  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 +24 -15
  66. package/docs/guides/cli.md +1442 -0
  67. package/docs/guides/compiling.md +24 -10
  68. package/docs/guides/intents.md +260 -17
  69. package/docs/guides/mcp.md +539 -0
  70. package/docs/guides/nested-intents.md +21 -6
  71. package/docs/guides/protocols-and-tokens.md +235 -36
  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 +1497 -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 +170 -0
  128. package/sdk/dist/cli/chain.d.ts.map +1 -0
  129. package/sdk/dist/cli/chain.js +457 -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 +200 -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 +197 -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 +3162 -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 +183 -0
  260. package/sdk/dist/cli/solana.d.ts.map +1 -0
  261. package/sdk/dist/cli/solana.js +1360 -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/plugin/index.d.ts +3 -2
  384. package/sdk/dist/plugin/index.d.ts.map +1 -1
  385. package/sdk/dist/plugin/index.js.map +1 -1
  386. package/sdk/dist/price.d.ts +40 -0
  387. package/sdk/dist/price.d.ts.map +1 -0
  388. package/sdk/dist/price.js +101 -0
  389. package/sdk/dist/price.js.map +1 -0
  390. package/sdk/dist/protocols/aerodrome/abis.d.ts +76 -0
  391. package/sdk/dist/protocols/aerodrome/abis.d.ts.map +1 -1
  392. package/sdk/dist/protocols/aerodrome/abis.js +61 -0
  393. package/sdk/dist/protocols/aerodrome/abis.js.map +1 -1
  394. package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts +70 -0
  395. package/sdk/dist/protocols/aerodrome-slipstream/abis.d.ts.map +1 -1
  396. package/sdk/dist/protocols/aerodrome-slipstream/abis.js +54 -0
  397. package/sdk/dist/protocols/aerodrome-slipstream/abis.js.map +1 -1
  398. package/sdk/dist/protocols/camelot/abis.d.ts +178 -0
  399. package/sdk/dist/protocols/camelot/abis.d.ts.map +1 -1
  400. package/sdk/dist/protocols/camelot/abis.js +139 -0
  401. package/sdk/dist/protocols/camelot/abis.js.map +1 -1
  402. package/sdk/dist/protocols/cbeth/functions.d.ts +2 -2
  403. package/sdk/dist/protocols/cbeth/functions.d.ts.map +1 -1
  404. package/sdk/dist/protocols/cbeth/functions.js +4 -6
  405. package/sdk/dist/protocols/cbeth/functions.js.map +1 -1
  406. package/sdk/dist/protocols/crvusd/functions.d.ts +2 -2
  407. package/sdk/dist/protocols/crvusd/functions.d.ts.map +1 -1
  408. package/sdk/dist/protocols/crvusd/functions.js +6 -6
  409. package/sdk/dist/protocols/eco-routes/abis.d.ts +792 -50
  410. package/sdk/dist/protocols/eco-routes/abis.d.ts.map +1 -1
  411. package/sdk/dist/protocols/eco-routes/abis.js +1058 -49
  412. package/sdk/dist/protocols/eco-routes/abis.js.map +1 -1
  413. package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts +44 -61
  414. package/sdk/dist/protocols/eco-routes/addresses.generated.d.ts.map +1 -1
  415. package/sdk/dist/protocols/eco-routes/addresses.generated.js +45 -62
  416. package/sdk/dist/protocols/eco-routes/addresses.generated.js.map +1 -1
  417. package/sdk/dist/protocols/eco-routes/lookup.d.ts +10 -0
  418. package/sdk/dist/protocols/eco-routes/lookup.d.ts.map +1 -1
  419. package/sdk/dist/protocols/eco-routes/lookup.js +16 -0
  420. package/sdk/dist/protocols/eco-routes/lookup.js.map +1 -1
  421. package/sdk/dist/protocols/erc20/functions.d.ts +3 -3
  422. package/sdk/dist/protocols/erc20/functions.d.ts.map +1 -1
  423. package/sdk/dist/protocols/erc20/functions.js +6 -9
  424. package/sdk/dist/protocols/erc20/functions.js.map +1 -1
  425. package/sdk/dist/protocols/frax/functions.d.ts +2 -2
  426. package/sdk/dist/protocols/frax/functions.d.ts.map +1 -1
  427. package/sdk/dist/protocols/frax/functions.js +6 -6
  428. package/sdk/dist/protocols/gho/functions.d.ts +2 -2
  429. package/sdk/dist/protocols/gho/functions.d.ts.map +1 -1
  430. package/sdk/dist/protocols/gho/functions.js +4 -6
  431. package/sdk/dist/protocols/gho/functions.js.map +1 -1
  432. package/sdk/dist/protocols/liquity-v2/functions.d.ts +2 -2
  433. package/sdk/dist/protocols/liquity-v2/functions.d.ts.map +1 -1
  434. package/sdk/dist/protocols/liquity-v2/functions.js +4 -6
  435. package/sdk/dist/protocols/liquity-v2/functions.js.map +1 -1
  436. package/sdk/dist/protocols/maverick/abis.d.ts +77 -0
  437. package/sdk/dist/protocols/maverick/abis.d.ts.map +1 -1
  438. package/sdk/dist/protocols/maverick/abis.js +58 -0
  439. package/sdk/dist/protocols/maverick/abis.js.map +1 -1
  440. package/sdk/dist/protocols/maverick/addresses.d.ts.map +1 -1
  441. package/sdk/dist/protocols/maverick/addresses.js +4 -0
  442. package/sdk/dist/protocols/maverick/addresses.js.map +1 -1
  443. package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts +52 -0
  444. package/sdk/dist/protocols/pancakeswap-v2/abis.d.ts.map +1 -1
  445. package/sdk/dist/protocols/pancakeswap-v2/abis.js +43 -0
  446. package/sdk/dist/protocols/pancakeswap-v2/abis.js.map +1 -1
  447. package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts +73 -0
  448. package/sdk/dist/protocols/pancakeswap-v3/abis.d.ts.map +1 -1
  449. package/sdk/dist/protocols/pancakeswap-v3/abis.js +56 -0
  450. package/sdk/dist/protocols/pancakeswap-v3/abis.js.map +1 -1
  451. package/sdk/dist/protocols/permit2/abis.d.ts +113 -0
  452. package/sdk/dist/protocols/permit2/abis.d.ts.map +1 -1
  453. package/sdk/dist/protocols/permit2/abis.js +63 -0
  454. package/sdk/dist/protocols/permit2/abis.js.map +1 -1
  455. package/sdk/dist/protocols/quickswap/abis.d.ts +148 -0
  456. package/sdk/dist/protocols/quickswap/abis.d.ts.map +1 -1
  457. package/sdk/dist/protocols/quickswap/abis.js +119 -0
  458. package/sdk/dist/protocols/quickswap/abis.js.map +1 -1
  459. package/sdk/dist/protocols/sushiswap-v2/abis.d.ts +52 -0
  460. package/sdk/dist/protocols/sushiswap-v2/abis.d.ts.map +1 -1
  461. package/sdk/dist/protocols/sushiswap-v2/abis.js +42 -0
  462. package/sdk/dist/protocols/sushiswap-v2/abis.js.map +1 -1
  463. package/sdk/dist/protocols/synthra-v3/abis.d.ts +73 -0
  464. package/sdk/dist/protocols/synthra-v3/abis.d.ts.map +1 -1
  465. package/sdk/dist/protocols/synthra-v3/abis.js +55 -0
  466. package/sdk/dist/protocols/synthra-v3/abis.js.map +1 -1
  467. package/sdk/dist/protocols/trader-joe/abis.d.ts +133 -0
  468. package/sdk/dist/protocols/trader-joe/abis.d.ts.map +1 -1
  469. package/sdk/dist/protocols/trader-joe/abis.js +101 -0
  470. package/sdk/dist/protocols/trader-joe/abis.js.map +1 -1
  471. package/sdk/dist/protocols/trader-joe/addresses.d.ts.map +1 -1
  472. package/sdk/dist/protocols/trader-joe/addresses.js +5 -0
  473. package/sdk/dist/protocols/trader-joe/addresses.js.map +1 -1
  474. package/sdk/dist/protocols/uniswap-v2/abis.d.ts +52 -0
  475. package/sdk/dist/protocols/uniswap-v2/abis.d.ts.map +1 -1
  476. package/sdk/dist/protocols/uniswap-v2/abis.js +44 -0
  477. package/sdk/dist/protocols/uniswap-v2/abis.js.map +1 -1
  478. package/sdk/dist/protocols/uniswap-v3/abis.d.ts +73 -0
  479. package/sdk/dist/protocols/uniswap-v3/abis.d.ts.map +1 -1
  480. package/sdk/dist/protocols/uniswap-v3/abis.js +55 -0
  481. package/sdk/dist/protocols/uniswap-v3/abis.js.map +1 -1
  482. package/sdk/dist/protocols/uniswap-v4/abis.d.ts +247 -0
  483. package/sdk/dist/protocols/uniswap-v4/abis.d.ts.map +1 -1
  484. package/sdk/dist/protocols/uniswap-v4/abis.js +167 -0
  485. package/sdk/dist/protocols/uniswap-v4/abis.js.map +1 -1
  486. package/sdk/dist/protocols/uniswap-v4/addresses.d.ts.map +1 -1
  487. package/sdk/dist/protocols/uniswap-v4/addresses.js +50 -0
  488. package/sdk/dist/protocols/uniswap-v4/addresses.js.map +1 -1
  489. package/sdk/dist/protocols/unitflow-v3/abis.d.ts +73 -0
  490. package/sdk/dist/protocols/unitflow-v3/abis.d.ts.map +1 -1
  491. package/sdk/dist/protocols/unitflow-v3/abis.js +56 -0
  492. package/sdk/dist/protocols/unitflow-v3/abis.js.map +1 -1
  493. package/sdk/dist/protocols/velodrome/abis.d.ts +76 -0
  494. package/sdk/dist/protocols/velodrome/abis.d.ts.map +1 -1
  495. package/sdk/dist/protocols/velodrome/abis.js +61 -0
  496. package/sdk/dist/protocols/velodrome/abis.js.map +1 -1
  497. package/sdk/dist/recipes/cctp-split.sauce.ts +5 -3
  498. package/sdk/dist/recipes/plain-transfer.sauce.ts +5 -2
  499. package/sdk/dist/routes/accessor-index.d.ts +2 -2
  500. package/sdk/dist/routes/accessor-index.d.ts.map +1 -1
  501. package/sdk/dist/routes/accessor-index.js +4 -3
  502. package/sdk/dist/routes/accessor-index.js.map +1 -1
  503. package/sdk/dist/routes/ambient.d.ts +5 -0
  504. package/sdk/dist/routes/ambient.d.ts.map +1 -1
  505. package/sdk/dist/routes/ambient.js +20 -0
  506. package/sdk/dist/routes/ambient.js.map +1 -1
  507. package/sdk/dist/routes/ast-walk.d.ts +21 -3
  508. package/sdk/dist/routes/ast-walk.d.ts.map +1 -1
  509. package/sdk/dist/routes/ast-walk.js +33 -4
  510. package/sdk/dist/routes/ast-walk.js.map +1 -1
  511. package/sdk/dist/routes/available.d.ts +43 -0
  512. package/sdk/dist/routes/available.d.ts.map +1 -0
  513. package/sdk/dist/routes/available.js +230 -0
  514. package/sdk/dist/routes/available.js.map +1 -0
  515. package/sdk/dist/routes/builtins.generated.d.ts +180 -0
  516. package/sdk/dist/routes/builtins.generated.d.ts.map +1 -0
  517. package/sdk/dist/routes/builtins.generated.js +2 -0
  518. package/sdk/dist/routes/builtins.generated.js.map +1 -0
  519. package/sdk/dist/routes/chain-exports.generated.d.ts +13 -8
  520. package/sdk/dist/routes/chain-exports.generated.d.ts.map +1 -1
  521. package/sdk/dist/routes/chain-exports.generated.js.map +1 -1
  522. package/sdk/dist/routes/closure.d.ts.map +1 -1
  523. package/sdk/dist/routes/closure.js +13 -26
  524. package/sdk/dist/routes/closure.js.map +1 -1
  525. package/sdk/dist/routes/composed.d.ts.map +1 -1
  526. package/sdk/dist/routes/composed.js +20 -8
  527. package/sdk/dist/routes/composed.js.map +1 -1
  528. package/sdk/dist/routes/encode.d.ts +17 -0
  529. package/sdk/dist/routes/encode.d.ts.map +1 -1
  530. package/sdk/dist/routes/encode.js +14 -11
  531. package/sdk/dist/routes/encode.js.map +1 -1
  532. package/sdk/dist/routes/entry.d.ts +76 -0
  533. package/sdk/dist/routes/entry.d.ts.map +1 -0
  534. package/sdk/dist/routes/entry.js +478 -0
  535. package/sdk/dist/routes/entry.js.map +1 -0
  536. package/sdk/dist/routes/index.d.ts +21 -14
  537. package/sdk/dist/routes/index.d.ts.map +1 -1
  538. package/sdk/dist/routes/index.js +12 -9
  539. package/sdk/dist/routes/index.js.map +1 -1
  540. package/sdk/dist/routes/intent-body.d.ts +97 -0
  541. package/sdk/dist/routes/intent-body.d.ts.map +1 -0
  542. package/sdk/dist/routes/intent-body.js +441 -0
  543. package/sdk/dist/routes/intent-body.js.map +1 -0
  544. package/sdk/dist/routes/intent-dsl.d.ts +21 -6
  545. package/sdk/dist/routes/intent-dsl.d.ts.map +1 -1
  546. package/sdk/dist/routes/intent-dsl.js +34 -17
  547. package/sdk/dist/routes/intent-dsl.js.map +1 -1
  548. package/sdk/dist/routes/intent-sugar.d.ts +77 -4
  549. package/sdk/dist/routes/intent-sugar.d.ts.map +1 -1
  550. package/sdk/dist/routes/intent-sugar.js +358 -152
  551. package/sdk/dist/routes/intent-sugar.js.map +1 -1
  552. package/sdk/dist/routes/intent.d.ts +13 -1
  553. package/sdk/dist/routes/intent.d.ts.map +1 -1
  554. package/sdk/dist/routes/intent.js +37 -1
  555. package/sdk/dist/routes/intent.js.map +1 -1
  556. package/sdk/dist/routes/nest.d.ts +3 -2
  557. package/sdk/dist/routes/nest.d.ts.map +1 -1
  558. package/sdk/dist/routes/nest.js +5 -3
  559. package/sdk/dist/routes/nest.js.map +1 -1
  560. package/sdk/dist/routes/parse.d.ts +6 -0
  561. package/sdk/dist/routes/parse.d.ts.map +1 -0
  562. package/sdk/dist/routes/parse.js +39 -0
  563. package/sdk/dist/routes/parse.js.map +1 -0
  564. package/sdk/dist/routes/portal.d.ts +258 -4
  565. package/sdk/dist/routes/portal.d.ts.map +1 -1
  566. package/sdk/dist/routes/portal.js +588 -9
  567. package/sdk/dist/routes/portal.js.map +1 -1
  568. package/sdk/dist/routes/protocol-rewrite.d.ts +71 -1
  569. package/sdk/dist/routes/protocol-rewrite.d.ts.map +1 -1
  570. package/sdk/dist/routes/protocol-rewrite.js +178 -54
  571. package/sdk/dist/routes/protocol-rewrite.js.map +1 -1
  572. package/sdk/dist/routes/rs-compile.d.ts +25 -22
  573. package/sdk/dist/routes/rs-compile.d.ts.map +1 -1
  574. package/sdk/dist/routes/rs-compile.js +55 -49
  575. package/sdk/dist/routes/rs-compile.js.map +1 -1
  576. package/sdk/dist/routes/sauce-calls.d.ts +26 -12
  577. package/sdk/dist/routes/sauce-calls.d.ts.map +1 -1
  578. package/sdk/dist/routes/sauce-calls.js +16 -23
  579. package/sdk/dist/routes/sauce-calls.js.map +1 -1
  580. package/sdk/dist/routes/sauce-route.d.ts +74 -7
  581. package/sdk/dist/routes/sauce-route.d.ts.map +1 -1
  582. package/sdk/dist/routes/sauce-route.js +249 -96
  583. package/sdk/dist/routes/sauce-route.js.map +1 -1
  584. package/sdk/dist/routes/source-globals.d.ts +107 -0
  585. package/sdk/dist/routes/source-globals.d.ts.map +1 -0
  586. package/sdk/dist/routes/source-globals.generated.d.ts +5530 -936
  587. package/sdk/dist/routes/source-globals.generated.d.ts.map +1 -1
  588. package/sdk/dist/routes/source-globals.generated.js +3 -4
  589. package/sdk/dist/routes/source-globals.generated.js.map +1 -1
  590. package/sdk/dist/routes/source-globals.js +174 -0
  591. package/sdk/dist/routes/source-globals.js.map +1 -0
  592. package/sdk/dist/routes/stock-tokens.d.ts +69 -0
  593. package/sdk/dist/routes/stock-tokens.d.ts.map +1 -0
  594. package/sdk/dist/routes/stock-tokens.generated.d.ts +4 -0
  595. package/sdk/dist/routes/stock-tokens.generated.d.ts.map +1 -0
  596. package/sdk/dist/routes/stock-tokens.generated.js +1836 -0
  597. package/sdk/dist/routes/stock-tokens.generated.js.map +1 -0
  598. package/sdk/dist/routes/stock-tokens.js +65 -0
  599. package/sdk/dist/routes/stock-tokens.js.map +1 -0
  600. package/sdk/dist/routes/token-registry.d.ts +64 -8
  601. package/sdk/dist/routes/token-registry.d.ts.map +1 -1
  602. package/sdk/dist/routes/token-registry.js +208 -33
  603. package/sdk/dist/routes/token-registry.js.map +1 -1
  604. package/sdk/dist/routes/token-rewrite.d.ts +63 -28
  605. package/sdk/dist/routes/token-rewrite.d.ts.map +1 -1
  606. package/sdk/dist/routes/token-rewrite.js +387 -123
  607. package/sdk/dist/routes/token-rewrite.js.map +1 -1
  608. package/sdk/dist/routes/unknown-global.d.ts +32 -0
  609. package/sdk/dist/routes/unknown-global.d.ts.map +1 -0
  610. package/sdk/dist/routes/unknown-global.js +106 -0
  611. package/sdk/dist/routes/unknown-global.js.map +1 -0
  612. package/sdk/dist/routes/vault.d.ts +38 -8
  613. package/sdk/dist/routes/vault.d.ts.map +1 -1
  614. package/sdk/dist/routes/vault.js +47 -8
  615. package/sdk/dist/routes/vault.js.map +1 -1
  616. package/sdk/dist/sauce-script/builtins.d.ts +309 -0
  617. package/sdk/dist/sauce-script/declarations.d.ts +3 -0
  618. package/sdk/dist/sauce-script/declarations.d.ts.map +1 -0
  619. package/sdk/dist/sauce-script/declarations.js +229 -0
  620. package/sdk/dist/sauce-script/declarations.js.map +1 -0
  621. package/sdk/dist/sauce-script/index.d.ts +2714 -0
  622. package/sdk/dist/sauce-script/ts-plugin.cjs +85 -0
  623. package/sdk/dist/skills/loader.d.ts.map +1 -1
  624. package/sdk/dist/skills/loader.js +4 -3
  625. package/sdk/dist/skills/loader.js.map +1 -1
  626. package/sdk/dist/std/router/balancer-v2-vault.abi.json +78 -0
  627. package/sdk/dist/std/router/curve-cryptoswap.abi.json +29 -0
  628. package/sdk/dist/std/router/curve-stableswap.abi.json +29 -0
  629. package/sdk/dist/std/router/dodo-v2-pool.abi.json +39 -0
  630. package/sdk/dist/std/router/lb-pair.abi.json +55 -0
  631. package/sdk/dist/std/router/package.json +7 -0
  632. package/sdk/dist/std/router/router.evm.js +567 -0
  633. package/sdk/dist/std/router/sauce-router.abi.json +202 -0
  634. package/sdk/dist/std/router/uniswap-v2-pair.abi.json +49 -0
  635. package/sdk/dist/std/router/woo-pp-v2.abi.json +42 -0
  636. package/sdk/dist/std/token/permit2.abi.json +226 -0
  637. package/sdk/dist/std/token/token.evm.js +73 -0
  638. package/sdk/dist/std/token/token.svm.js +194 -41
  639. package/sdk/dist/svm/client.d.ts +62 -15
  640. package/sdk/dist/svm/client.d.ts.map +1 -1
  641. package/sdk/dist/svm/client.js +103 -42
  642. package/sdk/dist/svm/client.js.map +1 -1
  643. package/sdk/dist/svm/engine.d.ts +66 -5
  644. package/sdk/dist/svm/engine.d.ts.map +1 -1
  645. package/sdk/dist/svm/engine.js +73 -5
  646. package/sdk/dist/svm/engine.js.map +1 -1
  647. package/sdk/dist/svm/index.d.ts +2 -0
  648. package/sdk/dist/svm/index.d.ts.map +1 -1
  649. package/sdk/dist/svm/index.js +2 -0
  650. package/sdk/dist/svm/index.js.map +1 -1
  651. package/sdk/dist/svm/instructions.d.ts +72 -1
  652. package/sdk/dist/svm/instructions.d.ts.map +1 -1
  653. package/sdk/dist/svm/instructions.js +81 -2
  654. package/sdk/dist/svm/instructions.js.map +1 -1
  655. package/sdk/dist/svm/kitchen.d.ts +20 -1
  656. package/sdk/dist/svm/kitchen.d.ts.map +1 -1
  657. package/sdk/dist/svm/kitchen.js +47 -1
  658. package/sdk/dist/svm/kitchen.js.map +1 -1
  659. package/sdk/dist/svm/portal.d.ts +250 -0
  660. package/sdk/dist/svm/portal.d.ts.map +1 -0
  661. package/sdk/dist/svm/portal.js +462 -0
  662. package/sdk/dist/svm/portal.js.map +1 -0
  663. package/sdk/dist/svm/send.d.ts +18 -2
  664. package/sdk/dist/svm/send.d.ts.map +1 -1
  665. package/sdk/dist/svm/send.js +28 -3
  666. package/sdk/dist/svm/send.js.map +1 -1
  667. package/sdk/dist/svm/token-accounts.d.ts +49 -0
  668. package/sdk/dist/svm/token-accounts.d.ts.map +1 -0
  669. package/sdk/dist/svm/token-accounts.js +58 -0
  670. package/sdk/dist/svm/token-accounts.js.map +1 -0
  671. package/sdk/dist/svm/token-extensions.d.ts +18 -7
  672. package/sdk/dist/svm/token-extensions.d.ts.map +1 -1
  673. package/sdk/dist/svm/token-extensions.js +58 -5
  674. package/sdk/dist/svm/token-extensions.js.map +1 -1
  675. package/sdk/dist/token/api.d.ts +7 -4
  676. package/sdk/dist/token/api.d.ts.map +1 -1
  677. package/sdk/dist/token/api.js.map +1 -1
  678. package/sdk/dist/token/evm.js +2 -2
  679. package/sdk/dist/token/index.d.ts +4 -4
  680. package/sdk/dist/token/index.js +4 -4
  681. package/sdk/dist/token/params.js +1 -1
  682. package/sdk/dist/token/source.js +3 -3
  683. package/sdk/dist/token/source.js.map +1 -1
  684. package/sdk/dist/token/types.d.ts +2 -2
  685. package/sdk/dist/token/types.js +2 -2
  686. package/sdk/src/protocols/aerodrome/AerodromePoolABI.json +105 -0
  687. package/sdk/src/protocols/aerodrome/abis.ts +62 -0
  688. package/sdk/src/protocols/aerodrome-slipstream/AerodromeSlipstreamPoolABI.json +96 -0
  689. package/sdk/src/protocols/aerodrome-slipstream/abis.ts +55 -0
  690. package/sdk/src/protocols/camelot/CamelotV2FactoryABI.json +25 -0
  691. package/sdk/src/protocols/camelot/CamelotV2PairABI.json +109 -0
  692. package/sdk/src/protocols/camelot/CamelotV3FactoryABI.json +25 -0
  693. package/sdk/src/protocols/camelot/CamelotV3PoolABI.json +92 -0
  694. package/sdk/src/protocols/camelot/abis.ts +143 -0
  695. package/sdk/src/protocols/cbeth/functions.ts +4 -6
  696. package/sdk/src/protocols/crvusd/functions.ts +6 -6
  697. package/sdk/src/protocols/eco-routes/PortalABI.json +1448 -0
  698. package/sdk/src/protocols/eco-routes/ProverABI.json +162 -0
  699. package/sdk/src/protocols/eco-routes/abis.ts +1060 -51
  700. package/sdk/src/protocols/eco-routes/addresses.generated.ts +45 -62
  701. package/sdk/src/protocols/eco-routes/lookup.ts +18 -0
  702. package/sdk/src/protocols/erc20/functions.ts +6 -9
  703. package/sdk/src/protocols/frax/functions.ts +6 -6
  704. package/sdk/src/protocols/gho/functions.ts +4 -6
  705. package/sdk/src/protocols/liquity-v2/functions.ts +4 -6
  706. package/sdk/src/protocols/maverick/MaverickV2PoolABI.json +107 -0
  707. package/sdk/src/protocols/maverick/abis.ts +59 -0
  708. package/sdk/src/protocols/maverick/addresses.ts +4 -0
  709. package/sdk/src/protocols/pancakeswap-v2/PancakeSwapV2PairABI.json +72 -0
  710. package/sdk/src/protocols/pancakeswap-v2/abis.ts +44 -0
  711. package/sdk/src/protocols/pancakeswap-v3/PancakeSwapV3PoolABI.json +100 -0
  712. package/sdk/src/protocols/pancakeswap-v3/abis.ts +57 -0
  713. package/sdk/src/protocols/permit2/Permit2ABI.json +154 -0
  714. package/sdk/src/protocols/permit2/abis.ts +63 -0
  715. package/sdk/src/protocols/quickswap/QuickSwapV2FactoryABI.json +25 -0
  716. package/sdk/src/protocols/quickswap/QuickSwapV2PairABI.json +72 -0
  717. package/sdk/src/protocols/quickswap/QuickSwapV3FactoryABI.json +25 -0
  718. package/sdk/src/protocols/quickswap/QuickSwapV3PoolABI.json +88 -0
  719. package/sdk/src/protocols/quickswap/abis.ts +123 -0
  720. package/sdk/src/protocols/sushiswap-v2/SushiSwapV2PairABI.json +72 -0
  721. package/sdk/src/protocols/sushiswap-v2/abis.ts +43 -0
  722. package/sdk/src/protocols/synthra-v3/SynthraV3PoolABI.json +100 -0
  723. package/sdk/src/protocols/synthra-v3/abis.ts +56 -0
  724. package/sdk/src/protocols/trader-joe/LBPairABI.json +185 -0
  725. package/sdk/src/protocols/trader-joe/abis.ts +102 -0
  726. package/sdk/src/protocols/trader-joe/addresses.ts +5 -0
  727. package/sdk/src/protocols/uniswap-v2/UniswapV2PairABI.json +72 -0
  728. package/sdk/src/protocols/uniswap-v2/abis.ts +45 -0
  729. package/sdk/src/protocols/uniswap-v3/UniswapV3PoolABI.json +100 -0
  730. package/sdk/src/protocols/uniswap-v3/abis.ts +56 -0
  731. package/sdk/src/protocols/uniswap-v4/UniswapV4PoolManagerABI.json +38 -0
  732. package/sdk/src/protocols/uniswap-v4/UniswapV4StateViewABI.json +307 -0
  733. package/sdk/src/protocols/uniswap-v4/abis.ts +168 -0
  734. package/sdk/src/protocols/uniswap-v4/addresses.ts +50 -0
  735. package/sdk/src/protocols/unitflow-v3/UnitFlowV3PoolABI.json +100 -0
  736. package/sdk/src/protocols/unitflow-v3/abis.ts +57 -0
  737. package/sdk/src/protocols/velodrome/VelodromePoolABI.json +105 -0
  738. package/sdk/src/protocols/velodrome/abis.ts +62 -0
  739. package/skills/sauce-actions/SKILL.md +166 -0
  740. package/skills/sauce-actions/examples/swap-and-supply.json +24 -0
  741. package/skills/sauce-actions/examples/swap-by-key.json +15 -0
  742. package/skills/sauce-actions/references/actions.md +731 -0
  743. package/skills/sauce-chains/SKILL.md +137 -0
  744. package/skills/sauce-chains/examples/chains.sauce.ts +25 -0
  745. package/skills/sauce-chains/references/arbitrum.md +158 -0
  746. package/skills/sauce-chains/references/arc.md +107 -0
  747. package/skills/sauce-chains/references/aurora.md +33 -0
  748. package/skills/sauce-chains/references/avalanche.md +106 -0
  749. package/skills/sauce-chains/references/base-stocks.md +77 -0
  750. package/skills/sauce-chains/references/base.md +141 -0
  751. package/skills/sauce-chains/references/berachain.md +33 -0
  752. package/skills/sauce-chains/references/blast.md +60 -0
  753. package/skills/sauce-chains/references/boba.md +33 -0
  754. package/skills/sauce-chains/references/bsc.md +97 -0
  755. package/skills/sauce-chains/references/celo.md +57 -0
  756. package/skills/sauce-chains/references/core.md +33 -0
  757. package/skills/sauce-chains/references/cronos.md +33 -0
  758. package/skills/sauce-chains/references/ethereum-stocks.md +1741 -0
  759. package/skills/sauce-chains/references/ethereum.md +255 -0
  760. package/skills/sauce-chains/references/evmos.md +33 -0
  761. package/skills/sauce-chains/references/fantom.md +61 -0
  762. package/skills/sauce-chains/references/fuse.md +33 -0
  763. package/skills/sauce-chains/references/gnosis.md +57 -0
  764. package/skills/sauce-chains/references/index.md +58 -0
  765. package/skills/sauce-chains/references/ink.md +55 -0
  766. package/skills/sauce-chains/references/kava.md +33 -0
  767. package/skills/sauce-chains/references/klaytn.md +33 -0
  768. package/skills/sauce-chains/references/linea.md +65 -0
  769. package/skills/sauce-chains/references/manta.md +33 -0
  770. package/skills/sauce-chains/references/mantle.md +33 -0
  771. package/skills/sauce-chains/references/metis.md +54 -0
  772. package/skills/sauce-chains/references/mode.md +55 -0
  773. package/skills/sauce-chains/references/monad.md +79 -0
  774. package/skills/sauce-chains/references/moonbeam.md +33 -0
  775. package/skills/sauce-chains/references/opbnb.md +55 -0
  776. package/skills/sauce-chains/references/optimism.md +123 -0
  777. package/skills/sauce-chains/references/plasma.md +35 -0
  778. package/skills/sauce-chains/references/polygon.md +123 -0
  779. package/skills/sauce-chains/references/pulsechain.md +33 -0
  780. package/skills/sauce-chains/references/ronin.md +35 -0
  781. package/skills/sauce-chains/references/scroll.md +62 -0
  782. package/skills/sauce-chains/references/sei.md +55 -0
  783. package/skills/sauce-chains/references/solana.md +53 -0
  784. package/skills/sauce-chains/references/sonic.md +57 -0
  785. package/skills/sauce-chains/references/unichain.md +61 -0
  786. package/skills/sauce-chains/references/zetachain.md +33 -0
  787. package/skills/sauce-chains/references/zksync.md +59 -0
  788. package/skills/sauce-chains/references/zora.md +57 -0
  789. package/skills/sauce-cli/SKILL.md +366 -0
  790. package/skills/sauce-cli/examples/pay.sauce.ts +23 -0
  791. package/skills/sauce-cli/examples/split.sauce.ts +30 -0
  792. package/skills/sauce-distributed-swap/SKILL.md +392 -0
  793. package/skills/sauce-distributed-swap/examples/distributed-swap.mts +251 -0
  794. package/skills/sauce-distributed-swap/examples/distributed-swap.sauce.ts +115 -0
  795. package/skills/sauce-examples/SKILL.md +96 -0
  796. package/skills/sauce-globals/SKILL.md +175 -0
  797. package/skills/sauce-globals/examples/globals.mts +111 -0
  798. package/skills/sauce-globals/examples/globals.sauce.ts +47 -0
  799. package/skills/sauce-globals/references/chains.md +53 -0
  800. package/skills/sauce-globals/references/protocols.md +405 -0
  801. package/skills/sauce-globals/references/stocks.md +1824 -0
  802. package/skills/sauce-globals/references/tokens.md +53 -0
  803. package/skills/sauce-intents/SKILL.md +505 -0
  804. package/skills/sauce-intents/examples/cross-chain.sauce.ts +37 -0
  805. package/skills/sauce-intents/examples/fund-by-transfer.sauce.ts +54 -0
  806. package/skills/sauce-intents/examples/intents.mts +343 -0
  807. package/skills/sauce-intents/examples/swap-on-base.sauce.ts +135 -0
  808. package/skills/sauce-intents/references/portal.md +77 -0
  809. package/skills/sauce-overview/SKILL.md +161 -0
  810. package/skills/sauce-protocols/SKILL.md +118 -0
  811. package/skills/sauce-protocols/examples/protocols.mts +77 -0
  812. package/skills/sauce-protocols/examples/protocols.sauce.ts +27 -0
  813. package/{sdk/src/skills → skills/sauce-protocols/references}/aave-v2.md +35 -17
  814. package/skills/sauce-protocols/references/aave-v3.md +144 -0
  815. package/skills/sauce-protocols/references/aave-v4.md +50 -0
  816. package/skills/sauce-protocols/references/abracadabra.md +72 -0
  817. package/skills/sauce-protocols/references/across.md +73 -0
  818. package/skills/sauce-protocols/references/aerodrome-slipstream.md +50 -0
  819. package/{sdk/src/skills → skills/sauce-protocols/references}/aerodrome.md +43 -24
  820. package/skills/sauce-protocols/references/aevo.md +49 -0
  821. package/{sdk/src/skills → skills/sauce-protocols/references}/alchemix.md +10 -25
  822. package/{sdk/src/skills → skills/sauce-protocols/references}/ambient.md +14 -21
  823. package/{sdk/src/skills → skills/sauce-protocols/references}/arbitrum-bridge.md +11 -14
  824. package/{sdk/src/skills → skills/sauce-protocols/references}/arrakis.md +10 -26
  825. package/skills/sauce-protocols/references/axelar.md +56 -0
  826. package/{sdk/src/skills → skills/sauce-protocols/references}/balancer-v2.md +13 -29
  827. package/{sdk/src/skills → skills/sauce-protocols/references}/base-bridge.md +11 -16
  828. package/{sdk/src/skills → skills/sauce-protocols/references}/baseswap.md +12 -19
  829. package/{sdk/src/skills → skills/sauce-protocols/references}/beefy.md +10 -30
  830. package/{sdk/src/skills → skills/sauce-protocols/references}/benqi.md +11 -21
  831. package/{sdk/src/skills → skills/sauce-protocols/references}/camelot.md +13 -27
  832. package/skills/sauce-protocols/references/cbeth.md +48 -0
  833. package/skills/sauce-protocols/references/cctp.md +47 -0
  834. package/{sdk/src/skills → skills/sauce-protocols/references}/celer.md +11 -18
  835. package/{sdk/src/skills → skills/sauce-protocols/references}/chainlink-ccip.md +11 -21
  836. package/skills/sauce-protocols/references/chainlink.md +47 -0
  837. package/{sdk/src/skills → skills/sauce-protocols/references}/circle-gateway.md +12 -38
  838. package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v2.md +11 -25
  839. package/{sdk/src/skills → skills/sauce-protocols/references}/compound-v3.md +43 -27
  840. package/{sdk/src/skills → skills/sauce-protocols/references}/connext.md +11 -15
  841. package/{sdk/src/skills → skills/sauce-protocols/references}/convex.md +10 -28
  842. package/{sdk/src/skills → skills/sauce-protocols/references}/cowswap.md +12 -19
  843. package/skills/sauce-protocols/references/crvusd.md +49 -0
  844. package/skills/sauce-protocols/references/curve.md +98 -0
  845. package/{sdk/src/skills → skills/sauce-protocols/references}/debridge.md +11 -33
  846. package/{sdk/src/skills → skills/sauce-protocols/references}/dodo.md +13 -18
  847. package/skills/sauce-protocols/references/eigenlayer.md +48 -0
  848. package/{sdk/src/skills → skills/sauce-protocols/references}/ens.md +10 -26
  849. package/{sdk/src/skills → skills/sauce-protocols/references}/erc20.md +18 -34
  850. package/{sdk/src/skills → skills/sauce-protocols/references}/erc3156.md +10 -13
  851. package/{sdk/src/skills → skills/sauce-protocols/references}/erc4626.md +11 -27
  852. package/{sdk/src/skills → skills/sauce-protocols/references}/ethena.md +10 -27
  853. package/{sdk/src/skills → skills/sauce-protocols/references}/etherfi.md +10 -32
  854. package/{sdk/src/skills → skills/sauce-protocols/references}/euler-v2.md +11 -21
  855. package/{sdk/src/skills → skills/sauce-protocols/references}/fenix.md +12 -18
  856. package/{sdk/src/skills → skills/sauce-protocols/references}/fluid.md +11 -20
  857. package/{sdk/src/skills → skills/sauce-protocols/references}/frax-ether.md +10 -26
  858. package/skills/sauce-protocols/references/frax.md +48 -0
  859. package/{sdk/src/skills → skills/sauce-protocols/references}/gains-network.md +11 -28
  860. package/skills/sauce-protocols/references/gamma.md +57 -0
  861. package/{sdk/src/skills → skills/sauce-protocols/references}/gelato.md +12 -20
  862. package/skills/sauce-protocols/references/gho.md +50 -0
  863. package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v1.md +12 -34
  864. package/{sdk/src/skills → skills/sauce-protocols/references}/gmx-v2.md +15 -28
  865. package/skills/sauce-protocols/references/harvest.md +41 -0
  866. package/{sdk/src/skills → skills/sauce-protocols/references}/hegic.md +10 -18
  867. package/{sdk/src/skills → skills/sauce-protocols/references}/hop.md +11 -21
  868. package/{sdk/src/skills → skills/sauce-protocols/references}/hyperlane.md +11 -21
  869. package/skills/sauce-protocols/references/index.md +355 -0
  870. package/{sdk/src/skills → skills/sauce-protocols/references}/instadapp.md +10 -18
  871. package/skills/sauce-protocols/references/kelp.md +46 -0
  872. package/{sdk/src/skills → skills/sauce-protocols/references}/kim.md +12 -18
  873. package/{sdk/src/skills → skills/sauce-protocols/references}/kyberswap-aggregator.md +12 -35
  874. package/skills/sauce-protocols/references/kyberswap.md +72 -0
  875. package/{sdk/src/skills → skills/sauce-protocols/references}/layerbank.md +11 -26
  876. package/{sdk/src/skills → skills/sauce-protocols/references}/layerzero.md +11 -25
  877. package/{sdk/src/skills → skills/sauce-protocols/references}/level-finance.md +10 -24
  878. package/{sdk/src/skills → skills/sauce-protocols/references}/lido.md +10 -28
  879. package/{sdk/src/skills → skills/sauce-protocols/references}/lifi.md +11 -25
  880. package/{sdk/src/skills → skills/sauce-protocols/references}/linea-bridge.md +11 -14
  881. package/{sdk/src/skills → skills/sauce-protocols/references}/liquity-v1.md +10 -21
  882. package/skills/sauce-protocols/references/liquity-v2.md +48 -0
  883. package/{sdk/src/skills → skills/sauce-protocols/references}/lynex.md +12 -18
  884. package/skills/sauce-protocols/references/maker.md +57 -0
  885. package/skills/sauce-protocols/references/mantle-meth.md +43 -0
  886. package/{sdk/src/skills → skills/sauce-protocols/references}/maverick.md +13 -25
  887. package/{sdk/src/skills → skills/sauce-protocols/references}/moonwell.md +11 -21
  888. package/{sdk/src/skills → skills/sauce-protocols/references}/morpho-blue.md +44 -21
  889. package/{sdk/src/skills → skills/sauce-protocols/references}/mux-protocol.md +10 -30
  890. package/skills/sauce-protocols/references/olympus.md +39 -0
  891. package/skills/sauce-protocols/references/oneinch.md +81 -0
  892. package/skills/sauce-protocols/references/openocean.md +69 -0
  893. package/{sdk/src/skills → skills/sauce-protocols/references}/optimism-bridge.md +11 -16
  894. package/{sdk/src/skills → skills/sauce-protocols/references}/opyn.md +10 -21
  895. package/{sdk/src/skills → skills/sauce-protocols/references}/pancakeswap-v2.md +39 -41
  896. package/skills/sauce-protocols/references/pancakeswap-v3.md +72 -0
  897. package/skills/sauce-protocols/references/paraswap.md +39 -0
  898. package/{sdk/src/skills → skills/sauce-protocols/references}/pendle.md +47 -29
  899. package/skills/sauce-protocols/references/permit2.md +101 -0
  900. package/skills/sauce-protocols/references/perpetual-protocol.md +53 -0
  901. package/{sdk/src/skills → skills/sauce-protocols/references}/polygon-bridge.md +11 -17
  902. package/{sdk/src/skills → skills/sauce-protocols/references}/premia.md +10 -19
  903. package/{sdk/src/skills → skills/sauce-protocols/references}/puffer.md +10 -21
  904. package/skills/sauce-protocols/references/pyth.md +45 -0
  905. package/{sdk/src/skills → skills/sauce-protocols/references}/quickswap.md +13 -27
  906. package/{sdk/src/skills → skills/sauce-protocols/references}/radiant.md +11 -15
  907. package/{sdk/src/skills → skills/sauce-protocols/references}/ramses.md +12 -18
  908. package/skills/sauce-protocols/references/reflexer.md +52 -0
  909. package/skills/sauce-protocols/references/registry/aave-v2.md +43 -0
  910. package/skills/sauce-protocols/references/registry/aave-v3.md +62 -0
  911. package/skills/sauce-protocols/references/registry/aave-v4.md +80 -0
  912. package/skills/sauce-protocols/references/registry/abracadabra.md +54 -0
  913. package/skills/sauce-protocols/references/registry/across.md +57 -0
  914. package/skills/sauce-protocols/references/registry/aerodrome-slipstream.md +72 -0
  915. package/skills/sauce-protocols/references/registry/aerodrome.md +58 -0
  916. package/skills/sauce-protocols/references/registry/aevo.md +39 -0
  917. package/skills/sauce-protocols/references/registry/alchemix.md +46 -0
  918. package/skills/sauce-protocols/references/registry/ambient.md +40 -0
  919. package/skills/sauce-protocols/references/registry/arbitrum-bridge.md +40 -0
  920. package/skills/sauce-protocols/references/registry/arrakis.md +49 -0
  921. package/skills/sauce-protocols/references/registry/axelar.md +65 -0
  922. package/skills/sauce-protocols/references/registry/balancer-v2.md +50 -0
  923. package/skills/sauce-protocols/references/registry/base-bridge.md +42 -0
  924. package/skills/sauce-protocols/references/registry/baseswap.md +40 -0
  925. package/skills/sauce-protocols/references/registry/beefy.md +51 -0
  926. package/skills/sauce-protocols/references/registry/benqi.md +49 -0
  927. package/skills/sauce-protocols/references/registry/camelot.md +82 -0
  928. package/skills/sauce-protocols/references/registry/cbeth.md +43 -0
  929. package/skills/sauce-protocols/references/registry/cctp.md +48 -0
  930. package/skills/sauce-protocols/references/registry/celer.md +44 -0
  931. package/skills/sauce-protocols/references/registry/chainlink-ccip.md +45 -0
  932. package/skills/sauce-protocols/references/registry/chainlink.md +49 -0
  933. package/skills/sauce-protocols/references/registry/circle-gateway.md +70 -0
  934. package/skills/sauce-protocols/references/registry/compound-v2.md +53 -0
  935. package/skills/sauce-protocols/references/registry/compound-v3.md +52 -0
  936. package/skills/sauce-protocols/references/registry/connext.md +41 -0
  937. package/skills/sauce-protocols/references/registry/convex.md +51 -0
  938. package/skills/sauce-protocols/references/registry/cowswap.md +40 -0
  939. package/skills/sauce-protocols/references/registry/crvusd.md +40 -0
  940. package/skills/sauce-protocols/references/registry/curve.md +81 -0
  941. package/skills/sauce-protocols/references/registry/debridge.md +59 -0
  942. package/skills/sauce-protocols/references/registry/dodo.md +39 -0
  943. package/skills/sauce-protocols/references/registry/eco-routes.md +65 -0
  944. package/skills/sauce-protocols/references/registry/eigenlayer.md +58 -0
  945. package/skills/sauce-protocols/references/registry/ens.md +49 -0
  946. package/skills/sauce-protocols/references/registry/erc20.md +44 -0
  947. package/skills/sauce-protocols/references/registry/erc3156.md +38 -0
  948. package/skills/sauce-protocols/references/registry/erc4626.md +51 -0
  949. package/skills/sauce-protocols/references/registry/ethena.md +50 -0
  950. package/skills/sauce-protocols/references/registry/etherfi.md +57 -0
  951. package/skills/sauce-protocols/references/registry/euler-v2.md +49 -0
  952. package/skills/sauce-protocols/references/registry/fenix.md +39 -0
  953. package/skills/sauce-protocols/references/registry/fluid.md +48 -0
  954. package/skills/sauce-protocols/references/registry/frax-ether.md +49 -0
  955. package/skills/sauce-protocols/references/registry/frax.md +40 -0
  956. package/skills/sauce-protocols/references/registry/gains-network.md +43 -0
  957. package/skills/sauce-protocols/references/registry/gamma.md +56 -0
  958. package/skills/sauce-protocols/references/registry/gelato.md +45 -0
  959. package/skills/sauce-protocols/references/registry/gho.md +40 -0
  960. package/skills/sauce-protocols/references/registry/gmx-v1.md +59 -0
  961. package/skills/sauce-protocols/references/registry/gmx-v2.md +41 -0
  962. package/skills/sauce-protocols/references/registry/harvest.md +44 -0
  963. package/skills/sauce-protocols/references/registry/hegic.md +39 -0
  964. package/skills/sauce-protocols/references/registry/hop.md +49 -0
  965. package/skills/sauce-protocols/references/registry/hyperlane.md +48 -0
  966. package/skills/sauce-protocols/references/registry/instadapp.md +39 -0
  967. package/skills/sauce-protocols/references/registry/kelp.md +47 -0
  968. package/skills/sauce-protocols/references/registry/kim.md +39 -0
  969. package/skills/sauce-protocols/references/registry/kyberswap-aggregator.md +49 -0
  970. package/skills/sauce-protocols/references/registry/kyberswap.md +63 -0
  971. package/skills/sauce-protocols/references/registry/layerbank.md +54 -0
  972. package/skills/sauce-protocols/references/registry/layerzero.md +49 -0
  973. package/skills/sauce-protocols/references/registry/level-finance.md +41 -0
  974. package/skills/sauce-protocols/references/registry/lido.md +51 -0
  975. package/skills/sauce-protocols/references/registry/lifi.md +48 -0
  976. package/skills/sauce-protocols/references/registry/linea-bridge.md +40 -0
  977. package/skills/sauce-protocols/references/registry/liquity-v1.md +42 -0
  978. package/skills/sauce-protocols/references/registry/liquity-v2.md +40 -0
  979. package/skills/sauce-protocols/references/registry/lynex.md +39 -0
  980. package/skills/sauce-protocols/references/registry/maker.md +55 -0
  981. package/skills/sauce-protocols/references/registry/mantle-meth.md +48 -0
  982. package/skills/sauce-protocols/references/registry/maverick.md +60 -0
  983. package/skills/sauce-protocols/references/registry/moonwell.md +49 -0
  984. package/skills/sauce-protocols/references/registry/morpho-blue.md +47 -0
  985. package/skills/sauce-protocols/references/registry/mux-protocol.md +49 -0
  986. package/skills/sauce-protocols/references/registry/olympus.md +42 -0
  987. package/skills/sauce-protocols/references/registry/oneinch.md +45 -0
  988. package/skills/sauce-protocols/references/registry/openocean.md +44 -0
  989. package/skills/sauce-protocols/references/registry/optimism-bridge.md +42 -0
  990. package/skills/sauce-protocols/references/registry/opyn.md +42 -0
  991. package/skills/sauce-protocols/references/registry/pancakeswap-v2.md +71 -0
  992. package/skills/sauce-protocols/references/registry/pancakeswap-v3.md +76 -0
  993. package/skills/sauce-protocols/references/registry/paraswap.md +51 -0
  994. package/skills/sauce-protocols/references/registry/pendle.md +43 -0
  995. package/skills/sauce-protocols/references/registry/permit2.md +50 -0
  996. package/skills/sauce-protocols/references/registry/perpetual-protocol.md +49 -0
  997. package/skills/sauce-protocols/references/registry/polygon-bridge.md +43 -0
  998. package/skills/sauce-protocols/references/registry/premia.md +40 -0
  999. package/skills/sauce-protocols/references/registry/puffer.md +43 -0
  1000. package/skills/sauce-protocols/references/registry/pyth.md +40 -0
  1001. package/skills/sauce-protocols/references/registry/quickswap.md +80 -0
  1002. package/skills/sauce-protocols/references/registry/radiant.md +41 -0
  1003. package/skills/sauce-protocols/references/registry/ramses.md +39 -0
  1004. package/skills/sauce-protocols/references/registry/reflexer.md +56 -0
  1005. package/skills/sauce-protocols/references/registry/renzo.md +47 -0
  1006. package/skills/sauce-protocols/references/registry/rocket-pool.md +49 -0
  1007. package/skills/sauce-protocols/references/registry/sablier.md +40 -0
  1008. package/skills/sauce-protocols/references/registry/safe.md +47 -0
  1009. package/skills/sauce-protocols/references/registry/scroll-bridge.md +48 -0
  1010. package/skills/sauce-protocols/references/registry/seamless.md +42 -0
  1011. package/skills/sauce-protocols/references/registry/seaport.md +44 -0
  1012. package/skills/sauce-protocols/references/registry/silo.md +48 -0
  1013. package/skills/sauce-protocols/references/registry/socket.md +44 -0
  1014. package/skills/sauce-protocols/references/registry/sommelier.md +43 -0
  1015. package/skills/sauce-protocols/references/registry/spark.md +42 -0
  1016. package/skills/sauce-protocols/references/registry/spookyswap.md +40 -0
  1017. package/skills/sauce-protocols/references/registry/squid.md +45 -0
  1018. package/skills/sauce-protocols/references/registry/stader.md +47 -0
  1019. package/skills/sauce-protocols/references/registry/stargate.md +45 -0
  1020. package/skills/sauce-protocols/references/registry/superfluid.md +49 -0
  1021. package/skills/sauce-protocols/references/registry/sushiswap-v2.md +71 -0
  1022. package/skills/sauce-protocols/references/registry/swell.md +49 -0
  1023. package/skills/sauce-protocols/references/registry/synapse.md +46 -0
  1024. package/skills/sauce-protocols/references/registry/syncswap.md +38 -0
  1025. package/skills/sauce-protocols/references/registry/synthetix-v3.md +48 -0
  1026. package/skills/sauce-protocols/references/registry/synthra-v3.md +77 -0
  1027. package/skills/sauce-protocols/references/registry/thales.md +51 -0
  1028. package/skills/sauce-protocols/references/registry/thena.md +39 -0
  1029. package/skills/sauce-protocols/references/registry/thruster.md +38 -0
  1030. package/skills/sauce-protocols/references/registry/tokemak.md +45 -0
  1031. package/skills/sauce-protocols/references/registry/trader-joe.md +66 -0
  1032. package/skills/sauce-protocols/references/registry/uniswap-v2.md +77 -0
  1033. package/skills/sauce-protocols/references/registry/uniswap-v3.md +113 -0
  1034. package/skills/sauce-protocols/references/registry/uniswap-v4.md +117 -0
  1035. package/skills/sauce-protocols/references/registry/unitflow-v3.md +65 -0
  1036. package/skills/sauce-protocols/references/registry/velodrome.md +58 -0
  1037. package/skills/sauce-protocols/references/registry/venus.md +62 -0
  1038. package/skills/sauce-protocols/references/registry/vertex.md +46 -0
  1039. package/skills/sauce-protocols/references/registry/wormhole.md +59 -0
  1040. package/skills/sauce-protocols/references/registry/yearn-v3.md +46 -0
  1041. package/skills/sauce-protocols/references/registry/zerolend.md +41 -0
  1042. package/skills/sauce-protocols/references/registry/zerox.md +44 -0
  1043. package/skills/sauce-protocols/references/registry/zksync-bridge.md +40 -0
  1044. package/{sdk/src/skills → skills/sauce-protocols/references}/renzo.md +10 -24
  1045. package/{sdk/src/skills → skills/sauce-protocols/references}/rocket-pool.md +10 -26
  1046. package/{sdk/src/skills → skills/sauce-protocols/references}/sablier.md +10 -27
  1047. package/skills/sauce-protocols/references/safe.md +42 -0
  1048. package/{sdk/src/skills → skills/sauce-protocols/references}/scroll-bridge.md +11 -20
  1049. package/{sdk/src/skills → skills/sauce-protocols/references}/seamless.md +11 -16
  1050. package/skills/sauce-protocols/references/seaport.md +38 -0
  1051. package/{sdk/src/skills → skills/sauce-protocols/references}/silo.md +11 -20
  1052. package/{sdk/src/skills → skills/sauce-protocols/references}/socket.md +11 -18
  1053. package/skills/sauce-protocols/references/sommelier.md +40 -0
  1054. package/{sdk/src/skills → skills/sauce-protocols/references}/spark.md +11 -16
  1055. package/{sdk/src/skills → skills/sauce-protocols/references}/spookyswap.md +12 -19
  1056. package/{sdk/src/skills → skills/sauce-protocols/references}/squid.md +11 -21
  1057. package/skills/sauce-protocols/references/stader.md +39 -0
  1058. package/{sdk/src/skills → skills/sauce-protocols/references}/stargate.md +11 -22
  1059. package/{sdk/src/skills → skills/sauce-protocols/references}/superfluid.md +10 -28
  1060. package/{sdk/src/skills → skills/sauce-protocols/references}/sushiswap-v2.md +38 -43
  1061. package/skills/sauce-protocols/references/swell.md +49 -0
  1062. package/skills/sauce-protocols/references/synapse.md +54 -0
  1063. package/{sdk/src/skills → skills/sauce-protocols/references}/syncswap.md +12 -17
  1064. package/{sdk/src/skills → skills/sauce-protocols/references}/synthetix-v3.md +10 -29
  1065. package/skills/sauce-protocols/references/synthra-v3.md +63 -0
  1066. package/skills/sauce-protocols/references/thales.md +58 -0
  1067. package/{sdk/src/skills → skills/sauce-protocols/references}/thena.md +12 -18
  1068. package/{sdk/src/skills → skills/sauce-protocols/references}/thruster.md +13 -18
  1069. package/skills/sauce-protocols/references/tokemak.md +40 -0
  1070. package/{sdk/src/skills → skills/sauce-protocols/references}/trader-joe.md +13 -26
  1071. package/{sdk/src/skills → skills/sauce-protocols/references}/uniswap-v2.md +46 -44
  1072. package/skills/sauce-protocols/references/uniswap-v3.md +188 -0
  1073. package/skills/sauce-protocols/references/uniswap-v4.md +155 -0
  1074. package/skills/sauce-protocols/references/unitflow-v3.md +63 -0
  1075. package/{sdk/src/skills → skills/sauce-protocols/references}/velodrome.md +12 -24
  1076. package/{sdk/src/skills → skills/sauce-protocols/references}/venus.md +12 -31
  1077. package/skills/sauce-protocols/references/vertex.md +42 -0
  1078. package/skills/sauce-protocols/references/wormhole.md +57 -0
  1079. package/{sdk/src/skills → skills/sauce-protocols/references}/yearn-v3.md +10 -25
  1080. package/{sdk/src/skills → skills/sauce-protocols/references}/zerolend.md +11 -15
  1081. package/skills/sauce-protocols/references/zerox.md +39 -0
  1082. package/{sdk/src/skills → skills/sauce-protocols/references}/zksync-bridge.md +11 -14
  1083. package/skills/sauce-script/SKILL.md +407 -0
  1084. package/skills/sauce-script/examples/IOracle.json +12 -0
  1085. package/skills/sauce-script/examples/saucescript.mts +167 -0
  1086. package/skills/sauce-script/examples/twap.sauce.ts +29 -0
  1087. package/skills/sauce-script/references/builtins.json +823 -0
  1088. package/skills/sauce-script/references/builtins.md +674 -0
  1089. package/skills/sauce-solana/SKILL.md +322 -0
  1090. package/skills/sauce-solana/examples/solana.mts +166 -0
  1091. package/skills/sauce-solana/examples/solana.sauce.ts +45 -0
  1092. package/skills/sauce-solana/examples/token-2022.sauce.ts +38 -0
  1093. package/skills/sauce-swaps/SKILL.md +200 -0
  1094. package/skills/sauce-swaps/examples/swap-leg.sauce.ts +50 -0
  1095. package/skills/sauce-swaps/examples/swaps.mts +124 -0
  1096. package/skills/sauce-typescript/SKILL.md +178 -0
  1097. package/skills/sauce-typescript/examples/actions.mts +100 -0
  1098. package/skills/sauce-typescript/examples/compiler.mts +69 -0
  1099. package/skills/sauce-typescript/examples/cook.mts +65 -0
  1100. package/skills/sauce-typescript/examples/verify.mts +104 -0
  1101. package/dev-tools/README.md +0 -16
  1102. package/dev-tools/artifacts/IERC20.json +0 -1
  1103. package/dev-tools/artifacts/ISauceRouter.json +0 -1
  1104. package/dev-tools/artifacts/IUniswapV3Pool.json +0 -1
  1105. package/dev-tools/artifacts/Router.json +0 -1
  1106. package/dev-tools/hardhat.config.cjs +0 -18
  1107. package/dev-tools/sauce/js/add.js +0 -4
  1108. package/dev-tools/sauce/js/call.js +0 -8
  1109. package/dev-tools/sauce/js/erc20.js +0 -18
  1110. package/dev-tools/sauce/js/example.js +0 -6
  1111. package/dev-tools/sauce/js/fibonacci.js +0 -13
  1112. package/dev-tools/sauce/ts/add.ts +0 -4
  1113. package/dev-tools/sauce/ts/call.ts +0 -8
  1114. package/dev-tools/sauce/ts/erc20.ts +0 -18
  1115. package/dev-tools/sauce/ts/example.ts +0 -6
  1116. package/dev-tools/sauce/ts/fibonacci.ts +0 -13
  1117. package/dev-tools/sauce/ts/saucescript.d.ts +0 -1
  1118. package/dev-tools/sauce/ts/tsconfig.json +0 -12
  1119. package/dev-tools/scripts/deploy.ts +0 -107
  1120. package/dev-tools/scripts/init.js +0 -132
  1121. package/dev-tools/scripts/run.ts +0 -67
  1122. package/dev-tools/scripts/start-fork.sh +0 -92
  1123. package/dev-tools/scripts/start-local.sh +0 -120
  1124. package/dev-tools/scripts/stop-local.sh +0 -40
  1125. package/dev-tools/scripts/sync-artifacts.js +0 -46
  1126. package/dev-tools/scripts/sync-price.ts +0 -58
  1127. package/dev-tools/src/contracts.ts +0 -59
  1128. package/dev-tools/src/runner.ts +0 -355
  1129. package/dev-tools/src/svm-local.ts +0 -305
  1130. package/dev-tools/src/sync-price.ts +0 -217
  1131. package/sdk/dist/deployments/v12.generated.d.ts +0 -95
  1132. package/sdk/dist/deployments/v12.generated.d.ts.map +0 -1
  1133. package/sdk/dist/deployments/v12.generated.js +0 -50
  1134. package/sdk/dist/deployments/v12.generated.js.map +0 -1
  1135. package/sdk/dist/swap/index.d.ts +0 -29
  1136. package/sdk/dist/swap/index.d.ts.map +0 -1
  1137. package/sdk/dist/swap/index.js +0 -27
  1138. package/sdk/dist/swap/index.js.map +0 -1
  1139. package/sdk/dist/swap/params.d.ts +0 -29
  1140. package/sdk/dist/swap/params.d.ts.map +0 -1
  1141. package/sdk/dist/swap/params.js +0 -123
  1142. package/sdk/dist/swap/params.js.map +0 -1
  1143. package/sdk/dist/swap/source.d.ts +0 -30
  1144. package/sdk/dist/swap/source.d.ts.map +0 -1
  1145. package/sdk/dist/swap/source.js +0 -101
  1146. package/sdk/dist/swap/source.js.map +0 -1
  1147. package/sdk/dist/swap/types.d.ts +0 -160
  1148. package/sdk/dist/swap/types.d.ts.map +0 -1
  1149. package/sdk/dist/swap/types.js +0 -106
  1150. package/sdk/dist/swap/types.js.map +0 -1
  1151. package/sdk/src/skills/aave-v3.md +0 -134
  1152. package/sdk/src/skills/aave-v4.md +0 -91
  1153. package/sdk/src/skills/abracadabra.md +0 -93
  1154. package/sdk/src/skills/across.md +0 -90
  1155. package/sdk/src/skills/aerodrome-slipstream.md +0 -57
  1156. package/sdk/src/skills/aevo.md +0 -58
  1157. package/sdk/src/skills/axelar.md +0 -80
  1158. package/sdk/src/skills/cbeth.md +0 -62
  1159. package/sdk/src/skills/chainlink.md +0 -62
  1160. package/sdk/src/skills/crvusd.md +0 -58
  1161. package/sdk/src/skills/curve.md +0 -141
  1162. package/sdk/src/skills/eigenlayer.md +0 -71
  1163. package/sdk/src/skills/frax.md +0 -57
  1164. package/sdk/src/skills/gamma.md +0 -79
  1165. package/sdk/src/skills/gho.md +0 -61
  1166. package/sdk/src/skills/harvest.md +0 -49
  1167. package/sdk/src/skills/index.md +0 -299
  1168. package/sdk/src/skills/kelp.md +0 -60
  1169. package/sdk/src/skills/kyberswap.md +0 -100
  1170. package/sdk/src/skills/liquity-v2.md +0 -59
  1171. package/sdk/src/skills/loader.ts +0 -46
  1172. package/sdk/src/skills/maker.md +0 -79
  1173. package/sdk/src/skills/mantle-meth.md +0 -60
  1174. package/sdk/src/skills/olympus.md +0 -46
  1175. package/sdk/src/skills/oneinch.md +0 -64
  1176. package/sdk/src/skills/openocean.md +0 -86
  1177. package/sdk/src/skills/pancakeswap-v3.md +0 -104
  1178. package/sdk/src/skills/paraswap.md +0 -67
  1179. package/sdk/src/skills/permit2.md +0 -73
  1180. package/sdk/src/skills/perpetual-protocol.md +0 -73
  1181. package/sdk/src/skills/pyth.md +0 -58
  1182. package/sdk/src/skills/reflexer.md +0 -73
  1183. package/sdk/src/skills/safe.md +0 -56
  1184. package/sdk/src/skills/seaport.md +0 -65
  1185. package/sdk/src/skills/sommelier.md +0 -47
  1186. package/sdk/src/skills/stader.md +0 -53
  1187. package/sdk/src/skills/swell.md +0 -65
  1188. package/sdk/src/skills/synapse.md +0 -63
  1189. package/sdk/src/skills/synthra-v3.md +0 -57
  1190. package/sdk/src/skills/thales.md +0 -74
  1191. package/sdk/src/skills/tokemak.md +0 -48
  1192. package/sdk/src/skills/uniswap-v3.md +0 -202
  1193. package/sdk/src/skills/uniswap-v4.md +0 -125
  1194. package/sdk/src/skills/unitflow-v3.md +0 -62
  1195. package/sdk/src/skills/vertex.md +0 -55
  1196. package/sdk/src/skills/wormhole.md +0 -76
  1197. package/sdk/src/skills/zerox.md +0 -51
@@ -12,9 +12,9 @@
12
12
  * ```
13
13
  *
14
14
  * WHAT THIS IS. A source rewrite, run before the compiler ever sees the program — the same class of
15
- * thing as `token-rewrite.ts`'s `Token(x)` -> `IERC20.at(x)`, and for the same reason: the compiler
16
- * has no notion of a closure, a chain, or an intent, and does not need one. By the time it runs, the
17
- * expression above has become ordinary statements it already supports.
15
+ * thing as `token-rewrite.ts`'s `Token(x).transfer(...)` -> `transfer(x, ...)`, and for the same
16
+ * reason: the compiler has no notion of a closure, a chain, or an intent, and does not need one.
17
+ * By the time it runs, the expression above has become ordinary statements it already supports.
18
18
  *
19
19
  * WHAT `amount` IS. It is a local of the ENCLOSING program, whose value exists only while that
20
20
  * program runs. So the child intent cannot be encoded with it — it is encoded with a sentinel in its
@@ -22,26 +22,44 @@
22
22
  * variable is one slot. This is the identical mechanism `nest-dynamic.ts` uses for a measured
23
23
  * balance; a capture is just a value that arrives by a different route.
24
24
  *
25
- * WHAT IS LOWERED, AND WHAT IS REFUSED. Each statement of the closure becomes one entry in the
26
- * child's `route.calls` — which is what an eco-routes route IS, a list of calls, so the mapping is
27
- * the natural one rather than a convention. A statement that is not one call (a loop, a balance
28
- * read, arithmetic) has no entry to become and is REFUSED, by name, pointing at the explicit
29
- * compiled-program form. An identifier that is neither a compile-time value nor an enclosing local
30
- * is refused the same way. Nothing here guesses: the failure mode this exists to avoid is a
31
- * plausible-looking intent carrying a number nobody chose.
25
+ * WHAT IS LOWERED, AND HOW. A body whose every statement is a token `transfer`/`approve` becomes
26
+ * plain `route.calls` — which is what an eco-routes route IS, a list of calls — one per transfer and
27
+ * two per approve (a reset to zero first, for USDT). The Portal's Executor runs those, not a Sauce
28
+ * program, so they get the Executor's checks rather than SafeERC20's; see the lowering loop. Any
29
+ * other body (a loop, a balance read, arithmetic, `transferFrom`, an intent of its own) is compiled
30
+ * as a program for the destination and cooked on its Pot. An identifier that is neither a
31
+ * compile-time value nor an enclosing local is refused. Nothing here guesses: the failure mode this
32
+ * exists to avoid is a plausible-looking intent carrying a number nobody chose.
33
+ *
34
+ * HOW THE REWARD IS FUNDED. By default the program pays it into the intent's vault itself and then
35
+ * publishes: it asks the source Portal for `intentVaultAddress` over the very bytes it is about to
36
+ * publish, transfers each reward token there with `SafeERC20` semantics, sends the native amount,
37
+ * and calls `publish` — all in the one cook, so the vault cannot be wrong and no allowance is left
38
+ * on the Pot every intent on the chain shares. `intents.fundVia: "publishAndFund"` emits the
39
+ * approvals and `publishAndFund` instead. See `vaultFundingStatements` and `portal.ts`'s module doc.
40
+ *
41
+ * WHICH CHAIN A NAME MEANS. Two chains are in play, and each part of the expression belongs to one.
42
+ * The body and the delivery argument run on the destination, so `USDC` there is the destination's.
43
+ * The reward is escrowed by the enclosing program, on the chain it runs on, in a vault of that
44
+ * chain's Portal, so `USDC` in `.reward(...)` is that chain's. An intent opened inside a body is
45
+ * funded on the body's chain: its reward resolves there and its own body on its own destination —
46
+ * the same rule one level down, because the child compile re-enters this pass with `source` set to
47
+ * the chain it compiles for.
32
48
  *
33
49
  * WHERE THE ADDRESSES COME FROM. The Portal on each side, and the prover for the pair, are looked up
34
50
  * in the SDK's eco-routes deployment registry (`protocols/eco-routes`). A caller supplies what has
35
51
  * no correct default — deadlines, and a creator when the refund must not go to the executing Pot.
36
52
  */
37
- import { parse } from "acorn";
38
53
  import { encodeFunctionData } from "viem";
39
54
  import { ERC20ABI } from "../protocols/erc20/abis.js";
40
- import { safeApproveStatements } from "../token/safe.js";
41
- import { collectDeclaredNames, walk } from "./ast-walk.js";
55
+ import { safeApproveStatements, safeTransferStatements } from "../token/safe.js";
56
+ import { walk } from "./ast-walk.js";
57
+ import { childProgram, enclosingLocals, literalValue, moduleScope, unreachedFunctions, } from "./intent-body.js";
42
58
  import { denormalizeToEvm } from "./encode.js";
59
+ import { rewardAssetsConflict } from "./intent.js";
43
60
  import { normalizeReward, normalizeRoute, toUniversalAddress } from "./normalize.js";
44
- import { publishAndFundTx } from "./portal.js";
61
+ import { INTENT_FUND_VIA, intentVaultAddressCall, publishAndFundTx, publishTx, } from "./portal.js";
62
+ import { parseSauce } from "./parse.js";
45
63
  import { emitTemplate, splitByPlaceholders } from "./template.js";
46
64
  /**
47
65
  * One sentinel per captured variable.
@@ -68,22 +86,16 @@ const fail = (message) => {
68
86
  throw new SugarError(`intent sugar: ${message}`);
69
87
  };
70
88
  function literalOf(node) {
71
- if (node.type === "Literal") {
72
- const value = node.value;
73
- if (typeof value === "bigint")
74
- return value;
75
- if (typeof value === "number" && Number.isSafeInteger(value))
76
- return BigInt(value);
77
- if (typeof value === "boolean")
78
- return value ? 1n : 0n;
79
- }
89
+ const value = literalValue(node);
90
+ if (value !== undefined)
91
+ return value;
80
92
  if (node.type === "UnaryExpression" && node.operator === "-") {
81
93
  fail("a negative literal is not a valid address or amount");
82
94
  }
83
95
  return undefined;
84
96
  }
85
97
  function makeResolver(defines, outerLocals) {
86
- return (node, what) => {
98
+ return (node, what, unknown) => {
87
99
  const direct = literalOf(node);
88
100
  if (direct !== undefined)
89
101
  return { literal: direct };
@@ -94,6 +106,8 @@ function makeResolver(defines, outerLocals) {
94
106
  return { literal: define };
95
107
  if (outerLocals.has(name))
96
108
  return { capture: name };
109
+ if (unknown !== undefined)
110
+ return fail(unknown(name));
97
111
  return fail(`${what} refers to '${name}', which is neither a compile-time value nor a variable of the ` +
98
112
  `enclosing program. Declare it with \`const ${name} = ...\` before the intent, or supply ` +
99
113
  `it as a compile-time define.`);
@@ -104,12 +118,18 @@ function makeResolver(defines, outerLocals) {
104
118
  }
105
119
  /** Whether every statement is a plain token write, which lowers to direct `route.calls` entries and
106
120
  * needs no program, no Pot and no Kitchen fee. Anything else — a swap, control flow, a nested
107
- * intent — takes the general path. */
121
+ * intent, an argument that has to be computed (`half(amount)`, `amount - fee`) — takes the
122
+ * general path. */
108
123
  function isDirectCallBody(body, defines) {
124
+ // The SHAPE of each argument, not its value: a literal or a name is resolved by the lowering
125
+ // itself, which reports a name it cannot resolve by name. Anything computed needs a program.
126
+ const shapeOnly = (node, what) => literalOf(node) !== undefined || node.type === "Identifier"
127
+ ? { literal: 0n }
128
+ : fail(`${what} is computed`);
109
129
  return (body.length > 0 &&
110
130
  body.every((statement) => {
111
131
  try {
112
- lowerStatement(statement, () => ({ literal: 0n }), defines);
132
+ lowerStatement(statement, shapeOnly, defines);
113
133
  return true;
114
134
  }
115
135
  catch {
@@ -117,7 +137,7 @@ function isDirectCallBody(body, defines) {
117
137
  }
118
138
  }));
119
139
  }
120
- /** `USDC.transfer(to, amount)` or `Token(addr).transfer(to, amount)` -> one call. */
140
+ /** `USDC.transfer(to, amount)` or `Token(addr).transfer(to, amount)` -> the token write it names. */
121
141
  function lowerStatement(statement, resolve, defines) {
122
142
  if (statement.type !== "ExpressionStatement") {
123
143
  return fail(`a \`${statement.type}\` cannot become a route call. An intent's body is a list of calls, so ` +
@@ -151,7 +171,7 @@ function lowerStatement(statement, resolve, defines) {
151
171
  const address = defines.get(name);
152
172
  if (address === undefined) {
153
173
  return fail(`'${name}' is not a token this chain registers. Use a registered symbol, or ` +
154
- `\`Token(address)\` with a literal or define.`);
174
+ "`Token(address)` with a literal, a define or a top-level `const` of a literal.");
155
175
  }
156
176
  target = address;
157
177
  }
@@ -176,59 +196,31 @@ function lowerStatement(statement, resolve, defines) {
176
196
  }
177
197
  return { target, method, args };
178
198
  }
179
- /**
180
- * The enclosing program's variables a closure body reads.
181
- *
182
- * Whole-program `outerLocals` minus everything the closure declares itself, minus names the
183
- * destination resolves (tokens, protocols, `ctx`, `abi`…). Conservative in the safe direction: a
184
- * name wrongly treated as a capture becomes an unused program parameter, while one wrongly left out
185
- * becomes an undeclared variable the compiler rejects by name.
186
- */
187
- function collectCaptures(body, outerLocals, defines) {
188
- const declared = new Set();
189
- const read = [];
190
- for (const statement of body) {
191
- walk(statement, (node) => {
192
- if (node.type === "VariableDeclarator") {
193
- const id = node.id;
194
- if (id?.type === "Identifier")
195
- declared.add(id.name);
196
- }
197
- });
198
- }
199
- for (const statement of body) {
200
- walk(statement, (node) => {
201
- if (node.type !== "Identifier")
202
- return;
203
- const name = node.name;
204
- if (declared.has(name) || defines.has(name))
205
- return;
206
- if (!outerLocals.has(name))
207
- return;
208
- if (!read.includes(name))
209
- read.push(name);
210
- });
199
+ /** How a message names a field of `list`. */
200
+ const fieldOf = (list, path) => list.part === "reward" ? `\`reward.${path}\`` : `the delivery's \`${path}\``;
201
+ /** A token address of `list`. It is encoded into the intent, so it must be known when the intent is
202
+ * built: a symbol, a literal, a define or a top-level `const` of a literal, never a value the
203
+ * program has only while it runs. */
204
+ function tokenOf(node, resolve, list) {
205
+ const chain = list.chain.slug;
206
+ const subject = `the ${list.part} token`;
207
+ const where = list.part === "delivery"
208
+ ? `The delivery — the intent's second argument, \`{ tokens: [...] }\` — is what the solver ` +
209
+ `brings to ${chain}, so its symbols are ${chain}'s: fix it there, not in \`.reward(...)\`.`
210
+ : `The reward — \`.reward({ tokens: [...] })\` — is escrowed on ${chain}, where the program ` +
211
+ `opening the intent runs, so its symbols are ${chain}'s.`;
212
+ const fix = `Use a symbol ${chain} registers, or the token's ${chain} address as a literal, a define or a ` +
213
+ "top-level `const` of a literal.";
214
+ if (node.type !== "Identifier" && literalOf(node) === undefined) {
215
+ return fail(`${subject} is a ${node.type}, which is not known when the intent is built. ${where} ${fix}`);
211
216
  }
212
- return read;
217
+ const value = resolve(node, subject, (name) => `${subject} '${name}' is not a token ${chain} registers, nor a define. ${where} ${fix}`);
218
+ if ("literal" in value)
219
+ return value.literal;
220
+ return fail(`${subject} '${value.capture}' is a variable of the program, known only while it runs, and an ` +
221
+ `intent names its tokens when it is built. ${where} ${fix}`);
213
222
  }
214
- /** Is this identifier a PROPERTY (`a.b`) rather than a value read? Those are never captures. */
215
- function stripMemberProperties(body) {
216
- const properties = new Set();
217
- for (const statement of body) {
218
- walk(statement, (node) => {
219
- if (node.type !== "MemberExpression")
220
- return;
221
- if (node.computed === true)
222
- return;
223
- const property = node.property;
224
- if (property?.type === "Identifier") {
225
- properties.add(property.name);
226
- }
227
- });
228
- }
229
- return properties;
230
- }
231
- function lowerReward(node, resolve) {
223
+ function lowerReward(node, resolve, list) {
232
224
  if (node.type !== "ObjectExpression") {
233
225
  return fail("`.reward(...)` takes an object, e.g. `{ tokens: [{ token: USDC, amount }] }`");
234
226
  }
@@ -239,11 +231,12 @@ function lowerReward(node, resolve) {
239
231
  const name = key?.type === "Identifier" ? key.name : "";
240
232
  const value = property.value;
241
233
  if (name === "tokens") {
242
- if (value.type !== "ArrayExpression")
243
- return fail("`reward.tokens` must be an array");
234
+ if (value.type !== "ArrayExpression") {
235
+ return fail(`${fieldOf(list, "tokens")} must be an array`);
236
+ }
244
237
  tokens = (value.elements ?? []).map((element) => {
245
238
  if (element === null || element.type !== "ObjectExpression") {
246
- return fail("each `reward.tokens` entry must be `{ token, amount }`");
239
+ return fail(`each entry of ${fieldOf(list, "tokens")} must be \`{ token, amount }\``);
247
240
  }
248
241
  let token;
249
242
  let amount;
@@ -253,27 +246,26 @@ function lowerReward(node, resolve) {
253
246
  // `{ token: USDC, amount }` -- shorthand's value IS the identifier.
254
247
  const fieldValue = field.value;
255
248
  if (fieldName === "token") {
256
- const resolved = resolve(fieldValue, "`reward.tokens[].token`");
257
- if (!("literal" in resolved)) {
258
- return fail("a reward token address must be known when the intent is built");
259
- }
260
- token = resolved.literal;
249
+ token = tokenOf(fieldValue, resolve, list);
261
250
  }
262
251
  else if (fieldName === "amount") {
263
- amount = resolve(fieldValue, "`reward.tokens[].amount`");
252
+ amount = resolve(fieldValue, fieldOf(list, "tokens[].amount"));
264
253
  }
265
254
  else {
266
- return fail(`\`reward.tokens[].${fieldName}\` is not a field of a token amount`);
255
+ return fail(`${fieldOf(list, `tokens[].${fieldName}`)} is not a field of a token amount`);
267
256
  }
268
257
  }
269
258
  if (token === undefined || amount === undefined) {
270
- return fail("each `reward.tokens` entry needs both `token` and `amount`");
259
+ return fail(`each entry of ${fieldOf(list, "tokens")} needs both \`token\` and \`amount\``);
271
260
  }
272
261
  return { token, amount };
273
262
  });
274
263
  }
275
264
  else if (name === "nativeAmount") {
276
- nativeAmount = resolve(value, "`reward.nativeAmount`");
265
+ nativeAmount = resolve(value, fieldOf(list, "nativeAmount"));
266
+ }
267
+ else if (list.part === "delivery") {
268
+ return fail(`\`${name}\` is not a field of the delivery, which takes only \`tokens\``);
277
269
  }
278
270
  else {
279
271
  return fail(`\`reward.${name}\` is not settable here. Deadlines, creator and prover come from the ` +
@@ -281,17 +273,20 @@ function lowerReward(node, resolve) {
281
273
  }
282
274
  }
283
275
  if (tokens.length === 0 && nativeAmount === undefined) {
284
- return fail("`.reward(...)` must offer something — `tokens`, `nativeAmount`, or both");
276
+ return fail(list.part === "reward"
277
+ ? "`.reward(...)` must offer something — `tokens`, `nativeAmount`, or both"
278
+ : "the delivery names no token: list what the solver brings in `tokens`, or leave the " +
279
+ "intent's second argument out");
285
280
  }
286
281
  return { tokens, nativeAmount };
287
282
  }
288
283
  /** `{ tokens: [{ token, amount }] }` — what the solver delivers to run the intent. Same shape as a
289
284
  * reward leg, and deliberately the same parser, since the fields mean the same things. */
290
- function lowerDelivery(node, resolve) {
285
+ function lowerDelivery(node, resolve, list) {
291
286
  if (node.type !== "ObjectExpression") {
292
287
  return fail("an intent's second argument is `{ tokens: [{ token, amount }] }`");
293
288
  }
294
- const spec = lowerReward(node, resolve);
289
+ const spec = lowerReward(node, resolve, list);
295
290
  if (spec.nativeAmount !== undefined) {
296
291
  return fail("`nativeAmount` belongs to the reward, not to what the solver delivers");
297
292
  }
@@ -361,7 +356,7 @@ function collectSites(program, context) {
361
356
  // ---------------------------------------------------------------------------
362
357
  const addressHex = (value) => `0x${value.toString(16).padStart(40, "0")}`;
363
358
  /** Lowers every `Chain(() => { ... }).reward({ ... })` in `source`. Purely textual surgery driven by
364
- * acorn ranges, so everything else survives byte for byte. */
359
+ * parser ranges, so everything else survives byte for byte. */
365
360
  export function rewriteIntentSugar(source, context) {
366
361
  // Every route compile comes through here, and most programs have no sugar, so skip the parse
367
362
  // when a site is impossible. A site is a call whose callee's property is the identifier
@@ -372,17 +367,16 @@ export function rewriteIntentSugar(source, context) {
372
367
  if (!source.includes("reward") && !source.includes("\\u")) {
373
368
  return { source, rewrote: false, intents: [] };
374
369
  }
375
- const program = parse(source, {
376
- ecmaVersion: "latest",
377
- sourceType: "module",
378
- });
370
+ const program = parseSauce(source);
379
371
  const sites = collectSites(program, context);
380
372
  if (sites.length === 0)
381
373
  return { source, rewrote: false, intents: [] };
382
- // Every name the program binds anywhere. A capture must be one of them, and the enclosing
383
- // program's locals are what this set is -- deliberately whole-program rather than scope-accurate,
384
- // matching `token-rewrite.ts`'s posture, because SauceScript shares scope across blocks anyway.
385
- const outerLocals = collectDeclaredNames(program);
374
+ // The file's top level: the declarations a child program may carry, and the entry. See
375
+ // `intent-body.ts` for what each name an intent body reads means.
376
+ const scope = moduleScope(program);
377
+ // The file's functions some child program carries; those the enclosing program no longer reaches
378
+ // once its bodies are lowered move out of it below.
379
+ const carriedFunctions = new Set();
386
380
  const intents = [];
387
381
  const replacements = [];
388
382
  sites.forEach((site, index) => {
@@ -412,10 +406,31 @@ export function rewriteIntentSugar(source, context) {
412
406
  }
413
407
  return captureSentinel(at);
414
408
  };
415
- // Resolved against the DESTINATION's registry: `USDC` in this closure is the destination's
416
- // USDC, because that is the chain the calls run on.
417
- const defines = context.definesFor(site.chain);
418
- const resolve = makeResolver(defines, outerLocals);
409
+ // TWO chains, so two resolvers. The body and the delivery argument run on the DESTINATION:
410
+ // `USDC` in the closure is the destination's USDC. The reward is escrowed by THIS program, on
411
+ // the chain it runs on, and approved to that chain's Portal a few statements below, so its
412
+ // `USDC` is the enclosing chain's. Crossing them names an address with no code where the call
413
+ // runs: a reward token from the destination fails SafeERC20's code check on the approval and
414
+ // reverts the whole fulfilment, and a body token from here is not a token over there.
415
+ //
416
+ // A top-level `const` of a literal is known when the file is compiled, so it is a value here
417
+ // exactly as a define is, and the same on both chains: what the file wrote. A define of the same
418
+ // name takes precedence, as the compiler gives a define over a module `const`, and a local of
419
+ // the opening function shadows it.
420
+ const opening = enclosingLocals(program, scope, site.start);
421
+ const fixed = [...scope.declarations].flatMap(([name, d]) => d.literal === undefined || opening.has(name) ? [] : [[name, d.literal]]);
422
+ const compileTime = (chain) => new Map([...fixed, ...context.definesFor(chain)]);
423
+ const defines = compileTime(site.chain);
424
+ // What the enclosing program can read where the intent opens: its locals there, and the
425
+ // file's module-level values. A reward, a delivery or a token-write argument naming one is
426
+ // spliced in at run time.
427
+ const readable = new Set([
428
+ ...opening,
429
+ ...scope.imports.keys(),
430
+ ...[...scope.declarations].filter(([, d]) => d.kind === "variable").map(([name]) => name),
431
+ ]);
432
+ const resolve = makeResolver(defines, readable);
433
+ const resolveFunding = makeResolver(compileTime(context.source), readable);
419
434
  /**
420
435
  * What the solver delivers to the destination Executor so this intent can run.
421
436
  *
@@ -424,15 +439,19 @@ export function rewriteIntentSugar(source, context) {
424
439
  * because there it is not a judgement call — a `transfer` of N moves N, so N is what has to
425
440
  * arrive. A program's needs cannot be read off its source, so the general path asks.
426
441
  */
427
- const explicitDelivery = site.delivery === undefined ? undefined : lowerDelivery(site.delivery, resolve);
442
+ const explicitDelivery = site.delivery === undefined
443
+ ? undefined
444
+ : lowerDelivery(site.delivery, resolve, { part: "delivery", chain: site.chain });
428
445
  // TWO SHAPES, chosen by what the closure actually contains.
429
446
  //
430
447
  // A body of nothing but token writes needs no program: each statement is already one route
431
448
  // call, which is cheaper than a cook and needs neither a Pot nor a Kitchen fee. Anything else --
432
449
  // a swap, a condition, a loop, an intent of its own -- is a program, compiled for the
433
450
  // destination and run through its Pot. The second shape is strictly more general; the first is
434
- // kept because it is free.
435
- const simple = isDirectCallBody(site.body, defines);
451
+ // kept because it is free. It is ERC-20 calldata, so only for an EVM destination: on Solana a
452
+ // symbol is a mint's key, and a token write there goes the program way, where the SVM compile
453
+ // refuses the token syntax by name.
454
+ const simple = site.chain.kind === "evm" && isDirectCallBody(site.body, defines);
436
455
  // The Portal the child's route records. Resolved once, here, because it is also what the Pot's
437
456
  // owner is derived from: a route recording one Portal is run by that Portal's Executor.
438
457
  const destinationPortal = context.defaults.destinationPortal ?? context.portalOf(site.chain);
@@ -440,17 +459,20 @@ export function rewriteIntentSugar(source, context) {
440
459
  const calls = [];
441
460
  const captureWords = [];
442
461
  if (!simple) {
443
- const properties = stripMemberProperties(site.body);
444
- const captured = collectCaptures(site.body, outerLocals, defines).filter((name) => !properties.has(name));
462
+ // The body as a program of its own: the file's declarations it reaches, carried as written,
463
+ // and `main` taking what it captures (`intent-body.ts`).
464
+ //
445
465
  // Captured values reach the program as ENTRY ARGUMENTS. They cannot be folded in: their
446
466
  // values do not exist when it is compiled. Declared as `main`'s parameters, encoded
447
467
  // compact-v1 at a declared width so the payload's length does not move with them, and spliced
448
- // by the parent at a fixed offset -- which is the property `scalarWidth` exists for.
449
- // UNTYPED parameters on purpose: the rewrite passes downstream are acorn-based and cannot
450
- // parse an annotation. `rs-compile.ts#ensureTypedMainParams` adds them at the compile seam,
451
- // after every rewrite has run -- the same staging `ensureVoidMain` already uses.
452
- const childSource = `function main(${captured.join(", ")}) {\n${source.slice(site.bodyStart + 1, site.bodyEnd - 1)}\n}`;
453
- const child = context.compileChild(site.chain, childSource, captured, destinationPortal);
468
+ // by the parent at a fixed offset -- which is the property `scalarWidth` exists for. Left
469
+ // unannotated: the compiler reads an unannotated parameter as a number, which a spliced
470
+ // 32-byte word is.
471
+ const childModule = childProgram(source, program, scope, site, site.body, source.slice(site.bodyStart + 1, site.bodyEnd - 1), new Set(defines.keys()));
472
+ const captured = childModule.captures;
473
+ for (const name of childModule.carriedFunctions)
474
+ carriedFunctions.add(name);
475
+ const child = context.compileChild(site.chain, childModule.source, captured, destinationPortal);
454
476
  captured.forEach((name, i) => {
455
477
  captureWords.push({ name, sentinel: child.captureSentinels[i] });
456
478
  });
@@ -468,24 +490,40 @@ export function rewriteIntentSugar(source, context) {
468
490
  }
469
491
  calls.push(child.call);
470
492
  }
493
+ // Each call is encoded by viem against the ERC-20 ABI, so the selector and the word layout are
494
+ // the encoder's rather than this file's. A captured argument goes in as its sentinel, which is
495
+ // address-shaped and therefore legal in either position.
496
+ const tokenCall = (target, method, args) => ({
497
+ target: addressHex(target),
498
+ data: encodeFunctionData({
499
+ abi: ERC20ABI,
500
+ functionName: method,
501
+ args: [addressHex(sentinelFor(args[0])), sentinelFor(args[1])],
502
+ }),
503
+ value: 0n,
504
+ });
505
+ // These calls are not a Sauce program: the Portal's Executor runs each one raw and checks only
506
+ // that it did not revert and that the target has code. So they are NOT SafeERC20. What that
507
+ // costs, and what the lowering does about it:
508
+ // - A token that returns nothing (USDT) works as it is: nothing decodes the return.
509
+ // - USDT refuses to move a non-zero allowance to another non-zero value, and ONE Executor runs
510
+ // every intent on a chain, so an allowance an earlier intent left behind is a realistic
511
+ // state. Every approve is therefore preceded by `approve(spender, 0)` — `forceApprove`'s end
512
+ // state, unconditionally, because the Executor's allowance cannot be read when the intent is
513
+ // built. A literal zero amount needs no reset.
514
+ // - A token that returns `false` instead of reverting is NOT detected. A body that needs that
515
+ // check must take the program path, whose writes are `@sauce/token`'s SafeERC20 ones.
471
516
  for (const statement of simple ? site.body : []) {
472
517
  const lowered = lowerStatement(statement, resolve, defines);
473
518
  // A `transfer` moves tokens the Executor must have been given; an `approve` moves nothing.
474
519
  if (lowered.method === "transfer" && explicitDelivery === undefined) {
475
520
  derivedDelivery.push({ token: lowered.target, amount: lowered.args[1] });
476
521
  }
477
- calls.push({
478
- target: addressHex(lowered.target),
479
- // Encoded by viem against the ERC-20 ABI, so the selector and the word layout are the
480
- // encoder's rather than this file's. A captured argument goes in as its sentinel, which is
481
- // address-shaped and therefore legal in either position.
482
- data: encodeFunctionData({
483
- abi: ERC20ABI,
484
- functionName: lowered.method,
485
- args: [addressHex(sentinelFor(lowered.args[0])), sentinelFor(lowered.args[1])],
486
- }),
487
- value: 0n,
488
- });
522
+ const amount = lowered.args[1];
523
+ if (lowered.method === "approve" && !("literal" in amount && amount.literal === 0n)) {
524
+ calls.push(tokenCall(lowered.target, "approve", [lowered.args[0], { literal: 0n }]));
525
+ }
526
+ calls.push(tokenCall(lowered.target, lowered.method, lowered.args));
489
527
  }
490
528
  // A capture the PROGRAM reads is a slot too: its sentinel sits in the argument tail of the cook
491
529
  // calldata above, which the parent splices exactly as it splices a reward amount.
@@ -499,7 +537,18 @@ export function rewriteIntentSugar(source, context) {
499
537
  if (!captures.includes(name))
500
538
  captures.push(name);
501
539
  }
502
- const reward = lowerReward(site.reward, resolve);
540
+ // On the enclosing chain: see `resolveFunding` above.
541
+ const reward = lowerReward(site.reward, resolveFunding, {
542
+ part: "reward",
543
+ chain: context.source,
544
+ });
545
+ // A native amount known to be zero offers nothing; any other (a literal or a run-time value)
546
+ // is a native leg the source Portal would count against a leg of its native ERC-20.
547
+ const offersNative = reward.nativeAmount !== undefined &&
548
+ !("literal" in reward.nativeAmount && reward.nativeAmount.literal === 0n);
549
+ const conflict = rewardAssetsConflict(context.source.id, offersNative, reward.tokens.map((t) => addressHex(t.token)));
550
+ if (conflict !== undefined)
551
+ fail(conflict);
503
552
  const { defaults } = context;
504
553
  const rewardDeadline = defaults.rewardDeadline ?? requireDeadline(defaults);
505
554
  const child = {
@@ -533,14 +582,21 @@ export function rewriteIntentSugar(source, context) {
533
582
  }),
534
583
  };
535
584
  const sourcePortal = defaults.sourcePortal ?? context.portalOf(context.source);
536
- const tx = publishAndFundTx(child, defaults.allowPartial ?? false, { portal: sourcePortal });
537
- const template = splitByPlaceholders(tx.data, placeholders);
585
+ const fundVia = requireFundVia(defaults);
586
+ // `publish` when the program pays the vault itself, `publishAndFund` when the Portal pulls the
587
+ // reward under an approval. Either way the intent is these bytes, cut at the same slots.
588
+ const tx = fundVia === "transfer"
589
+ ? publishTx(child, { portal: sourcePortal })
590
+ : publishAndFundTx(child, defaults.allowPartial ?? false, { portal: sourcePortal });
591
+ // An intent every value of which is known now — defines and literals, no local of the program —
592
+ // has no slot to fill: its calldata is simply these bytes.
593
+ const template = placeholders.length === 0 ? undefined : splitByPlaceholders(tx.data, placeholders);
538
594
  // Every sentinel must have become a slot. `splitByPlaceholders` guarantees that for the ones it
539
595
  // was TOLD about; this catches the other direction — a sentinel written into the payload whose
540
596
  // placeholder was never declared, which leaves it in the literal segments and ships an intent
541
597
  // carrying `0x5acecab7…` where an amount belongs. That happened once, silently, which is why it
542
598
  // is checked rather than reasoned about.
543
- for (const segment of template.segments) {
599
+ for (const segment of template?.segments ?? [tx.data]) {
544
600
  for (const tag of [CAPTURE_TAG, CHILD_CAPTURE_TAG]) {
545
601
  if (segment.includes(tag)) {
546
602
  throw new SugarError(`intent sugar: a capture sentinel (0x${tag}) survived into the encoded intent — some ` +
@@ -550,28 +606,50 @@ export function rewriteIntentSugar(source, context) {
550
606
  }
551
607
  }
552
608
  const locals = Object.fromEntries(captures.map((name) => [name, name]));
553
- const emitted = emitTemplate(template, { prefix, locals });
609
+ const emitted = template === undefined
610
+ ? {
611
+ statements: [`const ${prefix}data = hex\`${tx.data.slice(2)}\`;`],
612
+ dataVar: `${prefix}data`,
613
+ }
614
+ : emitTemplate(template, { prefix, locals });
554
615
  const statements = [...emitted.statements];
555
- // One approve per distinct reward token, so the Portal can pull the escrow from this Pot.
556
- // Through `token/safe.ts`: the ERC-20 ABI's `bool` return is decoded even when discarded and a
557
- // token like USDT returns nothing, so the call goes out raw and the SafeERC20 check judges the
558
- // result. That helper also resets a standing allowance first -- which matters here more than
559
- // anywhere, because one Pot publishes every intent on this chain and the previous one's
560
- // leftover allowance is exactly what USDT refuses to overwrite.
561
616
  const portalWord = {
562
617
  literal: BigInt(denormalizeToEvm(toUniversalAddress(sourcePortal))),
563
618
  };
564
- const approved = new Set();
565
- reward.tokens.forEach((t, i) => {
566
- const token = addressHex(t.token);
567
- if (approved.has(token))
568
- return;
569
- approved.add(token);
570
- const amount = "literal" in t.amount ? { literal: t.amount.literal } : { local: t.amount.capture };
571
- statements.push(...safeApproveStatements(`${prefix}${i}`, `${BigInt(t.token)}n`, portalWord, amount));
619
+ const portalLiteral = `${portalWord.literal}n`;
620
+ if (fundVia === "transfer") {
621
+ statements.push(...vaultFundingStatements({
622
+ prefix,
623
+ child,
624
+ publishData: tx.data,
625
+ dataVar: emitted.dataVar,
626
+ sourcePortal,
627
+ reward,
628
+ }), `evm.call(${portalLiteral}, 0n, ${emitted.dataVar});`);
629
+ }
630
+ else {
631
+ // One approve per distinct reward token, so the Portal can pull the escrow from this Pot.
632
+ // Through `token/safe.ts`: the ERC-20 ABI's `bool` return is decoded even when discarded and a
633
+ // token like USDT returns nothing, so the call goes out raw and the SafeERC20 check judges the
634
+ // result. That helper also resets a standing allowance first -- which matters here more than
635
+ // anywhere, because one Pot publishes every intent on this chain and the previous one's
636
+ // leftover allowance is exactly what USDT refuses to overwrite. A token listed twice is
637
+ // approved once, for the larger amount: `_fundToken` pulls each entry up to the vault's
638
+ // whole balance of that token, so the largest entry is the allowance it needs.
639
+ largestPerToken(`${prefix}a`, reward, statements).forEach(({ token, amount }, i) => {
640
+ statements.push(...safeApproveStatements(`${prefix}${i}`, `${token}n`, portalWord, amount));
641
+ });
642
+ // The native reward travels as the call's value: `_fundNative` pays the vault from
643
+ // `msg.value`, and `Refund.excessNative` returns what it did not need.
644
+ statements.push(`evm.call(${portalLiteral}, ${valueExpression(reward.nativeAmount)}, ${emitted.dataVar});`);
645
+ }
646
+ intents.push({
647
+ intent: child,
648
+ captures,
649
+ sentinels: placeholders.map(({ value, source }) => ({ sentinel: value, capture: source })),
650
+ destination: site.chain,
651
+ fundVia,
572
652
  });
573
- statements.push(`evm.call(${BigInt(denormalizeToEvm(toUniversalAddress(sourcePortal)))}n, 0n, ${emitted.dataVar});`);
574
- intents.push({ intent: child, captures, destination: site.chain });
575
653
  replacements.push({
576
654
  start: site.start,
577
655
  end: site.end,
@@ -584,7 +662,135 @@ export function rewriteIntentSugar(source, context) {
584
662
  for (const replacement of [...replacements].sort((a, b) => b.start - a.start)) {
585
663
  out = out.slice(0, replacement.start) + replacement.text + out.slice(replacement.end);
586
664
  }
587
- return { source: out, rewrote: true, intents };
665
+ return { source: withoutMovedFunctions(out, carriedFunctions), rewrote: true, intents };
666
+ }
667
+ /**
668
+ * `source` without the functions only an intent body used. Each moved into that body's program,
669
+ * which compiles it for the chain it runs on; left here it would be compiled for this chain too,
670
+ * where the program never calls it, and could fail a rewrite there for a token or protocol that
671
+ * chain does not have.
672
+ */
673
+ function withoutMovedFunctions(source, carried) {
674
+ if (carried.size === 0)
675
+ return source;
676
+ const program = parseSauce(source);
677
+ const moved = unreachedFunctions(moduleScope(program), carried);
678
+ if (moved.size === 0)
679
+ return source;
680
+ let out = source;
681
+ const statements = [...(program.body ?? [])].reverse();
682
+ for (const statement of statements) {
683
+ const node = statement.type === "ExportNamedDeclaration"
684
+ ? (statement.declaration ?? statement)
685
+ : statement;
686
+ const id = node.type === "FunctionDeclaration" ? node.id : undefined;
687
+ if (id === undefined || !moved.has(id.name))
688
+ continue;
689
+ const end = out[statement.end] === "\n" ? statement.end + 1 : statement.end;
690
+ out = out.slice(0, statement.start) + out.slice(end);
691
+ }
692
+ return out;
693
+ }
694
+ /** A native amount as the expression a call's value takes: its literal, or the enclosing local. */
695
+ function valueExpression(value) {
696
+ if (value === undefined)
697
+ return "0n";
698
+ return "literal" in value ? `${value.literal}n` : value.capture;
699
+ }
700
+ /** `defaults.fundVia`, defaulted and checked, refusing an option that belongs to the other mode. */
701
+ function requireFundVia(defaults) {
702
+ const fundVia = defaults.fundVia ?? "transfer";
703
+ if (!INTENT_FUND_VIA.includes(fundVia)) {
704
+ return fail(`\`intents.fundVia\` is '${String(fundVia)}', which is not ` +
705
+ `${INTENT_FUND_VIA.map((via) => `"${via}"`).join(" or ")}`);
706
+ }
707
+ if (fundVia === "transfer" && defaults.allowPartial === true) {
708
+ return fail('`intents.allowPartial` goes with `fundVia: "publishAndFund"`: funding by transfer pays the ' +
709
+ "whole reward into the vault, and `publish` takes no such flag");
710
+ }
711
+ return fundVia;
712
+ }
713
+ /**
714
+ * Each distinct reward token, in first-seen order, with the largest amount it is listed for: the
715
+ * balance `isIntentFunded` checks every entry of that token against, and so what a transfer into
716
+ * the vault — or an approval the Portal pulls under — must cover. A literal when every amount is
717
+ * known now; otherwise a local, computed by the statements this appends (named `<tag><i>m<k>`), the
718
+ * largest of the captured values and of the largest literal beside them.
719
+ */
720
+ function largestPerToken(tag, reward, statements) {
721
+ const byToken = new Map();
722
+ for (const t of reward.tokens)
723
+ byToken.set(t.token, [...(byToken.get(t.token) ?? []), t.amount]);
724
+ return [...byToken].map(([token, amounts], i) => {
725
+ const largestLiteral = amounts.reduce((max, a) => ("literal" in a && (max === undefined || a.literal > max) ? a.literal : max), undefined);
726
+ const captured = [...new Set(amounts.flatMap((a) => ("capture" in a ? [a.capture] : [])))];
727
+ if (captured.length === 0)
728
+ return { token, amount: { literal: largestLiteral } };
729
+ const operands = [...captured, ...(largestLiteral === undefined ? [] : [`${largestLiteral}n`])];
730
+ let local = operands[0];
731
+ operands.slice(1).forEach((operand, k) => {
732
+ const next = `${tag}${i}m${k}`;
733
+ statements.push(`const ${next} = ${local} > ${operand} ? ${local} : ${operand};`);
734
+ local = next;
735
+ });
736
+ return { token, amount: { local } };
737
+ });
738
+ }
739
+ /**
740
+ * The statements that pay an intent's reward into its vault from the executing contract, before
741
+ * the `publish` that follows them:
742
+ *
743
+ * 1. the vault, read from the Portal in this same cook — `intentVaultAddress` over the very bytes
744
+ * about to be published, so the address cannot disagree with the intent the Portal records.
745
+ * Its arguments are `publish`'s exactly (`(uint64, bytes, Reward)` both), so the call is the
746
+ * rendered payload with the other selector in front, not a second copy of the intent;
747
+ * 2. one `transfer(vault, amount)` per distinct reward token, for the largest of its amounts (the
748
+ * balance `isIntentFunded` checks each entry against), with `SafeERC20` semantics
749
+ * (`token/safe.ts`): a token returning nothing works, `false` or no code reverts the cook. A
750
+ * captured amount of zero transfers nothing;
751
+ * 3. the native amount, sent to the vault.
752
+ */
753
+ function vaultFundingStatements(funding) {
754
+ const { prefix, child, publishData, dataVar, sourcePortal, reward } = funding;
755
+ const query = intentVaultAddressCall(child, { portal: sourcePortal }).data;
756
+ // Held, not assumed: the selector swap below is only sound while both functions take the same
757
+ // arguments in the same encoding.
758
+ if (query.slice(10) !== publishData.slice(10)) {
759
+ throw new SugarError("intent sugar: intentVaultAddress and publish no longer encode the same arguments — " +
760
+ "the vault read would ask about a different intent than the one published. This is a bug " +
761
+ "in the lowering, not in the program.");
762
+ }
763
+ const portal = `${BigInt(denormalizeToEvm(toUniversalAddress(sourcePortal)))}n`;
764
+ const vault = `${prefix}vault`;
765
+ const statements = [
766
+ `const ${prefix}vsel = hex\`${query.slice(2, 10)}\`;`,
767
+ `const ${prefix}vq = ${prefix}vsel.concat(${dataVar}.slice(4n, ${dataVar}.length));`,
768
+ `const [${vault}] = abi.decode(evm.static(${portal}, ${prefix}vq), ["Address"]);`,
769
+ ];
770
+ largestPerToken(`${prefix}f`, reward, statements).forEach(({ token, amount }, i) => {
771
+ // A token listed only for nothing needs nothing in the vault.
772
+ if ("literal" in amount && amount.literal === 0n)
773
+ return;
774
+ const transfer = safeTransferStatements(`${prefix}f${i}_`, `${token}n`, { local: vault }, amount);
775
+ if ("literal" in amount) {
776
+ statements.push(...transfer);
777
+ return;
778
+ }
779
+ // The calldata consts are hoisted out of the zero guard; the call AND its SafeERC20 check go
780
+ // inside it, since checking a call that never happened would read a stale result.
781
+ const firstCall = transfer.findIndex((line) => line.includes("evm.call("));
782
+ statements.push(...transfer.slice(0, firstCall));
783
+ statements.push(`if (${amount.local} > 0n) { ${transfer.slice(firstCall).join(" ")} }`);
784
+ });
785
+ const native = reward.nativeAmount;
786
+ if (native !== undefined && !("literal" in native && native.literal === 0n)) {
787
+ // Bound, not inline: a method call on a `hex` literal is outside the compiler's subset, and
788
+ // `evm.call` is the one way to send value.
789
+ statements.push(`const ${prefix}fnd = hex\`\`;`);
790
+ const send = `evm.call(${vault}, ${valueExpression(native)}, ${prefix}fnd);`;
791
+ statements.push("literal" in native ? send : `if (${native.capture} > 0n) { ${send} }`);
792
+ }
793
+ return statements;
588
794
  }
589
795
  /**
590
796
  * The reward's creator — who may reclaim it once `rewardDeadline` passes.