@account-kit/smart-contracts 4.23.1 → 4.25.0

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 (49) hide show
  1. package/dist/esm/src/ma-v2/account/common/modularAccountV2Base.d.ts +1 -0
  2. package/dist/esm/src/ma-v2/account/common/modularAccountV2Base.js +35 -12
  3. package/dist/esm/src/ma-v2/account/common/modularAccountV2Base.js.map +1 -1
  4. package/dist/esm/src/ma-v2/account/modularAccountV2.d.ts +1 -0
  5. package/dist/esm/src/ma-v2/account/modularAccountV2.js +2 -1
  6. package/dist/esm/src/ma-v2/account/modularAccountV2.js.map +1 -1
  7. package/dist/esm/src/ma-v2/account/nativeSMASigner.d.ts +2 -2
  8. package/dist/esm/src/ma-v2/account/nativeSMASigner.js +11 -8
  9. package/dist/esm/src/ma-v2/account/nativeSMASigner.js.map +1 -1
  10. package/dist/esm/src/ma-v2/actions/deferralActions.d.ts +9 -7
  11. package/dist/esm/src/ma-v2/actions/deferralActions.js +21 -35
  12. package/dist/esm/src/ma-v2/actions/deferralActions.js.map +1 -1
  13. package/dist/esm/src/ma-v2/index.d.ts +4 -0
  14. package/dist/esm/src/ma-v2/index.js +2 -0
  15. package/dist/esm/src/ma-v2/index.js.map +1 -1
  16. package/dist/esm/src/ma-v2/modules/single-signer-validation/signer.d.ts +2 -1
  17. package/dist/esm/src/ma-v2/modules/single-signer-validation/signer.js +10 -6
  18. package/dist/esm/src/ma-v2/modules/single-signer-validation/signer.js.map +1 -1
  19. package/dist/esm/src/ma-v2/permissionBuilder.d.ts +113 -0
  20. package/dist/esm/src/ma-v2/permissionBuilder.js +487 -0
  21. package/dist/esm/src/ma-v2/permissionBuilder.js.map +1 -0
  22. package/dist/esm/src/ma-v2/utils.d.ts +42 -0
  23. package/dist/esm/src/ma-v2/utils.js +15 -1
  24. package/dist/esm/src/ma-v2/utils.js.map +1 -1
  25. package/dist/types/src/ma-v2/account/common/modularAccountV2Base.d.ts +1 -0
  26. package/dist/types/src/ma-v2/account/common/modularAccountV2Base.d.ts.map +1 -1
  27. package/dist/types/src/ma-v2/account/modularAccountV2.d.ts +1 -0
  28. package/dist/types/src/ma-v2/account/modularAccountV2.d.ts.map +1 -1
  29. package/dist/types/src/ma-v2/account/nativeSMASigner.d.ts +2 -2
  30. package/dist/types/src/ma-v2/account/nativeSMASigner.d.ts.map +1 -1
  31. package/dist/types/src/ma-v2/actions/deferralActions.d.ts +9 -7
  32. package/dist/types/src/ma-v2/actions/deferralActions.d.ts.map +1 -1
  33. package/dist/types/src/ma-v2/index.d.ts +4 -0
  34. package/dist/types/src/ma-v2/index.d.ts.map +1 -1
  35. package/dist/types/src/ma-v2/modules/single-signer-validation/signer.d.ts +2 -1
  36. package/dist/types/src/ma-v2/modules/single-signer-validation/signer.d.ts.map +1 -1
  37. package/dist/types/src/ma-v2/permissionBuilder.d.ts +114 -0
  38. package/dist/types/src/ma-v2/permissionBuilder.d.ts.map +1 -0
  39. package/dist/types/src/ma-v2/utils.d.ts +42 -0
  40. package/dist/types/src/ma-v2/utils.d.ts.map +1 -1
  41. package/package.json +6 -5
  42. package/src/ma-v2/account/common/modularAccountV2Base.ts +49 -11
  43. package/src/ma-v2/account/modularAccountV2.ts +3 -0
  44. package/src/ma-v2/account/nativeSMASigner.ts +20 -14
  45. package/src/ma-v2/actions/deferralActions.ts +38 -51
  46. package/src/ma-v2/index.ts +4 -0
  47. package/src/ma-v2/modules/single-signer-validation/signer.ts +19 -13
  48. package/src/ma-v2/permissionBuilder.ts +716 -0
  49. package/src/ma-v2/utils.ts +25 -0
@@ -37,6 +37,43 @@ export declare function getMAV2UpgradeToData<TTransport extends Transport = Tran
37
37
  createModularAccountV2FromExisting: () => Promise<ModularAccountV2<TSigner>>;
38
38
  }>;
39
39
  export declare const entityIdAndNonceReaderBytecode = "0x608060405234801561001057600080fd5b506040516104f13803806104f183398101604081905261002f916101e5565b60006008826001600160c01b0316901c90506000808263ffffffff1611610057576001610059565b815b90506001600160a01b0385163b15610133575b60006001600160a01b03861663d31b575b6bffffffff0000000000000000604085901b166040516001600160e01b031960e084901b1681526001600160401b03199091166004820152602401600060405180830381865afa1580156100d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526100fd91908101906103c6565b805190915060ff161580156101155750606081015151155b156101205750610133565b8161012a816104a4565b9250505061006c565b604051631aab3f0d60e11b81526001600160a01b03868116600483015264ffffffff01600160c01b038516600884901b64ffffffff0016176024830152600091908616906335567e1a90604401602060405180830381865afa15801561019d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c191906104d7565b90508060005260206000f35b6001600160a01b03811681146101e257600080fd5b50565b6000806000606084860312156101fa57600080fd5b8351610205816101cd565b6020850151909350610216816101cd565b60408501519092506001600160c01b038116811461023357600080fd5b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156102765761027661023e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156102a4576102a461023e565b604052919050565b60006001600160401b038211156102c5576102c561023e565b5060051b60200190565b600082601f8301126102e057600080fd5b81516102f36102ee826102ac565b61027c565b8082825260208201915060208360051b86010192508583111561031557600080fd5b602085015b8381101561034857805166ffffffffffffff198116811461033a57600080fd5b83526020928301920161031a565b5095945050505050565b600082601f83011261036357600080fd5b81516103716102ee826102ac565b8082825260208201915060208360051b86010192508583111561039357600080fd5b602085015b838110156103485780516001600160e01b0319811681146103b857600080fd5b835260209283019201610398565b6000602082840312156103d857600080fd5b81516001600160401b038111156103ee57600080fd5b82016080818503121561040057600080fd5b610408610254565b815160ff8116811461041957600080fd5b815260208201516001600160401b0381111561043457600080fd5b610440868285016102cf565b60208301525060408201516001600160401b0381111561045f57600080fd5b61046b868285016102cf565b60408301525060608201516001600160401b0381111561048a57600080fd5b61049686828501610352565b606083015250949350505050565b600063ffffffff821663ffffffff81036104ce57634e487b7160e01b600052601160045260246000fd5b60010192915050565b6000602082840312156104e957600080fd5b505191905056fe";
