diff --git a/masterBitgoExpress.json b/masterBitgoExpress.json index c05fd4c7..0603c015 100644 --- a/masterBitgoExpress.json +++ b/masterBitgoExpress.json @@ -462,9 +462,6 @@ "ledgerSequenceDelta": { "type": "number" }, - "gasPrice": { - "type": "number" - }, "noSplitChange": { "type": "boolean" }, @@ -762,6 +759,36 @@ "coinSpecificParams": { "type": "object", "properties": { + "ecdsaCosmosLikeRecoverySpecificParams": { + "type": "object", + "properties": { + "rootAddress": { + "type": "string" + } + }, + "required": [ + "rootAddress" + ] + }, + "ecdsaEthLikeRecoverySpecificParams": { + "type": "object", + "properties": { + "apiKey": { + "type": "string" + }, + "bitgoDestinationAddress": { + "type": "string" + }, + "walletContractAddress": { + "type": "string" + } + }, + "required": [ + "apiKey", + "bitgoDestinationAddress", + "walletContractAddress" + ] + }, "evmRecoveryOptions": { "type": "object", "properties": { diff --git a/package-lock.json b/package-lock.json index a5133373..0712ab86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,6 +87,7 @@ "@bitgo-beta/statics": "15.1.1-beta.1046", "@bitgo/wasm-miniscript": "2.0.0-beta.7", "@commitlint/config-conventional": "^19.8.1", + "@ethereumjs/tx": "^3.3.0", "body-parser": "^1.20.3", "connect-timeout": "^1.9.0", "debug": "^3.1.0", @@ -2679,6 +2680,7 @@ "version": "1.0.1-beta.1024", "resolved": "https://registry.npmjs.org/@bitgo-beta/abstract-cosmos/-/abstract-cosmos-1.0.1-beta.1024.tgz", "integrity": "sha512-2ZSSb9t5AqmARK5WVtapDhd4wOhM0+6tUaroJc41yuGod6zhQFWHyqKvPEfAs64lRkTuWEnEpaIWhB22IsrS7w==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -2703,6 +2705,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2719,6 +2722,7 @@ "version": "3.5.4", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", @@ -2735,6 +2739,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -2745,13 +2750,15 @@ "node_modules/@bitgo-beta/abstract-cosmos/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@bitgo-beta/abstract-cosmos/node_modules/superagent": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -2771,6 +2778,7 @@ "version": "1.0.2-beta.1273", "resolved": "https://registry.npmjs.org/@bitgo-beta/abstract-eth/-/abstract-eth-1.0.2-beta.1273.tgz", "integrity": "sha512-pY8Sz9TkEp+OMJPBmWOIMKWsmQAWHJeKfrw8w/jqY9zgU17cSBz0mq7c8LVmE6rUymu0yQGaDU1cCKk7Xx9aEw==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -2871,6 +2879,7 @@ "version": "1.0.1-beta.405", "resolved": "https://registry.npmjs.org/@bitgo-beta/abstract-substrate/-/abstract-substrate-1.0.1-beta.405.tgz", "integrity": "sha512-O7X4go5pgKw/hD1dlfwkt7iQ5zLK4nZdh4RhTbF7PLc4cps1WhXb9i6e8DX0PlqeVJqOXcv9SsfWQkQD7SfASA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -2898,6 +2907,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -2906,6 +2916,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } @@ -2914,6 +2925,7 @@ "version": "1.1.1-beta.1276", "resolved": "https://registry.npmjs.org/@bitgo-beta/abstract-utxo/-/abstract-utxo-1.1.1-beta.1276.tgz", "integrity": "sha512-nkXTxqf9cLr1l/vyHi91vdq/pJieG6q0OdbEhnv1aRlHycnbZa1dxZSVwFUEOJtmgsPTNLjinReyH4eZMTL64g==", + "license": "MIT", "dependencies": { "@bitgo-beta/blockapis": "1.0.5-beta.1279", "@bitgo-beta/sdk-api": "1.10.1-beta.1042", @@ -3032,6 +3044,7 @@ "version": "3.0.4-beta.1281", "resolved": "https://registry.npmjs.org/@bitgo-beta/blake2b/-/blake2b-3.0.4-beta.1281.tgz", "integrity": "sha512-EcG29WYNfN9vB/Aa3Zzeh4+7i4mnz2MN3TF0MHceo1jGy0P2FSSE2H5Ox3R+qW//zsqEaOHUaOrOLrnCePWD9g==", + "license": "ISC", "dependencies": { "@bitgo-beta/blake2b-wasm": "3.0.4-beta.1284", "nanoassert": "^2.0.0" @@ -3041,6 +3054,7 @@ "version": "3.0.4-beta.1284", "resolved": "https://registry.npmjs.org/@bitgo-beta/blake2b-wasm/-/blake2b-wasm-3.0.4-beta.1284.tgz", "integrity": "sha512-2tGpkvwSIR9KTTwoMzG1G1rAucYSHrBYBLjbj+omm4NF9D6iN4+/nDT3rLgb2BXCXT2sNkVOrNXnkmos8t+Krg==", + "license": "MIT", "dependencies": { "nanoassert": "^1.0.0" } @@ -3048,12 +3062,14 @@ "node_modules/@bitgo-beta/blake2b-wasm/node_modules/nanoassert": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-1.1.0.tgz", - "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==" + "integrity": "sha512-C40jQ3NzfkP53NsO8kEOFd79p4b9kDXQMwgiY1z8ZwrDZgUyom0AHwGegF4Dm99L+YoYhuaB0ceerUcXmqr1rQ==", + "license": "ISC" }, "node_modules/@bitgo-beta/blockapis": { "version": "1.0.5-beta.1279", "resolved": "https://registry.npmjs.org/@bitgo-beta/blockapis/-/blockapis-1.0.5-beta.1279.tgz", "integrity": "sha512-cTi7mu9J/g0/qxidci9OEYHrIVuRK9uBTVLeeQZqCNoB5w6t47VZR1aIW39vi1nPFjc+mKlzDVOAjsgSy+TmJw==", + "license": "MIT", "dependencies": { "@bitgo-beta/utxo-lib": "8.0.3-beta.1044", "@types/superagent": "4.1.16", @@ -3064,6 +3080,7 @@ "version": "4.1.16", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.16.tgz", "integrity": "sha512-tLfnlJf6A5mB6ddqF159GqcDizfzbMUB1/DeT59/wBNqzRTNNKsaw79A/1TZ84X+f/EwWH8FeuSkjlCLyqS/zQ==", + "license": "MIT", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" @@ -3073,6 +3090,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -3089,6 +3107,7 @@ "version": "3.5.4", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", @@ -3105,6 +3124,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -3115,13 +3135,15 @@ "node_modules/@bitgo-beta/blockapis/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@bitgo-beta/blockapis/node_modules/superagent": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -3141,6 +3163,7 @@ "version": "1.10.1-beta.1042", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-api/-/sdk-api-1.10.1-beta.1042.tgz", "integrity": "sha512-OpXYRXytlCYfk83r7cRiUPZAQXrd8odrny9w4tYlS8ouVMWMngESzizMr1z03F5ff/RmY1wnU72j9ecl5RYvMQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-hmac": "1.0.1-beta.410", @@ -3163,6 +3186,7 @@ "version": "4.1.15", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "license": "MIT", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" @@ -3172,6 +3196,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -3180,6 +3205,7 @@ "version": "3.5.4", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", @@ -3196,6 +3222,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -3208,6 +3235,7 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -3227,6 +3255,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -3242,12 +3271,14 @@ "node_modules/@bitgo-beta/sdk-api/node_modules/superagent/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@bitgo-beta/sdk-coin-ada": { "version": "2.3.14-beta.1041", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-ada/-/sdk-coin-ada-2.3.14-beta.1041.tgz", "integrity": "sha512-SUD4YrZ+VI0Sr3dzYeZtjCRWNrH9wxK8+yYs8zueCamaGxesDQ4L0lQw0dj1Sd5u4wHhqrpMUkvZ461l7wz97g==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -3343,6 +3374,7 @@ "version": "1.3.19-beta.1041", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-algo/-/sdk-coin-algo-1.3.19-beta.1041.tgz", "integrity": "sha512-u044Go6qZFtit7C2ilSNscVVEq3UG+qX7Q40+o3uismCB+qlx24+BIBEeNHMXPb0qKZw8zaSnE2UqjvlaZ5S9g==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/statics": "15.1.1-beta.1046", @@ -3365,6 +3397,7 @@ "version": "1.0.1-beta.483", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-apt/-/sdk-coin-apt-1.0.1-beta.483.tgz", "integrity": "sha512-cSuvFr2w03GbyDJH6xToZX/0KTeg4gbEal+Rhpd+7VNHeMrWdhAcKFD7v53vgo+5DETW13bvc5R/T3IT4rnWIw==", + "license": "MIT", "dependencies": { "@aptos-labs/ts-sdk": "1.33.1", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3380,6 +3413,7 @@ "version": "1.0.1-beta.897", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-arbeth/-/sdk-coin-arbeth-1.0.1-beta.897.tgz", "integrity": "sha512-e04gX0MLdEiwyDWqhGSxKXxJOtbwl2A7SulYqdWm/OhMrguJAuH9H5T4svoVBDibTGh/ZSSe2gF+ZgjuUuPtTA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3397,6 +3431,7 @@ "version": "1.0.1-beta.130", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-asi/-/sdk-coin-asi-1.0.1-beta.130.tgz", "integrity": "sha512-FYv6w4l+R85KCOdntmbjjPUseDd8QGGjjaio4tDstEzCf+6z2DL8P9qjcHHLZaJYDNEbaJ+euAvbsP43Fn+HXg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3414,6 +3449,7 @@ "version": "3.1.2-beta.1040", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-atom/-/sdk-coin-atom-3.1.2-beta.1040.tgz", "integrity": "sha512-rV7oxoSpdkiBmwsa6r+poiUgT/NYJGUm/1mn8qIRwDhzCkj8ESxneJGyCSe0njIpu87nnHiJZZl2ElnPRRoYHQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3432,6 +3468,7 @@ "version": "1.1.1-beta.1268", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-avaxc/-/sdk-coin-avaxc-1.1.1-beta.1268.tgz", "integrity": "sha512-o/IcB4fenR8bMWAFo7bVRnmWLZydFGCuLhtPYR0fFedWoIUKBLZHBolKMxns6brJIGGOhT8I8L5zdpWgWoI9Dg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-coin-avaxp": "3.5.10-beta.1040", @@ -3529,6 +3566,7 @@ "version": "3.5.10-beta.1040", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-avaxp/-/sdk-coin-avaxp-3.5.10-beta.1040.tgz", "integrity": "sha512-2Shq1e1EcwXC4j3oKXxmzJ96WhxUO3OK/4LfHbrmA+uX9J8oeMhmIJMC1+OBImXrtQVuhOXo19ErFJwmkfK6sw==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -3550,6 +3588,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.7.1" }, @@ -3564,6 +3603,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -3575,6 +3615,7 @@ "version": "1.0.1-beta.383", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-baby/-/sdk-coin-baby-1.0.1-beta.383.tgz", "integrity": "sha512-9iSZAAgxSkh9k3y1ymJfy5qiuOserukIPdU7FVJKxmg1l4scs//uuSADgxXdZVotNHLi7JPsyPBDL1wTexp+Eg==", + "license": "MIT", "dependencies": { "@babylonlabs-io/babylon-proto-ts": "1.0.0", "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", @@ -3595,6 +3636,7 @@ "version": "1.1.1-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bch/-/sdk-coin-bch-1.1.1-beta.1269.tgz", "integrity": "sha512-a+sYA05DcQAa5/GvfGvKpe2NXwuiNsHTJrXvzfQHW3Bd/S7m5p60fkP3TwfAJOV3cNHQaoj/JgjnT64SEYlmPQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3608,6 +3650,7 @@ "version": "1.1.1-beta.1268", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bcha/-/sdk-coin-bcha-1.1.1-beta.1268.tgz", "integrity": "sha512-AafBxXDguFv5ogr+wKAa635PpnIkZ/5KXz7Ui4zkCZ1VhEQMWIpDFys58D3JF0wsS5oMIsMAbr2KHVWgZuaqsw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-coin-bch": "1.1.1-beta.1269", @@ -3622,6 +3665,7 @@ "version": "1.0.1-beta.896", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bera/-/sdk-coin-bera-1.0.1-beta.896.tgz", "integrity": "sha512-2VoDpfLpWF7vmXq2zi8uR6YFl0D/ISIR5gxam/1SUkzhP1JH7rUsx6QLKUod5dWeq0WqqNVFqPcINZlhP5N8CA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3637,6 +3681,7 @@ "version": "1.0.1-beta.1002", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bld/-/sdk-coin-bld-1.0.1-beta.1002.tgz", "integrity": "sha512-TZ+rMUxKaKphaDQ2dwg6fVmTVlOqbxwSndy7DZr8pEyMWF96LWDDi+7nwNVNRRgG/6L38iC3QgXA2WrmoB9j2w==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3655,6 +3700,7 @@ "version": "1.0.1-beta.1268", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bsc/-/sdk-coin-bsc-1.0.1-beta.1268.tgz", "integrity": "sha512-edenwAYWsR6im5U/dfV+/KdpZoSxFo8mypWxKfgfrnlRjMLoirPheITf+tcBatqTvHFbOeM1mzdF2+tRbpM3vA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1038", @@ -3670,6 +3716,7 @@ "version": "1.1.1-beta.1268", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-bsv/-/sdk-coin-bsv-1.1.1-beta.1268.tgz", "integrity": "sha512-EsP5XtKIZ0V57dHrv5Rr9XCKl42J+rsgan7dj8/ubrmUbPiytgjSxp+7RYm2l7AYly6Bxi8pFseXzmKVYofTeg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-coin-bch": "1.1.1-beta.1269", @@ -3684,6 +3731,7 @@ "version": "1.0.2-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-btc/-/sdk-coin-btc-1.0.2-beta.1269.tgz", "integrity": "sha512-VLRfda64DxBc2EWMuVgV7VxkyYo3eqBem8QqrzVg8SG7SQVILshXxEKMnEMxuW5kK4JQkBG5zzWmQPcmFU6bRA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3698,6 +3746,7 @@ "version": "1.1.1-beta.1268", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-btg/-/sdk-coin-btg-1.1.1-beta.1268.tgz", "integrity": "sha512-7nMouI8sxeF7lceLFqPDHYQaJv8QlXXmnn5JAJqNOHbPMU2O0afpXhlPUlebXlgiAxc21pviDm0N3mMkHlVbqg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3711,6 +3760,7 @@ "version": "1.1.1-beta.1267", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-celo/-/sdk-coin-celo-1.1.1-beta.1267.tgz", "integrity": "sha512-PrtYZJmlepU/Nz3lyNSY3Nq+i8FzI9ihkJonbW2IyPfDVzjW2iPN64/J+oboVkmqyODluD/ZaRsQOUyzzy76CQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1038", @@ -3734,6 +3784,7 @@ "version": "1.0.0-beta.475", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-coredao/-/sdk-coin-coredao-1.0.0-beta.475.tgz", "integrity": "sha512-Asob/MoSbhN1vMFiNHkQo/jgxD2YKNHx3smjZx4+1SyskX7FuDjbV/xLr1gSpICzWg+Uct35PecqFwPZ4NWrpQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3750,6 +3801,7 @@ "version": "1.0.1-beta.884", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-coreum/-/sdk-coin-coreum-1.0.1-beta.884.tgz", "integrity": "sha512-d2mgwVgvokyTVOmLf1bM3p8G4eTWdsG5P9lh1Gr/kQeZkWGO997dPYxX1j69Wa3Mt/bZf/V1o+3BiTnZAeR/VA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3768,6 +3820,7 @@ "version": "1.0.1-beta.176", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-cronos/-/sdk-coin-cronos-1.0.1-beta.176.tgz", "integrity": "sha512-mrM63jiVlCHhskxECmgZ2ERGiUCH+IY1TN/5XjfrKnE9cCBVRlAQN3Tj9SCFcCcKw7W5YSVSmZIRp1cVAWV0XA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3785,6 +3838,7 @@ "version": "1.2.19-beta.1040", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-cspr/-/sdk-coin-cspr-1.2.19-beta.1040.tgz", "integrity": "sha512-aIee8dHKK+FjmRUJCqa2cDi1r2fy2tcXJ7kgVPvlJIa1cSEy55blQjXwZl4flHVimS2THzChlUQEqvG2he+y7g==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -3804,6 +3858,7 @@ "version": "1.1.1-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-dash/-/sdk-coin-dash-1.1.1-beta.1269.tgz", "integrity": "sha512-plmYGd45W/gY5l4KDUK2UCki5zsZRzAW1n0amztBaz1g4GeCiPCnplSReGQfeSX89rll6hu3FXAFECFqzrK0EQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3817,6 +3872,7 @@ "version": "1.0.2-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-doge/-/sdk-coin-doge-1.0.2-beta.1269.tgz", "integrity": "sha512-WE5au8GZ9TE6zgMQj6DBd7MLb41AqDLcsrXM3w2oDMdnJ9FKTVR039sHMbVi7vi4XEFa2WWaOi4eTL/n1ZUSoQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -3830,6 +3886,7 @@ "version": "2.2.8-beta.1040", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-dot/-/sdk-coin-dot-2.2.8-beta.1040.tgz", "integrity": "sha512-EQ1hWaqNDBVSZPxsre8ztkkQjKPHzp9Tdu2nBnmwH2TEIv02fHEMh3qi0ZpNQ74v8fTXLwqumyNo1pKo2ieNfQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -3875,6 +3932,7 @@ "version": "1.3.19-beta.1039", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-eos/-/sdk-coin-eos-1.3.19-beta.1039.tgz", "integrity": "sha512-NpTNJnrwbXM4ujoJNx81RY7UnlhbuRvzkMMdeIh4+vosxvwsc36S2Yssrr0t4jxINP/55l5xz2PJOxzCUREErA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -3966,6 +4024,7 @@ "version": "1.0.2-beta.1267", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-etc/-/sdk-coin-etc-1.0.2-beta.1267.tgz", "integrity": "sha512-OSmZkXTlRE1MKmck0sgR/LxObmQfdKOJdVKR84j9AQtOCFzVX5yoAiT+Ga7AJ7sfsvS1j8uoLUqjMDU/CyJS9A==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1038", @@ -4060,6 +4119,7 @@ "version": "4.4.1-beta.1038", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-eth/-/sdk-coin-eth-4.4.1-beta.1038.tgz", "integrity": "sha512-/ebJpgPzJWAIh8NxD79THq+xDwOpEyXtH5varlUJ4mVa46wy/0fur+1ARFXkSJ8ZfCqw/QdlBnyPEJ/S1fMDJg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -4156,6 +4216,7 @@ "version": "20.0.76-beta.206", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-ethw/-/sdk-coin-ethw-20.0.76-beta.206.tgz", "integrity": "sha512-0NL0C+0SZzePuJK2yURVmxJSKSj7gWO6hOQRFd7Gpx4zhP6Dz51QVqpnDKvalNqbsLtBAK7KYsuPA8+TARvNVg==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1038", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -4244,6 +4305,7 @@ "version": "1.0.1-beta.382", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-flr/-/sdk-coin-flr-1.0.1-beta.382.tgz", "integrity": "sha512-IVoLsqVpew/XMF48BJ6t9tH8c59g1giNqvnuAyrrZ2jCDnx01duv9+cErJKs15Xv6S+M7vBG7WAoHhmeTyrEMw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -4259,6 +4321,7 @@ "version": "1.0.1-beta.999", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-hash/-/sdk-coin-hash-1.0.1-beta.999.tgz", "integrity": "sha512-DXX8pkbcavWG/52OW2Td4emAdGPGVa4bLVFJGVdr3TZyCG0zBqP8qr4cRTY+imJYgyBDbtkjJG00kSNZYS8yjA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -4277,6 +4340,7 @@ "version": "1.0.2-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-hbar/-/sdk-coin-hbar-1.0.2-beta.1269.tgz", "integrity": "sha512-P+RUwYW4Go33oF3g3F+aZNoTfkUikuqYuQiK4O5HZ31G4vhVtG3u8DpMsQb0RDIEZYCNTB7Eqh0pDXwqgzz7TA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-coin-algo": "1.3.19-beta.1041", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5215,6 +5279,7 @@ "version": "1.0.1-beta.395", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-icp/-/sdk-coin-icp-1.0.1-beta.395.tgz", "integrity": "sha512-UZWeUiN/g358S5A1OxizV8+6wJlBh4IN/ecekLtPHM+YyMqNIIbOG/M8FWy/l4ub/+g3QZNliN0zIgqTv0p/AQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -5273,6 +5338,7 @@ "version": "1.1.1-beta.156", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-initia/-/sdk-coin-initia-1.1.1-beta.156.tgz", "integrity": "sha512-2l9q/RyB8tRtCtggrcbrvo6euzX0BPMrWr6qVVqfbZ+7V0cRu1+LFxB6NF0/VOUKd+amLuI+/RzjedyxJC19LA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5290,6 +5356,7 @@ "version": "1.1.3-beta.993", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-injective/-/sdk-coin-injective-1.1.3-beta.993.tgz", "integrity": "sha512-I5ylZ6C0FWGpewkQFyMQCUtsvg51kOxqITkoIc3456ALT1t82da+jSWLp4t0VUCEyXqunHh3DJarWc+BWzuCEQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5308,6 +5375,7 @@ "version": "1.0.1-beta.896", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-islm/-/sdk-coin-islm-1.0.1-beta.896.tgz", "integrity": "sha512-Bz7cybHvr7peaFh7q4ApNHmqymkao6jAlkxw3Njf+tF4RVeSW2hrhdSxEwji+T+ykZ7soZk1weqo9ussi1fL0g==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5375,6 +5443,7 @@ "version": "1.1.1-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-ltc/-/sdk-coin-ltc-1.1.1-beta.1269.tgz", "integrity": "sha512-zSUGlBW6JPTRrWWunxKnL/465ayt7PT/sw+2yvMHhMAdV5OYyt7cHE29w2JdoYa3J+U4lIGojovOm/Zjc2M81w==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5388,6 +5457,7 @@ "version": "1.0.1-beta.211", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-mon/-/sdk-coin-mon-1.0.1-beta.211.tgz", "integrity": "sha512-znhBvR2m7uQ0e2FQvdw2kGex3L9Tn30jR7tT56/8tjuamHfaBdmFNR137l2ABxOzqiO5K5nHmLOZD+1jtEo7Vw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5402,6 +5472,7 @@ "version": "1.3.19-beta.1038", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-near/-/sdk-coin-near-1.3.19-beta.1038.tgz", "integrity": "sha512-HcPFnKDg5AiafkpcZCFqwZEw4wvILeYJ0dyxv17lMVIimy49cEbCZYWpfKqlOfJIJIV8rMHmRwmVeAgVxPOgCA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -5516,6 +5587,7 @@ "version": "1.0.1-beta.477", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-oas/-/sdk-coin-oas-1.0.1-beta.477.tgz", "integrity": "sha512-mfCbDxXx0FKb4YEVXNf7f7THX2RlOL/JftwI+1qxhkqEAk5+vLi1MwD8Z+rKTpU7ZLcKQz+c29BzcHNXaAxIIg==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5530,6 +5602,7 @@ "version": "1.0.1-beta.894", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-opeth/-/sdk-coin-opeth-1.0.1-beta.894.tgz", "integrity": "sha512-3wuieH5TD8oGTBOjwSroxP1QXcq7rvdxibITxTazqD+5M5bzq3gcgvZKQdypMLuJZTN31H81LfEWZwWM4DeYlA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5547,6 +5620,7 @@ "version": "1.0.1-beta.1023", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-osmo/-/sdk-coin-osmo-1.0.1-beta.1023.tgz", "integrity": "sha512-QD2vuJNjIZo0vz/N1UUjSw5RgMo/FUwmYVxtqRr0JIFcv7yre9tdgaVhCODOHgA2QxVkrCw7oz6LOwFgGUX5FQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5565,6 +5639,7 @@ "version": "1.0.2-beta.1267", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-polygon/-/sdk-coin-polygon-1.0.2-beta.1267.tgz", "integrity": "sha512-349Hkz/m74w28CrharMm583RPi3oCPOAP88QXMkBVCYGYfnmG2bkxU0OB+5bFIKwSTktQNz4d1kfUjwoD7ridA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5585,6 +5660,7 @@ "version": "1.0.1-beta.240", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-polyx/-/sdk-coin-polyx-1.0.1-beta.240.tgz", "integrity": "sha512-Ajp8AlgkO/gdyew5KG6SZV7cGmuUbTe7F8IzVXqm/RJqxiGEykUr/4cSTkXJ0dnv7PXlS43EUFb2u37/0cCOvQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-substrate": "1.0.1-beta.405", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5603,6 +5679,7 @@ "version": "1.1.1-beta.1267", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-rbtc/-/sdk-coin-rbtc-1.1.1-beta.1267.tgz", "integrity": "sha512-rN6s0f0RQ637EMNNZuKrxXpEd28xHOTjxYzB1yQyyI0JO32HzKlhUHwLzBqVFPaNn8n4In/8B/Nn+u0AB06MBA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-coin-eth": "4.4.1-beta.1038", @@ -5619,6 +5696,7 @@ "version": "1.0.0-beta.507", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-rune/-/sdk-coin-rune-1.0.0-beta.507.tgz", "integrity": "sha512-OIRU5VK/wpvBtQb14X1WNdbapgic1ZSs9Vc3l7NKHoZLeLojMos93ahwNhHNGTdHzUvw5H8ddjYLBbnELadsew==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5639,6 +5717,7 @@ "version": "1.0.1-beta.995", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-sei/-/sdk-coin-sei-1.0.1-beta.995.tgz", "integrity": "sha512-ayAkm/Wn2z6xf3wN7tYbAP+DkbHui9NqutTBbm3YlT0wI0OTv3+E8aukzvDK1bKnx5tdqhKzpcI7sqCWWHvMyw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5657,6 +5736,7 @@ "version": "1.1.1-beta.382", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-sgb/-/sdk-coin-sgb-1.1.1-beta.382.tgz", "integrity": "sha512-R4VOrhk11IYQppax1jkgzZ6eq1KJoz46QZEefj8oJ3owqC1MSvUfH3GhKNq5sjm1wrM/OmlU7BSL1pU1P7SRhw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5672,6 +5752,7 @@ "version": "2.4.3-beta.1037", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-sol/-/sdk-coin-sol-2.4.3-beta.1037.tgz", "integrity": "sha512-kxg+wcXCuMac4Q26Afjnfha4eFid90z6qp3T7+ot895Dn083d67WZ+g83JhnT55pRyTvr27swb4auTdqMTnX5A==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -5783,6 +5864,7 @@ "version": "1.0.1-beta.191", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-soneium/-/sdk-coin-soneium-1.0.1-beta.191.tgz", "integrity": "sha512-is1c51LwuAhDmpsd+LYVD0N5vji+l4Va7GAWjyyBi9U2917M+KmUFzSfCCggi4vg2FHSosfIaOg/bhqGSmTggQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5797,6 +5879,7 @@ "version": "1.0.1-beta.200", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-stt/-/sdk-coin-stt-1.0.1-beta.200.tgz", "integrity": "sha512-a6YQHM3GGBSU73hqG9EL0pXaUY2HgbHUV3+v6/CQsZy191myM1C5DBDrvFWuCI/ozT/8hI+G/pc1YUkWQafATA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5811,6 +5894,7 @@ "version": "1.1.1-beta.1272", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-stx/-/sdk-coin-stx-1.1.1-beta.1272.tgz", "integrity": "sha512-9RG3XLocfYcjt8oPGjNUYoaAz+2BXGZ8BZ2ROMjCdish6l8LYMdOL/wnv1FWEyMCAs+Z8CzejU6NxNMqvZjT/Q==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -5858,6 +5942,7 @@ "version": "3.0.3-beta.1037", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-sui/-/sdk-coin-sui-3.0.3-beta.1037.tgz", "integrity": "sha512-lG7L8DwEDTQ/3Qj7KFVTh1U3pYGUCjHJiY4o3D1k8APPP5iBQJKVGjlXSHGSToWbiS+KOKV1VgtvQmXdlkqwVg==", + "license": "MIT", "dependencies": { "@bitgo-beta/blake2b": "3.0.4-beta.1281", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -5988,6 +6073,7 @@ "version": "1.0.0-beta.404", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-tao/-/sdk-coin-tao-1.0.0-beta.404.tgz", "integrity": "sha512-DGamFK/IT0kYvj/3gN/dvzEcrrsfCqBPMC8DdPngbRJZ4IrMf78UmsGVJwXKrPK+ygjwet+BsR4qFvnHK8fu9w==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-substrate": "1.0.1-beta.405", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6005,6 +6091,7 @@ "version": "3.1.8-beta.10", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-tia/-/sdk-coin-tia-3.1.8-beta.10.tgz", "integrity": "sha512-odsup2NBvuAOcJ3jftgS23aTN49tAZ5rtOyRqs4W2Z/Xz6AjTWXDNCq++FWI7fGTyKyC5RAC7YVs/KjX++34KQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6023,6 +6110,7 @@ "version": "1.0.1-beta.905", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-ton/-/sdk-coin-ton-1.0.1-beta.905.tgz", "integrity": "sha512-ExmIg/KYSrTgMSMhFaFjpbYZ/mPPWvu0VFfhoIZw9hPYpsTtYbVfM9gNNFjPOk2UqOHCnHElnNk0AttZvKRyww==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", @@ -6041,6 +6129,7 @@ "version": "1.0.2-beta.1271", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-trx/-/sdk-coin-trx-1.0.2-beta.1271.tgz", "integrity": "sha512-vWfl8zQhKdJDLPotqB3LFg/X1uHKIAwuvpZeXyUdTfC1IQnNsm7XfAoE5+jIxLVWj8Pt8To2bbadlRCh90fgzA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -6166,6 +6255,7 @@ "version": "1.0.1-beta.155", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-vet/-/sdk-coin-vet-1.0.1-beta.155.tgz", "integrity": "sha512-YChIiWudz3dU2/DMd78Cb6BURshdVmXKznzSAXvyD3/2tvPpno7dFomLPzjOlZ9c6llda0DZM9QPdIMspPTE0w==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/blake2b": "3.0.4-beta.1281", @@ -6215,6 +6305,7 @@ "version": "1.0.1-beta.375", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-wemix/-/sdk-coin-wemix-1.0.1-beta.375.tgz", "integrity": "sha512-oApSwGTkuuvm6xLh25SPVrK+useQdNUPbjVYoBowQJo/aVXblR+g7cVEKbVbvF4Lrqb2BBuOqaY3SczVLlmvHQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6230,6 +6321,7 @@ "version": "1.0.1-beta.201", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-world/-/sdk-coin-world-1.0.1-beta.201.tgz", "integrity": "sha512-dJAUgd6qhTPSLx9y2u44BL+loZctYSd2TIDs+AQtYAHT84F26fuE/luHrBoCTUP2rGNl/qEXBtlkizKYNpq+3w==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6244,6 +6336,7 @@ "version": "1.0.1-beta.382", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-xdc/-/sdk-coin-xdc-1.0.1-beta.382.tgz", "integrity": "sha512-AnjQ/cnuoePveiGgATib+T2O+Fs1XPhIS+zL6hR57ecvO1nbfONSpXTV4gLvBfkLbGZRLqMtAh/t272uVeFkzQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6259,6 +6352,7 @@ "version": "2.0.5-beta.1037", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-xlm/-/sdk-coin-xlm-2.0.5-beta.1037.tgz", "integrity": "sha512-GaYchIRrjNJkvCel3gacsfSKld8WsKuMPfg7oZMzf8GCzwWHHio14kiS2ji0L9OCU7IrUd82g6TcYfC329u3rg==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/statics": "15.1.1-beta.1046", @@ -6348,6 +6442,7 @@ "version": "1.1.1-beta.1270", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-xrp/-/sdk-coin-xrp-1.1.1-beta.1270.tgz", "integrity": "sha512-IUYHU5GKBIYlp9cmB8k9aU/sBynuPAgjxh+zZBhJsN7GvjXWN80cQv+uXLcDAHYnrIYyCnanqcH/8hUyRxpurQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -6366,6 +6461,7 @@ "version": "1.1.1-beta.1270", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-xtz/-/sdk-coin-xtz-1.1.1-beta.1270.tgz", "integrity": "sha512-3TzRR44g1+jGT6AMoytCtEJmvaHk5PaSMLHrbMC8c/GyiejKUx8vIRapRpq9eXzhdOXoKENqXYs5aB2WGqnp8w==", + "license": "MIT", "dependencies": { "@bitgo-beta/blake2b": "3.0.4-beta.1281", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6414,6 +6510,7 @@ "version": "1.1.1-beta.1269", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-zec/-/sdk-coin-zec-1.1.1-beta.1269.tgz", "integrity": "sha512-F7FGwe1a6uUbiw/i2h9jPygi7nPRa6Xj1vk+fj+uKpVZpSL0oeo1rg6nYqiW3g2gE8qS9sjACKG91NtTsuppXw==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-utxo": "1.1.1-beta.1276", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6427,6 +6524,7 @@ "version": "1.0.1-beta.960", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-zeta/-/sdk-coin-zeta-1.0.1-beta.960.tgz", "integrity": "sha512-Feq8n54u37HmdkXqiJ3/1RuHMsOoOazXy7rkQFLKpio5n3L0X2Lyljc9TuOymdz0E/5wE5Y9FHDylNrapN8mWA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-cosmos": "1.0.1-beta.1024", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6445,6 +6543,7 @@ "version": "1.0.1-beta.824", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-coin-zketh/-/sdk-coin-zketh-1.0.1-beta.824.tgz", "integrity": "sha512-CSFqYPdhOWfL6ysl85/jwTb68qdZ0qeB+la3OhK8onC+4W1DUcq+WKVahZh68US7YWdygVn4P5C/lykRb1SuaA==", + "license": "MIT", "dependencies": { "@bitgo-beta/abstract-eth": "1.0.2-beta.1273", "@bitgo-beta/sdk-core": "8.2.1-beta.1043", @@ -6460,6 +6559,7 @@ "version": "8.2.1-beta.1043", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-core/-/sdk-core-8.2.1-beta.1043.tgz", "integrity": "sha512-l4XQN2vrREBEsu8WtxsfmxN3n3DRmOjKhLzxGaBhmanywtpRlTpyxZrxIDH1OovmahWlXJyWyuwVRQwziRiNFQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-lib-mpc": "8.2.0-beta.1035", "@bitgo-beta/secp256k1": "1.0.2-beta.1070", @@ -6498,6 +6598,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.7.1" }, @@ -6512,6 +6613,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -6523,6 +6625,7 @@ "version": "4.1.15", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "license": "MIT", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" @@ -6532,6 +6635,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -6540,6 +6644,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } @@ -6548,6 +6653,7 @@ "version": "3.5.4", "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", + "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", @@ -6565,6 +6671,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@bitgo-forks/io-ts/-/io-ts-2.1.4.tgz", "integrity": "sha512-jCt3WPfDM+wM0SJMGJkY0TS6JmaQ78ATAYtsppJYJfts8geOS/N/UftwAROXwv6azKAMz8uo163t6dWWwfsYug==", + "license": "MIT", "peerDependencies": { "fp-ts": "^2.0.0" } @@ -6574,6 +6681,7 @@ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -6587,6 +6695,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -6597,13 +6706,15 @@ "node_modules/@bitgo-beta/sdk-core/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/@bitgo-beta/sdk-core/node_modules/superagent": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", + "license": "MIT", "dependencies": { "component-emitter": "^1.3.0", "cookiejar": "^2.1.4", @@ -6623,6 +6734,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -6639,6 +6751,7 @@ "version": "1.0.1-beta.410", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-hmac/-/sdk-hmac-1.0.1-beta.410.tgz", "integrity": "sha512-lABszoQxLLtba1tAXqvHM5AXPhEa4vzeQv7/wAomfKreedUUXUYfQ5x+vhhBn1g+rdHdo8/rFPo5JZgal6MRKg==", + "license": "MIT", "dependencies": { "@bitgo-beta/sjcl": "1.0.2-beta.1282" } @@ -6647,6 +6760,7 @@ "version": "8.2.0-beta.1035", "resolved": "https://registry.npmjs.org/@bitgo-beta/sdk-lib-mpc/-/sdk-lib-mpc-8.2.0-beta.1035.tgz", "integrity": "sha512-Goig/x4UA+bIwqJEx2fVa4PUwNdX9JhSJLwIx6lhxe8yGPtx/UMUKYBafa7oskcx5N4MZDS+7agOZHjhMjGErg==", + "license": "MIT", "dependencies": { "@noble/curves": "1.8.1", "@silencelaboratories/dkls-wasm-ll-node": "1.2.0-pre.4", @@ -6676,6 +6790,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.7.1" }, @@ -6690,6 +6805,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -6701,6 +6817,7 @@ "version": "4.1.15", "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz", "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==", + "license": "MIT", "dependencies": { "@types/cookiejar": "*", "@types/node": "*" @@ -6710,6 +6827,7 @@ "version": "1.5.9", "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.5.9.tgz", "integrity": "sha512-OEI5rEu3MeR0WWNUXuIGkxmbXVhABP+VtgAXzm48c9ulkrsvxshjjk94XSOGphyAKeNGLPfAxxzEtgQ6rEVpYQ==", + "license": "MIT", "optionalDependencies": { "cbor-extract": "^2.2.0" } @@ -6717,13 +6835,15 @@ "node_modules/@bitgo-beta/sdk-lib-mpc/node_modules/fp-ts": { "version": "2.16.2", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.2.tgz", - "integrity": "sha512-CkqAjnIKFqvo3sCyoBTqgJvF+bHrSik584S9nhTjtBESLx26cbtVMR/T9a6ApChOcSDAaM3JydDmWDUn4EEXng==" + "integrity": "sha512-CkqAjnIKFqvo3sCyoBTqgJvF+bHrSik584S9nhTjtBESLx26cbtVMR/T9a6ApChOcSDAaM3JydDmWDUn4EEXng==", + "license": "MIT" }, "node_modules/@bitgo-beta/sdk-lib-mpc/node_modules/io-ts": { "name": "@bitgo-forks/io-ts", "version": "2.1.4", "resolved": "https://registry.npmjs.org/@bitgo-forks/io-ts/-/io-ts-2.1.4.tgz", "integrity": "sha512-jCt3WPfDM+wM0SJMGJkY0TS6JmaQ78ATAYtsppJYJfts8geOS/N/UftwAROXwv6azKAMz8uo163t6dWWwfsYug==", + "license": "MIT", "peerDependencies": { "fp-ts": "^2.0.0" } @@ -6732,6 +6852,7 @@ "version": "1.0.2-beta.1070", "resolved": "https://registry.npmjs.org/@bitgo-beta/secp256k1/-/secp256k1-1.0.2-beta.1070.tgz", "integrity": "sha512-R3TXTEdbOQc3OqDmXwvVFD1+GOQU6vBPUBHQ3SgsHUd4qtpWxd9sfxldJjNbdrDUTrW+g/VBLtlqStYdFcDQHQ==", + "license": "MIT", "dependencies": { "@brandonblack/musig": "^0.0.1-alpha.0", "@noble/secp256k1": "1.6.3", @@ -6748,17 +6869,20 @@ "node_modules/@bitgo-beta/sjcl": { "version": "1.0.2-beta.1282", "resolved": "https://registry.npmjs.org/@bitgo-beta/sjcl/-/sjcl-1.0.2-beta.1282.tgz", - "integrity": "sha512-7F/XT+tUh6N6GqEu5CWSyNS04cn/Z9wCmShYuj6l3AYy3+Su+gBpQ0Xh2O0omF7R4rGtQQxEh4iSmGJGTCUM5g==" + "integrity": "sha512-7F/XT+tUh6N6GqEu5CWSyNS04cn/Z9wCmShYuj6l3AYy3+Su+gBpQ0Xh2O0omF7R4rGtQQxEh4iSmGJGTCUM5g==", + "license": "(BSD-2-Clause OR GPL-2.0-only)" }, "node_modules/@bitgo-beta/statics": { "version": "15.1.1-beta.1046", "resolved": "https://registry.npmjs.org/@bitgo-beta/statics/-/statics-15.1.1-beta.1046.tgz", - "integrity": "sha512-FMA7+kpvC5oxp/cMN1kfXKAO6UxQtS+XBKrt+1peNf5AO/fJ6Mpg8MsgCzBshPWiYUn1ALLX0MFevohidRELoQ==" + "integrity": "sha512-FMA7+kpvC5oxp/cMN1kfXKAO6UxQtS+XBKrt+1peNf5AO/fJ6Mpg8MsgCzBshPWiYUn1ALLX0MFevohidRELoQ==", + "license": "Apache-2.0" }, "node_modules/@bitgo-beta/unspents": { "version": "0.13.2-beta.1043", "resolved": "https://registry.npmjs.org/@bitgo-beta/unspents/-/unspents-0.13.2-beta.1043.tgz", "integrity": "sha512-3LoDQcJDMCE8OxXXEukNgR0AQOnSlp0Dsjflj9IBS1KU7zT/P5vH/rHgt0GmJVnk+AngbYGA0n4Hk5rvhjvQ+w==", + "license": "Apache-2.0", "dependencies": { "@bitgo-beta/utxo-lib": "8.0.3-beta.1044", "lodash": "~4.17.21", @@ -6770,6 +6894,7 @@ "version": "1.8.1-beta.160", "resolved": "https://registry.npmjs.org/@bitgo-beta/utxo-core/-/utxo-core-1.8.1-beta.160.tgz", "integrity": "sha512-+Vp3rVF2DYn38TFdnLtK3xNVGKn7qqSBD3O/+T4NVd3UZ1oZoD2VuLmqZbHjJC+EWa57ixEQIyMJr8WSz/bEpQ==", + "license": "MIT", "dependencies": { "@bitgo-beta/unspents": "0.13.2-beta.1043", "@bitgo-beta/utxo-lib": "8.0.3-beta.1044", @@ -6782,6 +6907,7 @@ "version": "8.0.3-beta.1044", "resolved": "https://registry.npmjs.org/@bitgo-beta/utxo-lib/-/utxo-lib-8.0.3-beta.1044.tgz", "integrity": "sha512-0RvoffxNLd4aOuomcwJumS1eQwApMmf46mMwfzzlKRh0BjEp15LRkOxX167eNWVdirJIj34sTqwyPpASuMTSgg==", + "license": "MIT", "dependencies": { "@bitgo-beta/blake2b": "3.0.4-beta.1281", "@brandonblack/musig": "^0.0.1-alpha.0", @@ -6810,6 +6936,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.7.1" }, @@ -6824,6 +6951,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -6835,6 +6963,7 @@ "version": "1.0.1-beta.1115", "resolved": "https://registry.npmjs.org/@bitgo-beta/utxo-ord/-/utxo-ord-1.0.1-beta.1115.tgz", "integrity": "sha512-QmudLZ0/2eQol+wWLNFipjGT7I3jfF668icTfe2dmVxhEqu50nHguyBLa/R0B8TDnhqOKr131pBRLM6rn93/zA==", + "license": "MIT", "dependencies": { "@bitgo-beta/sdk-core": "8.2.1-beta.1043", "@bitgo-beta/unspents": "0.13.2-beta.1043", @@ -6860,6 +6989,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -6871,6 +7001,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -6887,12 +7018,14 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@bitgo/public-types": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@bitgo/public-types/-/public-types-5.1.0.tgz", "integrity": "sha512-OC1A/i+4uAMZx6BMDTnuvn1poH01dxJkzaLkhNKz61SxdC2aqbivmWnE4aTbpaTXyBr8WTF6IUkZshXjhmafvQ==", + "license": "UNLICENSED", "dependencies": { "fp-ts": "^2.0.0", "io-ts": "npm:@bitgo-forks/io-ts@2.1.4", @@ -6906,6 +7039,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@bitgo-forks/io-ts/-/io-ts-2.1.4.tgz", "integrity": "sha512-jCt3WPfDM+wM0SJMGJkY0TS6JmaQ78ATAYtsppJYJfts8geOS/N/UftwAROXwv6azKAMz8uo163t6dWWwfsYug==", + "license": "MIT", "peerDependencies": { "fp-ts": "^2.0.0" } @@ -6918,7 +7052,8 @@ "node_modules/@brandonblack/musig": { "version": "0.0.1-alpha.1", "resolved": "https://registry.npmjs.org/@brandonblack/musig/-/musig-0.0.1-alpha.1.tgz", - "integrity": "sha512-00RbByQG85lSzrkDjCblzrUc2n1LJAPPrEMHS4oMg+QckE0kzjd26JytT6yx6tNU2+aOXfK7O4kGW/sKVL67cw==" + "integrity": "sha512-00RbByQG85lSzrkDjCblzrUc2n1LJAPPrEMHS4oMg+QckE0kzjd26JytT6yx6tNU2+aOXfK7O4kGW/sKVL67cw==", + "license": "MIT" }, "node_modules/@bufbuild/protobuf": { "version": "2.6.2", @@ -6939,6 +7074,71 @@ "darwin" ] }, + "node_modules/@cbor-extract/cbor-extract-darwin-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz", + "integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@cbor-extract/cbor-extract-linux-arm": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz", + "integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@cbor-extract/cbor-extract-linux-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz", + "integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@cbor-extract/cbor-extract-linux-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz", + "integrity": "sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@cbor-extract/cbor-extract-win32-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz", + "integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@celo/base": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@celo/base/-/base-2.3.0.tgz", @@ -7675,6 +7875,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.30.1.tgz", "integrity": "sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==", + "license": "Apache-2.0", "dependencies": { "@cosmjs/encoding": "^0.30.1", "@cosmjs/math": "^0.30.1", @@ -7689,6 +7890,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.30.1.tgz", "integrity": "sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==", + "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", "bech32": "^1.1.4", @@ -7699,6 +7901,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/@cosmjs/math/-/math-0.30.1.tgz", "integrity": "sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==", + "license": "Apache-2.0", "dependencies": { "bn.js": "^5.2.0" } @@ -7706,12 +7909,14 @@ "node_modules/@cosmjs/crypto/node_modules/@cosmjs/utils": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.30.1.tgz", - "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==" + "integrity": "sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==", + "license": "Apache-2.0" }, "node_modules/@cosmjs/crypto/node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" }, "node_modules/@cosmjs/encoding": { "version": "0.29.5", @@ -13943,7 +14148,8 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -15274,12 +15480,14 @@ "node_modules/@silencelaboratories/dkls-wasm-ll-node": { "version": "1.2.0-pre.4", "resolved": "https://registry.npmjs.org/@silencelaboratories/dkls-wasm-ll-node/-/dkls-wasm-ll-node-1.2.0-pre.4.tgz", - "integrity": "sha512-KWHR/6SCa67mrYVPbhNjzoYEKadhQ5cL3UPI4UgtVZEk/Fc5yB0AaYUX3DuWHskxQTvj0mF2shYcZe9OubkvnQ==" + "integrity": "sha512-KWHR/6SCa67mrYVPbhNjzoYEKadhQ5cL3UPI4UgtVZEk/Fc5yB0AaYUX3DuWHskxQTvj0mF2shYcZe9OubkvnQ==", + "license": "SLL" }, "node_modules/@silencelaboratories/dkls-wasm-ll-web": { "version": "1.2.0-pre.4", "resolved": "https://registry.npmjs.org/@silencelaboratories/dkls-wasm-ll-web/-/dkls-wasm-ll-web-1.2.0-pre.4.tgz", - "integrity": "sha512-RDyGVX6nyABPchnucl4IOV78LWzXBV9QucRiitRNONo3pfO4z375T00lI/wPiId13wXb8YNkB1Ej90hBNUK25A==" + "integrity": "sha512-RDyGVX6nyABPchnucl4IOV78LWzXBV9QucRiitRNONo3pfO4z375T00lI/wPiId13wXb8YNkB1Ej90hBNUK25A==", + "license": "SLL" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -15717,6 +15925,7 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/@substrate/txwrapper-registry/-/txwrapper-registry-7.5.3.tgz", "integrity": "sha512-Rye7wXfLQWjYQSvhhIEv5TnAROKyxNwAPWPsPGfei/VD5n/cpNHuhLRXYl4ULZk5IuFH2/ZXEt09BMe8hll9oA==", + "license": "Apache-2.0", "dependencies": { "@polkadot/networks": "^13.1.1", "@substrate/txwrapper-core": "^7.5.3" @@ -15726,6 +15935,7 @@ "version": "7.5.3", "resolved": "https://registry.npmjs.org/@substrate/txwrapper-core/-/txwrapper-core-7.5.3.tgz", "integrity": "sha512-vcb9GaAY8ex330yjJoDCa2w32R2u/KUmEKsD/5DRgTbPEUF1OYiKmmuOJWcD0jHu9HZ8HWlniiV8wxxwo3PVCA==", + "license": "Apache-2.0", "dependencies": { "@polkadot/api": "^14.0.1", "@polkadot/keyring": "^13.1.1", @@ -15736,6 +15946,7 @@ "version": "0.4.17", "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "license": "ISC", "dependencies": { "d": "^1.0.2", "es5-ext": "^0.10.64", @@ -15845,6 +16056,159 @@ "node": ">=10" } }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz", + "integrity": "sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz", + "integrity": "sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz", + "integrity": "sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz", + "integrity": "sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz", + "integrity": "sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz", + "integrity": "sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz", + "integrity": "sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz", + "integrity": "sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz", + "integrity": "sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -16849,37 +17213,26 @@ "license": "ISC" }, "node_modules/@unimodules/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", - "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", + "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", "license": "MIT", "optional": true, "dependencies": { - "expo-modules-core": "~0.4.0" - } - }, - "node_modules/@unimodules/core/node_modules/expo-modules-core": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", - "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", - "license": "MIT", - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" + "compare-versions": "^3.4.0" } }, "node_modules/@unimodules/react-native-adapter": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", - "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz", + "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==", "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", "license": "MIT", "optional": true, "dependencies": { - "expo-modules-autolinking": "^0.3.2", - "expo-modules-core": "~0.4.0" + "expo-modules-autolinking": "^0.0.3", + "invariant": "^2.2.4" } }, "node_modules/@unimodules/react-native-adapter/node_modules/ansi-styles": { @@ -16946,9 +17299,9 @@ } }, "node_modules/@unimodules/react-native-adapter/node_modules/expo-modules-autolinking": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", - "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", + "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", "license": "MIT", "optional": true, "dependencies": { @@ -16962,17 +17315,6 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/@unimodules/react-native-adapter/node_modules/expo-modules-core": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", - "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", - "license": "MIT", - "optional": true, - "dependencies": { - "compare-versions": "^3.4.0", - "invariant": "^2.2.4" - } - }, "node_modules/@unimodules/react-native-adapter/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -17254,7 +17596,8 @@ "node_modules/@wasmer/wasi": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@wasmer/wasi/-/wasi-1.2.2.tgz", - "integrity": "sha512-39ZB3gefOVhBmkhf7Ta79RRSV/emIV8LhdvcWhP/MOZEjMmtzoZWMzt7phdKj8CUXOze+AwbvGK60lKaKldn1w==" + "integrity": "sha512-39ZB3gefOVhBmkhf7Ta79RRSV/emIV8LhdvcWhP/MOZEjMmtzoZWMzt7phdKj8CUXOze+AwbvGK60lKaKldn1w==", + "license": "MIT" }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", @@ -17912,6 +18255,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "license": "MIT", "dependencies": { "es6-object-assign": "^1.1.0", "is-nan": "^1.2.1", @@ -18007,6 +18351,7 @@ "resolved": "https://registry.npmjs.org/avalanche/-/avalanche-3.15.3.tgz", "integrity": "sha512-Oh63Q/Aj9MGI7vHODoSddpwa5JOgqFDX8ZhTMf2Ly8VFhJqgIa0JI9gynTsIHmxHCcdcDhtMh+7V+XJbX1ZbYw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "BSD-3-Clause", "dependencies": { "assert": "2.0.0", "axios": "0.27.2", @@ -18044,6 +18389,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -18070,6 +18416,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -18094,6 +18441,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -18116,6 +18464,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -18138,6 +18487,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1" } @@ -18156,6 +18506,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/properties": "^5.6.0" @@ -18175,6 +18526,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -18195,6 +18547,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } @@ -18213,6 +18566,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2" } @@ -18231,6 +18585,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.6.3", "@ethersproject/abstract-provider": "^5.6.1", @@ -18258,6 +18613,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -18283,6 +18639,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/basex": "^5.6.1", @@ -18312,6 +18669,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", @@ -18342,6 +18700,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "js-sha3": "0.8.0" @@ -18360,7 +18719,8 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ] + ], + "license": "MIT" }, "node_modules/avalanche/node_modules/@ethersproject/networks": { "version": "5.6.4", @@ -18376,6 +18736,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } @@ -18394,6 +18755,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/sha2": "^5.6.1" @@ -18413,6 +18775,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.6.0" } @@ -18431,6 +18794,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -18457,12 +18821,14 @@ "node_modules/avalanche/node_modules/@ethersproject/providers/node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "license": "MIT" }, "node_modules/avalanche/node_modules/@ethersproject/providers/node_modules/ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -18493,6 +18859,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -18512,6 +18879,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0" @@ -18531,6 +18899,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -18551,6 +18920,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/logger": "^5.6.0", @@ -18574,6 +18944,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", @@ -18597,6 +18968,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/constants": "^5.6.1", @@ -18617,6 +18989,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", @@ -18643,6 +19016,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.6.2", "@ethersproject/constants": "^5.6.1", @@ -18663,6 +19037,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", @@ -18695,6 +19070,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.6.1", "@ethersproject/bytes": "^5.6.1", @@ -18717,6 +19093,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.6.1", "@ethersproject/hash": "^5.6.1", @@ -18728,12 +19105,14 @@ "node_modules/avalanche/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==" + "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", + "license": "MIT" }, "node_modules/avalanche/node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -18743,6 +19122,7 @@ "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", @@ -18753,12 +19133,14 @@ "node_modules/avalanche/node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" }, "node_modules/avalanche/node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -18772,7 +19154,8 @@ "node_modules/avalanche/node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" }, "node_modules/avalanche/node_modules/ethers": { "version": "5.6.9", @@ -18788,6 +19171,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.6.4", "@ethersproject/abstract-provider": "5.6.1", @@ -18825,6 +19209,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -18833,6 +19218,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -19332,6 +19718,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "license": "MIT", "engines": { "node": "*" } @@ -19358,6 +19745,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.4.tgz", "integrity": "sha512-niSkvARUEe8MiAiH+zKXPkgXzlvGDbOqXL3JDevWaA1TrPhUGSCgV+iedm8qMEBQwvSlMMn8GpSuoUjvsm2QfQ==", + "license": "MIT", "dependencies": { "bigint-mod-arith": "^3.1.0" }, @@ -19369,6 +19757,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "license": "MIT", "engines": { "node": ">=10.4.0" } @@ -19409,6 +19798,7 @@ "version": "3.1.0-master.4", "resolved": "https://registry.npmjs.org/@bitgo-forks/bip174/-/bip174-3.1.0-master.4.tgz", "integrity": "sha512-WDRNzPSdJGDqQNqfN+L5KHNHFDmNOPYnUnT7NkEkfHWn5m1jSOfcf8Swaslt5P0xcSDiERdN2gZxFc6XtOqRYg==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -19417,6 +19807,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/bip32/-/bip32-3.1.0.tgz", "integrity": "sha512-eoeajYEzJ4d6yyVtby8C+XkCeKItiC4Mx56a0M9VaqTMC73SWOm4xVZG7SaR8e/yp4eSyky2XcBpH3DApPdu7Q==", + "license": "MIT", "dependencies": { "bs58check": "^2.1.1", "create-hash": "^1.2.0", @@ -19451,13 +19842,15 @@ "node_modules/bitcoin-ops": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" + "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==", + "license": "MIT" }, "node_modules/bitcoinjs-lib": { "name": "@bitgo-forks/bitcoinjs-lib", "version": "7.1.0-master.11", "resolved": "https://registry.npmjs.org/@bitgo-forks/bitcoinjs-lib/-/bitcoinjs-lib-7.1.0-master.11.tgz", "integrity": "sha512-Yyh67I26iI7FGqPBY7rxqHZ9FM9JuouAsViQocrr7URhRpuZEWVsM/oMTNbMnRw2cPFj4jWKhRDLadgrUk2HEQ==", + "license": "MIT", "dependencies": { "bech32": "^2.0.0", "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4", @@ -20420,6 +20813,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/cashaddress/-/cashaddress-1.1.0.tgz", "integrity": "sha512-cdqIjZodtErhoQOiojQ1SRqDKh6bOVkLYNJjMmFEUxGoErrO2am8txotXmEi8glvU/y9wzup+LsvEBl8AttUwA==", + "license": "MIT", "dependencies": { "bigi": "^1.4.2" } @@ -21783,7 +22177,8 @@ "node_modules/cssfilter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", + "license": "MIT" }, "node_modules/d": { "version": "1.0.2", @@ -22506,6 +22901,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -22529,12 +22925,14 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -22549,6 +22947,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -22690,6 +23089,7 @@ "version": "2.1.0-rc.0", "resolved": "https://registry.npmjs.org/@bitgo/ecpair/-/ecpair-2.1.0-rc.0.tgz", "integrity": "sha512-qPZetcEA1Lzzm9NsqsGF9NGorAGaXrv20eZjopLUjsdwftWcsYTE7lwzE/Xjdf4fcq6G4+vjrCudWAMGNfJqOQ==", + "license": "MIT", "dependencies": { "randombytes": "^2.1.0", "typeforce": "^1.18.0", @@ -22872,7 +23272,8 @@ "node_modules/eol": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/eol/-/eol-0.5.1.tgz", - "integrity": "sha512-mlG6+lv5G7pXnSK/k7jh7B++h3nIxoNdevctYQWfd14UUvowwseRWpYdqXdYeumDwPAp69DorsnK/eWK9lm4AA==" + "integrity": "sha512-mlG6+lv5G7pXnSK/k7jh7B++h3nIxoNdevctYQWfd14UUvowwseRWpYdqXdYeumDwPAp69DorsnK/eWK9lm4AA==", + "license": "MIT" }, "node_modules/eosjs": { "version": "21.0.4", @@ -23203,7 +23604,8 @@ "node_modules/es6-object-assign": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", - "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==" + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "license": "MIT" }, "node_modules/es6-promise": { "version": "4.2.8", @@ -25031,7 +25433,8 @@ "node_modules/fastpriorityqueue": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/fastpriorityqueue/-/fastpriorityqueue-0.7.5.tgz", - "integrity": "sha512-3Pa0n9gwy8yIbEsT3m2j/E9DXgWvvjfiZjjqcJ+AdNKTAlVMIuFYrYG5Y3RHEM8O6cwv9hOpOWY/NaMfywoQVA==" + "integrity": "sha512-3Pa0n9gwy8yIbEsT3m2j/E9DXgWvvjfiZjjqcJ+AdNKTAlVMIuFYrYG5Y3RHEM8O6cwv9hOpOWY/NaMfywoQVA==", + "license": "Apache-2.0" }, "node_modules/fastq": { "version": "1.19.1", @@ -25607,6 +26010,21 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -26233,6 +26651,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-2.0.1.tgz", "integrity": "sha512-c+tl9PHG9/XkGgG0tD7CJpRVaE0jfZizDNmnErUAKQ4EjQSOcOUcV3EN9ZEZS8pZ4usaeiiK0H7stzuzna8feA==", + "license": "MIT", "dependencies": { "bs58check": "^2.1.2", "safe-buffer": "^5.1.1", @@ -26242,13 +26661,15 @@ "node_modules/hdkey/node_modules/node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" }, "node_modules/hdkey/node_modules/secp256k1": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", @@ -26364,6 +26785,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -27202,6 +27624,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -27306,6 +27729,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -29876,7 +30300,8 @@ "node_modules/libsodium-sumo": { "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-sumo/-/libsodium-sumo-0.7.15.tgz", - "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==" + "integrity": "sha512-5tPmqPmq8T8Nikpm1Nqj0hBHvsLFCXvdhBFV7SGOitQPZAA6jso8XoL0r4L7vmfKXr486fiQInvErHtEvizFMw==", + "license": "ISC" }, "node_modules/libsodium-wrappers": { "version": "0.7.15", @@ -29891,6 +30316,7 @@ "version": "0.7.15", "resolved": "https://registry.npmjs.org/libsodium-wrappers-sumo/-/libsodium-wrappers-sumo-0.7.15.tgz", "integrity": "sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==", + "license": "ISC", "dependencies": { "libsodium-sumo": "^0.7.15" } @@ -31169,6 +31595,7 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.7.2.tgz", "integrity": "sha512-uFH23nqPNdg2KZ9ZdvLG4GO3bTAOWRhwGTsecY4Et2IdQOJ26x6inu8lJ9oyslnYL/0o1vnETCGhMimMvO0SqQ==", + "license": "MIT", "dependencies": { "@ethereumjs/rlp": "5.0.0", "@noble/curves": "~1.3.0", @@ -31181,6 +31608,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.0.tgz", "integrity": "sha512-WuS1l7GJmB0n0HsXLozCoEFc9IwYgf3l0gCkKVYgR67puVF1O4OpEaN0hWmm1c+iHUHFCKt1hJrvy5toLg+6ag==", + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" }, @@ -31192,6 +31620,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.3" }, @@ -31203,6 +31632,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -31220,6 +31650,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.5.3.tgz", "integrity": "sha512-zWRoH+qUb/ZMp9gVZhexvRGCENDM5HEQF4sflqpdilUHWK2/zKR7/MT8GBctnTwbhNJwy1iuk5q6+TYP7/twYA==", + "license": "MIT", "dependencies": { "@scure/base": "~1.1.5" }, @@ -32018,7 +32449,8 @@ "node_modules/nanoassert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" + "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", + "license": "ISC" }, "node_modules/nanoid": { "version": "3.3.11", @@ -32030,6 +32462,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -32364,7 +32797,8 @@ "version": "0.7.2", "resolved": "https://registry.npmjs.org/noble-bls12-381/-/noble-bls12-381-0.7.2.tgz", "integrity": "sha512-Z5isbU6opuWPL3dxsGqO5BdOE8WP1XUM7HFIn/xeE5pATTnml/PEIy4MFQQrktHiitkuJdsCDtzEOnS9eIpC3Q==", - "deprecated": "Switch to @noble/curves for security updates" + "deprecated": "Switch to @noble/curves for security updates", + "license": "MIT" }, "node_modules/nock": { "version": "13.5.6", @@ -33047,6 +33481,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -33191,6 +33626,7 @@ "version": "5.11.3", "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.11.3.tgz", "integrity": "sha512-jXOPfIteBUQ2zSmRG4+Y6PNntIIDEAvoM/lOYCnvpXAByJEruzrHQZWE/0CGOKHbubwUuty2HoPHsqBzyKHOpA==", + "deprecated": "This version is deprecated and will no longer receive security patches. Please refer to https://github.com/openpgpjs/openpgpjs/wiki/Updating-from-previous-versions for details on how to upgrade to a newer supported version.", "license": "LGPL-3.0+", "dependencies": { "asn1.js": "^5.0.0" @@ -33607,6 +34043,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/paillier-bigint/-/paillier-bigint-3.3.0.tgz", "integrity": "sha512-Aa8a75dODYOGxLYQhi1Y0Xsi0Vbl+5gzPvaVfxuCA/zT8CK/keXv5CA2Ddn5AV9VxmTkpIEdYs40hv1rkFcODg==", + "license": "MIT", "dependencies": { "bigint-crypto-utils": "^3.0.17" }, @@ -33708,7 +34145,8 @@ "node_modules/parse-srcset": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==", + "license": "MIT" }, "node_modules/parseurl": { "version": "1.3.3", @@ -34210,6 +34648,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -35825,6 +36264,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", + "license": "MIT", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -35905,7 +36345,8 @@ "node_modules/secrets.js-grempe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/secrets.js-grempe/-/secrets.js-grempe-1.1.0.tgz", - "integrity": "sha512-OsbpZUFTjvQPKHpseAbFPY82U3mVNP4G3WSbJiDtMLjzwsV52MTdc6rTwIooIkg3klf5eCrg62ZuGIz5GaW02A==" + "integrity": "sha512-OsbpZUFTjvQPKHpseAbFPY82U3mVNP4G3WSbJiDtMLjzwsV52MTdc6rTwIooIkg3klf5eCrg62ZuGIz5GaW02A==", + "license": "MIT" }, "node_modules/secure-json-parse": { "version": "2.7.0", @@ -36606,6 +37047,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -36936,7 +37378,8 @@ "node_modules/store2": { "version": "2.13.2", "resolved": "https://registry.npmjs.org/store2/-/store2-2.13.2.tgz", - "integrity": "sha512-CMtO2Uneg3SAz/d6fZ/6qbqqQHi2ynq6/KzMD/26gTkiEShCcpqFfTHgOxsE0egAq6SX3FmN4CeSqn8BzXQkJg==" + "integrity": "sha512-CMtO2Uneg3SAz/d6fZ/6qbqqQHi2ynq6/KzMD/26gTkiEShCcpqFfTHgOxsE0egAq6SX3FmN4CeSqn8BzXQkJg==", + "license": "(MIT OR GPL-3.0)" }, "node_modules/str2buf": { "version": "1.3.0", @@ -36948,6 +37391,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -37704,7 +38148,8 @@ "node_modules/tcomb": { "version": "3.2.29", "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", - "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==" + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "license": "MIT" }, "node_modules/temp-dir": { "version": "2.0.0", @@ -38646,7 +39091,8 @@ "node_modules/typeforce": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", + "license": "MIT" }, "node_modules/typescript": { "version": "5.8.3", @@ -40224,6 +40670,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", "integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==", + "license": "MIT", "dependencies": { "bs58check": "<3.0.0" } @@ -40561,6 +41008,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.13.tgz", "integrity": "sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==", + "license": "MIT", "dependencies": { "commander": "^2.20.3", "cssfilter": "0.0.10" @@ -40575,7 +41023,8 @@ "node_modules/xss/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/xstream": { "version": "11.14.0", diff --git a/package.json b/package.json index 872c77f6..3662ef89 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ "@bitgo-beta/statics": "15.1.1-beta.1046", "@bitgo/wasm-miniscript": "2.0.0-beta.7", "@commitlint/config-conventional": "^19.8.1", + "@ethereumjs/tx": "^3.3.0", "body-parser": "^1.20.3", "connect-timeout": "^1.9.0", "debug": "^3.1.0", diff --git a/src/__tests__/api/enclaved/postIndependentKey.test.ts b/src/__tests__/api/enclaved/postIndependentKey.test.ts index 8da39557..34a1f1a8 100644 --- a/src/__tests__/api/enclaved/postIndependentKey.test.ts +++ b/src/__tests__/api/enclaved/postIndependentKey.test.ts @@ -6,9 +6,6 @@ import { app as enclavedApp } from '../../../enclavedApp'; import { AppMode, EnclavedConfig, TlsMode } from '../../../shared/types'; import express from 'express'; -import * as sinon from 'sinon'; -import * as configModule from '../../../initConfig'; - describe('postIndependentKey', () => { let cfg: EnclavedConfig; let app: express.Application; @@ -20,7 +17,6 @@ describe('postIndependentKey', () => { const accessToken = 'test-token'; // sinon stubs - let configStub: sinon.SinonStub; before(() => { // nock config @@ -39,8 +35,6 @@ describe('postIndependentKey', () => { allowSelfSigned: true, }; - configStub = sinon.stub(configModule, 'initConfig').returns(cfg); - // app setup app = enclavedApp(cfg); agent = request.agent(app); @@ -50,10 +44,6 @@ describe('postIndependentKey', () => { nock.cleanAll(); }); - after(() => { - configStub.restore(); - }); - // test cases it('should post an independent key successfully', async () => { const mockKmsResponse = { diff --git a/src/__tests__/api/enclaved/recoveryMpcV2.test.ts b/src/__tests__/api/enclaved/recoveryMpcV2.test.ts new file mode 100644 index 00000000..e8cbfe54 --- /dev/null +++ b/src/__tests__/api/enclaved/recoveryMpcV2.test.ts @@ -0,0 +1,162 @@ +import { AppMode, EnclavedConfig, TlsMode } from '../../../initConfig'; +import { app as enclavedApp } from '../../../enclavedApp'; + +import express from 'express'; +import nock from 'nock'; +import 'should'; +import * as request from 'supertest'; +import * as sinon from 'sinon'; +import * as configModule from '../../../initConfig'; +import { DklsTypes, DklsUtils } from '@bitgo-beta/sdk-lib-mpc'; + +describe('recoveryMpcV2', async () => { + let cfg: EnclavedConfig; + let app: express.Application; + let agent: request.SuperAgentTest; + + // test config + const kmsUrl = 'http://kms.invalid'; + const ethLikeCoin = 'hteth'; + const cosmosLikeCoin = 'tsei'; + const accessToken = 'test-token'; + + // sinon stubs + let configStub: sinon.SinonStub; + + // kms nocks setup + const [userShare, backupShare] = await DklsUtils.generateDKGKeyShares(); + const userKeyShare = userShare.getKeyShare().toString('base64'); + const backupKeyShare = backupShare.getKeyShare().toString('base64'); + const commonKeychain = DklsTypes.getCommonKeychain(userShare.getKeyShare()); + + const mockKmsUserResponse = { + prv: JSON.stringify(userKeyShare), + pub: commonKeychain, + source: 'user', + type: 'tss', + }; + + const mockKmsBackupResponse = { + prv: JSON.stringify(backupKeyShare), + pub: commonKeychain, + source: 'backup', + type: 'tss', + }; + const input = { + txHex: + '02f6824268018502540be4008504a817c80083030d409443442e403d64d29c4f64065d0c1a0e8edc03d6c88801550f7dca700000823078c0', + pub: commonKeychain, + }; + + before(async () => { + // nock config + nock.disableNetConnect(); + nock.enableNetConnect('127.0.0.1'); + + // app config + cfg = { + appMode: AppMode.ENCLAVED, + port: 0, // Let OS assign a free port + bind: 'localhost', + timeout: 60000, + kmsUrl: kmsUrl, + httpLoggerFile: '', + tlsMode: TlsMode.DISABLED, + allowSelfSigned: true, + recoveryMode: true, + }; + + configStub = sinon.stub(configModule, 'initConfig').returns(cfg); + + // app setup + app = enclavedApp(cfg); + agent = request.agent(app); + }); + + afterEach(() => { + nock.cleanAll(); + }); + + after(() => { + configStub.restore(); + }); + + // happy path test + it('should be sign a Mpc V2 Recovery', async () => { + // nocks for KMS responses + const userKmsNock = nock(kmsUrl) + .get(`/key/${input.pub}`) + .query({ source: 'user', useLocalEncipherment: false }) + .reply(200, mockKmsUserResponse) + .persist(); + const backupKmsNock = nock(kmsUrl) + .get(`/key/${input.pub}`) + .query({ source: 'backup', useLocalEncipherment: false }) + .reply(200, mockKmsBackupResponse) + .persist(); + + const ethLikeSignatureResponse = await agent + .post(`/api/${ethLikeCoin}/mpcv2/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send(input); + + ethLikeSignatureResponse.status.should.equal(200); + ethLikeSignatureResponse.body.should.have.property('txHex'); + ethLikeSignatureResponse.body.txHex.should.equal(input.txHex); + + ethLikeSignatureResponse.body.should.have.property('stringifiedSignature'); + const ethLikeSignature = JSON.parse(ethLikeSignatureResponse.body.stringifiedSignature); + ethLikeSignature.should.have.property('recid'); + ethLikeSignature.should.have.property('r'); + ethLikeSignature.should.have.property('s'); + ethLikeSignature.should.have.property('y'); + + const cosmosLikeSignatureResponse = await agent + .post(`/api/${cosmosLikeCoin}/mpcv2/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send(input); + + cosmosLikeSignatureResponse.status.should.equal(200); + cosmosLikeSignatureResponse.body.should.have.property('txHex'); + cosmosLikeSignatureResponse.body.txHex.should.equal(input.txHex); + + cosmosLikeSignatureResponse.body.should.have.property('stringifiedSignature'); + const cosmosLikeSignature = JSON.parse(cosmosLikeSignatureResponse.body.stringifiedSignature); + cosmosLikeSignature.should.have.property('recid'); + cosmosLikeSignature.should.have.property('r'); + cosmosLikeSignature.should.have.property('s'); + cosmosLikeSignature.should.have.property('y'); + + userKmsNock.isDone().should.be.true(); + backupKmsNock.isDone().should.be.true(); + }); + + // failure test case + it('should throw 400 Bad Request if failed to construct eth transaction from message hex', async () => { + const input = { + txHex: 'invalid-hex', + pub: commonKeychain, + }; + + // nocks for KMS responses + nock(kmsUrl) + .get(`/key/${input.pub}`) + .query({ source: 'user', useLocalEncipherment: false }) + .reply(200, mockKmsUserResponse); + nock(kmsUrl) + .get(`/key/${input.pub}`) + .query({ source: 'backup', useLocalEncipherment: false }) + .reply(200, mockKmsBackupResponse); + + const signatureResponse = await agent + .post(`/api/${ethLikeCoin}/mpcv2/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send(input); + + signatureResponse.status.should.equal(400); + signatureResponse.body.should.have.property('error'); + signatureResponse.body.error.should.startWith( + 'Failed to construct eth transaction from message hex', + ); + }); +}); diff --git a/src/__tests__/api/master/mockBitgoConstants.ts b/src/__tests__/api/master/mockBitgoConstants.ts new file mode 100644 index 00000000..a94692a4 --- /dev/null +++ b/src/__tests__/api/master/mockBitgoConstants.ts @@ -0,0 +1,3087 @@ +export const mockBitgoConstants = { + ttl: 3600, + constants: { + maxFee: 100000000, + maxFeeRate: 100000000000000000000, + minFeeRate: 1100, + minInstantFeeRate: -1000, + fallbackFeeRate: 5000, + minOutputSize: 2730, + defaultGasPrice: 30000000000000, + bitgoEthAddress: '0x0f47ea803926926f299b7f1afc8460888d850f47', + enableSegwit: true, + enableP2shP2wsh: true, + enableP2wsh: false, + tcelo: { + tokens: [ + { + type: 'tcusd', + coin: 'tcelo', + network: 'Alfajores', + decimalPlaces: 18, + name: 'tcusd', + tokenContractAddress: '0x874069fa1eb16d44d622f2e0ca25eea172369bc1', + }, + ], + }, + tbsc: { + tokens: [ + { + type: 'tbsc:busd', + coin: 'tbsc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tbsc:busd', + tokenContractAddress: '0xed24fc36d5ee211ea25a80239fb8c4cfd80f12ee', + }, + { + type: 'tbsc:usd1', + coin: 'tbsc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tbsc:usd1', + tokenContractAddress: '0xb0652e70b4ad023d5be50a4427bfa556cf8cbb5e', + }, + { + type: 'tbsc:stgusd1', + coin: 'tbsc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tbsc:stgusd1', + tokenContractAddress: '0xcad6876355c024b388de9a8c3b8172e7f86748ba', + }, + { + type: 'terc721:bsctoken', + coin: 'tbsc', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc721:bsctoken', + tokenContractAddress: '0xterc721:bsctoken', + nftType: 'ERC721', + }, + { + type: 'terc1155:bsctoken', + coin: 'tbsc', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc1155:bsctoken', + tokenContractAddress: '0xterc1155:bsctoken', + nftType: 'ERC721', + }, + ], + }, + teth: { + tokens: [ + { + type: 'terc', + coin: 'teth', + network: 'Kovan', + tokenContractAddress: '0x945ac907cf021a6bcd07852bb3b8c087051706a9', + decimalPlaces: 18, + name: 'ERC Test Token', + }, + { + type: 'terc2dp', + coin: 'teth', + network: 'Kovan', + tokenContractAddress: '0x107295c724c29553f51c5373b959f947065e6445', + decimalPlaces: 2, + name: 'ERC Test Token 2 Decimals', + }, + { + type: 'terc6dp', + coin: 'teth', + network: 'Kovan', + tokenContractAddress: '0x4fcae60b370e5e523d18ba1fdf3bae46de88ac70', + decimalPlaces: 6, + name: 'ERC Test Token 6 Decimals', + }, + { + type: 'terc18dp', + coin: 'teth', + network: 'Kovan', + tokenContractAddress: '0xd1e7cd06a5c81af9307cf3162f0fe740a0a69d25', + decimalPlaces: 18, + name: 'ERC Test Token 18 Decimals', + }, + { + type: 'test', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 18, + name: 'test', + tokenContractAddress: '0x1fb879581f31687b905653d4bbcbe3af507bed37', + }, + { + type: 'tbst', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 0, + name: 'tbst', + tokenContractAddress: '0xe5cdf77835ca2095881dd0803a77e844c87483cd', + }, + { + type: 'schz', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 18, + name: 'schz', + tokenContractAddress: '0x050e25a2630b2aee94546589fd39785254de112c', + securityTokenType: 'harbor', + }, + { + type: 'tcat', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 18, + name: 'tcat', + tokenContractAddress: '0x63137319f3a14a985eb31547370e0e3bd39b03b8', + securityTokenType: 'securrency', + }, + { + type: 'tfmf', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 18, + name: 'tfmf', + tokenContractAddress: '0xd8463d2f8c5b3be9de95c63b73a0ae4c79423452', + }, + { + type: 'tdai', + coin: 'teth', + network: 'Kovan', + decimalPlaces: 18, + name: 'tdai', + tokenContractAddress: '0x4f96fe3b7a6cf9725f59d353f723c1bdb64ca6aa', + }, + ], + }, + gteth: { + tokens: [ + { + type: 'fixed', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'fixed', + tokenContractAddress: '0xa13de8df4ef9d6016f0826858d48045848429390', + }, + { + type: 'gusdt', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gusdt', + tokenContractAddress: '0x64d081854fad45e64db52cd28ba78ae1ecfee59b', + }, + { + type: 'ghdo', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'ghdo', + tokenContractAddress: '0x5426635915740813092eeff72158bc492799da5f', + }, + { + type: 'ghcn', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'ghcn', + tokenContractAddress: '0xa05e3efe2771cd04191f3eadb9a99ba3b4bf9d26', + }, + { + type: 'gterc2dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'gterc2dp', + tokenContractAddress: '0xe19e232e942cde4320b6354646cbb1336ae732c7', + }, + { + type: 'gterc6dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'gterc6dp', + tokenContractAddress: '0xe7afa17e6e5257806d2309b01e6de320668ec3dc', + }, + { + type: 'gterc18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gterc18dp', + tokenContractAddress: '0x61d54356be035944a3868eaa9556353b7150699d', + }, + { + type: 'gtaave18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtaave18dp', + tokenContractAddress: '0x631d5e3c45a459e8f98b9d6a2734fce7b051f845', + }, + { + type: 'gtbat18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtbat18dp', + tokenContractAddress: '0x95458b26c8b524eb5ef92c7a1759ede6224bef2e', + }, + { + type: 'gtcomp18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtcomp18dp', + tokenContractAddress: '0xa1ff97c394b25926acb09d12bacf0613055a2727', + }, + { + type: 'gtgrt18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtgrt18dp', + tokenContractAddress: '0x1441f298d1f15084a0e5c714c966033e39597de7', + }, + { + type: 'gtlink18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtlink18dp', + tokenContractAddress: '0xfe4537ff71aef28592c5c7331ed4b20f276d770b', + }, + { + type: 'gtmkr18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtmkr18dp', + tokenContractAddress: '0xf84e8207e4dc846e250208a6e4b05aa3e7ab00c6', + }, + { + type: 'gtsnx18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtsnx18dp', + tokenContractAddress: '0x50608a26bff103290a4a47b152395047801e9280', + }, + { + type: 'gtuni18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtuni18dp', + tokenContractAddress: '0x6be1a99c215872cea33217b0f4bad63f186ddfac', + }, + { + type: 'gtusdt6dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'gtusdt6dp', + tokenContractAddress: '0x51445dcddf5246229bae8c0ba3ea462e63038641', + }, + { + type: 'gtyfi18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'gtyfi18dp', + tokenContractAddress: '0xf4755c1a9aaad9d6b919edb8346ce9b46d066be4', + }, + { + type: 'gtwbtc18dp', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 8, + name: 'gtwbtc18dp', + tokenContractAddress: '0xd4bccebe77b7c1da89818f8889e3ea09046e7e38', + }, + { + type: 'terc2dp1', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'terc2dp1', + tokenContractAddress: '0xceef48d58cc3a51d8b6df155633007415b9bae01', + }, + { + type: 'terc2dp2', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'terc2dp2', + tokenContractAddress: '0x168ae5b381f7c317ac6ef2161c6e5fcc0e0de41e', + }, + { + type: 'terc2dp3', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'terc2dp3', + tokenContractAddress: '0x12cb9d6127ac74847cc444e6661cfd1b5107bd26', + }, + { + type: 'terc2dp4', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'terc2dp4', + tokenContractAddress: '0x458fdef6e1e58614d82f3116d8ca1f23419cb8c0', + }, + { + type: 'terc2dp5', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 2, + name: 'terc2dp5', + tokenContractAddress: '0xf44c85bf1d556a8268a1212cf0b9248af4f238bd', + }, + { + type: 'terc6dp1', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'terc6dp1', + tokenContractAddress: '0x3b9f958f0ba34aa103fabb054f29400703470bac', + }, + { + type: 'terc6dp2', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'terc6dp2', + tokenContractAddress: '0x2508d109a0cd87e597a1de071325f5cf56d4639a', + }, + { + type: 'terc6dp3', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'terc6dp3', + tokenContractAddress: '0xdda2375104ee9a97e1d7aa4bc48ede2c4c6ddf48', + }, + { + type: 'terc6dp4', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'terc6dp4', + tokenContractAddress: '0x06c1f1195c59ec5f318d12d4cc2d1f9d45261756', + }, + { + type: 'terc6dp5', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'terc6dp5', + tokenContractAddress: '0x3326af8eeb6d4ce1f1f0652fcb3d5e07cd9c1039', + }, + { + type: 'terc18dp1', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp1', + tokenContractAddress: '0x9f77b76e6866b3f5dd99382c96f16eddabc0b78e', + }, + { + type: 'terc18dp2', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp2', + tokenContractAddress: '0x18b17853ff62122c60f113b8b8967243c39ad30e', + }, + { + type: 'terc18dp3', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp3', + tokenContractAddress: '0x96f13e2ea4b738380922dd9f5cd8fcf0416e5f2d', + }, + { + type: 'terc18dp4', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp4', + tokenContractAddress: '0xbecf20f89b6898bd8bbf3fa93fb4bcda367b9594', + }, + { + type: 'terc18dp5', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp5', + tokenContractAddress: '0x4464fe55f9a8aea46e02c4a22b4d74661805ec26', + }, + { + type: 'terc18dp6', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp6', + tokenContractAddress: '0x998ddfd1ac3ed76fc163528c5fc69b8d67fa5395', + }, + { + type: 'terc18dp7', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp7', + tokenContractAddress: '0xf2555ac243ab2606fa71e2f2728117054dd1867b', + }, + { + type: 'terc18dp8', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp8', + tokenContractAddress: '0xd9da1e909e3b4b2c1ec31b702bef0bf1e42533e4', + }, + { + type: 'terc18dp9', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp9', + tokenContractAddress: '0xb91be6a36b60c4576aff75a50d2b7c762349ddec', + }, + { + type: 'terc18dp10', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp10', + tokenContractAddress: '0xc53d2c04795a1cef22a91c9d52c04f5082bb5631', + }, + { + type: 'terc18dp11', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp11', + tokenContractAddress: '0xc325d7f188dc6015f45d3d39e58c5404e79b5cb9', + }, + { + type: 'terc18dp12', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp12', + tokenContractAddress: '0x7a8f375798284920cd27d1c757ceca3675603ab1', + }, + { + type: 'terc18dp13', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp13', + tokenContractAddress: '0x2e3f4bf47e4ea53a7a94f0597b47fe3caab78b0d', + }, + { + type: 'terc18dp14', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp14', + tokenContractAddress: '0x4f369aa78b9f299cb50ad4d96e13bdfbd8be7239', + }, + { + type: 'terc18dp15', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'terc18dp15', + tokenContractAddress: '0x0fcb9bc4c67d502a45a07f514638ca8f83ba2912', + }, + { + type: 'tusdc', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'tusdc', + tokenContractAddress: '0x07865c6e87b9f70255377e024ace6630c1eaa37f', + }, + { + type: 'tusdt', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'tusdt', + tokenContractAddress: '0xc2c527c0cacf457746bd31b2a698fe89de2b6d49', + }, + { + type: 'teuroc', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 6, + name: 'teuroc', + tokenContractAddress: '0xa683d909e996052955500ddc45ca13e25c76e286', + }, + { + type: 'tmatic', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 18, + name: 'tmatic', + tokenContractAddress: '0x499d11e0b6eac7c0593d8fb292dcbbf815fb29ae', + }, + { + type: 'terc721:bitgoerc721', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 0, + name: 'terc721:bitgoerc721', + tokenContractAddress: '0x8397b091514c1f7bebb9dea6ac267ea23b570605', + nftType: 'ERC721', + }, + { + type: 'terc1155:bitgoerc1155', + coin: 'gteth', + network: 'Goerli', + decimalPlaces: 0, + name: 'terc1155:bitgoerc1155', + tokenContractAddress: '0x87cd6a40640befdd96e563b788a6b1fb3e07a186', + nftType: 'ERC1155', + }, + ], + }, + hteth: { + tokens: [ + { + type: 'tusds', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'tusds', + tokenContractAddress: '0x399ae63d3fd23da82109fc8b632c19a1810f657e', + }, + { + type: 'tgousd', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'tgousd', + tokenContractAddress: '0x51cef49e20d11a2735d09e3bb68d79ec490e3579', + }, + { + type: 'hteth:stgusd1', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'hteth:stgusd1', + tokenContractAddress: '0x78f81399cd3bc0937ea9049cc6604fb6e67ebe83', + }, + { + type: 'hteth:tsteth', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'hteth:tsteth', + tokenContractAddress: '0x3f1c547b21f65e10480de3ad8e19faac46c95034', + }, + { + type: 'hteth:gousd', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'hteth:gousd', + tokenContractAddress: '0x65c959b9184b4f8c8633646d5dfd049d2ebc251a', + }, + { + type: 'hteth:usd1', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'hteth:usd1', + tokenContractAddress: '0x978b411161325c7b689573396d717c828d9f480a', + }, + { + type: 'txsgd', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'txsgd', + tokenContractAddress: '0x3f811bb6e605ef518b0cd9281eb4d9ad88a3953f', + }, + { + type: 'txusd', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'txusd', + tokenContractAddress: '0x6d41906cce58491daf2ca8141a1c4b180fa6e7b9', + }, + { + type: 'tweth', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'tweth', + tokenContractAddress: '0x94373a4919b3240d86ea41593d5eba789fef3848', + }, + { + type: 'hterc18dp', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'hterc18dp', + tokenContractAddress: '0x7ca1945d697ac04965774700db8d0b64d81b288d', + }, + { + type: 'hteth:bgerchv2', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'hteth:bgerchv2', + tokenContractAddress: '0xee4d03adfca9a902d09f6e3e09dbd5a8a5122fb6', + }, + { + type: 'hteth:aut', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'hteth:aut', + tokenContractAddress: '0x63d0b467059a10b365aa18f441684ed154628f4e', + }, + { + type: 'hterc6dp', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 6, + name: 'hterc6dp', + tokenContractAddress: '0xdd415a799a11c2bcc380937b7c46d5035df4f1e2', + }, + { + type: 'hterc2dp', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 2, + name: 'hterc2dp', + tokenContractAddress: '0x5b494aba42b752b46c91e35fc914b4c2f8d61a00', + }, + { + type: 'trlusd', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'trlusd', + tokenContractAddress: '0xe101fb315a64cda9944e570a7bffafe60b994b1d', + }, + { + type: 'teigen', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'teigen', + tokenContractAddress: '0x3b78576f7d6837500ba3de27a60c7f594934027e', + }, + { + type: 'teinu', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'teinu', + tokenContractAddress: '0xdeeeee2b48c121e6728ed95c860e296177849932', + }, + { + type: 'bgerch', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 18, + name: 'bgerch', + tokenContractAddress: '0xebe8b46a42f05072b723b00013ff822b2af1b5cb', + }, + { + type: 'terc721:token', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 0, + name: 'terc721:token', + tokenContractAddress: '0xterc721:token', + nftType: 'ERC721', + }, + { + type: 'terc1155:token', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 0, + name: 'terc1155:token', + tokenContractAddress: '0xterc1155:token', + nftType: 'ERC1155', + }, + { + type: 'tnonstandard:token', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 0, + name: 'tnonstandard:token', + tokenContractAddress: '0xtnonstandard:token', + nftType: 'NONSTANDARD', + }, + { + type: 'terc721:bitgoerc721', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 0, + name: 'terc721:bitgoerc721', + tokenContractAddress: '0x8397b091514c1f7bebb9dea6ac267ea23b570605', + nftType: 'ERC721', + }, + { + type: 'terc1155:bitgoerc1155', + coin: 'hteth', + network: 'Holesky', + decimalPlaces: 0, + name: 'terc1155:bitgoerc1155', + tokenContractAddress: '0x87cd6a40640befdd96e563b788a6b1fb3e07a186', + nftType: 'ERC721', + }, + ], + }, + txlm: { + tokens: [ + { + type: 'txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L', + coin: 'txlm', + network: 'Testnet', + decimalPlaces: 7, + name: 'BitGo Shield Token', + domain: 'bitgo.com', + }, + { + type: 'txlm:TST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L', + coin: 'txlm', + network: 'Testnet', + decimalPlaces: 7, + name: 'BitGo Test Token', + domain: 'bitgo.com', + }, + ], + }, + teos: { + tokens: [ + { + type: 'teos:CHEX', + coin: 'teos', + network: 'Testnet', + decimalPlaces: 8, + tokenContractAddress: 'testtoken113', + name: 'Chintai', + symbol: 'CHEX', + }, + { + type: 'teos:IQ', + coin: 'teos', + network: 'Testnet', + decimalPlaces: 3, + tokenContractAddress: 'testtoken112', + name: 'Everipedia', + symbol: 'IQ', + }, + { + type: 'teos:BOX', + coin: 'teos', + network: 'Testnet', + decimalPlaces: 6, + tokenContractAddress: 'kvszn1xyz1bu', + name: 'Box', + symbol: 'BOX', + }, + { + type: 'teos:USDT', + coin: 'teos', + network: 'Testnet', + decimalPlaces: 4, + tokenContractAddress: 'lionteste212', + name: 'Testnet EOS USDT', + symbol: 'USDT', + }, + { + type: 'teos:VAULTA', + coin: 'teos', + network: 'Testnet', + decimalPlaces: 4, + tokenContractAddress: 'core.vaulta', + name: 'Testnet Vaulta', + symbol: 'A', + }, + ], + }, + talgo: { + tokens: [ + { + type: 'talgo:USDC-10458941', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 6, + name: 'USDC', + }, + { + type: 'talgo:USDt-180447', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 6, + name: 'Testnet Algorand USDT', + }, + { + type: 'talgo:USON-16026728', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 2, + name: 'Unison', + }, + { + type: 'talgo:SPRW-16026732', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 4, + name: 'Sparrow', + }, + { + type: 'talgo:KAL-16026733', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 8, + name: 'Kalki', + }, + { + type: 'talgo:JPT-162085446', + coin: 'talgo', + network: 'Testnet', + decimalPlaces: 6, + name: 'JPT', + }, + ], + }, + tavaxc: { + tokens: [ + { + type: 'tavaxc:link', + coin: 'tavaxc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tavaxc:link', + tokenContractAddress: '0x0b9d5d9136855f6fec3c0993fee6e9ce8a297846', + }, + { + type: 'tavaxc:opm', + coin: 'tavaxc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tavaxc:opm', + tokenContractAddress: '0x9a25414c8a41599cb7048f2e4dd42db02c1de487', + }, + { + type: 'tavaxc:cop2peq', + coin: 'tavaxc', + network: 'Testnet', + decimalPlaces: 18, + name: 'tavaxc:cop2peq', + tokenContractAddress: '0xbd3bd9b0c96be74e006333df6d1b5d9333ae1d43', + }, + { + type: 'tavaxc:xsgd', + coin: 'tavaxc', + network: 'Testnet', + decimalPlaces: 6, + name: 'tavaxc:xsgd', + tokenContractAddress: '0xd769410dc8772695a7f55a304d2125320a65c2a5', + }, + { + type: 'tavaxc:bitgo', + coin: 'tavaxc', + network: 'Testnet', + decimalPlaces: 8, + name: 'tavaxc:bitgo', + tokenContractAddress: '0x3ad5f9119ca063189095784b9a7d2bf80fc24de6', + }, + ], + }, + tsol: { + tokens: [ + { + type: 'tsol:srm', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'Serum', + }, + { + type: 'tsol:usdc', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'USD Coin', + }, + { + type: 'tsol:usdcv2', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 6, + name: 'USD Coin V2', + }, + { + type: 'tsol:ray', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'Raydium', + }, + { + type: 'tsol:gmt', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'GMT', + }, + { + type: 'tsol:usdt', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'USD Tether', + }, + { + type: 'tsol:gari', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'GARI', + }, + { + type: 'tsol:orca', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'ORCA', + }, + { + type: 'tsol:slnd', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'SOLEND', + }, + { + type: 'tsol:t22mint', + coin: 'tsol', + network: 'Testnet', + decimalPlaces: 9, + name: 'T22MINT', + }, + ], + }, + thbar: { + tokens: [ + { + type: 'thbar:usdc', + coin: 'thbar', + network: 'Testnet', + decimalPlaces: 6, + name: 'Testnet Hedera USD Coin', + }, + { + type: 'thbar:txsgd', + coin: 'thbar', + network: 'Testnet', + decimalPlaces: 6, + name: 'Testnet Fungible Token', + }, + ], + }, + tpolygon: { + tokens: [ + { + type: 'tpolygon:derc20', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:derc20', + tokenContractAddress: '0xfe4f5145f6e09952a5ba9e956ed0c25e3fa4c7f1', + }, + { + type: 'tpolygon:testcopm', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:testcopm', + tokenContractAddress: '0x866022aa0489bd84fd2b3e0320ba988d9385d439', + }, + { + type: 'tpolygon:link', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:link', + tokenContractAddress: '0x326c977e6efc84e512bb9c30f76e30c160ed06fb', + }, + { + type: 'tpolygon:opm', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:opm', + tokenContractAddress: '0xe71b2e809598d8398222b890d7203808fa1d631f', + }, + { + type: 'tpolygon:pme', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 0, + name: 'tpolygon:pme', + tokenContractAddress: '0x4659bc13c40a5012663b66102415262712303739', + }, + { + type: 'tpolygon:usdc', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 6, + name: 'tpolygon:usdc', + tokenContractAddress: '0x41e94eb019c0762f9bfcf9fb1e58725bfb0e7582', + }, + { + type: 'tpolygon:xsgd', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 6, + name: 'tpolygon:xsgd', + tokenContractAddress: '0xd769410dc8772695a7f55a304d2125320a65c2a5', + }, + { + type: 'tpolygon:usdt', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 6, + name: 'tpolygon:usdt', + tokenContractAddress: '0xbcf39d8616d15fd146dd5db4a86b4f244a9bc772', + }, + { + type: 'tpolygon:terc18dp', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:terc18dp', + tokenContractAddress: '0xa94c028c2e138b8ce20406e7e0d0b1e6180cb31f', + }, + { + type: 'tpolygon:terc10dp', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 10, + name: 'tpolygon:terc10dp', + tokenContractAddress: '0x58a3cd99e4955af8935fd68a4f5036d43fd155ea', + }, + { + type: 'tpolygon:terc6dp', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 6, + name: 'tpolygon:terc6dp', + tokenContractAddress: '0x46bada38d482c0973f45d307ebedd402be104e2d', + }, + { + type: 'tpolygon:BitGoTest', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 18, + name: 'tpolygon:BitGoTest', + tokenContractAddress: '0xb99d708377a552ea5b7ffb14fa2cec9a21403d6f', + }, + { + type: 'tpolygon:name', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 0, + name: 'tpolygon:name', + tokenContractAddress: '0xba4bfed386dac111866aa2369319f2c2daf454af', + nftType: 'ERC721', + }, + { + type: 'terc721:polygontoken', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc721:polygontoken', + tokenContractAddress: '0xterc721:polygontoken', + nftType: 'ERC721', + }, + { + type: 'terc1155:polygontoken', + coin: 'tpolygon', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc1155:polygontoken', + tokenContractAddress: '0xterc1155:polygontoken', + nftType: 'ERC1155', + }, + ], + }, + tarbeth: { + tokens: [ + { + type: 'tarbeth:link', + coin: 'tarbeth', + network: 'ArbitrumSepolia', + decimalPlaces: 18, + name: 'tarbeth:link', + tokenContractAddress: '0x143e1dae4f018ff86051a01d44a1b49b13704056', + }, + { + type: 'tarbeth:xsgd', + coin: 'tarbeth', + network: 'ArbitrumSepolia', + decimalPlaces: 6, + name: 'tarbeth:xsgd', + tokenContractAddress: '0x63681558c1b680e43bbcadc0ced21075854bba87', + }, + ], + }, + topeth: { + tokens: [ + { + type: 'topeth:terc18dp', + coin: 'topeth', + network: 'OptimismSepolia', + decimalPlaces: 18, + name: 'topeth:terc18dp', + tokenContractAddress: '0xe9df68a54bba438c8a6192e95f0f2c53ac93d997', + }, + { + type: 'topeth:wct', + coin: 'topeth', + network: 'OptimismSepolia', + decimalPlaces: 18, + name: 'topeth:wct', + tokenContractAddress: '0x75bb6dca2cd6f9a0189c478bbb8f7ee2fef07c78', + }, + ], + }, + ttrx: { + tokens: [ + { + type: 'ttrx:wbtc', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:wbtc', + tokenContractAddress: 'TGkfUshdbAiNj5G1mynp2meq2BfF6XSGPf', + }, + { + type: 'ttrx:weth', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:weth', + tokenContractAddress: 'TCA8tecECSMwjg5jFz1J1V64k9ULZRSx7g', + }, + { + type: 'ttrx:usdc', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:usdc', + tokenContractAddress: 'TSdZwNqpHofzP6BsBKGQUWdBeJphLmF6id', + }, + { + type: 'ttrx:usdt', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:usdt', + tokenContractAddress: 'TG3XXyExBkPp9nzdajDZsozEu4BkaSJozs', + }, + { + type: 'ttrx:usd1', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:usd1', + tokenContractAddress: 'TMsuh7QxbJkYaLsGMGCgNJYtYjTZLJG3Np', + }, + { + type: 'ttrx:stgusd1', + coin: 'ttrx', + network: 'Testnet', + decimalPlaces: 6, + name: 'ttrx:stgusd1', + tokenContractAddress: 'TPEwuCefwvzBcr9BHvg2xhJCaf499uGMZx', + }, + ], + }, + tsui: { + tokens: [ + { + type: 'tsui:deep', + coin: 'tsui', + network: 'Testnet', + decimalPlaces: 6, + name: 'tsui:deep', + contractAddress: + '0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP', + }, + { + type: 'tsui:wal', + coin: 'tsui', + network: 'Testnet', + decimalPlaces: 9, + name: 'tsui:wal', + contractAddress: + '0x8190b041122eb492bf63cb464476bd68c6b7e570a4079645a8b28732b6197a82::wal::WAL', + }, + ], + }, + tbera: { + tokens: [ + { + type: 'tbera:bgt', + coin: 'tbera', + network: 'BeraCartio', + decimalPlaces: 18, + name: 'tbera:bgt', + tokenContractAddress: '0xbda130737bdd9618301681329bf2e46a016ff9ad', + }, + { + type: 'tbera:honey', + coin: 'tbera', + network: 'BeraCartio', + decimalPlaces: 18, + name: 'tbera:honey', + tokenContractAddress: '0x0e4aaf1351de4c0264c5c7056ef3777b41bd8e03', + }, + { + type: 'tbera:usdc', + coin: 'tbera', + network: 'BeraCartio', + decimalPlaces: 18, + name: 'tbera:usdc', + tokenContractAddress: '0xd6d83af58a19cd14ef3cf6fe848c9a4d21e5727c', + }, + { + type: 'tbera:ibera', + coin: 'tbera', + network: 'BeraCartio', + decimalPlaces: 18, + name: 'tbera:ibera', + tokenContractAddress: '0x5bdc3cae6fb270ef07579c428bb630e73c8d623b', + }, + ], + }, + txrp: { + tokens: [ + { + type: 'txrp:tst-rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd', + coin: 'txrp', + network: 'Testnet', + decimalPlaces: 15, + name: 'txrp:tst-rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd', + issuerAddress: 'rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd', + currencyCode: 'TST', + domain: 'xrpl.org', + }, + { + type: 'txrp:rlusd', + coin: 'txrp', + network: 'Testnet', + decimalPlaces: 15, + name: 'txrp:rlusd', + issuerAddress: 'rQhWct2fv4Vc4KRjRgMrxa8xPN9Zx9iLKV', + currencyCode: '524C555344000000000000000000000000000000', + domain: 'ripple.com', + }, + { + type: 'txrp:xat', + coin: 'txrp', + network: 'Testnet', + decimalPlaces: 15, + name: 'txrp:xat', + issuerAddress: 'rHy7UVhwM7Xgo4SoUTf5hE5yWKZKPEkxcL', + currencyCode: '5841540000000000000000000000000000000000', + domain: 'xat.com', + }, + { + type: 'txrp:xsgd', + coin: 'txrp', + network: 'Testnet', + decimalPlaces: 15, + name: 'txrp:xsgd', + issuerAddress: 'rKgjEa9gEyyumaJsfkPq9uSAyaecQRmvYD', + currencyCode: '5853474400000000000000000000000000000000', + domain: 'straitsx.com', + }, + ], + }, + tapt: { + tokens: [ + { + type: 'tapt:usdt', + coin: 'tapt', + network: 'Testnet', + decimalPlaces: 6, + name: 'tapt:usdt', + assetId: '0xd5d0d561493ea2b9410f67da804653ae44e793c2423707d4f11edb2e38192050', + }, + { + type: 'tapt:nftcollection1', + coin: 'tapt', + network: 'Testnet', + decimalPlaces: 0, + name: 'tapt:nftcollection1', + nftCollectionId: '0xbbc561fbfa5d105efd8dfb06ae3e7e5be46331165b99d518f094c701e40603b5', + nftType: 'Digital Asset', + }, + { + type: 'tapt:beta3loanbook', + coin: 'tapt', + network: 'Testnet', + decimalPlaces: 0, + name: 'tapt:beta3loanbook', + nftCollectionId: '0x14d44152cb1050277338ab6c58416e074d4a34ddf431978b41b5a9d14f9884f2', + nftType: 'Digital Asset', + }, + ], + }, + tstx: { + tokens: [ + { + type: 'tstx:tsbtc', + coin: 'tstx', + network: 'Testnet', + decimalPlaces: 8, + name: 'tstx:tsbtc', + assetId: 'ST1F7QA2MDF17S807EPA36TSS8AMEFY4KA9TVGWXT.sbtc-token::sbtc-token', + }, + { + type: 'tstx:tsip6dp', + coin: 'tstx', + network: 'Testnet', + decimalPlaces: 6, + name: 'tstx:tsip6dp', + assetId: 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip6dp-token::tsip6dp-token', + }, + { + type: 'tstx:tsip8dp', + coin: 'tstx', + network: 'Testnet', + decimalPlaces: 8, + name: 'tstx:tsip8dp', + assetId: + 'STAG18E45W613FZ3H4ZMF6QHH426EXM5QTSAVWYH.tsip8dp-token-updated::tsip8dp-token-updated', + }, + ], + }, + tcoredao: { + tokens: [ + { + type: 'tcoredao:stcore', + coin: 'tcoredao', + network: 'Testnet', + decimalPlaces: 18, + name: 'tcoredao:stcore', + tokenContractAddress: '0x6401f24ef7c54032f4f54e67492928973ab87650', + }, + ], + }, + tsoneium: { + tokens: [ + { + type: 'terc721:soneiumtoken', + coin: 'tsoneium', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc721:soneiumtoken', + tokenContractAddress: '0xterc721:soneiumtoken', + nftType: 'ERC721', + }, + { + type: 'terc1155:soneiumtoken', + coin: 'tsoneium', + network: 'Testnet', + decimalPlaces: 0, + name: 'terc1155:soneiumtoken', + tokenContractAddress: '0xterc1155:soneiumtoken', + nftType: 'ERC1155', + }, + { + type: 'tsoneium:test721', + coin: 'tsoneium', + network: 'Testnet', + decimalPlaces: 0, + name: 'tsoneium:test721', + tokenContractAddress: '0xc78d4c49ccaa27a9ba9d0de9d93f50dbc67d4f8e', + nftType: 'ERC721', + }, + { + type: 'tsoneium:test1155', + coin: 'tsoneium', + network: 'Testnet', + decimalPlaces: 0, + name: 'tsoneium:test1155', + tokenContractAddress: '0xa8005b2990abfd688c0815b84509896f2c7bf78d', + nftType: 'ERC1155', + }, + ], + }, + tnear: { + tokens: [ + { + type: 'tnear:tnep24dp', + coin: 'tnear', + network: 'Testnet', + decimalPlaces: 24, + name: 'tnear:tnep24dp', + contractAddress: 'ft-tnep24dp.testnet', + storageDepositAmount: '1250000000000000000000', + }, + { + type: 'tnear:usdc', + coin: 'tnear', + network: 'Testnet', + decimalPlaces: 6, + name: 'tnear:usdc', + contractAddress: '3e2210e1184b45b64c8a434c0a7e7b23cc04ea7eb7a6c3c32520d03d4afcb8af', + storageDepositAmount: '1250000000000000000000', + }, + ], + }, + tworld: { + tokens: [ + { + type: 'tworld:wld', + coin: 'tworld', + network: 'Testnet', + decimalPlaces: 18, + name: 'tworld:wld', + tokenContractAddress: '0x8803e47fd253915f9c860837f391aa71b3e03c5a', + }, + { + type: 'tworld:usdc', + coin: 'tworld', + network: 'Testnet', + decimalPlaces: 6, + name: 'tworld:usdc', + tokenContractAddress: '0x66145f38cbac35ca6f1dfb4914df98f1614aea88', + }, + ], + }, + tvet: { + tokens: [ + { + type: 'tvet:vtho', + coin: 'tvet', + network: 'Testnet', + decimalPlaces: 18, + name: 'tvet:vtho', + contractAddress: '0x0000000000000000000000000000456e65726779', + }, + ], + }, + underMaintenance: {}, + idfVersion: 1, + enterpriseLicenses: { + canAccessSettlement: ['bitgoOrg.settlement', 'canCreateOffchainWallet'], + canAccessTrading: ['canCreateOffchainWallet', 'bitgoOrg.trading'], + staking: ['bitgoOrg.staking'], + stakingApi: ['bitgoOrg.stakingApi'], + bitgoTrustAsKrs: ['bitgoOrg.isTrust'], + canCreateOffchainWallet: ['bitgoOrg.tradingAccount'], + bitgoNetwork: ['canCreateOffchainWallet'], + marginTrading: ['canAccessTrading'], + mtGox: ['canCreateOffchainWallet', 'canCreateCustodialWallet'], + tradeAPI: ['canAccessTrading'], + videoIdWaived: ['bitgoOrg.isTrust'], + cheetahAccountId: ['bitgoOrg.isTrust'], + escrow: ['bitgoOrg.escrow'], + distributedCustodyWallet: ['bitgoOrg.distributedCustodyWallet'], + selfCustodyLightningWallet: ['bitgoOrg.selfCustodyLightningWallet'], + custodyLightningWallet: ['bitgoOrg.custodyLightningWallet'], + }, + ofc: { + tokens: [ + { + backingCoin: 'tfiatusd', + coin: 'ofc', + decimalPlaces: 2, + isFiat: true, + name: 'Test USD', + type: 'ofctusd', + minimumDenomination: 1, + }, + { + backingCoin: 'tfiataed', + coin: 'ofc', + decimalPlaces: 2, + isFiat: true, + name: 'Testnet United Arab Emirates Dirham', + type: 'ofctaed', + minimumDenomination: 1, + }, + { + backingCoin: 'tfiateur', + coin: 'ofc', + decimalPlaces: 2, + isFiat: true, + name: 'Test Euro', + type: 'ofcteur', + minimumDenomination: 1, + }, + { + backingCoin: 'tbtc', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test Bitcoin', + type: 'ofctbtc', + minimumDenomination: 1, + }, + { + backingCoin: 'tbtc4', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Testnet4 Bitcoin', + type: 'ofctbtc4', + minimumDenomination: 1, + }, + { + backingCoin: 'teth', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Ether', + type: 'ofcteth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'hteth', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Holesky Ether', + type: 'ofchteth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'tavaxc', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Avalanche C-Chain', + type: 'ofctavaxc', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'tstx', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test Stacks', + type: 'ofctstx', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tstx', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test sBTC', + type: 'ofctstx:tsbtc', + addressCoin: 'tstx', + minimumDenomination: 100000000, + }, + { + backingCoin: 'tcspr', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Test Casper', + type: 'ofctcspr', + minimumDenomination: 1000000000, + }, + { + backingCoin: 'tnear', + coin: 'ofc', + decimalPlaces: 24, + isFiat: false, + name: 'Test Near', + type: 'ofctnear', + minimumDenomination: 1e24, + }, + { + backingCoin: 'tltc', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test Litecoin', + type: 'ofctltc', + minimumDenomination: 1, + }, + { + backingCoin: 'tzec', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test ZCash', + type: 'ofctzec', + minimumDenomination: 1, + }, + { + backingCoin: 'txrp', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test Ripple', + type: 'ofctxrp', + minimumDenomination: 1, + }, + { + backingCoin: 'txrp:rlusd', + coin: 'ofc', + decimalPlaces: 15, + isFiat: false, + name: 'RLUSD', + type: 'ofctxrp:rlusd', + addressCoin: 'txrp', + minimumDenomination: 1000000000000000, + }, + { + backingCoin: 'txrp:xsgd', + coin: 'ofc', + decimalPlaces: 15, + isFiat: false, + name: 'XSGB', + type: 'ofctxrp:xsgd', + addressCoin: 'txrp', + minimumDenomination: 1000000000000000, + }, + { + backingCoin: 'txlm', + coin: 'ofc', + decimalPlaces: 7, + isFiat: false, + name: 'Test Stellar', + type: 'ofctxlm', + minimumDenomination: 1, + }, + { + backingCoin: 'tdash', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test Dash', + type: 'ofctdash', + minimumDenomination: 1, + }, + { + backingCoin: 'tbch', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test Bitcoin Cash', + type: 'ofctbch', + minimumDenomination: 1, + }, + { + backingCoin: 'terc', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test ERC Token', + type: 'ofcterc', + addressCoin: 'teth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'terc18dp13', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test ERC Token 18 decimals', + type: 'ofcterc18dp13', + addressCoin: 'gteth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'terc18dp14', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test ERC Token 18 decimals', + type: 'ofcterc18dp14', + addressCoin: 'gteth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'terc18dp15', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test ERC Token 18 decimals', + type: 'ofcterc18dp15', + addressCoin: 'gteth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'test', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Mintable ERC20 Token', + type: 'ofctest', + addressCoin: 'teth', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'teos', + coin: 'ofc', + decimalPlaces: 4, + isFiat: false, + name: 'Test Eos', + type: 'ofcteos', + minimumDenomination: 1, + }, + { + backingCoin: 'talgo', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test Algorand', + type: 'ofctalgo', + minimumDenomination: 1, + }, + { + backingCoin: 'tetc', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Ethereum Classic', + type: 'ofctetc', + minimumDenomination: 1, + }, + { + backingCoin: 'thbar', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Testnet Hedera HBAR', + type: 'ofcthbar', + minimumDenomination: 1, + }, + { + backingCoin: 'tdoge', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test Dogecoin', + type: 'ofctdoge', + minimumDenomination: 1, + }, + { + backingCoin: 'tada', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test Cardano', + type: 'ofctada', + minimumDenomination: 1, + }, + { + backingCoin: 'tpolygon', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Polygon (MATIC native)', + type: 'ofctpolygon', + minimumDenomination: 1, + }, + { + backingCoin: 'tbld', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Agoric', + type: 'ofctbld', + minimumDenomination: 1, + }, + { + backingCoin: 'ttia', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Celestia', + type: 'ofcttia', + minimumDenomination: 1, + }, + { + backingCoin: 'tinjective', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Injective', + type: 'ofctinjective', + minimumDenomination: 1, + }, + { + backingCoin: 'tosmo', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Osmosis', + type: 'ofctosmo', + minimumDenomination: 1, + }, + { + backingCoin: 'thash', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Testnet Provenance', + type: 'ofcthash', + minimumDenomination: 1, + }, + { + backingCoin: 'tsei', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Sei', + type: 'ofctsei', + minimumDenomination: 1, + }, + { + backingCoin: 'tzeta', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Zeta', + type: 'ofctzeta', + minimumDenomination: 1, + }, + { + backingCoin: 'tatom', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Cosmos Hub ATOM', + type: 'ofctatom', + minimumDenomination: 1, + }, + { + backingCoin: 'tbsc', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Binance Smart Chain', + type: 'ofctbsc', + minimumDenomination: 1, + }, + { + backingCoin: 'tsui', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Testnet Sui', + type: 'ofctsui', + minimumDenomination: 1, + }, + { + backingCoin: 'ttrx', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Tron', + type: 'ofcttrx', + minimumDenomination: 1000000000000, + }, + { + backingCoin: 'ttrx:usdt', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Tether USD', + type: 'ofcttrx:usdt', + addressCoin: 'ttrx', + minimumDenomination: 1000000, + }, + { + backingCoin: 'ttrx:usd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'USD1 Token', + type: 'ofcttrx:usd1', + addressCoin: 'ttrx', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'ttrx:stgusd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Staging USD1 Token', + type: 'ofcttrx:stgusd1', + addressCoin: 'ttrx', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tdot', + coin: 'ofc', + decimalPlaces: 12, + isFiat: false, + name: 'Test Polkadot', + type: 'ofctdot', + minimumDenomination: 1, + }, + { + backingCoin: 'tsol', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Test Solana', + type: 'ofctsol', + minimumDenomination: 1, + }, + { + backingCoin: 'hterc18dp', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test ERC Token 18 decimals', + type: 'ofchterc18dp', + addressCoin: 'hteth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'hterc6dp', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test ERC Token 6 decimals', + type: 'ofchterc6dp', + addressCoin: 'hteth', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tusds', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Holesky Testnet USD Standard', + type: 'ofctusds', + addressCoin: 'hteth', + minimumDenomination: 1000000, + }, + { + backingCoin: 'hteth:gousd', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Holesky Testnet GoUSD', + type: 'ofchteth:gousd', + addressCoin: 'hteth', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tgousd', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Holesky Testnet GoUSD', + type: 'ofctgousd', + addressCoin: 'hteth', + minimumDenomination: 1000000, + }, + { + backingCoin: 'hteth:usd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Holesky Testnet USD1', + type: 'ofchteth:usd1', + addressCoin: 'hteth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'hteth:stgusd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Holesky Testnet USD1', + type: 'ofchteth:stgusd1', + addressCoin: 'hteth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tbsc:usd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test USD1 Token', + type: 'ofctbsc:usd1', + addressCoin: 'tbsc', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tbsc:stgusd1', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test USD1 Token', + type: 'ofctbsc:stgusd1', + addressCoin: 'tbsc', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tarbeth', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Arbitrum Ethereum (L2 Chain)', + type: 'ofctarbeth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tarbeth:link', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Arbitrum Test LINK', + type: 'ofctarbeth:link', + addressCoin: 'tarbeth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tcoreum', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Test Coreum', + type: 'ofctcoreum', + minimumDenomination: 1000000, + }, + { + backingCoin: 'ttao', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Testnet Bittensor', + type: 'ofcttao', + minimumDenomination: 1000000000, + }, + { + backingCoin: 'tcelo', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Celo Gold', + type: 'ofctcelo', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'txtz', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Tezos', + type: 'ofctxtz', + minimumDenomination: 1000000, + }, + { + backingCoin: 'avaxc:link', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Test Chainlink', + type: 'ofctavaxc:link', + addressCoin: 'tavaxc', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tsol:gari', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet Gari Token', + type: 'ofctsol:gari', + addressCoin: 'tsol', + minimumDenomination: 1000000000, + }, + { + backingCoin: 'topeth', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Optimism Ethereum (L2 Chain)', + type: 'ofctopeth', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tpolygon:link', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Polygon Test LINK', + type: 'ofctpolygon:link', + addressCoin: 'tpolygon', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tpolygon:usdc', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'USD Coin', + type: 'ofctpolygon:usdc', + addressCoin: 'tpolygon', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tpolygon:usdt', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Tether USD', + type: 'ofctpolygon:usdt', + addressCoin: 'tpolygon', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tpolygon:xsgd', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'XSGD', + type: 'ofctpolygon:xsgd', + addressCoin: 'tpolygon', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:slnd', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet SOLEND', + type: 'ofctsol:slnd', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:usdt', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet USD Tether', + type: 'ofctsol:usdt', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:srm', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet Serum', + type: 'ofctsol:srm', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:orca', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet ORCA', + type: 'ofctsol:orca', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:usdc', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'testnet USD Coin', + type: 'ofctsol:usdc', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:ray', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet Raydium', + type: 'ofctsol:ray', + addressCoin: 'tsol', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tsol:gmt', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'testnet GMT', + type: 'ofctsol:gmt', + addressCoin: 'tsol', + minimumDenomination: 1000000000, + }, + { + backingCoin: 'tton', + coin: 'ofc', + decimalPlaces: 9, + isFiat: false, + name: 'Test Ton', + type: 'ofctton', + minimumDenomination: 1000000000, + }, + { + backingCoin: 'tcoredao', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet coredao chain', + type: 'ofctcoredao', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tpolyx', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Polymesh', + type: 'ofctpolyx', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tbera', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Berachain', + type: 'ofctbera', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'toas', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet oaschain', + type: 'ofctoas', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tmon', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Monad', + type: 'ofctmon', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tstt', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet somnia', + type: 'ofctstt', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tworld', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet world', + type: 'ofctworld', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tsoneium', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet soneium', + type: 'ofctsoneium', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tflr', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet flare', + type: 'ofctflr', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tsgb', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet songbird', + type: 'ofctsgb', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'txdc', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet XDC', + type: 'ofctxdc', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'twemix', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet wemix', + type: 'ofctwemix', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'tapt', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Testnet Aptos', + type: 'ofctapt', + minimumDenomination: 100000000, + }, + { + backingCoin: 'tbaby', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Babylon', + type: 'ofctbaby', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tcronos', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Testnet Cronos POS', + type: 'ofctcronos', + minimumDenomination: 100000000, + }, + { + backingCoin: 'tinitia', + coin: 'ofc', + decimalPlaces: 6, + isFiat: false, + name: 'Testnet Initia', + type: 'ofctinitia', + minimumDenomination: 1000000, + }, + { + backingCoin: 'tasi', + coin: 'ofc', + decimalPlaces: 18, + isFiat: false, + name: 'Testnet Fetch Native', + type: 'ofctasi', + minimumDenomination: 1000000000000000000, + }, + { + backingCoin: 'ticp', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Testnet ICP', + type: 'ofcticp', + minimumDenomination: 100000000, + }, + { + backingCoin: 'tstx:tsbtc', + coin: 'ofc', + decimalPlaces: 8, + isFiat: false, + name: 'Test sBTC', + type: 'ofctstx:tsbtc', + addressCoin: 'tstx', + minimumDenomination: 100000000, + }, + ], + }, + coins: [ + 'tbtc', + 'tbtcsig', + 'tbtc4', + 'tbch', + 'tbsv', + 'tltc', + 'tdash', + 'tzec', + 'hteth', + 'txrp', + 'txlm', + 'talgo', + 'teos', + 'ttrx', + 'txtz', + 'tetc', + 'tavaxc', + 'tavaxp', + 'tcelo', + 'tbsc', + 'tcspr', + 'tstx', + 'thbar', + 'tsol', + 'tdot', + 'ofc', + 'tfiatusd', + 'tfiateur', + 'tfiatgbp', + 'tfiataed', + 'tfiatsgd', + 'tnear', + 'tpolygon', + 'tada', + 'tdoge', + 'tsui', + 'tatom', + 'tosmo', + 'thash', + 'ttia', + 'tsei', + 'tbld', + 'tinjective', + 'tzeta', + 'tton', + 'toas', + 'twemix', + 'tarbeth', + 'topeth', + 'tcoredao', + 'tflr', + 'tmon', + 'tsoneium', + 'tsgb', + 'tworld', + 'tthorchain:rune', + 'tapt', + 'ttao', + 'tbaby', + 'txdc', + 'tpolyx', + 'tcronos', + 'tasi', + 'tinitia', + 'tusds', + 'tgousd', + 'hteth:stgusd1', + 'hteth:tsteth', + 'hteth:gousd', + 'hteth:usd1', + 'txsgd', + 'txusd', + 'tweth', + 'hterc18dp', + 'hteth:bgerchv2', + 'hteth:aut', + 'hterc6dp', + 'hterc2dp', + 'trlusd', + 'teigen', + 'teinu', + 'bgerch', + 'terc721:token', + 'terc1155:token', + 'tnonstandard:token', + 'terc721:bitgoerc721', + 'terc1155:bitgoerc1155', + 'txlm:TST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L', + 'tcusd', + 'tbsc:busd', + 'tbsc:usd1', + 'tbsc:stgusd1', + 'terc721:bsctoken', + 'terc1155:bsctoken', + 'teos:CHEX', + 'teos:IQ', + 'teos:BOX', + 'teos:USDT', + 'teos:VAULTA', + 'talgo:USDC-10458941', + 'talgo:USDt-180447', + 'talgo:USON-16026728', + 'talgo:SPRW-16026732', + 'talgo:KAL-16026733', + 'talgo:JPT-162085446', + 'tavaxc:link', + 'tavaxc:opm', + 'tavaxc:cop2peq', + 'tavaxc:xsgd', + 'tavaxc:bitgo', + 'tsol:srm', + 'tsol:usdc', + 'tsol:usdcv2', + 'tsol:ray', + 'tsol:gmt', + 'tsol:usdt', + 'tsol:gari', + 'tsol:orca', + 'tsol:slnd', + 'tsol:t22mint', + 'thbar:usdc', + 'thbar:txsgd', + 'tpolygon:testcopm', + 'tpolygon:opm', + 'tpolygon:usdc', + 'tpolygon:usdt', + 'tpolygon:terc18dp', + 'tpolygon:terc10dp', + 'tpolygon:terc6dp', + 'tpolygon:BitGoTest', + 'tarbeth:link', + 'tarbeth:xsgd', + 'topeth:terc18dp', + 'topeth:wct', + 'ttrx:wbtc', + 'ttrx:weth', + 'ttrx:usdc', + 'ttrx:usdt', + 'ttrx:usd1', + 'ttrx:stgusd1', + 'tsui:deep', + 'tsui:wal', + 'tbera:ibera', + 'tcoredao:stcore', + 'tworld:usdc', + 'txrp:tst-rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd', + 'txrp:rlusd', + 'txrp:xat', + 'txrp:xsgd', + 'tapt:usdt', + 'tapt:nftcollection1', + 'tapt:beta3loanbook', + 'tstx:tsbtc', + 'tstx:tsip6dp', + 'tstx:tsip8dp', + 'tnear:usdc', + 'ofctusd', + 'ofctaed', + 'ofcteur', + 'ofctbtc', + 'ofctbtc4', + 'ofcteth', + 'ofchteth', + 'ofctavaxc', + 'ofctstx', + 'ofctstx:tsbtc', + 'ofctcspr', + 'ofctnear', + 'ofctltc', + 'ofctzec', + 'ofctxrp', + 'ofctxrp:rlusd', + 'ofctxrp:xsgd', + 'ofctxlm', + 'ofctdash', + 'ofctbch', + 'ofcterc', + 'ofcterc18dp13', + 'ofcterc18dp14', + 'ofcterc18dp15', + 'ofctest', + 'ofctalgo', + 'ofctetc', + 'ofcthbar', + 'ofctdoge', + 'ofctada', + 'ofctpolygon', + 'ofctbld', + 'ofcttia', + 'ofctinjective', + 'ofctosmo', + 'ofcthash', + 'ofctsei', + 'ofctzeta', + 'ofctatom', + 'ofctbsc', + 'ofctsui', + 'ofcttrx', + 'ofcttrx:usdt', + 'ofcttrx:usd1', + 'ofcttrx:stgusd1', + 'ofctdot', + 'ofctsol', + 'ofchterc18dp', + 'ofchterc6dp', + 'ofctusds', + 'ofchteth:gousd', + 'ofctgousd', + 'ofchteth:usd1', + 'ofchteth:stgusd1', + 'ofctbsc:usd1', + 'ofctbsc:stgusd1', + 'ofctarbeth', + 'ofctarbeth:link', + 'ofctcoreum', + 'ofcttao', + 'ofctcelo', + 'ofctxtz', + 'ofctavaxc:link', + 'ofctsol:gari', + 'ofctopeth', + 'ofctpolygon:link', + 'ofctpolygon:usdc', + 'ofctpolygon:usdt', + 'ofctpolygon:xsgd', + 'ofctsol:slnd', + 'ofctsol:usdt', + 'ofctsol:srm', + 'ofctsol:orca', + 'ofctsol:usdc', + 'ofctsol:ray', + 'ofctsol:gmt', + 'ofctton', + 'ofctcoredao', + 'ofctpolyx', + 'ofctbera', + 'ofctoas', + 'ofctmon', + 'ofctstt', + 'ofctworld', + 'ofctsoneium', + 'ofctflr', + 'ofctsgb', + 'ofctxdc', + 'ofctwemix', + 'ofctapt', + 'ofctbaby', + 'ofctcronos', + 'ofctinitia', + 'ofctasi', + 'ofcticp', + ], + gatekeep: [ + 'tfiataed', + 'tfiatgbp', + 'tfiatsgd', + 'ofctgbp', + 'teth2', + 'ofctavaxc', + 'ofctbld', + 'ofcttia', + 'ofctatom', + 'ofctinjective', + 'ofctosmo', + 'ofcthash', + 'ofctsei', + 'ofctzeta', + 'ofctbsc', + 'ofctcspr', + 'ofctstx', + 'ofcttrx', + 'ofctdot', + 'ofctsui', + 'ofctpolygon', + 'ofcterc18dp13', + 'ofcterc18dp14', + 'ofcterc18dp15', + 'ofctarbeth', + 'ofctarbeth:link', + 'ofctcelo', + 'ofctxtz', + 'ofctavaxc:link', + 'ofctsol:gari', + 'ofctpolygon:link', + 'ofctpolygon:usdc', + 'ofctpolygon:usdt', + 'ofctpolygon:xsgd', + 'ofctpolyx', + 'ofctsol:slnd', + 'ofctsol:usdt', + 'ofctsol:srm', + 'ofctsol:orca', + 'ofctsol:usdc', + 'ofctsol:ray', + 'ofctsol:gmt', + 'ofctton', + 'ofcttao', + 'ofchterc18dp', + 'ofchterc6dp', + 'ofctusds', + 'ofcttrx:usdt', + 'ofctcoredao', + 'ofctgousd', + 'ofctxlm', + 'ofctbera', + 'ofctoas', + 'ofctapt', + 'ofctflr', + 'ofctsgb', + 'ofctxdc', + 'ofctwemix', + 'ofctbaby', + 'ofchteth:usd1', + 'ofctbsc:usd1', + 'tnear:tnep24dp', + 'tvet:vtho', + ], + bitgoOrg: { + 'BitGo Inc': { + name: 'BitGo Inc', + isTrust: false, + kycRequired: false, + kycFullyRequired: false, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: false, + pairedCustodialWallet: true, + settlement: false, + tradingAccount: false, + trading: false, + escrow: false, + distributedCustodyWallet: true, + finalCustodianApproval: false, + travelRuleTRUST: { + include: false, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + }, + userKycProperties: ['data'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Trust': { + name: 'BitGo Trust Company', + isTrust: true, + kycRequired: true, + kycFullyRequired: false, + videoIdRequired: false, + videoIdWaivedDefault: true, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: true, + tradingAccount: true, + trading: true, + escrow: true, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + minimumTxAmount: 10, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo New York': { + name: 'BitGo New York Trust Company, LLC', + isTrust: true, + kycRequired: true, + kycFullyRequired: false, + videoIdRequired: false, + videoIdWaivedDefault: true, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: false, + escrow: false, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + minimumTxAmount: 10, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: false, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Germany': { + name: 'BitGo Europe GmbH', + isTrust: true, + kycRequired: true, + kycFullyRequired: true, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: false, + trading: false, + escrow: true, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: false, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + }, + userKycProperties: ['data', 'documents', 'residency'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: false, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Switzerland': { + name: 'BitGo GmbH', + isTrust: true, + kycRequired: true, + kycFullyRequired: false, + videoIdRequired: true, + videoIdWaivedDefault: false, + passportRequired: true, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: false, + escrow: false, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: false, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + }, + userKycProperties: ['data', 'documents', 'residency', 'passport'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: false, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Europe ApS': { + name: 'BitGo Europe ApS', + isTrust: true, + kycRequired: true, + kycFullyRequired: true, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: false, + escrow: true, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: true, + restrictWhitelist: true, + }, + userKycProperties: ['data', 'documents', 'residency'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'Frankfurt DE Trust': { + name: 'Frankfurt Deutschland Trust', + isTrust: true, + kycRequired: true, + kycFullyRequired: true, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: true, + escrow: true, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: true, + restrictWhitelist: true, + minimumTxAmount: 0, + }, + userKycProperties: ['data', 'documents', 'residency'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Sister Trust 1': { + name: 'BitGo Sister Trust 1', + isTrust: true, + kycRequired: true, + kycFullyRequired: true, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: false, + trading: false, + escrow: false, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: false, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Korea': { + name: 'BitGo Korea', + isTrust: true, + kycRequired: true, + kycFullyRequired: true, + videoIdRequired: false, + videoIdWaivedDefault: false, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: false, + escrow: false, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: false, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: false, + staking: false, + stakingApi: false, + showStakingTab: false, + }, + 'BitGo Singapore': { + name: 'BitGo Singapore Pte. Ltd.', + isTrust: true, + kycRequired: true, + kycFullyRequired: false, + videoIdRequired: false, + videoIdWaivedDefault: true, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: false, + tradingAccount: true, + trading: true, + escrow: false, + distributedCustodyWallet: false, + finalCustodianApproval: true, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: true, + restrictWhitelist: true, + minimumTxAmount: 10, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: true, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + 'BitGo Custody MENA FZE': { + name: 'BitGo Custody MENA FZE', + isTrust: true, + kycRequired: true, + kycFullyRequired: false, + videoIdRequired: false, + videoIdWaivedDefault: true, + passportRequired: false, + custodialWallet: true, + pairedCustodialWallet: false, + settlement: true, + tradingAccount: true, + trading: true, + escrow: true, + distributedCustodyWallet: false, + finalCustodianApproval: false, + travelRuleTRUST: { + include: true, + requireSenderInfoForReceives: false, + restrictWhitelist: false, + minimumTxAmount: 10, + }, + userKycProperties: ['data', 'documents'], + useEntityValidationLibrary: true, + selfCustodyLightningWallet: true, + custodyLightningWallet: true, + showTradingTab: false, + staking: true, + stakingApi: true, + showStakingTab: true, + }, + }, + mpc: { + bitgoPublicKey: + '-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\r\nxk8EYqEU5hMFK4EEAAoCAwQDdbAIZrsblEXIavyg2go6p9oG0SqWTgFsdHTc\r\nBhqdIS/WjQ8pj75q+vLqFtV9hlImYGInsIWh97fsigzB2owyzRhoc20gPGhz\r\nbUB0ZXN0LmJpdGdvLmNvbT7ChAQTEwgAFQUCYqEU5wILCQIVCAIWAAIbAwIe\r\nAQAhCRCJNRsIDGunexYhBHRL5D/8nRM3opQnXok1GwgMa6d7tg8A/24A9awq\r\nSCJx7RddiUzFHcKhVvvo3R5N7bHaOGP3TP79AP0TavF2WzhUXmZSjt3IK23O\r\n7/aknbijVeq52ghbWb1SwsJ1BBATCAAGBQJioRTnACEJEAWuA35KJgtgFiEE\r\nZttLPR0KcYvjgvJCBa4DfkomC2BsrwD/Z+43zOw+WpfPHxe+ypyVog5fnOKl\r\nXwleH6zDvqUWmWkA/iaHC6ullYkSG4Mv68k6qbtgR/pms/X7rkfa0QQFJy5p\r\nzlMEYqEU5hIFK4EEAAoCAwSsLqmfonjMF3o0nZ5JHvLpmfTA1RIVDsAEoRON\r\ntZA6rAA23pGl6s3Iyt4/fX9Adzoh3EElOjMsgi8Aj3dFpuqiAwEIB8J4BBgT\r\nCAAJBQJioRTnAhsMACEJEIk1GwgMa6d7FiEEdEvkP/ydEzeilCdeiTUbCAxr\r\np3vM7AD9GPp6HhYNEh2VVCDtFSt14Bni5FVM5icpVDo6w9ibvWAA/2Ti3Jv4\r\nIhIxl81/wqAgqigIblrz6vjtagr9/ykXQCW3\r\n=skCo\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n', + bitgoMPCv2PublicKey: + '-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxk8EZiF3CBMFK4EEAAoCAwQWD7Pa752fAl4z0PxfWVC05d89vfo80PyUQ3Er\nLXlhGLkik+NkAl/DBd8diN7i4kTvRoIo0xrHU+lZgdgt+ct5zRhoc20gPGhz\nbUB0ZXN0LmJpdGdvLmNvbT7ChAQTEwgANgUCZiF3CAILCQkQ5ycuezbbVOkC\nFQgCFgACGwMCHgEWIQRPr6GNiE7tRv0p4afnJy57NttU6QAAbAYA+wRvSLOa\ne0iREOx00HhYWP030GhN98BcZtehT9iTZMV8AP97Otkrtq6jby2f7PdEV7uv\nd4aikTa5BgnpKvl8yqL4ccKEBBATCAA2BQJmIXcKAgsJCRCZRBfch5MUcwIV\nCAIWAAIbAwIeARYhBAmXBS0TYEvmC/3L9JlEF9yHkxRzAABJ1wD+KyI1j9nu\nYWvDxwDB+JBGMt7mic77ajBOgaCabEZ0j1MA/2RCOiV2cOL3x1AOzosqofsh\niA1s9BpS14xAwrKJPwY+zlMEZiF3CBIFK4EEAAoCAwSgLs60kLzhHD3o1sDg\n0fQ/QHw6hgq9PQ5LvilUvuIGYDR79sPwrMuwy7wUcOQgJvwIOJHommDq5nj+\nKfgAtE6uAwEIB8KEBBgTCAA2BQJmIXcJAgsJCRDnJy57NttU6QIVCAIWAAIb\nDAIeARYhBE+voY2ITu1G/Snhp+cnLns221TpAADWmQD/bV9sBkwyYfYfJYTS\nqvTmubCesQDY5Ranv9wYvv7RiLQA/iwX6ZHwdbvQFVui0GrvV2iFaCHut1pn\nF4YCDqpUKidwzk8EZiF3CBMFK4EEAAoCAwTfm/HZxwvubP/rr2KOU88mkDL9\njcWjfQx1uFZ9mlIgMBV3++OgtkVE0eEe+lNWpwgksGOGrBWeQ3K0XRF0YlUp\nwsBKBBgTCAC8BQJmIXcJAgsJCRDnJy57NttU6QIVCAIWAAIbAgIeAYUgBBgT\nCAA2BQJmIXcJAgsJCRBrEMTq2oOYhgIVCAIWAAIbAgIeARYhBLFg1zIcwAmc\nRhGdOmsQxOrag5iGAAAxoAD/YNPhMmf3l4Qh7fprkmOjoU0CvFiiP+kcxTr9\nm9luVhUA/RvhIB4sqrAcSD7ZGVIQcEI14rdAFeok4Higz2cGf9R6FiEET6+h\njYhO7Ub9KeGn5ycuezbbVOkAAPnaAP0dYpya7EzvN5Q6RpIzqLFN9izyGt4Q\n6keZsvnVbW9qJAD9Fj7tAAMUbbstz/Kx9RY8qoIOFTuSwaeDXnJMrI9v84w=\n=uzVB\n-----END PGP PUBLIC KEY BLOCK-----\n', + bitgoNitroPublicKey: + '-----BEGIN PGP PUBLIC KEY BLOCK-----\r\n\r\nxk8EYqEU5hMFK4EEAAoCAwQDdbAIZrsblEXIavyg2go6p9oG0SqWTgFsdHTc\r\nBhqdIS/WjQ8pj75q+vLqFtV9hlImYGInsIWh97fsigzB2owyzRhoc20gPGhz\r\nbUB0ZXN0LmJpdGdvLmNvbT7ChAQTEwgAFQUCYqEU5wILCQIVCAIWAAIbAwIe\r\nAQAhCRCJNRsIDGunexYhBHRL5D/8nRM3opQnXok1GwgMa6d7tg8A/24A9awq\r\nSCJx7RddiUzFHcKhVvvo3R5N7bHaOGP3TP79AP0TavF2WzhUXmZSjt3IK23O\r\n7/aknbijVeq52ghbWb1SwsJ1BBATCAAGBQJioRTnACEJEAWuA35KJgtgFiEE\r\nZttLPR0KcYvjgvJCBa4DfkomC2BsrwD/Z+43zOw+WpfPHxe+ypyVog5fnOKl\r\nXwleH6zDvqUWmWkA/iaHC6ullYkSG4Mv68k6qbtgR/pms/X7rkfa0QQFJy5p\r\nzlMEYqEU5hIFK4EEAAoCAwSsLqmfonjMF3o0nZ5JHvLpmfTA1RIVDsAEoRON\r\ntZA6rAA23pGl6s3Iyt4/fX9Adzoh3EElOjMsgi8Aj3dFpuqiAwEIB8J4BBgT\r\nCAAJBQJioRTnAhsMACEJEIk1GwgMa6d7FiEEdEvkP/ydEzeilCdeiTUbCAxr\r\np3vM7AD9GPp6HhYNEh2VVCDtFSt14Bni5FVM5icpVDo6w9ibvWAA/2Ti3Jv4\r\nIhIxl81/wqAgqigIblrz6vjtagr9/ykXQCW3\r\n=skCo\r\n-----END PGP PUBLIC KEY BLOCK-----\r\n', + bitgoNitroMPCv2PublicKey: + '-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxk8EZiF3CBMFK4EEAAoCAwQWD7Pa752fAl4z0PxfWVC05d89vfo80PyUQ3Er\nLXlhGLkik+NkAl/DBd8diN7i4kTvRoIo0xrHU+lZgdgt+ct5zRhoc20gPGhz\nbUB0ZXN0LmJpdGdvLmNvbT7ChAQTEwgANgUCZiF3CAILCQkQ5ycuezbbVOkC\nFQgCFgACGwMCHgEWIQRPr6GNiE7tRv0p4afnJy57NttU6QAAbAYA+wRvSLOa\ne0iREOx00HhYWP030GhN98BcZtehT9iTZMV8AP97Otkrtq6jby2f7PdEV7uv\nd4aikTa5BgnpKvl8yqL4ccKEBBATCAA2BQJmIXcKAgsJCRCZRBfch5MUcwIV\nCAIWAAIbAwIeARYhBAmXBS0TYEvmC/3L9JlEF9yHkxRzAABJ1wD+KyI1j9nu\nYWvDxwDB+JBGMt7mic77ajBOgaCabEZ0j1MA/2RCOiV2cOL3x1AOzosqofsh\niA1s9BpS14xAwrKJPwY+zlMEZiF3CBIFK4EEAAoCAwSgLs60kLzhHD3o1sDg\n0fQ/QHw6hgq9PQ5LvilUvuIGYDR79sPwrMuwy7wUcOQgJvwIOJHommDq5nj+\nKfgAtE6uAwEIB8KEBBgTCAA2BQJmIXcJAgsJCRDnJy57NttU6QIVCAIWAAIb\nDAIeARYhBE+voY2ITu1G/Snhp+cnLns221TpAADWmQD/bV9sBkwyYfYfJYTS\nqvTmubCesQDY5Ranv9wYvv7RiLQA/iwX6ZHwdbvQFVui0GrvV2iFaCHut1pn\nF4YCDqpUKidwzk8EZiF3CBMFK4EEAAoCAwTfm/HZxwvubP/rr2KOU88mkDL9\njcWjfQx1uFZ9mlIgMBV3++OgtkVE0eEe+lNWpwgksGOGrBWeQ3K0XRF0YlUp\nwsBKBBgTCAC8BQJmIXcJAgsJCRDnJy57NttU6QIVCAIWAAIbAgIeAYUgBBgT\nCAA2BQJmIXcJAgsJCRBrEMTq2oOYhgIVCAIWAAIbAgIeARYhBLFg1zIcwAmc\nRhGdOmsQxOrag5iGAAAxoAD/YNPhMmf3l4Qh7fprkmOjoU0CvFiiP+kcxTr9\nm9luVhUA/RvhIB4sqrAcSD7ZGVIQcEI14rdAFeok4Higz2cGf9R6FiEET6+h\njYhO7Ub9KeGn5ycuezbbVOkAAPnaAP0dYpya7EzvN5Q6RpIzqLFN9izyGt4Q\n6keZsvnVbW9qJAD9Fj7tAAMUbbstz/Kx9RY8qoIOFTuSwaeDXnJMrI9v84w=\n=uzVB\n-----END PGP PUBLIC KEY BLOCK-----\n', + }, + trustPubKey: + '-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxk8EZCXHRRMFK4EEAAoCAwTA0Lv61jqERerELITJlcI2faq35oT9Lk9SCBBN\ntyimXbmBND3hUX9wQqtgSs3GW18kXcFh8b/F5HnaILvvly+4zV5iYWNrdXAt\nZTMyOTVkMmYwOTI3MTEyMDAzMjk1YTMwIDxiYWNrdXAtZTMyOTVkMmYwOTI3\nMTEyMDAzMjk1YTMwQGUzMjk1ZDJmMDkyNzExMjAwMzI5NWEzMC5jb20+wowE\nEBMIAB0FAmQlx0UECwkHCAMVCAoEFgACAQIZAQIbAwIeAQAhCRD4xWq5wJpG\nMBYhBA3Y1+KuVvpmjbl+3fjFarnAmkYwsboA+wToeKcMgLs71lGWWxPPczYp\ndeGdzXaIfWHeHk0V7UNRAP4itmI6Yy/fSUBBLA6Udn4HNxFXkPVzrjhjjWM/\njyhtM85TBGQlx0USBSuBBAAKAgMEdh6yIzKJgoPq/RjGtGbyuMISFjTXBXDe\n3cU6d7tBwt8OKXwoQQ8uqmYQB75dQZ7/emyhy/uKeHizODA+w4H+vQMBCAfC\neAQYEwgACQUCZCXHRQIbDAAhCRD4xWq5wJpGMBYhBA3Y1+KuVvpmjbl+3fjF\narnAmkYwZzIBANKpfR8YRjAHXyy7f86mJMoTukNaFEKmtZwbhclzjk+dAQDU\noqui5/OWf+AnpgeFrL3mlM54KWIP6b+7Hy75qk+f9A==\n=n1q+\n-----END PGP PUBLIC KEY BLOCK-----\n', + }, +}; diff --git a/src/__tests__/api/master/recoveryWalletMpcV2.test.ts b/src/__tests__/api/master/recoveryWalletMpcV2.test.ts new file mode 100644 index 00000000..dfc4cfdf --- /dev/null +++ b/src/__tests__/api/master/recoveryWalletMpcV2.test.ts @@ -0,0 +1,209 @@ +import 'should'; +import * as request from 'supertest'; +import nock from 'nock'; +import { app as expressApp } from '../../../masterExpressApp'; +import { AppMode, MasterExpressConfig, TlsMode } from '../../../shared/types'; +import sinon from 'sinon'; +import * as middleware from '../../../shared/middleware'; +import { BitGoRequest } from '../../../types/request'; +import { BitGoAPI } from '@bitgo-beta/sdk-api'; + +describe('MBE mpcv2 recovery', () => { + let agent: request.SuperAgentTest; + const enclavedExpressUrl = 'http://enclaved.invalid'; + const ethLikeCoin = 'hteth'; + const cosmosLikeCoin = 'tsei'; + const accessToken = 'test-token'; + + let bitgo: BitGoAPI; + + before(() => { + nock.disableNetConnect(); + nock.enableNetConnect('127.0.0.1'); + + // Create a BitGo instance that we'll use for stubbing + bitgo = new BitGoAPI({ env: 'test' }); + + const config: MasterExpressConfig = { + appMode: AppMode.MASTER_EXPRESS, + port: 0, // Let OS assign a free port + bind: 'localhost', + timeout: 60000, + httpLoggerFile: '', + env: 'test', + disableEnvCheck: true, + authVersion: 2, + enclavedExpressUrl: enclavedExpressUrl, + enclavedExpressCert: 'dummy-cert', + tlsMode: TlsMode.DISABLED, + allowSelfSigned: true, + recoveryMode: true, + }; + + // Setup middleware stubs before creating app + sinon.stub(middleware, 'prepareBitGo').callsFake(() => (req, res, next) => { + (req as BitGoRequest).bitgo = bitgo; + (req as BitGoRequest).config = config; + next(); + }); + + const app = expressApp(config); + agent = request.agent(app); + }); + + afterEach(() => { + nock.cleanAll(); + }); + + it('should recover a HETH (an eth-like) wallet by calling the enclaved express service', async () => { + const etherscanTxlistNock = nock('https://api.etherscan.io') + .get( + `/v2/api?chainid=17000&module=account&action=txlist&address=0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8&apikey=etherscan-api-key`, + ) + .matchHeader('any', () => true) + .reply(200, { + result: [ + { + from: '0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8', + }, + ], + }); + + const etherscanBalanceNock = nock('https://api.etherscan.io') + .get( + `/v2/api?chainid=17000&module=account&action=balance&address=0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8&apikey=etherscan-api-key`, + ) + .matchHeader('any', () => true) + .reply(200, { + result: '100000000000000000', // 1 ETH in wei + }); + + const enclavedExpressNock = nock(enclavedExpressUrl) + .post(`/api/${ethLikeCoin}/mpcv2/recovery`) + .reply(200, { + txHex: + '02f6824268018502540be4008504a817c80083030d409443442e403d64d29c4f64065d0c1a0e8edc03d6c88801550f7dca700000823078c0', + stringifiedSignature: JSON.stringify({ + recid: 0, + r: '469cf5d0a96e2da990afbe3807ec020a11cc0f9e418d4349ed5c8e64c09bac1e', + s: '7b07a8fc108a351d926e71317462c220f59e732e59636ee0070796d57deb3bf0', + y: '02e6366ae1310aee43334323d33ba1d7b363c044018c62793ee79402afe675aaf3', + }), + }); + + const response = await agent + .post(`/api/${ethLikeCoin}/wallet/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send({ + isTssRecovery: true, + tssRecoveryParams: { + commonKeychain: + '03ee2aa7a0951e0ddf5568c9e0008a824b46324900fa50bd62f43dd75705924d1c4dea9e1138b0fd34b77fa5ead28f24d8dcd053b48144915514ef32941f823075', + }, + recoveryDestinationAddress: '0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8', + coinSpecificParams: { + ecdsaEthLikeRecoverySpecificParams: { + walletContractAddress: '0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8', + bitgoDestinationAddress: '0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8', //placeholder + apiKey: `etherscan-api-key`, + }, + }, + }); + + response.status.should.equal(200); + response.body.should.have.property('txHex'); + + etherscanTxlistNock.isDone().should.be.true(); + etherscanBalanceNock.isDone().should.be.true(); + enclavedExpressNock.isDone().should.be.true(); + }); + + it('should recover a SEI (a cosmos-like) wallet by calling the enclaved express service', async () => { + const seiChainIdNock = nock('https://rest.atlantic-2.seinetwork.io') + .get(`/cosmos/base/tendermint/v1beta1/blocks/latest`) + .matchHeader('any', () => true) + .reply(200, { + block: { + header: { + chain_id: 'atlantic-2', // sei testnet chain ID + }, + }, + }); + + const seiAccountDetailsNock = nock('https://rest.atlantic-2.seinetwork.io') + .get(`/cosmos/auth/v1beta1/accounts/sei133wud20f6vpaz0r2m653g8h9tgnppr0378ped5`) + .matchHeader('any', () => true) + .reply(200, { + account: { + account_number: '8459889', + sequence: '1', + }, + }); + + const seiBalanceNock = nock('https://rest.atlantic-2.seinetwork.io') + .get(`/cosmos/bank/v1beta1/balances/sei133wud20f6vpaz0r2m653g8h9tgnppr0378ped5`) + .matchHeader('any', () => true) + .reply(200, { + balances: [{ denom: 'usei', amount: '4980000' }], + }); + + const enclavedExpressNock = nock(enclavedExpressUrl) + .post(`/api/${cosmosLikeCoin}/mpcv2/recovery`) + .reply(200, { + txHex: + '0a8c010a89010a1c2f636f736d6f732e62616e6b2e763162657461312e4d736753656e6412690a2a736569313333777564323066367670617a3072326d3635336738683974676e7070723033373870656435122a736569313333777564323066367670617a3072326d3635336738683974676e70707230333738706564351a0f0a047573656912073439363030303012670a500a460a1f2f636f736d6f732e63727970746f2e736563703235366b312e5075624b657912230a210309af6232ffa03ed61dc49fbd026cd2a234a84107d06aedc0f71e299675613f3d12040a020801180112130a0d0a0475736569120532303030301090a10f1a0a61746c616e7469632d3220f1ac8404', + stringifiedSignature: JSON.stringify({ + recid: 1, + r: '68bd412228e26f44a2e419233d912892aeb0251cfa20198ef7ef99508b9148b9', + s: '058b0f705f0adf9b02fd5185778620802bd8b1736c0997d154970862a27d74b6', + y: '0309af6232ffa03ed61dc49fbd026cd2a234a84107d06aedc0f71e299675613f3d', + }), + }); + + const response = await agent + .post(`/api/${cosmosLikeCoin}/wallet/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send({ + isTssRecovery: true, + tssRecoveryParams: { + commonKeychain: + '02d4e4db641b9712bf548c4fc12e32ec5d5d0ca9b7a0e3252413975f819209b44c6410c61d2b972ef1bd568684024fd6e09cc2987e87f3b25282af0546b8a26c65', + }, + recoveryDestinationAddress: 'sei133wud20f6vpaz0r2m653g8h9tgnppr0378ped5', + coinSpecificParams: { + ecdsaCosmosLikeRecoverySpecificParams: { + rootAddress: 'sei133wud20f6vpaz0r2m653g8h9tgnppr0378ped5', + }, + }, + }); + + response.status.should.equal(200); + response.body.should.have.property('txHex'); + + seiChainIdNock.isDone().should.be.true(); + seiAccountDetailsNock.isDone().should.be.true(); + seiBalanceNock.isDone().should.be.true(); + enclavedExpressNock.isDone().should.be.true(); + }); + + it('should throw 422 Unprocessable Entity for missing coin specific params', async () => { + const response = await agent + .post(`/api/${ethLikeCoin}/wallet/recovery`) + .set('Authorization', `Bearer ${accessToken}`) + .send({ + isTssRecovery: true, + tssRecoveryParams: { + commonKeychain: + '03ee2aa7a0951e0ddf5568c9e0008a824b46324900fa50bd62f43dd75705924d1c4dea9e1138b0fd34b77fa5ead28f24d8dcd053b48144915514ef32941f823075', + }, + recoveryDestinationAddress: '0x43442e403d64d29c4f64065d0c1a0e8edc03d6c8', + coinSpecificParams: {}, + }); + + response.status.should.equal(422); + response.body.should.have.property('error'); + response.body.error.should.equal( + 'Invalid parameters provided for ETH-like MPC V2 coin recovery', + ); + }); +}); diff --git a/src/api/enclaved/handlers/ecdsaMPCv2Recovery.ts b/src/api/enclaved/handlers/ecdsaMPCv2Recovery.ts new file mode 100644 index 00000000..1b7bb51d --- /dev/null +++ b/src/api/enclaved/handlers/ecdsaMPCv2Recovery.ts @@ -0,0 +1,101 @@ +import { DklsDsg, DklsTypes, DklsUtils } from '@bitgo-beta/sdk-lib-mpc'; +import { + EnclavedApiSpecRouteRequest, + MpcV2RecoveryResponseType, +} from '../../../enclavedBitgoExpress/routers/enclavedApiSpec'; +import { KmsClient } from '../../../kms/kmsClient'; +import { BaseCoin, ECDSAMethodTypes } from '@bitgo-beta/sdk-core'; +import { isCosmosLikeCoin, isEcdsaCoin, isEthLikeCoin } from '../../../shared/coinUtils'; +import { BadRequestError, NotImplementedError } from '../../../shared/errors'; +import logger from '../../../logger'; +import coinFactory from '../../../shared/coinFactory'; + +async function getMessageHash(coin: BaseCoin, txHex: string): Promise { + const txBuffer = Buffer.from(txHex, 'hex'); + + if (isEthLikeCoin(coin)) { + const { TransactionFactory } = await import('@ethereumjs/tx'); + try { + return TransactionFactory.fromSerializedData(txBuffer).getMessageToSign(true); + } catch (error: any) { + logger.error('Failed to construct eth transaction from message hex', error); + throw new BadRequestError( + `Failed to construct eth transaction from message hex: ${error.message}`, + ); + } + } else if (isCosmosLikeCoin(coin)) { + try { + return coin.getHashFunction().update(txBuffer).digest(); + } catch (error: any) { + logger.error('Failed to construct cosmos transaction from message hex', error); + throw new BadRequestError( + `Failed to construct cosmos transaction from message hex: ${error.message}`, + ); + } + } else { + throw new NotImplementedError( + `Enclave does not support Mpc V2 recovery for coin family: ${coin.getFamily()}`, + ); + } +} + +export async function ecdsaMPCv2Recovery( + req: EnclavedApiSpecRouteRequest<'v1.mpcv2.recovery', 'post'>, +): Promise { + const { txHex, pub } = req.decoded; + const bitgo = req.bitgo; + const coin = await coinFactory.getCoin(req.params.coin, bitgo); + + if (!isEcdsaCoin(coin)) { + throw new BadRequestError( + `${coin.getFamily()} is not ECDSA. Use other recovery endpoints instead.`, + ); + } + + // setup clients and retreive the keys + // TODO: this needs to be segerated if the EBE instance cannot retrieve both keys + const kms = new KmsClient(req.config); + const { prv: userPrv } = await kms.getKey({ pub, source: 'user' }); + const { prv: backupPrv } = await kms.getKey({ pub, source: 'backup' }); + + // construct tx builder + const txHash = await getMessageHash(coin, txHex); + + // construct buffers + const userPrvBuffer = Buffer.from(userPrv, 'base64'); + const backupPrvBuffer = Buffer.from(backupPrv, 'base64'); + + // construct distributed signature generation sessions + const userDsg = new DklsDsg.Dsg(userPrvBuffer, 0, 'm/0', txHash); + const backupDsg = new DklsDsg.Dsg(backupPrvBuffer, 1, 'm/0', txHash); + + // sign the transaction + const dklsSignature = (await DklsUtils.executeTillRound( + 5, + userDsg, + backupDsg, + )) as DklsTypes.DeserializedDklsSignature; + + const signatureString = DklsUtils.verifyAndConvertDklsSignature( + txHash, + dklsSignature, + pub, + 'm/0', + undefined, + false, + ); + + // construct signature object to be returned + const sigParts = signatureString.split(':'); + const signature: ECDSAMethodTypes.Signature = { + recid: parseInt(sigParts[0], 10), + r: sigParts[1], + s: sigParts[2], + y: sigParts[3], + }; + + return { + txHex, + stringifiedSignature: JSON.stringify(signature), + }; +} diff --git a/src/api/master/clients/enclavedExpressClient.ts b/src/api/master/clients/enclavedExpressClient.ts index 4cd5a3f1..f6c18a76 100644 --- a/src/api/master/clients/enclavedExpressClient.ts +++ b/src/api/master/clients/enclavedExpressClient.ts @@ -32,6 +32,7 @@ import { MpcInitializeResponseType, MpcV2FinalizeResponseType, MpcV2InitializeResponseType, + MpcV2RecoveryResponseType, MpcV2RoundResponseType, } from '../../../enclavedBitgoExpress/routers/enclavedApiSpec'; import { FormattedOfflineVaultTxInfo } from '@bitgo-beta/abstract-utxo'; @@ -749,6 +750,34 @@ export class EnclavedExpressClient { throw err; } } + + async recoverEcdsaMpcV2Wallet(params: { + txHex: string; + pub: string; + }): Promise { + if (!this.coin) { + throw new Error('Coin must be specified to finalize MPCv2 key generation'); + } + + try { + debugLogger('Signing MPCv2 recovery transaction for coin: %s', this.coin); + let request = this.apiClient['v1.mpcv2.recovery'].post({ + coin: this.coin, + ...params, + }); + + if (this.tlsMode === TlsMode.MTLS) { + request = request.agent(this.createHttpsAgent()); + } + + const response = await request.decodeExpecting(200); + return response.body; + } catch (error) { + const err = error as Error; + debugLogger('Failed to sign MPCv2 recovery transction: %s', err.message); + throw err; + } + } } /** diff --git a/src/api/master/handlers/recoverEcdsaWallets.ts b/src/api/master/handlers/recoverEcdsaWallets.ts new file mode 100644 index 00000000..cef6a1d0 --- /dev/null +++ b/src/api/master/handlers/recoverEcdsaWallets.ts @@ -0,0 +1,159 @@ +import { BaseCoin, BitGoBase, Ecdsa } from '@bitgo-beta/sdk-core'; +import { EnclavedExpressClient } from '../clients/enclavedExpressClient'; +import { isCosmosLikeCoin, isEthLikeCoin } from '../../../shared/coinUtils'; +import { ValidationError } from '../../../shared/errors'; + +import type { + RecoveryOptions as CosmosLikeRecoverOptions, + CosmosTransactionBuilder, +} from '@bitgo-beta/abstract-cosmos'; +import type { RecoverOptions as EthLikeRecoverOptions } from '@bitgo-beta/abstract-eth'; +import { isMPCSweepTxs } from '../../../shared/transactionUtils'; + +export type recoverEcdsaMpcV2Params = { + // Import new types if needed + commonKeychain: string; + ethLikeParams?: EthLikeRecoverOptions; + cosmosLikeParams?: CosmosLikeRecoverOptions; +}; + +export async function recoverEcdsaMPCv2Wallets( + bitgo: BitGoBase, + baseCoin: BaseCoin, + enclavedExpressClient: EnclavedExpressClient, + params: recoverEcdsaMpcV2Params, +): Promise<{ txHex: string }> { + // get unsigned recovery transaction using the base coin's recover method + let unsignedTx: { signableHex?: string }; + let userKey: string; + + if (isEthLikeCoin(baseCoin)) { + // create eth-like unsigned recovery + if (!params.ethLikeParams) { + throw new Error('Eth like recovery params are required for Ecdsa MPCv2 recovery'); + } + const recoveryResponse = await baseCoin.recover(params.ethLikeParams); + + // Sanity check: Eth like coins should return a single transaction + if (!isMPCSweepTxs(recoveryResponse)) { + throw new Error('Created eth-like recovery tx is not in MPC Sweep format'); + } + + unsignedTx = recoveryResponse.txRequests[0].transactions[0].unsignedTx; + userKey = params.ethLikeParams.userKey; + } else if (isCosmosLikeCoin(baseCoin)) { + // create cosmos-like unsigned recovery + if (!params.cosmosLikeParams) { + throw new Error('Cosmos like recovery params are required for Ecdsa MPCv2 recovery'); + } + const { BigNumber } = await import('bignumber.js'); + + const MPC = new Ecdsa(); + const publicKey = MPC.deriveUnhardened(params.commonKeychain, 'm/0').slice(0, 66); + const senderAddress = baseCoin.getAddressFromPublicKey(publicKey); + + const chainId = await baseCoin['getChainId'](); + + const [accountNumber, sequenceNo] = await baseCoin['getAccountDetails'](senderAddress); + const balance = new BigNumber(await baseCoin['getAccountBalance'](senderAddress)); + const gasBudget = { + amount: [ + { denom: baseCoin.getDenomination(), amount: baseCoin.getGasAmountDetails().gasAmount }, + ], + gasLimit: baseCoin.getGasAmountDetails().gasLimit, + }; + const gasAmount = new BigNumber(gasBudget.amount[0].amount); + const actualBalance = balance.minus(gasAmount); + + if (actualBalance.isLessThanOrEqualTo(0)) { + throw new Error('Did not have enough funds to recover'); + } + + const amount = [ + { + denom: baseCoin.getDenomination(), + amount: actualBalance.toFixed(), + }, + ]; + const sendMessage = [ + { + fromAddress: senderAddress, + toAddress: params.cosmosLikeParams.recoveryDestination, + amount: amount, + }, + ]; + + const txnBuilder = baseCoin.getBuilder().getTransferBuilder(); + txnBuilder + .messages(sendMessage) + .gasBudget(gasBudget) + .sequence(Number(sequenceNo)) + .accountNumber(Number(accountNumber)) + .chainId(chainId) + .publicKey(publicKey); + + unsignedTx = { + signableHex: (await txnBuilder.build()).signablePayload.toString('hex'), + }; + userKey = params.commonKeychain; + } else { + throw new ValidationError( + `Unsupported coin family for Ecdsa MPCv2 recovery: ${baseCoin.getFamily()}`, + ); + } + + if (!unsignedTx.signableHex) { + throw new Error('Failed to create unsigned transaction for Ecdsa MPCv2 recovery'); + } + + // sent to EBE for signing + const enclvaedResponse = await enclavedExpressClient.recoverEcdsaMpcV2Wallet({ + txHex: unsignedTx.signableHex, + pub: userKey, + }); + const signature = JSON.parse(enclvaedResponse.stringifiedSignature); + + // Sanity check: returned signature should be in the form of ECDSAMethodTypes.Signature + if (!signature || signature.recid === undefined || !signature.r || !signature.s || !signature.y) { + throw new Error('Invalid signature returned from enclaved express for Ecdsa recovery'); + } + + // post processing of the response + if (isEthLikeCoin(baseCoin)) { + const { AbstractEthLikeNewCoins } = await import('@bitgo-beta/abstract-eth'); + const { TransactionFactory } = await import('@ethereumjs/tx'); + + const unsignedTxFull = TransactionFactory.fromSerializedData( + Buffer.from(unsignedTx.signableHex, 'hex'), + ); + + const ethCommon = AbstractEthLikeNewCoins.getCustomChainCommon( + params.ethLikeParams?.replayProtectionOptions?.chain as number, + ); + ethCommon.setHardfork(params.ethLikeParams?.replayProtectionOptions?.hardfork as string); + + const signedTx = await baseCoin['getSignedTxFromSignature']( + ethCommon, + unsignedTxFull, + signature, + ); + + return { txHex: '0x' + signedTx.serialize().toString('hex') }; + } else if (isCosmosLikeCoin(baseCoin)) { + const MPC = new Ecdsa(); + MPC.verify(Buffer.from(unsignedTx.signableHex, 'hex'), signature, baseCoin.getHashFunction()); + + const publicKey = MPC.deriveUnhardened(params.commonKeychain, 'm/0').slice(0, 66); + const cosmosKeyPair = baseCoin.getKeyPair(publicKey); + + const txnBuilder: CosmosTransactionBuilder = baseCoin.getBuilder().from(unsignedTx.signableHex); + txnBuilder.addSignature( + { pub: cosmosKeyPair.getKeys().pub }, + Buffer.from(signature.r + signature.s, 'hex'), + ); + const signedTransaction = await txnBuilder.build(); + return { txHex: signedTransaction.toBroadcastFormat() }; + } + + throw new Error(`This error should be unreachable.`); +} diff --git a/src/api/master/handlers/recoveryWallet.ts b/src/api/master/handlers/recoveryWallet.ts index c18fc4c6..cff157e8 100644 --- a/src/api/master/handlers/recoveryWallet.ts +++ b/src/api/master/handlers/recoveryWallet.ts @@ -8,6 +8,8 @@ import coinFactory from '../../../shared/coinFactory'; import assert from 'assert'; import { + isCosmosLikeCoin, + isEcdsaCoin, isEddsaCoin, isEthLikeCoin, isFormattedOfflineVaultTxInfo, @@ -21,17 +23,17 @@ import { import { EnclavedExpressClient } from '../clients/enclavedExpressClient'; import { CoinSpecificParams, - EvmRecoveryOptions, + CoinSpecificParamsUnion, MasterApiSpecRouteRequest, ScriptType2Of3, SolanaRecoveryOptions, - UtxoRecoveryOptions, } from '../routers/masterApiSpec'; import { recoverEddsaWallets } from './recoverEddsaWallets'; import { EnvironmentName, MasterExpressConfig } from '../../../shared/types'; +import { recoverEcdsaMpcV2Params, recoverEcdsaMPCv2Wallets } from './recoverEcdsaWallets'; import logger from '../../../logger'; +import { NotImplementedError, ValidationError } from '../../../shared/errors'; import { CoinFamily } from '@bitgo-beta/statics'; -import { ValidationError } from '../../../shared/errors'; import { checkRecoveryMode } from '../handlerUtils'; interface RecoveryParams { @@ -47,7 +49,7 @@ interface EnclavedRecoveryParams { backupPub: string; apiKey: string; unsignedSweepPrebuildTx: any; // TODO: type this properly once we have the SDK types - coinSpecificParams?: EvmRecoveryOptions | UtxoRecoveryOptions | SolanaRecoveryOptions; + coinSpecificParams?: CoinSpecificParamsUnion; walletContractAddress: string; } @@ -56,18 +58,36 @@ function validateRecoveryParams(sdkCoin: BaseCoin, params?: CoinSpecificParams) return; } - if (isUtxoCoin(sdkCoin)) { - if (params.solanaRecoveryOptions || params.evmRecoveryOptions) { - throw new ValidationError('Invalid parameters provided for UTXO coin recovery'); - } - } else if (isEthLikeCoin(sdkCoin)) { - if (params.solanaRecoveryOptions || params.utxoRecoveryOptions) { - throw new ValidationError('Invalid parameters provided for ETH-like coin recovery'); - } - } else if (isEddsaCoin(sdkCoin)) { + if (isEddsaCoin(sdkCoin)) { if (params.evmRecoveryOptions || params.utxoRecoveryOptions) { throw new ValidationError('Invalid parameters provided for Solana coin recovery'); } + } else if (isEcdsaCoin(sdkCoin)) { + if (isEthLikeCoin(sdkCoin)) { + if (!params.ecdsaEthLikeRecoverySpecificParams) { + throw new ValidationError('Invalid parameters provided for ETH-like MPC V2 coin recovery'); + } + } else if (isCosmosLikeCoin(sdkCoin)) { + if (!params.ecdsaCosmosLikeRecoverySpecificParams) { + throw new ValidationError( + 'Invalid parameters provided for Cosmos-like MPC V2 coin recovery', + ); + } + } else { + throw new NotImplementedError( + `MPC V2 recovery is not supported for coin family: ${sdkCoin.getFamily()}`, + ); + } + } else { + if (isUtxoCoin(sdkCoin)) { + if (params.solanaRecoveryOptions || params.evmRecoveryOptions) { + throw new ValidationError('Invalid parameters provided for UTXO coin recovery'); + } + } else if (isEthLikeCoin(sdkCoin)) { + if (params.solanaRecoveryOptions || params.utxoRecoveryOptions) { + throw new ValidationError('Invalid parameters provided for ETH-like coin recovery'); + } + } } } @@ -201,6 +221,7 @@ export async function handleRecoveryWalletOnPrem( // Handle TSS recovery if (req.decoded.isTssRecovery) { assert(req.decoded.tssRecoveryParams, 'TSS recovery parameters are required'); + const { commonKeychain } = req.decoded.tssRecoveryParams; if (!commonKeychain) { throw new Error('Common keychain is required for TSS recovery'); @@ -227,9 +248,41 @@ export async function handleRecoveryWalletOnPrem( coinSpecificParams: coinSpecificParams?.solanaRecoveryOptions, }, ); + } else if (isEcdsaCoin(sdkCoin)) { + const params: recoverEcdsaMpcV2Params = { + commonKeychain, + }; + + if (isEthLikeCoin(sdkCoin)) { + const { maxFeePerGas, maxPriorityFeePerGas, gasLimit } = DEFAULT_MUSIG_ETH_GAS_PARAMS; + params.ethLikeParams = { + userKey: commonKeychain, + backupKey: commonKeychain, + recoveryDestination: recoveryDestinationAddress, + walletPassphrase: '', + isTss: true, + walletContractAddress: coinSpecificParams?.ecdsaEthLikeRecoverySpecificParams + ?.walletContractAddress as string, + eip1559: { maxFeePerGas, maxPriorityFeePerGas }, + replayProtectionOptions: getReplayProtectionOptions(bitgo.env as EnvironmentName), + gasLimit, + bitgoDestinationAddress: coinSpecificParams?.ecdsaEthLikeRecoverySpecificParams + ?.bitgoDestinationAddress as string, + apiKey: coinSpecificParams?.ecdsaEthLikeRecoverySpecificParams?.apiKey, + }; + } else if (isCosmosLikeCoin(sdkCoin)) { + params.cosmosLikeParams = { + recoveryDestination: recoveryDestinationAddress, + rootAddress: coinSpecificParams?.ecdsaCosmosLikeRecoverySpecificParams?.rootAddress, + }; + } else { + throw new NotImplementedError(`TSS recovery is not supported for coin: ${coin}.`); + } + + return recoverEcdsaMPCv2Wallets(bitgo, sdkCoin, enclavedExpressClient, params); } else { - throw new MethodNotImplementedError( - `TSS recovery is not implemented for coin: ${coin}. Supported coins are Eddsa coins.`, + throw new ValidationError( + `TSS recovery is not supported for coin ${coin}. ${coin} is neither eddsa nor ecdsa.`, ); } } diff --git a/src/api/master/routers/masterApiSpec.ts b/src/api/master/routers/masterApiSpec.ts index 089ccd66..854d56e7 100644 --- a/src/api/master/routers/masterApiSpec.ts +++ b/src/api/master/routers/masterApiSpec.ts @@ -46,7 +46,7 @@ export const RecoveryParamTypes = { scan: optional(t.number), }), - // ETH-like specific recovery parameters + // Multsig ETH-like specific recovery parameters ethLikeRecoveryOptions: t.partial({ gasPrice: t.number, gasLimit: t.number, @@ -74,20 +74,44 @@ export const RecoveryParamTypes = { recoveryDestinationAtaAddress: t.string, programId: t.string, }), + + // ECDSA ETH-like recovery specific parameters + ecdsaEthLikeRecoverySpecificParams: t.type({ + walletContractAddress: t.string, + bitgoDestinationAddress: t.string, + apiKey: t.string, + }), + + // ECDSA Cosmos-like recovery specific parameters + ecdsaCosmosLikeRecoverySpecificParams: t.type({ + rootAddress: t.string, + }), }; export type EvmRecoveryOptions = typeof RecoveryParamTypes.ethLikeRecoveryOptions._A; export type UtxoRecoveryOptions = typeof RecoveryParamTypes.utxoRecoveryOptions._A; export type SolanaRecoveryOptions = typeof RecoveryParamTypes.solanaRecoveryOptions._A; +export type EcdsaEthLikeRecoverySpecificParams = + typeof RecoveryParamTypes.ecdsaEthLikeRecoverySpecificParams._A; +export type EcdsaCosmosLikeRecoverySpecificParams = + typeof RecoveryParamTypes.ecdsaCosmosLikeRecoverySpecificParams._A; // Combined coin specific parameters const CoinSpecificParams = t.partial({ utxoRecoveryOptions: RecoveryParamTypes.utxoRecoveryOptions, evmRecoveryOptions: RecoveryParamTypes.ethLikeRecoveryOptions, solanaRecoveryOptions: RecoveryParamTypes.solanaRecoveryOptions, + ecdsaEthLikeRecoverySpecificParams: RecoveryParamTypes.ecdsaEthLikeRecoverySpecificParams, + ecdsaCosmosLikeRecoverySpecificParams: RecoveryParamTypes.ecdsaCosmosLikeRecoverySpecificParams, }); export type CoinSpecificParams = t.TypeOf; +export type CoinSpecificParamsUnion = + | EvmRecoveryOptions + | UtxoRecoveryOptions + | SolanaRecoveryOptions + | EcdsaEthLikeRecoverySpecificParams + | EcdsaCosmosLikeRecoverySpecificParams; // Middleware functions export function parseBody(req: express.Request, res: express.Response, next: express.NextFunction) { diff --git a/src/enclavedBitgoExpress/routers/enclavedApiSpec.ts b/src/enclavedBitgoExpress/routers/enclavedApiSpec.ts index 450348ef..a3585ba0 100644 --- a/src/enclavedBitgoExpress/routers/enclavedApiSpec.ts +++ b/src/enclavedBitgoExpress/routers/enclavedApiSpec.ts @@ -13,8 +13,16 @@ import { TypedRequestHandler, type WrappedRouter, } from '@api-ts/typed-express-router'; +import { DklsDkg, DklsTypes } from '@bitgo-beta/sdk-lib-mpc'; import express from 'express'; import * as t from 'io-ts'; + +import { + BadRequestResponse, + InternalServerErrorResponse, + NotImplementedResponse, +} from '../../shared/errors'; + import { postIndependentKey } from '../../api/enclaved/handlers/postIndependentKey'; import { recoveryMultisigTransaction } from '../../api/enclaved/handlers/recoveryMultisigTransaction'; import { signMultisigTransaction } from '../../api/enclaved/handlers/signMultisigTransaction'; @@ -24,10 +32,10 @@ import { EnclavedConfig } from '../../shared/types'; import { BitGoRequest } from '../../types/request'; import { eddsaInitialize } from '../../api/enclaved/mpcInitialize'; import { eddsaFinalize } from '../../api/enclaved/mpcFinalize'; -import { DklsDkg, DklsTypes } from '@bitgo-beta/sdk-lib-mpc'; import { ecdsaMPCv2Initialize } from '../../api/enclaved/handlers/ecdsaMPCv2Initialize'; import { ecdsaMPCv2Round } from '../../api/enclaved/handlers/ecdsaMPCv2Round'; import { ecdsaMPCv2Finalize } from '../../api/enclaved/handlers/ecdsaMPCv2Finalize'; +import { ecdsaMPCv2Recovery } from '../../api/enclaved/handlers/ecdsaMPCv2Recovery'; import { signEddsaRecoveryTransaction } from '../../api/enclaved/handlers/signEddsaRecoveryTransaction'; import { isEddsaCoin } from '../../shared/coinUtils'; import { MethodNotImplementedError } from '@bitgo-beta/sdk-core'; @@ -43,10 +51,7 @@ const IndependentKeyRequest = { const IndependentKeyResponse: HttpResponse = { // TODO: Define proper response type 200: t.any, - 500: t.type({ - error: t.string, - details: t.string, - }), + ...InternalServerErrorResponse, }; // Request type for /multisig/sign endpoint @@ -60,10 +65,7 @@ const SignMultisigRequest = { const SignMultisigResponse: HttpResponse = { // TODO: Define proper response type for signed multisig transaction 200: t.any, - 500: t.type({ - error: t.string, - details: t.string, - }), + ...InternalServerErrorResponse, }; // Request type for /multisig/recovery endpoint @@ -80,10 +82,7 @@ const RecoveryMultisigResponse: HttpResponse = { 200: t.type({ txHex: t.string, }), // the full signed tx - 500: t.type({ - error: t.string, - details: t.string, - }), + ...InternalServerErrorResponse, }; const RecoveryMpcRequest = { @@ -105,10 +104,7 @@ const RecoveryMpcResponse: HttpResponse = { 200: t.type({ txHex: t.string, }), // the full signed tx - 500: t.type({ - error: t.string, - details: t.string, - }), + ...InternalServerErrorResponse, }; // Request type for /mpc/sign endpoint @@ -166,10 +162,7 @@ const SignMpcResponse: HttpResponse = { signatureShareRound3: t.any, }), ]), - 500: t.type({ - error: t.string, - details: t.string, - }), + ...InternalServerErrorResponse, }; const KeyShare = { @@ -297,6 +290,20 @@ const MpcV2FinalizeResponse = { const MpcV2FinalizeResponseType = t.type(MpcV2FinalizeResponse); export type MpcV2FinalizeResponseType = t.TypeOf; +const MpcV2RecoveryRequest = { + pub: t.string, + txHex: t.string, +}; +const MpcV2RecoveryRequestType = t.type(MpcV2RecoveryRequest); +export type MpcV2RecoveryRequestType = t.TypeOf; + +const MpcV2RecoveryResponse = { + txHex: t.string, + stringifiedSignature: t.string, +}; +const MpcV2RecoveryResponseType = t.type(MpcV2RecoveryResponse); +export type MpcV2RecoveryResponseType = t.TypeOf; + // API Specification export const EnclavedAPiSpec = apiSpec({ 'v1.multisig.sign': { @@ -468,6 +475,23 @@ export const EnclavedAPiSpec = apiSpec({ description: 'Finalize the MPC protocol', }), }, + 'v1.mpcv2.recovery': { + post: httpRoute({ + method: 'POST', + path: '/api/{coin}/mpcv2/recovery', + request: httpRequest({ + params: { coin: t.string }, + body: MpcV2RecoveryRequest, + }), + response: { + 200: MpcV2RecoveryResponseType, + ...BadRequestResponse, + ...InternalServerErrorResponse, + ...NotImplementedResponse, + }, + description: 'Recover a MPC transaction', + }), + }, }); export type EnclavedApiSpecRouteHandler< @@ -601,5 +625,13 @@ export function createKeyGenRouter(config: EnclavedConfig): WrappedRouter(async (req) => { + const typedReq = req as EnclavedApiSpecRouteRequest<'v1.mpcv2.recovery', 'post'>; + const result = await ecdsaMPCv2Recovery(typedReq); + return Response.ok(result); + }), + ]); + return router; } diff --git a/src/kms/kmsClient.ts b/src/kms/kmsClient.ts index 41a47d2c..f7e83c28 100644 --- a/src/kms/kmsClient.ts +++ b/src/kms/kmsClient.ts @@ -1,4 +1,3 @@ -import debug from 'debug'; import * as superagent from 'superagent'; import { EnclavedConfig, isMasterExpressConfig, TlsMode } from '../shared/types'; import { PostKeyKmsSchema, PostKeyParams, PostKeyResponse } from './types/postKey'; @@ -15,7 +14,7 @@ import { } from './types/generateDataKey'; import https from 'https'; -const debugLogger = debug('bitgo:express:kmsClient'); +import logger from '../logger'; export class KmsClient { private readonly url: string; @@ -23,9 +22,11 @@ export class KmsClient { constructor(cfg: EnclavedConfig) { if (isMasterExpressConfig(cfg)) { + logger.error('KMS client cannot be initialized in master express mode'); throw new Error('Configuration is not in enclaved express mode'); } if (!cfg.kmsUrl) { + logger.error('KMS URL not configured. Please set KMS_URL in your environment.'); throw new Error('KMS URL not configured. Please set KMS_URL in your environment.'); } @@ -37,11 +38,11 @@ export class KmsClient { key: cfg.tlsKey, }); } - debugLogger('kmsClient initialized with URL: %s', this.url); + logger.debug('kmsClient initialized with URL: %s', this.url); } async postKey(params: PostKeyParams): Promise { - debugLogger('Posting key to KMS: %O', params); + logger.debug('Posting key to KMS: %O', params); // Call KMS to post the key let kmsResponse: any; @@ -50,16 +51,19 @@ export class KmsClient { if (this.agent) req = req.agent(this.agent); kmsResponse = await req; } catch (error: any) { - debugLogger('Error posting key to KMS', error); - throw error; + logger.error('Error posting key to KMS', error); + throw Error(`Failed to post key to KMS: ${error.message}`); } // validate the response try { PostKeyKmsSchema.parse(kmsResponse.body); } catch (error: any) { + logger.error('KMS returned unexpected when posting key: ', error); throw new Error( - `KMS returned unexpected response${error.message ? `: ${error.message}` : ''}`, + `KMS returned unexpected response when posting key${ + error.message ? `: ${error.message}` : '' + }`, ); } @@ -68,7 +72,7 @@ export class KmsClient { } async getKey(params: GetKeyParams): Promise { - debugLogger('Getting key from KMS: %O', params); + logger.debug('Getting key from KMS: %O', params); // Call KMS to get the key let kmsResponse: any; @@ -80,16 +84,19 @@ export class KmsClient { if (this.agent) req = req.agent(this.agent); kmsResponse = await req; } catch (error: any) { - debugLogger('Error getting key from KMS', error); - throw error; + logger.error('Error getting key from KMS', error); + throw new Error(`Failed to get key from KMS: ${error.message}`); } // validate the response try { GetKeyKmsSchema.parse(kmsResponse.body); } catch (error: any) { + logger.error('KMS returned unexpected response when getting key', error); throw new Error( - `KMS returned unexpected response${error.message ? `: ${error.message}` : ''}`, + `KMS returned unexpected response when getting key${ + error.message ? `: ${error.message}` : '' + }`, ); } @@ -97,7 +104,7 @@ export class KmsClient { } async generateDataKey(params: GenerateDataKeyParams): Promise { - debugLogger('Generating data key from KMS: %O', params); + logger.debug('Generating data key from KMS: %O', params); // Call KMS to generate the data key let kmsResponse: any; @@ -106,16 +113,21 @@ export class KmsClient { if (this.agent) req = req.agent(this.agent); kmsResponse = await req; } catch (error: any) { - debugLogger('Error generating data key from KMS', error); - throw error; + logger.error('Error generating data key from KMS when generating data key', error); + throw new Error( + `Failed to generate data key from KMS when generating data key: ${error.message}`, + ); } // validate the response try { GenerateDataKeyKmsSchema.parse(kmsResponse.body); } catch (error: any) { + logger.error('KMS returned unexpected response when generating data key', error); throw new Error( - `KMS returned unexpected response${error.message ? `: ${error.message}` : ''}`, + `KMS returned unexpected response when generating data key${ + error.message ? `: ${error.message}` : '' + }`, ); } @@ -126,7 +138,7 @@ export class KmsClient { } async decryptDataKey(params: DecryptDataKeyParams): Promise { - debugLogger('Decrypting data key from KMS: %O', params); + logger.debug('Decrypting data key from KMS: %O', params); // Call KMS to decrypt the data key let kmsResponse: any; @@ -135,16 +147,19 @@ export class KmsClient { if (this.agent) req = req.agent(this.agent); kmsResponse = await req; } catch (error: any) { - debugLogger('Error decrypting data key from KMS', error); - throw error; + logger.error('Error decrypting data key from KMS', error); + throw new Error(`Failed to decrypt data key from KMS: ${error.message}`); } // validate the response try { DecryptDataKeyKmsSchema.parse(kmsResponse.body); } catch (error: any) { + logger.error('KMS returned unexpected response when decrypting data key', error); throw new Error( - `KMS returned unexpected response${error.message ? `: ${error.message}` : ''}`, + `KMS returned unexpected response when decrypting data key${ + error.message ? `: ${error.message}` : '' + }`, ); } diff --git a/src/shared/coinUtils.ts b/src/shared/coinUtils.ts index 320591fb..37e964bb 100644 --- a/src/shared/coinUtils.ts +++ b/src/shared/coinUtils.ts @@ -3,7 +3,8 @@ import { BackupKeyRecoveryTransansaction, FormattedOfflineVaultTxInfo, } from '@bitgo-beta/abstract-utxo'; -import { CoinFamily } from '@bitgo-beta/statics'; +import { CosmosCoin } from '@bitgo-beta/abstract-cosmos'; +import { CoinFamily, CoinFeature } from '@bitgo-beta/statics'; import { BaseCoin } from '@bitgo-beta/sdk-core'; import { AbstractUtxoCoin } from '@bitgo-beta/abstract-utxo'; import { type Xtz, type Txtz } from '@bitgo-beta/sdk-coin-xtz'; @@ -33,6 +34,10 @@ export function isEthLikeCoin(coin: BaseCoin): coin is AbstractEthLikeNewCoins { return isEthPure || isEthLike; } +export function isCosmosLikeCoin(coin: BaseCoin): coin is CosmosCoin { + return coin.getConfig().features.includes(CoinFeature.COSMOS_LIKE_COINS); +} + export function isUtxoCoin(coin: BaseCoin): coin is AbstractUtxoCoin { const isBtc = isFamily(coin, CoinFamily.BTC); @@ -69,5 +74,15 @@ export function isFormattedOfflineVaultTxInfo( } export function isEddsaCoin(coin: BaseCoin): boolean { + if (typeof coin.getMPCAlgorithm !== 'function') { + return false; + } return coin.getMPCAlgorithm() === 'eddsa'; } + +export function isEcdsaCoin(coin: BaseCoin): boolean { + if (typeof coin.getMPCAlgorithm !== 'function') { + return false; + } + return coin.getMPCAlgorithm() === 'ecdsa'; +} diff --git a/src/shared/errors.ts b/src/shared/errors.ts index 1fb2245c..d0910392 100644 --- a/src/shared/errors.ts +++ b/src/shared/errors.ts @@ -74,6 +74,16 @@ export class ConflictError extends BitgoExpressError { } } +/** + * NotImplementedError represents a feature that is not implemented + * Should result in a 501 Not Implemented HTTP status code + */ +export class NotImplementedError extends BitgoExpressError { + constructor(message: string) { + super(message, 'NotImplementedError'); + } +} + // Define specific HTTP error responses // Common error response types @@ -85,3 +95,4 @@ export const BadRequestResponse = { 400: ErrorResponse }; export const UnprocessableEntityResponse = { 422: ErrorResponse }; export const InternalServerErrorResponse = { 500: ErrorResponse }; export const NotFoundResponse = { 404: ErrorResponse }; +export const NotImplementedResponse = { 501: ErrorResponse }; diff --git a/src/shared/responseHandler.ts b/src/shared/responseHandler.ts index d32ebba3..2bbe6fcb 100644 --- a/src/shared/responseHandler.ts +++ b/src/shared/responseHandler.ts @@ -43,6 +43,7 @@ export function responseHandler(fn: ServiceFunction