What's new in v0.13.0?
Breaking changes
The ⚠️ symbol denotes potentially breaking API changes. As per the semantic versioning specification, from v1.0.0 onwards, breaking changes will be released only in major version bumps.
Breaking Changes
⚠️ createDelegation
- The function now accepts the following mandatory parameters:
scope: The scope of the delegation that defines the initial authority. See how to use delegation scope.environment: The environment used by the toolkit to define contract addresses for interacting with the Delegation Framework contracts.
- The
caveatsparameter is now optional (previously mandatory) and is used to constrain the initial authority configured via thescope. - You no longer need to use
CaveatBuilderto create caveats, you can now use a declarative format to define them.
import { createDelegation, getDelegatorEnvironment } from "@metamask/delegation-toolkit";
import { sepolia } from "viem/chains";
const environment = getDelegatorEnvironment(sepolia.id);
- const caveatBuilder = createCaveatBuilder(environment);
- const caveats = caveatBuilder.addCaveat("limitedCalls", 1);
+ const caveats = [{
+ type: "limitedCalls",
+ limit: 1,
+ }]
const delegation = createDelegation({
+ scope: {
+ type: "nativeTokenTransferAmount",
+ maxAmount: 1000000000000000n,
+ }
to: "DELEGATE_ADDRESS",
from: "DELEGATOR_ADDRESS",
+ environment,
caveats,
})
⚠️ createOpenDelegation
- The function now accepts the following mandatory parameters:
scope: The scope of the delegation that defines the initial authority. See how to use delegation scope.environment: The environment used by the toolkit to define contract addresses for interacting with the Delegation Framework contracts.
- The
caveatsparameter is now optional (previously mandatory) and is used to constrain the initial authority configured via thescope. - You no longer need to use
CaveatBuilderto create caveats, you can now use a declarative format to define them.
import { createOpenDelegation, getDelegatorEnvironment } from "@metamask/delegation-toolkit";
import { sepolia } from "viem/chains";
const environment = getDelegatorEnvironment(sepolia.id);
- const caveatBuilder = createCaveatBuilder(environment);
- const caveats = caveatBuilder.addCaveat("limitedCalls", 1);
+ const caveats = [{
+ type: "limitedCalls",
+ limit: 1,
+ }]
const delegation = createOpenDelegation({
+ scope: {
+ type: "nativeTokenTransferAmount",
+ maxAmount: 1000000000000000n,
+ }
from: "DELEGATOR_ADDRESS",
+ environment,
caveats,
})
⚠️ toMetaMaskSmartAccount
The signatory parameter has been renamed to signer for more clarity when creating MetaMaskSmartAccount instances.
const smartAccount = await toMetaMaskSmartAccount({
client: publicClient,
implementation: Implementation.Hybrid,
deployParams: [account.address, [], [], []],
deploySalt: "0x",
- signatory: { account: account },
+ signer: { account: account },
});
⚠️ createCaveatBuilder
The function has been moved from root to the utils export.
- import { createCaveatBuilder } from "@metamask/delegation-toolkit";
+ import { createCaveatBuilder } from "@metamask/delegation-toolkit/utils";
⚠️ Execution Modes
Individual constants like SINGLE_DEFAULT_MODE have been replaced with the ExecutionMode enum.
import { DelegationManager } from "@metamask/delegation-toolkit/contracts";
+ import { ExecutionMode } from "@metamask/delegation-toolkit";
const data = DelegationManager.encode.redeemDelegations({
delegations: [[delegation]],
- modes: [SINGLE_DEFAULT_MODE],
+ modes: [ExecutionMode.SingleDefault],
executions: [[execution]],
});
Enhancements
- New
CaveatEnforcerClienthas been added to check the delegation state. See how to check delegation state to retrieve remaining balance for spend limit caveat enforcers.
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 |