40
+ export declare const mintableERC20Bytecode = "0x608060405234801561000f575f80fd5b506040518060400160405280600d81526020016c26b4b73a30b13632aa37b5b2b760991b81525060405180604001604052806002815260200161135560f21b8152508160039081610060919061010d565b50600461006d828261010d565b5050506101c7565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061009d57607f821691505b6020821081036100bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561010857805f5260205f20601f840160051c810160208510156100e65750805b601f840160051c820191505b81811015610105575f81556001016100f2565b50505b505050565b81516001600160401b0381111561012657610126610075565b61013a816101348454610089565b846100c1565b6020601f82116001811461016c575f83156101555750848201515b5f19600385901b1c1916600184901b178455610105565b5f84815260208120601f198516915b8281101561019b578785015182556020948501946001909201910161017b565b50848210156101b857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b610737806101d45f395ff3fe608060405234801561000f575f80fd5b506004361061008c575f3560e01c806306fdde0314610090578063095ea7b3146100ae57806318160ddd146100d157806323b872dd146100e3578063313ce567146100f657806340c10f191461010557806370a082311461011a57806395d89b4114610142578063a9059cbb1461014a578063dd62ed3e1461015d575b5f80fd5b610098610170565b6040516100a59190610572565b60405180910390f35b6100c16100bc3660046105c2565b610200565b60405190151581526020016100a5565b6002545b6040519081526020016100a5565b6100c16100f13660046105ea565b610219565b604051601281526020016100a5565b6101186101133660046105c2565b61023c565b005b6100d5610128366004610624565b6001600160a01b03165f9081526020819052604090205490565b61009861024a565b6100c16101583660046105c2565b610259565b6100d561016b366004610644565b610266565b60606003805461017f90610675565b80601f01602080910402602001604051908101604052809291908181526020018280546101ab90610675565b80156101f65780601f106101cd576101008083540402835291602001916101f6565b820191905f5260205f20905b8154815290600101906020018083116101d957829003601f168201915b5050505050905090565b5f3361020d818585610290565b60019150505b92915050565b5f336102268582856102a2565b6102318585856102fc565b506001949350505050565b6102468282610359565b5050565b60606004805461017f90610675565b5f3361020d8185856102fc565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61029d838383600161038d565b505050565b5f6102ad8484610266565b90505f198110156102f657818110156102e857828183604051637dc7a0d960e11b81526004016102df939291906106ad565b60405180910390fd5b6102f684848484035f61038d565b50505050565b6001600160a01b038316610325575f604051634b637e8f60e11b81526004016102df91906106ce565b6001600160a01b03821661034e575f60405163ec442f0560e01b81526004016102df91906106ce565b61029d83838361045f565b6001600160a01b038216610382575f60405163ec442f0560e01b81526004016102df91906106ce565b6102465f838361045f565b6001600160a01b0384166103b6575f60405163e602df0560e01b81526004016102df91906106ce565b6001600160a01b0383166103df575f604051634a1406b160e11b81526004016102df91906106ce565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156102f657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161045191815260200190565b60405180910390a350505050565b6001600160a01b038316610489578060025f82825461047e91906106e2565b909155506104e69050565b6001600160a01b0383165f90815260208190526040902054818110156104c85783818360405163391434e360e21b81526004016102df939291906106ad565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661050257600280548290039055610520565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161056591815260200190565b60405180910390a3505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146105bd575f80fd5b919050565b5f80604083850312156105d3575f80fd5b6105dc836105a7565b946020939093013593505050565b5f805f606084860312156105fc575f80fd5b610605846105a7565b9250610613602085016105a7565b929592945050506040919091013590565b5f60208284031215610634575f80fd5b61063d826105a7565b9392505050565b5f8060408385031215610655575f80fd5b61065e836105a7565b915061066c602084016105a7565b90509250929050565b600181811c9082168061068957607f821691505b6020821081036106a757634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0391909116815260200190565b8082018082111561021357634e487b7160e01b5f52601160045260245ffdfea2646970667358221220f9ae46a2e15270bfb77fe3d4d0ee0e45b749e3dde93805ee2cf795cb800244e664736f6c634300081a0033";
41
+ export declare const mintableERC20Abi: readonly [{
42
+ readonly name: "transfer";
43
+ readonly type: "function";
44
+ readonly stateMutability: "nonpayable";
45
+ readonly inputs: readonly [{
46
+ readonly type: "address";
47
+ readonly name: "to";
48
+ }, {
49
+ readonly type: "uint256";
50
+ readonly name: "amount";
51
+ }];
52
+ readonly outputs: readonly [];
53
+ }, {
54
+ readonly name: "mint";
55
+ readonly type: "function";
56
+ readonly stateMutability: "nonpayable";
57
+ readonly inputs: readonly [{
58
+ readonly type: "address";
59
+ readonly name: "to";
60
+ }, {
61
+ readonly type: "uint256";
62
+ readonly name: "amount";
63
+ }];
64
+ readonly outputs: readonly [];
65
+ }, {
66
+ readonly name: "balanceOf";
67
+ readonly type: "function";
68
+ readonly stateMutability: "nonpayable";
69
+ readonly inputs: readonly [{
70
+ readonly type: "address";
71
+ readonly name: "target";
72
+ }];
73
+ readonly outputs: readonly [{
74
+ readonly type: "uint256";
75
+ }];
76
+ }];
40
77
  export type BuildNonceParams = {
41
78
  nonceKey?: bigint;
42
79
  entityId?: number;
@@ -45,4 +82,9 @@ export type BuildNonceParams = {
45
82
  isDirectCallValidation?: boolean;
46
83
  };
47
84
  export declare const buildFullNonceKey: ({ nonceKey, entityId, isGlobalValidation, isDeferredAction, }: BuildNonceParams) => bigint;
85
+ export declare const parseDeferredAction: (deferredAction: Hex) => {
86
+ nonce: bigint;
87
+ deferredActionData: Hex;
88
+ hasAssociatedExecHooks: boolean;
89
+ };
48
90
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/ma-v2/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,MAAM,CAAC;AAcd,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,GAAG,CAAC;CAC1B,CAAC;AAGF,MAAM,MAAM,uBAAuB,GAAG;IACpC,mBAAmB,EAAE,GAAG,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,eAAO,MAAM,eAAe,6BAGzB,qBAAqB,KAAG,GAE1B,CAAC;AAGF,eAAO,MAAM,iBAAiB,uCAG3B,uBAAuB,KAAG,GAQ5B,CAAC;AAEF,eAAO,MAAM,4BAA4B,UAAW,KAAK,KAAG,OAgB3D,CAAC;AAEF,eAAO,MAAM,8BAA8B,UAAW,KAAK,KAAG,OAgB7D,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAAW,KAAK,KAAG,OAgB5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAAW,KAAK,KAAG,OAgBzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,OAgBpD,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACvD,QAAQ,SACJ,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,SAAS,GAAG,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,IACzE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACpD,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACvD,QAAQ,SACJ,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,SAAS,GAAG,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAE3E,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EACxD,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAC5C,OAAO,CACR,aAAa,GAAG;IACd,kCAAkC,EAAE,MAAM,OAAO,CAC/C,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;CACH,CACF,CA8BA;AAED,eAAO,MAAM,8BAA8B,y+EAC67E,CAAC;AAEz+E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,iBAAiB,kEAK3B,gBAAgB,KAAG,MAOrB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/ma-v2/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EAEf,MAAM,MAAM,CAAC;AAcd,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,MAAM,qBAAqB,GAAG;IAElC,mBAAmB,EAAE,GAAG,CAAC;CAC1B,CAAC;AAGF,MAAM,MAAM,uBAAuB,GAAG;IACpC,mBAAmB,EAAE,GAAG,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAGF,eAAO,MAAM,eAAe,6BAGzB,qBAAqB,KAAG,GAE1B,CAAC;AAGF,eAAO,MAAM,iBAAiB,uCAG3B,uBAAuB,KAAG,GAQ5B,CAAC;AAEF,eAAO,MAAM,4BAA4B,UAAW,KAAK,KAAG,OAgB3D,CAAC;AAEF,eAAO,MAAM,8BAA8B,UAAW,KAAK,KAAG,OAgB7D,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAAW,KAAK,KAAG,OAgB5D,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAAW,KAAK,KAAG,OAgBzD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAW,KAAK,KAAG,OAgBpD,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC9B,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACvD,QAAQ,SACJ,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,SAAS,GAAG,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,IACzE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACpD,OAAO,SAAS,kBAAkB,GAAG,kBAAkB,EACvD,QAAQ,SACJ,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,SAAS,GAAG,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAE3E,MAAM,EAAE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EACxD,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAC5C,OAAO,CACR,aAAa,GAAG;IACd,kCAAkC,EAAE,MAAM,OAAO,CAC/C,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CAAC;CACH,CACF,CA8BA;AAED,eAAO,MAAM,8BAA8B,y+EAC67E,CAAC;AAEz+E,eAAO,MAAM,qBAAqB,6hJAC0/I,CAAC;AAE7hJ,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,iBAAiB,kEAK3B,gBAAgB,KAAG,MAOrB,CAAC;AAGF,eAAO,MAAM,mBAAmB,mBACd,GAAG,KAClB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,GAAG,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;CAOjC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@account-kit/smart-contracts",
3
- "version": "4.23.1",
3
+ "version": "4.25.0",
4
4
  "description": "aa-sdk compatible interfaces for Alchemy Smart Accounts",
5
5
  "author": "Alchemy",
6
6
  "license": "MIT",
@@ -47,12 +47,13 @@
47
47
  "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm",
48
48
  "build:types": "tsc --project tsconfig.build.json --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
49
49
  "docs:gen": "node ../../doc-gen/dist/esm/cli.js generate --in ./src/index.ts --out ../../site/pages/reference/account-kit/smart-contracts",
50
+ "fern:gen": "node ../../doc-gen/dist/esm/cli.js generate --in ./src/index.ts --out ../../docs/pages/reference/account-kit/smart-contracts --fern",
50
51
  "clean": "rm -rf ./dist",
51
52
  "test": "vitest",
52
53
  "test:run": "vitest run"
53
54
  },
54
55
  "devDependencies": {
55
- "@account-kit/plugingen": "^4.23.1",
56
+ "@account-kit/plugingen": "^4.25.0",
56
57
  "change-case": "^5.1.2",
57
58
  "dedent": "^1.5.1",
58
59
  "dotenv": "^16.3.1",
@@ -72,10 +73,10 @@
72
73
  "url": "https://github.com/alchemyplatform/aa-sdk/issues"
73
74
  },
74
75
  "homepage": "https://github.com/alchemyplatform/aa-sdk#readme",
75
- "gitHead": "e35c609723a3d4aae8fd1ebedfdad5ce6db432ff",
76
+ "gitHead": "0e582d6b5775a147e8d43fb1cc4b9625319c21cb",
76
77
  "dependencies": {
77
- "@aa-sdk/core": "^4.23.1",
78
- "@account-kit/infra": "^4.23.1"
78
+ "@aa-sdk/core": "^4.25.0",
79
+ "@account-kit/infra": "^4.25.0"
79
80
  },
80
81
  "peerDependencies": {
81
82
  "viem": "^2.22.6"
@@ -3,13 +3,14 @@ import {
3
3
  getEntryPoint,
4
4
  InvalidEntityIdError,
5
5
  InvalidNonceKeyError,
6
+ InvalidDeferredActionNonce,
6
7
  toSmartContractAccount,
7
8
  type AccountOp,
8
9
  type SmartAccountSigner,
9
10
  type SmartContractAccountWithSigner,
10
11
  type ToSmartContractAccountParams,
11
12
  } from "@aa-sdk/core";
12
- import { DEFAULT_OWNER_ENTITY_ID } from "../../utils.js";
13
+ import { DEFAULT_OWNER_ENTITY_ID, parseDeferredAction } from "../../utils.js";
13
14
  import {
14
15
  type Hex,
15
16
  type Address,
@@ -85,6 +86,7 @@ export type CreateMAV2BaseParams<
85
86
  signer: TSigner;
86
87
  signerEntity?: SignerEntity;
87
88
  accountAddress: Address;
89
+ deferredAction?: Hex;
88
90
  };
89
91
 
90
92
  export type CreateMAV2BaseReturnType<
@@ -108,6 +110,7 @@ export async function createMAv2Base<
108
110
  entityId = DEFAULT_OWNER_ENTITY_ID,
109
111
  } = {},
110
112
  accountAddress,
113
+ deferredAction,
111
114
  ...remainingToSmartContractAccountParams
112
115
  } = config;
113
116
 
@@ -120,6 +123,36 @@ export async function createMAv2Base<
120
123
  chain,
121
124
  });
122
125
 
126
+ const entryPointContract = getContract({
127
+ address: entryPoint.address,
128
+ abi: entryPoint.abi,
129
+ client,
130
+ });
131
+
132
+ let useDeferredAction: boolean = false;
133
+ let nonce: bigint = 0n;
134
+ let deferredActionData: Hex = "0x";
135
+ let hasAssociatedExecHooks: boolean = false;
136
+
137
+ if (deferredAction) {
138
+ ({ nonce, deferredActionData, hasAssociatedExecHooks } =
139
+ parseDeferredAction(deferredAction));
140
+
141
+ // Set these values if the deferred action has not been consumed. We check this with the EP
142
+ const nextNonceForDeferredAction: bigint =
143
+ (await entryPointContract.read.getNonce([
144
+ accountAddress,
145
+ nonce >> 64n,
146
+ ])) as bigint;
147
+
148
+ // we only add the deferred action in if the nonce has not been consumed
149
+ if (nonce === nextNonceForDeferredAction) {
150
+ useDeferredAction = true;
151
+ } else if (nonce > nextNonceForDeferredAction) {
152
+ throw new InvalidDeferredActionNonce();
153
+ }
154
+ }
155
+
123
156
  const encodeExecute: (tx: AccountOp) => Promise<Hex> = async ({
124
157
  target,
125
158
  data,
@@ -150,18 +183,16 @@ export async function createMAv2Base<
150
183
 
151
184
  const isAccountDeployed: () => Promise<boolean> = async () =>
152
185
  !!(await client.getCode({ address: accountAddress }));
153
- // TODO: add deferred action flag
186
+
154
187
  const getNonce = async (nonceKey: bigint = 0n): Promise<bigint> => {
188
+ if (useDeferredAction) {
189
+ return nonce;
190
+ }
191
+
155
192
  if (nonceKey > maxUint152) {
156
193
  throw new InvalidNonceKeyError(nonceKey);
157
194
  }
158
195
 
159
- const entryPointContract = getContract({
160
- address: entryPoint.address,
161
- abi: entryPoint.abi,
162
- client,
163
- });
164
-
165
196
  const fullNonceKey: bigint =
166
197
  (nonceKey << 40n) +
167
198
  (BigInt(entityId) << 8n) +
@@ -216,7 +247,8 @@ export async function createMAv2Base<
216
247
  entityId: Number(entityId),
217
248
  });
218
249
 
219
- return validationData.executionHooks.length
250
+ return (useDeferredAction && hasAssociatedExecHooks) ||
251
+ validationData.executionHooks.length
220
252
  ? concatHex([executeUserOpSelector, callData])
221
253
  : callData;
222
254
  };
@@ -231,8 +263,14 @@ export async function createMAv2Base<
231
263
  encodeBatchExecute,
232
264
  getNonce,
233
265
  ...(entityId === DEFAULT_OWNER_ENTITY_ID
234
- ? nativeSMASigner(signer, chain, accountAddress)
235
- : singleSignerMessageSigner(signer, chain, accountAddress, entityId)),
266
+ ? nativeSMASigner(signer, chain, accountAddress, deferredActionData)
267
+ : singleSignerMessageSigner(
268
+ signer,
269
+ chain,
270
+ accountAddress,
271
+ entityId,
272
+ deferredActionData
273
+ )),
236
274
  });
237
275
 
