From 5b568bffdcc1ecaf51d8c9559659dfc651befc43 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 26 Jan 2024 03:14:38 +0300 Subject: [PATCH 1/4] [AA] Option to not deploy SW on sign message --- .../unity-js-bridge/src/thirdweb-bridge.ts | 1 + .../src/evm/connectors/smart-wallet/index.ts | 2 ++ .../smart-wallet/lib/erc4337-signer.ts | 23 ++++++++++--------- .../src/evm/connectors/smart-wallet/types.ts | 2 ++ 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/packages/unity-js-bridge/src/thirdweb-bridge.ts b/packages/unity-js-bridge/src/thirdweb-bridge.ts index ba3dc87edbc..78eef57eb99 100644 --- a/packages/unity-js-bridge/src/thirdweb-bridge.ts +++ b/packages/unity-js-bridge/src/thirdweb-bridge.ts @@ -229,6 +229,7 @@ class ThirdwebBridge implements TWBridge { paymasterUrl: sdkOptions.smartWalletConfig?.paymasterUrl, // paymasterAPI: sdkOptions.smartWalletConfig?.paymasterAPI, entryPointAddress: sdkOptions.smartWalletConfig?.entryPointAddress, + doNotDeployOnSignMessage: sdkOptions.smartWalletConfig?.doNotDeployOnSignMessage, }; walletInstance = new SmartWallet(config); break; diff --git a/packages/wallets/src/evm/connectors/smart-wallet/index.ts b/packages/wallets/src/evm/connectors/smart-wallet/index.ts index cd67d516056..91faec3a8a2 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/index.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/index.ts @@ -54,6 +54,7 @@ export class SmartWalletConnector extends Connector { this.config.paymasterUrl || `https://${this.chainId}.bundler.thirdweb.com/v2`; const entryPointAddress = config.entryPointAddress || ENTRYPOINT_ADDRESS; + const doNotDeployOnSignMessage = config.doNotDeployOnSignMessage || false; const localSigner = await params.personalWallet.getSigner(); const providerConfig: ProviderConfig = { chain: config.chain, @@ -69,6 +70,7 @@ export class SmartWalletConnector extends Connector { this.config.secretKey, ), gasless: config.gasless, + doNotDeployOnSignMessage: doNotDeployOnSignMessage, factoryAddress: config.factoryAddress, accountAddress: params.accountAddress, factoryInfo: config.factoryInfo || this.defaultFactoryInfo(), diff --git a/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts b/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts index 685effd72ff..61200a65ff8 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts @@ -139,17 +139,18 @@ Code: ${errorCode}`; } async signMessage(message: Bytes | string): Promise { - const isNotDeployed = await this.smartAccountAPI.checkAccountPhantom(); - if (isNotDeployed) { - console.log( - "Account contract not deployed yet. Deploying account before signing message", - ); - const tx = await this.sendTransaction({ - to: await this.getAddress(), - data: "0x", - }); - await tx.wait(); - } + const isNotDeployed = await this.smartAccountAPI.checkAccountPhantom(); + if (isNotDeployed && (this.config.doNotDeployOnSignMessage === undefined || this.config.doNotDeployOnSignMessage === false)) { + console.log( + "Account contract not deployed yet. Deploying account before signing message", + ); + const tx = await this.sendTransaction({ + to: await this.getAddress(), + data: "0x", + }); + await tx.wait(); + } + return await this.originalSigner.signMessage(message); } diff --git a/packages/wallets/src/evm/connectors/smart-wallet/types.ts b/packages/wallets/src/evm/connectors/smart-wallet/types.ts index 1acf4a26355..bd3f06f31e6 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/types.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/types.ts @@ -22,6 +22,7 @@ export type SmartWalletConfig = { paymasterUrl?: string; paymasterAPI?: PaymasterAPI; entryPointAddress?: string; + doNotDeployOnSignMessage?: boolean; } & ContractInfoInput & WalletConnectReceiverConfig; @@ -42,6 +43,7 @@ export interface ProviderConfig extends ContractInfo { accountAddress?: string; paymasterAPI: PaymasterAPI; gasless: boolean; + doNotDeployOnSignMessage?: boolean; } export type ContractInfoInput = { From 4d4fd0cb9dfbc92d35d9d1b276b97c1feb058702 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 26 Jan 2024 03:15:12 +0300 Subject: [PATCH 2/4] Create cool-planets-help.md --- .changeset/cool-planets-help.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cool-planets-help.md diff --git a/.changeset/cool-planets-help.md b/.changeset/cool-planets-help.md new file mode 100644 index 00000000000..90ac1d64d33 --- /dev/null +++ b/.changeset/cool-planets-help.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/wallets": patch +--- + +[AA] Option to not deploy SW on sign message From 6226a1973a492ee2a2369333f8c8d13bf8414812 Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 26 Jan 2024 03:39:07 +0300 Subject: [PATCH 3/4] rename and fix review --- packages/unity-js-bridge/src/thirdweb-bridge.ts | 2 +- packages/wallets/src/evm/connectors/smart-wallet/index.ts | 4 ++-- .../src/evm/connectors/smart-wallet/lib/erc4337-signer.ts | 2 +- packages/wallets/src/evm/connectors/smart-wallet/types.ts | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/unity-js-bridge/src/thirdweb-bridge.ts b/packages/unity-js-bridge/src/thirdweb-bridge.ts index 78eef57eb99..99358a8145f 100644 --- a/packages/unity-js-bridge/src/thirdweb-bridge.ts +++ b/packages/unity-js-bridge/src/thirdweb-bridge.ts @@ -229,7 +229,7 @@ class ThirdwebBridge implements TWBridge { paymasterUrl: sdkOptions.smartWalletConfig?.paymasterUrl, // paymasterAPI: sdkOptions.smartWalletConfig?.paymasterAPI, entryPointAddress: sdkOptions.smartWalletConfig?.entryPointAddress, - doNotDeployOnSignMessage: sdkOptions.smartWalletConfig?.doNotDeployOnSignMessage, + deployOnSign: sdkOptions.smartWalletConfig?.deployOnSign, }; walletInstance = new SmartWallet(config); break; diff --git a/packages/wallets/src/evm/connectors/smart-wallet/index.ts b/packages/wallets/src/evm/connectors/smart-wallet/index.ts index 91faec3a8a2..3c09b82eca8 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/index.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/index.ts @@ -54,7 +54,7 @@ export class SmartWalletConnector extends Connector { this.config.paymasterUrl || `https://${this.chainId}.bundler.thirdweb.com/v2`; const entryPointAddress = config.entryPointAddress || ENTRYPOINT_ADDRESS; - const doNotDeployOnSignMessage = config.doNotDeployOnSignMessage || false; + const deployOnSign = config.deployOnSign || true; const localSigner = await params.personalWallet.getSigner(); const providerConfig: ProviderConfig = { chain: config.chain, @@ -70,7 +70,7 @@ export class SmartWalletConnector extends Connector { this.config.secretKey, ), gasless: config.gasless, - doNotDeployOnSignMessage: doNotDeployOnSignMessage, + deployOnSign: deployOnSign, factoryAddress: config.factoryAddress, accountAddress: params.accountAddress, factoryInfo: config.factoryInfo || this.defaultFactoryInfo(), diff --git a/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts b/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts index 61200a65ff8..8492b92e1ed 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/lib/erc4337-signer.ts @@ -140,7 +140,7 @@ Code: ${errorCode}`; async signMessage(message: Bytes | string): Promise { const isNotDeployed = await this.smartAccountAPI.checkAccountPhantom(); - if (isNotDeployed && (this.config.doNotDeployOnSignMessage === undefined || this.config.doNotDeployOnSignMessage === false)) { + if (isNotDeployed && this.config.deployOnSign) { console.log( "Account contract not deployed yet. Deploying account before signing message", ); diff --git a/packages/wallets/src/evm/connectors/smart-wallet/types.ts b/packages/wallets/src/evm/connectors/smart-wallet/types.ts index bd3f06f31e6..9e0a0981f32 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/types.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/types.ts @@ -22,7 +22,7 @@ export type SmartWalletConfig = { paymasterUrl?: string; paymasterAPI?: PaymasterAPI; entryPointAddress?: string; - doNotDeployOnSignMessage?: boolean; + deployOnSign?: boolean; } & ContractInfoInput & WalletConnectReceiverConfig; @@ -43,7 +43,7 @@ export interface ProviderConfig extends ContractInfo { accountAddress?: string; paymasterAPI: PaymasterAPI; gasless: boolean; - doNotDeployOnSignMessage?: boolean; + deployOnSign?: boolean; } export type ContractInfoInput = { From 5271006386959c15a5b8635b32c212e1e29dba2a Mon Sep 17 00:00:00 2001 From: 0xFirekeeper <0xFirekeeper@gmail.com> Date: Fri, 26 Jan 2024 03:57:52 +0300 Subject: [PATCH 4/4] Update index.ts --- packages/wallets/src/evm/connectors/smart-wallet/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wallets/src/evm/connectors/smart-wallet/index.ts b/packages/wallets/src/evm/connectors/smart-wallet/index.ts index 3c09b82eca8..120a6ee655d 100644 --- a/packages/wallets/src/evm/connectors/smart-wallet/index.ts +++ b/packages/wallets/src/evm/connectors/smart-wallet/index.ts @@ -54,7 +54,7 @@ export class SmartWalletConnector extends Connector { this.config.paymasterUrl || `https://${this.chainId}.bundler.thirdweb.com/v2`; const entryPointAddress = config.entryPointAddress || ENTRYPOINT_ADDRESS; - const deployOnSign = config.deployOnSign || true; + const deployOnSign = config.deployOnSign ?? true; const localSigner = await params.personalWallet.getSigner(); const providerConfig: ProviderConfig = { chain: config.chain,