diff --git a/package-lock.json b/package-lock.json index de84530..432bf56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "GPL-3.0-or-later", "dependencies": { "@alephium/cli": "^1.11.6", - "@alephium/web3": "^1.11.6", - "@alephium/web3-wallet": "^1.11.6", + "@alephium/web3": "^2.0.8", + "@alephium/web3-wallet": "^2.0.8", "@opentelemetry/api": "^1.9.0", "@opentelemetry/auto-instrumentations-node": "^0.57.0", "@opentelemetry/exporter-prometheus": "^0.200.0", @@ -24,6 +24,7 @@ "@opentelemetry/semantic-conventions": "^1.30.0", "async-mutex": "^0.5.0", "bip39": "^3.1.0", + "cron": "^4.1.3", "dotenv": "^16.4.7", "reflect-metadata": "^0.2.2", "sqlite3": "^5.1.7", @@ -31,14 +32,13 @@ "typeorm": "^0.3.22" }, "devDependencies": { - "@alephium/web3-test": "^1.11.6", + "@alephium/web3-test": "^2.0.8", "@babel/preset-env": "^7.26.9", "@telegraf/types": "^7.1.0", "@tsconfig/node18": "^18.2.4", "@types/jest": "^29.5.14", "@types/node": "^20.17.30", "babel-jest": "^29.7.0", - "cron": "^4.1.3", "eslint": "^8.57.1", "eslint-config-love": "^43.1.0", "eslint-plugin-import": "^2.31.0", @@ -82,6 +82,63 @@ "npm": ">=7.0.0" } }, + "node_modules/@alephium/cli/node_modules/@alephium/web3": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@alephium/web3/-/web3-1.12.0.tgz", + "integrity": "sha512-6aglAIsr2DapSoKVMxQhFoOfD+S/gH4wyU8vlaHphP1ASs6MO7R/6j/shMk0ZyRD0JFjTH95Od0Yu19CPrFp1A==", + "license": "GPL", + "dependencies": { + "@noble/secp256k1": "1.7.1", + "base-x": "4.0.0", + "bignumber.js": "^9.1.1", + "blakejs": "1.2.1", + "bn.js": "5.2.1", + "cross-fetch": "^3.1.5", + "crypto-browserify": "^3.12.0", + "elliptic": "6.6.1", + "eventemitter3": "^4.0.7", + "path-browserify": "^1.0.1", + "stream-browserify": "^3.0.0" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@alephium/cli/node_modules/@alephium/web3-wallet": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@alephium/web3-wallet/-/web3-wallet-1.12.0.tgz", + "integrity": "sha512-IgjrPxdjOndiUgJLRlB+rNtYyuY5GCtY7LzJN72mch2DDvIdfLXxLyIHh3Jrj3iN/RoNhA38gZ9avIwgnRkh1A==", + "license": "GPL", + "dependencies": { + "@alephium/web3": "^1.12.0", + "@noble/secp256k1": "1.7.1", + "@types/node": "^16.18.23", + "bip32": "3.1.0", + "bip39": "3.0.4", + "buffer": "6.0.3", + "elliptic": "6.6.1", + "fs-extra": "10.0.1" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@alephium/cli/node_modules/@alephium/web3-wallet/node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@alephium/cli/node_modules/@jest/console": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", @@ -368,6 +425,12 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@alephium/cli/node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "license": "MIT" + }, "node_modules/@alephium/cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -431,6 +494,48 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@alephium/cli/node_modules/bip39": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", + "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", + "license": "ISC", + "dependencies": { + "@types/node": "11.11.6", + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1" + } + }, + "node_modules/@alephium/cli/node_modules/bip39/node_modules/@types/node": { + "version": "11.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "license": "MIT" + }, + "node_modules/@alephium/cli/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@alephium/cli/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -1081,9 +1186,9 @@ } }, "node_modules/@alephium/web3": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@alephium/web3/-/web3-1.11.6.tgz", - "integrity": "sha512-ifdDxDFs7oLxZeqHWcUTTImVrhYoRJhNb5lc/J3pnq6eSnY4OII3WwsIphEKzB19x32gHsHwISkjVRxlwwLlVw==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@alephium/web3/-/web3-2.0.8.tgz", + "integrity": "sha512-2HktwrbmsgIEEfEWUBaHgupY1u0s5hFCt9t6aaTy0TUJGDsESXY9mJdLhcmGE42muzj6khXbjMjWPHToYS6zBQ==", "license": "GPL", "dependencies": { "@noble/secp256k1": "1.7.1", @@ -1104,14 +1209,14 @@ } }, "node_modules/@alephium/web3-test": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@alephium/web3-test/-/web3-test-1.11.6.tgz", - "integrity": "sha512-N/aMcRv0msI54jEUZO6ZLasRcUblGe3cHRJOuJHA7IHpP9Ts6HllZAHvZnkhXjXyHfDoZj1SR21/TVgOVVIkYg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@alephium/web3-test/-/web3-test-2.0.8.tgz", + "integrity": "sha512-41eZU1mCws8X4AMFIgC3BJdYsMqQ2AZ0OYGyQY4uxpgJqlo0zVLq/gNwTfoshN2Cu7kN/bhLa3AIKw+KdcBdjw==", "dev": true, "license": "GPL", "dependencies": { - "@alephium/web3": "^1.11.6", - "@alephium/web3-wallet": "^1.11.6" + "@alephium/web3": "^2.0.8", + "@alephium/web3-wallet": "^2.0.8" }, "engines": { "node": ">=14.0.0", @@ -1119,16 +1224,17 @@ } }, "node_modules/@alephium/web3-wallet": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@alephium/web3-wallet/-/web3-wallet-1.11.6.tgz", - "integrity": "sha512-IT96qQ9Tthut+TYTNFOzQ8CwkJmOVZYh4AEFqcui98AllGRjE0ipTmhTGF5ubsNo81qM2R+gWUL8AGZd9idXIQ==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@alephium/web3-wallet/-/web3-wallet-2.0.8.tgz", + "integrity": "sha512-U8A2L0y6qazNE+evR9Xe+v+rR4ZUEwSgROerto+0zfBxgcsPBithsGszR3ifXAaaotlpIQJXi0nTgIV4lvFNMw==", "license": "GPL", "dependencies": { - "@alephium/web3": "^1.11.6", + "@alephium/web3": "^2.0.8", "@noble/secp256k1": "1.7.1", "@types/node": "^16.18.23", "bip32": "3.1.0", "bip39": "3.0.4", + "buffer": "6.0.3", "elliptic": "6.6.1", "fs-extra": "10.0.1" }, @@ -1158,6 +1264,30 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==" }, + "node_modules/@alephium/web3-wallet/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/@alephium/web3-wallet/node_modules/fs-extra": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", @@ -1210,6 +1340,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", @@ -4439,6 +4570,7 @@ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -6216,8 +6348,7 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -6228,8 +6359,7 @@ "node_modules/@types/luxon": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", - "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", - "dev": true + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==" }, "node_modules/@types/memcached": { "version": "2.2.10", @@ -6254,6 +6384,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz", "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~6.19.2" } @@ -6287,8 +6418,7 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@types/shimmer": { "version": "1.2.0", @@ -6328,7 +6458,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", @@ -6364,7 +6493,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -6377,6 +6505,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -6422,7 +6551,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, - "peer": true, "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", @@ -6503,7 +6631,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -6529,7 +6656,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "peer": true, "bin": { "semver": "bin/semver.js" }, @@ -6582,6 +6708,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -7360,6 +7487,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -7914,7 +8042,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/cron/-/cron-4.1.3.tgz", "integrity": "sha512-HETm5kgivcdfboOmBIzq0cfC9c5bRilWZ1p7PWwnOMmbWviwIU6mPgZbeqbj5i0AzNan6P68WDTDEDezhKjOng==", - "dev": true, "license": "MIT", "dependencies": { "@types/luxon": "~3.4.0", @@ -8521,6 +8648,7 @@ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -8718,6 +8846,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", @@ -8795,6 +8924,7 @@ "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", @@ -8885,6 +9015,7 @@ "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -10729,6 +10860,7 @@ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "peer": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -11652,6 +11784,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -12473,7 +12606,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.0.tgz", "integrity": "sha512-WE7p0p7W1xji9qxkLYsvcIxZyfP48GuFrWIBQZIsbjCyf65dG1rv4n83HcOyEyhvzxJCrUoObCRNFgRNIQ5KNA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -13765,7 +13897,8 @@ "node_modules/reflect-metadata": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "peer": true }, "node_modules/regenerate": { "version": "1.4.2", @@ -14345,6 +14478,7 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", "hasInstallScript": true, + "peer": true, "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^7.0.0", @@ -14893,6 +15027,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, + "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -15285,6 +15420,7 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 572628b..e0ce729 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/notrustverify/tipALPH#readme", "devDependencies": { - "@alephium/web3-test": "^1.11.6", + "@alephium/web3-test": "^2.0.8", "@babel/preset-env": "^7.26.9", "@telegraf/types": "^7.1.0", "@tsconfig/node18": "^18.2.4", @@ -51,8 +51,8 @@ }, "dependencies": { "@alephium/cli": "^1.11.6", - "@alephium/web3": "^1.11.6", - "@alephium/web3-wallet": "^1.11.6", + "@alephium/web3": "^2.0.8", + "@alephium/web3-wallet": "^2.0.8", "@opentelemetry/api": "^1.9.0", "@opentelemetry/auto-instrumentations-node": "^0.57.0", "@opentelemetry/exporter-prometheus": "^0.200.0", diff --git a/src/services/alephium.ts b/src/services/alephium.ts index cbf1414..3bfcc4f 100644 --- a/src/services/alephium.ts +++ b/src/services/alephium.ts @@ -1,6 +1,5 @@ import { NodeProvider, Destination, DUST_AMOUNT, web3, isValidAddress, waitForTxConfirmation } from "@alephium/web3"; import { PrivateKeyWallet, deriveHDWalletPrivateKey } from "@alephium/web3-wallet"; -import { Balance } from "@alephium/web3/dist/src/api/api-alephium"; import { Repository } from "typeorm"; import { Mutex } from "async-mutex"; @@ -12,6 +11,8 @@ import * as Error from "../error.js"; import { User } from "../db/user.js"; import { Token } from "../db/token.js"; +type Balance = import("@alephium/web3").node.Balance; + export class AlphClient { private readonly nodeProvider: NodeProvider; private readonly mnemonicReader: () => string; @@ -86,8 +87,9 @@ export class AlphClient { const alphToken = await this.tokenManager.getTokenBySymbol("ALPH"); const userBalance = [new TokenAmount(balance.balance, alphToken)]; - if ("tokenBalances" in balance && undefined !== balance.tokenBalances && balance.tokenBalances.length > 0) { - const userTokens = await Promise.allSettled(balance.tokenBalances.map(async (t) => this.tokenManager.getTokenAmountFromIdAmount(t.id, t.amount))); + const tokenBalances = balance.tokenBalances ?? []; + if (tokenBalances.length > 0) { + const userTokens = await Promise.allSettled(tokenBalances.map(async (t) => this.tokenManager.getTokenAmountFromIdAmount(t.id, t.amount))); const recognisedToken = userTokens.filter(t => "fulfilled" === t.status); userBalance.push(...recognisedToken.map((t: PromiseFulfilledResult) => t.value)); if (userTokens.length != recognisedToken.length) diff --git a/src/telegram/bot.ts b/src/telegram/bot.ts index 1bf1046..6152366 100644 --- a/src/telegram/bot.ts +++ b/src/telegram/bot.ts @@ -346,7 +346,7 @@ export async function runTelegram(alphClient: AlphClient, userRepository: Reposi const messageText = ctx.message.text as string; const payload: string = messageText.trim(); - const sendAmountDestRegex = /^\/withdraw(?:@\w+)?\s+(?:(?\d+(?:[.,]\d+)?)|all)(\s+\$(?[a-zA-Z]{2,}))?\s+(?[a-zA-Z0-9]+)$/; + const sendAmountDestRegex = /^\/withdraw(?:@\w+)?\s+(?:(?\d+(?:[.,]\d+)?)|all)(\s+\$(?[a-zA-Z]{2,}))?\s+(?[a-zA-Z0-9]+(?::[0-3])?)$/; // These are the values that we are trying to determine let amountAsString: string; diff --git a/tests/alephium/address.test.ts b/tests/alephium/address.test.ts new file mode 100644 index 0000000..03bc841 --- /dev/null +++ b/tests/alephium/address.test.ts @@ -0,0 +1,21 @@ +import { isValidAddress } from "@alephium/web3"; + +describe("groupless address support", () => { + const p2pkGrouped = "3cUqhqEgt8qFAokkD7qRsy9Q2Q9S1LEiSdogbBmaq7CnshB8BdjfK:1"; + const p2pkGroupless = "3cUqhqEgt8qFAokkD7qRsy9Q2Q9S1LEiSdogbBmaq7CnshB8BdjfK"; + const p2hmpkGrouped = "CSYxX7pdWvrbqAQFfHaUsrL4xpgXKktsQF2yJ8P53AmCyGiNbU:0"; + const p2hmpkGroupless = "CSYxX7pdWvrbqAQFfHaUsrL4xpgXKktsQF2yJ8P53AmCyGiNbU"; + const p2pkhLegacy = "1GUgKXvPNkgEa6MBDXsKMGvpyyJnzwVMc1Zrzz2N78PiL"; + + it("accepts grouped and groupless P2PK/P2HMPK addresses", () => { + expect(isValidAddress(p2pkGrouped)).toBe(true); + expect(isValidAddress(p2pkGroupless)).toBe(true); + expect(isValidAddress(p2hmpkGrouped)).toBe(true); + expect(isValidAddress(p2hmpkGroupless)).toBe(true); + }); + + it("accepts legacy P2PKH addresses", () => { + expect(isValidAddress(p2pkhLegacy)).toBe(true); + }); +}); +