From 86284de65b17c03602e9c04fbb0a67cb12e15e36 Mon Sep 17 00:00:00 2001 From: Astrodevs CI Date: Wed, 10 Jan 2024 16:22:03 +0000 Subject: [PATCH 1/2] chore: create branch chore/221-evm-interact-core-poc-staging --- remove-me-12390190201f4f6388f2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 remove-me-12390190201f4f6388f2.txt diff --git a/remove-me-12390190201f4f6388f2.txt b/remove-me-12390190201f4f6388f2.txt new file mode 100644 index 00000000..a8d5e316 --- /dev/null +++ b/remove-me-12390190201f4f6388f2.txt @@ -0,0 +1 @@ +12390190201f4f6388f2 From 9f05ff5839efb58c705dc8ed8ef71c0c31293f15 Mon Sep 17 00:00:00 2001 From: 0xMemoryGrinder <35138272+0xMemoryGrinder@users.noreply.github.com> Date: Sat, 13 Jan 2024 11:42:00 -0500 Subject: [PATCH 2/2] feat(solidity/extension): interact backend POC --- .pnp.cjs | 176 +++++++++++++++++- .../solidity/extension/.osmium/contracts.json | 26 +++ .../solidity/extension/.osmium/wallets.json | 23 +++ toolchains/solidity/extension/package.json | 1 + .../src/actions/ContractRepository.ts | 54 ++++++ .../extension/src/actions/Interact.ts | 76 ++++++++ .../extension/src/actions/WalletRepository.ts | 52 ++++++ yarn.lock | 112 +++++++++++ 8 files changed, 519 insertions(+), 1 deletion(-) create mode 100644 toolchains/solidity/extension/.osmium/contracts.json create mode 100644 toolchains/solidity/extension/.osmium/wallets.json create mode 100644 toolchains/solidity/extension/src/actions/ContractRepository.ts create mode 100644 toolchains/solidity/extension/src/actions/Interact.ts create mode 100644 toolchains/solidity/extension/src/actions/WalletRepository.ts diff --git a/.pnp.cjs b/.pnp.cjs index 231346b7..8534e41f 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -100,6 +100,15 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@adraffy/ens-normalize", [\ + ["npm:1.10.0", {\ + "packageLocation": "./.yarn/cache/@adraffy-ens-normalize-npm-1.10.0-7dfdaa4813-5cdb5d2a9c.zip/node_modules/@adraffy/ens-normalize/",\ + "packageDependencies": [\ + ["@adraffy/ens-normalize", "npm:1.10.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@discoveryjs/json-ext", [\ ["npm:0.5.7", {\ "packageLocation": "./.yarn/cache/@discoveryjs-json-ext-npm-0.5.7-fe04af1f31-b95682a852.zip/node_modules/@discoveryjs/json-ext/",\ @@ -283,6 +292,25 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@noble/curves", [\ + ["npm:1.2.0", {\ + "packageLocation": "./.yarn/cache/@noble-curves-npm-1.2.0-9b40ee1239-94e02e9571.zip/node_modules/@noble/curves/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.2.0"],\ + ["@noble/hashes", "npm:1.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@noble/hashes", [\ + ["npm:1.3.2", {\ + "packageLocation": "./.yarn/cache/@noble-hashes-npm-1.3.2-1e619f9da0-685f59d2d4.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@nodelib/fs.scandir", [\ ["npm:2.1.5", {\ "packageLocation": "./.yarn/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-6ab2a9b8a1.zip/node_modules/@nodelib/fs.scandir/",\ @@ -412,6 +440,38 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["@scure/base", [\ + ["npm:1.1.5", {\ + "packageLocation": "./.yarn/cache/@scure-base-npm-1.1.5-d9203f3027-543fa9991c.zip/node_modules/@scure/base/",\ + "packageDependencies": [\ + ["@scure/base", "npm:1.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@scure/bip32", [\ + ["npm:1.3.2", {\ + "packageLocation": "./.yarn/cache/@scure-bip32-npm-1.3.2-3a1cfaf4f0-b90da28dfe.zip/node_modules/@scure/bip32/",\ + "packageDependencies": [\ + ["@scure/bip32", "npm:1.3.2"],\ + ["@noble/curves", "npm:1.2.0"],\ + ["@noble/hashes", "npm:1.3.2"],\ + ["@scure/base", "npm:1.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@scure/bip39", [\ + ["npm:1.2.1", {\ + "packageLocation": "./.yarn/cache/@scure-bip39-npm-1.2.1-f930930e61-2ea368bbed.zip/node_modules/@scure/bip39/",\ + "packageDependencies": [\ + ["@scure/bip39", "npm:1.2.1"],\ + ["@noble/hashes", "npm:1.3.2"],\ + ["@scure/base", "npm:1.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["@tootallnate/once", [\ ["npm:1.1.2", {\ "packageLocation": "./.yarn/cache/@tootallnate-once-npm-1.1.2-0517220057-e1fb1bbbc1.zip/node_modules/@tootallnate/once/",\ @@ -491,6 +551,14 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@types/node", [\ + ["npm:20.10.1", {\ + "packageLocation": "./.yarn/cache/@types-node-npm-20.10.1-55cf8269a8-703c3cc5bd.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:20.10.1"],\ + ["undici-types", "npm:5.26.5"]\ + ],\ + "linkType": "HARD"\ + }],\ ["npm:20.2.5", {\ "packageLocation": "./.yarn/cache/@types-node-npm-20.2.5-0014d2d9ce-37529473f0.zip/node_modules/@types/node/",\ "packageDependencies": [\ @@ -1067,6 +1135,32 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["abitype", [\ + ["npm:0.10.0", {\ + "packageLocation": "./.yarn/cache/abitype-npm-0.10.0-3207644c16-e9faa33067.zip/node_modules/abitype/",\ + "packageDependencies": [\ + ["abitype", "npm:0.10.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:0.10.0", {\ + "packageLocation": "./.yarn/__virtual__/abitype-virtual-cd846fa4fb/0/cache/abitype-npm-0.10.0-3207644c16-e9faa33067.zip/node_modules/abitype/",\ + "packageDependencies": [\ + ["abitype", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:0.10.0"],\ + ["@types/typescript", null],\ + ["@types/zod", null],\ + ["typescript", "patch:typescript@npm%3A5.3.2#optional!builtin::version=5.3.2&hash=e012d7"],\ + ["zod", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "@types/zod",\ + "typescript",\ + "zod"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["acorn", [\ ["npm:8.11.2", {\ "packageLocation": "./.yarn/cache/acorn-npm-8.11.2-a470f49bb6-ff559b8913.zip/node_modules/acorn/",\ @@ -2962,6 +3056,28 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["isows", [\ + ["npm:1.0.3", {\ + "packageLocation": "./.yarn/cache/isows-npm-1.0.3-aa8c925c69-9cacd5cf59.zip/node_modules/isows/",\ + "packageDependencies": [\ + ["isows", "npm:1.0.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:1.0.3", {\ + "packageLocation": "./.yarn/__virtual__/isows-virtual-3a7555e361/0/cache/isows-npm-1.0.3-aa8c925c69-9cacd5cf59.zip/node_modules/isows/",\ + "packageDependencies": [\ + ["isows", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:1.0.3"],\ + ["@types/ws", null],\ + ["ws", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:8.13.0"]\ + ],\ + "packagePeers": [\ + "@types/ws",\ + "ws"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["jackspeak", [\ ["npm:2.3.6", {\ "packageLocation": "./.yarn/cache/jackspeak-npm-2.3.6-42e1233172-6e6490d676.zip/node_modules/jackspeak/",\ @@ -3689,7 +3805,8 @@ const RAW_RUNTIME_STATE = ["workspace:toolchains/solidity", {\ "packageLocation": "./toolchains/solidity/",\ "packageDependencies": [\ - ["osmium-solidity", "workspace:toolchains/solidity"]\ + ["osmium-solidity", "workspace:toolchains/solidity"],\ + ["@types/node", "npm:20.10.1"]\ ],\ "linkType": "SOFT"\ }]\ @@ -3721,6 +3838,7 @@ const RAW_RUNTIME_STATE = ["mocha", "npm:10.2.0"],\ ["ts-loader", "virtual:2b9e7e7d573ed38308251d9cfa9bcac1c01394d20ff25d4a07b4a0345be370b65803551137c4363442bf76c7d6f9363387c180207a65457c6616ca7fd9b2a56b#npm:9.5.1"],\ ["typescript", "patch:typescript@npm%3A5.3.2#optional!builtin::version=5.3.2&hash=e012d7"],\ + ["viem", "virtual:2b9e7e7d573ed38308251d9cfa9bcac1c01394d20ff25d4a07b4a0345be370b65803551137c4363442bf76c7d6f9363387c180207a65457c6616ca7fd9b2a56b#npm:2.0.6"],\ ["vscode-languageclient", "npm:8.1.0"],\ ["vscode-languageserver", "npm:8.1.0"],\ ["vscode-languageserver-textdocument", "npm:1.0.11"],\ @@ -4936,6 +5054,36 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["viem", [\ + ["npm:2.0.6", {\ + "packageLocation": "./.yarn/cache/viem-npm-2.0.6-e905bab98a-256155940c.zip/node_modules/viem/",\ + "packageDependencies": [\ + ["viem", "npm:2.0.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2b9e7e7d573ed38308251d9cfa9bcac1c01394d20ff25d4a07b4a0345be370b65803551137c4363442bf76c7d6f9363387c180207a65457c6616ca7fd9b2a56b#npm:2.0.6", {\ + "packageLocation": "./.yarn/__virtual__/viem-virtual-f720cfab9b/0/cache/viem-npm-2.0.6-e905bab98a-256155940c.zip/node_modules/viem/",\ + "packageDependencies": [\ + ["viem", "virtual:2b9e7e7d573ed38308251d9cfa9bcac1c01394d20ff25d4a07b4a0345be370b65803551137c4363442bf76c7d6f9363387c180207a65457c6616ca7fd9b2a56b#npm:2.0.6"],\ + ["@adraffy/ens-normalize", "npm:1.10.0"],\ + ["@noble/curves", "npm:1.2.0"],\ + ["@noble/hashes", "npm:1.3.2"],\ + ["@scure/bip32", "npm:1.3.2"],\ + ["@scure/bip39", "npm:1.2.1"],\ + ["@types/typescript", null],\ + ["abitype", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:0.10.0"],\ + ["isows", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:1.0.3"],\ + ["typescript", "patch:typescript@npm%3A5.3.2#optional!builtin::version=5.3.2&hash=e012d7"],\ + ["ws", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:8.13.0"]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "typescript"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["vscode-jsonrpc", [\ ["npm:8.1.0", {\ "packageLocation": "./.yarn/cache/vscode-jsonrpc-npm-8.1.0-557f20ee72-e3378ae849.zip/node_modules/vscode-jsonrpc/",\ @@ -5188,6 +5336,32 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ + ["ws", [\ + ["npm:8.13.0", {\ + "packageLocation": "./.yarn/cache/ws-npm-8.13.0-26ffa3016a-1769532b6f.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:8.13.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:8.13.0", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-f8955fb976/0/cache/ws-npm-8.13.0-26ffa3016a-1769532b6f.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:f720cfab9be3fc03b645c8fcd87a23fa50dbfd551fafc630f6a2fd99db0b915684d6cdc7dd4848547e56f9f374016a86780aade8f7240024fe83b8e0a6d5314c#npm:8.13.0"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ ["xml2js", [\ ["npm:0.5.0", {\ "packageLocation": "./.yarn/cache/xml2js-npm-0.5.0-06e57a2771-27c4d75921.zip/node_modules/xml2js/",\ diff --git a/toolchains/solidity/extension/.osmium/contracts.json b/toolchains/solidity/extension/.osmium/contracts.json new file mode 100644 index 00000000..c4c9902b --- /dev/null +++ b/toolchains/solidity/extension/.osmium/contracts.json @@ -0,0 +1,26 @@ +{ + "contracts": [ + { + "name": "Contract 1", + "address": "0xabcabcabcabcabcabca", + "abi": [ + { + "constant": true, + "inputs": [], + "name": "name", + "outputs": [ + { + "name": "", + "type": "string" + } + ], + "payable": false, + "type": "function" + } + ], + "chain": "ETH", // viem chain + "rpc": "https://mainnet.infura.io/v3/1234567890", // viem public rpc url + "usedWallet": "0xabcabcabcabcabcabca" + } + ] +} \ No newline at end of file diff --git a/toolchains/solidity/extension/.osmium/wallets.json b/toolchains/solidity/extension/.osmium/wallets.json new file mode 100644 index 00000000..1b681ea7 --- /dev/null +++ b/toolchains/solidity/extension/.osmium/wallets.json @@ -0,0 +1,23 @@ +{ + "wallets": [ + { + "name": "wallet1", + "address": "0x1234567890", + "privateKey": "0x1234567890", + "rpc": "http://localhost:8545" + }, + ] +} + +/* + + WalletRepository: interaction avec wallets.json + CotnractsRepository: interaction avec contracts.json + Interact: + - async createContract(name, abi, address, rpc) + - async getContractsInfo -> liste des contrats(name, liste fonctions, adresse) + - async getWalletsInfos -> liste des wallets(name, adresse, balance) + - async createWallet(name, pKey or mnemonic, rpc) + - async readContract(addresse contrat, nom fonction, parametres) + - async writeContract(addresse contrat, nom fonction, parametres, adresse wallet, gas limit, value) + diff --git a/toolchains/solidity/extension/package.json b/toolchains/solidity/extension/package.json index 90305130..d78dc0ce 100644 --- a/toolchains/solidity/extension/package.json +++ b/toolchains/solidity/extension/package.json @@ -70,6 +70,7 @@ "extension:publish": "yarn run package && vsce publish --no-dependencies" }, "dependencies": { + "viem": "^2.0.6", "vscode-languageclient": "^8.1.0", "vscode-languageserver": "^8.1.0", "vscode-languageserver-textdocument": "^1.0.8" diff --git a/toolchains/solidity/extension/src/actions/ContractRepository.ts b/toolchains/solidity/extension/src/actions/ContractRepository.ts new file mode 100644 index 00000000..ebd682ca --- /dev/null +++ b/toolchains/solidity/extension/src/actions/ContractRepository.ts @@ -0,0 +1,54 @@ +import * as path from 'path'; +import * as fs from 'fs'; +import { Chain, Abi } from 'viem'; + +export interface Contract { + name: string; + address: `0x${string}`; + abi: Abi; + chain: Chain; + rpc: `ws://${string}` | `wss://${string}` | `http://${string}` | `https://${string}`; + usedWallet: `0x${string}`; +} + +export type Contracts = Contract[]; + +export class ContractRepository +{ + private _contracts: Contracts = []; + private _contractsPath: string; + + constructor(workspacePath: string) { + this._contractsPath = path.join(workspacePath, '.osmium', 'contracts.json'); + this._load(); + } + + private _load(): void { + if (!fs.existsSync(this._contractsPath)) { + this._contracts = []; + fs.writeFileSync(this._contractsPath, JSON.stringify({ contracts: this._contracts })); + } else { + const raw = fs.readFileSync(this._contractsPath); + const json = JSON.parse(raw.toString()); + this._contracts = json.contracts; + } + } + + private _save(): void { + const json = JSON.stringify({ contracts: this._contracts }); + fs.writeFileSync(this._contractsPath, json, { encoding: 'utf-8' }); + } + + getContracts(): Contracts { + return this._contracts; + } + + getContract(name: Contract['address']): Contract | undefined { + return this._contracts.find(c => c.address === name); + } + + createContract(contract: Contract): void { + this._contracts.push(contract); + this._save(); + } +} \ No newline at end of file diff --git a/toolchains/solidity/extension/src/actions/Interact.ts b/toolchains/solidity/extension/src/actions/Interact.ts new file mode 100644 index 00000000..6d7dd9fd --- /dev/null +++ b/toolchains/solidity/extension/src/actions/Interact.ts @@ -0,0 +1,76 @@ +import { getContract, createPublicClient, createWalletClient, webSocket, http, Chain, Abi} from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { ContractRepository } from "./ContractRepository"; +import { WalletRepository } from "./WalletRepository"; + +interface ReadContractOptions { + contract: `0x${string}`; + method: string; + params?: any[]; +} + +interface WriteContractOptions { + account: `0x${string}`; + address: `0x${string}`; + abi: Abi; + functionName: string; + params?: any[]; +} + +export class Interact { + private contractRepository: ContractRepository; + private walletRepository: WalletRepository; + + constructor(workspacePath: string) { + this.contractRepository = new ContractRepository(workspacePath); + this.walletRepository = new WalletRepository(workspacePath); + } + + async readContract({ contract, method, params }: ReadContractOptions): Promise { + const contractInfos = this.contractRepository.getContract(contract); + if (!contractInfos) { + throw new Error(`contract ${contract} not found`); + } + const viemContract = getContract({ + address: contractInfos.address, + abi: contractInfos.abi, + client: createPublicClient({ + chain: contractInfos.chain, + transport: contractInfos.rpc.startsWith("ws") ? webSocket(contractInfos.rpc) : http(contractInfos.rpc), + }) + }); + + const result = await viemContract.read[method]([params]); + + return result; + } + + async writeContract({ account, address, abi, functionName, params }: WriteContractOptions): Promise { + const walletInfos = this.walletRepository.getWallet(account); + if (!walletInfos) { + throw new Error(`wallet ${account} not found`); + } + const contract = this.contractRepository.getContract(address); + if (!contract) { + throw new Error(`contract ${address} not found`); + } + + const walletClient = createWalletClient({ + chain: contract.chain, + transport: walletInfos.rpc.startsWith("ws") + ? webSocket(walletInfos.rpc) + : http(walletInfos.rpc), + account: privateKeyToAccount(walletInfos.privateKey), + }); + + const viemContract = getContract({ + address, + abi, + client: walletClient, + }); + + const result = await viemContract.write[functionName]([params]); + + return result; + } +} diff --git a/toolchains/solidity/extension/src/actions/WalletRepository.ts b/toolchains/solidity/extension/src/actions/WalletRepository.ts new file mode 100644 index 00000000..25197365 --- /dev/null +++ b/toolchains/solidity/extension/src/actions/WalletRepository.ts @@ -0,0 +1,52 @@ +import * as path from "path"; +import * as fs from "fs"; + +export interface Wallet { + name: string; + address: `0x${string}`; + privateKey: `0x${string}`; + rpc: string; +} + +export class WalletRepository { + private _wallets: Wallet[] = []; + private _walletsPath: string; + + constructor(workspacePath: string) { + this._walletsPath = path.join(workspacePath, ".osmium", "wallets.json"); + if (fs.existsSync(this._walletsPath)) { + const walletData = fs.readFileSync(this._walletsPath, "utf8"); + const walletJson = JSON.parse(walletData); + this._wallets = walletJson.wallets; + } else { + fs.writeFileSync(this._walletsPath, JSON.stringify({ wallets: [] })); + this._wallets = []; + } + } + + public getWallets(): Wallet[] { + return this._wallets; + } + + public getWallet(address: `0x${string}`): Wallet | undefined { + return this._wallets.find((w) => w.address === address); + } + + public async createWallet(wallet: Wallet): Promise { + if (this._wallets.find((w) => w.address === wallet.address)) { + // replace + this._wallets = this._wallets.map((w) => { + if (w.address === wallet.address) { + return wallet; + } + return w; + }); + } else { + this._wallets.push(wallet); + } + + const walletJson = JSON.stringify({ wallets: this._wallets }); + fs.writeFileSync(this._walletsPath, walletJson, "utf8"); + return wallet; + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8ec74293..b39d27b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: 5cdb5d2a9c9f8c0a71a7bb830967da0069cae1f1235cd41ae11147e4000f368f6958386e622cd4d52bf45c1ed3f8275056b387cba28902b83354e40ff323ecde + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.0": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -152,6 +159,22 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 94e02e9571a9fd42a3263362451849d2f54405cb3ce9fa7c45bc6b9b36dcd7d1d20e2e1e14cfded24937a13d82f1e60eefc4d7a14982ce0bc219a9fc0f51d1f9 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 685f59d2d44d88e738114b71011d343a9f7dce9dfb0a121f1489132f9247baa60bc985e5ec6f3213d114fbd1e1168e7294644e46cbd0ce2eba37994f28eeb51b + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -254,6 +277,34 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.5 + resolution: "@scure/base@npm:1.1.5" + checksum: 543fa9991c6378b6a0d5ab7f1e27b30bb9c1e860d3ac81119b4213cfdf0ad7b61be004e06506e89de7ce0cec9391c17f5c082bb34c3b617a2ee6a04129f52481 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": "npm:~1.2.0" + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.2" + checksum: b90da28dfe75519496a85c97e77c9443734873910f32b8557762910a5c4e642290a462b0ed14fa42e0efed6acb9a7f6155ad5cb5d38d4ff87eb2de4760eb32a4 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": "npm:~1.3.0" + "@scure/base": "npm:~1.1.0" + checksum: 2ea368bbed34d6b1701c20683bf465e147f231a9e37e639b8c82f585d6f978bb0f3855fca7ceff04954ae248b3e313f5d322d0210614fb7acb402739415aaf31 + languageName: node + linkType: hard + "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" @@ -737,6 +788,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:0.10.0": + version: 0.10.0 + resolution: "abitype@npm:0.10.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: e9faa33067f787e1cd41d9d2b3e058d4bc94bf97cf4e72a63a2cda4c3b248b8feb231524c9b78b3dd6da945bad9135eceb01217bba8d891da2a487d48016e1ed + languageName: node + linkType: hard + "acorn-import-assertions@npm:^1.9.0": version: 1.9.0 resolution: "acorn-import-assertions@npm:1.9.0" @@ -2374,6 +2440,15 @@ __metadata: languageName: node linkType: hard +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + "jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -3044,6 +3119,7 @@ __metadata: mocha: "npm:^10.2.0" ts-loader: "npm:^9.4.3" typescript: "npm:^5.1.3" + viem: "npm:^2.0.6" vscode-languageclient: "npm:^8.1.0" vscode-languageserver: "npm:^8.1.0" vscode-languageserver-textdocument: "npm:^1.0.8" @@ -4120,6 +4196,27 @@ __metadata: languageName: node linkType: hard +"viem@npm:^2.0.6": + version: 2.0.6 + resolution: "viem@npm:2.0.6" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.0" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@scure/bip32": "npm:1.3.2" + "@scure/bip39": "npm:1.2.1" + abitype: "npm:0.10.0" + isows: "npm:1.0.3" + ws: "npm:8.13.0" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 256155940c1e71d87842da88d0ba58df7f5f916ec3256df500caae795a2af7b8f030c728d0f915a9ea6bd4432736aadcab20d6b47687e2a3d5477284e60a2ce8 + languageName: node + linkType: hard + "vscode-jsonrpc@npm:8.1.0": version: 8.1.0 resolution: "vscode-jsonrpc@npm:8.1.0" @@ -4335,6 +4432,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 1769532b6fdab9ff659f0b17810e7501831d34ecca23fd179ee64091dd93a51f42c59f6c7bb4c7a384b6c229aca8076fb312aa35626257c18081511ef62a161d + languageName: node + linkType: hard + "xml2js@npm:^0.5.0": version: 0.5.0 resolution: "xml2js@npm:0.5.0"