238
276
  return {
@@ -36,6 +36,7 @@ export type CreateModularAccountV2Params<
36
36
  > & {
37
37
  signer: TSigner;
38
38
  entryPoint?: EntryPointDef<"0.7.0", Chain>;
39
+ deferredAction?: Hex;
39
40
  signerEntity?: SignerEntity;
40
41
  }) &
41
42
  (
@@ -103,6 +104,7 @@ export async function createModularAccountV2(
103
104
  entityId: DEFAULT_OWNER_ENTITY_ID,
104
105
  },
105
106
  signerEntity: { entityId = DEFAULT_OWNER_ENTITY_ID } = {},
107
+ deferredAction,
106
108
  } = config;
107
109
 
108
110
  const client = createBundlerClient({
@@ -183,6 +185,7 @@ export async function createModularAccountV2(
183
185
  signer,
184
186
  entryPoint,
185
187
  signerEntity,
188
+ deferredAction,
186
189
  ...accountFunctions,
187
190
  });
188
191
  }
@@ -9,6 +9,7 @@ import {
9
9
  type Chain,
10
10
  type Address,
11
11
  concat,
12
+ concatHex,
12
13
  } from "viem";
13
14
 
14
15
  import {
@@ -23,7 +24,6 @@ import { SignatureType } from "../modules/utils.js";
23
24
  * @example
24
25
  * ```ts
25
26
  * import { nativeSMASigner } from "@account-kit/smart-contracts";
26
-
27
27
  * import { LocalAccountSigner } from "@aa-sdk/core";
28
28
  *
29
29
  * const MNEMONIC = "...":
@@ -38,31 +38,37 @@ import { SignatureType } from "../modules/utils.js";
38
38
  * @param {SmartAccountSigner} signer Signer to use for signing operations
39
39
  * @param {Chain} chain Chain object for the signer
40
40
  * @param {Address} accountAddress address of the smart account using this signer
41
+ * @param {Hex} deferredActionData optional deferred action data to prepend to the uo signatures
41
42
  * @returns {object} an object with methods for signing operations and managing signatures
42
43
  */
43
44
  export const nativeSMASigner = (
44
45
  signer: SmartAccountSigner,
45
46
  chain: Chain,
46
- accountAddress: Address
47
+ accountAddress: Address,
48
+ deferredActionData?: Hex
47
49
  ) => {
48
50
  return {
49
51
  getDummySignature: (): Hex => {
50
- const dummyEcdsaSignature =
51
- "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
52
-
53
- return packUOSignature({
52
+ const sig = packUOSignature({
54
53
  // orderedHookData: [],
55
- validationSignature: dummyEcdsaSignature,
54
+ validationSignature:
55
+ "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c",
56
56
  });
57
+
58
+ return deferredActionData ? concatHex([deferredActionData, sig]) : sig;
57
59
  },
58
60
 
59
- signUserOperationHash: (uoHash: Hex): Promise<Hex> => {
60
- return signer.signMessage({ raw: uoHash }).then((signature: Hex) =>
61
- packUOSignature({
62
- // orderedHookData: [],
63
- validationSignature: signature,
64
- })
65
- );
61
+ signUserOperationHash: async (uoHash: Hex): Promise<Hex> => {
62
+ const sig = await signer
63
+ .signMessage({ raw: uoHash })
64
+ .then((signature: Hex) =>
65
+ packUOSignature({
66
+ // orderedHookData: [],
67
+ validationSignature: signature,
68
+ })
69
+ );
70
+
71
+ return deferredActionData ? concatHex([deferredActionData, sig]) : sig;
66
72
  },
67
73
 
68
74
  // we apply the expected 1271 packing here since the account contract will expect it
@@ -11,7 +11,6 @@ import {
11
11
  type Hex,
12
12
  concatHex,
13
13
  maxUint152,
14
- getContract,
15
14
  encodePacked,
16
15
  size,
17
16
  toHex,
@@ -44,22 +43,23 @@ export type DeferredActionTypedData = {
44
43
 
45
44
  export type DeferredActionReturnData = {
46
45
  typedData: DeferredActionTypedData;
47
- nonceOverride: bigint;
48
46
  };
49
47
 
50
48
  export type CreateDeferredActionTypedDataParams = {
51
49
  callData: Hex;
52
50
  deadline: number;
53
- entityId: number;
54
- isGlobalValidation: boolean;
55
- nonceKeyOverride?: bigint;
51
+ nonce: bigint;
56
52
  };
57
53
 
58
54
  export type BuildDeferredActionDigestParams = {
59
- typedData: DeferredActionTypedData;
55
+ fullPreSignatureDeferredActionDigest: Hex;
60
56
  sig: Hex;
61
57
  };
62
58
 
59
+ export type BuildPreSignatureDeferredActionDigestParams = {
60
+ typedData: DeferredActionTypedData;
61
+ };
62
+
63
63
  export type BuildUserOperationWithDeferredActionParams = {
64
64
  uo: UserOperationCallData | BatchUserOperationCallData;
65
65
  signaturePrepend: Hex;
@@ -67,9 +67,10 @@ export type BuildUserOperationWithDeferredActionParams = {
67
67
  };
68
68
 
69
69
  export type EntityIdAndNonceParams = {
70
- entityId: number;
71
- nonceKey: bigint;
70
+ entityId?: number;
71
+ nonceKey?: bigint;
72
72
  isGlobalValidation: boolean;
73
+ isDeferredAction?: boolean;
73
74
  };
74
75
 
75
76
  export type DeferralActions = {
@@ -77,6 +78,9 @@ export type DeferralActions = {
77
78
  args: CreateDeferredActionTypedDataParams
78
79
  ) => Promise<DeferredActionReturnData>;
79
80
  buildDeferredActionDigest: (args: BuildDeferredActionDigestParams) => Hex;
81
+ buildPreSignatureDeferredActionDigest: (
82
+ args: BuildPreSignatureDeferredActionDigestParams
83
+ ) => Hex;
80
84
  buildUserOperationWithDeferredAction: (
81
85
  args: BuildUserOperationWithDeferredActionParams
82
86
  ) => Promise<UserOperationRequest_v7>;
@@ -97,43 +101,17 @@ export const deferralActions: (
97
101
  const createDeferredActionTypedDataObject = async ({
98
102
  callData,
99
103
  deadline,
100
- entityId,
101
- isGlobalValidation,
102
- nonceKeyOverride = 0n,
104
+ nonce,
103
105
  }: CreateDeferredActionTypedDataParams): Promise<DeferredActionReturnData> => {
104
106
  if (!client.account) {
105
107
  throw new AccountNotFoundError();
106
108
  }
107
109
 
108
- if (nonceKeyOverride > maxUint152) {
109
- throw new InvalidNonceKeyError(nonceKeyOverride);
110
- }
111
-
112
110
  const entryPoint = client.account.getEntryPoint();
113
111
  if (entryPoint === undefined) {
114
112
  throw new EntryPointNotFoundError(client.chain, "0.7.0");
115
113
  }
116
114
 
117
- const entryPointContract = getContract({
118
- address: entryPoint.address,
119
- abi: entryPoint.abi,
120
- client: client,
121
- });
122
-
123
- // 2 = deferred action flags 0b10
124
- // 1 = isGlobal validation flag 0b01
125
- const fullNonceKey: bigint = buildFullNonceKey({
126
- nonceKey: nonceKeyOverride,
127
- entityId,
128
- isGlobalValidation,
129
- isDeferredAction: true,
130
- });
131
-
132
- const nonceOverride = (await entryPointContract.read.getNonce([
133
- client.account.address,
134
- fullNonceKey,
135
- ])) as bigint;
136
-
137
115
  return {
138
116
  typedData: {
139
117
  domain: {
@@ -149,12 +127,11 @@ export const deferralActions: (
149
127
  },
150
128
  primaryType: "DeferredAction",
151
129
  message: {
152
- nonce: nonceOverride,
130
+ nonce: nonce,
153
131
  deadline: deadline,
154
132
  call: callData,
155
133
  },
156
134
  },
157
- nonceOverride: nonceOverride,
158
135
  };
159
136
  };
160
137
 
@@ -164,34 +141,42 @@ export const deferralActions: (
164
141
  * Assumption: The client this extends is used to sign the typed data.
165
142
  *
166
143
  * @param {object} args The argument object containing the following:
167
- * @param {DeferredActionTypedData} args.typedData The typed data object for the deferred action
144
+ * @param {Hex} args.fullPreSignatureDeferredActionDigest The The data to append the signature and length to
168
145
  * @param {Hex} args.sig The signature to include in the digest
169
146
  * @returns {Hex} The encoded digest to be prepended to the userOp signature
170
147
  */
171
148
  const buildDeferredActionDigest = ({
172
- typedData,
149
+ fullPreSignatureDeferredActionDigest,
173
150
  sig,
174
151
  }: BuildDeferredActionDigestParams): Hex => {
152
+ const sigLength = size(sig);
153
+
154
+ const encodedData = concatHex([
155
+ fullPreSignatureDeferredActionDigest,
156
+ toHex(sigLength, { size: 4 }),
157
+ sig,
158
+ ]);
159
+ return encodedData;
160
+ };
161
+
162
+ const buildPreSignatureDeferredActionDigest = ({
163
+ typedData,
164
+ }: BuildPreSignatureDeferredActionDigestParams): Hex => {
175
165
  const signerEntity = client.account.signerEntity;
176
166
  const validationLocator =
177
167
  (BigInt(signerEntity.entityId) << 8n) |
178
168
  (signerEntity.isGlobalValidation ? 1n : 0n);
179
169
 
180
- let encodedData = encodePacked(
170
+ const encodedCallData = encodePacked(
181
171
  ["uint168", "uint48", "bytes"],
182
172
  [validationLocator, typedData.message.deadline, typedData.message.call]
183
173
  );
184
174
 
185
- const encodedDataLength = size(encodedData);
186
- const sigLength = size(sig);
187
-
188
- encodedData = concatHex([
175
+ const encodedDataLength = size(encodedCallData);
176
+ const encodedData = concatHex([
189
177
  toHex(encodedDataLength, { size: 4 }),
190
- encodedData,
191
- toHex(sigLength, { size: 4 }),
192
- sig,
178
+ encodedCallData,
193
179
  ]);
194
-
195
180
  return encodedData;
196
181
  };
197
182
 
@@ -239,9 +224,10 @@ export const deferralActions: (
239
224
  };
240
225
 
241
226
  const getEntityIdAndNonce = async ({
242
- entityId,
243
- nonceKey,
227
+ entityId = 1,
228
+ nonceKey = 0n,
244
229
  isGlobalValidation,
230
+ isDeferredAction = true,
245
231
  }: EntityIdAndNonceParams) => {
246
232
  if (!client.account) {
247
233
  throw new AccountNotFoundError();
@@ -266,7 +252,7 @@ export const deferralActions: (
266
252
  nonceKey,
267
253
  entityId,
268
254
  isGlobalValidation,
269
- isDeferredAction: true,
255
+ isDeferredAction,
270
256
  }),
271
257
  ],
272
258
  });
@@ -285,6 +271,7 @@ export const deferralActions: (
285
271
  return {
286
272
  createDeferredActionTypedDataObject,
287
273
  buildDeferredActionDigest,
274
+ buildPreSignatureDeferredActionDigest,
288
275
  buildUserOperationWithDeferredAction,
289
276
  getEntityIdAndNonce,
290
277
  };
@@ -20,6 +20,10 @@ export {
20
20
  } from "./actions/common/utils.js";
21
21
  export type * from "./actions/install-validation/installValidation.js";
22
22
  export { installValidationActions } from "./actions/install-validation/installValidation.js";
23
+ export type * from "./actions/deferralActions.js";
24
+ export { deferralActions } from "./actions/deferralActions.js";
25
+ export type * from "./permissionBuilder.js";
26
+ export { PermissionBuilder, PermissionType } from "./permissionBuilder.js";
23
27
 
24
28
  export {
25
29
  getDefaultAllowlistModuleAddress,
@@ -39,32 +39,38 @@ import { packUOSignature, pack1271Signature } from "../../utils.js";
39
39
  * @param {Chain} chain Chain object for the signer
40
40
  * @param {Address} accountAddress address of the smart account using this signer
41
41
  * @param {number} entityId the entity id of the signing validation
42
+ * @param {Hex} deferredActionData optional deferred action data to prepend to the uo signatures
42
43
  * @returns {object} an object with methods for signing operations and managing signatures
43
44
  */
44
45
  export const singleSignerMessageSigner = (
45
46
  signer: SmartAccountSigner,
46
47
  chain: Chain,
47
48
  accountAddress: Address,
48
- entityId: number
49
+ entityId: number,
50
+ deferredActionData?: Hex
49
51
  ) => {
50
52
  return {
51
53
  getDummySignature: (): Hex => {
52
- const dummyEcdsaSignature =
53
- "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
54
-
55
- return packUOSignature({
54
+ const sig = packUOSignature({
56
55
  // orderedHookData: [],
57
- validationSignature: dummyEcdsaSignature,
56
+ validationSignature:
57
+ "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c",
58
58
  });
59
+
60
+ return deferredActionData ? concatHex([deferredActionData, sig]) : sig;
59
61
  },
60
62
 
61
- signUserOperationHash: (uoHash: Hex): Promise<Hex> => {
62
- return signer.signMessage({ raw: uoHash }).then((signature: Hex) =>
63
- packUOSignature({
64
- // orderedHookData: [],
65
- validationSignature: signature,
66
- })
67
- );
63
+ signUserOperationHash: async (uoHash: Hex): Promise<Hex> => {
64
+ const sig = await signer
65
+ .signMessage({ raw: uoHash })
66
+ .then((signature: Hex) =>
67
+ packUOSignature({
68
+ // orderedHookData: [],
69
+ validationSignature: signature,
70
+ })
71
+ );
72
+
73
+ return deferredActionData ? concatHex([deferredActionData, sig]) : sig;
68
74
  },
69
75
 
70
76
  // we apply the expected 1271 packing here since the account contract will expect it