From 5ddd191fb4a97ba687dd377abdd6f869d2f7baad Mon Sep 17 00:00:00 2001 From: Mad <46090742+DefiCake@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:38:02 +0200 Subject: [PATCH] feat: prepare sway scripts for mainnet (#280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: K1-R1 <77465250+K1-R1@users.noreply.github.com> Co-authored-by: Luiz Estácio | stacio.eth Co-authored-by: Viraz Malhotra --- .changeset/few-rivers-fix.md | 5 + packages/test-utils/package.json | 19 +- .../test-utils/src/scripts/check-balances.ts | 30 + .../test-utils/src/scripts/check-nonce.ts | 44 + .../src/scripts/check-proxy-data.ts | 31 + .../scripts/{bridge.ts => deploy-bridge.ts} | 8 +- .../test-utils/src/scripts/deposit-to-coin.ts | 45 + .../test-utils/src/scripts/relay-deposit.ts | 83 +- .../test-utils/src/scripts/relay-metadata.ts | 108 ++ .../src/scripts/transfer-bridge-ownership.ts | 74 ++ .../src/scripts/upgrade-bridge-kms.ts | 150 +++ .../test-utils/src/scripts/upgrade-bridge.ts | 145 +++ .../src/scripts/verify-asset-metadata.ts | 107 ++ .../test-utils/src/scripts/withdraw-init.ts | 118 ++ .../test-utils/src/utils/fuels/getTokenId.ts | 7 +- .../src/utils/fuels/relayCommonMessage.ts | 4 +- pnpm-lock.yaml | 1014 +++++++++++++++++ 17 files changed, 1950 insertions(+), 42 deletions(-) create mode 100644 .changeset/few-rivers-fix.md create mode 100644 packages/test-utils/src/scripts/check-balances.ts create mode 100644 packages/test-utils/src/scripts/check-nonce.ts create mode 100644 packages/test-utils/src/scripts/check-proxy-data.ts rename packages/test-utils/src/scripts/{bridge.ts => deploy-bridge.ts} (92%) create mode 100644 packages/test-utils/src/scripts/deposit-to-coin.ts create mode 100644 packages/test-utils/src/scripts/relay-metadata.ts create mode 100644 packages/test-utils/src/scripts/transfer-bridge-ownership.ts create mode 100644 packages/test-utils/src/scripts/upgrade-bridge-kms.ts create mode 100644 packages/test-utils/src/scripts/upgrade-bridge.ts create mode 100644 packages/test-utils/src/scripts/verify-asset-metadata.ts create mode 100644 packages/test-utils/src/scripts/withdraw-init.ts diff --git a/.changeset/few-rivers-fix.md b/.changeset/few-rivers-fix.md new file mode 100644 index 00000000..0f40c267 --- /dev/null +++ b/.changeset/few-rivers-fix.md @@ -0,0 +1,5 @@ +--- +'@fuel-bridge/test-utils': minor +--- + +Improve sway scripts diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 397235b0..bd94888e 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -14,19 +14,26 @@ "scripts": { "build": "tsup", "build:watch": "tsup --watch", - "deploy:bridge": "pnpm ts-node src/scripts/bridge.ts", - "deploy:relay": "pnpm ts-node src/scripts/relay-deposit.ts" + "bridge:deploy": "pnpm ts-node src/scripts/deploy-bridge.ts", + "bridge:upgrade": "pnpm ts-node src/scripts/upgrade-bridge.ts", + "bridge:transfer-ownership": "pnpm ts-node src/scripts/transfer-bridge-ownership.ts", + "bridge:relay": "pnpm ts-node src/scripts/relay-deposit.ts", + "bridge:withdraw": "pnpm ts-node src/scripts/withdraw-init.ts", + "script:check-balances": "pnpm ts-node src/scripts/check-balances.ts" }, "peerDependencies": { - "fuels": "0.94.4", - "ethers": "6.13.1" + "ethers": "6.13.1", + "fuels": "0.94.4" }, "devDependencies": { "@fuel-bridge/fungible-token": "workspace:*", "@fuel-bridge/message-predicates": "workspace:*", "@fuel-bridge/solidity-contracts": "workspace:*", + "@fuels/kms-account": "0.24.0-preview-63de5d8", + "@inquirer/prompts": "^5.3.8", "dotenv": "^16.0.3", - "typescript": "^5.1.6", - "ts-node": "^10.9.1" + "inquirer": "^10.1.8", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" } } \ No newline at end of file diff --git a/packages/test-utils/src/scripts/check-balances.ts b/packages/test-utils/src/scripts/check-balances.ts new file mode 100644 index 00000000..25919ff0 --- /dev/null +++ b/packages/test-utils/src/scripts/check-balances.ts @@ -0,0 +1,30 @@ +/** + * This is a stand-alone script that looks an address' balances + */ + +import { password } from '@inquirer/prompts'; +import { Provider, WalletUnlocked } from 'fuels'; + +let { L2_ADDRESS, L2_RPC } = process.env; + +const main = async () => { + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_ADDRESS) { + const privKey = await password({ message: 'Enter private key' }); + const wallet = new WalletUnlocked(privKey); + L2_ADDRESS = wallet.address.toB256(); + } + + await provider.getBalances(L2_ADDRESS).then(console.log); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/check-nonce.ts b/packages/test-utils/src/scripts/check-nonce.ts new file mode 100644 index 00000000..3cb78f12 --- /dev/null +++ b/packages/test-utils/src/scripts/check-nonce.ts @@ -0,0 +1,44 @@ +/** + * This is a stand-alone script that looks for a message nonce + */ + +import { BN, Message, Provider } from 'fuels'; + +let { L2_RPC, L2_MESSAGE_NONCE } = process.env; + +const main = async () => { + if (!L2_MESSAGE_NONCE) { + console.log('Specify L2_MESSAGE_NONCE'); + return; + } + + if (!L2_RPC) { + console.log('Specify L2_RPC'); + return; + } + + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + const message: Message = await provider + .getMessageByNonce(new BN(L2_MESSAGE_NONCE).toHex(32)) + .catch((e) => { + console.log(JSON.stringify(e, undefined, 2)); + return null; + }); + + if (!message) { + console.log('Could not fetch message'); + } + + console.log(message); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/check-proxy-data.ts b/packages/test-utils/src/scripts/check-proxy-data.ts new file mode 100644 index 00000000..727d709b --- /dev/null +++ b/packages/test-utils/src/scripts/check-proxy-data.ts @@ -0,0 +1,31 @@ +/** + * This is a stand-alone script that + * calls the bridge 's withdraw method + */ + +import { Proxy } from '@fuel-bridge/fungible-token'; + +import { Provider } from 'fuels'; + +let { L2_RPC, L2_BRIDGE_ID } = process.env; +const L1_LLAMA_RPC = 'https://eth.llamarpc.com'; +const main = async () => { + const fuel_provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + const proxy = new Proxy(L2_BRIDGE_ID, fuel_provider); + + console.log('\t> Checking asset metadata...'); + + console.log('Owner', (await proxy.functions._proxy_owner().get()).value); + console.log('Target', (await proxy.functions.proxy_target().get()).value); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/bridge.ts b/packages/test-utils/src/scripts/deploy-bridge.ts similarity index 92% rename from packages/test-utils/src/scripts/bridge.ts rename to packages/test-utils/src/scripts/deploy-bridge.ts index 2d61a9c4..e7bb6e68 100644 --- a/packages/test-utils/src/scripts/bridge.ts +++ b/packages/test-utils/src/scripts/deploy-bridge.ts @@ -16,8 +16,9 @@ import { WalletUnlocked, ZeroBytes32, } from 'fuels'; +import { password } from '@inquirer/prompts'; -const { L1_TOKEN_GATEWAY, L2_SIGNER, L2_RPC } = process.env; +let { L1_TOKEN_GATEWAY, L2_SIGNER, L2_RPC } = process.env; // This helper avoids an exception in the case that the contract // was already deployed, and returns the contract instead @@ -37,6 +38,11 @@ function fetchIfDeployed(provider: Provider, wallet: WalletUnlocked) { const main = async () => { const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); console.log('\t> L2 Bridge deployment script initiated'); diff --git a/packages/test-utils/src/scripts/deposit-to-coin.ts b/packages/test-utils/src/scripts/deposit-to-coin.ts new file mode 100644 index 00000000..8ad1b84c --- /dev/null +++ b/packages/test-utils/src/scripts/deposit-to-coin.ts @@ -0,0 +1,45 @@ +/** + * This is a stand-alone script that self-transfers + * to convert a message coin into a coin utxo + */ + +import { Provider, TransactionStatus, Wallet } from 'fuels'; +import { password } from '@inquirer/prompts'; + +let { L2_SIGNER, L2_RPC } = process.env; + +const main = async () => { + if (!L2_RPC) { + console.log('Must provide L2_RPC'); + return; + } + + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); + const balance = await wallet.getBalance(); + const tx = await wallet.transfer(wallet.address, balance.div(2)); + + console.log('\tTransaction ID: ', tx.id); + const txResult = await tx.waitForResult(); + + if (txResult.status === TransactionStatus.success) { + console.log('\t> Transaction succeeded'); + } else { + console.log('\t> Transaction errored'); + } +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/relay-deposit.ts b/packages/test-utils/src/scripts/relay-deposit.ts index d81952cc..7c8e4ac3 100644 --- a/packages/test-utils/src/scripts/relay-deposit.ts +++ b/packages/test-utils/src/scripts/relay-deposit.ts @@ -1,6 +1,6 @@ /** - * This is a stand-alone script that deploys the - * fetches a deposit messages and relays it to the bridge + * This is a stand-alone script that + * fetches a deposit message and relays it to the bridge */ import { Proxy } from '@fuel-bridge/fungible-token'; @@ -16,6 +16,7 @@ import { getPredicateRoot, hexlify, } from 'fuels'; +import { password } from '@inquirer/prompts'; import { FUEL_MESSAGE_TIMEOUT_MS, debug, @@ -25,11 +26,16 @@ import { const TOKEN_RECIPIENT_DATA_OFFSET = 160; -const { L2_SIGNER, L2_RPC, L2_BRIDGE_ID, L2_MESSAGE_NONCE, L2_TOKEN_RECEIVER } = +let { L2_SIGNER, L2_RPC, L2_BRIDGE_ID, L2_MESSAGE_NONCE, L2_TOKEN_RECEIVER } = process.env; const main = async () => { const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); const proxy = new Proxy(L2_BRIDGE_ID, wallet); @@ -43,47 +49,58 @@ const main = async () => { .proxy_target() .dryRun() .then((result) => { - debug('bridge_proxy.target() succeeded, assuming proxy'); + debug(`.proxy_target() returned ${result.value.bits}, assuming proxy`); return result.value.bits; }) .catch(() => { - debug('bridge.proxy_target() errored, assuming not proxy'); + debug('.proxy_target() errored, assuming not proxy'); return null; }); const predicateRoot = getPredicateRoot(contractMessagePredicate); let nonce: BN; + let endCursor: string | undefined; if (L2_MESSAGE_NONCE) nonce = new BN(L2_MESSAGE_NONCE); - else { - const response = await provider.getMessages(predicateRoot); - if (!response.messages || response.messages.length === 0) { - console.log('No messages in the predicate'); - return; + else + while (true) { + const response = await provider.getMessages(predicateRoot, { + after: endCursor, + }); + + if (!response.messages || response.messages.length === 0) { + console.log('No messages in the predicate'); + return; + } + + const { messages } = response; + + const message = messages.find((message) => { + const hex = hexlify(message.data).replace('0x', ''); + const recipient = hex.substring( + TOKEN_RECIPIENT_DATA_OFFSET * 2, + TOKEN_RECIPIENT_DATA_OFFSET * 2 + 64 // Recipient is 32 bytes + ); + const expectedRecipient = L2_TOKEN_RECEIVER || wallet.address.toB256(); + + return recipient === expectedRecipient.replace('0x', ''); + }); + + if (!message) { + if (response.pageInfo.hasNextPage) { + endCursor = response.pageInfo.endCursor; + continue; + } else { + console.log('No messages for the recipient'); + return; + } + } + + nonce = new BN(message.nonce); + break; } - const { messages } = response; - - const message = messages.find((message) => { - const hex = hexlify(message.data).replace('0x', ''); - const recipient = hex.substring( - TOKEN_RECIPIENT_DATA_OFFSET * 2, - TOKEN_RECIPIENT_DATA_OFFSET * 2 + 64 // Recipient is 32 bytes - ); - const expectedRecipient = L2_TOKEN_RECEIVER || wallet.address.toB256(); - - return recipient === expectedRecipient.replace('0x', ''); - }); - - if (!message) { - console.log('No messages for the recipient'); - return; - } - - nonce = new BN(message.nonce); - } - const message = await waitForMessage( provider, new Account(predicateRoot).address, @@ -105,6 +122,10 @@ const main = async () => { if (txResult.status === TransactionStatus.success) { console.log('\t> Transaction succeeded'); + console.log( + '\t > Minted asset IDs: ', + txResult.mintedAssets.map((asset) => asset.assetId) + ); } else { console.log('\t> Transaction errored'); } diff --git a/packages/test-utils/src/scripts/relay-metadata.ts b/packages/test-utils/src/scripts/relay-metadata.ts new file mode 100644 index 00000000..28ebce29 --- /dev/null +++ b/packages/test-utils/src/scripts/relay-metadata.ts @@ -0,0 +1,108 @@ +/** + * This is a stand-alone script that + * fetches a metadata message and relays it to the bridge + */ + +import { Proxy } from '@fuel-bridge/fungible-token'; + +import { contractMessagePredicate } from '@fuel-bridge/message-predicates'; + +import { + Account, + BN, + Provider, + TransactionStatus, + Wallet, + getPredicateRoot, +} from 'fuels'; +import { password } from '@inquirer/prompts'; +import { + FUEL_MESSAGE_TIMEOUT_MS, + debug, + relayCommonMessage, + waitForMessage, +} from '../utils'; + +let { L2_SIGNER, L2_RPC, L2_BRIDGE_ID, L2_MESSAGE_NONCE } = process.env; + +const main = async () => { + if (!L2_RPC) { + console.log('Must provide L2_RPC'); + return; + } + + if (!L2_MESSAGE_NONCE) { + console.log('Must provide L2_MESSAGE_NONCE'); + return; + } + + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); + + const proxy = new Proxy(L2_BRIDGE_ID, wallet); + + console.log('\t> L2 relay metadata script initiated'); + console.log('\t> Loaded wallet', wallet.address.toB256()); + console.log('\t> Balance: ', (await wallet.getBalance()).toString()); + + debug('Detecting if the bridge is a proxy...'); + let implementation_id: string | null = await proxy.functions + .proxy_target() + .dryRun() + .then((result) => { + debug(`.proxy_target() returned ${result.value.bits}, assuming proxy`); + return result.value.bits; + }) + .catch(() => { + debug('.proxy_target() errored, assuming not proxy'); + return null; + }); + + const predicateRoot = getPredicateRoot(contractMessagePredicate); + + const nonce: BN = new BN(L2_MESSAGE_NONCE); + + const message = await waitForMessage( + provider, + new Account(predicateRoot).address, + nonce, + FUEL_MESSAGE_TIMEOUT_MS + ); + + if (!message) { + console.log('No messages in the predicate for nonce', nonce.toString()); + return; + } + + const tx = await relayCommonMessage(wallet, message, { + contractIds: implementation_id && [implementation_id], + }); + + console.log('\tTransaction ID: ', tx.id); + const txResult = await tx.waitForResult(); + + if (txResult.status === TransactionStatus.success) { + console.log('\t> Transaction succeeded'); + console.log( + '\t > Minted asset IDs: ', + txResult.mintedAssets.map((asset) => asset.assetId) + ); + } else { + console.log('\t> Transaction errored'); + } +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/transfer-bridge-ownership.ts b/packages/test-utils/src/scripts/transfer-bridge-ownership.ts new file mode 100644 index 00000000..b6668be9 --- /dev/null +++ b/packages/test-utils/src/scripts/transfer-bridge-ownership.ts @@ -0,0 +1,74 @@ +/** + * This is a stand-alone script that transfers + * the bridge 's proxy ownership + */ + +import { Proxy } from '@fuel-bridge/fungible-token'; + +import { Provider, Wallet } from 'fuels'; +import { password } from '@inquirer/prompts'; +import { debug } from '../utils'; + +let { L2_SIGNER, L2_RPC, L2_BRIDGE_ID, L2_NEW_OWNER } = process.env; + +const main = async () => { + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); + + const proxy = new Proxy(L2_BRIDGE_ID, wallet); + + console.log('\t> L2 Bridge deployment script initiated'); + console.log('\t> Loaded wallet', wallet.address.toB256()); + console.log('\t> Balance: ', (await wallet.getBalance()).toString()); + + debug('Detecting if the bridge is a proxy...'); + let owner: string | null = await proxy.functions + ._proxy_owner() + .dryRun() + .then((result) => { + debug('bridge._proxy.owner() succeeded, assuming proxy'); + return result.value.Initialized.Address.bits; + }) + .catch((e) => { + debug(`bridge._proxy_owner() failed with error: `); + debug(`${JSON.stringify(e, undefined, 2)}`); + return null; + }); + + if (owner === null) { + console.log('Could not fetch the bridge owner, is it a proxy?'); + return; + } + + if ( + owner.replace('0x', '').toLowerCase() !== + wallet.address.toB256().replace('0x', '').toLowerCase() + ) { + console.log(`Owner mismatch, contract owned by ${owner}`); + return; + } + + const addressInput = { bits: L2_NEW_OWNER }; + const addressIdentityInput = { Address: addressInput }; + const tx = await proxy.functions + ._proxy_change_owner(addressIdentityInput) + .call(); + + console.log('\tTransaction ID: ', tx.transactionId); + await tx.waitForResult(); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/upgrade-bridge-kms.ts b/packages/test-utils/src/scripts/upgrade-bridge-kms.ts new file mode 100644 index 00000000..a64b2a87 --- /dev/null +++ b/packages/test-utils/src/scripts/upgrade-bridge-kms.ts @@ -0,0 +1,150 @@ +/** + * This is a stand-alone script that upgrades the bridge + */ + +import { + Proxy, + BridgeFungibleTokenFactory, + BridgeFungibleToken, +} from '@fuel-bridge/fungible-token'; +import { KMSAccount } from '@fuels/kms-account'; + +import { Provider, TransactionStatus, getRandomB256 } from 'fuels'; +import { password } from '@inquirer/prompts'; +import { debug } from '../utils'; + +let { L1_TOKEN_GATEWAY, L2_SIGNER, L2_RPC, L2_BRIDGE_ID, KMS_KEY_ID } = + process.env; + +const main = async () => { + const provider = await Provider.create(L2_RPC!, { resourceCacheTTL: -1 }); + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + + console.log('KMS_KEY_ID'); + const kms_wallet = await KMSAccount.create(KMS_KEY_ID, {}, provider); + + const proxy = new Proxy(L2_BRIDGE_ID!, kms_wallet); + + console.log('\t> L2 Bridge deployment script initiated'); + console.log('\t> Loaded wallet', kms_wallet.address.toB256()); + console.log('\t> Balance: ', (await kms_wallet.getBalance()).toString()); + + debug('Detecting if the bridge is a proxy: implementation'); + let current_implementation: string = await proxy.functions + .proxy_target() + .dryRun() + .then((result) => { + debug('bridge.proxy_target() returned, assuming proxy'); + if (!result.value.bits) { + return null; + } + return result.value.bits; + }) + .catch((e) => { + debug(`bridge.proxy_target() failed with error: `); + debug(`${JSON.stringify(e, undefined, 2)}`); + return null; + }); + debug(`Current implementation at ${current_implementation}`); + + debug('Detecting if the bridge is a proxy: owner'); + let owner: string | null = await proxy.functions + ._proxy_owner() + .dryRun() + .then((result) => { + debug('bridge._proxy.owner() succeeded, assuming proxy'); + if (!result.value.Initialized?.Address?.bits) { + return null; + } + return result?.value?.Initialized?.Address?.bits; + }) + .catch((e) => { + debug(`bridge._proxy_owner() failed with error: `); + debug(`${JSON.stringify(e, undefined, 2)}`); + return null; + }); + + if (owner === null) { + console.log('Could not fetch the bridge owner, is it a proxy?'); + return; + } + + if ( + owner.replace('0x', '').toLowerCase() !== + kms_wallet.address.toB256().replace('0x', '').toLowerCase() + ) { + console.log(`Owner mismatch, contract owned by ${owner}`); + return; + } + + const implConfigurables: any = { + BRIDGED_TOKEN_GATEWAY: + '0x000000000000000000000000' + + L1_TOKEN_GATEWAY!.replace('0x', '').toLowerCase(), + }; + + const salt = getRandomB256(); + const deployOpts = { + storageSlots: BridgeFungibleToken.storageSlots, + configurableConstants: implConfigurables, + salt, + }; + + const factory = new BridgeFungibleTokenFactory(kms_wallet); + factory.setConfigurableConstants(implConfigurables); + const { contractId } = factory.createTransactionRequest(deployOpts); + + if (contractId === current_implementation) { + console.log(`Implementation ${contractId} is already live in the proxy`); + return; + } + + const contractExists = (await provider.getContract(contractId)) !== null; + + if (!contractExists) { + debug('Deploying contract'); + const createTx = await factory.deployAsCreateTx(deployOpts); + debug('Expected contract ID', contractId); + debug('Fetching transaction ID'); + const createTxId = await createTx.waitForTransactionId(); + + debug(`Deploy transaction ${createTxId} sent, waiting for result`); + + const createTxResult = await createTx.waitForResult(); + if (createTxResult.transactionResult.status !== TransactionStatus.success) { + console.log('Could not deploy contract'); + debug(JSON.stringify(createTxResult, undefined, 2)); + return; + } + + if (createTx.contractId !== contractId) { + console.log('Contract mismatch, aborting'); + return; + } + + debug('Contract deployment completed'); + debug('Deploy opts', deployOpts); + } + + console.log('New implementation at ', contractId); + + const contractIdentityInput = { bits: contractId }; + const tx = await proxy.functions + .set_proxy_target(contractIdentityInput) + .call(); + + console.log('\tTransaction ID: ', tx.transactionId); + await tx.waitForResult(); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/upgrade-bridge.ts b/packages/test-utils/src/scripts/upgrade-bridge.ts new file mode 100644 index 00000000..1c528b37 --- /dev/null +++ b/packages/test-utils/src/scripts/upgrade-bridge.ts @@ -0,0 +1,145 @@ +/** + * This is a stand-alone script that upgrades the bridge + */ + +import { + Proxy, + BridgeFungibleTokenFactory, + BridgeFungibleToken, +} from '@fuel-bridge/fungible-token'; + +import { Provider, TransactionStatus, Wallet, ZeroBytes32 } from 'fuels'; +import { password } from '@inquirer/prompts'; +import { debug } from '../utils'; + +let { L1_TOKEN_GATEWAY, L2_SIGNER, L2_RPC, L2_BRIDGE_ID } = process.env; + +const main = async () => { + const provider = await Provider.create(L2_RPC!, { resourceCacheTTL: -1 }); + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); + + const proxy = new Proxy(L2_BRIDGE_ID!, wallet); + + console.log('\t> L2 Bridge deployment script initiated'); + console.log('\t> Loaded wallet', wallet.address.toB256()); + console.log('\t> Balance: ', (await wallet.getBalance()).toString()); + + debug('Detecting if the bridge is a proxy: implementation'); + let current_implementation: string = await proxy.functions + .proxy_target() + .dryRun() + .then((result) => { + debug('bridge.proxy_target() returned, assuming proxy'); + if (!result.value.bits) { + return null; + } + return result.value.bits; + }) + .catch((e) => { + debug(`bridge.proxy_target() failed with error: `); + debug(`${JSON.stringify(e, undefined, 2)}`); + return null; + }); + debug(`Current implementation at ${current_implementation}`); + + debug('Detecting if the bridge is a proxy: owner'); + let owner: string | null = await proxy.functions + ._proxy_owner() + .dryRun() + .then((result) => { + debug('bridge._proxy.owner() succeeded, assuming proxy'); + if (!result.value.Initialized?.Address?.bits) { + return null; + } + return result?.value?.Initialized?.Address?.bits; + }) + .catch((e) => { + debug(`bridge._proxy_owner() failed with error: `); + debug(`${JSON.stringify(e, undefined, 2)}`); + return null; + }); + + if (owner === null) { + console.log('Could not fetch the bridge owner, is it a proxy?'); + return; + } + + if ( + owner.replace('0x', '').toLowerCase() !== + wallet.address.toB256().replace('0x', '').toLowerCase() + ) { + console.log(`Owner mismatch, contract owned by ${owner}`); + return; + } + + const implConfigurables: any = { + BRIDGED_TOKEN_GATEWAY: + '0x000000000000000000000000' + + L1_TOKEN_GATEWAY!.replace('0x', '').toLowerCase(), + }; + + const deployOpts = { + storageSlots: BridgeFungibleToken.storageSlots, + configurableConstants: implConfigurables, + salt: ZeroBytes32, + }; + + const factory = new BridgeFungibleTokenFactory(wallet); + factory.setConfigurableConstants(implConfigurables); + const { contractId } = factory.createTransactionRequest(deployOpts); + + if (contractId === current_implementation) { + console.log(`Implementation ${contractId} is already live in the proxy`); + return; + } + + const contractExists = (await provider.getContract(contractId)) !== null; + + if (!contractExists) { + debug('Deploying contract'); + const createTx = await factory.deployAsCreateTx(deployOpts); + debug('Expected contract ID', contractId); + debug('Fetching transaction ID'); + const createTxId = await createTx.waitForTransactionId(); + + debug(`Deploy transaction ${createTxId} sent, waiting for result`); + + const createTxResult = await createTx.waitForResult(); + if (createTxResult.transactionResult.status !== TransactionStatus.success) { + console.log('Could not deploy contract'); + debug(JSON.stringify(createTxResult, undefined, 2)); + return; + } + + if (createTx.contractId !== contractId) { + console.log('Contract mismatch, aborting'); + return; + } + + debug('Contract deployment completed'); + debug('Deploy opts', deployOpts); + } + + console.log('New implementation at ', contractId); + + const contractIdentityInput = { bits: contractId }; + const tx = await proxy.functions + .set_proxy_target(contractIdentityInput) + .call(); + + console.log('\tTransaction ID: ', tx.transactionId); + await tx.waitForResult(); +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/verify-asset-metadata.ts b/packages/test-utils/src/scripts/verify-asset-metadata.ts new file mode 100644 index 00000000..edd5f8d8 --- /dev/null +++ b/packages/test-utils/src/scripts/verify-asset-metadata.ts @@ -0,0 +1,107 @@ +/** + * This is a stand-alone script that + * checks the metadata of tokens in the L2 bridge + * against their L1 counterpart + */ + +import { BridgeFungibleToken, Proxy } from '@fuel-bridge/fungible-token'; + +import { FuelError, Provider, isB256 } from 'fuels'; +import { debug, getTokenId } from '../utils'; +import { JsonRpcProvider, isAddress } from 'ethers'; +import { IERC20Metadata__factory } from '@fuel-bridge/solidity-contracts/typechain'; + +let { L1_RPC, L2_RPC, L2_BRIDGE_ID, L2_ASSET_ID, L1_TOKEN_ADDRESS } = + process.env; +const L1_LLAMA_RPC = 'https://eth.llamarpc.com'; +const main = async () => { + const fuel_provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (isAddress(L1_TOKEN_ADDRESS)) { + L2_ASSET_ID = getTokenId(L2_BRIDGE_ID, L1_TOKEN_ADDRESS); + } + + if (!isB256(L2_ASSET_ID)) { + console.log('Bad L2_ASSET_ID', L2_ASSET_ID); + return; + } + + const proxy = new Proxy(L2_BRIDGE_ID, fuel_provider); + + console.log('\t> Checking asset metadata...'); + + debug('Detecting if the bridge is a proxy...'); + let implementation_id: string | null = await proxy.functions + .proxy_target() + .dryRun() + .then((result) => { + debug(`.proxy_target() returned ${result.value.bits}, assuming proxy`); + return result.value.bits; + }) + .catch(() => { + debug('.proxy_target() errored, assuming not proxy'); + return null; + }); + + const bridge = new BridgeFungibleToken(L2_BRIDGE_ID, fuel_provider); + + const asset = { bits: L2_ASSET_ID }; + + const call_result = await bridge.functions + .asset_to_l1_address(asset) + .dryRun() + .catch((e: FuelError) => { + if (e.metadata['logs'] && e.metadata['logs'][0] === 'AssetNotFound') { + console.log(`Asset ${L2_ASSET_ID} not found, was it ever bridged?`); + } else { + console.log(JSON.stringify(e, undefined, 2)); + } + + return null; + }); + + if (!call_result) { + return; + } + + let l1_token_address = '0x' + (call_result.value as string).slice(-40); + console.log('l1_token_address', `${l1_token_address}`); + + const fuel_symbol = (await bridge.functions.symbol(asset).dryRun()).value; + const fuel_name = (await bridge.functions.name(asset).dryRun()).value; + + if (!fuel_symbol || !fuel_name) { + console.log('Metadata not registered'); + return; + } + + console.log('symbol: ', fuel_symbol); + console.log('name: ', fuel_name); + + const eth_provider = new JsonRpcProvider(L1_RPC || L1_LLAMA_RPC); + const eth_contract = IERC20Metadata__factory.connect( + l1_token_address, + eth_provider + ); + + const eth_name = await eth_contract.name(); + const eth_symbol = await eth_contract.symbol(); + + if (eth_name !== fuel_name) { + console.log('Metadata mismatch on name', fuel_name, eth_name); + } + + if (eth_symbol !== fuel_symbol) { + console.log('Metadata mismatch on symbol', fuel_symbol, eth_symbol); + } +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/scripts/withdraw-init.ts b/packages/test-utils/src/scripts/withdraw-init.ts new file mode 100644 index 00000000..bec5fa42 --- /dev/null +++ b/packages/test-utils/src/scripts/withdraw-init.ts @@ -0,0 +1,118 @@ +/** + * This is a stand-alone script that + * calls the bridge 's withdraw method + */ + +import { BridgeFungibleToken, Proxy } from '@fuel-bridge/fungible-token'; + +import { + AbstractContract, + BN, + Provider, + TransactionStatus, + Wallet, + isB256, +} from 'fuels'; +import { isAddress, parseUnits } from 'ethers'; +import { password } from '@inquirer/prompts'; +import { debug, eth_address_to_b256 } from '../utils'; + +let { + L2_SIGNER, + L2_RPC, + L2_BRIDGE_ID, + L2_ASSET_ID, + AMOUNT, + L1_TOKEN_RECEIVER, +} = process.env; + +const main = async () => { + const provider = await Provider.create(L2_RPC, { resourceCacheTTL: -1 }); + + if (!L2_SIGNER) { + L2_SIGNER = await password({ message: 'Enter private key' }); + } + + if (!isAddress(L1_TOKEN_RECEIVER)) { + console.log('Bad L1_TOKEN_RECEIVER', L1_TOKEN_RECEIVER); + return; + } + + if (!isB256(L2_ASSET_ID)) { + console.log('Bad L2_ASSET_ID', L2_ASSET_ID); + return; + } + + const wallet = Wallet.fromPrivateKey(L2_SIGNER, provider); + + const proxy = new Proxy(L2_BRIDGE_ID, wallet); + + console.log('\t> L2 Bridge deployment script initiated'); + console.log('\t> Loaded wallet', wallet.address.toB256()); + console.log('\t> Balance: ', (await wallet.getBalance()).toString()); + + debug('Detecting if the bridge is a proxy...'); + let implementation_id: string | null = await proxy.functions + .proxy_target() + .dryRun() + .then((result) => { + debug(`.proxy_target() returned ${result.value.bits}, assuming proxy`); + return result.value.bits; + }) + .catch(() => { + debug('.proxy_target() errored, assuming not proxy'); + return null; + }); + + const bridge = new BridgeFungibleToken(L2_BRIDGE_ID, wallet); + + const contract_inputs: AbstractContract[] = [proxy]; + if (implementation_id) + contract_inputs.push(new BridgeFungibleToken(implementation_id, wallet)); + + const decimals = ( + await bridge.functions.decimals({ bits: L2_ASSET_ID }).dryRun() + ).value; + const amount = new BN(parseUnits(AMOUNT, decimals).toString()); + + const tx_request = await bridge.functions + .withdraw(eth_address_to_b256(L1_TOKEN_RECEIVER.replace('0x', ''))) + .addContracts(contract_inputs) + .callParams({ + forward: { + amount, + assetId: L2_ASSET_ID, + }, + }) + .fundWithRequiredCoins(); + + const costs = await wallet.getTransactionCost(tx_request); + tx_request.gasLimit = costs.gasUsed; + tx_request.maxFee = costs.maxFee; + + const tx = await wallet.sendTransaction(tx_request, { + estimateTxDependencies: true, + }); + + console.log('\tTransaction ID: ', tx.id); + const txResult = await provider + .getTransactionResponse(tx.id) + .then((response) => response.waitForResult()); + + if (txResult.status === TransactionStatus.success) { + console.log('\t> Transaction succeeded'); + console.log('\t> Burned asset IDs: ', txResult.burnedAssets.join(',')); + } else { + console.log('\t> Transaction errored'); + } +}; + +main() + .then(() => { + console.log('\t> Finished'); + process.exit(0); + }) + .catch((e) => { + console.error(e); + process.exit(1); + }); diff --git a/packages/test-utils/src/utils/fuels/getTokenId.ts b/packages/test-utils/src/utils/fuels/getTokenId.ts index 0d3a5e75..c2b64d24 100644 --- a/packages/test-utils/src/utils/fuels/getTokenId.ts +++ b/packages/test-utils/src/utils/fuels/getTokenId.ts @@ -4,7 +4,7 @@ import type { Contract } from 'fuels'; import { ZeroBytes32 } from 'fuels'; export function getTokenId( - contract: Contract, + contract: Contract | string, tokenAddress: BytesLike, tokenId: BytesLike = ZeroBytes32, chainId: string = '1' @@ -14,8 +14,11 @@ export function getTokenId( if (dataLength(tokenId) < 32) tokenId = zeroPadValue(tokenId, 32); + const id = + typeof contract === 'object' ? contract.id.toHexString() : contract; + const subId = sha256(concat([toUtf8Bytes(chainId), tokenAddress, tokenId])); - const assetId = sha256(concat([contract.id.toHexString(), subId])); + const assetId = sha256(concat([id, subId])); return assetId; } diff --git a/packages/test-utils/src/utils/fuels/relayCommonMessage.ts b/packages/test-utils/src/utils/fuels/relayCommonMessage.ts index 29fe018b..d48c87d2 100644 --- a/packages/test-utils/src/utils/fuels/relayCommonMessage.ts +++ b/packages/test-utils/src/utils/fuels/relayCommonMessage.ts @@ -48,7 +48,8 @@ type CommonMessageDetails = { ) => Promise; }; -const PREDICATE_GAS_LIMIT = 10_000_000; +// Update for mainnet gas costs +const PREDICATE_GAS_LIMIT = 10000000; // Details for relaying common messages with certain predicate roots function getCommonRelayableMessages(provider: Provider) { @@ -231,7 +232,6 @@ export async function relayCommonMessage( } estimated_tx.maxFee = fees.maxFee; - estimated_tx.gasLimit = fees.gasLimit.mul(4).div(3); const simulation = await relayer.simulateTransaction(estimated_tx); debug(simulation); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9529b30..4c081144 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -281,9 +281,18 @@ importers: '@fuel-bridge/solidity-contracts': specifier: workspace:* version: link:../solidity-contracts + '@fuels/kms-account': + specifier: 0.24.0-preview-63de5d8 + version: 0.24.0-preview-63de5d8(fuels@0.94.4) + '@inquirer/prompts': + specifier: ^5.3.8 + version: 5.3.8 dotenv: specifier: ^16.0.3 version: 16.4.5 + inquirer: + specifier: ^10.1.8 + version: 10.1.8 ts-node: specifier: ^10.9.1 version: 10.9.2(@types/node@22.5.0)(typescript@5.4.5) @@ -300,16 +309,133 @@ packages: '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + '@aws-crypto/sha256-js@1.2.2': resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + '@aws-crypto/util@1.2.2': resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-kms@3.665.0': + resolution: {integrity: sha512-L/D1FcH88OHFJvaPhzOrosVLAF61oNXAP9L7ho8l59upUvPMZ4w4Ota4EoImGV93+YjT4ovEJaAO8FkoU6z1fg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.665.0': + resolution: {integrity: sha512-FQ2YyM9/6y3clWkf3d60/W4c/HZy61hbfIsR4KIh8aGOifwfIx/UpZQ61pCr/TXTNqbaAVU2/sK+J1zFkGEoLw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.665.0 + + '@aws-sdk/client-sso@3.665.0': + resolution: {integrity: sha512-zje+oaIiyviDv5dmBWhGHifPTb0Idq/HatNPy+VEiwo2dxcQBexibD5CQE5e8CWZK123Br/9DHft+iNKdiY5bA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.665.0': + resolution: {integrity: sha512-/OQEaWB1euXhZ/hV+wetDw1tynlrkNKzirzoiFuJ1EQsiIb9Ih/qjUF9KLdF1+/bXbnGu5YvIaAx80YReUchjg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.665.0': + resolution: {integrity: sha512-nqmNNf7Ml7qDXTIisDv+OYe/rl3nAW4cmR+HxrOCWdhTHe8xRdR5c45VPoh8nv1KIry5xtd+iqPrzzjydes+Og==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.664.0': + resolution: {integrity: sha512-95rE+9Voaco0nmKJrXqfJAxSSkSWqlBy76zomiZrUrv7YuijQtHCW8jte6v6UHAFAaBzgFsY7QqBxs15u9SM7g==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.664.0': + resolution: {integrity: sha512-svaPwVfWV3g/qjd4cYHTUyBtkdOwcVjC+tSj6EjoMrpZwGUXcCbYe04iU0ARZ6tuH/u3vySbTLOGjSa7g8o9Qw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.665.0': + resolution: {integrity: sha512-CSWBV5GqCkK78TTXq6qx40MWCt90t8rS/O7FIR4nbmoUhG/DysaC1G0om1fSx6k+GWcvIIIsSvD4hdbh8FRWKA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.665.0 + + '@aws-sdk/credential-provider-node@3.665.0': + resolution: {integrity: sha512-cmJfVi4IM0WaKMQvPXhiS5mdIZyCoa04I3D+IEKpD2GAuVZa6tgwqfPyaApFDLjyedGGNFkC4MRgAjCcCl4WFg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.664.0': + resolution: {integrity: sha512-sQicIw/qWTsmMw8EUQNJXdrWV5SXaZc2zGdCQsQxhR6wwNO2/rZ5JmzdcwUADmleBVyPYk3KGLhcofF/qXT2Ng==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.665.0': + resolution: {integrity: sha512-Xe8WW4r70bsetGQG3azFeK/gd+Q4OmNiidtRrG64y/V9TIvIqc7Y/yUZNhEgFkpG19o188VmXg/ulnG3E+MvLg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.664.0': + resolution: {integrity: sha512-10ltP1BfSKRJVXd8Yr5oLbo+VSDskWbps0X3szSsxTk0Dju1xvkz7hoIjylWLvtGbvQ+yb2pmsJYKCudW/4DJg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.664.0 + + '@aws-sdk/middleware-host-header@3.664.0': + resolution: {integrity: sha512-4tCXJ+DZWTq38eLmFgnEmO8X4jfWpgPbWoCyVYpRHCPHq6xbrU65gfwS9jGx25L4YdEce641ChI9TKLryuUgRA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.664.0': + resolution: {integrity: sha512-eNykMqQuv7eg9pAcaLro44fscIe1VkFfhm+gYnlxd+PH6xqapRki1E68VHehnIptnVBdqnWfEqLUSLGm9suqhg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.664.0': + resolution: {integrity: sha512-jq27WMZhm+dY8BWZ9Ipy3eXtZj0lJzpaKQE3A3tH5AOIlUV/gqrmnJ9CdqVVef4EJsq9Yil4ZzQjKKmPsxveQg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.664.0': + resolution: {integrity: sha512-Kp5UwXwayO6d472nntiwgrxqay2KS9ozXNmKjQfDrUWbEzvgKI+jgKNMia8MMnjSxYoBGpQ1B8NGh8a6KMEJJg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.664.0': + resolution: {integrity: sha512-o/B8dg8K+9714RGYPgMxZgAChPe/MTSMkf/eHXTUFHNik5i1HgVKfac22njV2iictGy/6GhpFsKa1OWNYAkcUg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.664.0': + resolution: {integrity: sha512-dBAvXW2/6bAxidvKARFxyCY2uCynYBKRFN00NhS1T5ggxm3sUnuTpWw1DTjl02CVPkacBOocZf10h8pQbHSK8w==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.664.0 + '@aws-sdk/types@3.535.0': resolution: {integrity: sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==} engines: {node: '>=14.0.0'} + '@aws-sdk/types@3.664.0': + resolution: {integrity: sha512-+GtXktvVgpreM2b+NJL9OqZGsOzHwlCUrO8jgQUvH/yA6Kd8QO2YFhQCp0C9sSzTteZJVqGBu8E0CQurxJHPbw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.664.0': + resolution: {integrity: sha512-KrXoHz6zmAahVHkyWMRT+P6xJaxItgmklxEDrT+npsUB4d5C/lhw16Crcp9TDi828fiZK3GYKRAmmNhvmzvBNg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.664.0': + resolution: {integrity: sha512-c/PV3+f1ss4PpskHbcOxTZ6fntV2oXy/xcDR9nW+kVaz5cM1G702gF0rvGLKPqoBwkj2rWGe6KZvEBeLzynTUQ==} + + '@aws-sdk/util-user-agent-node@3.664.0': + resolution: {integrity: sha512-l/m6KkgrTw1p/VTJTk0IoP9I2OnpWp3WbBgzxoNeh9cUcxTufIn++sBxKj5hhDql57LKWsckScG/MhFuH0vZZA==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/util-utf8-browser@3.259.0': resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} @@ -1249,6 +1375,11 @@ packages: peerDependencies: eslint: ^8.48.0 + '@fuels/kms-account@0.24.0-preview-63de5d8': + resolution: {integrity: sha512-SZkUiI++MaIyBwh90kh8U+kGTbOo0U8MOU5AKgPwnIQ9ybi2KHWhzIoiL6+c2mAAW0fDvXDSjWqtBXPIZfNdiQ==} + peerDependencies: + fuels: '>=0.94.8' + '@fuels/prettier-config@0.0.10': resolution: {integrity: sha512-ErdOffGOzWaJoDR6uKp6rXbkAWAb0ljVKSbfE9axhP2bYZvrgMYaiz6Hud0soKTncXeHOMUl0Qa3/RFrJjU8wg==} peerDependencies: @@ -1383,6 +1514,10 @@ packages: '@noble/curves@1.4.2': resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + '@noble/curves@1.6.0': + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + '@noble/hashes@1.2.0': resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} @@ -1398,6 +1533,10 @@ packages: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + '@noble/secp256k1@1.7.1': resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -1838,10 +1977,174 @@ packages: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} + '@smithy/abort-controller@3.1.5': + resolution: {integrity: sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==} + engines: {node: '>=16.0.0'} + + '@smithy/config-resolver@3.0.9': + resolution: {integrity: sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.4.8': + resolution: {integrity: sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.2.4': + resolution: {integrity: sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.2.9': + resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} + + '@smithy/hash-node@3.0.7': + resolution: {integrity: sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.7': + resolution: {integrity: sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-content-length@3.0.9': + resolution: {integrity: sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.1.4': + resolution: {integrity: sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.23': + resolution: {integrity: sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.7': + resolution: {integrity: sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.7': + resolution: {integrity: sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.1.8': + resolution: {integrity: sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.2.4': + resolution: {integrity: sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.1.7': + resolution: {integrity: sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.1.4': + resolution: {integrity: sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.7': + resolution: {integrity: sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.7': + resolution: {integrity: sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.7': + resolution: {integrity: sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.1.8': + resolution: {integrity: sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@4.2.0': + resolution: {integrity: sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.4.0': + resolution: {integrity: sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==} + engines: {node: '>=16.0.0'} + '@smithy/types@2.12.0': resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==} engines: {node: '>=14.0.0'} + '@smithy/types@3.5.0': + resolution: {integrity: sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.7': + resolution: {integrity: sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.23': + resolution: {integrity: sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.23': + resolution: {integrity: sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.1.3': + resolution: {integrity: sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.7': + resolution: {integrity: sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.7': + resolution: {integrity: sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.1.9': + resolution: {integrity: sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + '@solidity-parser/parser@0.14.5': resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} @@ -2304,6 +2607,10 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} + asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -2390,6 +2697,9 @@ packages: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -3219,6 +3529,10 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -4571,6 +4885,13 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + + pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -5055,6 +5376,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -5455,6 +5779,10 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -5649,23 +5977,405 @@ snapshots: '@adraffy/ens-normalize@1.10.1': {} + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + '@aws-crypto/sha256-js@1.2.2': dependencies: '@aws-crypto/util': 1.2.2 '@aws-sdk/types': 3.535.0 tslib: 1.14.1 + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.664.0 + tslib: 2.6.2 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.6.2 + '@aws-crypto/util@1.2.2': dependencies: '@aws-sdk/types': 3.535.0 '@aws-sdk/util-utf8-browser': 3.259.0 tslib: 1.14.1 + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + + '@aws-sdk/client-kms@3.665.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.665.0(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/client-sts': 3.665.0 + '@aws-sdk/core': 3.665.0 + '@aws-sdk/credential-provider-node': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/middleware-host-header': 3.664.0 + '@aws-sdk/middleware-logger': 3.664.0 + '@aws-sdk/middleware-recursion-detection': 3.664.0 + '@aws-sdk/middleware-user-agent': 3.664.0 + '@aws-sdk/region-config-resolver': 3.664.0 + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-endpoints': 3.664.0 + '@aws-sdk/util-user-agent-browser': 3.664.0 + '@aws-sdk/util-user-agent-node': 3.664.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sts': 3.665.0 + '@aws-sdk/core': 3.665.0 + '@aws-sdk/credential-provider-node': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/middleware-host-header': 3.664.0 + '@aws-sdk/middleware-logger': 3.664.0 + '@aws-sdk/middleware-recursion-detection': 3.664.0 + '@aws-sdk/middleware-user-agent': 3.664.0 + '@aws-sdk/region-config-resolver': 3.664.0 + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-endpoints': 3.664.0 + '@aws-sdk/util-user-agent-browser': 3.664.0 + '@aws-sdk/util-user-agent-node': 3.664.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.665.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.665.0 + '@aws-sdk/middleware-host-header': 3.664.0 + '@aws-sdk/middleware-logger': 3.664.0 + '@aws-sdk/middleware-recursion-detection': 3.664.0 + '@aws-sdk/middleware-user-agent': 3.664.0 + '@aws-sdk/region-config-resolver': 3.664.0 + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-endpoints': 3.664.0 + '@aws-sdk/util-user-agent-browser': 3.664.0 + '@aws-sdk/util-user-agent-node': 3.664.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.665.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.665.0(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/core': 3.665.0 + '@aws-sdk/credential-provider-node': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/middleware-host-header': 3.664.0 + '@aws-sdk/middleware-logger': 3.664.0 + '@aws-sdk/middleware-recursion-detection': 3.664.0 + '@aws-sdk/middleware-user-agent': 3.664.0 + '@aws-sdk/region-config-resolver': 3.664.0 + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-endpoints': 3.664.0 + '@aws-sdk/util-user-agent-browser': 3.664.0 + '@aws-sdk/util-user-agent-node': 3.664.0 + '@smithy/config-resolver': 3.0.9 + '@smithy/core': 2.4.8 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.7 + '@smithy/invalid-dependency': 3.0.7 + '@smithy/middleware-content-length': 3.0.9 + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/middleware-stack': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/node-http-handler': 3.2.4 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.23 + '@smithy/util-defaults-mode-node': 3.0.23 + '@smithy/util-endpoints': 2.1.3 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.665.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/core': 2.4.8 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/signature-v4': 4.2.0 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + fast-xml-parser: 4.4.1 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-env@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-http@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-ini@3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0)': + dependencies: + '@aws-sdk/client-sts': 3.665.0 + '@aws-sdk/credential-provider-env': 3.664.0 + '@aws-sdk/credential-provider-http': 3.664.0 + '@aws-sdk/credential-provider-process': 3.664.0 + '@aws-sdk/credential-provider-sso': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0)) + '@aws-sdk/credential-provider-web-identity': 3.664.0(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/types': 3.664.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.664.0 + '@aws-sdk/credential-provider-http': 3.664.0 + '@aws-sdk/credential-provider-ini': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/credential-provider-process': 3.664.0 + '@aws-sdk/credential-provider-sso': 3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0)) + '@aws-sdk/credential-provider-web-identity': 3.664.0(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/types': 3.664.0 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-sso@3.665.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))': + dependencies: + '@aws-sdk/client-sso': 3.665.0 + '@aws-sdk/token-providers': 3.664.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0)) + '@aws-sdk/types': 3.664.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.664.0(@aws-sdk/client-sts@3.665.0)': + dependencies: + '@aws-sdk/client-sts': 3.665.0 + '@aws-sdk/types': 3.664.0 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-host-header@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-logger@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-recursion-detection@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-user-agent@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@aws-sdk/util-endpoints': 3.664.0 + '@smithy/core': 2.4.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/region-config-resolver@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.6.2 + + '@aws-sdk/token-providers@3.664.0(@aws-sdk/client-sso-oidc@3.665.0(@aws-sdk/client-sts@3.665.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.665.0(@aws-sdk/client-sts@3.665.0) + '@aws-sdk/types': 3.664.0 + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + '@aws-sdk/types@3.535.0': dependencies: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/types@3.664.0': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@aws-sdk/util-endpoints@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/types': 3.5.0 + '@smithy/util-endpoints': 2.1.3 + tslib: 2.6.2 + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-browser@3.664.0': + dependencies: + '@aws-sdk/types': 3.664.0 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-node@3.664.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.664.0 + '@aws-sdk/types': 3.664.0 + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + '@aws-sdk/util-utf8-browser@3.259.0': dependencies: tslib: 2.6.2 @@ -6833,6 +7543,15 @@ snapshots: - supports-color - typescript + '@fuels/kms-account@0.24.0-preview-63de5d8(fuels@0.94.4)': + dependencies: + '@aws-sdk/client-kms': 3.665.0 + '@noble/curves': 1.6.0 + asn1js: 3.0.5 + fuels: 0.94.4 + transitivePeerDependencies: + - aws-crt + '@fuels/prettier-config@0.0.10(prettier@2.8.8)': dependencies: prettier: 2.8.8 @@ -7027,6 +7746,10 @@ snapshots: dependencies: '@noble/hashes': 1.4.0 + '@noble/curves@1.6.0': + dependencies: + '@noble/hashes': 1.5.0 + '@noble/hashes@1.2.0': {} '@noble/hashes@1.3.2': {} @@ -7035,6 +7758,8 @@ snapshots: '@noble/hashes@1.4.0': {} + '@noble/hashes@1.5.0': {} + '@noble/secp256k1@1.7.1': {} '@nodelib/fs.scandir@2.1.5': @@ -7489,10 +8214,277 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 + '@smithy/abort-controller@3.1.5': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/config-resolver@3.0.9': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.7 + tslib: 2.6.2 + + '@smithy/core@2.4.8': + dependencies: + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-retry': 3.0.23 + '@smithy/middleware-serde': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/credential-provider-imds@3.2.4': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + tslib: 2.6.2 + + '@smithy/fetch-http-handler@3.2.9': + dependencies: + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.2 + + '@smithy/hash-node@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/invalid-dependency@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.6.2 + + '@smithy/is-array-buffer@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/middleware-content-length@3.0.9': + dependencies: + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/middleware-endpoint@3.1.4': + dependencies: + '@smithy/middleware-serde': 3.0.7 + '@smithy/node-config-provider': 3.1.8 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + '@smithy/url-parser': 3.0.7 + '@smithy/util-middleware': 3.0.7 + tslib: 2.6.2 + + '@smithy/middleware-retry@3.0.23': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/protocol-http': 4.1.4 + '@smithy/service-error-classification': 3.0.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-retry': 3.0.7 + tslib: 2.6.2 + uuid: 9.0.1 + + '@smithy/middleware-serde@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/middleware-stack@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/node-config-provider@3.1.8': + dependencies: + '@smithy/property-provider': 3.1.7 + '@smithy/shared-ini-file-loader': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/node-http-handler@3.2.4': + dependencies: + '@smithy/abort-controller': 3.1.5 + '@smithy/protocol-http': 4.1.4 + '@smithy/querystring-builder': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/property-provider@3.1.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/protocol-http@4.1.4': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/querystring-builder@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.6.2 + + '@smithy/querystring-parser@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/service-error-classification@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + + '@smithy/shared-ini-file-loader@3.1.8': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/signature-v4@4.2.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.7 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/smithy-client@3.4.0': + dependencies: + '@smithy/middleware-endpoint': 3.1.4 + '@smithy/middleware-stack': 3.0.7 + '@smithy/protocol-http': 4.1.4 + '@smithy/types': 3.5.0 + '@smithy/util-stream': 3.1.9 + tslib: 2.6.2 + '@smithy/types@2.12.0': dependencies: tslib: 2.6.2 + '@smithy/types@3.5.0': + dependencies: + tslib: 2.6.2 + + '@smithy/url-parser@3.0.7': + dependencies: + '@smithy/querystring-parser': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-body-length-browser@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.6.2 + + '@smithy/util-buffer-from@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-defaults-mode-browser@3.0.23': + dependencies: + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@smithy/util-defaults-mode-node@3.0.23': + dependencies: + '@smithy/config-resolver': 3.0.9 + '@smithy/credential-provider-imds': 3.2.4 + '@smithy/node-config-provider': 3.1.8 + '@smithy/property-provider': 3.1.7 + '@smithy/smithy-client': 3.4.0 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/util-endpoints@2.1.3': + dependencies: + '@smithy/node-config-provider': 3.1.8 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-middleware@3.0.7': + dependencies: + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/util-retry@3.0.7': + dependencies: + '@smithy/service-error-classification': 3.0.7 + '@smithy/types': 3.5.0 + tslib: 2.6.2 + + '@smithy/util-stream@3.1.9': + dependencies: + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.2.4 + '@smithy/types': 3.5.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-uri-escape@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.6.2 + + '@smithy/util-utf8@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.6.2 + '@solidity-parser/parser@0.14.5': dependencies: antlr4ts: 0.5.0-alpha.4 @@ -8055,6 +9047,12 @@ snapshots: arrify@1.0.1: {} + asn1js@3.0.5: + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + assertion-error@1.1.0: {} ast-parents@0.0.1: {} @@ -8140,6 +9138,8 @@ snapshots: transitivePeerDependencies: - supports-color + bowser@2.11.0: {} + boxen@5.1.2: dependencies: ansi-align: 3.0.1 @@ -9347,6 +10347,10 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -10825,6 +11829,12 @@ snapshots: punycode@2.3.1: {} + pvtsutils@1.3.5: + dependencies: + tslib: 2.6.2 + + pvutils@1.1.3: {} + qs@6.11.0: dependencies: side-channel: 1.0.6 @@ -11452,6 +12462,8 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@1.0.5: {} + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -11878,6 +12890,8 @@ snapshots: uuid@8.3.2: {} + uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} validate-npm-package-license@3.0.4: