diff --git a/README.md b/README.md index 08a8ad9..3800421 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Before you begin, you need to install the following tools: - [Git](https://git-scm.com/downloads) - You have to get a [Pimlico API key](https://dashboard.pimlico.io/sign-in) and put it in your env file (`NEXT_PUBLIC_PIMLICO_API_KEY`). +- You have to get a [Lighthouse Storage API key](https://docs.lighthouse.storage/lighthouse-1/how-to/create-an-api-key) and add it to the env file(`NEXT_PUBLIC_LIGHTHOUSE_API_KEY`) - You should send some ERC20 (USDC is better) to your Safe smart wallet in order to use the transfer and cross-chain transfer capabilities. diff --git a/packages/nextjs/.env.example b/packages/nextjs/.env.example index 2819edd..74dd070 100644 --- a/packages/nextjs/.env.example +++ b/packages/nextjs/.env.example @@ -12,3 +12,4 @@ NEXT_PUBLIC_ALCHEMY_API_KEY= NEXT_PUBLIC_DYNAMIC_ENVIRONMENT_ID= NEXT_PUBLIC_PIMLICO_API_KEY= +NEXT_PUBLIC_LIGHTHOUSE_API_KEY= diff --git a/packages/nextjs/app/fvm/page.tsx b/packages/nextjs/app/fvm/page.tsx new file mode 100644 index 0000000..14d59e5 --- /dev/null +++ b/packages/nextjs/app/fvm/page.tsx @@ -0,0 +1,220 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { CONTRACT_ABI, CONTRACT_ADDRESS } from "./smartcontract"; +import { ExternalLinkIcon, getNetwork, useDynamicContext, useSwitchNetwork } from "@dynamic-labs/sdk-react-core"; +import lighthouse from "@lighthouse-web3/sdk"; +import { ethers } from "ethers"; +import { filecoinCalibration } from "viem/chains"; +import { useAccount, useWaitForTransactionReceipt, useWriteContract } from "wagmi"; +import { notification } from "~~/utils/scaffold-eth"; + +const FVMPage = () => { + const { isConnected } = useAccount(); + const { primaryWallet, isAuthenticated } = useDynamicContext(); + const switchNetwork = useSwitchNetwork(); + const { data: hash, isPending, writeContract } = useWriteContract(); + + const { isLoading: isConfirming } = useWaitForTransactionReceipt({ + hash, + }); + + const [network, setNetwork] = useState(null); + const [hostedLink, setHostedLink] = useState(""); + const [loading, setLoading] = useState(false); + const [step, setStep] = useState(0); + const [error, setError] = useState(null); + + const fetchNetwork = async () => { + if (!primaryWallet) return; + const network = Number(await getNetwork(primaryWallet.connector)); + setNetwork(network); + }; + + useEffect(() => { + fetchNetwork(); + }, [primaryWallet]); + + useEffect(() => { + if (!process.env.NEXT_PUBLIC_LIGHTHOUSE_API_KEY) { + notification.error("Please set NEXT_PUBLIC_LIGHTHOUSE_API_KEY in .env file."); + } + }, []); + + const handleFileUpload = async (file: File) => { + setLoading(true); + + const apiKey = `${process.env.NEXT_PUBLIC_LIGHTHOUSE_API_KEY}`; + + // When uploading a file, you can customize how it's stored in Lighthouse using the + // below deal parameters + + const dealParams = { + num_copies: 2, + repair_threshold: 28800, + renew_threshold: 240, + miner: ["t017840"], + network: "calibration", + deal_duration: 2, + }; + + const uploadResponse = await lighthouse.upload(file, apiKey, dealParams); + + if (uploadResponse) { + setHostedLink(`https://gateway.lighthouse.storage/ipfs/${uploadResponse.data.Hash}`); + setStep(1); + } + setLoading(false); + }; + + const handleSubmitRaas = async () => { + try { + const fileLinkBytes = ethers.utils.hexlify(ethers.utils.toUtf8Bytes(hostedLink)); + await writeContract({ + address: CONTRACT_ADDRESS, + abi: CONTRACT_ABI, + functionName: "submitRaaS", + args: [fileLinkBytes, 2, 4, 40], + }); + } catch (err) { + setError("Failed to submit file."); + console.error(err); + } finally { + setStep(2); + } + }; + + return ( + <> +
+ {isConnected && isAuthenticated && network !== filecoinCalibration.id ? ( + + ) : ( +
+ {loading || isConfirming || isPending ? ( + <> +
+
+
+
+
+ + ) : isConnected && isAuthenticated ? ( +
+ {/* STEP 1 : Upload File to Lighthouse Storage */} + {step == 0 && ( +
+

Data Storage on FVM

+

+ This example covers the steps to upload a file on Filecoin {" "} + via FVM + using Lighthouse SDK. +

+ +
+ +
+
+ )} + + {/* STEP 2 : Attaching a RaaS worker on-demand to trigger storage deals for files uploaded through the Lighthouse Smart Contract on FVM */} + {step == 1 && ( +
+
+ Card Image +
+

RaaS - Renew, Repair, Replication

+

+ In the below section we interact with the smart contract on FVM Calibration network by + submitting a CID of the file we uploaded in previous section to the submitRaaS function. This + will create a new deal request that the Lighthouse RaaS Worker will pick up and initiate + deals. +

+
+ + + + +
+
+
+
+ )} + + {/* STEP 3 : View Transaction On Explorer */} + {hash && ( + <> + + + + + )} +
+ ) : ( + + )} + {error &&

{error}

} +
+ )} +
+ + ); +}; + +export default FVMPage; diff --git a/packages/nextjs/app/fvm/smartcontract.tsx b/packages/nextjs/app/fvm/smartcontract.tsx new file mode 100644 index 0000000..863bf51 --- /dev/null +++ b/packages/nextjs/app/fvm/smartcontract.tsx @@ -0,0 +1,231 @@ +export const CONTRACT_ADDRESS = "0x4015c3E5453d38Df71539C0F7440603C69784d7a"; + +export const CONTRACT_ABI = [ + { + inputs: [{ internalType: "uint256", name: "_maxReplications", type: "uint256" }], + stateMutability: "nonpayable", + type: "constructor", + }, + { inputs: [{ internalType: "int256", name: "errorCode", type: "int256" }], name: "ActorError", type: "error" }, + { inputs: [], name: "FailToCallActor", type: "error" }, + { inputs: [{ internalType: "uint64", name: "", type: "uint64" }], name: "InvalidCodec", type: "error" }, + { inputs: [], name: "InvalidResponseLength", type: "error" }, + { + inputs: [ + { internalType: "uint256", name: "balance", type: "uint256" }, + { internalType: "uint256", name: "value", type: "uint256" }, + ], + name: "NotEnoughBalance", + type: "error", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "id", type: "uint256" }, + { indexed: true, internalType: "uint64", name: "dealId", type: "uint64" }, + ], + name: "CompleteAggregatorRequest", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "address", name: "previousOwner", type: "address" }, + { indexed: true, internalType: "address", name: "newOwner", type: "address" }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "id", type: "uint256" }, + { indexed: false, internalType: "bytes", name: "cid", type: "bytes" }, + ], + name: "SubmitAggregatorRequest", + type: "event", + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: "uint256", name: "id", type: "uint256" }, + { indexed: false, internalType: "bytes", name: "cid", type: "bytes" }, + { indexed: false, internalType: "uint256", name: "_replication_target", type: "uint256" }, + { indexed: false, internalType: "uint256", name: "_repair_threshold", type: "uint256" }, + { indexed: false, internalType: "uint256", name: "_renew_threshold", type: "uint256" }, + ], + name: "SubmitAggregatorRequestWithRaaS", + type: "event", + }, + { + inputs: [{ internalType: "uint256", name: "_maxReplications", type: "uint256" }], + name: "changeMaxReplications", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "uint256", name: "_id", type: "uint256" }, + { internalType: "uint64", name: "_dealId", type: "uint64" }, + { internalType: "uint64", name: "_minerId", type: "uint64" }, + { + components: [ + { + components: [ + { internalType: "uint64", name: "index", type: "uint64" }, + { internalType: "bytes32[]", name: "path", type: "bytes32[]" }, + ], + internalType: "struct ProofData", + name: "proofSubtree", + type: "tuple", + }, + { + components: [ + { internalType: "uint64", name: "index", type: "uint64" }, + { internalType: "bytes32[]", name: "path", type: "bytes32[]" }, + ], + internalType: "struct ProofData", + name: "proofIndex", + type: "tuple", + }, + ], + internalType: "struct InclusionProof", + name: "_proof", + type: "tuple", + }, + { + components: [ + { internalType: "bytes", name: "commPc", type: "bytes" }, + { internalType: "uint64", name: "sizePc", type: "uint64" }, + ], + internalType: "struct InclusionVerifierData", + name: "_verifierData", + type: "tuple", + }, + ], + name: "complete", + outputs: [ + { + components: [ + { internalType: "bytes", name: "commPa", type: "bytes" }, + { internalType: "uint64", name: "sizePa", type: "uint64" }, + ], + internalType: "struct InclusionAuxData", + name: "", + type: "tuple", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "bytes", name: "_cid", type: "bytes" }], + name: "getActiveDeals", + outputs: [ + { + components: [ + { internalType: "uint64", name: "dealId", type: "uint64" }, + { internalType: "uint64", name: "minerId", type: "uint64" }, + ], + internalType: "struct IAggregatorOracle.Deal[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getAllCIDs", + outputs: [{ internalType: "bytes[]", name: "", type: "bytes[]" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [{ internalType: "bytes", name: "_cid", type: "bytes" }], + name: "getAllDeals", + outputs: [ + { + components: [ + { internalType: "uint64", name: "dealId", type: "uint64" }, + { internalType: "uint64", name: "minerId", type: "uint64" }, + ], + internalType: "struct IAggregatorOracle.Deal[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { internalType: "bytes", name: "_cid", type: "bytes" }, + { internalType: "uint64", name: "epochs", type: "uint64" }, + ], + name: "getExpiringDeals", + outputs: [ + { + components: [ + { internalType: "uint64", name: "dealId", type: "uint64" }, + { internalType: "uint64", name: "minerId", type: "uint64" }, + ], + internalType: "struct IAggregatorOracle.Deal[]", + name: "", + type: "tuple[]", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getMaxReplications", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "maxReplications", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function", + }, + { inputs: [], name: "renounceOwnership", outputs: [], stateMutability: "nonpayable", type: "function" }, + { + inputs: [{ internalType: "bytes", name: "_cid", type: "bytes" }], + name: "submit", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { internalType: "bytes", name: "_cid", type: "bytes" }, + { internalType: "uint256", name: "_replication_target", type: "uint256" }, + { internalType: "uint256", name: "_repair_threshold", type: "uint256" }, + { internalType: "uint256", name: "_renew_threshold", type: "uint256" }, + ], + name: "submitRaaS", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [{ internalType: "address", name: "newOwner", type: "address" }], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; diff --git a/packages/nextjs/components/Header.tsx b/packages/nextjs/components/Header.tsx index d63c1c6..55def99 100644 --- a/packages/nextjs/components/Header.tsx +++ b/packages/nextjs/components/Header.tsx @@ -5,7 +5,7 @@ import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { DynamicWidget } from "@dynamic-labs/sdk-react-core"; -import { Bars3Icon, BugAntIcon, WalletIcon } from "@heroicons/react/24/outline"; +import { Bars3Icon, BugAntIcon, CircleStackIcon, WalletIcon } from "@heroicons/react/24/outline"; import { FaucetButton } from "~~/components/scaffold-eth"; import { useOutsideClick } from "~~/hooks/scaffold-eth"; @@ -30,6 +30,11 @@ export const menuLinks: HeaderMenuLink[] = [ href: "/safe", icon: , }, + { + label: "Data Storage", + href: "/fvm", + icon: , + }, ]; export const HeaderMenuLinks = () => { diff --git a/packages/nextjs/lib/networks.ts b/packages/nextjs/lib/networks.ts index 3455401..61759fa 100644 --- a/packages/nextjs/lib/networks.ts +++ b/packages/nextjs/lib/networks.ts @@ -1,4 +1,30 @@ export const customEvmNetworks = [ + { + blockExplorerUrls: ["https://filfox.info/en"], + chainId: 314, + name: "Filecoin", + rpcUrls: ["https://api.node.glif.io/rpc/v1"], + iconUrls: ["https://avatars.githubusercontent.com/u/22014611?s=200&v=4"], + nativeCurrency: { + name: "Filecoin", + symbol: "FIL", + decimals: 18, + }, + networkId: 314, + }, + { + blockExplorerUrls: ["https://calibration.filfox.info/en"], + chainId: 314159, + name: "Filecoin Calibration", + rpcUrls: ["https://api.calibration.node.glif.io/rpc/v1"], + iconUrls: ["https://avatars.githubusercontent.com/u/22014611?s=200&v=4"], + nativeCurrency: { + name: "Filecoin", + symbol: "FIL", + decimals: 18, + }, + networkId: 314159, + }, { blockExplorerUrls: ["https://explorer-holesky.morphl2.io/"], chainId: 2810, diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 93c7418..a93d6e3 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -20,6 +20,7 @@ "@dynamic-labs/viem-utils": "3.0.0-alpha.13", "@dynamic-labs/wagmi-connector": "^3.0.0-alpha.13", "@heroicons/react": "^2.0.11", + "@lighthouse-web3/sdk": "^0.3.7", "@safe-global/api-kit": "^2.4.2", "@safe-global/protocol-kit": "^4.0.2", "@safe-global/safe-core-sdk-types": "^5.0.2", diff --git a/yarn.lock b/yarn.lock index e0390c0..20ec270 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1403,6 +1403,22 @@ __metadata: languageName: node linkType: hard +"@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.1.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + "@hcaptcha/react-hcaptcha@npm:1.4.4": version: 1.4.4 resolution: "@hcaptcha/react-hcaptcha@npm:1.4.4" @@ -1690,6 +1706,40 @@ __metadata: languageName: node linkType: hard +"@lighthouse-web3/kavach@npm:^0.1.9": + version: 0.1.9 + resolution: "@lighthouse-web3/kavach@npm:0.1.9" + dependencies: + bls-eth-wasm: ^1.1.1 + joi: ^17.7.0 + checksum: be3c5cf494b501a6867440fd1f7860633785d688d1bb80b09dfd928ae4f2d837a9d69c196886f3d760c761b9d939f988dcbd89f234b3fa87eda407682037049a + languageName: node + linkType: hard + +"@lighthouse-web3/sdk@npm:^0.3.7": + version: 0.3.7 + resolution: "@lighthouse-web3/sdk@npm:0.3.7" + dependencies: + "@lighthouse-web3/kavach": ^0.1.9 + "@peculiar/webcrypto": ^1.4.0 + bls-eth-wasm: ^1.0.4 + cli-spinner: ^0.2.10 + commander: ^10.0.0 + conf: ^10.1.1 + crypto-js: ^4.2.0 + ethers: ^6.7.1 + fs-extra: ^11.1.1 + kleur: ^4.1.5 + mime-types: ^2.1.35 + progress: ^2.0.3 + read: ^1.0.7 + recursive-fs: ^2.1.0 + bin: + lighthouse-web3: dist/Commands/index.js + checksum: 6766c485b3e857aa087184a788043a2a5f5340ea6410a82218213030e6d51165dd2dd8bc3b3cd1da8303dc077e73ffad7bf45e3dc01d9f03ea457716b3566a04 + languageName: node + linkType: hard + "@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": version: 1.2.0 resolution: "@lit-labs/ssr-dom-shim@npm:1.2.0" @@ -2749,6 +2799,39 @@ __metadata: languageName: node linkType: hard +"@peculiar/asn1-schema@npm:^2.3.8": + version: 2.3.13 + resolution: "@peculiar/asn1-schema@npm:2.3.13" + dependencies: + asn1js: ^3.0.5 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: 245cf398992788fc61c48a4e1263a47803bccd91807e7a419e3fe9ad44ede5e396a5f8d13215b0765774855b634fe10d730b08944e5dc085fc5ee121a7e0139e + languageName: node + linkType: hard + +"@peculiar/json-schema@npm:^1.1.12": + version: 1.1.12 + resolution: "@peculiar/json-schema@npm:1.1.12" + dependencies: + tslib: ^2.0.0 + checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 + languageName: node + linkType: hard + +"@peculiar/webcrypto@npm:^1.4.0": + version: 1.5.0 + resolution: "@peculiar/webcrypto@npm:1.5.0" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + webcrypto-core: ^1.8.0 + checksum: 9022d7452d564a5a26fbacf477842be34736f2d9139f2f5026adc47fdeda7033193d727491503f2a829d35ab819bbfa61c82a785c49c999eac535ecd69a3a459 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -2994,6 +3077,7 @@ __metadata: "@dynamic-labs/viem-utils": 3.0.0-alpha.13 "@dynamic-labs/wagmi-connector": ^3.0.0-alpha.13 "@heroicons/react": ^2.0.11 + "@lighthouse-web3/sdk": ^0.3.7 "@safe-global/api-kit": ^2.4.2 "@safe-global/protocol-kit": ^4.0.2 "@safe-global/safe-core-sdk-types": ^5.0.2 @@ -3123,6 +3207,29 @@ __metadata: languageName: node linkType: hard +"@sideway/address@npm:^4.1.5": + version: 4.1.5 + resolution: "@sideway/address@npm:4.1.5" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 3e3ea0f00b4765d86509282290368a4a5fd39a7995fdc6de42116ca19a96120858e56c2c995081def06e1c53e1f8bccc7d013f6326602bec9d56b72ee2772b9d + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + "@sinclair/typebox@npm:0.25.24": version: 0.25.24 resolution: "@sinclair/typebox@npm:0.25.24" @@ -5106,6 +5213,20 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + "ajv@npm:8.6.3": version: 8.6.3 resolution: "ajv@npm:8.6.3" @@ -5130,6 +5251,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.0.0, ajv@npm:^8.6.3": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: ^3.1.3 + fast-uri: ^3.0.1 + json-schema-traverse: ^1.0.0 + require-from-string: ^2.0.2 + checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 + languageName: node + linkType: hard + "ajv@npm:^8.0.1": version: 8.16.0 resolution: "ajv@npm:8.16.0" @@ -5477,6 +5610,17 @@ __metadata: languageName: node linkType: hard +"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": + version: 3.0.5 + resolution: "asn1js@npm:3.0.5" + dependencies: + pvtsutils: ^1.3.2 + pvutils: ^1.1.3 + tslib: ^2.4.0 + checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb + languageName: node + linkType: hard + "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" @@ -5563,6 +5707,13 @@ __metadata: languageName: node linkType: hard +"atomically@npm:^1.7.0": + version: 1.7.0 + resolution: "atomically@npm:1.7.0" + checksum: 991153b17334597f93b58e831bea9851e57ed9cd41d8f33991be063f170b5cc8ec7ff8605f3eb95c1d389c2ad651039e9eb8f2b795e24833c2ceb944f347373a + languageName: node + linkType: hard + "autoprefixer@npm:^10.4.12": version: 10.4.19 resolution: "autoprefixer@npm:10.4.19" @@ -5702,6 +5853,13 @@ __metadata: languageName: node linkType: hard +"bls-eth-wasm@npm:^1.0.4, bls-eth-wasm@npm:^1.1.1": + version: 1.2.1 + resolution: "bls-eth-wasm@npm:1.2.1" + checksum: 230b5109117d86bd19ec638d61b82722afe8044b946bdb2367d9a02f76f835c37e71747e6634790b550fbf2c36adfcfa61ba3d465184caf033b2717187ff3f14 + languageName: node + linkType: hard + "bn.js@npm:4.11.6": version: 4.11.6 resolution: "bn.js@npm:4.11.6" @@ -6233,6 +6391,13 @@ __metadata: languageName: node linkType: hard +"cli-spinner@npm:^0.2.10": + version: 0.2.10 + resolution: "cli-spinner@npm:0.2.10" + checksum: 607592080c2386f269c4420c8e5b597e8cdabc61ddf7e439d82599b586d6334c339df98437ee2b56738f5840f0700f08f2e9d720f7416e94654f2a749539389e + languageName: node + linkType: hard + "cli-table3@npm:^0.5.0": version: 0.5.1 resolution: "cli-table3@npm:0.5.1" @@ -6458,6 +6623,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -6498,6 +6670,24 @@ __metadata: languageName: node linkType: hard +"conf@npm:^10.1.1": + version: 10.2.0 + resolution: "conf@npm:10.2.0" + dependencies: + ajv: ^8.6.3 + ajv-formats: ^2.1.1 + atomically: ^1.7.0 + debounce-fn: ^4.0.0 + dot-prop: ^6.0.1 + env-paths: ^2.2.1 + json-schema-typed: ^7.0.3 + onetime: ^5.1.2 + pkg-up: ^3.1.0 + semver: ^7.3.5 + checksum: 27066f38a25411c1e72e81a5219e2c7ed675cd39d8aa2a2f1797bb2c9255725e92e335d639334177a23d488b22b1290bbe0708e9a005574e5d83d5432df72bd3 + languageName: node + linkType: hard + "confbox@npm:^0.1.7": version: 0.1.7 resolution: "confbox@npm:0.1.7" @@ -6685,6 +6875,13 @@ __metadata: languageName: node linkType: hard +"crypto-js@npm:^4.2.0": + version: 4.2.0 + resolution: "crypto-js@npm:4.2.0" + checksum: f051666dbc077c8324777f44fbd3aaea2986f198fe85092535130d17026c7c2ccf2d23ee5b29b36f7a4a07312db2fae23c9094b644cc35f7858b1b4fcaf27774 + languageName: node + linkType: hard + "css-selector-tokenizer@npm:^0.8": version: 0.8.0 resolution: "css-selector-tokenizer@npm:0.8.0" @@ -6833,6 +7030,15 @@ __metadata: languageName: node linkType: hard +"debounce-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "debounce-fn@npm:4.0.0" + dependencies: + mimic-fn: ^3.0.0 + checksum: 7bf8d142b46a88453bbd6eda083f303049b4c8554af5114bdadfc2da56031030664360e81211ae08b708775e6904db7e6d72a421c4ff473344f4521c2c5e4a22 + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.1, debug@npm:~4.3.2": version: 4.3.5 resolution: "debug@npm:4.3.5" @@ -7171,6 +7377,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: ^2.0.0 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 + languageName: node + linkType: hard + "dotenv@npm:^16.0.3": version: 16.4.5 resolution: "dotenv@npm:16.4.5" @@ -7366,7 +7581,7 @@ __metadata: languageName: node linkType: hard -"env-paths@npm:^2.2.0": +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e @@ -8369,6 +8584,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.7.1": + version: 6.13.2 + resolution: "ethers@npm:6.13.2" + 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 + checksum: 981860c736c7ae121774ad38ea07e3611ce524a77d2fcb77db499b65afe0cbe8f344cd5204d94b68b316349ff770fd2a7d9c8b2039da41c072f98d9864099925 + languageName: node + linkType: hard + "ethjs-unit@npm:0.1.6": version: 0.1.6 resolution: "ethjs-unit@npm:0.1.6" @@ -8584,6 +8814,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.0.1 + resolution: "fast-uri@npm:3.0.1" + checksum: 106143ff83705995225dcc559411288f3337e732bb2e264e79788f1914b6bd8f8bc3683102de60b15ba00e6ebb443633cabac77d4ebc5cb228c47cf955e199ff + languageName: node + linkType: hard + "fastparse@npm:^1.1.2": version: 1.1.2 resolution: "fastparse@npm:1.1.2" @@ -8659,6 +8896,15 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -8865,6 +9111,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.1.1": + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8 + languageName: node + linkType: hard + "fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -10256,6 +10513,13 @@ __metadata: languageName: node linkType: hard +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + "is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" @@ -10538,6 +10802,19 @@ __metadata: languageName: node linkType: hard +"joi@npm:^17.7.0": + version: 17.13.3 + resolution: "joi@npm:17.13.3" + dependencies: + "@hapi/hoek": ^9.3.0 + "@hapi/topo": ^5.1.0 + "@sideway/address": ^4.1.5 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 66ed454fee3d8e8da1ce21657fd2c7d565d98f3e539d2c5c028767e5f38cbd6297ce54df8312d1d094e62eb38f9452ebb43da4ce87321df66cf5e3f128cbc400 + languageName: node + linkType: hard + "js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -10653,6 +10930,13 @@ __metadata: languageName: node linkType: hard +"json-schema-typed@npm:^7.0.3": + version: 7.0.3 + resolution: "json-schema-typed@npm:7.0.3" + checksum: e861b19e97e3cc2b29a429147890157827eeda16ab639a0765b935cf3e22aeb6abbba108e23aef442da806bb1f402bdff21da9c5cb30015f8007594565e110b5 + languageName: node + linkType: hard + "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -10963,6 +11247,16 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -11291,7 +11585,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.35": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -11316,6 +11610,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^3.0.0": + version: 3.1.0 + resolution: "mimic-fn@npm:3.1.0" + checksum: f7b167f9115b8bbdf2c3ee55dce9149d14be9e54b237259c4bc1d8d0512ea60f25a1b323f814eb1fe8f5a541662804bcfcfff3202ca58df143edb986849d58db + languageName: node + linkType: hard + "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" @@ -11661,6 +11962,13 @@ __metadata: languageName: node linkType: hard +"mute-stream@npm:~0.0.4": + version: 0.0.8 + resolution: "mute-stream@npm:0.0.8" + checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 + languageName: node + linkType: hard + "mz@npm:^2.7.0": version: 2.7.0 resolution: "mz@npm:2.7.0" @@ -12209,7 +12517,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.0": +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -12336,7 +12644,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -12363,6 +12671,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -12774,6 +13091,15 @@ __metadata: languageName: node linkType: hard +"pkg-up@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: ^3.0.0 + checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 + languageName: node + linkType: hard + "pngjs@npm:^5.0.0": version: 5.0.0 resolution: "pngjs@npm:5.0.0" @@ -12989,6 +13315,13 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -13082,6 +13415,22 @@ __metadata: languageName: node linkType: hard +"pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5": + version: 1.3.5 + resolution: "pvtsutils@npm:1.3.5" + dependencies: + tslib: ^2.6.1 + checksum: e734516b3cb26086c18bd9c012fefe818928a5073178842ab7e62885a090f1dd7bda9c7bb8cd317167502cb8ec86c0b1b0ccd71dac7ab469382a4518157b0d12 + languageName: node + linkType: hard + +"pvutils@npm:^1.1.3": + version: 1.1.3 + resolution: "pvutils@npm:1.1.3" + checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 + languageName: node + linkType: hard + "qr-code-styling@npm:^1.6.0-rc.1": version: 1.6.0-rc.1 resolution: "qr-code-styling@npm:1.6.0-rc.1" @@ -13452,6 +13801,15 @@ __metadata: languageName: node linkType: hard +"read@npm:^1.0.7": + version: 1.0.7 + resolution: "read@npm:1.0.7" + dependencies: + mute-stream: ~0.0.4 + checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b + languageName: node + linkType: hard + "readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -13525,6 +13883,16 @@ __metadata: languageName: node linkType: hard +"recursive-fs@npm:^2.1.0": + version: 2.1.0 + resolution: "recursive-fs@npm:2.1.0" + bin: + recursive-copy: bin/recursive-copy + recursive-delete: bin/recursive-delete + checksum: 838bdb0cd7c276b284122f275ab420eb39b0c4002c46bee86d8421dfd28ce439aa69b0d30853af172cc5ba4c7f9b61b03972aaf728d887a77f9482365a877558 + languageName: node + linkType: hard + "recursive-readdir@npm:^2.2.2": version: 2.2.3 resolution: "recursive-readdir@npm:2.2.3" @@ -15403,7 +15771,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2": version: 2.6.3 resolution: "tslib@npm:2.6.3" checksum: 74fce0e100f1ebd95b8995fbbd0e6c91bdd8f4c35c00d4da62e285a3363aaa534de40a80db30ecfd388ed7c313c42d930ee0eaf108e8114214b180eec3dbe6f5 @@ -16251,6 +16619,19 @@ __metadata: languageName: node linkType: hard +"webcrypto-core@npm:^1.8.0": + version: 1.8.0 + resolution: "webcrypto-core@npm:1.8.0" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + asn1js: ^3.0.1 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: 4f128f5283b258eda34844ee804b7d4f102b151a7cb3ae5e722309ea7d37db704184c726afb67bf53cc9eb41279379b24626270b6f4ff08ec5be6b420ff70f18 + languageName: node + linkType: hard + "webextension-polyfill@npm:>=0.10.0 <1.0": version: 0.12.0 resolution: "webextension-polyfill@npm:0.12.0"