@eco-incorp/sauce 0.99.0 → 0.99.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +29 -0
- package/README.md +69 -249
- package/actions/dist/to-sauce.d.ts.map +1 -1
- package/actions/dist/to-sauce.js +4 -5
- package/dev-tools/README.md +11 -170
- package/docs/README.md +39 -0
- package/docs/api/README.md +71 -0
- package/docs/api/compiler.md +234 -0
- package/docs/api/coverage.md +117 -0
- package/docs/api/routes.md +110 -0
- package/docs/concepts/architecture.md +134 -0
- package/docs/concepts/saucescript.md +172 -0
- package/docs/examples/README.md +34 -0
- package/docs/examples/compile-program.ts +20 -0
- package/docs/examples/evm-execution.ts +59 -0
- package/docs/examples/first-intent.ts +56 -0
- package/docs/examples/protocol-approval.ts +33 -0
- package/docs/guides/builders-and-actions.md +108 -0
- package/docs/guides/compiling.md +264 -0
- package/docs/guides/intents.md +158 -0
- package/docs/guides/nested-intents.md +79 -0
- package/docs/guides/protocols-and-tokens.md +116 -0
- package/docs/guides/quick-start.md +64 -0
- package/docs/guides/solana.md +196 -0
- package/docs/guides/verification.md +253 -0
- package/package.json +9 -4
- package/sdk/dist/artifacts/V12Deployments.json +82 -0
- package/sdk/dist/artifacts/V12RuntimeBytecode.json +1 -1
- package/sdk/dist/artifacts/svm/engine-devnet.so +0 -0
- package/sdk/dist/artifacts/svm/engine-mainnet.so +0 -0
- package/sdk/dist/artifacts/svm/engine-wire-devnet.json +3 -3
- package/sdk/dist/artifacts/svm/engine-wire-mainnet.json +3 -3
- package/sdk/dist/deployments/index.d.ts +15 -39
- package/sdk/dist/deployments/index.d.ts.map +1 -1
- package/sdk/dist/deployments/index.js +23 -39
- package/sdk/dist/deployments/index.js.map +1 -1
- package/sdk/dist/deployments/v12-addresses.d.ts +85 -0
- package/sdk/dist/deployments/v12-addresses.d.ts.map +1 -0
- package/sdk/dist/deployments/v12-addresses.js +51 -0
- package/sdk/dist/deployments/v12-addresses.js.map +1 -0
- package/sdk/dist/deployments/v12.generated.d.ts +3 -3
- package/sdk/dist/deployments/v12.generated.d.ts.map +1 -1
- package/sdk/dist/deployments/v12.generated.js +3 -3
- package/sdk/dist/deployments/v12.generated.js.map +1 -1
- package/sdk/dist/deposit/index.d.ts +28 -102
- package/sdk/dist/deposit/index.d.ts.map +1 -1
- package/sdk/dist/deposit/index.js.map +1 -1
- package/sdk/dist/deposit/params.d.ts +1 -1
- package/sdk/dist/deposit/params.js +2 -2
- package/sdk/dist/deposit/params.js.map +1 -1
- package/sdk/dist/deposit/source.d.ts +1 -1
- package/sdk/dist/deposit/source.d.ts.map +1 -1
- package/sdk/dist/deposit/source.js +18 -33
- package/sdk/dist/deposit/source.js.map +1 -1
- package/sdk/dist/deposit/types.d.ts +5 -4
- package/sdk/dist/deposit/types.d.ts.map +1 -1
- package/sdk/dist/evm/engine.d.ts +32 -0
- package/sdk/dist/evm/engine.d.ts.map +1 -1
- package/sdk/dist/evm/engine.js +2 -0
- package/sdk/dist/evm/engine.js.map +1 -1
- package/sdk/dist/index.d.ts +1 -0
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +2 -0
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/plugin/index.d.ts +16 -41
- package/sdk/dist/plugin/index.d.ts.map +1 -1
- package/sdk/dist/plugin/index.js +2 -6
- package/sdk/dist/plugin/index.js.map +1 -1
- package/sdk/dist/recipes/index.js +2 -2
- package/sdk/dist/recipes/settle.sauce.ts +1 -1
- package/sdk/dist/routes/index.d.ts +3 -3
- package/sdk/dist/routes/index.js +3 -3
- package/sdk/dist/routes/intent-dsl.d.ts +23 -10
- package/sdk/dist/routes/intent-dsl.d.ts.map +1 -1
- package/sdk/dist/routes/intent-dsl.js +19 -2
- package/sdk/dist/routes/intent-dsl.js.map +1 -1
- package/sdk/dist/routes/nest.d.ts +23 -0
- package/sdk/dist/routes/nest.d.ts.map +1 -1
- package/sdk/dist/routes/nest.js +2 -4
- package/sdk/dist/routes/nest.js.map +1 -1
- package/sdk/dist/routes/protocol-rewrite.d.ts +2 -2
- package/sdk/dist/routes/protocol-rewrite.d.ts.map +1 -1
- package/sdk/dist/routes/protocol-rewrite.js +19 -35
- package/sdk/dist/routes/protocol-rewrite.js.map +1 -1
- package/sdk/dist/routes/sauce-calls.d.ts +7 -13
- package/sdk/dist/routes/sauce-calls.d.ts.map +1 -1
- package/sdk/dist/routes/sauce-calls.js +6 -11
- package/sdk/dist/routes/sauce-calls.js.map +1 -1
- package/sdk/dist/routes/sauce-route.d.ts +24 -53
- package/sdk/dist/routes/sauce-route.d.ts.map +1 -1
- package/sdk/dist/routes/sauce-route.js +5 -6
- package/sdk/dist/routes/sauce-route.js.map +1 -1
- package/sdk/dist/routes/source-globals.generated.d.ts +931 -0
- package/sdk/dist/routes/source-globals.generated.d.ts.map +1 -0
- package/sdk/dist/routes/source-globals.generated.js +7 -0
- package/sdk/dist/routes/source-globals.generated.js.map +1 -0
- package/sdk/dist/std/token/token.svm.js +19 -14
- package/sdk/dist/svm/cpi-probe.d.ts +1 -1
- package/sdk/dist/svm/cpi-probe.d.ts.map +1 -1
- package/sdk/dist/svm/cpi-probe.js +5 -2
- package/sdk/dist/svm/cpi-probe.js.map +1 -1
- package/sdk/dist/svm/intent.d.ts +12 -40
- package/sdk/dist/svm/intent.d.ts.map +1 -1
- package/sdk/dist/svm/intent.js +22 -66
- package/sdk/dist/svm/intent.js.map +1 -1
- package/sdk/dist/svm/venues/byreal/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/byreal/index.js +4 -1
- package/sdk/dist/svm/venues/byreal/index.js.map +1 -1
- package/sdk/dist/svm/venues/carrot/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/carrot/index.js +4 -0
- package/sdk/dist/svm/venues/carrot/index.js.map +1 -1
- package/sdk/dist/svm/venues/cropper/index.d.ts +1 -1
- package/sdk/dist/svm/venues/cropper/index.js +1 -1
- package/sdk/dist/svm/venues/huma/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/huma/index.js +4 -1
- package/sdk/dist/svm/venues/huma/index.js.map +1 -1
- package/sdk/dist/svm/venues/index.d.ts +1 -0
- package/sdk/dist/svm/venues/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/index.js +1 -0
- package/sdk/dist/svm/venues/index.js.map +1 -1
- package/sdk/dist/svm/venues/math.d.ts +4 -1
- package/sdk/dist/svm/venues/math.d.ts.map +1 -1
- package/sdk/dist/svm/venues/math.js +4 -1
- package/sdk/dist/svm/venues/math.js.map +1 -1
- package/sdk/dist/svm/venues/meteora-damm-v1-stable/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/meteora-damm-v1-stable/index.js +4 -1
- package/sdk/dist/svm/venues/meteora-damm-v1-stable/index.js.map +1 -1
- package/sdk/dist/svm/venues/meteora-damm-v2/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/meteora-damm-v2/index.js +5 -2
- package/sdk/dist/svm/venues/meteora-damm-v2/index.js.map +1 -1
- package/sdk/dist/svm/venues/obric-v2/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/obric-v2/index.js +16 -5
- package/sdk/dist/svm/venues/obric-v2/index.js.map +1 -1
- package/sdk/dist/svm/venues/oracle-exponent.d.ts +82 -0
- package/sdk/dist/svm/venues/oracle-exponent.d.ts.map +1 -0
- package/sdk/dist/svm/venues/oracle-exponent.js +97 -0
- package/sdk/dist/svm/venues/oracle-exponent.js.map +1 -0
- package/sdk/dist/svm/venues/orca-legacy-token-swap/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/orca-legacy-token-swap/index.js +4 -1
- package/sdk/dist/svm/venues/orca-legacy-token-swap/index.js.map +1 -1
- package/sdk/dist/svm/venues/pumpswap/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/pumpswap/index.js +19 -13
- package/sdk/dist/svm/venues/pumpswap/index.js.map +1 -1
- package/sdk/dist/svm/venues/raydium-amm-v4/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/raydium-amm-v4/index.js +4 -1
- package/sdk/dist/svm/venues/raydium-amm-v4/index.js.map +1 -1
- package/sdk/dist/svm/venues/raydium-clmm/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/raydium-clmm/index.js +4 -1
- package/sdk/dist/svm/venues/raydium-clmm/index.js.map +1 -1
- package/sdk/dist/svm/venues/raydium-cp-swap/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/raydium-cp-swap/index.js +4 -1
- package/sdk/dist/svm/venues/raydium-cp-swap/index.js.map +1 -1
- package/sdk/dist/svm/venues/scorch/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/scorch/index.js +4 -1
- package/sdk/dist/svm/venues/scorch/index.js.map +1 -1
- package/sdk/dist/svm/venues/stabble-common.d.ts +1 -1
- package/sdk/dist/svm/venues/stabble-common.js +1 -1
- package/sdk/dist/svm/venues/types.d.ts +4 -1
- package/sdk/dist/svm/venues/types.d.ts.map +1 -1
- package/sdk/dist/svm/venues/woofi/index.d.ts.map +1 -1
- package/sdk/dist/svm/venues/woofi/index.js +4 -0
- package/sdk/dist/svm/venues/woofi/index.js.map +1 -1
- package/sdk/dist/svm/verify.d.ts +27 -133
- package/sdk/dist/svm/verify.d.ts.map +1 -1
- package/sdk/dist/svm/verify.js +72 -139
- package/sdk/dist/svm/verify.js.map +1 -1
- package/sdk/dist/swap/index.d.ts +16 -59
- package/sdk/dist/swap/index.d.ts.map +1 -1
- package/sdk/dist/swap/index.js +16 -59
- package/sdk/dist/swap/index.js.map +1 -1
- package/sdk/dist/token/source.d.ts.map +1 -1
- package/sdk/dist/token/source.js +4 -1
- package/sdk/dist/token/source.js.map +1 -1
- package/sdk/dist/verify/decode.d.ts +6 -6
- package/sdk/dist/verify/decode.js +7 -7
- package/sdk/dist/verify/index.js +2 -2
- package/sdk/dist/verify/intent.js +2 -2
- package/sdk/dist/verify/vectors.d.ts +1 -1
- package/sdk/dist/verify/vectors.d.ts.map +1 -1
- package/sdk/dist/verify/vectors.js +2 -2
- package/sdk/dist/verify/vectors.js.map +1 -1
- package/sdk/dist/verify/wire.d.ts +7 -4
- package/sdk/dist/verify/wire.d.ts.map +1 -1
- package/sdk/dist/verify/wire.js +7 -4
- package/sdk/dist/verify/wire.js.map +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deterministic addresses of the pinned Sauce v12 releases.
|
|
3
|
+
*
|
|
4
|
+
* `sync-engine-artifacts` assembles these from the `addresses.json` each of the four v12 releases
|
|
5
|
+
* publishes and writes `artifacts/V12Deployments.json` next to this module — `dist/artifacts` in an
|
|
6
|
+
* installed package, `src/artifacts` in a from-source tree — which `files: ["sdk/dist"]` carries into
|
|
7
|
+
* the tarball. It is read at runtime (like `svm/engine-artifacts.ts` reads the `.so`), not imported,
|
|
8
|
+
* so a clean `tsc` never depends on a file the sync produces.
|
|
9
|
+
*
|
|
10
|
+
* These are the deterministic addresses — CREATE3 on EVM, a fixed/derived keypair on SVM — so they are
|
|
11
|
+
* `chainIndependent` / `clusterIndependent`: one address set, the same everywhere it is deployed. They
|
|
12
|
+
* are ADDRESSES, not liveness. The legacy chain roster does not attest that these release versions
|
|
13
|
+
* are deployed; check code/programs on the target chain before use. These supersede the legacy
|
|
14
|
+
* ADDRESSES — `v12.generated.ts` records the pre-`cook` stack, and its Kitchen/Router are not these.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
17
|
+
import { dirname, resolve } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
const ARTIFACT = resolve(dirname(fileURLToPath(import.meta.url)), "..", "artifacts", "V12Deployments.json");
|
|
20
|
+
let cached;
|
|
21
|
+
/**
|
|
22
|
+
* The assembled release-address record. Read lazily and memoized, so importing this module never
|
|
23
|
+
* throws — only calling it without a synced artifact does, with a remedy in the message.
|
|
24
|
+
*/
|
|
25
|
+
export function v12DeployedAddresses() {
|
|
26
|
+
if (cached !== undefined)
|
|
27
|
+
return cached;
|
|
28
|
+
if (!existsSync(ARTIFACT)) {
|
|
29
|
+
throw new Error(`V12Deployments.json not found at ${ARTIFACT}. It ships in the published package; from a source ` +
|
|
30
|
+
`checkout run \`pnpm --filter './sdk' sync-engine-artifacts\`.`);
|
|
31
|
+
}
|
|
32
|
+
cached = JSON.parse(readFileSync(ARTIFACT, "utf8"));
|
|
33
|
+
return cached;
|
|
34
|
+
}
|
|
35
|
+
/** Legacy EVM Kitchen version. Engine versions are in `v12DeployedAddresses().releases`. */
|
|
36
|
+
export const v12DeployedVersion = () => v12DeployedAddresses().version;
|
|
37
|
+
/** The current EVM engine (interpreter runtime) address. */
|
|
38
|
+
export const v12EngineAddress = () => v12DeployedAddresses().evm.contracts.engine.address;
|
|
39
|
+
/** The current EVM Router address. */
|
|
40
|
+
export const v12RouterAddress = () => v12DeployedAddresses().evm.contracts.router.address;
|
|
41
|
+
/** The current EVM Kitchen (UUPS proxy) address — mints Pots and gates every cook. */
|
|
42
|
+
export const v12KitchenAddress = () => v12DeployedAddresses().evm.contracts.kitchen.address;
|
|
43
|
+
/** The current EVM Kitchen implementation address (behind the proxy). */
|
|
44
|
+
export const v12KitchenImplementationAddress = () => v12DeployedAddresses().evm.contracts.kitchenImplementation.address;
|
|
45
|
+
/** How a Pot address is derived from `(owner, salt)` under the current Kitchen. */
|
|
46
|
+
export const v12PotDerivation = () => v12DeployedAddresses().evm.pot;
|
|
47
|
+
/** The current SVM engine program id — pass as `programId` to `createSauceSvmClient`. */
|
|
48
|
+
export const v12SvmEngineProgramId = () => v12DeployedAddresses().svm.programs.engine.programId;
|
|
49
|
+
/** The current SVM Kitchen program id every cook is gated to. */
|
|
50
|
+
export const v12SvmKitchenProgramId = () => v12DeployedAddresses().svm.programs.kitchen.programId;
|
|
51
|
+
//# sourceMappingURL=v12-addresses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v12-addresses.js","sourceRoot":"","sources":["../../src/deployments/v12-addresses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAqEzC,MAAM,QAAQ,GAAG,OAAO,CACtB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC,IAAI,EACJ,WAAW,EACX,qBAAqB,CACtB,CAAC;AAEF,IAAI,MAAwC,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,qDAAqD;YAC/F,+DAA+D,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAyB,CAAC;IAC5E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAW,EAAE,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC;AAE/E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAElG,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAElG,sFAAsF;AACtF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;AAEpG,yEAAyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAW,EAAE,CAC1D,oBAAoB,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAErE,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAqB,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AAEvF,yFAAyF;AACzF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAW,EAAE,CAChD,oBAAoB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;AAEvD,iEAAiE;AACjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAW,EAAE,CACjD,oBAAoB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC"}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
export declare const V12_SALT: "0x0000000000000000000000000000000000000000000000000000000000000001";
|
|
3
3
|
/** Which tool in the engine repo produced the underlying record. */
|
|
4
4
|
export declare const V12_GENERATED_BY: "dev-tools/scripts/deploy-v12.ts";
|
|
5
|
-
/**
|
|
5
|
+
/** @deprecated Legacy EVM addresses. Use v12EngineAddress/v12RouterAddress/v12KitchenAddress. */
|
|
6
6
|
export declare const V12_EVM_CONTRACTS: {
|
|
7
7
|
readonly router: "0x20BbEc03eE401B26938880cd23Aac00Cf927F06a";
|
|
8
8
|
readonly v12Runtime: "0x3dfE79fBB6C62D00986F476c3F86E7D19E0cabeD";
|
|
9
9
|
readonly v12Kitchen: "0xd57b452634c653D80A85160fea895BB07Ac41D8F";
|
|
10
10
|
};
|
|
11
|
-
/**
|
|
11
|
+
/** Historical per-chain deploy outcome; does not establish current release liveness. */
|
|
12
12
|
export declare const V12_EVM_CHAINS: {
|
|
13
13
|
readonly 1: {
|
|
14
14
|
readonly name: "ethereum";
|
|
@@ -77,7 +77,7 @@ export declare const V12_EVM_CHAINS: {
|
|
|
77
77
|
readonly status: "live";
|
|
78
78
|
};
|
|
79
79
|
};
|
|
80
|
-
/**
|
|
80
|
+
/** @deprecated Historical SVM deployment. Use v12SvmEngineProgramId for the pinned release. */
|
|
81
81
|
export declare const V12_SVM: {
|
|
82
82
|
readonly programId: "CuHCniNMWLSkZWBQKon9tudGujZeXJRUwG2PCLDq4ipJ";
|
|
83
83
|
readonly upgradeable: false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v12.generated.d.ts","sourceRoot":"","sources":["../../src/deployments/v12.generated.ts"],"names":[],"mappings":"AAeA,gDAAgD;AAChD,eAAO,MAAM,QAAQ,EAAG,oEAA6E,CAAC;AAEtG,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAG,iCAA0C,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"v12.generated.d.ts","sourceRoot":"","sources":["../../src/deployments/v12.generated.ts"],"names":[],"mappings":"AAeA,gDAAgD;AAChD,eAAO,MAAM,QAAQ,EAAG,oEAA6E,CAAC;AAEtG,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAG,iCAA0C,CAAC;AAE3E,iGAAiG;AACjG,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,wFAAwF;AACxF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAcjB,CAAC;AAEX,+FAA+F;AAC/F,eAAO,MAAM,OAAO;;;;;;;;;;;;;CAOV,CAAC"}
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
export const V12_SALT = '0x0000000000000000000000000000000000000000000000000000000000000001';
|
|
17
17
|
/** Which tool in the engine repo produced the underlying record. */
|
|
18
18
|
export const V12_GENERATED_BY = 'dev-tools/scripts/deploy-v12.ts';
|
|
19
|
-
/**
|
|
19
|
+
/** @deprecated Legacy EVM addresses. Use v12EngineAddress/v12RouterAddress/v12KitchenAddress. */
|
|
20
20
|
export const V12_EVM_CONTRACTS = {
|
|
21
21
|
router: '0x20BbEc03eE401B26938880cd23Aac00Cf927F06a',
|
|
22
22
|
v12Runtime: '0x3dfE79fBB6C62D00986F476c3F86E7D19E0cabeD',
|
|
23
23
|
v12Kitchen: '0xd57b452634c653D80A85160fea895BB07Ac41D8F',
|
|
24
24
|
};
|
|
25
|
-
/**
|
|
25
|
+
/** Historical per-chain deploy outcome; does not establish current release liveness. */
|
|
26
26
|
export const V12_EVM_CHAINS = {
|
|
27
27
|
1: { name: 'ethereum', live: true, status: 'live' },
|
|
28
28
|
10: { name: 'optimism', live: true, status: 'live' },
|
|
@@ -38,7 +38,7 @@ export const V12_EVM_CHAINS = {
|
|
|
38
38
|
42220: { name: 'celo', live: true, status: 'live' },
|
|
39
39
|
57073: { name: 'ink', live: true, status: 'live' },
|
|
40
40
|
};
|
|
41
|
-
/**
|
|
41
|
+
/** @deprecated Historical SVM deployment. Use v12SvmEngineProgramId for the pinned release. */
|
|
42
42
|
export const V12_SVM = {
|
|
43
43
|
programId: 'CuHCniNMWLSkZWBQKon9tudGujZeXJRUwG2PCLDq4ipJ',
|
|
44
44
|
upgradeable: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"v12.generated.js","sourceRoot":"","sources":["../../src/deployments/v12.generated.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,sGAAsG;AACtG,oGAAoG;AACpG,oGAAoG;AACpG,mGAAmG;AACnG,wFAAwF;AACxF,EAAE;AACF,kGAAkG;AAClG,+FAA+F;AAC/F,kGAAkG;AAClG,oGAAoG;AACpG,gGAAgG;AAChG,6EAA6E;AAE7E,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,oEAA6E,CAAC;AAEtG,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAA0C,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"v12.generated.js","sourceRoot":"","sources":["../../src/deployments/v12.generated.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,EAAE;AACF,sGAAsG;AACtG,oGAAoG;AACpG,oGAAoG;AACpG,mGAAmG;AACnG,wFAAwF;AACxF,EAAE;AACF,kGAAkG;AAClG,+FAA+F;AAC/F,kGAAkG;AAClG,oGAAoG;AACpG,gGAAgG;AAChG,6EAA6E;AAE7E,gDAAgD;AAChD,MAAM,CAAC,MAAM,QAAQ,GAAG,oEAA6E,CAAC;AAEtG,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAG,iCAA0C,CAAC;AAE3E,iGAAiG;AACjG,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,4CAA4C;IACpD,UAAU,EAAE,4CAA4C;IACxD,UAAU,EAAE,4CAA4C;CAChD,CAAC;AAEX,wFAAwF;AACxF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACnD,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACpD,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAC/C,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACrD,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACpD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAClD,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAClD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,0MAA0M,EAAE;IACzQ,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAClD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACpD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACvD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACnD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;CAC1C,CAAC;AAEX,+FAA+F;AAC/F,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS,EAAE,8CAA8C;IACzD,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3D,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACxE;CACO,CAAC"}
|
|
@@ -1,106 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* // every path". compileSauceRoute annotates it before compiling.
|
|
31
|
-
* const { compiled } = routes.compileSauceRoute(
|
|
32
|
-
* "base",
|
|
33
|
-
* deposit.depositSource({ protocol: "aave-v3", action: "supply", target: aavePool,
|
|
34
|
-
* token: tokenIn, amount: 500n, extra: { referralCode: 0n } }),
|
|
35
|
-
* { pot },
|
|
36
|
-
* { baseDirs: deposit.DEPOSIT_BASE_DIRS },
|
|
37
|
-
* );
|
|
38
|
-
* // compiled.bytecode[0] -- 132 bytes for this spec
|
|
39
|
-
* ```
|
|
40
|
-
*
|
|
41
|
-
* ## Starter templates (eleven; see `templates.ts` for the full registry)
|
|
42
|
-
*
|
|
43
|
-
* - `aave-v3:supply` / `aave-v3:withdraw`, `spark:supply` / `spark:withdraw` — Aave-v3-shaped
|
|
44
|
-
* `Pool.supply/withdraw`; Spark is a verified Aave-v3 fork with the identical selector, kept as
|
|
45
|
-
* its own template entry for address-registry/documentation clarity.
|
|
46
|
-
* - `compound-v3:supply` — Comet's `supplyTo(dst, asset, amount)`, used unconditionally (rather
|
|
47
|
-
* than the plain 2-arg `supply`) so a beneficiary is always representable.
|
|
48
|
-
* - `euler-v2:deposit`, `erc4626:deposit` — ERC-4626-shaped `deposit(assets, receiver)`; `erc4626`
|
|
49
|
-
* is the universal catch-all for any 4626 vault reachable without its own template.
|
|
50
|
-
* - `lido:wrap` (wstETH, ERC20-funded), `lido:stake` (stETH `submit`, native-value — must be a raw
|
|
51
|
-
* call, see below), and `weth:wrap` / `weth:unwrap` (WETH9, also raw — see `skippedProtocols`).
|
|
52
|
-
*
|
|
53
|
-
* ## Native vs ERC20 — why this is the one place E4.2 differs from E4.1's shape
|
|
54
|
-
*
|
|
55
|
-
* A TYPED ABI binding can never attach ETH: the compiler's non-view external-call path hardcodes
|
|
56
|
-
* `value = 0` (`compiler/src/processor/expression.ts`'s `processContractCall`), and there is no
|
|
57
|
-
* `.value()`/`{value:}` syntax anywhere in SauceScript. The only way to attach value is the raw
|
|
58
|
-
* builtin `evm.call(target, value, calldata)`. So every
|
|
59
|
-
* `funding: "native-value"` template (`weth:wrap`, `lido:stake`) emits a raw call instead of a
|
|
60
|
-
* typed one — `WETH.deposit(){value}` becomes
|
|
61
|
-
* `evm.call(<weth>, <amount>, hex`d0e30db0`)`. `weth:unwrap` is
|
|
62
|
-
* ALSO a raw call (no vendored ABI exists for WETH at all — see below) but attaches no value; its
|
|
63
|
-
* amount rides as an `abi.encode`d calldata word instead.
|
|
64
|
-
*
|
|
65
|
-
* ## `skippedProtocols` — what was left out, and why
|
|
66
|
-
*
|
|
67
|
-
* - **WETH has NO vendored SDK ABI anywhere** (there is no `weth`/`wrapped-native` protocol slug
|
|
68
|
-
* among the SDK's ~130 entries, and `sdk/src/artifacts/` — `.gitignore`d, engine artifacts only —
|
|
69
|
-
* could not host a hand-added one even if invented). Both WETH templates therefore use the raw
|
|
70
|
-
* `evm.call` path with WETH9's two well-known selectors as SDK constants, forced anyway for
|
|
71
|
-
* `wrap` (native value) and costing nothing for `unwrap`. The selectors are pinned in
|
|
72
|
-
* `sdk/test/deposit.test.ts` against `toFunctionSelector`, so they cannot silently rot.
|
|
73
|
-
* - **`morpho-blue`'s `supply`** really does exist in the vendored ABI and does compile, but is
|
|
74
|
-
* deliberately NOT registered: its argument list mixes a static 5-field `marketParams` tuple with
|
|
75
|
-
* a dynamic `bytes data` field — a shape nothing in this repo has executed on-chain, against the
|
|
76
|
-
* backdrop of a recorded, still-open v12 all-dynamic `abi.encode` head/tail framing bug — and
|
|
77
|
-
* `supply` is assets-XOR-shares and market-keyed, which needs its own spec surface, not the flat
|
|
78
|
-
* `{token, amount, beneficiary}` shape this module is scoped to.
|
|
79
|
-
* - **Also considered, left out:** `euler-v2` `EVCABI.enableCollateral/enableController` (position
|
|
80
|
-
* management, not a deposit); `aave-v2`'s `LendingPoolABI.deposit` (a 5-line alias of the
|
|
81
|
-
* registered `aave-v3:supply`, omitted to keep the starter set to current protocols);
|
|
82
|
-
* `compound-v3`'s `withdraw`/`withdrawTo` (present, deferred so the withdraw direction lands with
|
|
83
|
-
* one shape — Aave/Spark — first); most vault-shaped protocols not registered here are already
|
|
84
|
-
* reachable through `erc4626:deposit`.
|
|
85
|
-
*
|
|
86
|
-
* ## Approvals
|
|
87
|
-
*
|
|
88
|
-
* `depositCallStatement` prepends `IERC20.at(token).approve(target, amount)` immediately before the
|
|
89
|
-
* protocol call whenever `funding === "erc20-approve"` — the ONE place this decision is made, so no
|
|
90
|
-
* template can emit its own approve or forget one. The spender is always the template's own
|
|
91
|
-
* `target`. `approvalPolicy` (default `"exact"`) may be `"none"` (skip — the token is already
|
|
92
|
-
* approved) or `"max"` (approve `2n**256n - 1n`; NOT the default, since a cook's approval outlives
|
|
93
|
-
* the cook — a lingering unlimited allowance is a real residual-risk change, not a gas
|
|
94
|
-
* micro-optimization). No allowance CHECK is ever emitted (a read-then-branch inside a single
|
|
95
|
-
* atomic cook is pure gas).
|
|
96
|
-
*
|
|
97
|
-
* ## Packaging note
|
|
98
|
-
*
|
|
99
|
-
* `DEPOSIT_BASE_DIRS`'s protocol-registry entry depends on the root `package.json` `files` list
|
|
100
|
-
* shipping `sdk/src/protocols` verbatim in the published package — true today, but nothing in this
|
|
101
|
-
* module enforces it going forward.
|
|
102
|
-
*
|
|
103
|
-
* See `docs/plans/2026-08-08-universal-interfaces-epic.md` for the wider epic this is E4.2 of.
|
|
2
|
+
* EVM deposit, withdrawal, staking, and wrapping builders for `@eco-incorp/sauce`.
|
|
3
|
+
*
|
|
4
|
+
* `toDeposit` normalizes a specification against the templates in `templates.ts`.
|
|
5
|
+
* `depositSource` emits a complete program; `depositCallStatement` emits a block for composition.
|
|
6
|
+
* These helpers construct source synchronously and do not compile or send transactions.
|
|
7
|
+
*
|
|
8
|
+
* Programs call the protocol directly. ERC-20-funded templates prepend an approval to the target;
|
|
9
|
+
* native-funded templates attach value with `evm.call(target, value, calldata)`. The executing Pot
|
|
10
|
+
* must hold the assets. WETH wrapping and unwrapping use their raw selectors.
|
|
11
|
+
*
|
|
12
|
+
* Compile generated source with `routes.compileSauceRoute`, supplying both `pot` and `engine`
|
|
13
|
+
* and `baseDirs: [...deposit.DEPOSIT_BASE_DIRS]`. The route compiler supplies a `void` annotation
|
|
14
|
+
* for a falling-through entry. `swapThenDepositSource` combines swaps and deposits in one program;
|
|
15
|
+
* compile that form with `deposit.COMPOSED_BASE_DIRS`.
|
|
16
|
+
*
|
|
17
|
+
* Query `listDepositTemplates()` for supported protocol/action pairs. Templates include Aave and
|
|
18
|
+
* Spark supply/withdrawal, Compound V3 supply, Euler/ERC-4626 deposits, Lido operations, and WETH
|
|
19
|
+
* wrapping/unwrapping. The registry does not cover every operation in the protocol catalog.
|
|
20
|
+
*
|
|
21
|
+
* The default approval policy is `exact`; `none` skips the approval and `max` grants the maximum
|
|
22
|
+
* allowance. Approvals persist after the cook. The default beneficiary is `ctx.self()` when the
|
|
23
|
+
* template supports a beneficiary. Runtime `balance` reads native ETH for native-funded templates,
|
|
24
|
+
* WETH at `target` for unwrapping, or the supplied `token` otherwise. `delta` measures that same
|
|
25
|
+
* balance against the pre-swap snapshot provided by `swapThenDepositSource`.
|
|
26
|
+
* For Aave/Spark withdrawals, use fixed amounts or `amount: "max"`: the runtime balance is the
|
|
27
|
+
* underlying token held by the Pot, not its supplied position.
|
|
28
|
+
*
|
|
29
|
+
* See `docs/guides/builders-and-actions.md` for public usage and funding requirements.
|
|
104
30
|
*/
|
|
105
31
|
export type { Address, AddressInput, AmountInput, Hex, ApprovalPolicy, BeneficiarySupport, DepositSpec, DepositSourceSpec, DepositTemplate, ExtraFieldSpec, Funding, NormalizedDeposit, SkippedProtocolNote, } from "./types.js";
|
|
106
32
|
export { DEPOSIT_TEMPLATES, depositTemplateFor, listDepositTemplates } from "./templates.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deposit/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/deposit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,YAAY,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,GAAG,EACH,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,OAAO,EACP,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC7F,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deposit/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deposit/index.ts"],"names":[],"mappings":"AA8CA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG7F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
|
|
@@ -10,7 +10,7 @@ import type { DepositSpec, NormalizedDeposit } from "./types.js";
|
|
|
10
10
|
* checks `allowsMaxAmount`).
|
|
11
11
|
*
|
|
12
12
|
* Throws (never emits a program that would misbehave on-chain) for: an unknown `protocol:action`;
|
|
13
|
-
* `token` supplied to a
|
|
13
|
+
* `token` supplied to a raw-call template or omitted from a typed-ABI template;
|
|
14
14
|
* `beneficiary` supplied to a `beneficiary: "unsupported"` template; `amount: "max"` on a template
|
|
15
15
|
* with `allowsMaxAmount: false`; an unrecognized `extra` field name; an `amount` given as a `number`
|
|
16
16
|
* that is not a safe integer (past 2^53-1 pass a bigint or a string, since the double has already
|
|
@@ -27,7 +27,7 @@ function toBigIntStrict(value, label) {
|
|
|
27
27
|
* checks `allowsMaxAmount`).
|
|
28
28
|
*
|
|
29
29
|
* Throws (never emits a program that would misbehave on-chain) for: an unknown `protocol:action`;
|
|
30
|
-
* `token` supplied to a
|
|
30
|
+
* `token` supplied to a raw-call template or omitted from a typed-ABI template;
|
|
31
31
|
* `beneficiary` supplied to a `beneficiary: "unsupported"` template; `amount: "max"` on a template
|
|
32
32
|
* with `allowsMaxAmount: false`; an unrecognized `extra` field name; an `amount` given as a `number`
|
|
33
33
|
* that is not a safe integer (past 2^53-1 pass a bigint or a string, since the double has already
|
|
@@ -43,7 +43,7 @@ export function toDeposit(spec) {
|
|
|
43
43
|
// aave-v3:withdraw still names an `asset` argument).
|
|
44
44
|
if (template.binding === null) {
|
|
45
45
|
if (spec.token !== undefined) {
|
|
46
|
-
throw new Error(`toDeposit: ${spec.protocol}:${spec.action}
|
|
46
|
+
throw new Error(`toDeposit: ${spec.protocol}:${spec.action} has no separate asset parameter, so "token" must be omitted; use "target" for the called contract`);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
else if (spec.token === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/deposit/params.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGpD,SAAS,eAAe,CAAC,KAAmB,EAAE,MAAc;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,KAAkB,EAAE,KAAa;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,SAAS,CACvB,IAA2F;IAE3F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhE,wFAAwF;IACxF,yFAAyF;IACzF,4FAA4F;IAC5F,sFAAsF;IACtF,qDAAqD;IACrD,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/deposit/params.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ export declare const COMPOSED_BASE_DIRS: readonly string[];
|
|
|
28
28
|
*/
|
|
29
29
|
export declare function depositCallStatement(spec: DepositSourceSpec, varSuffix?: string): string;
|
|
30
30
|
/** The import lines a `depositSource(specs)` program needs: each resolved template's own
|
|
31
|
-
* `imports`, plus `IERC20` iff any spec needs an
|
|
31
|
+
* `imports`, plus `IERC20` iff any spec needs an approval or an ERC20 balance/delta read. De-duped by
|
|
32
32
|
* exact line, in first-seen order (`IERC20` first, matching `swap`'s own ordering convention). */
|
|
33
33
|
export declare function depositImportLines(specs: DepositSourceSpec | readonly DepositSourceSpec[]): readonly string[];
|
|
34
34
|
export interface DepositSourceOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/deposit/source.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAe,iBAAiB,EAAqB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/deposit/source.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAe,iBAAiB,EAAqB,MAAM,YAAY,CAAC;AAKpF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAG9C,CAAC;AAEF;qBACqB;AACrB,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAE/C,CAAC;AA4DF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,EAAE,SAAS,SAAK,GAAG,MAAM,CASpF;AAED;;mGAEmG;AACnG,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,GACtD,SAAS,MAAM,EAAE,CAqBnB;AAED,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iGAAiG;IACjG,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AASD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,EACtD,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CASR;AAED,MAAM,WAAW,sBAAsB;IACrC,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iGAAiG;IACjG,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,EACjD,QAAQ,EAAE,iBAAiB,GAAG,SAAS,iBAAiB,EAAE,EAC1D,IAAI,GAAE,sBAA2B,GAChC,MAAM,CAwDR"}
|
|
@@ -10,6 +10,7 @@ import { SWAP_BASE_DIRS, swapCallStatement, swapImportLines } from "../swap/sour
|
|
|
10
10
|
import { formatBigint } from "./format.js";
|
|
11
11
|
import { toDeposit } from "./params.js";
|
|
12
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const MAX_UINT256 = (1n << 256n) - 1n;
|
|
13
14
|
/**
|
|
14
15
|
* `baseDirs` for compiling a `depositSource`/`depositCallStatement` program. Two entries, because
|
|
15
16
|
* (unlike `swap`, whose only import is the engine-vendored `ISauceRouter`) a deposit template's
|
|
@@ -38,9 +39,14 @@ const IERC20_IMPORT = `import { IERC20 } from "./artifacts/IERC20.json";`;
|
|
|
38
39
|
function needsIerc20Import(d) {
|
|
39
40
|
if (d.template.funding === "erc20-approve" && d.approvalPolicy !== "none")
|
|
40
41
|
return true;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
return d.template.funding !== "native-value" && (d.amount === "balance" || d.amount === "delta");
|
|
43
|
+
}
|
|
44
|
+
function balanceExpression(deposit) {
|
|
45
|
+
if (deposit.template.funding === "native-value")
|
|
46
|
+
return "ctx.selfBalance()";
|
|
47
|
+
// WETH unwrap reads the target token itself; typed templates name their asset separately.
|
|
48
|
+
const token = deposit.token ?? deposit.target;
|
|
49
|
+
return `IERC20.at(${formatBigint(token)}).balanceOf(ctx.self())`;
|
|
44
50
|
}
|
|
45
51
|
/** The approve line(s) for a normalized deposit whose amount has already resolved to `amountExpr`
|
|
46
52
|
* (a literal or a bound identifier) — the ONE place `funding`/`approvalPolicy` is consulted, so no
|
|
@@ -50,7 +56,7 @@ function approveLines(d, amountExpr) {
|
|
|
50
56
|
return [];
|
|
51
57
|
if (d.token === null)
|
|
52
58
|
throw new Error("deposit: unreachable — erc20-approve template without a token");
|
|
53
|
-
const approveAmount = d.approvalPolicy === "max" ?
|
|
59
|
+
const approveAmount = d.approvalPolicy === "max" ? formatBigint(MAX_UINT256) : amountExpr;
|
|
54
60
|
return [
|
|
55
61
|
`IERC20.at(${formatBigint(d.token)}).approve(${formatBigint(d.target)}, ${approveAmount});`,
|
|
56
62
|
];
|
|
@@ -64,17 +70,15 @@ function resolveAmountExpr(d, varSuffix) {
|
|
|
64
70
|
throw new Error(`depositCallStatement: amount "delta" is only meaningful inside swapThenDepositSource (it needs a pre-swap balance snapshot) — ${d.template.protocol}:${d.template.action}`);
|
|
65
71
|
}
|
|
66
72
|
if (d.amount === "max") {
|
|
67
|
-
return { pre: [], amountExpr:
|
|
73
|
+
return { pre: [], amountExpr: formatBigint(MAX_UINT256) };
|
|
68
74
|
}
|
|
69
75
|
if (d.amount === "balance") {
|
|
70
|
-
if (d.template.
|
|
71
|
-
return { pre: [], amountExpr:
|
|
76
|
+
if (d.template.funding === "native-value") {
|
|
77
|
+
return { pre: [], amountExpr: balanceExpression(d) };
|
|
72
78
|
}
|
|
73
|
-
if (d.token === null)
|
|
74
|
-
throw new Error("deposit: unreachable — erc20 template without a token");
|
|
75
79
|
const varName = `depositAmt${varSuffix}`;
|
|
76
80
|
return {
|
|
77
|
-
pre: [`const ${varName} =
|
|
81
|
+
pre: [`const ${varName} = ${balanceExpression(d)};`],
|
|
78
82
|
amountExpr: varName,
|
|
79
83
|
};
|
|
80
84
|
}
|
|
@@ -98,7 +102,7 @@ export function depositCallStatement(spec, varSuffix = "") {
|
|
|
98
102
|
return lines.join("\n");
|
|
99
103
|
}
|
|
100
104
|
/** The import lines a `depositSource(specs)` program needs: each resolved template's own
|
|
101
|
-
* `imports`, plus `IERC20` iff any spec needs an
|
|
105
|
+
* `imports`, plus `IERC20` iff any spec needs an approval or an ERC20 balance/delta read. De-duped by
|
|
102
106
|
* exact line, in first-seen order (`IERC20` first, matching `swap`'s own ordering convention). */
|
|
103
107
|
export function depositImportLines(specs) {
|
|
104
108
|
const list = Array.isArray(specs) ? specs : [specs];
|
|
@@ -180,17 +184,6 @@ export function swapThenDepositSource(swaps, deposits, opts = {}) {
|
|
|
180
184
|
importLines.push(line);
|
|
181
185
|
}
|
|
182
186
|
}
|
|
183
|
-
// A "delta" deposit needs a balance read even if depositImportLines (which never sees "delta"
|
|
184
|
-
// amounts as needing one — it only special-cases "balance") didn't already add it.
|
|
185
|
-
const needsIerc20ForDelta = depositList.some((d) => {
|
|
186
|
-
if (d.amount !== "delta")
|
|
187
|
-
return false;
|
|
188
|
-
const normalized = toDeposit({ ...d, amount: 0n });
|
|
189
|
-
return normalized.template.binding !== null;
|
|
190
|
-
});
|
|
191
|
-
if (needsIerc20ForDelta && !seen.has(IERC20_IMPORT)) {
|
|
192
|
-
importLines.unshift(IERC20_IMPORT);
|
|
193
|
-
}
|
|
194
187
|
const swapBlock = swapList.map(swapCallStatement).join("\n");
|
|
195
188
|
const preLines = [];
|
|
196
189
|
const postLines = [];
|
|
@@ -200,17 +193,9 @@ export function swapThenDepositSource(swaps, deposits, opts = {}) {
|
|
|
200
193
|
return;
|
|
201
194
|
const normalized = toDeposit({ ...d, amount: 0n });
|
|
202
195
|
const varBase = `deposit${i}`;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
if (normalized.token === null)
|
|
209
|
-
throw new Error("deposit: unreachable — erc20 template without a token");
|
|
210
|
-
const tokenLit = formatBigint(normalized.token);
|
|
211
|
-
preLines.push(`const ${varBase}Pre = IERC20.at(${tokenLit}).balanceOf(ctx.self());`);
|
|
212
|
-
postLines.push(`const ${varBase}Post = IERC20.at(${tokenLit}).balanceOf(ctx.self());`);
|
|
213
|
-
}
|
|
196
|
+
const balance = balanceExpression(normalized);
|
|
197
|
+
preLines.push(`const ${varBase}Pre = ${balance};`);
|
|
198
|
+
postLines.push(`const ${varBase}Post = ${balance};`);
|
|
214
199
|
postLines.push(`const ${varBase}Amt = ${varBase}Post - ${varBase}Pre;`);
|
|
215
200
|
deltaAmountExprs.set(i, `${varBase}Amt`);
|
|
216
201
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/deposit/source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/deposit/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,8 +34,8 @@ export interface ExtraFieldSpec {
|
|
|
34
34
|
* The chain-agnostic deposit SPEC a caller builds — the input to {@link toDeposit} /
|
|
35
35
|
* `depositCallStatement` / `depositSource`.
|
|
36
36
|
*
|
|
37
|
-
* `token`
|
|
38
|
-
*
|
|
37
|
+
* `token` names the asset for a typed-ABI template. Omit it for WETH wrap/unwrap and Lido stake;
|
|
38
|
+
* WETH unwrap uses `target` as its token address, while wrap and stake use native ETH.
|
|
39
39
|
* `beneficiary` defaults to `ctx.self()` and must be omitted on a `beneficiary: "unsupported"`
|
|
40
40
|
* template (every such protocol credits `msg.sender` unconditionally — accepting one would silently
|
|
41
41
|
* send the position to the wrong account).
|
|
@@ -48,7 +48,7 @@ export interface DepositSpec {
|
|
|
48
48
|
action: string;
|
|
49
49
|
/** The contract this deposit calls into (the Aave Pool, the Comet, the vault, WETH9, stETH, …). */
|
|
50
50
|
target: AddressInput;
|
|
51
|
-
/** Required for
|
|
51
|
+
/** Required for typed-ABI templates; omit for WETH wrap/unwrap and Lido stake. */
|
|
52
52
|
token?: AddressInput;
|
|
53
53
|
amount: AmountInput;
|
|
54
54
|
/** Defaults to `ctx.self()`. Must be omitted on a `beneficiary: "unsupported"` template. */
|
|
@@ -63,7 +63,8 @@ export interface DepositSpec {
|
|
|
63
63
|
* {@link DepositSpec}:
|
|
64
64
|
*
|
|
65
65
|
* - `amount: "balance"` — emit a RUNTIME balance read instead of a baked-in literal (`IERC20.
|
|
66
|
-
* balanceOf(ctx.self())`
|
|
66
|
+
* balanceOf(ctx.self())` on `token` or the WETH unwrap `target`, `ctx.selfBalance()` for a
|
|
67
|
+
* native-funded template) — the shape
|
|
67
68
|
* a swap-then-deposit program needs when the deposit amount is an earlier leg's (unknown at
|
|
68
69
|
* compile time) output.
|
|
69
70
|
* - `amount: "delta"` — only meaningful inside `swapThenDepositSource` (it needs a pre-swap balance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/deposit/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,cAAc,GAAG,MAAM,CAAC;AAEhE,gGAAgG;AAChG,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,aAAa,CAAC;AAE7D,gFAAgF;AAChF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAEtD,0FAA0F;AAC1F,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,iGAAiG;IACjG,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B;yFACqF;IACrF,QAAQ,EAAE,MAAM,CAAC;IACjB,sGAAsG;IACtG,MAAM,EAAE,MAAM,CAAC;IACf,mGAAmG;IACnG,MAAM,EAAE,YAAY,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/deposit/types.ts"],"names":[],"mappings":"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"}
|
package/sdk/dist/evm/engine.d.ts
CHANGED
|
@@ -39,6 +39,14 @@ export declare const v12PotAbi: readonly [{
|
|
|
39
39
|
readonly outputs: readonly [{
|
|
40
40
|
readonly type: "address";
|
|
41
41
|
}];
|
|
42
|
+
}, {
|
|
43
|
+
readonly name: "kitchen";
|
|
44
|
+
readonly type: "function";
|
|
45
|
+
readonly stateMutability: "view";
|
|
46
|
+
readonly inputs: readonly [];
|
|
47
|
+
readonly outputs: readonly [{
|
|
48
|
+
readonly type: "address";
|
|
49
|
+
}];
|
|
42
50
|
}, {
|
|
43
51
|
readonly name: "router";
|
|
44
52
|
readonly type: "function";
|
|
@@ -78,6 +86,14 @@ export declare const v12KitchenAbi: readonly [{
|
|
|
78
86
|
readonly outputs: readonly [{
|
|
79
87
|
readonly type: "address";
|
|
80
88
|
}];
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "executionFee";
|
|
91
|
+
readonly type: "function";
|
|
92
|
+
readonly stateMutability: "view";
|
|
93
|
+
readonly inputs: readonly [];
|
|
94
|
+
readonly outputs: readonly [{
|
|
95
|
+
readonly type: "uint256";
|
|
96
|
+
}];
|
|
81
97
|
}, {
|
|
82
98
|
readonly name: "router";
|
|
83
99
|
readonly type: "function";
|
|
@@ -119,6 +135,14 @@ export declare const v12Pot: {
|
|
|
119
135
|
readonly outputs: readonly [{
|
|
120
136
|
readonly type: "address";
|
|
121
137
|
}];
|
|
138
|
+
}, {
|
|
139
|
+
readonly name: "kitchen";
|
|
140
|
+
readonly type: "function";
|
|
141
|
+
readonly stateMutability: "view";
|
|
142
|
+
readonly inputs: readonly [];
|
|
143
|
+
readonly outputs: readonly [{
|
|
144
|
+
readonly type: "address";
|
|
145
|
+
}];
|
|
122
146
|
}, {
|
|
123
147
|
readonly name: "router";
|
|
124
148
|
readonly type: "function";
|
|
@@ -168,6 +192,14 @@ export declare const v12Kitchen: {
|
|
|
168
192
|
readonly outputs: readonly [{
|
|
169
193
|
readonly type: "address";
|
|
170
194
|
}];
|
|
195
|
+
}, {
|
|
196
|
+
readonly name: "executionFee";
|
|
197
|
+
readonly type: "function";
|
|
198
|
+
readonly stateMutability: "view";
|
|
199
|
+
readonly inputs: readonly [];
|
|
200
|
+
readonly outputs: readonly [{
|
|
201
|
+
readonly type: "uint256";
|
|
202
|
+
}];
|
|
171
203
|
}, {
|
|
172
204
|
readonly name: "router";
|
|
173
205
|
readonly type: "function";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/evm/engine.ts"],"names":[],"mappings":"AAaA,OAAO,EAAgC,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAE5E;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/evm/engine.ts"],"names":[],"mappings":"AAaA,OAAO,EAAgC,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAE5E;;;;;;;;;GASG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMpB,CAAC;AAEH,kGAAkG;AAClG,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKxB,CAAC;AAEH,4FAA4F;AAC5F,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEjB;;;;;;OAMG;kCACkB,OAAO,WAAW,GAAG,KAAG,GAAG;CAExC,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAErB,iGAAiG;sCACxE,OAAO,QAAQ,GAAG,KAAG,GAAG;IAEjD,yFAAyF;uCAC/D,OAAO,QAAQ,GAAG,KAAG,GAAG;CAE1C,CAAC"}
|