@dev.sail.money/sailor 0.0.2-20 → 0.0.2-22
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/examples/permissions/BoundedApproveAndCallBatch.sol +179 -0
- package/examples/permissions/BoundedBet_Limitless_Base.sol +8 -7
- package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +13 -13
- package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +50 -39
- package/examples/permissions/BoundedStake_Venice_Base.sol +85 -0
- package/examples/permissions/BoundedSupply_AaveV3_Arbitrum.sol +84 -0
- package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +11 -9
- package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +10 -8
- package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +6 -6
- package/examples/permissions/BoundedVault_ERC4626_Base.sol +97 -0
- package/examples/permissions/README.md +29 -2
- package/examples/permissions/interfaces/IBatchPermission.sol +38 -0
- package/package.json +1 -1
- package/packages/cli/dist/index.cjs +3288 -2394
- package/packages/cli/dist/server.cjs +110 -140
- package/packages/sdk/dist/deployments.d.ts +14 -7
- package/packages/sdk/dist/deployments.d.ts.map +1 -1
- package/packages/sdk/dist/deployments.js +132 -141
- package/packages/sdk/dist/deployments.js.map +1 -1
- package/packages/sdk/dist/index.d.ts +1 -1
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js +1 -1
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/dist/intelligence.d.ts +1 -1
- package/packages/sdk/dist/intelligence.js +1 -1
- package/packages/sdk/dist/safe.d.ts +83 -0
- package/packages/sdk/dist/safe.d.ts.map +1 -1
- package/packages/sdk/dist/safe.js +92 -1
- package/packages/sdk/dist/safe.js.map +1 -1
- package/packages/ui/dist/assets/{add-BrylwREe.js → add-C--RBwJe.js} +1 -1
- package/packages/ui/dist/assets/{all-wallets-DGR35dSU.js → all-wallets-_xwd_eso.js} +1 -1
- package/packages/ui/dist/assets/{app-store-BpM1x6bI.js → app-store-CIQsK1zU.js} +1 -1
- package/packages/ui/dist/assets/{apple-xvs7JX23.js → apple-BdlAnnmO.js} +1 -1
- package/packages/ui/dist/assets/{arrow-bottom-CF6xPQbH.js → arrow-bottom-B5p_6Dat.js} +1 -1
- package/packages/ui/dist/assets/{arrow-bottom-circle-r0A6jlRF.js → arrow-bottom-circle-D7c6JPTF.js} +1 -1
- package/packages/ui/dist/assets/{arrow-left-Ce6MJKC0.js → arrow-left-SA4NpEnP.js} +1 -1
- package/packages/ui/dist/assets/{arrow-right-CiCNIsI0.js → arrow-right-mOJNWujS.js} +1 -1
- package/packages/ui/dist/assets/{arrow-top-TI5RQSIc.js → arrow-top-CvPVVpHl.js} +1 -1
- package/packages/ui/dist/assets/{bank-CmrK2TRa.js → bank-B2j2rPm9.js} +1 -1
- package/packages/ui/dist/assets/{basic-BhoXad_6.js → basic-Bw6cXOlk.js} +1 -1
- package/packages/ui/dist/assets/{browser-BWCT-XSy.js → browser-CUSNF__N.js} +1 -1
- package/packages/ui/dist/assets/{card-v1fl0QNj.js → card-CpKLox49.js} +1 -1
- package/packages/ui/dist/assets/{ccip-BkGqsEgG.js → ccip-XB9iQjXB.js} +1 -1
- package/packages/ui/dist/assets/{checkmark-CiQnNFee.js → checkmark-BRpXeSCK.js} +1 -1
- package/packages/ui/dist/assets/{checkmark-bold-B63f9SW6.js → checkmark-bold-BkPvoqxo.js} +1 -1
- package/packages/ui/dist/assets/{chevron-bottom-DpBpDiYb.js → chevron-bottom-CtK0W2av.js} +1 -1
- package/packages/ui/dist/assets/{chevron-left-o_G-ctyg.js → chevron-left-NayfPMDy.js} +1 -1
- package/packages/ui/dist/assets/{chevron-right-I9LAJ9De.js → chevron-right-BPU2hCfA.js} +1 -1
- package/packages/ui/dist/assets/{chevron-top-JRwGHMKH.js → chevron-top-CTXwC4nM.js} +1 -1
- package/packages/ui/dist/assets/{chrome-store-Cw9skzSt.js → chrome-store-eWIk0-YZ.js} +1 -1
- package/packages/ui/dist/assets/{clock-BK_Lu0EB.js → clock-VmYiq5jB.js} +1 -1
- package/packages/ui/dist/assets/{close-DWFjOyu7.js → close-NfBukMzW.js} +1 -1
- package/packages/ui/dist/assets/{coinPlaceholder-gi3wDlPb.js → coinPlaceholder-BWOeJc6j.js} +1 -1
- package/packages/ui/dist/assets/{compass-Dlpsn_k-.js → compass-oRk8W3iM.js} +1 -1
- package/packages/ui/dist/assets/{copy-BzNKdXeG.js → copy-GcYQZOsF.js} +1 -1
- package/packages/ui/dist/assets/{core-BN9UnMip.js → core-B_rvnvkC.js} +3 -3
- package/packages/ui/dist/assets/cursor-BAViuJWh.js +3 -0
- package/packages/ui/dist/assets/{cursor-transparent-B3RZ6Udt.js → cursor-transparent-CGox3wZ-.js} +1 -1
- package/packages/ui/dist/assets/{desktop-rngwE1T9.js → desktop-DU4yyiV4.js} +1 -1
- package/packages/ui/dist/assets/{disconnect-_DzDsvsZ.js → disconnect-CJm9NnxK.js} +1 -1
- package/packages/ui/dist/assets/{discord-B9qQB66m.js → discord-MxDL8Eq6.js} +1 -1
- package/packages/ui/dist/assets/{etherscan-D7hlQ8Z3.js → etherscan-CkCvlZiA.js} +1 -1
- package/packages/ui/dist/assets/{events-DrkgavVp.js → events-CkyJn32_.js} +1 -1
- package/packages/ui/dist/assets/{exclamation-triangle-iCvLVoM-.js → exclamation-triangle-hH1JdYAZ.js} +1 -1
- package/packages/ui/dist/assets/{extension-CjGcOeuB.js → extension-DTMrXG5m.js} +1 -1
- package/packages/ui/dist/assets/{external-link-DTkyjOr4.js → external-link-GSwn5MzD.js} +1 -1
- package/packages/ui/dist/assets/{facebook-DoO2uCiE.js → facebook-Vw_uyzaE.js} +1 -1
- package/packages/ui/dist/assets/{fallback-Y8-BiCNG.js → fallback-BL3U4ZRT.js} +1 -1
- package/packages/ui/dist/assets/{farcaster-Dyz6wiZi.js → farcaster-F-_di36M.js} +1 -1
- package/packages/ui/dist/assets/{filters-Bd5PxMiz.js → filters-DQzcstDl.js} +1 -1
- package/packages/ui/dist/assets/{github-CmqSJCq6.js → github-BSq3_rEd.js} +1 -1
- package/packages/ui/dist/assets/{google-i_MKKqQP.js → google-BU4QXiDS.js} +1 -1
- package/packages/ui/dist/assets/{help-circle-_ER8-V35.js → help-circle-CuF4iPyF.js} +1 -1
- package/packages/ui/dist/assets/{id-D2adRwvh.js → id-BQWlv0a_.js} +1 -1
- package/packages/ui/dist/assets/{image-q_rpi7cn.js → image-BPNySDPo.js} +1 -1
- package/packages/ui/dist/assets/{index-CzevBC-K.js → index-BMPQOOgv.js} +1 -1
- package/packages/ui/dist/assets/{index-Bdl623mb.js → index-CMyY4FOR.js} +3 -3
- package/packages/ui/dist/assets/{index-BLD08Nrb.js → index-CsbiKM3b.js} +1 -1
- package/packages/ui/dist/assets/{index-BwoSt5mL.js → index-D0SPxlSM.js} +1 -1
- package/packages/ui/dist/assets/{index-B6Wb3mjQ.js → index-D2wgBslE.js} +1 -1
- package/packages/ui/dist/assets/{index-DJQDBPts.js → index-Dc9_WV0G.js} +76 -76
- package/packages/ui/dist/assets/{index.es-D6UPoR2j.js → index.es-CvyDIsY4.js} +4 -4
- package/packages/ui/dist/assets/{info-Ck7GYYmo.js → info-D20yslek.js} +1 -1
- package/packages/ui/dist/assets/{info-circle-DtA5FQXd.js → info-circle-BEjvYTHa.js} +1 -1
- package/packages/ui/dist/assets/{lightbulb-DR3jyzkK.js → lightbulb-DfvLi5mQ.js} +1 -1
- package/packages/ui/dist/assets/{mail-BK_pW_tL.js → mail-CkgaIJAd.js} +1 -1
- package/packages/ui/dist/assets/{metamask-sdk-IZbe4GJ_.js → metamask-sdk-O-IBvvGq.js} +1 -1
- package/packages/ui/dist/assets/{mobile-CLG-4Yut.js → mobile-CGc88WfG.js} +1 -1
- package/packages/ui/dist/assets/{more-BBqkkVbe.js → more-DnX8wlTn.js} +1 -1
- package/packages/ui/dist/assets/{network-placeholder-kf7EWfmj.js → network-placeholder-DDrgA4a3.js} +1 -1
- package/packages/ui/dist/assets/{nftPlaceholder-BEFwtFPl.js → nftPlaceholder-DhHWPuD3.js} +1 -1
- package/packages/ui/dist/assets/{off-DKjJt-l0.js → off-D1CsYvPQ.js} +1 -1
- package/packages/ui/dist/assets/{parseSignature-KWl5TpQf.js → parseSignature-BlZUbtEc.js} +1 -1
- package/packages/ui/dist/assets/{play-store-DBVkWbwG.js → play-store-Dbkk8PTZ.js} +1 -1
- package/packages/ui/dist/assets/{plus-BQzagKUL.js → plus-B8jXpls3.js} +1 -1
- package/packages/ui/dist/assets/{qr-code-DVwEgFEM.js → qr-code-CDuJ3ftj.js} +1 -1
- package/packages/ui/dist/assets/{recycle-horizontal-D2E6B1Kh.js → recycle-horizontal-ZFGjaHsZ.js} +1 -1
- package/packages/ui/dist/assets/{refresh-CUavEsqn.js → refresh-D0rMEDtF.js} +1 -1
- package/packages/ui/dist/assets/{reown-logo-mAAAaf4E.js → reown-logo-NlCNVmgd.js} +1 -1
- package/packages/ui/dist/assets/{search-BAnb6iT_.js → search-CrJAA2qW.js} +1 -1
- package/packages/ui/dist/assets/{secp256k1-CBUZgsE-.js → secp256k1-mJj6W2AI.js} +1 -1
- package/packages/ui/dist/assets/{send-BYjfitxS.js → send-C7CoRziM.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontal-C-4qjxwd.js → swapHorizontal-fD3wbCGJ.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalBold-zA-cWlfT.js → swapHorizontalBold-Cc-jQ6as.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalMedium-gIIVXh3I.js → swapHorizontalMedium-DlJW6uX1.js} +1 -1
- package/packages/ui/dist/assets/{swapHorizontalRoundedBold-CwtQpc9E.js → swapHorizontalRoundedBold-1VHOerLO.js} +1 -1
- package/packages/ui/dist/assets/{swapVertical-wrdYsAkk.js → swapVertical-CKaRlkZK.js} +1 -1
- package/packages/ui/dist/assets/{telegram-3aqbBSMX.js → telegram-DnCYed4D.js} +1 -1
- package/packages/ui/dist/assets/{three-dots-BNRpZX3L.js → three-dots-BFluoxma.js} +1 -1
- package/packages/ui/dist/assets/{twitch-Bya9c1W1.js → twitch-BXGv98S9.js} +1 -1
- package/packages/ui/dist/assets/{twitterIcon-1thOj_Z5.js → twitterIcon-C6IdXEe5.js} +1 -1
- package/packages/ui/dist/assets/{verify-D8ggGSfI.js → verify-D_QGyiLQ.js} +1 -1
- package/packages/ui/dist/assets/{verify-filled-CeZM7920.js → verify-filled-DIW8QKL9.js} +1 -1
- package/packages/ui/dist/assets/{w3m-modal-CUwD6iiA.js → w3m-modal-Do9U160p.js} +1 -1
- package/packages/ui/dist/assets/{wallet-Baz0DeMJ.js → wallet-CcARZnOx.js} +1 -1
- package/packages/ui/dist/assets/{wallet-placeholder-3yAnyuC4.js → wallet-placeholder-X1coFzQa.js} +1 -1
- package/packages/ui/dist/assets/{walletconnect-CfkgbqAq.js → walletconnect-Glte9ia7.js} +1 -1
- package/packages/ui/dist/assets/{warning-circle-BfOqu3HN.js → warning-circle-j-3V4KTo.js} +1 -1
- package/packages/ui/dist/assets/{x-CxAcJv-O.js → x-Bcc52c_T.js} +1 -1
- package/packages/ui/dist/index.html +1 -1
- package/templates/default/AGENTS.md +20 -1
- package/packages/ui/dist/assets/cursor-BWdjWDLC.js +0 -3
|
@@ -1,172 +1,154 @@
|
|
|
1
1
|
const zero = "0x0000000000000000000000000000000000000000";
|
|
2
|
+
/**
|
|
3
|
+
* CREATE2-deterministic core addresses — identical on every chain (gitCommit 1199b33,
|
|
4
|
+
* deployment mode: create2-global-salt, factory: 0x4e59b44847b379578588920cA78FbF26c0B4956C).
|
|
5
|
+
*
|
|
6
|
+
* Because kernel, safeModuleEnabler, and standardFeePolicy are the same on every chain,
|
|
7
|
+
* SailKernel.createAccount produces the same SMA address with the same owner/manager/salt
|
|
8
|
+
* on every supported chain — enabling true cross-chain deterministic SMA deployment.
|
|
9
|
+
*/
|
|
10
|
+
const CREATE2_KERNEL = "0x02ABC18B65A328de2e749F56ba79ACF2718a6659";
|
|
11
|
+
const CREATE2_GOVERNANCE = "0x7A478118715791728BDE3bc7A4D7ECfdEB89C6EC";
|
|
12
|
+
const CREATE2_TIMELOCK = "0xE48Ba8DB6d748adafD13155c3590f62e58a77f56";
|
|
13
|
+
const CREATE2_SAFE_MODULE_ENABLER = "0x7897Cb53a4be4a2eaAf46D60573C4Fd83b33fE1F";
|
|
14
|
+
const CREATE2_MANDATE_FACTORY = "0x14EDd6c2a56EfC0d71E215ab13094B9AF90543d2";
|
|
15
|
+
const CREATE2_STANDARD_FEE_POLICY = "0xe7B5901b839cFFDEd9D4108A22712C8BfdA1D80D";
|
|
16
|
+
const CREATE2_TREASURY = "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6";
|
|
2
17
|
export const sailDeployments = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
kernel: "0xf1D0F4C9893612627409948BAa9d82a01a373799",
|
|
18
|
-
permissionFactory: "0xdfF6a2272F667cDf78Af4681b9c88A219998db95",
|
|
19
|
-
standardFeePolicy: "0x05570F7973b46Eb9Ed4518422891EFC26BD58b97",
|
|
20
|
-
safeModuleEnabler: "0xB2C2B52d94412e3472C9fb2B52186eA12a935869",
|
|
21
|
-
treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
|
|
18
|
+
// ── Ethereum mainnet ─────────────────────────────────────────────────────────
|
|
19
|
+
1: {
|
|
20
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33).
|
|
21
|
+
// allowlistBootstrapped=true (genesis bootstrap), zero fees, 48h timelock.
|
|
22
|
+
chainId: 1,
|
|
23
|
+
blockNumber: 25280925,
|
|
24
|
+
deployer: CREATE2_TREASURY,
|
|
25
|
+
governance: CREATE2_GOVERNANCE,
|
|
26
|
+
timelock: CREATE2_TIMELOCK,
|
|
27
|
+
kernel: CREATE2_KERNEL,
|
|
28
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
29
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
30
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
31
|
+
treasury: CREATE2_TREASURY,
|
|
22
32
|
maxPermissionFeeWei: 1000000000000000n,
|
|
23
33
|
initialBaseFee: 0n,
|
|
24
34
|
initialComplexityRate: 0n,
|
|
25
|
-
dispatchModel: "selective",
|
|
35
|
+
dispatchModel: "selective",
|
|
26
36
|
knownTemplates: [],
|
|
27
37
|
standaloneTemplates: {},
|
|
28
38
|
},
|
|
39
|
+
// ── Base mainnet ─────────────────────────────────────────────────────────────
|
|
29
40
|
8453: {
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
// local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
|
|
34
|
-
// zero fees, onboarding live. Supersedes 0x20eff0DbE752e22655A6dAA5A94521FA06CDdE06.
|
|
35
|
-
// Only `core` was redeployed; shared/standalone permission templates are NOT yet
|
|
36
|
-
// deployed against this kernel (run the templates targets + refill the maps first).
|
|
41
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
|
|
42
|
+
// 0x6319d3dfDDe3804ba93D65752b00c52bFb05a1ab (SAIL-405 redeploy).
|
|
43
|
+
// allowlistBootstrapped=true, zero fees, 48h timelock.
|
|
37
44
|
chainId: 8453,
|
|
38
|
-
blockNumber:
|
|
39
|
-
deployer:
|
|
40
|
-
governance:
|
|
41
|
-
timelock:
|
|
42
|
-
kernel:
|
|
43
|
-
|
|
44
|
-
standardFeePolicy:
|
|
45
|
-
safeModuleEnabler:
|
|
46
|
-
treasury:
|
|
45
|
+
blockNumber: 47115338,
|
|
46
|
+
deployer: CREATE2_TREASURY,
|
|
47
|
+
governance: CREATE2_GOVERNANCE,
|
|
48
|
+
timelock: CREATE2_TIMELOCK,
|
|
49
|
+
kernel: CREATE2_KERNEL,
|
|
50
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
51
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
52
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
53
|
+
treasury: CREATE2_TREASURY,
|
|
47
54
|
maxPermissionFeeWei: 1000000000000000n,
|
|
48
55
|
initialBaseFee: 0n,
|
|
49
56
|
initialComplexityRate: 0n,
|
|
50
|
-
dispatchModel: "selective",
|
|
57
|
+
dispatchModel: "selective",
|
|
51
58
|
knownTemplates: [],
|
|
52
59
|
standaloneTemplates: {},
|
|
53
60
|
},
|
|
61
|
+
// ── Arbitrum mainnet ─────────────────────────────────────────────────────────
|
|
54
62
|
42161: {
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
// local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
|
|
59
|
-
// zero fees, onboarding live. Supersedes 0x9AF32E0C395fb31f5cA28994351F8fAE3003e125.
|
|
60
|
-
// Bootstrap was sent as a standalone tx post-core-deploy; identical end state to Base.
|
|
61
|
-
// Only `core` was redeployed; shared/standalone permission templates are NOT yet
|
|
62
|
-
// deployed against this kernel (run the templates targets + refill the maps first).
|
|
63
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
|
|
64
|
+
// 0x2716B12832DED0EF5688519c5Fe069EFc0374E02 (SAIL-405 redeploy).
|
|
65
|
+
// allowlistBootstrapped=true, zero fees, 48h timelock.
|
|
63
66
|
chainId: 42161,
|
|
64
|
-
blockNumber:
|
|
65
|
-
deployer:
|
|
66
|
-
governance:
|
|
67
|
-
timelock:
|
|
68
|
-
kernel:
|
|
69
|
-
|
|
70
|
-
standardFeePolicy:
|
|
71
|
-
safeModuleEnabler:
|
|
72
|
-
treasury:
|
|
67
|
+
blockNumber: 471736462,
|
|
68
|
+
deployer: CREATE2_TREASURY,
|
|
69
|
+
governance: CREATE2_GOVERNANCE,
|
|
70
|
+
timelock: CREATE2_TIMELOCK,
|
|
71
|
+
kernel: CREATE2_KERNEL,
|
|
72
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
73
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
74
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
75
|
+
treasury: CREATE2_TREASURY,
|
|
73
76
|
maxPermissionFeeWei: 1000000000000000n,
|
|
74
77
|
initialBaseFee: 0n,
|
|
75
78
|
initialComplexityRate: 0n,
|
|
76
|
-
dispatchModel: "selective",
|
|
79
|
+
dispatchModel: "selective",
|
|
77
80
|
knownTemplates: [],
|
|
78
81
|
standaloneTemplates: {},
|
|
79
82
|
},
|
|
83
|
+
// ── Unichain mainnet ─────────────────────────────────────────────────────────
|
|
80
84
|
130: {
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
// 0xd7d408eb…fb4c), zero fees, onboarding live without the 48h timelock.
|
|
87
|
-
// First chain to ship permission templates against the kernel.
|
|
85
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
|
|
86
|
+
// 0xD985029960a9B7C2E7E38e102C448b8b8539B156 (SAIL-406 deploy).
|
|
87
|
+
// NOTE: knownTemplates and standaloneTemplates from SAIL-406 were deployed
|
|
88
|
+
// against the old kernel 0xD985029... and are now invalid. They must be
|
|
89
|
+
// redeployed against the new kernel 0x02ABC1... and re-populated here.
|
|
88
90
|
chainId: 130,
|
|
89
|
-
blockNumber:
|
|
90
|
-
deployer:
|
|
91
|
-
governance:
|
|
92
|
-
timelock:
|
|
93
|
-
kernel:
|
|
94
|
-
|
|
95
|
-
standardFeePolicy:
|
|
96
|
-
safeModuleEnabler:
|
|
97
|
-
treasury:
|
|
91
|
+
blockNumber: 50271704,
|
|
92
|
+
deployer: CREATE2_TREASURY,
|
|
93
|
+
governance: CREATE2_GOVERNANCE,
|
|
94
|
+
timelock: CREATE2_TIMELOCK,
|
|
95
|
+
kernel: CREATE2_KERNEL,
|
|
96
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
97
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
98
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
99
|
+
treasury: CREATE2_TREASURY,
|
|
98
100
|
maxPermissionFeeWei: 1000000000000000n,
|
|
99
101
|
initialBaseFee: 0n,
|
|
100
102
|
initialComplexityRate: 0n,
|
|
101
|
-
dispatchModel: "selective",
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
description: "Allows transfers only to a pre-approved target address.",
|
|
151
|
-
},
|
|
152
|
-
],
|
|
153
|
-
standaloneTemplates: {
|
|
154
|
-
// EIP-1167 clone LOGIC addresses — the `impl` argument to
|
|
155
|
-
// PermissionFactory.deployAndAttach(account, impl, salt, initData). A clone
|
|
156
|
-
// is created and configured per account via its initialize(...).
|
|
157
|
-
azuroPrediction: "0xd48cdBB25bF0A214dEffECac3c9431650834b046",
|
|
158
|
-
boundedApprove: "0xbF7089A905081054c9dA628707f2e1EF70A7F300",
|
|
159
|
-
boundedBorrow: "0x17D466309C7E0237960f68126Cc4A109D194ac28",
|
|
160
|
-
boundedDeposit: "0xf49E304EDf806AF46E8f17740e56C1CBFad5d264",
|
|
161
|
-
boundedLiFi: "0x6a0171013FeD6B2Eda16A4dd4DB33Fa34b7F3e3f",
|
|
162
|
-
boundedSwap: "0x06696F9dd4bD0994f55b075600627Dc6E54635c9",
|
|
163
|
-
boundedWithdraw: "0xE207CfC8c2204b15ee5fD22B79472929706c7E4b",
|
|
164
|
-
gmxPerp: "0xB1bb967aC11D61C0599c8458D9B950461db5D4E9",
|
|
165
|
-
gainsNetworkPerp: "0x1297673f71A9be02bc876Dbd0ceaB3c96D268bE3",
|
|
166
|
-
limitlessPrediction: "0x2bE4280d8816626e1dea4E94A83d9334A971AF90",
|
|
167
|
-
synthetixPerp: "0x711a70B16D013a9B96Bd6733F4b3097e5787f860",
|
|
168
|
-
transferTarget: "0x8428155b6b9eea4E78b9a52c2312752eD04Baf16",
|
|
169
|
-
},
|
|
103
|
+
dispatchModel: "selective",
|
|
104
|
+
// Templates cleared: the SAIL-406 shared + standalone templates were deployed
|
|
105
|
+
// against the old kernel (0xD985029...) and are invalid against the new one.
|
|
106
|
+
// Re-populate after redeploying templates against 0x02ABC1...
|
|
107
|
+
knownTemplates: [],
|
|
108
|
+
standaloneTemplates: {},
|
|
109
|
+
},
|
|
110
|
+
// ── Base Sepolia (testnet) ───────────────────────────────────────────────────
|
|
111
|
+
84532: {
|
|
112
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33). Supersedes
|
|
113
|
+
// 0xf1D0F4C9893612627409948BAa9d82a01a373799 (SAIL-405 redeploy).
|
|
114
|
+
// allowlistBootstrapped=true, zero fees, 48h timelock.
|
|
115
|
+
chainId: 84532,
|
|
116
|
+
blockNumber: 42625843,
|
|
117
|
+
deployer: CREATE2_TREASURY,
|
|
118
|
+
governance: CREATE2_GOVERNANCE,
|
|
119
|
+
timelock: CREATE2_TIMELOCK,
|
|
120
|
+
kernel: CREATE2_KERNEL,
|
|
121
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
122
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
123
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
124
|
+
treasury: CREATE2_TREASURY,
|
|
125
|
+
maxPermissionFeeWei: 1000000000000000n,
|
|
126
|
+
initialBaseFee: 0n,
|
|
127
|
+
initialComplexityRate: 0n,
|
|
128
|
+
dispatchModel: "selective",
|
|
129
|
+
knownTemplates: [],
|
|
130
|
+
standaloneTemplates: {},
|
|
131
|
+
},
|
|
132
|
+
// ── Eth Sepolia (testnet) ────────────────────────────────────────────────────
|
|
133
|
+
11155111: {
|
|
134
|
+
// CREATE2 deterministic deploy (2026-06-09, gitCommit 1199b33).
|
|
135
|
+
// allowlistBootstrapped=true, zero fees, 48h timelock.
|
|
136
|
+
chainId: 11155111,
|
|
137
|
+
blockNumber: 11023571,
|
|
138
|
+
deployer: CREATE2_TREASURY,
|
|
139
|
+
governance: CREATE2_GOVERNANCE,
|
|
140
|
+
timelock: CREATE2_TIMELOCK,
|
|
141
|
+
kernel: CREATE2_KERNEL,
|
|
142
|
+
mandateFactory: CREATE2_MANDATE_FACTORY,
|
|
143
|
+
standardFeePolicy: CREATE2_STANDARD_FEE_POLICY,
|
|
144
|
+
safeModuleEnabler: CREATE2_SAFE_MODULE_ENABLER,
|
|
145
|
+
treasury: CREATE2_TREASURY,
|
|
146
|
+
maxPermissionFeeWei: 1000000000000000n,
|
|
147
|
+
initialBaseFee: 0n,
|
|
148
|
+
initialComplexityRate: 0n,
|
|
149
|
+
dispatchModel: "selective",
|
|
150
|
+
knownTemplates: [],
|
|
151
|
+
standaloneTemplates: {},
|
|
170
152
|
},
|
|
171
153
|
};
|
|
172
154
|
export function getSailDeployment(chainId) {
|
|
@@ -177,6 +159,14 @@ export function getSailDeployment(chainId) {
|
|
|
177
159
|
return deployment;
|
|
178
160
|
}
|
|
179
161
|
export function normalizeDeployment(input) {
|
|
162
|
+
// Guard: mandateFactory is required. Accept the legacy permissionFactory alias too,
|
|
163
|
+
// but if both are absent the config is malformed — cast-to-Address would silently
|
|
164
|
+
// produce undefined and cause a confusing runtime error far from the source.
|
|
165
|
+
if (!input.mandateFactory && !input.permissionFactory) {
|
|
166
|
+
throw new Error('normalizeDeployment: deployment config is missing "mandateFactory" ' +
|
|
167
|
+
'(and the legacy "permissionFactory" alias). ' +
|
|
168
|
+
"Add a mandateFactory address to the deployment configuration.");
|
|
169
|
+
}
|
|
180
170
|
return {
|
|
181
171
|
chainId: Number(input.chainId),
|
|
182
172
|
blockNumber: Number(input.blockNumber),
|
|
@@ -184,7 +174,8 @@ export function normalizeDeployment(input) {
|
|
|
184
174
|
governance: input.governance,
|
|
185
175
|
timelock: input.timelock,
|
|
186
176
|
kernel: input.kernel,
|
|
187
|
-
|
|
177
|
+
// Accept both names: new manifests use mandateFactory; old ones used permissionFactory.
|
|
178
|
+
mandateFactory: (input.mandateFactory ?? input.permissionFactory),
|
|
188
179
|
standardFeePolicy: input.standardFeePolicy,
|
|
189
180
|
safeModuleEnabler: input.safeModuleEnabler,
|
|
190
181
|
treasury: input.treasury,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deployments.js","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ export { SailKernelAbi } from "./abis/SailKernel.js";
|
|
|
6
6
|
export { MandateFactoryAbi } from "./abis/MandateFactory.js";
|
|
7
7
|
export { SailGovernanceAbi } from "./abis/SailGovernance.js";
|
|
8
8
|
export type { ClientMessage, ServerMessage, SerializedTypedData, SigningRequest, SigningRequestBase, SigningRequestKind, SigningResponse, SigningTxRequest, SigningTypedDataRequest, } from "./signing.js";
|
|
9
|
-
export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, } from "./safe.js";
|
|
9
|
+
export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, computeKernelBoundSalt, computeSafeProxyAddress, computeSailSmaAddress, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, safeProxyFactoryAbi, } from "./safe.js";
|
|
10
10
|
export { discoverSafesForOwner, getSafeTransactionServiceUrl } from "./discovery.js";
|
|
11
11
|
export type { CloneTemplateInfo, CloneTemplateParam, KnownTemplate, SailChainId, SailDeployment, } from "./deployments.js";
|
|
12
12
|
export { getSailDeployment, normalizeDeployment, sailDeployments, } from "./deployments.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,YAAY,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAG7D,YAAY,EACV,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AACrF,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,sBAAsB,EACtB,gCAAgC,EAChC,sCAAsC,EACtC,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -4,7 +4,7 @@ export { LocalKeyring } from "./keyring.js";
|
|
|
4
4
|
export { SailKernelAbi } from "./abis/SailKernel.js";
|
|
5
5
|
export { MandateFactoryAbi } from "./abis/MandateFactory.js";
|
|
6
6
|
export { SailGovernanceAbi } from "./abis/SailGovernance.js";
|
|
7
|
-
export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, } from "./safe.js";
|
|
7
|
+
export { SAFE_V141, buildApprovedHashSignature, buildSafeSetupInitializer, buildSetManagerExecTransaction, computeKernelBoundSalt, computeSafeProxyAddress, computeSailSmaAddress, encodeSetManager, gnosisSafeAbi, gnosisSafeExecAbi, safeModuleEnablerAbi, safeProxyFactoryAbi, } from "./safe.js";
|
|
8
8
|
export { discoverSafesForOwner, getSafeTransactionServiceUrl } from "./discovery.js";
|
|
9
9
|
export { getSailDeployment, normalizeDeployment, sailDeployments, } from "./deployments.js";
|
|
10
10
|
export { DISPATCH_TYPE_STRINGS, DISPATCH_TYPEHASHES, REGISTER_PERMISSION_TYPE_STRINGS, REGISTER_PERMISSION_TYPEHASHES, clearCapabilityCache, detectKernelCapabilities, } from "./capabilities.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAc7D,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAc7D,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAQrF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,sBAAsB,EACtB,gCAAgC,EAChC,sCAAsC,EACtC,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAgCnB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Do not edit manually — run `pnpm build` to regenerate.
|
|
6
6
|
*
|
|
7
7
|
* Spec version : 1.2.0
|
|
8
|
-
* Generated at : 2026-06-
|
|
8
|
+
* Generated at : 2026-06-09T18:08:54.042Z
|
|
9
9
|
*/
|
|
10
10
|
export declare const SAIL_INTELLIGENCE_BASE_URL = "https://api.sail.money";
|
|
11
11
|
export declare const SAIL_INTELLIGENCE_DOCS_URL = "https://api.sail.money/docs";
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Do not edit manually — run `pnpm build` to regenerate.
|
|
6
6
|
*
|
|
7
7
|
* Spec version : 1.2.0
|
|
8
|
-
* Generated at : 2026-06-
|
|
8
|
+
* Generated at : 2026-06-09T18:08:54.042Z
|
|
9
9
|
*/
|
|
10
10
|
export const SAIL_INTELLIGENCE_BASE_URL = "https://api.sail.money";
|
|
11
11
|
export const SAIL_INTELLIGENCE_DOCS_URL = "https://api.sail.money/docs";
|
|
@@ -129,6 +129,89 @@ export declare function buildSafeSetupInitializer(params: {
|
|
|
129
129
|
* dependency on the Safe nonce. Layout: r = owner(32) ‖ s = 0(32) ‖ v = 1(1).
|
|
130
130
|
*/
|
|
131
131
|
export declare function buildApprovedHashSignature(owner: Address): Hex;
|
|
132
|
+
/** ABI for SafeProxyFactory.proxyCreationCode() — pure view returning SafeProxy creation bytecode. */
|
|
133
|
+
export declare const safeProxyFactoryAbi: readonly [{
|
|
134
|
+
readonly type: "function";
|
|
135
|
+
readonly name: "proxyCreationCode";
|
|
136
|
+
readonly stateMutability: "pure";
|
|
137
|
+
readonly inputs: readonly [];
|
|
138
|
+
readonly outputs: readonly [{
|
|
139
|
+
readonly name: "";
|
|
140
|
+
readonly type: "bytes";
|
|
141
|
+
}];
|
|
142
|
+
}];
|
|
143
|
+
/**
|
|
144
|
+
* Compute the CREATE2 address SafeProxyFactory.createProxyWithNonce() assigns.
|
|
145
|
+
*
|
|
146
|
+
* Factory formula (from SafeProxyFactory source):
|
|
147
|
+
* initCode = proxyCreationCode ++ abi.encode(singleton)
|
|
148
|
+
* salt = keccak256(keccak256(initializer) ++ uint256(saltNonce))
|
|
149
|
+
* deployedAddr = CREATE2(factory, salt, keccak256(initCode))
|
|
150
|
+
*
|
|
151
|
+
* `proxyCreationCode` must be read once from the factory via `safeProxyFactoryAbi`;
|
|
152
|
+
* it is identical on every chain since SAFE_V141.proxyFactory is the same address everywhere.
|
|
153
|
+
*
|
|
154
|
+
* This is the LOW-LEVEL factory primitive: `saltNonce` is the value handed to
|
|
155
|
+
* `createProxyWithNonce` verbatim. When the deployer is SailKernel.createAccount,
|
|
156
|
+
* the kernel does NOT use the caller's nonce directly — it binds it to the
|
|
157
|
+
* deployer + principals first. To predict a Sail SMA address, use
|
|
158
|
+
* `computeSailSmaAddress` (which applies `computeKernelBoundSalt`), NOT this
|
|
159
|
+
* function with the raw nonce.
|
|
160
|
+
*
|
|
161
|
+
* NOTE: the `initializer` encodes chain-specific addresses (kernel, safeModuleEnabler)
|
|
162
|
+
* via `buildSafeSetupInitializer`. Different initializers per chain → different CREATE2 salts
|
|
163
|
+
* → different deployed addresses, even with the same `saltNonce`. Cross-chain same-address
|
|
164
|
+
* requires the Sail Protocol to deploy kernel + safeModuleEnabler at identical addresses on
|
|
165
|
+
* every chain (deterministic CREATE2 deployment), or a registerExisting() flow that
|
|
166
|
+
* accepts a plain Safe deployed with a chain-agnostic initializer.
|
|
167
|
+
*/
|
|
168
|
+
export declare function computeSafeProxyAddress(params: {
|
|
169
|
+
initializer: Hex;
|
|
170
|
+
saltNonce: bigint;
|
|
171
|
+
proxyCreationCode: Hex;
|
|
172
|
+
}): Address;
|
|
173
|
+
/**
|
|
174
|
+
* Derive the salt SailKernel.createAccount actually passes to the factory.
|
|
175
|
+
*
|
|
176
|
+
* The kernel does NOT forward the caller's `saltNonce` directly — it binds it to
|
|
177
|
+
* the deployer (`msg.sender`) and the account principals to prevent address
|
|
178
|
+
* front-running (SailKernel.sol):
|
|
179
|
+
*
|
|
180
|
+
* boundSalt = uint256(keccak256(abi.encode(
|
|
181
|
+
* saltNonce, msg.sender, permissionSigner, manager, feePolicy)))
|
|
182
|
+
*
|
|
183
|
+
* In the standard onboarding flow `deployer === permissionSigner === owner`
|
|
184
|
+
* (the owner's EOA submits createAccount and is also the Safe's permission
|
|
185
|
+
* signer), while `manager` is the agent wallet and `feePolicy` is the chain's
|
|
186
|
+
* StandardFeePolicy.
|
|
187
|
+
*/
|
|
188
|
+
export declare function computeKernelBoundSalt(params: {
|
|
189
|
+
saltNonce: bigint;
|
|
190
|
+
/** `msg.sender` of createAccount — the EOA that deploys (the owner). */
|
|
191
|
+
deployer: Address;
|
|
192
|
+
permissionSigner: Address;
|
|
193
|
+
manager: Address;
|
|
194
|
+
feePolicy: Address;
|
|
195
|
+
}): bigint;
|
|
196
|
+
/**
|
|
197
|
+
* Compute the deterministic SMA (Safe) address that SailKernel.createAccount
|
|
198
|
+
* will deploy for the given owner/manager/feePolicy and salt.
|
|
199
|
+
*
|
|
200
|
+
* This is the address `sailor account predict` should show: it applies the
|
|
201
|
+
* kernel's salt binding (`computeKernelBoundSalt`) before the factory's CREATE2
|
|
202
|
+
* formula (`computeSafeProxyAddress`). Because the bound salt mixes in the
|
|
203
|
+
* deployer, permission signer, manager, and fee policy, the address changes if
|
|
204
|
+
* ANY of those change — not just the `initializer`.
|
|
205
|
+
*/
|
|
206
|
+
export declare function computeSailSmaAddress(params: {
|
|
207
|
+
initializer: Hex;
|
|
208
|
+
saltNonce: bigint;
|
|
209
|
+
deployer: Address;
|
|
210
|
+
permissionSigner: Address;
|
|
211
|
+
manager: Address;
|
|
212
|
+
feePolicy: Address;
|
|
213
|
+
proxyCreationCode: Hex;
|
|
214
|
+
}): Address;
|
|
132
215
|
/** ABI-encode the kernel's `setManager(newManager)` call. */
|
|
133
216
|
export declare function encodeSetManager(newManager: Address): Hex;
|
|
134
217
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../src/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EAST,MAAM,MAAM,CAAC;AAad;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBpB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBhB,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;EAQvB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,GAAG,CAqBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAK9D;AAED,sGAAsG;AACtG,eAAO,MAAM,mBAAmB;;;;;;;;;EAQtB,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,GAAG,CAAC;CACxB,GAAG,OAAO,CAgBV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAgBT;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,GAAG,CAAC;CACxB,GAAG,OAAO,CAOV;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,CAMzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,uEAAuE;IACvE,IAAI,EAAE,OAAO,CAAC;IACd,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,kDAAkD;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAmB7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { encodeFunctionData, encodePacked, pad, zeroAddress } from "viem";
|
|
1
|
+
import { concat, encodeAbiParameters, encodeFunctionData, encodePacked, getCreate2Address, keccak256, pad, zeroAddress, } from "viem";
|
|
2
2
|
/** Minimal SailKernel ABI fragment for the manager-rotation call. */
|
|
3
3
|
const setManagerAbi = [
|
|
4
4
|
{
|
|
@@ -121,6 +121,97 @@ export function buildSafeSetupInitializer(params) {
|
|
|
121
121
|
export function buildApprovedHashSignature(owner) {
|
|
122
122
|
return encodePacked(["bytes32", "bytes32", "uint8"], [pad(owner, { size: 32 }), pad("0x", { size: 32 }), 1]);
|
|
123
123
|
}
|
|
124
|
+
/** ABI for SafeProxyFactory.proxyCreationCode() — pure view returning SafeProxy creation bytecode. */
|
|
125
|
+
export const safeProxyFactoryAbi = [
|
|
126
|
+
{
|
|
127
|
+
type: "function",
|
|
128
|
+
name: "proxyCreationCode",
|
|
129
|
+
stateMutability: "pure",
|
|
130
|
+
inputs: [],
|
|
131
|
+
outputs: [{ name: "", type: "bytes" }],
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
/**
|
|
135
|
+
* Compute the CREATE2 address SafeProxyFactory.createProxyWithNonce() assigns.
|
|
136
|
+
*
|
|
137
|
+
* Factory formula (from SafeProxyFactory source):
|
|
138
|
+
* initCode = proxyCreationCode ++ abi.encode(singleton)
|
|
139
|
+
* salt = keccak256(keccak256(initializer) ++ uint256(saltNonce))
|
|
140
|
+
* deployedAddr = CREATE2(factory, salt, keccak256(initCode))
|
|
141
|
+
*
|
|
142
|
+
* `proxyCreationCode` must be read once from the factory via `safeProxyFactoryAbi`;
|
|
143
|
+
* it is identical on every chain since SAFE_V141.proxyFactory is the same address everywhere.
|
|
144
|
+
*
|
|
145
|
+
* This is the LOW-LEVEL factory primitive: `saltNonce` is the value handed to
|
|
146
|
+
* `createProxyWithNonce` verbatim. When the deployer is SailKernel.createAccount,
|
|
147
|
+
* the kernel does NOT use the caller's nonce directly — it binds it to the
|
|
148
|
+
* deployer + principals first. To predict a Sail SMA address, use
|
|
149
|
+
* `computeSailSmaAddress` (which applies `computeKernelBoundSalt`), NOT this
|
|
150
|
+
* function with the raw nonce.
|
|
151
|
+
*
|
|
152
|
+
* NOTE: the `initializer` encodes chain-specific addresses (kernel, safeModuleEnabler)
|
|
153
|
+
* via `buildSafeSetupInitializer`. Different initializers per chain → different CREATE2 salts
|
|
154
|
+
* → different deployed addresses, even with the same `saltNonce`. Cross-chain same-address
|
|
155
|
+
* requires the Sail Protocol to deploy kernel + safeModuleEnabler at identical addresses on
|
|
156
|
+
* every chain (deterministic CREATE2 deployment), or a registerExisting() flow that
|
|
157
|
+
* accepts a plain Safe deployed with a chain-agnostic initializer.
|
|
158
|
+
*/
|
|
159
|
+
export function computeSafeProxyAddress(params) {
|
|
160
|
+
const { initializer, saltNonce, proxyCreationCode } = params;
|
|
161
|
+
const initCodeHash = keccak256(concat([
|
|
162
|
+
proxyCreationCode,
|
|
163
|
+
encodeAbiParameters([{ type: "address" }], [SAFE_V141.singletonL2]),
|
|
164
|
+
]));
|
|
165
|
+
const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(initializer), saltNonce]));
|
|
166
|
+
return getCreate2Address({
|
|
167
|
+
from: SAFE_V141.proxyFactory,
|
|
168
|
+
salt,
|
|
169
|
+
bytecodeHash: initCodeHash,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Derive the salt SailKernel.createAccount actually passes to the factory.
|
|
174
|
+
*
|
|
175
|
+
* The kernel does NOT forward the caller's `saltNonce` directly — it binds it to
|
|
176
|
+
* the deployer (`msg.sender`) and the account principals to prevent address
|
|
177
|
+
* front-running (SailKernel.sol):
|
|
178
|
+
*
|
|
179
|
+
* boundSalt = uint256(keccak256(abi.encode(
|
|
180
|
+
* saltNonce, msg.sender, permissionSigner, manager, feePolicy)))
|
|
181
|
+
*
|
|
182
|
+
* In the standard onboarding flow `deployer === permissionSigner === owner`
|
|
183
|
+
* (the owner's EOA submits createAccount and is also the Safe's permission
|
|
184
|
+
* signer), while `manager` is the agent wallet and `feePolicy` is the chain's
|
|
185
|
+
* StandardFeePolicy.
|
|
186
|
+
*/
|
|
187
|
+
export function computeKernelBoundSalt(params) {
|
|
188
|
+
const { saltNonce, deployer, permissionSigner, manager, feePolicy } = params;
|
|
189
|
+
return BigInt(keccak256(encodeAbiParameters([
|
|
190
|
+
{ type: "uint256" },
|
|
191
|
+
{ type: "address" },
|
|
192
|
+
{ type: "address" },
|
|
193
|
+
{ type: "address" },
|
|
194
|
+
{ type: "address" },
|
|
195
|
+
], [saltNonce, deployer, permissionSigner, manager, feePolicy])));
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Compute the deterministic SMA (Safe) address that SailKernel.createAccount
|
|
199
|
+
* will deploy for the given owner/manager/feePolicy and salt.
|
|
200
|
+
*
|
|
201
|
+
* This is the address `sailor account predict` should show: it applies the
|
|
202
|
+
* kernel's salt binding (`computeKernelBoundSalt`) before the factory's CREATE2
|
|
203
|
+
* formula (`computeSafeProxyAddress`). Because the bound salt mixes in the
|
|
204
|
+
* deployer, permission signer, manager, and fee policy, the address changes if
|
|
205
|
+
* ANY of those change — not just the `initializer`.
|
|
206
|
+
*/
|
|
207
|
+
export function computeSailSmaAddress(params) {
|
|
208
|
+
const boundSalt = computeKernelBoundSalt(params);
|
|
209
|
+
return computeSafeProxyAddress({
|
|
210
|
+
initializer: params.initializer,
|
|
211
|
+
saltNonce: boundSalt,
|
|
212
|
+
proxyCreationCode: params.proxyCreationCode,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
124
215
|
/** ABI-encode the kernel's `setManager(newManager)` call. */
|
|
125
216
|
export function encodeSetManager(newManager) {
|
|
126
217
|
return encodeFunctionData({
|