diff --git a/examples/deployer/package.json b/examples/deployer/package.json index 5d323eb25..7af841f3b 100644 --- a/examples/deployer/package.json +++ b/examples/deployer/package.json @@ -12,7 +12,7 @@ "@turnkey/sdk-server": "workspace:*", "@turnkey/ethers": "workspace:*", "dotenv": "^16.0.3", - "ethers": "^6.10.0", + "ethers": "^6.13.0", "solc": "0.8.13" } } diff --git a/examples/sweeper/package.json b/examples/sweeper/package.json index a14849a64..79afa707c 100644 --- a/examples/sweeper/package.json +++ b/examples/sweeper/package.json @@ -12,7 +12,7 @@ "@turnkey/ethers": "workspace:*", "@uniswap/sdk-core": "^3.1.1", "dotenv": "^16.0.3", - "ethers": "^6.10.0", + "ethers": "^6.13.0", "hardhat": "^2.12.7", "prompts": "^2.4.2" }, diff --git a/examples/trading-runner/package.json b/examples/trading-runner/package.json index 3464f3f9b..256bfac7e 100644 --- a/examples/trading-runner/package.json +++ b/examples/trading-runner/package.json @@ -15,7 +15,7 @@ "@uniswap/v3-core": "^1.0.1", "@uniswap/v3-sdk": "^3.9.0", "dotenv": "^16.0.3", - "ethers": "^6.10.0", + "ethers": "^6.13.0", "jsbi": "^3.2.5", "prompts": "^2.4.2" }, diff --git a/examples/with-ethers/package.json b/examples/with-ethers/package.json index 46f9dc6ec..7deb89ee7 100644 --- a/examples/with-ethers/package.json +++ b/examples/with-ethers/package.json @@ -5,17 +5,23 @@ "scripts": { "start": "tsx src/index.ts", "start-advanced": "tsx src/advanced.ts", + "start-blobs": "tsx src/blobs.ts", "start-sepolia-legacy": "tsx src/sepoliaLegacyTx.ts", "clean": "rimraf ./dist ./.cache", "typecheck": "tsc --noEmit" }, "dependencies": { + "@chainsafe/bls": "^8.1.0", + "@chainsafe/blst": "^2.2.0", "@turnkey/api-key-stamper": "workspace:*", + "@turnkey/encoding": "workspace:*", "@turnkey/ethers": "workspace:*", "@turnkey/http": "workspace:*", "@turnkey/sdk-server": "workspace:*", + "bls": "link:@chainsafe/bls/bls", "dotenv": "^16.0.3", - "ethers": "^6.10.0", + "ethers": "^6.13.0", + "kzg-wasm": "^0.5.0", "prompts": "^2.4.2" }, "devDependencies": { diff --git a/examples/with-ethers/src/advanced.ts b/examples/with-ethers/src/advanced.ts index 5cf68215d..6341d77cc 100644 --- a/examples/with-ethers/src/advanced.ts +++ b/examples/with-ethers/src/advanced.ts @@ -5,10 +5,10 @@ import * as dotenv from "dotenv"; dotenv.config({ path: path.resolve(process.cwd(), ".env.local") }); import { TurnkeySigner } from "@turnkey/ethers"; -import { ethers } from "ethers"; -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; +import { ethers, Transaction, Signature } from "ethers"; +import { Turnkey as TurnkeyServerSDK } from "@turnkey/sdk-server"; import { createNewWallet } from "./createNewWallet"; +import { print, assertEqual } from "./util"; async function main() { if (!process.env.SIGN_WITH) { @@ -17,25 +17,24 @@ async function main() { return; } - const turnkeyClient = new TurnkeyClient( - { - baseUrl: process.env.BASE_URL!, - }, - new ApiKeyStamper({ - apiPublicKey: process.env.API_PUBLIC_KEY!, - apiPrivateKey: process.env.API_PRIVATE_KEY!, - }) - ); + console.log("process base url", process.env.BASE_URL); + + const turnkeyClient = new TurnkeyServerSDK({ + apiBaseUrl: process.env.BASE_URL!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + apiPublicKey: process.env.API_PUBLIC_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, + }); // Initialize a Turnkey Signer const turnkeySigner = new TurnkeySigner({ - client: turnkeyClient, + client: turnkeyClient.apiClient(), organizationId: process.env.ORGANIZATION_ID!, signWith: process.env.SIGN_WITH!, }); // Bring your own provider (such as Alchemy or Infura: https://docs.ethers.org/v6/api/providers/) - const network = "goerli"; + const network = "sepolia"; const provider = new ethers.InfuraProvider(network); const connectedSigner = turnkeySigner.connect(provider); const address = await connectedSigner.getAddress(); @@ -95,19 +94,69 @@ async function main() { print("Turnkey-powered signature - typed data (EIP-712):", `${signature}`); assertEqual(recoveredAddress, address); + + // 4. Sign type 3 (EIP-4844) transaction + const feeEstimate = await connectedSigner.provider?.getFeeData(); + console.log("fee estimate", feeEstimate); + + const unsignedTx = Transaction.from({ + to: "0x08d2b0a37F869FF76BACB5Bab3278E26ab7067B7", + value: 1111, + type: 3, + chainId: 11155111, + gasLimit: 21000, + maxFeePerGas: feeEstimate!.maxFeePerGas, + maxPriorityFeePerGas: feeEstimate!.maxPriorityFeePerGas, + maxFeePerBlobGas: feeEstimate!.maxFeePerGas, + // blobs: [], + blobVersionedHashes: [ + "0x01000000000000000000000000000000000000000000000000000000000000aa", + ], + }); + + const gasEstimate = await connectedSigner.estimateGas(unsignedTx); + console.log("gas estimate", gasEstimate); + + console.log("serialized unsigned", unsignedTx.unsignedSerialized); + console.log("full tx", unsignedTx.gasLimit); + + const signedTx = await connectedSigner.signTransaction(unsignedTx); + + console.log("signed tx", signedTx); + + const sentTx = await connectedSigner.sendTransaction(unsignedTx); + console.log("sent tx", sentTx); + + // console.log({ + // unsignedTx, + // unsignedTxTo: unsignedTx.to, + // unsignedTxSerialized: unsignedTx.unsignedSerialized, + // }); + + // const signedMessage = await connectedSigner.signMessage( + // unsignedTx.unsignedSerialized + // ); + + // console.log({ + // unsignedTx, + // signedMessage, + // }); + + // const signedTx = Object.assign({}, unsignedTx); + + // signedTx.signature = Signature.from(signedMessage); + + // console.log({ signedTx }); + + // // Combine the signautre + transaction + // const broadcastedTx = await connectedSigner.provider?.broadcastTransaction( + // signedTx.serialized + // ); + + // print("Successfully broadcasted EIP-4844 transaction!", broadcastedTx?.hash!); } main().catch((error) => { console.error(error); process.exit(1); }); - -function print(header: string, body: string): void { - console.log(`${header}\n\t${body}\n`); -} - -function assertEqual(left: T, right: T) { - if (left !== right) { - throw new Error(`${JSON.stringify(left)} !== ${JSON.stringify(right)}`); - } -} diff --git a/examples/with-ethers/src/blobs.ts b/examples/with-ethers/src/blobs.ts new file mode 100644 index 000000000..9f4533217 --- /dev/null +++ b/examples/with-ethers/src/blobs.ts @@ -0,0 +1,150 @@ +import * as path from "path"; +import * as dotenv from "dotenv"; + +// Load environment variables from `.env.local` +dotenv.config({ path: path.resolve(process.cwd(), ".env.local") }); + +import { TurnkeySigner } from "@turnkey/ethers"; +import { ethers, Transaction } from "ethers"; +import { Turnkey as TurnkeyServerSDK } from "@turnkey/sdk-server"; +import { createNewWallet } from "./createNewWallet"; +import { print } from "./util"; +import { + uint8ArrayFromHexString, + uint8ArrayToHexString, +} from "@turnkey/encoding"; + +import { loadKZG } from "kzg-wasm"; +// import bls from "@chainsafe/bls"; +// import { Blob } from "@chainsafe/bls/bls"; + +async function main() { + if (!process.env.SIGN_WITH) { + // If you don't specify a `SIGN_WITH`, we'll create a new wallet for you via calling the Turnkey API. + await createNewWallet(); + return; + } + + console.log("process base url", process.env.BASE_URL); + + const turnkeyClient = new TurnkeyServerSDK({ + apiBaseUrl: process.env.BASE_URL!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + apiPublicKey: process.env.API_PUBLIC_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, + }); + + // Initialize a Turnkey Signer + const turnkeySigner = new TurnkeySigner({ + client: turnkeyClient.apiClient(), + organizationId: process.env.ORGANIZATION_ID!, + signWith: process.env.SIGN_WITH!, + }); + + // Bring your own provider (such as Alchemy or Infura: https://docs.ethers.org/v6/api/providers/) + const network = "sepolia"; + const provider = new ethers.InfuraProvider(network); + const connectedSigner = turnkeySigner.connect(provider); + const address = await connectedSigner.getAddress(); + + print("Address:", address); + + // 4. Sign type 3 (EIP-4844) transaction + const feeEstimate = await connectedSigner.provider?.getFeeData(); + console.log("fee estimate", feeEstimate); + + // Blob stuff + // Create blob data (example with zeros) + const blobData = new Uint8Array(131072).fill(0); + + // Create KZG proof and commitment + // Create versioned hash + // const versionByte = new Uint8Array([1]); // 0x01 for version + // const commitmentBytes = hexToBytes(commitment); + // const versionedCommitment = new Uint8Array([...versionByte, ...commitmentBytes]); + // const versionedHash = ethers.utils.keccak256(versionedCommitment); + const kzg = await loadKZG(); + + // const blob = Blob.fromBytes(blobData); + const blob = uint8ArrayToHexString(blobData); + const commitment = kzg.blobToKZGCommitment(blob); + const proof = kzg.computeBlobKZGProof(blob, commitment); + +// // Create versioned hash + const versionByte = new Uint8Array([1]); // 0x01 for version + const commitmentBytes = uint8ArrayFromHexString(commitment); + const versionedCommitment = new Uint8Array([ + ...versionByte, + ...commitmentBytes, + ]); + const versionedHash = ethers.keccak256(versionedCommitment); + + const unsignedTx = Transaction.from({ + to: "0x08d2b0a37F869FF76BACB5Bab3278E26ab7067B7", + value: 1, + type: 3, + chainId: 11155111, + gasLimit: 21000, + maxFeePerGas: feeEstimate!.maxFeePerGas, + maxPriorityFeePerGas: feeEstimate!.maxPriorityFeePerGas, + maxFeePerBlobGas: feeEstimate!.maxFeePerGas, + // blobs: [], + blobVersionedHashes: [versionedHash], + }); + + // The blobs, commitments, and proofs are sent separately + // const blobSidecar = { + // blobs: [blob], + // commitments: [commitmentBytes], + // proofs: [uint8ArrayFromHexString(proof)], + // }; + + const gasEstimate = await connectedSigner.estimateGas(unsignedTx); + console.log("gas estimate", gasEstimate); + + console.log("serialized unsigned", unsignedTx.unsignedSerialized); + console.log("full tx", unsignedTx.gasLimit); + + const signedTx = await connectedSigner.signTransaction(unsignedTx); + + console.log("signed tx", signedTx); + + const sentTx = await connectedSigner.sendTransaction({ + ...unsignedTx, + // ...blobSidecar, + }); + console.log("sent tx", sentTx); + + // console.log({ + // unsignedTx, + // unsignedTxTo: unsignedTx.to, + // unsignedTxSerialized: unsignedTx.unsignedSerialized, + // }); + + // const signedMessage = await connectedSigner.signMessage( + // unsignedTx.unsignedSerialized + // ); + + // console.log({ + // unsignedTx, + // signedMessage, + // }); + + // const signedTx = Object.assign({}, unsignedTx); + + // signedTx.signature = Signature.from(signedMessage); + + // console.log({ signedTx }); + + // // Combine the signautre + transaction + // const broadcastedTx = await connectedSigner.provider?.broadcastTransaction( + // signedTx.serialized + // ); + + // print("Successfully broadcasted EIP-4844 transaction!", broadcastedTx?.hash!); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/examples/with-ethers/src/createNewWallet.ts b/examples/with-ethers/src/createNewWallet.ts index a2c3b4c5b..8c63eb4c5 100644 --- a/examples/with-ethers/src/createNewWallet.ts +++ b/examples/with-ethers/src/createNewWallet.ts @@ -10,7 +10,7 @@ export async function createNewWallet() { try { const turnkeyClient = new TurnkeySDKServer({ - apiBaseUrl: "https://api.turnkey.com", + apiBaseUrl: process.env.BASE_URL!, apiPublicKey: process.env.API_PUBLIC_KEY!, apiPrivateKey: process.env.API_PRIVATE_KEY!, defaultOrganizationId: process.env.ORGANIZATION_ID!, diff --git a/examples/with-uniswap/package.json b/examples/with-uniswap/package.json index d911c6672..784c093c9 100644 --- a/examples/with-uniswap/package.json +++ b/examples/with-uniswap/package.json @@ -14,7 +14,7 @@ "@uniswap/v3-core": "^1.0.1", "@uniswap/v3-sdk": "^3.9.0", "dotenv": "^16.0.3", - "ethers": "^6.10.0", + "ethers": "^6.13.0", "hardhat": "^2.12.7", "jsbi": "^3.2.5" } diff --git a/examples/with-viem/package.json b/examples/with-viem/package.json index 4299372a0..33c02994c 100644 --- a/examples/with-viem/package.json +++ b/examples/with-viem/package.json @@ -19,6 +19,7 @@ "@turnkey/sdk-server": "workspace:*", "@turnkey/viem": "workspace:*", "dotenv": "^16.0.3", + "ethers": "6.13.0", "fetch": "^1.1.0", "prompts": "^2.4.2", "typescript": "5.1", diff --git a/examples/with-viem/src/advanced.ts b/examples/with-viem/src/advanced.ts index 9eb9cd971..7e894f09c 100644 --- a/examples/with-viem/src/advanced.ts +++ b/examples/with-viem/src/advanced.ts @@ -2,8 +2,7 @@ import * as path from "path"; import * as dotenv from "dotenv"; import { createAccount } from "@turnkey/viem"; -import { TurnkeyClient } from "@turnkey/http"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; +import { Turnkey as TurnkeyServerSDK } from "@turnkey/sdk-server"; import { createWalletClient, http, @@ -27,18 +26,15 @@ async function main() { return; } - const turnkeyClient = new TurnkeyClient( - { - baseUrl: process.env.BASE_URL!, - }, - new ApiKeyStamper({ - apiPublicKey: process.env.API_PUBLIC_KEY!, - apiPrivateKey: process.env.API_PRIVATE_KEY!, - }) - ); + const turnkeyClient = new TurnkeyServerSDK({ + apiBaseUrl: process.env.BASE_URL!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + apiPublicKey: process.env.API_PUBLIC_KEY!, + defaultOrganizationId: process.env.ORGANIZATION_ID!, + }); const turnkeyAccount = await createAccount({ - client: turnkeyClient, + client: turnkeyClient.apiClient(), organizationId: process.env.ORGANIZATION_ID!, signWith: process.env.SIGN_WITH!, }); @@ -129,6 +125,10 @@ async function main() { print("Turnkey-powered signature - typed data (EIP-712):", `${signature}`); assertEqual(address, recoveredAddress); + + // 4. Sign type-3 transaction + + } main().catch((error) => { diff --git a/packages/ethers/package.json b/packages/ethers/package.json index 5edac3944..0dc3fe957 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -49,7 +49,7 @@ "typecheck": "tsc -p tsconfig.typecheck.json" }, "peerDependencies": { - "ethers": "^6.10.0" + "ethers": "^6.13.0" }, "dependencies": { "@turnkey/api-key-stamper": "workspace:*", @@ -63,7 +63,7 @@ "@openzeppelin/contracts": "^4.9.0", "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "^9.1.0", - "ethers": "^6.10.0", + "ethers": "^6.13.0", "hardhat": "^2.19.4", "typechain": "^8.3.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 356a96c09..0a425098b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,8 +74,8 @@ importers: specifier: ^16.0.3 version: 16.0.3 ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 solc: specifier: 0.8.13 version: 0.8.13 @@ -487,8 +487,8 @@ importers: specifier: ^16.0.3 version: 16.0.3 ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 hardhat: specifier: ^2.12.7 version: 2.12.7(typescript@5.1.5) @@ -521,8 +521,8 @@ importers: specifier: ^16.0.3 version: 16.0.3 ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 jsbi: specifier: ^3.2.5 version: 3.2.5 @@ -894,9 +894,18 @@ importers: examples/with-ethers: dependencies: + '@chainsafe/bls': + specifier: ^8.1.0 + version: 8.1.0(@chainsafe/blst@2.2.0) + '@chainsafe/blst': + specifier: ^2.2.0 + version: 2.2.0 '@turnkey/api-key-stamper': specifier: workspace:* version: link:../../packages/api-key-stamper + '@turnkey/encoding': + specifier: workspace:* + version: link:../../packages/encoding '@turnkey/ethers': specifier: workspace:* version: link:../../packages/ethers @@ -906,12 +915,18 @@ importers: '@turnkey/sdk-server': specifier: workspace:* version: link:../../packages/sdk-server + bls: + specifier: link:@chainsafe/bls/bls + version: link:@chainsafe/bls/bls dotenv: specifier: ^16.0.3 version: 16.0.3 ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 + kzg-wasm: + specifier: ^0.5.0 + version: 0.5.0 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -1236,8 +1251,8 @@ importers: specifier: ^16.0.3 version: 16.0.3 ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 hardhat: specifier: ^2.12.7 version: 2.12.7(typescript@5.1.5) @@ -1262,6 +1277,9 @@ importers: dotenv: specifier: ^16.0.3 version: 16.0.3 + ethers: + specifier: 6.13.0 + version: 6.13.0 fetch: specifier: ^1.1.0 version: 1.1.0 @@ -1557,7 +1575,7 @@ importers: devDependencies: '@nomicfoundation/hardhat-ethers': specifier: 3.0.5 - version: 3.0.5(ethers@6.10.0)(hardhat@2.19.4) + version: 3.0.5(ethers@6.13.0)(hardhat@2.19.4) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.8 version: 1.0.8(hardhat@2.19.4) @@ -1566,13 +1584,13 @@ importers: version: 4.9.0 '@typechain/ethers-v6': specifier: ^0.5.1 - version: 0.5.1(ethers@6.10.0)(typechain@8.3.2)(typescript@5.1.5) + version: 0.5.1(ethers@6.13.0)(typechain@8.3.2)(typescript@5.1.5) '@typechain/hardhat': specifier: ^9.1.0 - version: 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.10.0)(hardhat@2.19.4)(typechain@8.3.2) + version: 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.0)(hardhat@2.19.4)(typechain@8.3.2) ethers: - specifier: ^6.10.0 - version: 6.10.0 + specifier: ^6.13.0 + version: 6.13.0 hardhat: specifier: ^2.19.4 version: 2.19.4(typescript@5.1.5) @@ -1798,6 +1816,9 @@ packages: /@adraffy/ens-normalize@1.10.0: resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + /@adraffy/ens-normalize@1.10.1: + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + /@adraffy/ens-normalize@1.11.0: resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} dev: false @@ -4732,6 +4753,110 @@ packages: resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} dev: true + /@chainsafe/bls-hd-key@0.3.0: + resolution: {integrity: sha512-LsYYnfBEEmqGFPDm8hQN3Kc+v9wPFnhn+CToD403KEynUiUSHKLAf5B6UCY5eooShDOcaGCUgAUhIw1CmpEf3Q==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + + /@chainsafe/bls-keygen@0.4.0: + resolution: {integrity: sha512-wqtuj4G/sWpIugJW1mb/nSTwcTuZKqB3DS3ANUIOn7pva8EB6LfxgIL34o4qk3lti/8Mdxqtqc2n4xRszrNdzA==} + dependencies: + '@chainsafe/bls-hd-key': 0.3.0 + '@noble/hashes': 1.4.0 + '@scure/bip39': 1.4.0 + dev: false + + /@chainsafe/bls@8.1.0(@chainsafe/blst@2.2.0): + resolution: {integrity: sha512-C4a1gUpFHYzJG7aaik4w+7QTeJ4pGCDTZ28YUwAWOFaWgAJSK+769ib6CNBu5Txb3PpvcC5GuhICQaDopIgEHg==} + engines: {node: '>=18'} + peerDependencies: + '@chainsafe/blst': ^1.0.0 + peerDependenciesMeta: + '@chainsafe/blst': + optional: true + dependencies: + '@chainsafe/bls-keygen': 0.4.0 + '@chainsafe/blst': 2.2.0 + bls-eth-wasm: 1.4.0 + dev: false + + /@chainsafe/blst-darwin-arm64@2.2.0: + resolution: {integrity: sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w==} + engines: {node: '>= 16'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-darwin-x64@2.2.0: + resolution: {integrity: sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ==} + engines: {node: '>= 16'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-linux-arm64-gnu@2.2.0: + resolution: {integrity: sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw==} + engines: {node: '>= 16'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-linux-arm64-musl@2.2.0: + resolution: {integrity: sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg==} + engines: {node: '>= 16'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-linux-x64-gnu@2.2.0: + resolution: {integrity: sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ==} + engines: {node: '>= 16'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-linux-x64-musl@2.2.0: + resolution: {integrity: sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg==} + engines: {node: '>= 16'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst-win32-x64-msvc@2.2.0: + resolution: {integrity: sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ==} + engines: {node: '>= 16'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/blst@2.2.0: + resolution: {integrity: sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA==} + engines: {node: '>= 16'} + optionalDependencies: + '@chainsafe/blst-darwin-arm64': 2.2.0 + '@chainsafe/blst-darwin-x64': 2.2.0 + '@chainsafe/blst-linux-arm64-gnu': 2.2.0 + '@chainsafe/blst-linux-arm64-musl': 2.2.0 + '@chainsafe/blst-linux-x64-gnu': 2.2.0 + '@chainsafe/blst-linux-x64-musl': 2.2.0 + '@chainsafe/blst-win32-x64-msvc': 2.2.0 + dev: false + /@chainsafe/persistent-merkle-tree@0.4.2: resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} dependencies: @@ -7033,14 +7158,14 @@ packages: - utf-8-validate dev: true - /@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.10.0)(hardhat@2.19.4): + /@nomicfoundation/hardhat-ethers@3.0.5(ethers@6.13.0)(hardhat@2.19.4): resolution: {integrity: sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==} peerDependencies: ethers: ^6.1.0 hardhat: ^2.0.0 dependencies: debug: 4.3.4(supports-color@8.1.1) - ethers: 6.10.0 + ethers: 6.13.0 hardhat: 2.19.4(typescript@5.1.5) lodash.isequal: 4.5.0 transitivePeerDependencies: @@ -9632,7 +9757,7 @@ packages: '@noble/hashes': 1.4.0 '@safe-global/safe-deployments': 1.34.0 ethereumjs-util: 7.1.5 - ethers: 6.10.0 + ethers: 6.13.0 semver: 7.5.4 web3: 4.7.0(typescript@5.1.5) web3-core: 4.3.2 @@ -9663,7 +9788,7 @@ packages: resolution: {integrity: sha512-cXW6petRWqUw1n04ZhVPgjzIL65FkAMqbPwkFAAlQ1lBxTt6xdxktLoAhgEDlqLNGibvncsNvKhxa1ib4T9MGg==} dependencies: '@safe-global/safe-deployments': 1.34.0 - ethers: 6.10.0 + ethers: 6.13.0 web3-core: 4.3.2 web3-utils: 4.2.1 transitivePeerDependencies: @@ -9858,7 +9983,7 @@ packages: /@silencelaboratories/walletprovider-sdk@0.1.0(typescript@5.1.5): resolution: {integrity: sha512-53fV1noQJDUN9JNydDohyzsFl4+QYoWNkkkAfRzmIgtv+6DR+Dksb0fKmme2WdtA8MPEw/HsRwN3Lr6YC3iF7A==} dependencies: - '@noble/curves': 1.4.2 + '@noble/curves': 1.6.0 viem: 2.21.29(typescript@5.1.5) transitivePeerDependencies: - bufferutil @@ -11519,21 +11644,21 @@ packages: resolution: {integrity: sha512-kp6/DuAoKzHVv5U+p0uOesYbjrEvrYVNdQMl163a+yXXUv9twabvkCGEn3pmVxKXB45JU5MPGolDDWnONZL5ZQ==} dev: true - /@typechain/ethers-v6@0.5.1(ethers@6.10.0)(typechain@8.3.2)(typescript@5.1.5): + /@typechain/ethers-v6@0.5.1(ethers@6.13.0)(typechain@8.3.2)(typescript@5.1.5): resolution: {integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==} peerDependencies: ethers: 6.x typechain: ^8.3.2 typescript: '>=4.7.0' dependencies: - ethers: 6.10.0 + ethers: 6.13.0 lodash: 4.17.21 ts-essentials: 7.0.3(typescript@5.1.5) typechain: 8.3.2(typescript@5.1.5) typescript: 5.1.5 dev: true - /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.10.0)(hardhat@2.19.4)(typechain@8.3.2): + /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.0)(hardhat@2.19.4)(typechain@8.3.2): resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} peerDependencies: '@typechain/ethers-v6': ^0.5.1 @@ -11541,8 +11666,8 @@ packages: hardhat: ^2.9.9 typechain: ^8.3.2 dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@6.10.0)(typechain@8.3.2)(typescript@5.1.5) - ethers: 6.10.0 + '@typechain/ethers-v6': 0.5.1(ethers@6.13.0)(typechain@8.3.2)(typescript@5.1.5) + ethers: 6.13.0 fs-extra: 9.1.0 hardhat: 2.19.4(typescript@5.1.5) typechain: 8.3.2(typescript@5.1.5) @@ -13595,6 +13720,10 @@ packages: /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + /bls-eth-wasm@1.4.0: + resolution: {integrity: sha512-9TJR3r3CUJQR97PU6zokV2kVA80H8g4tkVBnaf9HNH3lFMBZUKZETNCwIuN+exFLujdbt1K188rH3mnq8UgmKw==} + dev: false + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} @@ -15669,6 +15798,22 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate + dev: false + + /ethers@6.13.0: + resolution: {integrity: sha512-+yyQQQWEntY5UVbCv++guA14RRVFm1rSnO1GoLFdrK7/XRWMoktNgyG9UjwxrQqGBfGyFKknNZ81YpUS2emCgg==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -18033,6 +18178,10 @@ packages: engines: {node: '>=6'} dev: true + /kzg-wasm@0.5.0: + resolution: {integrity: sha512-LK1M0dm62NKEyhaM6S0pMHKzyAB+KySUlbT+z/+N6fZvcg0jEqSAiz6YHPk8MWIadlT0vFx1uT6Pf9dLzhTn4g==} + dev: false + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}