What's new in v1.0.0?
First stable release
This is the first stable release of MetaMask Smart Accounts Kit. From v1.0.0 onward, breaking changes will be released only in major version bumps, as per the semantic versioning specification.
Breaking changes
⚠️ sendTransactionWithDelegation
- The
permissionsContextparameter has been renamed topermissionContext(singular). permissionContextnow acceptsPermissionContextwhich represents encoded delegation chain (Hex) or a decoded delegation chain (Delegation[]) for redeeming delegations.
await walletClient.sendTransactionWithDelegation({
- permissionsContext: "0x...",
+ permissionContext: "0x...",
delegationManager: "0x..,
// ...
});
⚠️ sendUserOperationWithDelegation
- The
permissionsContextparameter has been renamed topermissionContext(singular). permissionContextnow acceptsPermissionContextwhich represents encoded delegation chain (Hex) or a decoded delegation chain (Delegation[]) for redeeming delegations.- The
accountMetadataparameter has been replaced withdependencies.
await bundlerClient.sendUserOperationWithDelegation({
- accountMetadata: {
+ dependencies: {
factory: "0x..",
factoryData: "0x..."
},
// ...
calls: [
{
to: sessionAccount.address,
data: "0x",
value: 1n,
- permissionsContext: "0x..",
+ permissionContext: "0x..",
delegationManager: "0x..",
},
],
// ...
});
⚠️ getDelegationHashOffchain
The function has been renamed to hashDelegation for improved clarity.
- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit";
+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils";
- const delegationHash = getDelegationHashOffchain(delegation);
+ const delegationHash = hashDelegation(delegation);
⚠️ requestExecutionPermissions
- The action now accepts
isAdjustmentAllowedinside each permission object as per new ERC-7715 specification. - The action now accepts
toinstead ofsignerfor the session account. - The action now returns developer friendly types,
chainIdasnumberand token amounts asbigint. expiryis now an optional parameter.
await walletClient.requestExecutionPermissions([{
chainId: chain.id,
expiry,
// The requested permissions will be granted to the
// session account.
+ to: sessionAccount.address,
- signer: {
- type: "account",
- data: {
- address: sessionAccount.address,
- },
- },
- isAdjustmentAllowed: true,
permission: {
type: "erc20-token-periodic",
data: {
// ...
},
+ isAdjustmentAllowed: true,
},
}]);
⚠️ encodePermissionContexts
The utility function has been removed. See encodeDelegations to encode the delegations.
⚠️ decodePermissionContexts
The utility function has been removed. See decodeDelegations to decode the delegations.
⚠️ redeemDelegations
The redeemDelegations function and Redemption type have been removed. Use the DelegationManager.encode.redeemDelegations encoding utility.
Enhancements
- New ERC-7715 Wallet Client actions have been added to get the supported permission, and get granted permissions from a wallet.
- The
signerparameter intoMetaMaskSmartAccountis now optional. If omitted, non-signing operations still work, but signing operations such assignUserOperation,signDelegation,signMessage, andsignTypedDatathrow an error. - Added
encodeDelegationanddecodeDelegationutilities for encoding and decoding single delegation. - Allow scope type to be specified either as ScopeType enum or string literal.
- Allow caveat type to be specified either as CaveatType enum or string literal.
- Added support for Tempo Mainnet and Tempo Moderato Testnet.
- The
webauthn-p256dependency has been replaced with theoxp256 module. This doesn't impact developer facing APIs. - Improved
@metamask/delegation-abistree-shakability.
Fixes
- Fixed
signDelegationto correctly await the signer and return the signed signature. - The
delegation.saltandcaveat.argsnow default to0x00instead of0x. This preventsCannot convert 0x to a BigInterrors when encoding delegations directly with Viem.
Contract addresses
The following are the contract addresses for the Delegation Framework version 1.3.0, as used by this version of the toolkit.
Delegation Framework
| Contract | Address |
|---|---|
| EntryPoint | 0x0000000071727De22E5E9d8BAf0edAc6f37da032 |
| SimpleFactory | 0x69Aa2f9fe1572F1B640E1bbc512f5c3a734fc77c |
| DelegationManager | 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3 |
| MultiSigDeleGatorImpl | 0x56a9EdB16a0105eb5a4C54f4C062e2868844f3A7 |
| HybridDeleGatorImpl | 0x48dBe696A4D990079e039489bA2053B36E8FFEC4 |
Caveat enforcers
| Enforcer | Address |
|---|---|
| AllowedCalldataEnforcer | 0xc2b0d624c1c4319760C96503BA27C347F3260f55 |
| AllowedMethodsEnforcer | 0x2c21fD0Cb9DC8445CB3fb0DC5E7Bb0Aca01842B5 |
| AllowedTargetsEnforcer | 0x7F20f61b1f09b08D970938F6fa563634d65c4EeB |
| ArgsEqualityCheckEnforcer | 0x44B8C6ae3C304213c3e298495e12497Ed3E56E41 |
| BlockNumberEnforcer | 0x5d9818dF0AE3f66e9c3D0c5029DAF99d1823ca6c |
| DeployedEnforcer | 0x24ff2AA430D53a8CD6788018E902E098083dcCd2 |
| ERC20BalanceChangeEnforcer | 0xcdF6aB796408598Cea671d79506d7D48E97a5437 |
| ERC20TransferAmountEnforcer | 0xf100b0819427117EcF76Ed94B358B1A5b5C6D2Fc |
| ERC20PeriodTransferEnforcer | 0x474e3Ae7E169e940607cC624Da8A15Eb120139aB |
| ERC20StreamingEnforcer | 0x56c97aE02f233B29fa03502Ecc0457266d9be00e |
| ERC721BalanceChangeEnforcer | 0x8aFdf96eDBbe7e1eD3f5Cd89C7E084841e12A09e |
| ERC721TransferEnforcer | 0x3790e6B7233f779b09DA74C72b6e94813925b9aF |
| ERC1155BalanceChangeEnforcer | 0x63c322732695cAFbbD488Fc6937A0A7B66fC001A |
| ExactCalldataBatchEnforcer | 0x982FD5C86BBF425d7d1451f974192d4525113DfD |
| ExactCalldataEnforcer | 0x99F2e9bF15ce5eC84685604836F71aB835DBBdED |
| ExactExecutionBatchEnforcer | 0x1e141e455d08721Dd5BCDA1BaA6Ea5633Afd5017 |
| ExactExecutionEnforcer | 0x146713078D39eCC1F5338309c28405ccf85Abfbb |
| IdEnforcer | 0xC8B5D93463c893401094cc70e66A206fb5987997 |
| LimitedCallsEnforcer | 0x04658B29F6b82ed55274221a06Fc97D318E25416 |
| MultiTokenPeriodEnforcer | 0xFB2f1a9BD76d3701B730E5d69C3219D42D80eBb7 |
| NonceEnforcer | 0xDE4f2FAC4B3D87A1d9953Ca5FC09FCa7F366254f |
| NativeBalanceChangeEnforcer | 0xbD7B277507723490Cd50b12EaaFe87C616be6880 |
| NativeTokenPaymentEnforcer | 0x4803a326ddED6dDBc60e659e5ed12d85c7582811 |
| NativeTokenTransferAmountEnforcer | 0xF71af580b9c3078fbc2BBF16FbB8EEd82b330320 |
| NativeTokenStreamingEnforcer | 0xD10b97905a320b13a0608f7E9cC506b56747df19 |
| NativeTokenPeriodTransferEnforcer | 0x9BC0FAf4Aca5AE429F4c06aEEaC517520CB16BD9 |
| OwnershipTransferEnforcer | 0x7EEf9734E7092032B5C56310Eb9BbD1f4A524681 |
| RedeemerEnforcer | 0xE144b0b2618071B4E56f746313528a669c7E65c5 |
| SpecificActionERC20TransferBatchEnforcer | 0x00e0251aaA263dfE3B3541B758A82D1CBA1c3B6D |
| TimestampEnforcer | 0x1046bb45C8d673d4ea75321280DB34899413c069 |
| ValueLteEnforcer | 0x92Bf12322527cAA612fd31a0e810472BBB106A8F |