@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.
Files changed (122) hide show
  1. package/examples/permissions/BoundedApproveAndCallBatch.sol +179 -0
  2. package/examples/permissions/BoundedBet_Limitless_Base.sol +8 -7
  3. package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +13 -13
  4. package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +50 -39
  5. package/examples/permissions/BoundedStake_Venice_Base.sol +85 -0
  6. package/examples/permissions/BoundedSupply_AaveV3_Arbitrum.sol +84 -0
  7. package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +11 -9
  8. package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +10 -8
  9. package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +6 -6
  10. package/examples/permissions/BoundedVault_ERC4626_Base.sol +97 -0
  11. package/examples/permissions/README.md +29 -2
  12. package/examples/permissions/interfaces/IBatchPermission.sol +38 -0
  13. package/package.json +1 -1
  14. package/packages/cli/dist/index.cjs +3288 -2394
  15. package/packages/cli/dist/server.cjs +110 -140
  16. package/packages/sdk/dist/deployments.d.ts +14 -7
  17. package/packages/sdk/dist/deployments.d.ts.map +1 -1
  18. package/packages/sdk/dist/deployments.js +132 -141
  19. package/packages/sdk/dist/deployments.js.map +1 -1
  20. package/packages/sdk/dist/index.d.ts +1 -1
  21. package/packages/sdk/dist/index.d.ts.map +1 -1
  22. package/packages/sdk/dist/index.js +1 -1
  23. package/packages/sdk/dist/index.js.map +1 -1
  24. package/packages/sdk/dist/intelligence.d.ts +1 -1
  25. package/packages/sdk/dist/intelligence.js +1 -1
  26. package/packages/sdk/dist/safe.d.ts +83 -0
  27. package/packages/sdk/dist/safe.d.ts.map +1 -1
  28. package/packages/sdk/dist/safe.js +92 -1
  29. package/packages/sdk/dist/safe.js.map +1 -1
  30. package/packages/ui/dist/assets/{add-BrylwREe.js → add-C--RBwJe.js} +1 -1
  31. package/packages/ui/dist/assets/{all-wallets-DGR35dSU.js → all-wallets-_xwd_eso.js} +1 -1
  32. package/packages/ui/dist/assets/{app-store-BpM1x6bI.js → app-store-CIQsK1zU.js} +1 -1
  33. package/packages/ui/dist/assets/{apple-xvs7JX23.js → apple-BdlAnnmO.js} +1 -1
  34. package/packages/ui/dist/assets/{arrow-bottom-CF6xPQbH.js → arrow-bottom-B5p_6Dat.js} +1 -1
  35. package/packages/ui/dist/assets/{arrow-bottom-circle-r0A6jlRF.js → arrow-bottom-circle-D7c6JPTF.js} +1 -1
  36. package/packages/ui/dist/assets/{arrow-left-Ce6MJKC0.js → arrow-left-SA4NpEnP.js} +1 -1
  37. package/packages/ui/dist/assets/{arrow-right-CiCNIsI0.js → arrow-right-mOJNWujS.js} +1 -1
  38. package/packages/ui/dist/assets/{arrow-top-TI5RQSIc.js → arrow-top-CvPVVpHl.js} +1 -1
  39. package/packages/ui/dist/assets/{bank-CmrK2TRa.js → bank-B2j2rPm9.js} +1 -1
  40. package/packages/ui/dist/assets/{basic-BhoXad_6.js → basic-Bw6cXOlk.js} +1 -1
  41. package/packages/ui/dist/assets/{browser-BWCT-XSy.js → browser-CUSNF__N.js} +1 -1
  42. package/packages/ui/dist/assets/{card-v1fl0QNj.js → card-CpKLox49.js} +1 -1
  43. package/packages/ui/dist/assets/{ccip-BkGqsEgG.js → ccip-XB9iQjXB.js} +1 -1
  44. package/packages/ui/dist/assets/{checkmark-CiQnNFee.js → checkmark-BRpXeSCK.js} +1 -1
  45. package/packages/ui/dist/assets/{checkmark-bold-B63f9SW6.js → checkmark-bold-BkPvoqxo.js} +1 -1
  46. package/packages/ui/dist/assets/{chevron-bottom-DpBpDiYb.js → chevron-bottom-CtK0W2av.js} +1 -1
  47. package/packages/ui/dist/assets/{chevron-left-o_G-ctyg.js → chevron-left-NayfPMDy.js} +1 -1
  48. package/packages/ui/dist/assets/{chevron-right-I9LAJ9De.js → chevron-right-BPU2hCfA.js} +1 -1
  49. package/packages/ui/dist/assets/{chevron-top-JRwGHMKH.js → chevron-top-CTXwC4nM.js} +1 -1
  50. package/packages/ui/dist/assets/{chrome-store-Cw9skzSt.js → chrome-store-eWIk0-YZ.js} +1 -1
  51. package/packages/ui/dist/assets/{clock-BK_Lu0EB.js → clock-VmYiq5jB.js} +1 -1
  52. package/packages/ui/dist/assets/{close-DWFjOyu7.js → close-NfBukMzW.js} +1 -1
  53. package/packages/ui/dist/assets/{coinPlaceholder-gi3wDlPb.js → coinPlaceholder-BWOeJc6j.js} +1 -1
  54. package/packages/ui/dist/assets/{compass-Dlpsn_k-.js → compass-oRk8W3iM.js} +1 -1
  55. package/packages/ui/dist/assets/{copy-BzNKdXeG.js → copy-GcYQZOsF.js} +1 -1
  56. package/packages/ui/dist/assets/{core-BN9UnMip.js → core-B_rvnvkC.js} +3 -3
  57. package/packages/ui/dist/assets/cursor-BAViuJWh.js +3 -0
  58. package/packages/ui/dist/assets/{cursor-transparent-B3RZ6Udt.js → cursor-transparent-CGox3wZ-.js} +1 -1
  59. package/packages/ui/dist/assets/{desktop-rngwE1T9.js → desktop-DU4yyiV4.js} +1 -1
  60. package/packages/ui/dist/assets/{disconnect-_DzDsvsZ.js → disconnect-CJm9NnxK.js} +1 -1
  61. package/packages/ui/dist/assets/{discord-B9qQB66m.js → discord-MxDL8Eq6.js} +1 -1
  62. package/packages/ui/dist/assets/{etherscan-D7hlQ8Z3.js → etherscan-CkCvlZiA.js} +1 -1
  63. package/packages/ui/dist/assets/{events-DrkgavVp.js → events-CkyJn32_.js} +1 -1
  64. package/packages/ui/dist/assets/{exclamation-triangle-iCvLVoM-.js → exclamation-triangle-hH1JdYAZ.js} +1 -1
  65. package/packages/ui/dist/assets/{extension-CjGcOeuB.js → extension-DTMrXG5m.js} +1 -1
  66. package/packages/ui/dist/assets/{external-link-DTkyjOr4.js → external-link-GSwn5MzD.js} +1 -1
  67. package/packages/ui/dist/assets/{facebook-DoO2uCiE.js → facebook-Vw_uyzaE.js} +1 -1
  68. package/packages/ui/dist/assets/{fallback-Y8-BiCNG.js → fallback-BL3U4ZRT.js} +1 -1
  69. package/packages/ui/dist/assets/{farcaster-Dyz6wiZi.js → farcaster-F-_di36M.js} +1 -1
  70. package/packages/ui/dist/assets/{filters-Bd5PxMiz.js → filters-DQzcstDl.js} +1 -1
  71. package/packages/ui/dist/assets/{github-CmqSJCq6.js → github-BSq3_rEd.js} +1 -1
  72. package/packages/ui/dist/assets/{google-i_MKKqQP.js → google-BU4QXiDS.js} +1 -1
  73. package/packages/ui/dist/assets/{help-circle-_ER8-V35.js → help-circle-CuF4iPyF.js} +1 -1
  74. package/packages/ui/dist/assets/{id-D2adRwvh.js → id-BQWlv0a_.js} +1 -1
  75. package/packages/ui/dist/assets/{image-q_rpi7cn.js → image-BPNySDPo.js} +1 -1
  76. package/packages/ui/dist/assets/{index-CzevBC-K.js → index-BMPQOOgv.js} +1 -1
  77. package/packages/ui/dist/assets/{index-Bdl623mb.js → index-CMyY4FOR.js} +3 -3
  78. package/packages/ui/dist/assets/{index-BLD08Nrb.js → index-CsbiKM3b.js} +1 -1
  79. package/packages/ui/dist/assets/{index-BwoSt5mL.js → index-D0SPxlSM.js} +1 -1
  80. package/packages/ui/dist/assets/{index-B6Wb3mjQ.js → index-D2wgBslE.js} +1 -1
  81. package/packages/ui/dist/assets/{index-DJQDBPts.js → index-Dc9_WV0G.js} +76 -76
  82. package/packages/ui/dist/assets/{index.es-D6UPoR2j.js → index.es-CvyDIsY4.js} +4 -4
  83. package/packages/ui/dist/assets/{info-Ck7GYYmo.js → info-D20yslek.js} +1 -1
  84. package/packages/ui/dist/assets/{info-circle-DtA5FQXd.js → info-circle-BEjvYTHa.js} +1 -1
  85. package/packages/ui/dist/assets/{lightbulb-DR3jyzkK.js → lightbulb-DfvLi5mQ.js} +1 -1
  86. package/packages/ui/dist/assets/{mail-BK_pW_tL.js → mail-CkgaIJAd.js} +1 -1
  87. package/packages/ui/dist/assets/{metamask-sdk-IZbe4GJ_.js → metamask-sdk-O-IBvvGq.js} +1 -1
  88. package/packages/ui/dist/assets/{mobile-CLG-4Yut.js → mobile-CGc88WfG.js} +1 -1
  89. package/packages/ui/dist/assets/{more-BBqkkVbe.js → more-DnX8wlTn.js} +1 -1
  90. package/packages/ui/dist/assets/{network-placeholder-kf7EWfmj.js → network-placeholder-DDrgA4a3.js} +1 -1
  91. package/packages/ui/dist/assets/{nftPlaceholder-BEFwtFPl.js → nftPlaceholder-DhHWPuD3.js} +1 -1
  92. package/packages/ui/dist/assets/{off-DKjJt-l0.js → off-D1CsYvPQ.js} +1 -1
  93. package/packages/ui/dist/assets/{parseSignature-KWl5TpQf.js → parseSignature-BlZUbtEc.js} +1 -1
  94. package/packages/ui/dist/assets/{play-store-DBVkWbwG.js → play-store-Dbkk8PTZ.js} +1 -1
  95. package/packages/ui/dist/assets/{plus-BQzagKUL.js → plus-B8jXpls3.js} +1 -1
  96. package/packages/ui/dist/assets/{qr-code-DVwEgFEM.js → qr-code-CDuJ3ftj.js} +1 -1
  97. package/packages/ui/dist/assets/{recycle-horizontal-D2E6B1Kh.js → recycle-horizontal-ZFGjaHsZ.js} +1 -1
  98. package/packages/ui/dist/assets/{refresh-CUavEsqn.js → refresh-D0rMEDtF.js} +1 -1
  99. package/packages/ui/dist/assets/{reown-logo-mAAAaf4E.js → reown-logo-NlCNVmgd.js} +1 -1
  100. package/packages/ui/dist/assets/{search-BAnb6iT_.js → search-CrJAA2qW.js} +1 -1
  101. package/packages/ui/dist/assets/{secp256k1-CBUZgsE-.js → secp256k1-mJj6W2AI.js} +1 -1
  102. package/packages/ui/dist/assets/{send-BYjfitxS.js → send-C7CoRziM.js} +1 -1
  103. package/packages/ui/dist/assets/{swapHorizontal-C-4qjxwd.js → swapHorizontal-fD3wbCGJ.js} +1 -1
  104. package/packages/ui/dist/assets/{swapHorizontalBold-zA-cWlfT.js → swapHorizontalBold-Cc-jQ6as.js} +1 -1
  105. package/packages/ui/dist/assets/{swapHorizontalMedium-gIIVXh3I.js → swapHorizontalMedium-DlJW6uX1.js} +1 -1
  106. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-CwtQpc9E.js → swapHorizontalRoundedBold-1VHOerLO.js} +1 -1
  107. package/packages/ui/dist/assets/{swapVertical-wrdYsAkk.js → swapVertical-CKaRlkZK.js} +1 -1
  108. package/packages/ui/dist/assets/{telegram-3aqbBSMX.js → telegram-DnCYed4D.js} +1 -1
  109. package/packages/ui/dist/assets/{three-dots-BNRpZX3L.js → three-dots-BFluoxma.js} +1 -1
  110. package/packages/ui/dist/assets/{twitch-Bya9c1W1.js → twitch-BXGv98S9.js} +1 -1
  111. package/packages/ui/dist/assets/{twitterIcon-1thOj_Z5.js → twitterIcon-C6IdXEe5.js} +1 -1
  112. package/packages/ui/dist/assets/{verify-D8ggGSfI.js → verify-D_QGyiLQ.js} +1 -1
  113. package/packages/ui/dist/assets/{verify-filled-CeZM7920.js → verify-filled-DIW8QKL9.js} +1 -1
  114. package/packages/ui/dist/assets/{w3m-modal-CUwD6iiA.js → w3m-modal-Do9U160p.js} +1 -1
  115. package/packages/ui/dist/assets/{wallet-Baz0DeMJ.js → wallet-CcARZnOx.js} +1 -1
  116. package/packages/ui/dist/assets/{wallet-placeholder-3yAnyuC4.js → wallet-placeholder-X1coFzQa.js} +1 -1
  117. package/packages/ui/dist/assets/{walletconnect-CfkgbqAq.js → walletconnect-Glte9ia7.js} +1 -1
  118. package/packages/ui/dist/assets/{warning-circle-BfOqu3HN.js → warning-circle-j-3V4KTo.js} +1 -1
  119. package/packages/ui/dist/assets/{x-CxAcJv-O.js → x-Bcc52c_T.js} +1 -1
  120. package/packages/ui/dist/index.html +1 -1
  121. package/templates/default/AGENTS.md +20 -1
  122. 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
