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
caveats
parameter is now optional (previously mandatory) and is used to constrain the initial authority configured via thescope
. - You no longer need to use
CaveatBuilder
to 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
caveats
parameter is now optional (previously mandatory) and is used to constrain the initial authority configured via thescope
. - You no longer need to use
CaveatBuilder
to 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
CaveatEnforcerClient
has 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 |