@eth-optimism/actions-sdk 0.0.0-main-20251009211102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +106 -0
- package/dist/actions.d.ts +58 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +88 -0
- package/dist/actions.js.map +1 -0
- package/dist/actions.test.d.ts +2 -0
- package/dist/actions.test.d.ts.map +1 -0
- package/dist/actions.test.js +620 -0
- package/dist/actions.test.js.map +1 -0
- package/dist/constants/assets.d.ts +3 -0
- package/dist/constants/assets.d.ts.map +1 -0
- package/dist/constants/assets.js +16 -0
- package/dist/constants/assets.js.map +1 -0
- package/dist/constants/config.d.ts +10 -0
- package/dist/constants/config.d.ts.map +1 -0
- package/dist/constants/config.js +10 -0
- package/dist/constants/config.js.map +1 -0
- package/dist/constants/supportedChains.d.ts +3 -0
- package/dist/constants/supportedChains.d.ts.map +1 -0
- package/dist/constants/supportedChains.js +8 -0
- package/dist/constants/supportedChains.js.map +1 -0
- package/dist/core/asset/__mocks__/mockAsset.d.ts +6 -0
- package/dist/core/asset/__mocks__/mockAsset.d.ts.map +1 -0
- package/dist/core/asset/__mocks__/mockAsset.js +12 -0
- package/dist/core/asset/__mocks__/mockAsset.js.map +1 -0
- package/dist/core/error/errors.d.ts +19 -0
- package/dist/core/error/errors.d.ts.map +1 -0
- package/dist/core/error/errors.js +22 -0
- package/dist/core/error/errors.js.map +1 -0
- package/dist/core/utils/__tests__/retryOnStaleRead.spec.d.ts +2 -0
- package/dist/core/utils/__tests__/retryOnStaleRead.spec.d.ts.map +1 -0
- package/dist/core/utils/__tests__/retryOnStaleRead.spec.js +41 -0
- package/dist/core/utils/__tests__/retryOnStaleRead.spec.js.map +1 -0
- package/dist/core/utils/retryOnStaleRead.d.ts +14 -0
- package/dist/core/utils/retryOnStaleRead.d.ts.map +1 -0
- package/dist/core/utils/retryOnStaleRead.js +29 -0
- package/dist/core/utils/retryOnStaleRead.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/index.node.d.ts +5 -0
- package/dist/index.node.d.ts.map +1 -0
- package/dist/index.node.js +4 -0
- package/dist/index.node.js.map +1 -0
- package/dist/index.react.d.ts +5 -0
- package/dist/index.react.d.ts.map +1 -0
- package/dist/index.react.js +4 -0
- package/dist/index.react.js.map +1 -0
- package/dist/lend/__mocks__/mockLendTransaction.d.ts +22 -0
- package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -0
- package/dist/lend/__mocks__/mockLendTransaction.js +32 -0
- package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -0
- package/dist/lend/core/LendProvider.d.ts +122 -0
- package/dist/lend/core/LendProvider.d.ts.map +1 -0
- package/dist/lend/core/LendProvider.js +183 -0
- package/dist/lend/core/LendProvider.js.map +1 -0
- package/dist/lend/core/__tests__/LendProvider.test.d.ts +2 -0
- package/dist/lend/core/__tests__/LendProvider.test.d.ts.map +1 -0
- package/dist/lend/core/__tests__/LendProvider.test.js +247 -0
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -0
- package/dist/lend/index.d.ts +3 -0
- package/dist/lend/index.d.ts.map +1 -0
- package/dist/lend/index.js +3 -0
- package/dist/lend/index.js.map +1 -0
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts +15 -0
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -0
- package/dist/lend/namespaces/ActionsLendNamespace.js +17 -0
- package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -0
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +36 -0
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -0
- package/dist/lend/namespaces/WalletLendNamespace.js +68 -0
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -0
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.d.ts +2 -0
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.d.ts.map +1 -0
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +41 -0
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.d.ts +2 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.d.ts.map +1 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +188 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +55 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.js +193 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -0
- package/dist/lend/providers/morpho/__mocks__/mockVault.d.ts +21 -0
- package/dist/lend/providers/morpho/__mocks__/mockVault.d.ts.map +1 -0
- package/dist/lend/providers/morpho/__mocks__/mockVault.js +27 -0
- package/dist/lend/providers/morpho/__mocks__/mockVault.js.map +1 -0
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.d.ts +2 -0
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.d.ts.map +1 -0
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +259 -0
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -0
- package/dist/lend/providers/morpho/__tests__/api.test.d.ts +2 -0
- package/dist/lend/providers/morpho/__tests__/api.test.d.ts.map +1 -0
- package/dist/lend/providers/morpho/__tests__/api.test.js +66 -0
- package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.d.ts +2 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +332 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -0
- package/dist/lend/providers/morpho/api.d.ts +14 -0
- package/dist/lend/providers/morpho/api.d.ts.map +1 -0
- package/dist/lend/providers/morpho/api.js +76 -0
- package/dist/lend/providers/morpho/api.js.map +1 -0
- package/dist/lend/providers/morpho/sdk.d.ts +61 -0
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -0
- package/dist/lend/providers/morpho/sdk.js +300 -0
- package/dist/lend/providers/morpho/sdk.js.map +1 -0
- package/dist/nodeActionsFactory.d.ts +19 -0
- package/dist/nodeActionsFactory.d.ts.map +1 -0
- package/dist/nodeActionsFactory.js +17 -0
- package/dist/nodeActionsFactory.js.map +1 -0
- package/dist/reactActionsFactory.d.ts +19 -0
- package/dist/reactActionsFactory.d.ts.map +1 -0
- package/dist/reactActionsFactory.js +17 -0
- package/dist/reactActionsFactory.js.map +1 -0
- package/dist/services/ChainManager.d.ts +90 -0
- package/dist/services/ChainManager.d.ts.map +1 -0
- package/dist/services/ChainManager.js +183 -0
- package/dist/services/ChainManager.js.map +1 -0
- package/dist/services/ChainManager.spec.d.ts +2 -0
- package/dist/services/ChainManager.spec.d.ts.map +1 -0
- package/dist/services/ChainManager.spec.js +260 -0
- package/dist/services/ChainManager.spec.js.map +1 -0
- package/dist/services/tokenBalance.d.ts +15 -0
- package/dist/services/tokenBalance.d.ts.map +1 -0
- package/dist/services/tokenBalance.js +82 -0
- package/dist/services/tokenBalance.js.map +1 -0
- package/dist/services/tokenBalance.spec.d.ts +2 -0
- package/dist/services/tokenBalance.spec.d.ts.map +1 -0
- package/dist/services/tokenBalance.spec.js +73 -0
- package/dist/services/tokenBalance.spec.js.map +1 -0
- package/dist/supported/tokens.d.ts +25 -0
- package/dist/supported/tokens.d.ts.map +1 -0
- package/dist/supported/tokens.js +88 -0
- package/dist/supported/tokens.js.map +1 -0
- package/dist/test/MockAssets.d.ts +10 -0
- package/dist/test/MockAssets.d.ts.map +1 -0
- package/dist/test/MockAssets.js +29 -0
- package/dist/test/MockAssets.js.map +1 -0
- package/dist/test/MockChainManager.d.ts +31 -0
- package/dist/test/MockChainManager.d.ts.map +1 -0
- package/dist/test/MockChainManager.js +92 -0
- package/dist/test/MockChainManager.js.map +1 -0
- package/dist/test/MockLendProvider.d.ts +68 -0
- package/dist/test/MockLendProvider.d.ts.map +1 -0
- package/dist/test/MockLendProvider.js +258 -0
- package/dist/test/MockLendProvider.js.map +1 -0
- package/dist/test/MockMarkets.d.ts +15 -0
- package/dist/test/MockMarkets.d.ts.map +1 -0
- package/dist/test/MockMarkets.js +26 -0
- package/dist/test/MockMarkets.js.map +1 -0
- package/dist/test/MockPrivyClient.d.ts +66 -0
- package/dist/test/MockPrivyClient.d.ts.map +1 -0
- package/dist/test/MockPrivyClient.js +93 -0
- package/dist/test/MockPrivyClient.js.map +1 -0
- package/dist/test/utils.d.ts +2 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/test/utils.js +5 -0
- package/dist/test/utils.js.map +1 -0
- package/dist/types/actions.d.ts +69 -0
- package/dist/types/actions.d.ts.map +1 -0
- package/dist/types/actions.js +2 -0
- package/dist/types/actions.js.map +1 -0
- package/dist/types/asset.d.ts +32 -0
- package/dist/types/asset.d.ts.map +1 -0
- package/dist/types/asset.js +2 -0
- package/dist/types/asset.js.map +1 -0
- package/dist/types/chain.d.ts +26 -0
- package/dist/types/chain.d.ts.map +1 -0
- package/dist/types/chain.js +2 -0
- package/dist/types/chain.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lend/base.d.ts +370 -0
- package/dist/types/lend/base.d.ts.map +1 -0
- package/dist/types/lend/base.js +4 -0
- package/dist/types/lend/base.js.map +1 -0
- package/dist/types/lend/index.d.ts +3 -0
- package/dist/types/lend/index.d.ts.map +1 -0
- package/dist/types/lend/index.js +3 -0
- package/dist/types/lend/index.js.map +1 -0
- package/dist/types/lend/morpho.d.ts +7 -0
- package/dist/types/lend/morpho.d.ts.map +1 -0
- package/dist/types/lend/morpho.js +6 -0
- package/dist/types/lend/morpho.js.map +1 -0
- package/dist/types/wallet.d.ts +26 -0
- package/dist/types/wallet.d.ts.map +1 -0
- package/dist/types/wallet.js +2 -0
- package/dist/types/wallet.js.map +1 -0
- package/dist/utils/assets.d.ts +33 -0
- package/dist/utils/assets.d.ts.map +1 -0
- package/dist/utils/assets.js +53 -0
- package/dist/utils/assets.js.map +1 -0
- package/dist/utils/assets.test.d.ts +2 -0
- package/dist/utils/assets.test.d.ts.map +1 -0
- package/dist/utils/assets.test.js +24 -0
- package/dist/utils/assets.test.js.map +1 -0
- package/dist/utils/markets.d.ts +17 -0
- package/dist/utils/markets.d.ts.map +1 -0
- package/dist/utils/markets.js +25 -0
- package/dist/utils/markets.js.map +1 -0
- package/dist/utils/test.d.ts +117 -0
- package/dist/utils/test.d.ts.map +1 -0
- package/dist/utils/test.js +265 -0
- package/dist/utils/test.js.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts +84 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.js +89 -0
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -0
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.d.ts +2 -0
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.d.ts.map +1 -0
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +249 -0
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -0
- package/dist/wallet/core/providers/WalletProvider.d.ts +63 -0
- package/dist/wallet/core/providers/WalletProvider.d.ts.map +1 -0
- package/dist/wallet/core/providers/WalletProvider.js +85 -0
- package/dist/wallet/core/providers/WalletProvider.js.map +1 -0
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.d.ts +2 -0
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +246 -0
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -0
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +33 -0
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +13 -0
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -0
- package/dist/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.d.ts +20 -0
- package/dist/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.d.ts.map +1 -0
- package/dist/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.js +29 -0
- package/dist/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.js.map +1 -0
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.d.ts +2 -0
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.d.ts.map +1 -0
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +52 -0
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -0
- package/dist/wallet/core/providers/hosted/types/index.d.ts +70 -0
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -0
- package/dist/wallet/core/providers/hosted/types/index.js +2 -0
- package/dist/wallet/core/providers/hosted/types/index.js.map +1 -0
- package/dist/wallet/core/providers/smart/abstract/SmartWalletProvider.d.ts +61 -0
- package/dist/wallet/core/providers/smart/abstract/SmartWalletProvider.d.ts.map +1 -0
- package/dist/wallet/core/providers/smart/abstract/SmartWalletProvider.js +7 -0
- package/dist/wallet/core/providers/smart/abstract/SmartWalletProvider.js.map +1 -0
- package/dist/wallet/core/providers/smart/abstract/types/index.d.ts +16 -0
- package/dist/wallet/core/providers/smart/abstract/types/index.d.ts.map +1 -0
- package/dist/wallet/core/providers/smart/abstract/types/index.js +2 -0
- package/dist/wallet/core/providers/smart/abstract/types/index.js.map +1 -0
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +77 -0
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -0
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +125 -0
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -0
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +325 -0
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -0
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +96 -0
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/abstract/Wallet.js +81 -0
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -0
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +15 -0
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +18 -0
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -0
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +44 -0
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -0
- package/dist/wallet/core/wallets/abstract/types/index.d.ts +30 -0
- package/dist/wallet/core/wallets/abstract/types/index.d.ts.map +1 -0
- package/dist/wallet/core/wallets/abstract/types/index.js +2 -0
- package/dist/wallet/core/wallets/abstract/types/index.js.map +1 -0
- package/dist/wallet/core/wallets/eoa/EOAWallet.d.ts +44 -0
- package/dist/wallet/core/wallets/eoa/EOAWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/eoa/EOAWallet.js +67 -0
- package/dist/wallet/core/wallets/eoa/EOAWallet.js.map +1 -0
- package/dist/wallet/core/wallets/eoa/__mocks__/EOAWallet.d.ts +28 -0
- package/dist/wallet/core/wallets/eoa/__mocks__/EOAWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/eoa/__mocks__/EOAWallet.js +51 -0
- package/dist/wallet/core/wallets/eoa/__mocks__/EOAWallet.js.map +1 -0
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +191 -0
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/SmartWallet.d.ts +69 -0
- package/dist/wallet/core/wallets/smart/abstract/SmartWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/SmartWallet.js +8 -0
- package/dist/wallet/core/wallets/smart/abstract/SmartWallet.js.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.d.ts +43 -0
- package/dist/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.js +67 -0
- package/dist/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.js.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/types/index.d.ts +19 -0
- package/dist/wallet/core/wallets/smart/abstract/types/index.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/abstract/types/index.js +2 -0
- package/dist/wallet/core/wallets/smart/abstract/types/index.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +191 -0
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +436 -0
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.d.ts +40 -0
- package/dist/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.js +72 -0
- package/dist/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +561 -0
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/constants/index.d.ts +719 -0
- package/dist/wallet/core/wallets/smart/default/constants/index.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/constants/index.js +480 -0
- package/dist/wallet/core/wallets/smart/default/constants/index.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +52 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerIndexOnChain.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerIndexOnChain.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerIndexOnChain.spec.js +109 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerIndexOnChain.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/formatPublicKey.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/formatPublicKey.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/formatPublicKey.spec.js +22 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/formatPublicKey.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.d.ts +2 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +44 -0
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerInArray.d.ts +12 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerInArray.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerInArray.js +23 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerInArray.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.d.ts +30 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.js +40 -0
- package/dist/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/formatPublicKey.d.ts +8 -0
- package/dist/wallet/core/wallets/smart/default/utils/formatPublicKey.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/formatPublicKey.js +13 -0
- package/dist/wallet/core/wallets/smart/default/utils/formatPublicKey.js.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/getSignerPublicKey.d.ts +12 -0
- package/dist/wallet/core/wallets/smart/default/utils/getSignerPublicKey.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/default/utils/getSignerPublicKey.js +18 -0
- package/dist/wallet/core/wallets/smart/default/utils/getSignerPublicKey.js.map +1 -0
- package/dist/wallet/core/wallets/smart/error/errors.d.ts +8 -0
- package/dist/wallet/core/wallets/smart/error/errors.d.ts.map +1 -0
- package/dist/wallet/core/wallets/smart/error/errors.js +9 -0
- package/dist/wallet/core/wallets/smart/error/errors.js.map +1 -0
- package/dist/wallet/node/index.d.ts +4 -0
- package/dist/wallet/node/index.d.ts.map +1 -0
- package/dist/wallet/node/index.js +3 -0
- package/dist/wallet/node/index.js.map +1 -0
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +34 -0
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +43 -0
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -0
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +80 -0
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -0
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +15 -0
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +37 -0
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -0
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.d.ts +2 -0
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +62 -0
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -0
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +50 -0
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +60 -0
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -0
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +132 -0
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -0
- package/dist/wallet/node/providers/hosted/types/index.d.ts +90 -0
- package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -0
- package/dist/wallet/node/providers/hosted/types/index.js +2 -0
- package/dist/wallet/node/providers/hosted/types/index.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +43 -0
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +47 -0
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.d.ts +2 -0
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +105 -0
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.d.ts +2 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +39 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +15 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +23 -0
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +46 -0
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +34 -0
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.d.ts +2 -0
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +82 -0
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.d.ts +2 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +61 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/createSigner.d.ts +17 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/createSigner.d.ts.map +1 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/createSigner.js +24 -0
- package/dist/wallet/node/wallets/hosted/turnkey/utils/createSigner.js.map +1 -0
- package/dist/wallet/react/index.d.ts +3 -0
- package/dist/wallet/react/index.d.ts.map +1 -0
- package/dist/wallet/react/index.js +2 -0
- package/dist/wallet/react/index.js.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +29 -0
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +36 -0
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts +33 -0
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +30 -0
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +79 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +29 -0
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +38 -0
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts +33 -0
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +29 -0
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +79 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -0
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +49 -0
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +60 -0
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -0
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.d.ts +2 -0
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +110 -0
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -0
- package/dist/wallet/react/providers/hosted/types/index.d.ts +86 -0
- package/dist/wallet/react/providers/hosted/types/index.d.ts.map +1 -0
- package/dist/wallet/react/providers/hosted/types/index.js +2 -0
- package/dist/wallet/react/providers/hosted/types/index.js.map +1 -0
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +15 -0
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -0
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +46 -0
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -0
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.d.ts +2 -0
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.d.ts.map +1 -0
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +68 -0
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +39 -0
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +43 -0
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +16 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js +15 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +117 -0
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +62 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/createSigner.d.ts +13 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/createSigner.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/createSigner.js +32 -0
- package/dist/wallet/react/wallets/hosted/dynamic/utils/createSigner.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +34 -0
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +38 -0
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/__mocks__/PrivyWalletMock.d.ts +16 -0
- package/dist/wallet/react/wallets/hosted/privy/__mocks__/PrivyWalletMock.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/__mocks__/PrivyWalletMock.js +15 -0
- package/dist/wallet/react/wallets/hosted/privy/__mocks__/PrivyWalletMock.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +95 -0
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +55 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/createSigner.d.ts +13 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/createSigner.js +24 -0
- package/dist/wallet/react/wallets/hosted/privy/utils/createSigner.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +53 -0
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +43 -0
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +82 -0
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.d.ts +2 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +61 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/createSigner.d.ts +17 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/createSigner.d.ts.map +1 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/createSigner.js +24 -0
- package/dist/wallet/react/wallets/hosted/turnkey/utils/createSigner.js.map +1 -0
- package/package.json +86 -0
- package/src/actions.test.ts +885 -0
- package/src/actions.ts +190 -0
- package/src/constants/assets.ts +20 -0
- package/src/constants/config.ts +9 -0
- package/src/constants/supportedChains.ts +10 -0
- package/src/core/asset/__mocks__/mockAsset.ts +13 -0
- package/src/core/error/errors.ts +27 -0
- package/src/core/utils/__tests__/retryOnStaleRead.spec.ts +56 -0
- package/src/core/utils/retryOnStaleRead.ts +39 -0
- package/src/index.node.ts +4 -0
- package/src/index.react.ts +4 -0
- package/src/index.ts +35 -0
- package/src/lend/__mocks__/mockLendTransaction.ts +47 -0
- package/src/lend/core/LendProvider.ts +311 -0
- package/src/lend/core/__tests__/LendProvider.test.ts +305 -0
- package/src/lend/index.ts +2 -0
- package/src/lend/namespaces/ActionsLendNamespace.ts +26 -0
- package/src/lend/namespaces/WalletLendNamespace.ts +116 -0
- package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +58 -0
- package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +223 -0
- package/src/lend/providers/morpho/MorphoLendProvider.ts +258 -0
- package/src/lend/providers/morpho/__mocks__/mockVault.ts +28 -0
- package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +356 -0
- package/src/lend/providers/morpho/__tests__/api.test.ts +104 -0
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +366 -0
- package/src/lend/providers/morpho/api.ts +86 -0
- package/src/lend/providers/morpho/sdk.ts +418 -0
- package/src/nodeActionsFactory.ts +37 -0
- package/src/reactActionsFactory.ts +37 -0
- package/src/services/ChainManager.spec.ts +332 -0
- package/src/services/ChainManager.ts +237 -0
- package/src/services/tokenBalance.spec.ts +93 -0
- package/src/services/tokenBalance.ts +122 -0
- package/src/supported/tokens.ts +103 -0
- package/src/test/MockAssets.ts +33 -0
- package/src/test/MockChainManager.ts +138 -0
- package/src/test/MockLendProvider.ts +397 -0
- package/src/test/MockMarkets.ts +32 -0
- package/src/test/MockPrivyClient.ts +118 -0
- package/src/test/utils.ts +5 -0
- package/src/types/actions.ts +80 -0
- package/src/types/asset.ts +34 -0
- package/src/types/chain.ts +30 -0
- package/src/types/index.ts +5 -0
- package/src/types/lend/base.ts +415 -0
- package/src/types/lend/index.ts +2 -0
- package/src/types/lend/morpho.ts +16 -0
- package/src/types/wallet.ts +28 -0
- package/src/utils/assets.test.ts +28 -0
- package/src/utils/assets.ts +71 -0
- package/src/utils/markets.ts +35 -0
- package/src/utils/test.ts +379 -0
- package/src/wallet/core/namespace/WalletNamespace.ts +125 -0
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +398 -0
- package/src/wallet/core/providers/WalletProvider.ts +123 -0
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +374 -0
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +45 -0
- package/src/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.ts +46 -0
- package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +77 -0
- package/src/wallet/core/providers/hosted/types/index.ts +76 -0
- package/src/wallet/core/providers/smart/abstract/SmartWalletProvider.ts +64 -0
- package/src/wallet/core/providers/smart/abstract/types/index.ts +17 -0
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +175 -0
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +467 -0
- package/src/wallet/core/wallets/abstract/Wallet.ts +149 -0
- package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +40 -0
- package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +61 -0
- package/src/wallet/core/wallets/abstract/types/index.ts +42 -0
- package/src/wallet/core/wallets/eoa/EOAWallet.ts +96 -0
- package/src/wallet/core/wallets/eoa/__mocks__/EOAWallet.ts +112 -0
- package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +299 -0
- package/src/wallet/core/wallets/smart/abstract/SmartWallet.ts +93 -0
- package/src/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.ts +161 -0
- package/src/wallet/core/wallets/smart/abstract/types/index.ts +19 -0
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +598 -0
- package/src/wallet/core/wallets/smart/default/__mocks__/DefaultSmartWallet.ts +172 -0
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +781 -0
- package/src/wallet/core/wallets/smart/default/constants/index.ts +482 -0
- package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +68 -0
- package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerIndexOnChain.spec.ts +147 -0
- package/src/wallet/core/wallets/smart/default/utils/__tests__/formatPublicKey.spec.ts +28 -0
- package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +60 -0
- package/src/wallet/core/wallets/smart/default/utils/findSignerInArray.ts +30 -0
- package/src/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.ts +66 -0
- package/src/wallet/core/wallets/smart/default/utils/formatPublicKey.ts +14 -0
- package/src/wallet/core/wallets/smart/default/utils/getSignerPublicKey.ts +18 -0
- package/src/wallet/core/wallets/smart/error/errors.ts +18 -0
- package/src/wallet/node/index.ts +7 -0
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +65 -0
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +112 -0
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +55 -0
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +89 -0
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +84 -0
- package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +182 -0
- package/src/wallet/node/providers/hosted/types/index.ts +102 -0
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +78 -0
- package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +142 -0
- package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +48 -0
- package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +32 -0
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +90 -0
- package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +104 -0
- package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +77 -0
- package/src/wallet/node/wallets/hosted/turnkey/utils/createSigner.ts +32 -0
- package/src/wallet/react/index.ts +5 -0
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +54 -0
- package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +57 -0
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +105 -0
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +56 -0
- package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +56 -0
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +103 -0
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +78 -0
- package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +142 -0
- package/src/wallet/react/providers/hosted/types/index.ts +100 -0
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +57 -0
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +117 -0
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +67 -0
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +22 -0
- package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +148 -0
- package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +82 -0
- package/src/wallet/react/wallets/hosted/dynamic/utils/createSigner.ts +38 -0
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +63 -0
- package/src/wallet/react/wallets/hosted/privy/__mocks__/PrivyWalletMock.ts +22 -0
- package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +109 -0
- package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +66 -0
- package/src/wallet/react/wallets/hosted/privy/utils/createSigner.ts +30 -0
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +94 -0
- package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +99 -0
- package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +72 -0
- package/src/wallet/react/wallets/hosted/turnkey/utils/createSigner.ts +29 -0
|
@@ -0,0 +1,598 @@
|
|
|
1
|
+
import type { Address, Hex, LocalAccount } from 'viem'
|
|
2
|
+
import {
|
|
3
|
+
concatHex,
|
|
4
|
+
decodeAbiParameters,
|
|
5
|
+
encodeFunctionData,
|
|
6
|
+
erc20Abi,
|
|
7
|
+
isHex,
|
|
8
|
+
size,
|
|
9
|
+
} from 'viem'
|
|
10
|
+
import type { WaitForUserOperationReceiptReturnType } from 'viem/account-abstraction'
|
|
11
|
+
import { toCoinbaseSmartAccount } from 'viem/account-abstraction'
|
|
12
|
+
|
|
13
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
14
|
+
import { TransactionConfirmedButRevertedError } from '@/core/error/errors.js'
|
|
15
|
+
import { retryOnStaleRead } from '@/core/utils/retryOnStaleRead.js'
|
|
16
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
17
|
+
import type { Asset } from '@/types/asset.js'
|
|
18
|
+
import type {
|
|
19
|
+
LendConfig,
|
|
20
|
+
LendProvider,
|
|
21
|
+
TransactionData,
|
|
22
|
+
} from '@/types/lend/index.js'
|
|
23
|
+
import { parseAssetAmount } from '@/utils/assets.js'
|
|
24
|
+
import { SmartWallet } from '@/wallet/core/wallets/smart/abstract/SmartWallet.js'
|
|
25
|
+
import type { Signer } from '@/wallet/core/wallets/smart/abstract/types/index.js'
|
|
26
|
+
import {
|
|
27
|
+
smartWalletAbi,
|
|
28
|
+
smartWalletFactoryAbi,
|
|
29
|
+
smartWalletFactoryAddress,
|
|
30
|
+
} from '@/wallet/core/wallets/smart/default/constants/index.js'
|
|
31
|
+
import { findSignerInArray } from '@/wallet/core/wallets/smart/default/utils/findSignerInArray.js'
|
|
32
|
+
import { findSignerIndexOnChain } from '@/wallet/core/wallets/smart/default/utils/findSignerIndexOnChain.js'
|
|
33
|
+
import { formatPublicKey } from '@/wallet/core/wallets/smart/default/utils/formatPublicKey.js'
|
|
34
|
+
import { getSignerPublicKey } from '@/wallet/core/wallets/smart/default/utils/getSignerPublicKey.js'
|
|
35
|
+
import { SmartWalletDeploymentError } from '@/wallet/core/wallets/smart/error/errors.js'
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Smart Wallet Implementation
|
|
39
|
+
* @description ERC-4337 compatible smart wallet that uses Coinbase Smart Account (https://github.com/coinbase/smart-wallet/blob/main/src/CoinbaseSmartWallet.sol).
|
|
40
|
+
* Supports multi-owner wallets, gasless transactions via paymasters, and cross-chain operations.
|
|
41
|
+
*/
|
|
42
|
+
export class DefaultSmartWallet extends SmartWallet {
|
|
43
|
+
/** Local account used for signing transactions and UserOperations */
|
|
44
|
+
public readonly signer: LocalAccount
|
|
45
|
+
/** Address of the smart wallet */
|
|
46
|
+
private _address!: Address
|
|
47
|
+
/** Array of wallet signers */
|
|
48
|
+
private signers: Signer[]
|
|
49
|
+
/** Index of this.signer in this.signers array */
|
|
50
|
+
private signerIndex: number
|
|
51
|
+
/** Known deployment address of the wallet (if already deployed) */
|
|
52
|
+
private deploymentAddress?: Address
|
|
53
|
+
/** Nonce used for deterministic address generation (defaults to 0) */
|
|
54
|
+
private nonce?: bigint
|
|
55
|
+
/** Optional 16-byte attribution suffix appended to callData */
|
|
56
|
+
private attributionSuffix?: Hex
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create a Smart Wallet instance
|
|
60
|
+
* @param owners - Array of wallet owners (addresses or WebAuthn accounts)
|
|
61
|
+
* @param signer - Local account for signing transactions
|
|
62
|
+
* @param chainManager - Network management service
|
|
63
|
+
* @param lendProvider - Lending operations provider
|
|
64
|
+
* @param deploymentAddress - Known wallet address (if already deployed)
|
|
65
|
+
* @param ownerIndex - Index of signer in owners array
|
|
66
|
+
* @param nonce - Nonce for address generation
|
|
67
|
+
*/
|
|
68
|
+
private constructor(
|
|
69
|
+
signers: Signer[],
|
|
70
|
+
signer: LocalAccount,
|
|
71
|
+
chainManager: ChainManager,
|
|
72
|
+
lendProvider?: LendProvider<LendConfig>,
|
|
73
|
+
deploymentAddress?: Address,
|
|
74
|
+
nonce?: bigint,
|
|
75
|
+
attributionSuffix?: Hex,
|
|
76
|
+
) {
|
|
77
|
+
super(chainManager, lendProvider)
|
|
78
|
+
|
|
79
|
+
const { signersWithLocalAccount, signerIndex } =
|
|
80
|
+
DefaultSmartWallet.ensureLocalAccountSigner(signers, signer)
|
|
81
|
+
this.signer = signer
|
|
82
|
+
this.signers = signersWithLocalAccount
|
|
83
|
+
this.signerIndex = signerIndex
|
|
84
|
+
this.deploymentAddress = deploymentAddress
|
|
85
|
+
this.nonce = nonce
|
|
86
|
+
if (attributionSuffix) {
|
|
87
|
+
DefaultSmartWallet.isValidAttributionSuffix(attributionSuffix)
|
|
88
|
+
this.attributionSuffix = attributionSuffix
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
get address() {
|
|
93
|
+
if (!this._address) {
|
|
94
|
+
throw new Error('Smart wallet not initialized')
|
|
95
|
+
}
|
|
96
|
+
return this._address
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get the formatted owner bytes for smart wallet operations
|
|
101
|
+
* @description Converts the wallet's owners array into the bytes format expected by the smart wallet
|
|
102
|
+
* factory and contract. EOA addresses are padded to 32 bytes, LocalAccount addresses are extracted and padded,
|
|
103
|
+
* and WebAuthn public keys are passed through.
|
|
104
|
+
* @returns Array of 32-byte formatted owner identifiers
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
get _signerBytes() {
|
|
108
|
+
return this.signers.map((signer) => {
|
|
109
|
+
const publicKey = getSignerPublicKey(signer)
|
|
110
|
+
return formatPublicKey(publicKey)
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static async create(params: {
|
|
115
|
+
signer: LocalAccount
|
|
116
|
+
chainManager: ChainManager
|
|
117
|
+
signers?: Signer[]
|
|
118
|
+
lendProvider?: LendProvider<LendConfig>
|
|
119
|
+
deploymentAddress?: Address
|
|
120
|
+
nonce?: bigint
|
|
121
|
+
attributionSuffix?: Hex
|
|
122
|
+
}): Promise<DefaultSmartWallet> {
|
|
123
|
+
const signers = params.signers ?? [params.signer.address]
|
|
124
|
+
const wallet = new DefaultSmartWallet(
|
|
125
|
+
signers,
|
|
126
|
+
params.signer,
|
|
127
|
+
params.chainManager,
|
|
128
|
+
params.lendProvider,
|
|
129
|
+
params.deploymentAddress,
|
|
130
|
+
params.nonce,
|
|
131
|
+
params.attributionSuffix,
|
|
132
|
+
)
|
|
133
|
+
await wallet.initialize()
|
|
134
|
+
return wallet
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Ensures the LocalAccount signer is present in the signers array for signing operations.
|
|
139
|
+
* This is needed because the toCoinbaseSmartAccount requires two things:
|
|
140
|
+
* 1. The signers array to contain the signer (LocalAccount).
|
|
141
|
+
* 2. The index that the signer is at in the signers array.
|
|
142
|
+
*
|
|
143
|
+
*
|
|
144
|
+
* Another benefit of this is that it allows flexible constructor arguments because it can take a mix
|
|
145
|
+
* of public keys/addresses or LocalAccounts.
|
|
146
|
+
* Searches for the signer's public key in the array and replaces that entry with the LocalAccount.
|
|
147
|
+
* If the LocalAccount is already at that index, this is a no-op.
|
|
148
|
+
* @param signers - Array of signers (addresses, LocalAccounts, or WebAuthnAccounts)
|
|
149
|
+
* @param signer - LocalAccount that will sign transactions
|
|
150
|
+
* @returns The signers array with LocalAccount at the correct index, and that index
|
|
151
|
+
* @throws Error if signer's public key is not found in the signers array
|
|
152
|
+
*/
|
|
153
|
+
private static ensureLocalAccountSigner(
|
|
154
|
+
signers: Signer[],
|
|
155
|
+
signer: LocalAccount,
|
|
156
|
+
): {
|
|
157
|
+
signersWithLocalAccount: Signer[]
|
|
158
|
+
signerIndex: number
|
|
159
|
+
} {
|
|
160
|
+
const signerIndex = findSignerInArray(signers, signer)
|
|
161
|
+
|
|
162
|
+
if (signerIndex === -1) {
|
|
163
|
+
throw new Error(`Signer does not match any signer in the signers array`)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Replace the signer at the found index with the LocalAccount
|
|
167
|
+
const signersWithLocalAccount: Signer[] = [...signers]
|
|
168
|
+
signersWithLocalAccount[signerIndex] = signer
|
|
169
|
+
return { signersWithLocalAccount, signerIndex }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Checks if a 16-byte attribution suffix is valid
|
|
174
|
+
* @description Checks if the suffix is a valid hex string and is exactly 16 bytes
|
|
175
|
+
* @throws Error if suffix is not hex or is not exactly 16 bytes
|
|
176
|
+
*/
|
|
177
|
+
private static isValidAttributionSuffix(suffix: Hex): void {
|
|
178
|
+
if (suffix == null) {
|
|
179
|
+
return
|
|
180
|
+
}
|
|
181
|
+
if (!isHex(suffix)) {
|
|
182
|
+
throw new Error('Attribution suffix must be a valid hex string')
|
|
183
|
+
}
|
|
184
|
+
if (size(suffix) !== 16) {
|
|
185
|
+
throw new Error('Attribution suffix must be 16 bytes (0x + 32 hex chars)')
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Create a Coinbase Smart Account instance
|
|
191
|
+
* @description Converts this wallet into a viem-compatible smart account for ERC-4337 operations.
|
|
192
|
+
* @param chainId - Target blockchain network ID
|
|
193
|
+
* @returns Coinbase Smart Account instance configured for the specified chain
|
|
194
|
+
*/
|
|
195
|
+
async getCoinbaseSmartAccount(
|
|
196
|
+
chainId: SupportedChainId,
|
|
197
|
+
): ReturnType<typeof toCoinbaseSmartAccount> {
|
|
198
|
+
return toCoinbaseSmartAccount({
|
|
199
|
+
address: this.deploymentAddress,
|
|
200
|
+
ownerIndex: this.signerIndex,
|
|
201
|
+
client: this.chainManager.getPublicClient(chainId),
|
|
202
|
+
owners: this.signers,
|
|
203
|
+
nonce: this.nonce,
|
|
204
|
+
version: '1.1',
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Send a batch of transactions using this smart wallet
|
|
210
|
+
* @description Executes a batch of transactions through the smart wallet, handling gas sponsorship
|
|
211
|
+
* and ERC-4337 UserOperation creation automatically.
|
|
212
|
+
* @param transactionData - The transaction data to execute
|
|
213
|
+
* @param chainId - Target blockchain chain ID
|
|
214
|
+
* @returns Promise resolving to the transaction hash
|
|
215
|
+
*/
|
|
216
|
+
async sendBatch(
|
|
217
|
+
transactionData: TransactionData[],
|
|
218
|
+
chainId: SupportedChainId,
|
|
219
|
+
): Promise<WaitForUserOperationReceiptReturnType> {
|
|
220
|
+
const account = await this.getCoinbaseSmartAccount(chainId)
|
|
221
|
+
const bundlerClient = this.chainManager.getBundlerClient(chainId, account)
|
|
222
|
+
try {
|
|
223
|
+
const uo = await bundlerClient.prepareUserOperation({
|
|
224
|
+
account,
|
|
225
|
+
calls: transactionData,
|
|
226
|
+
paymaster: true,
|
|
227
|
+
})
|
|
228
|
+
const hash = await bundlerClient.sendUserOperation({
|
|
229
|
+
account,
|
|
230
|
+
callData: this.appendAttributionSuffix(uo.callData),
|
|
231
|
+
initCode: uo.initCode
|
|
232
|
+
? this.appendAttributionSuffix(uo.initCode)
|
|
233
|
+
: uo.initCode,
|
|
234
|
+
paymaster: true,
|
|
235
|
+
})
|
|
236
|
+
const userOperationReceipt =
|
|
237
|
+
await bundlerClient.waitForUserOperationReceipt({
|
|
238
|
+
hash,
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
return userOperationReceipt
|
|
242
|
+
} catch (error) {
|
|
243
|
+
throw new Error(
|
|
244
|
+
`Failed to send transaction: ${
|
|
245
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
246
|
+
}`,
|
|
247
|
+
)
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Send a transaction via ERC-4337
|
|
253
|
+
* @description Executes a transaction using the smart wallet with automatic gas sponsorship.
|
|
254
|
+
* The transaction is sent as a UserOperation through the bundler service.
|
|
255
|
+
* @param transactionData - Transaction details (to, value, data)
|
|
256
|
+
* @param chainId - Target blockchain network ID
|
|
257
|
+
* @returns Promise resolving to UserOperation hash
|
|
258
|
+
* @throws Error if transaction fails or validation errors occur
|
|
259
|
+
*/
|
|
260
|
+
async send(
|
|
261
|
+
transactionData: TransactionData,
|
|
262
|
+
chainId: SupportedChainId,
|
|
263
|
+
): Promise<WaitForUserOperationReceiptReturnType> {
|
|
264
|
+
try {
|
|
265
|
+
const account = await this.getCoinbaseSmartAccount(chainId)
|
|
266
|
+
const bundlerClient = this.chainManager.getBundlerClient(chainId, account)
|
|
267
|
+
const uo = await bundlerClient.prepareUserOperation({
|
|
268
|
+
account,
|
|
269
|
+
calls: [transactionData],
|
|
270
|
+
paymaster: true,
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
const hash = await bundlerClient.sendUserOperation({
|
|
274
|
+
account,
|
|
275
|
+
callData: this.appendAttributionSuffix(uo.callData),
|
|
276
|
+
initCode: uo.initCode
|
|
277
|
+
? this.appendAttributionSuffix(uo.initCode)
|
|
278
|
+
: uo.initCode,
|
|
279
|
+
paymaster: true,
|
|
280
|
+
})
|
|
281
|
+
const receipt = await bundlerClient.waitForUserOperationReceipt({
|
|
282
|
+
hash,
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
return receipt
|
|
286
|
+
} catch (error) {
|
|
287
|
+
throw new Error(
|
|
288
|
+
`Failed to send transaction: ${
|
|
289
|
+
error instanceof Error ? error.message : 'Unknown error'
|
|
290
|
+
}`,
|
|
291
|
+
)
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Add a new signer to the smart wallet
|
|
297
|
+
* @description Adds either an EOA address signer or a WebAuthn account signer
|
|
298
|
+
* to the underlying smart wallet contract. For WebAuthn accounts, the method
|
|
299
|
+
* extracts the x and y coordinates from the provided 64-byte public key and
|
|
300
|
+
* calls the contract's `addOwnerPublicKey`. For EOA addresses it calls
|
|
301
|
+
* `addOwnerAddress`. The add operation is sent as a UserOperation via
|
|
302
|
+
* {@link sendBatch}, and upon success the method queries the contract to
|
|
303
|
+
* resolve the signer's index.
|
|
304
|
+
* @param signer - Ethereum address (EOA) or a `WebAuthnAccount` to add
|
|
305
|
+
* @param chainId - Target chain on which the smart wallet operates
|
|
306
|
+
* @returns Promise resolving to the onchain signer index for the newly added signer
|
|
307
|
+
* @throws Error if the add operation fails or the owner index cannot be found
|
|
308
|
+
*/
|
|
309
|
+
async addSigner(signer: Signer, chainId: SupportedChainId): Promise<number> {
|
|
310
|
+
const calls = []
|
|
311
|
+
if (typeof signer === 'string') {
|
|
312
|
+
calls.push({
|
|
313
|
+
to: this.address,
|
|
314
|
+
data: encodeFunctionData({
|
|
315
|
+
abi: smartWalletAbi,
|
|
316
|
+
functionName: 'addOwnerAddress',
|
|
317
|
+
args: [signer] as const,
|
|
318
|
+
}),
|
|
319
|
+
value: 0n,
|
|
320
|
+
})
|
|
321
|
+
} else if (signer.type === 'webAuthn') {
|
|
322
|
+
const [x, y] = decodeAbiParameters(
|
|
323
|
+
[{ type: 'bytes32' }, { type: 'bytes32' }],
|
|
324
|
+
signer.publicKey,
|
|
325
|
+
)
|
|
326
|
+
calls.push({
|
|
327
|
+
to: this.address,
|
|
328
|
+
data: encodeFunctionData({
|
|
329
|
+
abi: smartWalletAbi,
|
|
330
|
+
functionName: 'addOwnerPublicKey',
|
|
331
|
+
args: [x, y] as const,
|
|
332
|
+
}),
|
|
333
|
+
value: 0n,
|
|
334
|
+
})
|
|
335
|
+
} else if (signer.type === 'local') {
|
|
336
|
+
calls.push({
|
|
337
|
+
to: this.address,
|
|
338
|
+
data: encodeFunctionData({
|
|
339
|
+
abi: smartWalletAbi,
|
|
340
|
+
functionName: 'addOwnerAddress',
|
|
341
|
+
args: [signer.address] as const,
|
|
342
|
+
}),
|
|
343
|
+
value: 0n,
|
|
344
|
+
})
|
|
345
|
+
} else {
|
|
346
|
+
throw new Error('invalid signer type')
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
const { success, receipt } = await this.sendBatch(calls, chainId)
|
|
350
|
+
|
|
351
|
+
if (!success) {
|
|
352
|
+
throw new TransactionConfirmedButRevertedError(
|
|
353
|
+
'add signer call failed',
|
|
354
|
+
receipt,
|
|
355
|
+
)
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const signerIndex = await retryOnStaleRead(
|
|
359
|
+
() =>
|
|
360
|
+
findSignerIndexOnChain({
|
|
361
|
+
address: this.address,
|
|
362
|
+
signerPublicKey: getSignerPublicKey(signer),
|
|
363
|
+
client: this.chainManager.getPublicClient(chainId),
|
|
364
|
+
}),
|
|
365
|
+
(index) => index === -1,
|
|
366
|
+
{ retries: 1, delayMs: 2000 },
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
if (signerIndex === -1) {
|
|
370
|
+
throw new Error('failed to find signer index')
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
return signerIndex
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Remove an existing signer from the smart wallet
|
|
378
|
+
* @description Removes a signer (EOA address or WebAuthn public key) from the
|
|
379
|
+
* smart wallet contract. If `signerIndex` is not provided, the method resolves
|
|
380
|
+
* it via {@link findSignerIndexOnChain}. The removal is executed via {@link sendBatch}
|
|
381
|
+
* by calling the contract function `removeOwnerAtIndex(index, signerBytes)`.
|
|
382
|
+
* Returns the ERC-4337 UserOperation receipt on success.
|
|
383
|
+
* @param signer - Signer to remove: EOA address or `WebAuthnAccount`
|
|
384
|
+
* @param chainId - Target chain on which the smart wallet operates
|
|
385
|
+
* @param signerIndex - Optional known on-chain index of the signer (skips lookup when provided)
|
|
386
|
+
* @returns Promise resolving to the UserOperation receipt for the removal
|
|
387
|
+
* @throws Error if the signer index cannot be found or the removal operation fails
|
|
388
|
+
*/
|
|
389
|
+
async removeSigner(
|
|
390
|
+
signer: Signer,
|
|
391
|
+
chainId: SupportedChainId,
|
|
392
|
+
signerIndex?: number,
|
|
393
|
+
): Promise<WaitForUserOperationReceiptReturnType> {
|
|
394
|
+
const resolvedSignerIndex =
|
|
395
|
+
signerIndex ?? (await this.findSignerIndexOnChain(signer, chainId))
|
|
396
|
+
if (resolvedSignerIndex === -1) {
|
|
397
|
+
throw new Error('failed to find signer index')
|
|
398
|
+
}
|
|
399
|
+
const signerBytes = formatPublicKey(getSignerPublicKey(signer))
|
|
400
|
+
const calls = [
|
|
401
|
+
{
|
|
402
|
+
to: this.address,
|
|
403
|
+
data: encodeFunctionData({
|
|
404
|
+
abi: smartWalletAbi,
|
|
405
|
+
functionName: 'removeOwnerAtIndex',
|
|
406
|
+
args: [BigInt(resolvedSignerIndex), signerBytes] as const,
|
|
407
|
+
}),
|
|
408
|
+
value: 0n,
|
|
409
|
+
},
|
|
410
|
+
]
|
|
411
|
+
const userOperationReceipt = await this.sendBatch(calls, chainId)
|
|
412
|
+
|
|
413
|
+
if (!userOperationReceipt.success) {
|
|
414
|
+
throw new TransactionConfirmedButRevertedError(
|
|
415
|
+
'remove signer call failed',
|
|
416
|
+
userOperationReceipt.receipt,
|
|
417
|
+
)
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return userOperationReceipt
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Find the index of a signer in the smart wallet
|
|
425
|
+
* @param signer - Ethereum address (EOA) or a `WebAuthnAccount` to find
|
|
426
|
+
* @param chainId - Target chain on which the smart wallet operates
|
|
427
|
+
* @returns Promise resolving to the onchain signer index for the found signer
|
|
428
|
+
* returns -1 if the signer is not found
|
|
429
|
+
*/
|
|
430
|
+
async findSignerIndexOnChain(
|
|
431
|
+
signer: Signer,
|
|
432
|
+
chainId: SupportedChainId,
|
|
433
|
+
): Promise<number> {
|
|
434
|
+
return findSignerIndexOnChain({
|
|
435
|
+
address: this.address,
|
|
436
|
+
signerPublicKey: getSignerPublicKey(signer),
|
|
437
|
+
client: this.chainManager.getPublicClient(chainId),
|
|
438
|
+
})
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Deploy the smart wallet on a specific chain
|
|
443
|
+
* @description Triggers deployment of the smart wallet contract on the specified chain.
|
|
444
|
+
* If the wallet is already deployed, returns success immediately without creating a new transaction.
|
|
445
|
+
* Deployment is done by calling the factory's `createAccount` function, which is idempotent and will
|
|
446
|
+
* return the existing address if already deployed. The factory address is a fixed address that can be
|
|
447
|
+
* added to paymaster allowlists once, avoiding the need to allowlist each dynamically created wallet.
|
|
448
|
+
* @param chainId - Target chain ID to deploy the wallet on
|
|
449
|
+
* @returns Promise resolving to deployment result containing:
|
|
450
|
+
* - `chainId`: The chain ID where deployment was attempted
|
|
451
|
+
* - `success`: Whether the deployment succeeded
|
|
452
|
+
* - `receipt`: UserOperation receipt (undefined if wallet was already deployed)
|
|
453
|
+
* @throws {SmartWalletDeploymentError} If deployment fails or transaction reverts
|
|
454
|
+
*/
|
|
455
|
+
async deploy(chainId: SupportedChainId): Promise<{
|
|
456
|
+
chainId: SupportedChainId
|
|
457
|
+
success: boolean
|
|
458
|
+
receipt?: WaitForUserOperationReceiptReturnType
|
|
459
|
+
}> {
|
|
460
|
+
try {
|
|
461
|
+
const smartAccount = await this.getCoinbaseSmartAccount(chainId)
|
|
462
|
+
// check if code already exists for this address
|
|
463
|
+
const isDeployed = await smartAccount.isDeployed()
|
|
464
|
+
if (isDeployed) {
|
|
465
|
+
return { chainId, success: true, receipt: undefined }
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// Call createAccount on the factory to trigger deployment
|
|
469
|
+
// The factory's createAccount is idempotent and will return the existing address if already deployed
|
|
470
|
+
// Using the factory address allows paymasters to configure it in their allowlist once
|
|
471
|
+
const receipt = await this.sendBatch(
|
|
472
|
+
[
|
|
473
|
+
{
|
|
474
|
+
to: smartWalletFactoryAddress,
|
|
475
|
+
value: 0n,
|
|
476
|
+
data: encodeFunctionData({
|
|
477
|
+
abi: smartWalletFactoryAbi,
|
|
478
|
+
functionName: 'createAccount',
|
|
479
|
+
args: [this._signerBytes, this.nonce || 0n],
|
|
480
|
+
}),
|
|
481
|
+
},
|
|
482
|
+
],
|
|
483
|
+
chainId,
|
|
484
|
+
)
|
|
485
|
+
if (!receipt.success) {
|
|
486
|
+
throw new SmartWalletDeploymentError(
|
|
487
|
+
'deployment transaction reverted',
|
|
488
|
+
chainId,
|
|
489
|
+
receipt,
|
|
490
|
+
)
|
|
491
|
+
}
|
|
492
|
+
return { chainId, success: true, receipt }
|
|
493
|
+
} catch (error) {
|
|
494
|
+
throw new SmartWalletDeploymentError(
|
|
495
|
+
`Failed to deploy smart wallet: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
496
|
+
chainId,
|
|
497
|
+
)
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Send tokens to another address
|
|
503
|
+
* @description Sends ETH or ERC20 tokens to a recipient address
|
|
504
|
+
* @param amount - Human-readable amount to send (e.g. 1.5)
|
|
505
|
+
* @param asset - Asset object with address mapping and metadata
|
|
506
|
+
* @param chainId - Chain ID for the transaction
|
|
507
|
+
* @param recipientAddress - Address to send to
|
|
508
|
+
* @returns Promise resolving to transaction data
|
|
509
|
+
* @throws Error if wallet is not initialized or asset is not supported
|
|
510
|
+
*/
|
|
511
|
+
async sendTokens(
|
|
512
|
+
amount: number,
|
|
513
|
+
asset: Asset,
|
|
514
|
+
chainId: SupportedChainId,
|
|
515
|
+
recipientAddress: Address,
|
|
516
|
+
): Promise<TransactionData> {
|
|
517
|
+
if (!recipientAddress) {
|
|
518
|
+
throw new Error('Recipient address is required')
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Validate amount
|
|
522
|
+
if (amount <= 0) {
|
|
523
|
+
throw new Error('Amount must be greater than 0')
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// Get token address for the specified chain
|
|
527
|
+
const tokenAddress = asset.address[chainId]
|
|
528
|
+
if (!tokenAddress) {
|
|
529
|
+
throw new Error(
|
|
530
|
+
`${asset.metadata.symbol} not supported on chain ${chainId}`,
|
|
531
|
+
)
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Handle ETH transfers
|
|
535
|
+
if (asset.type === 'native') {
|
|
536
|
+
const parsedAmount = parseAssetAmount(amount, asset.metadata.decimals)
|
|
537
|
+
|
|
538
|
+
return {
|
|
539
|
+
to: recipientAddress,
|
|
540
|
+
value: parsedAmount,
|
|
541
|
+
data: '0x',
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Handle ERC20 token transfers
|
|
546
|
+
const parsedAmount = parseAssetAmount(amount, asset.metadata.decimals)
|
|
547
|
+
|
|
548
|
+
// Encode ERC20 transfer function call
|
|
549
|
+
const transferData = encodeFunctionData({
|
|
550
|
+
abi: erc20Abi,
|
|
551
|
+
functionName: 'transfer',
|
|
552
|
+
args: [recipientAddress, parsedAmount],
|
|
553
|
+
})
|
|
554
|
+
|
|
555
|
+
return {
|
|
556
|
+
to: tokenAddress as Address,
|
|
557
|
+
value: 0n,
|
|
558
|
+
data: transferData,
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
protected async performInitialization() {
|
|
563
|
+
this._address = await this.getAddress()
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Get the smart wallet address
|
|
568
|
+
* @description Returns the deployment address if known, otherwise calculates the deterministic
|
|
569
|
+
* address using CREATE2 based on signers and nonce.
|
|
570
|
+
* @returns Promise resolving to the wallet address
|
|
571
|
+
*/
|
|
572
|
+
private async getAddress() {
|
|
573
|
+
if (this.deploymentAddress) return this.deploymentAddress
|
|
574
|
+
|
|
575
|
+
// Factory is the same across all chains, so we can use the first chain to get the wallet address
|
|
576
|
+
const publicClient = this.chainManager.getPublicClient(
|
|
577
|
+
this.chainManager.getSupportedChains()[0],
|
|
578
|
+
)
|
|
579
|
+
const smartWalletAddress = await publicClient.readContract({
|
|
580
|
+
abi: smartWalletFactoryAbi,
|
|
581
|
+
address: smartWalletFactoryAddress,
|
|
582
|
+
functionName: 'getAddress',
|
|
583
|
+
args: [this._signerBytes, this.nonce || 0n],
|
|
584
|
+
})
|
|
585
|
+
return smartWalletAddress
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* Appends the attribution suffix to the bytes
|
|
590
|
+
* @param bytes
|
|
591
|
+
* @returns The bytes with the attribution suffix appended
|
|
592
|
+
*/
|
|
593
|
+
private appendAttributionSuffix(bytes: Hex) {
|
|
594
|
+
return bytes && bytes !== '0x' && this.attributionSuffix
|
|
595
|
+
? concatHex([bytes, this.attributionSuffix])
|
|
596
|
+
: bytes
|
|
597
|
+
}
|
|
598
|
+
}
|