thirdweb 5.88.4 → 5.88.5-nightly-52cbcd2d57abf4d69ee417fe98fca815e19f2f34-20250216000400
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/dist/cjs/contract/deployment/deploy-via-autofactory.js +33 -9
- package/dist/cjs/contract/deployment/deploy-via-autofactory.js.map +1 -1
- package/dist/cjs/exports/contract.js +3 -1
- package/dist/cjs/exports/contract.js.map +1 -1
- package/dist/cjs/exports/modules.js +3 -1
- package/dist/cjs/exports/modules.js.map +1 -1
- package/dist/cjs/extensions/modules/common/installPublishedModule.js +4 -1
- package/dist/cjs/extensions/modules/common/installPublishedModule.js.map +1 -1
- package/dist/cjs/extensions/prebuilts/deploy-published.js +14 -2
- package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
- package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js +33 -0
- package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js.map +1 -0
- package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js +152 -0
- package/dist/cjs/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js.map +1 -0
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +66 -56
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js +3 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +2 -2
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js +13 -13
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js +6 -0
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js +3 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js +2 -26
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +6 -12
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js +2 -2
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js +198 -0
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js.map +1 -0
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js +3 -3
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/components/buttons.js +11 -0
- package/dist/cjs/react/web/ui/components/buttons.js.map +1 -1
- package/dist/cjs/react/web/ui/components/token/TokenRow.js +36 -0
- package/dist/cjs/react/web/ui/components/token/TokenRow.js.map +1 -0
- package/dist/cjs/utils/abi/normalizeFunctionParams.js +6 -2
- package/dist/cjs/utils/abi/normalizeFunctionParams.js.map +1 -1
- package/dist/cjs/utils/ens/namehash.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/contract/deployment/deploy-via-autofactory.js +33 -9
- package/dist/esm/contract/deployment/deploy-via-autofactory.js.map +1 -1
- package/dist/esm/exports/contract.js +1 -0
- package/dist/esm/exports/contract.js.map +1 -1
- package/dist/esm/exports/modules.js +1 -0
- package/dist/esm/exports/modules.js.map +1 -1
- package/dist/esm/extensions/modules/common/installPublishedModule.js +4 -1
- package/dist/esm/extensions/modules/common/installPublishedModule.js.map +1 -1
- package/dist/esm/extensions/prebuilts/deploy-published.js +14 -2
- package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
- package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js +30 -0
- package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js.map +1 -0
- package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js +145 -0
- package/dist/esm/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js.map +1 -0
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js +68 -58
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js +3 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js +13 -13
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js +6 -0
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js +3 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js +3 -27
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js +6 -12
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js +2 -2
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js +194 -0
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.js.map +1 -0
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
- package/dist/esm/react/web/ui/components/buttons.js +11 -0
- package/dist/esm/react/web/ui/components/buttons.js.map +1 -1
- package/dist/esm/react/web/ui/components/token/TokenRow.js +33 -0
- package/dist/esm/react/web/ui/components/token/TokenRow.js.map +1 -0
- package/dist/esm/utils/abi/normalizeFunctionParams.js +6 -2
- package/dist/esm/utils/abi/normalizeFunctionParams.js.map +1 -1
- package/dist/esm/utils/ens/namehash.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/contract/deployment/deploy-via-autofactory.d.ts +8 -2
- package/dist/types/contract/deployment/deploy-via-autofactory.d.ts.map +1 -1
- package/dist/types/exports/contract.d.ts +1 -0
- package/dist/types/exports/contract.d.ts.map +1 -1
- package/dist/types/exports/modules.d.ts +1 -0
- package/dist/types/exports/modules.d.ts.map +1 -1
- package/dist/types/extensions/modules/common/installPublishedModule.d.ts +1 -0
- package/dist/types/extensions/modules/common/installPublishedModule.d.ts.map +1 -1
- package/dist/types/extensions/prebuilts/deploy-published.d.ts +2 -0
- package/dist/types/extensions/prebuilts/deploy-published.d.ts.map +1 -1
- package/dist/types/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.d.ts +70 -0
- package/dist/types/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.d.ts.map +1 -0
- package/dist/types/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.d.ts +100 -0
- package/dist/types/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.d.ts.map +1 -0
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.d.ts +1 -0
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts +1 -0
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/{PaymentSelectionScreen.d.ts → TokenSelectorScreen.d.ts} +19 -14
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.d.ts.map +1 -0
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/buttons.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/token/TokenRow.d.ts +14 -0
- package/dist/types/react/web/ui/components/token/TokenRow.d.ts.map +1 -0
- package/dist/types/utils/abi/normalizeFunctionParams.d.ts.map +1 -1
- package/dist/types/utils/ens/namehash.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/contract/deployment/deploy-via-autofactory.test.ts +166 -0
- package/src/contract/deployment/deploy-via-autofactory.ts +50 -10
- package/src/exports/contract.ts +1 -0
- package/src/exports/modules.ts +1 -0
- package/src/extensions/modules/common/installPublishedModule.ts +5 -0
- package/src/extensions/prebuilts/deploy-published.ts +18 -2
- package/src/extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.ts +55 -0
- package/src/extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.ts +184 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/BuyScreen.tsx +132 -86
- package/src/react/web/ui/ConnectWallet/screens/Buy/PayWIthCreditCard.tsx +6 -1
- package/src/react/web/ui/ConnectWallet/screens/Buy/TransactionModeScreen.tsx +1 -1
- package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatScreenContent.tsx +67 -66
- package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/currencies.tsx +7 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/main/useUISelectionStates.ts +3 -1
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/BuyTokenInput.tsx +9 -75
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/FiatValue.tsx +3 -1
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PayWithCrypto.tsx +13 -41
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/SwapScreenContent.tsx +59 -53
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/TokenSelectorScreen.tsx +437 -0
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/TransferConfirmationScreen.tsx +1 -1
- package/src/react/web/ui/ConnectWallet/screens/SignatureScreen.tsx +1 -1
- package/src/react/web/ui/components/buttons.tsx +12 -0
- package/src/react/web/ui/components/token/TokenRow.tsx +111 -0
- package/src/utils/abi/normalizeFunctionParams.test.ts +26 -1
- package/src/utils/abi/normalizeFunctionParams.ts +9 -4
- package/src/utils/ens/namehash.ts +4 -1
- package/src/version.ts +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +0 -85
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +0 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js +0 -142
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js.map +0 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js +0 -81
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.js.map +0 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js +0 -139
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.js.map +0 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.d.ts +0 -22
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.d.ts.map +0 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.d.ts.map +0 -1
- package/src/react/web/ui/ConnectWallet/screens/Buy/WalletSelectorButton.tsx +0 -220
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/PaymentSelectionScreen.tsx +0 -263
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,2EAA2E,CAAC"}
|
package/package.json
CHANGED
@@ -2,9 +2,15 @@ import { describe, expect, it } from "vitest";
|
|
2
2
|
import { ANVIL_CHAIN } from "../../../test/src/chains.js";
|
3
3
|
import { TEST_CLIENT } from "../../../test/src/test-clients.js";
|
4
4
|
import { TEST_ACCOUNT_A } from "../../../test/src/test-wallets.js";
|
5
|
+
import { parseEventLogs } from "../../event/actions/parse-logs.js";
|
5
6
|
import { initialize } from "../../extensions/prebuilts/__generated__/DropERC721/write/initialize.js";
|
7
|
+
import { deployContractfromDeployMetadata } from "../../extensions/prebuilts/deploy-published.js";
|
8
|
+
import { proxyDeployedV2Event } from "../../extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js";
|
9
|
+
import { sendAndConfirmTransaction } from "../../transaction/actions/send-and-confirm-transaction.js";
|
6
10
|
import { sendTransaction } from "../../transaction/actions/send-transaction.js";
|
11
|
+
import { keccakId } from "../../utils/any-evm/keccak-id.js";
|
7
12
|
import { prepareAutoFactoryDeployTransaction } from "./deploy-via-autofactory.js";
|
13
|
+
import { fetchPublishedContractMetadata } from "./publisher.js";
|
8
14
|
import { deployCloneFactory, deployImplementation } from "./utils/bootstrap.js";
|
9
15
|
import { getDeployedCloneFactoryContract } from "./utils/clone-factory.js";
|
10
16
|
import { getDeployedInfraContract } from "./utils/infra.js";
|
@@ -118,4 +124,164 @@ describe.runIf(process.env.TW_SECRET_KEY)("deployFromMetadata", () => {
|
|
118
124
|
expect(hash.transactionHash).toBeDefined();
|
119
125
|
},
|
120
126
|
);
|
127
|
+
|
128
|
+
it.sequential("should deploy with crosschain option", async () => {
|
129
|
+
const cloneFactoryContract = await getDeployedCloneFactoryContract({
|
130
|
+
chain: ANVIL_CHAIN,
|
131
|
+
client: TEST_CLIENT,
|
132
|
+
});
|
133
|
+
if (!cloneFactoryContract) {
|
134
|
+
throw new Error("Clone factory not found");
|
135
|
+
}
|
136
|
+
const implementationContract = await getDeployedInfraContract({
|
137
|
+
chain: ANVIL_CHAIN,
|
138
|
+
client: TEST_CLIENT,
|
139
|
+
contractId: "DropERC721",
|
140
|
+
});
|
141
|
+
if (!implementationContract) {
|
142
|
+
throw new Error("Clone factory not found");
|
143
|
+
}
|
144
|
+
|
145
|
+
const initializeTransaction = initialize({
|
146
|
+
contract: implementationContract,
|
147
|
+
name: "NFTDrop unified",
|
148
|
+
symbol: "NFTD",
|
149
|
+
defaultAdmin: TEST_ACCOUNT_A.address,
|
150
|
+
platformFeeBps: 0n,
|
151
|
+
platformFeeRecipient: TEST_ACCOUNT_A.address,
|
152
|
+
royaltyBps: 0n,
|
153
|
+
royaltyRecipient: TEST_ACCOUNT_A.address,
|
154
|
+
saleRecipient: TEST_ACCOUNT_A.address,
|
155
|
+
trustedForwarders: [],
|
156
|
+
contractURI: "",
|
157
|
+
});
|
158
|
+
|
159
|
+
const transaction = prepareAutoFactoryDeployTransaction({
|
160
|
+
chain: ANVIL_CHAIN,
|
161
|
+
client: TEST_CLIENT,
|
162
|
+
cloneFactoryContract,
|
163
|
+
initializeTransaction,
|
164
|
+
});
|
165
|
+
const receipt = await sendAndConfirmTransaction({
|
166
|
+
transaction,
|
167
|
+
account: TEST_ACCOUNT_A,
|
168
|
+
});
|
169
|
+
const proxyEvent = proxyDeployedV2Event();
|
170
|
+
const decodedEvent = parseEventLogs({
|
171
|
+
events: [proxyEvent],
|
172
|
+
logs: receipt.logs,
|
173
|
+
});
|
174
|
+
|
175
|
+
const deployMetadata = await fetchPublishedContractMetadata({
|
176
|
+
client: TEST_CLIENT,
|
177
|
+
contractId: "DropERC721",
|
178
|
+
});
|
179
|
+
const deployed = await deployContractfromDeployMetadata({
|
180
|
+
account: TEST_ACCOUNT_A,
|
181
|
+
chain: ANVIL_CHAIN,
|
182
|
+
client: TEST_CLIENT,
|
183
|
+
deployMetadata,
|
184
|
+
isCrosschain: true,
|
185
|
+
initializeData: decodedEvent[0]?.args.data,
|
186
|
+
});
|
187
|
+
|
188
|
+
expect(deployed).toBeDefined();
|
189
|
+
});
|
190
|
+
|
191
|
+
it.sequential("should generate salt based on input params", async () => {
|
192
|
+
const cloneFactoryContract = await getDeployedCloneFactoryContract({
|
193
|
+
chain: ANVIL_CHAIN,
|
194
|
+
client: TEST_CLIENT,
|
195
|
+
});
|
196
|
+
if (!cloneFactoryContract) {
|
197
|
+
throw new Error("Clone factory not found");
|
198
|
+
}
|
199
|
+
const implementationContract = await getDeployedInfraContract({
|
200
|
+
chain: ANVIL_CHAIN,
|
201
|
+
client: TEST_CLIENT,
|
202
|
+
contractId: "DropERC721",
|
203
|
+
});
|
204
|
+
if (!implementationContract) {
|
205
|
+
throw new Error("Clone factory not found");
|
206
|
+
}
|
207
|
+
|
208
|
+
const initializeTransaction = initialize({
|
209
|
+
contract: implementationContract,
|
210
|
+
name: "NFTDrop unified",
|
211
|
+
symbol: "NFTD",
|
212
|
+
defaultAdmin: TEST_ACCOUNT_A.address,
|
213
|
+
platformFeeBps: 0n,
|
214
|
+
platformFeeRecipient: TEST_ACCOUNT_A.address,
|
215
|
+
royaltyBps: 0n,
|
216
|
+
royaltyRecipient: TEST_ACCOUNT_A.address,
|
217
|
+
saleRecipient: TEST_ACCOUNT_A.address,
|
218
|
+
trustedForwarders: [],
|
219
|
+
contractURI: "",
|
220
|
+
});
|
221
|
+
|
222
|
+
let salt = "test";
|
223
|
+
let transaction = prepareAutoFactoryDeployTransaction({
|
224
|
+
chain: ANVIL_CHAIN,
|
225
|
+
client: TEST_CLIENT,
|
226
|
+
cloneFactoryContract,
|
227
|
+
initializeTransaction,
|
228
|
+
salt,
|
229
|
+
});
|
230
|
+
let receipt = await sendAndConfirmTransaction({
|
231
|
+
transaction,
|
232
|
+
account: TEST_ACCOUNT_A,
|
233
|
+
});
|
234
|
+
let proxyEvent = proxyDeployedV2Event();
|
235
|
+
let decodedEvent = parseEventLogs({
|
236
|
+
events: [proxyEvent],
|
237
|
+
logs: receipt.logs,
|
238
|
+
});
|
239
|
+
|
240
|
+
expect(decodedEvent[0]?.args.inputSalt).to.equal(keccakId("test"));
|
241
|
+
|
242
|
+
salt = keccakId("test1");
|
243
|
+
transaction = prepareAutoFactoryDeployTransaction({
|
244
|
+
chain: ANVIL_CHAIN,
|
245
|
+
client: TEST_CLIENT,
|
246
|
+
cloneFactoryContract,
|
247
|
+
initializeTransaction,
|
248
|
+
salt,
|
249
|
+
});
|
250
|
+
receipt = await sendAndConfirmTransaction({
|
251
|
+
transaction,
|
252
|
+
account: TEST_ACCOUNT_A,
|
253
|
+
});
|
254
|
+
proxyEvent = proxyDeployedV2Event();
|
255
|
+
decodedEvent = parseEventLogs({
|
256
|
+
events: [proxyEvent],
|
257
|
+
logs: receipt.logs,
|
258
|
+
});
|
259
|
+
|
260
|
+
expect(decodedEvent[0]?.args.inputSalt).to.equal(keccakId("test1"));
|
261
|
+
|
262
|
+
// deploy with crosschain option
|
263
|
+
transaction = prepareAutoFactoryDeployTransaction({
|
264
|
+
chain: ANVIL_CHAIN,
|
265
|
+
client: TEST_CLIENT,
|
266
|
+
cloneFactoryContract,
|
267
|
+
initializeData: decodedEvent[0]?.args.data,
|
268
|
+
implementationAddress: implementationContract.address,
|
269
|
+
isCrosschain: true,
|
270
|
+
salt: keccakId("test2"),
|
271
|
+
});
|
272
|
+
receipt = await sendAndConfirmTransaction({
|
273
|
+
transaction,
|
274
|
+
account: TEST_ACCOUNT_A,
|
275
|
+
});
|
276
|
+
proxyEvent = proxyDeployedV2Event();
|
277
|
+
decodedEvent = parseEventLogs({
|
278
|
+
events: [proxyEvent],
|
279
|
+
logs: receipt.logs,
|
280
|
+
});
|
281
|
+
|
282
|
+
expect(decodedEvent[0]?.args.inputSalt).to.equal(keccakId("test2"));
|
283
|
+
expect(decodedEvent[0]?.args.implementation.toLowerCase()).to.equal(
|
284
|
+
implementationContract.address.toLowerCase(),
|
285
|
+
);
|
286
|
+
});
|
121
287
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { parseEventLogs } from "../../event/actions/parse-logs.js";
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import { proxyDeployedV2Event } from "../../extensions/thirdweb/__generated__/IContractFactory/events/ProxyDeployedV2.js";
|
3
|
+
import { deployProxyByImplementationV2 } from "../../extensions/thirdweb/__generated__/IContractFactory/write/deployProxyByImplementationV2.js";
|
4
4
|
import { eth_blockNumber } from "../../rpc/actions/eth_blockNumber.js";
|
5
5
|
import { getRpcClient } from "../../rpc/rpc.js";
|
6
6
|
import { encode } from "../../transaction/actions/encode.js";
|
@@ -23,11 +23,14 @@ import { zkDeployProxy } from "./zksync/zkDeployProxy.js";
|
|
23
23
|
export function prepareAutoFactoryDeployTransaction(
|
24
24
|
args: ClientAndChain & {
|
25
25
|
cloneFactoryContract: ThirdwebContract;
|
26
|
-
initializeTransaction
|
26
|
+
initializeTransaction?: PreparedTransaction;
|
27
|
+
initializeData?: `0x${string}`;
|
28
|
+
implementationAddress?: string;
|
29
|
+
isCrosschain?: boolean;
|
27
30
|
salt?: string;
|
28
31
|
},
|
29
32
|
) {
|
30
|
-
return
|
33
|
+
return deployProxyByImplementationV2({
|
31
34
|
contract: args.cloneFactoryContract,
|
32
35
|
async asyncParams() {
|
33
36
|
const rpcRequest = getRpcClient({
|
@@ -35,10 +38,32 @@ export function prepareAutoFactoryDeployTransaction(
|
|
35
38
|
});
|
36
39
|
const blockNumber = await eth_blockNumber(rpcRequest);
|
37
40
|
const salt = args.salt
|
38
|
-
?
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
? args.salt.startsWith("0x") && args.salt.length === 66
|
42
|
+
? (args.salt as `0x${string}`)
|
43
|
+
: keccakId(args.salt)
|
44
|
+
: (`0x03${toHex(blockNumber, {
|
45
|
+
size: 31,
|
46
|
+
}).replace(/^0x/, "")}` as `0x${string}`);
|
47
|
+
|
48
|
+
if (args.isCrosschain) {
|
49
|
+
if (!args.initializeData || !args.implementationAddress) {
|
50
|
+
throw new Error(
|
51
|
+
"initializeData or implementationAddress can't be undefined",
|
52
|
+
);
|
53
|
+
}
|
54
|
+
|
55
|
+
return {
|
56
|
+
data: args.initializeData,
|
57
|
+
implementation: args.implementationAddress,
|
58
|
+
salt,
|
59
|
+
extraData: "0x",
|
60
|
+
} as const;
|
61
|
+
}
|
62
|
+
|
63
|
+
if (!args.initializeTransaction) {
|
64
|
+
throw new Error("initializeTransaction can't be undefined");
|
65
|
+
}
|
66
|
+
|
42
67
|
const implementation = await resolvePromisedValue(
|
43
68
|
args.initializeTransaction.to,
|
44
69
|
);
|
@@ -49,6 +74,7 @@ export function prepareAutoFactoryDeployTransaction(
|
|
49
74
|
data: await encode(args.initializeTransaction),
|
50
75
|
implementation,
|
51
76
|
salt,
|
77
|
+
extraData: "0x",
|
52
78
|
} as const;
|
53
79
|
},
|
54
80
|
});
|
@@ -60,7 +86,10 @@ export function prepareAutoFactoryDeployTransaction(
|
|
60
86
|
export async function deployViaAutoFactory(
|
61
87
|
options: ClientAndChainAndAccount & {
|
62
88
|
cloneFactoryContract: ThirdwebContract;
|
63
|
-
initializeTransaction
|
89
|
+
initializeTransaction?: PreparedTransaction;
|
90
|
+
initializeData?: `0x${string}`;
|
91
|
+
implementationAddress?: string;
|
92
|
+
isCrosschain?: boolean;
|
64
93
|
salt?: string;
|
65
94
|
},
|
66
95
|
): Promise<string> {
|
@@ -70,10 +99,16 @@ export async function deployViaAutoFactory(
|
|
70
99
|
account,
|
71
100
|
cloneFactoryContract,
|
72
101
|
initializeTransaction,
|
102
|
+
initializeData,
|
103
|
+
implementationAddress,
|
104
|
+
isCrosschain,
|
73
105
|
salt,
|
74
106
|
} = options;
|
75
107
|
|
76
108
|
if (await isZkSyncChain(chain)) {
|
109
|
+
if (!initializeTransaction) {
|
110
|
+
throw new Error("initializeTransaction can't be undefined");
|
111
|
+
}
|
77
112
|
return zkDeployProxy({
|
78
113
|
chain,
|
79
114
|
client,
|
@@ -89,14 +124,19 @@ export async function deployViaAutoFactory(
|
|
89
124
|
client,
|
90
125
|
cloneFactoryContract,
|
91
126
|
initializeTransaction,
|
127
|
+
initializeData,
|
128
|
+
implementationAddress,
|
129
|
+
isCrosschain,
|
92
130
|
salt,
|
93
131
|
});
|
94
132
|
const receipt = await sendAndConfirmTransaction({
|
95
133
|
transaction: tx,
|
96
134
|
account,
|
97
135
|
});
|
136
|
+
|
137
|
+
const proxyEvent = proxyDeployedV2Event();
|
98
138
|
const decodedEvent = parseEventLogs({
|
99
|
-
events: [
|
139
|
+
events: [proxyEvent],
|
100
140
|
logs: receipt.logs,
|
101
141
|
});
|
102
142
|
if (decodedEvent.length === 0 || !decodedEvent[0]) {
|
package/src/exports/contract.ts
CHANGED
@@ -43,3 +43,4 @@ export { prepareAutoFactoryDeployTransaction } from "../contract/deployment/depl
|
|
43
43
|
export { prepareMethod } from "../utils/abi/prepare-method.js";
|
44
44
|
|
45
45
|
export { getCompilerMetadata } from "../contract/actions/get-compiler-metadata.js";
|
46
|
+
export { getDeployedCloneFactoryContract } from "../contract/deployment/utils/clone-factory.js";
|
package/src/exports/modules.ts
CHANGED
@@ -14,6 +14,7 @@ export type InstallPublishedModuleOptions = {
|
|
14
14
|
version?: string;
|
15
15
|
constructorParams?: Record<string, unknown>;
|
16
16
|
moduleData?: `0x${string}`;
|
17
|
+
nonce?: number;
|
17
18
|
};
|
18
19
|
|
19
20
|
/**
|
@@ -43,10 +44,14 @@ export function installPublishedModule(options: InstallPublishedModuleOptions) {
|
|
43
44
|
constructorParams,
|
44
45
|
publisher,
|
45
46
|
moduleData,
|
47
|
+
nonce,
|
46
48
|
} = options;
|
47
49
|
|
48
50
|
return installModule({
|
49
51
|
contract,
|
52
|
+
overrides: {
|
53
|
+
nonce,
|
54
|
+
},
|
50
55
|
asyncParams: async () => {
|
51
56
|
const deployedModule = await getOrDeployInfraForPublishedContract({
|
52
57
|
chain: contract.chain,
|
@@ -125,7 +125,9 @@ export type DeployContractfromDeployMetadataOptions = {
|
|
125
125
|
account: Account;
|
126
126
|
deployMetadata: FetchDeployMetadataResult;
|
127
127
|
initializeParams?: Record<string, unknown>;
|
128
|
+
initializeData?: `0x${string}`;
|
128
129
|
implementationConstructorParams?: Record<string, unknown>;
|
130
|
+
isCrosschain?: boolean;
|
129
131
|
modules?: {
|
130
132
|
deployMetadata: FetchDeployMetadataResult;
|
131
133
|
initializeParams?: Record<string, unknown>;
|
@@ -144,7 +146,9 @@ export async function deployContractfromDeployMetadata(
|
|
144
146
|
account,
|
145
147
|
chain,
|
146
148
|
initializeParams,
|
149
|
+
initializeData,
|
147
150
|
deployMetadata,
|
151
|
+
isCrosschain,
|
148
152
|
implementationConstructorParams,
|
149
153
|
modules,
|
150
154
|
salt,
|
@@ -217,16 +221,28 @@ export async function deployContractfromDeployMetadata(
|
|
217
221
|
version: deployMetadata.version,
|
218
222
|
});
|
219
223
|
|
224
|
+
if (isCrosschain) {
|
225
|
+
return deployViaAutoFactory({
|
226
|
+
client,
|
227
|
+
chain,
|
228
|
+
account,
|
229
|
+
cloneFactoryContract,
|
230
|
+
implementationAddress: implementationContract.address,
|
231
|
+
initializeData,
|
232
|
+
salt,
|
233
|
+
isCrosschain,
|
234
|
+
});
|
235
|
+
}
|
236
|
+
|
220
237
|
const initializeTransaction = await getInitializeTransaction({
|
221
238
|
client,
|
222
239
|
chain,
|
223
|
-
deployMetadata
|
240
|
+
deployMetadata,
|
224
241
|
implementationContract,
|
225
242
|
initializeParams: processedInitializeParams,
|
226
243
|
account,
|
227
244
|
modules,
|
228
245
|
});
|
229
|
-
|
230
246
|
return deployViaAutoFactory({
|
231
247
|
client,
|
232
248
|
chain,
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import { prepareEvent } from "../../../../../event/prepare-event.js";
|
2
|
+
import type { AbiParameterToPrimitiveType } from "abitype";
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Represents the filters for the "ProxyDeployedV2" event.
|
6
|
+
*/
|
7
|
+
export type ProxyDeployedV2EventFilters = Partial<{
|
8
|
+
implementation: AbiParameterToPrimitiveType<{
|
9
|
+
type: "address";
|
10
|
+
name: "implementation";
|
11
|
+
indexed: true;
|
12
|
+
}>;
|
13
|
+
proxy: AbiParameterToPrimitiveType<{
|
14
|
+
type: "address";
|
15
|
+
name: "proxy";
|
16
|
+
indexed: true;
|
17
|
+
}>;
|
18
|
+
deployer: AbiParameterToPrimitiveType<{
|
19
|
+
type: "address";
|
20
|
+
name: "deployer";
|
21
|
+
indexed: true;
|
22
|
+
}>;
|
23
|
+
}>;
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Creates an event object for the ProxyDeployedV2 event.
|
27
|
+
* @param filters - Optional filters to apply to the event.
|
28
|
+
* @returns The prepared event object.
|
29
|
+
* @extension THIRDWEB
|
30
|
+
* @example
|
31
|
+
* ```ts
|
32
|
+
* import { getContractEvents } from "thirdweb";
|
33
|
+
* import { proxyDeployedV2Event } from "thirdweb/extensions/thirdweb";
|
34
|
+
*
|
35
|
+
* const events = await getContractEvents({
|
36
|
+
* contract,
|
37
|
+
* events: [
|
38
|
+
* proxyDeployedV2Event({
|
39
|
+
* implementation: ...,
|
40
|
+
* proxy: ...,
|
41
|
+
* deployer: ...,
|
42
|
+
* })
|
43
|
+
* ],
|
44
|
+
* });
|
45
|
+
* ```
|
46
|
+
*/
|
47
|
+
export function proxyDeployedV2Event(
|
48
|
+
filters: ProxyDeployedV2EventFilters = {},
|
49
|
+
) {
|
50
|
+
return prepareEvent({
|
51
|
+
signature:
|
52
|
+
"event ProxyDeployedV2(address indexed implementation, address indexed proxy, address indexed deployer, bytes32 inputSalt, bytes data, bytes extraData)",
|
53
|
+
filters,
|
54
|
+
});
|
55
|
+
}
|
@@ -0,0 +1,184 @@
|
|
1
|
+
import type { AbiParameterToPrimitiveType } from "abitype";
|
2
|
+
import type {
|
3
|
+
BaseTransactionOptions,
|
4
|
+
WithOverrides,
|
5
|
+
} from "../../../../../transaction/types.js";
|
6
|
+
import { prepareContractCall } from "../../../../../transaction/prepare-contract-call.js";
|
7
|
+
import { encodeAbiParameters } from "../../../../../utils/abi/encodeAbiParameters.js";
|
8
|
+
import { once } from "../../../../../utils/promise/once.js";
|
9
|
+
import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
|
10
|
+
|
11
|
+
/**
|
12
|
+
* Represents the parameters for the "deployProxyByImplementationV2" function.
|
13
|
+
*/
|
14
|
+
export type DeployProxyByImplementationV2Params = WithOverrides<{
|
15
|
+
implementation: AbiParameterToPrimitiveType<{
|
16
|
+
type: "address";
|
17
|
+
name: "implementation";
|
18
|
+
}>;
|
19
|
+
data: AbiParameterToPrimitiveType<{ type: "bytes"; name: "data" }>;
|
20
|
+
salt: AbiParameterToPrimitiveType<{ type: "bytes32"; name: "salt" }>;
|
21
|
+
extraData: AbiParameterToPrimitiveType<{ type: "bytes"; name: "extraData" }>;
|
22
|
+
}>;
|
23
|
+
|
24
|
+
export const FN_SELECTOR = "0xd057c8b1" as const;
|
25
|
+
const FN_INPUTS = [
|
26
|
+
{
|
27
|
+
type: "address",
|
28
|
+
name: "implementation",
|
29
|
+
},
|
30
|
+
{
|
31
|
+
type: "bytes",
|
32
|
+
name: "data",
|
33
|
+
},
|
34
|
+
{
|
35
|
+
type: "bytes32",
|
36
|
+
name: "salt",
|
37
|
+
},
|
38
|
+
{
|
39
|
+
type: "bytes",
|
40
|
+
name: "extraData",
|
41
|
+
},
|
42
|
+
] as const;
|
43
|
+
const FN_OUTPUTS = [
|
44
|
+
{
|
45
|
+
type: "address",
|
46
|
+
},
|
47
|
+
] as const;
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Checks if the `deployProxyByImplementationV2` method is supported by the given contract.
|
51
|
+
* @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
|
52
|
+
* @returns A boolean indicating if the `deployProxyByImplementationV2` method is supported.
|
53
|
+
* @extension THIRDWEB
|
54
|
+
* @example
|
55
|
+
* ```ts
|
56
|
+
* import { isDeployProxyByImplementationV2Supported } from "thirdweb/extensions/thirdweb";
|
57
|
+
*
|
58
|
+
* const supported = isDeployProxyByImplementationV2Supported(["0x..."]);
|
59
|
+
* ```
|
60
|
+
*/
|
61
|
+
export function isDeployProxyByImplementationV2Supported(
|
62
|
+
availableSelectors: string[],
|
63
|
+
) {
|
64
|
+
return detectMethod({
|
65
|
+
availableSelectors,
|
66
|
+
method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
|
67
|
+
});
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Encodes the parameters for the "deployProxyByImplementationV2" function.
|
72
|
+
* @param options - The options for the deployProxyByImplementationV2 function.
|
73
|
+
* @returns The encoded ABI parameters.
|
74
|
+
* @extension THIRDWEB
|
75
|
+
* @example
|
76
|
+
* ```ts
|
77
|
+
* import { encodeDeployProxyByImplementationV2Params } from "thirdweb/extensions/thirdweb";
|
78
|
+
* const result = encodeDeployProxyByImplementationV2Params({
|
79
|
+
* implementation: ...,
|
80
|
+
* data: ...,
|
81
|
+
* salt: ...,
|
82
|
+
* extraData: ...,
|
83
|
+
* });
|
84
|
+
* ```
|
85
|
+
*/
|
86
|
+
export function encodeDeployProxyByImplementationV2Params(
|
87
|
+
options: DeployProxyByImplementationV2Params,
|
88
|
+
) {
|
89
|
+
return encodeAbiParameters(FN_INPUTS, [
|
90
|
+
options.implementation,
|
91
|
+
options.data,
|
92
|
+
options.salt,
|
93
|
+
options.extraData,
|
94
|
+
]);
|
95
|
+
}
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Encodes the "deployProxyByImplementationV2" function into a Hex string with its parameters.
|
99
|
+
* @param options - The options for the deployProxyByImplementationV2 function.
|
100
|
+
* @returns The encoded hexadecimal string.
|
101
|
+
* @extension THIRDWEB
|
102
|
+
* @example
|
103
|
+
* ```ts
|
104
|
+
* import { encodeDeployProxyByImplementationV2 } from "thirdweb/extensions/thirdweb";
|
105
|
+
* const result = encodeDeployProxyByImplementationV2({
|
106
|
+
* implementation: ...,
|
107
|
+
* data: ...,
|
108
|
+
* salt: ...,
|
109
|
+
* extraData: ...,
|
110
|
+
* });
|
111
|
+
* ```
|
112
|
+
*/
|
113
|
+
export function encodeDeployProxyByImplementationV2(
|
114
|
+
options: DeployProxyByImplementationV2Params,
|
115
|
+
) {
|
116
|
+
// we do a "manual" concat here to avoid the overhead of the "concatHex" function
|
117
|
+
// we can do this because we know the specific formats of the values
|
118
|
+
return (FN_SELECTOR +
|
119
|
+
encodeDeployProxyByImplementationV2Params(options).slice(
|
120
|
+
2,
|
121
|
+
)) as `${typeof FN_SELECTOR}${string}`;
|
122
|
+
}
|
123
|
+
|
124
|
+
/**
|
125
|
+
* Prepares a transaction to call the "deployProxyByImplementationV2" function on the contract.
|
126
|
+
* @param options - The options for the "deployProxyByImplementationV2" function.
|
127
|
+
* @returns A prepared transaction object.
|
128
|
+
* @extension THIRDWEB
|
129
|
+
* @example
|
130
|
+
* ```ts
|
131
|
+
* import { sendTransaction } from "thirdweb";
|
132
|
+
* import { deployProxyByImplementationV2 } from "thirdweb/extensions/thirdweb";
|
133
|
+
*
|
134
|
+
* const transaction = deployProxyByImplementationV2({
|
135
|
+
* contract,
|
136
|
+
* implementation: ...,
|
137
|
+
* data: ...,
|
138
|
+
* salt: ...,
|
139
|
+
* extraData: ...,
|
140
|
+
* overrides: {
|
141
|
+
* ...
|
142
|
+
* }
|
143
|
+
* });
|
144
|
+
*
|
145
|
+
* // Send the transaction
|
146
|
+
* await sendTransaction({ transaction, account });
|
147
|
+
* ```
|
148
|
+
*/
|
149
|
+
export function deployProxyByImplementationV2(
|
150
|
+
options: BaseTransactionOptions<
|
151
|
+
| DeployProxyByImplementationV2Params
|
152
|
+
| {
|
153
|
+
asyncParams: () => Promise<DeployProxyByImplementationV2Params>;
|
154
|
+
}
|
155
|
+
>,
|
156
|
+
) {
|
157
|
+
const asyncOptions = once(async () => {
|
158
|
+
return "asyncParams" in options ? await options.asyncParams() : options;
|
159
|
+
});
|
160
|
+
|
161
|
+
return prepareContractCall({
|
162
|
+
contract: options.contract,
|
163
|
+
method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const,
|
164
|
+
params: async () => {
|
165
|
+
const resolvedOptions = await asyncOptions();
|
166
|
+
return [
|
167
|
+
resolvedOptions.implementation,
|
168
|
+
resolvedOptions.data,
|
169
|
+
resolvedOptions.salt,
|
170
|
+
resolvedOptions.extraData,
|
171
|
+
] as const;
|
172
|
+
},
|
173
|
+
value: async () => (await asyncOptions()).overrides?.value,
|
174
|
+
accessList: async () => (await asyncOptions()).overrides?.accessList,
|
175
|
+
gas: async () => (await asyncOptions()).overrides?.gas,
|
176
|
+
gasPrice: async () => (await asyncOptions()).overrides?.gasPrice,
|
177
|
+
maxFeePerGas: async () => (await asyncOptions()).overrides?.maxFeePerGas,
|
178
|
+
maxPriorityFeePerGas: async () =>
|
179
|
+
(await asyncOptions()).overrides?.maxPriorityFeePerGas,
|
180
|
+
nonce: async () => (await asyncOptions()).overrides?.nonce,
|
181
|
+
extraGas: async () => (await asyncOptions()).overrides?.extraGas,
|
182
|
+
erc20Value: async () => (await asyncOptions()).overrides?.erc20Value,
|
183
|
+
});
|
184
|
+
}
|