From 2d87aab5ba79ad27857e932aaf203b569f6b75b1 Mon Sep 17 00:00:00 2001 From: AyushBherwani1998 Date: Thu, 30 Jul 2026 16:33:42 +0530 Subject: [PATCH] update docs for v1.7.0 --- docusaurus.config.js | 6 +- .../version-1.0.0/changelog/1.0.0.md | 195 ---- .../version-1.0.0/concepts/smart-accounts.md | 94 -- .../smart-account-quickstart/eip7702.md | 168 --- .../smart-account-quickstart/index.md | 111 -- .../supported-advanced-permissions.md | 19 - .../get-started/supported-networks.md | 104 -- .../use-scaffold-eth/advanced-permissions.md | 60 - .../get-started/use-with-openclaw.md | 104 -- .../create-redelegation.md | 210 ---- .../execute-on-metamask-users-behalf.md | 324 ------ .../get-granted-permissions.md | 72 -- .../get-supported-permissions.md | 68 -- .../use-permissions/erc20-token.md | 203 ---- .../use-permissions/native-token.md | 151 --- .../guides/delegation/disable-delegation.md | 102 -- .../use-delegation-scopes/constrain-scope.md | 63 - .../use-delegation-scopes/function-call.md | 151 --- .../use-delegation-scopes/spending-limit.md | 244 ---- .../smart-accounts/deploy-smart-account.md | 152 --- .../generate-multisig-signature.md | 120 -- .../guides/smart-accounts/signers/dynamic.md | 134 --- .../signers/embedded-wallets.md | 122 -- .../guides/smart-accounts/signers/index.md | 53 - .../guides/smart-accounts/signers/passkey.md | 99 -- .../guides/smart-accounts/signers/privy.md | 123 -- .../advanced-permissions/permissions.md | 183 --- .../advanced-permissions/wallet-client.md | 191 --- .../reference/erc7710/wallet-client.md | 83 -- .../version-1.0.0/reference/smart-account.md | 663 ----------- .../version-1.0.0/reference/types.md | 224 ---- .../troubleshooting/allowance-exceeded.md | 59 - .../troubleshooting/invalid-delegate.md | 61 - .../user-operation-reverted.md | 112 -- .../version-1.1.0/assets/erc7715-request.png | Bin 89400 -> 0 bytes .../assets/scaffold-eth-7715.png | Bin 811269 -> 0 bytes .../assets/scaffold-eth-smart-accounts.png | Bin 885203 -> 0 bytes .../version-1.1.0/changelog/1.0.0.md | 195 ---- .../concepts/advanced-permissions.md | 64 -- .../concepts/delegation/caveat-enforcers.md | 61 - .../concepts/delegation/delegation-manager.md | 43 - .../concepts/delegation/delegation-scopes.md | 32 - .../concepts/delegation/overview.md | 162 --- .../version-1.1.0/get-started/install.md | 48 - .../supported-advanced-permissions.md | 19 - .../use-scaffold-eth/smart-accounts.md | 62 - .../version-1.1.0/get-started/use-the-cli.md | 80 -- .../get-started/use-with-openclaw.md | 104 -- .../create-redelegation.md | 210 ---- .../version-1.1.0/guides/configure-toolkit.md | 265 ----- .../delegation/check-delegation-state.md | 110 -- .../guides/delegation/create-redelegation.md | 177 --- .../execute-on-smart-accounts-behalf.md | 272 ----- .../delegation/use-delegation-scopes/index.md | 17 - .../ownership-transfer.md | 43 - .../smart-accounts/create-smart-account.md | 220 ---- .../send-gasless-transaction.md | 90 -- .../smart-accounts/send-user-operation.md | 185 --- .../smart-accounts/signers/eoa-wallets.md | 113 -- .../guides/smart-accounts/signers/index.md | 53 - gator_versioned_docs/version-1.1.0/index.mdx | 96 -- .../delegation/caveat-enforcer-client.md | 363 ------ .../reference/delegation/caveats.md | 1021 ----------------- .../reference/delegation/delegation-scopes.md | 360 ------ .../reference/delegation/index.md | 655 ----------- .../reference/erc7710/bundler-client.md | 105 -- .../reference/erc7710/wallet-client.md | 83 -- .../troubleshooting/aa21-prefund.md | 98 -- .../troubleshooting/error-codes.md | 56 - .../troubleshooting/invalid-delegator.md | 38 - .../troubleshooting/invalid-signature.md | 85 -- .../version-1.2.0/changelog/1.0.0.md | 195 ---- .../version-1.5.0/changelog/1.0.0.md | 195 ---- .../version-1.6.0/changelog/1.0.0.md | 195 ---- .../assets/erc7715-request.png | Bin .../assets/scaffold-eth-7715.png | Bin .../assets/scaffold-eth-smart-accounts.png | Bin .../changelog/1.2.0.md} | 22 +- .../changelog/1.5.0.md} | 19 +- .../changelog/1.6.0.md} | 28 +- .../changelog/1.7.0.md} | 17 +- .../concepts/advanced-permissions.md | 8 +- .../concepts/delegation/caveat-enforcers.md | 3 +- .../concepts/delegation/delegation-manager.md | 0 .../concepts/delegation/delegation-scopes.md | 0 .../concepts/delegation/overview.md | 0 .../concepts/smart-accounts.md | 2 +- .../get-started/install.md | 5 +- .../smart-account-quickstart/eip7702.md | 37 +- .../smart-account-quickstart/index.md | 22 +- .../supported-advanced-permissions.md | 23 + .../get-started/supported-networks.md | 32 +- .../use-scaffold-eth/advanced-permissions.md | 8 +- .../use-scaffold-eth/smart-accounts.md | 13 +- .../version-1.7.0/get-started/use-skills.md | 59 + .../get-started/use-the-cli.md | 34 +- .../create-redelegation.md | 168 +++ .../execute-on-metamask-users-behalf.md | 79 +- .../get-granted-permissions.md | 3 +- .../get-supported-permissions.md | 3 +- .../use-permissions/approval-revocation.md | 80 ++ .../use-permissions/erc20-token.md | 88 +- .../use-permissions/native-token.md | 65 +- .../guides/configure-toolkit.md | 20 +- .../delegation/check-delegation-state.md | 3 +- .../guides/delegation/create-redelegation.md | 13 +- .../guides/delegation/disable-delegation.md | 3 +- .../execute-on-smart-accounts-behalf.md | 25 +- .../use-delegation-scopes/constrain-scope.md | 1 + .../use-delegation-scopes/function-call.md | 9 +- .../delegation/use-delegation-scopes/index.md | 0 .../ownership-transfer.md | 4 +- .../use-delegation-scopes/spending-limit.md | 18 +- .../smart-accounts/create-smart-account.md | 11 +- .../smart-accounts/deploy-smart-account.md | 7 +- .../generate-multisig-signature.md | 5 +- .../send-gasless-transaction.md | 5 +- .../smart-accounts/send-user-operation.md | 7 +- .../guides/smart-accounts/signers/dynamic.md | 12 +- .../signers/embedded-wallets.md | 12 +- .../smart-accounts/signers/eoa-wallets.md | 15 +- .../guides/smart-accounts/signers/index.mdx | 59 + .../guides/smart-accounts/signers/passkey.md | 12 +- .../guides/smart-accounts/signers/privy.md | 14 +- .../guides/x402/buyer/advanced-permissions.md | 282 +++++ .../guides/x402/buyer/delegations.md | 131 +++ .../guides/x402/buyer/recurring-payments.md | 172 +++ .../version-1.7.0/guides/x402/overview.md | 66 ++ .../version-1.7.0/guides/x402/seller.md | 134 +++ .../index.mdx | 0 .../advanced-permissions/permissions.md | 111 +- .../reference/advanced-permissions/rules.md | 85 ++ .../advanced-permissions/wallet-client.md | 5 +- .../delegation/caveat-enforcer-client.md | 2 +- .../reference/delegation/caveats.md | 152 ++- .../reference/delegation/delegation-scopes.md | 35 +- .../reference/delegation/index.md | 301 ++++- .../reference/erc7710/bundler-client.md | 7 +- .../reference/erc7710/wallet-client.md | 221 ++++ .../version-1.7.0/reference/glossary.mdx | 106 ++ .../reference/smart-account.md | 93 +- .../reference/types.md | 156 ++- .../version-1.7.0/reference/x402.md | 94 ++ .../troubleshooting/aa21-prefund.md | 9 +- .../troubleshooting/allowance-exceeded.md | 0 .../troubleshooting/error-codes.md | 42 +- .../troubleshooting/invalid-delegate.md | 12 +- .../troubleshooting/invalid-delegator.md | 6 +- .../troubleshooting/invalid-signature.md | 10 +- .../user-operation-reverted.md | 4 +- .../version-1.1.0-sidebars.json | 240 ---- .../version-1.2.0-sidebars.json | 2 +- .../version-1.5.0-sidebars.json | 2 +- .../version-1.6.0-sidebars.json | 8 +- ...ebars.json => version-1.7.0-sidebars.json} | 56 +- gator_versions.json | 2 +- .../get-started/supported-networks.md | 32 +- smart-accounts-kit/reference/x402.md | 8 +- 158 files changed, 2867 insertions(+), 11790 deletions(-) delete mode 100644 gator_versioned_docs/version-1.0.0/changelog/1.0.0.md delete mode 100644 gator_versioned_docs/version-1.0.0/concepts/smart-accounts.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/eip7702.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/index.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/supported-advanced-permissions.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/supported-networks.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/advanced-permissions.md delete mode 100644 gator_versioned_docs/version-1.0.0/get-started/use-with-openclaw.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/create-redelegation.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-granted-permissions.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-supported-permissions.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/erc20-token.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/native-token.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/delegation/disable-delegation.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/constrain-scope.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/function-call.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/spending-limit.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/deploy-smart-account.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/generate-multisig-signature.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/dynamic.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/embedded-wallets.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/index.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/passkey.md delete mode 100644 gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/privy.md delete mode 100644 gator_versioned_docs/version-1.0.0/reference/advanced-permissions/permissions.md delete mode 100644 gator_versioned_docs/version-1.0.0/reference/advanced-permissions/wallet-client.md delete mode 100644 gator_versioned_docs/version-1.0.0/reference/erc7710/wallet-client.md delete mode 100644 gator_versioned_docs/version-1.0.0/reference/smart-account.md delete mode 100644 gator_versioned_docs/version-1.0.0/reference/types.md delete mode 100644 gator_versioned_docs/version-1.0.0/troubleshooting/allowance-exceeded.md delete mode 100644 gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegate.md delete mode 100644 gator_versioned_docs/version-1.0.0/troubleshooting/user-operation-reverted.md delete mode 100644 gator_versioned_docs/version-1.1.0/assets/erc7715-request.png delete mode 100644 gator_versioned_docs/version-1.1.0/assets/scaffold-eth-7715.png delete mode 100644 gator_versioned_docs/version-1.1.0/assets/scaffold-eth-smart-accounts.png delete mode 100644 gator_versioned_docs/version-1.1.0/changelog/1.0.0.md delete mode 100644 gator_versioned_docs/version-1.1.0/concepts/advanced-permissions.md delete mode 100644 gator_versioned_docs/version-1.1.0/concepts/delegation/caveat-enforcers.md delete mode 100644 gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-manager.md delete mode 100644 gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-scopes.md delete mode 100644 gator_versioned_docs/version-1.1.0/concepts/delegation/overview.md delete mode 100644 gator_versioned_docs/version-1.1.0/get-started/install.md delete mode 100644 gator_versioned_docs/version-1.1.0/get-started/supported-advanced-permissions.md delete mode 100644 gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/smart-accounts.md delete mode 100644 gator_versioned_docs/version-1.1.0/get-started/use-the-cli.md delete mode 100644 gator_versioned_docs/version-1.1.0/get-started/use-with-openclaw.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/advanced-permissions/create-redelegation.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/configure-toolkit.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/delegation/check-delegation-state.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/delegation/create-redelegation.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/delegation/execute-on-smart-accounts-behalf.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/index.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/ownership-transfer.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/smart-accounts/create-smart-account.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-gasless-transaction.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-user-operation.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/eoa-wallets.md delete mode 100644 gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/index.md delete mode 100644 gator_versioned_docs/version-1.1.0/index.mdx delete mode 100644 gator_versioned_docs/version-1.1.0/reference/delegation/caveat-enforcer-client.md delete mode 100644 gator_versioned_docs/version-1.1.0/reference/delegation/caveats.md delete mode 100644 gator_versioned_docs/version-1.1.0/reference/delegation/delegation-scopes.md delete mode 100644 gator_versioned_docs/version-1.1.0/reference/delegation/index.md delete mode 100644 gator_versioned_docs/version-1.1.0/reference/erc7710/bundler-client.md delete mode 100644 gator_versioned_docs/version-1.1.0/reference/erc7710/wallet-client.md delete mode 100644 gator_versioned_docs/version-1.1.0/troubleshooting/aa21-prefund.md delete mode 100644 gator_versioned_docs/version-1.1.0/troubleshooting/error-codes.md delete mode 100644 gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegator.md delete mode 100644 gator_versioned_docs/version-1.1.0/troubleshooting/invalid-signature.md delete mode 100644 gator_versioned_docs/version-1.2.0/changelog/1.0.0.md delete mode 100644 gator_versioned_docs/version-1.5.0/changelog/1.0.0.md delete mode 100644 gator_versioned_docs/version-1.6.0/changelog/1.0.0.md rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/assets/erc7715-request.png (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/assets/scaffold-eth-7715.png (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/assets/scaffold-eth-smart-accounts.png (100%) rename gator_versioned_docs/{version-1.5.0/changelog/1.1.0.md => version-1.7.0/changelog/1.2.0.md} (86%) rename gator_versioned_docs/{version-1.2.0/changelog/1.1.0.md => version-1.7.0/changelog/1.5.0.md} (84%) rename gator_versioned_docs/{version-1.1.0/changelog/1.1.0.md => version-1.7.0/changelog/1.6.0.md} (73%) rename gator_versioned_docs/{version-1.6.0/changelog/1.1.0.md => version-1.7.0/changelog/1.7.0.md} (85%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/concepts/advanced-permissions.md (90%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/concepts/delegation/caveat-enforcers.md (99%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/concepts/delegation/delegation-manager.md (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/concepts/delegation/delegation-scopes.md (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/concepts/delegation/overview.md (100%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/concepts/smart-accounts.md (98%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/get-started/install.md (84%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/get-started/smart-account-quickstart/eip7702.md (64%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/get-started/smart-account-quickstart/index.md (67%) create mode 100644 gator_versioned_docs/version-1.7.0/get-started/supported-advanced-permissions.md rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/get-started/supported-networks.md (81%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/get-started/use-scaffold-eth/advanced-permissions.md (89%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/get-started/use-scaffold-eth/smart-accounts.md (78%) create mode 100644 gator_versioned_docs/version-1.7.0/get-started/use-skills.md rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/get-started/use-the-cli.md (66%) create mode 100644 gator_versioned_docs/version-1.7.0/guides/advanced-permissions/create-redelegation.md rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/advanced-permissions/execute-on-metamask-users-behalf.md (70%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/advanced-permissions/get-granted-permissions.md (92%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/advanced-permissions/get-supported-permissions.md (91%) create mode 100644 gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/approval-revocation.md rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/advanced-permissions/use-permissions/erc20-token.md (81%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/advanced-permissions/use-permissions/native-token.md (69%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/configure-toolkit.md (89%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/delegation/check-delegation-state.md (94%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/delegation/create-redelegation.md (89%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/delegation/disable-delegation.md (96%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/delegation/execute-on-smart-accounts-behalf.md (80%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/delegation/use-delegation-scopes/constrain-scope.md (97%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/delegation/use-delegation-scopes/function-call.md (90%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/delegation/use-delegation-scopes/index.md (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/delegation/use-delegation-scopes/ownership-transfer.md (90%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/delegation/use-delegation-scopes/spending-limit.md (91%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/smart-accounts/create-smart-account.md (87%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/deploy-smart-account.md (89%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/generate-multisig-signature.md (92%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/smart-accounts/send-gasless-transaction.md (85%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/smart-accounts/send-user-operation.md (92%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/signers/dynamic.md (91%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/signers/embedded-wallets.md (90%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/guides/smart-accounts/signers/eoa-wallets.md (84%) create mode 100644 gator_versioned_docs/version-1.7.0/guides/smart-accounts/signers/index.mdx rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/signers/passkey.md (85%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/guides/smart-accounts/signers/privy.md (85%) create mode 100644 gator_versioned_docs/version-1.7.0/guides/x402/buyer/advanced-permissions.md create mode 100644 gator_versioned_docs/version-1.7.0/guides/x402/buyer/delegations.md create mode 100644 gator_versioned_docs/version-1.7.0/guides/x402/buyer/recurring-payments.md create mode 100644 gator_versioned_docs/version-1.7.0/guides/x402/overview.md create mode 100644 gator_versioned_docs/version-1.7.0/guides/x402/seller.md rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/index.mdx (100%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/reference/advanced-permissions/permissions.md (61%) create mode 100644 gator_versioned_docs/version-1.7.0/reference/advanced-permissions/rules.md rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/reference/advanced-permissions/wallet-client.md (93%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/reference/delegation/caveat-enforcer-client.md (99%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/reference/delegation/caveats.md (78%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/reference/delegation/delegation-scopes.md (93%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/reference/delegation/index.md (60%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/reference/erc7710/bundler-client.md (90%) create mode 100644 gator_versioned_docs/version-1.7.0/reference/erc7710/wallet-client.md create mode 100644 gator_versioned_docs/version-1.7.0/reference/glossary.mdx rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/reference/smart-account.md (87%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/reference/types.md (58%) create mode 100644 gator_versioned_docs/version-1.7.0/reference/x402.md rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/troubleshooting/aa21-prefund.md (83%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/troubleshooting/allowance-exceeded.md (100%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/troubleshooting/error-codes.md (83%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/troubleshooting/invalid-delegate.md (72%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/troubleshooting/invalid-delegator.md (73%) rename gator_versioned_docs/{version-1.0.0 => version-1.7.0}/troubleshooting/invalid-signature.md (88%) rename gator_versioned_docs/{version-1.1.0 => version-1.7.0}/troubleshooting/user-operation-reverted.md (95%) delete mode 100644 gator_versioned_sidebars/version-1.1.0-sidebars.json rename gator_versioned_sidebars/{version-1.0.0-sidebars.json => version-1.7.0-sidebars.json} (84%) diff --git a/docusaurus.config.js b/docusaurus.config.js index 3e6086a4d62..a5d5930a767 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -277,7 +277,7 @@ const config = { sidebarCollapsed: false, includeCurrentVersion: true, // Set to the latest release. - lastVersion: '1.6.0', + lastVersion: '1.7.0', versions: { // Defaults to the ./docs folder. // Using "development" instead of "next" as path. @@ -286,8 +286,8 @@ const config = { path: 'development', }, // The latest release. - '1.6.0': { - label: 'latest (1.6.0)', + '1.7.0': { + label: 'latest (1.7.0)', }, }, }, diff --git a/gator_versioned_docs/version-1.0.0/changelog/1.0.0.md b/gator_versioned_docs/version-1.0.0/changelog/1.0.0.md deleted file mode 100644 index 9410743c68f..00000000000 --- a/gator_versioned_docs/version-1.0.0/changelog/1.0.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_label: 1.0.0 -description: MetaMask Smart Accounts Kit v1.0.0 changelog ---- - -# What's new in v1.0.0? - -:::info 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 - -### ⚠️ `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. - -```ts -await walletClient.sendTransactionWithDelegation({ -// remove-next-line -- permissionsContext: "0x...", -// add-next-line -+ permissionContext: "0x...", - delegationManager: "0x.., - // ... -}); -``` - -### ⚠️ `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`. - -```ts -await bundlerClient.sendUserOperationWithDelegation({ - // remove-next-line -- accountMetadata: { - // add-next-line -+ dependencies: { - factory: "0x..", - factoryData: "0x..." - }, - // ... - calls: [ - { - to: sessionAccount.address, - data: "0x", - value: 1n, - // remove-next-line -- permissionsContext: "0x..", - // add-next-line -+ permissionContext: "0x..", - delegationManager: "0x..", - }, - ], - // ... -}); -``` - -### ⚠️ `getDelegationHashOffchain` - -The function has been renamed to `hashDelegation` for improved clarity. - -```typescript -// remove-next-line -- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit"; -// add-next-line -+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils"; - -// remove-next-line -- const delegationHash = getDelegationHashOffchain(delegation); -// add-next-line -+ const delegationHash = hashDelegation(delegation); -``` - -### ⚠️ `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. - -```ts -await walletClient.requestExecutionPermissions([{ - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - // add-next-line -+ to: sessionAccount.address, - // remove-start -- signer: { -- type: "account", -- data: { -- address: sessionAccount.address, -- }, -- }, - // remove-end - // remove-next-line -- isAdjustmentAllowed: true, - permission: { - type: "erc20-token-periodic", - data: { - // ... - }, - // add-next-line -+ isAdjustmentAllowed: true, - }, -}]); -``` - -### ⚠️ `encodePermissionContexts` - -The utility function has been removed. See [`encodeDelegations`](../reference/delegation/index.md#encodedelegations) to encode the delegations. - -### ⚠️ `decodePermissionContexts` - -The utility function has been removed. See [`decodeDelegations`](../reference/delegation/index.md#decodedelegations) to decode the delegations. - -### ⚠️ `redeemDelegations` - -The `redeemDelegations` function and `Redemption` type have been removed. Use the [`DelegationManager.encode.redeemDelegations`](../reference/delegation/index.md#redeemdelegations) encoding utility. - -## Enhancements - -- New ERC-7715 Wallet Client actions have been added to [get the supported permission](../guides/advanced-permissions/get-supported-permissions.md), and [get granted permissions](../guides/advanced-permissions/get-granted-permissions.md) 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`](../reference/delegation/index.md#encodedelegation) and [`decodeDelegation`](../reference/delegation/index.md#decodedelegation) utilities for encoding and decoding single delegation. -- Allow scope type to be specified either as [ScopeType enum](../reference/types.md#scopetype) or string literal. -- Allow caveat type to be specified either as [CaveatType enum](../reference/types.md#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 - -- 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 - -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 - -| 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` | diff --git a/gator_versioned_docs/version-1.0.0/concepts/smart-accounts.md b/gator_versioned_docs/version-1.0.0/concepts/smart-accounts.md deleted file mode 100644 index 3bc48237cc9..00000000000 --- a/gator_versioned_docs/version-1.0.0/concepts/smart-accounts.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -description: Learn about MetaMask Smart Accounts. -keywords: [MetaMask, smart accounts, account abstraction, ERC-4337] ---- - -# MetaMask Smart Accounts - -The Smart Accounts Kit enables you to create and manage _MetaMask Smart Accounts_. -MetaMask Smart Accounts are [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart contract accounts -that support programmable account behavior and advanced features such as multi-signature approvals, -automated transaction batching, and custom security policies. -Unlike traditional wallets, which rely on private keys for every transaction, MetaMask Smart Accounts use smart contracts to govern account logic. - -MetaMask Smart Accounts are referenced in the toolkit as `MetaMaskSmartAccount`. - -## Account abstraction (ERC-4337) - -Account abstraction, specified by [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337), is a -mechanism that enables users to manage smart contract accounts containing arbitrary verification logic. -ERC-4337 enables smart contracts to be used as primary accounts in place of traditional private key-based -accounts, or externally owned accounts (EOAs). - -ERC-4337 introduces the following concepts: - -- **User operation** - A package of instructions signed by a user, specifying executions for - the smart account to perform. - User operations are collected and submitted to the network by bundlers. - -- **Bundler** - A service that collects multiple user operations, packages them into a single transaction, - and submits them to the network, optimizing gas costs and transaction efficiency. - -- **Entry point contract** - A contract that validates and processes bundled user operations, ensuring they - adhere to the required rules and security checks. - -- **Paymasters** - Entities that handle the payment of gas fees on behalf of users, often integrated - into smart accounts to facilitate gas abstraction. - -## Smart account implementation types - -The toolkit supports three types of MetaMask Smart Accounts, each offering unique features and use cases. - -See [Create a smart account](../guides/smart-accounts/create-smart-account.md) to learn how to use these different account types. - -### Hybrid smart account - -The Hybrid smart account is a flexible implementation that supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers. -You can configure any of these signers, and use them to sign any data, including user operations, on behalf of the smart account. - -This type is referenced in the toolkit as `Implementation.Hybrid`. - -### Multisig smart account - -The Multisig smart account is an implementation that supports multiple signers with a configurable threshold, allowing for enhanced security and flexibility in account management. -A valid signature requires signatures from at least the number of signers specified by the threshold. - -This type is referenced in the toolkit as `Implementation.Multisig`. - -### Stateless 7702 smart account - -The Stateless 7702 smart account implementation represents an externally owned account (EOA) upgraded to -support smart account functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). This implementation enables EOAs to perform smart account operations, including the creation and management of delegations. - -This type is referenced in the toolkit as `Implementation.Stateless7702`. - -## Smart account flow - -The MetaMask Smart Accounts flow is as follows: - -1. **Account setup** - A user creates a smart account by deploying a smart contract, and initializing it with - ownership and security settings. - The user can customize the smart account in the following ways: - - **Account logic** - They can configure custom logic for actions such as multi-signature - approvals, spending limits, and automated transaction batching. - - - **Security and recovery** - They can configure advanced security features such as two-factor - authentication and mechanisms for account recovery involving trusted parties. - - - **Gas management** - They can configure flexible gas payment options, including alternative - tokens or third-party sponsorship. - -2. **User operation creation** - For actions such as sending transactions, a user operation is created with - necessary details and signed by the configured signers. - -3. **Bundlers and mempool** - The signed user operation is submitted to a special mempool, where bundlers - collect and package multiple user operations into a single transaction to save on gas costs. - -4. **Validation and execution** - The bundled transaction goes to an entry point contract, which - validates each user operation and executes them if they meet the smart contract's rules. - -## Delegator accounts - -Delegator accounts are a type of MetaMask smart account that allows users to grant permission to other smart accounts or EOAs -to perform specific executions on their behalf, under defined rules and restrictions. -Learn more about [delegation](delegation/overview.md). diff --git a/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/eip7702.md b/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/eip7702.md deleted file mode 100644 index 560e7499ae9..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/eip7702.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -description: Upgrade an externally owned account (EOA) to a smart account -sidebar_label: EIP-7702 quickstart -keywords: [quickstart, EIP-7702, externally owned account, EOA, smart account] ---- - -# EIP-7702 quickstart - -This quickstart demonstrates how to upgrade your externally owned account (EOA) to support MetaMask Smart Accounts -functionality using an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction. This enables your EOA to leverage the benefits of account -abstraction, such as batch transactions, gas sponsorship, and [delegation capabilities](../../concepts/delegation/overview.md). - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. -- [Install Viem](https://viem.sh/). - -## Steps - -### 1. Install the Smart Accounts Kit - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): - -```bash npm2yarn -npm install @metamask/smart-accounts-kit -``` - -### 2. Set up a Public Client - -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. -This client will let the EOA query the account state and interact with the blockchain network. - -```typescript -import { createPublicClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - -### 3. Set up a Bundler Client - -Set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. -This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. - -```typescript -import { createBundlerClient } from 'viem/account-abstraction' - -const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://your-bundler-rpc.com'), -}) -``` - -### 4. Set up a Wallet Client - -Set up [Viem Wallet Client](https://viem.sh/docs/clients/wallet) using Viem's `createWalletClient` function. -This lets you sign and submit EIP-7702 authorization. - -```typescript -import { createWalletClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' -import { privateKeyToAccount } from 'viem/accounts' - -export const account = privateKeyToAccount('0x...') - -export const walletClient = createWalletClient({ - account, - chain, - transport: http(), -}) -``` - -### 5. Authorize a 7702 delegation - -Create an authorization to map the contract code to an EOA, and sign it -using Viem's [`signAuthorization`](https://viem.sh/docs/eip7702/signAuthorization) action. The `signAuthorization` action -does not support JSON-RPC accounts. - -This example uses [`EIP7702StatelessDeleGator`](https://github.com/MetaMask/delegation-framework/blob/main/src/EIP7702/EIP7702StatelessDeleGator.sol) as the EIP-7702 delegator contract. -It follows a stateless design, as it does not store signer data in the contract's state. This approach -provides a lightweight and secure way to upgrade an EOA to a smart account. - -```typescript -import { - Implementation, - toMetaMaskSmartAccount, - getSmartAccountsEnvironment, -} from '@metamask/smart-accounts-kit' -import { privateKeyToAccount } from 'viem/accounts' - -const environment = getSmartAccountsEnvironment(sepolia.id) -const contractAddress = environment.implementations.EIP7702StatelessDeleGatorImpl - -const authorization = await walletClient.signAuthorization({ - account, - contractAddress, - executor: 'self', -}) -``` - -### 6. Submit the authorization - -Once you have signed an authorization, you can send an EIP-7702 transaction to set the EOA code. -Since the authorization cannot be sent by itself, you can include it alongside a dummy transaction. - -```ts -import { zeroAddress } from 'viem' - -const hash = await walletClient.sendTransaction({ - authorizationList: [authorization], - data: '0x', - to: zeroAddress, -}) -``` - -### 7. Create a MetaMask smart account - -Create a smart account instance for the EOA and start -leveraging the benefits of account abstraction. - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const addresses = await walletClient.getAddresses() -const address = addresses[0] - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Stateless7702, - address, - signer: { walletClient }, -}) -``` - -### 8. Send a user operation - -Send a user operation through the upgraded EOA, using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. - -```ts -import { parseEther } from 'viem' - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: '0x1234567890123456789012345678901234567890', - value: parseEther('1'), - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, -}) -``` - -## Next steps - -- To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). -- To quickly bootstrap a MetaMask Smart Accounts project, [use the CLI](../use-the-cli.md). -- You can also [use MetaMask Connect to upgrade a MetaMask account to a smart account](/tutorials/upgrade-eoa-to-smart-account). diff --git a/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/index.md b/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/index.md deleted file mode 100644 index 2d22d8c36c9..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/smart-account-quickstart/index.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -description: Get started quickly with the MetaMask Smart Accounts -sidebar_label: Smart account quickstart -keywords: [quickstart, smart accounts, user operation] ---- - -# MetaMask Smart Accounts quickstart - -You can get started quickly with [MetaMask Smart Accounts](../../concepts/smart-accounts.md) by creating your first smart account and sending a user operation. - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. - -## Steps - -### 1. Install the Smart Accounts Kit - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): - -```bash npm2yarn -npm install @metamask/smart-accounts-kit -``` - -### 2. Set up a Public Client - -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. This client will let the smart account query the signer's account state and interact with the blockchain network. - -```typescript -import { createPublicClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - -### 3. Set up a Bundler Client - -Set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. - -```typescript -import { createBundlerClient } from 'viem/account-abstraction' - -const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://your-bundler-rpc.com'), -}) -``` - -### 4. Create a MetaMask smart account - -[Create a MetaMask smart account](../../guides/smart-accounts/create-smart-account.md) to send the first user operation. - -This example configures a Hybrid smart account, -which is a flexible smart account implementation that supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers: - -```typescript -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { privateKeyToAccount } from 'viem/accounts' - -const account = privateKeyToAccount('0x...') - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) -``` - -### 5. Send a user operation - -Send a user operation using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. - -See [Send a user operation](../../guides/smart-accounts/send-user-operation.md) to learn how to estimate fee per gas, and wait for the transaction receipt. - -The smart account will remain counterfactual until the first user operation. If the smart account is not -deployed, it will be automatically deployed upon the sending first user operation. - -```ts -import { parseEther } from 'viem' - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: '0x1234567890123456789012345678901234567890', - value: parseEther('1'), - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, -}) -``` - -## Next steps - -- To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). -- This quickstart example uses a Hybrid smart account. - You can also [configure other smart account types](../../guides/smart-accounts/create-smart-account.md). -- To upgrade an EOA to a smart account, see the [EIP-7702 quickstart](eip7702.md). -- To quickly bootstrap a MetaMask Smart Accounts project, [use the CLI](../use-the-cli.md). diff --git a/gator_versioned_docs/version-1.0.0/get-started/supported-advanced-permissions.md b/gator_versioned_docs/version-1.0.0/get-started/supported-advanced-permissions.md deleted file mode 100644 index 9664ab0a22d..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/supported-advanced-permissions.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Supported Advanced Permissions -description: Supported Advanced Permissions for Smart Accounts Kit, MetaMask Flask, and MetaMask. -keywords: [MetaMask, smart accounts kit, supported advanced permissions, erc-7715, 7715] ---- - -The following table displays the Advanced Permissions types supported by the -Smart Accounts Kit, [MetaMask Flask](/snaps/get-started/install-flask), and MetaMask production, and the minimum version required for each. - -If you don't see the Advanced Permissions type you're looking for, you can request it by -emailing [hellogators@consensys.net](mailto:hellogators@consensys.net). - -| Permission type | Smart Accounts Kit | MetaMask Flask | MetaMask | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------ | -------------- | ----------- | -| [ERC-20 periodic](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [ERC-20 stream](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [ERC-20 revocation](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-revocation-permission) | >= v0.3.0 | >= v13.14.0 | >= 13.18.1 | -| [Native token periodic](../guides/advanced-permissions/use-permissions/native-token.md#native-token-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [Native token stream](../guides/advanced-permissions/use-permissions/native-token.md#native-token-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | diff --git a/gator_versioned_docs/version-1.0.0/get-started/supported-networks.md b/gator_versioned_docs/version-1.0.0/get-started/supported-networks.md deleted file mode 100644 index 5021cf94559..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/supported-networks.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Supported networks -sidebar_label: Supported networks -description: Supported networks for Smart Accounts Kit. -keywords: [MetaMask, smart accounts kit, supported networks, mainnet, testnet] ---- - -The following tables display the networks supported by each version of the Smart Accounts Kit. - -If you don't see the network you're looking for, you can request support by emailing hellogators@consensys.net. - -## MetaMask Smart Accounts - -### Mainnet networks - -| Network Name | v0.1.0 | v0.2.0 | v0.3.0 | v1.0.0 | -| ------------------- | ------ | ------ | ------ | ------ | -| Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | -| Arbitrum One | ✅ | ✅ | ✅ | ✅ | -| Base | ✅ | ✅ | ✅ | ✅ | -| Berachain | ✅ | ✅ | ✅ | ✅ | -| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo | ❌ | ❌ | ❌ | ✅ | -| Citrea | ❌ | ❌ | ❌ | ✅ | -| Ethereum | ✅ | ✅ | ✅ | ✅ | -| Gnosis Chain | ✅ | ✅ | ✅ | ✅ | -| Ink | ✅ | ✅ | ✅ | ✅ | -| Linea | ✅ | ✅ | ✅ | ✅ | -| MegaETH | ❌ | ❌ | ❌ | ✅ | -| Monad | ❌ | ✅ | ✅ | ✅ | -| Optimism | ✅ | ✅ | ✅ | ✅ | -| Polygon | ✅ | ✅ | ✅ | ✅ | -| Ronin | ❌ | ❌ | ❌ | ✅ | -| Sei | ✅ | ✅ | ✅ | ✅ | -| Sonic | ❌ | ✅ | ✅ | ✅ | -| Tempo | ❌ | ❌ | ❌ | ✅ | -| Unichain | ✅ | ✅ | ✅ | ✅ | - -### Testnet networks - -| Network Name | v0.1.0 | v0.2.0 | v0.3.0 | v1.0.0 | -| ------------------- | ------ | ------ | ------ | ------ | -| Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | -| Base Sepolia | ✅ | ✅ | ✅ | ✅ | -| Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | -| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo Alfajores | ❌ | ❌ | ❌ | ✅ | -| Citrea | ✅ | ✅ | ✅ | ✅ | -| Ethereum Sepolia | ✅ | ✅ | ✅ | ✅ | -| Gnosis Chiado | ✅ | ✅ | ✅ | ✅ | -| Hoodi | ❌ | ✅ | ✅ | ✅ | -| Ink Sepolia | ✅ | ✅ | ✅ | ✅ | -| Linea Sepolia | ✅ | ✅ | ✅ | ✅ | -| MegaETH | ✅ | ✅ | ✅ | ✅ | -| Monad | ✅ | ✅ | ✅ | ✅ | -| Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | -| Polygon Amoy | ✅ | ✅ | ✅ | ✅ | -| Ronin Saigon | ❌ | ❌ | ❌ | ✅ | -| Sei | ❌ | ✅ | ✅ | ✅ | -| Sonic | ❌ | ✅ | ✅ | ✅ | -| Tempo Moderato | ❌ | ❌ | ❌ | ✅ | -| Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | - -## Advanced Permissions (ERC-7715) - -### Mainnet networks - -| Network Name | v0.1.0 | v0.2.0 | v0.3.0 | v1.0.0 | -| ------------------- | ------ | ------ | ------ | ------ | -| Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | -| Arbitrum One | ✅ | ✅ | ✅ | ✅ | -| Base | ✅ | ✅ | ✅ | ✅ | -| Berachain | ✅ | ✅ | ✅ | ✅ | -| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Citrea | ✅ | ✅ | ✅ | ✅ | -| Ethereum | ✅ | ✅ | ✅ | ✅ | -| Gnosis | ✅ | ✅ | ✅ | ✅ | -| Linea | ✅ | ✅ | ✅ | ✅ | -| Monad | ✅ | ✅ | ✅ | ✅ | -| Optimism | ✅ | ✅ | ✅ | ✅ | -| Polygon | ✅ | ✅ | ✅ | ✅ | -| Sei | ✅ | ✅ | ✅ | ✅ | -| Sonic | ✅ | ✅ | ✅ | ✅ | -| Unichain | ✅ | ✅ | ✅ | ✅ | - -### Testnet networks - -| Network Name | v0.1.0 | v0.2.0 | v0.3.0 | v1.0.0 | -| ------------------- | ------ | ------ | ------ | ------ | -| Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | -| Base Sepolia | ✅ | ✅ | ✅ | ✅ | -| Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | -| Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Chiado | ✅ | ✅ | ✅ | ✅ | -| Citrea | ✅ | ✅ | ✅ | ✅ | -| Hoodi | ✅ | ✅ | ✅ | ✅ | -| Linea Sepolia | ✅ | ✅ | ✅ | ✅ | -| MegaETH | ✅ | ✅ | ✅ | ✅ | -| Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | -| Polygon Amoy | ✅ | ✅ | ✅ | ✅ | -| Sei | ✅ | ✅ | ✅ | ✅ | -| Sepolia | ✅ | ✅ | ✅ | ✅ | -| Sonic | ✅ | ✅ | ✅ | ✅ | -| Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | diff --git a/gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/advanced-permissions.md b/gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/advanced-permissions.md deleted file mode 100644 index 27d6f83e3be..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/advanced-permissions.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -description: Get started with the Advanced Permissions (ERC-7715) using Scaffold-ETH 2. -sidebar_label: Advanced Permissions (ERC-7715) -keywords: [scaffold-eth, delegation, advanced permissions, erc7715, 7715, template] ---- - -# Use Advanced Permissions with Scaffold-ETH 2 - -Use the [Advanced Permissions (ERC-7715) extension](https://github.com/MetaMask/erc-7715-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in -under two minutes. This extension helps you quickly generate the boilerplate code to request fine-grained permissions -from a MetaMask user, and execute transactions on their behalf. - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v20.18.3) v20.18.3 or later. -- Install [Yarn](https://yarnpkg.com/) package manager. -- Install [Git](https://git-scm.com/install/). -- [Create a Pimlico API key](https://docs.pimlico.io/guides/create-api-key#create-api-key). - -### 1. Install the extension - -Run the following command to install the Smart Accounts Kit extension: - -```bash -npx create-eth@latest -e metamask/erc-7715-extension your-project-name -``` - -### 2. Set up enviroment variables - -Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the -`NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. - -```bash -cd your-project-name/packages/nextjs -cp .env.example .env.local -``` - -### 3. Start the frontend - -In the project's root directory start the development server. - -```bash -yarn start -``` - -### 4. Complete the Advanced Permissions lifecycle - -Navigate to the **Advanced Permissions (ERC-7715)** page in your Scaffold-ETH -frontend at http://localhost:3000/erc-7715-permissions, and follow the steps to request an advanced -permission, and execute a transaction on the user's behalf. - -You can view the completed transaction on Etherscan. - -

- Scaffold-ETH 2 Advanced Permissions Page -

- -## Next steps - -Learn more about [Advanced Permissions (ERC-7715)](../../concepts/advanced-permissions.md). diff --git a/gator_versioned_docs/version-1.0.0/get-started/use-with-openclaw.md b/gator_versioned_docs/version-1.0.0/get-started/use-with-openclaw.md deleted file mode 100644 index db85364a71c..00000000000 --- a/gator_versioned_docs/version-1.0.0/get-started/use-with-openclaw.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -sidebar_label: Use with OpenClaw -description: Use the MetaMask Smart Accounts Kit skill with OpenClaw to build and deploy applications with smart accounts support. -toc_max_heading_level: 2 -keywords: [openclaw, skill, delegation, smart accounts, ai, metamask smart accounts kit] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use the Smart Accounts Kit with OpenClaw - -Use the MetaMask Smart Accounts Kit [OpenClaw skills](https://docs.openclaw.ai/tools/skills) to interact with the Smart Accounts Kit using natural language prompts. - -[OpenClaw](https://openclaw.ai/) is an open-source platform for AI agents that enables you to build, deploy, and -manage AI assistants with access to various tools and skills. The Smart Accounts Kit provides the below two skills. - -## Gator CLI skill - -This skill enables your agent to grant, redeem, inspect and revoke ERC-7710 delegations using the [`@metamask/gator-cli`](https://www.npmjs.com/package/@metamask/gator-cli) package. - -:::warning Alpha version - -This CLI is in alpha version, and stores agent's private key in a local -JSON file (`~/.gator-cli/`). Please proceed with caution, and do not use -it with accounts holding significant funds. - -::: - -### Install - - - - -```bash -clawhub install gator-cli -``` - - - - -```txt -Install the skill from https://github.com/MetaMask/openclaw-skills/blob/main/metamask/gator-cli/SKILL.md -``` - - - - -### Reference - -The skill provides access to the following commands: - -| Command | Description | -| --------- | -------------------------------------------- | -| `init` | Generate a private key and save config. | -| `create` | Upgrade an EOA to an EIP-7702 smart account. | -| `show` | Display the EOA address. | -| `status` | Check config and on chain account status. | -| `balance` | Show native or ERC-20 balance. | -| `grant` | Create, sign, and store a delegation. | -| `redeem` | Redeem a delegation using an action type. | -| `revoke` | Revoke a delegation on chain. | -| `inspect` | View delegations for your account. | - -## Smart Accounts Kit skill - -This skill helps your agent learn about the Smart Accounts Kit and its capabilities, and integrate them into your applications. - -### Install - - - - -```bash -clawhub install smart-accounts-kit -``` - - - - -```bash -cd ~/.openclaw/workspace/skills -git clone https://github.com/smartgator/smart-accounts-kit-skills.git -``` - - - - -```txt -Install the skill from https://github.com/smartgator/smart-accounts-kit-skills.git -``` - - - - -### Reference - -The skill provides access to the following capabilities: - -| Capability | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| [Smart accounts](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/smart-accounts.md) | Helps you integrate MetaMask Smart Accounts to support batch transactions, multi-sig signatures, and gas sponsorship. | -| [Delegation](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/delegations.md) | Helps you integrate delegations with scopes and caveats. | -| [Advanced Permissions](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/advanced-permissions.md) | Helps you integrate Advanced Permissions. | diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/create-redelegation.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/create-redelegation.md deleted file mode 100644 index e1736c2c43a..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/create-redelegation.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -description: Learn how to create a redelegation for Advanced Permissions. -sidebar_label: Create a redelegation -keywords: [advanced permissions, caveat, delegation scope, redelegation, delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Create a redelegation - -Redelegation is a core feature that sets Advanced Permissions apart from other permission sharing frameworks. -It allows a session account (delegate) to create a delegation chain, passing on the same or reduced level of authority -from the MetaMask account (delegator). - -For example, if a dapp is granted permission to spend 10 USDC on a user's behalf, it can -further delegate that permission to specific agents, such as allowing a Swap agent to spend -up to 5 USDC. This creates a permission sharing chain in which the root permissions are -shared with additional parties. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) -- [Learn how to request Advanced Permissions.](execute-on-metamask-users-behalf.md) - -## Request Advanced Permissions - -Request Advanced Permissions from the user with the Wallet Client's [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) action. - -This example uses the [ERC-20 periodic permission](./use-permissions/erc20-token.md#erc-20-periodic-permission), allowing the -user to grant dapp the ability to spend 10 USDC on their behalf. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { sessionAccount, walletClient, tokenAddress } from './config.ts' -import { parseUnits } from 'viem' - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-periodic', - data: { - tokenAddress, - // 10 USDC in wei format. Since USDC has 6 decimals, 10 * 10^6 - periodAmount: parseUnits('10', 6), - // 1 day in seconds - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - - -```ts -import { createWalletClient, custom, createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' -import { sepolia as chain } from 'viem/chains' - -// USDC address on Ethereum Sepolia. -export const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -export const sessionAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## Decode delegations - -The granted permissions object includes a `context` property that represents the encoded delegations. - -To create a redelegation, you must first decode these delegations to access the -underlying delegations. To decode the delegations, use the [`decodeDelegations`](../../reference/delegation/index.md#decodedelegations) utility function. - -```ts -import { decodeDelegations } from '@metamask/smart-accounts-kit/utils' - -const permissionContext = grantedPermissions[0].context - -const delegations = decodeDelegations(permissionContext) -const rootDelegation = delegations[0] -``` - -## Create a redelegation - -Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from dapp to a Swap agent. - -To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [`createDelegation`](../../reference/delegation/index.md#createdelegation). - -This example uses the [`erc20TransferAmount`](../delegation/use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing -dapp to delegate to a Swap agent the ability to spend 5 USDC on user's behalf. - -:::note -When creating a redelegation, you can only narrow the scope of the original authority, not expand it. -::: - - - - -```typescript -import { sessionAccount, agentSmartAccount, tokenAddress } from './config.ts' -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const redelegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress, - // USDC has 6 decimal places. - maxAmount: parseUnits('5', 6), - }, - to: agentSmartAccount.address, - from: sessionAccount.address, - // Signed root delegation extracted from Advanced Permissions. - parentDelegation: rootDelegation, - environment: sessionAccount.environment, -}) - -const signedRedelegation = await sessionAccount.signDelegation({ delegation: redelegation }) -``` - - - - -```typescript -// Update the existing config to create a smart account for a Swap agent. - -const agentAccount = privateKeyToAccount('0x...') - -export const agentSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [agentAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: agentAccount }, -}) -``` - - - - -### Limit redelegation using caveats - -When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) to narrow the Swap agent's authority. For example, you can limit the authority so Swap agent can use the delegation only once. - -To apply caveats, create the `Delegation` object and use [`createCaveatBuilder`](../../reference/delegation/index.md#createcaveatbuilder). -Use [`hashDelegation`](../../reference/delegation/index.md#hashdelegation) to get the delegation hash, then provide it as the `authority` field. - -This example uses the [`limitedCalls`](../../reference/delegation/caveats.md#limitedcalls) caveat with a limit of `1`. - -```ts -// Use the config from previous step. -import { sessionAccount, agentSmartAccount, tokenAddress } from './config.ts' -import { CaveatType } from '@metamask/smart-accounts-kit' -import { createCaveatBuilder, hashDelegation } from '@metamask/smart-accounts-kit/utils' - -const caveatBuilder = createCaveatBuilder(sessionAccount.environment) - -const caveats = caveatBuilder.addCaveat(CaveatType.LimitedCalls, { limit: 1 }) - -const redelegation: Delegation = { - delegate: sessionAccount.address, - delegator: agentSmartAccount.address, - authority: hashDelegation(rootDelegation), - caveats: caveats.build(), - salt: '0x', -} - -const signedRedelegation = await sessionAccount.signDelegation({ delegation: redelegation }) -``` diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md deleted file mode 100644 index f0d71551dba..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md +++ /dev/null @@ -1,324 +0,0 @@ ---- -description: Use Advanced Permissions (ERC-7715) to perform executions on a MetaMask user's behalf. -sidebar_label: Execute on a MetaMask user's behalf -keywords: - [ - execution, - smart account, - create, - redeem, - delegation, - erc 7715, - 7715, - session account, - advanced permissions, - ] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Perform executions on a MetaMask user's behalf - -[Advanced Permissions (ERC-7715)](../../concepts/advanced-permissions.md) are fine-grained permissions that your dapp can request from a MetaMask user to execute transactions on their -behalf. For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course -of a month. Once the permission is granted, your dapp can use the allocated 10 USDC each day to -purchase ETH directly from the MetaMask user's account. - -In this guide, you'll request an ERC-20 periodic transfer permission from a MetaMask user to transfer 1 USDC every day on their behalf. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Install MetaMask Flask 13.5.0 or later.](/snaps/get-started/install-flask) - -## Steps - -### 1. Set up a Wallet Client - -Set up a [Viem Wallet Client](https://viem.sh/docs/clients/wallet) using Viem's `createWalletClient` function. This client will -help you interact with MetaMask Flask. - -Then, extend the Wallet Client functionality using `erc7715ProviderActions`. These actions enable you to request Advanced Permissions from the user. - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - -### 2. Set up a Public Client - -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. -This client will help you query the account state and interact with the blockchain network. - -```typescript -import { createPublicClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - -### 3. Set up a session account - -Set up a session account which can either be a smart account or an externally owned account (EOA) -to request Advanced Permissions. The requested permissions are granted to the session account, which -is responsible for executing transactions on behalf of the user. - - - - -```typescript -import { privateKeyToAccount } from 'viem/accounts' -import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' - -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -const sessionAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) -``` - - - - -```typescript -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { createWalletClient, http } from 'viem' - -const sessionAccount = privateKeyToAccount('0x...') -``` - - - - -### 4. Check the EOA account code - -With MetaMask Flask 13.9.0 or later, Advanced Permissions support automatically upgrading a user’s -account to a [MetaMask smart account](../../concepts/smart-accounts.md). On earlier versions, upgrade -the user to a smart account before requesting Advanced Permissions. - -If the user has not yet been upgraded, you can handle the upgrade [programmatically](/metamask-connect/evm/guides/send-transactions/batch-transactions) or ask the -user to [switch to a smart account manually](https://support.metamask.io/configure/accounts/switch-to-or-revert-from-a-smart-account/#how-to-switch-to-a-metamask-smart-account). - -:::info Why is a Smart Account upgrade is required? -MetaMask's Advanced Permissions (ERC-7715) implementation requires the user to be upgraded to a MetaMask -Smart Account because, under the hood, you're requesting a signature for an [ERC-7710 delegation](../../concepts/delegation/overview.md). -ERC-7710 delegation is one of the core features supported only by MetaMask Smart Accounts. -::: - -```typescript -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' - -const addresses = await walletClient.requestAddresses() -const address = addresses[0] - -// Get the EOA account code -const code = await publicClient.getCode({ - address, -}) - -if (code) { - // The address to which EOA has delegated. According to EIP-7702, 0xef0100 || address - // represents the delegation. - // - // You need to remove the first 8 characters (0xef0100) to get the delegator address. - const delegatorAddress = `0x${code.substring(8)}` - - const statelessDelegatorAddress = getSmartAccountsEnvironment(chain.id).implementations - .EIP7702StatelessDeleGatorImpl - - // If account is not upgraded to MetaMask smart account, you can - // either upgrade programmatically or ask the user to switch to a smart account manually. - const isAccountUpgraded = - delegatorAddress.toLowerCase() === statelessDelegatorAddress.toLowerCase() -} -``` - -### 5. Request Advanced Permissions - -Request Advanced Permissions from the user with the Wallet Client's `requestExecutionPermissions` action. -In this example, you'll request an -[ERC-20 periodic permission](use-permissions/erc20-token.md#erc-20-periodic-permission). - -See the [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) API reference for more information. - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseUnits } from 'viem' - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-periodic', - data: { - tokenAddress, - // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6 - periodAmount: parseUnits('10', 6), - // 1 day in seconds - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - -### 6. Set up a Viem client - -Set up a Viem client depending on your session account type. - -For a smart account, set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) -using Viem's `createBundlerClient` function. This lets you use the bundler service -to estimate gas for user operations and submit transactions to the network. - -For an EOA, set up a [Viem Wallet Client](https://viem.sh/docs/clients/wallet) -using Viem's `createWalletClient` function. This lets you send transactions directly to the network. - -The toolkit provides public actions for both of the clients which can be used to redeem Advanced Permissions, and execute transactions on a user's behalf. - - - - -```typescript -import { createBundlerClient } from 'viem/account-abstraction' -import { erc7710BundlerActions } from '@metamask/smart-accounts-kit/actions' - -const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://your-bundler-rpc.com'), - // Allows you to use the same Bundler Client as paymaster. - paymaster: true, -}).extend(erc7710BundlerActions()) -``` - - - - -```typescript -import { createWalletClient, http } from 'viem' -import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' -import { sepolia as chain } from 'viem/chains' - -const sessionAccountWalletClient = createWalletClient({ - account: sessionAccount, - chain, - transport: http(), -}).extend(erc7710WalletActions()) -``` - - - - -### 7. Redeem Advanced Permissions - -The session account can now redeem the permissions. The redeem transaction is sent to the `DelegationManager` contract, which validates the delegation and executes actions on the user's behalf. - -To redeem the permissions, use the client action based on your session account type. -A smart account uses the Bundler Client's `sendUserOperationWithDelegation` action, -and an EOA uses the Wallet Client's `sendTransactionWithDelegation` action. - -See the [`sendUserOperationWithDelegation`](../../reference/erc7710/bundler-client.md#senduseroperationwithdelegation) and [`sendTransactionWithDelegation`](../../reference/erc7710/wallet-client.md#sendtransactionwithdelegation) API reference for more information. - - - - -```typescript -import { calldata } from './config.ts' - -// These properties must be extracted from the permission response. -const permissionContext = grantedPermissions[0].context -const delegationManager = grantedPermissions[0].signerMeta.delegationManager - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -// Calls without permissionContext and delegationManager will be executed -// as a normal user operation. -const userOperationHash = await bundlerClient.sendUserOperationWithDelegation({ - publicClient, - account: sessionAccount, - calls: [ - { - to: tokenAddress, - data: calldata, - permissionContext, - delegationManager, - }, - ], - // Appropriate values must be used for fee-per-gas. - maxFeePerGas: 1n, - maxPriorityFeePerGas: 1n, -}) -``` - - - - -```typescript -import { calldata } from './config.ts' - -// These properties must be extracted from the permission response. -const permissionContext = grantedPermissions[0].context -const delegationManager = grantedPermissions[0].signerMeta.delegationManager - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const transactionHash = await sessionAccountWalletClient.sendTransactionWithDelegation({ - to: tokenAddress, - data: calldata, - permissionContext, - delegationManager, -}) -``` - - - - - -```typescript -import { encodeFunctionData, erc20Abi, parseUnits } from 'viem' - -export const calldata = encodeFunctionData({ - abi: erc20Abi, - args: [sessionAccount.address, parseUnits('1', 6)], - functionName: 'transfer', -}) -``` - - - - -## Next steps - -- See how to [get the supported execution permissions](get-supported-permissions.md). -- See how to configure different [ERC-20 token permissions](use-permissions/erc20-token.md) and - [native token permissions](use-permissions/native-token.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-granted-permissions.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-granted-permissions.md deleted file mode 100644 index f8821e99b51..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-granted-permissions.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -description: Learn how to get the granted Advanced Permissions for a wallet. -sidebar_label: Get granted permissions -keywords: [advanced permissions, granted execution permissions, erc-7715, 7715] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Get granted permissions - -[ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the granted execution permissions -for a wallet. Use the method to get the granted Advanced Permissions for a wallet. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) - -## Request granted permissions - -Request the granted Advanced Permissions for a wallet with the -Wallet Client's [`getGrantedExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#getgrantedexecutionpermissions) action. - - - - -```ts -[ - { - chainId: 84532, - context: "0x0000...0000", - delegationManager: "0xdb9B1e94B5b69Df7e401DDbedE43491141047dB3", - dependencies: [], - from: "0x993fC0d346A8AfA40Da014bA8834A56cE8B17f31", - permission: { - type: "erc20-token-periodic", - isAdjustmentAllowed: false, - data: { ... }, - }, - rules: [ - { type: "expiry", data: { ... } }, - ], - to: "0xAB57cfCDaF510594eA68D47ffBEF04Ebf73e7F1f", - }, - // ... -] -``` - - - - -```typescript -import { walletClient } from './config.ts' - -const grantedExecutionPermissions = await walletClient.getGrantedExecutionPermissions() -``` - - - - -```ts -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-supported-permissions.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-supported-permissions.md deleted file mode 100644 index b8cb9af514d..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/get-supported-permissions.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -description: Learn how to get supported Advanced Permissions for a wallet. -sidebar_label: Get supported permissions -keywords: [advanced permissions, supported execution permissions, erc-7715, 7715] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Get supported permissions - -[ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the execution permissions -a wallet supports. Use the method to verify the available Advanced Permissions types and -rules before sending requests. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit](../../get-started/install.md) -- [Learn about Advanced Permissions](../../concepts/advanced-permissions.md) - -## Request supported permissions - -Request the supported Advanced Permissions types for a wallet with the -Wallet Client's [`getSupportedExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#getsupportedexecutionpermissions) action. - - - - -```ts -{ - "native-token-stream": { - "chainIds": [ - 1, - 10, - ], - "ruleTypes": [ - "expiry" - ] - }, - // ... -} -``` - - - - -```typescript -import { walletClient } from './config.ts' - -const supportedPermissions = await walletClient.getSupportedExecutionPermissions() -``` - - - - -```ts -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -See the full list of [supported Advanced Permissions](../../get-started/supported-advanced-permissions.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/erc20-token.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/erc20-token.md deleted file mode 100644 index a272d0ba54b..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/erc20-token.md +++ /dev/null @@ -1,203 +0,0 @@ ---- -description: Learn how to use the ERC-20 token permissions with Advanced Permissions (ERC-7715). -keywords: [permissions, spending limit, restrict, 7715, erc-7715, erc20-permissions, revocation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use ERC-20 token permissions - -[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports ERC-20 token permission types that allow you to request fine-grained -permissions for ERC-20 token transfers with time-based (periodic), streaming, or revocation conditions, depending on your use case. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) -- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) -- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) - -## ERC-20 periodic permission - -This permission type ensures a per-period limit for ERC-20 token transfers. At the start of each new period, the allowance resets. - -For example, a user signs an ERC-7715 permission that lets a dapp spend up to 10 USDC on their behalf each day. The dapp can transfer a total of -10 USDC per day; the limit resets at the beginning of the next day. - -See the [ERC-20 periodic permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-periodic-permission) for more information. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseUnits } from 'viem' -import { walletClient } from './client.ts' - -// Since current time is in seconds, convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-periodic', - data: { - tokenAddress, - // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6. - periodAmount: parseUnits('10', 6), - // 1 day in seconds. - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## ERC-20 stream permission - -This permission type ensures a linear streaming transfer limit for ERC-20 tokens. Token transfers are blocked until the -defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the -configured rate, up to the maximum allowed amount. - -For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.1 USDC per second, starting with an initial amount -of 1 USDC, up to a maximum of 2 USDC. - -See the [ERC-20 stream permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-stream-permission) for more information. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseUnits } from 'viem' -import { walletClient } from './client.ts' - -// Since current time is in seconds, convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-stream', - data: { - tokenAddress, - // 0.1 USDC in WEI format. Since USDC has 6 decimals, 0.1 * 10^6. - amountPerSecond: parseUnits('0.1', 6), - // 1 USDC in WEI format. Since USDC has 6 decimals, 1 * 10^6. - initialAmount: parseUnits('1', 6), - // 2 USDC in WEI format. Since USDC has 6 decimals, 2 * 10^6. - maxAmount: parseUnits('2', 6), - startTime: currentTime, - justification: 'Permission to use 0.1 USDC per second', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## ERC-20 revocation permission - -This permission type enables revoking an existing ERC-20 token allowance on behalf of the user. - -For example, a user signs an ERC-7715 permission that lets a dapp revoke any ERC-20 token allowances -periodically, or during an ongoing exploit. - -See the [ERC-20 revocation permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-revocation-permission) for more information. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { walletClient } from './client.ts' - -// Since current time is in seconds, convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-revocation', - data: { - justification: 'Permission to revoke ERC-20 token allowances', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/native-token.md b/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/native-token.md deleted file mode 100644 index 5460a15e17c..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/advanced-permissions/use-permissions/native-token.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -description: Learn how to use the native token permissions with Advanced Permissions (ERC-7715). -keywords: - [ - permissions, - spending limit, - restrict, - 7715, - erc-7715, - native-token-permissions, - advanced permissions, - ] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use native token permissions - -[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports native token permission types that allow you to request fine-grained -permissions for native token transfers with time-based (periodic) or streaming conditions, depending on your use case. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) -- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) -- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) - -## Native token periodic permission - -This permission type ensures a per-period limit for native token transfers. At the start of each new period, the allowance resets. - -For example, a user signs an ERC-7715 permission that lets a dapp spend up to 0.001 ETH on their behalf each day. The dapp can transfer a total of -0.001 ETH per day; the limit resets at the beginning of the next day. - -See the [native token periodic permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-periodic-permission) for more information. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseEther } from 'viem' -import { walletClient } from './client.ts' - -// Since current time is in seconds, convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'native-token-periodic', - data: { - // 0.001 ETH in wei format. - periodAmount: parseEther('0.001'), - // 1 hour in seconds. - periodDuration: 86400, - startTime: currentTime, - justification: 'Permission to use 0.001 ETH every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## Native token stream permission - -This permission type ensures a linear streaming transfer limit for native tokens. Token transfers are blocked until the -defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the -configured rate, up to the maximum allowed amount. - -For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.0001 ETH per second, starting with an initial amount -of 0.1 ETH, up to a maximum of 1 ETH. - -See the [native token stream permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-stream-permission) for more information. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseEther } from 'viem' -import { walletClient } from './client.ts' - -// Since current time is in seconds, convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'native-token-stream', - data: { - // 0.0001 ETH in wei format. - amountPerSecond: parseEther('0.0001'), - // 0.1 ETH in wei format. - initialAmount: parseEther('0.1'), - // 1 ETH in wei format. - maxAmount: parseEther('1'), - startTime: currentTime, - justification: 'Permission to use 0.0001 ETH per second', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```typescript -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/disable-delegation.md b/gator_versioned_docs/version-1.0.0/guides/delegation/disable-delegation.md deleted file mode 100644 index 78c8de1f4fb..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/disable-delegation.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -description: Learn how to disable the delegation. -sidebar_label: Disable a delegation -toc_max_heading_level: 3 -keywords: [delegation, disable, revoke] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Disable a delegation - -Delegations are created off-chain and can be stored anywhere, but you can disable a delegation on-chain using the -toolkit. When a delegation is disabled, any attempt to redeem it will revert, effectively revoking the permissions -that were previously granted. - -For example, if Alice has given permission to Bob to spend 10 USDC on her behalf, and after a week she wants to -revoke that permission, Alice can disable the delegation she created for Bob. If Bob tries to redeem the disabled -delegation, the transaction will revert, preventing him from spending Alice's USDC. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a delegator account.](execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) -- [Create a delegate account.](execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) - -## Disable a delegation - -To disable a delegation, you can use the [`disableDelegation`](../../reference/delegation/index.md#disabledelegation) utility function from the -toolkit to generate calldata. Once the calldata is prepared, you can send it to the -Delegation Manager to disable the delegation. - - - - -```typescript -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' -import { environment, delegation, bundlerClient } from './config.ts' - -const disableDelegationData = DelegationManager.encode.disableDelegation({ - delegation, -}) - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: delegatorAccount, - calls: [ - { - to: environment.DelegationManager, - data: disableDelegationData, - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, -}) -``` - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { createPublicClient, http, parseEther } from 'viem' -import { createBundlerClient } from 'viem/account-abstraction' -import { - getSmartAccountsEnvironment, - createDelegation, - ScopeType, -} from '@metamask/smart-accounts-kit' - -export const environment = getSmartAccountsEnvironment(chain.id) - -const currentTime = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenPeriodTransfer, - periodAmount: parseEther('0.01'), - periodDuration: 86400, - startDate: currentTime, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), -}) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/constrain-scope.md b/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/constrain-scope.md deleted file mode 100644 index b6b6e7bbeef..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/constrain-scope.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -description: Learn how to constrain a delegation scope using caveat enforcers. -sidebar_label: Constrain a scope -toc_max_heading_level: 3 -keywords: [constrain, restrict, scope, caveat, caveat enforcer] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Constrain a delegation scope - -[Delegation scopes](index.md) define the delegation's initial authority and help prevent delegation misuse. -You can further constrain these scopes and limit the delegation's authority by applying [caveat enforcers](../../../concepts/delegation/caveat-enforcers.md). - -## Prerequisites - -[Configure a delegation scope.](index.md) - -## Apply a caveat enforcer - -For example, Alice creates a delegation with an [ERC-20 transfer scope](spending-limit.md#erc-20-transfer-scope) that allows Bob to spend up to 10 USDC. -If Alice wants to further restrict the scope to limit Bob's delegation to be valid for only seven days, -she can apply the [`timestamp`](../../../reference/delegation/caveats.md#timestamp) caveat enforcer. - -The following example creates a delegation using [`createDelegation`](../../../reference/delegation/index.md#createdelegation), applies the ERC-20 transfer scope with a spending limit of 10 USDC, and applies the `timestamp` caveat enforcer to restrict the delegation's validity to a seven-day period: - -```typescript -import { createDelegation, ScopeType, CaveatType } from '@metamask/smart-accounts-kit' - -// Convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) - -// Seven days after current time. -const beforeThreshold = currentTime + 604800 - -const caveats = [ - { - type: CaveatType.Timestamp, - afterThreshold: currentTime, - beforeThreshold, - }, -] - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - maxAmount: 10000n, - }, - // Apply caveats to the delegation. - caveats, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Next steps - -- See the [caveats reference](../../../reference/delegation/caveats.md) for the full list of caveat types and their parameters. -- For more specific or custom control, you can also [create custom caveat enforcers](/tutorials/create-custom-caveat-enforcer) - and apply them to delegations. diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/function-call.md b/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/function-call.md deleted file mode 100644 index 499d38973e0..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/function-call.md +++ /dev/null @@ -1,151 +0,0 @@ ---- -description: Learn how to use the function call scope for a delegation. -keywords: [delegation scope, function call, restrict, delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use the function call scope - -The function call scope defines the specific methods, contract addresses, and calldata that are allowed for the delegation. -For example, Alice delegates to Bob the ability to call the `approve` function on the USDC contract, with the approval amount set to `0`. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) -- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) -- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) -- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) - -## Function call scope - -This scope requires `targets`, which specifies the permitted contract addresses, and `selectors`, which specifies the allowed methods. - -Internally, this scope uses the [`allowedTargets`](../../../reference/delegation/caveats.md#allowedtargets), [`allowedMethods`](../../../reference/delegation/caveats.md#allowedmethods), and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers, and -optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. -See the [function call scope reference](../../../reference/delegation/delegation-scopes.md#function-call-scope) for more details. - -The following example sets the delegation scope to allow the delegate to call the `approve` function on the USDC token contract: - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' - -// USDC address on Sepolia. -const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - scope: { - type: ScopeType.FunctionCall, - targets: [USDC_ADDRESS], - selectors: ['approve(address, uint256)'], - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -### Define allowed calldata - -You can further restrict the scope by defining the `allowedCalldata`. For example, you can set -`allowedCalldata` so the delegate is only permitted to call the `approve` function on the -USDC token contract with an allowance value of `0`. This effectively limits the delegate to -revoking ERC-20 approvals. - -:::important Usage -The `allowedCalldata` doesn't support multiple selectors. Each entry in the -list represents a portion of calldata corresponding to the same function signature. - -You can include or exclude specific parameters to precisely define what parts of the calldata are valid. -::: - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { encodeAbiParameters, erc20Abi } from 'viem' - -// USDC address on Sepolia. -const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - scope: { - type: ScopeType.FunctionCall, - targets: [USDC_ADDRESS], - selectors: ['approve(address, uint256)'], - allowedCalldata: [ - { - // Limits the allowance amount to be 0. - value: encodeAbiParameters([{ name: 'amount', type: 'uint256' }], [0n]), - // The first 4 bytes are for selector, and next 32 bytes - // are for spender address. - startIndex: 36, - }, - ], - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -### Define exact calldata - -You can define the `exactCalldata` instead of the `allowedCalldata`. For example, you can -set `exactCalldata` so the delegate is permitted to call only the `approve` function on the USDC token -contract, with a specific spender address and an allowance value of 0. This effectively limits the delegate to -revoking ERC-20 approvals for a specific spender. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { encodeFunctionData, erc20Abi } from 'viem' - -// USDC address on Sepolia. -const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - scope: { - type: ScopeType.FunctionCall, - targets: [USDC_ADDRESS], - selectors: ['approve(address, uint256)'], - exactCalldata: { - calldata: encodeFunctionData({ - abi: erc20Abi, - args: ['0x0227628f3F023bb0B980b67D528571c95c6DaC1c', 0n], - functionName: 'approve', - }), - }, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -### Allow native token transfer - -You can set `valueLte` to allow native token transfer up to a specified amount per call. By default, this value is set to `0`. For example, Alice can allow Bob -to take `0.00001` ETH as a fee each time he revokes a token approval on her behalf. - -```ts -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' - -// USDC address on Sepolia. -const USDC_ADDRESS = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - scope: { - type: ScopeType.FunctionCall, - targets: [USDC_ADDRESS], - selectors: ['approve(address, uint256)'], - valueLte: { maxValue: parseEther('0.00001') }, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Next steps - -See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/spending-limit.md b/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/spending-limit.md deleted file mode 100644 index 4412368d47b..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/spending-limit.md +++ /dev/null @@ -1,244 +0,0 @@ ---- -description: Learn how to use the spending limit scopes for a delegation. -keywords: [delegation scope, spending limit, restrict, delegation] ---- - -# Use spending limit scopes - -Spending limit scopes define how much a delegate can spend in native, ERC-20, or ERC-721 tokens. -You can set transfer limits with or without time-based (periodic) or streaming conditions, depending on your use case. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) -- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) -- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) -- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) - -## ERC-20 periodic scope - -This scope ensures a per-period limit for ERC-20 token transfers. -You set the amount, period, and start data. -At the start of each new period, the allowance resets. -For example, Alice creates a delegation that lets Bob spend up to 10 USDC on her behalf each day. -Bob can transfer a total of 10 USDC per day; the limit resets at the beginning of the next day. - -When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). - -Internally, this scope uses the [`erc20PeriodTransfer`](../../../reference/delegation/caveats.md#erc20periodtransfer) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. -See the [ERC-20 periodic scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-periodic-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -// startDate should be in seconds. -const startDate = Math.floor(Date.now() / 1000) - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20PeriodTransfer, - tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - // USDC has 6 decimal places. - periodAmount: parseUnits('10', 6), - periodDuration: 86400, - startDate, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## ERC-20 streaming scope - -This scopes ensures a linear streaming transfer limit for ERC-20 tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. -For example, Alice creates a delegation that allows Bob to spend 0.1 USDC per second, starting with an initial amount of 10 USDC, up to a maximum of 100 USDC. - -When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). - -Internally, this scope uses the [`erc20Streaming`](../../../reference/delegation/caveats.md#erc20streaming) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. -See the [ERC-20 streaming scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-streaming-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -// startTime should be in seconds. -const startTime = Math.floor(Date.now() / 1000) - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20Streaming, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // USDC has 6 decimal places. - amountPerSecond: parseUnits('0.1', 6), - initialAmount: parseUnits('10', 6), - maxAmount: parseUnits('100', 6), - startTime, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## ERC-20 transfer scope - -This scope ensures that ERC-20 token transfers are limited to a predefined maximum amount. -This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. -For example, Alice creates a delegation that allows Bob to spend up to 10 USDC without any conditions. -Bob may use the 10 USDC in a single transaction or make multiple transactions, as long as the total does not exceed 10 USDC. - -When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). - -Internally, this scope uses the [`erc20TransferAmount`](../../../reference/delegation/caveats.md#erc20transferamount) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. -See the [ERC-20 transfer scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-transfer-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // USDC has 6 decimal places. - maxAmount: parseUnits('10', 6), - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## ERC-721 scope - -This scope limits the delegation to ERC-721 token transfers only. -For example, Alice creates a delegation that allows Bob to transfer an NFT she owns on her behalf. - -Internally, this scope uses the [`erc721Transfer`](../../../reference/delegation/caveats.md#erc721transfer) caveat enforcer. -See the [ERC-721 scope reference](../../../reference/delegation/delegation-scopes.md#erc-721-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc721Transfer, - tokenAddress: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - tokenId: 1n, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Native token periodic scope - -This scope ensures a per-period limit for native token transfers. -You set the amount, period, and start date. -At the start of each new period, the allowance resets. -For example, Alice creates a delegation that lets Bob spend up to 0.01 ETH on her behalf each day. -Bob can transfer a total of 0.01 ETH per day; the limit resets at the beginning of the next day. - -When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). -You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure -`allowedCalldata` to allow transactions that match certain patterns or ranges. - -Internally, this scope uses the [`nativeTokenPeriodTransfer`](../../../reference/delegation/caveats.md#nativetokenperiodtransfer) caveat enforcer, and -optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. -See the [native token periodic scope reference](../../../reference/delegation/delegation-scopes.md#native-token-periodic-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' - -// startDate should be in seconds. -const startDate = Math.floor(Date.now() / 1000) - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenPeriodTransfer, - periodAmount: parseEther('0.01'), - periodDuration: 86400, - startDate, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Native token streaming scope - -This scopes ensures a linear streaming transfer limit for native tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. -For example, Alice creates delegation that allows Bob to spend 0.001 ETH per second, starting with an initial amount of 0.01 ETH, up to a maximum of 0.1 ETH. - -When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). -You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure -`allowedCalldata` to allow transactions that match certain patterns or ranges. - -Internally, this scope uses the [`nativeTokenStreaming`](../../../reference/delegation/caveats.md#nativetokenstreaming) caveat enforcer, and -optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. -See the [native token streaming scope reference](../../../reference/delegation/delegation-scopes.md#native-token-streaming-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' - -// startTime should be in seconds. -const startTime = Math.floor(Date.now() / 1000) - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenStreaming, - amountPerSecond: parseEther('0.001'), - initialAmount: parseEther('0.01'), - maxAmount: parseEther('0.1'), - startTime, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Native token transfer scope - -This scope ensures that native token transfers are limited to a predefined maximum amount. -This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. -For example, Alice creates a delegation that allows Bob to spend up to 0.1 ETH without any conditions. -Bob may use the 0.1 ETH in a single transaction or make multiple transactions, as long as the total does not exceed 0.1 ETH. - -When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token transfers by default (sets `exactCalldata` to `0x`). -You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure -`allowedCalldata` to allow transactions that match certain patterns or ranges. - -Internally, this scope uses the [`nativeTokenTransferAmount`](../../../reference/delegation/caveats.md#nativetokentransferamount) caveat enforcer, and -optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. -See the [native token transfer scope reference](../../../reference/delegation/delegation-scopes.md#native-token-transfer-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenTransferAmount, - maxAmount: parseEther('0.001'), - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Next steps - -See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/deploy-smart-account.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/deploy-smart-account.md deleted file mode 100644 index 27b94623bca..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/deploy-smart-account.md +++ /dev/null @@ -1,152 +0,0 @@ ---- -description: Learn how to deploy a MetaMask smart account. -keywords: [deploy, smart account, user operation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Deploy a smart account - -You can deploy MetaMask Smart Accounts in two different ways. You can either deploy a smart account automatically when sending -the first user operation, or manually deploy the account. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a MetaMask smart account.](create-smart-account.md) - -## Deploy with the first user operation - -When you send the first user operation from a smart account, the Smart Accounts Kit checks whether the account is already deployed. If the account -is not deployed, the toolkit adds the `initCode` to the user operation to deploy the account within the -same operation. Internally, the `initCode` is encoded using the `factory` and `factoryData`. - - - - -```typescript -import { bundlerClient, smartAccount } from './config.ts' -import { parseEther } from 'viem' - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: '0x1234567890123456789012345678901234567890', - value: parseEther('0.001'), - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, -}) -``` - - - - - -```typescript -import { createPublicClient, http } from 'viem' -import { createBundlerClient } from 'viem/account-abstraction' -import { sepolia as chain } from 'viem/chains' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = generatePrivateKey() -const account = privateKeyToAccount(privateKey) - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://public.pimlico.io/v2/11155111/rpc'), -}) -``` - - - - -## Deploy manually - -To deploy a smart account manually, call the [`getFactoryArgs`](../../reference/smart-account.md#getfactoryargs) -method from the smart account to retrieve the `factory` and `factoryData`. This allows you to use a relay account to sponsor the deployment without needing a paymaster. - -The `factory` represents the contract address responsible for deploying the smart account, while `factoryData` contains the -calldata that will be executed by the `factory` to deploy the smart account. - -The relay account can be either an externally owned account (EOA) or another smart account. This example uses an EOA. - - - - -```typescript -import { walletClient, smartAccount } from './config.ts' - -const { factory, factoryData } = await smartAccount.getFactoryArgs() - -// Deploy smart account using relay account. -const hash = await walletClient.sendTransaction({ - to: factory, - data: factoryData, -}) -``` - - - - - -```typescript -import { createPublicClient, createWalletClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = generatePrivateKey() -const account = privateKeyToAccount(privateKey) - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -const relayAccountPrivateKey = '0x121..' -const relayAccount = privateKeyToAccount(relayAccountPrivateKey) - -export const walletClient = createWalletClient({ - account: relayAccount, - chain, - transport: http(), -}) -``` - - - - -## Next steps - -- Learn more about [sending user operations](send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/generate-multisig-signature.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/generate-multisig-signature.md deleted file mode 100644 index dbdd9372251..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/generate-multisig-signature.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -description: Learn how to generate a Multisig signature. -keywords: [generate, multsig, signature, smart account] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Generate a multisig signature - -The Smart Accounts Kit supports [Multisig smart accounts](../../concepts/smart-accounts.md#multisig-smart-account), -allowing you to add multiple externally owned accounts (EOA) -signers with a configurable execution threshold. When the threshold -is greater than 1, you can collect signatures from the required signers -and use the [`aggregateSignature`](../../reference/smart-account.md#aggregatesignature) function to combine them -into a single aggregated signature. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a Multisig smart account.](create-smart-account.md#multisig-smart-account) - -## Generate a multisig signature - -The following example configures a Multisig smart account with two different signers: Alice -and Bob. The account has a threshold of 2, meaning that signatures from -both parties are required for any execution. - - - - -```typescript -import { - bundlerClient, - aliceSmartAccount, - bobSmartAccount, - aliceAccount, - bobAccount, -} from './config.ts' -import { aggregateSignature } from '@metamask/smart-accounts-kit' - -const userOperation = await bundlerClient.prepareUserOperation({ - account: aliceSmartAccount, - calls: [ - { - target: zeroAddress, - value: 0n, - data: '0x', - }, - ], -}) - -const aliceSignature = await aliceSmartAccount.signUserOperation(userOperation) -const bobSignature = await bobSmartAccount.signUserOperation(userOperation) - -const aggregatedSignature = aggregateSignature({ - signatures: [ - { - signer: aliceAccount.address, - signature: aliceSignature, - type: 'ECDSA', - }, - { - signer: bobAccount.address, - signature: bobSignature, - type: 'ECDSA', - }, - ], -}) -``` - - - - - -```typescript -import { createPublicClient, http } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { createBundlerClient } from 'viem/account-abstraction' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const alicePrivateKey = generatePrivateKey() -export const aliceAccount = privateKeyToAccount(alicePrivateKey) - -const bobPrivateKey = generatePrivateKey() -export const bobAccount = privateKeyToAccount(bobPrivateKey) - -const signers = [aliceAccount.address, bobAccount.address] -const threshold = 2n - -export const aliceSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [signers, threshold], - deploySalt: '0x', - signer: [{ account: aliceAccount }], -}) - -export const bobSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [signers, threshold], - deploySalt: '0x', - signer: [{ account: bobAccount }], -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://public.pimlico.io/v2/rpc'), -}) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/dynamic.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/dynamic.md deleted file mode 100644 index 8ef5f7f82c9..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/dynamic.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -description: Learn how to use Dynamic signer with MetaMask Smart Accounts. -sidebar_label: Dynamic -keywords: [dynamic, smart account, signer, metamask smart account] ---- - -# Use Dynamic with MetaMask Smart Accounts - -[Dynamic](https://www.dynamic.xyz/) is an embedded wallet solution that enables seamless social login and passkey based -wallets, making user onboarding easier. MetaMask Smart Accounts is a signer-agnostic implementation -that allows you to use Dynamic's EOA wallet as a signer for MetaMask Smart Accounts. - -View the complete code for this guide in the [`gator-examples`](https://github.com/MetaMask/gator-examples/tree/main/examples/smart-accounts/signers/dynamic) repository. - -:::info -This guide supports React and React-based frameworks. -::: - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. -- Create a [Dynamic Environment ID](https://www.dynamic.xyz/docs/developer-dashboard/tokens-api-keys#environment-id). - -## Steps - -### 1. Install dependencies - -Install the following dependencies: - -```bash npm2yarn -npm install @dynamic-labs/ethereum @dynamic-labs/sdk-react-core @dynamic-labs/wagmi-connector @metamask/smart-accounts-kit @tanstack/react-query wagmi viem -``` - -### 2. Create the Dynamic provider - -In this step, you'll configure the [`DynamicContextProvider`](https://www.dynamic.xyz/docs/react-sdk/providers/providers-introduction#dynamic-context-provider) component to provide Dynamic's context -to your application. You'll also use the [`DynamicWagmiConnector`](https://www.dynamic.xyz/docs/react-sdk/providers/providers-introduction#dynamic-wagmi-connector) to integrate Dynamic with Wagmi. This -connector enables you to use Wagmi hooks with Dynamic. - -Once you have created the `DynamicProvider`, you must wrap it at the root of your application so -that the rest of your application has access to the Dynamic's context. - -For an advanced configuration, see how to [configure Dynamic and Wagmi](https://www.dynamic.xyz/docs/react-sdk/using-wagmi). - - - - -```ts -import { QueryClientProvider } from "@tanstack/react-query"; -import { WagmiProvider } from "wagmi"; -import { ReactNode } from "react"; -import { EthereumWalletConnectors } from "@dynamic-labs/ethereum"; -import { DynamicContextProvider } from "@dynamic-labs/sdk-react-core"; -import { DynamicWagmiConnector } from "@dynamic-labs/wagmi-connector"; -import { wagmiConfig, queryClient } from "./config.ts" - -export function DynamicProvider({ children }: { children: ReactNode }) { - return ( - ", - walletConnectors: [EthereumWalletConnectors], - }} - > - - - - {children} - - - - - ); -} -``` - - - - - -```ts -import { QueryClient } from '@tanstack/react-query' -import { createConfig, http } from 'wagmi' -import { sepolia } from 'viem/chains' - -export const queryClient = new QueryClient() - -export const wagmiConfig = createConfig({ - chains: [sepolia], - ssr: true, - transports: { - [sepolia.id]: http(), - }, -}) -``` - - - - -### 3. Create a smart account - -Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a -MetaMask smart account. - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { useAccount, usePublicClient, useWalletClient } from 'wagmi' - -const { address } = useAccount() -const publicClient = usePublicClient() -const { data: walletClient } = useWalletClient() - -// Additional check to make sure the Dyanmic is connected -// and values are available. -if (!address || !walletClient || !publicClient) { - // Handle the error case -} - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [address, [], [], []], - deploySalt: '0x', - signer: { walletClient }, -}) -``` - -## Next steps - -- See how to [send a user operation](../send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/embedded-wallets.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/embedded-wallets.md deleted file mode 100644 index 8b9106396be..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/embedded-wallets.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -description: Learn how to use MetaMask Embedded Wallets (Web3Auth) with MetaMask Smart Accounts. -sidebar_label: MetaMask Embedded Wallets -keywords: [web3auth, smart account, signer, metamask smart account] ---- - -# Use MetaMask Embedded Wallets with MetaMask Smart Accounts - -[MetaMask Embedded Wallets (Web3Auth)](/embedded-wallets/) provides a pluggable embedded wallet -infrastructure to simplify Web3 wallet integration and user onboarding. It supports social logins allowing -users to access Web3 applications through familiar authentication methods in under a minute. - -MetaMask Smart Accounts is a signer-agnostic implementation that allows you to use Embedded Wallets as a signer for MetaMask Smart Accounts. - -:::info -This guide supports React and React-based frameworks. -::: - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. -- Create an [Embedded Wallets Client ID](/embedded-wallets/dashboard). - -## Steps - -### 1. Install dependencies - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: - -```bash npm2yarn -npm install @metamask/smart-accounts-kit @web3auth/modal wagmi @tanstack/react-query viem -``` - -### 2. Create the Web3Auth provider - -Configure the `Web3AuthProvider` component to provide the Embedded Wallets context to your application. -You'll also use the `WagmiProvider` to integrate Embedded Wallets with Wagmi. -This provider enables you to use Wagmi hooks with Embedded Wallets. - -Once you've created the `Web3AuthAppProvider`, wrap it at the root of your application so -the rest of your application has access to the Embedded Wallets context. - -For an advanced configuration, see the [Embedded Wallets guide](/embedded-wallets/sdk/react/advanced/). - - - - -```ts -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { ReactNode } from "react"; -import { Web3AuthProvider } from "@web3auth/modal/react"; -// Make sure to import `WagmiProvider` from `@web3auth/modal/react/wagmi`, not `wagmi` -import { WagmiProvider } from "@web3auth/modal/react/wagmi"; -import { web3authConfig } from "./config.ts"; - -const queryClient = new QueryClient(); - -export function Web3AuthAppProvider({ children }: { children: ReactNode }) { - return ( - - - {children} - - - ); -} -``` - - - - - -```ts -import { Web3AuthOptions } from '@web3auth/modal' - -const web3AuthOptions: Web3AuthOptions = { - clientId: '', - web3AuthNetwork: '', -} - -export const web3authConfig = { - web3AuthOptions, -} -``` - - - - -### 3. Create a smart account - -Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a -MetaMask smart account. - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { useAccount, usePublicClient, useWalletClient } from 'wagmi' - -const { address } = useAccount() -const publicClient = usePublicClient() -const { data: walletClient } = useWalletClient() - -// Additional check to make sure the Embedded Wallets is connected -// and values are available. -if (!address || !walletClient || !publicClient) { - // Handle the error case -} - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [address, [], [], []], - deploySalt: '0x', - signer: { walletClient }, -}) -``` - -## Next steps - -- See how to [send a user operations](../send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/index.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/index.md deleted file mode 100644 index a833f88dbb3..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: Learn how to configure signers for MetaMask Smart Accounts. -keywords: - [signers, metamask smart accounts, smart account, embedded wallets, web3auth, dynamic, privy] ---- - -import CardList from "@site/src/components/CardList" - -# Configure a signer - -When [creating a smart account](../create-smart-account.md), you must specify a signer. The signer owns the smart account and is responsible for -generating the signatures required to submit user operations. MetaMask Smart Accounts is signer-agnostic, allowing you -to use any signer you prefer, such as Embedded Wallets, passkeys, EOA wallets, or a custom signer. - -MetaMask Smart Accounts has a native integration with [MetaMask Embedded Wallets](/embedded-wallets/), making user onboarding easier. In addition to the native integration, you can use -third-party wallet providers as Privy, Dynamic, or Para as the signer for your smart account. - -See the following guides to learn how to configure different signers: - -## Recommended - - - -## Other signers - - diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/passkey.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/passkey.md deleted file mode 100644 index a8d196cb6ff..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/passkey.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -description: Learn how to use Passkey with MetaMask Smart Accounts. -sidebar_label: Passkey -keywords: [passkey, smart account, signer, metamask smart account] ---- - -# Use a passkey with MetaMask Smart Accounts - -Passkeys eliminate the need for traditional seed phrases that are difficult to remember, enabling a more seamless -and secure way for users to access their externally owned accounts (EOAs). Compared to traditional EOAs which use -secp256k1 elliptic curve to generate key pairs and signatures, a passkey-based EOA uses the -secp256r1 (P-256) elliptic curve. - -MetaMask Smart Accounts is signer-agnostic and natively supports passkeys (P-256 elliptic curve signatures), so you can use a passkey as the signer. - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. - -## Steps - -### 1. Install dependencies - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: - -```bash npm2yarn -npm install @metamask/smart-accounts-kit ox -``` - -### 2. Create a passkey - -To create a passkey signer, use Viem's [`createWebAuthnCredential`](https://viem.sh/account-abstraction/accounts/webauthn/createWebAuthnCredential) function to securely register the passkey (WebAuthn credential). - -```ts -import { createWebAuthnCredential } from 'viem/account-abstraction' - -const credential = await createWebAuthnCredential({ - name: 'MetaMask Smart Account', -}) -``` - -### 3. Create a smart account - -Once the passkey is created, use the [Viem WebAuthn Account](https://viem.sh/account-abstraction/accounts/webauthn) to configure your passkey as a MetaMask smart account signer. - -The `deployParams` parameter needs the X and Y coordinates of the P-256 public key. Since WebAuthn credentials store -a compressed public key, you need to deserialize it, and extract the X and Y coordinates. - - - - -```typescript -import { publicClient } from './config.ts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { toWebAuthnAccount } from 'viem/account-abstraction' -import { Address, PublicKey } from 'ox' -import { toHex } from 'viem' - -const webAuthnAccount = toWebAuthnAccount({ credential }) - -// Deserialize compressed public key -const publicKey = PublicKey.fromHex(credential.publicKey) - -// Convert public key to address -const owner = Address.fromPublicKey(publicKey) - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [owner, [toHex(credential.id)], [publicKey.x], [publicKey.y]], - deploySalt: '0x', - signer: { webAuthnAccount, keyId: toHex(credential.id) }, -}) -``` - - - - - -```typescript -import { http, createPublicClient } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const transport = http() -export const publicClient = createPublicClient({ - transport, - chain, -}) -``` - - - - -## Next steps - -- See how to [send a user operation](../send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/privy.md b/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/privy.md deleted file mode 100644 index fc08bbe120f..00000000000 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/signers/privy.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -description: Learn how to use Privy signer with MetaMask Smart Accounts. -sidebar_label: Privy -keywords: [privy, smart account, signer, metamask smart account] ---- - -# Use Privy with MetaMask Smart Accounts - -[Privy](https://docs.privy.io/welcome) provides an embedded wallet solution that enables seamless social login for Web3 applications making user onboarding easier. MetaMask Smart Accounts is a signer-agnostic implementation -that allows you to use Privy's EOA wallet as a signer for MetaMask Smart Accounts. - -:::info -This guide supports React and React-based frameworks. -::: - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. -- Create a [Privy App ID](https://docs.privy.io/basics/get-started/dashboard/create-new-app#get-api-credentials). - -## Steps - -### 1. Install dependencies - -Install the following dependencies: - -```bash npm2yarn -npm install @privy-io/react-auth @privy-io/wagmi @metamask/smart-accounts-kit @tanstack/react-query wagmi viem -``` - -### 2. Create the Privy provider - -In this step, you'll configure the `PrivyProvider` component to provide the Privy's context -to your application. You'll also use the Privy's `WagmiProvider` component to integrate Privy with Wagmi. This -provider enables you to use Wagmi hooks with Privy. - -Once you have created the `PrivyAppProvider`, you must wrap it at the root of your application so -that the rest of your application has access to the Privy's context. - -For the advance configuration, see Privy's [configuring appearance](https://docs.privy.io/basics/get-started/dashboard/configuring-appearance) and [configuring login methods](https://docs.privy.io/basics/get-started/dashboard/configure-login-methods) guide. - - - - -```ts -import { QueryClientProvider } from "@tanstack/react-query"; -import { ReactNode } from "react"; -import { PrivyProvider } from '@privy-io/react-auth'; -// Make sure to import `WagmiProvider` from `@privy-io/wagmi`, not `wagmi` -import { WagmiProvider } from '@privy-io/wagmi'; -import { QueryClientProvider } from '@tanstack/react-query'; -import { wagmiConfig, queryClient } from "./config.ts" - -export function PrivyAppProvider({ children }: { children: ReactNode }) { - return ( - - - - {children} - - - - ); -} -``` - - - - - -```ts -import { QueryClient } from '@tanstack/react-query' -import { createConfig, http } from 'wagmi' -import { sepolia } from 'viem/chains' - -export const queryClient = new QueryClient() - -export const wagmiConfig = createConfig({ - chains: [sepolia], - ssr: true, - transports: { - [sepolia.id]: http(), - }, -}) -``` - - - - -### 3. Create a smart account - -Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a -MetaMask smart account. - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { useAccount, usePublicClient, useWalletClient } from 'wagmi' - -const { address } = useAccount() -const publicClient = usePublicClient() -const { data: walletClient } = useWalletClient() - -// Additional check to make sure the Privy is connected -// and values are available. -if (!address || !walletClient || !publicClient) { - // Handle the error case -} - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [address, [], [], []], - deploySalt: '0x', - signer: { walletClient }, -}) -``` - -## Next steps - -- See how to [send a user operation](../send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/permissions.md b/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/permissions.md deleted file mode 100644 index 83427d2931f..00000000000 --- a/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/permissions.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -description: Advanced Permissions (ERC-7715) reference. -sidebar_label: Permissions -keywords: [ERC-7715, permissions, ERC-20 token, native token, reference, advanced permissions] ---- - -# Advanced Permissions reference - -When [executing on a MetaMask user's behalf](../../guides/advanced-permissions/execute-on-metamask-users-behalf.md), you can request the following permission types for ERC-20 token and native token transfers. -Learn [how to use Advanced Permissions types](../../guides/advanced-permissions/use-permissions/erc20-token.md). - -## ERC-20 token permissions - -### ERC-20 periodic permission - -Ensures a per-period limit for ERC-20 token transfers. -At the start of each new period, the allowance resets. - -#### Parameters - -| Name | Type | Required | Description | -| ---------------- | --------- | -------- | ---------------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | -| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | - -#### Example - -```typescript -import { parseUnits } from 'viem' - -const currentTime = Math.floor(Date.now() / 1000) -const expiry = currentTime + 604800 - -const permission = { - type: 'erc20-token-periodic', - data: { - tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', - periodAmount: parseUnits('10', 6), - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, -} -``` - -### ERC-20 stream permission - -Ensures a linear streaming transfer limit for ERC-20 tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | ----------------------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `initialAmount` | `bigint` | No | The initial amount that can be transferred at start time. The default is `0`. | -| `maxAmount` | `bigint` | No | The maximum total amount that can be unlocked. The default is no limit. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | -| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | - -#### Example - -```typescript -import { parseUnits } from 'viem' - -const currentTime = Math.floor(Date.now() / 1000) -const expiry = currentTime + 604800 - -const permission = { - type: 'erc20-token-stream', - data: { - tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', - amountPerSecond: parseUnits('0.1', 6), - initialAmount: parseUnits('1', 6), - maxAmount: parseUnits('2', 6), - startTime: currentTime, - justification: 'Permission to use 0.1 USDC per second', - }, - isAdjustmentAllowed: true, -} -``` - -### ERC-20 revocation permission - -Enables revoking an existing ERC-20 token allowance on behalf of the user. - -#### Parameters - -| Name | Type | Required | Description | -| --------------- | -------- | -------- | ---------------------------------------------------------------------- | -| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | - -#### Example - -```typescript -const permission = { - type: 'erc20-token-revocation', - data: { - justification: 'Permission to revoke ERC-20 token allowances', - }, - isAdjustmentAllowed: true, -} -``` - -## Native token permissions - -### Native token periodic permission - -Ensures a per-period limit for native token transfers. -At the start of each new period, the allowance resets. - -#### Parameters - -| Name | Type | Required | Description | -| ---------------- | -------- | -------- | ---------------------------------------------------------------------- | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | -| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | - -#### Example - -```typescript -import { parseEther } from 'viem' - -const currentTime = Math.floor(Date.now() / 1000) -const expiry = currentTime + 604800 - -const permission = { - type: 'native-token-periodic', - data: { - periodAmount: parseEther('0.001'), - periodDuration: 86400, - startTime: currentTime, - justification: 'Permission to use 0.001 ETH every day', - }, - isAdjustmentAllowed: true, -} -``` - -### Native token stream permission - -Ensures a linear streaming transfer limit for native tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | -------- | -------- | ----------------------------------------------------------------------------- | -| `initialAmount` | `bigint` | No | The initial amount that can be transferred at start time. The default is `0`. | -| `maxAmount` | `bigint` | No | The maximum total amount that can be unlocked. The default is no limit. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | No | The start timestamp in seconds. The default is the current time. | -| `justification` | `string` | No | A human-readable explanation of why the permission is being requested. | - -#### Example - -```typescript -import { sepolia as chain } from 'viem/chains' -import { parseEther } from 'viem' -import { walletClient } from './client.ts' - -const currentTime = Math.floor(Date.now() / 1000) -const expiry = currentTime + 604800 - -const permission = { - type: 'native-token-stream', - data: { - amountPerSecond: parseEther('0.0001'), - initialAmount: parseEther('0.1'), - maxAmount: parseEther('1'), - startTime: currentTime, - justification: 'Permission to use 0.0001 ETH per second', - }, - isAdjustmentAllowed: true, -} -``` diff --git a/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/wallet-client.md b/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/wallet-client.md deleted file mode 100644 index 05b63997ed7..00000000000 --- a/gator_versioned_docs/version-1.0.0/reference/advanced-permissions/wallet-client.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -description: Wallet Client actions reference. -sidebar_label: Wallet Client actions -toc_max_heading_level: 2 -keywords: [ERC-7715, Viem, wallet client, actions, reference, advanced permissions] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Wallet Client actions reference - -The following actions are related to the [Viem Wallet Client](https://viem.sh/docs/clients/wallet) used to [execute on a MetaMask user's behalf](../../guides/advanced-permissions/execute-on-metamask-users-behalf.md). - -:::info -To use Advanced Permissions (ERC-7715) actions, the Viem Wallet Client must be extended with `erc7715ProviderActions`. -::: - -## `requestExecutionPermissions` - -Requests Advanced Permissions from the MetaMask extension account according to the [ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) specification. Returns a [`RequestExecutionPermissionsReturnType`](../types.md#requestexecutionpermissionsreturntype). - -### Parameters - -| Name | Type | Required | Description | -| ------------ | --------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `chainId` | `number` | Yes | The chain ID on which the permission is being requested. | -| `from` | `Address` | No | The wallet address to request the permission from. | -| `expiry` | `number` | Yes | The timestamp (in seconds) by which the permission must expire. | -| `permission` | `SupportedPermissionParams` | Yes | The permission to request. The toolkit supports multiple [Advanced Permissions types](permissions.md). Set `isAdjustmentAllowed` to define whether the user can modify the requested permission. | -| `to` | `Address` | Yes | The account to which the permission will be assigned. | - -### Example - - - - -```ts -import { sepolia as chain } from 'viem/chains' -import { parseUnits } from 'viem' -import { walletClient } from './client.ts' - -const currentTime = Math.floor(Date.now() / 1000) -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-periodic', - data: { - tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', - periodAmount: parseUnits('10', 6), - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - -```ts -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## `getSupportedExecutionPermissions` - -Returns the Advanced Permissions types that the wallet supports, according to the -[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) -specification. Use this to verify the available permission types and supported -chains before requesting permissions. - -This action takes no parameters and returns a [`GetSupportedExecutionPermissionsResult`](../types.md#getsupportedexecutionpermissionsresult). - -### Example - - - - -```ts -{ - "native-token-stream": { - "chainIds": [1, 10], - "ruleTypes": ["expiry"] - }, - "erc20-token-periodic": { - "chainIds": [1, 137], - "ruleTypes": ["expiry"] - }, -// ... -} -``` - - - - -```ts -import { walletClient } from './client.ts' - -const supportedPermissions = await walletClient.getSupportedExecutionPermissions() -``` - - - - -```ts -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## `getGrantedExecutionPermissions` - -Returns all previously granted permissions for the connected wallet, according to the -[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) specification. - -This action takes no parameters and returns a [`GetGrantedExecutionPermissionsResult`](../types.md#getgrantedexecutionpermissionsresult). - -### Example - - - - -```ts -[ - { - chainId: 84532, - context: "0x0000...0000", - delegationManager: "0xdb9B...7dB3", - dependencies: [], - from: "0x993f...7f31", - permission: { - type: "erc20-token-periodic", - isAdjustmentAllowed: false, - data: { ... }, - }, - rules: [ - { type: "expiry", data: { ... } }, - ], - to: "0xAB57...7F1f", - }, -// ... -] -``` - - - - - -```ts -import { walletClient } from './client.ts' - -const grantedPermissions = await walletClient.getGrantedExecutionPermissions() -``` - - - - -```ts -import { createWalletClient, custom } from 'viem' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/reference/erc7710/wallet-client.md b/gator_versioned_docs/version-1.0.0/reference/erc7710/wallet-client.md deleted file mode 100644 index 2709ed45355..00000000000 --- a/gator_versioned_docs/version-1.0.0/reference/erc7710/wallet-client.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -description: Wallet Client actions reference. -sidebar_label: Wallet Client actions -toc_max_heading_level: 2 -keywords: - [ERC-7710, Viem, wallet client, actions, reference, advanced permissions, redeem delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Wallet Client actions reference - -These actions extend the [Viem Wallet Client](https://viem.sh/docs/clients/wallet) to support [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) utilities. - -## `sendTransactionWithDelegation` - -Sends a transaction to redeem delegated permissions according to the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) specifications. - -:::info -To use `sendTransactionWithDelegation`, the Viem Wallet Client must be -extended with `erc7710WalletActions`. -::: - -### Parameters - -See the [Viem `sendTransaction` parameters](https://viem.sh/docs/actions/wallet/sendTransaction#parameters). -This function has the same parameters, and it also requires the following parameters: - -| Name | Type | Required | Description | -| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | -| `delegationManager` | `Address` | Yes | The address of the Delegation Manager. | -| `permissionContext` | `PermissionContext` | Yes | An encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming delegations. | - -### Example - - - - -```ts -import { walletClient, publicClient } from './client.ts' - -// These properties must be extracted from the permission response. See -// `grantPermissions` action to learn how to request permissions. -const permissionContext = permissionsResponse[0].context -const delegationManager = permissionsResponse[0].signerMeta.delegationManager - -const hash = walletClient.sendTransactionWithDelegation({ - chain, - to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', - value: 1n, - permissionContext, - delegationManager, -}) -``` - - - - -```ts -import { http, createPublicClient, createWalletClient } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' - -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -// Your session account for requesting and redeeming should be the same. -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -const walletClient = createWalletClient({ - account, - transport: http(), - chain, -}).extend(erc7710WalletActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/reference/smart-account.md b/gator_versioned_docs/version-1.0.0/reference/smart-account.md deleted file mode 100644 index 0b765d2a8a0..00000000000 --- a/gator_versioned_docs/version-1.0.0/reference/smart-account.md +++ /dev/null @@ -1,663 +0,0 @@ ---- -description: MetaMask Smart Accounts-related API methods reference. -sidebar_label: MetaMask Smart Accounts -toc_max_heading_level: 2 -keywords: [smart accounts, API, methods, reference] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# MetaMask Smart Accounts API reference - -The following API methods are related to creating, managing, and signing with [MetaMask Smart Accounts](../concepts/smart-accounts.md). - -## `aggregateSignature` - -Aggregates multiple partial signatures into a single combined multisig signature. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | --------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------ | -| `signatures` | [`PartialSignature`](./types.md#partialsignature)[] | Yes | Collection of partial signatures provided by signers, to be merged into an aggregated signature. | - -### Example - - - - -```typescript -import { - bundlerClient, - aliceSmartAccount, - bobSmartAccount, - aliceAccount, - bobAccount, -} from './config.ts' -import { aggregateSignature } from '@metamask/smart-accounts-kit' - -const userOperation = await bundlerClient.prepareUserOperation({ - account: aliceSmartAccount, - calls: [ - { - target: zeroAddress, - value: 0n, - data: '0x', - }, - ], -}) - -const aliceSignature = await aliceSmartAccount.signUserOperation(userOperation) -const bobSignature = await bobSmartAccount.signUserOperation(userOperation) - -const aggregatedSignature = aggregateSignature({ - signatures: [ - { - signer: aliceAccount.address, - signature: aliceSignature, - type: 'ECDSA', - }, - { - signer: bobAccount.address, - signature: bobSignature, - type: 'ECDSA', - }, - ], -}) -``` - - - - -```typescript -import { createPublicClient, http } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { createBundlerClient } from 'viem/account-abstraction' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const alicePrivateKey = generatePrivateKey() -const aliceAccount = privateKeyToAccount(alicePrivateKey) - -const bobPrivateKey = generatePrivateKey() -const bobAccount = privateKeyToAccount(bobPrivateKey) - -const signers = [aliceAccount.address, bobAccount.address] -const threshold = 2n - -export const aliceSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [signers, threshold], - deploySalt: '0x', - signer: [{ account: aliceAccount }], -}) - -export const bobSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [signers, threshold], - deploySalt: '0x', - signer: [{ account: bobAccount }], -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://public.pimlico.io/v2/rpc'), -}) -``` - - - - -## `encodeCalls` - -Encodes calls for execution by a MetaMask smart account. If there's a single call directly to the smart account, it returns the call data directly. For multiple calls or calls to other addresses, it creates executions and encodes them for the smart account's `execute` function. - -The execution mode is set to `SingleDefault` for a single call to other address, or `BatchDefault` for multiple calls. - -### Parameters - -| Name | Type | Required | Description | -| ------- | -------- | -------- | ---------------------------- | -| `calls` | `Call[]` | Yes | List of calls to be encoded. | - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const calls = [ - { - to: zeroAddress, - data: '0x', - value: 0n, - }, -] - -const executeCallData = await smartAccount.encodeCalls(calls) -``` - - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const delegatorAccount = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegatorAccount }, -}) -``` - - - - -## `getFactoryArgs` - -Returns the factory address and factory data that can be used to deploy a smart account. - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const { factory, factoryData } = await smartAccount.getFactoryArgs() -``` - - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const delegatorAccount = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegatorAccount }, -}) -``` - - - - -## `getNonce` - -Returns the nonce for a smart account. - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const nonce = await smartAccount.getNonce() -``` - - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const delegatorAccount = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegatorAccount }, -}) -``` - - - - -## `signDelegation` - -Signs the delegation and returns the delegation signature. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | ------------------------------- | -------- | --------------------------------------------------------- | -| `delegation` | `Omit` | Yes | The unsigned delegation object to sign. | -| `chainId` | `number` | No | The chain ID on which the Delegation Manager is deployed. | - -### Example - - - - -```ts -import { - createDelegation, - getSmartAccountsEnvironment, - ScopeType, -} from '@metamask/smart-accounts-kit' -import { delegatorSmartAccount } from './config.ts' - -// The address to which the delegation is granted. It can be an EOA address, or -// smart account address. -const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' - -const delegation = createDelegation({ - to: delegate, - from: account.address, - environment: delegatorSmartAccount.environment, - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: 1000000000000000n, - }, -}) - -const signature = delegatorSmartAccount.signDelegation({ delegation }) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const delegatorAccount = privateKeyToAccount('0x...') - -export const delegatorSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegatorAccount }, -}) -``` - - - - -## `signMessage` - -Generates the [EIP-191](https://eips.ethereum.org/EIPS/eip-191) signature -using the `MetaMaskSmartAccount` signer. The Smart Accounts Kit -uses Viem under the hood to provide this functionality. - -### Parameters - -See the [Viem `signMessage` parameters](https://viem.sh/account-abstraction/accounts/smart/signMessage). - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const signature = smartAccount.signMessage({ - message: 'hello world', -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const account = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) -``` - - - - -## `signTypedData` - -Generates the [EIP-712](https://eips.ethereum.org/EIPS/eip-712) signature -using the `MetaMaskSmartAccount` signer. The Smart Accounts Kit -uses Viem under the hood to provide this functionality. - -### Parameters - -See the [Viem `signTypedData` parameters](https://viem.sh/account-abstraction/accounts/smart/signTypedData). - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const signature = smartAccount.signTypedData({ - domain, - types, - primaryType: 'Mail', - message: { - from: { - name: 'Cow', - wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826', - }, - to: { - name: 'Bob', - wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB', - }, - contents: 'Hello, Bob!', - }, -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const account = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) -``` - - - - -## `signUserOperation` - -Signs a user operation with the `MetaMaskSmartAccount` signer. The Delegation -Toolkit uses Viem under the hood to provide this functionality. - -### Parameters - -See the [Viem `signUserOperation` parameters](https://viem.sh/account-abstraction/accounts/smart/signUserOperation#parameters). - -### Example - - - - -```ts -import { smartAccount } from './config.ts' - -const userOpSignature = smartAccount.signUserOperation({ - callData: '0xdeadbeef', - callGasLimit: 141653n, - maxFeePerGas: 15000000000n, - maxPriorityFeePerGas: 2000000000n, - nonce: 0n, - preVerificationGas: 53438n, - sender: '0xE911628bF8428C23f179a07b081325cAe376DE1f', - verificationGasLimit: 259350n, - signature: '0x', -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const account = privateKeyToAccount('0x...') - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) -``` - - - - -## `toMetaMaskSmartAccount` - -Creates a `MetaMaskSmartAccount` instance. - -### Parameters - -| Name | Type | Required | Description | -| ---------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `client` | `Client` | Yes | Viem Client to retrieve smart account data. | -| `implementation` | `TImplementation` | Yes | Implementation type for the smart account. Can be Hybrid, Multisig, or Stateless7702. | -| `signer` | `SignerConfigByImplementation ` | No | Signer for the smart account. Can be a Viem Account, Viem Wallet Client, or a WebAuthn Account. WebAuthn accounts are only supported for Hybrid implementations. If omitted, non-signing operations still work, but signing operations such as `signUserOperation`, `signDelegation`, `signMessage`, and `signTypedData` will throw an error. | -| `environment` | [`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment) | No | Environment to resolve the smart contracts. | -| `deployParams` | `DeployParams` | Required if `address` is not provided | The parameters that will be used to deploy the smart account and generate its deterministic address. | -| `deploySalt` | `Hex` | Required if `address` is not provided | The salt that will be used to deploy the smart account. | -| `address` | `Address` | Required if `deployParams` and `deploySalt` are not provided, or if the implementation is `Stateless7702`. | The address of the smart account. If an address is provided, the smart account will not be deployed. This should be used if you intend to interact with an existing smart account. | - -### Hybrid implementation - -#### `deployParams` - -All Hybrid deploy parameters are required: - -| Name | Type | Description | -| ------------- | ---------- | ------------------------------------------------------------------------------------------------------------- | -| `owner` | `Hex` | The owner's account address. The owner can be the zero address, indicating that there is no owner configured. | -| `p256KeyIds` | `Hex[]` | An array of key identifiers for passkey signers. | -| `p256XValues` | `bigint[]` | An array of public key x-values for passkey signers. | -| `p256YValues` | `bigint[]` | An array of public key y-values for passkey signers. | - -#### Example - - - - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { publicClient, account } from './config.ts' - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account: account }, -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' - -export const account = privateKeyToAccount('0x...') -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - - - - -### Multisig implementation - -#### `deployParams` - -All Multisig deploy parameters are required: - -| Name | Type | Description | -| ----------- | -------- | -------------------------------------------------------- | -| `signers` | `Hex[]` | An array of EOA signer addresses. | -| `threshold` | `bigint` | The number of signers required to execute a transaction. | - -#### Example - - - - -```ts -import { publicClient, aliceAccount, bobAccount } from './config.ts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const signers = [aliceAccount.address, bobAccount.address] -const threshold = 2n - -const aliceSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [signers, threshold], - deploySalt: '0x', - signer: [{ account: aliceAccount }], -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' - -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const alicePrivateKey = generatePrivateKey() -export const aliceAccount = privateKeyToAccount(alicePrivateKey) - -const bobPrivateKey = generatePrivateKey() -export const bobAccount = privateKeyToAccount(bobPrivateKey) -``` - - - - -### Stateless7702 implementation example - - - - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { publicClient, account } from './config.ts' - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Stateless7702, - address: account.address, - signer: { account }, -}) -``` - - - - -```ts -import { createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' - -export const account = privateKeyToAccount('0x...') -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - - - diff --git a/gator_versioned_docs/version-1.0.0/reference/types.md b/gator_versioned_docs/version-1.0.0/reference/types.md deleted file mode 100644 index 37dfa7f70cf..00000000000 --- a/gator_versioned_docs/version-1.0.0/reference/types.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -description: Reference for types used across the Smart Accounts Kit. -sidebar_label: Types -keywords: [types, delegation, smart accounts, reference, enums] ---- - -# Types - -This page documents the TypeScript [enums](#enums) and [types](#types-1) used in Smart Accounts Kit APIs. - -## Enums - -### `CaveatType` - -Enum representing the [caveat](delegation/caveats.md) type. - -| Value | String | -| --------------------------------------------- | ------------------------------------ | -| `CaveatType.AllowedCalldata` | `"allowedCalldata"` | -| `CaveatType.AllowedMethods` | `"allowedMethods"` | -| `CaveatType.AllowedTargets` | `"allowedTargets"` | -| `CaveatType.ArgsEqualityCheck` | `"argsEqualityCheck"` | -| `CaveatType.BlockNumber` | `"blockNumber"` | -| `CaveatType.Deployed` | `"deployed"` | -| `CaveatType.Erc1155BalanceChange` | `"erc1155BalanceChange"` | -| `CaveatType.Erc20BalanceChange` | `"erc20BalanceChange"` | -| `CaveatType.Erc20PeriodTransfer` | `"erc20PeriodTransfer"` | -| `CaveatType.Erc20Streaming` | `"erc20Streaming"` | -| `CaveatType.Erc20TransferAmount` | `"erc20TransferAmount"` | -| `CaveatType.Erc721BalanceChange` | `"erc721BalanceChange"` | -| `CaveatType.Erc721Transfer` | `"erc721Transfer"` | -| `CaveatType.ExactCalldata` | `"exactCalldata"` | -| `CaveatType.ExactCalldataBatch` | `"exactCalldataBatch"` | -| `CaveatType.ExactExecution` | `"exactExecution"` | -| `CaveatType.ExactExecutionBatch` | `"exactExecutionBatch"` | -| `CaveatType.Id` | `"id"` | -| `CaveatType.LimitedCalls` | `"limitedCalls"` | -| `CaveatType.MultiTokenPeriod` | `"multiTokenPeriod"` | -| `CaveatType.NativeBalanceChange` | `"nativeBalanceChange"` | -| `CaveatType.NativeTokenPayment` | `"nativeTokenPayment"` | -| `CaveatType.NativeTokenPeriodTransfer` | `"nativeTokenPeriodTransfer"` | -| `CaveatType.NativeTokenStreaming` | `"nativeTokenStreaming"` | -| `CaveatType.NativeTokenTransferAmount` | `"nativeTokenTransferAmount"` | -| `CaveatType.Nonce` | `"nonce"` | -| `CaveatType.OwnershipTransfer` | `"ownershipTransfer"` | -| `CaveatType.Redeemer` | `"redeemer"` | -| `CaveatType.SpecificActionERC20TransferBatch` | `"specificActionERC20TransferBatch"` | -| `CaveatType.Timestamp` | `"timestamp"` | -| `CaveatType.ValueLte` | `"valueLte"` | - -### `ExecutionMode` - -Enum specifying how delegated executions are processed when [redeeming delegations](delegation/index.md#redeemdelegations). - -| Value | Description | -| ----------------------------- | --------------------------------------------------------------- | -| `ExecutionMode.SingleDefault` | Executes a single call and reverts on failure. | -| `ExecutionMode.SingleTry` | Executes a single call and silently continues on failure. | -| `ExecutionMode.BatchDefault` | Executes a batch of calls and reverts if any call fails. | -| `ExecutionMode.BatchTry` | Executes a batch of calls and silently continues past failures. | - -### `Implementation` - -Enum representing the [MetaMask smart account](../concepts/smart-accounts.md) implementation type. - -| Value | Description | -| ------------------------------ | ----------------------------------------------------------------------------------------------------------------- | -| `Implementation.Hybrid` | Supports both ECDSA and WebAuthn (passkey) signers. | -| `Implementation.MultiSig` | Supports multiple ECDSA signers with threshold-based signing. | -| `Implementation.Stateless7702` | Uses [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) to upgrade an EOA to a smart account without deployment. | - -### `ScopeType` - -Enum representing [delegation scope types](delegation/delegation-scopes.md). - -| Value | String | -| ------------------------------------- | ----------------------------- | -| `ScopeType.Erc20TransferAmount` | `"erc20TransferAmount"` | -| `ScopeType.Erc20Streaming` | `"erc20Streaming"` | -| `ScopeType.Erc20PeriodTransfer` | `"erc20PeriodTransfer"` | -| `ScopeType.NativeTokenTransferAmount` | `"nativeTokenTransferAmount"` | -| `ScopeType.NativeTokenStreaming` | `"nativeTokenStreaming"` | -| `ScopeType.NativeTokenPeriodTransfer` | `"nativeTokenPeriodTransfer"` | -| `ScopeType.Erc721Transfer` | `"erc721Transfer"` | -| `ScopeType.OwnershipTransfer` | `"ownershipTransfer"` | -| `ScopeType.FunctionCall` | `"functionCall"` | - -### `TransferWindow` - -Enum representing predefined time intervals in seconds for transfer period durations. - -| Value | Seconds | -| -------------------------- | ---------- | -| `TransferWindow.Hourly` | `3600` | -| `TransferWindow.Daily` | `86400` | -| `TransferWindow.Weekly` | `604800` | -| `TransferWindow.BiWeekly` | `1209600` | -| `TransferWindow.Monthly` | `2592000` | -| `TransferWindow.Quarterly` | `7776000` | -| `TransferWindow.Yearly` | `31536000` | - -## Types - -### `AllowedCalldataBuilderConfig` - -Defines an expected calldata segment for a single function signature. - -| Name | Type | Required | Description | -| ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | -| `startIndex` | `number` | Yes | The byte offset in the calldata (including the 4-byte selector) where the expected value starts. | -| `value` | `Hex` | Yes | The expected hex-encoded calldata at that offset. | - -### `Caveat` - -Represents a restriction or condition applied to a delegation. - -| Name | Type | Required | Description | -| ---------- | ----- | -------- | -------------------------------------------------------------------------- | -| `enforcer` | `Hex` | Yes | The contract address of the enforcer. | -| `terms` | `Hex` | Yes | The terms of the caveat encoded as hex data. | -| `args` | `Hex` | Yes | Additional arguments required by the caveat enforcer, encoded as hex data. | - -### `CaveatBuilderConfig` - -Optional configuration for [`createCaveatBuilder`](delegation/index.md#createcaveatbuilder). - -| Name | Type | Required | Description | -| ------------------------------------- | --------- | -------- | ---------------------------------------------------------------------------------- | -| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow unrestricted delegations with no caveats. The default is `false`. | - -### `Delegation` - -Represents a delegation that grants permissions from a delegator to a delegate. - -| Name | Type | Required | Description | -| ----------- | ----------------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | -| `delegate` | `Hex` | Yes | The address to which the delegation is being granted. | -| `delegator` | `Hex` | Yes | The address that is granting the delegation. | -| `authority` | `Hex` | Yes | The parent delegation hash, or `ROOT_AUTHORITY` for creating root delegations. | -| `caveats` | [`Caveat`](#caveat)`[]` | Yes | An array of [caveats](delegation/caveats.md) that constrain the delegation. | -| `salt` | `Hex` | Yes | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | -| `signature` | `Hex` | Yes | The signature to validate the delegation. | - -### `ExactCalldataBuilderConfig` - -Defines the exact calldata the delegate is allowed to call. - -| Name | Type | Required | Description | -| ---------- | ----- | -------- | --------------------------------------------------- | -| `calldata` | `Hex` | Yes | The exact calldata the delegate is allowed to call. | - -### `ExecutionStruct` - -Represents a single execution to perform on behalf of a delegator. - -| Name | Type | Required | Description | -| ---------- | --------- | -------- | ------------------------------------------------------------------ | -| `target` | `Address` | Yes | Address of the contract or recipient that the call is directed to. | -| `value` | `bigint` | Yes | Value of native tokens to send along with the call in wei format. | -| `callData` | `Hex` | Yes | Encoded function data to be executed on the target address. | - -### `GetGrantedExecutionPermissionsResult` - -The return type of [`getGrantedExecutionPermissions`](advanced-permissions/wallet-client.md#getgrantedexecutionpermissions). An array of [`PermissionResponse`](#permissionresponse) objects. - -### `GetSupportedExecutionPermissionsResult` - -The return type of [`getSupportedExecutionPermissions`](advanced-permissions/wallet-client.md#getsupportedexecutionpermissions). A `Record` keyed by permission type. - -### `PartialSignature` - -Represents a single signer's contribution to a multisig aggregated signature. - -| Name | Type | Required | Description | -| ----------- | --------------- | -------- | ------------------------------------------------------------------------------------- | -| `signer` | `Address` | Yes | The address of the signer. | -| `signature` | `Hex` | Yes | The signer's signature over the user operation. | -| `type` | `SignatureType` | Yes | The signature type to represent signature algorithm. Only supported value is `ECDSA`. | - -### `PermissionResponse` - -Represents a granted Advanced Permission. - -| Name | Type | Required | Description | -| ------------------- | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------ | -| `chainId` | `number` | Yes | The chain ID for which the permission was granted. | -| `from` | `Address` | Yes | The account address that granted the permission. | -| `to` | `Hex` | Yes | The account address that received the permission. | -| `permission` | `PermissionTypes` | Yes | The granted [permission](advanced-permissions/permissions.md) details. | -| `rules` | `Record[]` | No | The rules applied to the permission. For example, permission expiry. | -| `context` | `Hex` | Yes | The permission context (encoded delegation list) used when redeeming the permission. | -| `dependencies` | `{ factory: Address, factoryData: Hex }[]` | Yes | Factory dependencies for account deployment. | -| `delegationManager` | `Address` | Yes | The address of the Delegation Manager contract for the permission. | - -### `RequestExecutionPermissionsReturnType` - -The return type of [`requestExecutionPermissions`](advanced-permissions/wallet-client.md#requestexecutionpermissions). An array of [`PermissionResponse`](#permissionresponse) objects. - -### `SmartAccountsEnvironment` - -An object containing the contract addresses required to interact with the Delegation Framework on a specific chain. - -| Name | Type | Required | Description | -| ------------------- | --------------------- | -------- | --------------------------------------------------------------------------------- | -| `DelegationManager` | `Hex` | Yes | The address of the Delegation Manager contract. | -| `EntryPoint` | `Hex` | Yes | The address of the ERC-4337 EntryPoint contract. | -| `SimpleFactory` | `Hex` | Yes | The address of the factory contract for deploying MetaMask smart accounts. | -| `implementations` | `Record` | Yes | A map of MetaMask smart account implementation types to their deployed addresses. | -| `caveatEnforcers` | `Record` | Yes | A map of caveat enforcer types to their deployed addresses. | - -### `SupportedPermissionInfo` - -Describes a supported Advanced Permission type. Used in [`GetSupportedExecutionPermissionsResult`](#getsupportedexecutionpermissionsresult). - -| Name | Type | Required | Description | -| ----------- | ---------- | -------- | --------------------------------------------------------------------------- | -| `chainIds` | `number[]` | Yes | The chain IDs on which the permission type is supported. | -| `ruleTypes` | `string[]` | Yes | The rule types supported for the permission type (for example, `"expiry"`). | - -### `ValueLteBuilderConfig` - -| Name | Type | Required | Description | -| ---------- | -------- | -------- | ------------------------------------------------------------------- | -| `maxValue` | `bigint` | Yes | The maximum native token amount the delegate can transfer per call. | diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/allowance-exceeded.md b/gator_versioned_docs/version-1.0.0/troubleshooting/allowance-exceeded.md deleted file mode 100644 index 32728be1d5b..00000000000 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/allowance-exceeded.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -description: How to resolve allowance exceeded errors when redeeming delegations. -sidebar_label: Allowance exceeded -toc_max_heading_level: 2 -keywords: - [allowance, allowance exceeded, erc20 transfer amount exceeded, spending limit, troubleshooting] ---- - -# Allowance exceeded - -Spending limit [caveat enforcers](../concepts/delegation/caveat-enforcers.md) revert with an -`allowance-exceeded` error in the following cases. - -## Spending limit exceeded - -The delegation's spending limit has been fully or partially used up by previous redemptions. -Enforcers track cumulative spending on-chain using the delegation hash as a key, and revert when -the next transfer exceeds the allowed limit. - -### Solution - -Use the [`CaveatEnforcerClient`](../reference/delegation/caveat-enforcer-client.md) to check the -available amount before redeeming the delegation. - -If the available amount is insufficient, you must wait for the next period (for periodic -enforcers) or for more tokens to accrue (for streaming enforcers). For fixed-limit enforcers, -create a new delegation with a higher limit. - -## Delegation hash collision - -If you create a new delegation with the same parameters as a previous delegation, both produce -the same delegation hash. - -Enforcers track spent amounts using the delegation hash as a key. When two delegations share the -same hash, they also share the same spent balance. This means the new delegation can immediately -revert with `allowance-exceeded`, even if you haven't redeemed it before. - -### Solution - -Use a unique `salt` when creating the delegation. This produces a different delegation hash, -giving the new delegation a fresh spending allowance. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // USDC has 6 decimal places. - maxAmount: parseUnits('10', 6), - }, - salt: '0x00131412', - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegate.md b/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegate.md deleted file mode 100644 index 149db3fb86c..00000000000 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegate.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -description: How to resolve the InvalidDelegate error when redeeming delegations. -sidebar_label: Invalid delegate -toc_max_heading_level: 2 -keywords: [InvalidDelegate, error code, delegation, troubleshooting] ---- - -# Invalid delegate - -The Delegation Manager reverts with `InvalidDelegate()` in the following two cases. - -## Account is not the delegate - -The account redeeming the delegation is not the delegate specified in the delegation. -The Delegation Manager checks that `msg.sender` matches the `delegate` field of -the delegation, unless it's an [open delegation](../reference/delegation/index.md#createopendelegation). - -### Solution - -Verify that the account redeeming the delegation matches the address in the -delegation’s `to` field. If the delegate is a smart account, send the user operation -from that smart account. - -## Broken redelegation chain - -When Delegation Manager validates a [redelegation chain](../guides/delegation/create-redelegation.md), each child delegation's `delegator` -must match the parent delegation's `delegate`. If any link in the chain fails this check, the -authority is invalid. - -### Solution - -Verify that the redelegation chain is consistent. For each pair of adjacent -delegations, the child's `delegator` must be the parent's `delegate`. - -This error can also occur if the delegations are not passed in the correct order. The -delegation array order should be from leaf to root. - -For example, if the delegation chain is Alice to Bob to Carol, the order should be following: - -```ts -const rootDelegation = createDelegation({ - from: '0xAlice', - to: '0xBob', - //.. -}) - -const leafDelegation = createDelegation({ - from: 'OxBob', - to: '0xCarol', - parentDelegation: rootDelegation, - // ... -}) - -const data = DelegationManager.encode.redeemDelegations({ - // Make sure the order is from leaf to root. - // Passing them in the wrong order causes the authority validation to fail. - delegations: [[leafDelegation, rootDelegation]], - modes: [ExecutionMode.SingleDefault], - executions: [[execution]], -}) -``` diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/user-operation-reverted.md b/gator_versioned_docs/version-1.0.0/troubleshooting/user-operation-reverted.md deleted file mode 100644 index 133bdb0c2cd..00000000000 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/user-operation-reverted.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -description: How to resolve user operation reverted errors with 0x revert data. -sidebar_label: User operation reverted -toc_max_heading_level: 2 -keywords: [user operation, reverted, reason 0x, empty revert, execution, troubleshooting] ---- - -# User operation reverted - -A user operation reverts with reason `0x` when validation succeeds, but execution fails without a -revert reason. This differs from AA-coded `EntryPoint` contract errors such as `AA23`, `AA25`, -or `AA21`. - -When the `EntryPoint` contract calls the smart account's execution function, it performs a low-level -`call` internally. If that inner call reverts with empty data, the bundler reports -reason `0x` with no additional details. - -The following sections describe common causes and how to troubleshoot them. - -## Function doesn't exist - -The `callData` encodes a call from the smart account to a target contract, but the function -selector doesn't match any function on that contract, and no fallback function exists. The EVM -reverts with empty data. - -This commonly happens when: - -- The function selector has a typo or doesn't match the target's ABI. -- The target address is wrong or points to a different contract. -- The target contract isn't deployed on the current chain. - -### Solution - -Decode `callData` and verify the inner call. Confirm that the target address has deployed code -and that the function selector matches the target's ABI. - -```typescript -const code = await publicClient.getCode({ - address: targetAddress, -}) - -if (!code) { - console.log('No contract deployed at this address') -} -``` - -## Bare revert without a message - -The target contract uses `require(false)` or `revert` without a reason string. The revert -returns empty data. Contracts commonly use bare reverts in access control checks, reentrancy locks, -or guard functions. - -### Solution - -Look at the target contract's source code to identify which `require` or `revert` your call -parameters could trigger. - -Use [Tenderly](https://tenderly.co) to simulate the transaction and pinpoint the exact line. See the -[Tenderly debugger documentation](https://docs.tenderly.co/debugger) for details. - -## Out of gas in the inner call - -Smart accounts use a low-level `call` internally in their `execute` function. When the inner -call runs out of gas, the call returns `false` with empty return data. - -This differs from the `AA95` error code, which applies when `handleOps` itself runs out of gas. -In this case, `callGasLimit` might be enough for the smart account's execution overhead but not -enough for the actual target contract call. - -### Solution - -Increase `callGasLimit`. If you estimate gas manually, try doubling the value. Target -contracts doing complex operations often need more gas than default estimates provide. - -## Insufficient balance or allowance - -The inner call performs an ERC-20 `transferFrom` but the smart account hasn't approved the -spender, or doesn't hold enough tokens. Some ERC-20 implementations use bare `require` statements -that revert without a reason string. - -### Solution - -Check that the smart account has sufficient token balance and approvals for the operation. - -```typescript -import { erc20Abi } from 'viem' - -const balance = await publicClient.readContract({ - address: tokenAddress, - abi: erc20Abi, - functionName: 'balanceOf', - args: [smartAccount.address], -}) - -const allowance = await publicClient.readContract({ - address: tokenAddress, - abi: erc20Abi, - functionName: 'allowance', - args: [smartAccount.address, spenderAddress], -}) -``` - -## Manual debugging - -If the cause isn't immediately clear, follow these steps: - -1. Decode the inner call: Extract the `(to, value, data)` tuple from your `callData` to - confirm what the smart account executes. -2. Use Tenderly: Simulate the user operation in [Tenderly](https://tenderly.co) to get a full - execution trace. The trace view shows the exact line where the inner call reverts. -3. Check the basics: Verify the target has deployed code, the smart account has enough - ETH and tokens, and the function selector is correct. diff --git a/gator_versioned_docs/version-1.1.0/assets/erc7715-request.png b/gator_versioned_docs/version-1.1.0/assets/erc7715-request.png deleted file mode 100644 index 01eef3bda26fed5bd1fc313ebf6fead96fc71bb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89400 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 W{1XDoJRA_fpPZDkWQn+m|NjB{i=4p# diff --git a/gator_versioned_docs/version-1.1.0/assets/scaffold-eth-7715.png b/gator_versioned_docs/version-1.1.0/assets/scaffold-eth-7715.png deleted file mode 100644 index 41848a9b7ed3a10defc059a16fedcf247526815c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 811269 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

B?fy95UX=(-Um(F_Zb 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%0Dc6BBXxy6h$j2ytwg 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%0DYnN0-fP72lz zgbnj_WKcqYpp~Fy+nwH>E!e}m-)nY`2XMIs7{ah;N(_`qPwwe|^fEq!T_lV(g8|J{x+1$`EK*m?aIcf$9=9&MMVdrDANQk=pq4vLhT&Fk62nc zLKrgNx6{o|D)qTW3=tp=X_hgMXGMYx=Tycd1ij*Pz0}-AkM}H}Q z6M0Vs40ipU88np9*kyI@Wz}uguo+q)`p|W2nYlw_0lV)~y2fT<#Epn*^ksnnGP9JsTdScs8!%LkeNih&on53f zIFsR}rlvTr%GEpwf*olr?4f98?(X#k{Q6Oh5>2}D6_|ISfOByv$Dyk_ccR`A7}!G{ zyyrgTdJ$PvAY`S@UMEo47EajeMU`)68k$@Z`j33)2>5T6gY1si>0#CNxaWG@!5roB z`8~bk!V7#I?acD8OlRI90pKQB>AQ%A+HeCqtnOl)@I6uI1zrx6yUM}PZaJU4;sR}M z>P~_@Qaktc9n;$)L&9un@P`mw4JYs>X+#hLDl8({Md6s8ys+@09s1T>3dkLf#;5Yq ziTdUe+e2DEZC7lhMWM&;34y6BnT;zijkiBy2j=Te8LfZWy1D*p#-ZypbI-?oomNkz(9lx@hC46^Sgp}~ZZEo+1t zTe2@hk}WZX$U23wGj`dPJv(F1zKvz9V;kG=5 zd7Q_2zUi4dA6j3Xk8+-Y!Xa|Fxx?C3%9kJn%T6!NR_{mLC{PAy)3J;1G$Xv?3~i$n zBQw&M=i(IbH!CTnIYurl-(Ag)Yf{JVK9S(lfE=KGUg=t9K*Uczk1rNoqy1Vo)K>VA zwo2e5mKh<2Ok#E$C|prC$y0s5or5QV;Q%J-zt8V~*6dVNKW~v!a17Y62O79BhZI&v z8g%Mcbx)@T54O=ly=Z5DAR`DsYl|6yZ3Y}(Mprma9d7{kzU1ng2VgH7J>b3l44|dM z5ae>(z!ql6xIXq%yVmN|@4xKs}P*G`u!iL-qZ@dfSB`JGwO#EO0c~ znq|_n^C57G_F@AZR9Nyfs$2bO6sB^)mc_|JH_DPy>c}(-nICp5D~!|B89T%k$(Wj) zEFHxa^(5*-G}(3!wx?e(`%$n4!fY0x6`%i3EB+fW`M=A3wx9k0*ogq$M|){V+qd(A z7X4#`yGw^z;msPFX3+QXIF)s0jTtN_J-goQ2oswouo~9|ghW0H;GXE_Nv-os+Ll1yxEL_4{`l~qr zLw$QzAT~s!cT#QREisAk#I-zU3#hO}WNjl+s;w7b7yx;P_V!%J&NjgGDC3g6!WL;0 zn9HW#-(Y?uX7%fe)J*R$rEr=Is=DQ2F%;KT9~Wz9Za3nsL|8SkO+--ozRA%OquH#~ z{Qf8nz8)f#7DzB3O18$`V;xuu6FPgZr0^cBK8Pu)mh1$Z;L8%$`O_H?B&yp1 zVWam#X8ZJ&oI)gCSy3;nFw5}2mLLBcENzhUdkP3%?09uC zjCbUG2#Qa9lhNpo=}LCzuWU=_feZBTAi@vCqu3kbuDxUx`vYAyN}0-Z4K@rUAh{O; zW+ACC`1jljxZt&G0kVrcx_E7Au_#%ir{&1J-Gn!%0Blq5?WUfd84B8 zgZ6A&zrJmuw_LQQbx}#A;YVqRT(JN=3W=3I>iEg}-9SK$rYp&-AA_ZveQ$VTka$xH z(%1d@L533?e#KjLTw=Fr&e>zti%u+-ivlj3I!e$&YOvf_2fB6+f~BB@?X2#DVI20A z6?aXqrC8(AlB*YO7@?iZvJl&^gYWnP0UDjA-mR&Qh&Db`hy=Ez#{C!FnUeEwQ~*PJpK246qC_oYIWffDHWfQTx^IJLvpwWD{L`HTcEd z*c&?o7@>uz?)NHYbf}!}e&CX82!D$1Mh{68JS;f)TYfiq z=XVK{Cs#WQH~`BmUV#IGBs~+P>guqilUM5DXyLD1122wV^f%^i+n zm5IcC<0Y$`Z%0R4ZeoWhpw5DFYkUiOA_=Mfmw#~|SW|N~AXk)$kA^11!kh4IK zyu-je3&vez602WuI8R6au+?UrjluV&1y9$_P?0d!t+uC7s5X;AKOMxIq)|uF5t!-V zk>13SdBvF6JY>{BJT*e$j*BH z7G?Vfxe&+|4fe{H1Rw$SNEib7GoN*4=`9_JCAdUA)oXGCLIfBwL_j6lo$> zOq;Vg!Mfc7xGErGKdjH+Y`g^sF@=a5sX20d-A4MEXAeW}Rrhy-M*Wksjw8(NW|1cK z_?TD>BfWl#E&p-*(pUWZS^~Bf`xv;HN=oF%NTIE~+cUlQzqF+*$chV!bM9S9GUoK% z`e;}oFRv$avjEFL8K>KzuBUEa(;;U{sm}urxs;aDfs z^p7kv*swRmrMZAMcxYFXk>N#WEubk_e8i}U|J-djx2Ypz%@bo108DTl$Wm>7H~uik zft}V&?f0hij2*u~@4;(F0Bj0>dfrQi+dibSgea+w9SrpI}iGjWM?D#=- zBW>_$s*WPRkW08FlxK3KHaIYfss=l@&UP;79>t*B3oE1j_F@%Ya101Z6Oo@?pffw`=bWvQ$cn*M`-eX1?&(IuI zzKoP~j#Dt%DFk>v8;7?Bq7274`3R(jiNOCwgW#-z#TBhW4_W?HbBL}HCC5CVlA@4ghy+F)Kw#>-YP@-U1qZnh10tL8FvX;wp0 zF-iMU=2Fw#%`W)71ICu*PnxoClD#sH(KD{xuDt`+Zs7y*;J~TWei6P2!IZS%CR*Z* zegdOQQs<8=BHu2}Jol1>i~=c3>QMJ@CF9$_$M=WNzTaYi@f6wub^faXZqS($u(X3K zINkku9DzDReiN$%2>Zi_YUggvSwEeY(FP_i+reAE z{(+!ko6i7LY5M$B1L_48VlB%4GyvrQrChUZSwQB7E{=bD;XGD$yj3<^WIMXXhq0~7 z_qab+z+QLsx9T~-7s)?^5ihOwev^^*HF04dTzMi=0`5?Oh^hXQ6@djkaK?SH-JO>e3ku z)=shZc#d^Xn2gu6)7MsrpF5g|MZ0Ohc20zRwI(qC^514obGDu{h56ee#SeV#OvW`R zkGbKO1H{UW`?B%#F#z#x*L9;q)kIVbf!NVGE7@`&s+49#X@K(SrX+C^ApuInzdbZrfyAiqy4B;b^8`8{XAz{`P%=wXI8-a#~{y@BBfrlgI|6E^ja1f=|nJw z)6{mem!O9-5Ov$4SuRMmHCZLwX+OxCf4@rg2+55^YVg~nao?wu5hJU>c~OdcF6Xee z_v)|EuX=6Ve@Pzjv=qsN&Rd{mTFEM1>Q1>R(cK4yNXTKeq72@Oq~;_UK5C_J3|09%=Wjv{5N=s8Uc+H?f6mHc* zsb`aT|ArUnp3#nNk;?h290l*SEkkGZ<=!$Z17}bS2f2BD{%DX!40YmS1%&c8px2C| zrKN&GM`#xm%&aTqZt7^Fnb<)i?y1H=set%>s*{JE;hlHby6-uJcmQK={jp6H4)Me% z(0r8o)lI@~abymlKX1~|B!yHWn|L%MZa5LMBTSA*13LRI`--}C4%`s2wYNAy|~cFN4E1MC&wvrLu*7y7j1mN@;>eBv$z zDqg6rxevzg=CZKKM3x}G>;>7pBZl(W5vd{)xMG-XxPi{2VNF&NnM6cgqP4lGc<|ta zG|<&~8l_0ro!dBL6Pg+;AM*t0{UE?Wcf%@r=ipT0HUu%k#}*8tlt;YO@ZNXsh_ypH z&0Mo5)76cq4Nrh|C84w1_&whpvn$9nFm!4=c}EN%l;PL(%4*?Xk)sGAAA2>)70AiIu}fx#>Gim+$MIp%-F&T7#%YAFC%C)b=(n0_s)X@a`xb~k|JRWIyFBQ^g95R<~diz z@QDfj)4vMtkS8*q2yeZV@g+=cFhm6h1%5iv^^Bc}{_~^0fA&Fe9i{V+jiu+w1l5J0 zm?D0fdH+YF^e=rdH8(dIgk%|+j9`(wd+kXVv~}W9 z4>bJn-ok=HX``V{8R?^qa5D>)Y!`Khd$x8Z(`pBlU zF(*ErjYbm z39n8b343zDCSf2adZUdMJGcnnkAqNXW|PfD0PDzW$X8&WVP3~Kw$j1m-+-!ifecHO zEe(YdiSm#Lu~-rVl#KfTqGpk@~J+yYVE zES%bPOW)hVnLhpoAo92g<3p$eLry0KcDd<;JG-CjxF_njrrl5BReP4}ltxy8qzi7w zy|w!*rnNud?Pqg_#;0#{Mz2@73o!bQO=y-_Hh{kTKD2U17O~wurUafgou)E zx6uCM5d57;m_`>W+Q$~~RYS*Swa9Iu|0I9NNvJ1G1|wPbjb*$xoEsoO?AV(&(JzVe zcCg##0gaWJd4DrG!5(%m39(ilXS?AhD#~2@ZGfrkH8{RLU{SP%8xXJV(0v9M1Gli9 zNzExHVd8erjogh#%GRo1jh`4j`CYli7w1?~vGskxYo~BxF(AJ>DNweuTi;I--h2PD zT<0|mTaFD3UQi%yg_Jl#QMV@p0 z@JGlwSx*6)ZJl6lU=x-^vQ_x=863N4=ya-WV(r{FI4}~A{!lBhse;lp`F$$8Zm2`G z+Vs~YN8jnIf>=(o$&Mm!dV`Y<{?p1%kknn-_*dejrW+~ia2bKBWxFT2pXxoiHeis$ z8enUM8#w-8dFbT+;jH^)?d^1qKb-+Zn(oKi-uLt9E207Au)jS=Oq^-FZyoUx)W^ngJi`;aqo*_oh=Xfu2KmsoHrnP7odqViIMkMvit+*3sgZ zvsJ9316jtqGlgE^ z<~}DFq%C+Q9HkXt7bNa4C=E#kRIvd{NTT*Nnfs?$nSP$GTwj3$txopTHulz@Y#o3I z#0+-))R{yj5Wz119t#_{gg?y8l7cT+*9!P_G2 zij~%(oZ18nn0@wZck|0n=b~Smb-$|zAoI|erQ`ma;^jEqqpesU#ls*5xjK91G7%mO zNJe)*0#ccGybU@QEFSF&sUyw{I+z`xyOSHYncN%ht~VAapRCmFtnH>c?yuWm&6fR9 z$Gx$oDxEI_|z0Rrp<+l#O|1m%%1 z7_jnhCG-7$&}Uw9N|z|>l*__$VzJd&*pPGRRwMHVz^T8(UEs96p)(g$=Q9cXDXVG@ z)2p|s?rr-YSlxmMvP8hs0N~K0xK}m{rP4^23*&>9$)>U(Jce$9yB0|(8p=(}>N;8K z#+B(`XL1!hAfL+v^F*LbpN*8bLdSd$O6?oc`7@F|@TY(J*wn#;4q@^z&d{ekP+wl} z!9+%kcyZ7sMLUm_NMz;73@a`2E=3g_Zu?%|qNAl-(AP{+Kw5jd*k>WF>?DYBJ5)ER zq9a7^j_byA1#)d8s_EA_d9x=B4sRJ>?LVLCMSy(;x-`}4r8lxN1P)Z-)UU9SmO^hm zL<nbeII$pGp}%aP!^FIDJ~R{Ik9L#$hiKQF)xS ze!L_yW9iQW*(}6gJtd+ov&f4JjPhnk+Tq8aHf#R?U%eb3An{lHNLVKXJP7p&Q$qmEqMt&i#=!c%HhNPI%yOvFRz3*J_l+7f_!!tV_^$cOpJ()mW(uj6$0G9$(+Qd=|GCyZ_NNrim`GaI zfq#+UzRF7#S;zf99-jY>(v;(oquFTf7A$!nzXI+q^NL_lb(q{;iaJ0#+JY*!C!Cu% zn#}gGyLo=ub^Cl{z>a5&t$=`aU^g3H5mZri{6p~6;qce_!^6(Ly5Cil$M^t#6It`-vG=+?$o3Kyi{VDj$H_~YH+?;Ph-CetY%{WEu<4z98KAuMJ@sTfEtcx)YClkbD?VOj(kx4I2Eh{` zhhHgL>wAHLGdSDJqy55Z?=BZA%dxJOlDw+?JLRQ>y%cQ^)wnbEGJh_?IYtIp+uWE5 z%7G=@!c2_EoU`^BPSIBfVx#t(|Uc(YY(igyC>xpi03iesW->2Y-- ztA%UxeNbCqz3_u&&)aIDP3w!{1A~?En3_hqoK3h04+R^RE+^hc^tg~_HGa|9VnEX@ zT+k*8nQUd_+u4E%8ZnL(W66x(Ums7i(GfH(-PgQ~gHa6Q%_rRR| zf$e?rb#mKbrqvr)kc|d#|M^r9Xo7p|-TWl?R{!bpdKnXBeYAJXz>xy%zk%|_Q;jnD zuGy!`!e0&=*=o;{z_`$VR%ix!q+8IB3KzxvHj44XAHy~oQu;amp+hxrBo%k8%C#R6 zI{Gc_sB=V#{t5~FpT+V&Yna~$gRatkv)JnbZeE+Sin4{q_(zbE9 z!`hXE(IMX^X9l?6eBQbpWV6}KY(wz96LB(_3Uah0?)RM7aCH&1%`o=yU`5|$F3{9` zn%m9T*Kv%v1ZmVgLpIU%p-=ti8w*-#M~V=d2~~Cmt48}gB^N9^Wf8waOY?)~#0xY6 zJ}xtbD>G_G@();?gCYZ2ms8s;Gbm*$RLoE}q(lp`7SMhp%f@YrpN5F{^6*IHUBBg| zT^;>(ba#uUU|pz}HyAbi?(J7T-Ua{cwL|Mpj^u<%N#lClY#g91xlU}|lP=9-*Kh=d zA+gL(7I6)^IB>L5^D-{9IlT@!AXO-Jo=I*n_Q_1IK*1Giy<3I`2l&YoyfPYCS=n5O z1qJDCiGNIzDJwNQpqiA}rczu1Ebe-))aMI-C@Zj0-Y0j|**n z`;W**ExFSYufQVr((Lebq>Az`?>p`%bBV=s?{8hUeslSR_QHk7oQsLhU52l^Znj;1 zr=+Z)#d+z%*(OhF>EPaxN394ih`tA2zU= zQ{N@KL3)KmP=G|pg6GRHx%LH2rXkE$a7`*fMCA9EE}jc`tx*5hJOAa|qga}d>wFja z6S0H0Ft3N5mOHNh@I{LzB9xvjW%G+Zjam1PzT}>x;aHPw;@Wa@`@?NO!IJV`5S@lg z488E`h`2GU4G)?~#K}N$Mf4u*XS+knsV`o z*=OY|y@ReeOUJOTwUw;A6)SMBs*&%|GN4z?^q$t^IM$%waUQtM)sP1Z9TM`v<*3kQDA zTRjgFoBO0}uX5vn|E5cV)xmvHqjYR^ykIjOcL?kob&c1tc#670EiC z+E-lN#xQfr7pZC0t=hid62_FElS}MJ^OfWFvtWdwh=7tc_r>T;ScbcK$4u4LiEyWh zqV0l&HOmN>N3~cP2We4jfhU?WyUbU=N?iWSxRtJwzNxjW*r;+3Bmo5_*UG>XW8=_& zS$?t~sYRozO5v>YWtZF^yoGmC?*8+|D?)O_ZO^4` zyhB;|(&1DI-+tNBUz7BIR&4hG`i_Z5{HbiN!2?U$_dFyp-3cDu@+~Obr=zMngp1G; zRe-s7lk@NYZJp%M3l5*PP|h?RYU}>ac;z!ECC7 zPlDI0+TfZ56#gzMHb5Xy!GT3XRpNk#m0WW-=5?4m?)&aGVc(xmQPCs9mU#BTbVEq? z<;kziAv^Kd8GUn<3|u;5qQZ55tp`>(t!TV#5v_ZLuM<#W5Om04Xc#-~MGlLK*{rc^|2j=Ab39XS? zc=Bh|nlqvGk$03W7$pki(JC>mI{N5KLYBBj(65kdz&SKBzy*N&V7ly-P9t@R6%}9o zjaAB<-W+|~_cadud1#k*aIG`$gtYvMkgnF}_mXp@M;}_Q zoLiQ&`ugCqnK-8!q_6J8mbQe^tjSiV(k$+s9}6{_o6U{?L5V^(Q4Pn z!EM%8w!Hqa3xIbxYA&=sWxe#(DCn)z@@8%No%ygYYAdI|VCNtBWh{Fvj};1E_u?yu zJMPtf1#~Dn8NjJ8c0j&${P8lIeC@tDDHE)kb#zng&?3TQC3WRW*eFihs#DLyk zw*0QoaI;^Yo_J455Di;7Fg$wn(+O|sxyFKR%L%YIm->()|LSF7ds|GoKe> zNF3U}T#?G(l(jELn;0^lbGrg+lP7cIons~Q3xH4l8RB1O-)l8yKmwj1-lwOJCvuN5! zSO1$SQ2`daGgn3T#wMfZRms4|(z;*YI4-=Bd{cbcYQ3FN){k5K(DR{Z~iJN~!d-y40bx|Fb)hrP)x~oX>HIid7EQ zS^2Pdbob{r)SSE)vU)m2FZa#WR9(t6S@fEOpY$OC0f$hKP;f8!#V^+F847UcfaE9CW>l%6lh{y+`n_T&HIz7$jK~pKQWv1^?xGBsK8iR99 zFlCTY3vp0nxy9wPN>%t>)9&j)lK`5TNdktq456&OH6w_|?P!-TxsF4ZEryWjp{DLT zPp^c9Kqxs~mjo~M?YKe4xq%m5h@W>W_dWQUf@;~k?`uBoH#S) z+vBNqC3C}81{Ge#wrUFqeF$f`WGb0J`VW}-cPWHS9wOvD+pguvn8vefGX7j_cONN} zhFsV2uuy3eX+*OrxJ#Y9slIZ&%pGzgNve9;$=LGvFLXfd zN=;TdF*DQ4;pgSi4_;GF8tUr6{%Odjk4a}ZRW*B4TP~Z<7sni$VnxIkt^S1T|5G5| zUuWCcJj7@%(qG4tBT*GWF?ka+9$RDu@$&YslvNZ83?1LpV<7yiS;lU7ISm$Kmy?TQ ze*qY=wVCiUs78RN+t`iJA1WYb6oKAmz(h%qz^cC$F11LRU=4QVJ8vSb5erh-3 zxZSYY70qUvNZm-^E|n?lcZ<$M`&)>>q|csA=aZ6&wV7dYQhI;oDhM+U>W*R658B6M zWJn5T&}Q6?1<2kvp+uH%_o?=z>S7ywZlwpD;qPC!HgH;Oa+j|>+J=3&#ixvQ`yC7&vH>|Q!G$Yo%q zPxA=<78SCOv&RbMo21o67qoA>`W1#z+Iy;iqN(>oAZkk-UP~FVmFjLeE7Dmj;y5Kt ztahwr7%Dnt2=?BV41DE{3a~#bOCMv}ccoO;Y3A*Gl;{iXAG0r13oV+S1FN5Cq>uW$ z>Wk)D>OOO7_W-MpucC7*ZRpN5_zhG$I2b;zHK~ZJof3_&93}^UlB%&nXgI%MNZU-T z*wB}D-((Gr@vp{~w|CMTl-8ul4Xmy~!vW zL7f_Lx?J%)6-DS&@&KmFrNP`uW%Rr2FZ)Nx!6CQ(TWKqqAqdrvYP&45>Y(bq%LDr} z=hZB?&uv1Hr0fiMqNMk3(ih6(g$?UpEpN#v^BAMieV~f&MPg?a!7AXXo`fSQz1%>y zi$~-3^AUS#7D)^7!^_<1qJN+c|ID}ddeGDinFr&w_mCuSM52_@B0|n$|G*^mVQ=pd zK0EQcrIh3c%H<~hFCjSf1)Ar28KSzkk0ate6HG;xP=1P)BG4x7 zxhsg*WJ=zRa*%ue-R}Z9J2#NhYk4qkz{!C>5 ztg>|+pC{_j42Mn@@QtriP1ZTZlN_&Uz2A4by_q2xjF8N0DdsFNXWToLRy?=pU@Ic5 z3zRlf%1Ue>$ic|CR$2}>pLemMvlPyPoe#{j8Zay>d~PY^@{P(oTrT%tew5CM)==BO z|7h7#a><;bW?wM_vN{{8PMn5~uANVKpLgipCv#wK48&q8d$QFT9(0t3)L8N}yBgFQ ziJa1rF+bjrSyVS9`^s9FptSdvGjP`d8@yFDOyg*$EI%rA)b)87rTh)1ThhE=hgLRd zSO`Q#JK>mpRbDrOzXqXi_whT_2jfTYG}LfubtV7~xe`Gpz7(u{E2^Gk>#_=%hF3G8 zzOSVH@mY<;BxN-heZAz>IOU4y>P>}vug)oa*XSysGgyeQS6%AkEN)h?0>Eb$2i(P>pH+VZ{Br$W)pTNg9L1uG4Lz;?hE%cV9TsJ^TK8Oz%rF3_Kzd9 z(NhE`g;(pfsQ9Q7IT{1%;}nBw{U-HK9^)@*z)H6yQeXU4Oioom*>LXM44D^XtCi2~ zJrploJh2j?`-k(KULg^h<;nQ$L|a8qEO?jRm>u#X`hQ9je{eo$S^t{iJ)U&)I_fuA z>Cj|;Gy*kJl5oDlEAk!lXNK>u*y*hEzM^vyiz};l)vOtNtID>FcG@*aLX{avzb47# zqeq9HQC((Y^tbw1&>YRL!zgB)8WFXG3#B0TWS?k#^ud-|DZ?P1YuzPtE$aF5)u*Z? zblpakS{JUAF$dgfi{eUaiW)Oq_B)YNwfE{Q8lAY~MiM45nKR_ruOI%v!^KmZB&@}s zUSzFSB(fwX$eygZD08MoSAuFbgH!gaqw- zgV6!dOP%JBkk5C|9XyC>3sD!`IoX|kclD%FogiH6FmxJaAN$$<#Z89pQUi-sxdWBsN`(X1n(=;gmw1wXbzcL7At3t*Rydg50mw=RSJg zcgJfOwr)B14PE7h4!Ss;>}Fnk%3kp8>Ks}q4XW1L~4H%8tIqcxYT{Wf}#*5Lh5 z)P_Hdu3fH)qVu;Bfy(u?NzFL&Ktd<}X@wpqG-Q>#GxrBrFZBf^B&x3p<)07#%fNvX zGiIaamu^yzOx9nw_(s1`ko~_l?s&EKj5{G-kQqRWdLm|8maK5MEP1MGQH7m6}}BvZe{_n z;_#R5<_5EbgRxqIcwWLlC?H?>e!kLaHYmYNNxTp3%wr+jHvCb+{QJ@B$Yag~l^LZ? zT-6JfUjotb?nw{6Wo|t%-;8FT8^ljt;gS{zrMqCmOml1z!F@L{^>Tahw@9% zKv>m|e*ge$3AkR|IEmDfy>Hr72>ECCANx+ctle^m(Ye8W?Ot+l9;46w`FC|(+~u@! z+76Qynk^b8Y5X!&{ZzJPo}48>Lilx&0^VV`#nfq7^u6tw%U`iJgoJFv>h%h8k@%TJ zvQne|yuM!X?Yo{L%6~D9M>c2Nicr&BtCm4}!<+bB0_uBxV&=aTs(<~kzasTnDp$Ps zro;jQa}p$tVKnnqDV2OA$XUXc)439pzJ;F9s;vnUNP(2IJaRpx6VCN%AZ2VVlY?fp zzjg%2A|W2((h`_2qh!0I$14|Nu6_dQ=;6Hp=k^Z*fdlKK;W92KGp;{d6<*Nsyw4!C zN^)>UhZYa@x${XFo!B#dN)Q5lvL-~f3!;W!Uq9O15YKAy=CY?A4xmc?n>mPzGaO!CIaq$DFiAZpS1 z*Z=0nJu88y^?|?RFMfZW~EWSi()( zCO@CaGb&Hl%QI%6NWQogc!qgcHFX{!S=Cb?gunZssC3bPzNc`zZ4lM@x1Z|YP!yjerBA)GH~)ng_hF+BpW#-fkNKQ`L2e~-BwH5Le`OXNw3n|8R1sIi z?vfVaYLg{IN>}7$-b3%M{X38Nm!_2eBEz|7?7Rd$2eI$j>d;;^p9BlfSl+3{G*d~1YBdOkL|9eN`=b~_i@F}Z$LefFT4xd;Rp1(-JM$9+_TnG7hCyK zGxF0Y)ge0R;YKHD`38ouapo}q8luK1wJ~2QSP+Uj^1S|58^cy54zrUH!Ap&tDKihb zX+2+&gdHAFxA^!Ce?kP3%PzG?PU7Fb%6!zGdCxpF2}jvfca2#|8XF}{d4}4em42JM z{=vYb;l(5Rm`sFV=Oq#f`3{9$>Mio+6vgq0AocQ8;MURfWsYMPzbqJN|DDE>aRdUa%wkWd+ymQh(-af2wqoeWwz%Oo=T%B#fR@u`Q>yP ziKCTWSrOwqJ&KQ(siOP?&yn*VUVcpxUQdE*jl83q-Lug7-EMz_RicOt?DbQvL$@e& zxQzm)Z~v9Nc<`;7Ij^B;o$J$U6V8(*$80;yv_4wb=to3YdK#cPUJpaF<&DrCo@IxdIbsOq(K; z&Q@Bji2-}Of?)HJU<4z(g&$SOgy|d7fLV}?XRm{>{a>M4wuOw;wr*t83{I^Oc!AY-lWSJxAmSVW-;gF_X;} zkqS<6F0ZEWZUq$9o&54P01hCdk^_> z3F2ZldN&s@#~ihTPJ6xx!IFZ~7|mYl#i}WP%9EgjoS2i4Deb!FLRy5ls zH|(!)S28cYzl{%g)Ag&;*{oA@PmwzYplQ>Q@8)LjRmWYET41($dVtvWeNyd1cc~&z zZN28Bj_V7cU&nr<&}3^)MU%?|GMIp|N=>T*VekhYvF-#{AX~*zk8*b$a?Q=8bF{GaS^3fn4aHjkKTE(Fga;&t;sW@+p`- zC;YAikB+*EAP5oU?Jf(&?6+^GT{Q!UmfkRRN0^D)5)Zy0dLz*M3Jun2_OXlhDE_&3 z(a4TQt#Gn0xHn6ss2Y`i|*zmB1}rRYJ&obmY6NlX}q zl-{Mj!gs{{Mg{>}N0R&XVbfpic{e-BQPOon>HHnm-iCz5rA>}KoND)UV`nrV5|AZf zb6M<62sjz>-j74AY>UR)PzJ>T&_wDU+Y^GpH6B&zWL3h{g?qVa7s`_Z42kj=Dx|1L zC`g~t^Y|mWPv}Ie8EkB)`<^{@y5ENTiwFI;)O*S;634}Eg@8&u9i7vKs>v6FDLWAv zg&t}$*Bf_$4%Z!h=MSmK{3A~-&C*MY8=KqMwEk=3&j!59Pv5<(j)ImJ)?M;8WBY?e zr%~at>-)OSeAZ<9EZtUEu%7wslkd}IibVnbJAJ1U-5JEvWubswp~5DHgKk=b{pP!; z7uq-~y>~d}C=SJ1fWybp(+js02g?~ukwhB`i~4(mGA*I2YV1Ah0gN>iI0T|a1X zn!Of{>7=~E+p6EnGA>O%&?&v`^oo@XyuVN17fP)`0N(+s%Hln`nu$xpIN!b?-_eQU}v6O3!(Myzrjr6Gq2 zWmv5r4uW{Zy@$Q7UMz_DY0;SB)j9gj>oRIUgjU#4en-!*wlaiqcivGlzX{xq@Rs`F zFUs9(j31TFzhg6ArbpPt^&8lnD+<;~yI1o1BA)w>_b&Lwi>(h2Vg&Eh9hahr;l?R0 zs*=m9iw|j!>+=HgruqE2G!hL;EHoI(D=cp-G4F3?*k7w>@V;d!Dcr!v9H$Tq zxImBN&e7U6zVsu$ZJy$*<&OFe>8iy;*@{2{R!9rX=jU7Q*LtB+MVZJjGvn6uOMt!g zb}|{5_?mpCg*^?zZwQ7!U0YW_FQKjWmP$^0ZVq(Pona>DXudHRKt}-AK%}utGX?&R zvP0gGvAMduA$1z)P`Hb&v#Cy^tmR|(^*#6Yf*waViT{@sUIF7$D53R~{a`%w$j$;- zYM;>n)<2`!^R{YUZr-t>`J1pNh>OXeAsH z@4EJ%X3TrDfzMAx&8J_5)zrx^C_?=HKfd0=tEw>E`lUk}1f)wsQjkWvb4!;r2uMli zrn@_&JEgn3yF=J?cQv`s!zxhT%n4~{=F-km8I-joPdP9{# zw`>QA=hC@eess8;LY-7IYzKz`^k}n&Ik3f*`*#+@z+EPkT6sk=wikJSL)0silm2VIx!7YR zl8|!kd1*X{(a%Wo-*WJ#JQFdz3s%pm3K>nr2Uo0!|0Q$%k5ME{MWo&+{Gh~%)3QKO zp=ChhLub9_gSVURWL8ah9epTOX_;%p6maUh`@(lY==8lVsSxie6Yyfj;N8s<6`V~J ztKua6RW|3lf&vxv%>l7EUnVBm4<3?>73bw}tOF>phii{0CVY;!@8+z&tX(pwZ!(QH z#_H5bDm=t2jOc6=j`%P%p0xtQdEMK9CwgWEKvBz$+= z_-oE3w*dlf_VT-vqL!0z&PlqqP1A2E64CDpkCS*y*gqXxA4>fV{IbtQC;`pOJ^G&1 zqBW0zPU6_bBU157_ct&fa-yyKMA?459;H_h!@Cdeh|{rb&J1T7*rX_9b@19Zky}N4 zp9>&&~2Z5n#_^5g^LXIDgX)UhjQxj7h`cW53BIh z$7DXHrSPN!OzIi#O+O_u4_4;>g{Kg-_M(vs@iUcf^?o0coQ9j`xPLQgg9(1i{$!%- zl5AVW?2XdyYvx3!FMb#PMM9@iz6`FLR*Jeuim8SNp!!~3AOb$tF78(ao5kLp+8-~> zCK$l*Scq%iav4~oVZG(ryeKuYq@+8PuJ~XWhXrTO_TtMao_!*wzf`|R=SXmlHkug! z03n*KSL7*;7_K97E>h~*0Kz|NV@DEIMtu%5K?$AH4MryPz}C>fn&&g77F&nV4D7|h zG(JVx&D>ZbYy}|cFOr-yt13E3jDy>;e$o=nx>s(zyYE`LQr!!*^HOKqAf>qc-r=)vN=P8 zWw&^T(kATpRIg%Wwc4Jv>_Ce5pXW}cLl@FGLh^T>HVl}ssNOJ-irqZv+*TW?yQ{ms zh|N876r1);UW?)t3A?kJP_20xT-k4>1?8#Vl3mYy;`aCSxCG%8uIIEghS#Bti#vKM5*MW=K&H1BW*W9I=9xvMw4K};;8EVfUM(nnS zhRq&3%?mx=jZ-m#>aut&y$kNA3whI6{*l?aKV}XyUoq!!5@!1Ea+2&#(Plo7oBE)_ z6|2{Lo!gPr$X5yY;qc`2i$?h%lTRIwkRuP4S|M4eSRuVhNcCrn^=l}GjDFokAwl!7 z1$b>!mEB<2a76O$?E||d?;nktscQZcnQ-n9I<;qGj}MIb@Jx6mJ8%oXeU&6)XpJ?* z)o`(*)rG!K_2HAP3g#R=+USCep03{LgBb;F7DZ9o-$Y{=zCH*P>-xI+-vmC#k=|+E zfKt9eH} zdQ6MN8x9gl{8QMATTS)NH7mlkDw^zGILEd|S)XALp_G8bIj;(225iMe#N3 zCjrS_*6ekyxP!(SPvat12~gPYQFC|O*fHSnFeS)En6X4cY9Ex>O2@1RG(<$EtN^|H zFk|_H=-t#yZ{S17e)}ZPQWn18EX8#H*tb~8=(yj%ZFI{R4}TuV zjQhkbih51nNX|E8ZDl0M8Y#8}2oBTo3FNUJb1rZ?EvKP>!%|QY3mw(|4Z&2cBln}tk7A1?f zicUJd$1f+;^RwOA_yffDV!V3EnB%e3y#&{mjZqgQn4V_VUL-{haGRGfHADvX&0YMH zIxm+?o6I(g$^}3N*Gpk(7g$jJ3YaCmm z(}lgry4n?}Kc!CF7U&EnSTwj)j7h03WJae*ATg6KkwdXoUr^S_uJmVWHR@aKhdqk+ z)T-}wi0j+7>HPvNs@kuTwY#7E$2Qe*Z8CJ`Btqhrd8ioDiOn}f66$qenmNu;rht^J zTBl?_oWw<&uaFSVtkXVz=ZikwZL{!5d_1vWR3MugT5TdvR`RqZ8D&0$H{qZDwW)eK z=&VEfL2u;GDcEYIDbsVMF?~F}gZOaKz;-b06N!n`S^J*iBV-rsGXTl}|F{!2Ayq1n zNeQP1>-w@?frbA*@z|eYztrv6EZ^^;H`^~<2?)WJxrgZC!@0wHnob}hYF+Mu{hw~h zsNpWJ#i#S-rNtp$VQa2es-Znk(zYPmt%CI0OxRT(>DZ4U`*Z5mrB4na*!_hkEw?RA z>4IJXk?Gu91@2QsQDpW`#ZX?McvPI!QW-olYqC8S+kiMSz~$vq8WgQCIe#;KE8#Hp zk{_v5F~Y4Bs^gIrwC`3WT(OdGy>J9J@Y`=Ubk_VnF)6$rM3gffh`yPJPu9}0ufwl1 zF}d{O&@$^NSn>MV4F{Cob`vK+uDb{lc?`jbWa4dOcA_PE{#+k?zbH#fHYFXxniu(c ziJ2ZhnOhD_e9f7d@_A%3ZOrXCqC{Y^v)M$}Ja!;!Hi~}{&>72Np{5sjIaKIuvz8Uh z$3>AlG7~#UQ+a*xE#+NDI$!UB<(h49vsYW^G+zv-=aYrt4N+6?rEp?20kO^+DFHUV zu{sa^_NVq_nUt@rCLW)}k;n=ivf7qabM7GEB|^OlI5>pqHg^o%DJr$H54DG>))f7{ z0m~`&>O)afCqE3Q!_#XiwgLbd+f%lnKG#@UM7I|;{T%ksYNd7{dP3)=K^M@}mde89 zRqT!Fi}bsZ9Q?`3?xw^JHQ>B+pK0WCNRCylvvwcZ^QqbrP%IkN{#zZN!te>3L5++lcG{AA3vVO;JcS_ zoM$ge9JHK15B>q|Mm$)55;8*epTm@vAcPcMm1b7;;NXYzPgDY)uyS2{lb~5-Mhw!&se-XnF6`Kk3PJ~ZGV-* zT$>P3NnRclxw=ht6+Q8@ABthhy=<|);sjs1qNpOGCv?ye{CxYsYWOY2_kpS74Llv~ zO$3K>jU(Zd&6uKFeXMjLrtg|`@qx9m&5qCZkT{+9L=H99Hj(iu#p(1_{ddXp;Z^Kx zb%=$|#~dVKYsB;E;JABgU5}_CQVkJ%rut%Bu7$X1{wRPS?g5&wH11cWQ-Wjd)5|5t%qP^I*Bw4$J2tga{qN@m#mlTRnn6nmL$GdNYxhw5z0NRn!}=cwqe(f+ zkbSZ)w?Hd@oDQPiedD8X+czZRYCZY{c*?)zjLjcvw^trFL}!JEi&uVp)oHf-;*aJY z(p>l2y`@Xx(D`spQsvKSZL8OT#+ocoaTLZ`H}K=idS<_KqbBk;3gQ*P+fbyxbWC8y zDEiIhIqR{NhbP(pv;MVnZAQ%kw=@t_R2<6bve+6?v&p{rvcTQsHWkn+_#DjT0%>vb z{fEL#U4hs0&%%sCU(fK|j?bDaFcnR23}U#7@gcI^T2(r~Fmms_r9-{-8v+{m^SmtR zpLNflx>mRqQjUdbQh16nfIHcb79Edn+h)s0es%B3iw)+nu6}|r@U)`i4!V=w9rMfK z6fzgQAV#|0fC(kwf{A$Y_;<$QR=3V+L79aJV~@Ppit~SxN4rM0T#iwCMAvGXEGD22 zC#~|RfUHJYGCNqrW;lbxZ;M;~e$DU?0zcB-f8-=eDi#itl6^OlgPAL-$`mO@H`v|08XIb zDl_MlG;-VQN&a<6KQ4iuM_y+9WY0vL4jC+%+>I=${|2=!I4)}6fvh<9eT#DOQ_~!) zuni^cUa^?o(}(7YI32-^>$*EEvS-slF{T24^@Usit|K#>;Kel+;Hir%)Em$sVqVtixedcN<qcO=+CI`Om!U(kX z!=Iej37V?SQ>lWPZ4Y^Z&o|kAH%LHTdaYdYfTN{+7{4~-atOY0b3tOfDFw?V2r`sm zhz@EgH~;kF(#a*H-XF1pUv(gVf#Q>rTZ{H)wZ#c7?#YwMlyf> zuMocp60nO8Jm3(Vy{EXyXfkU{pqwL|{Lg4>CrY4qd&&f+M$UBDND^7OUgY(&W&jO`ZJkw`8uFCDE zconFpS>J@BKAmUYC1y9GPmkb(B($D-083}_V*xD>f$1?Y*g6kKBa!(nATTP0s37+c z4$tQ7iR-dMjw;0r>kCcdw_vrhhjawA)D0&_W76WGuvyBCT|d@9bhD9|R9|FTKW>zf zcjNt+wI*xfK6qWmhokxI7HgNENva)deqNgdY?eeRw0`QG>XJY|5UMit9o=Xye>J+Y zcI(iGp1T#(FTP)TE7Cz(h*({NrJb7SuvU9DaP3A5&{LOJ}*v>bWgv8co_A8 zq**t;XZN(qmBU=RKp^(pnPWz-06;ky%!65~IrFE#@E>KM>~Wt{Ql)6-HZj411T%tP z#=_`Q7E!ZImq@sOe0q5t5X9mk8K+qZ7-Fkho%f}@hME}Ck88J<;;AlBuDPg3hPKc* zdR$QTFhc5b2r#s7g;p1X*B^kl96{Vi>2~6SVxPHAV0A&Gk17^IzBL9_<&1J0BSu(c=7( zE?1d)y@?1?Fa;LH7aF_Ci!@CS!VeE6OLO5Z#j*_LJI3Br2 za~!v+k+hROd}y`CJ3iOPhW19uU<|g5(TwRRAwy*O(^W4awBL96IJB#g8)$B_3qoCkA6b+KT-C@<*`3mKK+50NcNa@TR2+Ua(BP^y}Oo#kDC&Ib8cz zA!81_Y{skZkEbfCmIzeF!Cq`yMcz@5`%yl* z6#}#&hD`AO&2+isin+(d%t6!9kbO5kBuc3Hi9P*U_%lzxricTl z;B&XAKCtnjg9U5iR-!ICxGm%{m@Lrx(Saj}OplT_t;0dbL?NaqVIL6)>X^YkO^mc2 zakA|557|Wuu?A8p?r);_z`IP4&QSJlLVI4%*>JIrep0*HN^SlR@!w?)>)i26rYET; zTS0+&Pb%G9-w4<2F57DPLJTXT&1rZ%hw{(Y1Oj<*!72Z*P*S`1q#)p>d+7cO$@Z{@ zfV2KaleTDVcsQiuJ2{`{oXRVRm!hyG?~KHya1G|?i%L#Rkw$9yPh3pG<&7lqv^grQ zX#}Bl4S;kgM=_RqGW3vnS(v|bv@>sqzP%9188+b-&-8acJ+2 z8=>~+rKj-0c+c#$qCIU@Cfhyv3;DWp0zmtTM0$|0(B+J(>XKjL@zcPwU{gFH>dvIr zo6#f__jmOlSP~<~8{pGZrCzeNj9{15EvfN0DHP zwJ$Dz^d^#0?REym5Yf}KR*6jpW}YyXKAsZVnm2UK=pMEjbaGQixrTNhZmnSet{+PSG^)f!gU%Neeu(J(}FE8N>CZ!(c zxV?XM=0#Z36J*LXTU9Amt0;B!%Tk>wQ7JY=oqsSs7us} z!!L_hYPm?Z-$u@ZBTY^u_z%vfls5=yM!^7(IvRHB@kR7cuedXANo01JO!5GDnI!Nk zVs}ArNQAr;Nm1OPomiW;{VNbyA0@N+_(g&<_x%ud@l4m_2<;r=`CiOXQqm01Cc^Uw z&$P1Lsr}?XGFI}BLTRKwV1x<&C?6|?=IXc5 z2E$Dk8b^*}{p`Y=6K-7McnRwR*RfP3y*YSsMGsT-OzQM#b;=&7bGOWp;;JlSCCmRG z`S>S@+KO)1SskF}Yo(H>!Hn&LFF&s>u@x#3xPk2ZH(!Djw3l2Q1&g;F;aQQ7Y5cn>&2MZxm>Kp*MDLq>tKTUucNboD~rZsWfDtePp=yDXjEU{`vRd?n}7 z<%UWsAtFj{W)+K~KIZ6kzp=_dynfEx=gvXW2j-AB^W$F5CG^?ZcpcfkJHs8YM~<>P z!N76BAcB!^+Gd1st=5`g;BLA*AIw~k29Y;`_ec}yAu7K?D$EZ*=-T2r69~8HA+&vq z8F{)h0?!1S!(z~xXS-;HwdP71r-S`f;5~uvmwq z`a2Si%Yav*OuOAeKyha3ZOrO*@za7CRFkvyX`pHR3Fh{)&Finlc$Yht!}n)cnEl*o zw7;je06(H#-{Py)w;`m`X!D!S;M^T<02uL+$8<1TC9AXt9#sm&uz0?vb2~;W&V_E9;s%)Z!6_DOpy_e}X-v(TLt%S{X+PnS~ObH?k|D!99uleIK?aXA5 zmVN;3tc-0&Y}SP>MbZb_Lysofun#0*i=7v4cQ^fu6dexl?`Rh+*-kkTYPphwQa1wG z*Q}ZbaTXxYJuS_`8Lu=TSP?#^8W!*Sin+Rwk9>0?$42AOjB(hkKsKYSbH@dTM}Fof z2H;bJ49T&W8kB4;VV)&e()z-`CGsq0;kSKpJcRSY_)`Zr$+)KCn*@)T<9S5se*^DL za)*Uj-X2qO&LNgdZ(@8qVl$p8?kWoWH*am6D+w`5XE=4{>swJT%@RnqRa`HgNy=QA z){*LmzL8MMPuQ}aEkh@>ir?`eEU$(LR)*MA(<a_B<#{o^%zLIvn9zhv zeVTu(N|KP*5r+J_MoPXR!Dg_O zu$-MozSk{-gSM~TxP*Tj^4TbI+sgTqr2Ug+9Y zs1Pwxw5)C-l1C{4*^(nPTY9yK$_wg-zfvybbbN1sV02)2evZuHY~vr&^`fPSr6Bv~ zO`+$*VBloigo_B_K6`O&sR4vValsVEry_;!^DkcA_?JX{Qwoibj9Mk_B_lY;E+!C8Z{)^H=3tLvY9N}WD4=}R_b0rg6sxlo^k>$+d_hRQW*RrnTT8nnfe}$kRVcqp zTU3+)s0+AsG`UAVsD-<*1x3fN3C1Gopx3Yd>-^sF=XVeGBdOlcoECO^BRgK1?6r8c zOeSz@c%y`JDQt}}Y;qYFOk*h>lybR88e0X>uV-TZoxW$-t`%*UcAW1bI;a1oIvN*S zekRlMczMt)RHzC^Y{ipE?h;IyTx(p=IeD~82h4FS#A!v(WKcdvW3gpKt2$7=Lr5HD z%s{U;eM6>cP1_ERCSt@tfYokUt6>6*sdqo7-sRU0na}U<&YNylhK!hxJ?c;t1fWSiP!b+(ih znM5BftV5V-d+Ori&6XYUPY_-$0iKJ%zVBIl9ntM%@X&}kfH9XtcI7@+XmD-crLTc1 z?lvrZx?81TedST>v?FH5B5!yT1ap4kLex16z1csLYqQPIZL)0)Fc(hfY?x(+iIy>S zfhO9ubL{j8rwTdSVi|I82uC!?$59Ed(#79(yBnY*@?X%1(mr>(oTxEB)|Jz|P5pNl zfZT%c)xi-d2c0nH0X+I`9ZTATdKxYPoTtt?zpd}k%^$bXbqKa+^H7PO%WQ?R$$&nO z%O6vwH6dAb1VqMnM@{QOJ1!(R&{oGTTm02lcZ!ER#y$ZF9IVR!f6lHxX0Se7+CToz zF%sbKl)Ae$KdJS9+~ED8LRER6*)EPzpMkc}w9H3g^p$NO%$s}i?5Nn`Yz;P)OpqDU zVBYI-FnoXyk)K2V8%P^O>g4O)r7ZKK2!?Zyh^wWzg;LS-;lZM*u|` z?b=2cJt2?cshQ$na6yN$v)1?$VMEb)yUC>UiZYgQM+E`74MKk~D)Npn;^qrm^m?*K zbUfK<-D8s7O`;P-o#=yY`!t>Mt|!n*@=*RMZ=W(bN=jrs9>;l9Is59;PYf)a8%n#b>MZ}zp@2^+C0H) z%zg1Z=KRwr-fNd&(){3SVQmiwA_ted^?Nr#AT%R@aBXdPw*3S3XQw0rmKVYIXYr_d z>$vu{ypAy>W~*4k^kC z4s<=<7C(}7blLTfz=gjw+1XzTc|bg6TE4hbZ1%WOa|vVv|Ch*3j^tBmy(`M4$5t6m z@-6C1s_}W~Rh2S+vB8rxg@^IXf{w14@HW`JpZUQ1dinlUES?lp?GCa12{BbbvNxeI zo;Nit;6i3PtZ8TmE%bNneE0JB@LaydO-qdR_iP;AZ501J<`ZuW+%|T!oad`8wq!wM zY5Nscz%F_ruQN8|;aIAGkkz?!wP?`TJ$aLm158*uX23r6+@X`Iz-?jsYU<=$Xfr40 zTeSho&9R_jQ>}%jAHC<{%MD^op3$A+PxQyeYE3c%n93pIu&4~<#dP8L*K;wZYGyJ1q82N&5~Eu%0~nHfY_Gri=2Vo&LXIk?SOGy86 zv=12bT|9`FrV)i(8*O)!5D0@cpOB%!bPRKb6qPNH(!_VqGg)KmwkTah;X?CNpXSi( zyV_J?3m}l4MDH=zA2GOY&OB{3+(=5?#NWbBA`8l^rG3ey(<}c_XKEJ>o~ai=eip1Z zjGZj+SPi*qj#37XPDWn;@KKK+!r2g^Rn^b-x=(IW5Otjm2xx@2o0OpG68@!A-f=c? zX?Q`@s)71&w{BYkDT@M%xBMBuUh-TY*{rDaXHGu)54?_RS4Y7H z|3K-2^>kr^7LSW~E4@~@#(O>kt29+Y zBnDbW!!S$@-HBAqCd#m|!7B;?uZ!g*^Pq+PK0h7^HzoX@OE4Yn32n+^gou=PStTMAL|gT z5j<6TZ&uD;!GgHLDqpnEsC7&$wz%G(PuG-nnr`HA#+EK58Q8mY))FRn-H58Xg)vf%+OMj_K0ErVnlZA!PkuaM=Hi!r|9XS<9i?<6 zy2}xjRM50;vNO&hhY*O+%B@ElpWnb=} zCy71g?*%NS&X_gyF~ug`gXQxtDyuHu(gYDa_sRTO>FJ%9wo4LjT)362j)&Xqwkljl zi@!8(x7-Lh-Re_q#JKRr9)7d6#`hCCEg$C-PyR|+;n4^4k(mBTnebT_LhvE?UQ_4b z(|iFA5Pl@0w9UQ%sUhz6P zO^4rH0^@G_v+vQ{%!{gy;%=Prb=2{=3;6kCvIz> zvlvz^9J%UA7*P<(5))*#xb5;m`8of6OKrY?ML059@M2zh$E2ZXF&WUCBB|HHy_A=^ zs$O>k%g4JI&z8IfqM%w5A7=T8O;T;}=X--6RnWa+N)#k3O>-t>h@N%aCXIud)Mi_x{)^=}cCm&{u=ea> zx6NL*07*Ocm*VSXZH%JeS*e|u<&l&>5wkTsKQI2;c-44hf~oiI{87}=Cd%Q5gBrM} zM~$91R%cRKISDHsJbk<05y4mOBTR8EPH0y8(%92rx9C$r*mT#iy1mKbV4Y3{gpRx* z5`%Q#^1eZjtKmNr=5zqsbA2#cX(9b3%9@eJ#~$M2OB@zdn&2~_0eoy)+QsN<*k(YZ zf|YaUZG6h~_LNUVvnH?bFhQ`2a_##@{8*;y&lAov%Xxh2>bmD@1BSvMYZEVeIfSai zT46Edn(@zNAuE5c8BspKq6BrkHO1w2e*b2i>fvgyfns{AG8kwRoMd=n$~Kx+ zED2b5hk$^~SSG6!$-4?KR)rbVE?;Imj4yWd#z?vg@~L-|dfIoB7OwXHA~ND3IMm-b z8DZ3m{?2Qm1_BdYR>a*v7Zt5Jen$uCi5j0uBCtvWQ&zYTGwH4C`iL&DDnYz^cd0RZO zqOhscK&WC@CEhjws^SGPYAO)YP&#pJNY>gX=1n|rTL0=*#Csk`GEn&nLOMX(+NdKC zG-1_gbP0GPTgzq{_8Kj2(=nz8!4akeDL47PEl`)r%8w^ITrVDATE|H1LsQt?XE_0L z!XC|g!C%G&@xn1FLYp7h>=G~Cbu+H7k8W%C+efP`g50j9hwc)N1fS5Ax71)oPIggz z{<(wnhIr@4OJ2T4P9;QXG@hHYeYJ*T5)}h*O-Px-_kxo{;<|kN#jJ#gby8^p!%WQ` z8C+qM9Nxh>ao-%c1C71Q66nPj6FHM60;YTGCYzFA`R+O z#0EJ8C!pz49aHps?+Ya7+$rcn7QOdD5#9VxBY|F`m zn7a%v(J{VK(dfL~l-wPiQY8VJ%V zhndzd`_qD>Qv29~BUK^m^WA zG4OEv8S(Gav1%ykL>;SO8DiK^xJ1c2*!@#_5P@vB(=EjFOZarYqe)>uc;=A!E6eB4 z_nz*k=yLpCyX0Zy6#kfHEAyqAx+WwsRIg304eug@ox*5Ti!S%5`^0i-#|!%)FUECV zZ{`Sn>rboE7_#$Qa!knkev~#!%j}=#z*8M}q}3ibGShh>bVQJe{tH$RTu;w(HS^#k z_R)t;=J@mkjoP8nRO2=*u}A<{*eUj= z)l>*cBB}g)E?`#L-(ovo1`!i4Ifa7H>wj*x+vXFJ^lc~l^o4Z7#J;;F?F~73r{Vwf z6q_Fa(lKF=x$%h3vWB!FPz_*I z)KZ*%1Ci7(KElP*9vod6KeUl_!X=tb8GU=+)?7W!H$YuK#V(}`-79baIt?!1-Wu;K zyF?G0LK(IxX z`4atqMzoA~Fpodlfp){mkeMV=euZv0TRQdnqOfAPYmE&n-07W#b^ieji8STH4 zaC0#)mVI10f6VBTiFS)dl6KxH<`VWLyh9NH`s50stg>b9BA$8m5*uHA(IXI86wkLd z#=eyGn8Wjc_bI~X|obap7)tHV**%w?ZJAxFC-JQ(EsNdATJ?Qs*#DfK8 z*mbBS3siCKOd-MDMqEk7J<${%285@!M&mKszO`il-q-ITEL(D3EOEWR!cK7rV^8#C zt|IT&=SKQV$5K1%%nlyuXF?Zm#vZvlSV|h4M_lwL*e0t6=pL_F7M?J|%sR?{|BQil zI$j1b@s#>AlNWmopahA0JOGk#lqsF2&^UblpP{S86SUI*Nby%v`E}M_w3S`BUlV}_ z2ce)35I-Vla<2d;NFj){*zz(yN?9MY9n7~0`!YjWiApjV_^$1#nYWhlHfO3`RbCub zn4}j^ti7oh%Tnz9Lr6^-QV9HB(A9guS|-P=J3g<|YQ=5QJ*?Qdh%oxZ0WIAEdDnZC<7ae&N6W$V?AdC;uMUx>Ioc`nU7(r#@z0`%m_6Ua5f}JH@?08)NbRo_vE+1GlvQG z)Zyr({CK=A_nv7P4Sjz3yNFf(8BV=Wx{l+k>+ zTWdp{U-T+Z%|G;sBAvQS=umv9E`Rdf^oDX7yq&IUdHPK{Uxs@TkR<)EV~QR2^l03Y z$WgRe_!ehiHhb?{YrHg35>YpI#*?fSn$>AbF1)VGL(#fOnZ z0}vZNUrr^rJim3rU8w4n_4sC8)qX@o>`&uws^EBbYQI|>b~;;SvxA2tg*)(Hf7|;T zz)%uN%MXhp_0{f`V7jnivu};+Z%{&(JCc@4hq;Z&IX_lH1nqtz`l;g4C()1$nGfb+U|I9KWTWc0V<^SU$GvQk509VZO4gNvp<2`_YAA-T~NZyL@Ra!W(n#%PL z?r81mjT8XB>$y>43+c;wgwMYQ&MIMA$8xRLoS<<5JWIAj-Jptn z9f(Gk)jm+`aPpdi({?@cuZMO`@{qhxC@(?@_#`h3B{#D;oG)0>z@orzhJCey8F{=p zLLQg|YU_Od$RyC$y4F0&+qZ!<4g))}@oK~W^=|#=a79T5}Bfm|CABJ z;dXO5vJTm>(CdynotW^L?0nY+^F&R^b->^dKJ#j&Ws!aj9;cOXCHJ=itwFle;PG&} zF-!p2GW7XxkWW?6>wua$>^3)G8vv* z0>|P&4=XrVe*1}|NLi6Xy?j*)Hb_DJ2Bu=Cz?Q1Hh_@Ome#?w&@!Skw3?s0lr#sJk?ynk>BSI~zmJD# zFLlqpGp3n)mfX$p%!>Za&JI?@b2YvD0y@hJ`PKOX-{}86U91Z+!l^fB2jAH1D;4zP zRbPSaec5QoqlRx4&^Y`}fs^jP!xZ3F?iZL3{~9?2w}0Eu14vrg0aoDK(qWv z7U}vh>`1TI6tQ*DQyL#mh{410Bxyp(jh>66K}=#PBepKW>x`A&X%|LC!&IFQ2kKR< zsWu(U!b=QD4ivYI<{nRLqwCT5NJTdcUWzT(=`dN!a5VX3`YPQ+;7$H7Pxla}9%L@_ z_+*M9iDt3vmIZnNQ&g5|vo1YmbY|Uqh{o60?=dU;JiF4JjV!GmzXZwU&I!J3xIDuX zi!&+rI}Fokwh)t0X%O&9ODw>Uo2vX`Din_pcLse%J=2jjF@csg8IMK#xTGayiIra1 z4pOdo+r0shgNHJm$)4sZI!zO7>fjNvK!u;pjnL}ZEc~?&Au^v_!ik9~xxfE~WaezzWzYhfVuD5Z zlGaW-D2?lV%HHf*&_2ARzhM3s)A~PsRsO+{n4gdutwZCgztjRba--pM3>pU z{+jq$0wmyb8akf1{_Zi5#3*hxaFjn4O&;8-_92>Zjepjoq3ij&>;_e)t~aEBBk9}# zbC&iMoPlY4y4vvliToF+!D)-s;aTjw?Q(kvdnQUY?T$|0LnqCb;?Sur(%S*t%uz3e zzL%1wSgMH8?0(m7=k5n98o2`%Lurp+o@FBVEYlc-$7OB#bG5bE(Tk|}H-^kCu6iai zNahw9?`elRSeIQu;;(fG_d^P(D&95C* zD9~8J@6|6|19XP4oz-y(MRS?JT|o&96*k6kBIUOO9fLL zI_5N5;ouZOyqO3d7unoWj#rE~zlHg}18CcAPklLEX=@Wv*y}nSZT71Vi36Ioy{(N zishAwIp9=E5=i4Uq_s0Ya%x69%t3()oef~gpCR=)Ps_qRz<4GAz95oa7&1~&VcNI2 zs6%L-Fz4@t7%zkoI(9$l2UXR($HIz+`60_lbhj##$Ik19(1l%*Xep*)~R)zT9Yv&PSKAShF ze2x2Mv)CXasknb-qIAB{gYZ^N0QV`gFc_l!U4!H6)fO34<@Q8U+^&2LC!Ar=t%X*o zb}ur)$F&j-wE)YP-OOTjuL(w8shw0tIw`CEt3+Jr{@fs^9McR>xd&Sqjn4RR_(jy$ zX(IWrY}w=iEDA3{Wga_t4ljWmJcVfwF5SjEjT<_aP+?zid@bh@@3#W%ZgluLtnQiT ziWL=yu7}21J*s7p1q|TdD?`Ds**RFNgO(_t-m%3sDz>-sxL{jWVv~IJ_zp06qGU4* zM_${?nlw!*%ER%W%vLW$>KW^y@VFP-87^M{H;Bzt29$D7VP2Z;H#^U?ta*p65VKS} zyi9k<&|VqmjuhvSOoulO%_xNx@xg`4m8s1~nRHv({f9)_@)km@FN8ipuK@ke&r;^J ziej$G!C>K&;@K}z3`F1eE)!B!C89be($v4&fN=HPW15{R1-P>PW?Z2nm#e<8jjvg@ zMVQR(k*yF2r|C1T;#XhE5zpvUr4g8XjBMBa^71+Z!5M!-yStrD88PFBby#O%_IF2z z!o!3zs$kt8i7k! zZL+Y8Ox+vdKGeh-;c&;N(7w~VQ)?Y6%+Uc3}5P`tPmDY9{Q_u^KHw^(sDR@~j) z-HSWL-QC@#Z2VpK|H-*e-sI%T`oIT5LbCU|t~tm2%`q0thHqr<*%Xxu@#1l<{$x0Un#w5!DPfoNU&EYdui}M%kk~0sHgzy)=GM?`DFj{pd_vMoN=0z$J5zAK_pt>GX&@x6rdHI=&W;eOhSC-xsNQ(V=NZVIx};vJ zKi6`s2wxHF{I3t$8pYdcjqU*T9(KVGpaiR~^SS)NpNa zb)#r8){X0tm3@08{K8$?R_0@4W*y#t$(GOY-L`u}z-g7^;wW zbEMJP2>yPFOHKp|9d_X!Hp{F+;{Cz58T98rvr1dNsN<*{5S^5=>TX5ppGP}km&u>M zOrwqqP}v^D%Z%z`n$_WMDNSNV`lohL7EEfEc7(@Edc!aVojU8MihEQmoQ8rlzVNvx zeeuR`llD*?aazHCfz{gB-pXe{%Su+X;(GeXyq$l8l(Yq`il9k2Y>`3`5byTCq+o(j zLAWj(J;E#jEPTSaKe_=|UVcUlr4)P`A;cRHucKk+&Luoi?AjVFJIM8P4D& zABP_>{_)$!r1}U!KuxjTK{WJPTc|d%7)fHarDokC0Lg}Ro5jihdpe)F!rzQ~Fw8wm zkdA8Mp1w!f8I{0B)S+4Ag<&k+yW1E&oYNeUaYAg#kO;^4PH~YE(57avkoQ#LoKpqT zYPE?0-ik-e^qf7toC3*NF1#a9!eCFTa+k;AiPcSm@E6V{kssqP+cPDP9Lsx|rD7hL z+ubEV8NmrbAi8Ce7KyAj7{|M@KQve48d&-?Rc*vAn}Eh))_VJJR2*jnnQ2`ZL9>VJ zpcU@LW(y|EeKUaGIn}00DR9{jOBlW_M-8w?q8n z{M2v5c=9F6qn3EIs6%UKdILKzvnG}1OFR*C;J%-D|*R{u>td(64ic7D8$@|0;$ms8>Ffcx*q@2BXDUo?#i; zGY`+UMzmg$T(Lq?0CpLU$VE+(@83M-hq(uIro+B{3Ywa(p7VM3wCG)Pg-8L z@+JyEm}REaoA68kG2)X%j*2H=t;PiH+KUsMhp+y$$Y*Y zJ=b<`Cl&xB%=?t0bE6;iF7`-6Ndn=P4d?8!4d((mM_@?bvP;w{ytbkc5Q&xZg)~gv z$u$Jy2Bz)6YdDA{?)RTH(~W1;S9gE!T+{vWS~7&MagP%7xS-G%odf#Jj36|j>g0fuWgKRESL`FbNGH$u zkz6xQBZj763`YmLfGwoqO-dSM!*_Q6BlISLKO6RQHfz_jg6pE^g&iRQ?Cc@StqlS! zJWg|LDP2~MSxF$RJq02ugsWW@=b(AiUBccY5XmlCN?{^5oUAt!9O|6(A4T2w;qfh6 zNL6H(h^7UDMoc74CLcJ z|0aCZ#zj+V;~8xWfR-y)q-hr$!syF}fM|{MNv-r!J03^>5|iQ@fN%|Jpa;vTm}s?w_&B^EXp~3$S^lJJ7{NEEp_A4VZ&NXuhG2m*bG!2v11_BS{@iRbD8e zD9$?#Wp8^NG(bVP?vvO&GEvNp+|lC-L{KLViKxq{r+;S5E9Z$K5$? zGf@eV6*EX|na#!&kg}e{)1%u|bj&y4YSRX4a1jE2DjY~3P=kjJ5J3>wOpSy&6Mjd* zRP|E1_0Ro#=aX$xzD*tVxW6{dFQzP)#-)LXb6S(@S-P$j?S(p4g<22zwnHx(q!rfd za8*IWt&z(YbSHBXx&|iGW@A<}W_Jw{nMiW~uePQ%_PrXzRp9r~^m?Qlg?InbVO--$ zSSOh7c*gUq{q;wwN?$Rn2@f{%!NKLUT5d+Yv=ZwFMJcD1%0Q>eCKxUI3)9I$hw|_= zw}$Ao)s(4HmUxx5G!Tw;FR4Hk@#aTD?*R)tyScmQ$*$$E&*OXHz=zLPY8&kYpW5`C zf0j;Ac3pxncR7z3s~NNTb#P@fE>;!CFQt*Vm!`+%{BgL?gbok~WVo0KwBq1Sk+-`F z{#@fTPw%&~dW`wvro_!yvDtq|!psmv=T{Xm232jOfPk!Bp(+no```K$HDaLmdwf)H zh%N&!pC3)DB~PSfR$-{sSi1ziK{?V-aXTsQ9Nu>@vn1FZ7;Rf07~=D$xO`!XmTR6b{_^Wcjft4b3zRjY zU$f}fVKZ;kf*2RyBtH4Ece>>Bx%7SF~!YnLS zI)BA|j=fDE=D{=9@nXTK#KKry3jZdc@YeVTUH%}*?tfs^5k=SonU z4e22~hHaBuP* z5$-m5w5X=n8qR2f2~)EAC#@O*#Ma~?S{!5jCHEK23;4v%G7K1^>egin`E+|W%) z_4M&{5XP|h&vwr*5+H!Vl`oCYz(zx}6Th$=iq#I%$wSX<##j=WBHbaIjBkKOH7tPd zDey^MjKq-mqEQv~xh+H`8(|FQe+-G^dqk2yn{PAhvBA%>AGGu=$8pv`|Z=*D@ zj}C6v@6KeFB*I7E_@$sgJkaTIc3?L@L<%g05m zH?IBDDiw{{{7N?^nf?6O&-SwPR1Ui zo%mz)Y`|foMIT5^v}Ws3gq)+6RV$IxqdR3SG$M|8RWf$BcHB3Av&R(&RJ*WU=4nRcyyjmz;n!vDIFzwH zN(D1J3zPG5q9&A_P$JIUrCvF2M2cx_@Ypmz@HzU@AdMHtwcxwJxt-oIsGOzE(XC%1 z8v-5=q(&6zIMZ^7Ziop0%{c+P200B^xez;M8r%C3%eBm`-z-tQxs$%7h}UqGrlAG3 z72vE$F*c_UVuI`*RI94xdTDaq>AQ}hF~*vE?5S&3V4-BPtPjL`&c{_?!2Sk?j|cbx z!CQAF8dlHWe+B%bEqkg=(Yf&($e2soU&oHfh8thbQ zx4)*Pc?p8MX>_ee2>Icw2b_Nt&t%xL0rumQCIO^XwO&CZns~UAld{%z2tjZ=sJgl4 zhQSPwzSH)380Pn~Etrx;VJbz(91-ieiju98ZDvoCx4EToPvoJ@YmTo14n7f?(B)Ju zA4Rr2ObvVf;do8BK*MjZ4L2UeG&py6HtxmhNLJS!qN7&q0x*mK0VA!x&RqCl|5Y{y z=71~_Lr-!_F%5<`n@-yBEkgd_5Vk#EdV&=7s^s6|QXyJcEtvNRS#cPi=Fu2hfb}Xw zTjFm;DTra&nOM05)-qcDq5Z^!GIaE(J_H_w2Rhvg^C+ieyE-J$0#xyTLQprHq^>-# z@G=t`9Cz__6hVxJt<&GQUx{n+a;*b`Wd4>NTAWGRs2z9bTd9=~N~z!Bcjmwe-kk5% z_Sfg=F0#`bw1ddUU(c0~rn6I~uK%v;BI{)cWKIUuuH-AlG-Y~6-&#Lcy?&N)+%v=sRcYh#z`@TK*wu*jbf0rd# zuhk=-zI|H8{9ezyW627IksQ(XxLzCuKL;62A9+V^nd}26yYUI*gWGDPWxAGi{>*&w zk2}U^IXxyMY}hpL)BE9h1!Ivtt|q5T?ci3fVYVlpjahrJBmS6VoG@C?1MdOu zvJS6kLxM@44{Vp_AjS`9-n8T(Mkv{xIB-f=g<9d^0aXsJCnfv8eGqj2|CO=8uYoM! zf(?MH3b-X{4{Cokt2`DL=pw?GyyzEyJC&(Xg6;ZFLIhUp*WV&}ML~U~+ZN+hI}SJd zr?j!057ba>@58ux> zH$)rUw8jrYGZqH!5Z~OPfoNItdl3zP=#%R27oe}#!_c*}IUh7gVMaWPvNdye>8ybm zOA|ch>>nZ#Or@~_%CjXV8*DSvP*LvAk8wt&@AR7K{93hcPO^ZWZrH{@~#z)7OH!pnh z1=K|hnpVS|lc^LDs=;C0db}J;0y%I*%}#N2CTvd_=uV@9WSlZE5pn!lP{{l!J9j(QY z93N|uVzbE?CgU1q^>SyC$UcKtSVOGNq2|7}_+smdyZK1lLbxwyiD--fSW|F__D(63 z+(X%~pD7=G{ZuJY^Kf=+rXU)jivPz0?5qv{+WK(AE%5T5Eo%f7wZ2@b&a_)l&B9(Z zo2)OERG4>b-<>)WvUw#>tJQa;-I9}+zL7$zy7_j;98Y(fv_&b3%ohK9vMQtgusCP# z=YA5bmRo(L3`+uI*-D0hd$6VFr@3-eO#NUQ6y&Tt{>C z|N7=*0G7ib#zS9KKo#0 zk28if{PECl*EIJ;GBA9O9hE^mP;9kC4g24pAHk4zff1((y|K2Og-yrDAq$ii2S1VP zxLln?cI~V80yLZ;*$_v3+P=e4)>fIHPM)WDgia|pd2mRPi$h~*q_$S$4}^?D2v|Bt z@sWyx29mjgDOQi7`8tKaZk9^N8P<~7_YaBjCq}Z`%ZqLt6dBU3TF+G1evs`@V&Y~= zZ@Vk0ptrI)&NzPQxHMmL-}LIFW$PtVMSBB2Z(SFjy`}k3;MXH5%*}{(Y(?e`V$`lR z%@apE>vXG}XccGp)*VMRB^PBsHshlfg^7%F<*Y@_mTaxXs%^&ZQ-NKzg9)M1`%d_! z>4x%iddvD|S@I34aAK;`ecVm8_9KiD1f$-#f%l8MV!wx&Mw{P$j=@Y!0aO8@F zLj~&2$9n+yCylT+h3mvGjpzv&4q8kf6+2UhLE)2?SObKHwS+C8OHZnij^|sMvid#=V{@d4dT)k(2jhX zOifuo=62b%Q;5dch>67;C9yOYOW}A{P2pen-pJ0QyF&)lbM}HHfwgka?hH#|c!v$~3jFtt zt?@Ezg_osB!YLniR9y9=_A@4fmmIh%z9%KG6oKqWd!KRMC;2N0uuJtgAOSk}C@QNZ zvJhCY(8pCwOx&`wg(!a@@EM#|G7P!lo9utRDEy2i*9?pr#u^04f52+Mhq1a3eobjJ zjTK}zF2jyJZ|$;BEkVO4n95gvUfCMggOu+^B{^CUczi04jWJ@y)K+HZRS=DZ5x6pB zz9rs$XRgIFxK0<~2pT3CJDZ}XXbBz2e=_}s?N%j(F`L$Sqmxqo-LK?0S-Ex5d?e}@ zp1if4_um6h!j)Nu(jtFe<|cM~Rwb8Bd;z_cgL8Vb`tU+4aDbx-#-;Y7fBUu^ncnQ1 zPgBfmZzSxYvr9^t*TMvmT!+nX!-Q3#GuU!VEPC*QI=fl9a)c_x^!g5 zkz*q5K(cL|q?4Db`|1V{s*W9ISvtGnF*7-~u4c{`2kSF=+hVH$CC7n?5ONUS%MvUXO{mX)*P%wID z4EPxf1$^sXRxxX#7L0lQ@M-H4%K+e7sZdXJTQ&P18CTqw5)nO9f&nVTL~g2g@3{8H z{nX?7XNPjcNiuS>lu(jtg>pyfA0O>qeR^pC=fKA2__6dZrM5E#2?6`qpEUf)^3kzk zxa%%1(tU9Qcj1PZFB(uUFy}`YqWm%#ZsF07*XJxRYOkwU%FH&&WXrgG1x`LEcs-g# zmOR2%8I~95F2<-e850P|(FIKXnJ!=cS>$#)=E!U;&(3vD0Id@B97?8SVA5)(9|AAd zzA{KKrM4B$eeG9BGQVTOXdAqRTNL}baFAT*vHR71mDS{zVG4Hz&2ETRZopbxvaH44 z3QM2=9g*BtkAF;QgAO8|uK9U|{Amw-Hn-sdj=;&ayIE{Zr6-o3=J(FjiJW|^Z+}}^ zTt@|to=Og~!T{N7Jzn2C`U_X7(fFMS`fvN&29%M4$B=P1(X~p*3Bw)uIz(60MT>Ua zB2Zar=msYb!%vpa%EBI9pRMXmk{IM8^m`)Ml;Tc3F#I5x$pvgs8Oowj-9=Lc7o4si zVs|05C41yX*9=xX@uz9e4_8+%j2KYzb!=*EfcjL_2O|URUM&;Y4O#Efr_0zAClBtDN!V{-)qC-|GVwHP&(V;=KvSwAsNafiYqMw;=Dtz2v*uN=7L+>DVA z>zek0uv%UZhcxj4R1Nc%AjazOwCew@=6`cx1r2@`Ac$^HMxmjcN6&Cw_#ZET83omT zwCA`@shfh#UvE1Wifp%f|9vS;VUal}K0DJA+jPO8J1fkn%Nith%1J z+je|mv0iLQNPgzj$;!9ep329f`Ko~CVp#N%_tP=|vRwmAzHwlWD zepV2CmH&E^LN-@!#)>sv|9EXi#X@FW$J$Mcv$YT|Lu(OYKyVAdy-#F%6JNgH@mM=y zTKq_M0nAqA*a|xFIiF1IPp;yv=>1@Jz=INA*5ABK-FV&oIu610UQHs$`u%o>L9T!N?%(Wuz?i|llA$Gv7x>fCxvF+42$R17bTeaN zEnm~UzV~_BreoRpNg6>$SuI4zKfc7tIYA@5n2o4mVg+77%AhU1h$PyH~>5_X3z1QsH!@o4~=4B1?F2ar)% z4@#k`k&_EXbJW&#PFVy?S&iJWDuAs>IildtWA=(yNSi3499k^fYxo;wa2bs)zua>zFX2Ngf)G_@H^rF z#5ghO!wCRiN)W*dr>WY?jke1vtMF5CR6Rwuzff4d!-q>{#S}I;gpabL*bc$wQ>)0F z!RU~_!=A;6$OW(`^g12?&RYBhW3g_m)OijSdidFc{P|*705j2{zp>!MA{*^mfb2Z< z@#6hUDx<@5g5{q*JC%SM#gbpxd0B8;S)cA|?Y`~hgeMsFIy~R$=cK6XSGh7ZD`X2| zrm39*BJt$aqMkbOIXmPVu##$fy!C||&BEHxfDD)je^cB!pALY!e|{qnk-;aq>`bzE z-VJl(SnV4}S?c5|rXZ&>ZO?7y^KV$RNGf=EbbPCe(Y+z&y&$H;$0gv3HYRg4)cK5PYz5P4LA z*NB2qgUbFwLGe2s#Ab2QQQ6$bInA&5u9r2I+tJOaV-X241!3Q8{andrU>HZ=KV32V z843ki0YbjTaYauFlcHbC>_^i&m~^m1v}NN58VYrZpG?0yzGwPSk36I#R6wO?cacrR z@Cc6GCEvIGeF0%5PyIV}`oEbIfHg5>!q8#pnX7FV_~86VzuNBhE5?*bOw$fGQoRzm zc;2NQVWMz*b8E~Wadf9#Jth0m$rcPWDV61)t~o&FX-PKjSy3lIE$sWu6OU*TO$4mw z$QkV!o{wY1Zk1<&M_G&@In#`*nL~%P{C3J2+^+qQ{O$X@QkY%xS6UgVco)?ZpK&VXfM07JV@HbIsnoDaZal*Z^(+Y{=#XUxjAHiE%OA5T6 z-*YJQb?Z{mU5ptXRJt(?(bLJWd7yw(rArQthegX^IvDn?PsL2%+9INXiwerPjt-P| z*QXtRfP(7jpcB`8+0;;Y<|zw`Sd}GfYDA~k%+b|IbU)O|=6s?>$o@4fHF=#6(2IE0 zBqsm;0&b87Lj+Ur)8MWV41H{u`*Dknn+oFzs7b%GU9teH$)h<`87`2ky^%6bu&~kd zPu_1Azw>1@Gjf)1aPdK?543tEpKh%+)thtK_gSVj*2)?q0WYtS)OdZbY+Ac7b<|;> zcvO?Q#>uz41QnlZdmhF`yA7^&Px)-u zG_DXuj8N=SU5$P-=YD!{(iD2cVQ#&ZIEW_)Wb9ojt(Rp@58qDukh3s z|A6hSF<%#s4@QX1qRMnl3%T&Gp4d0A$phw`(y?bhL8yo&9g*KLE7t1*IK8ezn-N=o zRmQuIwF}%k=j<|K_tSs0IGWV#BCMbjc#=(|pC zw&-)FfF=wzKhoB5&9avS=SyQ`>SEIU*v5>_ajE+!e+=rH(wT3OmaS14>T)mOMQAAK{^q zWQL(Qx3DbA8M6)D2b*OWix})qSRW7b{yRPpru}}I!@+pVu6WcNgF0tWvnvZeq zTFk!t=sRB~xV1|G0F)#>q9nI7S3L*-MSG2idy~o=WFI_SLK%0y~%Z$9F63Q6aXO zcWJpZw=C!5Wn9k{g_yfMFK+@_RRd$%@?fCDdMa&G}6qnjcat6ALhGjux){8gg=L3@24fyDc zkO#)8Y1{9-U3fOvQs?_t%-n{rE z<4apSH+-%8`ekc>`?zQyvf<@hFyU{~2h3zKB2Jy-mbZ2)2$=;Bn#Du8%M1G9T1_ zaig+B+o!)~F%jF$oahx$*w`nre_s-c8Mk&+HNX4qxDz*;=M)`+Q2C2A?kx!K5Kky! zt<7C_nt2t(_+zx$n0G$}rs`nwlheOn8=prOfPWXTZYAWhF{|_Yry)f0Ynjh^*GIvX z+`_ZkbWU4;%0n4K+bnMYU=>+CCGi>g1@)9%tr7(A?4MYt7I!&JxK`bJwllHkyw4&S z$k01|-3IE}b+u?Rv`{YZ!eTW+7$75TohGi-Yh?CGMGRxnPn?K;-@#}K!7$|5eOo*| z9twzFZD&aIuOXkC_E9@wy@@mwHe)Rr4Uv{AJElXJ*|~eAL6&Hw3kvCPw&SwH=btAw zvHg+xlstg?W11n#m?GX(?0xQy6K1H{^(GC*=z}~Foa#c~c z+$YqclJS%fXxdh=eflS4!RJ^361qdDrrH-GmITAekNz~n+kTd6%97&sS-PnRGdb{h!5(3oc-I?4xZC>fU;j;mr^-QRVh?kKohxYvfG z8oZ7jN0LI4B!4tSeNJt3RrfydNxPZMlHmL_n!0sDm1^-fMxMkNrpiAcVEQk=B+f>s zsIb)sqbm6xXKaoLb%Y6{Z;@X(vwDglR=?d&3(%E-J%+4Iz^eIZxf;w*7)>Sa(doQ6 zlxcCbQh#&Xol%Wg)k(^hEBAh7VQi1w^LIRSMGJa=$6?du#>Lw9y!3kD_kgQw*4;W( z2s>xZIybgP@dPv%e6Jmn#fpKJTT{%E9#{G4+SJYKY{okyRg@ldm3kfdFBv|Npu50mkab!WV*uj8ov$mF-#EPECx!#sIg*mQt)X9X(g2ETAE5Bp8x{ z@C^hiKM7Gakm1^S#pbt36pxkNQb*vDcE)ch;ub{M9J_tMp&hI0XSE(dL##ZhpFfGY z^5H+efBPrT14{A+DSXyq#*aN=Md>t*V0vGqm4Z*vHCr!U+wi6^(t`j5#XJsJrG5~D$i-jMx%bUq2UJTe$3VhmcGd~w5zi+%>-9zINN!4VBi1Q9eL)V5X+Wssa zXWUw8YM9&=gw9`r&E0rLE64ZFy>{Q*6*%m_u3lFUwEChka>Fy5xt%O;)N`~ezT*Lg z%LYNWUE!E^$K*D2U6Ohr+9~HNe-^KW-UgovKCuYSBeLRS8$D7mMXZX;1kfW?PrG&_ zwF^DiU-c?Dk|70qm*Ot|$`HUS{9v;ng1J-XzD>7#kkM=5=oU4MaF{BawzU5#Wub6Mpa9G)U50PA^ z^ul-M*l|kYg{Gi4AD)@0AsM1n9-5@tAjB$z$(h;ryrfZeYiK<s1ccB+=1pgp%Ky;_l!rWux6!Lbf-gVTm{&I=veXic{mmB6g zQf$j5H;7CzMrzW^9jK73B{*%X-gX=BX!M+it6S`a_etBgjKS9b(Q;@czYbda*>+3o zT7&s{05LNB;TyB(-}~nG_k>+Ey760b(qw6A0oZlMvJcY6lb#iD5S2y^Dqhs+H5vg; z8aaKr&_uV$Sq?<>f9CUM8kH6-OWqqrXB5ImFoPf zefF8j(MKrJ&GtunkGL+4m6#!le`UO$PAkw!`>2a$*|)y$M_`>bo$QcUyk0~#Q}2X3 z6wjagPQ8SEp_J5AkWP)PWr*;4zf1M+Ps5c|tM{G0S15i)B^*Jk?qF^k8O!;+cl{B=?@XQIqiY&GWY0i!Dew#AD$q_lzn5G=D&3CQC>x2It+>*) z@!OwLLpXzKUx^knHr8RBbRvH?XaBQ%csn${*q*h4Xn6ToN8)GDIwKR2T2PFQ8L-T9 zbPFd$uL>^&RJ%T;z4e-pB}dOi-UcF!6>OldS84T}RTAf#N0WM}9$pJqHg3`ET1VQB zhLNg>jZf_c;n>dv{~hgz7E(l|u@be)$^2wI=@k4N27iQa)mg*#ffcF8f%W0xBK>&Z zH5`hvI;!VeVc<%p|K~>sjMh}1pp>+tP3XLpe=S)CY2VV0U%*vKz4V8hKqr$A1$X$B z_-VUg<62g4w=CENe$%-3erQLq<#s(P3sO&}!8bR=3`$zxPdr-)?%?11SgjHF*-Anm zNk%~t&)xrVOp-=1J)5cHEU%PL(=B>Fr}8qTN#VVD#7V~SQS(Z<*Uf?jrn8U`$ZXro z&rcOt+HP_!2cxI+IQU=?^GG+^truMHv$%uU4bh%=24h{Jm)|b<3Ghf1=I_5}5A!)U z-gj@*6%%m8rq^7MCwiX=j*z_@cQG4{@j_kdb& z_X^UT(R6v8?H>*sgFP-FHCS@a!|6wXqBqY*t2cyy7F-Qn++Kdxb@zzy^c%HC;K>cD zm~Smmx7TyDzKcL(bV?3r!Q_gJQ$aEmx1}d;rLd2?+OWhSZ7!d2^1MOnAk)KW4@01O zW50kJ&_c$(+>`MeKHR^{~mBT^xt;BgYAUvM3Iu2 z4f;k&i3(!0?Tl}*S*D+5HR%tME|Y;X3|3zVo9y6*9r*Gcx{&Pd6(B6^6Gx>AcE=v# zCxskN05{}@AQ6nU+t4rspHB!7B2+OOr9-{xr4|N$p}YI=Y5QFg^PKT$Unzz&Sav*3 zcR!3%JdFr#@(2@rtsVmbtQNHLD0llge57CoPKXx&V?61f(-i-Fq z#bceXx?=(icjPN{s_WOQ2pacLG(W0hzh0r9J4R7(6ZFbk5Gu@>BYEGO$B-6mLbMJy zhO7vL$i{;6hhBUXeNK7*x+Czp*8bdvyNKqp!vM@J3g5x;*~clqyF!4szsA-fS&J1X zSit*`_UnAm@A69fllu^eH&>+x&lCAPwpUD1@Sb*^6ahI|KFSOs_GEyXvQUMpz^Vz~ zq_10^0FfQf5JXtBe6sp;0nYz`6A@tCLh;YM8Sz?Gs*6*_*ga4?{1Lz({wxyRg59Ct5D`sJ9h9l}7}3OR`EbM_TVP0^#F9F6 zVxNK^g-Py1u^B4|y#7w&~IO>4QuQ58fI`*0y1T zyaEAwJCe-gM<^?|eK=k(R5(ECI=jW(`NC!UCA4&{-xT`aD5X0ASeRB57OU)*xZLmD zW}Z=sCxV&&3TNGv5ZgYRhpjb(u-rd6m4VZ>w<2^LACcut2~1_LaWM-~^xkWA$`%^j zqUK=pR#RQAivbhwdNyl*-ub{D5!_T5i3^#c6sYKd^ptMwj-NOjEs z>kay@Xd6^tie%)`#g|*wl|olmRE!vu;5GtVBuWBRlGKx-F|ZRwA`*54w0521<9vN{ zCr$T*0k{|8wWV%J4#CEl#BCMJkjlr9G5x#TyYqge@l*0=QECCD5X{Zv1_k~} zEM7f)2zInAotp~y-Z=L%U&PF)h;tYP;gnvRyDA#m`meu?o z*@}meE61w!cT_=t&jgKXN$KK3-|}*Sd&%;q&5aWxu(WBvgY7C#2%vwI-#j-zgUquQ zw%ypubTZprcwAy-yvC$9F*lLUE0-~7XBU=u9=k9tdwHU~H%K-|Uu_8(Lh#+mhJwo# z1Q$%}AIG;ji5A(15?y`Yo>LRkEP1H1VnNR(Al`0TuaqK?Uw~LIs320os>H^3b$;m0 zrN1}ypAI-^s7)>A!O^Nf7R1-;&KngC9?`iKD}e5rt*`*G~IrZ7v=WYKA0sv1ni(H5YH(YoZWIo zkBn``I{{dz4Y;CyxWQn3Ut8F?#zF8gK!b*_C; zuN3aE#iGWH6-z(wII5b2kwvFBbiYQx1AxDqiSR_on;1SNQMHv8E_^zt0m)u%$i`ir zhgUbDnV10oP*f1b_r%&!|I2;t7$L;C{P9yWCUpF`k0M`Z&;Q6eg0zmV-d_qw2!2t? zIV(r+M7g;TBHk%rX}?i9No(&5jH8g$X~g1jQTgMWe;|eIexd9u24EG;GLy5O!kRRf zhc^gBQ5X4jzt=K>%lGE^W_K0bJy7V|Q|$<>M}zU3&`@j&<@ST+o@8|#{aI`ZKX|-_ zUPU#;8B^LfsyHGrQh+y56@d-$d}hD$y4&Upr6bHkR6dXG*anYB>hqv$`2Ch3pk8n+7q<$5!rRmkpx zSELqGX`ic|t}`3l0qY`_OpIAIv=rwIAW)0FTaeIgx9`tkPlBEMENl&7q0gAk15>%y zU8-i=qaG-0EU{LgE>OF|O)!A4kpNk%SgnG)-s0)k5lmsKh8>t5#{JP;m$G(rCVEtT zpQ%OucEN>`21b&r#tJRTt@K4n$7V1t;;#g8YOy*9p6C7!;fUWldVbn6`(+3)E1i7=KPEFB%mRzTG+xZqwCv2ZrL--2^KksmD1WPQz(eBxGoQw0T^X~5g zB6KGT6oL}cdd05)siuQ6-;89kCIQ|&*;6fmC2qGVOK@h@i&d*f`*#jMO9@AF%bY*o8WpaKZIYD z#{^;WNuAH4o4p@5)LUW@CtzfpN%eQ;# za(;MA;us)iAOrXnFi#&hN6d&<+~v=Uk28~pAqNY9W11IaCBf^(g~NFj$8Qwx4$DF# zDpgFYc7G;NY)T`y&nRzg_B#x%EE&@Xq}gm9Q)$p;BZ(9XI`UsqJy5`{gS6iA3rZoS z1U+o_{C|YKc{r4D+c$10Dx?xZOe!Q>B(e_49zxm8kc4c>zK&86io)3UeI5J0m8@eO z`&h=#7>s=zGxJ_O_jBL(`#YZBbHD#xhvWLgam;mo&-46j-{5R^zULPy1e$!0s{OH( zMsOih6&=}~PeNfL+m~*x+}jqHJATSD<>_a@qO)b;9M|#0_wx~Lp2$ksW*ddkD~>v~ z2EYsU)Q3-FBiH{Bca}oMb_>_hT9%59g{K{)r70wc=I~@QYHR7Qlw^xElXw&f1iqw! zn^Qk2vL>3ywbD`spdfJT#Wm>s1_7Am{ke~kfiAQ84$E*v3(;=xmENzW1Babpq6A>vblA+wEQrz2T{Ky~ zr{GvyQR_qj7mWXC_ls}yPp>`Jk0EWM+C{m*Xv?nO#5MT-ILB`$onwtRT~Fs)*gu32 zQt1kLH`OTU0yJlr2cjc!FtTCL>yoMe!nAH_oZDSRs=MZ1ei4-j%!HqP_6d(ezgwP3 z-g$no`F`XuC}Dkp)^#NY@t7Lfl$JI!dAxMb{!$-J={sJQu>Fgk?;fUwRYYgvm(NtxStOfB!1s`u`T74+OY!zswaHH6X-NN)id@#Ei8;{Sj3;oWEF z*n2Ogr(O5!<+L&yi_p@bh5f8k$ry>>(#w`lj}~sIDmgwF%yK&(SM&ZIevj1TLtXj@ zrgN0o8S-*I#M-h-qi8(^*EVmN?uOfSVZmg})ZIrV7miV8xilpZ&bR&)+ITv zq;ul0HFSFQD#g3=6f8-*@Z082mo7XtDf{DlBk2ycrd;z4%J8)7gBRC#TlpGG?l>l| zjwo|1eG`#?-lKFTWxb%fKM1d{7_n|%k4y&(di@TLUWhOb9USYPWQp%*1)aVs5Do@H zmRgP#up`6PT<$Yn8?pcJ~-qdunC>U?o-p~G&61leKI5N{b`n4%KBUs+u z{|6nTqjv~{#uc}xpzMhY(2ae)SYy={<X8zLt90f*8v=Vp_n`-WZ}v$rC&m;l>u zmHV^yr*ruk=k1IJ(D$$Ss|fQ_d~&-+K__+`o^lo=ylc!#f&4nmn&*VusTO`d!^qNA z63C&$QYJ6rJl&|}JjVG7m!=ou&U@MM?VdpiIk`gzs?N=QOj18*p^Lvfnh$Im1rn`7 zG3)d>Q#B`HUQ~mufXD8U4b^YE`j;FL+YPjmGOwc)dqMsWYIdowSSkd5_VT1IwXhlq znRSmT3A8!mRQT&2p8s>G;Xn3MOWdaW4NU7>%GcJG2UN%Wzy5rF8CC6G-fw<>d!buH zxNXZUeOqQ+$bZk_zb6_6qK|lPd3Nf2^swcN61|5cZ5D6#|c+ZA6HmO2WPviApnwB+OS+WqF*`p8DFdzb&SF8A*D3$KN}VrSXjZi-Hbi9}Wh z2%A#e=>+|;u^&ry4_>|fReSSdnuxEZQmITf{Yrj!YlGY3?G+I#l~RUh9~8*fRv8uF>0H;tu?sUPPNh)9(%R*R5-pT2YxZ4KH#=tQt@5C6$;pC<1zl z^gDe0dH|bdhM4K@P2p*(x6(4d1m>;Q=KXl-p?ONIK7^Ba_&ELwkM* zQGb4~5&~!vj_sf1>+|IHvISX*t2itSASt3W8`&TotQZQGI*J+mcw#kb`yw=?D>J;$ zJtQb;@?pWcI*ou=CJ^^{6*2&5*;I9Ztq>dQ$_IC%R_{gQk+oMk-fy02wMd4%R*NHf@EBTJA^5^x?<#_>LW@g+d-k&s``_SseEZU!-cC)c%#Q3Get!$ zaI|I+Ktm0e<#voH+kFs|_oO}N3xrbkbnSb7JPLYCEbfyj`^i7@Z;`&N-`wZ8bdItDGfW++Srq4i@@uG>#n|Ouy z)TRG)O9eQ8(*4Y?3(Z`kc}R|`2JYXLmhQkKP96KcVu#w1UF5#2A;%8OzYEl-s7kL; z8;*c`U%XG*h~%&_5`D6Yxyj<{_-{nuD-YF~jP$*i1}QJw>~zmsUnEeL-h~_DpM}>`uo-qYP)0+NF8j$qus|f;-5La6dX!AmAU^dxs!l0I-WANHjqt2FO&Y!% z657nA9btGWxAm5B!xD9(6cYJmN1gu6HC$$DQTsHau>@dP!04;Zfwf2Q#D7w5}>$VcC`+$ zit71=m}zvKFTL&lhCgL(ts1Z>tsN^mvFSyA;DM3Osvjv(yKwWVsnC}Gk@Pyh`0O49 z($KYjr#n)y((%Z$D(`zA#>fbkJM<2bNGiL6LAWybtaLx|kYIc*JF!a$V3&2`_ZO|8 zBM)gl(S(!LqE?F1Un{C(k&~d^=ARU&E1fgq7QMN;Pa*`*A>X)Fy9K;T9)e$X@ZGrx z*I^b)J8ONO4DsIN6*^n+H91>mQiX;zH9UcI^_6S z0at&(AkAEwPUqVf51b`T{epEwNE?NzwwPa0>r2`f{;}7kR=YR8gm~|`oR%(6X>9bi zW=sht&&Gco&dSoa5!Ty;FS=cA-Z-h&hzL5wvLrL%u>SMR|C3dIygNg+%-lhA7ua+PBssf%yASZn8d)jZDdzGGg+3sN^&D#I zAXxd*Vm=M|xG~i3klERT%0kf~UN;I}s9TbNX%h&{Ci#l!_T2|=f55Rcy@c6@BMKZB zLtm6l53jpkzm;A4@y{z+3M&BifGP)qHH*ly1t9~>q_a+NKvdq**Mh}P|1S4SEu0sN z8W6&5^d0}AmFK`WJ_Ih=d0&-$G%#U2$9zCYhB0~#v|g)`N+Vl@^zr<^@=M|_oB_NL z_kekUL=V-wq-kaaBw<%RGlb_UjCyCR^?A?Xl|#5n_PdUJL5IbQ^prPp{8;G#9lopl zij(h_#kJES&F9y1>q4iqLz{|4Rj-OIj>X)qOtZc+Gt?>qESgeum~0JyA!rzyW+wul;uWOtE+j0Gz>LDL60Sov>Ri(M)? zzF;%_i>3dMrsqj%GDjif^J5`gfM%oNE0w<((iQV_Pn7U^aw6*b)@f-=Nhln&6utuF z%7C89Zd(FzNA4*V!mUiudf@ViapshL{s7~?E$Dh=-RS3FaOncA?2gd;=)bNMou;Rp z&2GN)zb+r%R^`Y->U#d{cU||{%bt2n^sb!0C4G(4<$m%dj2!~0tV$y+HnHY@rp(Iu zBmJBX2^}__SaQtdU%5;PZC-zs89PY(Avid^JwK@WScTsaAae@LSviN4OcexvGs*l& zXL!Po*?P`SL6>ojLFxlfMgSJY6XUOp_9qFZmqDo)R9e(hmb!H0!f3t@bo&#kWm?&nx2`N?8Vab^25QdTk91Bg zOt~|58G>G)eluD4)t@9P)W?NE(};RqsH0S9kK-4xZLi13J}u^G)^>)A%>NqZu$p{x zf`+=odv?p-y^`VRn&)1kDW6+f6ukRaQhlp|dSSs&=#?wL_||%zB+#xsp)K{3C}!eb zyd-g!%cyNl9W>IeEK3=(e>o_Z$~<73TjqIKiM}kw&7aCtlV0rA5xp!g4(o1@d{fk< zlK*Yb>+W_w@c98R;JbAu(Q+gEqp$Ye*lum9HNS93QFeAbm0JBmj9$pR?lW(%nd9Ej z03cg!nst5dhP9w1 z=AfpyPNBPjhZGh@Jl#U1=l>Y73&N2pzxok>vW#FJkbp3&g2~qB${@AFVYt@JblEL z6^!#QuvMfv_%!?l?=f*yz1gd)_=WQ|nv$EENlX-=bN_<682>SH$Q3o}Qf3loCs}vF znNoZFVw1}UIy_S=dFF9~faJf%lG>W9YS*qjRo8b}(RmHgO=C`xUnJjOmde?9(C|ji z?qz#p4fUg@|JM%vceB1*a6vqdY2iov>&^lSbc1}P6Eut@*5h|YgE4mgyh_fUq({~` z)+FMRtnM$Hw*1#xv(!la=o$o1x_4jDy+7#kCx8^jLz3;?$0B~!fQxAk5ufzGzO{@N z1tDIFZ5nf^VV=PqKRx}6LU{%UTO>p?E&@%Mj(QD&r@r?{Cs}@1@3GuzXchjj2YdIN z!X-XtT_EvRb7$Rhf4>2~LwSfO!BOd^uWspmWw*Q!X^hs0Dr~?vl=(D4QveK0AY-fo zUHVJM3D;JGAZg8~*YF$9hDV=HHXb3B|Gd2^36s@M=j;3Mt?W{YsMuAtr&lk~(JlK6 zSzeD6m*UYu1{V;_G}}JsXU^Y-k8WYA#6c7+XY=i}z-^%4!Dd%M`{$Op)}4IjzLu=1 zB`R|PqJN(S9du-nn><XtpSoJR-Zfn1R^-R7oM#}=0mp3_{_K}BrQxknzmReXN7 z|I`p&|IAOJlUKKr&E&jT?vL&LYrKPt2(YdiC~%)g)()pq4+SzVnns9f+T5F6c{8xAtHTkn}4A4hViza{kNI>b>iZKc}6p=H|B0 zs^eziyYvNr+#D!o-E&2O$H@&hCZzG>$>#x3UPhHI)Df!L?T2BYkyf{vm zeXCE#J)$kBy~S~k;@)gIomw@;J!qYelJ&sE*`lz|R=g^fSd*Ijj16@k>;(h_ODkk+ z4PYznF`}l7G1yFST4R!~675U19EvU&#wBFMuU_5yi8paMHxHdSpwhihDaYCR@sO+k zuBg?#%FEkI-LwY+&rz)kRcr?{9e02*DURp*x8l8-&;`ABZD9@8j6&uoOf$_)8Zm51 zdL?e6F@4mN;`hhcU)u=f?Z0(-JG{maHwf6QMsf&H?>nb-JamQMwz`~xz9BeI`!fI} z;+~wW7W-^8S68fg6?tLfewW0D4PnGi)yv`+J=9N`Fcfga$}J^jG3j?p;*U1P)xU99 zk8=moJpN^0<1jjKNj$J`zk%(_`D=kR>lBgUmUGmAP*-dsPrcYsmV!5g(5pP=TkD=V z?wB^h-VYJmSR9yt@aI#7}?%)w@hS_)=#DiPXRANOq)l~VTetvOh_Qu3!*YDUSYl=JU*im* z1ptL9SgiM+5t4Mk=e*7{;p0pepOqE7PEjskmKvtzRQmS<_n)5RZ%4|rDsZPK5v5+u zJa}?+cyQP4z0Earomiyy)_3Xg8__@WemThRq+pM$DNIBIS4AG(-}igmG~LnTS7!G_ z4_$NBl&YJ$^&`Cyoyqy3D%T$*YALKn-&bznR>jUXG9TsLYoe9!IiKWPsM|wvhWV6Y^ImWkMr4C%h9;>~ ztU^W_p>GYg-vy*AUuAw%Tf(?E|D{GG^+iE`=yJwVgbD4{F!xvd_zgML8qZ`c!L~<> zf7j3u>vO-^YOnQEusq*&lk$eLk*|JzBg9aDh(h}}!dGYm&x6*EGw;nYjeHKSuV9E5 zRyD6#&M60YSLpgHYV-N8&D(=C>KEnmgG4-hF3NXt=)Cs%Dt$rX7Jo6^hC}Qms2FEy z_S>_9DFqVRG@))fUWUtf{jl*x8sGOM30oYsd(S+oTZw}-eLTqeaXRt)wr;41Ii|Q| z3Rt`L`Q33G34k;OAeS9;OV+S{LwhgR#cHIRu^$)#^!*tP3o|@VhvMhl5OAM$-f!E- z6lDOOqAr)A>&|>9jPCS&p!M2dy7-&k8-`7_Vv8KD*REez1DuJ5Y2m4l8=gj_(~VrQ zf1eX{nzTbPk~REP+H1-AWo#~D#m#D)I+f-My9%JC%ywnHJv3>jpPP1`X-Yt9A27Gi zf+TXRg6f|Gx~w&%F=!XmcDIr=#VPJ}rpNPEui>T~u&gA@yT(fz!?@QAMm~rqpZ4W| zJ-GDzI9uOuEJ+n$4y_m)jxa0qmmWd%8iBIT)&g(n9o$bMW-8C@7F_0fE&Z~1U+~fL zPGFAfn~;+vZmRv0aN+1L2tr5S)QgJt8xb3{=l85LzqTb5+`vz`enKCl>@sg(a;V3f-Ouv}%&6GZgC)ub58apSs|>I~rDCd_D)E~HVmMw|G7&1!EP zOkCtln{UiTKgw5gZrrV8AGl28TZwz5G`g(5CAn&krLnj;$DnD?a;TTn?@Ql1Mlarz zD8LkyOYs(+wjVjqXLTx0KM{IKEf1jUVgjlkn76o0Ee5z#m)-)>CYjvUdzAy6!}Z<0 zdy?-k0g&$#>p056e0CfCtEk0H4DvQ>>kx3;M!wImZYXD>Ju_@pLvFYm2n=5g=Q`HM zsqgwwM>F?Wa5#%w&q|xrFYuXe(6#=IuGkWvBb2{w*IQ3%ahLgYf0WI^TGoPbkyfHo zQ5G?JQ-Pa%Y$%ek)VqrBRyw)e;v^=o-n(-TuMbe!hW5kTXDo_t2M!}r-KP~#?im*}R66TZ zIG#?JV8$PoIuKUY0R#X02h&2Cd-g zF6$?(UV8pK#jPO4DCNm_^K?^is@nf`q-+%s1-W~qf#{>_(Sq*u<0uRE17}0QU?%*V z01BhhA6FUuN*6ycd_j4@oq+vE-i?Dr8DP>-sg>yh?f@|J1M8Tt$?t*su71({irCN=?^kZv;+gUX1ToHFePKthwetN2=WUjjUm7 z0v$(HcYWsbi`EOK_wnJFyTT@Ne4CYXr*JR3f4#bSJBjD)!idrOy`8|4uII7U!nBN^ zoMV8EiO zC=-@jN&_JoLF&x}Z;=DG`HSL;G*pAA7*pHdy?K*vZfU`nEk5);o(+M-Rj98S8?=sh z>g67INqZ-_YN;quAO)?qFWBC9hC`3rj|xhtjd=Tvk+%{+*P$t>^A86t3eJnib>6y8 zDMr7h7o;IijO>}#P4A%4J-Vj}z&+hj=Z8{SvQ3($}VyH+Q7vR^iQB{!uW#>h9EN~x+LQprKAKa$1NybXQ6E@OSqhNP3_D>Pod2oQ+PbpXA zz3}?epdEURB^poONTv<6ei>8Z>7J2zeBt9Y=Bt!U>o-y@-EMO7#q)#=$|^swq|J{yDoiriY$KwuG%Vbb@F_~Sy0%*uv*gC zUk80@Si4$+o|>@_NnJ3f7TkqxhFkSqmN~sCBg-gZXPBsqY@;~!+5M%H9MydG%~dr! z)@YnU^Q=*3sf%eCFWlhq1cZN3E}n|R`Zg7RON{uEM%oEHstgdAom5u3G|R7E)-7*% zgo{#Lnt|-g{#ih@9klzw8Z!}^U?LsH-V>!eO)ZEzkZlyNl#qc1bi9Od9lI)|R``=8 zto&n3K7jlkai;8{U&mjr=0naLTK zCww(mQI_%6`r`3f?238L?s$riKXyqnOG_dlmL!S4zQ21%r=V@(iqXJ@rBuE|GVQ?B z7f4ob3w();#7wbm{LX-xYHl?@5;7Iv!HoIPe9xt$yr4iqb;W4$T*n*dxHtWiStnME z><~Lo=unugkGfFHryRqfgy1xmRrVH$_Jx1E9Y}HR7RCSPv8e6bE;3X`-p>w={eeVz zFhUX}rX(<`^f+ASfJQ7?XU_n<`6OdTt+IrS>0s3ht3ROLhj&Gj{6>wWaa9#zT(m~b z9@9l`?R8A{tIOVBiQvhNtzArNQcM8hASnvb*T&y+vfjJjrvC-wshhAG%$izx&#~5< z>wVol#=4uCHFvZFXyJO%12v;Wc=jf!Ufi()R~}97e~!MzxVT0f;&2>#XDmr$wC|8W z__YY?>u}n-4C$Q?1Gmlr)NTpCRSP zO(cf4*O+Jx3p+CM1b(@jlTM$+EH)aAr`V>2_h3W2R|DQ&JvbgV?X7@ljy80Z*_y__ zXoS0e3%C^CoL4xeYADiq7M10=iiW?Yh0`k{8&br_*8N8=3rS=0vS*-&)2;)f)qqB> zsesl0MQ3*!OBC&S$^a5`S!BT)cAno;V@o{p^`g%oG`VW zacV&qBks$6#|-O|XIOaU5jP+G!3f7RsGRT}yAy#HV*Kb}I_p*}nK97UnZvQ#QlDUm zp+IUf5{&B4j>Z`eqUI&%VZw|xNzuV(mHlVOIFx~@LxN{?ycYvc`r`Z$BTT_(T$cb3 z`NCMKq|)Ru;ZeANV!Q-gu(N6XcrI>S4oqBLFBuwtv6`_H%=5KG#QBLCGIw{VG)_57y!d z&6x~3hjrDT<$8Q~JLg4qJCzy)+V}pr!5SYOZ>M4i?(_^;a8HADyJF?zR+O9o0@s)OL zbGdsajghtwhTCq+Q9>j&6K$Oh89*utihwqF4}L_oz?=6$;Cy{F3_MQS8L(?H46t}| zllI)02vra!v)opEDyXIW;SDqXma8oOcBoqms0Jr>B#Vey%kv!v?tfIh{g2j(qB^?{ znnXCKcH)fT8*z~hyUrM~uAd^>KE^Ib%u*Z98M04+bLD@Y6n{^fIKdB6969?-u_D?s z;A(G?d=KLxCjk=}Y-6EvM(K=ecqq9l2$>6&bqQRqK=jJgm|=(}E5A~a&d>VO=}4|` zPG`S9jPm$8d32`_iYCu~ttf{&3nbO15WlzECDICOdCrQ#wf)sy`@6SV#Y7kjWpT-2 zs5eJk)2hi{2@A%#G)8XiQH|in$DsJl zlfn5f6z9e)sjR)M)ky)7m`<^Wu*`(2dHC=y#AE=7MBP~*l)T5u4k?>?)RmE>>(cou z#aAFl3F!^*8QPV~9v3~r{_Lq~(M0&0d+cL_FG7LZ)Lb=DY4I~DiJfHz#SF)`{PuJh zO@jp7-Ze$+EqpzQ(k0$~rL(HxaiHrIi*a8EEutJXPtOiLyORudZx%YHD(#dQg=$?q*obq4yzEDCuL+Z0vpxzGPXl4k+`UQDGWa$++ak1|*F! zSz~roIq3eul|MkW{*>R{3PR7&)c5m1F~E8gS1f5ejvQyDHR?a<9kTZPyth}v6U;@- zug@9|=$4P~bY5<7;r}y@u|6ugC?F5@IZK6JoSAi}Nh;9!->&iY^C^uaUD<$kE6B zPpWwMoBom5p`Gks$p{!B7W*lxS!}B}!Gl41?z2vRYHXW~TS$D#NokGX4Rms*eW10n zd=C1nDz%gex=F3!hTXS?%v#!%dKyh$g4rm-xe4D#$dv=Rwd|TLYKw?sKzIacb%6I> zxOdeSB@4rK@0z>Ivf_BL{k34c9;)Slh{^JVt%bSUu_X*|CygaWfCY$ixvbh<#wm;2 zv1F^$#N483iZBloY2RPE*10!`9BAC!kqF+62PoG2T#s7IZ}X8mj62~_l>kzr<}k-> z0Q%FPGw~nd=WFi7+iZzEw)P+6AV4L|)C6KaRKEuF#$QtX$?`j~p#8 zH!H}bFMAe{=R{mYJ_J77zb$(DA(d5y#0`4H5@u(&G}K_yKbs!0*53LHAFyf9<`UR0 zf}N?bPhem=XnFsVS7-N#n7L$i?{=p7@LN_1-TJh>OAe z%m7Ei3?$UIc%O5Qme@oC_GHctN7t{=SWFH9PGVtFD^K@R|9C|;k#m3WWU1~ zlK}U_-u=blGl}-+aic`}=6jBn%jM+)y|J?+X5+7EjUfAF%65yz39G(@Z&ujd)P6Nd zh!lLQQHuOyVyY7bZp>!OGWMh~`lBWp=xWF#9& z`0RhTJG|`eo5WwsLL|Z6#zl6wFUcUD{ff98d+x(aRRz4Iae3_tyX+lCMDOgou(N=& zGykkbNWv@{vK3dHd4%$zF-mZ5>?;kK9b8QRA>1U8BSPqp8PU@@u@Xd&aUvWKLYm`N z;|8p!PRbiziR#qD?e{HXN~|Z1`ZD+4raFw*_g7o(n7nFoAC1u|6r5=*)5b3K&$VL1 z)_#@=cVuFGpk@I=$PV@z)e|e7Rdtn_rc9BQH9om1cmZ}-U@MiLM-{uZEU)_=g)^!g z9R^!!lpM*F+U7<%!w6Gs?Fr`WkfAF`v{~W%z-4z40%6}%$9L(HT=HYL?PxM#&TZd5 z#c=(*&$tar2X@kMQO;w+snBirB0`Wfq1-HJ zDolCGIl8=jKuJz+@Ief4NSgymILn-pTt8AGX+d0-xI?=(Z;meWG1%F-2nq~4b4V=q z8%b%%$_1ZTT6cmrI~Lvh+$FPFTTX){^v5Z}Xw*~AYUO%XT`-+5WCCsZt`sXpoV<`G zFMzMlq^|B@OfJ%MsW6n@v$jsL-*7f3S06Z=Q9J73Pa5|-eXVJYO6m`Fuz^b8C4Km> zDv{LF4l&s*7$c#10g3`SH)em+^mdxnU1AR6RIW@6@nDYMKs!V+40{|+X4Gtq$r|ku z3Z2%%TXtJ*a#m&chIl06XABLhwfX9EsRdKXe=P0x`Xsc+mnoZB-8V`X2I@2sy$z(B z@-E}4+E*TPKPbMqgvm?*hWPi}zAs7jFT@#2UN@b+c_TM<+Vq1PZb$t3D=O%3oqyn0 zXl)blQ7<_w`zBT?=5xesUJZFp$5?LkzcgT=E&E)Q-K+{5HaHq+<6@1-CZ9e(x)K_i zdb-|@rPO&lJA8s=9Z(Nr$*J61gy*yb5EoE{k=XwJHqK?{o>^C^E3`%dhlq#6bv7rC zAN$qpI#mU=24oAc#LstZayf(@eej;IxU?r<8P}gSvSE?Vo6WPa$?l%spgly3*h8YN z;;=6;x$W)xb&ygWW;@-n5pS}bn_}0q%(^&cHQVKPUbVP+LD#)xXik}U*KGA>@>Fx4%q+8hijS{UF5Fz| z(6}JjeUwl-pcjA@oz3o)B?A%U-FY(O@{(YS+|H}6agdF za%|8}fs~o8b@th~!xc&U44&08xyqUCOibgXdovIpQ_?cO;x=v`*7N+&B;BkLN?RT` zg?$J;hM1%5z(>xYD2Ql_<^IocSf%Us^0C#C4kK)vs6kxkvKV^T*(1wno+BXo3UM@Tm8bGK z!7XRT-mH;weDrl*aTY-7^{BVCy-qFEgu-dNA#t9WLq2Fa%-f?#pfF!Dl;(M#9c@oF zDh=9`u)|8L;SJ(5O|~v*LgY~_Wp#R%h2PGwvs$8)tn<=kRc`+*X`90$HxI7T_(!g9 zCV$x~dqRyTrJ>J&)kKBEDN>s_n9j4AHQXHEOiG58zy|_4W;ycVNOU`(@Our z$Ll)R{?S)Uc`t_drNqAJ?T0}gFcyoq2|V1z7O%z*mBUKMHHH%H!x|7>nXyyomB_hYQ7Ka`-dZ#_;IdD_MaajZh>zVZ#;^5mT@V{A_U_hD=KW)Qqe zrs!;YsgZz`(uzRc1IsSI3>z-daT2yop8BAy^Q6WX8D+QY2^qdO=EOU0or(=rB+UfQX|~WgsdXJHhPiZZR77KZgv>LY z7q;*>$Blasjm=&g>FmWu!(IuhCr$P5H^QXGcsTJtMV-|^Bz5b1FX+K_^7&cys=b?` zu^mCQ<71Edhdkedxlh*pPR?fJJ6<_)MpVD`t2Im&YO&|Bw)bB9e<0QBn$W-hG9g!SN&GjvLtOp zdZ}*`mLz}LuTqJefIU%`){j-1ODI`R2Bdcm?2vtu>R{3dIj2+BFSeYnO$NOEd4Cg> zl>5$@e5Bg|{8mXRv`X6D)VE!laCxlRs;ee{$M4<7Mr0e3wn5f!bE-uRPng(V#SW(& z5AJsuf^(BZAQ6}gCG%hWFH5DYHJ?we&zF`S$p%w-pb;D;H)FQNm=?J2qEk< ze)&SfmS5`r4^PmG+Ix2HjHPQg1@>fLtbX{C|DZJ^J;y(V_^EuVPnFeA&OF(Z5Q1Cm zY!cjj-$JNV(%4(+SMO{lo#$Cjawf|9llfTx?7Pj)>S&4hY%zu5nN|I7oBMT-D&yHL zCSUD+8(!6xE&3x;w}5urzRGv`0R1*h3uOli&`L=5T&lyaObydr_JMLh<0;|Y^5ciE z??gZL8$ zVsaAmSkiwx3d$L(GZxbD@?ZNC^V_m=cP9Wj$f*6&C+?P`D7|Tf{n{1+Qq z3iQ$3MdULQV%S%HKl`G~%_~OWi%U>NpsVYEIZRGIcdO{X!_K*Dc(YF_2_jiA@ik%1 z#nIdUMAus7_#RmGci1_MHJ-gqqBTf}?dTA%)Pwxsn2>(yay>iAXny5oV+J#b@qh31 zDpv<1yP83E9!x`#T@gB|@xrHvy>5oh=kpYQ7JC{ScoP~4iRLq^9}U|Al(U>kb0`53r{S zuvu8!9krMwaGiWyX=?N&NilXTDJJst=_ig*Aj8l0FH7ISxBeV(8F#e8CV4J{PYEqn zc5QvJ*{YjW;+uzt0WI$|aAOokh|tddCLcI!>IjFG$Nh;K z%i-Rxs4o!{!hN&cEnoeFij-SgcxH$=918Wh&xziC{@P=nbGJ%qE(n^|iwhYikdtE( z>im5PHQotQd@Y!gJ%|bE_ssNjj%l$yxe66{=T7jWcLzrs*X5`M-xfIkl;3Yh*JnBS zXNHn~vF=MC`n$18qT?OXglK#7)!|U@^39`zKR1`(N_AHIiVyA7Zp1Ct?j2nHwu3e( z@*7b~@tFWwZ^oJ*75Yj!-Ck|1kDOM_8)RRMa5@plOX4FmAYiwiz}% zIi?;j=le!_bw6|OXsFC>^>@RtDe1%&YtvGH*N!#XaETMbMP_Am*fVSg7GsIW06-z& zOmDa-0^6H*GnlnrIh0M?8`lXiLTz0~f3{RlF(L;OF*BD7Yyq;y(hQe?bJhU$$%@BS zxNLcDlLqd|INdYAKX63{Gin`8`nY~Z4FvexosO_!G-9FN{!-)I1hAZ4?QeT6`qH9} zy={fI7dI>>?FhcvI!$Ee^HV}KGx46A#*xBJ3-zzSaxi*ESbIeebhBv=MvjE|@8^b+ z1#+AC@lQn?&X|ccP2@c+E!oxbq}?@^Fe5|UGhNC3wwo6CrHVvq$L|Jb`tOlh2Ts&a z*Z86KM7}0`WaZxXsq2L4v$}$G0sraL;|aN*mT!HMNSM@PgigSrDYh3zz-Qnrt!a!5 zR_dzxHgp%>O{wR?9{O)>fV8{zI|-{Tb%Km}THy@})aG2rKL)7p8!o43P+ulS4x5~O zYED0XZUCbzN#sPAgksA|tW6eIsBP`UuhSnig{;WTiWjuGFtL-cFG=M%+$wH3z!SU$b zFcprPWqvEcAXeVk`!Duo2Y-IMHf$9zT0>v9cAlE$pJal7szpc9i!X+6)ZCm1<473%d-dK!m&`OzTf=p{4?OWpjogcgV&u2goKTp!lV^K9ORcGn#qkRdaD@KXu;LFZWHDd+4pJH)i;~wo=`q|Tyr`z@)5XCw%oWZ$5MO`l!rl(j6!#ZkJzGQ?%1@{9wrAdsZxtrz**L(#w}C zM*OY&qcR;-y>+ z@vixzd_k4S<+R#dKT%bm{q_`ppI+!Ht?1}#;a}-(YcXajrOQfH(?5pEOr4X{Kb^n>IX28G7`(uf>;g!3_f zHI{b|WdlA%%gUyM?(zzkjg@{MOSoY%5!VmrkdxNYqy zu;1{qa>Rv3WT-i#J^*|4d`+cx>EvW~-)z0z@})$3prOdtGrf7Vs$l>CKk~@0Q|&R2 zlv`-|0#1>b?9ADN_#5}@!Lv+MF^ko*#|InK5%x_;4h!9dkBtID9w(SIxX1aSty?Z~ zD_0rSoMm3&53Ta!$NFHrQYOXtRXsZI>(iSQqWcO2*;Y0;8of?g$FxhI;u(2i=S8!lJ&tTZ2qIRD@5 zAW)J^nCZXFVs8%z)^ITP|uq~&}x=Dc_pN^rU6t$_&=a`&Gn!2cLxJ}h6G@Q7#} z?y(FTp4Os0x}@}(^nKv+R^Xy`eP6aA6WM)E(7xiIt_k1GYml|HL+^oNvxGc)@Ts=5?D`(B>kfaH z0sP{d959qQVYyx|wd$@MFMcD#G?lOU-I<)`(X0?TeXvFnc1yoaOcMGKa+DPmn>CY? zfPn#C(P60Tukig;zTRgd^7;8E{i-(0oc2$i)OO?-u9KWkVDG*LMR+&!P1|15;P8ie zxy*jE?l!NXf1jubmuhf`dE-1qCZ+rSe!VkVlcO9;(n|ZZwRobm0;tX-+4Sri7 z*zNZvd(0JFR;UA}oRlcn>CWo+MW*Ogvx7XV{vD}|O*3`!C)1R8rm12JKXfAAmrLBK!lS?1?#NC7MIqpD5pW_Ol*h1joc zoazC14}N}gpJjLK#A5%mT-eg1Y|@|M=E*IZok~7A@ur=Z1N? z%=b37g?@o9psmI?heZ*-q`|~C=9Ys)86aWF$Ahc7?mKZb5th z31dEfkrgcNRDW`~570N`9pYyd2L_2T1D|6#NjqaA%aPP6KT;0DRT&u4*BFT7W}f=e zVt9jjML||9rX6>g6kI+P>i?7dr}S1EG~vO8`GM3DN+AYbPQoec5~pIdqvzgG=e`br z^!npFfxm>2?xbX_Wgg#~UmKSdky|FqKNd1+yesF5@uVLG=*`Q_o;N^V1hOWh&)j7! zyfLW975e_{6Fsbv@7(=hQj_dz>rwUW0BoUj*Ljg~d^&EWWu>hceBZ_9%I4f|kbJTf;XGk`;~BEOzd!!>Kw%+uZg;S!*Z4#Pg>64PtMGal`jdP= z8p0zWg5b}J9op4}aNM9TtVA%~lkiGM=sGfk|HBT(tEm8+2uL)KjrkQRvxg~cTKQO( z#i?rG)`xUHkKT|+qWZ>j(m9{M^1o>zwP{^3%qjUTo9%@2qv=MiU?2KcHrO0sJs?9h z;3dr|vGEyqUyYiX(uHw0gpK#!^3E#@B9?0(lm$j7Q}&QV!26 zUdQ(2I})r)b~7;b#PUs!Y#hfsOrYlF7~GE+j6w(F1&)O4hB}=>oHdU5W=Ai+!>z^^ z883cU@7Oc)G^;vT53MWd7xIvGv3auWR$;VC=l(Xld;BGn>q~^`VDs^N8T3Wt4j-Jk zl)SUhjHzDPjhd~1^5oc2ZgWwFZ?^oog}h@8I?-j?^#o%ytNkmTfP z*-a_xlbp))GaG1F>#4N;0TZs{<0RPg5zGkE#F=5Pc*s$Ci^zOzBPny)wN}K_@$|s? z&4BD#Wm~mrcEc7Vx}P}8gIzdtw(&P*j~lu&(Z=P5aeK*i`E)B{0CeJRl)4C&Bd&>E zIX=LjiE)yLU{Fltjvsd^)j1j{p~ALuyXh7T=H$QZ>t4Ng6bcx1osPi)oOUJ9tz-J;`GmF;M$WgYaOD%Ovg!@C zqB5z6!yCmC+7D|c9`sE+I3<(~C5cNod$1=)L1|O-Yrd}xFCXOyHOPSIShKThmKVnw zP^d(f93IKpczE&35hsH%6D6SE;in><-p)UYr(YVx+VpBXv>DKRxc6Pasvc3zh0(;_ zu*eVA+h2kBQ^tmu<;n2&R$&g-)8pX&@GVgGZU(3O(YxaM6%N|rVugA~`^?NZliJmin|e}Aeall=hHOZ}>PT1}#4_EDIi zrl$v*d9m8|WQhS@?S8G&`r<1|m~>H)JA4r@^o`^_%ZJ#zr=%_b#0&P$P3xv(A)1UB z=Z{0+sX@(4iggQHY%QRvywy2n9N!mnv*^9r0cYLxpanrw(Q=0?KWv6?oiCE__!jm$ zIHom!hfsmc6|`IUajenB!zQv*{_iWtCq1Wzo%=^?7m5P>KPBA8-uUSkn8y|mogWP# z9#8n@{kbn1b>Ih{((K!wNnW!uOo!UOch}7ostGqAeH|Ittjf;w#Js!sbZMwWVL~5M zvEY5txCWbrV3aB364Wi3G61g(eiVWFDkGjiQQ-(Xw#RW8qJwokBE1Qps*bKcnl56y z)U%XPpQC(&+Ytqv88N=8)v^(2!qOa%q&f9t3xZ0;ecK^?xJcHb6G@aU3hOSFch+c0 zr)W6fQJz2OlsK1c(GQlG8nsPM!Pl)ZjV#H>&)y%C|B&%@l}2tou^T|mKr72{AWkCb z<4PVgQ;Mgkrv5F9lx?-pdAVTf$|rs4`n2ggT*m#>SCB6eMFtq@<}#o{e*El;=|*Iu z*xQ~QB&AOl-5!sAcR9-ID1iqrdz)#w|N7PLg7J~C1W>2Hr9y}95vNvO)&qjNY|^hJ zonEof(xB_XNAhlqh30`-hN?%V`8aE1}OHIOFx@MOhGIpuD6D8<;kdTZg;pPw#|6O<>(r-)>66BTjmv9OYG zH|8aYnaQZ?UMX4;iWLz>@QlZst%Uc)C@XG}b%9pODC77oMA9E3HqYQ{puHB-%ei%joKWdWO! zP$U7H;&f{QKfC*jV1*`@XBhQAc8KbIdWRWNbT8>pIEmP?arzeVTMc*( z`8`X^{pZ#f%@Z;+KKifbx!o)xT>aEghfA_q9Fl&cCh{>QRppz8v-3x#N5FwcpE$d6 zF}8W7{t#cZA96^l{#vdN*8?;!_{3=RSd>we#^lGv*fQFS-{4HatF1}q~edP=%1-orU{4I~C&(hP%^5NUsf#nt9rwRSseP!B_u{?fK?hD0snWAi%s% zL^&%z_4{_5lFsV9sA?q=5{X_TC=MXswtA%MCvaeTDVhq)v6Pz3`>(H8 z&Qy8TrBnPPwd)bC^_|@b^xl;pVY=a?I)=T@$Q#nVKj^%jv>01Z<)9dsP7ebHj5){3 z`!LUwBD@e@5UU*Vk42_Vt4gqIy!RwJRpage_ZO;cQg0spA_#BY?I@_-x+te-W4XJ$MTXe&0dgoS__5BK~mr0RE1h;e)D z{jxqcocyP`GVn76Hp7=a{(Al|IQ+(rx{>5tUe-!(LL-tMUR9cJMIo8xKQ+8Kv6mCa zV2ch39JRh((e~{)$;WeQW-Kg;`^5&P(%^MjCrvTg^Wjyk(-ra>ekTTr3eLEBf}1|8 ztCX`aAnk11UO3j4i?PVZl(JKpRheed7gOg*H9G6#3z0Rb(iCAN-#!He;}|kY7JAcx z4>AlraaX}gBhoPhC5iQ3hqt}#;7B!+(jbSvCReTkxpM-8aFAq>%{19cz|J2nnF@!S z9^HZo-pvkpq)=`XtXZtmM3Z^l7d?jE^@c16+MJGTemrv1-1^H*%O}sL4ZT2kn_0?X z3h~bVj+WeeYSX&tbMr%63Y7#P{zvP97YL!kQqak1!=?j6Mk5wRgGrMvn}1^|_G)bA z#mm=KF-SV@>hlK+*U3g(LiqNz(Td8kstZ2s$)*E8cq&;J7WcGbO39`W&NHXR>!hP*GV7V2$U%O2?oKq(fA z+P%bu`oC@}<=LxGCr~_F2RiXS(%8d5aB2*buW(Rg<|SY$()Cz`du_OTGr^^PEK*h% zx4ZK>#go4lamNZ=qVqM;n3N({ZkB~y6|>P6-%snJb%4ATcRYvp+u*K;^>T9K(zgo7O$#H=$5V})8mB~TX;qeR9CKI&wUaeZnk(1_G*AO(>uJ^}(fO4b<7Kz)GBf)nL}AUp|2-SZP zK3qTBTvvYZiP`@AO;}!kuHt*qALkxC_0^lRi(Es?(kp`Cyf%b~ylFNgU<#6eY^~8< z1mDd~`h=j+t(U5Mz8GW706Aj$kY`<7j=j0y!bvVO^s*U@`Y@})?ge* zjq6Mu9D5oOGPpXOix7*WM$SP7gI*lfJX!0;PdBk$e)h52eysDSPu?Et5zu3nBrWH_ zSv-RRlsrpJk(A6%+^#j9P!1(@S15#tnRyb&V&OIO$*xDj z&8)`~vw-rR!llVC!pyrNHIuQfr`|AXxNq`%kmg^{4L_jqrZ}}8I4q?b>H-RB?4O6! zX1V*IES@i&{FOq!;V|Bu*tC8ocEdxLWE^~AoRmD5blU%|*Chx?Qd#>~E$oGFp5e%P zp4EoxDu%`E>fb_XkSz49b1LjVb92w1z!U&^(0;UAvzh%eJY?q?;zxLvExYxN#wJcy z;g|5L4R5Q#X`N4b6wmA3tOraEV7zoP(CO%vOVY7gqa%;x0 z><=?M3qN2>Rcx~_?K83`Rms68>HPh;^6t~i*N@&O!oP0GTs>R%JEz#YXLFcs+!Jl$ zVrV1O{^wosf4Lzex?GKqHKm`4-1&+zy|drU>=yWSEpZC#2U`w3D)bO2tXyPqtPgP~I zvjQzKo;W(uDPLhVAzMwMKRZ7pnv4#UL({nI;UDxTegnUMRi%alCtus@3b?*T2euGm z4ck3!6E37O-(348nm4E#TrTq7Q`n+3-Pv1w(%i&fYwoy1j+(%qpsmYxT)Cu@CfzdRfSibfPbV)o&8*4j>HsL`!8|FWvzeQxFrj+44}ddl%+s7za^C6 zmw4(r+w+08iYfqbV^zz=e1p{!kPJ&-cuJ8N2{dDjN9xgaaO#%Lyhq`d4 zHIM-rvOoPvZS$#_-9fMV+p`cE2uD}io=^#A_jZzOg_VZ78Y{y+bh*lsHS^vsaSK#^QM72<@j(l=QAW0)_otBDa5d-d;ujB zR(I$QEAdP-9A)9vuprN7`(X3bptdr+D!W?|XSS%4iq@6({V9?x{j{eV66&y|@52QS zS&5>=v$xg~?e-MWc&EGDO(GVK7A_(b$6JO^z;@pMmuBl>a<)2H7HRzehuW;Fl7aF?kfjLb>^zx{Tv>~(4$lnilXPXPGpiIPT82$nZxa=VD_re^#py^nU`FNY zM*8|Uh!HBQd%3=Iw^^mC(j@BFHlSVI@z)9UE%ax!`_Uq=e+MrA_N~9&;LX-h&a0o_ zsa3T_q{@2otha7Gc2;}m?%}hpBSSU{J~GO8ZgewCT@>;+(4Q|&r1z5Bi8{)X0VwY| zo)&Mr{9-19Gb4dTlhG<@@;$iZrHz(Yu%0|qcepyXGp6pv(S*R>I+F~?ddIPu5bxAX ziq$f!Na8@ujT}+_)gTo}^%zm69|>9&1Hx`+$%v15f~|hAWQ9C@%rC(kAFh{tvOdUg z;QkSZJc2lqe`@SAqE#f^A`=+i+>(9^Z6aK}9 ziUs#|>Dvm^pZUJO#o0<~67c(D?fCUm<0qGqMHdsV6yhs1jil@Wh5C?mc{!-$`0TUe zhlRyHBt1*DR%tk=S*x79Z@cjwc9)1b-(7b~o&Q1-Ngt4OF!Z%Hl55FywLFsz5i?G8 zAb$|AT&(8qG+Zu*R@-z|mTR^hjtXcm;rOYWQ&Z^Iw@H^J7YSSX)d+xUv zRX+l0SIl0E603W{rM>S7Hy_6>ZcJ?E30zV4J~15bKrk61s+w1r;YN_Lkf9=UHD=+C zRgq(KOwYj&yv2yu5?D?G+_4p%Um+e9y!;e*M+q<5j0#?URP0}< zN~dw_hOp)8lzYx0FIeP%aK1I#$G*Z$;k>7};v;?w;>$ZG;|o8koa?jF{@tPdL-*5IAQaR>D5Dp0Q;5&6&I&03FU5cb3TZ%@Gy!yeFmb> zaM5d#fJ2&Re2J*J96oqLHRu*wta(UnVwqR#MWt)7RQq9(Ko&$ckImn{j7BPH2g@^6 z%>2B6d~oyDFiP9YbSQz&@V&psWkqk0x#pycQ!HO1Ag^swaHA8cB&^)P8Y1u0^ zYb@_MC3rBX2bki0UQRKB(CH8Xi*sUs*D>gI-&|K;R5%EY$`Ahqb4QT1_%jrH0bcPRY_(QO+mMlzkYeYD)uO;+gb2_DZ9(?ympieVAUnmyg zkm@~Xney7VIfa?%PM%DF(qAu-X8~LtazfiS<^Et#b%lI}Z4Jd1*T}2u*;cpn_$^%1 zari?4xpI_JjLOwS0+x5vGOv< z%@_X8DVRkA;+sbcTkcI%*jklvp&xUH^g~p*-r_cDjpHJ%W;;}ek*A~EPJki}DR%>d z*^$0eOH;xPLE{Kb5>PZ7W272hH!rfdk7Jq4R=E`(POvGO%t!D8nv-fqo)rp^tvWr8 zan!Fhkd~COUA{L|4C%L?04c`{sFFO1?=?)}l?LSmzu+Xv#1~271a0+GP7c;d0Yi-M zUGmjP{-qk__Bgg!T%pv|?IU^u7FQqtJ|z5+K);jiA1^;(8=h`DB=qQ-4!lu1X;T+0 zS!ha?rM|(C90V&LK!h->aX`f+-PUJOjef2rYfv%Q{}CR>J4i2`{@{QyI_vkv-(GPF z#_2cBPh3cLRcjg20?&Bavv)+=BcBHu=3VudD1A0_P_cnoN~u6dIgA{xlyICLTOd{O z+eCzL(yP`?<}s^)MG}gs2V35I9qw9>7|tdaiP1?Ywi5pBw(a7AN>X)1M1p2L9tqJOJwJJHBAmLhO>0&LiP*|%|y#yYC^uw@i zWeWA|^cS}I6sEO=`1-|>gCbdM_&v3W@|rl9E+$?5VxH?A z(yqcW7fb$~eA@(Do=xO3qfc=PnEKGisGzM_$-OEv=~9D@Co5+15h)_;+y=b_@gR7O z0DPPt8@*kv_y9=#A4Bv%KCizy`u`bff6nHXV5pohcOj zAscw3KyW`k9{)MY@3WjedrOgep4g6k6!M@JK zdsg7N9M=@-ske#3>yf%@tR(SUDcDT6_c3RbHZd>iO8U?)^KT^QYnU51#PZ zpq)TWb;>y@_@pVtv_`;Enf+-EU*!PIKmvA`d@r{O8+g6Qf%8Es{(eY;4Zmi3^22m! zkzP+l76S075P7=(Y$T>_imVu8QuQ`VfIBbzd?X-61X>UpwWTdKFS=Q&{BFw9@b!2of*ACcy5c+*yCE+qK-z}h1 zt_&L0I=>5Ev;Dd~Xrir%as0*MIFG>qT%m-L^aOYU(eFc?##^+<;TfVG2d~jf-3lhU z{egmtEBxMIiJyGQ#~PMN216o-wlF!K`oNQaqUKIP)ZAp{N09_ua%oA+jN#Y55B|VZ z+U#T$SmHnl#UCErJWiiKtB2zRbA%Z(b!crX4UHWqTLnSsl<#pLq0aiR9Uf|L5f&}( z`kW>_)qOvZ`dYueQsD@4xx{-2JnyPq?=VlQ;toi<9{dnljlTGN!Vn_QaPDoWK*8X_ zOe$~bVthvi3V?Z582^(C2gL}hk-D^MoiGt@+=CQ^w+BC+<7a-upEbishWRl1?&V7K zn$9)?5HO46mmsmA?lk)AL>w0nA^^yHckvyke-X_7+<_z#w*qrOth9qdxz}7CXqD}b zHLQg8aJ%X8MOBCc^hkdtPGS%in5@roRfc~0+Uc2+wbsUtB1z6c*8&CFr?|yKx6l5HGIww^4A%l*H3V_rWq*Si;RPT+O=q1D;0=IhQ-DZ zP)fF_(95dM63CJ5R@Q7{DLgw^Nuk~WyGu}Yt*N>nr%*F4y7TYw%%6+%2c~BS+c$Z{ zt{bst2|WzB-z~6d2xhKX*hj7iDov4=t;YuT`=H%PucqfD@G(6# zF3Mqh1F01V>yx>TAukBFKEu!oEM=<7QFsqVVF%tUW@EY_{ddy^q0xTb^CZgVdDXyJO2KJ&m$S=Ff^M01)a<2F^3KmkSA5?qqd+ikwcAv(m34Y}7Z6 zz%22g&gVsFB=BUi62~got4?aVJ!Ebyth3VXtp?`0D4`~)PudwSO@H=SQAa~Ojw6LL zi>4vb2~F?9*mqh`{4oFqc%{1Y)1zzVsrUWE`Fb@iK_;%YVwXLkLM4}UzfMMJ@D~#S zSMdJ#<+gt<)8EJK%XS0%a|A2|-$PB#Z&g+P^f{wK<5+3cN!x0POP-2@d1aIy=KC}w z=_3xkQVw1Y?hx>$SS44UJ0Hu^YsGB;=X0c~XHKiLBJ>C&5OmX|~}L+4eU1 zB;m@=eUY!4Rc&*~_BV+5q{RFHAi)^TA{}HG`Z8AD61?y0HQNu>@LPRS@yA(_{)tz= z;*%_92V@*lyqC+$6?>af+ZK@5&NajyFaC20{=f!*hg9rV_fP(nD5UOm;s}r|-+1j( z&sL$o-k=FZT2`9aEb79Q7|yM;7UdcEDy)mL;$C+ifn_l!PT~5e+t!tfMb*7}?^kCJ zA>||%$uDtOYzb{u|M&g3o77X@$4F&xEdI(8QhEK^y46Vzs$Xpbyxf6-sY|heg-A;u=Av~0iV=~O+d9k)f~c(g^}Zs=y{}|JY8p)iRl3< zGGh?K7WF9`e95p}(Cwg|=-M>J_g`!9OZf(kB19)9Nu9*{*jZvrKq@xdry?0J^BAmq z>wxs&#`q?XCtt_-6qHE#ntOVfgI4WR*XNrz9p?3iN@@MCGTT4Hlz)t{8y2OC9|1`7 zX4kE2^vhA(ubnDX8-eKkbH)g?Y#Xc>E{)^s(IZP*&UcF-sA>ZxI!ZX>U`F#=jvVB+ z?Co>pJyM1I%o6CdYmkYJIhyZ!E5n8Wt>)}Q()@q8%EZ*ny8)yih;GW5D#@KxV{vl0 zTJ&;>N4+Clu^z?kilj(?YvqgiQLVuWRg?3|7qBYg{s-&2uP3xviG3IN1UfCdH`Vpm zA9*DMgH;qfx0GGw2)(_(6X!W!D>Bi}<8>X=RyR2|Sc>kSg`1B)i?T;s)g-tv?-It5 zj6QSbds}`w9Ed6t)!tM1c&bVZ!)D$xVewL^_aIu1F1MPTZLz3Uxx^L=@^_C>%tU(2 zcpPv{F(Y}~@3Cu&LaRWE#yZW>4m~rNo;jHeysA9T)<_?$1T?Nwq%E1P_^}eaKK)?? zmapeCg*PQ4lCu-nVwakejg=c>9j1PcQXpG8fR(ZQ@jFZXXP2%q z4+XY8VM-_$pQ{qvQ{-dzSApJT4@9W44@*sRgqw>5 zMfL+_GP#e)CRp8Eedk|mWJf708GQ0d`1+~3bOqb?hye5d8|@+cHo7W(W~h&(b&PdS zqovR)U`Ml0LASq#b9);N9XH+lXg5nqtJuQh)siS5i0YfWL1te;NaF&Ki-M44WA~8 zF)Kv6RLw5WX_Kga>A*&$WXY`6<|;Q0=RK}Xrc9aBwlf$A_i3G2luA#Kf<8YPXMB2h zAr+h#1L=no@yWnQ0enf8-ySk%eY3#&nXjE;qZcdP&rchF+URF;VB%HQJZ#^urJz4Z zM*dga{R1Tk>~ z2k5+%dzQ@iOJ0RD2Dv(NrKq1(M}n7&#TU{!>iQ%QgZ|jnLaQg34Ak2OvE8$(&8Vg- zq@K`Ys{gzz&65FCo6JdW^q!z`On6bFTD@Pm2vbJF_pY;mMd<=+PqEW-d_h9?u*?>@ z!);IRwtm|5Kef|85cglzQ;G$4zIYx!f6IWiZZ4p6DCVA}gmu5x7LflQKsWB0KK{2` z`bm3l{ktvwXFC6GOaE+xm$OIOChV13P$Y-LIMAW>N*I;%?}dTCw~QY`RkZD#fCac6 z!rPjQS|7a?I0^E9=*YA;S1a~QYzjM-SBg&@%kZXMq7de_L#V@Y+2xJWc^|ysFF5iz zEYOVXsqSW~@`na1P7AQaNT&$)Zz(>Kj279S6b6YhG`dEnFTStp{P9aEN1>y_*Lvq} z4cI(Ih?TiJ*Wa0mD{N$%qXksm)JFUxU1b3P#8f>!mFSf& zThb2F)$Znsv9Y_BQbWeA_hcrAe9o##MKNf8*DGE*_N!NiZm^yIBis1pYrr;0WY*dtPRXRh}g=nT?GS5~|O|h2jS*6sB$qlTJAd1t+u0HgVcOB-%a{9ALQ;HMZt4K_$R@&+XV2=ya5( zZ1#Y3Er%X|birP|cR>~0#)Wieg-K`k6i0$NN9jKbp82z;^}qBGc6)@ojy0^b0d4T`^4aUx1Jxfe zV=o-G1Hazd60W0uV}BO+QdPRy-}=?WOyJ!s_lA*3qL)}%ITRq+!jA?mx$bUY<^|yq z=usGF#A2*sew0A}>$-pIvHOCNBA)9I98_}eFEcV{f+ zIKRt{VKM+)5gc0*zFvZH^>PUmoa#ghEkCD52J=q^$&hNYP%u2r?lM(8&Q=A6?TOE) ziI{^Xd>Q@O>g>ESiS>DBZQHRaKW{JHoGR2KnH0A0rMvZa%x(EVAy+I;u|*{l$jbBv z?&Dkv^;e5SUKB2PH@ntPPa5BJA2eq!^>@$OEcGvSMP)iz-rSY63Hx@7K2Rpe-R}BY zfbyWh|5swe|MGGFSGUjrJN~-l;T#QCnBG@P-3=^YDQ>4202$Y-Gnl70*P+@CCJ~z=no9M15zg&!;+r)&Oc|*HLmLv(T&R>s1hbPW1 zSQ%WyNGI*xEy(1Jg5poWwGMJ4!FY26szc0L34NaBfb;vRP>+I#Q;HG;uhjs@ThWO? zv+X^GZf12x@qj+c=?S_gymDRu@XHUiJ>=t;3ihR?{smYS^B)Sk@wHG>=w;(Ab*}0b zz(UVw`Uj#LPxtWMW}DJQfocd33GIilK5}kPRZUxrZH#c>ga3c*6dUxre!JK%PL2nN z$~WzoGX}n^5&_T$V;<@VtR@IpU>PsU41#8VPFB&B6zzN(CR>WkdA?qe;SG=^Fg30- z7+?wppgKA95J2(9l4w~<31bRvwK^nvC?~Kl+gg!nH6ZC2t*tR(;j5l1$Le&=dK72b zNslO~{U{yzRaLR2fF#DZr@(wWWu_8cRKBEbGyr?0kls9&MZ%2ga*jJcgL*k~zWmhK zzJ(z&58aB}Zh=nB*H_#E0;eC_^?kSoFDxUxpO@Aj>S!rp2Zjh1%M@JME0l6=`Ll)m z!OEh}_(B@fHziYOIp2XZrrzJ{dc+~ayV)BOvnMA!i|=S|Svr>IPD&rq7`^smbUu*m zjcA-=zdd}k$6+C@q2Yn`o-9&}(wp0VVdf~a@Caho{M%$<_bHZ@BHii?XMuzw&BV<# zs>H(DJc*gE(*PAp>CNZ;g_FRL?0mmu77{n;j|F<+#IQ|=W*gGK*zKWy^4$7sllMQ= z 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�QBMD6!o!kF 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%0AV-n{tM~<@1&*w$Vsal za{lO;o?iq^YEVHMQh~ZQzH{peku)gPG}`=0he#BZYBL`Sw7+3`z@fp7{wv-HVqxf$ zZK7~9m(^1f3iE<^7sp^2bw~JDzclV+re7sBCHb1a9al}QR5k6lHnvE=tim*(Tz7kZ zbsnmhc#g@8b23@9N#K;Ks`MoZhEOKNh;J2$(bzT-CX^s)8gPvtY?s2c;a1ZcKuX#D z8LrJMyX!Vw2jn!sHqb_D2wU}M3pzAIoAFJ_du7qaR7gluh|4Ak0+DNPVweMP1Z$UC zV!uy+bjm6@)@nYGq5kYU7e2|n1E2^aj1%Wq7h3Hco!|A%-x0`W{WnsDOLKP#h*ret zbIi8PfoE&t5t+`Rz|72K%uArwG^pD5!<4l@%S4FOYJT8lnja!c8U3_LXc-a$j6k0I z(_atl{3|H%-=FU`Y&z2VNgunn^(*TA%f??_?_BF?`PCxBt#sut)uhynnD3Vb&&M#^ z zqR+<>f?P6hnB5Uhe0R((<@w$q=1H2V(f;`sGfx;><{>8z@QV&pC@jLJfvp7z=_2An2kmA@(%n?%uld`51 zD6-b$E+^SI88Q+pKR8dB>sxdy&uC9NNwkOfSWAFmdP-g2qV^M%n!HutYfH~*Ep9+2?sinwilUgo=|_-lQ{*SVdoMzeOje) z_p6kZ2ULrP8lk7WmCHjTE+}XK!4`sCDq=Vwk1hq|BI{%txqJ}-;+tc1!*0uTUzpFg zG(2r2H9{}u&95O{HKbp*-k1r5yy%*;!DVL(ZEVSJDd;UOXKlo$Kfd;~5!8JLm$R(Q zGQx~qN6aTf(xki;3&t8E!pNDl4=_TyeP8hKSEof)yp*`x+qW@UFYw$GuqQ*S+h=>J z%w19R&ui4?l9A>9Eyw^DRMYpL+Hx9hB-oh3gje1-an`=^ziy65aS%3nQV_y6vx7E1 z2U1OmOQR1(xDl5z8%dZjtJ7A=P$LYKb8E|wl*ai?#Z%xPf?$uQ=l@1p8AEo;fvh`Q zxa?sw6IwvGH$@--f&8nxdq{&I`2FEjwcLwtGp(#RiZ*J9XWtdCSh0Z#ZXBrO$R4vVSppb#c+gH2hUxP_t+% z%f(e75NrS)wm_JI8DC!zxG-aFknwd+CYVX+G+EQbw77NU&9#%tC5H52tGBL0tdR0A zHX-8^PPiG{E{wsi`8#*zzm0xT;h(tZ+fOdtl@7l&?6*ef4vxiPYX`?mR=+N6-R$)B zqLC3J&Rk%S@&nl>WL-wwQyM}v>UahD2@1~CLdVzLhMS~kh|(1+X(e;vn904_bJ;I_ z6PJVLe5$^F{O|rY* z=AN#nZf80%kLez+7Ph%x1t3y>KTg)|)FaKHBQAXg#IQUGzwZxZv?H?>6x{^$n!Iqv zoAyNP%_Cj5G1US1-28x$r9AR==|byh^IO0?`NnBmYlnCDyDur8Oj!ZNb(*=D=We~S zsr$Xl&Yb`Uwn`KiyvceY)gt}mNw&Zx@k09jcl%K98<;1UUK>nXEfRqFu9D8JXOUJ? zGHOa-?r>$@ZD*wbDtUVJ?QO?G>t9T*(lTss6$vbTMyi0R^N`QOw*PI<=Y#q=v|BWG z?DyQ3j-$yNcLE+xP@01fm^-Q3{0n;n^6HYEEu!|6T~RC-#8%zbx;%$Gqq}qhFi|9b z?pIV3<%xInDa$gW*4WenJNYnm2=t|5)IptA>YS z^-VjMZM$}>XG7_h-`DrAuv&M?7jIsH}!!p*2Cai9S_&B2`m_XSz=q7=st9>wMN(Hcxsy#3N zPpkRI%7>&YW8Yu8+`qu&+t@2mgkpD-+byXjwNY*|Uc<`1tD3TIMh^~yTq?2Qu{OJy zcyw0z!19O)lCynQuKD(uGS4Wrk8}8FdbT~!84?lh`D z=U}Mi?&tJYXCoe)L=9S$1F3Ah?0v21Q6l#ho!OEd0ISe`D6M&uQ{}!hmO!5vP6KR{ z(;I&R{8bir_Wj)`{g;UHRwW58y)W;-BRJBO+CMMU;K#ShU~LsEm^G|E%~hIL;eJn> znmYk3q>fS^$+03;HDv`Xs=(uW>d4NRJ~+kDQO47bdrH&H>bl84*}OC@bl=-@^u<|f zG^mvc6Qo}3P8H%v_M(LGGi4yYr{{LwAQz|UERK$>(1(9h7^!X+vP)(p%BpttQrqjZ zi&X1MClg;p9r38lSaap)$spNInw?vE;24MU4k3!fjY@CI(}`&2z!ydB_MX@uvs8yg3UGQIMI>5SY#4@2BOA~kJIT2 zbh=bt<8WLnIXkoAVXoO)m^`gAL0pNdwFs|Krgzl}rQkP>Mq!6N2hBMcZy3R+3L|sE zjE_UV-;+A5^`q2u_UH5FE>->h_Y=W?t|PX5fz0a3`Lu@hSKK!@BQzeK{J!E%ELj(& zN&iePsdBfjQjF2H{)b4~Xs-s7I(=k;`^I1xh7f==f>lVp@b_?UjCtDnAKCRhe?%LmERu_A61C-{fn9EGOH zFE~n4(=}FFhKe$>bzJQCf6H!vE~++g9&7F!8y;h;`!>=2CAei=Rj12&FymKHIR2@5 z0`5fDXn>FBIiMDTi=HiYf~W@SbOiM_W5QrG`vy|gHCBcujR;6JxX4YNV612Fw6|S> zcJG};%k53ti#}K!2KeY@<--JJ>C_&MMHOV1gjq6H9F@+rP!lCp2Pr&+eP_vCzEbRR zp)sJt3o}!KZMcwpb2dq!q5qGp9Ro~kF9@;vNzxSf98}WQpW~0#sA`mt2lLC9t1J5a%fHyLz~}-|#zI)aX`qz-Em>1ncChO$JsU62xEKj+m3W zI?G15l`w@9akPENPy%M&t)CB7aDB>5q9iL`L&F1036I5R$ia0AO*>Hmd~GA~qS7=t zK@HiF_Mb=pZ$XED9ImbN_#>At-<_8UcR{SL+#fGgReIKz(^b*TsxC`dGB*bw{w@nd z0RyMo3rHf8(#_1QMwMsp8!||{xJNvBf@^cvo!^HSQS5_(4|R@Ko!`7$^Z=6*?>gFx zdhfRp#rL+Z+y60_>C6kH)?dRh8M!zM%$A>S5L`kdrJaxZb#dn}{2C?wM%Z@QIfY*s z91_?3Hg8r5kh*~JV(wB$W0!$76X(-I6LeINeGL*7S*ndG))IwhGU%v5o{)(bwIr?} ztwE;lZ=obZ485D{yJ6!#{#t2G2^?=xmYqD_rJPId?&x=}DsQ$5mKc3>fPNfmKdH}c zl?HgFIzCK|#ALcn*LF&&(QdqcZyEyMD<#QFgo@ zi_TIu`xv@+X;q{&^XcofpvppPT|nV^vW8q?K5c8K58{a!bi}cJZ(Vz2ghDz z^tEysHWgF2X0UiL-t<_{@Qt(_b+gYDx3_)glYw=oW)+>7KcW+|K;YY)diOH5C;1m? z>1}7>ir2s{$dJF6__m5AQ#&x~cRqDpE0FB-KD*P$@_sL@7qcy@%Gufd{hZ&G%ocER zm0)X)(nmqjAbU-t-{T_n0gjCB!c5@Zs1M!Z8ZYYvBrfV41a!^U3+G+vZmrCE7bHPw zOA@yu2zSdn+{}Tv%rn@|3If?CrOjVs^0m{GA;sv=vE#xr>*^Aoc|DDw(sUhRRYsC@ znhcJP{kG|N_{UW)Q9X25(5y2m@PwU|D$Yf5#euehI~5C?U2#J9?f>m5YPQq4qn z&U+ZkD=TRRD#$q|9PN={JW1c> zR9KiP3rfV!SD^8~H>d4jQ;w;6>W+*{B4XSh+54s@gp%cX#RdD?DE0N8h_%mf} zoQdybCg|o+72FA9>RpoWXRSa-jwv&{a>4p1gQp`iPFUwU3wK~3LQP&LUvfUC4s1WL zPLgTw17Njs#!Si0JpD^B|7`HbPD;JWp)u&ddV%^2!*w6{E)-F%dIf#iV|thCQIgeb%!5t-eu*4Ruy^@R)NRgUD5Qt%)}owZ?dVEeEYzc-#Fu!~eC4{Uc`d z14F$JOZf~x`*o-f-iZ7HQXb_aJ!hcl++(}TpN!B&s2m)*8PI)<5&O5K}e zrN#GSG>_3|?C_da&QxpH5JaTN!UJ^$JNUb@-maD5vB)6yjmtJE6wMU~x<|u?>PgRW ziR6ueb!wt3@erk|LT#CkexGpkzmpA}N% z;#jAN2`I+&y9E4w_wmN7H7(iY54F~GuD~jRz?`JGi$q5-!ZS~(Kpk5?u&#&@Q9Dkd zVW^uC+9Mt0^_vld&S#h*Lw`*HM>n{~aGBz^Ge^F1*N&r!3FhPJ5uDy`T}v&OZ%u_E zKTvb@a|?>SJvp(2W~=lGO6N0{RR)ch;~ztYLm0r|sn{?Y#wgCnmUKq<<*ZKGuMN=+ zA9|&P3*SW}rg0x#Ko6GZLowsjeRM2x{2ezat!n8Iv8OnniAV><>?{=Ndy0di_$NqQ z${9NX^UN;7B#}fTs>jRl>{1z&XXa`ayyQeBCIQGb?oxDEMGFAWQ#S|o#|gG&$l-N0 z3RPv41aScypOP^acWAEx9VVg#)?=Dw9RdB>gIC#{B>AQHi`LHy710j@Tk*Zi0Y%$_ z`nnA1TyY7E6F48%^9d9yk-)v{+jY66>UVf3hycTIIiM*-jrI@rAwS^bFfciod3rW?)$%0AeV@+R#-$+H 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�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

VLX4 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 z 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%0AU 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 T?>k>We|z2|zuWdNhkpNGTnu6+ diff --git a/gator_versioned_docs/version-1.1.0/changelog/1.0.0.md b/gator_versioned_docs/version-1.1.0/changelog/1.0.0.md deleted file mode 100644 index 9410743c68f..00000000000 --- a/gator_versioned_docs/version-1.1.0/changelog/1.0.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_label: 1.0.0 -description: MetaMask Smart Accounts Kit v1.0.0 changelog ---- - -# What's new in v1.0.0? - -:::info 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 - -### ⚠️ `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. - -```ts -await walletClient.sendTransactionWithDelegation({ -// remove-next-line -- permissionsContext: "0x...", -// add-next-line -+ permissionContext: "0x...", - delegationManager: "0x.., - // ... -}); -``` - -### ⚠️ `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`. - -```ts -await bundlerClient.sendUserOperationWithDelegation({ - // remove-next-line -- accountMetadata: { - // add-next-line -+ dependencies: { - factory: "0x..", - factoryData: "0x..." - }, - // ... - calls: [ - { - to: sessionAccount.address, - data: "0x", - value: 1n, - // remove-next-line -- permissionsContext: "0x..", - // add-next-line -+ permissionContext: "0x..", - delegationManager: "0x..", - }, - ], - // ... -}); -``` - -### ⚠️ `getDelegationHashOffchain` - -The function has been renamed to `hashDelegation` for improved clarity. - -```typescript -// remove-next-line -- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit"; -// add-next-line -+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils"; - -// remove-next-line -- const delegationHash = getDelegationHashOffchain(delegation); -// add-next-line -+ const delegationHash = hashDelegation(delegation); -``` - -### ⚠️ `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. - -```ts -await walletClient.requestExecutionPermissions([{ - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - // add-next-line -+ to: sessionAccount.address, - // remove-start -- signer: { -- type: "account", -- data: { -- address: sessionAccount.address, -- }, -- }, - // remove-end - // remove-next-line -- isAdjustmentAllowed: true, - permission: { - type: "erc20-token-periodic", - data: { - // ... - }, - // add-next-line -+ isAdjustmentAllowed: true, - }, -}]); -``` - -### ⚠️ `encodePermissionContexts` - -The utility function has been removed. See [`encodeDelegations`](../reference/delegation/index.md#encodedelegations) to encode the delegations. - -### ⚠️ `decodePermissionContexts` - -The utility function has been removed. See [`decodeDelegations`](../reference/delegation/index.md#decodedelegations) to decode the delegations. - -### ⚠️ `redeemDelegations` - -The `redeemDelegations` function and `Redemption` type have been removed. Use the [`DelegationManager.encode.redeemDelegations`](../reference/delegation/index.md#redeemdelegations) encoding utility. - -## Enhancements - -- New ERC-7715 Wallet Client actions have been added to [get the supported permission](../guides/advanced-permissions/get-supported-permissions.md), and [get granted permissions](../guides/advanced-permissions/get-granted-permissions.md) 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`](../reference/delegation/index.md#encodedelegation) and [`decodeDelegation`](../reference/delegation/index.md#decodedelegation) utilities for encoding and decoding single delegation. -- Allow scope type to be specified either as [ScopeType enum](../reference/types.md#scopetype) or string literal. -- Allow caveat type to be specified either as [CaveatType enum](../reference/types.md#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 - -- 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 - -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 - -| 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` | diff --git a/gator_versioned_docs/version-1.1.0/concepts/advanced-permissions.md b/gator_versioned_docs/version-1.1.0/concepts/advanced-permissions.md deleted file mode 100644 index 12ae2d3305a..00000000000 --- a/gator_versioned_docs/version-1.1.0/concepts/advanced-permissions.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -description: Learn about MetaMask Advanced Permissions (ERC-7715). -keywords: [ERC-7715, 7715, permissions, wallet, smart account] ---- - -# Advanced Permissions (ERC-7715) - -The Smart Accounts Kit supports Advanced Permissions ([ERC-7715](https://eips.ethereum.org/EIPS/eip-7715)), which lets you request fine-grained permissions from a MetaMask user to execute transactions on their behalf. -For example, a user can grant your dapp permission to spend 10 USDC per day to buy ETH over the course of a month. -Once the permission is granted, your dapp can use the allocated 10 USDC each day to purchase ETH directly from the MetaMask user's account. - -Advanced Permissions eliminate the need for users to approve every transaction, which is useful for highly interactive dapps. -It also enables dapps to execute transactions for users without an active wallet connection. - -:::note -This feature requires [MetaMask Flask 13.5.0](/snaps/get-started/install-flask) or later. -::: - -## ERC-7715 technical overview - -[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_grantPermissions`. -Dapps can use this method to request a wallet to grant the dapp permission to execute transactions on a user's behalf. -`wallet_grantPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission. -Common signer implementations include wallet signers, single key and multisig signers, and account signers. - -The Smart Accounts Kit supports multiple signer types. The documentation uses [an account signer](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) as a common implementation example. -When you use an account signer, a session account is created solely to request and redeem Advanced Permissions, and doesn't contain tokens. -The session account can be granted with permissions and redeem them as specified in [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710). -The session account can be a smart account or an externally owned account (EOA). - -The MetaMask user that the session account requests permissions from must be upgraded to a [MetaMask smart account](smart-accounts.md). - -## Advanced Permissions vs. delegations - -Advanced Permissions expand on regular [delegations](delegation/overview.md) by enabling permission sharing _via the MetaMask browser extension_. - -With regular delegations, the dapp constructs a delegation and requests the user to sign it. -These delegations are not human-readable, so it is the dapp's responsibility to provide context for the user. -Regular delegations cannot be signed through the MetaMask extension, because if a dapp requests a delegation without constraints, the whole wallet can be exposed to the dapp. - -In contrast, Advanced Permissions enable dapps (and AI agents) to request permissions from a user directly via the MetaMask extension. -Advanced Permissions require a permission configuration which displays a human-readable confirmation for the MetaMask user. -The user can modify the permission parameters if the request is configured to allow adjustments. - -For example, the following Advanced Permissions request displays a rich UI including the start time, amount, and period duration for an [ERC-20 token periodic transfer](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission): - -

-ERC-7715 request -

- -## Advanced Permissions lifecycle - -The Advanced Permissions lifecycle is as follows: - -1. **Set up a session account** - Set up a session account to execute transactions on behalf of the MetaMask user. - It can be a [smart account](smart-accounts.md) or an externally owned account (EOA). - -2. **Request permissions** - Request permissions from the user. - The Smart Accounts Kit supports [ERC-20 token permissions](../guides/advanced-permissions/use-permissions/erc20-token.md) and - [native token permissions](../guides/advanced-permissions/use-permissions/native-token.md). - -3. **Redeem permissions** - Once the permission is granted, the session account can redeem the permission, executing on the user's behalf. - -See [how to perform executions on a MetaMask user's behalf](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) to get started with the Advanced Permissions lifecycle. diff --git a/gator_versioned_docs/version-1.1.0/concepts/delegation/caveat-enforcers.md b/gator_versioned_docs/version-1.1.0/concepts/delegation/caveat-enforcers.md deleted file mode 100644 index a393d3d401c..00000000000 --- a/gator_versioned_docs/version-1.1.0/concepts/delegation/caveat-enforcers.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -description: Learn about caveat enforcers and how they restrict delegations. -keywords: [caveats, caveat enforcers, delegation] ---- - -# Caveat enforcers - -The Smart Accounts Kit provides caveat enforcers, which are smart contracts that implement rules and restrictions -on delegations. They serve as the underlying mechanism that enables conditional execution within the [Delegation Framework](./overview.md#delegation-framework). -See the [delegation flow](overview.md#delegation-flow) for how caveat enforcer hooks are called during delegation redemption. - -A caveat enforcer acts as a gate that validates whether a delegation can be used for a particular execution. -When a delegate attempts to execute an action on behalf of a delegator, each caveat enforcer specified in -the delegation evaluates whether the execution meets its defined criteria. - -:::warning Important - -- Without caveat enforcers, a delegation has infinite and unbounded authority to make any execution the original account can make. - We strongly recommend using caveat enforcers. -- Caveat enforcers safeguard the execution process but do not guarantee a final state post-redemption. - Always consider the full impact of combined caveat enforcers. - ::: - -## Hooks - -The interface consists of four key hook functions that are called at different stages of the delegation redemption process. -Each of these hooks receives comprehensive information about the execution context, including: - -- The caveat terms specified by the delegator. -- Optional arguments provided by the redeemer. -- The execution mode and calldata. -- The delegation hash. -- The delegator and redeemer addresses. - -| Hook | Description | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| `beforeAllHook` | Called before any actions in a batch redemption process begin. Verifies conditions that must be true for the entire batch execution. | -| `beforeHook` | Called before the execution tied to a specific delegation. Allows for pre-execution validation of conditions specific to that delegation. | -| `afterHook` | Called after the execution tied to a specific delegation completes. Verifies post-execution state changes or effects specific to that delegation. | -| `afterAllHook` | Called after all actions in a batch redemption process have completed. Verifies final conditions after the entire batch has executed. | - -The most important safety feature of these hooks is their ability to block executions: - -- If any hook determines its conditions aren't met, it will **revert** (throw an exception). -- When a reversion occurs, the entire delegation redemption process is canceled. -- This prevents partial or invalid executions from occurring. -- No state changes from the attempted execution will be committed to the blockchain. - -This "all-or-nothing" approach ensures that delegations only execute exactly as intended by their caveats. - -## Available caveat enforcers - -The Smart Accounts Kit provides [out-of-the-box caveat enforcers](../../reference/delegation/caveats.md) -for common restriction patterns, including: - -- Limiting target addresses and methods. -- Setting time or block number constraints. -- Restricting token transfers and approvals. -- Limiting execution frequency. - -For other restriction patterns, you can also [create custom caveat enforcers](/tutorials/create-custom-caveat-enforcer) by implementing the `ICaveatEnforcer` interface. diff --git a/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-manager.md b/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-manager.md deleted file mode 100644 index 6c9ce37dfd5..00000000000 --- a/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-manager.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -description: Learn about the Delegation Manager and execution modes. -keywords: [delegation manager, delegation, execution modes, delegation framework] ---- - -# Delegation Manager - -The Delegation Manager is a core component of the [Delegation Framework](./overview.md#delegation-framework). -It validates delegations and triggers executions on behalf of the delegator, ensuring tasks are executed accurately, -and securely. - -See the [delegation flow](./overview.md#delegation-flow) for a full overview of how delegations are created, validated, and redeemed. - -## Execution modes - -The Delegation Manager processes delegations based on a specified execution mode. When redeeming a delegation using [`redeemDelegations`](../../reference/delegation/index.md#redeemdelegations), you must -pass an execution mode for each delegation chain you pass to the method. The Smart Accounts Kit supports the following -execution modes, based on [ERC-7579](https://erc7579.com/): - -| Execution mode | Number of delegation chains passed to `redeemDelegations` | Processing method | Does user operation continue execution if redemption reverts? | -| --------------- | --------------------------------------------------------- | ----------------- | ------------------------------------------------------------- | -| `SingleDefault` | One | Sequential | No | -| `SingleTry` | One | Sequential | Yes | -| `BatchDefault` | Multiple | Interleaved | No | -| `BatchTry` | Multiple | Interleaved | Yes | - -### Sequential processing - -In `Single` modes, the Delegation Manager processes delegations sequentially: - -1. For each delegation in the chain, all caveats' `before` hooks are called. -2. The single redeemed action is executed. -3. For each delegation in the chain, all caveats' `after` hooks are called. - -### Interleaved processing - -In `Batch` modes, the Delegation Manager processes delegations in an interleaved manner: - -1. For each chain in the batch, and each delegation in the chain, all caveats' `before` hooks are called. -2. Each redeemed action is executed. -3. For each chain in the batch, and each delegation in the chain, all caveats' `after` hooks are called. - -`Batch` mode allows for powerful use cases, but the Delegation Framework currently does not include any `Batch` compatible caveat enforcers. diff --git a/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-scopes.md b/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-scopes.md deleted file mode 100644 index bac1891a896..00000000000 --- a/gator_versioned_docs/version-1.1.0/concepts/delegation/delegation-scopes.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -description: Learn about delegation scopes and how they define the initial authority of a delegation. -keywords: - [delegation scopes, delegation, authority, spending limit, function call, ownership transfer] ---- - -# Delegation scopes - -When creating a delegation, you must configure a scope to define the delegation's initial authority and help prevent delegation misuse. - -Scopes are not part of the [Delegation Framework](overview.md#delegation-framework) itself, but an abstraction introduced in the Smart Accounts Kit that builds on top of [caveat enforcers](caveat-enforcers.md) to provide pre-configured restriction patterns for common use cases. - -## Scopes vs. caveats - -Scopes and caveats work together to define and restrict a delegation's authority: - -- **Scopes** define the _initial authority_ of a delegation. They determine the broad category of actions the delegate is permitted to perform, such as transferring tokens or calling specific contract functions. -- **Caveats** further _constrain_ the authority granted by the scope. They add additional restrictions on top of the scope, such as time limits or execution frequency. - -For example, a spending limit scope might allow a delegate to transfer up to 100 USDC, while an additional caveat could restrict the transfers to only occur within a specific time window. - -See [how to constrain a delegation's scope by adding caveats](../../guides/delegation/use-delegation-scopes/constrain-scope.md). - -## Categories - -The Smart Accounts Kit supports three categories of scopes: - -| Scope type | Description | -| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| [Spending limit scopes](../../guides/delegation/use-delegation-scopes/spending-limit.md) | Restricts the spending of native, ERC-20, and ERC-721 tokens based on defined conditions. | -| [Function call scope](../../guides/delegation/use-delegation-scopes/function-call.md) | Restricts the delegation to specific contract methods, contract addresses, or calldata. | -| [Ownership transfer scope](../../guides/delegation/use-delegation-scopes/ownership-transfer.md) | Restricts the delegation to only allow ownership transfers, specifically the `transferOwnership` function for a specified contract. | diff --git a/gator_versioned_docs/version-1.1.0/concepts/delegation/overview.md b/gator_versioned_docs/version-1.1.0/concepts/delegation/overview.md deleted file mode 100644 index 6426766d795..00000000000 --- a/gator_versioned_docs/version-1.1.0/concepts/delegation/overview.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -description: Learn about delegation, the delegation lifecycle, and the Delegation Framework. -sidebar_label: Overview -toc_max_heading_level: 3 -keywords: [smart accounts kit, delegation, delegator, delegate, delegation framework] ---- - -# Delegation - -Delegation is the ability for a [MetaMask smart account](../smart-accounts.md) to grant permission to another smart contract -or externally owned account (EOA) to perform specific executions on its behalf. -The account that grants the permission is called the delegator account, while the account that receives the permission -is called the delegate account. - -The Smart Accounts Kit follows the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) standard for smart contract delegation. -In addition, users can use [delegation scopes](delegation-scopes.md) and [caveat enforcers](caveat-enforcers.md) to apply rules and restrictions to delegations. -For example, Alice delegates the ability to spend her USDC to Bob, limiting the amount to 100 USDC. - -## Delegation types - -You can create the following delegation types: - -### Root delegation - -A root delegation is when a delegator delegates their own authority away, as opposed to _redelegating_ permissions -they received from a previous delegation. In a chain of delegations, the first delegation is the root delegation. -For example, Alice delegates the ability to spend her USDC to Bob, limiting the amount to 100 USDC. - -Use [`createDelegation`](../../reference/delegation/index.md#createdelegation) to create a root delegation. - -### Open root delegation - -An open root delegation is a root delegation that doesn't specify a delegate. This means that any account can -redeem the delegation. For example, Alice delegates the ability to spend 100 of her USDC to anyone. - -You must create open root delegations carefully, to ensure that they are not misused. -Use [`createOpenDelegation`](../../reference/delegation/index.md#createopendelegation) to create an open root delegation. - -### Redelegation - -A delegate can redelegate permissions that have been granted to them, creating a chain of delegations across trusted parties. -For example, Alice delegates the ability to spend 100 of her USDC to Bob. Bob redelegates the ability to spend -50 of Alice's 100 USDC to Carol. - -See [how to create a redelegation](../../guides/delegation/create-redelegation.md) guide to learn more. - -### Open redelegation - -An open redelegation is a redelegation that doesn't specify a delegate. This means that any account can redeem -the redelegation. For example, Alice delegates the ability to spend 100 of her USDC to Bob. Bob redelegates -the ability to spend 50 of Alice's 100 USDC to anyone. - -As with open root delegations, you must create open redelegations carefully, to ensure that they are not misused. -Use [`createOpenDelegation`](../../reference/delegation/index.md#createopendelegation) to create an open redelegation. - -## Attenuating authority - -When creating chains of delegations via redelegations, it's important to understand how authority flows and can be restricted. - -- Each delegation in the chain inherits all restrictions from its parent delegation. -- New caveats can add further restrictions, but can't remove existing ones. - -This means that a delegate can only redelegate with equal or lesser authority than they received. - -## Delegation flow - -The delegation flow consists of the following steps: - -```mermaid -%%{ - init: { - 'sequence': { - 'actorMargin': 30, - 'width': 250 - } - } -}%% - -sequenceDiagram - participant Delegator - participant Delegate - participant Manager as Delegation Manager - participant Enforcer as Caveat enforcer - - Delegator->>Delegator: Create delegation with caveat enforcers - Delegator->>Delegator: Sign delegation - Delegator->>Delegate: Send signed delegation - Note right of Delegate: Hold delegation until redemption - - Delegate->>Manager: redeemDelegations() with delegation & execution details - Manager->>Delegator: isValidSignature() - Delegator-->>Manager: Confirm valid (or not) - - Manager->>Enforcer: beforeAllHook() - Note right of Manager: Expect no error - Manager->>Enforcer: beforeHook() - Note right of Manager: Expect no error - - Manager->>Delegator: executeFromExecutor() with execution details - Delegator->>Delegator: Perform execution - Note right of Manager: Expect no error - - Manager->>Enforcer: afterHook() - Note right of Manager: Expect no error - Manager->>Enforcer: afterAllHook() - Note right of Manager: Expect no error -``` - -### Step 1. Create a delegation - -The delegator creates a delegation, configuring a [scope](delegation-scopes.md) and -optional [caveats](caveat-enforcers.md) that define the conditions under which the delegation can be redeemed. - -### Step 2. Sign the delegation - -The delegator signs the delegation, producing a verifiable signature that the [Delegation Manager](delegation-manager.md) can later validate. - -### Step 3. Send the signed delegation - -The delegator sends the signed delegation to the delegate. A dapp can store the delegation in the storage solution -of their choice (such as a local database, Filecoin, or other databases), enabling retrieval for future redemption. - -### Step 4. Redeem the delegation - -The delegate submits the signed delegation to the Delegation Manager by calling `redeemDelegations()` with the -delegation and execution details. - -### Step 5. Validate the delegation - -The Delegation Manager validates the input data by ensuring the lengths of `delegations`, `modes`, and -`executions` match. It also verifies delegation signatures, ensuring validity using ECDSA (for EOAs) or -`isValidSignature` (for contracts). - -### Step 6. Execute `beforeHook` - -If the signature validation passes, the Delegation Manager executes the `beforeHook` for each [caveat](caveat-enforcers.md) -in the delegation, passing relevant data (`terms`, `arguments`, `mode`, `execution` `calldata`, and `delegationHash`) to -the caveat enforcer. - -### Step 7. Perform execution - -If `beforeHook` validation passes, the Delegation Manager calls `executeFromExecutor` to perform the delegation's -execution, either by the delegator or the caller for self-authorized executions. - -### Step 8. Execute `afterHook` - -The Delegation Manager runs each caveat enforcer's `afterHook` and `afterAllHook` to verify post-execution conditions. - -See [how to perform executions on a smart account's behalf](../../guides/delegation/execute-on-smart-accounts-behalf.md) for a step-by-step guide. - -## Delegation Framework - -The Smart Accounts Kit includes the Delegation Framework, a -[set of comprehensively audited smart contracts](https://github.com/MetaMask/delegation-framework) that -collectively handle smart account creation, the delegation lifecycle, and caveat enforcement. - -It consists of the following components: - -| Component | Description | -| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| [Delegation Manager](delegation-manager.md) | Validates delegations and triggers executions on behalf of the delegator, ensuring tasks are executed accurately and securely. | -| [Caveat enforcers](caveat-enforcers.md) | Manage rules and restrictions for delegations, providing fine-tuned control over delegated executions. | diff --git a/gator_versioned_docs/version-1.1.0/get-started/install.md b/gator_versioned_docs/version-1.1.0/get-started/install.md deleted file mode 100644 index 056832b48e1..00000000000 --- a/gator_versioned_docs/version-1.1.0/get-started/install.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -sidebar_label: Install and set up -description: Learn how to install and set up the MetaMask Smart Accounts Kit. -keywords: [install, MetaMask, delegation, smart accounts kit, smart, accounts] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Install and set up the Smart Accounts Kit - -This page provides instructions to install and set up the Smart Accounts Kit, enabling you to create and interact with [MetaMask Smart Accounts](../concepts/smart-accounts.md) into your dapp. - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. -- If you plan to use any smart contracts (for example, to - [create a custom caveat enforcer](/tutorials/create-custom-caveat-enforcer)), - install [Foundry](https://book.getfoundry.sh/getting-started/installation). - -## Steps - -### 1. Install the Smart Accounts Kit - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit): - -```bash npm2yarn -npm install @metamask/smart-accounts-kit -``` - -### 2. (Optional) Install the contracts - -If you plan to extend the Delegation Framework smart contracts (for example, to -[create a custom caveat enforcer](/tutorials/create-custom-caveat-enforcer)), install -the contract package using Foundry's command-line tool, Forge: - -```bash -forge install metamask/delegation-framework@v1.3.0 -``` - -Add `@metamask/delegation-framework/=lib/metamask/delegation-framework/` in your `remappings.txt` file. - -### 3. Get started - -You're now ready to start using the Smart Accounts Kit. -See the [MetaMask Smart Accounts quickstart](smart-account-quickstart/index.md) to walk through a simple example. diff --git a/gator_versioned_docs/version-1.1.0/get-started/supported-advanced-permissions.md b/gator_versioned_docs/version-1.1.0/get-started/supported-advanced-permissions.md deleted file mode 100644 index 9664ab0a22d..00000000000 --- a/gator_versioned_docs/version-1.1.0/get-started/supported-advanced-permissions.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Supported Advanced Permissions -description: Supported Advanced Permissions for Smart Accounts Kit, MetaMask Flask, and MetaMask. -keywords: [MetaMask, smart accounts kit, supported advanced permissions, erc-7715, 7715] ---- - -The following table displays the Advanced Permissions types supported by the -Smart Accounts Kit, [MetaMask Flask](/snaps/get-started/install-flask), and MetaMask production, and the minimum version required for each. - -If you don't see the Advanced Permissions type you're looking for, you can request it by -emailing [hellogators@consensys.net](mailto:hellogators@consensys.net). - -| Permission type | Smart Accounts Kit | MetaMask Flask | MetaMask | -| ------------------------------------------------------------------------------------------------------------------------ | ------------------ | -------------- | ----------- | -| [ERC-20 periodic](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [ERC-20 stream](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [ERC-20 revocation](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-revocation-permission) | >= v0.3.0 | >= v13.14.0 | >= 13.18.1 | -| [Native token periodic](../guides/advanced-permissions/use-permissions/native-token.md#native-token-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | -| [Native token stream](../guides/advanced-permissions/use-permissions/native-token.md#native-token-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | diff --git a/gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/smart-accounts.md b/gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/smart-accounts.md deleted file mode 100644 index 8a491b7e080..00000000000 --- a/gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/smart-accounts.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -description: Get started with the MetaMask Smart Accounts using Scaffold-ETH 2. -sidebar_label: MetaMask Smart Accounts -keywords: [scaffold-eth, delegation, smart accounts, template] ---- - -# Use MetaMask Smart Accounts with Scaffold-ETH 2 - -Use the [MetaMask Smart Accounts extension](https://github.com/metamask/gator-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in -under two minutes. This extension helps you quickly generate the boilerplate code to create an embedded smart account, and complete -the delegation lifecycle (create, sign, and redeem a delegation). - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v20.18.3) v20.18.3 or later. -- Install [Yarn](https://yarnpkg.com/) package manager. -- Install [Git](https://git-scm.com/install/). -- [Create a Pimlico API key](https://docs.pimlico.io/guides/create-api-key#create-api-key). - -## Steps - -### 1. Install the extension - -Run the following command to install the Smart Accounts Kit extension: - -```bash -npx create-eth@latest -e metamask/gator-extension your-project-name -``` - -### 2. Set up enviroment variables - -Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the -`NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. - -```bash -cd your-project-name/packages/nextjs -cp .env.example .env.local -``` - -### 3. Start the frontend - -In the project's root directory start the development server. - -```bash -yarn start -``` - -### 4. Complete the delegation lifecycle - -Navigate to the **MetaMask Smart Accounts & Delegation** page in your Scaffold-ETH -frontend at http://localhost:3000/delegations, and follow the steps to deploy a delegator -account, create a delegate wallet, create a delegation, and redeem a delegation. - -You can view the completed transaction on Etherscan. - -

- Scaffold-ETH 2 Smart Accounts & Delegation Page -

- -## Next steps - -Learn more about [MetaMask Smart Accounts](../../concepts/smart-accounts.md) and [delegation](../../concepts/delegation/overview.md). diff --git a/gator_versioned_docs/version-1.1.0/get-started/use-the-cli.md b/gator_versioned_docs/version-1.1.0/get-started/use-the-cli.md deleted file mode 100644 index 62e79151e85..00000000000 --- a/gator_versioned_docs/version-1.1.0/get-started/use-the-cli.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -description: Get started with the MetaMask Smart Accounts Kit using the `@metamask/create-gator-app` CLI. -sidebar_label: Use the CLI -keywords: [CLI, delegation, smart accounts, template] ---- - -# Use the Smart Accounts Kit CLI - -Use the `@metamask/create-gator-app` interactive CLI to bootstrap a project with the Smart Accounts Kit in under two minutes. -The CLI automatically installs the required dependencies and sets up a project structure using a selected template, -allowing you to focus on building your dapp. - -## Run the CLI - -Run the following command to automatically install the `@metamask/create-gator-app` package: - -```bash -npx @metamask/create-gator-app@latest -``` - -Upon installation, you'll be asked the following prompts: - -```bash -? What is your project named? (my-gator-app) -? Pick a framework: (Use arrow keys) -❯ nextjs - vite-react -? Pick a template: (Use arrow keys) -❯ MetaMask Smart Accounts Starter - MetaMask Smart Accounts & Delegation Starter - Farcaster Mini App Delegation Starter - Advanced Permissions (ERC-7715) Starter -? Pick a package manager: (Use arrow keys) -❯ npm - yarn - pnpm -``` - -Once you've answered the prompts with the required configuration and selected a template, the CLI will create the -project using the specified name and settings. -See the following section to learn more about available CLI configurations. - -## Options - -The CLI provides the following options to display CLI details, and further customize the template configuration. - -| Option | Description | -| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-v` or `--version` | Check the current version of the `@metamask/create-gator-app` CLI. | -| `-h` or `--help` | Display the available options. | -| `--skip-install` | Skip the installation of dependencies. | -| `--add-web3auth` | Add [MetaMask Embedded Wallets (previously Web3Auth)](/embedded-wallets) as a signer for the delegator account.
Supported templates:
- MetaMask Smart Accounts Starter
- MetaMask Smart Accounts & Delegation Starter | - -## Examples - -### MetaMask Embedded Wallets configuration - -To create a project that uses [MetaMask Embedded Wallets](/embedded-wallets) as the signer for your delegator -account, use the `--add-web3auth` option with `@metamask/create-gator-app`: - -```bash -npx @metamask/create-gator-app --add-web3auth -``` - -You'll be prompted to provide additional Web3Auth configuration details: - -```bash -? Which Web3Auth network do you want to use? (Use arrow keys) -❯ Sapphire Devnet - Sapphire Mainnet -``` - -## Supported templates - -| Template | Next.js | Vite React | -| ------------------------------------------------ | ------- | ---------- | -| MetaMask Smart Accounts Starter | ✅ | ✅ | -| MetaMask Smart Accounts & Delegation Starter | ✅ | ✅ | -| Farcaster Mini App Delegation Starter | ✅ | | -| Advanced Permissions (ERC-7715) Starter | ✅ | | diff --git a/gator_versioned_docs/version-1.1.0/get-started/use-with-openclaw.md b/gator_versioned_docs/version-1.1.0/get-started/use-with-openclaw.md deleted file mode 100644 index db85364a71c..00000000000 --- a/gator_versioned_docs/version-1.1.0/get-started/use-with-openclaw.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -sidebar_label: Use with OpenClaw -description: Use the MetaMask Smart Accounts Kit skill with OpenClaw to build and deploy applications with smart accounts support. -toc_max_heading_level: 2 -keywords: [openclaw, skill, delegation, smart accounts, ai, metamask smart accounts kit] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Use the Smart Accounts Kit with OpenClaw - -Use the MetaMask Smart Accounts Kit [OpenClaw skills](https://docs.openclaw.ai/tools/skills) to interact with the Smart Accounts Kit using natural language prompts. - -[OpenClaw](https://openclaw.ai/) is an open-source platform for AI agents that enables you to build, deploy, and -manage AI assistants with access to various tools and skills. The Smart Accounts Kit provides the below two skills. - -## Gator CLI skill - -This skill enables your agent to grant, redeem, inspect and revoke ERC-7710 delegations using the [`@metamask/gator-cli`](https://www.npmjs.com/package/@metamask/gator-cli) package. - -:::warning Alpha version - -This CLI is in alpha version, and stores agent's private key in a local -JSON file (`~/.gator-cli/`). Please proceed with caution, and do not use -it with accounts holding significant funds. - -::: - -### Install - - - - -```bash -clawhub install gator-cli -``` - - - - -```txt -Install the skill from https://github.com/MetaMask/openclaw-skills/blob/main/metamask/gator-cli/SKILL.md -``` - - - - -### Reference - -The skill provides access to the following commands: - -| Command | Description | -| --------- | -------------------------------------------- | -| `init` | Generate a private key and save config. | -| `create` | Upgrade an EOA to an EIP-7702 smart account. | -| `show` | Display the EOA address. | -| `status` | Check config and on chain account status. | -| `balance` | Show native or ERC-20 balance. | -| `grant` | Create, sign, and store a delegation. | -| `redeem` | Redeem a delegation using an action type. | -| `revoke` | Revoke a delegation on chain. | -| `inspect` | View delegations for your account. | - -## Smart Accounts Kit skill - -This skill helps your agent learn about the Smart Accounts Kit and its capabilities, and integrate them into your applications. - -### Install - - - - -```bash -clawhub install smart-accounts-kit -``` - - - - -```bash -cd ~/.openclaw/workspace/skills -git clone https://github.com/smartgator/smart-accounts-kit-skills.git -``` - - - - -```txt -Install the skill from https://github.com/smartgator/smart-accounts-kit-skills.git -``` - - - - -### Reference - -The skill provides access to the following capabilities: - -| Capability | Description | -| ---------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | -| [Smart accounts](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/smart-accounts.md) | Helps you integrate MetaMask Smart Accounts to support batch transactions, multi-sig signatures, and gas sponsorship. | -| [Delegation](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/delegations.md) | Helps you integrate delegations with scopes and caveats. | -| [Advanced Permissions](https://github.com/smartgator/smart-accounts-kit-skills/blob/main/references/advanced-permissions.md) | Helps you integrate Advanced Permissions. | diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/create-redelegation.md b/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/create-redelegation.md deleted file mode 100644 index e1736c2c43a..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/create-redelegation.md +++ /dev/null @@ -1,210 +0,0 @@ ---- -description: Learn how to create a redelegation for Advanced Permissions. -sidebar_label: Create a redelegation -keywords: [advanced permissions, caveat, delegation scope, redelegation, delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Create a redelegation - -Redelegation is a core feature that sets Advanced Permissions apart from other permission sharing frameworks. -It allows a session account (delegate) to create a delegation chain, passing on the same or reduced level of authority -from the MetaMask account (delegator). - -For example, if a dapp is granted permission to spend 10 USDC on a user's behalf, it can -further delegate that permission to specific agents, such as allowing a Swap agent to spend -up to 5 USDC. This creates a permission sharing chain in which the root permissions are -shared with additional parties. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) -- [Learn how to request Advanced Permissions.](execute-on-metamask-users-behalf.md) - -## Request Advanced Permissions - -Request Advanced Permissions from the user with the Wallet Client's [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) action. - -This example uses the [ERC-20 periodic permission](./use-permissions/erc20-token.md#erc-20-periodic-permission), allowing the -user to grant dapp the ability to spend 10 USDC on their behalf. - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { sessionAccount, walletClient, tokenAddress } from './config.ts' -import { parseUnits } from 'viem' - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 week from now. -const expiry = currentTime + 604800 - -const grantedPermissions = await walletClient.requestExecutionPermissions([ - { - chainId: chain.id, - expiry, - // The requested permissions will granted to the - // session account. - to: sessionAccount.address, - permission: { - type: 'erc20-token-periodic', - data: { - tokenAddress, - // 10 USDC in wei format. Since USDC has 6 decimals, 10 * 10^6 - periodAmount: parseUnits('10', 6), - // 1 day in seconds - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', - }, - isAdjustmentAllowed: true, - }, - }, -]) -``` - - - - - -```ts -import { createWalletClient, custom, createPublicClient, http } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' -import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' -import { sepolia as chain } from 'viem/chains' - -// USDC address on Ethereum Sepolia. -export const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -export const sessionAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const walletClient = createWalletClient({ - transport: custom(window.ethereum), -}).extend(erc7715ProviderActions()) -``` - - - - -## Decode delegations - -The granted permissions object includes a `context` property that represents the encoded delegations. - -To create a redelegation, you must first decode these delegations to access the -underlying delegations. To decode the delegations, use the [`decodeDelegations`](../../reference/delegation/index.md#decodedelegations) utility function. - -```ts -import { decodeDelegations } from '@metamask/smart-accounts-kit/utils' - -const permissionContext = grantedPermissions[0].context - -const delegations = decodeDelegations(permissionContext) -const rootDelegation = delegations[0] -``` - -## Create a redelegation - -Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from dapp to a Swap agent. - -To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [`createDelegation`](../../reference/delegation/index.md#createdelegation). - -This example uses the [`erc20TransferAmount`](../delegation/use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing -dapp to delegate to a Swap agent the ability to spend 5 USDC on user's behalf. - -:::note -When creating a redelegation, you can only narrow the scope of the original authority, not expand it. -::: - - - - -```typescript -import { sessionAccount, agentSmartAccount, tokenAddress } from './config.ts' -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const redelegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress, - // USDC has 6 decimal places. - maxAmount: parseUnits('5', 6), - }, - to: agentSmartAccount.address, - from: sessionAccount.address, - // Signed root delegation extracted from Advanced Permissions. - parentDelegation: rootDelegation, - environment: sessionAccount.environment, -}) - -const signedRedelegation = await sessionAccount.signDelegation({ delegation: redelegation }) -``` - - - - -```typescript -// Update the existing config to create a smart account for a Swap agent. - -const agentAccount = privateKeyToAccount('0x...') - -export const agentSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [agentAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: agentAccount }, -}) -``` - - - - -### Limit redelegation using caveats - -When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) to narrow the Swap agent's authority. For example, you can limit the authority so Swap agent can use the delegation only once. - -To apply caveats, create the `Delegation` object and use [`createCaveatBuilder`](../../reference/delegation/index.md#createcaveatbuilder). -Use [`hashDelegation`](../../reference/delegation/index.md#hashdelegation) to get the delegation hash, then provide it as the `authority` field. - -This example uses the [`limitedCalls`](../../reference/delegation/caveats.md#limitedcalls) caveat with a limit of `1`. - -```ts -// Use the config from previous step. -import { sessionAccount, agentSmartAccount, tokenAddress } from './config.ts' -import { CaveatType } from '@metamask/smart-accounts-kit' -import { createCaveatBuilder, hashDelegation } from '@metamask/smart-accounts-kit/utils' - -const caveatBuilder = createCaveatBuilder(sessionAccount.environment) - -const caveats = caveatBuilder.addCaveat(CaveatType.LimitedCalls, { limit: 1 }) - -const redelegation: Delegation = { - delegate: sessionAccount.address, - delegator: agentSmartAccount.address, - authority: hashDelegation(rootDelegation), - caveats: caveats.build(), - salt: '0x', -} - -const signedRedelegation = await sessionAccount.signDelegation({ delegation: redelegation }) -``` diff --git a/gator_versioned_docs/version-1.1.0/guides/configure-toolkit.md b/gator_versioned_docs/version-1.1.0/guides/configure-toolkit.md deleted file mode 100644 index 1f37d479e7d..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/configure-toolkit.md +++ /dev/null @@ -1,265 +0,0 @@ ---- -description: Learn how to configure the bundler client, paymaster client, and toolkit environment. -sidebar_label: Configure the toolkit -keywords: [configure, smart accounts kit, bundler, paymaster, smart accounts environment] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Configure the Smart Accounts Kit - -The Smart Accounts Kit is highly configurable, providing support for custom [bundlers and paymasters](#configure-the-bundler). -You can also configure the [toolkit environment](#optional-configure-the-toolkit-environment) to interact with the [Delegation Framework](../concepts/delegation/overview.md#delegation-framework). - -## Prerequisites - -[Install and set up the Smart Accounts Kit.](../get-started/install.md) - -## Configure the bundler - -The toolkit uses Viem's Account Abstraction API to configure custom bundlers and paymasters. -This provides a robust and flexible foundation for creating and managing [MetaMask Smart Accounts](../concepts/smart-accounts.md). -See Viem's [account abstraction documentation](https://viem.sh/account-abstraction) for more information on the API's features, methods, and best practices. - -To use the bundler and paymaster clients with the toolkit, create instances of these clients and configure them as follows: - -```typescript -import { createPaymasterClient, createBundlerClient } from 'viem/account-abstraction' -import { http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -// Replace these URLs with your actual bundler and paymaster endpoints. -const bundlerUrl = 'https://your-bundler-url.com' -const paymasterUrl = 'https://your-paymaster-url.com' - -// The paymaster is optional. -const paymasterClient = createPaymasterClient({ - transport: http(paymasterUrl), -}) - -const bundlerClient = createBundlerClient({ - transport: http(bundlerUrl), - paymaster: paymasterClient, - chain, -}) -``` - -Replace the bundler and paymaster URLs with your bundler and paymaster endpoints. -For example, you can use endpoints from [Pimlico](https://docs.pimlico.io/references/bundler), [Infura](https://docs.infura.io/), or [ZeroDev](https://docs.zerodev.app/meta-infra/intro). - -:::note -Providing a paymaster is optional when configuring your bundler client. However, if you choose not to use a paymaster, the smart contract account must have enough funds to pay gas fees. -::: - -## (Optional) Configure the toolkit environment - -The toolkit environment (`SmartAccountsEnvironment`) defines the contract addresses necessary for interacting with the [Delegation Framework](../concepts/delegation/overview.md#delegation-framework) on a specific network. -It serves several key purposes: - -- It provides a centralized configuration for all the contract addresses required by the Delegation Framework. -- It enables easy switching between different networks (for example, Mainnet and testnet) or custom deployments. -- It ensures consistency across different parts of the application that interact with the Delegation Framework. - -### Resolve the environment - -When you create a [MetaMask smart account](../concepts/smart-accounts.md), the toolkit automatically -resolves the environment based on the version it requires and the chain configured. -If no environment is found for the specified chain, it throws an error. - - - - -```typescript -import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { delegatorSmartAccount } from './config.ts' - -const environment: SmartAccountsEnvironment = delegatorSmartAccount.environment -``` - - - - -```typescript -import { - Implementation, - toMetaMaskSmartAccount, -} from "@metamask/smart-accounts-kit"; -import { privateKeyToAccount } from "viem/accounts"; -import { createPublicClient, http } from "viem"; -import { sepolia as chain } from "viem/chains"; - -const publicClient = createPublicClient({ - chain, - transport: http(), -}); - -const delegatorAccount = privateKeyToAccount("0x..."); - -const delegatorSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: "0x", - signer: { account: delegatorAccount }, -}); - -export delegatorSmartAccount; -``` - - - - -:::note -See the changelog of the toolkit version you are using (in the left sidebar) for supported chains. -::: - -Alternatively, you can use the [`getSmartAccountsEnvironment`](../reference/delegation/index.md#getsmartaccountsenvironment) function to resolve the environment. -This function is especially useful if your delegator is not a smart account when -creating a [redelegation](../concepts/delegation/overview.md#delegation-types). - -```typescript -import { getSmartAccountsEnvironment, SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' - -// Resolves the SmartAccountsEnvironment for Sepolia -const environment: SmartAccountsEnvironment = getSmartAccountsEnvironment(sepolia.id) -``` - -### Deploy a custom environment - -You can deploy the contracts using any method, but the toolkit provides a convenient [`deploySmartAccountsEnvironment`](../reference/delegation/index.md#deploysmartaccountsenvironment) function. This function simplifies deploying the Delegation Framework contracts to your desired EVM chain. - -This function requires a Viem [Public Client](https://viem.sh/docs/clients/public), [Wallet Client](https://viem.sh/docs/clients/wallet), and [Chain](https://viem.sh/docs/glossary/types#chain) -to deploy the contracts and resolve the `SmartAccountsEnvironment`. - -Your wallet must have a sufficient native token balance to deploy the contracts. - - - - -```typescript -import { walletClient, publicClient } from './config.ts' -import { sepolia as chain } from 'viem/chains' -import { deploySmartAccountsEnvironment } from '@metamask/smart-accounts-kit/utils' - -const environment = await deploySmartAccountsEnvironment(walletClient, publicClient, chain) -``` - - - - -```typescript -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { http, createWalletClient, createPublicClient } from 'viem' - -// Your deployer wallet private key. -const privateKey = '0x123..' -const account = privateKeyToAccount(privateKey) - -export const walletClient = createWalletClient({ - account, - chain, - transport: http(), -}) - -export const publicClient = createPublicClient({ - transport: http(), - chain, -}) -``` - - - - -You can also override specific contracts when calling `deploySmartAccountsEnvironment`. -For example, if you've already deployed the `EntryPoint` contract on the target chain, you can pass the contract address to the function. - -```typescript -// The config.ts is the same as in the previous example. -import { walletClient, publicClient } from "./config.ts"; -import { sepolia as chain } from "viem/chains"; -import { deploySmartAccountsEnvironment } from "@metamask/smart-accounts-kit/utils"; - -const environment = await deploySmartAccountsEnvironment( - walletClient, - publicClient, - chain, - // add-start -+ { -+ EntryPoint: "0x0000000071727De22E5E9d8BAf0edAc6f37da032" -+ } - // add-end -); -``` - -Once the contracts are deployed, you can use them to override the environment. - -### Override the environment - -To override the environment, the toolkit provides an [`overrideDeployedEnvironment`](../reference/delegation/index.md#overridedeployedenvironment) function to resolve -`SmartAccountsEnvironment` with specified contracts for the given chain and contract version. - -```typescript -// The config.ts is the same as in the previous example. -import { walletClient, publicClient } from './config.ts' -import { sepolia as chain } from 'viem/chains' -import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { - overrideDeployedEnvironment, - deploySmartAccountsEnvironment, -} from '@metamask/smart-accounts-kit' - -const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( - walletClient, - publicClient, - chain -) - -overrideDeployedEnvironment(chain.id, '1.3.0', environment) -``` - -If you've already deployed the contracts using a different method, you can create a `SmartAccountsEnvironment` instance with the required contract addresses, and pass it to the function. - -```typescript -// remove-start -- import { walletClient, publicClient } from "./config.ts"; -- import { sepolia as chain } from "viem/chains"; -// remove-end -import { SmartAccountsEnvironment } from "@metamask/smart-accounts-kit"; -import { - overrideDeployedEnvironment, - // remove-next-line -- deploySmartAccountsEnvironment -} from "@metamask/smart-accounts-kit"; - -// remove-start -- const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( -- walletClient, -- publicClient, -- chain -- ); -// remove-end - -// add-start -+ const environment: SmartAccountsEnvironment = { -+ SimpleFactory: "0x124..", -+ // ... -+ implementations: { -+ // ... -+ }, -+ }; -// add-end - -overrideDeployedEnvironment( - chain.id, - "1.3.0", - environment -); -``` - -:::note -Make sure to specify the Delegation Framework version required by the toolkit. -See the changelog of the toolkit version you are using (in the left sidebar) for its required Framework version. -::: diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/check-delegation-state.md b/gator_versioned_docs/version-1.1.0/guides/delegation/check-delegation-state.md deleted file mode 100644 index 8642d9b5cd0..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/check-delegation-state.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -description: Learn how to check the delegation state. -sidebar_label: Check the delegation state -toc_max_heading_level: 3 -keywords: [delegation, state, caveat enforcer, delegation scope] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Check the delegation state - -When using [spending limit delegation scopes](use-delegation-scopes/spending-limit.md) or relevant [caveat enforcers](../../reference/delegation/caveats.md), -you might need to check the remaining transferrable amount in a delegation. -For example, if a delegation allows a user to spend 10 USDC per week and they have already spent 10 - n USDC in the current period, -you can determine how much of the allowance is still available for transfer. - -Use the `CaveatEnforcerClient` to check the available balances for specific scopes or caveats. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a delegator account.](execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) -- [Create a delegate account.](execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) -- [Create a delegation with an ERC-20 periodic scope.](use-delegation-scopes/spending-limit.md#erc-20-periodic-scope) - -## Create a `CaveatEnforcerClient` - -To check the delegation state, create a [`CaveatEnforcerClient`](../../reference/delegation/caveat-enforcer-client.md). -This client allows you to interact with the caveat enforcers of the delegation, and read the required state. - - - - -```typescript -import { environment, publicClient as client } from './config.ts' -import { createCaveatEnforcerClient } from '@metamask/smart-accounts-kit' - -const caveatEnforcerClient = createCaveatEnforcerClient({ - environment, - client, -}) -``` - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { createPublicClient, http } from 'viem' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -export const environment = getSmartAccountsEnvironment(chain.id) - -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - - - - -## Read the caveat enforcer state - -This example uses the [`getErc20PeriodTransferEnforcerAvailableAmount`](../../reference/delegation/caveat-enforcer-client.md#geterc20periodtransferenforceravailableamount) method to read the state and retrieve the remaining amount for the current transfer period. - - - - -```typescript -import { delegation } from './config.ts' - -// Returns the available amount for current period. -const { availableAmount } = - await caveatEnforcerClient.getErc20PeriodTransferEnforcerAvailableAmount({ - delegation, - }) -``` - - - - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -// startDate should be in seconds. -const startDate = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20PeriodTransfer, - tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - periodAmount: parseUnits('10', 6), - periodDuration: 86400, - startDate, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - - - - -## Next steps - -See the [Caveat Enforcer Client reference](../../reference/delegation/caveat-enforcer-client.md) for the full list of available methods. diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/create-redelegation.md b/gator_versioned_docs/version-1.1.0/guides/delegation/create-redelegation.md deleted file mode 100644 index 5001df971a5..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/create-redelegation.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -description: Learn how to create a redelegation. -sidebar_label: Create a redelegation -toc_max_heading_level: 3 -keywords: [delegation, state, caveat enforcer, delegation scope, redelegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Create a redelegation - -Redelegation is a core feature that sets delegations apart from other permission sharing frameworks. -It allows a delegate to create a delegation chain, passing on the same or reduced level of authority -from the root delegator. - -For example, if Alice grants Bob permission to spend 10 USDC on her behalf, Bob can further grant Carol -permission to spend up to 5 USDC on Alice's behalf-that is, Bob can redelegate. This creates a delegation -chain where the root permissions are reshared with additional parties. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Learn how to create a delegation.](execute-on-smart-accounts-behalf.md) - -## Create a delegation - -Create a [root delegation](../../concepts/delegation/overview.md#root-delegation) from Alice to Bob. - -This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing -Alice to delegate to Bob the ability to spend 10 USDC on her behalf. - - - - -```typescript -import { aliceSmartAccount, bobSmartAccount } from './config.ts' -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // USDC has 6 decimal places. - maxAmount: parseUnits('10', 6), - }, - to: bobSmartAccount.address, - from: aliceSmartAccount.address, - environment: aliceSmartAccount.environment, -}) - -const signedDelegation = aliceSmartAccount.signDelegation({ delegation }) -``` - - - - -```typescript -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { privateKeyToAccount } from 'viem/accounts' -import { createPublicClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const aliceAccount = privateKeyToAccount('0x...') -const bobAccount = privateKeyToAccount('0x...') - -export const aliceSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [aliceAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: aliceAccount }, -}) - -export const bobSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [bobAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: bobAccount }, -}) -``` - - - - -## Create a redelegation - -Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from Bob to Carol. When creating a redelegation, you can only narrow the scope of the original authority, not expand it. - -To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [createDelegation](../../reference/delegation/index.md#createdelegation). -This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing -Bob to delegate to Carol the ability to spend 5 USDC on Alice's behalf. - - - - -```typescript -import { bobSmartAccount, carolSmartAccount } from './config.ts' -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const redelegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // USDC has 6 decimal places. - maxAmount: parseUnits('5', 6), - }, - to: carolSmartAccount.address, - from: bobSmartAccount.address, - // Signed root delegation from previous step. - parentDelegation: signedDelegation, - environment: bobSmartAccount.environment, -}) - -const signedRedelegation = bobSmartAccount.signDelegation({ delegation: redelegation }) -``` - - - - -```typescript -// Update the existing config to create a smart account for Carol. - -const carolAccount = privateKeyToAccount('0x...') - -export const carolSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [carolAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: carolAccount }, -}) -``` - - - - -### Limit redelegation using caveats - -When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) to narrow the Carol's authority. For example, you can limit the authority so Carol can use the delegation only once. - -To apply caveats, create the `Delegation` object and use [`createCaveatBuilder`](../../reference/delegation/index.md#createcaveatbuilder). Use [`hashDelegation`](../../reference/delegation/index.md#hashdelegation) to get the delegation hash, then provide it as the `authority` field. - -This example uses the [`limitedCalls`](../../reference/delegation/caveats.md#limitedcalls) caveat with a limit of `1`. - -```ts -// Use the config from previous step. -import { bobSmartAccount, carolSmartAccount } from './config.ts' -import { CaveatType } from '@metamask/smart-accounts-kit' -import { createCaveatBuilder, hashDelegation } from '@metamask/smart-accounts-kit/utils' - -const caveatBuilder = createCaveatBuilder(bobSmartAccount.environment) - -const caveats = caveatBuilder.addCaveat(CaveatType.LimitedCalls, { limit: 1 }) - -const redelegation: Delegation = { - delegate: carolSmartAccount.address, - delegator: bobSmartAccount.address, - authority: hashDelegation(rootDelegation), - caveats: caveats.build(), - salt: '0x', -} - -const signedRedelegation = await bobSmartAccount.signDelegation({ delegation: redelegation }) -``` - -## Next steps - -See [how to disable a delegation](disable-delegation.md) to revoke permissions. diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/execute-on-smart-accounts-behalf.md b/gator_versioned_docs/version-1.1.0/guides/delegation/execute-on-smart-accounts-behalf.md deleted file mode 100644 index 77769353951..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/execute-on-smart-accounts-behalf.md +++ /dev/null @@ -1,272 +0,0 @@ ---- -description: Use delegations to perform executions on a smart account's behalf. -sidebar_label: Execute on a smart account's behalf -keywords: [execution, smart account, create, redeem, delegation, delegator, delegate] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Perform executions on a smart account's behalf - -[Delegation](../../concepts/delegation/overview.md) is the ability for a [MetaMask smart account](../../concepts/smart-accounts.md) to grant permission to another account to perform executions on its behalf. - -In this guide, you'll create a delegator account (Alice) and a delegate account (Bob), and grant Bob permission to perform executions on Alice's behalf. -You'll complete the delegation lifecycle (create, sign, and redeem a delegation). - -## Prerequisites - -[Install and set up the Smart Accounts Kit.](../../get-started/install.md) - -## Steps - -### 1. Create a Public Client - -Create a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. -You will configure Alice's account (the delegator) and the Bundler Client with the Public Client, which you can use to query the signer's account state and interact with smart contracts. - -```typescript -import { createPublicClient, http } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - -### 2. Create a Bundler Client - -Create a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. -You can use the bundler service to estimate gas for user operations and submit transactions to the network. - -```typescript -import { createBundlerClient } from 'viem/account-abstraction' - -const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://your-bundler-rpc.com'), -}) -``` - -### 3. Create a delegator account - -Create an account to represent Alice, the delegator who will create a delegation. -The delegator must be a MetaMask smart account; use the toolkit's [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) method to create the delegator account. - -A Hybrid smart account is a flexible smart account implementation that supports both an externally owned account (EOA) owner and any number of P256 (passkey) signers. -This examples configures a [Hybrid smart account](../smart-accounts/create-smart-account.md#hybrid-smart-account) with an Account signer: - -```typescript -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { privateKeyToAccount } from 'viem/accounts' - -const delegatorAccount = privateKeyToAccount('0x...') - -const delegatorSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [delegatorAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegatorAccount }, -}) -``` - -:::note -See [how to configure other smart account types](../smart-accounts/create-smart-account.md). -::: - -### 4. Create a delegate account - -Create an account to represent Bob, the delegate who will receive the delegation. The delegate can be a smart account or an externally owned account (EOA): - - - - -```typescript -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { privateKeyToAccount } from 'viem/accounts' - -const delegateAccount = privateKeyToAccount('0x...') - -const delegateSmartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, // Hybrid smart account - deployParams: [delegateAccount.address, [], [], []], - deploySalt: '0x', - signer: { account: delegateAccount }, -}) -``` - - - - -```typescript -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { createWalletClient, http } from 'viem' - -const delegateAccount = privateKeyToAccount('0x...') - -export const delegateWalletClient = createWalletClient({ - account: delegateAccount, - chain, - transport: http(), -}) -``` - - - - -### 5. Create a delegation - -Create a [root delegation](../../concepts/delegation/overview.md#root-delegation) from Alice to Bob. -With a root delegation, Alice is delegating her own authority away, as opposed to _redelegating_ permissions she received from a previous delegation. - -Use the toolkit's [`createDelegation`](../../reference/delegation/index.md#createdelegation) method to create a root delegation. When creating -delegation, you need to configure the scope of the delegation to define the initial authority. - -This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing Alice to delegate to Bob the ability to spend her USDC, with a -specified limit on the total amount. - -:::warning Important - -Before creating a delegation, ensure that the delegator account (in this example, Alice's account) has been deployed. If the account is not deployed, redeeming the delegation will fail. - -::: - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - to: delegateSmartAccount.address, // This example uses a delegate smart account - from: delegatorSmartAccount.address, - environment: delegatorSmartAccount.environment, - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress, - // 10 USDC - maxAmount: parseUnits('10', 6), - }, -}) -``` - -### 6. Sign the delegation - -Sign the delegation with Alice's account, using the [`signDelegation`](../../reference/smart-account.md#signdelegation) method from `MetaMaskSmartAccount`. Alternatively, you can use the toolkit's [`signDelegation`](../../reference/delegation/index.md#signdelegation) utility method. Bob will later use the signed delegation to perform actions on Alice's behalf. - -```typescript -const signature = await delegatorSmartAccount.signDelegation({ - delegation, -}) - -const signedDelegation = { - ...delegation, - signature, -} -``` - -### 7. Redeem the delegation - -Bob can now redeem the delegation. The redeem transaction is sent to the `DelegationManager` contract, which validates the delegation and executes actions on Alice's behalf. - -To prepare the calldata for the redeem transaction, use the [`redeemDelegations`](../../reference/delegation/index.md#redeemdelegations) method from `DelegationManager`. -Since Bob is redeeming a single delegation chain, use the [`SingleDefault`](../../concepts/delegation/delegation-manager.md#execution-modes) execution mode. - -Bob can redeem the delegation by submitting a user operation if his account is a smart account, or a regular transaction if his account is an EOA. In this example, Bob transfers 1 USDC from Alice's account to his own. - - - - -```typescript -import { createExecution, ExecutionMode } from '@metamask/smart-accounts-kit' -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' -import { zeroAddress } from 'viem' -import { callData } from './config.ts' - -const delegations = [signedDelegation] - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const executions = [createExecution({ target: tokenAddress, callData })] - -const redeemDelegationCalldata = DelegationManager.encode.redeemDelegations({ - delegations: [delegations], - modes: [ExecutionMode.SingleDefault], - executions: [executions], -}) - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: delegateSmartAccount, - calls: [ - { - to: delegateSmartAccount.address, - data: redeemDelegationCalldata, - }, - ], - maxFeePerGas: 1n, - maxPriorityFeePerGas: 1n, -}) -``` - - - - -```typescript -import { - createExecution, - getSmartAccountsEnvironment, - ExecutionMode, -} from '@metamask/smart-accounts-kit' -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' -import { zeroAddress } from 'viem' -import { callData } from './config.ts' - -const delegations = [signedDelegation] - -// USDC address on Ethereum Sepolia. -const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const executions = [createExecution({ target: tokenAddress, callData })] - -const redeemDelegationCalldata = DelegationManager.encode.redeemDelegations({ - delegations: [delegations], - modes: [ExecutionMode.SingleDefault], - executions: [executions], -}) - -const transactionHash = await delegateWalletClient.sendTransaction({ - to: getSmartAccountsEnvironment(chain.id).DelegationManager, - data: redeemDelegationCalldata, - chain, -}) -``` - - - - - -```typescript -import { encodeFunctionData, erc20Abi, parseUnits } from 'viem' - -// calldata to transfer 1 USDC to delegate address. -export const callData = encodeFunctionData({ - abi: erc20Abi, - args: [delegateSmartAccount.address, parseUnits('1', 6)], - functionName: 'transfer', -}) -``` - - - - -## Next steps - -- See [how to configure different scopes](use-delegation-scopes/index.md) to define the initial authority of a delegation. -- See [how to further refine the authority of a delegation](use-delegation-scopes/constrain-scope.md) using caveat enforcers. -- See [how to disable a delegation](disable-delegation.md) to revoke permissions. diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/index.md b/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/index.md deleted file mode 100644 index f0d91efb030..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/index.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: Learn how to use the delegation scopes. -keywords: [delegation scope, delegation, restrict, authority] ---- - -# Use delegation scopes - -When [creating a delegation](../execute-on-smart-accounts-behalf.md), you must configure a scope to define the delegation's initial authority and help prevent delegation misuse. -You can further constrain this initial authority by [adding caveats to a delegation](constrain-scope.md). - -The Smart Accounts Kit currently supports three categories of scopes: - -| Scope type | Description | -| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| [Spending limit scopes](spending-limit.md) | Restricts the spending of native, ERC-20, and ERC-721 tokens based on defined conditions. | -| [Function call scope](function-call.md) | Restricts the delegation to specific contract methods, contract addresses, or calldata. | -| [Ownership transfer scope](ownership-transfer.md) | Restricts the delegation to only allow ownership transfers, specifically the `transferOwnership` function for a specified contract. | diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/ownership-transfer.md b/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/ownership-transfer.md deleted file mode 100644 index a2381eba6b9..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/ownership-transfer.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -description: Learn how to use the ownership transfer scope for a delegation. -keywords: [delegation scope, ownership transfer, restrict, delegation] ---- - -# Use the ownership transfer scope - -The ownership transfer scope restricts a delegation to ownership transfer calls only. -For example, Alice has deployed a smart contract, and she delegates to Bob the ability to transfer ownership of that contract. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) -- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) -- [Create a delegator account.](../execute-on-smart-accounts-behalf.md#3-create-a-delegator-account) -- [Create a delegate account.](../execute-on-smart-accounts-behalf.md#4-create-a-delegate-account) - -## Ownership transfer scope - -This scope requires a `contractAddress`, which represents the address of the deployed contract. - -Internally, this scope uses the [`ownershipTransfer`](../../../reference/delegation/caveats.md#ownershiptransfer) caveat enforcer. -See the [ownership transfer scope reference](../../../reference/delegation/delegation-scopes.md#ownership-transfer-scope) for more details. - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' - -const contractAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' - -const delegation = createDelegation({ - scope: { - type: ScopeType.OwnershipTransfer, - contractAddress, - }, - to: delegateAccount, - from: delegatorAccount, - environment: delegatorAccount.environment, -}) -``` - -## Next steps - -See [how to further constrain the authority of a delegation](constrain-scope.md) using caveat enforcers. diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/create-smart-account.md b/gator_versioned_docs/version-1.1.0/guides/smart-accounts/create-smart-account.md deleted file mode 100644 index 5f79d6b8364..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/create-smart-account.md +++ /dev/null @@ -1,220 +0,0 @@ ---- -description: Learn how to create a MetaMask smart account using Smart Accounts Kit. -keywords: [create, smart account, signer, hybrid, multisig, 7702] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Create a smart account - -You can enable users to create a [MetaMask smart account](../../concepts/smart-accounts.md) directly -in your dapp. Use [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) -to create different types of smart accounts with different signature schemes. - -## Prerequisites - -[Install and set up the Smart Accounts Kit.](../../get-started/install.md) - -## Hybrid smart account - -A [Hybrid smart account](../../concepts/smart-accounts.md#hybrid-smart-account) supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers. - -This example uses `toMetaMaskSmartAccount` and Viem's [Wallet Client](https://viem.sh/docs/clients/wallet) -to create a Hybrid smart account. The `signer` parameter also accepts Viem's [Local Account](https://viem.sh/docs/accounts/local) and [WebAuthnAccount](https://viem.sh/account-abstraction/accounts/webauthn#webauthn-account). - -See the [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) API reference for more information. - - - - -```typescript -import { publicClient } from './client.ts' -import { walletClient } from './signer.ts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -// Some wallets like MetaMask may require you to request access to -// account addresses using walletClient.requestAddresses() first. -const [address] = await walletClient.getAddresses() - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [address, [], [], []], - deploySalt: '0x', - signer: { walletClient }, -}) -``` - - - - - -```typescript -import { http, createPublicClient } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const transport = http() -export const publicClient = createPublicClient({ - transport, - chain, -}) -``` - - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { createWalletClient, custom } from 'viem' - -export const walletClient = createWalletClient({ - chain, - transport: custom(window.ethereum!), -}) -``` - - - - -## Multisig smart account - -A [Multisig smart account](../../concepts/smart-accounts.md#multisig-smart-account) supports multiple EOA signers with a configurable threshold for execution. - -This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) to create a -Multisig smart account with a combination of account signers and Wallet Client signers. - - - - -```typescript -import { publicClient } from './client.ts' -import { account, walletClient } from './signers.ts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const owners = [account.address, walletClient.address] -const signer = [{ account }, { walletClient }] -const threshold = 2n - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.MultiSig, - deployParams: [owners, threshold], - deploySalt: '0x', - signer, -}) -``` - - - - - -```typescript -import { http, createPublicClient } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const transport = http() -export const publicClient = createPublicClient({ - transport, - chain, -}) -``` - - - - - -```typescript -import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { http, createWalletClient } from 'viem' - -// This private key will be used to generate the first signer. -const privateKey = generatePrivateKey() -export const account = privateKeyToAccount(privateKey) - -// This private key will be used to generate the second signer. -const walletClientPrivateKey = generatePrivateKey() -const walletClientAccount = privateKeyToAccount(walletClientPrivateKey) - -export const walletClient = createWalletClient({ - account: walletClientAccount, - chain, - transport: http(), -}) -``` - - - - -:::note -The number of signers must be at least equal to the threshold to generate a valid signature. -::: - -## EIP-7702 smart account - -An [EIP-7702 smart account](../../concepts/smart-accounts.md#stateless-7702-smart-account) represents an EOA that has been upgraded -to support MetaMask Smart Accounts functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). - -This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) -and Viem's [`privateKeyToAccount`](https://viem.sh/docs/accounts/local/privateKeyToAccount) to -create an EIP-7702 smart account. This example doesn't handle the upgrade process; see the -[EIP-7702 quickstart](../../get-started/smart-account-quickstart/eip7702.md) to learn how to upgrade. - -:::note Important -The EIP-7702 implementation only works with Viem's [Local Accounts](https://viem.sh/docs/accounts/local). It doesn't work with a [JSON-RPC Account](https://viem.sh/docs/accounts/jsonRpc) like MetaMask. - -See the [Upgrade a MetaMask EOA to a smart account](https://docs.metamask.io/tutorials/upgrade-eoa-to-smart-account/) tutorial. -::: - - - - -```typescript -import { publicClient } from './client.ts' -import { account } from './signer.ts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Stateless7702, - address: account.address, - signer: { account }, -}) -``` - - - - - -```typescript -import { http, createPublicClient } from 'viem' -import { sepolia as chain } from 'viem/chains' - -const transport = http() -export const publicClient = createPublicClient({ - transport, - chain, -}) -``` - - - - - -```typescript -import { privateKeyToAccount, generatePrivateKey } from 'viem/accounts' - -const privateKey = generatePrivateKey() -export const account = privateKeyToAccount(privateKey) -``` - - - - -## Next steps - -- [Configure signers](./signers/index.md) to use a signer that fits your needs. -- [Deploy the smart account](deploy-smart-account.md) and [send user operations](send-user-operation.md) using [Viem Account Abstraction clients](../configure-toolkit.md). -- [Create delegations](../delegation/execute-on-smart-accounts-behalf.md) to grant scoped permissions to other accounts. diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-gasless-transaction.md b/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-gasless-transaction.md deleted file mode 100644 index d3f295d0df0..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-gasless-transaction.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -description: Learn how to send a gasless transaction -keywords: [send, gasless transaction, smart account, sponsor, paymaster] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Send a gasless transaction - -MetaMask Smart Accounts support gas sponsorship, which simplifies onboarding by abstracting gas fees away from end users. -You can use any paymaster service provider, such as [Pimlico](https://docs.pimlico.io/references/paymaster) or [ZeroDev](https://docs.zerodev.app/meta-infra/rpcs), or plug in your own custom paymaster. - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a MetaMask smart account.](create-smart-account.md) - -## Send a gasless transaction - -The following example demonstrates how to use Viem's [Paymaster Client](https://viem.sh/account-abstraction/clients/paymaster) to send gasless transactions. -You can provide the paymaster client using the paymaster property in the [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation#paymaster-optional) method, or in the [Bundler Client](https://viem.sh/account-abstraction/clients/bundler#paymaster-optional). - -In this example, the paymaster client is passed to the `sendUserOperation` method. - - - - -```typescript -import { bundlerClient, smartAccount, paymasterClient } from './config.ts' -import { parseEther } from 'viem' - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: '0x1234567890123456789012345678901234567890', - value: parseEther('0.001'), - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, - paymaster: paymasterClient, -}) -``` - - - - - -```typescript -import { createPublicClient, createPaymasterClient, http } from 'viem' -import { createBundlerClient } from 'viem/account-abstraction' -import { sepolia as chain } from 'viem/chains' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = generatePrivateKey() -const account = privateKeyToAccount(privateKey) - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), -}) - -export const paymasterClient = createPaymasterClient({ - // You can use the paymaster of your choice - transport: http('https://api.pimlico.io/v2/11155111/rpc?apikey='), -}) -``` - - - diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-user-operation.md b/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-user-operation.md deleted file mode 100644 index 93bf2623dd0..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/send-user-operation.md +++ /dev/null @@ -1,185 +0,0 @@ ---- -description: Learn how to send an ERC-4337 user operation using Viem. -keywords: [ERC-4337, send, user operation, smart account] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Send a user operation - -User operations are the [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) counterpart to traditional blockchain transactions. -They incorporate significant enhancements that improve user experience and provide greater -flexibility in account management and transaction execution. - -Viem's Account Abstraction API allows a developer to specify an array of `Calls` that will be executed as a user operation via Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. -The MetaMask Smart Accounts Kit encodes and executes the provided calls. - -User operations are not directly sent to the network. -Instead, they are sent to a bundler, which validates, optimizes, and aggregates them before network submission. -See [Viem's Bundler Client](https://viem.sh/account-abstraction/clients/bundler) for details on how to interact with the bundler. - -:::note -If a user operation is sent from a MetaMask smart account that has not been deployed, the toolkit configures the user operation to automatically deploy the account. -::: - -## Prerequisites - -- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Create a MetaMask smart account.](create-smart-account.md) - -## Send a user operation - -The following is a simplified example of sending a user operation using Viem Core SDK. Viem Core SDK offers more granular control for developers who require it. - -In the example, a user operation is created with the necessary gas limits. - -This user operation is passed to a bundler instance, and the `EntryPoint` address is retrieved from the client. - - - - -```typescript -import { bundlerClient, smartAccount } from './config.ts' -import { parseEther } from 'viem' - -// Appropriate fee per gas must be determined for the specific bundler being used. -const maxFeePerGas = 1n -const maxPriorityFeePerGas = 1n - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: '0x1234567890123456789012345678901234567890', - value: parseEther('0.001'), - }, - ], - maxFeePerGas, - maxPriorityFeePerGas, -}) -``` - - - - - -```typescript -import { createPublicClient, http } from 'viem' -import { createBundlerClient } from 'viem/account-abstraction' -import { sepolia as chain } from 'viem/chains' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' - -const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -const privateKey = generatePrivateKey() -const account = privateKeyToAccount(privateKey) - -export const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const bundlerClient = createBundlerClient({ - client: publicClient, - transport: http('https://public.pimlico.io/v2/11155111/rpc'), -}) -``` - - - - -### Estimate fee per gas - -Different bundlers have different ways to estimate `maxFeePerGas` and `maxPriorityFeePerGas`, and can reject requests with insufficient values. -The following example updates the previous example to estimate the fees. - -This example uses constant values, but the [Hello Gator example](https://github.com/MetaMask/hello-gator) uses Pimlico's Alto bundler, -which fetches user operation gas price using the RPC method [`pimlico_getUserOperationPrice`](https://docs.pimlico.io/infra/bundler/endpoints/pimlico_getUserOperationGasPrice). - -:::info Installation required - -To estimate the gas fee for Pimlico's bundler, install the [permissionless.js SDK](https://docs.pimlico.io/references/permissionless/). - -::: - -```typescript title="example.ts" -// add-next-line -+ import { createPimlicoClient } from "permissionless/clients/pimlico"; -import { parseEther } from "viem"; -import { bundlerClient, smartAccount } from "./config.ts" // The config.ts is the same as in the previous example. - -// remove-start -- const maxFeePerGas = 1n; -- const maxPriorityFeePerGas = 1n; -// remove-end - -// add-start -+ const pimlicoClient = createPimlicoClient({ -+ transport: http("https://api.pimlico.io/v2/11155111/rpc?apikey="), // You can get the API Key from the Pimlico dashboard. -+ }); -+ -+ const { fast: fee } = await pimlicoClient.getUserOperationGasPrice(); -// add-end - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: "0x1234567890123456789012345678901234567890", - value: parseEther("1") - } - ], - // remove-start -- maxFeePerGas, -- maxPriorityFeePerGas - // remove-end - // add-next-line -+ ...fee -}); -``` - -### Wait for the transaction receipt - -After submitting the user operation, it's crucial to wait for the receipt to ensure that it has been successfully included in the blockchain. Use the `waitForUserOperationReceipt` method provided by the bundler client. - -```typescript title="example.ts" -import { createPimlicoClient } from "permissionless/clients/pimlico"; -import { bundlerClient, smartAccount } from "./config.ts" // The config.ts is the same as in the previous example. - -const pimlicoClient = createPimlicoClient({ - transport: http("https://api.pimlico.io/v2/11155111/rpc?apikey="), // You can get the API Key from the Pimlico dashboard. -}); - -const { fast: fee } = await pimlicoClient.getUserOperationGasPrice(); - -const userOperationHash = await bundlerClient.sendUserOperation({ - account: smartAccount, - calls: [ - { - to: "0x1234567890123456789012345678901234567890", - value: parseEther("1") - } - ], - ...fee -}); - -// add-start -+ const { receipt } = await bundlerClient.waitForUserOperationReceipt({ -+ hash: userOperationHash -+ }); -+ -+ console.log(receipt.transactionHash); -// add-end -``` - -## Next steps - -To sponsor gas for end users, see how to [send a gasless transaction](send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/eoa-wallets.md b/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/eoa-wallets.md deleted file mode 100644 index 4b6a8469ab3..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/eoa-wallets.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -description: Learn how to use Externally Owned Account (EOA) with MetaMask Smart Accounts. -sidebar_label: EOA (e.g. MetaMask) -keywords: [metamask, smart account, signer, metamask smart account] ---- - -# Use an EOA with MetaMask Smart Accounts - -Externally owned accounts (EOAs) are accounts controlled by a user's private key (paired with a public address) and are typically accessed through wallet apps like MetaMask. MetaMask Smart Accounts is signer-agnostic, so -you can use an EOA as the signer. - -:::info -This guide supports React and React-based frameworks. For Vue, see [Wagmi docs](https://wagmi.sh/vue/getting-started). -::: - -## Prerequisites - -- Install [Node.js](https://nodejs.org/en/blog/release/v18.18.0) v18 or later. -- Install [Yarn](https://yarnpkg.com/), - [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), or another package manager. - -## Steps - -### 1. Install dependencies - -Install the [Smart Accounts Kit](https://www.npmjs.com/package/@metamask/smart-accounts-kit) and other dependencies in your project: - -```bash npm2yarn -npm install @metamask/smart-accounts-kit wagmi @tanstack/react-query viem -``` - -### 2. Create the App provider - -Once you've created the `AppProvider`, wrap it at the root of your application so -that the rest of your application has access to the Wagmi's and TanStack's context. -This will allow every component inside the provider to use the Wagmi hooks. - -For the advance configuration, see [Wagmi's createConfig API reference](https://wagmi.sh/react/api/createConfig). - - - - -```ts -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { ReactNode } from "react"; -import { WagmiProvider } from 'wagmi' -import { config } from "./config.ts"; - -const queryClient = new QueryClient(); - -export function AppProvider({ children }: { children: ReactNode }) { - return ( - - - {children} - - - ); -} -``` - - - - - -```ts -import { createConfig, http } from 'wagmi' -import { sepolia } from 'viem/chains' - -export const config = createConfig({ - chains: [sepolia], - transports: { - [sepolia.id]: http(), - }, -}) -``` - - - - -### 3. Create a smart account - -Once the user has connected their wallet, use the [Wallet Client](https://viem.sh/docs/clients/wallet) from Wagmi as the signer to create a -MetaMask smart account. - -```ts -import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' -import { useAccount, usePublicClient, useWalletClient } from 'wagmi' - -const { address } = useAccount() -const publicClient = usePublicClient() -const { data: walletClient } = useWalletClient() - -// Additional check to make sure the EOA wallet is connected -// and values are available. -if (!address || !walletClient || !publicClient) { - // Handle the error case -} - -const smartAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [address, [], [], []], - deploySalt: '0x', - signer: { walletClient }, -}) -``` - -## Next steps - -- See how to use [MetaMask Embedded Wallets as a signer](./eoa-wallets.md) to make the user onboarding journey easier. -- See how to [send a user operation](../send-user-operation.md). -- To sponsor gas for end users, see how to [send a gasless transaction](../send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/index.md b/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/index.md deleted file mode 100644 index a833f88dbb3..00000000000 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -description: Learn how to configure signers for MetaMask Smart Accounts. -keywords: - [signers, metamask smart accounts, smart account, embedded wallets, web3auth, dynamic, privy] ---- - -import CardList from "@site/src/components/CardList" - -# Configure a signer - -When [creating a smart account](../create-smart-account.md), you must specify a signer. The signer owns the smart account and is responsible for -generating the signatures required to submit user operations. MetaMask Smart Accounts is signer-agnostic, allowing you -to use any signer you prefer, such as Embedded Wallets, passkeys, EOA wallets, or a custom signer. - -MetaMask Smart Accounts has a native integration with [MetaMask Embedded Wallets](/embedded-wallets/), making user onboarding easier. In addition to the native integration, you can use -third-party wallet providers as Privy, Dynamic, or Para as the signer for your smart account. - -See the following guides to learn how to configure different signers: - -## Recommended - - - -## Other signers - - diff --git a/gator_versioned_docs/version-1.1.0/index.mdx b/gator_versioned_docs/version-1.1.0/index.mdx deleted file mode 100644 index 45a3ae99948..00000000000 --- a/gator_versioned_docs/version-1.1.0/index.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: MetaMask Smart Accounts Kit introduction -sidebar_label: Introduction -description: High-level overview of MetaMask Smart Accounts Kit. -keywords: [MetaMask, smart accounts kit, smart accounts] ---- - -import CardList from '@site/src/components/CardList' - -# MetaMask Smart Accounts Kit - -The MetaMask Smart Accounts Kit enables developers to create new experiences based on programmable account behavior and granular permission sharing. -It offers a suite of contracts, libraries, and services designed for maximum composability, allowing developers to build and extend their dapps with ease. - -## Build on MetaMask Smart Accounts - -The toolkit enables embedding [MetaMask Smart Accounts](concepts/smart-accounts.md) into dapps. -Smart accounts support programmable account behavior and advanced features like delegated permissions, multi-signature approvals, and gas abstraction. - -[Delegation](concepts/delegation/overview.md) is a core feature of smart accounts, enabling secure, rule-based permission sharing. -Delegation is powered by the [Delegation Framework](https://github.com/metamask/delegation-framework), which defines how permissions are created, shared, and enforced. - - - -## Request Advanced Permissions (ERC-7715) - -The toolkit supports [Advanced Permissions (ERC-7715)](concepts/advanced-permissions.md), which are fine-grained permissions dapps can request from users directly via the MetaMask browser extension. -Advanced Permissions allow you to perform executions on the behalf of MetaMask users. - - - -## Partner integrations - -The Smart Accounts Kit is integrated with multiple ecosystem partners. -Check out the following documentation from these partners: - - diff --git a/gator_versioned_docs/version-1.1.0/reference/delegation/caveat-enforcer-client.md b/gator_versioned_docs/version-1.1.0/reference/delegation/caveat-enforcer-client.md deleted file mode 100644 index 0f824e85492..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/delegation/caveat-enforcer-client.md +++ /dev/null @@ -1,363 +0,0 @@ ---- -description: Caveat Enforcer Client API reference. -sidebar_label: Caveat Enforcer Client -toc_max_heading_level: 2 -keywords: [delegation state, caveat enforcer client, API, methods, reference] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Caveat Enforcer Client reference - -The following API methods are related to `CaveatEnforcerClient` used to [check the delegation state](../../guides/delegation/check-delegation-state.md). - -## `createCaveatEnforcerClient` - -Create a Viem Client extended with caveat enforcer actions. This client allows you to interact with the caveat enforcers of the -delegation, and read the required state. - -### Parameters - -| Name | Type | Required | Description | -| ------------- | ------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------ | -| `client` | `Client` | Yes | The Viem Client to interact with the caveat enforcer contracts and read their state. | -| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Environment to resolve the smart contracts for the current chain. | - -### Example - - - - -```typescript -import { environment, publicClient as client } from './config.ts' -import { createCaveatEnforcerClient } from '@metamask/smart-accounts-kit' - -const caveatEnforcerClient = createCaveatEnforcerClient({ - environment, - client, -}) -``` - - - - -```typescript -import { sepolia as chain } from 'viem/chains' -import { createPublicClient, http } from 'viem' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -export const environment = getSmartAccountsEnvironment(chain.id) - -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) -``` - - - - -## `getErc20PeriodTransferEnforcerAvailableAmount` - -Returns the available amount from the ERC-20 period transfer enforcer for the current period. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | - -### Example - - - - -```typescript -import { delegation } './config.ts' - -// Returns the available amount for current period. -const { availableAmount } = await caveatEnforcerClient.getErc20PeriodTransferEnforcerAvailableAmount({ - delegation, -}) -``` - - - - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -const environment = getSmartAccountsEnvironment(chain.id) - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20PeriodTransfer, - tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - periodAmount: parseUnits('10', 6), - periodDuration: 86400, - startDate, - }, - to: 'DELEGATE_ADDRESS', - from: 'DELEGATOR_ADDRESS', - environment, -}) -``` - - - - -## `getErc20StreamingEnforcerAvailableAmount` - -Returns the available amount from the ERC-20 streaming enforcer. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | - -### Example - - - - -```typescript -import { delegation } './config.ts' - -// Returns the available amount -const { availableAmount } = await caveatEnforcerClient.getErc20StreamingEnforcerAvailableAmount({ - delegation, -}) -``` - - - - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { parseUnits } from 'viem' - -const environment = getSmartAccountsEnvironment(chain.id) - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const startTime = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20Streaming, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - amountPerSecond: parseUnits('0.1', 6), - initialAmount: parseUnits('1', 6), - maxAmount: parseUnits('10', 6), - startTime, - }, - to: 'DELEGATE_ADDRESS', - from: 'DELEGATOR_ADDRESS', - environment, -}) -``` - - - - -## `getNativeTokenPeriodTransferEnforcerAvailableAmount` - -Returns the available amount from the native token period enforcer for the current period. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | - -### Example - - - - -```typescript -import { delegation } './config.ts' - -// Returns the available amount for current period. -const { availableAmount } = await caveatEnforcerClient.getNativeTokenPeriodTransferEnforcerAvailableAmount({ - delegation, -}) -``` - - - - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' -import { parseEther } from 'viem' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -const environment = getSmartAccountsEnvironment(chain.id) - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenPeriodTransfer, - periodAmount: parseEther('0.01'), - periodDuration: 86400, - startDate, - }, - to: 'DELEGATE_ADDRESS', - from: 'DELEGATOR_ADDRESS', - environment, -}) -``` - - - - -## `getNativeTokenStreamingEnforcerAvailableAmount` - -Returns the available amount from the native streaming enforcer. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------------------------------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object for which you want to check the available amount. | - -### Example - - - - -```typescript -import { delegation } './config.ts' - -// Returns the available amount -const { availableAmount } = await caveatEnforcerClient.getNativeTokenStreamingEnforcerAvailableAmount({ - delegation, -}) -``` - - - - -```typescript -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -const environment = getSmartAccountsEnvironment(chain.id) - -// Since current time is in seconds, we need to convert milliseconds to seconds. -const startTime = Math.floor(Date.now() / 1000) - -export const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenStreaming, - amountPerSecond: parseEther('0.001'), - initialAmount: parseEther('0.01'), - maxAmount: parseEther('0.1'), - startTime, - }, - to: 'DELEGATE_ADDRESS', - from: 'DELEGATOR_ADDRESS', - environment, -}) -``` - - - - -## `getMultiTokenPeriodEnforcerAvailableAmount` - -Returns the available amount from the multi token period transfer enforcer for the current period. You'll need to -encode the args for the token index you want to check the available amount. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ---------------------------------------------------------------------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation object with token index for which you want to check the available amount. | - -### Example - - - - -```typescript -import { delegation } './config.ts' - -// Encode the args for the multiTokenPeriod enforcer. -const args = encodePacked(['uint256'], [BigInt(0)]); - -// Ensure the index is correct when working with multiple enforcers. -delegation.caveats[0].args = args - -// Returns the available amount for the first token in the list. -const { availableAmount } = await caveatEnforcerClient.getMultiTokenPeriodEnforcerAvailableAmount({ - delegation, -}) -``` - - - - -```typescript -import { - createDelegation, - getSmartAccountsEnvironment, - ROOT_AUTHORITY, - CaveatType, -} from '@metamask/smart-accounts-kit' -import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' -import { sepolia as chain } from 'viem/chains' -import { parseUnits, parseEther } from 'viem' - -const environment = getSmartAccountsEnvironment(chain.id) -const caveatBuilder = createCaveatBuilder(environment) - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -const tokenConfigs = [ - { - token: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - // 1 token with 6 decimals. - periodAmount: parseUnits('1', 6), - // 1 day in seconds. - periodDuration: 86400, - startDate, - }, - { - // For native token use zeroAddress - token: zeroAddress, - // 0.01 ETH in wei. - periodAmount: parseEther('0.01'), - // 1 hour in seconds. - periodDuration: 3600, - startDate, - }, -] - -const caveats = caveatBuilder.addCaveat(CaveatType.MultiTokenPeriod, tokenConfigs) - -export const delegation: Delegation = { - delegate: 'DELEGATE_ADDRESS', - delegator: 'DELEGATOR_ADDRESS', - authority: ROOT_AUTHORITY, - caveats: caveats.build(), - salt: '0x', -} -``` - - - diff --git a/gator_versioned_docs/version-1.1.0/reference/delegation/caveats.md b/gator_versioned_docs/version-1.1.0/reference/delegation/caveats.md deleted file mode 100644 index 019f0ec27b9..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/delegation/caveats.md +++ /dev/null @@ -1,1021 +0,0 @@ ---- -description: Caveat enforcers reference. -sidebar_label: Caveats -toc_max_heading_level: 2 -keywords: [caveats, caveat enforcers, configuration, smart contracts, reference] ---- - -# Caveats reference - -When [constraining a delegation scope](../../guides/delegation/use-delegation-scopes/constrain-scope.md), you can specify the following caveat types. - -You can use either a string literal or the [`CaveatType`](../types.md#caveattype) enum to define the caveat type. - -## `allowedCalldata` - -Limits the calldata that is executed. - -You can use this caveat to enforce function parameters. -We strongly recommend using this caveat to validate static types and not dynamic types. -You can validate dynamic types through a series of `allowedCalldata` terms, but this is tedious and error-prone. - -Caveat enforcer contract: [`AllowedCalldataEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedCalldataEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------- | -------- | --------------------------------------------------------------------------------------------------------------- | -| `startIndex` | `number` | Yes | The index in the calldata byte array (including the 4-byte method selector) where the expected calldata starts. | -| `value` | `Hex` | Yes | The expected calldata that must match at the specified index. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const value = encodeAbiParameters( - [{ type: 'string' }, { type: 'uint256' }], - ['Hello Gator', 12345n] -) - -const caveats = [ - { - type: CaveatType.AllowedCalldata, - startIndex: 4, - value, - }, -] -``` - -:::note -This example uses Viem's [`encodeAbiParameters`](https://viem.sh/docs/abi/encodeAbiParameters) utility to encode the parameters as ABI-encoded hex strings. -::: - -## `allowedMethods` - -Limits what methods the delegate can call. - -Caveat enforcer contract: [`AllowedMethodsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedMethodsEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------- | ------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `selectors` | `MethodSelector[]` | Yes | The list of method selectors that the delegate is allowed to call. The selector value can be 4-byte hex string, ABI function signature, or ABI function object. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.AllowedMethods, - selectors: [ - // 4-byte Hex string. - '0xa9059cbb', - // ABI function signature. - 'transfer(address,uint256)', - // ABI function object. - { - name: 'transfer', - type: 'function', - inputs: [ - { name: 'recipient', type: 'address' }, - { name: 'amount', type: 'uint256' }, - ], - outputs: [], - stateMutability: 'nonpayable', - }, - ], - }, -] -``` - -:::note -This example adds the `transfer` function to the allowed methods in three different ways - as the 4-byte function selector, the ABI function signature, and the `ABIFunction` object. -::: - -## `allowedTargets` - -Limits what addresses the delegate can call. - -Caveat enforcer contract: [`AllowedTargetsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/AllowedTargetsEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| --------- | ----------- | -------- | ----------------------------------------------------------- | -| `targets` | `Address[]` | Yes | The list of addresses that the delegate is allowed to call. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.AllowedTargets, - targets: [ - '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - '0xB2880E3862f1024cAC05E66095148C0a9251718b', - ], - }, -] -``` - -## `argsEqualityCheck` - -Ensures that the `args` provided when redeeming the delegation are equal to the terms specified on the caveat. - -Caveat enforcer contract: [`ArgsEqualityCheckEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ArgsEqualityCheckEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------ | ----- | -------- | ------------------------------------------------------------------------ | -| `args` | `Hex` | Yes | The expected args that must match exactly when redeeming the delegation. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.ArgsEqualityCheck, - args: '0xf2bef872456302645b7c0bb59dcd96ffe6d4a844f311ebf95e7cf439c9393de2', - }, -] -``` - -## `blockNumber` - -Specifies a range of blocks through which the delegation will be valid. - -Caveat enforcer contract: [`BlockNumberEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/BlockNumberEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------- | -| `afterThreshold` | `bigint` | Yes | The block number after which the delegation is valid. Set the value to `0n` to disable this threshold. | -| `beforeThreshold` | `bigint` | Yes | The block number before which the delegation is valid. Set the value to `0n` to disable this threshold. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.BlockNumber, - afterThreshold: 19426587n, - beforeThreshold: 0n, - }, -] -``` - -## `deployed` - -Ensures a contract is deployed, and if not, deploys the contract. - -Caveat enforcer contract: [`DeployedEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/DeployedEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | ------------------------------------ | -| `contractAddress` | `Address` | Yes | The contract address. | -| `salt` | `Hex` | Yes | The salt to use with the deployment. | -| `bytecode` | `Hex` | Yes | The bytecode of the contract. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Deployed, - contractAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - salt: '0x0e3e8e2381fde0e8515ed47ec9caec8ba2bc12603bc2b36133fa3e3fa4d88587', - bytecode: '0x...', // The deploy bytecode for the contract at 0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92 - }, -] -``` - -## `erc1155BalanceChange` - -Ensures that the recipient's ERC-1155 token balance has changed within the allowed bounds—either increased by a minimum or decreased by a maximum specified amount. - -Caveat enforcer contract: [`ERC1155BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC1155BalanceChangeEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | ------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-1155 token contract address. | -| `recipient` | `Address` | Yes | The address on which the checks will be applied. | -| `tokenId` | `bigint` | Yes | The ID of the ERC-1155 token. | -| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | -| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-1155 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Erc1155BalanceChange, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - tokenId: 1n, - balance: 1000000n, - changeType: BalanceChangeType.Increase, - }, -] -``` - -## `erc20BalanceChange` - -Ensures that the recipient's ERC-20 token balance has changed within the allowed bounds—either increased by a minimum or decreased by a maximum specified amount. - -Caveat enforcer contract: [`ERC20BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20BalanceChangeEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract addres. | -| `recipient` | `Address` | Yes | The address on which the checks will be applied. | -| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | -| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-20 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Erc20BalanceChange, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - balance: 1000000n, - changeType: BalanceChangeType.Increase, - }, -] -``` - -## `erc20PeriodTransfer` - -Ensures that ERC-20 token transfers remain within a predefined limit during a -specified time window. At the start of each new period, the allowed transfer -amount resets. Any unused transfer allowance from the previous period does not -carry over and is forfeited. - -Caveat enforcer contract: [`ERC20PeriodTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20PeriodTransferEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ---------------- | --------- | -------- | ---------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -const caveats = [ - { - type: CaveatType.Erc20PeriodTransfer, - // Address of the ERC-20 token. - tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - // 1 ERC-20 token - 18 decimals, in wei. - periodAmount: 1000000000000000000n, - // 1 day in seconds. - periodDuration: 86400, - startDate, - }, -] -``` - -## `erc20Streaming` - -Enforces a linear streaming transfer limit for ERC-20 tokens. Block token access until the specified start timestamp. At the start timestamp, immediately release the specified initial amount. Afterward, accrue tokens linearly at the specified rate, up to the specified maximum. - -Caveat enforcer contract: [`ERC20StreamingEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20StreamingEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | --------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | -| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | Yes | The start timestamp in seconds. | - -### Example - -```typescript -import { CaveatType } from "@metamask/smart-accounts-kit"; - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000); - -const caveats = [{ - type: CaveatType.Erc20Streaming, - // Address of the ERC-20 token. - tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", - // 1 ERC-20 token - 18 decimals, in wei. - initialAmount: 1000000000000000000n, - // 10 ERC-20 token - 18 decimals, in wei. - maxAmount: 10000000000000000000n - // 0.00001 ERC-20 token - 18 decimals, in wei. - amountPerSecond: 10000000000000n, - startDate, -}]; -``` - -## `erc20TransferAmount` - -Limits the transfer of ERC-20 tokens. - -Caveat enforcer contract: [`ERC20TransferAmountEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC20TransferAmountEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | --------- | -------- | ----------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Erc20TransferAmount, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - // 1 ERC-20 token - 18 decimals, in wei. - maxAmount: 1000000000000000000n, - }, -] -``` - -## `erc721BalanceChange` - -Ensures that the recipient's ERC-721 token balance has changed within the allowed bounds—either increased by a minimum or decreased by a maximum specified amount. - -Caveat enforcer contract: [`ERC721BalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC721BalanceChangeEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | ------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-721 token contract addres. | -| `recipient` | `Address` | Yes | The address on which the checks will be applied. | -| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | -| `changeType` | `BalanceChangeType` | Yes | The balance change type for the ERC-721 token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Erc721BalanceChange, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - balance: 1000000n, - changeType: BalanceChangeType.Increase, - }, -] -``` - -## `erc721Transfer` - -Restricts the execution to only allow ERC-721 token transfers, specifically the `transferFrom(from, to, tokenId)` function, for a specified token ID and contract. - -Caveat enforcer contract: [`ERC721TransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ERC721TransferEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | --------- | -------- | ---------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-721 token contract address. | -| `tokenId` | `bigint` | Yes | The ID of the ERC-721 token that can be transferred by delegate. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Erc721Transfer, - tokenAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - tokenId: 1n, - }, -] -``` - -## `exactCalldata` - -Verifies that the transaction calldata matches the expected calldata. For batch transactions, -see [`exactCalldataBatch`](#exactcalldatabatch). - -Caveat enforcer contract: [`ExactCalldataEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactCalldataEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ---------- | ----- | -------- | -------------------------------------------------- | -| `calldata` | `Hex` | Yes | The calldata that the delegate is allowed to call. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.ExactCalldata, - calldata: '0x1234567890abcdef', - }, -] -``` - -## `exactCalldataBatch` - -Verifies that the provided batch execution calldata matches -the expected calldata for each individual execution in the batch. - -Caveat enforcer contract: [`ExactCalldataBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactCalldataBatchEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `executions` | `ExecutionStruct[]` | Yes | The list of executions that must be matched exactly in the batch. Each execution specifies a target address, value, and calldata. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const executions = [ - { - target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - value: 1000000000000000000n, // 1 ETH - callData: '0x', - }, - { - target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - value: 0n, - callData: '0x', - }, -] - -const caveats = [ - { - type: CaveatType.ExactCalldataBatch, - executions, - }, -] -``` - -## `exactExecution` - -Verifies that the provided execution matches the expected execution. For batch transactions, -see [`exactExecutionBatch`](#exactexecutionbatch). - -Caveat enforcer contract: [`ExactExecutionEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactExecutionEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------- | ----------------- | -------- | ---------------------------------------------------------------------------------------------- | -| `execution` | `ExecutionStruct` | Yes | The execution that must be matched exactly. Specifies the target address, value, and calldata. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.ExactExecution, - target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - value: 1000000000000000000n, - callData: '0x', - }, -] -``` - -## `exactExecutionBatch` - -Verifies that each execution in the batch matches the expected -execution parameters—including target, value, and calldata. - -Caveat enforcer contract: [`ExactExecutionBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ExactExecutionBatchEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | -| `executions` | `ExecutionStruct[]` | Yes | The list of executions that must be matched exactly in the batch. Each execution specifies a target address, value, and calldata. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const executions = [ - { - target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - value: 1000000000000000000n, // 1 ETH - callData: '0x', - }, - { - target: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - value: 0n, - callData: '0x', - }, -] - -const caveats = [ - { - type: CaveatType.ExactExecutionBatch, - executions, - }, -] -``` - -## `id` - -Specifies an ID for multiple delegations. Once one of them is redeemed, the other delegations with the same ID are revoked. - -Caveat enforcer contract: [`IdEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/IdEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ---- | -------- | -------- | ----------- | -------------------------------------------------------------------------------- | -| `id` | `bigint` | `number` | Yes | An ID for the delegation. Only one delegation may be redeemed with any given ID. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Id, - id: 123456, - }, -] -``` - -## `limitedCalls` - -Limits the number of times the delegate can perform executions on the delegator's behalf. - -Caveat enforcer contract: [`LimitedCallsEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/LimitedCallsEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------- | -------- | -------- | ------------------------------------------------------------ | -| `limit` | `number` | Yes | The maximum number of times this delegation may be redeemed. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.LimitedCalls, - limit: 1, - }, -] -``` - -## `multiTokenPeriod` - -Ensures that token transfers for multiple tokens stay within the specified limits for the defined periods. -At the start of each new period, the allowed transfer amount for each token resets. Any unused transfer allowance from the previous period expires and does not carry over. - -When redeeming the delegation, the index of the relevant token configuration must be specified -as the `args` of this caveat (encoded as `uint256` hex value). - -Caveat enforcer contract: [`MultiTokenPeriodEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/MultiTokenPeriodEnforcer.sol) - -### Parameters - -The list of `TokenPeriodConfig` objects, where each object contains: - -| Name | Type | Required | Description | -| ---------------- | --------- | -------- | ---------------------------------------------------------------- | -| `token` | `Address` | Yes | The ERC-20 token contract address as a hex string. | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' -import { zeroAddress } from 'viem' - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -const tokenPeriodConfigs = [ - { - token: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - // 1 token with 18 decimals. - periodAmount: 1000000000000000000n, - // 1 day in seconds. - periodDuration: 86400, - startDate, - }, - { - // For native token use zeroAddress - token: zeroAddress, - // 0.01 ETH in wei. - periodAmount: 10000000000000000n, - // 1 hour in seconds. - periodDuration: 3600, - startDate, - }, -] - -const caveats = [ - { - type: CaveatType.MultiTokenPeriod, - tokenPeriodConfigs, - }, -] -``` - -## `nativeBalanceChange` - -Ensures that the recipient's native token balance has changed within the allowed bounds—either increased by a minimum or decreased by a maximum specified amount. - -Caveat enforcer contract: [`NativeBalanceChangeEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeBalanceChangeEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------------ | ------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `recipient` | `Address` | Yes | The address on which the checks will be applied. | -| `balance` | `bigint` | Yes | The amount by which the balance must be changed. | -| `changeType` | `BalanceChangeType` | Yes | The balance change type for the native token. Specifies whether the balance should have increased or decreased. Valid parameters are `BalanceChangeType.Increase` and `BalanceChangeType.Decrease`. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.NativeBalanceChange, - recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - balance: 1000000n, - changeType: BalanceChangeType.Increase, - }, -] -``` - -## `nativeTokenPayment` - -Enforces payment in native token (for example, ETH) for the right to use the delegation. -A permissions context allowing payment must be provided as the `args` when -redeeming the delegation. - -Caveat enforcer contract: [`NativeTokenPaymentEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenPaymentEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------- | --------- | -------- | ----------------------------------------------- | -| `recipient` | `Address` | Yes | The recipient address who receives the payment. | -| `amount` | `bigint` | Yes | The amount that must be paid. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.NativeTokenPayment, - recipient: '0x3fF528De37cd95b67845C1c55303e7685c72F319', - amount: 1000000n, - }, -] -``` - -## `nativeTokenPeriodTransfer` - -Ensures that native token transfers remain within a predefined limit during a -specified time window. At the start of each new period, the allowed transfer -amount resets. Any unused transfer allowance from the previous period does not -carry over and is forfeited. - -Caveat enforcer contract: [`NativeTokenPeriodTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenPeriodTransferEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ---------------- | -------- | -------- | ---------------------------------------------------------------- | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000) - -const caveats = [ - { - type: CaveatType.NativeTokenPeriodTransfer, - // 1 ETH in wei. - periodAmount: 1000000000000000000n, - // 1 day in seconds. - periodDuration: 86400, - startDate, - }, -] -``` - -## `nativeTokenStreaming` - -Enforces a linear streaming limit for native tokens (for example, ETH). Nothing is available before the specified start timestamp. At the start timestamp, the specified initial amount becomes immediately available. After that, tokens accrue linearly at the specified rate, capped by the specified maximum. - -Caveat enforcer contract: [`NativeTokenStreamingEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenStreamingEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | -------- | -------- | --------------------------------------------------------- | -| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | -| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | Yes | The start timestamp in seconds. | - -### Example - -```typescript -import { CaveatType } from "@metamask/smart-accounts-kit"; - -// Current time as start date. -// Since startDate is in seconds, we need to convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000); - -const caveats = [{ - type: CaveatType.NativeTokenStreaming, - // 0.01 ETH in wei. - initialAmount: 10000000000000000, - // 0.5 ETH in wei. - maxAmount: 500000000000000000n - // 0.00001 ETH in wei. - amountPerSecond: 10000000000000n, - startDate, -}]; -``` - -## `nativeTokenTransferAmount` - -Enforces an allowance of native currency (for example, ETH). - -Caveat enforcer contract: [`NativeTokenTransferAmountEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NativeTokenTransferAmountEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------- | -------- | -------- | ----------------------------------------------------------------- | -| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.NativeTokenTransferAmount, - // 0.00001 ETH in wei. - maxAmount: 10000000000000000n, - }, -] -``` - -## `nonce` - -Adds a nonce to a delegation, and revokes previous delegations by incrementing the current nonce by calling `incrementNonce(address _delegationManager)`. - -Caveat enforcer contract: [`NonceEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/NonceEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ------- | ----- | -------- | -------------------------------------------------- | -| `nonce` | `Hex` | Yes | The nonce to allow bulk revocation of delegations. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Nonce, - nonce: '0x1', - }, -] -``` - -## `ownershipTransfer` - -Restricts the execution to only allow ownership transfers, specifically the `transferOwnership(address _newOwner)` function, for a specified contract. - -Caveat enforcer contract: [`OwnershipTransferEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/OwnershipTransferEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | ---------------------------------------------------------------------- | -| `contractAddress` | `Address` | Yes | The target contract address for which ownership transfers are allowed. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.OwnershipTransfer, - contractAddress: '0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92', - }, -] -``` - -## `redeemer` - -Limits the addresses that can redeem the delegation. -This caveat is designed to restrict smart contracts or EOAs lacking delegation support, -and can be placed anywhere in the delegation chain to restrict the redeemer. - -:::note -Delegator accounts with delegation functionalities can bypass these restrictions by delegating to -other addresses. -For example, Alice makes Bob the redeemer. -This condition is enforced, but if Bob is a delegator he can create a separate delegation to Carol -that allows her to redeem Alice's delegation through Bob. -::: - -Caveat enforcer contract: [`RedeemerEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/RedeemerEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------- | ----------- | -------- | ---------------------------------------------------------------- | -| `redeemers` | `Address[]` | Yes | The list of addresses that are allowed to redeem the delegation. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.Redeemer, - redeemers: [ - '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - '0x6be97c23596ECed7170fdFb28e8dA1Ca5cdc54C5', - ], - }, -] -``` - -## `specificActionERC20TransferBatch` - -Ensures validation of a batch consisting of exactly two transactions: - -1. The first transaction must call a specific target contract with predefined calldata. -2. The second transaction must be an ERC-20 token transfer that matches specified - parameters—including the ERC-20 token contract address, amount, and recipient. - -Caveat enforcer contract: [`SpecificActionERC20TransferBatchEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/SpecificActionERC20TransferBatchEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| -------------- | --------- | -------- | --------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `recipient` | `Address` | Yes | The address that will receive the tokens. | -| `amount` | `bigint` | Yes | The amount of tokens to transfer. | -| `target` | `Address` | Yes | The target address for the first transaction. | -| `calldata` | `Hex` | Yes | The `calldata` for the first transaction. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.SpecificActionERC20TransferBatch, - tokenAddress: '0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da', - recipient: '0x027aeAFF3E5C33c4018FDD302c20a1B83aDCD96C', - // 1 ERC-20 token - 18 decimals, in wei - amount: 1000000000000000000n, - target: '0xb49830091403f1Aa990859832767B39c25a8006B', - calldata: '0x1234567890abcdef', - }, -] -``` - -## `timestamp` - -Specifies a range of timestamps through which the delegation will be valid. - -Caveat enforcer contract: [`TimestampEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/TimestampEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ----------------- | -------- | -------- | -------------------------------------------------------------------------------------------------------------- | -| `afterThreshold` | `number` | Yes | The timestamp after which the delegation is valid in seconds. Set the value to `0` to disable this threshold. | -| `beforeThreshold` | `number` | Yes | The timestamp before which the delegation is valid in seconds. Set the value to `0` to disable this threshold. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -// We need to convert milliseconds to seconds. -const currentTime = Math.floor(Date.now() / 1000) -// 1 hour after current time. -const afterThreshold = currentTime + 3600 -// 1 day after afterThreshold -const beforeThreshold = afterThreshold + 86400 - -const caveats = [ - { - type: CaveatType.Timestamp, - afterThreshold, - beforeThreshold, - }, -] -``` - -## `valueLte` - -Limits the value of native tokens that the delegate can spend. - -Caveat enforcer contract: [`ValueLteEnforcer.sol`](https://github.com/MetaMask/delegation-framework/blob/main/src/enforcers/ValueLteEnforcer.sol) - -### Parameters - -| Name | Type | Required | Description | -| ---------- | -------- | -------- | ----------------------------------------------------------------------- | -| `maxValue` | `bigint` | Yes | The maximum value that may be specified when redeeming this delegation. | - -### Example - -```typescript -import { CaveatType } from '@metamask/smart-accounts-kit' - -const caveats = [ - { - type: CaveatType.ValueLte, - // 0.01 ETH in wei. - maxValue: 10000000000000000n, - }, -] -``` diff --git a/gator_versioned_docs/version-1.1.0/reference/delegation/delegation-scopes.md b/gator_versioned_docs/version-1.1.0/reference/delegation/delegation-scopes.md deleted file mode 100644 index a5c483e31cb..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/delegation/delegation-scopes.md +++ /dev/null @@ -1,360 +0,0 @@ ---- -description: Delegation scopes reference. -sidebar_label: Delegation scopes -keywords: [delegation scopes, configuration, reference] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Delegation scopes - -When [creating a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md), you can configure the following scopes to define the delegation's initial authority. -Learn [how to use delegation scopes](../../guides/delegation/use-delegation-scopes/index.md). - -## Spending limit scopes - -### ERC-20 periodic scope - -Ensures a per-period limit for ERC-20 token transfers. -At the start of each new period, the allowance resets. - -#### Parameters - -| Name | Type | Required | Description | -| ---------------- | --------- | -------- | ---------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address as a hex string. | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseUnits } from "viem"; - -// Since current time is in seconds, convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000); - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20PeriodTransfer, - tokenAddress: "0xb4aE654Aca577781Ca1c5DE8FbE60c2F423f37da", - // 10 ERC-20 token with 6 decimals - periodAmount: parseUnits("10", 6), - periodDuration: 86400, - startDate, - }, - // Address that is granting the delegation - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### ERC-20 streaming scope - -Ensures a linear streaming transfer limit for ERC-20 tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | --------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | -| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | Yes | The start timestamp in seconds. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseUnits } from "viem"; - -// Since current time is in seconds, convert milliseconds to seconds. -const startTime = Math.floor(Date.now() / 1000); - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20Streaming, - tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", - // 0.1 ERC-20 token with 6 decimals - amountPerSecond: parseUnits("0.1", 6), - // 1 ERC-20 token with 6 decimals - initialAmount: parseUnits("1", 6), - // 10 ERC-20 token with 6 decimals - maxAmount: parseUnits("10", 6), - startTime, - }, - // Address that is granting the delegation - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### ERC-20 transfer scope - -Ensures that ERC-20 token transfers are limited to a predefined maximum amount. -This scope is useful for setting simple, fixed transfer limits without any time-based or streaming conditions. - -#### Parameters - -| Name | Type | Required | Description | -| -------------- | --------- | -------- | ----------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-20 token contract address. | -| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseUnits } from "viem"; - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc20TransferAmount, - tokenAddress: "0xc11F3a8E5C7D16b75c9E2F60d26f5321C6Af5E92", - // 1 ERC-20 token with 6 decimals - maxAmount: parseUnits("1", 6), - }, - // Address that is granting the delegation - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### ERC-721 scope - -Limits the delegation to ERC-721 token (NFT) transfers only. - -#### Parameters - -| Name | Type | Required | Description | -| -------------- | --------- | -------- | ---------------------------------------------------------------- | -| `tokenAddress` | `Address` | Yes | The ERC-721 token contract address. | -| `tokenId` | `bigint` | Yes | The ID of the ERC-721 token that can be transferred by delegate. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; - -const delegation = createDelegation({ - scope: { - type: ScopeType.Erc721Transfer, - tokenAddress: "0x3fF528De37cd95b67845C1c55303e7685c72F319", - tokenId: 1n, - }, - // Address that is granting the delegation - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### Native token periodic scope - -Ensures a per-period limit for native token transfers. -At the start of each new period, the allowance resets. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `periodAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred per period. | -| `periodDuration` | `number` | Yes | The duration of each period in seconds. | -| `startDate` | `number` | Yes | The timestamp when the first period begins in seconds. | -| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | -| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseEther } from "viem"; - -// Since current time is in seconds, convert milliseconds to seconds. -const startDate = Math.floor(Date.now() / 1000); - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenPeriodTransfer, - periodAmount: parseEther("0.01"), - periodDuration: 86400, - startDate, - }, - // Address that is granting the delegation. - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted. - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### Native token streaming scope - -Ensures a linear streaming transfer limit for native tokens. -Token transfers are blocked until the defined start timestamp. -At the start, a specified initial amount is released, after which tokens accrue linearly at the configured rate, up to the maximum allowed amount. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `initialAmount` | `bigint` | Yes | The initial amount that can be transferred at start time. | -| `maxAmount` | `bigint` | Yes | The maximum total amount that can be unlocked. | -| `amountPerSecond` | `bigint` | Yes | The rate at which tokens accrue per second. | -| `startTime` | `number` | Yes | The start timestamp in seconds. | -| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | -| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseEther } from "viem"; - -// Since current time is in seconds, convert milliseconds to seconds. -const startTime = Math.floor(Date.now() / 1000); - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenStreaming, - amountPerSecond: parseEther("0.0001"), - initialAmount: parseEther("0.01"), - maxAmount: parseEther("0.1"), - startTime, - }, - // Address that is granting the delegation. - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted. - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -### Native token transfer scope - -Ensures that native token transfers are limited to a predefined maximum amount. -This scope is useful for setting simple, fixed transfer limits without any time based or streaming conditions. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `maxAmount` | `bigint` | Yes | The maximum amount of tokens that can be transferred by delegate. | -| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | -| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. The default is `0x` to disallow ERC-20 and ERC-721 token transfers. Cannot be used together with `allowedCalldata`. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; -import { parseEther } from "viem"; - -const delegation = createDelegation({ - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther("0.001"), - }, - // Address that is granting the delegation. - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted. - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -## Function call scope - -Defines the specific methods, contract addresses, and calldata that are allowed for the delegation. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | ------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `targets` | `Address[]` | Yes | The list of addresses that the delegate is allowed to call. | -| `selectors` | `MethodSelector[]` | Yes | The list of method selectors that the delegate is allowed to call. The selector value can be 4-byte hex string, ABI function signature, or ABI function object. | -| `allowedCalldata` | [`AllowedCalldataBuilderConfig`](../types.md#allowedcalldatabuilderconfig)`[]` | No | The list of calldata the delegate is allowed to call. It doesn't support multiple selectors. Each entry in the list represents a portion of calldata corresponding to the same function signature. You can include or exclude specific parameters to define what parts of the calldata are valid. Cannot be used together with `exactCalldata`. | -| `exactCalldata` | [`ExactCalldataBuilderConfig`](../types.md#exactcalldatabuilderconfig) | No | The calldata the delegate is allowed to call. Cannot be used together with `allowedCalldata`. | -| `valueLte` | [`ValueLteBuilderConfig`](../types.md#valueltebuilderconfig) | No | The maximum native token amount the delegate can transfer. By default, the amount is set to `0`. | - -#### Example - -This example sets the delegation scope to allow the delegate to call the `approve` function on the USDC token contract: - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; - -const delegation = createDelegation({ - scope: { - type: ScopeType.FunctionCall, - targets: ["0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238"], // USDC address on Sepolia. - selectors: ["approve(address, uint256)"] - }, - // Address that is granting the delegation. - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted. - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` - -## Ownership transfer scope - -Restricts a delegation to ownership transfer calls only. - -#### Parameters - -| Name | Type | Required | Description | -| ----------------- | --------- | -------- | ---------------------------------------------------------------------- | -| `contractAddress` | `Address` | Yes | The target contract address for which ownership transfers are allowed. | - -#### Example - -```typescript -import { createDelegation, getSmartAccountsEnvironment, ScopeType } from "@metamask/smart-accounts-kit"; -import { sepolia } from "viem/chains"; - -const contractAddress = "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" - -const delegation = createDelegation({ - scope: { - type: ScopeType.OwnershipTransfer, - contractAddress, - }, - // Address that is granting the delegation. - from: "0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1", - // Address to which the delegation is being granted. - to: "0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488", - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id); -}); -``` diff --git a/gator_versioned_docs/version-1.1.0/reference/delegation/index.md b/gator_versioned_docs/version-1.1.0/reference/delegation/index.md deleted file mode 100644 index e99d30d79f0..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/delegation/index.md +++ /dev/null @@ -1,655 +0,0 @@ ---- -description: Delegation-related API methods reference. -toc_max_heading_level: 2 -keywords: [delegation, API, methods, reference] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Delegation API reference - -The following API methods are related to creating and managing [delegations](../../concepts/delegation/overview.md). - -## `createCaveatBuilder` - -Builds an array of caveats. - -### Parameters - -| Name | Type | Required | Description | -| ------------- | ------------------------------------------------------------------ | -------- | ----------------------------------------------------------------- | -| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | Environment to resolve the smart contracts for the current chain. | -| `config` | [`CaveatBuilderConfig`](../types.md#caveatbuilderconfig) | No | Configuration for `CoreCaveatBuilder`. | - -### Example - -```ts -import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' - -const environment = getSmartAccountsEnvironment(sepolia.id) -const caveatBuilder = createCaveatBuilder(environment) -``` - -### Allow empty caveats - -To create an empty caveat collection, set the `CaveatBuilderConfig.allowInsecureUnrestrictedDelegation` to `true`. - -```ts title="example.ts" -import { createCaveatBuilder } from '@metamask/smart-accounts-kit/utils' -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' - -const environment = getSmartAccountsEnvironment(sepolia.id) -const caveatBuilder = createCaveatBuilder(environment, { - // add-next-line - allowInsecureUnrestrictedDelegation: true, -}) -``` - -## `createDelegation` - -Creates a delegation with a specific delegate. - -### Parameters - -| Name | Type | Required | Description | -| ------------------ | ------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `Hex` | Yes | The address that is granting the delegation. | -| `to` | `Hex` | Yes | The address to which the delegation is being granted. | -| `scope` | `ScopeConfig` | Yes | The scope of the delegation that defines the initial authority. See [delegation scopes](./delegation-scopes.md) for the full list of scope types and their parameters. | -| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment used by the toolkit to define contract addresses for interacting with the Delegation Framework contracts. | -| `caveats` | `Caveats` | No | Caveats that further refine the authority granted by the `scope`. See [caveats reference](./caveats.md) for the full list of caveat types and their parameters. | -| `parentDelegation` | [`Delegation`](../types.md#delegation) \| `Hex` | No | The parent delegation or its corresponding hex to create a delegation chain. | -| `salt` | `Hex` | No | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | - -### Example - -```typescript -import { - createDelegation, - getSmartAccountsEnvironment, - ScopeType, -} from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' -import { parseEther } from 'viem' - -const delegation = createDelegation({ - // Address that is granting the delegation - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - // Address to which the delegation is being granted - to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id), - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - -## `createOpenDelegation` - -Creates an open delegation that can be redeemed by any delegate. - -### Parameters - -| Name | Type | Required | Description | -| ------------------ | ------------------------------------------------------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `Hex` | Yes | The address that is granting the delegation. | -| `scope` | `ScopeConfig` | Yes | The scope of the delegation that defines the initial authority. See [delegation scopes](./delegation-scopes.md) for the full list of scope types and their parameters. | -| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment used by the toolkit to define contract addresses for interacting with the Delegation Framework contracts. | -| `caveats` | `Caveats` | No | Caveats that further refine the authority granted by the `scope`. See [caveats reference](./caveats.md) for the full list of caveat types and their parameters. | -| `parentDelegation` | [`Delegation`](../types.md#delegation) \| `Hex` | No | The parent delegation or its corresponding hex to create a delegation chain. | -| `salt` | `Hex` | No | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | - -### Example - -```typescript -import { - createOpenDelegation, - getSmartAccountsEnvironment, - ScopeType, -} from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' -import { parseEther } from 'viem' - -const delegation = createOpenDelegation({ - // Address that is granting the delegation - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - // Alternatively you can use environment property of MetaMask smart account. - environment: getSmartAccountsEnvironment(sepolia.id), - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - -## `createExecution` - -Creates an `ExecutionStruct` instance. - -### Parameters - -| Name | Type | Required | Description | -| ---------- | --------- | -------- | ---------------------------------------------------------------------- | -| `target` | `Address` | No | Address of the contract or recipient that the call is directed to. | -| `value` | `bigint` | No | Value of native tokens to send along with the call in wei. | -| `callData` | `Hex` | No | Encoded function data or payload to be executed on the target address. | - -### Example - -```ts -import { createExecution } from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' - -// Creates an ExecutionStruct to transfer 0.01 ETH to -// 0xe3C818389583fDD5cAC32f548140fE26BcEaE907 address. -const execution = createExecution({ - target: '0xe3C818389583fDD5cAC32f548140fE26BcEaE907', - // 0.01 ETH in wei - value: parseEther('0.01'), - callData: '0x', -}) -``` - -## `decodeDelegations` - -Decodes an ABI-encoded hex string to an array of delegations. - -Use `decodeDelegations` when working with a permission context that contains a delegation -chain, such as the `context` property returned by [`requestExecutionPermissions`](../advanced-permissions/wallet-client.md#requestexecutionpermissions) response. - -### Parameters - -| Name | Type | Required | Description | -| --------- | ----- | -------- | ------------------------------------- | -| `encoded` | `Hex` | Yes | The ABI encoded hex string to decode. | - -### Example - -```ts -import { decodeDelegations } from '@metamask/smart-accounts-kit/utils' - -const delegations = decodeDelegations('0x7f0db33d..c06aeeac') -``` - -## `decodeDelegation` - -Decodes an ABI-encoded hex string to a single delegation. - -Use `decodeDelegation` when you have a single encoded delegation rather than an encoded delegation chain. - -### Parameters - -| Name | Type | Required | Description | -| --------- | ----- | -------- | ------------------------------------- | -| `encoded` | `Hex` | Yes | The ABI-encoded hex string to decode. | - -### Example - -```ts -import { decodeDelegation } from '@metamask/smart-accounts-kit/utils' - -const delegation = decodeDelegation('0x7f0db33d..c06aeeac') -``` - -## `deploySmartAccountsEnvironment` - -Deploys the Delegation Framework contracts to an EVM chain. - -### Parameters - -| Name | Type | Required | Description | -| ------------------- | ----------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `walletClient` | `WalletClient` | Yes | [Viem Wallet Client](https://viem.sh/docs/clients/wallet#wallet-client) to deploy the contracts. | -| `publicClient` | `PublicClient` | Yes | [Viem Public Client](https://viem.sh/docs/clients/public) to interact with the given chain. | -| `chain` | `Chain` | Yes | [Viem Chain](https://viem.sh/docs/chains/introduction) where you wish to deploy the Delegation Framework contracts. | -| `deployedContracts` | `{ [contract: string]: Hex }` | No | Allows overriding specific contract addresses when calling the function. For example, if certain contracts have already been deployed on the target chain, their addresses can be provided directly to the function. | - -### Example - - - - -```ts -import { deploySmartAccountsEnvironment } from '@metamask/smart-accounts-kit/utils' -import { walletClient, publicClient } from './config.ts' -import { sepolia as chain } from 'viem/chains' - -const environment = await deploySmartAccountsEnvironment(walletClient, publicClient, chain) -``` - - - - -```ts -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { http, createWalletClient, createPublicClient } from 'viem' - -// Your deployer wallet private key. -const privateKey = '0x123..' -const account = privateKeyToAccount(privateKey) - -export const walletClient = createWalletClient({ - account, - chain, - transport: http(), -}) - -export const publicClient = createPublicClient({ - transport: http(), - chain, -}) -``` - - - - -### Inject deployed contracts - -Once the contracts are deployed, you can use them to override the delegator -environment using `overrideDeployedEnvironment`. - -```ts title="example.ts" -import { walletClient, publicClient } from './config.ts' -import { sepolia as chain } from 'viem/chains' -import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { - overrideDeployedEnvironment, - deploySmartAccountsEnvironment, -} from '@metamask/smart-accounts-kit/utils' - -const environment: SmartAccountsEnvironment = await deploySmartAccountsEnvironment( - walletClient, - publicClient, - chain -) - -// add-start -overrideDeployedEnvironment(chain.id, '1.3.0', environment) -// add-end -``` - -## `disableDelegation` - -Encodes the calldata for disabling a delegation. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ------------------------------ | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be disabled. | - -### Example - - - - -```ts -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' -import { delegation } from './delegation.ts' - -const disableDelegationData = DelegationManager.encode.disableDelegation({ - delegation, -}) -``` - - - - -```ts -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' -import { parseEther } from 'viem' - -export const delegation = createDelegation({ - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', - environment: getSmartAccountsEnvironment(sepolia.id), - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - - - - -## `enableDelegation` - -Encodes the calldata to enable a disabled delegation. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be enabled. | - -### Example - -```ts -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' - -const enableDelegationData = DelegationManager.encode.enableDelegation({ - delegation, // Already disabled delegation. -}) -``` - -## `encodeDelegations` - -Encodes an array of delegations to an ABI-encoded hex string. - -### Parameters - -| Name | Type | Required | Description | -| ------------- | ------------------------------------------ | -------- | ----------------------------------- | -| `delegations` | [`Delegation`](../types.md#delegation)`[]` | Yes | The delegation array to be encoded. | - -### Example - - - - -```ts -import { encodeDelegations } from '@metamask/smart-accounts-kit/utils' -import { delegation } from './delegation.ts' - -const encodedDelegations = encodeDelegations([delegation]) -``` - - - - -```ts -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' -import { parseEther } from 'viem' - -export const delegation = createDelegation({ - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', - environment: getSmartAccountsEnvironment(sepolia.id), - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - - - - -## `encodeDelegation` - -Encodes a single delegation to an ABI-encoded hex string. - -### Parameters - -| Name | Type | Required | Description | -| ------------ | -------------------------------------- | -------- | ----------------------------- | -| `delegation` | [`Delegation`](../types.md#delegation) | Yes | The delegation to be encoded. | - -### Example - - - - -```ts -import { encodeDelegation } from '@metamask/smart-accounts-kit/utils' -import { delegation } from './delegation.ts' - -const encodedDelegation = encodeDelegation(delegation) -``` - - - - -```ts -import { createDelegation, ScopeType } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' -import { parseEther } from 'viem' - -export const delegation = createDelegation({ - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - to: '0x2B2dBd1D5fbeB77C4613B66e9F35dBfE12cB0488', - environment: getSmartAccountsEnvironment(sepolia.id), - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - - - - -## `hashDelegation` - -Returns the delegation hash. - -### Parameters - -| Name | Type | Required | Description | -| ------- | -------------------------------------- | -------- | ------------------------------ | -| `input` | [`Delegation`](../types.md#delegation) | Yes | The delegation object to hash. | - -### Example - - - - -```ts -import { hashDelegation } from '@metamask/smart-accounts-kit/utils' -import { delegation } from './config.ts' - -const delegationHash = hashDelegation(delegation) -``` - - - - -```ts -import { - getSmartAccountsEnvironment, - createDelegation, - ScopeType, -} from '@metamask/smart-accounts-kit' -import { parseEther } from 'viem' -import { sepolia } from 'viem/chains' - -const environment = getSmartAccountsEnvironment(sepolia.id) - -// The address to which the delegation is granted. It can be an EOA address, or -// smart account address. -const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' - -export const delegation = createDelegation({ - to: delegate, - // Address that is granting the delegation. - from: '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1', - environment, - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - - - - -## `getSmartAccountsEnvironment` - -Resolves the `SmartAccountsEnvironment` for a chain. - -### Parameters - -| Name | Type | Required | Description | -| --------- | ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| `chainId` | `number` | Yes | The chain ID of the network for which the `SmartAccountsEnvironment` should be resolved. | -| `version` | `SupportedVersion` | No | Specifies the version of the Delegation Framework contracts to use. If omitted, the latest supported version will be used by default. | - -### Example - -```ts -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia } from 'viem/chains' - -const environment = getSmartAccountsEnvironment(sepolia.id) -``` - -## `overrideDeployedEnvironment` - -Overrides or adds the `SmartAccountsEnvironment` for a chain and supported version. - -### Parameters - -| Name | Type | Required | Description | -| ------------- | ------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------ | -| `chainId` | `number` | Yes | The chain ID of the network for which the `SmartAccountsEnvironment` should be overridden. | -| `version` | `SupportedVersion` | Yes | The version of the Delegation Framework contracts to override for the specified chain. | -| `environment` | [`SmartAccountsEnvironment`](../types.md#smartaccountsenvironment) | Yes | The environment containing contract addresses to override for the given chain and version. | - -### Example - - - - -```ts -import { environment } from './environment.ts' -import { overrideDeployedEnvironment } from '@metamask/smart-accounts-kit/utils' -import { sepolia } from 'viem/chains' - -overrideDeployedEnvironment(sepolia.id, '1.3.0', environment) -``` - - - - -```ts -import { SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' - -export const environment: SmartAccountsEnvironment = { - SimpleFactory: '0x124..', - // ... - implementations: { - // ... - }, -} -``` - - - - -## `redeemDelegations` - -Encodes calldata for redeeming delegations. -This method supports batch redemption, allowing multiple delegations to be processed within a single transaction. - -### Parameters - -| Name | Type | Required | Description | -| ------------- | ------------------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `delegations` | [`Delegation`](../types.md#delegation)`[][]` | Yes | A nested collection representing chains of delegations. Each inner collection contains a chain of delegations to be redeemed. | -| `modes` | [`ExecutionMode`](../types.md#executionmode)`[]` | Yes | A collection specifying the [execution mode](../../concepts/delegation/delegation-manager.md#execution-modes) for each corresponding delegation chain. | -| `executions` | [`ExecutionStruct`](../types.md#executionstruct)`[][]` | Yes | A nested collection where each inner collection contains a list of `ExecutionStruct` objects associated with a specific delegation chain. | - -### Example - -This example assumes you have a delegation signed by the delegator. - -```ts -import { createExecution, ExecutionMode } from '@metamask/smart-accounts-kit' -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' -import { zeroAddress } from 'viem' - -const data = DelegationManager.encode.redeemDelegations({ - delegations: [[signedDelegation]], - modes: [ExecutionMode.SingleDefault], - executions: [[execution]], -}) -``` - -## `signDelegation` - -Signs the delegation and returns the delegation signature. - -### Parameters - -| Name | Type | Required | Description | -| ------------------------------------- | ------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------ | -| `privateKey` | `Hex` | Yes | The private key to use for signing the delegation. | -| `delegation` | `Omit<`[`Delegation`](../types.md#delegation)`, "signature">` | Yes | The unsigned delegation object to sign. | -| `chainId` | `number` | Yes | The chain ID on which the delegation manager is deployed. | -| `delegationManager` | `0x${string}` | Yes | The address of the Delegation Manager. | -| `name` | `string` | No | The name of the domain of the Delegation Manager. The default is `DelegationManager`. | -| `version` | `string` | No | The version of the domain of the Delegation Manager. The default is `1`. | -| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow insecure unrestricted delegation with no caveats. The default is `false`. | - -### Example - - - - -```ts -import { signDelegation } from '@metamask/smart-accounts-kit' -import { privateKey, delegation, delegationManager } from './config.ts' -import { sepolia } from 'viem/chains' - -const signature = signDelegation({ - privateKey, - delegation, - chainId: sepolia.id, - delegationManager, -}) -``` - - - - -```ts -import { - getSmartAccountsEnvironment, - createDelegation, - ScopeType, -} from '@metamask/smart-accounts-kit' -import { createWalletClient, parseEther } from 'viem' -import { privateKeyToAccount } from 'viem/accounts' -import { sepolia } from 'viem/chains' - -const environment = getSmartAccountsEnvironment(sepolia.id) -export const delegationManager = environment.DelegationManager - -export const privateKey = `0x12141..` -const account = privateKeyToAccount(privateKey) - -// The address to which the delegation is granted. It can be an EOA address, or -// smart account address. -const delegate = '0x2FcB88EC2359fA635566E66415D31dD381CF5585' - -export const delegation = createDelegation({ - to: delegate, - from: account.address, - environment, - scope: { - type: ScopeType.NativeTokenTransferAmount, - // 0.001 ETH in wei format. - maxAmount: parseEther('0.001'), - }, -}) -``` - - - diff --git a/gator_versioned_docs/version-1.1.0/reference/erc7710/bundler-client.md b/gator_versioned_docs/version-1.1.0/reference/erc7710/bundler-client.md deleted file mode 100644 index 43c80e43da6..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/erc7710/bundler-client.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -description: Bundler Client actions reference. -sidebar_label: Bundler Client actions -toc_max_heading_level: 2 -keywords: - [ERC-7710, Viem, bundler client, actions, reference, advanced permissions, redeem delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Bundler Client actions reference - -These actions extend the [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) to support [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) utilities. - -## `sendUserOperationWithDelegation` - -Sends a user operation with redeem permissions according to the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) specifications. - -:::info -To use `sendUserOperationWithDelegation`, the Viem Bundler Client must be -extended with `erc7710BundlerActions`. -::: - -### Parameters - -See the [Viem `sendUserOperation` parameters](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation). -This function has the same parameters, except it does not accept `callData`. - -Objects in the `calls` array also require the following parameters: - -| Name | Type | Required | Description | -| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | -| `delegationManager` | `Address` | Yes | The address of Delegation Manager. | -| `permissionContext` | `PermissionContext` | Yes | An encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming permissions. | - -### Example - - - - -```ts -import { sessionAccount, bundlerClient, publicClient } from './client.ts' - -// These properties must be extracted from the permission response. -const permissionContext = permissionsResponse[0].context -const delegationManager = permissionsResponse[0].signerMeta.delegationManager - -// Calls without permissionContext and delegationManager will be executed -// as a normal user operation. -const userOperationHash = await bundlerClient.sendUserOperationWithDelegation({ - publicClient, - account: sessionAccount, - calls: [ - { - to: sessionAccount.address, - data: '0x', - value: 1n, - permissionContext, - delegationManager, - }, - ], - // Appropriate values must be used for fee-per-gas. - maxFeePerGas: 1n, - maxPriorityFeePerGas: 1n, -}) -``` - - - - -```ts -import { createPublicClient, http, createBundlerClient } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { createBundlerClient } from 'viem/account-abstraction' -import { erc7710BundlerActions } from '@metamask/smart-accounts-kit/actions' -import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' - -export const publicClient = createPublicClient({ - chain: chain, - transport: http(), -}) - -// Your session account for requesting and redeeming should be the same. -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -export const sessionAccount = await toMetaMaskSmartAccount({ - client: publicClient, - implementation: Implementation.Hybrid, - deployParams: [account.address, [], [], []], - deploySalt: '0x', - signer: { account }, -}) - -export const bundlerClient = createBundlerClient({ - transport: http(`https://your-bundler-url`), - // Allows you to use the same Bundler Client as paymaster. - paymaster: true, -}).extend(erc7710BundlerActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.1.0/reference/erc7710/wallet-client.md b/gator_versioned_docs/version-1.1.0/reference/erc7710/wallet-client.md deleted file mode 100644 index 2709ed45355..00000000000 --- a/gator_versioned_docs/version-1.1.0/reference/erc7710/wallet-client.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -description: Wallet Client actions reference. -sidebar_label: Wallet Client actions -toc_max_heading_level: 2 -keywords: - [ERC-7710, Viem, wallet client, actions, reference, advanced permissions, redeem delegation] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Wallet Client actions reference - -These actions extend the [Viem Wallet Client](https://viem.sh/docs/clients/wallet) to support [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) utilities. - -## `sendTransactionWithDelegation` - -Sends a transaction to redeem delegated permissions according to the [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) specifications. - -:::info -To use `sendTransactionWithDelegation`, the Viem Wallet Client must be -extended with `erc7710WalletActions`. -::: - -### Parameters - -See the [Viem `sendTransaction` parameters](https://viem.sh/docs/actions/wallet/sendTransaction#parameters). -This function has the same parameters, and it also requires the following parameters: - -| Name | Type | Required | Description | -| ------------------- | ------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | -| `delegationManager` | `Address` | Yes | The address of the Delegation Manager. | -| `permissionContext` | `PermissionContext` | Yes | An encoded delegation chain (`Hex`) or a decoded delegation chain (`Delegation[]`) for redeeming delegations. | - -### Example - - - - -```ts -import { walletClient, publicClient } from './client.ts' - -// These properties must be extracted from the permission response. See -// `grantPermissions` action to learn how to request permissions. -const permissionContext = permissionsResponse[0].context -const delegationManager = permissionsResponse[0].signerMeta.delegationManager - -const hash = walletClient.sendTransactionWithDelegation({ - chain, - to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8', - value: 1n, - permissionContext, - delegationManager, -}) -``` - - - - -```ts -import { http, createPublicClient, createWalletClient } from 'viem' -import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts' -import { sepolia as chain } from 'viem/chains' -import { erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' - -export const publicClient = createPublicClient({ - chain, - transport: http(), -}) - -// Your session account for requesting and redeeming should be the same. -const privateKey = '0x...' -const account = privateKeyToAccount(privateKey) - -const walletClient = createWalletClient({ - account, - transport: http(), - chain, -}).extend(erc7710WalletActions()) -``` - - - diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/aa21-prefund.md b/gator_versioned_docs/version-1.1.0/troubleshooting/aa21-prefund.md deleted file mode 100644 index e09ef092bbb..00000000000 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/aa21-prefund.md +++ /dev/null @@ -1,98 +0,0 @@ ---- -description: How to resolve the AA21 didn't pay prefund error when submitting user operations. -sidebar_label: AA21 didn't pay prefund -keywords: [AA21, pay prefund, user operation, troubleshooting] ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# AA21 didn't pay prefund - -The `EntryPoint` contract reverts with `AA21 didn't pay prefund` when a smart account doesn't -have enough native token balance to cover the gas cost of the user operation. - -Before executing a user operation, the `EntryPoint` requires the sender account to prefund the -expected gas cost. If the account's balance is lower than the required prefund, the `EntryPoint` -reverts the operation. - -## Solution - -### Fund the smart account - -Fund the smart account with enough native tokens to cover the required prefund. -Use Viem's [`estimateUserOperationGas`](https://viem.sh/account-abstraction/actions/bundler/estimateUserOperationGas) -to get the gas estimates from your bundler, then calculate the required prefund based on the -`EntryPoint` version. - - - - -```typescript -import { formatEther } from 'viem' - -const gasEstimate = await bundlerClient.estimateUserOperationGas({ - account: smartAccount, - calls: [{ to: '0x...', value: 0n }], -}) - -const { maxFeePerGas } = await publicClient.estimateFeesPerGas() - -const requiredGas = - gasEstimate.verificationGasLimit + - gasEstimate.callGasLimit + - (gasEstimate.paymasterVerificationGasLimit ?? 0n) + - (gasEstimate.paymasterPostOpGasLimit ?? 0n) + - gasEstimate.preVerificationGas - -const requiredPrefund = requiredGas * maxFeePerGas - -const balance = await publicClient.getBalance({ - address: smartAccount.address, -}) - -if (balance < requiredPrefund) { - console.log( - `Insufficient balance: account has ${formatEther(balance)} ETH, ` + - `but needs ${formatEther(requiredPrefund)} ETH` - ) -} -``` - - - - -```typescript -import { formatEther } from 'viem' - -const gasEstimate = await bundlerClient.estimateUserOperationGas({ - account: smartAccount, - calls: [{ to: '0x...', value: 0n }], -}) - -const { maxFeePerGas } = await publicClient.estimateFeesPerGas() - -const requiredGas = - gasEstimate.callGasLimit + gasEstimate.verificationGasLimit + gasEstimate.preVerificationGas - -const requiredPrefund = requiredGas * maxFeePerGas - -const balance = await publicClient.getBalance({ - address: smartAccount.address, -}) - -if (balance < requiredPrefund) { - console.log( - `Insufficient balance: account has ${formatEther(balance)} ETH, ` + - `but needs ${formatEther(requiredPrefund)} ETH` - ) -} -``` - - - - -### Use a paymaster - -You can use a paymaster to sponsor the gas fees for the smart account, so the account doesn't -need to hold native tokens. For more information about configuring a paymaster, see [Send a gasless transaction](../guides/smart-accounts/send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/error-codes.md b/gator_versioned_docs/version-1.1.0/troubleshooting/error-codes.md deleted file mode 100644 index 58637dace23..00000000000 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/error-codes.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -description: Delegation Framework error codes -sidebar_label: Error codes -keywords: [error codes, errors, debug, error references, delegation framework] ---- - -# Error codes - -The following tables describe error codes from the [MetaMask Delegation Framework contracts](https://github.com/metamask/delegation-framework). Use a decoder such as -[calldata.swiss-knife.xyz](https://calldata.swiss-knife.xyz/decoder) to identify error signatures from raw revert data. - -## Delegation Manager error codes - -| Error code | Error name | Description | -| ------------ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| `0xb5863604` | `InvalidDelegate()` | The caller is not the delegate specified in the delegation. [Troubleshoot an invalid delegate.](./invalid-delegate.md) | -| `0xb9f0f171` | `InvalidDelegator()` | The caller is not the delegator specificed in the delegation. [Troubleshoot an invalid delegator.](./invalid-delegator.md) | -| `0x05baa052` | `CannotUseADisabledDelegation()` | The delegation has been disabled by the delegator. | -| `0xded4370e` | `InvalidAuthority()` | The delegation chain authority validation failed. The authority hash of a child delegation does not match the hash of its parent delegation. | -| `0x1bcaf69f` | `BatchDataLengthMismatch()` | The array lengths do not match in a batch `redeemDelegations` contract call. | -| `0x005ecddb` | `AlreadyDisabled()` | The delegation has already been disabled. | -| `0xf2a5f75a` | `AlreadyEnabled()` | The delegation is already enabled. | -| `0xf645eedf` | `ECDSAInvalidSignature()` | Invalid ECDSA signature format. | -| `0xfce698f7` | `ECDSAInvalidSignatureLength(uint256)` | The ECDSA signature length is incorrect. | -| `0xac241e11` | `EmptySignature()` | The signature is empty. | -| `0xd93c0665` | `EnforcedPause()` | The Delegation Manager contract is paused by the owner. | -| `0x3db6791c` | `InvalidEOASignature()` | EOA signature verification failed. [Troubleshoot an invalid EOA signature.](./invalid-signature.md) | -| `0x155ff427` | `InvalidERC1271Signature()` | Smart contract signature (ERC-1271) verification failed. | -| `0x118cdaa7` | `OwnableUnauthorizedAccount(address)` | An unauthorized account attempted an owner only action. | -| `0x1e4fbdf7` | `OwnableInvalidOwner(address)` | Invalid owner address in an ownership transfer. | -| `0xf6b6ef5b` | `InvalidShortString()` | A string parameter is too short. | -| `0xaa0ea2d8` | `StringTooLong(string)` | A string parameter exceeds the maximum length. | - -## Smart account error codes - -| Error code | Error name | Description | -| ------------ | ----------------------------- | --------------------------------------------------------------------------- | -| `0xd663742a` | `NotEntryPoint()` | The caller is not the EntryPoint contract. | -| `0x0796d945` | `NotEntryPointOrSelf()` | The caller is neither the EntryPoint contract nor the smart account itself. | -| `0x1a4b3a04` | `NotDelegationManager()` | The caller is not the DelegationManager contract. | -| `0xb96fcfe4` | `UnsupportedCallType(bytes1)` | The execution call type is not supported. | -| `0x1187dc06` | `UnsupportedExecType(bytes1)` | The execution type is not supported. | -| `0x29c3b7ee` | `NotSelf()` | The caller is not the smart account itself. | - -## Caveat enforcer error codes - -| Error string | Description | -| --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AllowedTargetsEnforcer:target-address-not-allowed` | When redeeming a delegation with an `allowedTargets` caveat, the execution's target address is not in the allowed list. | -| `AllowedTargetsEnforcer:invalid-terms-length` | When creating a delegation with an `allowedTargets` caveat, the encoded terms length is not a multiple of 20 bytes (Ethereum address). | -| `ERC20TransferAmountEnforcer:invalid-terms-length` | When creating a delegation with an `erc20TransferAmount` caveat, the encoded terms are not exactly 52 bytes (20 byte Ethereum address + 32 byte amount). | -| `ERC20TransferAmountEnforcer:invalid-contract` | When redeeming a delegation with an `erc20TransferAmount` caveat, the execution targets a different contract than the allowed token address. | -| `ERC20TransferAmountEnforcer:invalid-method` | When redeeming a delegation with an `erc20TransferAmount` caveat, the execution calls a function other than `transfer(address,uint256)`. | -| `ERC20TransferAmountEnforcer:allowance-exceeded` | When redeeming a delegation with an `erc20TransferAmount` caveat, the cumulative transfer amount exceeds the allowed limit. | -| `CaveatEnforcer:invalid-call-type` | When redeeming a delegation, the execution uses a batch call type, but the caveat enforcer only supports single calls. | -| `CaveatEnforcer:invalid-execution-type` | When redeeming a delegation, the execution uses a non-default [execution mode](../reference/types.md#executionmode), but the caveat enforcer only supports the default mode. | diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegator.md b/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegator.md deleted file mode 100644 index 5a8661adfe2..00000000000 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegator.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -description: How to resolve the InvalidDelegator error. -sidebar_label: Invalid delegator -toc_max_heading_level: 2 -keywords: [InvalidDelegator, error code, delegation, troubleshooting] ---- - -# Invalid delegator - -The Delegation Manager reverts with `InvalidDelegator()` when the caller is not the delegator -specified in the delegation. - -This error is thrown by the `disableDelegation` and `enableDelegation` contract functions. Only the -account that created the delegation can [disable](../guides/delegation/disable-delegation.md) -or enable it. - -## Solution - -Verify that you're sending the transaction from the delegator's account. If the delegator is a smart account, submit a user operation through the smart account. - -```typescript -import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' - -// Generate calldata to disable the delegation. -const disableCalldata = DelegationManager.encode.disableDelegation({ - delegation: signedDelegation, // Signed by delegatorSmartAccount -}) - -const userOpHash = await bundlerClient.sendUserOperation({ - account: delegatorSmartAccount, - calls: [ - { - to: delegatorSmartAccount.environment.DelegationManager, - data: disableCalldata, - }, - ], -}) -``` diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-signature.md b/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-signature.md deleted file mode 100644 index 0f3f32bfc05..00000000000 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-signature.md +++ /dev/null @@ -1,85 +0,0 @@ ---- -description: How to resolve the InvalidEOASignature error when redeeming delegations. -sidebar_label: Invalid EOA signature -toc_max_heading_level: 2 -keywords: [InvalidEOASignature, error code, delegation, troubleshooting, invalid EOA signature] ---- - -# Invalid EOA signature - -The Delegation Manager reverts with `InvalidEOASignature()` in the following cases. - -## Smart account is not deployed - -The [root delegation's](../concepts/delegation/overview.md#root-delegation) delegator must be a -MetaMask smart account. The Delegation Manager checks the delegator code to determine -whether it is an externally owned account (EOA) or a smart account. - -If the smart account is not deployed yet, its address has no contract code. The Delegation -Manager treats the address as an EOA and attempts ECDSA signature recovery. Because the -delegation was signed by the smart account, signature recovery returns a different address, -and the call reverts. - -### Solution - -Verify that the smart account used as the delegator is deployed before redeeming the delegation. The -smart account can be either an ERC-4337 smart account or an EIP-7702 upgraded EOA. - -For an ERC-4337 smart account, the first user operation sent from that account deploys it -automatically. For more information, see [Deploy a smart account](../guides/smart-accounts/deploy-smart-account.md). - -For an EIP-7702-upgraded EOA, verify that you submit the authorization to set the account code -before redeeming the delegation. - -```ts -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' - -// Get the EOA account code -const code = await publicClient.getCode({ - address, -}) - -if (code) { - // According to EIP-7702, the code format is 0xef0100 || address. - // Remove the first 8 characters (0xef0100) to get the delegator address. - const delegatorAddress = `0x${code.substring(8)}` - - const statelessDelegatorAddress = getSmartAccountsEnvironment(chain.id).implementations - .EIP7702StatelessDeleGatorImpl - - // If the account isn't upgraded to a MetaMask smart account, you can - // either upgrade programmatically or ask the user to switch to a smart account manually. - const isAccountUpgraded = - delegatorAddress.toLowerCase() === statelessDelegatorAddress.toLowerCase() -} -``` - -To upgrade an EOA to a MetaMask smart account, see the [EIP-7702 quickstart](../get-started/smart-account-quickstart/eip7702.md). - -## Incorrect signer - -The delegation was signed with an account that doesn't correspond to the delegator -address. When the delegator is an EOA, the Delegation Manager recovers the signer from -the EIP-712 typed data hash and compares it to the `delegator` field. If they don't -match, the transaction reverts. - -This occurs when redeeming a [delegation chain](../guides/delegation/create-redelegation.md). An -intermediate or leaf delegation has an EOA as the delegator, but the delegation is signed by an -account other than the expected delegator. - -### Solution - -Verify that the private key used to sign the delegation corresponds to the delegator address. For -more information, see the [`signDelegation`](../reference/delegation/index.md#signdelegation) reference. - -## Incorrect chain ID or Delegation Manager - -The EIP-712 domain separator used for signing the delegation includes the chain ID and the Delegation Manager contract -address. If the delegation was signed on a different chain or against a different -Delegation Manager, the recovered address won't match. - -### Solution - -Verify that the chain ID and Delegation Manager contract address you use when signing match the -chain and contract where you redeem the delegation. diff --git a/gator_versioned_docs/version-1.2.0/changelog/1.0.0.md b/gator_versioned_docs/version-1.2.0/changelog/1.0.0.md deleted file mode 100644 index 9410743c68f..00000000000 --- a/gator_versioned_docs/version-1.2.0/changelog/1.0.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_label: 1.0.0 -description: MetaMask Smart Accounts Kit v1.0.0 changelog ---- - -# What's new in v1.0.0? - -:::info 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 - -### ⚠️ `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. - -```ts -await walletClient.sendTransactionWithDelegation({ -// remove-next-line -- permissionsContext: "0x...", -// add-next-line -+ permissionContext: "0x...", - delegationManager: "0x.., - // ... -}); -``` - -### ⚠️ `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`. - -```ts -await bundlerClient.sendUserOperationWithDelegation({ - // remove-next-line -- accountMetadata: { - // add-next-line -+ dependencies: { - factory: "0x..", - factoryData: "0x..." - }, - // ... - calls: [ - { - to: sessionAccount.address, - data: "0x", - value: 1n, - // remove-next-line -- permissionsContext: "0x..", - // add-next-line -+ permissionContext: "0x..", - delegationManager: "0x..", - }, - ], - // ... -}); -``` - -### ⚠️ `getDelegationHashOffchain` - -The function has been renamed to `hashDelegation` for improved clarity. - -```typescript -// remove-next-line -- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit"; -// add-next-line -+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils"; - -// remove-next-line -- const delegationHash = getDelegationHashOffchain(delegation); -// add-next-line -+ const delegationHash = hashDelegation(delegation); -``` - -### ⚠️ `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. - -```ts -await walletClient.requestExecutionPermissions([{ - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - // add-next-line -+ to: sessionAccount.address, - // remove-start -- signer: { -- type: "account", -- data: { -- address: sessionAccount.address, -- }, -- }, - // remove-end - // remove-next-line -- isAdjustmentAllowed: true, - permission: { - type: "erc20-token-periodic", - data: { - // ... - }, - // add-next-line -+ isAdjustmentAllowed: true, - }, -}]); -``` - -### ⚠️ `encodePermissionContexts` - -The utility function has been removed. See [`encodeDelegations`](../reference/delegation/index.md#encodedelegations) to encode the delegations. - -### ⚠️ `decodePermissionContexts` - -The utility function has been removed. See [`decodeDelegations`](../reference/delegation/index.md#decodedelegations) to decode the delegations. - -### ⚠️ `redeemDelegations` - -The `redeemDelegations` function and `Redemption` type have been removed. Use the [`DelegationManager.encode.redeemDelegations`](../reference/delegation/index.md#redeemdelegations) encoding utility. - -## Enhancements - -- New ERC-7715 Wallet Client actions have been added to [get the supported permission](../guides/advanced-permissions/get-supported-permissions.md), and [get granted permissions](../guides/advanced-permissions/get-granted-permissions.md) 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`](../reference/delegation/index.md#encodedelegation) and [`decodeDelegation`](../reference/delegation/index.md#decodedelegation) utilities for encoding and decoding single delegation. -- Allow scope type to be specified either as [ScopeType enum](../reference/types.md#scopetype) or string literal. -- Allow caveat type to be specified either as [CaveatType enum](../reference/types.md#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 - -- 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 - -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 - -| 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` | diff --git a/gator_versioned_docs/version-1.5.0/changelog/1.0.0.md b/gator_versioned_docs/version-1.5.0/changelog/1.0.0.md deleted file mode 100644 index 9410743c68f..00000000000 --- a/gator_versioned_docs/version-1.5.0/changelog/1.0.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_label: 1.0.0 -description: MetaMask Smart Accounts Kit v1.0.0 changelog ---- - -# What's new in v1.0.0? - -:::info 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 - -### ⚠️ `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. - -```ts -await walletClient.sendTransactionWithDelegation({ -// remove-next-line -- permissionsContext: "0x...", -// add-next-line -+ permissionContext: "0x...", - delegationManager: "0x.., - // ... -}); -``` - -### ⚠️ `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`. - -```ts -await bundlerClient.sendUserOperationWithDelegation({ - // remove-next-line -- accountMetadata: { - // add-next-line -+ dependencies: { - factory: "0x..", - factoryData: "0x..." - }, - // ... - calls: [ - { - to: sessionAccount.address, - data: "0x", - value: 1n, - // remove-next-line -- permissionsContext: "0x..", - // add-next-line -+ permissionContext: "0x..", - delegationManager: "0x..", - }, - ], - // ... -}); -``` - -### ⚠️ `getDelegationHashOffchain` - -The function has been renamed to `hashDelegation` for improved clarity. - -```typescript -// remove-next-line -- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit"; -// add-next-line -+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils"; - -// remove-next-line -- const delegationHash = getDelegationHashOffchain(delegation); -// add-next-line -+ const delegationHash = hashDelegation(delegation); -``` - -### ⚠️ `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. - -```ts -await walletClient.requestExecutionPermissions([{ - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - // add-next-line -+ to: sessionAccount.address, - // remove-start -- signer: { -- type: "account", -- data: { -- address: sessionAccount.address, -- }, -- }, - // remove-end - // remove-next-line -- isAdjustmentAllowed: true, - permission: { - type: "erc20-token-periodic", - data: { - // ... - }, - // add-next-line -+ isAdjustmentAllowed: true, - }, -}]); -``` - -### ⚠️ `encodePermissionContexts` - -The utility function has been removed. See [`encodeDelegations`](../reference/delegation/index.md#encodedelegations) to encode the delegations. - -### ⚠️ `decodePermissionContexts` - -The utility function has been removed. See [`decodeDelegations`](../reference/delegation/index.md#decodedelegations) to decode the delegations. - -### ⚠️ `redeemDelegations` - -The `redeemDelegations` function and `Redemption` type have been removed. Use the [`DelegationManager.encode.redeemDelegations`](../reference/delegation/index.md#redeemdelegations) encoding utility. - -## Enhancements - -- New ERC-7715 Wallet Client actions have been added to [get the supported permission](../guides/advanced-permissions/get-supported-permissions.md), and [get granted permissions](../guides/advanced-permissions/get-granted-permissions.md) 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`](../reference/delegation/index.md#encodedelegation) and [`decodeDelegation`](../reference/delegation/index.md#decodedelegation) utilities for encoding and decoding single delegation. -- Allow scope type to be specified either as [ScopeType enum](../reference/types.md#scopetype) or string literal. -- Allow caveat type to be specified either as [CaveatType enum](../reference/types.md#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 - -- 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 - -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 - -| 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` | diff --git a/gator_versioned_docs/version-1.6.0/changelog/1.0.0.md b/gator_versioned_docs/version-1.6.0/changelog/1.0.0.md deleted file mode 100644 index 9410743c68f..00000000000 --- a/gator_versioned_docs/version-1.6.0/changelog/1.0.0.md +++ /dev/null @@ -1,195 +0,0 @@ ---- -sidebar_label: 1.0.0 -description: MetaMask Smart Accounts Kit v1.0.0 changelog ---- - -# What's new in v1.0.0? - -:::info 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 - -### ⚠️ `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. - -```ts -await walletClient.sendTransactionWithDelegation({ -// remove-next-line -- permissionsContext: "0x...", -// add-next-line -+ permissionContext: "0x...", - delegationManager: "0x.., - // ... -}); -``` - -### ⚠️ `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`. - -```ts -await bundlerClient.sendUserOperationWithDelegation({ - // remove-next-line -- accountMetadata: { - // add-next-line -+ dependencies: { - factory: "0x..", - factoryData: "0x..." - }, - // ... - calls: [ - { - to: sessionAccount.address, - data: "0x", - value: 1n, - // remove-next-line -- permissionsContext: "0x..", - // add-next-line -+ permissionContext: "0x..", - delegationManager: "0x..", - }, - ], - // ... -}); -``` - -### ⚠️ `getDelegationHashOffchain` - -The function has been renamed to `hashDelegation` for improved clarity. - -```typescript -// remove-next-line -- import { getDelegationHashOffchain } from "@metamask/smart-accounts-kit"; -// add-next-line -+ import { hashDelegation } from "@metamask/smart-accounts-kit/utils"; - -// remove-next-line -- const delegationHash = getDelegationHashOffchain(delegation); -// add-next-line -+ const delegationHash = hashDelegation(delegation); -``` - -### ⚠️ `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. - -```ts -await walletClient.requestExecutionPermissions([{ - chainId: chain.id, - expiry, - // The requested permissions will be granted to the - // session account. - // add-next-line -+ to: sessionAccount.address, - // remove-start -- signer: { -- type: "account", -- data: { -- address: sessionAccount.address, -- }, -- }, - // remove-end - // remove-next-line -- isAdjustmentAllowed: true, - permission: { - type: "erc20-token-periodic", - data: { - // ... - }, - // add-next-line -+ isAdjustmentAllowed: true, - }, -}]); -``` - -### ⚠️ `encodePermissionContexts` - -The utility function has been removed. See [`encodeDelegations`](../reference/delegation/index.md#encodedelegations) to encode the delegations. - -### ⚠️ `decodePermissionContexts` - -The utility function has been removed. See [`decodeDelegations`](../reference/delegation/index.md#decodedelegations) to decode the delegations. - -### ⚠️ `redeemDelegations` - -The `redeemDelegations` function and `Redemption` type have been removed. Use the [`DelegationManager.encode.redeemDelegations`](../reference/delegation/index.md#redeemdelegations) encoding utility. - -## Enhancements - -- New ERC-7715 Wallet Client actions have been added to [get the supported permission](../guides/advanced-permissions/get-supported-permissions.md), and [get granted permissions](../guides/advanced-permissions/get-granted-permissions.md) 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`](../reference/delegation/index.md#encodedelegation) and [`decodeDelegation`](../reference/delegation/index.md#decodedelegation) utilities for encoding and decoding single delegation. -- Allow scope type to be specified either as [ScopeType enum](../reference/types.md#scopetype) or string literal. -- Allow caveat type to be specified either as [CaveatType enum](../reference/types.md#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 - -- 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 - -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 - -| 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` | diff --git a/gator_versioned_docs/version-1.0.0/assets/erc7715-request.png b/gator_versioned_docs/version-1.7.0/assets/erc7715-request.png similarity index 100% rename from gator_versioned_docs/version-1.0.0/assets/erc7715-request.png rename to gator_versioned_docs/version-1.7.0/assets/erc7715-request.png diff --git a/gator_versioned_docs/version-1.0.0/assets/scaffold-eth-7715.png b/gator_versioned_docs/version-1.7.0/assets/scaffold-eth-7715.png similarity index 100% rename from gator_versioned_docs/version-1.0.0/assets/scaffold-eth-7715.png rename to gator_versioned_docs/version-1.7.0/assets/scaffold-eth-7715.png diff --git a/gator_versioned_docs/version-1.0.0/assets/scaffold-eth-smart-accounts.png b/gator_versioned_docs/version-1.7.0/assets/scaffold-eth-smart-accounts.png similarity index 100% rename from gator_versioned_docs/version-1.0.0/assets/scaffold-eth-smart-accounts.png rename to gator_versioned_docs/version-1.7.0/assets/scaffold-eth-smart-accounts.png diff --git a/gator_versioned_docs/version-1.5.0/changelog/1.1.0.md b/gator_versioned_docs/version-1.7.0/changelog/1.2.0.md similarity index 86% rename from gator_versioned_docs/version-1.5.0/changelog/1.1.0.md rename to gator_versioned_docs/version-1.7.0/changelog/1.2.0.md index 4a6c4398882..1e9f185840c 100644 --- a/gator_versioned_docs/version-1.5.0/changelog/1.1.0.md +++ b/gator_versioned_docs/version-1.7.0/changelog/1.2.0.md @@ -1,16 +1,24 @@ --- -sidebar_label: 1.1.0 -description: MetaMask Smart Accounts Kit v1.1.0 changelog +sidebar_label: 1.2.0 +description: MetaMask Smart Accounts Kit v1.2.0 changelog --- -# What's new in v1.1.0? +# What's new in v1.2.0? + +:::info Analytics + +From this version onwards, Smart Accounts Kit collects anonymous usage metrics. + +See the [analytics documentation](https://github.com/MetaMask/smart-accounts-kit/tree/main/packages/smart-accounts-kit#analytics) +to learn what Smart Accounts Kit collects and how to opt out. + +::: ## Enhancements -- `toMetaMaskSmartAccount` accepts a new `nonceKeyManager` parameter for managing custom nonces. If provided, it enables - support for parallel execution. -- `getNonce` accepts a new `key` parameter to retrieve the nonce for a specified key. -- Smart Accounts Kit now supports Mantle. +- A new `decodeCaveat` utility decodes a caveat's encoded `terms`. + See the [API reference](../reference/delegation/index.md#decodecaveat) to learn more. +- Smart Accounts Kit now supports Katana. See [supported networks](../get-started/supported-networks.md) for more details. ## Contract addresses diff --git a/gator_versioned_docs/version-1.2.0/changelog/1.1.0.md b/gator_versioned_docs/version-1.7.0/changelog/1.5.0.md similarity index 84% rename from gator_versioned_docs/version-1.2.0/changelog/1.1.0.md rename to gator_versioned_docs/version-1.7.0/changelog/1.5.0.md index 114ea1e6e5d..9a0361bf79a 100644 --- a/gator_versioned_docs/version-1.2.0/changelog/1.1.0.md +++ b/gator_versioned_docs/version-1.7.0/changelog/1.5.0.md @@ -1,19 +1,20 @@ --- -sidebar_label: 1.1.0 -description: MetaMask Smart Accounts Kit v1.1.0 changelog +sidebar_label: 1.5.0 +description: MetaMask Smart Accounts Kit v1.5.0 changelog --- -# What's new in v1.1.0? +# What's new in v1.5.0? ## Enhancements -- `toMetaMaskSmartAccount` accepts a new `nonceKeyManager` parameter for managing custom nonces. If provided, it enables - support for parallel execution. -- `getNonce` accepts a new `key` parameter to retrieve the nonce for a specified key. -- Smart Accounts Kit now supports Mantle. - See [supported networks](../get-started/supported-networks.md) for more details. +- You can now use new ERC-7710 wallet client actions to create a redelegation and open redelegation from a delegation chain. + See the [API reference](../reference/erc7710/wallet-client.md) to learn more. +- You can now use `permissionContext` in `createDelegation` to redelegate from an encoded delegation chain. + See the [API reference](../reference/delegation/index.md#createdelegation). +- You can now use `permissionContext` in `createOpenDelegation` to redelegate from an encoded delegation chain. + See the [API reference](../reference/delegation/index.md#createopendelegation). -### Contract addresses +## 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), diff --git a/gator_versioned_docs/version-1.1.0/changelog/1.1.0.md b/gator_versioned_docs/version-1.7.0/changelog/1.6.0.md similarity index 73% rename from gator_versioned_docs/version-1.1.0/changelog/1.1.0.md rename to gator_versioned_docs/version-1.7.0/changelog/1.6.0.md index 114ea1e6e5d..337b60dfdf4 100644 --- a/gator_versioned_docs/version-1.1.0/changelog/1.1.0.md +++ b/gator_versioned_docs/version-1.7.0/changelog/1.6.0.md @@ -1,19 +1,28 @@ --- -sidebar_label: 1.1.0 -description: MetaMask Smart Accounts Kit v1.1.0 changelog +sidebar_label: 1.6.0 +description: MetaMask Smart Accounts Kit v1.6.0 changelog --- -# What's new in v1.1.0? +# What's new in v1.6.0? ## Enhancements -- `toMetaMaskSmartAccount` accepts a new `nonceKeyManager` parameter for managing custom nonces. If provided, it enables - support for parallel execution. -- `getNonce` accepts a new `key` parameter to retrieve the nonce for a specified key. -- Smart Accounts Kit now supports Mantle. - See [supported networks](../get-started/supported-networks.md) for more details. +- You can now use the experimental `createx402DelegationProvider` to create a delegation provider for use + with `x402Erc7710Client`. + See the [API reference](../reference/x402.md#createx402delegationprovider) to learn more. +- You can now use the `generateSalt` utility to generate a random 32-byte hex salt for creating + delegations, helping prevent hash collisions when creating identical delegations. + See the [API reference](../reference/delegation/index.md#generatesalt) to learn more. +- You can now use the ERC-7715 `token-approval-revocation` permission type to revoke token approvals. + See the [API reference](../reference/advanced-permissions/permissions.md#token-approval-revocation-permission) to learn more. +- You can now use the `approvalRevocation` caveat enforcer to constrain delegation + scopes to token approval revocations. + See the [API reference](../reference/delegation/caveats.md#approvalrevocation) to learn more. +- You can now use two new methods to decode error data. See the + [`decodeRevertData`](../reference/delegation/index.md#decoderevertdata) and + [`decodeRevertReason`](../reference/delegation/index.md#decoderevertreason) API references to learn more. -### Contract addresses +## 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), @@ -33,6 +42,7 @@ as used by this version of the toolkit. | Enforcer | Address | | ---------------------------------------- | -------------------------------------------- | +| ApprovalRevocationEnforcer | `0xe264F1f09A19505a1ca1a86D5b01E8bFdb64324A` | | AllowedCalldataEnforcer | `0xc2b0d624c1c4319760C96503BA27C347F3260f55` | | AllowedMethodsEnforcer | `0x2c21fD0Cb9DC8445CB3fb0DC5E7Bb0Aca01842B5` | | AllowedTargetsEnforcer | `0x7F20f61b1f09b08D970938F6fa563634d65c4EeB` | diff --git a/gator_versioned_docs/version-1.6.0/changelog/1.1.0.md b/gator_versioned_docs/version-1.7.0/changelog/1.7.0.md similarity index 85% rename from gator_versioned_docs/version-1.6.0/changelog/1.1.0.md rename to gator_versioned_docs/version-1.7.0/changelog/1.7.0.md index 4a6c4398882..79c78551097 100644 --- a/gator_versioned_docs/version-1.6.0/changelog/1.1.0.md +++ b/gator_versioned_docs/version-1.7.0/changelog/1.7.0.md @@ -1,17 +1,17 @@ --- -sidebar_label: 1.1.0 -description: MetaMask Smart Accounts Kit v1.1.0 changelog +sidebar_label: 1.7.0 +description: MetaMask Smart Accounts Kit v1.7.0 changelog --- -# What's new in v1.1.0? +# What's new in v1.7.0? ## Enhancements -- `toMetaMaskSmartAccount` accepts a new `nonceKeyManager` parameter for managing custom nonces. If provided, it enables - support for parallel execution. -- `getNonce` accepts a new `key` parameter to retrieve the nonce for a specified key. -- Smart Accounts Kit now supports Mantle. - See [supported networks](../get-started/supported-networks.md) for more details. +- You can now use the `METAMASK_FACILITATOR_ADDRESSES` and `METAMASK_FACILITATOR_ADDRESSES_DEV` + constants to constrain delegation redemption to MetaMask facilitator signers. +- The experimental `createx402DelegationProvider` now resolves redeemers as the intersection of + `redeemers.addresses` and the server's `facilitatorAddresses` when both are provided. + See the [API reference](../reference/x402.md#createx402delegationprovider) to learn more. ## Contract addresses @@ -33,6 +33,7 @@ as used by this version of the toolkit. | Enforcer | Address | | ---------------------------------------- | -------------------------------------------- | +| ApprovalRevocationEnforcer | `0xe264F1f09A19505a1ca1a86D5b01E8bFdb64324A` | | AllowedCalldataEnforcer | `0xc2b0d624c1c4319760C96503BA27C347F3260f55` | | AllowedMethodsEnforcer | `0x2c21fD0Cb9DC8445CB3fb0DC5E7Bb0Aca01842B5` | | AllowedTargetsEnforcer | `0x7F20f61b1f09b08D970938F6fa563634d65c4EeB` | diff --git a/gator_versioned_docs/version-1.0.0/concepts/advanced-permissions.md b/gator_versioned_docs/version-1.7.0/concepts/advanced-permissions.md similarity index 90% rename from gator_versioned_docs/version-1.0.0/concepts/advanced-permissions.md rename to gator_versioned_docs/version-1.7.0/concepts/advanced-permissions.md index 12ae2d3305a..b2571959543 100644 --- a/gator_versioned_docs/version-1.0.0/concepts/advanced-permissions.md +++ b/gator_versioned_docs/version-1.7.0/concepts/advanced-permissions.md @@ -13,14 +13,16 @@ Advanced Permissions eliminate the need for users to approve every transaction, It also enables dapps to execute transactions for users without an active wallet connection. :::note -This feature requires [MetaMask Flask 13.5.0](/snaps/get-started/install-flask) or later. +This feature requires [MetaMask](https://metamask.io/download) v13.23.0 or later. +See [supported Advanced Permissions](../get-started/supported-advanced-permissions.md) for the +minimum version required for each permission type. ::: ## ERC-7715 technical overview -[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_grantPermissions`. +[ERC-7715](https://eips.ethereum.org/EIPS/eip-7715) defines a JSON-RPC method `wallet_requestExecutionPermissions`. Dapps can use this method to request a wallet to grant the dapp permission to execute transactions on a user's behalf. -`wallet_grantPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission. +`wallet_requestExecutionPermissions` requires a `signer` parameter, which identifies the entity requesting or managing the permission. Common signer implementations include wallet signers, single key and multisig signers, and account signers. The Smart Accounts Kit supports multiple signer types. The documentation uses [an account signer](../guides/advanced-permissions/execute-on-metamask-users-behalf.md) as a common implementation example. diff --git a/gator_versioned_docs/version-1.0.0/concepts/delegation/caveat-enforcers.md b/gator_versioned_docs/version-1.7.0/concepts/delegation/caveat-enforcers.md similarity index 99% rename from gator_versioned_docs/version-1.0.0/concepts/delegation/caveat-enforcers.md rename to gator_versioned_docs/version-1.7.0/concepts/delegation/caveat-enforcers.md index a393d3d401c..d9d7bbd4a12 100644 --- a/gator_versioned_docs/version-1.0.0/concepts/delegation/caveat-enforcers.md +++ b/gator_versioned_docs/version-1.7.0/concepts/delegation/caveat-enforcers.md @@ -19,7 +19,8 @@ the delegation evaluates whether the execution meets its defined criteria. We strongly recommend using caveat enforcers. - Caveat enforcers safeguard the execution process but do not guarantee a final state post-redemption. Always consider the full impact of combined caveat enforcers. - ::: + +::: ## Hooks diff --git a/gator_versioned_docs/version-1.0.0/concepts/delegation/delegation-manager.md b/gator_versioned_docs/version-1.7.0/concepts/delegation/delegation-manager.md similarity index 100% rename from gator_versioned_docs/version-1.0.0/concepts/delegation/delegation-manager.md rename to gator_versioned_docs/version-1.7.0/concepts/delegation/delegation-manager.md diff --git a/gator_versioned_docs/version-1.0.0/concepts/delegation/delegation-scopes.md b/gator_versioned_docs/version-1.7.0/concepts/delegation/delegation-scopes.md similarity index 100% rename from gator_versioned_docs/version-1.0.0/concepts/delegation/delegation-scopes.md rename to gator_versioned_docs/version-1.7.0/concepts/delegation/delegation-scopes.md diff --git a/gator_versioned_docs/version-1.0.0/concepts/delegation/overview.md b/gator_versioned_docs/version-1.7.0/concepts/delegation/overview.md similarity index 100% rename from gator_versioned_docs/version-1.0.0/concepts/delegation/overview.md rename to gator_versioned_docs/version-1.7.0/concepts/delegation/overview.md diff --git a/gator_versioned_docs/version-1.1.0/concepts/smart-accounts.md b/gator_versioned_docs/version-1.7.0/concepts/smart-accounts.md similarity index 98% rename from gator_versioned_docs/version-1.1.0/concepts/smart-accounts.md rename to gator_versioned_docs/version-1.7.0/concepts/smart-accounts.md index 3bc48237cc9..22731c5837b 100644 --- a/gator_versioned_docs/version-1.1.0/concepts/smart-accounts.md +++ b/gator_versioned_docs/version-1.7.0/concepts/smart-accounts.md @@ -5,7 +5,7 @@ keywords: [MetaMask, smart accounts, account abstraction, ERC-4337] # MetaMask Smart Accounts -The Smart Accounts Kit enables you to create and manage _MetaMask Smart Accounts_. +The Smart Accounts Kit enables you to create and manage MetaMask Smart Accounts. MetaMask Smart Accounts are [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) smart contract accounts that support programmable account behavior and advanced features such as multi-signature approvals, automated transaction batching, and custom security policies. diff --git a/gator_versioned_docs/version-1.0.0/get-started/install.md b/gator_versioned_docs/version-1.7.0/get-started/install.md similarity index 84% rename from gator_versioned_docs/version-1.0.0/get-started/install.md rename to gator_versioned_docs/version-1.7.0/get-started/install.md index 056832b48e1..70b410e0dfc 100644 --- a/gator_versioned_docs/version-1.0.0/get-started/install.md +++ b/gator_versioned_docs/version-1.7.0/get-started/install.md @@ -6,10 +6,11 @@ keywords: [install, MetaMask, delegation, smart accounts kit, smart, accounts] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Install and set up the Smart Accounts Kit -This page provides instructions to install and set up the Smart Accounts Kit, enabling you to create and interact with [MetaMask Smart Accounts](../concepts/smart-accounts.md) into your dapp. +This page provides instructions to install and set up the Smart Accounts Kit in your dapp, enabling you to create and interact with MetaMask Smart Accounts. ## Prerequisites @@ -32,7 +33,7 @@ npm install @metamask/smart-accounts-kit ### 2. (Optional) Install the contracts -If you plan to extend the Delegation Framework smart contracts (for example, to +If you plan to extend the smart contracts (for example, to [create a custom caveat enforcer](/tutorials/create-custom-caveat-enforcer)), install the contract package using Foundry's command-line tool, Forge: diff --git a/gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/eip7702.md b/gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/eip7702.md similarity index 64% rename from gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/eip7702.md rename to gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/eip7702.md index 560e7499ae9..0433b224c0e 100644 --- a/gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/eip7702.md +++ b/gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/eip7702.md @@ -4,11 +4,17 @@ sidebar_label: EIP-7702 quickstart keywords: [quickstart, EIP-7702, externally owned account, EOA, smart account] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # EIP-7702 quickstart -This quickstart demonstrates how to upgrade your externally owned account (EOA) to support MetaMask Smart Accounts -functionality using an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction. This enables your EOA to leverage the benefits of account -abstraction, such as batch transactions, gas sponsorship, and [delegation capabilities](../../concepts/delegation/overview.md). +This quickstart demonstrates how to upgrade your EOA to support +functionality using an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction. +This enables your EOA to leverage the benefits of account abstraction, such as batch transactions, gas sponsorship, and delegation. + +:::note +This guide is for embedded wallets. To upgrade a MetaMask account, you can [use MetaMask Connect to upgrade to a smart account](/tutorials/upgrade-eoa-to-smart-account). +::: ## Prerequisites @@ -29,7 +35,7 @@ npm install @metamask/smart-accounts-kit ### 2. Set up a Public Client -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. This client will let the EOA query the account state and interact with the blockchain network. ```typescript @@ -44,8 +50,8 @@ const publicClient = createPublicClient({ ### 3. Set up a Bundler Client -Set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. -This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. ```typescript import { createBundlerClient } from 'viem/account-abstraction' @@ -58,8 +64,8 @@ const bundlerClient = createBundlerClient({ ### 4. Set up a Wallet Client -Set up [Viem Wallet Client](https://viem.sh/docs/clients/wallet) using Viem's `createWalletClient` function. -This lets you sign and submit EIP-7702 authorization. +Set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. +This lets you sign and submit [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) authorizations. ```typescript import { createWalletClient, http } from 'viem' @@ -77,13 +83,13 @@ export const walletClient = createWalletClient({ ### 5. Authorize a 7702 delegation -Create an authorization to map the contract code to an EOA, and sign it +Create an authorization to map the contract code to an EOA, and sign it using Viem's [`signAuthorization`](https://viem.sh/docs/eip7702/signAuthorization) action. The `signAuthorization` action does not support JSON-RPC accounts. -This example uses [`EIP7702StatelessDeleGator`](https://github.com/MetaMask/delegation-framework/blob/main/src/EIP7702/EIP7702StatelessDeleGator.sol) as the EIP-7702 delegator contract. +This example uses [`EIP7702StatelessDeleGator`](https://github.com/MetaMask/delegation-framework/blob/main/src/EIP7702/EIP7702StatelessDeleGator.sol) as the [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) delegator contract. It follows a stateless design, as it does not store signer data in the contract's state. This approach -provides a lightweight and secure way to upgrade an EOA to a smart account. +provides a lightweight and secure way to upgrade an EOA to a . ```typescript import { @@ -105,7 +111,7 @@ const authorization = await walletClient.signAuthorization({ ### 6. Submit the authorization -Once you have signed an authorization, you can send an EIP-7702 transaction to set the EOA code. +Once you have signed an authorization, you can send an [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) transaction to set the EOA code. Since the authorization cannot be sent by itself, you can include it alongside a dummy transaction. ```ts @@ -120,8 +126,8 @@ const hash = await walletClient.sendTransaction({ ### 7. Create a MetaMask smart account -Create a smart account instance for the EOA and start -leveraging the benefits of account abstraction. +Create a smart account instance for the EOA and start +leveraging the benefits of account abstraction. ```ts import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' @@ -139,7 +145,7 @@ const smartAccount = await toMetaMaskSmartAccount({ ### 8. Send a user operation -Send a user operation through the upgraded EOA, using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. +Send a user operation through the upgraded EOA, using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. ```ts import { parseEther } from 'viem' @@ -165,4 +171,3 @@ const userOperationHash = await bundlerClient.sendUserOperation({ - To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). - To quickly bootstrap a MetaMask Smart Accounts project, [use the CLI](../use-the-cli.md). -- You can also [use MetaMask Connect to upgrade a MetaMask account to a smart account](/tutorials/upgrade-eoa-to-smart-account). diff --git a/gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/index.md b/gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/index.md similarity index 67% rename from gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/index.md rename to gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/index.md index 2d22d8c36c9..3b07f1d26ea 100644 --- a/gator_versioned_docs/version-1.1.0/get-started/smart-account-quickstart/index.md +++ b/gator_versioned_docs/version-1.7.0/get-started/smart-account-quickstart/index.md @@ -4,9 +4,11 @@ sidebar_label: Smart account quickstart keywords: [quickstart, smart accounts, user operation] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # MetaMask Smart Accounts quickstart -You can get started quickly with [MetaMask Smart Accounts](../../concepts/smart-accounts.md) by creating your first smart account and sending a user operation. +You can get started quickly with [MetaMask Smart Accounts](../../concepts/smart-accounts.md) by creating your first smart account and sending a user operation. ## Prerequisites @@ -26,7 +28,8 @@ npm install @metamask/smart-accounts-kit ### 2. Set up a Public Client -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. This client will let the smart account query the signer's account state and interact with the blockchain network. +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +This client will let the smart account query the signer's account state and interact with the blockchain network. ```typescript import { createPublicClient, http } from 'viem' @@ -40,7 +43,8 @@ const publicClient = createPublicClient({ ### 3. Set up a Bundler Client -Set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. ```typescript import { createBundlerClient } from 'viem/account-abstraction' @@ -53,10 +57,10 @@ const bundlerClient = createBundlerClient({ ### 4. Create a MetaMask smart account -[Create a MetaMask smart account](../../guides/smart-accounts/create-smart-account.md) to send the first user operation. +Create a to send the first user operation. This example configures a Hybrid smart account, -which is a flexible smart account implementation that supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers: +which is a flexible smart account implementation that supports both an EOA owner and any number of passkey (WebAuthn) signers: ```typescript import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' @@ -73,11 +77,11 @@ const smartAccount = await toMetaMaskSmartAccount({ }) ``` -### 5. Send a user operation +See [Create a MetaMask smart account](../../guides/smart-accounts/create-smart-account.md) to learn how to configure different smart account types. -Send a user operation using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. +### 5. Send a user operation -See [Send a user operation](../../guides/smart-accounts/send-user-operation.md) to learn how to estimate fee per gas, and wait for the transaction receipt. +Send a user operation using Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. The smart account will remain counterfactual until the first user operation. If the smart account is not deployed, it will be automatically deployed upon the sending first user operation. @@ -102,6 +106,8 @@ const userOperationHash = await bundlerClient.sendUserOperation({ }) ``` +See [Send a user operation](../../guides/smart-accounts/send-user-operation.md) to learn how to estimate fee per gas, and wait for the transaction receipt. + ## Next steps - To grant specific permissions to other accounts from your smart account, [create a delegation](../../guides/delegation/execute-on-smart-accounts-behalf.md). diff --git a/gator_versioned_docs/version-1.7.0/get-started/supported-advanced-permissions.md b/gator_versioned_docs/version-1.7.0/get-started/supported-advanced-permissions.md new file mode 100644 index 00000000000..277029fa993 --- /dev/null +++ b/gator_versioned_docs/version-1.7.0/get-started/supported-advanced-permissions.md @@ -0,0 +1,23 @@ +--- +title: Supported Advanced Permissions +description: Supported Advanced Permissions for Smart Accounts Kit, MetaMask Flask, and MetaMask. +keywords: [MetaMask, smart accounts kit, supported advanced permissions, erc-7715, 7715] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +The following table displays the types supported by +the Smart Accounts Kit, [MetaMask Flask](/snaps/get-started/install-flask), and MetaMask production, and the minimum version required for each. + +If you don't see the Advanced Permissions type you're looking for, you can request it by +emailing [`hellogators@consensys.net`](mailto:hellogators@consensys.net). + +| Permission type | Smart Accounts Kit | MetaMask Flask | MetaMask | +| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------------------- | ----------- | +| [ERC-20 allowance](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-allowance-permission) | >= v1.4.0 | >= v13.32.1-flask.0 | >= v13.32.1 | +| [ERC-20 periodic](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [ERC-20 stream](../guides/advanced-permissions/use-permissions/erc20-token.md#erc-20-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Native token allowance](../guides/advanced-permissions/use-permissions/native-token.md#native-token-allowance-permission) | >= v1.4.0 | >= v13.32.1-flask.0 | >= v13.32.1 | +| [Native token periodic](../guides/advanced-permissions/use-permissions/native-token.md#native-token-periodic-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Native token stream](../guides/advanced-permissions/use-permissions/native-token.md#native-token-stream-permission) | >= v0.1.0 | >= v13.5.0 | >= v13.23.0 | +| [Token approval revocation](../guides/advanced-permissions/use-permissions/approval-revocation.md#token-approval-revocation-permission) | >= v1.6.0 | - | - | diff --git a/gator_versioned_docs/version-1.1.0/get-started/supported-networks.md b/gator_versioned_docs/version-1.7.0/get-started/supported-networks.md similarity index 81% rename from gator_versioned_docs/version-1.1.0/get-started/supported-networks.md rename to gator_versioned_docs/version-1.7.0/get-started/supported-networks.md index 34880dda4a6..06cb6d663af 100644 --- a/gator_versioned_docs/version-1.1.0/get-started/supported-networks.md +++ b/gator_versioned_docs/version-1.7.0/get-started/supported-networks.md @@ -7,67 +7,69 @@ keywords: [MetaMask, smart accounts kit, supported networks, mainnet, testnet] The following tables display the networks supported by each version of the Smart Accounts Kit. -If you don't see the network you're looking for, you can request support by emailing hellogators@consensys.net. +If you don't see the network you're looking for, you can request support by emailing [`hellogators@consensys.net`](mailto:hellogators@consensys.net). ## MetaMask Smart Accounts ### Mainnet networks -| Network Name | v0.2.0 | v0.3.0 | v1.0.0 | v1.1.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | | Arbitrum One | ✅ | ✅ | ✅ | ✅ | | Base | ✅ | ✅ | ✅ | ✅ | | Berachain | ✅ | ✅ | ✅ | ✅ | | Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo | ❌ | ❌ | ✅ | ✅ | -| Citrea | ❌ | ❌ | ✅ | ✅ | +| Celo | ✅ | ✅ | ✅ | ✅ | +| Citrea | ✅ | ✅ | ✅ | ✅ | | Ethereum | ✅ | ✅ | ✅ | ✅ | | Gnosis Chain | ✅ | ✅ | ✅ | ✅ | | Ink | ✅ | ✅ | ✅ | ✅ | +| Katana | ✅ | ✅ | ✅ | ✅ | | Linea | ✅ | ✅ | ✅ | ✅ | -| Mantle | ❌ | ❌ | ❌ | ✅ | -| MegaETH | ❌ | ❌ | ✅ | ✅ | +| Mantle | ✅ | ✅ | ✅ | ✅ | +| MegaETH | ✅ | ✅ | ✅ | ✅ | | Monad | ✅ | ✅ | ✅ | ✅ | | Optimism | ✅ | ✅ | ✅ | ✅ | | Polygon | ✅ | ✅ | ✅ | ✅ | -| Ronin | ❌ | ❌ | ✅ | ✅ | +| Ronin | ✅ | ✅ | ✅ | ✅ | | Sei | ✅ | ✅ | ✅ | ✅ | | Sonic | ✅ | ✅ | ✅ | ✅ | -| Tempo | ❌ | ❌ | ✅ | ✅ | +| Tempo | ✅ | ✅ | ✅ | ✅ | | Unichain | ✅ | ✅ | ✅ | ✅ | ### Testnet networks -| Network Name | v0.2.0 | v0.3.0 | v1.0.0 | v1.1.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | | Base Sepolia | ✅ | ✅ | ✅ | ✅ | | Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | | Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo Alfajores | ❌ | ❌ | ✅ | ✅ | +| Celo Alfajores | ✅ | ✅ | ✅ | ✅ | | Citrea | ✅ | ✅ | ✅ | ✅ | | Ethereum Sepolia | ✅ | ✅ | ✅ | ✅ | | Gnosis Chiado | ✅ | ✅ | ✅ | ✅ | | Hoodi | ✅ | ✅ | ✅ | ✅ | | Ink Sepolia | ✅ | ✅ | ✅ | ✅ | +| Bokuto | ✅ | ✅ | ✅ | ✅ | | Linea Sepolia | ✅ | ✅ | ✅ | ✅ | -| Mantle Sepolia | ❌ | ❌ | ❌ | ✅ | +| Mantle Sepolia | ✅ | ✅ | ✅ | ✅ | | MegaETH | ✅ | ✅ | ✅ | ✅ | | Monad | ✅ | ✅ | ✅ | ✅ | | Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | | Polygon Amoy | ✅ | ✅ | ✅ | ✅ | -| Ronin Saigon | ❌ | ❌ | ✅ | ✅ | +| Ronin Saigon | ✅ | ✅ | ✅ | ✅ | | Sei | ✅ | ✅ | ✅ | ✅ | | Sonic | ✅ | ✅ | ✅ | ✅ | -| Tempo Moderato | ❌ | ❌ | ✅ | ✅ | +| Tempo Moderato | ✅ | ✅ | ✅ | ✅ | | Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | ## Advanced Permissions (ERC-7715) ### Mainnet networks -| Network Name | v0.2.0 | v0.3.0 | v1.0.0 | v1.1.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | | Arbitrum One | ✅ | ✅ | ✅ | ✅ | @@ -87,7 +89,7 @@ If you don't see the network you're looking for, you can request support by emai ### Testnet networks -| Network Name | v0.2.0 | v0.3.0 | v1.0.0 | v1.1.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | | Base Sepolia | ✅ | ✅ | ✅ | ✅ | diff --git a/gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/advanced-permissions.md b/gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/advanced-permissions.md similarity index 89% rename from gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/advanced-permissions.md rename to gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/advanced-permissions.md index 27d6f83e3be..03ec33087d7 100644 --- a/gator_versioned_docs/version-1.1.0/get-started/use-scaffold-eth/advanced-permissions.md +++ b/gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/advanced-permissions.md @@ -4,6 +4,8 @@ sidebar_label: Advanced Permissions (ERC-7715) keywords: [scaffold-eth, delegation, advanced permissions, erc7715, 7715, template] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use Advanced Permissions with Scaffold-ETH 2 Use the [Advanced Permissions (ERC-7715) extension](https://github.com/MetaMask/erc-7715-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in @@ -25,7 +27,7 @@ Run the following command to install the Smart Accounts Kit extension: npx create-eth@latest -e metamask/erc-7715-extension your-project-name ``` -### 2. Set up enviroment variables +### 2. Set up environment variables Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the `NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. @@ -46,8 +48,8 @@ yarn start ### 4. Complete the Advanced Permissions lifecycle Navigate to the **Advanced Permissions (ERC-7715)** page in your Scaffold-ETH -frontend at http://localhost:3000/erc-7715-permissions, and follow the steps to request an advanced -permission, and execute a transaction on the user's behalf. +frontend at http://localhost:3000/erc-7715-permissions, and follow the steps to request an advanced +permission, and execute a transaction on the user's behalf. You can view the completed transaction on Etherscan. diff --git a/gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/smart-accounts.md b/gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/smart-accounts.md similarity index 78% rename from gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/smart-accounts.md rename to gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/smart-accounts.md index 8a491b7e080..568d63a0082 100644 --- a/gator_versioned_docs/version-1.0.0/get-started/use-scaffold-eth/smart-accounts.md +++ b/gator_versioned_docs/version-1.7.0/get-started/use-scaffold-eth/smart-accounts.md @@ -4,11 +4,13 @@ sidebar_label: MetaMask Smart Accounts keywords: [scaffold-eth, delegation, smart accounts, template] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use MetaMask Smart Accounts with Scaffold-ETH 2 Use the [MetaMask Smart Accounts extension](https://github.com/metamask/gator-extension) for [Scaffold-ETH 2](https://docs.scaffoldeth.io/) to bootstrap a project in -under two minutes. This extension helps you quickly generate the boilerplate code to create an embedded smart account, and complete -the delegation lifecycle (create, sign, and redeem a delegation). +under two minutes. This extension helps you quickly generate the boilerplate code to create an embedded smart account, and complete +the delegation lifecycle (create, sign, and redeem a delegation). ## Prerequisites @@ -27,7 +29,7 @@ Run the following command to install the Smart Accounts Kit extension: npx create-eth@latest -e metamask/gator-extension your-project-name ``` -### 2. Set up enviroment variables +### 2. Set up environment variables Navigate into the project's `nextjs` package, and create a `.env.local` file. Once created, update the `NEXT_PUBLIC_PIMLICO_API_KEY` environment variable with your Pimlico API Key. @@ -48,8 +50,9 @@ yarn start ### 4. Complete the delegation lifecycle Navigate to the **MetaMask Smart Accounts & Delegation** page in your Scaffold-ETH -frontend at http://localhost:3000/delegations, and follow the steps to deploy a delegator -account, create a delegate wallet, create a delegation, and redeem a delegation. +frontend at http://localhost:3000/delegations, and follow the steps to deploy a delegator +account, create a delegate wallet, +and create and redeem a delegation. You can view the completed transaction on Etherscan. diff --git a/gator_versioned_docs/version-1.7.0/get-started/use-skills.md b/gator_versioned_docs/version-1.7.0/get-started/use-skills.md new file mode 100644 index 00000000000..b5472c1dbf1 --- /dev/null +++ b/gator_versioned_docs/version-1.7.0/get-started/use-skills.md @@ -0,0 +1,59 @@ +--- +sidebar_label: Use skills +description: Use MetaMask Smart Accounts Kit skills with agent frameworks to build dapps +toc_max_heading_level: 2 +keywords: + [skill, delegation, smart accounts, ai, metamask smart accounts kit, agent framework, x402] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Use skills + +Use skills to give your agent framework context on the MetaMask Smart Accounts Kit. +Skills guide your agent through smart account creation, delegations, (ERC-7715), and [x402](../guides/x402/overview.md) +payments. + +Skills are available through the open-source [`MetaMask/skills`](https://github.com/MetaMask/skills) +repository. + +## Smart Accounts Kit + +This skill gives your agent context on the Smart Accounts Kit and how to integrate its +capabilities into your dapp, including smart account creation, delegations, and Advanced +Permissions. + +```bash +npx skills add MetaMask/smart-accounts-kit +``` + +### Key capabilities + +| Capability | Description | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Smart accounts | Integrate MetaMask Smart Accounts to support batch transactions, multi-sig signatures, and gas sponsorship. | +| Delegation | Integrate delegations to execute transactions on behalf of a smart account. | +| Advanced Permissions | Integrate Advanced Permissions to execute transactions on behalf of a MetaMask user. | + +## x402 Payments + +This skill helps your agent implement [x402 HTTP-based payments](../guides/x402/overview.md) using +the Smart Accounts Kit, enabling both buyer and seller flows with delegations and Advanced +Permissions. + +```bash +npx skills add MetaMask/skills/domains/web3-tools/skills/x402-payments +``` + +### Key capabilities + +| Capability | Description | +| ---------- | --------------------------------------------------------------------------- | +| Seller | Set up x402 payment endpoints that accept HTTP 402-based payments. | +| Buyer | Pay for x402-protected resources using delegations or Advanced Permissions. | + +## Next steps + +- [Install the Smart Accounts Kit](./install.md) +- [Create your first smart account](./smart-account-quickstart/index.md) +- [Learn about x402 payments](../guides/x402/overview.md) diff --git a/gator_versioned_docs/version-1.0.0/get-started/use-the-cli.md b/gator_versioned_docs/version-1.7.0/get-started/use-the-cli.md similarity index 66% rename from gator_versioned_docs/version-1.0.0/get-started/use-the-cli.md rename to gator_versioned_docs/version-1.7.0/get-started/use-the-cli.md index 62e79151e85..9cfca3407ed 100644 --- a/gator_versioned_docs/version-1.0.0/get-started/use-the-cli.md +++ b/gator_versioned_docs/version-1.7.0/get-started/use-the-cli.md @@ -1,9 +1,11 @@ --- -description: Get started with the MetaMask Smart Accounts Kit using the `@metamask/create-gator-app` CLI. +description: Get started with the MetaMask Smart Accounts Kit using the CLI. sidebar_label: Use the CLI keywords: [CLI, delegation, smart accounts, template] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use the Smart Accounts Kit CLI Use the `@metamask/create-gator-app` interactive CLI to bootstrap a project with the Smart Accounts Kit in under two minutes. @@ -25,6 +27,7 @@ Upon installation, you'll be asked the following prompts: ? Pick a framework: (Use arrow keys) ❯ nextjs vite-react + node ? Pick a template: (Use arrow keys) ❯ MetaMask Smart Accounts Starter MetaMask Smart Accounts & Delegation Starter @@ -44,19 +47,19 @@ See the following section to learn more about available CLI configurations. The CLI provides the following options to display CLI details, and further customize the template configuration. -| Option | Description | -| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `-v` or `--version` | Check the current version of the `@metamask/create-gator-app` CLI. | -| `-h` or `--help` | Display the available options. | -| `--skip-install` | Skip the installation of dependencies. | -| `--add-web3auth` | Add [MetaMask Embedded Wallets (previously Web3Auth)](/embedded-wallets) as a signer for the delegator account.
Supported templates:
- MetaMask Smart Accounts Starter
- MetaMask Smart Accounts & Delegation Starter | +| Option | Description | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-v` or `--version` | Check the current version of the `@metamask/create-gator-app` CLI. | +| `-h` or `--help` | Display the available options. | +| `--skip-install` | Skip the installation of dependencies. | +| `--add-web3auth` | Add [MetaMask Embedded Wallets (previously Web3Auth)](/embedded-wallets) as a signer for the delegator account.

Supported templates:
- MetaMask Smart Accounts Starter
- MetaMask Smart Accounts & Delegation Starter | ## Examples ### MetaMask Embedded Wallets configuration -To create a project that uses [MetaMask Embedded Wallets](/embedded-wallets) as the signer for your delegator -account, use the `--add-web3auth` option with `@metamask/create-gator-app`: +To create a project that uses [MetaMask Embedded Wallets](/embedded-wallets) as the signer for your +delegator account, use the `--add-web3auth` option with `@metamask/create-gator-app`: ```bash npx @metamask/create-gator-app --add-web3auth @@ -72,9 +75,10 @@ You'll be prompted to provide additional Web3Auth configuration details: ## Supported templates -| Template | Next.js | Vite React | -| ------------------------------------------------ | ------- | ---------- | -| MetaMask Smart Accounts Starter | ✅ | ✅ | -| MetaMask Smart Accounts & Delegation Starter | ✅ | ✅ | -| Farcaster Mini App Delegation Starter | ✅ | | -| Advanced Permissions (ERC-7715) Starter | ✅ | | +| Template | Next.js | Vite React | Node.js | +| ------------------------------------------------ | ------- | ---------- | ------- | +| MetaMask Smart Accounts Starter | ✅ | ✅ | ❌ | +| MetaMask Smart Accounts & Delegation Starter | ✅ | ✅ | ❌ | +| Farcaster Mini App Delegation Starter | ✅ | ❌ | ❌ | +| Advanced Permissions (ERC-7715) Starter | ✅ | ❌ | ❌ | +| x402 Server | ❌ | ❌ | ✅ | diff --git a/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/create-redelegation.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/create-redelegation.md new file mode 100644 index 00000000000..9c58bc89b61 --- /dev/null +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/create-redelegation.md @@ -0,0 +1,168 @@ +--- +description: Learn how to create a redelegation for Advanced Permissions. +sidebar_label: Create a redelegation +keywords: [advanced permissions, caveat, delegation scope, redelegation, delegation] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; + +# Create a redelegation + +Redelegation is a core feature that sets apart from other permission sharing frameworks. +It allows a session account (delegate) to create a delegation chain, passing on the same or reduced level of authority +from the MetaMask account (delegator). + +For example, if a dapp is granted permission to spend 10 USDC on a user's behalf, it can +further delegate that permission to specific agents, such as allowing a Swap agent to spend +up to 5 USDC. This creates a permission sharing chain in which the root permissions are +shared with additional parties. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../get-started/install.md) +- [Learn about Advanced Permissions.](../../concepts/advanced-permissions.md) +- [Learn how to request Advanced Permissions.](execute-on-metamask-users-behalf.md) + +## Request Advanced Permissions + +Request Advanced Permissions from the user with the Wallet Client's [`requestExecutionPermissions`](../../reference/advanced-permissions/wallet-client.md#requestexecutionpermissions) action. + +This example uses the [ERC-20 periodic permission](./use-permissions/erc20-token.md#erc-20-periodic-permission), allowing the +user to grant dapp the ability to spend 10 USDC on their behalf. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { sessionAccount, walletClient, tokenAddress } from './config.ts' +import { parseUnits } from 'viem' + +// Since current time is in seconds, we need to convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'erc20-token-periodic', + data: { + tokenAddress, + // 10 USDC in wei format. Since USDC has 6 decimals, 10 * 10^6 + periodAmount: parseUnits('10', 6), + // 1 day in seconds + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + + +```ts +import { createWalletClient, custom, createPublicClient, http } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' +import { toMetaMaskSmartAccount, Implementation } from '@metamask/smart-accounts-kit' +import { erc7715ProviderActions, erc7710WalletActions } from '@metamask/smart-accounts-kit/actions' +import { sepolia as chain } from 'viem/chains' + +// USDC address on Ethereum Sepolia. +export const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +const privateKey = '0x...' +const account = privateKeyToAccount(privateKey) + +export const sessionAccount = createWalletClient({ + account, + chain, + transport: http(), +}).extend(erc7710WalletActions()) + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + +## Create a redelegation + +Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from dapp to a Swap agent. + +To create a redelegation, provide the granted permission context as the `permissionContext` argument when calling [`redelegatePermissionContext`](../../reference/erc7710/wallet-client.md#redelegatepermissioncontext). +In the previous step, `sessionAccount` was extended with `erc7710WalletActions`. + +When you create a redelegation, apply the toolkit's [caveats](../../reference/delegation/caveats.md) +to narrow the Swap agent's authority. In this example, we'll use [`erc20TransferAmount`](../../reference/delegation/caveats.md#erc20transferamount) +enforcer, allowing your dapp to delegate the Swap agent only the ability to spend 5 USDC on the user's behalf. + +:::note +When creating a redelegation, you can only narrow the scope of the original authority, not expand it. +::: + + + + +```typescript +import { sessionAccount, agentAccount, tokenAddress } from './config.ts' +import { + createDelegation, + ScopeType, + getSmartAccountsEnvironment, + Caveats, + CaveatType, +} from '@metamask/smart-accounts-kit' +import { parseUnits } from 'viem' +import { sepolia as chain } from 'viem/chains' + +const caveats: Caveats = [ + { + type: CaveatType.Erc20TransferAmount, + tokenAddress, + // USDC has 6 decimal places. + maxAmount: parseUnits('5', 6), + }, +] + +const environment = getSmartAccountsEnvironment(chain.id) + +const { permissionContext: signedPermissionContext } = + await sessionAccount.redelegatePermissionContext({ + to: agentAccount.address, + environment, + permissionContext: grantedPermissions[0].context, + caveats, + }) +``` + + + + +```typescript +// Update the existing config to create a smart account for a Swap agent. + +const agentPrivateKey = '0x...' +export const agentAccount = privateKeyToAccount(agentPrivateKey) +``` + + + diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md similarity index 70% rename from gator_versioned_docs/version-1.1.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md rename to gator_versioned_docs/version-1.7.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md index 335acda6d9f..b3924cb94ba 100644 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/execute-on-metamask-users-behalf.md @@ -17,6 +17,7 @@ keywords: import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Perform executions on a MetaMask user's behalf @@ -30,16 +31,17 @@ In this guide, you'll request an ERC-20 periodic transfer permission from a Meta ## Prerequisites - [Install and set up the Smart Accounts Kit.](../../get-started/install.md) -- [Install MetaMask Flask 13.5.0 or later.](/snaps/get-started/install-flask) +- [Install MetaMask v13.23.0 or later](https://metamask.io/download) ## Steps ### 1. Set up a Wallet Client -Set up a [Viem Wallet Client](https://viem.sh/docs/clients/wallet) using Viem's `createWalletClient` function. This client will -help you interact with MetaMask Flask. +Set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. This client will +help you interact with MetaMask. -Then, extend the Wallet Client functionality using `erc7715ProviderActions`. These actions enable you to request Advanced Permissions from the user. +Then, extend the Wallet Client functionality using `erc7715ProviderActions`. +These actions enable you to request from the user. ```typescript import { createWalletClient, custom } from 'viem' @@ -52,7 +54,7 @@ const walletClient = createWalletClient({ ### 2. Set up a Public Client -Set up a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. This client will help you query the account state and interact with the blockchain network. ```typescript @@ -67,8 +69,9 @@ const publicClient = createPublicClient({ ### 3. Set up a session account -Set up a session account which can either be a smart account or an externally owned account (EOA) -to request Advanced Permissions. The requested permissions are granted to the session account, which +Set up a session account, which can be either a smart account or an +EOA, +to request . The requested permissions are granted to the session account, which is responsible for executing transactions on behalf of the user. @@ -104,51 +107,7 @@ const sessionAccount = privateKeyToAccount('0x...') -### 4. Check the EOA account code - -With MetaMask Flask 13.9.0 or later, Advanced Permissions support automatically upgrading a user's -account to a [MetaMask smart account](../../concepts/smart-accounts.md). On earlier versions, upgrade -the user to a smart account before requesting Advanced Permissions. - -If the user has not yet been upgraded, you can handle the upgrade [programmatically](/metamask-connect/evm/guides/send-transactions/batch-transactions) or ask the -user to [switch to a smart account manually](https://support.metamask.io/configure/accounts/switch-to-or-revert-from-a-smart-account/#how-to-switch-to-a-metamask-smart-account). - -:::info Why is a Smart Account upgrade is required? -MetaMask's Advanced Permissions (ERC-7715) implementation requires the user to be upgraded to a MetaMask -Smart Account because, under the hood, you're requesting a signature for an [ERC-7710 delegation](../../concepts/delegation/overview.md). -ERC-7710 delegation is one of the core features supported only by MetaMask Smart Accounts. -::: - -```typescript -import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' -import { sepolia as chain } from 'viem/chains' - -const addresses = await walletClient.requestAddresses() -const address = addresses[0] - -// Get the EOA account code -const code = await publicClient.getCode({ - address, -}) - -if (code) { - // The address to which EOA has delegated. According to EIP-7702, 0xef0100 || address - // represents the delegation. - // - // You need to remove the first 8 characters (0xef0100) to get the delegator address. - const delegatorAddress = `0x${code.substring(8)}` - - const statelessDelegatorAddress = getSmartAccountsEnvironment(chain.id).implementations - .EIP7702StatelessDeleGatorImpl - - // If account is not upgraded to MetaMask smart account, you can - // either upgrade programmatically or ask the user to switch to a smart account manually. - const isAccountUpgraded = - delegatorAddress.toLowerCase() === statelessDelegatorAddress.toLowerCase() -} -``` - -### 5. Request Advanced Permissions +### 4. Request Advanced Permissions Request Advanced Permissions from the user with the Wallet Client's `requestExecutionPermissions` action. In this example, you'll request an @@ -191,16 +150,16 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ ]) ``` -### 6. Set up a Viem client +### 5. Set up a Viem client Set up a Viem client depending on your session account type. -For a smart account, set up a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) -using Viem's `createBundlerClient` function. This lets you use the bundler service +For a smart account, set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +This lets you use the bundler service to estimate gas for user operations and submit transactions to the network. -For an EOA, set up a [Viem Wallet Client](https://viem.sh/docs/clients/wallet) -using Viem's `createWalletClient` function. This lets you send transactions directly to the network. +For an EOA, set up a Wallet Client using Viem's [`createWalletClient`](https://viem.sh/docs/clients/wallet) function. +This lets you send transactions directly to the network. The toolkit provides public actions for both of the clients which can be used to redeem Advanced Permissions, and execute transactions on a user's behalf. @@ -237,7 +196,7 @@ const sessionAccountWalletClient = createWalletClient({ -### 7. Redeem Advanced Permissions +### 6. Redeem Advanced Permissions The session account can now redeem the permissions. The redeem transaction is sent to the `DelegationManager` contract, which validates the delegation and executes actions on the user's behalf. @@ -255,7 +214,7 @@ import { calldata } from './config.ts' // These properties must be extracted from the permission response. const permissionContext = grantedPermissions[0].context -const delegationManager = grantedPermissions[0].signerMeta.delegationManager +const delegationManager = grantedPermissions[0].delegationManager // USDC address on Ethereum Sepolia. const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' @@ -287,7 +246,7 @@ import { calldata } from './config.ts' // These properties must be extracted from the permission response. const permissionContext = grantedPermissions[0].context -const delegationManager = grantedPermissions[0].signerMeta.delegationManager +const delegationManager = grantedPermissions[0].delegationManager // USDC address on Ethereum Sepolia. const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-granted-permissions.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-granted-permissions.md similarity index 92% rename from gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-granted-permissions.md rename to gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-granted-permissions.md index f8821e99b51..ff473d73974 100644 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-granted-permissions.md +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-granted-permissions.md @@ -6,11 +6,12 @@ keywords: [advanced permissions, granted execution permissions, erc-7715, 7715] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Get granted permissions [ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the granted execution permissions -for a wallet. Use the method to get the granted Advanced Permissions for a wallet. +for a wallet. Use the method to get the granted for a wallet. ## Prerequisites diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-supported-permissions.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-supported-permissions.md similarity index 91% rename from gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-supported-permissions.md rename to gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-supported-permissions.md index b8cb9af514d..6c62bf2c61d 100644 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/get-supported-permissions.md +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/get-supported-permissions.md @@ -6,11 +6,12 @@ keywords: [advanced permissions, supported execution permissions, erc-7715, 7715 import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Get supported permissions [ERC-7715](https://eip.tools/eip/7715) defines an RPC method that returns the execution permissions -a wallet supports. Use the method to verify the available Advanced Permissions types and +a wallet supports. Use the method to verify the available types and rules before sending requests. ## Prerequisites diff --git a/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/approval-revocation.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/approval-revocation.md new file mode 100644 index 00000000000..2ae1b7c41c4 --- /dev/null +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/approval-revocation.md @@ -0,0 +1,80 @@ +--- +description: Learn how to use the token approval revocation permission with Advanced Permissions (ERC-7715). +keywords: [permissions, revocation, approval, 7715, erc-7715, erc20, erc721, permit2] +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# Use approval revocation permission + +[Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports the token approval +revocation permission type that allows you to request permission to revoke existing token approvals +on behalf of the user. + +## Prerequisites + +- [Install and set up the Smart Accounts Kit.](../../../get-started/install.md) +- [Configure the Smart Accounts Kit.](../../configure-toolkit.md) +- [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) + +## Token approval revocation permission + +This permission type enables revoking existing token approvals on behalf of the user. + +For example, a user signs an ERC-7715 permission that lets a dapp revoke any ERC-20 token +allowances periodically, or during an ongoing exploit. + +See the [token approval revocation permission API reference](../../../reference/advanced-permissions/permissions.md#token-approval-revocation-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) + +// 30 days from now. +const expiry = currentTime + 60 * 60 * 24 * 30 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'token-approval-revocation', + data: { + erc20Approve: true, + erc721Approve: false, + erc721SetApprovalForAll: false, + permit2Approve: true, + permit2Lockdown: false, + permit2InvalidateNonces: false, + justification: 'Permission to revoke ERC-20 token approvals', + }, + isAdjustmentAllowed: false, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/erc20-token.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/erc20-token.md similarity index 81% rename from gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/erc20-token.md rename to gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/erc20-token.md index a272d0ba54b..efc34146e80 100644 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/erc20-token.md +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/erc20-token.md @@ -1,6 +1,6 @@ --- description: Learn how to use the ERC-20 token permissions with Advanced Permissions (ERC-7715). -keywords: [permissions, spending limit, restrict, 7715, erc-7715, erc20-permissions, revocation] +keywords: [permissions, spending limit, restrict, 7715, erc-7715, erc20-permissions] --- import Tabs from "@theme/Tabs"; @@ -9,7 +9,7 @@ import TabItem from "@theme/TabItem"; # Use ERC-20 token permissions [Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports ERC-20 token permission types that allow you to request fine-grained -permissions for ERC-20 token transfers with time-based (periodic), streaming, or revocation conditions, depending on your use case. +permissions for ERC-20 token transfers with periodic, fixed allowance, or streaming conditions, depending on your use case. ## Prerequisites @@ -17,14 +17,15 @@ permissions for ERC-20 token transfers with time-based (periodic), streaming, or - [Configure the Smart Accounts Kit.](../../configure-toolkit.md) - [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) -## ERC-20 periodic permission +## ERC-20 allowance permission -This permission type ensures a per-period limit for ERC-20 token transfers. At the start of each new period, the allowance resets. +This permission type ensures a fixed ERC-20 token allowance. +It allows transfers up to a maximum total amount and doesn't reset by period. -For example, a user signs an ERC-7715 permission that lets a dapp spend up to 10 USDC on their behalf each day. The dapp can transfer a total of -10 USDC per day; the limit resets at the beginning of the next day. +For example, a user signs an ERC-7715 permission that lets your dapp spend up to 50 USDC in total. +After the dapp transfers 50 USDC, no additional transfers are allowed under this permission. -See the [ERC-20 periodic permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-periodic-permission) for more information. +See the [ERC-20 allowance permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-allowance-permission) for more information. @@ -46,18 +47,17 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ { chainId: chain.id, expiry, - // The requested permissions will granted to the + // The requested permissions will be granted to the // session account. to: sessionAccount.address, permission: { - type: 'erc20-token-periodic', + type: 'erc20-token-allowance', data: { tokenAddress, - // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6. - periodAmount: parseUnits('10', 6), - // 1 day in seconds. - periodDuration: 86400, - justification: 'Permission to transfer 10 USDC every day', + // 50 USDC in WEI format. Since USDC has 6 decimals, 50 * 10^6. + allowanceAmount: parseUnits('50', 6), + startTime: currentTime, + justification: 'Permission to transfer up to 50 USDC in total', }, isAdjustmentAllowed: true, }, @@ -80,16 +80,14 @@ export const walletClient = createWalletClient({ -## ERC-20 stream permission +## ERC-20 periodic permission -This permission type ensures a linear streaming transfer limit for ERC-20 tokens. Token transfers are blocked until the -defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the -configured rate, up to the maximum allowed amount. +This permission type ensures a per-period limit for ERC-20 token transfers. At the start of each new period, the allowance resets. -For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.1 USDC per second, starting with an initial amount -of 1 USDC, up to a maximum of 2 USDC. +For example, a user signs an ERC-7715 permission that lets a dapp spend up to 10 USDC on their behalf each day. The dapp can transfer a total of +10 USDC per day; the limit resets at the beginning of the next day. -See the [ERC-20 stream permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-stream-permission) for more information. +See the [ERC-20 periodic permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-periodic-permission) for more information. @@ -111,21 +109,18 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ { chainId: chain.id, expiry, - // The requested permissions will granted to the + // The requested permissions will be granted to the // session account. to: sessionAccount.address, permission: { - type: 'erc20-token-stream', + type: 'erc20-token-periodic', data: { tokenAddress, - // 0.1 USDC in WEI format. Since USDC has 6 decimals, 0.1 * 10^6. - amountPerSecond: parseUnits('0.1', 6), - // 1 USDC in WEI format. Since USDC has 6 decimals, 1 * 10^6. - initialAmount: parseUnits('1', 6), - // 2 USDC in WEI format. Since USDC has 6 decimals, 2 * 10^6. - maxAmount: parseUnits('2', 6), - startTime: currentTime, - justification: 'Permission to use 0.1 USDC per second', + // 10 USDC in WEI format. Since USDC has 6 decimals, 10 * 10^6. + periodAmount: parseUnits('10', 6), + // 1 day in seconds. + periodDuration: 86400, + justification: 'Permission to transfer 10 USDC every day', }, isAdjustmentAllowed: true, }, @@ -138,6 +133,7 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ ```typescript import { createWalletClient, custom } from 'viem' +import { privateKeyToAccount } from 'viem/accounts' import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' export const walletClient = createWalletClient({ @@ -148,20 +144,23 @@ export const walletClient = createWalletClient({ -## ERC-20 revocation permission +## ERC-20 stream permission -This permission type enables revoking an existing ERC-20 token allowance on behalf of the user. +This permission type ensures a linear streaming transfer limit for ERC-20 tokens. Token transfers are blocked until the +defined start timestamp. At the start, a specified initial amount is released, after which tokens accrue linearly at the +configured rate, up to the maximum allowed amount. -For example, a user signs an ERC-7715 permission that lets a dapp revoke any ERC-20 token allowances -periodically, or during an ongoing exploit. +For example, a user signs an ERC-7715 permission that allows a dapp to spend 0.1 USDC per second, starting with an initial amount +of 1 USDC, up to a maximum of 2 USDC. -See the [ERC-20 revocation permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-revocation-permission) for more information. +See the [ERC-20 stream permission API reference](../../../reference/advanced-permissions/permissions.md#erc-20-stream-permission) for more information. ```typescript import { sepolia as chain } from 'viem/chains' +import { parseUnits } from 'viem' import { walletClient } from './client.ts' // Since current time is in seconds, convert milliseconds to seconds. @@ -169,17 +168,28 @@ const currentTime = Math.floor(Date.now() / 1000) // 1 week from now. const expiry = currentTime + 604800 +// USDC address on Ethereum Sepolia. +const tokenAddress = '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238' + const grantedPermissions = await walletClient.requestExecutionPermissions([ { chainId: chain.id, expiry, - // The requested permissions will granted to the + // The requested permissions will be granted to the // session account. to: sessionAccount.address, permission: { - type: 'erc20-token-revocation', + type: 'erc20-token-stream', data: { - justification: 'Permission to revoke ERC-20 token allowances', + tokenAddress, + // 0.1 USDC in WEI format. Since USDC has 6 decimals, 0.1 * 10^6. + amountPerSecond: parseUnits('0.1', 6), + // 1 USDC in WEI format. Since USDC has 6 decimals, 1 * 10^6. + initialAmount: parseUnits('1', 6), + // 2 USDC in WEI format. Since USDC has 6 decimals, 2 * 10^6. + maxAmount: parseUnits('2', 6), + startTime: currentTime, + justification: 'Permission to use 0.1 USDC per second', }, isAdjustmentAllowed: true, }, diff --git a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/native-token.md b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/native-token.md similarity index 69% rename from gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/native-token.md rename to gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/native-token.md index 5460a15e17c..ee1c184dbb5 100644 --- a/gator_versioned_docs/version-1.1.0/guides/advanced-permissions/use-permissions/native-token.md +++ b/gator_versioned_docs/version-1.7.0/guides/advanced-permissions/use-permissions/native-token.md @@ -18,7 +18,7 @@ import TabItem from "@theme/TabItem"; # Use native token permissions [Advanced Permissions (ERC-7715)](../../../concepts/advanced-permissions.md) supports native token permission types that allow you to request fine-grained -permissions for native token transfers with time-based (periodic) or streaming conditions, depending on your use case. +permissions for native token transfers with periodic, fixed-allowance, or streaming conditions, depending on your use case. ## Prerequisites @@ -26,6 +26,65 @@ permissions for native token transfers with time-based (periodic) or streaming c - [Configure the Smart Accounts Kit.](../../configure-toolkit.md) - [Create a session account.](../execute-on-metamask-users-behalf.md#3-set-up-a-session-account) +## Native token allowance permission + +This permission type ensures a fixed native token allowance. +It allows transfers up to a maximum total amount and doesn't reset by period. + +For example, a user signs an ERC-7715 permission that lets your dapp spend up to 0.05 ETH in total. +After the dapp transfers 0.05 ETH, no additional transfers are allowed under this permission. + +See the [native token allowance permission API reference](../../../reference/advanced-permissions/permissions.md#native-token-allowance-permission) for more information. + + + + +```typescript +import { sepolia as chain } from 'viem/chains' +import { parseEther } from 'viem' +import { walletClient } from './client.ts' + +// Since current time is in seconds, convert milliseconds to seconds. +const currentTime = Math.floor(Date.now() / 1000) +// 1 week from now. +const expiry = currentTime + 604800 + +const grantedPermissions = await walletClient.requestExecutionPermissions([ + { + chainId: chain.id, + expiry, + // The requested permissions will be granted to the + // session account. + to: sessionAccount.address, + permission: { + type: 'native-token-allowance', + data: { + // 0.05 ETH in wei format. + allowanceAmount: parseEther('0.05'), + startTime: currentTime, + justification: 'Permission to transfer up to 0.05 ETH in total', + }, + isAdjustmentAllowed: true, + }, + }, +]) +``` + + + + +```typescript +import { createWalletClient, custom } from 'viem' +import { erc7715ProviderActions } from '@metamask/smart-accounts-kit/actions' + +export const walletClient = createWalletClient({ + transport: custom(window.ethereum), +}).extend(erc7715ProviderActions()) +``` + + + + ## Native token periodic permission This permission type ensures a per-period limit for native token transfers. At the start of each new period, the allowance resets. @@ -52,7 +111,7 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ { chainId: chain.id, expiry, - // The requested permissions will granted to the + // The requested permissions will be granted to the // session account. to: sessionAccount.address, permission: { @@ -114,7 +173,7 @@ const grantedPermissions = await walletClient.requestExecutionPermissions([ { chainId: chain.id, expiry, - // The requested permissions will granted to the + // The requested permissions will be granted to the // session account. to: sessionAccount.address, permission: { diff --git a/gator_versioned_docs/version-1.0.0/guides/configure-toolkit.md b/gator_versioned_docs/version-1.7.0/guides/configure-toolkit.md similarity index 89% rename from gator_versioned_docs/version-1.0.0/guides/configure-toolkit.md rename to gator_versioned_docs/version-1.7.0/guides/configure-toolkit.md index 1f37d479e7d..0a5302bf176 100644 --- a/gator_versioned_docs/version-1.0.0/guides/configure-toolkit.md +++ b/gator_versioned_docs/version-1.7.0/guides/configure-toolkit.md @@ -6,11 +6,13 @@ keywords: [configure, smart accounts kit, bundler, paymaster, smart accounts env import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Configure the Smart Accounts Kit -The Smart Accounts Kit is highly configurable, providing support for custom [bundlers and paymasters](#configure-the-bundler). -You can also configure the [toolkit environment](#optional-configure-the-toolkit-environment) to interact with the [Delegation Framework](../concepts/delegation/overview.md#delegation-framework). +The Smart Accounts Kit is highly configurable, providing support for custom bundlers and paymasters. +You can also configure the toolkit environment to interact with the +. ## Prerequisites @@ -18,7 +20,7 @@ You can also configure the [toolkit environment](#optional-configure-the-toolkit ## Configure the bundler -The toolkit uses Viem's Account Abstraction API to configure custom bundlers and paymasters. +The toolkit uses Viem's Account Abstraction API to configure custom bundlers and paymasters. This provides a robust and flexible foundation for creating and managing [MetaMask Smart Accounts](../concepts/smart-accounts.md). See Viem's [account abstraction documentation](https://viem.sh/account-abstraction) for more information on the API's features, methods, and best practices. @@ -49,7 +51,7 @@ Replace the bundler and paymaster URLs with your bundler and paymaster endpoints For example, you can use endpoints from [Pimlico](https://docs.pimlico.io/references/bundler), [Infura](https://docs.infura.io/), or [ZeroDev](https://docs.zerodev.app/meta-infra/intro). :::note -Providing a paymaster is optional when configuring your bundler client. However, if you choose not to use a paymaster, the smart contract account must have enough funds to pay gas fees. +Providing a paymaster is optional when configuring your bundler client. However, if you choose not to use a paymaster, the smart account must have enough funds to pay gas fees. ::: ## (Optional) Configure the toolkit environment @@ -63,7 +65,7 @@ It serves several key purposes: ### Resolve the environment -When you create a [MetaMask smart account](../concepts/smart-accounts.md), the toolkit automatically +When you create a , the toolkit automatically resolves the environment based on the version it requires and the chain configured. If no environment is found for the specified chain, it throws an error. @@ -115,8 +117,8 @@ See the changelog of the toolkit version you are using (in the left sidebar) for ::: Alternatively, you can use the [`getSmartAccountsEnvironment`](../reference/delegation/index.md#getsmartaccountsenvironment) function to resolve the environment. -This function is especially useful if your delegator is not a smart account when -creating a [redelegation](../concepts/delegation/overview.md#delegation-types). +This function is especially useful if your delegator is not a smart account when +creating a redelegation. ```typescript import { getSmartAccountsEnvironment, SmartAccountsEnvironment } from '@metamask/smart-accounts-kit' @@ -128,7 +130,7 @@ const environment: SmartAccountsEnvironment = getSmartAccountsEnvironment(sepoli ### Deploy a custom environment -You can deploy the contracts using any method, but the toolkit provides a convenient [`deploySmartAccountsEnvironment`](../reference/delegation/index.md#deploysmartaccountsenvironment) function. This function simplifies deploying the Delegation Framework contracts to your desired EVM chain. +You can deploy the contracts using any method, but the toolkit provides a convenient [`deploySmartAccountsEnvironment`](../reference/delegation/index.md#deploysmartaccountsenvironment) function. This function simplifies deploying the contracts to your desired EVM chain. This function requires a Viem [Public Client](https://viem.sh/docs/clients/public), [Wallet Client](https://viem.sh/docs/clients/wallet), and [Chain](https://viem.sh/docs/glossary/types#chain) to deploy the contracts and resolve the `SmartAccountsEnvironment`. @@ -260,6 +262,6 @@ overrideDeployedEnvironment( ``` :::note -Make sure to specify the Delegation Framework version required by the toolkit. +Make sure to specify the version required by the toolkit. See the changelog of the toolkit version you are using (in the left sidebar) for its required Framework version. ::: diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/check-delegation-state.md b/gator_versioned_docs/version-1.7.0/guides/delegation/check-delegation-state.md similarity index 94% rename from gator_versioned_docs/version-1.0.0/guides/delegation/check-delegation-state.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/check-delegation-state.md index 8642d9b5cd0..dc5fff8a041 100644 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/check-delegation-state.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/check-delegation-state.md @@ -7,6 +7,7 @@ keywords: [delegation, state, caveat enforcer, delegation scope] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Check the delegation state @@ -27,7 +28,7 @@ Use the `CaveatEnforcerClient` to check the available balances for specific scop ## Create a `CaveatEnforcerClient` To check the delegation state, create a [`CaveatEnforcerClient`](../../reference/delegation/caveat-enforcer-client.md). -This client allows you to interact with the caveat enforcers of the delegation, and read the required state. +This client allows you to interact with the caveat enforcers of the delegation, and read the required state. diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/create-redelegation.md b/gator_versioned_docs/version-1.7.0/guides/delegation/create-redelegation.md similarity index 89% rename from gator_versioned_docs/version-1.0.0/guides/delegation/create-redelegation.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/create-redelegation.md index 5001df971a5..616146a2ca2 100644 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/create-redelegation.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/create-redelegation.md @@ -7,16 +7,17 @@ keywords: [delegation, state, caveat enforcer, delegation scope, redelegation] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Create a redelegation Redelegation is a core feature that sets delegations apart from other permission sharing frameworks. -It allows a delegate to create a delegation chain, passing on the same or reduced level of authority -from the root delegator. +It allows a delegate to create a delegation chain, passing on the same or reduced level of authority +from the root delegator. For example, if Alice grants Bob permission to spend 10 USDC on her behalf, Bob can further grant Carol permission to spend up to 5 USDC on Alice's behalf-that is, Bob can redelegate. This creates a delegation -chain where the root permissions are reshared with additional parties. +chain where the root permissions are re-shared with additional parties. ## Prerequisites @@ -27,7 +28,7 @@ chain where the root permissions are reshared with additional parties. Create a [root delegation](../../concepts/delegation/overview.md#root-delegation) from Alice to Bob. -This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing +This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing Alice to delegate to Bob the ability to spend 10 USDC on her behalf. @@ -94,8 +95,8 @@ export const bobSmartAccount = await toMetaMaskSmartAccount({ Create a [redelegation](../../concepts/delegation/overview.md#redelegation) from Bob to Carol. When creating a redelegation, you can only narrow the scope of the original authority, not expand it. -To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [createDelegation](../../reference/delegation/index.md#createdelegation). -This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing +To create a redelegation, provide the signed delegation as the `parentDelegation` argument when calling [`createDelegation`](../../reference/delegation/index.md#createdelegation). +This example uses the [`erc20TransferAmount`](use-delegation-scopes/spending-limit.md#erc-20-transfer-scope) scope, allowing Bob to delegate to Carol the ability to spend 5 USDC on Alice's behalf. diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/disable-delegation.md b/gator_versioned_docs/version-1.7.0/guides/delegation/disable-delegation.md similarity index 96% rename from gator_versioned_docs/version-1.1.0/guides/delegation/disable-delegation.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/disable-delegation.md index 55939ad2403..fca67204dce 100644 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/disable-delegation.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/disable-delegation.md @@ -7,6 +7,7 @@ keywords: [delegation, disable, revoke] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Disable a delegation @@ -28,7 +29,7 @@ delegation, the transaction will revert, preventing him from spending Alice's US To disable a delegation, you can use the [`disableDelegation`](../../reference/delegation/index.md#disabledelegation) utility function from the toolkit to generate calldata. Once the calldata is prepared, you can send it to the -Delegation Manager to disable the delegation. + to disable the delegation. diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/execute-on-smart-accounts-behalf.md b/gator_versioned_docs/version-1.7.0/guides/delegation/execute-on-smart-accounts-behalf.md similarity index 80% rename from gator_versioned_docs/version-1.0.0/guides/delegation/execute-on-smart-accounts-behalf.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/execute-on-smart-accounts-behalf.md index 3024bc4c7c7..aab174cc104 100644 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/execute-on-smart-accounts-behalf.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/execute-on-smart-accounts-behalf.md @@ -6,6 +6,7 @@ keywords: [execution, smart account, create, redeem, delegation, delegator, dele import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Perform executions on a smart account's behalf @@ -20,10 +21,10 @@ You'll complete the delegation lifecycle (create, sign, and redeem a delegation) ## Steps -### 1. Create a Public Client +### 1. Set up a Public Client -Create a [Viem Public Client](https://viem.sh/docs/clients/public) using Viem's `createPublicClient` function. -You will configure Alice's account (the delegator) and the Bundler Client with the Public Client, which you can use to query the signer's account state and interact with smart contracts. +Set up a Public Client using Viem's [`createPublicClient`](https://viem.sh/docs/clients/public) function. +You will configure Alice's account (the delegator) and the Bundler Client with the Public Client, which you can use to query the signer's account state and interact with smart contracts. ```typescript import { createPublicClient, http } from 'viem' @@ -35,10 +36,10 @@ const publicClient = createPublicClient({ }) ``` -### 2. Create a Bundler Client +### 2. Set up a Bundler Client -Create a [Viem Bundler Client](https://viem.sh/account-abstraction/clients/bundler) using Viem's `createBundlerClient` function. -You can use the bundler service to estimate gas for user operations and submit transactions to the network. +Set up a Bundler Client using Viem's [`createBundlerClient`](https://viem.sh/account-abstraction/clients/bundler) function. +You can use the bundler service to estimate gas for user operations and submit transactions to the network. ```typescript import { createBundlerClient } from 'viem/account-abstraction' @@ -51,11 +52,11 @@ const bundlerClient = createBundlerClient({ ### 3. Create a delegator account -Create an account to represent Alice, the delegator who will create a delegation. -The delegator must be a MetaMask smart account; use the toolkit's [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) method to create the delegator account. +Create an account to represent Alice, the delegator who will create a delegation. +The delegator must be a ; use the toolkit's [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) method to create the delegator account. -A Hybrid smart account is a flexible smart account implementation that supports both an externally owned account (EOA) owner and any number of P256 (passkey) signers. -This examples configures a [Hybrid smart account](../smart-accounts/create-smart-account.md#hybrid-smart-account) with an Account signer: +This example configures a Hybrid smart account, +which is a flexible smart account implementation that supports both an EOA owner and any number of passkey (WebAuthn) signers: ```typescript import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' @@ -78,7 +79,7 @@ See [how to configure other smart account types](../smart-accounts/create-smart- ### 4. Create a delegate account -Create an account to represent Bob, the delegate who will receive the delegation. The delegate can be a smart account or an externally owned account (EOA): +Create an account to represent Bob, the delegate who will receive the delegation. The delegate can be a smart account or an EOA: @@ -177,7 +178,7 @@ Bob can now redeem the delegation. The redeem transaction is sent to the `Delega To prepare the calldata for the redeem transaction, use the [`redeemDelegations`](../../reference/delegation/index.md#redeemdelegations) method from `DelegationManager`. Since Bob is redeeming a single delegation chain, use the [`SingleDefault`](../../concepts/delegation/delegation-manager.md#execution-modes) execution mode. -Bob can redeem the delegation by submitting a user operation if his account is a smart account, or a regular transaction if his account is an EOA. In this example, Bob transfers 1 USDC from Alice’s account to his own. +Bob can redeem the delegation by submitting a user operation if his account is a smart account, or a regular transaction if his account is an EOA. In this example, Bob transfers 1 USDC from Alice's account to his own. diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/constrain-scope.md b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/constrain-scope.md similarity index 97% rename from gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/constrain-scope.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/constrain-scope.md index b6b6e7bbeef..9077ae1a447 100644 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/constrain-scope.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/constrain-scope.md @@ -7,6 +7,7 @@ keywords: [constrain, restrict, scope, caveat, caveat enforcer] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Constrain a delegation scope diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/function-call.md b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/function-call.md similarity index 90% rename from gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/function-call.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/function-call.md index 499d38973e0..7e63910c311 100644 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/function-call.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/function-call.md @@ -5,10 +5,11 @@ keywords: [delegation scope, function call, restrict, delegation] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Use the function call scope -The function call scope defines the specific methods, contract addresses, and calldata that are allowed for the delegation. +The function call scope defines the specific methods, contract addresses, and calldata that are allowed for the delegation. For example, Alice delegates to Bob the ability to call the `approve` function on the USDC contract, with the approval amount set to `0`. ## Prerequisites @@ -22,7 +23,7 @@ For example, Alice delegates to Bob the ability to call the `approve` function o This scope requires `targets`, which specifies the permitted contract addresses, and `selectors`, which specifies the allowed methods. -Internally, this scope uses the [`allowedTargets`](../../../reference/delegation/caveats.md#allowedtargets), [`allowedMethods`](../../../reference/delegation/caveats.md#allowedmethods), and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers, and +Internally, this scope uses the [`allowedTargets`](../../../reference/delegation/caveats.md#allowedtargets), [`allowedMethods`](../../../reference/delegation/caveats.md#allowedmethods), and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers, and optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. See the [function call scope reference](../../../reference/delegation/delegation-scopes.md#function-call-scope) for more details. @@ -49,7 +50,7 @@ const delegation = createDelegation({ ### Define allowed calldata You can further restrict the scope by defining the `allowedCalldata`. For example, you can set -`allowedCalldata` so the delegate is only permitted to call the `approve` function on the +`allowedCalldata` so the delegate is only permitted to call the `approve` function on the USDC token contract with an allowance value of `0`. This effectively limits the delegate to revoking ERC-20 approvals. @@ -91,7 +92,7 @@ const delegation = createDelegation({ ### Define exact calldata You can define the `exactCalldata` instead of the `allowedCalldata`. For example, you can -set `exactCalldata` so the delegate is permitted to call only the `approve` function on the USDC token +set `exactCalldata` so the delegate is permitted to call only the `approve` function on the USDC token contract, with a specific spender address and an allowance value of 0. This effectively limits the delegate to revoking ERC-20 approvals for a specific spender. diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/index.md b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/index.md similarity index 100% rename from gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/index.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/index.md diff --git a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/ownership-transfer.md b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/ownership-transfer.md similarity index 90% rename from gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/ownership-transfer.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/ownership-transfer.md index a2381eba6b9..d04b0543073 100644 --- a/gator_versioned_docs/version-1.0.0/guides/delegation/use-delegation-scopes/ownership-transfer.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/ownership-transfer.md @@ -3,6 +3,8 @@ description: Learn how to use the ownership transfer scope for a delegation. keywords: [delegation scope, ownership transfer, restrict, delegation] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use the ownership transfer scope The ownership transfer scope restricts a delegation to ownership transfer calls only. @@ -19,7 +21,7 @@ For example, Alice has deployed a smart contract, and she delegates to Bob the a This scope requires a `contractAddress`, which represents the address of the deployed contract. -Internally, this scope uses the [`ownershipTransfer`](../../../reference/delegation/caveats.md#ownershiptransfer) caveat enforcer. +Internally, this scope uses the [`ownershipTransfer`](../../../reference/delegation/caveats.md#ownershiptransfer) caveat enforcer. See the [ownership transfer scope reference](../../../reference/delegation/delegation-scopes.md#ownership-transfer-scope) for more details. ```typescript diff --git a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/spending-limit.md b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/spending-limit.md similarity index 91% rename from gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/spending-limit.md rename to gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/spending-limit.md index 4412368d47b..600eb75b08c 100644 --- a/gator_versioned_docs/version-1.1.0/guides/delegation/use-delegation-scopes/spending-limit.md +++ b/gator_versioned_docs/version-1.7.0/guides/delegation/use-delegation-scopes/spending-limit.md @@ -3,9 +3,11 @@ description: Learn how to use the spending limit scopes for a delegation. keywords: [delegation scope, spending limit, restrict, delegation] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use spending limit scopes -Spending limit scopes define how much a delegate can spend in native, ERC-20, or ERC-721 tokens. +Spending limit scopes define how much a delegate can spend in native, ERC-20, or ERC-721 tokens. You can set transfer limits with or without time-based (periodic) or streaming conditions, depending on your use case. ## Prerequisites @@ -25,7 +27,7 @@ Bob can transfer a total of 10 USDC per day; the limit resets at the beginning o When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). -Internally, this scope uses the [`erc20PeriodTransfer`](../../../reference/delegation/caveats.md#erc20periodtransfer) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +Internally, this scope uses the [`erc20PeriodTransfer`](../../../reference/delegation/caveats.md#erc20periodtransfer) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. See the [ERC-20 periodic scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-periodic-scope) for more details. ```typescript @@ -59,7 +61,7 @@ For example, Alice creates a delegation that allows Bob to spend 0.1 USDC per se When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). -Internally, this scope uses the [`erc20Streaming`](../../../reference/delegation/caveats.md#erc20streaming) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +Internally, this scope uses the [`erc20Streaming`](../../../reference/delegation/caveats.md#erc20streaming) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. See the [ERC-20 streaming scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-streaming-scope) for more details. ```typescript @@ -94,7 +96,7 @@ Bob may use the 10 USDC in a single transaction or make multiple transactions, a When this scope is applied, the toolkit automatically disallows native token transfers (sets the native token transfer limit to `0`). -Internally, this scope uses the [`erc20TransferAmount`](../../../reference/delegation/caveats.md#erc20transferamount) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. +Internally, this scope uses the [`erc20TransferAmount`](../../../reference/delegation/caveats.md#erc20transferamount) and [`valueLte`](../../../reference/delegation/caveats.md#valuelte) caveat enforcers. See the [ERC-20 transfer scope reference](../../../reference/delegation/delegation-scopes.md#erc-20-transfer-scope) for more details. ```typescript @@ -119,7 +121,7 @@ const delegation = createDelegation({ This scope limits the delegation to ERC-721 token transfers only. For example, Alice creates a delegation that allows Bob to transfer an NFT she owns on her behalf. -Internally, this scope uses the [`erc721Transfer`](../../../reference/delegation/caveats.md#erc721transfer) caveat enforcer. +Internally, this scope uses the [`erc721Transfer`](../../../reference/delegation/caveats.md#erc721transfer) caveat enforcer. See the [ERC-721 scope reference](../../../reference/delegation/delegation-scopes.md#erc-721-scope) for more details. ```typescript @@ -149,7 +151,7 @@ When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token trans You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure `allowedCalldata` to allow transactions that match certain patterns or ranges. -Internally, this scope uses the [`nativeTokenPeriodTransfer`](../../../reference/delegation/caveats.md#nativetokenperiodtransfer) caveat enforcer, and +Internally, this scope uses the [`nativeTokenPeriodTransfer`](../../../reference/delegation/caveats.md#nativetokenperiodtransfer) caveat enforcer, and optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. See the [native token periodic scope reference](../../../reference/delegation/delegation-scopes.md#native-token-periodic-scope) for more details. @@ -184,7 +186,7 @@ When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token trans You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure `allowedCalldata` to allow transactions that match certain patterns or ranges. -Internally, this scope uses the [`nativeTokenStreaming`](../../../reference/delegation/caveats.md#nativetokenstreaming) caveat enforcer, and +Internally, this scope uses the [`nativeTokenStreaming`](../../../reference/delegation/caveats.md#nativetokenstreaming) caveat enforcer, and optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. See the [native token streaming scope reference](../../../reference/delegation/delegation-scopes.md#native-token-streaming-scope) for more details. @@ -220,7 +222,7 @@ When this scope is applied, the toolkit disallows ERC-20 and ERC-721 token trans You can optionally configure `exactCalldata` to restrict transactions to a specific operation, or configure `allowedCalldata` to allow transactions that match certain patterns or ranges. -Internally, this scope uses the [`nativeTokenTransferAmount`](../../../reference/delegation/caveats.md#nativetokentransferamount) caveat enforcer, and +Internally, this scope uses the [`nativeTokenTransferAmount`](../../../reference/delegation/caveats.md#nativetokentransferamount) caveat enforcer, and optionally uses the [`allowedCalldata`](../../../reference/delegation/caveats.md#allowedcalldata) or [`exactCalldata`](../../../reference/delegation/caveats.md#exactcalldata) caveat enforcers when those parameters are specified. See the [native token transfer scope reference](../../../reference/delegation/delegation-scopes.md#native-token-transfer-scope) for more details. diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/create-smart-account.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/create-smart-account.md similarity index 87% rename from gator_versioned_docs/version-1.0.0/guides/smart-accounts/create-smart-account.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/create-smart-account.md index 5f79d6b8364..587fa3084cf 100644 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/create-smart-account.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/create-smart-account.md @@ -5,6 +5,7 @@ keywords: [create, smart account, signer, hybrid, multisig, 7702] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Create a smart account @@ -18,7 +19,7 @@ to create different types of smart accounts with different signature schemes. ## Hybrid smart account -A [Hybrid smart account](../../concepts/smart-accounts.md#hybrid-smart-account) supports both an externally owned account (EOA) owner and any number of passkey (WebAuthn) signers. +A [Hybrid smart account](../../concepts/smart-accounts.md#hybrid-smart-account) supports both an EOA owner and any number of passkey (WebAuthn) signers. This example uses `toMetaMaskSmartAccount` and Viem's [Wallet Client](https://viem.sh/docs/clients/wallet) to create a Hybrid smart account. The `signer` parameter also accepts Viem's [Local Account](https://viem.sh/docs/accounts/local) and [WebAuthnAccount](https://viem.sh/account-abstraction/accounts/webauthn#webauthn-account). @@ -80,7 +81,7 @@ export const walletClient = createWalletClient({ ## Multisig smart account -A [Multisig smart account](../../concepts/smart-accounts.md#multisig-smart-account) supports multiple EOA signers with a configurable threshold for execution. +A [Multisig smart account](../../concepts/smart-accounts.md#multisig-smart-account) supports multiple EOA signers with a configurable threshold for execution. This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) to create a Multisig smart account with a combination of account signers and Wallet Client signers. @@ -154,8 +155,8 @@ The number of signers must be at least equal to the threshold to generate a vali ## EIP-7702 smart account -An [EIP-7702 smart account](../../concepts/smart-accounts.md#stateless-7702-smart-account) represents an EOA that has been upgraded -to support MetaMask Smart Accounts functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). +An [EIP-7702 smart account](../../concepts/smart-accounts.md#stateless-7702-smart-account) represents an EOA that has been upgraded +to support MetaMask Smart Accounts functionality as defined by [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). This example uses [`toMetaMaskSmartAccount`](../../reference/smart-account.md#tometamasksmartaccount) and Viem's [`privateKeyToAccount`](https://viem.sh/docs/accounts/local/privateKeyToAccount) to @@ -215,6 +216,6 @@ export const account = privateKeyToAccount(privateKey) ## Next steps -- [Configure signers](./signers/index.md) to use a signer that fits your needs. +- [Configure signers](./signers/index.mdx) to use a signer that fits your needs. - [Deploy the smart account](deploy-smart-account.md) and [send user operations](send-user-operation.md) using [Viem Account Abstraction clients](../configure-toolkit.md). - [Create delegations](../delegation/execute-on-smart-accounts-behalf.md) to grant scoped permissions to other accounts. diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/deploy-smart-account.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/deploy-smart-account.md similarity index 89% rename from gator_versioned_docs/version-1.1.0/guides/smart-accounts/deploy-smart-account.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/deploy-smart-account.md index 27b94623bca..610d4f3fa3b 100644 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/deploy-smart-account.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/deploy-smart-account.md @@ -5,11 +5,12 @@ keywords: [deploy, smart account, user operation] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Deploy a smart account -You can deploy MetaMask Smart Accounts in two different ways. You can either deploy a smart account automatically when sending -the first user operation, or manually deploy the account. +You can deploy [MetaMask Smart Accounts](../../concepts/smart-accounts.md) in two different ways. You can either deploy a smart account automatically when sending +the first user operation, or manually deploy the account. ## Prerequisites @@ -90,7 +91,7 @@ method from the smart account to retrieve the `factory` and `factoryData`. This The `factory` represents the contract address responsible for deploying the smart account, while `factoryData` contains the calldata that will be executed by the `factory` to deploy the smart account. -The relay account can be either an externally owned account (EOA) or another smart account. This example uses an EOA. +The relay account can be either an EOA or another smart account. This example uses an EOA. diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/generate-multisig-signature.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/generate-multisig-signature.md similarity index 92% rename from gator_versioned_docs/version-1.1.0/guides/smart-accounts/generate-multisig-signature.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/generate-multisig-signature.md index dbdd9372251..88dd5c59b8f 100644 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/generate-multisig-signature.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/generate-multisig-signature.md @@ -5,12 +5,13 @@ keywords: [generate, multsig, signature, smart account] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Generate a multisig signature The Smart Accounts Kit supports [Multisig smart accounts](../../concepts/smart-accounts.md#multisig-smart-account), -allowing you to add multiple externally owned accounts (EOA) -signers with a configurable execution threshold. When the threshold +allowing you to add multiple EOA +signers with a configurable execution threshold. When the threshold is greater than 1, you can collect signatures from the required signers and use the [`aggregateSignature`](../../reference/smart-account.md#aggregatesignature) function to combine them into a single aggregated signature. diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-gasless-transaction.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-gasless-transaction.md similarity index 85% rename from gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-gasless-transaction.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-gasless-transaction.md index d3f295d0df0..70c11ce916b 100644 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-gasless-transaction.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-gasless-transaction.md @@ -5,11 +5,12 @@ keywords: [send, gasless transaction, smart account, sponsor, paymaster] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Send a gasless transaction -MetaMask Smart Accounts support gas sponsorship, which simplifies onboarding by abstracting gas fees away from end users. -You can use any paymaster service provider, such as [Pimlico](https://docs.pimlico.io/references/paymaster) or [ZeroDev](https://docs.zerodev.app/meta-infra/rpcs), or plug in your own custom paymaster. +[MetaMask Smart Accounts](../../concepts/smart-accounts.md) support gas sponsorship, which simplifies onboarding by abstracting gas fees away from end users. +You can use any paymaster service provider, such as [Pimlico](https://docs.pimlico.io/references/paymaster) or [ZeroDev](https://docs.zerodev.app/meta-infra/rpcs), or plug in your own custom paymaster. ## Prerequisites diff --git a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-user-operation.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-user-operation.md similarity index 92% rename from gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-user-operation.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-user-operation.md index 93bf2623dd0..024e7e36989 100644 --- a/gator_versioned_docs/version-1.0.0/guides/smart-accounts/send-user-operation.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/send-user-operation.md @@ -5,6 +5,7 @@ keywords: [ERC-4337, send, user operation, smart account] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # Send a user operation @@ -13,7 +14,7 @@ They incorporate significant enhancements that improve user experience and provi flexibility in account management and transaction execution. Viem's Account Abstraction API allows a developer to specify an array of `Calls` that will be executed as a user operation via Viem's [`sendUserOperation`](https://viem.sh/account-abstraction/actions/bundler/sendUserOperation) method. -The MetaMask Smart Accounts Kit encodes and executes the provided calls. +The Smart Accounts Kit encodes and executes the provided calls. User operations are not directly sent to the network. Instead, they are sent to a bundler, which validates, optimizes, and aggregates them before network submission. @@ -30,11 +31,11 @@ If a user operation is sent from a MetaMask smart account that has not been depl ## Send a user operation -The following is a simplified example of sending a user operation using Viem Core SDK. Viem Core SDK offers more granular control for developers who require it. +The following is a simplified example of sending a user operation using Viem Core SDK. Viem Core SDK offers more granular control for developers who require it. In the example, a user operation is created with the necessary gas limits. -This user operation is passed to a bundler instance, and the `EntryPoint` address is retrieved from the client. +This user operation is passed to a bundler instance, and the `EntryPoint` address is retrieved from the client. diff --git a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/dynamic.md b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/signers/dynamic.md similarity index 91% rename from gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/dynamic.md rename to gator_versioned_docs/version-1.7.0/guides/smart-accounts/signers/dynamic.md index 650b42be98b..fc5a54156b2 100644 --- a/gator_versioned_docs/version-1.1.0/guides/smart-accounts/signers/dynamic.md +++ b/gator_versioned_docs/version-1.7.0/guides/smart-accounts/signers/dynamic.md @@ -4,11 +4,13 @@ sidebar_label: Dynamic keywords: [dynamic, smart account, signer, metamask smart account] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Use Dynamic with MetaMask Smart Accounts -[Dynamic](https://www.dynamic.xyz/) is an embedded wallet solution that enables seamless social login and passkey based +[Dynamic](https://www.dynamic.xyz/) is an embedded wallet solution that enables seamless social sign-in and passkey based wallets, making user onboarding easier. MetaMask Smart Accounts is a signer-agnostic implementation -that allows you to use Dynamic's EOA wallet as a signer for MetaMask Smart Accounts. +that allows you to use Dynamic's EOA wallet as a signer for smart accounts. + + +### Account abstraction + +A conceptual model for programmable onchain accounts, including flexible validation logic, custom signature schemes, and gas abstraction. ERC-4337 defines a mechanism for account abstraction. + +### Advanced Permissions + +Fine-grained, wallet execution permissions that dapps can request from MetaMask extension users. Based on ERC-7715. + +### Bundler + +An ERC-4337 component that manages the alternate mempool: it collects user operations from smart accounts, packages them, and submits them to the network. + +### Caveat + +A restriction attached to a delegation that limits how delegated authority can be used. + +### Caveat enforcer + +A smart contract that enforces delegation rules by validating caveat conditions during redemption hooks. + +### Delegate account + +The account that receives delegated authority and can redeem a delegation under its constraints. + +### Delegation + +The ability for a MetaMask smart account to authorize another account to perform specific executions on its behalf. + +### Delegation Framework + +A set of audited smart contracts that handle smart account creation, the delegation lifecycle, and caveat enforcement. + +### Delegation Manager + +The ERC-7710 component that validates and redeems delegations, including signature checks and caveat enforcer hooks. + +### Delegation scope + +A predefined authority pattern representing a caveat or group of caveats, which sets the initial actions a delegate is allowed to perform. You can combine scopes with additional caveats. + +### Delegator account + +The account that creates and signs a delegation to grant limited authority to another account. + +### EIP-7702 smart account + +A stateless MetaMask smart account implementation that represents an upgraded EOA. + +### Externally owned account (EOA) + +A private-key-controlled account with no built-in programmable execution logic. + +### Hybrid smart account + +A smart account implementation that supports both an EOA owner and passkey signers. + +### MetaMask smart account + +A smart contract account created using the Smart Accounts Kit that supports programmable behavior, flexible signing options, and ERC-7710 delegations. + +### Multisig smart account + +A smart account implementation that requires multiple signers to generate a valid signature. + +### Open delegation + +A delegation that leaves the delegate unspecified, allowing any account to redeem it. + +### Open redelegation + +A redelegation with no specific delegate, allowing any account to redeem inherited permissions. + +### Passkey + +A cryptographic key that can be used to sign transactions instead of a private key. + +### Paymaster + +A service that pays for user operations on behalf of a smart account. + +### Redelegation + +A delegation that passes on authority granted by a previous delegation. + +### Root delegation + +The first delegation in a chain, where an account delegates its own authority directly. + +### Signer + +An account that can sign transactions for a smart account. + +### User operation + +A pseudo-transaction object defined by ERC-4337 that describes what a smart account should execute. User operations are submitted to the alternate mempool managed by bundlers. diff --git a/gator_versioned_docs/version-1.1.0/reference/smart-account.md b/gator_versioned_docs/version-1.7.0/reference/smart-account.md similarity index 87% rename from gator_versioned_docs/version-1.1.0/reference/smart-account.md rename to gator_versioned_docs/version-1.7.0/reference/smart-account.md index 1c231e8dfed..3e1d6724d40 100644 --- a/gator_versioned_docs/version-1.1.0/reference/smart-account.md +++ b/gator_versioned_docs/version-1.7.0/reference/smart-account.md @@ -7,6 +7,7 @@ keywords: [smart accounts, API, methods, reference] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # MetaMask Smart Accounts API reference @@ -270,6 +271,94 @@ export const smartAccount = await toMetaMaskSmartAccount({ +## `isDeployed` + +Checks whether the MetaMask smart account has been deployed on the current chain. + +### Example + + + + +```ts +import { smartAccount } from './config.ts' + +const isDeployed = await smartAccount.isDeployed() +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' +import { Implementation, toMetaMaskSmartAccount } from '@metamask/smart-accounts-kit' + +const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +export const smartAccount = await toMetaMaskSmartAccount({ + client: publicClient, + implementation: Implementation.Hybrid, + address: '', +}) +``` + + + + +## `isValid7702Implementation` + +Checks whether an EOA has +been upgraded to MetaMask smart account using [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702). + +### Parameters + +| Name | Type | Required | Description | +| ---------------- | ----------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------- | +| `client` | `Client` | Yes | Viem Client used to read the account's bytecode. | +| `accountAddress` | `Address` | Yes | The address to check for an EIP-7702 delegation. | +| `environment` | [`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment) | Yes | Environment to resolve `EIP7702StatelessDeleGatorImpl` smart account address for the current chain. | + +### Example + + + + +```ts +import { isValid7702Implementation } from '@metamask/smart-accounts-kit/actions' +import { publicClient, environment, accountAddress } from './config.ts' + +const isUpgraded = await isValid7702Implementation({ + client: publicClient, + accountAddress, + environment, +}) +``` + + + + +```ts +import { createPublicClient, http } from 'viem' +import { sepolia as chain } from 'viem/chains' +import { getSmartAccountsEnvironment } from '@metamask/smart-accounts-kit' + +export const publicClient = createPublicClient({ + chain, + transport: http(), +}) + +export const environment = getSmartAccountsEnvironment(chain.id) + +export const accountAddress = '0x7E48cA6b7fe6F3d57fdd0448B03b839958416fC1' +``` + + + + ## `signDelegation` Signs the delegation and returns the delegation signature. @@ -457,7 +546,7 @@ export const smartAccount = await toMetaMaskSmartAccount({ ## `signUserOperation` -Signs a user operation with the `MetaMaskSmartAccount` signer. The Delegation +Signs a user operation with the `MetaMaskSmartAccount` signer. The Delegation Toolkit uses Viem under the hood to provide this functionality. ### Parameters @@ -522,7 +611,7 @@ Creates a `MetaMaskSmartAccount` instance. | Name | Type | Required | Description | | ----------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `client` | `Client` | Yes | Viem Client to retrieve smart account data. | -| `implementation` | `TImplementation` | Yes | Implementation type for the smart account. Can be Hybrid, Multisig, or Stateless7702. | +| `implementation` | `TImplementation` | Yes | Implementation type for the smart account. Can be `Hybrid`, `Multisig`, or `Stateless7702`. | | `signer` | `SignerConfigByImplementation ` | No | Signer for the smart account. Can be a Viem Account, Viem Wallet Client, or a WebAuthn Account. WebAuthn accounts are only supported for Hybrid implementations. If omitted, non-signing operations still work, but signing operations such as `signUserOperation`, `signDelegation`, `signMessage`, and `signTypedData` will throw an error. | | `environment` | [`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment) | No | Environment to resolve the smart contracts. | | `deployParams` | `DeployParams` | Required if `address` is not provided | The parameters that will be used to deploy the smart account and generate its deterministic address. | diff --git a/gator_versioned_docs/version-1.1.0/reference/types.md b/gator_versioned_docs/version-1.7.0/reference/types.md similarity index 58% rename from gator_versioned_docs/version-1.1.0/reference/types.md rename to gator_versioned_docs/version-1.7.0/reference/types.md index 37dfa7f70cf..c7986ead3d1 100644 --- a/gator_versioned_docs/version-1.1.0/reference/types.md +++ b/gator_versioned_docs/version-1.7.0/reference/types.md @@ -4,6 +4,8 @@ sidebar_label: Types keywords: [types, delegation, smart accounts, reference, enums] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Types This page documents the TypeScript [enums](#enums) and [types](#types-1) used in Smart Accounts Kit APIs. @@ -16,6 +18,7 @@ Enum representing the [caveat](delegation/caveats.md) type. | Value | String | | --------------------------------------------- | ------------------------------------ | +| `CaveatType.ApprovalRevocation` | `"approvalRevocation"` | | `CaveatType.AllowedCalldata` | `"allowedCalldata"` | | `CaveatType.AllowedMethods` | `"allowedMethods"` | | `CaveatType.AllowedTargets` | `"allowedTargets"` | @@ -114,36 +117,61 @@ Defines an expected calldata segment for a single function signature. Represents a restriction or condition applied to a delegation. -| Name | Type | Required | Description | -| ---------- | ----- | -------- | -------------------------------------------------------------------------- | -| `enforcer` | `Hex` | Yes | The contract address of the enforcer. | -| `terms` | `Hex` | Yes | The terms of the caveat encoded as hex data. | -| `args` | `Hex` | Yes | Additional arguments required by the caveat enforcer, encoded as hex data. | +| Name | Type | Required | Description | +| ---------- | ----- | -------- | ------------------------------------------------------------------------------------------------ | +| `enforcer` | `Hex` | Yes | The contract address of the caveat enforcer. | +| `terms` | `Hex` | Yes | The terms of the caveat encoded as hex data. | +| `args` | `Hex` | Yes | Additional arguments required by the caveat enforcer, encoded as hex data. | ### `CaveatBuilderConfig` Optional configuration for [`createCaveatBuilder`](delegation/index.md#createcaveatbuilder). -| Name | Type | Required | Description | -| ------------------------------------- | --------- | -------- | ---------------------------------------------------------------------------------- | -| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow unrestricted delegations with no caveats. The default is `false`. | +| Name | Type | Required | Description | +| ------------------------------------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `allowInsecureUnrestrictedDelegation` | `boolean` | No | Whether to allow unrestricted delegations with no caveats. The default is `false`. | ### `Delegation` -Represents a delegation that grants permissions from a delegator to a delegate. +Represents a delegation that grants permissions from a delegator to a delegate. + +| Name | Type | Required | Description | +| ----------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `delegate` | `Hex` | Yes | The address to which the delegation is being granted. | +| `delegator` | `Hex` | Yes | The address that is granting the delegation. | +| `authority` | `Hex` | Yes | The parent delegation hash, or `ROOT_AUTHORITY` for creating root delegations. | +| `caveats` | [`Caveat`](#caveat)`[]` | Yes | An array of [caveats](delegation/caveats.md) that constrain the delegation. | +| `salt` | `Hex` | Yes | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | +| `signature` | `Hex` | Yes | The signature to validate the delegation. | + +### `DelegationStruct` + +The onchain representation of a [`Delegation`](#delegation), used when ABI-encoding or interacting +directly with the contracts. +It has the same fields as `Delegation`, except `salt` is a `bigint` instead of a `Hex` string. + +| Name | Type | Required | Description | +| ----------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `delegate` | `Hex` | Yes | The address to which the delegation is being granted. | +| `delegator` | `Hex` | Yes | The address that is granting the delegation. | +| `authority` | `Hex` | Yes | The parent delegation hash, or `ROOT_AUTHORITY` for creating root delegations. | +| `caveats` | [`Caveat`](#caveat)`[]` | Yes | An array of [caveats](delegation/caveats.md) that constrain the delegation. | +| `salt` | `bigint` | Yes | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | +| `signature` | `Hex` | Yes | The signature to validate the delegation. | -| Name | Type | Required | Description | -| ----------- | ----------------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | -| `delegate` | `Hex` | Yes | The address to which the delegation is being granted. | -| `delegator` | `Hex` | Yes | The address that is granting the delegation. | -| `authority` | `Hex` | Yes | The parent delegation hash, or `ROOT_AUTHORITY` for creating root delegations. | -| `caveats` | [`Caveat`](#caveat)`[]` | Yes | An array of [caveats](delegation/caveats.md) that constrain the delegation. | -| `salt` | `Hex` | Yes | The salt for generating the delegation hash. This helps prevent hash collisions when creating identical delegations. | -| `signature` | `Hex` | Yes | The signature to validate the delegation. | +### `DecodedRevertReason` + +Represents a decoded revert reason from a error. Returned by [`decodeRevertData`](delegation/index.md#decoderevertdata) and [`decodeRevertReason`](delegation/index.md#decoderevertreason). + +| Name | Type | Required | Description | +| ----------- | -------- | -------- | ---------------------------------- | +| `errorName` | `string` | Yes | The name of the decoded error. | +| `message` | `string` | Yes | The decoded revert reason message. | +| `rawData` | `Hex` | Yes | The raw ABI-encoded revert data. | ### `ExactCalldataBuilderConfig` -Defines the exact calldata the delegate is allowed to call. +Defines the exact calldata the delegate is allowed to call. | Name | Type | Required | Description | | ---------- | ----- | -------- | --------------------------------------------------- | @@ -151,7 +179,7 @@ Defines the exact calldata the delegate is allowed to call. ### `ExecutionStruct` -Represents a single execution to perform on behalf of a delegator. +Represents a single execution to perform on behalf of a delegator. | Name | Type | Required | Description | | ---------- | --------- | -------- | ------------------------------------------------------------------ | @@ -169,7 +197,7 @@ The return type of [`getSupportedExecutionPermissions`](advanced-permissions/wal ### `PartialSignature` -Represents a single signer's contribution to a multisig aggregated signature. +Represents a single signer's contribution to a multisig aggregated signature. | Name | Type | Required | Description | | ----------- | --------------- | -------- | ------------------------------------------------------------------------------------- | @@ -177,20 +205,29 @@ Represents a single signer's contribution to a multisig aggregated signature. | `signature` | `Hex` | Yes | The signer's signature over the user operation. | | `type` | `SignatureType` | Yes | The signature type to represent signature algorithm. Only supported value is `ECDSA`. | +### `RedelegatePermissionContextReturnType` + +Return type of [`redelegatePermissionContext`](erc7710/wallet-client.md#redelegatepermissioncontext) and [`redelegatePermissionContextOpen`](erc7710/wallet-client.md#redelegatepermissioncontextopen). + +| Name | Type | Description | +| ------------------- | --------------------------- | --------------------------------------------------------------- | +| `delegation` | [`Delegation`](#delegation) | The signed redelegation object. | +| `permissionContext` | `Hex` | ABI-encoded delegation chain with the new delegation prepended. | + ### `PermissionResponse` -Represents a granted Advanced Permission. +Represents a granted Advanced Permission. -| Name | Type | Required | Description | -| ------------------- | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------ | -| `chainId` | `number` | Yes | The chain ID for which the permission was granted. | -| `from` | `Address` | Yes | The account address that granted the permission. | -| `to` | `Hex` | Yes | The account address that received the permission. | -| `permission` | `PermissionTypes` | Yes | The granted [permission](advanced-permissions/permissions.md) details. | -| `rules` | `Record[]` | No | The rules applied to the permission. For example, permission expiry. | -| `context` | `Hex` | Yes | The permission context (encoded delegation list) used when redeeming the permission. | -| `dependencies` | `{ factory: Address, factoryData: Hex }[]` | Yes | Factory dependencies for account deployment. | -| `delegationManager` | `Address` | Yes | The address of the Delegation Manager contract for the permission. | +| Name | Type | Required | Description | +| ------------------- | ------------------------------------------ | -------- | ------------------------------------------------------------------------------------------ | +| `chainId` | `number` | Yes | The chain ID for which the permission was granted. | +| `from` | `Address` | Yes | The account address that granted the permission. | +| `to` | `Hex` | Yes | The account address that received the permission. | +| `permission` | `PermissionTypes` | Yes | The granted [permission](advanced-permissions/permissions.md) details. | +| `rules` | `Record[]` | No | The rules applied to the permission. For example, permission expiry. | +| `context` | `Hex` | Yes | The permission context (encoded delegation list) used when redeeming the permission. | +| `dependencies` | `{ factory: Address, factoryData: Hex }[]` | Yes | Factory dependencies for account deployment. | +| `delegationManager` | `Address` | Yes | The address of the contract for the permission. | ### `RequestExecutionPermissionsReturnType` @@ -198,27 +235,60 @@ The return type of [`requestExecutionPermissions`](advanced-permissions/wallet-c ### `SmartAccountsEnvironment` -An object containing the contract addresses required to interact with the Delegation Framework on a specific chain. +An object containing the contract addresses required to interact with the on a specific chain. -| Name | Type | Required | Description | -| ------------------- | --------------------- | -------- | --------------------------------------------------------------------------------- | -| `DelegationManager` | `Hex` | Yes | The address of the Delegation Manager contract. | -| `EntryPoint` | `Hex` | Yes | The address of the ERC-4337 EntryPoint contract. | -| `SimpleFactory` | `Hex` | Yes | The address of the factory contract for deploying MetaMask smart accounts. | -| `implementations` | `Record` | Yes | A map of MetaMask smart account implementation types to their deployed addresses. | -| `caveatEnforcers` | `Record` | Yes | A map of caveat enforcer types to their deployed addresses. | +| Name | Type | Required | Description | +| ------------------- | --------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `DelegationManager` | `Hex` | Yes | The address of the contract. | +| `EntryPoint` | `Hex` | Yes | The address of the ERC-4337 EntryPoint contract. | +| `SimpleFactory` | `Hex` | Yes | The address of the factory contract for deploying MetaMask Smart Accounts. | +| `implementations` | `Record` | Yes | A map of MetaMask smart account implementation types to their deployed addresses. | +| `caveatEnforcers` | `Record` | Yes | A map of caveat enforcer types to their deployed addresses. | ### `SupportedPermissionInfo` -Describes a supported Advanced Permission type. Used in [`GetSupportedExecutionPermissionsResult`](#getsupportedexecutionpermissionsresult). +Describes a supported Advanced Permission type. Used in [`GetSupportedExecutionPermissionsResult`](#getsupportedexecutionpermissionsresult). | Name | Type | Required | Description | | ----------- | ---------- | -------- | --------------------------------------------------------------------------- | | `chainIds` | `number[]` | Yes | The chain IDs on which the permission type is supported. | | `ruleTypes` | `string[]` | Yes | The rule types supported for the permission type (for example, `"expiry"`). | +### `MaybeDeferred` + +Represents a value that can be provided directly or derived at runtime from [`PaymentRequirements`](#paymentrequirements). + +```ts +type MaybeDeferred = + | TResult + | ((requirements: PaymentRequirements) => Promise | TResult) +``` + +### `PaymentRequirements` + +Represents the payment requirements returned by an x402 server. [`createx402DelegationProvider`](x402.md#createx402delegationprovider) uses these values to scope and construct the delegation. + +| Name | Type | Required | Description | +| ------------------- | ------------------------- | -------- | ------------------------------------------------------------------------------------------------------------- | +| `scheme` | `string` | Yes | The payment scheme identifier. | +| `network` | `string` | Yes | The [CAIP](https://namespaces.chainagnostic.org/eip155/caip2) network identifier. For example, `eip155:8453`. | +| `asset` | `string` | Yes | The token contract address for the payment asset. | +| `amount` | `string` | Yes | The payment amount in the token's smallest unit. | +| `payTo` | `string` | Yes | The recipient address for the payment. | +| `maxTimeoutSeconds` | `number` | Yes | The maximum time in seconds before the payment expires. | +| `extra` | `Record` | No | Additional context for x402, such as the asset transfer method. | + +### `RedeemersConfig` + +Configuration for the redeemer constraint used in [`createx402DelegationProvider`](x402.md#createx402delegationprovider). + +| Name | Type | Required | Description | +| ------------------ | ---------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------- | +| `requireRedeemers` | `boolean` | Yes | Whether at least one redeemer constraint must exist. | +| `addresses` | [`MaybeDeferred`](#maybedeferred)`` | No | The addresses that are allowed to redeem the delegation. | + ### `ValueLteBuilderConfig` -| Name | Type | Required | Description | -| ---------- | -------- | -------- | ------------------------------------------------------------------- | -| `maxValue` | `bigint` | Yes | The maximum native token amount the delegate can transfer per call. | +| Name | Type | Required | Description | +| ---------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------ | +| `maxValue` | `bigint` | Yes | The maximum native token amount the delegate can transfer per call. | diff --git a/gator_versioned_docs/version-1.7.0/reference/x402.md b/gator_versioned_docs/version-1.7.0/reference/x402.md new file mode 100644 index 00000000000..9bc5b560f99 --- /dev/null +++ b/gator_versioned_docs/version-1.7.0/reference/x402.md @@ -0,0 +1,94 @@ +--- +description: Smart Accounts Kit x402 API methods reference. +sidebar_label: x402 +toc_max_heading_level: 2 +keywords: [x402, delegation provider, experimental, API, methods, reference] +--- + +import GlossaryTerm from '@theme/GlossaryTerm'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + +# x402 API reference + +The following API methods are related to x402 to create payments using delegation. + +## `createx402DelegationProvider` + +Creates a delegation provider function to be used with `x402Erc7710Client`. + +The provider creates an open delegation, signs it, and returns an ABI-encoded delegation +chain as a hex string. The provider internally appends redeemer, payee, and expiry caveats when the +existing caveats, or the root delegation doesn't have it. + +When both `redeemers.addresses` and `facilitatorAddresses` from the server's payment requirements +are provided, the provider resolves redeemers as the intersection of the two lists. +If only one is provided, that list is used. An error is thrown if the resolved list is empty. + +### Parameters + +| Name | Type | Required | Description | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `account` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | Yes | The Viem Account that signs the delegation. | +| `environment` | [`MaybeDeferred`](./types.md#maybedeferred)
`<`[`SmartAccountsEnvironment`](./types.md#smartaccountsenvironment)`>` | No | Environment to resolve the smart contracts for the current chain. If omitted, resolved automatically from the chain ID in the payment requirements. | +| `from` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | The address that is granting the delegation. The default is `account`. | +| `salt` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | The salt for generating the delegation hash. The default is a random 32-byte value. | +| `caveats` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Caveats that further refine the authority granted by the delegation. [`redeemer`](./delegation/caveats.md#redeemer), [`allowedTargets`](./delegation/caveats.md#allowedtargets), and [`timestamp`](./delegation/caveats.md#timestamp) caveats are auto-appended if not already present. | +| `parentPermissionContext` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Parent chain as `Hex` or as decoded [`Delegation`](./types.md#delegation) values (leaf first). Use this when creating a redelegation. | +| `expirySeconds` | [`MaybeDeferred`](./types.md#maybedeferred)
`` | No | Relative expiry in seconds. Adds a timestamp caveat if no tighter constraint exists. | +| `redeemers` | [`MaybeDeferred`](./types.md#maybedeferred)
`<`[`RedeemersConfig`](./types.md#redeemersconfig)`>` | No | Constrains the addresses that are allowed to redeem the delegation. Use this to restrict redemption to specific facilitators. | + +### Example + + + + +```ts +import { privateKeyToAccount } from 'viem/accounts' +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' +import { x402Erc7710Client } from '@metamask/x402' + +const account = privateKeyToAccount(privateKey) + +const erc7710Client = new x402Erc7710Client({ + delegationProvider: createx402DelegationProvider({ + account, + }), +}) +``` + + + + +```ts +import { createx402DelegationProvider } from '@metamask/smart-accounts-kit/experimental' + +const parentPermissionContext = '0x...' // Previously stored/issued permission context. + +const delegationProvider = createx402DelegationProvider({ + account, + parentPermissionContext, +}) +``` + + + + +## `parseEip155ChainId` + +Parses an [EIP-155 CAIP](https://namespaces.chainagnostic.org/eip155/caip2) network identifier into a numeric chain ID. + +### Parameters + +| Name | Type | Required | Description | +| --------- | -------- | -------- | --------------------------------------------------------- | +| `network` | `string` | Yes | EIP-155 CAIP network identifier. For example, `eip155:1`. | + +### Example + +```ts +import { parseEip155ChainId } from '@metamask/smart-accounts-kit/experimental' + +// Returns 137 +const chainId = parseEip155ChainId('eip155:137') +``` diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/aa21-prefund.md b/gator_versioned_docs/version-1.7.0/troubleshooting/aa21-prefund.md similarity index 83% rename from gator_versioned_docs/version-1.0.0/troubleshooting/aa21-prefund.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/aa21-prefund.md index e09ef092bbb..e3c23b91fb0 100644 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/aa21-prefund.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/aa21-prefund.md @@ -6,11 +6,12 @@ keywords: [AA21, pay prefund, user operation, troubleshooting] import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; +import GlossaryTerm from '@theme/GlossaryTerm'; # AA21 didn't pay prefund -The `EntryPoint` contract reverts with `AA21 didn't pay prefund` when a smart account doesn't -have enough native token balance to cover the gas cost of the user operation. +The `EntryPoint` contract reverts with `AA21 didn't pay prefund` when a smart account doesn't +have enough native token balance to cover the gas cost of the user operation. Before executing a user operation, the `EntryPoint` requires the sender account to prefund the expected gas cost. If the account's balance is lower than the required prefund, the `EntryPoint` @@ -22,7 +23,7 @@ reverts the operation. Fund the smart account with enough native tokens to cover the required prefund. Use Viem's [`estimateUserOperationGas`](https://viem.sh/account-abstraction/actions/bundler/estimateUserOperationGas) -to get the gas estimates from your bundler, then calculate the required prefund based on the +to get the gas estimates from your bundler, then calculate the required prefund based on the `EntryPoint` version. @@ -94,5 +95,5 @@ if (balance < requiredPrefund) { ### Use a paymaster -You can use a paymaster to sponsor the gas fees for the smart account, so the account doesn't +You can use a paymaster to sponsor the gas fees for the smart account, so the account doesn't need to hold native tokens. For more information about configuring a paymaster, see [Send a gasless transaction](../guides/smart-accounts/send-gasless-transaction.md). diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/allowance-exceeded.md b/gator_versioned_docs/version-1.7.0/troubleshooting/allowance-exceeded.md similarity index 100% rename from gator_versioned_docs/version-1.1.0/troubleshooting/allowance-exceeded.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/allowance-exceeded.md diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/error-codes.md b/gator_versioned_docs/version-1.7.0/troubleshooting/error-codes.md similarity index 83% rename from gator_versioned_docs/version-1.0.0/troubleshooting/error-codes.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/error-codes.md index 58637dace23..48683db9cad 100644 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/error-codes.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/error-codes.md @@ -4,6 +4,8 @@ sidebar_label: Error codes keywords: [error codes, errors, debug, error references, delegation framework] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Error codes The following tables describe error codes from the [MetaMask Delegation Framework contracts](https://github.com/metamask/delegation-framework). Use a decoder such as @@ -11,25 +13,25 @@ The following tables describe error codes from the [MetaMask Delegation Framewor ## Delegation Manager error codes -| Error code | Error name | Description | -| ------------ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| `0xb5863604` | `InvalidDelegate()` | The caller is not the delegate specified in the delegation. [Troubleshoot an invalid delegate.](./invalid-delegate.md) | -| `0xb9f0f171` | `InvalidDelegator()` | The caller is not the delegator specificed in the delegation. [Troubleshoot an invalid delegator.](./invalid-delegator.md) | -| `0x05baa052` | `CannotUseADisabledDelegation()` | The delegation has been disabled by the delegator. | -| `0xded4370e` | `InvalidAuthority()` | The delegation chain authority validation failed. The authority hash of a child delegation does not match the hash of its parent delegation. | -| `0x1bcaf69f` | `BatchDataLengthMismatch()` | The array lengths do not match in a batch `redeemDelegations` contract call. | -| `0x005ecddb` | `AlreadyDisabled()` | The delegation has already been disabled. | -| `0xf2a5f75a` | `AlreadyEnabled()` | The delegation is already enabled. | -| `0xf645eedf` | `ECDSAInvalidSignature()` | Invalid ECDSA signature format. | -| `0xfce698f7` | `ECDSAInvalidSignatureLength(uint256)` | The ECDSA signature length is incorrect. | -| `0xac241e11` | `EmptySignature()` | The signature is empty. | -| `0xd93c0665` | `EnforcedPause()` | The Delegation Manager contract is paused by the owner. | -| `0x3db6791c` | `InvalidEOASignature()` | EOA signature verification failed. [Troubleshoot an invalid EOA signature.](./invalid-signature.md) | -| `0x155ff427` | `InvalidERC1271Signature()` | Smart contract signature (ERC-1271) verification failed. | -| `0x118cdaa7` | `OwnableUnauthorizedAccount(address)` | An unauthorized account attempted an owner only action. | -| `0x1e4fbdf7` | `OwnableInvalidOwner(address)` | Invalid owner address in an ownership transfer. | -| `0xf6b6ef5b` | `InvalidShortString()` | A string parameter is too short. | -| `0xaa0ea2d8` | `StringTooLong(string)` | A string parameter exceeds the maximum length. | +| Error code | Error name | Description | +| ------------ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `0xb5863604` | `InvalidDelegate()` | The caller is not the delegate specified in the delegation. [Troubleshoot an invalid delegate.](./invalid-delegate.md) | +| `0xb9f0f171` | `InvalidDelegator()` | The caller is not the delegator specified in the delegation. [Troubleshoot an invalid delegator.](./invalid-delegator.md) | +| `0x05baa052` | `CannotUseADisabledDelegation()` | The delegation has been disabled by the delegator. | +| `0xded4370e` | `InvalidAuthority()` | The delegation chain authority validation failed. The authority hash of a child delegation does not match the hash of its parent delegation. | +| `0x1bcaf69f` | `BatchDataLengthMismatch()` | The array lengths do not match in a batch `redeemDelegations` contract call. | +| `0x005ecddb` | `AlreadyDisabled()` | The delegation has already been disabled. | +| `0xf2a5f75a` | `AlreadyEnabled()` | The delegation is already enabled. | +| `0xf645eedf` | `ECDSAInvalidSignature()` | Invalid ECDSA signature format. | +| `0xfce698f7` | `ECDSAInvalidSignatureLength(uint256)` | The ECDSA signature length is incorrect. | +| `0xac241e11` | `EmptySignature()` | The signature is empty. | +| `0xd93c0665` | `EnforcedPause()` | The contract is paused by the owner. | +| `0x3db6791c` | `InvalidEOASignature()` | EOA signature verification failed. [Troubleshoot an invalid EOA signature.](./invalid-signature.md) | +| `0x155ff427` | `InvalidERC1271Signature()` | Smart contract signature (ERC-1271) verification failed. | +| `0x118cdaa7` | `OwnableUnauthorizedAccount(address)` | An unauthorized account attempted an owner only action. | +| `0x1e4fbdf7` | `OwnableInvalidOwner(address)` | Invalid owner address in an ownership transfer. | +| `0xf6b6ef5b` | `InvalidShortString()` | A string parameter is too short. | +| `0xaa0ea2d8` | `StringTooLong(string)` | A string parameter exceeds the maximum length. | ## Smart account error codes @@ -37,7 +39,7 @@ The following tables describe error codes from the [MetaMask Delegation Framewor | ------------ | ----------------------------- | --------------------------------------------------------------------------- | | `0xd663742a` | `NotEntryPoint()` | The caller is not the EntryPoint contract. | | `0x0796d945` | `NotEntryPointOrSelf()` | The caller is neither the EntryPoint contract nor the smart account itself. | -| `0x1a4b3a04` | `NotDelegationManager()` | The caller is not the DelegationManager contract. | +| `0x1a4b3a04` | `NotDelegationManager()` | The caller is not the contract. | | `0xb96fcfe4` | `UnsupportedCallType(bytes1)` | The execution call type is not supported. | | `0x1187dc06` | `UnsupportedExecType(bytes1)` | The execution type is not supported. | | `0x29c3b7ee` | `NotSelf()` | The caller is not the smart account itself. | diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegate.md b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegate.md similarity index 72% rename from gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegate.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegate.md index 2ef00244bfd..225169e6f42 100644 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/invalid-delegate.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegate.md @@ -5,26 +5,28 @@ toc_max_heading_level: 2 keywords: [InvalidDelegate, error code, delegation, troubleshooting] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Invalid delegate -The Delegation Manager reverts with `InvalidDelegate()` in the following two cases. +The reverts with `InvalidDelegate()` in the following two cases. ## Account is not the delegate -The account redeeming the delegation is not the delegate specified in the delegation. +The account redeeming the delegation is not the delegate specified in the delegation. The Delegation Manager checks that `msg.sender` matches the `delegate` field of the delegation, unless it's an [open delegation](../reference/delegation/index.md#createopendelegation). ### Solution Verify that the account redeeming the delegation matches the address in the -delegation's `to` field. If the delegate is a smart account, send the user operation +delegation's `to` field. If the delegate is a smart account, send the user operation from that smart account. ## Broken redelegation chain -When Delegation Manager validates a [redelegation chain](../guides/delegation/create-redelegation.md), each child delegation's `delegator` -must match the parent delegation's `delegate`. If any link in the chain fails this check, the +When Delegation Manager validates a [redelegation chain](../guides/delegation/create-redelegation.md), each child delegation's `delegator` +must match the parent delegation's `delegate`. If any link in the chain fails this check, the authority is invalid. ### Solution diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegator.md b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegator.md similarity index 73% rename from gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegator.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegator.md index 5a8661adfe2..ec3ab5cfac5 100644 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-delegator.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-delegator.md @@ -5,9 +5,11 @@ toc_max_heading_level: 2 keywords: [InvalidDelegator, error code, delegation, troubleshooting] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Invalid delegator -The Delegation Manager reverts with `InvalidDelegator()` when the caller is not the delegator +The reverts with `InvalidDelegator()` when the caller is not the delegator specified in the delegation. This error is thrown by the `disableDelegation` and `enableDelegation` contract functions. Only the @@ -16,7 +18,7 @@ or enable it. ## Solution -Verify that you're sending the transaction from the delegator's account. If the delegator is a smart account, submit a user operation through the smart account. +Verify that you're sending the transaction from the delegator's account. If the delegator is a smart account, submit a user operation through the smart account. ```typescript import { DelegationManager } from '@metamask/smart-accounts-kit/contracts' diff --git a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-signature.md b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-signature.md similarity index 88% rename from gator_versioned_docs/version-1.0.0/troubleshooting/invalid-signature.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/invalid-signature.md index 0f3f32bfc05..24e85ed2f92 100644 --- a/gator_versioned_docs/version-1.0.0/troubleshooting/invalid-signature.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/invalid-signature.md @@ -5,15 +5,17 @@ toc_max_heading_level: 2 keywords: [InvalidEOASignature, error code, delegation, troubleshooting, invalid EOA signature] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # Invalid EOA signature -The Delegation Manager reverts with `InvalidEOASignature()` in the following cases. +The reverts with `InvalidEOASignature()` in the following cases. ## Smart account is not deployed -The [root delegation's](../concepts/delegation/overview.md#root-delegation) delegator must be a -MetaMask smart account. The Delegation Manager checks the delegator code to determine -whether it is an externally owned account (EOA) or a smart account. +The [root delegation's](../concepts/delegation/overview.md#root-delegation) delegator must be a +. The Delegation Manager checks the delegator code to determine +whether it is an EOA or a smart account. If the smart account is not deployed yet, its address has no contract code. The Delegation Manager treats the address as an EOA and attempts ECDSA signature recovery. Because the diff --git a/gator_versioned_docs/version-1.1.0/troubleshooting/user-operation-reverted.md b/gator_versioned_docs/version-1.7.0/troubleshooting/user-operation-reverted.md similarity index 95% rename from gator_versioned_docs/version-1.1.0/troubleshooting/user-operation-reverted.md rename to gator_versioned_docs/version-1.7.0/troubleshooting/user-operation-reverted.md index 133bdb0c2cd..5f4a5dc5a9c 100644 --- a/gator_versioned_docs/version-1.1.0/troubleshooting/user-operation-reverted.md +++ b/gator_versioned_docs/version-1.7.0/troubleshooting/user-operation-reverted.md @@ -5,9 +5,11 @@ toc_max_heading_level: 2 keywords: [user operation, reverted, reason 0x, empty revert, execution, troubleshooting] --- +import GlossaryTerm from '@theme/GlossaryTerm'; + # User operation reverted -A user operation reverts with reason `0x` when validation succeeds, but execution fails without a +A user operation reverts with reason `0x` when validation succeeds, but execution fails without a revert reason. This differs from AA-coded `EntryPoint` contract errors such as `AA23`, `AA25`, or `AA21`. diff --git a/gator_versioned_sidebars/version-1.1.0-sidebars.json b/gator_versioned_sidebars/version-1.1.0-sidebars.json deleted file mode 100644 index 23527099f86..00000000000 --- a/gator_versioned_sidebars/version-1.1.0-sidebars.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "gatorSidebar": [ - { - "type": "doc", - "label": "Introduction", - "id": "index" - }, - { - "type": "category", - "label": "Get started", - "collapsed": false, - "items": [ - "get-started/install", - { - "type": "category", - "label": "Smart account quickstart", - "collapsed": true, - "link": { - "type": "doc", - "id": "get-started/smart-account-quickstart/index" - }, - "items": ["get-started/smart-account-quickstart/eip7702"] - }, - "get-started/use-the-cli", - "get-started/use-with-openclaw", - { - "type": "category", - "label": "Use Scaffold-ETH 2", - "collapsed": true, - "items": [ - "get-started/use-scaffold-eth/smart-accounts", - "get-started/use-scaffold-eth/advanced-permissions" - ] - }, - { - "type": "link", - "label": "LLM context", - "href": "https://docs.metamask.io/llms-smart-accounts-kit-full.txt" - }, - "get-started/supported-networks", - "get-started/supported-advanced-permissions" - ] - }, - { - "type": "category", - "label": "Guides", - "collapsed": false, - "items": [ - "guides/configure-toolkit", - { - "type": "category", - "label": "MetaMask Smart Accounts", - "collapsed": true, - "items": [ - "guides/smart-accounts/create-smart-account", - "guides/smart-accounts/deploy-smart-account", - "guides/smart-accounts/send-user-operation", - "guides/smart-accounts/send-gasless-transaction", - "guides/smart-accounts/generate-multisig-signature", - { - "type": "category", - "label": "Configure signers", - "link": { - "type": "doc", - "id": "guides/smart-accounts/signers/index" - }, - "collapsed": true, - "items": [ - "guides/smart-accounts/signers/dynamic", - "guides/smart-accounts/signers/embedded-wallets", - "guides/smart-accounts/signers/eoa-wallets", - "guides/smart-accounts/signers/passkey", - "guides/smart-accounts/signers/privy" - ] - } - ] - }, - { - "type": "category", - "label": "Delegation", - "collapsed": true, - "key": "delegation-guides", - "items": [ - "guides/delegation/execute-on-smart-accounts-behalf", - { - "type": "category", - "label": "Use delegation scopes", - "collapsed": true, - "link": { - "type": "doc", - "id": "guides/delegation/use-delegation-scopes/index" - }, - "items": [ - "guides/delegation/use-delegation-scopes/spending-limit", - "guides/delegation/use-delegation-scopes/function-call", - "guides/delegation/use-delegation-scopes/ownership-transfer", - "guides/delegation/use-delegation-scopes/constrain-scope" - ] - }, - "guides/delegation/create-redelegation", - "guides/delegation/check-delegation-state", - "guides/delegation/disable-delegation" - ] - }, - { - "type": "category", - "label": "Advanced Permissions (ERC-7715)", - "collapsed": true, - "key": "advanced-permissions-guides", - "items": [ - "guides/advanced-permissions/execute-on-metamask-users-behalf", - { - "type": "category", - "label": "Use permissions", - "collapsed": true, - "items": [ - "guides/advanced-permissions/use-permissions/erc20-token", - "guides/advanced-permissions/use-permissions/native-token" - ] - }, - "guides/advanced-permissions/get-supported-permissions", - "guides/advanced-permissions/get-granted-permissions", - "guides/advanced-permissions/create-redelegation" - ] - } - ] - }, - { - "type": "category", - "label": "Concepts", - "collapsed": true, - "items": [ - "concepts/smart-accounts", - { - "type": "category", - "label": "Delegation", - "collapsed": true, - "key": "delegation-concepts", - "link": { - "type": "doc", - "id": "concepts/delegation/overview" - }, - "items": [ - "concepts/delegation/delegation-scopes", - "concepts/delegation/delegation-manager", - "concepts/delegation/caveat-enforcers" - ] - }, - "concepts/advanced-permissions" - ] - }, - { - "type": "category", - "label": "Tutorials", - "collapsed": true, - "items": [ - { - "type": "link", - "label": "Use an ERC-20 paymaster", - "href": "/tutorials/use-erc20-paymaster" - }, - { - "type": "link", - "label": "Use a passkey as a backup signer", - "href": "/tutorials/use-passkey-as-backup-signer" - }, - { - "type": "link", - "label": "Create a custom caveat enforcer", - "href": "/tutorials/create-custom-caveat-enforcer" - }, - { - "type": "link", - "label": "Create a social invite link", - "href": "/tutorials/create-invite-link" - } - ] - }, - { - "type": "category", - "label": "Reference", - "collapsed": true, - "items": [ - "reference/smart-account", - "reference/types", - { - "type": "category", - "label": "Delegation", - "collapsed": true, - "link": { - "type": "doc", - "id": "reference/delegation/index" - }, - "key": "delegation-reference", - "items": [ - "reference/delegation/delegation-scopes", - "reference/delegation/caveats", - "reference/delegation/caveat-enforcer-client" - ] - }, - { - "type": "category", - "label": "Advanced Permissions (ERC-7715)", - "collapsed": true, - "key": "advanced-permissions-reference", - "items": [ - "reference/advanced-permissions/permissions", - "reference/advanced-permissions/wallet-client" - ] - }, - { - "type": "category", - "label": "ERC-7710", - "collapsed": true, - "items": ["reference/erc7710/wallet-client", "reference/erc7710/bundler-client"] - } - ] - }, - { - "type": "category", - "label": "Troubleshooting", - "collapsed": true, - "items": [ - "troubleshooting/aa21-prefund", - "troubleshooting/allowance-exceeded", - "troubleshooting/error-codes", - "troubleshooting/invalid-delegate", - "troubleshooting/invalid-delegator", - "troubleshooting/invalid-signature", - "troubleshooting/user-operation-reverted" - ] - }, - { - "type": "category", - "label": "Changelog", - "collapsed": false, - "items": ["changelog/1.1.0", "changelog/1.0.0"] - } - ] -} diff --git a/gator_versioned_sidebars/version-1.2.0-sidebars.json b/gator_versioned_sidebars/version-1.2.0-sidebars.json index dfe16c710d8..27724d1835d 100644 --- a/gator_versioned_sidebars/version-1.2.0-sidebars.json +++ b/gator_versioned_sidebars/version-1.2.0-sidebars.json @@ -239,7 +239,7 @@ "type": "category", "label": "Changelog", "collapsed": false, - "items": ["changelog/1.2.0", "changelog/1.1.0", "changelog/1.0.0"] + "items": ["changelog/1.2.0"] } ] } diff --git a/gator_versioned_sidebars/version-1.5.0-sidebars.json b/gator_versioned_sidebars/version-1.5.0-sidebars.json index fe09ccc15f0..fa67aadfedf 100644 --- a/gator_versioned_sidebars/version-1.5.0-sidebars.json +++ b/gator_versioned_sidebars/version-1.5.0-sidebars.json @@ -247,7 +247,7 @@ "type": "category", "label": "Changelog", "collapsed": false, - "items": ["changelog/1.5.0", "changelog/1.2.0", "changelog/1.1.0", "changelog/1.0.0"] + "items": ["changelog/1.5.0", "changelog/1.2.0"] } ] } diff --git a/gator_versioned_sidebars/version-1.6.0-sidebars.json b/gator_versioned_sidebars/version-1.6.0-sidebars.json index 187fc4591d4..d4bc99b003d 100644 --- a/gator_versioned_sidebars/version-1.6.0-sidebars.json +++ b/gator_versioned_sidebars/version-1.6.0-sidebars.json @@ -250,13 +250,7 @@ "type": "category", "label": "Changelog", "collapsed": false, - "items": [ - "changelog/1.6.0", - "changelog/1.5.0", - "changelog/1.2.0", - "changelog/1.1.0", - "changelog/1.0.0" - ] + "items": ["changelog/1.6.0", "changelog/1.5.0", "changelog/1.2.0"] } ] } diff --git a/gator_versioned_sidebars/version-1.0.0-sidebars.json b/gator_versioned_sidebars/version-1.7.0-sidebars.json similarity index 84% rename from gator_versioned_sidebars/version-1.0.0-sidebars.json rename to gator_versioned_sidebars/version-1.7.0-sidebars.json index dab908778bf..f4c60ab2963 100644 --- a/gator_versioned_sidebars/version-1.0.0-sidebars.json +++ b/gator_versioned_sidebars/version-1.7.0-sidebars.json @@ -22,7 +22,7 @@ "items": ["get-started/smart-account-quickstart/eip7702"] }, "get-started/use-the-cli", - "get-started/use-with-openclaw", + "get-started/use-skills", { "type": "category", "label": "Use Scaffold-ETH 2", @@ -32,11 +32,6 @@ "get-started/use-scaffold-eth/advanced-permissions" ] }, - { - "type": "link", - "label": "LLM context", - "href": "https://docs.metamask.io/llms-smart-accounts-kit-full.txt" - }, "get-started/supported-networks", "get-started/supported-advanced-permissions" ] @@ -66,8 +61,8 @@ }, "collapsed": true, "items": [ - "guides/smart-accounts/signers/dynamic", "guides/smart-accounts/signers/embedded-wallets", + "guides/smart-accounts/signers/dynamic", "guides/smart-accounts/signers/eoa-wallets", "guides/smart-accounts/signers/passkey", "guides/smart-accounts/signers/privy" @@ -109,19 +104,35 @@ "key": "advanced-permissions-guides", "items": [ "guides/advanced-permissions/execute-on-metamask-users-behalf", + "guides/advanced-permissions/get-supported-permissions", { "type": "category", "label": "Use permissions", "collapsed": true, "items": [ "guides/advanced-permissions/use-permissions/erc20-token", - "guides/advanced-permissions/use-permissions/native-token" + "guides/advanced-permissions/use-permissions/native-token", + "guides/advanced-permissions/use-permissions/approval-revocation" ] }, - "guides/advanced-permissions/get-supported-permissions", "guides/advanced-permissions/get-granted-permissions", "guides/advanced-permissions/create-redelegation" ] + }, + { + "type": "category", + "label": "x402", + "collapsed": true, + "key": "x402-guides", + "items": [ + "guides/x402/overview", + "guides/x402/seller", + { + "type": "category", + "label": "Buyer", + "items": ["guides/x402/buyer/delegations", "guides/x402/buyer/recurring-payments"] + } + ] } ] }, @@ -136,14 +147,11 @@ "label": "Delegation", "collapsed": true, "key": "delegation-concepts", - "link": { - "type": "doc", - "id": "concepts/delegation/overview" - }, "items": [ - "concepts/delegation/delegation-scopes", + "concepts/delegation/overview", "concepts/delegation/delegation-manager", - "concepts/delegation/caveat-enforcers" + "concepts/delegation/caveat-enforcers", + "concepts/delegation/delegation-scopes" ] }, "concepts/advanced-permissions" @@ -182,7 +190,6 @@ "collapsed": true, "items": [ "reference/smart-account", - "reference/types", { "type": "category", "label": "Delegation", @@ -205,6 +212,7 @@ "key": "advanced-permissions-reference", "items": [ "reference/advanced-permissions/permissions", + "reference/advanced-permissions/rules", "reference/advanced-permissions/wallet-client" ] }, @@ -212,7 +220,15 @@ "type": "category", "label": "ERC-7710", "collapsed": true, - "items": ["reference/erc7710/wallet-client", "reference/erc7710/bundler-client"] + "key": "erc-7710-reference", + "items": ["reference/erc7710/bundler-client", "reference/erc7710/wallet-client"] + }, + "reference/x402", + "reference/types", + { + "type": "doc", + "id": "reference/glossary", + "label": "Glossary" } ] }, @@ -223,18 +239,18 @@ "items": [ "troubleshooting/aa21-prefund", "troubleshooting/allowance-exceeded", - "troubleshooting/error-codes", "troubleshooting/invalid-delegate", "troubleshooting/invalid-delegator", "troubleshooting/invalid-signature", - "troubleshooting/user-operation-reverted" + "troubleshooting/user-operation-reverted", + "troubleshooting/error-codes" ] }, { "type": "category", "label": "Changelog", "collapsed": false, - "items": ["changelog/1.0.0"] + "items": ["changelog/1.7.0", "changelog/1.6.0", "changelog/1.5.0", "changelog/1.2.0"] } ] } diff --git a/gator_versions.json b/gator_versions.json index a13bf8b93f2..46b296f7bd6 100644 --- a/gator_versions.json +++ b/gator_versions.json @@ -1 +1 @@ -["1.6.0", "1.5.0", "1.2.0", "1.1.0", "1.0.0"] +["1.7.0", "1.6.0", "1.5.0", "1.2.0"] diff --git a/smart-accounts-kit/get-started/supported-networks.md b/smart-accounts-kit/get-started/supported-networks.md index 7a9d307b917..06cb6d663af 100644 --- a/smart-accounts-kit/get-started/supported-networks.md +++ b/smart-accounts-kit/get-started/supported-networks.md @@ -13,63 +13,63 @@ If you don't see the network you're looking for, you can request support by emai ### Mainnet networks -| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | | Arbitrum One | ✅ | ✅ | ✅ | ✅ | | Base | ✅ | ✅ | ✅ | ✅ | | Berachain | ✅ | ✅ | ✅ | ✅ | | Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo | ❌ | ✅ | ✅ | ✅ | -| Citrea | ❌ | ✅ | ✅ | ✅ | +| Celo | ✅ | ✅ | ✅ | ✅ | +| Citrea | ✅ | ✅ | ✅ | ✅ | | Ethereum | ✅ | ✅ | ✅ | ✅ | | Gnosis Chain | ✅ | ✅ | ✅ | ✅ | | Ink | ✅ | ✅ | ✅ | ✅ | -| Katana | ❌ | ❌ | ❌ | ✅ | +| Katana | ✅ | ✅ | ✅ | ✅ | | Linea | ✅ | ✅ | ✅ | ✅ | -| Mantle | ❌ | ❌ | ✅ | ✅ | -| MegaETH | ❌ | ✅ | ✅ | ✅ | +| Mantle | ✅ | ✅ | ✅ | ✅ | +| MegaETH | ✅ | ✅ | ✅ | ✅ | | Monad | ✅ | ✅ | ✅ | ✅ | | Optimism | ✅ | ✅ | ✅ | ✅ | | Polygon | ✅ | ✅ | ✅ | ✅ | -| Ronin | ❌ | ✅ | ✅ | ✅ | +| Ronin | ✅ | ✅ | ✅ | ✅ | | Sei | ✅ | ✅ | ✅ | ✅ | | Sonic | ✅ | ✅ | ✅ | ✅ | -| Tempo | ❌ | ✅ | ✅ | ✅ | +| Tempo | ✅ | ✅ | ✅ | ✅ | | Unichain | ✅ | ✅ | ✅ | ✅ | ### Testnet networks -| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | | Base Sepolia | ✅ | ✅ | ✅ | ✅ | | Berachain Bepolia | ✅ | ✅ | ✅ | ✅ | | Binance Smart Chain | ✅ | ✅ | ✅ | ✅ | -| Celo Alfajores | ❌ | ✅ | ✅ | ✅ | +| Celo Alfajores | ✅ | ✅ | ✅ | ✅ | | Citrea | ✅ | ✅ | ✅ | ✅ | | Ethereum Sepolia | ✅ | ✅ | ✅ | ✅ | | Gnosis Chiado | ✅ | ✅ | ✅ | ✅ | | Hoodi | ✅ | ✅ | ✅ | ✅ | | Ink Sepolia | ✅ | ✅ | ✅ | ✅ | -| Bokuto | ❌ | ❌ | ❌ | ✅ | +| Bokuto | ✅ | ✅ | ✅ | ✅ | | Linea Sepolia | ✅ | ✅ | ✅ | ✅ | -| Mantle Sepolia | ❌ | ❌ | ✅ | ✅ | +| Mantle Sepolia | ✅ | ✅ | ✅ | ✅ | | MegaETH | ✅ | ✅ | ✅ | ✅ | | Monad | ✅ | ✅ | ✅ | ✅ | | Optimism Sepolia | ✅ | ✅ | ✅ | ✅ | | Polygon Amoy | ✅ | ✅ | ✅ | ✅ | -| Ronin Saigon | ❌ | ✅ | ✅ | ✅ | +| Ronin Saigon | ✅ | ✅ | ✅ | ✅ | | Sei | ✅ | ✅ | ✅ | ✅ | | Sonic | ✅ | ✅ | ✅ | ✅ | -| Tempo Moderato | ❌ | ✅ | ✅ | ✅ | +| Tempo Moderato | ✅ | ✅ | ✅ | ✅ | | Unichain Sepolia | ✅ | ✅ | ✅ | ✅ | ## Advanced Permissions (ERC-7715) ### Mainnet networks -| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Nova | ✅ | ✅ | ✅ | ✅ | | Arbitrum One | ✅ | ✅ | ✅ | ✅ | @@ -89,7 +89,7 @@ If you don't see the network you're looking for, you can request support by emai ### Testnet networks -| Network Name | v0.3.0 | v1.0.0 | v1.1.0 | v1.2.0 | +| Network Name | v1.2.0 | v1.5.0 | v1.6.0 | v1.7.0 | | ------------------- | ------ | ------ | ------ | ------ | | Arbitrum Sepolia | ✅ | ✅ | ✅ | ✅ | | Base Sepolia | ✅ | ✅ | ✅ | ✅ | diff --git a/smart-accounts-kit/reference/x402.md b/smart-accounts-kit/reference/x402.md index 86ee062b62e..9bc5b560f99 100644 --- a/smart-accounts-kit/reference/x402.md +++ b/smart-accounts-kit/reference/x402.md @@ -15,12 +15,16 @@ The following API methods are related to x402 to create payments using open delegation, signs it, and returns an ABI-encoded delegation +The provider creates an open delegation, signs it, and returns an ABI-encoded delegation chain as a hex string. The provider internally appends redeemer, payee, and expiry caveats when the existing caveats, or the root delegation doesn't have it. +When both `redeemers.addresses` and `facilitatorAddresses` from the server's payment requirements +are provided, the provider resolves redeemers as the intersection of the two lists. +If only one is provided, that list is used. An error is thrown if the resolved list is empty. + ### Parameters | Name | Type | Required | Description |