From 616b35b09c648ea3f05f3f01e8b979d17269854f Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Tue, 12 Mar 2024 12:52:39 +0100 Subject: [PATCH 1/4] add eslint and fix all the stuff --- .eslintrc.json | 29 + .github/workflows/ci.yaml | 27 + bun.lockb | Bin 73088 -> 120041 bytes examples/buy-nft.ts | 2 +- examples/mint-nft.ts | 2 +- examples/send-eth.ts | 2 +- examples/set-approval-for-all.ts | 4 +- examples/transfer-nft.ts | 2 +- package-lock.json | 3573 ++++++++++++++++++++++++++++++ package.json | 11 +- src/chains/ethereum.ts | 31 +- src/chains/near.ts | 6 +- src/types.ts | 24 + src/utils/interfaces.ts | 2 +- src/utils/kdf.ts | 68 +- 15 files changed, 3712 insertions(+), 71 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .github/workflows/ci.yaml create mode 100644 package-lock.json create mode 100644 src/types.ts diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..3b1318e --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,29 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "indent": ["error", 2], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "double"], + "semi": ["error","always"], + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/explicit-function-return-type": ["error", { + "allowExpressions": true, + "allowTypedFunctionExpressions": true + }] + } +} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..4bfc91c --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,27 @@ +name: Rust & Node.js CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + types: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Dependencies + run: npm install + + - name: Lint + run: npm run lint + + - name: Run Tests + run: npm test \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 2e4873695db4d980fa7bb40eb04390d867c35d8c..99147ea3ac0963e6569614608c9b8b77127814cf 100755 GIT binary patch delta 40455 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 ODq}te{Xb%-+5ZEOodI6} diff --git a/examples/buy-nft.ts b/examples/buy-nft.ts index 51b6ce4..8a19402 100644 --- a/examples/buy-nft.ts +++ b/examples/buy-nft.ts @@ -3,7 +3,7 @@ import { signAndSendTransaction } from "../src/chains/ethereum"; -const run = async () => { +const run = async (): Promise => { const sender = await deriveEthAddress("ethereum,1"); // TODO - encode call Data from OpenSeaSDK. // https://github.com/ProjectOpenSea/opensea-js/blob/main/developerDocs/advanced-use-cases.md diff --git a/examples/mint-nft.ts b/examples/mint-nft.ts index 477173b..cc03915 100644 --- a/examples/mint-nft.ts +++ b/examples/mint-nft.ts @@ -4,7 +4,7 @@ import { web3, } from "../src/chains/ethereum"; -const run = async () => { +const run = async (): Promise => { const ethAddress = await deriveEthAddress("ethereum,1"); const functionSignature = web3.eth.abi.encodeFunctionCall( { diff --git a/examples/send-eth.ts b/examples/send-eth.ts index fcde9b6..c24591b 100644 --- a/examples/send-eth.ts +++ b/examples/send-eth.ts @@ -3,7 +3,7 @@ import { signAndSendTransaction } from "../src/chains/ethereum"; -const run = async () => { +const run = async (): Promise => { const ethAddress = await deriveEthAddress("ethereum,1"); await signAndSendTransaction( diff --git a/examples/set-approval-for-all.ts b/examples/set-approval-for-all.ts index a00baba..1215ae0 100644 --- a/examples/set-approval-for-all.ts +++ b/examples/set-approval-for-all.ts @@ -4,11 +4,11 @@ import { } from "../src/chains/ethereum"; import { erc721Interface -} from "../src/utils/interfaces" +} from "../src/utils/interfaces"; -const run = async () => { +const run = async (): Promise => { const sender = await deriveEthAddress("ethereum,1"); const value = 0; diff --git a/examples/transfer-nft.ts b/examples/transfer-nft.ts index 7414536..ae630d0 100644 --- a/examples/transfer-nft.ts +++ b/examples/transfer-nft.ts @@ -4,7 +4,7 @@ import { } from "../src/chains/ethereum"; import { erc721Interface } from "../src/utils/interfaces"; -const run = async () => { +const run = async (): Promise => { const sender = await deriveEthAddress("ethereum,1"); const value = 0; // TODO retrieve from user: diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..f43465c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3573 @@ +{ + "name": "near-ca", + "version": "0.0.0-alpha.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "near-ca", + "version": "0.0.0-alpha.1", + "dependencies": { + "@ethereumjs/common": "^4.2.0", + "@ethereumjs/tx": "^5.2.1", + "@ethereumjs/util": "^9.0.2", + "@near-js/accounts": "^1.0.3", + "@near-js/crypto": "^1.2.1", + "@near-js/keystores": "^0.0.9", + "bn.js": "^5.2.1", + "bs58check": "^3.0.1", + "elliptic": "^6.5.5", + "ethers": "^5.7.2", + "hash.js": "^1.1.7", + "keccak": "^3.0.4", + "near-api-js": "^3.0.3", + "typescript": "^5.4.2", + "web3": "^4.5.0" + }, + "devDependencies": { + "@types/bn.js": "^5.1.5", + "@types/bun": "latest", + "@types/elliptic": "^6.4.18", + "@types/keccak": "^3.0.4", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "eslint": "^8.57.0", + "typescript": "^5.4.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethereumjs/common": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "@ethereumjs/util": "^9.0.2" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^4.2.0", + "@ethereumjs/rlp": "^5.0.2", + "@ethereumjs/util": "^9.0.2", + "ethereum-cryptography": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@ethereumjs/util": { + "version": "9.0.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "ethereum-cryptography": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@near-js/accounts": { + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/providers": "0.1.0", + "@near-js/signers": "0.1.1", + "@near-js/transactions": "1.1.1", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "ajv": "8.11.2", + "ajv-formats": "2.1.1", + "bn.js": "5.2.1", + "borsh": "1.0.0", + "depd": "2.0.0", + "lru_map": "0.4.1", + "near-abi": "0.1.1" + } + }, + "node_modules/@near-js/accounts/node_modules/ajv": { + "version": "8.11.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@near-js/accounts/node_modules/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@near-js/crypto": { + "version": "1.2.1", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "@noble/curves": "1.2.0", + "bn.js": "5.2.1", + "borsh": "1.0.0", + "randombytes": "2.1.0" + } + }, + "node_modules/@near-js/keystores": { + "version": "0.0.9", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/types": "0.0.4" + } + }, + "node_modules/@near-js/keystores-browser": { + "version": "0.0.9", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/keystores": "0.0.9" + } + }, + "node_modules/@near-js/keystores-node": { + "version": "0.0.9", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/keystores": "0.0.9" + } + }, + "node_modules/@near-js/providers": { + "version": "0.1.0", + "license": "ISC", + "dependencies": { + "@near-js/transactions": "1.1.1", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "bn.js": "5.2.1", + "borsh": "1.0.0", + "http-errors": "1.7.2" + }, + "optionalDependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/@near-js/signers": { + "version": "0.1.1", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/keystores": "0.0.9", + "@noble/hashes": "1.3.3" + } + }, + "node_modules/@near-js/transactions": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "@near-js/crypto": "1.2.1", + "@near-js/signers": "0.1.1", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "@noble/hashes": "1.3.3", + "bn.js": "5.2.1", + "borsh": "1.0.0" + } + }, + "node_modules/@near-js/types": { + "version": "0.0.4", + "license": "ISC", + "dependencies": { + "bn.js": "5.2.1" + } + }, + "node_modules/@near-js/utils": { + "version": "0.1.0", + "license": "ISC", + "dependencies": { + "@near-js/types": "0.0.4", + "bn.js": "5.2.1", + "bs58": "4.0.0", + "depd": "2.0.0", + "mustache": "4.0.0" + } + }, + "node_modules/@near-js/utils/node_modules/bs58": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "base-x": "^2.0.1" + } + }, + "node_modules/@near-js/utils/node_modules/bs58/node_modules/base-x": { + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4.5.0" + } + }, + "node_modules/@near-js/wallet-account": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "@near-js/accounts": "1.0.3", + "@near-js/crypto": "1.2.1", + "@near-js/keystores": "0.0.9", + "@near-js/signers": "0.1.1", + "@near-js/transactions": "1.1.1", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "bn.js": "5.2.1", + "borsh": "1.0.0" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/bun": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.0.8.tgz", + "integrity": "sha512-E6UWZuN4ymAxzUBWVIGDHJ3Zey7I8cMzDZ+cB1BqhZsmd1uPb9iAQzpWMruY1mKzsuD3R+dZPoBkZz8QL1KhSA==", + "dev": true, + "dependencies": { + "bun-types": "1.0.29" + } + }, + "node_modules/@types/elliptic": { + "version": "6.4.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bn.js": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/keccak": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.11.24", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/abitype": { + "version": "0.7.1", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base-x": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/bech32": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/borsh": { + "version": "1.0.0", + "license": "Apache-2.0" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/bs58": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/bs58check": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, + "node_modules/bun-types": { + "version": "1.0.29", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "~20.11.3", + "@types/ws": "~8.5.10" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.5", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.1.3", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/ethereum-cryptography/node_modules/@noble/curves": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-errors": { + "version": "1.7.2", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/keccak": { + "version": "3.0.4", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lru_map": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/mustache": { + "version": "4.0.0", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + }, + "engines": { + "npm": ">=1.4.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/near-abi": { + "version": "0.1.1", + "license": "(MIT AND Apache-2.0)", + "dependencies": { + "@types/json-schema": "^7.0.11" + } + }, + "node_modules/near-api-js": { + "version": "3.0.3", + "license": "(MIT AND Apache-2.0)", + "dependencies": { + "@near-js/accounts": "1.0.3", + "@near-js/crypto": "1.2.1", + "@near-js/keystores": "0.0.9", + "@near-js/keystores-browser": "0.0.9", + "@near-js/keystores-node": "0.0.9", + "@near-js/providers": "0.1.0", + "@near-js/signers": "0.1.1", + "@near-js/transactions": "1.1.1", + "@near-js/types": "0.0.4", + "@near-js/utils": "0.1.0", + "@near-js/wallet-account": "1.1.0", + "@noble/curves": "1.2.0", + "ajv": "8.11.2", + "ajv-formats": "2.1.1", + "bn.js": "5.2.1", + "borsh": "1.0.0", + "depd": "2.0.0", + "http-errors": "1.7.2", + "near-abi": "0.1.1", + "node-fetch": "2.6.7" + } + }, + "node_modules/near-api-js/node_modules/ajv": { + "version": "8.11.2", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/near-api-js/node_modules/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.0", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.2", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/web3": { + "version": "4.6.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth": "^4.5.0", + "web3-eth-abi": "^4.2.0", + "web3-eth-accounts": "^4.1.1", + "web3-eth-contract": "^4.2.0", + "web3-eth-ens": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.0.8", + "web3-net": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.2.0", + "web3-types": "^1.5.0", + "web3-utils": "^4.2.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-core": { + "version": "4.3.2", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.4", + "web3-eth-accounts": "^4.1.0", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.1.0", + "web3-providers-ws": "^4.0.7", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.0", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + } + }, + "node_modules/web3-errors": { + "version": "1.1.4", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.3.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth": { + "version": "4.5.0", + "license": "LGPL-3.0", + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth-abi": "^4.2.0", + "web3-eth-accounts": "^4.1.1", + "web3-net": "^4.0.7", + "web3-providers-ws": "^4.0.7", + "web3-rpc-methods": "^1.2.0", + "web3-types": "^1.5.0", + "web3-utils": "^4.2.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.2.0", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "4.1.1", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.2.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth": "^4.4.0", + "web3-eth-abi": "^4.2.0", + "web3-types": "^1.3.1", + "web3-utils": "^4.1.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "4.1.0", + "license": "LGPL-3.0", + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.3.2", + "web3-errors": "^1.1.4", + "web3-eth": "^4.5.0", + "web3-eth-contract": "^4.2.0", + "web3-net": "^4.0.7", + "web3-types": "^1.5.0", + "web3-utils": "^4.2.1", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "4.0.7", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "4.0.8", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.3.0", + "web3-eth": "^4.3.1", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-net": { + "version": "4.0.7", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.3.0", + "web3-rpc-methods": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http": { + "version": "4.1.0", + "license": "LGPL-3.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "4.0.7", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "4.0.7", + "license": "LGPL-3.0", + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "ws": "^8.8.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws/node_modules/@types/ws": { + "version": "8.5.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/web3-providers-ws/node_modules/ws": { + "version": "8.16.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/web3-rpc-methods": { + "version": "1.2.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.3.2", + "web3-types": "^1.5.0", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.5.0", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "4.2.1", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.1.4", + "web3-types": "^1.5.0", + "web3-validator": "^2.0.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.4", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.1.4", + "web3-types": "^1.3.1", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.14", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json index 4a05717..cbca153 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,17 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { - "build": "rm -rf ./dist && tsc" + "build": "rm -rf ./dist && tsc", + "lint": "eslint . --ext .ts,.tsx" }, "devDependencies": { "@types/bn.js": "^5.1.5", "@types/bun": "latest", "@types/elliptic": "^6.4.18", "@types/keccak": "^3.0.4", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "eslint": "^8.57.0", "typescript": "^5.4.2" }, "dependencies": { @@ -29,8 +33,7 @@ "hash.js": "^1.1.7", "keccak": "^3.0.4", "near-api-js": "^3.0.3", - "web3": "^4.5.0", - "typescript": "^5.0.0" - + "typescript": "^5.4.2", + "web3": "^4.5.0" } } diff --git a/src/chains/ethereum.ts b/src/chains/ethereum.ts index 35a9b3a..2c0acb4 100644 --- a/src/chains/ethereum.ts +++ b/src/chains/ethereum.ts @@ -5,13 +5,14 @@ import { BN } from "bn.js"; import { providers } from "ethers"; import { Contract, providers as nearProviders } from "near-api-js"; import { functionCall } from "near-api-js/lib/transaction"; -import Web3 from "web3"; +import {Web3, Bytes} from "web3"; import { deriveChildPublicKey, najPublicKeyStrToUncompressedHexPoint, uncompressedHexPointToEvmAddress, } from "../utils/kdf"; import { NO_DEPOSIT, getNearAccount, provider as nearProvider } from "./near"; +import { GasPriceResponse, GasPrices, TxPayload } from "../types"; const config = { chainId: 11155111, @@ -23,8 +24,8 @@ export const web3 = new Web3(config.providerUrl); export const common = new Common({ chain: config.chain }); export const provider = new providers.JsonRpcProvider(config.providerUrl); -export const deriveEthAddress = async (derivationPath: string) => { - const { account } = await getNearAccount(); +export const deriveEthAddress = async (derivationPath: string): Promise => { + const account = await getNearAccount(); const multichainContract = new Contract( account, process.env.NEAR_MULTICHAIN_CONTRACT!, @@ -35,7 +36,6 @@ export const deriveEthAddress = async (derivationPath: string) => { } ); - // @ts-ignore const rootPublicKey = await multichainContract.public_key(); const publicKey = await deriveChildPublicKey( @@ -47,12 +47,11 @@ export const deriveEthAddress = async (derivationPath: string) => { return uncompressedHexPointToEvmAddress(publicKey); }; -async function queryGasPrice() { +async function queryGasPrice(): Promise { const res = await fetch( "https://sepolia.beaconcha.in/api/v1/execution/gasnow" ); - const json = await res.json(); - // @ts-ignore + const json = await res.json() as GasPriceResponse; const maxPriorityFeePerGas = BigInt(json.data.rapid); // Since we don't have a direct `baseFeePerGas`, we'll use a workaround. @@ -62,7 +61,7 @@ async function queryGasPrice() { const buffer = BigInt(2 * 1e9); // Example buffer of 2 Gwei, assuming the API values are in WEI const maxFeePerGas = maxPriorityFeePerGas + buffer; const returnData = { maxFeePerGas, maxPriorityFeePerGas }; - console.log("Gas estimates", returnData) + console.log("Gas estimates", returnData); return { maxFeePerGas, maxPriorityFeePerGas }; } @@ -71,7 +70,7 @@ export const createPayload = async ( receiver: string, amount: number, data?: string -) => { +): Promise => { const nonce = await web3.eth.getTransactionCount(sender); const { maxFeePerGas, maxPriorityFeePerGas } = await queryGasPrice(); @@ -108,7 +107,7 @@ export const reconstructSignature = ( big_r: string, big_s: string, sender: string -) => { +): FeeMarketEIP1559Transaction => { const r = Buffer.from(big_r.substring(2), "hex"); const s = Buffer.from(big_s, "hex"); @@ -127,15 +126,15 @@ export const reconstructSignature = ( export const relayTransaction = async ( signedTransaction: FeeMarketEIP1559Transaction -) => { +): Promise => { const serializedTx = bytesToHex(signedTransaction.serialize()); const relayed = await web3.eth.sendSignedTransaction(serializedTx); console.log("Transaction Confirmed:", relayed.transactionHash); return relayed.transactionHash; }; -export const requestSignature = async (payload: number[], path: string) => { - const { account } = await getNearAccount(); +export const requestSignature = async (payload: number[], path: string): Promise<{big_r: string, big_s: string}> => { + const account = await getNearAccount(); const multichainContract = new Contract( account, @@ -166,7 +165,7 @@ export const requestSignature = async (payload: number[], path: string) => { const [big_r, big_s] = await nearProviders.getTransactionLastResult( transaction ); - + console.log(big_r, big_s); return { big_r, big_s }; }; @@ -178,8 +177,8 @@ export const signAndSendTransaction = async ( options?: { path: string; } -) => { - console.log("Create Paylod for", sender); +): Promise => { + console.log("Creating Payload for sender:", sender); const { transaction, payload } = await createPayload( sender, receiver, diff --git a/src/chains/near.ts b/src/chains/near.ts index 606df93..20b4dd9 100644 --- a/src/chains/near.ts +++ b/src/chains/near.ts @@ -1,4 +1,4 @@ -import { keyStores, KeyPair, connect, providers } from "near-api-js"; +import { keyStores, KeyPair, connect, providers, Account } from "near-api-js"; export const TGAS = 1000000000000; export const THIRTY_TGAS = "30000000000000"; @@ -13,7 +13,7 @@ export const provider = new providers.JsonRpcProvider({ url: nearConfig.nodeUrl, }); -export const getNearAccount = async () => { +export const getNearAccount = async (): Promise => { const keyStore = new keyStores.InMemoryKeyStore(); const keyPair = KeyPair.fromString(process.env.NEAR_ACCOUNT_PRIVATE_KEY!); @@ -23,5 +23,5 @@ export const getNearAccount = async () => { const near = await connect({ ...nearConfig, keyStore }); const account = await near.account(process.env.NEAR_ACCOUNT_ID!); - return { account, nearConfig }; + return account; }; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..ce1b513 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,24 @@ +import { FeeMarketEIP1559Transaction } from "@ethereumjs/tx"; + +export interface GasPriceResponse { + code: number; + data: { + rapid: number; + fast: number; + standard: number; + slow: number; + timestamp: number; + price: number; + priceUSD: number; + }; +} + +export interface GasPrices { + maxFeePerGas: bigint; + maxPriorityFeePerGas: bigint; +} + +export interface TxPayload { + transaction: FeeMarketEIP1559Transaction, + payload: number[] +} \ No newline at end of file diff --git a/src/utils/interfaces.ts b/src/utils/interfaces.ts index 2313833..9828903 100644 --- a/src/utils/interfaces.ts +++ b/src/utils/interfaces.ts @@ -1,5 +1,5 @@ import { ethers } from "ethers"; -import erc721ABI from '../abis/ERC721.json'; +import erc721ABI from "../abis/ERC721.json"; export function erc721Interface(): ethers.utils.Interface { return new ethers.utils.Interface(erc721ABI); diff --git a/src/utils/kdf.ts b/src/utils/kdf.ts index 3599f6b..247d229 100644 --- a/src/utils/kdf.ts +++ b/src/utils/kdf.ts @@ -2,43 +2,21 @@ import { base_decode } from "near-api-js/lib/utils/serialize"; import { ec as EC } from "elliptic"; import BN from "bn.js"; import keccak from "keccak"; -import hash from "hash.js"; -import bs58check from "bs58check"; -export const najPublicKeyStrToUncompressedHexPoint = ( +export function najPublicKeyStrToUncompressedHexPoint( najPublicKeyStr: string -) => { - return ( - "04" + - Buffer.from(base_decode(najPublicKeyStr.split(":")[1])).toString("hex") - ); -}; - -const sha256Hash = async (str: string) => { - const encoder = new TextEncoder(); - const data = encoder.encode(str); - - const hashBuffer = await crypto.subtle.digest("SHA-256", data); - - const hashArray = [...new Uint8Array(hashBuffer)]; - return hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); -}; - -const sha256StringToScalarLittleEndian = (hashString: string) => { - const littleEndianString = hashString.match(/../g)!.reverse().join(""); - - const scalar = new BN(littleEndianString, 16); +): string { + const decodedKey = base_decode(najPublicKeyStr.split(":")[1]); + return "04" + Buffer.from(decodedKey).toString("hex"); +} - return scalar; -}; - -export const deriveChildPublicKey = async ( +export async function deriveChildPublicKey( parentUncompressedPublicKeyHex: string, signerId: string, path = "" -) => { +): Promise { const ec = new EC("secp256k1"); - let scalar: string = await sha256Hash( + const scalar = await sha256Hash( `near-mpc-recovery v0.1.0 epsilon derivation:${signerId},${path}` ); @@ -55,21 +33,29 @@ export const deriveChildPublicKey = async ( // Add the result to the old public key point const newPublicKeyPoint = oldPublicKeyPoint.add(scalarTimesG); + const newX = newPublicKeyPoint.getX().toString("hex").padStart(64, "0"); + const newY = newPublicKeyPoint.getY().toString("hex").padStart(64, "0"); + return "04" + newX + newY; +} - return ( - "04" + - (newPublicKeyPoint.getX().toString("hex").padStart(64, "0") + - newPublicKeyPoint.getY().toString("hex").padStart(64, "0")) - ); -}; - -export const uncompressedHexPointToEvmAddress = ( - uncompressedHexPoint: string -) => { +export function uncompressedHexPointToEvmAddress(uncompressedHexPoint: string): string { const address = keccak("keccak256") .update(Buffer.from(uncompressedHexPoint.substring(2), "hex")) .digest("hex"); // Ethereum address is last 20 bytes of hash (40 characters), prefixed with 0x return "0x" + address.substring(address.length - 40); -}; +} + +async function sha256Hash(str: string): Promise { + const encoder = new TextEncoder(); + const data = encoder.encode(str); + const hashBuffer = await crypto.subtle.digest("SHA-256", data); + const hashArray = [...new Uint8Array(hashBuffer)]; + return hashArray.map((b) => b.toString(16).padStart(2, "0")).join(""); +} + +function sha256StringToScalarLittleEndian(hashString: string): BN { + const littleEndianString = hashString.match(/../g)!.reverse().join(""); + return new BN(littleEndianString, 16); +} From 56a76b20d5a5aa5abdfb02db7808305869681e3e Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Tue, 12 Mar 2024 14:32:19 +0100 Subject: [PATCH 2/4] remove test from ci --- .github/workflows/ci.yaml | 6 +- bun.lockb | Bin 120041 -> 0 bytes examples/send-eth.ts | 4 +- package-lock.json | 635 +++++++++++++++++++++++++++++++++++++- package.json | 5 +- src/chains/ethereum.ts | 6 +- src/index.ts | 1 - tsconfig.json | 6 +- 8 files changed, 648 insertions(+), 15 deletions(-) delete mode 100755 bun.lockb diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4bfc91c..0c18430 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,4 +1,4 @@ -name: Rust & Node.js CI +name: Node.js CI on: push: @@ -23,5 +23,5 @@ jobs: - name: Lint run: npm run lint - - name: Run Tests - run: npm test \ No newline at end of file + # - name: Run Tests + # run: npm test \ No newline at end of file diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 99147ea3ac0963e6569614608c9b8b77127814cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120041 zcmeFZc{r6_`#!$0$s7?SGZ`|4s7M(zgvgK*GE?RuW1?h;h>Ve0MT$s>qNt3ODMW@; z%2;TU^j#}^_1^DuywB6t^ZVy_9G`V`?{lx=Jg;kAYq-~a+edsn65gI35>}2b61FbK zxUIZhsKF)Xdu`)JTt60Z>G;2=pq5FaJY@jfTR4G!~McwLY|SA&;Vy`Ddu8p>4EdHwUUOFPe27d z4j1h2YV)&gHONzgJU>7hfZkq?POxGZ84kw?^0xu52Dlo(TyO8{_LCR^@^qlw!P3*! z#|4KQCgi68Qi1Xw0)qaD*;-mVtfN@w-vD~B{u;t3D2J&kF(t|uR%!76; z08fH0vH_F?dFVGgz_kDw0MY_zhkEh^JJuf7V$xE81B`;E!EoHb2znhue!#q~ zmxBbzLwlB1j$VFlwz#7}3);~I;;`I|P_Iqks3{4T8oB&kK%BuT+8*B0Ydw!1Vr;tmXH@BAXpy`Fp}Op%XYxf*?Iu` zsr<|HUJM`{7d^h^cs$@;E>9)k4S>+EI8eVH;75=LLm9jcThE_y4kXmS0|@=5B;-#6e_+4Nfeu6# zfKay()Wd$E^=4&j?Eu%q3(y{xQv-zlBY%6qnEv$hFY_`Hl*4(2)=@af!}0P4_>=GH ziL>n7&tiE9Kr zIDcvZLciE$m-E2@AsdpAoDPupNn4%<0;irG84 zTH#8!E%UuWIb08p_Aag-wm6&<$U{4@k)@L-ZeTkh{)BdRjxIK0-fp-|xn*7g0o~v& z$kGcq?d0g}=!Hv=U#`~&JQ%l)I|%+dI(t~!;c!2l0R4Xs%3-~$i#4#0!})kvy1Ds* zeaywq$j|ib{vEaTI|l1_>|D;eb36QH}dt%n~@aM!XOTTeF+ zTcEfT*oX5Z8kA#0P+lGnQkCU>*Ui$)K@2!+?O^EymN)JpD2H(e>sAc-Y+nuX zP$x!px%~@(a2(Nog7%GlYRl_rQF3`6PXdH-va|H`atFE|w%(qOc7C`^yO;atqrTjq zdVp}g*aL*^9|Im-uVnz?dit(`!+|X+xB%p#-Bf_E-Gt_{&JaKtmsG7~j0OnrCxUyH z;}i_q!})0i5bEv&zQBCFHVy~2sNisba9w2r1WPcuM`u~b)7JTztp^Tgqr0r*X9+e4 zPcPhG=QW%cR$%-+oxny1w4H4|>}^5pFYaCD?bciNI~pJyPb&{gYg;fzWcthHngC(E z(*XV)Z^F3QIC}h?_=dn?SRN1b;5gU=Ke+*dW0}B@GAr_Y-l2V@(@%c(NLH4KU$&-<^)S`!tEB zZ$8oF7LEHZ^VwqyDw##^DTvJ2e z=5f}IRQrzW_wN3_tFYUo@L^O**ymME#}1blnJ~%U-mnt_ycm z%s=RDpN9UUV=O&#n?!?Jcc#eRuVwFFwQ$nA`Op`RE56j%?pRD6SIf-TyC%}E_=e=g z<;W>p0ZSouR&~}X#iMpVQoWPH={**B1U)sp?_az0`DqmES*C(&rd4>&K^4MzL_qn6*Q~9AP<*gMZUwQPhGhWeF ze4iH=qFcx>B z#$ZvA)3#PAm#+ovJH|FR?nQx5wwxZ#Zl=tqXD2m|r5@Ny=jMI>*=nId9)OZhqp&P$wAcRR{z$m)@T9*@wtDUC-v^uQR?XHFQOmD z(a^3E8`*GwKJ+Nb2cMlYwslVD#F1YS-6h#!VpKVe@3s_qmkdrG)M47q>Q2etxlz-8 zIC<3l;3S4nvKtQa~p;ysYewY&Mbs8nDQJwz14K`E@MoAREBf! z111HDJsYknGtOb?;!RZt$ z-N%J)!yEEJXUgIeIGNMli}i;EIkWEYjX3ePefCi={Wa?FlDQA3f-LcjA&UGVE+p#Z zYvjxvcSJ^y2E29Ha$An-Vk4Rlhs-X7Xfhdhwgs?k88h2Edrsm`w2sOW{~=t#>aSm8 zL&&C8Tm-4tsP;}wJWhL|64z_vHO0*MjOv>12eBSr;}3=c?^m1XJ${nj;HIwb5f$XD z&9U@Z*nf1@#(wPtdCB-6@}jS=`kBa}^~N*6Zb`e!+`GuPA&gZ+LTcZ9Ewinr<@NqYb8&zWxA$Fxd3n6>JBt3GZem(#o|O}SA=Q`_{+wj{9xp87RS zWlbmImFA{@_FAsOK+@ zS|8;5gxb9k-|Hq_1a!K(r{q&XX@x%vEp|t#g(Om zI_|BJ|7f8d-;xnlt#ai%{U!Q0j`VEh`kv~6OxafEBbSZ!TXZcMZa(Va+p+4jUwGI@ zGrj2Vp3R#iF7K>+bK2^-lvCMU^AiXAN5U4tJ|lLk3%>X}eT>;-VYmP6G}{4PwFfQZ z$FR6dFMZStxa_n=CmqI zu-e<6HPm(e7FVI~rr`~Nbqy}hq(8o;D-*Iks*n)j-Z}8-606z~mYN8uvFmQlsz3pBSAn65cKLw0=6~ z6mH81Tl2%bn+@INJ+T^kK~6OTH_D1yont=d?w#FzMRfmjgEiwlife~bfTfKWBY&J+qZNzk(vo z>TT^Ng-RB%{cwWoIlV7Y}STIp; zxyoabvvB$c{{$`fdYY3PrA8w9y>93>Q+n1IUA<1a`h#8Hu2LhhZLdiO!U9twrCs9s zHAza_4~G|UylCt$Rr~aKt%g$G{E@e7HD4Rk#q*E8Z#eFj-qYGSn_TjYEs$sSuk$*l z_wWf0mmghI7pa(qZO=ZQzqBTuG~Vu<hssj=gosw&-Z;Mzn!He$WB=8{hFA^z%I{|PrIEUc@ zf>%F8C&YgN905o1V3dbC#3a;S7JQKad@?|SXT+8AZ2=!V>IB1hkP~B=&<5Gh24BFV z(N8|qSgHLXzz0YAU?>aEw8Z*=?CXJ!gGYp4_Q4sPsD$`UfDayJe)1s^mH$ozwPOPv zM*W8zI1a=l#5VzaIDgQ5MEE-m#7_i#Wda|TfhgQLmB#N9hEFUP`iATe13q{q5e&;9pI8mV=L3r#jXx|~1%-%6h;Iq_ z*#57SUkCW$(e`Kjpyo=)PYxI~!Nec=^}8;hcJY7@9%X-x-|u*+9`OeOA3Re3|Nn#^@E7|;IS(2k|8D_4ynn-W1It!A{yzX;8SqiuR?1fb zH*F0<{E$z?^Z~Vv1bn#vLH}X=Q2FmPP`hrxhx-rOH&(j-dBB3z`WO5Vz!w92unoZX znM5b#|3ko627DBMVg(SN5*&D>3HG7JO4r|Rz=!b%@1Ws(N%#(xsD$iC1HKZ$e>T7* zwjYS!2Kc&w566$#xd$CYd;#!M6yAT)_`^D465_i6K3qRAPwd=*`iOs%z$dof$T!3% z1(OEOUo>vS#sKkk0e>^#BVD9}@_&bj9|ZWyfRExwYzz>;4)D?XfxfTQe*wnj^C#p% zO{DvGexq{K?jYc!{R7sm)P4fs!~5T#_P-VIQU9TRxDODMkpC=e{$qb7a|rPd0=^=_ ze^j;-`xgKo{3$OOa^TpnG=5`%57!UcdsaIC_?VXcM|O#g0qUzYfe*(IX~4exE+Kvu z;G^+FWxwOXdeoK-Y@BfYLfh2D5D9G%e=p#p_`yD)^503Jc2R&2_dgVOgv9dw!5_VK z2>$;`{2l>5JU>Buf5ImPFD(!sYQPu}lTiN^0AC8&hw}!O5$glu9|wHw`X|OVY=ija zfDiXylwT?THGxlTzmYz&w-)@^U<<}RcpM}uA-*Bt!};^4@rwt16~ISE!Q%u`3EA%k zdQm|0~^pS^*!;A7Xunz9RougF`1ezrne` z((}t6z=!h(+J;=D3%>qiLhXtHUlG&)eHcYZvJvJM^5(Hc8|`0)IKbXR)+$p(Cbf5D#zd^mo{Z#ag; zB-DQc@Z%*o{~;glU#R?d8mL`4;Hv^Yia#nRmj4yQM}7Dm7uF*?3f%vhf3SR|{jUIg z=s)BU`|JemAp744e3VBB+x$~P?RN1j?;kLJ@Iw30KXG9l;zs~JTtAQt6T;=(-+vqN3kW5AaNeAsXB zrwF1G;**HraO!}M;!ms(h_3*kO zmjL+xCVoAD|8Mqh7O{V4{{Y}CVdl?D`+wnI^7{cFJAYSdpI7|9?_X$Key4-l9R++a z1V5i2;TnYd5HShylK~&jA2{#ewbK2on|8{^6&ri^A zs6lKWkpJm`znfs6ST3}M_%8t;?O&)5u>N-m@kN01@csq4@S^!0kx-BLX8<3KAFP5J z#3aOj2>7Z5`;dpqf2V=kQE$cJ6agQ`4vrlvCzh`T_#PPhEA_t_@ZtDF`^0jgZ@>Hm zn0)P5Tv!}y_fkC52@2Le9wA97a8uK|2G{?H%j`%3-)0{A-tA5edCVH}A` zsQIla301F?OUjvSiU*n!|_M=pWpFNJ+f0su)mVnK@G%z`xpO_{_ha+1wim%{QuN{ zbHIoFU&-9T`kx8-*!lZAzfnE%{{`T~`!5>5mCj!Yu=wEmgZ?8;WaFO@wLJ>RaQ&cl zkIMgv3+qt3Ou&ct|5b!Cq(dx!9PnZPQNIxq%a;NV570j3tz-@&|E&NY_8-|r<;2=g z0(?0C5Fd>rvHZt?59bf!|Bi?1k)O1H4EqoJ4%Yy&F+hBEz=!tHxDo3I;-3a&w0@w* zO8M0UKGH*epnm=xqV^vMd}wzidjR4~f|nO?{Xj0UwxLgm?+o~G{=l<09Q&2_zYy?s z3Gs(xN30LX{ujUpTj($UQ8|$M$AsD$DgNj8v+(Sb83|J~xBbBMoM zW%>8J#P%DhBECN0qw$CFhZivk@go5rjsKsFUl-u362=c{uEhR2K!*MkJMWM-vZV+3 zaQ;C4N@9rkX@IW`_$a^9_>BQR+<#H*p&!H~WRFj6`S&Mq@1+ITO7Fi;fUgJaLz~d{ zO8u_^{6mEP6U&9RkpJtzY{|z|Z)>GWZ^hn1uLMfDc|F{p5q6 za<91mlYkHJ|ETXP9Y0?1@&SbK*ZxONjPsxk^8XazD`NUjB>fk^1Moo?e#MX2HGu4| z1BX`_f0SRT|N8;oh+rT3j^g;cejs~AfUghuusytg)59-BB*b5@xy(m-gujzO?T!FG zcm?&x?_VKQQMb*ZvgE7DPKlsdH?xSzCYlb{R{h}fUgMnaNPf7{%r=6A3lFT z|0xKuAqG(VoB+k$V<)|GUxcNc<;rxebrS|s&zAE6Oey^0D z2lz1l$o{eyzyC!34+1_se?$AwHY)#}0&2$&HedAo0y!)7-wg1f|7iSwXBX8Y`^kV0 z{fBvCZ9@&j?*@E${`u4WcN5tB{|)~p;H&)$`xJ)D@9&}ia12*^{#F8fum${a|IZQZ zqxD1VIHLHs0KOuy5BGn_T>~y+65`W<;DbM5{F=XL9sN!N@l^p|2Jq3`S!w)E0zP zz}o$pAi{PamOtBpHT5$Oo-KZ+|Anx<;&Sy*g!*dWf@2AeWk31gc=Qv&G2`d{47S^! zd9dyLOc0?CScX3lEQgXnSu)@EW){G4lbx;0WRo=4Y*)}2^ z1@G~0guEv}=%*jJpl$%TAU}|R#|an&5GIJwkCWhn?M{IU@=g;l93V_sgzcliwF+GE z;DQN@us#V~(2sO*!85>Ra6$izzyK{uAdZ3yCWz3F*WiMFPJj#6PZDqnAWT?sBv?)Z z5bDtZgnq4oV!uJygo)4&i?E0pe84!a0|@i$;m2|NhI)rjPLSCPM`vAi6G6e{A;s3i16GZsc z9DG1sYk;ucmXJRJ5XRM=kca=jJJdM=5RTVrLVYwqm>@#GVhMRH!lHBFV>Q4`fY44h zKsbKaVdY;C)|Y^Cs8HuLpbO6Ex5w_DMm?Jr?2o4mEKm-satQShAwQRZ zc?8TS)I)^zmk4;7P>w}dQ~*BUesc>T^!qNM9Ykoi9w5|dAm9T6J|y5HfZ!jliI4|h zf1Z*4@0>(fHy|D`e*bq)TD~9s-#H1ckpF#dg6ru2&PhMR^IzvBxPJccoU|O5|2row z$Kn6ZNy~A-o|oYM@qg!}|G%7*mR2vpjqU&AM1ot^#Y*GDPRbR#D!tVBz}+GHti;Gc zhvbQdTe)kz%LV(_=Q&gaRhnRqahTz^tV^Fg+CLhj9NijYE5M#kI=R5naOjOEuv ze#CsC)_FLnrtWutr$cIDZ;T=kLb~vbjuJjXqK5bEw#1%83${m8p01yKB`Z}93V z4{hPI&zDXP%EjVJ#J(JvS#V2V-)83B=la0Fu(afIJK1@zt1W9-E&w5<3!g1e!iT)R zzBxQ2WHrvOBUrwOe%OWY8SS|)i@L^~*7~E+FL ze|(z}Z^Xm9GXwa=T?}8Io+Yv0cwT6$YxuGA)ms$p3uLzilRvqj?&-aQHeBMizyAH+ zw^di+J1(RPpYc(`8+$*9I9=1&_x)T*+gz)weRRx$MvI$Sld73q44=|17B@aKD5j`% z5}eE6-#9+Wfjc79e*22F#-)6LQ?I`4flW4T#UPT~HHikMgS_D0vv zUzI5d4Xo^ERlg&7CA$0ST8r*iCz)nfOw6I2UE{c?GxDd<%^SH#n+oo7ZdZ9-m9zS=f%9F%F)ZGf4Fzk;~+&o@%6rm z0^!bO>ESj@qd0wqf@F91HltNvF}m;_8A^EDCH3AS=l*q_cS>D%*%^x}lQz)jE-(m4 zOKogUuY6E<_}Oe?CYOS#7=^P$-ihSRRQhUdPfv&2c2F7^iixL}0U_ise3y?BKIRga zc*dLD{>G+Ni_L1cYD;$Z4lD^`v{^2w(Xbs>L44ms~eYKh4J+oad75i$5Cj zX?G~o_41c@y4R-xA*9QQL;>Qv7;cj5Tkcu#DjbmW_YVx1p71htGmvtLq>p-ihj~9XwrUE zw&kgnsRY%| zhpdwCQ$Ouxi*d`Svccmad&aK1id*F+ABOMbk?vX~3J@R5 zQYxC4U8GgmdXe+C%?4xUUd6U*s`-z5gMxyE$XHG;_Qp?|=QYg~&Ag>sC;AqjUQSz6 zGf96h;<^PLOTwoRj4lgSw}?rCZ@VK|%L3D@NV_vTzqqX{ygw07->Nywn_mAQ%u%SA zzUOOavSEVgSNy_f$-LIqOnML6t+qKn7H6IAbYk}%_&x+B{QZx76kTCkYpb=S9k2e- z?%TF?Ol|#Y|J%JG2gGhFsvCDm>0Rkg$}k<){Gy=HKFz}&wuii-{=hVCc*KmJY;GG6 zLUCA!L;>P`$~S*~*m&Y6jaRJUtLk|LB6K_dh+bFv$s%mfv-dKn8W_ANvXz| zZ{2%n(&|!X=w?1#G7p+P%e5(;KFyFsdiifs%jYO|tnMQnO4aVRmTRMRj#O#VFHc6t zbKEM->n{^7(M^-Od&>HvU4laWge2uqq6Ww4(NbK08ZDE^u%a~cMa8xj&<>|`|r+$Xg`hGiy?T$h9$2m8PyWa?^ zSSTz3ix~pZGlT zx9Fywy_i!HmQwW~z$YnIVOZ{Z*o5V$1M9q)MeEcJ8o#-EasweW&$y5%Ks-g|cNU&o zrUr~k{P+6JQVi#hx>vrcjU~@csjZGY(bm5!^3~D8#sEk41mMxG`(+&!XN`lRriMkb^Jz(~-hSrh2&jep<-zKTCY>D!WOSaVZa?n6R_Lb6vrAXr zN-O)-XON10O?ASH-Ak(-V=BFQo`%OJ@WS=!?~SMRYd@E#;`r=EQa4EAVflNS6<*%c66KLVwfhE(PkqZF%dd>no()ed8`Qr02f(WYqL+ znp&^JQzt`W5%cJ2N?&C~bxM!vZBnip)&QMo)`Vg19Zxa3{8-)fjwE-t#oH9iGu-ao z&a*~8Jdx*#T}|oGlK1n3`uNw+L_#jy$vvMKcT3T*O^)i2Nr~vHd4@jbuX?%$bVoIE|ui1+3CIAXHPuFeHgo9euDXZQ&I$d$-9S#{Byc9 z6nBlYAA9lr)trm-5MN_GRdz@`JfovH2w-(9Pp$R&@`Zxz^1TI<4+%?(SJUMAwmpnc z4K?2XWI$<-@{*Y~ZQ^NL?&418592J6`#z0kT9kGt? zstG&OdvD^IAvx2M7HuP;S?~_6kp0 zou_7&s&_g*!{`cObu)vXCl5_1Idn`7M#b{1mbUR7dl2YiXxIL->Grt>{?P~u#*}3C z?LR`CPbZ!5$O>rrMq@1A-1+o{HAl4H2E#Fot}s@YLyY~${FBMZ=W{oQB0fq#yD2Tj zIFURb_ME0rt>H1xZnEda;-}ShIFhLJ^L98&#&qVVSx$w{Dn?H3^vOZM|(dX5^zkb9=1d6%A!l&Rw&yXZfMC{4VBW zIuH8Si0^egWKej24@Or6tNZTMm4kBAn-pBczBg`h|F+uyyakEHnnszp?*kpfFErM; z9WQ>Jq)i!9Lb1Q{TdE0#OiibX`%CtmQ|9Jr{O`ZdV01;Xx+1cbFDBOvvC#zc2rE}J zePec5R5p)2bTiJFBI1T>S35nOdzsE6FU{5c+GPx-njbA<+ha_;B*`Tnb>EffbI8Ex zieYsH^rGd*vb~h43-#U4=WrPZGaEZdPd$)t-8J&@nAg>#m^|x1y555ZNO}%TWnKRINShe?I zoO0`@hAg?=+r#sQw}=0@5}mG^7puc}_-de33@MFf&}k}VjIIP$Hz2HPYm?F4m%}6u zg4CrGy>s){+>f=7-Qk+I9t*d+o>5-l*LF4L(wtp;=<^7xar#uRg%YuEbd_CM0g zy@#E@o3Xl{A^OKPYrQL2?8|p{AGt|}D`l>&$as;)M7RCk;=U)t&+?D*-lB>Ri7f5w z;xOes*;DMxP&O|0q_<7=Y_8N4_I@mh)xD9ueLA4vp>FZOv8`io=T=d$b(F@psI|XO zxM8!%Eq-^lOqt{{V{ruC2_25T3Z}pBY9Z#GnFc?z2dgxh0EGGpMl|y~N!u7iXR4ogas)p_} z-+WfZ-MHU+$5RuZXA_gR_wTm|y}%(8=r`VLf4CS3A>A!V6d-T8{(}$T-KlzY$jP_iz1A!ELKavh}83SGy z3hOBE*vBd3b8-TPo|~f{wqMRSnhLG%9uc*uX~_jb$lvWq6d?YFPpN25fOi*%H2X*L zR9szTZXxI6lp;&>U>#Q9BKpH$6y>z}Xns^Uf7|0cJc;CF8-NZW!@uq!^9XAm4l3O`kdr8@O>!Gp;Nyn zpGT+Ie)8BFoPObIbtZN0&Gh5%vHOnvFIC|0qY6W6N4Z;ERa>u3zEKk|J>^^?rKPXR zojjDwAo5U~>3kH=;CJ&2+t14MD;b{6qHrwKy~ufw*M=i3duD?FlO@nXaoB;?HC)fg zvAOR=rBf?0j=UxV(<9z3%+J`$2i8y;aPG z@3R-_Z3`}z4|c?@ruFXI?|z7+)aHzoUsk)IDMlB*n?eb{8Q^v3UWf zAJRgzPi4$QcrH+$tY&B4vU7J!^CG)B9a&b(nlm{ZQa>7fDDu_PH=SEr6?E-w#33Mr z;;;*e0>rO+C2HnjxZCRK;Qp6J`FN@8H?Cb- zpS-#J7KD^1GK{$WYkn^MBfUyTMm7_5(6>k{Yw?6RJshCVH2p^Ou|uPb47(^v23>{E;j zZ+Z~Z?>d{@~{aRYG-8pf=AqV>$tAa!U;`1q0n!5|OJbEX?W1C5(1 zRyPXg7cN1cqps+`Z8PiU)q?49J@VY2rWlPnsSLRl+ctHiozK2o7QhyM>*bRNec^4x zcRnbtbr|Yd&tL2_QF!qxMpq51d+xQOxs|7b1U}*1XVn`*6yq@>V}50o15Z;W!g<78 zMg+`49+64t_0;yB+sgWB;A-c-#W#G{CW_|WhQ}Y%=+$9#cVl%wY-x2W6HMc|`Hs^> z_-Oo6_U>n$!9zc6ElwS#$Xi|dDJeys?aQunb?-zN+y+l3Uu=(idatq0Tq;_^uzW8M z{I4E=#X%jb>*wXlB~yC%z00aoN-gRFmXr_Abc@_7+Hm*KlL41R7EgVbhkAU>GEYA> z3k3v*WIi%||6?ZRIlaZXb8=Y&c{K3ej^Yd7{h@?sPT^}h(P+H8hx{0G-H8}$Jaxel zwH>#j3{@}AXosKWp3bE0e$Jwsz1dY^iCR3`{D$^i)BK~i=8Gd*7pEMn8i5ef)kLBI z@u#XDyfeQa8|u!T)a7<(y<)DwiZVqs&{@ zq=~!%LP!_B`$GwT{bEP1ZnJyeCE**zA-V2Kyho>QBx)YmzNdXtmqkJTO^2DiDSlZW z&eN;-)bHIoa_U{>n3Z#4<+qdOM_jDFo-_kONEbeXqlAxbjStahPqWOL*kPmj?4oSv zYu+oGww(`;+eQy|POUk!Sw_MsgMEGGd41-E;nd?hrRCHnbribz4_UvUy|dP`6bK<* zT_g$+A8|h1!K(P!n8|T2!8Ki$Y$oj5N`uBu+Sv+JMt;|K`I~PTEM983Or~?6DR({j z@X6T$EfTWK<5wh^ZZnUsar}hQg=avN@OL78B3>^I^Clde+#S`;A0~J^s5!YnLXFAp zVB}-5Eqb4}+AuhJMz5_tBN8e=>vofWI;8u8Z`Vbdd<7x(VzyKug#6V*q5$#P;Twy3 z86BSND_KiobZb#Mt8@P?bv3E$C&ve~Lj>Jp4o$>8PGz6b;%^udSGLUU46m{;3P1qrv zCOas6E;EOz#ActIdYmmcjk6n-^}{wregZ=*%i&R{a9T)>DA2Y-H%e1TAWS~#g{!wBcE2BdpJBg zu`PU9-&8JBzBQ|FE0+}08Vy%n-F4=4Nkba!`)DatZAXpF?$nz(V{}chx>c$q74ARW zdDk9q^pDaP-!V{Y)v#~7;(nd|ec$*4?6#H-Ub*+=%AEyq>F8%y3Yy6cV>T*gI403o z=zhplh!Sly=F@WrpY3^kMv*t`ynEwo^GV7@<>)}G^ssuh}D%#@@f5%yVsy`GFH&vYX30l zC6eRv?WyY&j1m_q&S<9wmAjqau+fahxKg8*QJ(^TfA7#x*!~Zyv*!kDSgFUM6w-xf zK$P$TpA`>$>hTS^VBbS2esPgA;DCnVl|kFA3C48(G>)%>Y^wEzN8V(0iC1_f*VmU_ zkc`GVdD1uR_D;&zKm0w03<375o1_6`Pl?28$yxKxZU{(2S&Azio^ql8z}YkWU* zWyJc$Qk&tWM z{rPZ6>Ni6v>^aIDi2}rrjXin)gO>T}T`~dX)ok~kr>aqwlfi%mkKsLr;8?OH*!X+t_Yn$1u3H;ShOQPFwwb--sJ zqBR{Fd_`Kje$aVMi9b83?$JI7RbsCxp28J!Yk#{;y& zGqTD=izB(-a9-T*?9FGc4fk@S3!h<7!ZU>prDXB2@t?1G)Y8>j+Vt?c>libmPA%_( zN1`8dbxAmdqILI=mvICAt8X#9-Iw4Zs`B8C#HvM;k#DotgI{Cc!&o6vfcWXsgch;S zDu>cPH|uq677!m`?b)j~CB=2nsNC}Tj)P`aQHB|uf*IjTj{-kO_06%06wQ}CO5gOv zqDUl4;Oh$tpn?3g#_HaQ3eZz9{OBOpb3!z}*bl;@I zKTnuyQgw4Y#8cbz4Q!ZeQ*@AU|mEqux@#h}NZDsCEYajS%^3 zi`CuoWY?~~&*m~CJgFZODs9$gk!rtYRPudx+MI-J-d^s9eNqSxWv%7vR{ng5CM8RmYVR=ZyXGwv z6mK?cmM__}NkM_*vHIbG?`~E*zpZzq<>jWka?QAHE6J9?5sa=qR=1Z++j{49UiP95 z`$v?7W*k0|N>|c;Rpg{=-2XI_LG5ZX&uE~w(>wQG{$nc47p)C=`h9q+EZfsgmW`Nn z+8e+%hT`CW)fJQ;{mR(1)v|(8vsOZ|zx>?OmPN_ncSnLakKH{J%O=#tx!T9orJ3UD z0WFp?Qc|6G_I77`p`_R6F22Z>Xn8P+(RIY?4$fXT)#!eIu}5ad%n70NwVX$4**b8J z0YVY3!4p*;wk6Wl2X-qANml;IpXC~fzPF%mdNbQT!h4)aD z@aMlhbPU>MWn5vpBbs{t>Gors+yUd;uG(K=b!n4)_c&pFD-FL;ZBGP%xbT;^J}kPH;ZnX-$OcC6ZmirmeTs=x*Rg=~Gscz|w5_;ECVEV8 z3aL%EG-(&M&%Xte9TlFov>07q-8yovek;qKmmy|5y?w9|3|3rlu z@9v!YAJd*0)w(BB{rJ>uQ>5}%pD$iI>%PH;OIP5T7sbH~i2}s`=$l?JnYU_Xl;N3| zIkxFKm;6j(Tcf(6B2DItAMq*UV@8wgf(ap8C?8B8JnX+FXXMh%mhRaTBR$}6-&7re zQW#xttZqlR^V;s|@9tA)$(s(-P0u@1e5kg2`t&RH4DGbIYp6PY?!z0_ll{joU9K1T zQiY#*KH%?K@pQKX&Gn{t$_Fl=!RQ{t>e71bY)Mv<{VHs!!mCDmLzRWZ?~@Jq`)s=r zza9??$2aJ#zkbKGcxZvqxAM1w2)C( z7RjmI;?S^YxB&1EaGzxVK`x!9(^tOkWxMq?`i7vEz=ck?;NbXA_m0nh zdz1Cny*ev+?G}xcL=kIo-P>MQCtbx=$JW(1_e=!O10kgAheQG51s{*Lw1{UsuR9m! z?APqhuxRq*n{?qFy9Ab$L^_cXh6@o2*)gnzto<@#`aABJMpF3}MW0#{pwU{C+dlI4 z3w$?#bp5fq1wqEwR*fCuP-XF~YEAoC8*|~k_suW5?v)HGd&$UcsuTBeh&k)zo#*hA zy=?tpOhnY~n&Ob!deQ<{eJwAyYYQ0N0IY7G`f8W(sHKf}^M&N@WR!YYh*1Z8=ABtA z*Nl>oN!qZ(SV;fKHfD11nCoJD7VvT{!Q4YzT^R)z#a4+1oz0-eo=XC;y1{0LcHbD` zleW+e-_dEk*r^h@GqL0AM2ncur16E#g@?)2`%7FT6b^nI?xPWwvu*i6y7)GOsY^?( zdNScWsmTkBzsIq<^tEDc0mo8yPukVKxhLJIxau>h7)kt-Zy`Gryf@`NvynLM+;eBW z9qol5FHe-5+Gj^?<}Z_$(Nl6Nyw!B+lNa`VUl3OJGX;;;;PaDfcjw*>+%dX6<1)Qu zw#-C>oa34%dvbv@c~?o_4WD!Q62hM$q|7+|j`zU?hgw{0$iYhiSKmBrvp9$G_XJkA zh~3lTX!ESC+SDDU9P@1z3H`Iw0^9uf-q1vS@%2sU$Y1lpSwCrb*B$x%_AvNvRT zaad(daA8;H@bQi(8{VD>X$rk(Gx&Uve&K8fRa7~bFh(~7tE+zY&__-7(5wQ|ylaxD zg^#@(&Golg^GSI?Z?j#{zE}6s%ug|F^Wb2QGH;V)Y9Om}o|xK9y{}Qj{_}9Sn>@=Z zjP6OSF5B4kS;OMy&BhYp>uwz73(pmkCfo8QXw}{9y|(ZDy)D?w%f7ej(a(7A?yhHX zoFW%}f9;8uxzNG^>nGE}@%#HRx~H(Z@%D6)bp_831{M^wYKyh=3R9ds8Q3Xr(EQDb z<$X#%cV_%Hl@8fsqT^%EEjOy??Z}_B;t~poEX8RDP#Cc%jN#A!$i@LjUy^idExgra57&6ZZMz@6I-hY)@Fa)FL`CHAZC+_9JKEH(_QGj^0bHvvwxzHEMNQnivSahK)SFR(E;aB*~;W$RmWdS|Sz@U`PMw}1xPcfzr{ zy1f;_%~9UTBikutq__ScDQG!!#rwdv$Y706@6u9Kdiu}Z7HGBSp`qEvx~aqGv`rrC zOIeoCu6IiblZ&4tX0Yd9@Iv-i!n@@M-mDAFr`Z--{PO%Av$waO$obpk9oFxp{ZM$f z=9FWtC`Z@>V}|R&e4CT>4cknH8FDEvZ>^!Y^g#5nwawmdKneL9`AZeV!E=b@M8Mt* z-kmpEILMT{|<(`)vjHYngV_>Bu*6qBV{rj8WF3GEL7^ zuHUd=sW3OJNf*R@$k7szqTJkJKvV59r&N*;gph6&5(S8tTA!Sd*ubx+W>{D+%DLWa z#|Jldy}{C1Y7LzN(+Wyi3H8B-Z_V@F8X|nJ8b5aoe!V2HB>baeA#j`~vhwi*N{nta zR=1}+SF<^e>^`NR{YDo1>emLW8XI1YOh;st(^cj9mR&GlJ#zN+y^B=Z91qlX-`qS- zqa#XN67$*jiE?lkS4cPZy(fGZff9Z;Jma;m_{1x%;DlE-DjWN8!y5C!DxD-hJWQgE zj>qgPb`R+?J9pQe+ACw5z=QTzmX3>M#f?|OOwx9@k!>mOUK zG<#>sDl@6b=$V7NUZ>3ZxG8sbftS)!Qsx?gX`JRWd7QV&b}%_a$Wh)*yR}u)^U=5` zf9A#Q?C@-gbYro)Ts6$L>lY6ujDM12_hFXxY&}*|s9<}b>^P&$fWz61KJO-bs1K{V zCI?LBUFpf?jN^7rEYC9^j&p5r5h=WwT8+_#dpt_`Y_1pNEc$P4W{-rwn9CXrb@_BU z=4>A2h+`GcL+Z~KmW~1)F4^rH`>qDl9X=4m@F+wtt@^~H#j#D#hi@M{Zw-A!{>C9u zfcW47_0c0Q@7-y(x+vmXO|BbB(nxw`V=p-k=}t^tJd;;08AC%s}RsFS{-cvyKQoNx5=gi0Ic=q$}#~rK(;}5l|<>0D@ zyuLia=q6xw^AtXawpM7Q-8tvtPHQFqZJogy%j5*DWP?+gGKF?QfqRT%@RIy-mn%P> zugG{jp|m5Y9Y6F<@#}l_N>5pRa(H$^@lC|)a@wUyzBpB}@chW)1-5tOBY{?JR@uUI zmGmd4yq?`l=}6eNP!eJ%+ut=|Lu?%tp?^sIm4x8Zd4 z-9`TneYM-QA9rJPld-y14(hbiv~5`}t40-?UEk2sdv+X4p558OYq)r#b%{^S`Ei4( zzqab__Kwu)HU+UlriN=&p>+Fvo_Plx{2o>F3Zt8X)h$yN(U@#WtnQiFg9%;}?*0RDss->U%vR6TXN1~@ox``a43-=0? z@UN^)Th+E&jQI=*TI^(%+B3N*EzeZMn78z3=Z5Ly3!TqD^VlS3Kb_wh)lSAOvsvNl zBZGF28xOS$=GuC0(DcJ+VieyCNE9G`=%UT73|U?NLx(vYb&W1IU3ub*7rptQwvopn zeplTsrteNS<`fNH%hl+5QsC*;aNNQ%oF+3{Pgcy2GD+^fql(c@!|G0I^n2I}^pxqb zOs~E`Rroy8L~55{UDG@F9;HU1efu_xT)yW=N1o2pd^C!z(pHXU3#rv9?VM)$%_n%y zo}GF52&0>h)eV!sF0jDDB=C09??)%oRnINdLdvHmyt67bUWeY0v}!BSW94+(Tplg0 z)l(6QQ^>bm+|f6vs3B%Hd9CAM>nMDugW_-zt6Tgw`wpq=|6}h<;Hm1q{?V18L?{)? zkV0lkLR4f(rVN!R!^JK0B@t3o%20|#^Q1B~7fmXfP*jqHXf~#~H2&8*_nw^R;nwr( zeg5zJe?Ncc)3po^!T^!-m;x6A-p`y}r?M6JtYK*&s=Q_i1BkHxE{> zn5}O!RDNx|xO=nhhXsRwG+SFV>@lsZty6QjER}tp!n>WyJG5OhJ%I1Id3eXNW|tj| zO9pSP_A+D6+$tV^>{y!B%Nv6RXYievU@!PkZ&r@rin^6z&o&#Lb~CtQZa8wVci}P| zGm!e?vn}$Vh2;tgPEHTpqU6wZGgIWsNbg3z(T8_WnfPQ%sL7;egL4&4S3j+mX^o6a znl;=--RRQM;!}HDo$Oi~h6%?`dVP@k+-WCC3TK+|#O;1#7c^x}PqT~<^_9q)v~}nT zk58$G(oJ89>JJ|_K#F_Njq65VRBWy~$bb0oTIBM6eXfD>HbE20xm)TanyLNfE-Ejd zuD@OOS>>v)HXDN#yn^?pf9 ziJaqgV$`v{qrSMT@-w`7Yrw7c$~Bd5UT;vC{jqXII5VlDtb*FV?IB6wObgpyl-cgX z(2_JC>a-&9bhUNL7A@HYH`9Y^{MYE4zua@v+rNv)a?$PYhYN&W-95Pf=?BHn_Z(xS z!{-(j(y03=DBQ$p=^E5ltqH6KGW)6 zT14cWY3tg>T)Wq2W6Q4G!;!kfD~;2g&Wx70Yu>a!aPTUx`4{f2EQcQw|T{++#_$TU9u&* zLPUn=Pr{T6jza~$_VR4Q@Eb)(J!TWy=BXF4>_$ZM_1S?n@; z$d@9_zNlUt%V-zjKPtL_{%R4idl%)HsQlHO0s<6hof7tdpxJWFTV0$tOKPU6b%>t!gs z`BdJWac?)2Zj4)Z2TgHTLvwh7$NBzX&O78dDV)#ZgiN+JN8WELvart zgYi0=8YPZr6Jx&f$&J(VJnc&3y1A`dulSuo{g&d4=gx0KUuYUv(hTiX;)7%I8>SVF z+myrGFJTl#-y>AsgmLSnG#BKBeHpdrvi$ep{f7ECWiM5kw44##m6_Z7FLoqXd~TFfHr=ILgqcAav%uN)R!;$19$nV!5;e{k>v*Bu&1!hJ(s>NbdGqtBA| zJw}qknf5S#yKRS(B zP{r_omFr~9=1%KUYYJKC@U$`HNm>4gYbp&J8-FM$o;n*|Sxw6hw@)rUls+-Lf7*a^ z?TUF$%AcwFo}}^?Z=G|z%J<5qHG}1*%ci{$Ba-)94E&lNjtfZo1<6K8oZQ3xz)+NYt)v~uWC3f=MJ96qiT<$MaQq)@307PWD z6_BKGrVV*0!!`7K>804sIcl$;j5;yyprvwGy41pDtKz0K3simM)56_v?{o8^#vR)a zS(pt!oUx=G$0DR1&QN*B&~NzUsh!hHOb8y6QNOoh&zTHvmtEibORg9l!c{WIHx5K+S7UYm2bxRUT@vc*U-3T zWL-&>!}Z#v)KeN=T?NPEA3fu-t@%ppe>N~ZZARm*qN41JPet2HC!MbwxIM*v>C>=U2sPP7jAl5X0-r@Zjo_^9mx z%-NSGaVMTref{)azGc}w`E=j8=daC?SxDi323tyvaQ~!ksus@^@>$f%WYCz{L1U=>d=W_s zXWIDA?P6=+eOK7Oci^elbYj;xn95DnRRs>x4i~7r^QHJ-P21(jKXm_rIQ5RYI~OJ`TOG+AbKJr@ zLi*K`(p&MTLu#0*^W2{t`W$gJ=5C>t`O6=!iwah(G1Qjv?>gK>;k`)Z?X0YHH4I8S zRIuj1IB)b|pVccG1Kd76Imst+!FBg<16MM7(L@)>z0%rHN`p}&`RS-*Bkfgw%} zqv-j{hpMzc2jnYg@I|K?42@Xcbg59)@9Yl>Z!wiO;e%z%bNN8=fQL;>zIlg>UgFnC zwK^cEnC*J|i+;{+^Ln1Z8~VFfTxx1EeETud;q9pv>*{lT9HM6J@HFFB)aj4( zoKs8Ty-MY6U+DKO>{#Zpr?ouy$Hg)CmgIV9%Z4U77bd=`Up-j~uUt^CnzZe{&` zIg5G)bEnjIlT^)$gnZ8**H*nfr9Xui=d|QO6Ie|fe|Y7|D}rji?zv-C_m%qPp5SdP zvrJBHA9jC(vD>017hlEkS$?+99!fnJ+)v%c{+if0jpy|;YM*Dj7pVsV5$R{wNm4k| z6fy-gGr5M@*%)~%yQWwAm0I;5pn1cFU#&txW95$r$phXS2fgdO|1jlR)^3VXB=u{v&^Iv`L~p}%qSk^VS3%s`~t1~$m$Pw z2dqvjAKh=Z`^?(OYEA+tT4op2eO~-UTX@0r={sk99xeEu!dph=<#u}2Fm>_Ld#!DW zcNpr%Tg;v;o%P_&rmF{a+B3r+$jK{hFPfG%asKGG#C3OfeB5N?pdlW4q*2tyK%;Bj z(vv(>DZJ%W-n4sbV%MFTmOj{cxKz;8)ie98V}v_gT|7tBL5!X}aEP&*ujTf;Hpyk5 zq$@upT)%(Dr%GEtBk=CBu`epGiku1mLgBqZ<;{pc_*KU*a_zT^Me*ldi>#lHZ40+r z|EczSS+twEtkv}DcL!}|%yT%p?Pcd15&b01lb5DEDpWFlH_t4T=X`r5K9eWQ?Ix9X zV?)BX^9H#|>O-$d@Skmsxm0{;(v?odjH3e*oZg$XH%@R_mX)*hrQI!;m?2xsU(YdH z_DPQKnHEptr1Hu^M^}ud@K#WHCw3@}Vpz81%X$Y%FMMfUpjj!Or z1}R>2J+iUX+9JDSn8rq<OA%qNeXA$qmvQ5?-pn6zh#wKmR$*nRfSv;aivoE%*=f{Kc)>F zV!9yYQnYVH(LT{94SrEUzM0;F}I`nLEx0|yrt+6ssdzZw6k!3i5iD=0>mkc5mbyog?Ftok|VnrZu=t zU!dnxE&lc7H{qjBmh@=z{+g{oMDkXVq;RIW^VHa98eiPZQ+ikbRh&S1|Ea;P${XkM zRn3Ywy&J1g`DNAutqlH0=5i&X501p$3|n(Y^heG0S*d#@&tG4mmE=U>y-VfQxMn>4 znaQ+?$ul2Mdo^)jj&G2e>l9PrdfJbJYWJiq^cw4n2fcpnmJny+AN`qLMUS@m(y!*@ za;u5&q?@OfzoJoitEs%Z&u040k>7oyMIw5ykeuF+BF9AT?cV(RhxwhF5Vs*N)G#1Q zVf%vTO(8EfxDFPJ_`Y4E#%$&nMsm!x9m9WUx?*2R+Tk9Rw>V?6YWVIl#k|X1CaG3; zTg%_faBh?7xDhw(eRTcV$$`V-CaNuxPOf*lApBux^};QavKr*uHn;T?&!~KGKX5m7 zyi-HvJ#^Ub(?<7YQ+ZbDPn$oSKDKb;y;WY%l$=j(8!&2M?6YfoieoyJJq|wJ*p`@0 zTk_?Dq4nt_14b@C*&(O&e4uU3a*Dq9sl1*KZbzk_PA*OnGfrH4RdV-udAVaWu_OJp zHH<6+xR2Qitvpc_q^%SyG0)H_Z0Gih!X54l)(5}1>lq;Bxcz7p^|>DQN#sEbZCiZz z!JN=k9d9Gb_4)f3ieb+Op_R2Szef6AxEW?OR9XwSF*9XIo7_gYXfD zRpv;QGMx5Izp3UdGGT#$bl~jgwQGbcm!FB`pj(nQd(9~hPv2*J^eTCAI z1+(83Y&F^5JFdMDf8UDz=$E@r7>tSLp>EZY!VldBVpco7<(kHyKT< z8mExI`9#v~3t3?%m(QOaZ!mo|Ro_M`?;4TH(ffoQrcLX(U8!I8)UTy-zs#HE7q6W3 zZHe%l8mB(gXkiU=Ncn61(WXxonp-d35BP4I^Nz>cpj4L%2T=&nKx|c&<&PJrxw?&INtAz;+I21PHcG8@0!+J_uxH)1ALd~ zSn6C7)Vcl`-xVb7@QBK55@n^fgT8gwRq5eP@44Mg7u5nn>y7tM+ zVWB5>&9TZT*l1KH^)=E=65CwT4o|7PyY;r~T5kKIDt}y4byteP;b{+ZGlDcM_|xPM zwG5j7WX}8zHzW#kXCE4-XuaXZ_0@b^0>oG4#XOsoeSgiJi-jgF6y9f4-kk^Q;^(Ex zMmn5s|C%5+=KA!)ZH1p?o@$+uFe*{^^1N`*;iHC3r(?fE=O%X!UjOp@t$@$wC#;vM z7z(E8w9PKWXIP}Zxb{aLw4C*^=Z8lht4kUAaqY2~Yuk$LioS>5+dU#E?^aspclCku zK6WVA@w~YZ+gQ}7^HuxBgRGSP#jb;tW#)NBe`?_7v{7>+-D+?DI2o*CByT%O3TN7tQ^lh) zrn+0tdR0JMCAq6TBpTfTeBNe}S& z*iZONg`UaB0_wP=gUY)}V%f#{i5naFyyJ^cIWF>DI)8Qg{k2;13mxk>o*iLdm$gmi zjmiz5k>VL5S_?;se95{TB|KwA)a#^%psNqTGU%6D-dg)Lw{}uQK;(nGs`?|ic4G^pVZe3UYJke z?WFSVTo5yB_<}jtMK%mneC0!v0fU@=zaDBzu{Suyw`V%W`6Q|b7$lGx0@c0 z7*xJVaoKp;JI?fr$LIJ|L`qpwcwbR@j}Dpk&@o*$Y-h97nb#Ya7L71mG}kt$@gB`7 zmgi!Lgq}sp=l<8GeXTqhR&ai2p8fnWk_8JsOgYnWdfBn865pFR#v#k?HI;W(?X|a8 z3!*C@u9pqVu(@kwuXt=+!n)CqUWx>|&f@dnofoyJ|(&iLDfQv0+=>xCdcp zcHjP_`SMWUO}$AviUHRagy~0SS$Z4ZD9cvUkob&a5t8>UmG`;ZkkYiM=2Oek4Cc%n zx#z$IF7cTgZY`go@$C$EVY{krzsuq7d>?g&&*1x_`pxdu?uPoeuUc#iyY~BTOxme= zi#kqyN9CRHJlW#VjE9QttO;g5ZcbQ-gTk zjFNkl>cy)r@odE2frBr;ERu~hEJH3*U!2pD2W`5!&E##z5AD2YEc_wqzE4GsFptaU zN8#>r+aGkMEa{h}E`KCo<1p3sD_>wQ&$CfYcXgEvXO623bF3blmGfcZCmsxj{S?~DNo+r@F*0@~DP9b;NMXlw|#T}^y zb=p~*B6HWyIZ<=fae&ash3PM^UGnc2-TLZXs%5!nM8^}V|Dx{XL2I^>vosjG;Csu= z(*DgUZr5#vl0JD)9xw4OZHC?0n+9rE=ASG3Fffz*JJ9tM~ij<(+>eoGLV61DY;qLDYZ zX;uA;{n<~h`K7G;?iW8m+~UycyGIO`QJ-ghrt;Pup3_(*+Qw^fs!Tk?bwHcxwhf|= zp|4Lp8Z?rw`Eh%20ZhmmyrCn2PJY47KNlX;crtp5F^6tBE!-L*_ zLO|>2;NUl#ljU8ei{IrJ7wTL;^J?yLwSLZ~t=ug?+M2v`d4_E|ctKsLLAY?w(V(K- zbqb}m9YeLK{l#}G?{J~`IU{VHE1N$JH1NosPv6)$en_Ur^v9t#UeC|azl#(U-M+^A zI{W_W$F2L)yUO~Fu)M3ZUQ;Zjxgb;O=x}!|E7A_Q21*_@ql=zAS32qH=`!Q_Yi64X zaI1H&5^Fmpp18q6ygK2)`GV&cy^~`m=Z>;E)8+Sk+#8)~^9n{zy25j-Ved<^vnmWA zB6;D*&x0n|8EMh5yu5bBc!R}>aw%E)p%?u3*g2@*aTuHC8B&u&`?$mKy3Kkn?Yg{6 zE7lJR3(B^SW4`>hx71N{hx+F|wiI4&DsRmfu1EFbZir|_Sc)n&(WUc_F>0GYCYzm@;+_w$&AxO``qgKC3W`5_vOj zO>WEFg!oFk+u!UT`P)mcI#}IoUFz+x6D0B)=ftFaX;j{ME)G&}j2K7Vx2%@r*VXed zGuXayEw7xLVe*5AmHUcY@;k!ToYn3M&KTvBAF2^|Et&u3k;l(qKOgfC$&y#(aIKT% z<)!j6RqUU6i3r99SsYZ-I(x(INx#8`)_d;Vl#09=WV-wKzH8TZuY56Ib-im)|2GLc zzA$n(G3-{H<*ijXTekUDIj;ad^hh6`|*U=;Y8cc#1f|}iTXn+ z_R3$&Lf+gMB@kJ70Cs4y8sM$-;bf$-jP5C6;jy2c+jr(yPmZAQ@=1I3Q&0)`KGVA7m~a2QdNb7ipgo~jT=ma zUL^-9$a>12@!xA&{^NyJ5O$Yu)BJri^$am zvsL|^6~(MQM$K85Z1f?E!i#@ri#%vhL? zbDgXfjDP2L>YkN!z(pzXeN9SJYUkc4%1qgEx(UQKAJ)u3UFnv~kqhO4BgO3gf05v7y>>xK>2+4x;kDIaDp$PrzkG)X8hrM(Q$E zRr99xcMaq=$&t7)CsR>=;)@@lSA_>y3nV&Ais+f-y|^UE|{c=Ew$>xtVNtS3=; zg{i!|qH_zmZ7=<(IAk=YGv@xY{lP;0PN;A#{ibHMLu8xPt%k?jmmilKa_oo2)Qe*N zIg09PgMs4%Z?DaO!lS3)IgQ>g@#sA8dcv;)#vufOnL=)d8_664vaBOM!jtGT}3Qkc}0Vd5H^=s!+PoyT*% zjMG7JaR&-7`S;r(2*zjS*`Lna-MD#ANTqXCz)pF?kmw1Q3bMu0FA4H|8FOIF9Em}b zD)Y~z&;GVWwjKk=Rn z+`2p1>QnKSr*`{Z$_#pxTQT*^W>fmN`}Zw7Qo@AREsCC?yH+_>(Qs|i9^aE|YE9Dd z-7u0D|6Uw<(AqYBNt~SVLUvsB4XG9HH2sfhbXe%dwx14N?eDX;va{RPLiH6@La&B@~`Hm@}}O5q(s<$YqiJH~v{(#vnsm0eFxa#Nk9d|t-H zS*PQ~(#s~3Kh?DQ_*@jaFjJ@L@{A{;f(Ck)?=KymusxaX?a<%ps%uj4b_(xMDlgY# z84IrM*>bZle!Dn5_~@5(AM1|QysMdho}ZpQeg!L*H>5kg3XVlI_zk%4<6pA%NKkp_THf1#JGE(FqoTL=#M2uK=^oXlE0+z>?L7T0xFX{F zz0ZSMk4faro3>suAy{SQ&KA$Q&%5^K)&|9`xt*=e$CRP)4x{qMYHfL)Z6(z7<79f? zyYEH0Q=_#7q%-oYoG(Aw>iO|NxB zFJ7SVl7H6^g1Bf>en)pcy+2DPskPi;=`Mj4;Y&nUAK^-Qt69^k-_k!NV$Nofx8E*D z?E5k9+vO#551lx2q2<;ZspKg%BU-_*x!3X87-@$QRDGw8TG}%7miEW{rwpQ3RY;`f zZ9b#1%=fEIhS1hk%bzccx|B3hSzl$SMP2l#-M2%RZW&%CdU1G-ZFHX560g!-gQrt? z@$cr42Q9N^FBdasMz#DVzm;E4^TPg*|DZEltUia56TQBwxv>Ul0v%ppK+{zM-VMp_}O-}rB z>cjlefvt&gh3Vr@ZqB{ybt=&&-F0ZbHZ7s%{V1mV!xusQQf(3nDZKc15Xplke@T3` za#PfqdTXod2Aw=frLdFZ*5w($J#4k@d0?o0zu>7>ajsLJHWVeL3vLwL#F$XM{cgVO z%~Bt4lX?}2Q+5>IkyPHxOHNnspE7ct^~dOUV=t|DA2?2N#1@%1)9LB9R?zGF>#XV; z;N`eR#>H6j`*rv6X=N>+2U;I_x~9bR#X5x*^wAXFQB>ZQwNEn(x4*otQyOt=YM1$> zoyU@9D9#&i;uFMkpmSxTwe#|6n;z{jN%!%MRj4uHy|7_;ZM&bzaIxWyIO-(^mCT zmzt|rI?>;m=Yqr7{X>#pxjI#xt9g)Q={NJ;z^1t9jUOYIn>yn&08(E$DzDhSq25oH zlr7M_Y3$^%JWgs`?NYVtuS>Lrc5LOdUAS_~m~fYMf%jvlO>)vYyZN5S@ncON&0frz z9P8y{B%*G=%bdbX{vAvR;-dLH8?QIwN3HRZD=p?egAE>TU8hMG+qL9XLyS)Ohc5M9c8jEGo3g(wKVV?>kviWTP1U!^OVsY#gH0QhZ;x8| z@@ew}$M%*-3E7Q7r$QREe#~&%AkQ!S{qzUBJ$jD2ocGBl9KGhUlV3D$)iT4PrLU;Gc( zXYnADFyf2#D?G5Vx^7Wm(90jz8Mfd2pc zv(lG?J`40&fP)37V+KzRF0KLpLH~wv=}bRH04&tWXtKs29Fpk^{x4Vn?Yxkw8sYBm z$8}D(Zw&HZFy((7m8c&K{}6X?E-n~Tt1V>y#}xlxM?m|zdj^ICz}d=}i%Z}?XkY$2 z42Swnp321q&rV~_;Vkn1n125qHt0*E&jM%xtP4!K|6+Ow7ni(sUw_``75_69pe(Wf z&nVEBYM%xAEYN3xJ`40&pw9w*7U;7;p9T6X&}V@@3-no_&jNiG=(9kd1^O(|XMsKo z^jV0W-u?jS&D_E&2JW z`2~6|@@Dwa)f__T^vN<>8Zt~qBt6huMMg))-H+iD5a^A&U9*nwKUfD|;eM|8{UGdP zK^){Ye%lJ)b`uBg&5HN*1BkPNxNu)p48whIR^ZKW;GU=$#tZ1j4#WLSF%0*`!9Do# zH||A>XFdSAe?IObieb2i4!IXM?g5Hn@C`f{`S(+B|4t0U+!){wIB@Sx{E2xe0-&C_ zZzhJ}UdAN=JaErTR7(gTi2-onzLIz!>{G=hhXHWNuS48Q~T zOvEtQPK*m}g!#eJ!7xz(?%Rm@QDBFO!S6Wujk=FvhoL=V0CibM#U*U^GAhFa|Idpaf6` zj0123&{xq9ald{1I|leS2k`F$5PR;UtpT|2Jo+X2VKd+}{Qd%X2lxQ^2>1l(0$|x< zSz@tZSt$d?0aO6005yO*Km(u&&;n=!bO7T469Bq^i2yyoB!E5u{oN2S8DIo32224= z1xy2=f8+kE=+o%)R{&*za=>kX1Yj6oIA8<->wpwM8ZZ)oe@8|JAPbNK$OA?L6aZrY z(SYk0C1zz{GQ zpbwY?&;w`#bN~|oY5;YB7C;4nb#XQT+nI-OZUcOU-+6$1z&t=bpaFn;vSK~Py}WVX zZQLUp_e~FkI9mbx0ZD*E0IZX+O%K-s0M^BEfDMpdI$#qZ1CR;G0xShY0sH{|fJFdo z&phGm0hkYP155*$089Z!0A0XDfGcpX1grw60n`B+0N5gkD;wlH0MUQ|fEU0PFdbkF zm<9JZ0B~PJ9l&_NP6*!xFawwaW&o@JQvk*wp8}W)m%M5)4>j}22@&FzH z)+=mZkpsi~vCmlNBmr0lu`Xi!i**y*R%~an4JO;;0q`5!U$QO6Hkxdku{|C_k>kDC zHesFjZAIFMYM-&}d&sbHaIO5eFeSKV4_AKRZxsOg3f2)aU9>k@U+`XSxW@WG zm7_lB=Mw;^_uplxw*r9F1+TH(sbR=58Gtg3Px=J<#Q5j~Sg)o4NFGeb z7=S#~d#Q3viz;)6>jePxV|#!FU^c)N;0(a}>)pDd$6vM_u)O308GoA9gbl$09F8ui}#XTsDlkV4Aa4T>;R-(27Z(2k!g@&m~L-* zoDbocM~v57UPx}V1vQUo6Kqe>Kjy(1>!1r@E?^G84S?x+1Ly!RfCs=6fN7yV$`b|m zA>ZHcLH#fsxiH_P9Ir7x^&0bsVW>aqjkY1c_?y%<7JgIH>#a;sFDwU47xgA>O|>2BgJntTN|qtUBg<JjPpBRBz=Y~8>-KdX<}Jz24n!R z9^sMoH*PY0QXjIMsrE$~rbp^Xmie#BO$P4Y2G|bR36KV0`n%cJJ1AlJo0}W|V~y#% z;O9rc2S6v_C7=!P4A2N@0MrBO0JVU7fNDS$;0^%WgsXsyfD3^0fOCMefHQzXKmp(+ z-~`|x;5gtg;1FOxU>{&FARCYi$Oq&BasYV$0RV>MHJ*iU62aG2jxQ z1aKK}1#k^;8&Cnpc(KS@B+{RXa#r!Isoke55OD1E5K{Od%#=3JHRIZ+8%XlWB*3GqkYk~ zUjb-Slz#zy2Ydtk0HB_G0Jt7N1K{7o>IXnR4976M2hU_U{w*W4AN~y{J^=o$tEq5} ze?toY-V@FR(B`=AfNK;uPe46z42xq~)V&jca}5l`IRvhk;5-7yzqlrX<62Au$Nyy7 z=!d8$&dsC%q&}n%p^uRIkYiW$UpENHIUO~Rcpv5u^NU=VU(5%FsQ_?1jAwcFc{KYR z%N|eDq9FhdK?4`939exiVXbJw&-DV$zpfPxgeK`lbd|}pYWFw%+-~F5G}XqlMxTNp zDeJFveul>Kcl0yxrpSmTB zAP(xbLm^gW+)BC!p|y^h7OQO(1&PJ^=hn(&AFbr!c7t#=4KA+L5N8lbEYF$nmwj0? z10>@?qRHxKML=@XF-!5n!rQ7K(F3i44QumYkc`dcwK`kp{0tdT8sgoI$jT8bKET&gLkS*Ica5)Fu>2X%zKP3FjsqC3Z@S2}`(tpV0Z0f^(BDB-A{ zp^mzt-9R_GpC2PAl;QdIbzF=)ZSZoCOi&w-0NGR_Q^Kn}v+wwuF79T-H5ByGJv+bWud;APi?YiUS4*&b^czo4 z)h#&EMM!`T#%OHGt}_08gQR$zy5qRA*;+&U(=yy&K4HfJtr;Le@2&87x8wn1$t^;n zfp%NWX47*1z-3e8?aG!+WNRHj58d}nqL_Qs^~2q9Rzn;yU^|ic{NgO333s~F$zrqJ zN|Z2dH(>3Cd+%zf&@L@ZN!L=WF4YN7+RRLrT>>`n0xWLMaTo#M*Njl+;H*}O zVU2fv*t&tIiS%Rnfymo95s5K@<3WP85%MDi63ov>zS6}DPUg*KOQ7U5K|`DuLGcwt6z&dAu4cm}e zo`dd<+v--(EfJ=%Y6;)g)En|~&v&yWz?J|K^wIXihP%X1Iw}$pB0n`CLERK)%I>^u zRF7T-;aD4+*m1UGmW>GZFC4&*13B$r$B~x$wk$R0MJYQS(2cVO(7FVM2f)nGC{bXI zWfRsC^r~N`Gps)=KLcvtrO!S!AegNI6)@SlRn@FTX)RIAb#HvYbwbaG>Stl;sPU7m$cg5pZ?9LyL>p*A59%jehp>Hq5goa zIn)J+GZ&gY^!WVq^E;wVckJWgX1g_)4_h*!_<~d&-{%!937DEI6eQSVgq6+vBz<6s zV7DZeEs1HaHMhIAcqmG=uw&|lEd~<;(G`e;eOApRWtEs4lQ;8lgM{d_dg?~R0j+!L z_ItLTaZmxw59jv!4Jd}z*}tZPKE_?q49W+31#El&!}gl!OE~u!lF*m*-lO;0lK+N{ zvu^s3&S1#T-+FYgDCge!PkP#3wI=$kUi(w%XJF3Ndw&WAR07T>3R;h4nuitVXMd#O z2!$9qaL6gd;h+Je)2jvq+af4xEQLMgn(QAv&oR*WcMhxRqJ-T>20J>s+e(+~hGQ4fS|_N@78Rbz30N;A*Q~)>){H zFp7o=2$v*urWj|rKHvQ_6LwgGZdeNcx(&P_9n9(a5BqkWk?sfW4)lN%V3fp_!)#OMxEX8R*3b@QF`OcW7FfdK#<)wG?#=4bg#-1*}4QKf0fJGJYE52j>e= zsIPzxy=t%W!^AKPB}-t#S;4=aAI^R)2vrf3h<&G~DD-uY*H^Yhp-ka#Y^mZO*^;&0 zwf*V9f^Q&UH>8}~Dh{3qy)%cp0O|Bv7l;u)2d#lkviG(M?AGh}8X8%S8bF+0H6Usu z=X83V%Mh*0zpDWU8$f=n!EvybY~G*0)PC`ZheY{k;JlH8)=-w5%SRn7ifsSM42-Zr zuQQ|n`T38#2O~5hh|c9OC)aPoINE+5ZYWS}#C~Cef7eImXy5jTvF0V~1nYH${FkT`WeTnDpOtB^K1%f4oafG*%d}VP5Ny5HpWn<+ z|HMao%@4HyFqh@%y}fGvt5E>B2!}cc?T-7x#n_N@y|+mlWL$4K1$$>rXcb|VR-9F~ zRSFh9O&L#M{sRUe{H^Dj5PM08%Ofy^>5FVzlN9YdwV(&Y$u4Av%ZtvMQR<`|nR;%b zUl6jfBzM{A%*-s(eIl522;&e-LRE^RAN2U1y%~09Fm>*A z5Zmyg@q>EFLQ9Z!&;Zo?+c z)aR0zb%4c&8vIF_o`QJ2+l_O6dah2ArNB9-oJ-+PZ19VmGRH%^1kVes!_LoVD4Fwc zvxj28@LuxoNqQfi>?t-x3A~q#!&$dqXyDGIt1f{Ra!D!o?VWU7v%_ivu4ncxuf0ENb(SUPZ_@8gd{X)X#`@08m&7CPWT_TvDXy4!w z3zQG%mYlQq{?E6Tzo@4iYYFGxjC1?;C%*Id9*_q8DXRzkllffF-kDe}f~wVXWg8nL ztR-up`@{Yxd~zrKqThP8?w$!=`wk6b(wUDWi{HgB;(pD;odNd}V{!JmA?a%BfPsAQ z)QTJ*R7tY>#_KIQd0|H$;*%j=Y~M6{8KJ=JoftY)NU{2#;n!0I8de_3g*Y${LWgSr z33S7;wFzUsPj*QV00}#x*C2r*X{?LnwNp#Re{Tf|W(aZ`7Q#@)zX&&0DE8{Sacgna z9iP~MBq%H(0%pQ=rO6&^bO-UWT4ka|;_SVg>*=4wQ5?mx^|0peYBSb_U1e(xP3#1= zME>5|OS|?)g|oE=i3v!scP{VXojqmDg$W?h1{VQI&oU)!0EL>#W;=W5xyJ$KiPaE? zJ>1yOmh9HPXT4)zmo6dU&@8-+Nb8mufMg^{eEs4igx-Iy?v~62$xx7-{W_^Q-7ocM zwzU3W@%S{&<^G_WOkOD?aHFjt4Cu_W7jkf4vQVk{IJFy$ny z36T>GB85qXFe!G~>wqE^w(#&b!M|a1m0f{KYx%&L|>hE=H;fW2I zP76rTI{DVGRcqv&pmiZ7UqOOn@;BG+56Tx@eWY75bTlhJdsGP73N4xm60}ay;FN<}+x_o%$LZ-+FyrM3ajuPjVo}bm*uPsF zIeTxt!2-*weV#vTu18pP8JRZbwSb#8%*>xVP(uCBrwE1z>BNdSLe(m zfo<2>BS>gOda{vY^2bW7Cxnw+83t>To-FMiTXGnwf^wWkkZr(*;}GM~%LBO0PKtK3 zanJz9y&Tv;YtC$(Ydz=I_@v? z(kiSP-0$VIfU$z2CM*e#ZaG`0=Qy6s59c_X>s-&eO}15>%XB4s*491KBQ^MwI>%YJ zKPfrR*5O=B{-jL*r2cUBH_mqB+|zQl8)r7o9`YwOi?gjcTlC*;<2jG3{#_sCTne0f z49?~AC!JMiR;p_*T+XK#}@ZU9#=j_*i(o%5FDd(2rf9F`a z=d&potrM%d9zC9t5`GP1WsjauFWC=6dwC~|T^D+N^NM)8$y0Svqz}}v&j*ICH!9N! zfw#}_1q4_&41-WyOY8Z)4Ci#xA&v;d>G{3PpJ>3D%>xEKxE9Sk=a_qlM;KNo$?ra5 zL4xy=M+tSIN3F~F2?@M`2P=R8)Quj~5*{+=5v(f{IfaJjAV~1NnxVXNq^+gnN{M$T zi50-(Ai>p1L+hXj>6OI>5C@-@sA=j{fCM#|q&dT3#PUY+eSZjT2VgoERJJ_OcN~WA z=3$vmgs<5^g6qADb{^)Vk0H5VRs2ANM49henj!Wm!h%$VRp~HG#*(=a9G=vdAU+bte zUG-MUOOUV!mm?vbIIyMcI_CH-n)m{V?NwSJ!KX@FGDjE9+_?W8kq+_1W->@{jrhf( zh*amt!5;}WND00`Vg|u3MDVSngz3Ve=MuC)qKEH6q9izs9umQIPy2nd&~ZgNNZ@^G z)SAx3FHD$ROO%@=qb^FWb=;MohN0QVk2@ z8uXkoXv9f7CP=U@psgVe+HL!)v(pZI8GlqW2F$tX{-I!();x6g+w|;4Gv?cqb|(vF)H;qJ_7^I zaLUhMs$x=H;ql(j)oj9GrJgL)Scrp9`@|C;Ja)Ws1>R^U$_H`^tA-Ko{(f93wTZ%A zd-8aQIKWSVWx$Z%UY1YH!*0P;}8eS zG@wiG)69kTk_6iXEQJdI%;_ke$8L5nU&0$i#M3?qy$--9T|-2Uo{d}=0Pnh!HmCs! z)*qS0mPbOwEiV%3=%F7xVoRju9?4%6kUI?$cKNiiC62X^#)*!af!`T{@1jNhAs({L z<=$F1{o@YQ080+E?qo}jmoD2d)hAB@Bv`XR;zg$isWO;cwemL=;?3LfI|;Nk+}{Pj z_Mp&sN5u@TbMM)4AXF4e0@IneNi|KjL=^3Y)&UJT+f54Mh(Merr{C-HPO`vfq3EM9 zMB%Jk&vatg>2QuC1&nCxITv2?ZhhFHNN7zg3Wb0KJ;d4W?o8J=rQ{b#pmi)rFh8Zq zQG+CSs+X|dR0890xrg`!xrZ?6Ji;%lor)il&ox1G3|b|OBe?C+gLu9t+C+Y!d4sQ^ z^;mvzNmT#+e5(!kHaCd(MNV9UI9S@C+YYwGEJ|#bha1uM zvRjuRRoJ);z8J}Vvd{gW>~ zU+DqQ+KAGIbQBC&`MIVvKQ{c4w=g>nl$tkuq8du~;<~-F@$R8hqjCs|7QSS*h#s*R zYsvR!xpyB!hu~LO_^l%3Cxqc2;troOAN&;Q_daFDd^Q_sKvZ9dN{KQ;@(* zq8O(VG{Dw{_eJ`IfX#;nf`t7{oDtv++pzhD4%w$t-1hhu>#H*28?~P6Z;%9WaHx$? zK7j$A(CR>~JTf(N^AdMKA|0>~e76l6h=2xH%3Dvy%(n{e)*w8@Jt!ywz8K$HTQN3j z@fR3*vy%A*8|OF%lUX_SR~qS&ljdR5y&5srh*b)U4AT;VtLo7Y@XKM)&D}FF1e>JV zkL$e7?0ky-_C$Dr6(qYL4z@d+(~K|QEu1}!h(mm1!=aY})&I^W!mVY@dNz3-&dBCo zEPKUl^Kh*7*aJd3z3N7^JDeq)dnSJ-%Yb`NT&_M@vku;6V-KFVg4{!WRl&9HFfV+s zwl@#}4e+fA&_I1Et8N<)Y1};N0zY~$wjm%1_hrCmg79^|f6B)_HgBf0C6H4FlfDFt z`+$n`gIS`jHQjM|rm?>65NvUlHrko=nMj9VI|~x@L~Hfp-NVaD#6bdWKc;gPB-nwV7%&8{mW;t*^pCaiQkf=3$~4-lRR64V-WYXAwh zA-8Ae+_HGL<5~ANP#pSgh+}WcDyMj(yONf-uA8yhK!aZ1DPi|noZlSDp3WMF+#ERb z?%b1|N~}^C5BBnQXNCsDdGTY*Dh=yoe5XW{^>#)GJ&eilj^Gj=ZR%i@t^#k<5%m;W z3Li68{YmsnJ9_RxX(Q_$T4W0c3HF++`INTL+;eO{5eJv!xk^BS?X~_WbGOJ1mNN(m zF-H1k4)0WeWO9Pt?ymWMQ6NFPK?Ub9N(1ZkTI-27^f`|cIj})G9L8c`YtG{x&ZC+} z3ziKYp2`*WwBNTA@&mOL{ebfbrPurrbBs1%69enm?AD->|l$sXPI+J+GA!QXch z5aH&vVvYHI;4A~_1dM!pq5A%4c*`2zroc+VwHhS&EAPY z-Eh77nCXXZNeM{c<(^oc`c+Yz*J#7&mSp2la^Q(Qb%WM&Jic7SS%Y44N{sn9$N3Z8 z(04qbFG;z-V3~Bl52822wP1~3j1PMH0dA%MohBEP?!TBG0&jI#JaZD-FdDzS*JV8( ztC`6v?TR7hQ}(`F*v$3=@V7+}58Iu;ehq;o_5JP7BkHK~Ds&w?Q22nKX^|Dn!K%9zjTmaR}!+=T8sup+il6mo2)LXM^{8h=a2aU}O5h zh7Mqdj%@ zM6@V)uSbZxCms67i{khDpDB4Uime;4B|#jtf#ZVqAD`E|LoET_px(p2D0VD1!?zcY zmWhl!G!wepgRLOJ)`ib{X?T#* zOL$j`Y$^Vvp8m%(S138oGrd2lr(kMg21f4UBJ#6*IJa-TuJ1qz!H!I@93u+W`THBJ zT3lUVH~h|Z`{Hw|j61xnQ4RRWuS$V)X>)GLIop79emJvnE^W^J0_Qf7vj&{MnuX#a z`crbBpYHEzImd}`WYwRg?LIdXMBC(8Zy0OANT_F=7??G}l9_hTFO*~O6JMK! z-yw$daVs9KaYrB2jj7>I50hc74(_fwDRQ(*Dkcf8ar~ZIcREXI>l*P4xE6!!j$D4x zVE<=da^M>M{e^wmwS{#8;S1O{vb#io!>niL^ z*6u*83(pYPc1V@wY3i(#YLH);4}%@|FLGktA%sYY2sbA7CZdP=FJ!8F2KxI422evn zmr$>8InbE+rU7nt_w)=53kYTY4Dbwz2nr4Sc?nZ3W+<%0F>&GC)0ghKi1jr@5Wa5i z8yXtKoTRQELid5*KO{meAP5vt3k>m5$8Q7GRf&@-JZplEBh)97_+SvGs&v+ugCX#? z4U_zc5I>dc{>|3vXMks5Kq&Nkp+5uY0o^ef9_|4@1wpVyQy_RP5fBs-xR~JuA*!hA z--5zf3?V_Ds{UZUKrhxcVN~K)V%?PZwHS7K_i_h2{3ge$KW`-S{xd)ohdnxI1+u7A zS*G@Z)dSy%Ul7BGtH1{TtHO)`)~=D`7q=4%vwV4bMFDm`_FhX@rLU;GY?hHS74?j9J4$~6`ud2{$c;PHPG!Psan!8YU zSW@EX-G93ilKoo&-F{P`PV;!NY$X_8w~p~CFlsh}dj zhB6or+#Ed(-R~C}r`!cBlq;enbbq73PgjPxKYtUMCSpQvyy)-*hmO{OhB7pQ35EUB zwtjT*d*5Fu*UR0IP%oi`vP2oP(}Tv-{b!==q9GIjg_uMShTo)dc2Z7JAbCzABHO?7 zlAaa;#-4!$*Y8Tdx2ytNZ^6L#`{uOw)(RMV7Z5rU#T*pKWHSEN%Bcpp`_q4AVa|~t zMb5&1WSPIV@WA)i0KyvZMDW*@3*z+bJ6K#j!wI!Ce^+8a`LkGV65*c<0z zT=q|*b^BdbdL01(Nw49+h;0uT$2cGmN>$x642IJ%U?VQT`+ebp34wHV4@Qu-7Uj3z zFKQI^Hb@$y>OrPqag|7lO$hHq`~wcS3n}mg3Uq9u+y7NGs_GDtl?RB*ZYh5im6B1m z)>{88BGq;flVwCA>hHXydn^d?x-Vc@izNf)LSGDH8#+8wgZYy7FO>hweZcjXYgJ;| zO-cyJ(265wyh5H2}GOhVi}c4h?qYW&diW|H(T48V>% zzWf8dx}$|Nds2lnyP4RtsBjop2Konv1i{cxHT+kN9E*^t3cG}`rz9R>-rn>O9I}Rm zdaF((2k^i0`oAOw3jXDqD8}EJ|EJ!VJ=6vsi=t)N;Q{cq?l0Vkau>wMn^jp$0b0Z$ zH!Q%5;mIIIxW6(5^){fPUP2yVcdy^o;=h$UDva5|J!QK~5JRE7a5N10^9+HWN!6Pk z>iMft2IVdwq+AgNPY@BA{vA*EO{AHK7|@>LIwrcguX|{?k7`(m-!H7)eG}&HXN>N0 zh8#1z{8V9v3X2>}n9uym>OF5}+3ar&Fw=tx)Nd*aZes?q@dTqx9B2N6$^~7FD$bW# z$r9WD64%|8>Q}a4Zy2mft{PBT$S|U~3EioS4k3O)xG)5pm}zUN1^ja9fVI&XP_upz z4chO7WcwI}AwY0}t&ijQj z#CiiUs0Y683#c-`@8GHVh1k?fa0GZ*`wxw&3JXM3L%<~%g53@oyL-V4DBcn37z*#1 z`NQ%~DP#WEBRlzw1W2O$+h6FTl=N3`3aK~?x_E*zYq7YR1OKZAev3O_@b@N5p+%%9h=#23JX zRX%J)y904K_2(6_Cin9y946FIU)fF1FIwPpGPH% z>;E)&wmWX!I2hhb$qk$o2(|$h*cQ2yg=g%Uabu4ie4IDY5*gI?6wNY=t^$sI=x`I2 zH$$t~&2oyStps8VAWb+F4&7CSdY3aoMYPq2~- z2{-40?||f%c2Ij#de}ew3-QKfVMjCy@?HZ&e|NE8nXQT-GKYIPiob`eF) z14W-y7VlZ5x9YVHg*vH47|HEIC~YFpNRSrdV)U%GfS*A%B+{lz{bgH&LV*`;2DcSd zVj%^y&L&dYk*T*z!MxpTyXpWxmxFCJho|3v`=A?u5C8q}>2lywgvUcLxocLyo`QYhv*bjbt(&-*|H>4g15D{^+atJH1GDw5WqpjZ^Gn_$UCRaiy znj&*;humEDqUF(aEu@+pRIz0F>-1;YheoMo`wG;i8O$Hzcm^FdLo6wG6M89c5lO$| z7P|csj?_!3I@osd?b=)fT{PT#w-|p6@&1$WCI;PWRweK{)DM>v|4i)kM!`kgr z^MC7&MMIOxhl$O58grBH)L_cpSda>)85-(n>P)MK#xw&O@#RvsFoT^zP1~_EOZN>2 ze!$2s!Sg2$5z`JH?02Qq)q?oG(*sjf>Yrw?ge|09e<=#3jCQ6`G8QdBQ%v9#%uUk9Co%!LWVPzgCmrjFbN<(xeSA!evGP2qmR}P?eCIRe537%{n{@6TT>}35e zhk3wxrx?s`eear0`|X-_ay~b?rbU1L_e^H;0V(V}aQM3JA2_!;-Apqi>sU#8n*H51s z0<_a^9=9ASr;XtYcNS^#T@`OLcgH4&;8Sf?Hf;D3*n5Sx@BxPsBBHn1@;zu7t99cB z;rhz&HZ^(PpKa#mq0Kp**0x}JEB_V>lb!x{bj|l@`8R}o`?EEZpnHh;On`<1_mC*_ z8Y%_8hfrBe5GwFpgzS`PMC|h(0^{_C%9yx^l&xZj*vCESWd%c{z>5f_P;THQ2u&jv zG0hzFjSw0REULI6fq1eV78(hrP_O;R;3mZ%YK@mW^hnoF{wHG)#I=}Jv>h|hGg}TEpVys zQR7h6O?r#;keAFBlnT5EGle|^FF{hQqCI_TkmM8>Uo$jAp2ap5XYihx;{p#N$(E}y zqk%r!aN;r^5)LeyBMpgKmw`~79LeG9gnMn@b+(j&N`ZB5idK||xB|@q;Y6d@w8B*; zNH{QZ-kH)32~&iObw2JvcSR8b4%|b+cKkOe=<^-|QmY`K&wB`*lYVFYkidJ$ln?cE-w&}>a zR-DcP<(vs z9@}d&wGxsYlW%)l)|eM#{_@6fqzk8TBdA{?fa}i@Xm}D2#=Jjo=vy7qO9)2xyu**# zykwH!#+Q_1lx>A_kLyJwd*6S{^MuXYk@K2LrNXDjoc`nd<>k8P3Bk+3EJOBy;`M3! z?C$8zSNp^Iiu?F>e>|M<_TtuMz1eLaet9~7MEHFDa(#VX9qmwaeZ1h2w;mpMhu4k! zu$+&pAFp`3u8x~zCLNr!#Qph^gK2`lZ_iuvkvALO)0P@B*PnjkK#cX-o`?=S03l0n z2R6JS-0rU@{x?+}r$#-JH^1-o#;uc=Y)s=c%Ioam$CmdFSCd1y-#`7_9o8Uzgw8W= zY-UNpL+6#BK{&0^+HWO7Rx@!YLI}4GJIy*Rl6U4j2Sl z2DOGGy?(l-gFVfV;u76ggJOciktITGHVccd*p@A?)8k_yCy_AVKfa8uq>~|!vTD)F z^auQgsF+}E+wsj`5saV}c+m>BZXj5h;W;$$G6Bz8t$gi=Ph6dJI;xa`M1g6j1$hc~ z4-Jb;_Edk8^AdOwb_&e~W`ZQ(#J9(Sl3pO)VDlCjeydW@t5S;;*s40PtCZRi?V&kz zl~tUgSdA^|bbJbIGh!$5?*YwxD7Dg}`$rD+(Q0nL^h)tyZNO#}7;OppiM<$GP( z7KLn^HSW5dF0gQ1;M&Kc)$3ukz;HlyM9t0t#K6j+@FG2<>KRb0l(3`ef@c36H2Yvp znad`UT;eKpd83TqCad z_jKwmWke;FXFA8;40GpT5qW<+ULRoIXxy=MrZ-1$6A{zf2WpfCk29qRj278{s*1m74 zo!@L6)7zj<|EEBZASDR26ab}zHN%#3pLkSv%DO)($xpVPuCI1jvez8F=X`ZBwR_}y6YEp5>E24A>q!#Hq$i#kpf0yQj)U)?@ zO;Ae}>FNoR$xt+>(*ORObox%$`_qA$KwsXCc(sn|#7tRN;L##i<{@deCl9TXgNiBV zR(`G(hwIHunffI3_gYY6(vCVgw&w4VR70Sp&woUuZgnPD=Z(Zs1#wd!G|nAv>taT* z!eZ{HWogH{6lAY^gX?7=;{eR0s0F+U39Uz^4EP0JWPnT2T)|7wqIF-cJHRV2r|$S+ zdULY@ev_juKN47GwtBFWfCGccB)8fsuGqlpvu`lN9JTH#7Nw`7}?58dZTugbOnXQ)=z>FrD;K^O*3RX*6hJ{=`Qb`?kHuT zQ(!R_$s8NZWUmLeO2I%nV0P-wp^ZV!pgL5H>u_tkU57v^1BC)FTDjHw0Jlm>>xr5@ zBP=F@2$GZZxTSU)Gea~9S`Uc{(MftFI)iB)=NtFTm(hlP3k42b=9|GxedHz6ULCeA zm9ySakZxM=D^AXRL*fiGW8)w-CdLklIl1{nD@M&;S2iAm0O#4!BO->~Z&^$HF+0fl zQTu}6QPxJnt6t5kfxpryRhuRBWryujCLyc5NPG(4#(BlrvCd=c+Iaoz|Mb7V0K=DO AbN~PV diff --git a/examples/send-eth.ts b/examples/send-eth.ts index c24591b..a1430e0 100644 --- a/examples/send-eth.ts +++ b/examples/send-eth.ts @@ -2,6 +2,8 @@ import { deriveEthAddress, signAndSendTransaction } from "../src/chains/ethereum"; +import dotenv from "dotenv"; +dotenv.config(); const run = async (): Promise => { const ethAddress = await deriveEthAddress("ethereum,1"); @@ -13,4 +15,4 @@ const run = async (): Promise => { ); }; -run(); +run().then(() => console.log("Done!")); diff --git a/package-lock.json b/package-lock.json index f43465c..7987f52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,17 +21,19 @@ "hash.js": "^1.1.7", "keccak": "^3.0.4", "near-api-js": "^3.0.3", - "typescript": "^5.4.2", "web3": "^4.5.0" }, "devDependencies": { "@types/bn.js": "^5.1.5", "@types/bun": "latest", "@types/elliptic": "^6.4.18", + "@types/jest": "^29.5.12", "@types/keccak": "^3.0.4", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "dotenv": "^16.4.5", "eslint": "^8.57.0", + "ts-node": "^10.9.2", "typescript": "^5.4.2" } }, @@ -47,6 +49,206 @@ "version": "1.10.0", "license": "MIT" }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -844,6 +1046,62 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, "node_modules/@near-js/accounts": { "version": "1.0.3", "license": "ISC", @@ -1106,6 +1364,36 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, "node_modules/@types/bn.js": { "version": "5.1.5", "dev": true, @@ -1131,6 +1419,40 @@ "@types/bn.js": "*" } }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "license": "MIT" @@ -1155,6 +1477,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.10", "dev": true, @@ -1163,6 +1491,21 @@ "@types/node": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", @@ -1406,6 +1749,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/aes-js": { "version": "3.0.0", "license": "MIT" @@ -1480,6 +1832,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "dev": true, @@ -1615,6 +1973,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -1646,6 +2019,12 @@ "node": ">=0.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-fetch": { "version": "4.0.0", "license": "MIT", @@ -1727,6 +2106,24 @@ "node": ">= 0.8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "dev": true, @@ -1749,6 +2146,18 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/elliptic": { "version": "6.5.5", "license": "MIT", @@ -1998,6 +2407,22 @@ "version": "5.0.1", "license": "MIT" }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -2210,6 +2635,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "dev": true, @@ -2459,10 +2890,92 @@ "ws": "*" } }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "license": "MIT" }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, "node_modules/js-yaml": { "version": "4.1.0", "dev": true, @@ -2556,6 +3069,12 @@ "node": ">=10" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/merge2": { "version": "1.4.1", "dev": true, @@ -2818,6 +3337,32 @@ "node": ">= 0.8.0" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/punycode": { "version": "2.3.1", "license": "MIT", @@ -2851,6 +3396,12 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/readable-stream": { "version": "3.6.2", "license": "MIT", @@ -3009,6 +3560,27 @@ "node": ">=8" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/statuses": { "version": "1.5.0", "license": "MIT", @@ -3094,6 +3666,49 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/type-check": { "version": "0.4.0", "dev": true, @@ -3118,7 +3733,8 @@ }, "node_modules/typescript": { "version": "5.4.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3157,6 +3773,12 @@ "version": "2.0.3", "license": "ISC" }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, "node_modules/web3": { "version": "4.6.0", "license": "LGPL-3.0", @@ -3551,6 +4173,15 @@ "dev": true, "license": "ISC" }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, diff --git a/package.json b/package.json index cbca153..82872ab 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "near-ca", "module": "index.ts", - "type": "module", "version": "0.0.0-alpha.1", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -13,10 +12,13 @@ "@types/bn.js": "^5.1.5", "@types/bun": "latest", "@types/elliptic": "^6.4.18", + "@types/jest": "^29.5.12", "@types/keccak": "^3.0.4", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", + "dotenv": "^16.4.5", "eslint": "^8.57.0", + "ts-node": "^10.9.2", "typescript": "^5.4.2" }, "dependencies": { @@ -33,7 +35,6 @@ "hash.js": "^1.1.7", "keccak": "^3.0.4", "near-api-js": "^3.0.3", - "typescript": "^5.4.2", "web3": "^4.5.0" } } diff --git a/src/chains/ethereum.ts b/src/chains/ethereum.ts index 2c0acb4..4cb1e2a 100644 --- a/src/chains/ethereum.ts +++ b/src/chains/ethereum.ts @@ -35,9 +35,9 @@ export const deriveEthAddress = async (derivationPath: string): Promise useLocalViewExecution: false, } ); - - const rootPublicKey = await multichainContract.public_key(); - + + const rootPublicKey = await (multichainContract as any).public_key(); + console.log("Root PK", rootPublicKey); const publicKey = await deriveChildPublicKey( najPublicKeyStrToUncompressedHexPoint(rootPublicKey), process.env.NEAR_ACCOUNT_ID!, diff --git a/src/index.ts b/src/index.ts index 9086bc3..8297c29 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,5 +3,4 @@ import { signAndSendTransaction, web3, } from "./chains/ethereum"; - export { deriveEthAddress, signAndSendTransaction, web3 }; diff --git a/tsconfig.json b/tsconfig.json index 91e66b4..6273825 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,9 +18,9 @@ "noFallthroughCasesInSwitch": true, // Some stricter flags (disabled by default) - "noUnusedLocals": false, - "noUnusedParameters": false, + "noUnusedLocals": true, + "noUnusedParameters": true, "noPropertyAccessFromIndexSignature": false }, - "exclude": ["node_modules", "dist", "examples"] + "exclude": ["node_modules", "dist", "examples", "tests"], } From 6fce557f03d616d7b000b5d9f4d7c73fc79d5cc8 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Tue, 12 Mar 2024 14:54:19 +0100 Subject: [PATCH 3/4] interface for mpf contract --- .github/workflows/ci.yaml | 3 --- examples/buy-nft.ts | 2 +- examples/send-eth.ts | 2 +- src/chains/ethereum.ts | 31 +++++++------------------------ src/mpc_contract.ts | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 43 insertions(+), 29 deletions(-) create mode 100644 src/mpc_contract.ts diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0c18430..95803f1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -22,6 +22,3 @@ jobs: - name: Lint run: npm run lint - - # - name: Run Tests - # run: npm test \ No newline at end of file diff --git a/examples/buy-nft.ts b/examples/buy-nft.ts index 8a19402..ed18ef8 100644 --- a/examples/buy-nft.ts +++ b/examples/buy-nft.ts @@ -10,7 +10,7 @@ const run = async (): Promise => { const seaportAddress = "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC"; const salePrice = 0.05; const callData = "0x0000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad31dde0cce000000000000000000000000000262d23a2d916f6cf08e0235315aa51e22d142d0b000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c00000000000000000000000000d4b922e90cb5daa6422ac018acde78dbbe23e4eb0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065f014fb000000000000000000000000000000000000000000000000000000006618e56b0000000000000000000000000000000000000000000000000000000000000000360c6ebe000000000000000000000000000000000000000030c75abf8edea43a0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000a26b00c1f0df003000390027140000faa71900000000000000000000000000000000000000000000000000000000000000400f00e0a3e6be600317f02b2787804d9718ebfbd8016933ab48c8153396a5359038104375bdc311d1f21ed2af05e504c9c16b7482cc2bbed57663dd234ea1a4dd00000000360c6ebe"; - + await signAndSendTransaction( sender, seaportAddress, diff --git a/examples/send-eth.ts b/examples/send-eth.ts index a1430e0..414f1b2 100644 --- a/examples/send-eth.ts +++ b/examples/send-eth.ts @@ -15,4 +15,4 @@ const run = async (): Promise => { ); }; -run().then(() => console.log("Done!")); +run(); diff --git a/src/chains/ethereum.ts b/src/chains/ethereum.ts index 4cb1e2a..2978f63 100644 --- a/src/chains/ethereum.ts +++ b/src/chains/ethereum.ts @@ -3,7 +3,7 @@ import { FeeMarketEIP1559Transaction } from "@ethereumjs/tx"; import { bytesToHex } from "@ethereumjs/util"; import { BN } from "bn.js"; import { providers } from "ethers"; -import { Contract, providers as nearProviders } from "near-api-js"; +import { providers as nearProviders } from "near-api-js"; import { functionCall } from "near-api-js/lib/transaction"; import {Web3, Bytes} from "web3"; import { @@ -13,6 +13,7 @@ import { } from "../utils/kdf"; import { NO_DEPOSIT, getNearAccount, provider as nearProvider } from "./near"; import { GasPriceResponse, GasPrices, TxPayload } from "../types"; +import { getMultichainContract } from "../mpc_contract"; const config = { chainId: 11155111, @@ -26,18 +27,9 @@ export const provider = new providers.JsonRpcProvider(config.providerUrl); export const deriveEthAddress = async (derivationPath: string): Promise => { const account = await getNearAccount(); - const multichainContract = new Contract( - account, - process.env.NEAR_MULTICHAIN_CONTRACT!, - { - changeMethods: ["sign"], - viewMethods: ["public_key"], - useLocalViewExecution: false, - } - ); - - const rootPublicKey = await (multichainContract as any).public_key(); - console.log("Root PK", rootPublicKey); + const multichainContract = getMultichainContract(account); + const rootPublicKey = await multichainContract.public_key(); + const publicKey = await deriveChildPublicKey( najPublicKeyStrToUncompressedHexPoint(rootPublicKey), process.env.NEAR_ACCOUNT_ID!, @@ -52,6 +44,7 @@ async function queryGasPrice(): Promise { "https://sepolia.beaconcha.in/api/v1/execution/gasnow" ); const json = await res.json() as GasPriceResponse; + console.log("Response", json); const maxPriorityFeePerGas = BigInt(json.data.rapid); // Since we don't have a direct `baseFeePerGas`, we'll use a workaround. @@ -135,16 +128,7 @@ export const relayTransaction = async ( export const requestSignature = async (payload: number[], path: string): Promise<{big_r: string, big_s: string}> => { const account = await getNearAccount(); - - const multichainContract = new Contract( - account, - process.env.NEAR_MULTICHAIN_CONTRACT!, - { - changeMethods: ["sign"], - viewMethods: ["public_key"], - useLocalViewExecution: false, - } - ); + const multichainContract = getMultichainContract(account); const request = await account.signAndSendTransaction({ receiverId: multichainContract.contractId, actions: [ @@ -165,7 +149,6 @@ export const requestSignature = async (payload: number[], path: string): Promise const [big_r, big_s] = await nearProviders.getTransactionLastResult( transaction ); - console.log(big_r, big_s); return { big_r, big_s }; }; diff --git a/src/mpc_contract.ts b/src/mpc_contract.ts new file mode 100644 index 0000000..974f54a --- /dev/null +++ b/src/mpc_contract.ts @@ -0,0 +1,34 @@ +import { Contract, Account } from "near-api-js"; + +interface MultichainContract extends Contract { + // Define the signature for the `public_key` view method + public_key: () => Promise; + + // Define the signature for the `sign` change method + // The exact parameters and return type will depend on how the method is defined in your smart contract + sign: (args: SignArgs) => Promise; +} + +// Assuming you have some arguments for the `sign` method, define them here +interface SignArgs { + // Example argument - adjust according to your actual contract method's parameters + message: string; +} + +// Assuming the `sign` method returns something specific, define that structure here +interface SignResult { + // Example return structure - adjust according to your actual contract method's return type + signature: string; +} + +export function getMultichainContract(account: Account): MultichainContract { + return new Contract( + account, + process.env.NEAR_MULTICHAIN_CONTRACT!, + { + changeMethods: ["sign"], + viewMethods: ["public_key"], + useLocalViewExecution: false, + } + ) as MultichainContract; +} From 554ff182243df67b59ab0320e137ba80198b5772 Mon Sep 17 00:00:00 2001 From: Ben Smith Date: Tue, 12 Mar 2024 15:44:49 +0100 Subject: [PATCH 4/4] fix env var processing --- examples/buy-nft.ts | 8 ++++---- examples/mint-nft.ts | 6 +++--- examples/send-eth.ts | 6 +++--- examples/set-approval-for-all.ts | 4 ++-- examples/setup.ts | 8 ++++++++ examples/transfer-nft.ts | 8 ++++---- 6 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 examples/setup.ts diff --git a/examples/buy-nft.ts b/examples/buy-nft.ts index ed18ef8..9fa316d 100644 --- a/examples/buy-nft.ts +++ b/examples/buy-nft.ts @@ -1,15 +1,15 @@ import { - deriveEthAddress, signAndSendTransaction } from "../src/chains/ethereum"; +import { setupAccount } from "./setup"; const run = async (): Promise => { - const sender = await deriveEthAddress("ethereum,1"); + const sender = await setupAccount(); // TODO - encode call Data from OpenSeaSDK. // https://github.com/ProjectOpenSea/opensea-js/blob/main/developerDocs/advanced-use-cases.md const seaportAddress = "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC"; - const salePrice = 0.05; - const callData = "0x0000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ad31dde0cce000000000000000000000000000262d23a2d916f6cf08e0235315aa51e22d142d0b000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c00000000000000000000000000d4b922e90cb5daa6422ac018acde78dbbe23e4eb0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065f014fb000000000000000000000000000000000000000000000000000000006618e56b0000000000000000000000000000000000000000000000000000000000000000360c6ebe000000000000000000000000000000000000000030c75abf8edea43a0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000a26b00c1f0df003000390027140000faa71900000000000000000000000000000000000000000000000000000000000000400f00e0a3e6be600317f02b2787804d9718ebfbd8016933ab48c8153396a5359038104375bdc311d1f21ed2af05e504c9c16b7482cc2bbed57663dd234ea1a4dd00000000360c6ebe"; + const salePrice = 0.1; + const callData = "0x00000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015a63bbc199c0000000000000000000000000008d99f8b2710e6a3b94d9bf465a98e5273069acbd000000000000000000000000004c00500000ad104d7dbd00e3ae0a5c00560c00000000000000000000000000d4b922e90cb5daa6422ac018acde78dbbe23e4eb0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065eef070000000000000000000000000000000000000000000000000000000006617c0e00000000000000000000000000000000000000000000000000000000000000000360c6ebe00000000000000000000000000000000000000001561f4d71353b5740000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000008e1bc9bf040000000000000000000000000000000a26b00c1f0df003000390027140000faa7190000000000000000000000000000000000000000000000000000000000000040420a0b17bb103f09242108316294c491ea7dbf43d9a7c07373a395fcfc9147242e05c8d7700733851114fc85dc50789c612739b6cdcc2254f25132eb5eb76f5600000000360c6ebe"; await signAndSendTransaction( sender, diff --git a/examples/mint-nft.ts b/examples/mint-nft.ts index cc03915..177c63f 100644 --- a/examples/mint-nft.ts +++ b/examples/mint-nft.ts @@ -1,11 +1,11 @@ import { - deriveEthAddress, signAndSendTransaction, web3, } from "../src/chains/ethereum"; +import { setupAccount } from "./setup"; const run = async (): Promise => { - const ethAddress = await deriveEthAddress("ethereum,1"); + const sender = await setupAccount(); const functionSignature = web3.eth.abi.encodeFunctionCall( { name: "safeMint", @@ -21,7 +21,7 @@ const run = async (): Promise => { ); await signAndSendTransaction( - ethAddress, + sender, "0xAA5FcF171dDf9FE59c985A28747e650C2e9069cA", 0, functionSignature diff --git a/examples/send-eth.ts b/examples/send-eth.ts index 414f1b2..8c5336e 100644 --- a/examples/send-eth.ts +++ b/examples/send-eth.ts @@ -1,15 +1,15 @@ import { - deriveEthAddress, signAndSendTransaction } from "../src/chains/ethereum"; import dotenv from "dotenv"; +import { setupAccount } from "./setup"; dotenv.config(); const run = async (): Promise => { - const ethAddress = await deriveEthAddress("ethereum,1"); + const sender = await setupAccount(); await signAndSendTransaction( - ethAddress, + sender, "0xAA5FcF171dDf9FE59c985A28747e650C2e9069cA", 0.001 ); diff --git a/examples/set-approval-for-all.ts b/examples/set-approval-for-all.ts index 1215ae0..91e277b 100644 --- a/examples/set-approval-for-all.ts +++ b/examples/set-approval-for-all.ts @@ -1,16 +1,16 @@ import { - deriveEthAddress, signAndSendTransaction, } from "../src/chains/ethereum"; import { erc721Interface } from "../src/utils/interfaces"; +import { setupAccount } from "./setup"; const run = async (): Promise => { - const sender = await deriveEthAddress("ethereum,1"); + const sender = await setupAccount(); const value = 0; const tokenAddress = "0xe66be37f6b446079fe71a497312996dff6bd963f"; const operator = "0x8d99F8b2710e6A3B94d9bf465A98E5273069aCBd"; diff --git a/examples/setup.ts b/examples/setup.ts new file mode 100644 index 0000000..998720a --- /dev/null +++ b/examples/setup.ts @@ -0,0 +1,8 @@ + +import dotenv from "dotenv"; +import { deriveEthAddress } from "../src/chains/ethereum"; +dotenv.config(); + +export async function setupAccount(): Promise { + return deriveEthAddress("ethereum,1"); +} \ No newline at end of file diff --git a/examples/transfer-nft.ts b/examples/transfer-nft.ts index ae630d0..24aece3 100644 --- a/examples/transfer-nft.ts +++ b/examples/transfer-nft.ts @@ -1,15 +1,15 @@ import { - deriveEthAddress, signAndSendTransaction } from "../src/chains/ethereum"; import { erc721Interface } from "../src/utils/interfaces"; +import { setupAccount } from "./setup"; const run = async (): Promise => { - const sender = await deriveEthAddress("ethereum,1"); + const sender = await setupAccount(); const value = 0; // TODO retrieve from user: - const tokenAddress = "0xe66be37f6b446079fe71a497312996dff6bd963f"; - const tokenId = 2; + const tokenAddress = "0xd4b922e90cb5daa6422ac018acde78dbbe23e4eb"; + const tokenId = 3; const to = "0x8d99F8b2710e6A3B94d9bf465A98E5273069aCBd"; const callData = erc721Interface().encodeFunctionData("safeTransferFrom(address,address,uint256)", [sender, to, tokenId]);