> For the complete documentation index, see [llms.txt](/llms.txt).

# 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](https://semver.org/#spec-item-4).

## Breaking changes[​](#breaking-changes "Direct link to Breaking changes")

### ⚠️ `sendTransactionWithDelegation`[​](#️-sendtransactionwithdelegation "Direct link to ️-sendtransactionwithdelegation")

- The `permissionsContext` parameter has been renamed to `permissionContext` (singular).
- `permissionContext` now accepts `PermissionContext` which represents encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming delegations.

```
await walletClient.sendTransactionWithDelegation({
- permissionsContext: "0x...",
+ permissionContext: "0x...",
  delegationManager: "0x..,
  // ...
});

```

### ⚠️ `sendUserOperationWithDelegation`[​](#️-senduseroperationwithdelegation "Direct link to ️-senduseroperationwithdelegation")

- The `permissionsContext` parameter has been renamed to `permissionContext` (singular).
- `permissionContext` now accepts `PermissionContext` which represents encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming delegations.
- The `accountMetadata` parameter has been replaced with `dependencies`.

```
await bundlerClient.sendUserOperationWithDelegation({
- accountMetadata: {
+ dependencies: {
    factory: "0x..",
    factoryData: "0x..."
  },
  // ...
  calls: [
    {
      to: sessionAccount.address,
      data: "0x",
      value: 1n,
-     permissionsContext: "0x..",
+     permissionContext: "0x..",
      delegationManager: "0x..",
    },
  ],
  // ...
});

```

### ⚠️ `getDelegationHashOffchain`[​](#️-getdelegationhashoffchain "Direct link to ️-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`[​](#️-requestexecutionpermissions "Direct link to ️-requestexecutionpermissions")

- The action now accepts `isAdjustmentAllowed` inside each permission object as per new ERC-7715 specification.
- The action now accepts `to` instead of `signer` for the session account.
- The action now returns developer friendly types, `chainId` as `number` and token amounts as `bigint`.
- `expiry` is 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`[​](#️-encodepermissioncontexts "Direct link to ️-encodepermissioncontexts")

The utility function has been removed. See [encodeDelegations](/smart-accounts-kit/reference/delegation/#encodedelegations) to encode the delegations.

### ⚠️ `decodePermissionContexts`[​](#️-decodepermissioncontexts "Direct link to ️-decodepermissioncontexts")

The utility function has been removed. See [decodeDelegations](/smart-accounts-kit/reference/delegation/#decodedelegations) to decode the delegations.

### ⚠️ `redeemDelegations`[​](#️-redeemdelegations "Direct link to ️-redeemdelegations")

The `redeemDelegations` function and `Redemption` type have been removed. Use the [DelegationManager.encode.redeemDelegations](/smart-accounts-kit/reference/delegation/#redeemdelegations) encoding utility.

## Enhancements[​](#enhancements "Direct link to Enhancements")

- New ERC-7715 Wallet Client actions have been added to [get the supported permission](/smart-accounts-kit/guides/advanced-permissions/get-supported-permissions/), and [get granted permissions](/smart-accounts-kit/guides/advanced-permissions/get-granted-permissions/) from a wallet.
- The `signer` parameter in `toMetaMaskSmartAccount` is now optional. If omitted, non-signing operations still work, but signing operations such as `signUserOperation`, `signDelegation`, `signMessage`, and `signTypedData` throw an error.
- Added [encodeDelegation](/smart-accounts-kit/reference/delegation/#encodedelegation) and [decodeDelegation](/smart-accounts-kit/reference/delegation/#decodedelegation) utilities for encoding and decoding single delegation.
- Allow scope type to be specified either as [ScopeType enum](/smart-accounts-kit/reference/types/#scopetype) or string literal.
- Allow caveat type to be specified either as [CaveatType enum](/smart-accounts-kit/reference/types/#caveattype) or string literal.
- Added support for Tempo Mainnet and Tempo Moderato Testnet.
- The `webauthn-p256` dependency has been replaced with the `ox` p256 module. This doesn't impact developer facing APIs.
- Improved `@metamask/delegation-abis` tree-shakability.

## Fixes[​](#fixes "Direct link to Fixes")

- Fixed `signDelegation` to correctly await the signer and return the signed signature.
- The `delegation.salt` and `caveat.args` now default to `0x00` instead of `0x`. This prevents `Cannot convert 0x to a BigInt` errors when encoding delegations directly with Viem.

## Contract addresses[​](#contract-addresses "Direct link to Contract addresses")

The following are the contract addresses for the [Delegation Framework version 1.3.0](https://github.com/MetaMask/delegation-framework/blob/v1.3.0/documents/Deployments.md), as used by this version of the toolkit.

### Delegation Framework[​](#delegation-framework "Direct link to Delegation Framework")

| Contract              | Address                                    |
| --------------------- | ------------------------------------------ |
| EntryPoint            | 0x0000000071727De22E5E9d8BAf0edAc6f37da032 |
| SimpleFactory         | 0x69Aa2f9fe1572F1B640E1bbc512f5c3a734fc77c |
| DelegationManager     | 0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3 |
| MultiSigDeleGatorImpl | 0x56a9EdB16a0105eb5a4C54f4C062e2868844f3A7 |
| HybridDeleGatorImpl   | 0x48dBe696A4D990079e039489bA2053B36E8FFEC4 |

### Caveat enforcers[​](#caveat-enforcers "Direct link to 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 |