- 84532: {
4
- // SAIL-405 redeploy (2026-06-04, gitCommit 6d872e6): adds owner-gated
5
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
6
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
7
- // local CREATE2 proxy prediction carried over; allowlistBootstrapped=true,
8
- // createAccount verified working, zero fees, onboarding live. Supersedes
9
- // 0xcC50009115DAaBCB40513e03a1a0Cc2Fdf6Be558. Only `core` was redeployed;
10
- // shared/standalone permission templates are NOT yet deployed against this
11
- // kernel (run the templates targets + refill the template maps before clones).
12
- chainId: 84532,
13
- blockNumber: 42400417,
14
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
15
- governance: "0xEaD44bC6999E7b00b9b2E11c1660248DC2a30993",
16
- timelock: "0x97B863e392C9859336788D5Ec454527d33C95B74",
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", // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
35
+ dispatchModel: "selective",
26
36
  knownTemplates: [],
27
37
  standaloneTemplates: {},
28
38
  },
39
+ // ── Base mainnet ─────────────────────────────────────────────────────────────
29
40
  8453: {
30
- // SAIL-405 redeploy (2026-06-04, gitCommit 0ed0561): adds owner-gated
31
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
32
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
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: 46898030,
39
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
40
- governance: "0x7E897D919872b1587577617ffFC42113679d0C50",
41
- timelock: "0x8eC3Ca951E193C6E3713A70022454d7A1f083281",
42
- kernel: "0x6319d3dfDDe3804ba93D65752b00c52bFb05a1ab",
43
- permissionFactory: "0x7724EACd97C8601d5AC244Aadbf76ad87353Ff31",
44
- standardFeePolicy: "0x65850a8D5050aeAade68289ff96c4F119a24B82e",
45
- safeModuleEnabler: "0xC84EdE78f93291A1fab19F51c4c7e938AB302Edf",
46
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
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", // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
57
+ dispatchModel: "selective",
51
58
  knownTemplates: [],
52
59
  standaloneTemplates: {},
53
60
  },
61
+ // ── Arbitrum mainnet ─────────────────────────────────────────────────────────
54
62
  42161: {
55
- // SAIL-405 redeploy (2026-06-04, gitCommit 0ed0561): adds owner-gated
56
- // setManager(newManager) to rotate the SMA's delegated signer (clears the
57
- // permission set + bumps the nonce epoch). Genesis allowlist bootstrap +
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: 25244824,
65
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
66
- governance: "0xd6AbB7A1036ADc7958Abffec9Da03450c5a2Ec8e",
67
- timelock: "0x114CB7110C780f7E3a6093AfE0B52463a569857C",
68
- kernel: "0x2716B12832DED0EF5688519c5Fe069EFc0374E02",
69
- permissionFactory: "0x23681A8A4C9819D8EaB37E46B858da6F3c85E683",
70
- standardFeePolicy: "0xAdfB986D48480bC67a7cF3751d30599161632e0D",
71
- safeModuleEnabler: "0xabe2a6D03F592BC602cA1dBDCD885ba2493274f9",
72
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
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", // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
79
+ dispatchModel: "selective",
77
80
  knownTemplates: [],
78
81
  standaloneTemplates: {},
79
82
  },
83
+ // ── Unichain mainnet ─────────────────────────────────────────────────────────
80
84
  130: {
81
- // SAIL-406 deploy (2026-06-05, gitCommit 2c9e325): full protocol deploy on
82
- // Unichain mainnet — core + the complete template suite (7 shared + 12
83
- // standalone), all source-verified on uniscan.xyz. Genesis allowlist
84
- // bootstrap (allowlistBootstrapped=true: Safe v1.4.1 factory, both
85
- // singletons, SafeModuleEnabler, StandardFeePolicy, SafeProxy codehash
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: 49897206,
90
- deployer: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
91
- governance: "0xAb5C90ECfF2763f6f20f8E553E3b8778dD9C349A",
92
- timelock: "0xd44FbBB37f01e235E0EE5386948F216d36D0CEf2",
93
- kernel: "0xD985029960a9B7C2E7E38e102C448b8b8539B156",
94
- permissionFactory: "0x8edDb62Aa49CeB837abf2653be2d93Ad9Fe6777D",
95
- standardFeePolicy: "0x7bBA8BE3c01c972757aA4a230A00D58aB600A1F1",
96
- safeModuleEnabler: "0xFE9227A9F2baf704060c604466df354a5A137b9B",
97
- treasury: "0xB01dCE443d052e44b7D13726c0EC9fFB7f5815B6",
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", // selective: verified on-chain DISPATCH_TYPEHASH 0xbe50c5391dcf9e08d11d2c30dbee822c14ad07af2ceb503c778d265801fb0e5c
102
- knownTemplates: [
103
- {
104
- address: "0xbD624eC67e2685872A60c0aF8F020727e20D096e",
105
- kind: "SharedAMMLiquidityPermission",
106
- chainId: 130,
107
- label: "Shared AMM Liquidity",
108
- description: "Bounded AMM liquidity provision/removal — enforces allowed pools and bounds.",
109
- },
110
- {
111
- address: "0x9d386605518FA81ff536b351ff055d26203229A9",
112
- kind: "SharedApproveAndCallBatchPermission",
113
- chainId: 130,
114
- label: "Shared Approve-and-Call Batch",
115
- description: "Bounded approve-then-call batch — enforces token, spender, and selector allowlists.",
116
- },
117
- {
118
- address: "0x948a9F9a6f2828E50f7e71bd569ba75A69da2BEb",
119
- kind: "SharedBoundedBorrowPermission",
120
- chainId: 130,
121
- label: "Shared Bounded Borrow",
122
- description: "Bounded borrow — enforces allowed markets and max borrow size.",
123
- },
124
- {
125
- address: "0xfD19fad56Ca3d6FaCd4279a2F84f09bef8967f6a",
126
- kind: "SharedBoundedSwapPermission",
127
- chainId: 130,
128
- label: "Shared Uniswap V3 Swap",
129
- description: "Bounded swap via Uniswap V3 — enforces allowed tokens, max trade size, and slippage.",
130
- },
131
- {
132
- address: "0x900cd03ee15e629bC4e94F6344d5529F4862071c",
133
- kind: "SharedDeFiBundlePermission",
134
- chainId: 130,
135
- label: "Shared DeFi Bundle",
136
- description: "Bounded multi-step DeFi bundle within a single permission.",
137
- },
138
- {
139
- address: "0x1dF90a2484bCF3c6Da2FB035aa0C9f523e77Cd62",
140
- kind: "SharedPendlePermission",
141
- chainId: 130,
142
- label: "Shared Pendle",
143
- description: "Bounded Pendle interactions — enforces allowed markets and bounds.",
144
- },
145
- {
146
- address: "0x851Ad196b7DC6c05eaf0B9420f2a72dc336D7739",
147
- kind: "SharedTransferTargetPermission",
148
- chainId: 130,
149
- label: "Shared Transfer Target",
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
- permissionFactory: input.permissionFactory,
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":"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"}
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,GACrB,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"}
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,GACrB,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"}
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-09T11:33:37.273Z
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-09T11:33:37.273Z
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,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAsD,MAAM,MAAM,CAAC;AAalG;;;;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,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
+ {"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({