From eaa285e8e37101986f1efea9774da6f8f00cda8e Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 4 Dec 2024 20:25:01 +0300 Subject: [PATCH 1/8] eutxo lib and API usage update --- .../ada/transactions/shelley/transactions.js | 10 +- packages/yoroi-extension/package-lock.json | 703 ++---------------- packages/yoroi-extension/package.json | 2 +- 3 files changed, 63 insertions(+), 652 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js index f458969dee..f3269d5cc9 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js @@ -584,8 +584,6 @@ export async function newAdaUnsignedTxFromUtxo( memPriceTo: 1000, stepPriceFrom: 721, stepPriceTo: 10000000, - // todo remove this after updating the eUtxo lib - coinsPerUtxoWord: Number(protocolParams.coinsPerUtxoByte) * 8 + 2, }; const utxoSet = new LibUtxoSet( @@ -594,7 +592,7 @@ export async function newAdaUnsignedTxFromUtxo( ) ); - const txBuilder = await TxBuilder.new(defaultNetworkConfig, utxoSet); + const txBuilder = await TxBuilder.new(defaultNetworkConfig); // When both hash and datum are present - datum is added as extra witness const extraWitnessDatumsPresent = @@ -687,6 +685,7 @@ export async function newAdaUnsignedTxFromUtxo( await txBuilder.calcScriptDataHash('default'); } + await txBuilder.selectInputsFrom(utxoSet); await txBuilder.addChangeAndFee(changeAddress); let unsignedTx; @@ -879,8 +878,6 @@ async function newAdaUnsignedTxFromUtxoForConnector( memPriceTo: 1000, stepPriceFrom: 721, stepPriceTo: 10000000, - // todo remove this after updating the eUtxo lib - coinsPerUtxoWord: Number(protocolParams.coinsPerUtxoByte) * 8 + 2, }; const utxoSet = new LibUtxoSet( @@ -889,7 +886,7 @@ async function newAdaUnsignedTxFromUtxoForConnector( ) ); - const txBuilder = await TxBuilder.new(defaultNetworkConfig, utxoSet); + const txBuilder = await TxBuilder.new(defaultNetworkConfig); await txBuilder.addRequiredInputs( await Promise.all( @@ -997,6 +994,7 @@ async function newAdaUnsignedTxFromUtxoForConnector( } ); + await txBuilder.selectInputsFrom(utxoSet); await txBuilder.addChangeAndFee(changeAddress); const unsignedTx = await txBuilder.build(); diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 485fd7def6..78fdae489c 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -19,7 +19,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "5.1.2", - "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", + "@emurgo/yoroi-eutxo-txs": "1.0.4-beta.1", "@emurgo/yoroi-lib": "1.2.3", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", @@ -2517,94 +2517,11 @@ "@emurgo/cross-csl-core": "5.1.2" } }, - "node_modules/@emurgo/cross-csl-browser/node_modules/@emurgo/cross-csl-core": { + "node_modules/@emurgo/cross-csl-core": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-core/-/cross-csl-core-5.1.2.tgz", "integrity": "sha512-+zR8DR/UEql/S5BBnA6sbEGKVRow7NHI896K8UDt5+W3J3cZVAZEsbm9faaH+DehpqvensVNHwxooxk30wEOpg==" }, - "node_modules/@emurgo/cross-csl-core": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-core/-/cross-csl-core-4.4.0.tgz", - "integrity": "sha512-R12cAHmkjeLb7g0+Og5zoi8is7jh5uONICaKLCvebqV6kHhCShSSHSdCbvqmCH3H8szPodkOkLp5qXNmxqfNxA==", - "dependencies": { - "@cardano-foundation/ledgerjs-hw-app-cardano": "^5.0.0", - "@types/mocha": "^9.1.1", - "axios": "^0.24.0", - "bech32": "^2.0.0", - "bignumber.js": "^9.0.1", - "blake2b": "^2.1.4", - "hash-wasm": "^4.9.0", - "mocha": "^10.0.0" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz", - "integrity": "sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ==", - "dependencies": { - "@ledgerhq/hw-transport": "^5.12.0", - "@types/ledgerhq__hw-transport": "^4.21.3", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "blake2": "^4.0.2", - "int64-buffer": "^1.0.1" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "dependencies": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, - "node_modules/@emurgo/cross-csl-core/node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/@emurgo/cross-csl-core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/@emurgo/cross-csl-nodejs": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-nodejs/-/cross-csl-nodejs-5.1.2.tgz", @@ -2615,20 +2532,13 @@ "@emurgo/cross-csl-core": "5.1.2" } }, - "node_modules/@emurgo/cross-csl-nodejs/node_modules/@emurgo/cross-csl-core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-core/-/cross-csl-core-5.1.2.tgz", - "integrity": "sha512-+zR8DR/UEql/S5BBnA6sbEGKVRow7NHI896K8UDt5+W3J3cZVAZEsbm9faaH+DehpqvensVNHwxooxk30wEOpg==", - "dev": true - }, "node_modules/@emurgo/yoroi-eutxo-txs": { - "version": "0.0.2-alpha.8", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-0.0.2-alpha.8.tgz", - "integrity": "sha512-H9VdDrqLMsGSFRUyfNXEwBmabn+06Z27Fq1lcH7LiIy5HquiKoqZ7jbp4J5fQnnnYNkHchcZnSFP4wX2KGLApA==", + "version": "1.0.4-beta.1", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.4-beta.1.tgz", + "integrity": "sha512-OYa+VfYUONBhnmcQXVsKYvaiKkVvVx3XBYb5igGUgK9oYaCPFoyY7LB4QJfwzTwhqGdSRtt3WsOXVhledPGNJw==", "dependencies": { - "@cardano-foundation/ledgerjs-hw-app-cardano": "^5.0.0", - "@emurgo/cross-csl-core": "4.4.0", - "@ledgerhq/hw-transport-node-hid": "^6.27.2", + "@cardano-foundation/ledgerjs-hw-app-cardano": "7.1.3", + "@emurgo/cross-csl-core": "5.1.2", "axios": "^0.27.2", "bech32": "^2.0.0", "bignumber.js": "^9.1.0", @@ -2636,55 +2546,6 @@ "hash-wasm": "^4.9.0" } }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@cardano-foundation/ledgerjs-hw-app-cardano/-/ledgerjs-hw-app-cardano-5.1.0.tgz", - "integrity": "sha512-ucuz/XbS/0ZD0Bal/GI/kiTm9jDIl8J+A7ypEqcAcBDGicFsyWmtPotOTwuDovTsiM8+eA/5OGTFX0oRqzxstQ==", - "dependencies": { - "@ledgerhq/hw-transport": "^5.12.0", - "@types/ledgerhq__hw-transport": "^4.21.3", - "base-x": "^3.0.5", - "bech32": "^1.1.4", - "blake2": "^4.0.2", - "int64-buffer": "^1.0.1" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@cardano-foundation/ledgerjs-hw-app-cardano/node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@ledgerhq/devices": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.51.1.tgz", - "integrity": "sha512-4w+P0VkbjzEXC7kv8T1GJ/9AVaP9I6uasMZ/JcdwZBS3qwvKo5A5z9uGhP5c7TvItzcmPb44b5Mw2kT+WjUuAA==", - "dependencies": { - "@ledgerhq/errors": "^5.50.0", - "@ledgerhq/logs": "^5.50.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@ledgerhq/errors": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.50.0.tgz", - "integrity": "sha512-gu6aJ/BHuRlpU7kgVpy2vcYk6atjB4iauP2ymF7Gk0ez0Y/6VSMVSJvubeEQN+IV60+OBK0JgeIZG7OiHaw8ow==" - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@ledgerhq/hw-transport": { - "version": "5.51.1", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.51.1.tgz", - "integrity": "sha512-6wDYdbWrw9VwHIcoDnqWBaDFyviyjZWv6H9vz9Vyhe4Qd7TIFmbTl/eWs6hZvtZBza9K8y7zD8ChHwRI4s9tSw==", - "dependencies": { - "@ledgerhq/devices": "^5.51.1", - "@ledgerhq/errors": "^5.50.0", - "events": "^3.3.0" - } - }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/@ledgerhq/logs": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz", - "integrity": "sha512-swKHYCOZUGyVt4ge0u8a7AwNcA//h4nx5wIi0sruGye1IJ5Cva0GyK9L2/WdX+kWVTKp92ZiEo1df31lrWGPgA==" - }, "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", @@ -2707,17 +2568,6 @@ "node": ">= 6" } }, - "node_modules/@emurgo/yoroi-eutxo-txs/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, "node_modules/@emurgo/yoroi-lib": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@emurgo/yoroi-lib/-/yoroi-lib-1.2.3.tgz", @@ -2733,11 +2583,6 @@ "easy-crc": "1.1.0" } }, - "node_modules/@emurgo/yoroi-lib/node_modules/@emurgo/cross-csl-core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@emurgo/cross-csl-core/-/cross-csl-core-5.1.2.tgz", - "integrity": "sha512-+zR8DR/UEql/S5BBnA6sbEGKVRow7NHI896K8UDt5+W3J3cZVAZEsbm9faaH+DehpqvensVNHwxooxk30wEOpg==" - }, "node_modules/@emurgo/yoroi-lib/node_modules/axios": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", @@ -3715,33 +3560,6 @@ "events": "^3.3.0" } }, - "node_modules/@ledgerhq/hw-transport-node-hid": { - "version": "6.28.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-6.28.6.tgz", - "integrity": "sha512-USSTOO0zv9XtguWismP7/StnNS/s7Rz0JOGGaBhKe3Bzl7d5XPncUlmOvoNFzzY/QdasEoFs2QId1+ibJG71Vw==", - "dependencies": { - "@ledgerhq/devices": "^8.3.0", - "@ledgerhq/errors": "^6.16.4", - "@ledgerhq/hw-transport": "^6.30.6", - "@ledgerhq/hw-transport-node-hid-noevents": "^6.29.6", - "@ledgerhq/logs": "^6.12.0", - "lodash": "^4.17.21", - "node-hid": "^2.1.2", - "usb": "2.9.0" - } - }, - "node_modules/@ledgerhq/hw-transport-node-hid-noevents": { - "version": "6.29.6", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-node-hid-noevents/-/hw-transport-node-hid-noevents-6.29.6.tgz", - "integrity": "sha512-H1cGC4TLwSCxve3rbV7qfPJBZfy7VD7k9Czc9HOMDwQ9zHFtaoeiIotIMGjzHjfPtAGauMpAYvrpmEdBBX5sHg==", - "dependencies": { - "@ledgerhq/devices": "^8.3.0", - "@ledgerhq/errors": "^6.16.4", - "@ledgerhq/hw-transport": "^6.30.6", - "@ledgerhq/logs": "^6.12.0", - "node-hid": "^2.1.2" - } - }, "node_modules/@ledgerhq/hw-transport-u2f": { "version": "5.36.0-deprecated", "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz", @@ -7011,14 +6829,6 @@ "@types/node": "*" } }, - "node_modules/@types/ledgerhq__hw-transport": { - "version": "4.21.8", - "resolved": "https://registry.npmjs.org/@types/ledgerhq__hw-transport/-/ledgerhq__hw-transport-4.21.8.tgz", - "integrity": "sha512-uO2AJYZUVCwgyqgyy2/KW+JsQaO0hcwDdubRaHgF2ehO0ngGAY41PbE8qnPnmUw1uerMXONvL68QFioA7Y6C5g==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/lodash": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", @@ -7050,11 +6860,6 @@ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" - }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", @@ -8136,6 +7941,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -9360,6 +9166,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" }, @@ -9414,6 +9221,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -9424,6 +9232,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -9447,6 +9256,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -9460,6 +9270,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -9499,18 +9310,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/blake2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/blake2/-/blake2-4.1.1.tgz", - "integrity": "sha512-HUmkY0MUDUVgejJVNrpNKAva8C4IWD/Rd862sdexoSibu86b6iu0gO0/RjovO2lM5+w6JqjIEmkuAgGhfHlnJw==", - "hasInstallScript": true, - "dependencies": { - "nan": "^2.15.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/blake2b": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", @@ -9664,11 +9463,6 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", @@ -10352,6 +10146,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -12245,14 +12040,6 @@ "node": ">=0.12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -12480,14 +12267,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -12502,14 +12281,6 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -12919,6 +12690,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -13982,14 +13754,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/expect": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", @@ -14501,6 +14265,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -14516,6 +14281,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -14524,6 +14290,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, "bin": { "flat": "cli.js" } @@ -15013,7 +14780,8 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-extra": { "version": "8.1.0", @@ -15056,6 +14824,7 @@ "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, "optional": true, "os": [ @@ -15299,11 +15068,6 @@ "node": ">=0.10.0" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -15328,6 +15092,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -15716,9 +15481,9 @@ } }, "node_modules/hash-wasm": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.11.0.tgz", - "integrity": "sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.12.0.tgz", + "integrity": "sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==" }, "node_modules/hash.js": { "version": "1.1.7", @@ -15744,6 +15509,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -16401,11 +16167,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", @@ -16752,6 +16513,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -16919,6 +16681,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -16958,6 +16721,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -17171,6 +16935,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "engines": { "node": ">=10" }, @@ -19789,6 +19554,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -19885,6 +19651,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -19900,6 +19667,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -19914,6 +19682,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -19929,6 +19698,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -19939,12 +19709,14 @@ "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -19953,6 +19725,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -20912,7 +20685,8 @@ "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", @@ -21072,7 +20846,8 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/mobx": { "version": "5.15.7", @@ -21136,185 +20911,6 @@ "react-router": "^4.0.0 || ^5.0.0" } }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/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==" - }, - "node_modules/mocha/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", @@ -21420,11 +21016,6 @@ "node": ">=0.10.0" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -21477,17 +21068,6 @@ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/node-abi": { - "version": "3.63.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.63.0.tgz", - "integrity": "sha512-vAszCsOUrUxjGAmdnM/pq7gUgie0IRteCQMX6d4A534fQCR93EJU5qgzBvU6EkFfK27s0T3HEV3BOyJIr7OMYw==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", @@ -21684,23 +21264,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/node-hid": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-2.2.0.tgz", - "integrity": "sha512-vj48zh9j555DZzUhMc8tk/qw6xPFrDyPBH1ST1Z/hWaA/juBJw7IuSxPeOgpzNFNU36mGYj+THioRMt1xOdm/g==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.2", - "prebuild-install": "^7.1.1" - }, - "bin": { - "hid-showdevices": "src/show-devices.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -21875,6 +21438,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -22528,6 +22092,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -22542,6 +22107,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -23233,31 +22799,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -23513,6 +23054,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -23708,28 +23250,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", @@ -24186,6 +23706,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -25794,74 +25315,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -26628,6 +26081,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -26909,6 +26363,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -26919,12 +26374,14 @@ "node_modules/tar-fs/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -26940,6 +26397,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26953,6 +26411,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -27559,6 +27018,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -28217,25 +27677,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/usb": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/usb/-/usb-2.9.0.tgz", - "integrity": "sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw==", - "hasInstallScript": true, - "dependencies": { - "@types/w3c-web-usb": "^1.0.6", - "node-addon-api": "^6.0.0", - "node-gyp-build": "^4.5.0" - }, - "engines": { - "node": ">=10.20.0 <11.x || >=12.17.0 <13.0 || >=14.0.0" - } - }, - "node_modules/usb/node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -29360,11 +28801,6 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -29510,35 +28946,11 @@ "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -29551,6 +28963,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 99e7f46e91..80264b95c4 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "5.1.2", - "@emurgo/yoroi-eutxo-txs": "0.0.2-alpha.8", + "@emurgo/yoroi-eutxo-txs": "1.0.4-beta.1", "@emurgo/yoroi-lib": "1.2.3", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", From 5f1aeed8d30925e9d995a515fd05302de9cb5b9b Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 5 Dec 2024 16:53:49 +0300 Subject: [PATCH 2/8] error catching fix --- .../ada/transactions/shelley/transactions.js | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js index f3269d5cc9..2f8cc74bfe 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js @@ -685,7 +685,21 @@ export async function newAdaUnsignedTxFromUtxo( await txBuilder.calcScriptDataHash('default'); } - await txBuilder.selectInputsFrom(utxoSet); + try { + await txBuilder.selectInputsFrom(utxoSet); + } catch (error) { + if (error instanceof LibNotEnoughMoneyToSendError) { + throw new NotEnoughMoneyToSendError(); + } + if (error instanceof LibOverflowError) { + throw new AssetOverflowError(); + } + if (String(error).includes('less than the minimum UTXO value')) { + throw new CannotSendBelowMinimumValueError(); + } + throw error; + } + await txBuilder.addChangeAndFee(changeAddress); let unsignedTx; @@ -994,7 +1008,21 @@ async function newAdaUnsignedTxFromUtxoForConnector( } ); - await txBuilder.selectInputsFrom(utxoSet); + try { + await txBuilder.selectInputsFrom(utxoSet); + } catch (error) { + if (error instanceof LibNotEnoughMoneyToSendError) { + throw new NotEnoughMoneyToSendError(); + } + if (error instanceof LibOverflowError) { + throw new AssetOverflowError(); + } + if (String(error).includes('less than the minimum UTXO value')) { + throw new CannotSendBelowMinimumValueError(); + } + throw error; + } + await txBuilder.addChangeAndFee(changeAddress); const unsignedTx = await txBuilder.build(); From 061bc22109136de513b163096b76455205789919 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 5 Dec 2024 17:25:41 +0300 Subject: [PATCH 3/8] pending fee fix --- packages/yoroi-extension/chrome/extension/connector/api.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/yoroi-extension/chrome/extension/connector/api.js b/packages/yoroi-extension/chrome/extension/connector/api.js index 855a4affb7..57c1bd6e5c 100644 --- a/packages/yoroi-extension/chrome/extension/connector/api.js +++ b/packages/yoroi-extension/chrome/extension/connector/api.js @@ -924,10 +924,11 @@ export async function connectorRecordSubmittedCardanoTransaction( }; const amount = new MultiToken([], defaults); - const fee = new MultiToken([], defaults); const addresses = { from: [], to: [] }; let isIntraWallet = true; const txBody = tx.body(); + const fee = new MultiToken([], defaults); + fee.joinAddMutable(fee.createDefaultEntry(new BigNumber(txBody.fee().to_str()))); const usedUtxos = []; for (const input of iterateLenGet(txBody.inputs())) { const txHash = input.transaction_id().to_hex(); @@ -960,7 +961,6 @@ export async function connectorRecordSubmittedCardanoTransaction( if (allAddresses.has(utxo.receiver)) { amount.joinSubtractMutable(value); } - fee.joinAddMutable(value); } for (const output of iterateLenGet(txBody.outputs())) { const value = multiTokenFromCardanoValue(output.amount(), defaults); @@ -975,7 +975,6 @@ export async function connectorRecordSubmittedCardanoTransaction( } else { isIntraWallet = false; } - fee.joinSubtractMutable(value); } const withdrawalsData = iterateLenGetMap(txBody.withdrawals()) From 4e192744bd596ca7fbf1fa3e722399b50f9020ce Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 5 Dec 2024 17:44:32 +0300 Subject: [PATCH 4/8] pending hash fix --- .../extension/background/handlers/content/rpc.js | 14 +++++--------- .../background/handlers/yoroi/transaction.js | 10 +++++----- .../chrome/extension/connector/api.js | 13 ++++++++----- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js b/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js index 313c481050..d24e3cbb86 100644 --- a/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js +++ b/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js @@ -67,6 +67,7 @@ import type { CardanoTxRequest } from '../../../../../app/api/ada'; import type { NFTMetadata } from '../../../../../app/api/ada/lib/storage/database/primitives/tables'; import { getProtocolParameters } from '../yoroi/protocolParameters'; import { hexToBytes } from '../../../../../app/coreUtils'; +import { transactionHexToHash } from '../../../../../app/api/ada/lib/cardanoCrypto/utils'; declare var chrome; @@ -388,28 +389,23 @@ const Handlers = Object.freeze({ [ string /* tx hex */ ], string, >(async ({ wallet, message }) => { - const txBuffer = hexToBytes(message.params[0]); + const txHex = message.params[0]; await connectorSendTxCardano( wallet, - txBuffer, + txHex, new LocalStorageApi(), ); - const tx = RustModule.WalletV4.Transaction.from_bytes( - txBuffer - ); - const id = RustModule.WalletV4.hash_transaction(tx.body()).to_hex(); try { await connectorRecordSubmittedCardanoTransaction( wallet, - tx, + txHex, ); } catch (error) { // eslint-disable-next-line no-console console.error('error recording submitted tx', error); } - tx.free(); - return { ok: id }; + return { ok: transactionHexToHash(txHex) }; }), 'ping': NewHandler.basic(async () => { diff --git a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js index 0c4b223477..74a8480dbc 100644 --- a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js +++ b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js @@ -20,7 +20,7 @@ import { RustModule } from '../../../../../app/api/ada/lib/cardanoCrypto/rustLoa import { emitUpdateToSubscriptions } from '../../subscriptionManager'; import LocalStorageApi from '../../../../../app/api/localStorage/index'; import { getCardanoStateFetcher } from '../../utils'; -import { hexToBytes } from '../../../../../app/coreUtils'; +import { bytesToHex, hexToBytes } from '../../../../../app/coreUtils'; import { getWalletsState } from '../utils'; import type { CardanoAddressedUtxo } from '../../../../../app/api/ada/transactions/types'; @@ -141,7 +141,7 @@ export const SignAndBroadcastTransaction: HandlerType< try { await connectorRecordSubmittedCardanoTransaction( publicDeriver, - Scope.WalletV4.Transaction.from_hex(signedTxHex) + signedTxHex, ); } catch (_error) { // ignore @@ -198,11 +198,11 @@ export const BroadcastTransaction: HandlerType< }); try { for (let i = 0; i < txs.length; i++) { - await RustModule.WasmScope(Scope => connectorRecordSubmittedCardanoTransaction( + await connectorRecordSubmittedCardanoTransaction( publicDeriver, - Scope.WalletV4.Transaction.from_bytes(txs[i].encodedTx), + bytesToHex(txs[i].encodedTx), addressedUtxoArray[i] - )); + ); } } catch (_error) { // ignore diff --git a/packages/yoroi-extension/chrome/extension/connector/api.js b/packages/yoroi-extension/chrome/extension/connector/api.js index 57c1bd6e5c..e35b43d802 100644 --- a/packages/yoroi-extension/chrome/extension/connector/api.js +++ b/packages/yoroi-extension/chrome/extension/connector/api.js @@ -865,14 +865,14 @@ export async function connectorCreateCardanoTx( export async function connectorSendTxCardano( wallet: IPublicDeriver, - signedTx: Buffer, + signedTxHex: string, localStorage: LocalStorageApi, ): Promise { await sendTx({ body: { network: wallet.getParent().getNetworkInfo(), - id: transactionHexToHash(bytesToHex(signedTx)), - encodedTx: signedTx, + id: transactionHexToHash(signedTxHex), + encodedTx: bytesToHex(signedTxHex), }, lastLaunchVersion: await localStorage.getLastLaunchVersion() ?? '', currentLocale: await localStorage.getUserLocale() ?? '', @@ -888,7 +888,7 @@ export async function connectorSendTxCardano( export async function connectorRecordSubmittedCardanoTransaction( publicDeriver: PublicDeriver<>, - tx: RustModule.WalletV4.Transaction, + sourceTxHex: string, addressedUtxos?: ?Array, ) { const withUtxos = asGetAllUtxos(publicDeriver); @@ -916,7 +916,8 @@ export async function connectorRecordSubmittedCardanoTransaction( submittedTxs, ); - const txId = transactionHexToHash(tx.to_hex()); + const txId = transactionHexToHash(sourceTxHex); + const tx = RustModule.WalletV4.Transaction.from_hex(sourceTxHex); const defaultToken = publicDeriver.getParent().defaultToken; const defaults = { defaultNetworkId: defaultToken.NetworkId, @@ -927,8 +928,10 @@ export async function connectorRecordSubmittedCardanoTransaction( const addresses = { from: [], to: [] }; let isIntraWallet = true; const txBody = tx.body(); + const fee = new MultiToken([], defaults); fee.joinAddMutable(fee.createDefaultEntry(new BigNumber(txBody.fee().to_str()))); + const usedUtxos = []; for (const input of iterateLenGet(txBody.inputs())) { const txHash = input.transaction_id().to_hex(); From 51f2878acc1bdcd84b0915175bbbaccaab19cb39 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 23 Jan 2025 14:54:29 +0300 Subject: [PATCH 5/8] connector witness response fix --- .../app/api/ada/lib/cardanoCrypto/utils.js | 5 +- .../background/handlers/yoroi/connector.js | 48 ++++++++----------- .../background/handlers/yoroi/transaction.js | 4 +- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js index b602dc350c..6b3b7cc61f 100644 --- a/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js +++ b/packages/yoroi-extension/app/api/ada/lib/cardanoCrypto/utils.js @@ -52,13 +52,16 @@ export function transactionHexReplaceWitnessSet(txHex: string, witnessSetHex: st }); } -export function transactionHexAddVkeyWitnessesFromWitnessSetHex(txHex: string, witnessSetHex: string): string { +export function transactionHexAddSignaturesFromWitnessSetHex(txHex: string, witnessSetHex: string): string { return RustModule.WasmScope(Module => { const fixedTransaction = Module.WalletV4.FixedTransaction.from_hex(txHex); const witnessSet = Module.WalletV4.TransactionWitnessSet.from_hex(witnessSetHex); for (const vkeyWitness of iterateLenGet(witnessSet.vkeys())) { fixedTransaction.add_vkey_witness(vkeyWitness); } + for (const bootstrapWitness of iterateLenGet(witnessSet.bootstraps())) { + fixedTransaction.add_bootstrap_witness(bootstrapWitness); + } return fixedTransaction.to_hex(); }); } diff --git a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/connector.js b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/connector.js index ca804b84c8..8f8f56a37c 100644 --- a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/connector.js +++ b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/connector.js @@ -32,10 +32,13 @@ import { type SigningMessage, } from '../../../connector/types'; import { RustModule } from '../../../../../app/api/ada/lib/cardanoCrypto/rustLoader'; -import { mergeWitnessSets } from '../../../../../app/api/ada/transactions/utils'; import { hexToBytes } from '../../../../../app/coreUtils'; import { Logger } from '../../../../../app/utils/logging'; import { walletSignData, encodeHardwareWalletSignResult } from '../../../../../app/api/ada'; +import { + transactionHexAddSignaturesFromWitnessSetHex, + transactionHexToWitnessSet +} from '../../../../../app/api/ada/lib/cardanoCrypto/utils'; type RpcUid = number; @@ -197,36 +200,23 @@ export const UserSignConfirm: HandlerType< rpcResponse(request.tabId, request.uid, resp); } else { const resultWitnessSetHex: string = resp.ok; + const fullTxHex: string = RustModule.WasmScope(Scope => { + // tx string is either a transaction hex or transaction body hex + try { + // Try parsing as transaction + return Scope.WalletV4.FixedTransaction.from_hex(tx).to_hex(); + } catch { + // Try parsing as transaction body + return Scope.WalletV4.FixedTransaction.new_from_body_bytes(hexToBytes(tx)).to_hex(); + } + }); + // Securely inject signatures into raw tx (to preserve cbor set tags compatibility) + const signedTxHex = transactionHexAddSignaturesFromWitnessSetHex(fullTxHex, resultWitnessSetHex); if (returnTx) { - const inputWitnessSetHex: string | null = RustModule.WasmScope(Scope => { - try { - const fullTx = Scope.WalletV4.FixedTransaction.from_hex(tx); - return fullTx.witness_set().to_hex(); - } catch { - // no input witness set - return null; - } - }); - const isFullTx = inputWitnessSetHex != null; - const finalWitnessSetHex = inputWitnessSetHex == null - ? resultWitnessSetHex - : mergeWitnessSets(inputWitnessSetHex, resultWitnessSetHex); - RustModule.WasmScope(Scope => { - let fullTx; - if (isFullTx) { - fullTx = Scope.WalletV4.FixedTransaction.from_hex(tx); - fullTx.set_witness_set(hexToBytes(finalWitnessSetHex)); - } else { - fullTx = Scope.WalletV4.FixedTransaction.new( - hexToBytes(tx), - hexToBytes(finalWitnessSetHex), - true, - ); - } - rpcResponse(request.tabId, request.uid, { ok: fullTx.to_hex() }); - }); + rpcResponse(request.tabId, request.uid, { ok: signedTxHex }); } else { - rpcResponse(request.tabId, request.uid, { ok: resultWitnessSetHex }); + // Extract raw witness set from signed tx carefully (to preserve cbor set tags compatibility) + rpcResponse(request.tabId, request.uid, { ok: transactionHexToWitnessSet(signedTxHex) }); } } } diff --git a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js index 4527ef73f0..eb28495a1a 100644 --- a/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js +++ b/packages/yoroi-extension/chrome/extension/background/handlers/yoroi/transaction.js @@ -7,7 +7,7 @@ import { } from '../../../connector/api'; import { transactionHexToHash, - transactionHexAddVkeyWitnessesFromWitnessSetHex, + transactionHexAddSignaturesFromWitnessSetHex, } from '../../../../../app/api/ada/lib/cardanoCrypto/utils'; import { asGetSigningKey, @@ -47,7 +47,7 @@ export const SignTransaction: HandlerType< partialSign: false }, ); - return transactionHexAddVkeyWitnessesFromWitnessSetHex(transactionHex, signedWitnessSetHex); + return transactionHexAddSignaturesFromWitnessSetHex(transactionHex, signedWitnessSetHex); } catch (error) { return { error: error.message }; } From 8144ecf6b68668ea3c0b0e8b6e4b2dc5e77a7521 Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Thu, 23 Jan 2025 19:02:29 +0300 Subject: [PATCH 6/8] eutxo-lib update, costmodels fix --- .../app/api/ada/transactions/shelley/transactions.js | 10 ++++------ packages/yoroi-extension/package-lock.json | 8 ++++---- packages/yoroi-extension/package.json | 2 +- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js index b08b7d39ca..29ec5afe30 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js @@ -51,7 +51,7 @@ import type { TxMint } from '@emurgo/yoroi-eutxo-txs/dist/tx-builder'; // unmagic this -const COSMODELS = 'a30098a61a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a032e93af1937fd0a0198af1a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a029901291a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a0001e143191c893903831906b419022518391a00014f580001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a0001e143191c893903831906b419022518391a00014f5800011a0001614219020700011a000122c118201a00014f581a0001e143191c893903831906b419022518391a00014f580001011a00014f581a0001e143191c893903831906b419022518391a00014f5800011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a193e801864193e8018641a000eaf1f121a002a6e06061a0006be98011a0321aac7190eac121a00041699121a048e466e1922a4121a0327ec9a121a001e743c18241a0031410f0c1a000dbf9e011a09f2f6d31910d318241a0004578218241a096e44021967b518241a0473cee818241a13e62472011a0f23d40118481a00212c5618481a0022814619fc3b041a00032b00192076041a0013be0419702c183f00011a000f59d919aa6718fb00011a000187551902d61902cf00011a000187551902d61902cf00011a000187551902d61902cf00011a0001a5661902a800011a00017468011a00044a391949a000011a0002bfe2189f01011a00026b371922ee00011a00026e9219226d00011a0001a3e2190ce2011a00019e4919028f011a001df8bb195fc803'; +const COSTMODELS = 'a30098a61a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a032e93af1937fd0a0198af1a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a029901291a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a0001e143191c893903831906b419022518391a00014f580001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a0001e143191c893903831906b419022518391a00014f5800011a0001614219020700011a000122c118201a00014f581a0001e143191c893903831906b419022518391a00014f580001011a00014f581a0001e143191c893903831906b419022518391a00014f5800011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a193e801864193e8018641a000eaf1f121a002a6e06061a0006be98011a0321aac7190eac121a00041699121a048e466e1922a4121a0327ec9a121a001e743c18241a0031410f0c1a000dbf9e011a09f2f6d31910d318241a0004578218241a096e44021967b518241a0473cee818241a13e62472011a0f23d40118481a00212c5618481a0022814619fc3b041a00032b00192076041a0013be0419702c183f00011a000f59d919aa6718fb00011a000187551902d61902cf00011a000187551902d61902cf00011a000187551902d61902cf00011a0001a5661902a800011a00017468011a00044a391949a000011a0002bfe2189f01011a00026b371922ee00011a00026e9219226d00011a0001a3e2190ce2011a00019e4919028f011a001df8bb195fc803'; /** * based off what the cardano-wallet team found worked empirically @@ -668,7 +668,7 @@ export async function newAdaUnsignedTxFromUtxo( // must set TTL before specifying change address, otherwise the TX builder // miscalculate the tx fee by several bytes fewer - txBuilder.setTtl(absSlotNumber.plus(defaultTtlOffset).toNumber()); + await txBuilder.setTtl(absSlotNumber.plus(defaultTtlOffset).toNumber()); const changeAddress = changeAdaAddr && await LibWalletAddress.from( @@ -682,7 +682,7 @@ export async function newAdaUnsignedTxFromUtxo( ); if (extraWitnessDatumsPresent) { - await txBuilder.calcScriptDataHash(COSMODELS); + await txBuilder.calcScriptDataHash(COSTMODELS); } try { @@ -1002,9 +1002,7 @@ async function newAdaUnsignedTxFromUtxoForConnector( throw error; } - await txBuilder.prepareForPlutus( - protocolParams.networkId > 0 ? 'vasil' : 'default' - ); + await txBuilder.prepareForPlutus(COSTMODELS); const changeAddress = changeAdaAddr && await LibWalletAddress.from( diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 322d242bc3..2674c2bb8c 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -19,7 +19,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "0.0.5", + "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.1", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", @@ -2533,9 +2533,9 @@ } }, "node_modules/@emurgo/yoroi-eutxo-txs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-0.0.5.tgz", - "integrity": "sha512-yhJOkRs3aiWIp0HrWv2HnNC3fnXecVt3zlHAY5KZmfTDY9JdR31WcDDrOB7U0zGHzshCCoUn2W8AkZCIEaO58Q==", + "version": "1.0.5-beta.1", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.5-beta.1.tgz", + "integrity": "sha512-ifVQDqgMcL0RVs3WQvgMTGtzJ3UMkITrSVQ4VTrNrCLUsudqGPd2JFQ7LGEp15SVY4Gbo+KzFggZlm1FIOJuRA==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "7.1.3", "@emurgo/cross-csl-core": "6.2.1", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index fb472380e2..ffb1bec05e 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "0.0.5", + "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.1", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", From d4abacd1e99ceb2e34ec1ae24cac1c3e41421d5f Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Tue, 18 Feb 2025 17:37:46 +0300 Subject: [PATCH 7/8] fixes --- .../app/api/ada/transactions/shelley/transactions.js | 2 -- .../chrome/extension/background/handlers/content/rpc.js | 1 + .../yoroi-extension/chrome/extension/connector/api.js | 7 ++++--- packages/yoroi-extension/package-lock.json | 8 ++++---- packages/yoroi-extension/package.json | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js index 29ec5afe30..a90f7807a5 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.js @@ -1002,8 +1002,6 @@ async function newAdaUnsignedTxFromUtxoForConnector( throw error; } - await txBuilder.prepareForPlutus(COSTMODELS); - const changeAddress = changeAdaAddr && await LibWalletAddress.from( changeAdaAddr.address, diff --git a/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js b/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js index d24e3cbb86..3cc93a2d03 100644 --- a/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js +++ b/packages/yoroi-extension/chrome/extension/background/handlers/content/rpc.js @@ -425,6 +425,7 @@ const Handlers = Object.freeze({ const networkInfo = wallet.getParent().getNetworkInfo(); const adaApi = new AdaApi(); const foreignUtxoFetcher = adaApi.createForeignUtxoFetcher(stateFetcher, networkInfo); + // only used for experimental const resp = await connectorCreateCardanoTx( wallet, null, diff --git a/packages/yoroi-extension/chrome/extension/connector/api.js b/packages/yoroi-extension/chrome/extension/connector/api.js index e35b43d802..e145ab42ff 100644 --- a/packages/yoroi-extension/chrome/extension/connector/api.js +++ b/packages/yoroi-extension/chrome/extension/connector/api.js @@ -792,6 +792,7 @@ async function __connectorSignCardanoTx( return signedTx.witness_set().to_hex(); } +// only used for experimental export async function connectorCreateCardanoTx( publicDeriver: PublicDeriver<>, password: ?string, @@ -872,7 +873,7 @@ export async function connectorSendTxCardano( body: { network: wallet.getParent().getNetworkInfo(), id: transactionHexToHash(signedTxHex), - encodedTx: bytesToHex(signedTxHex), + encodedTx: hexToBytes(signedTxHex), }, lastLaunchVersion: await localStorage.getLastLaunchVersion() ?? '', currentLocale: await localStorage.getUserLocale() ?? '', @@ -929,8 +930,8 @@ export async function connectorRecordSubmittedCardanoTransaction( let isIntraWallet = true; const txBody = tx.body(); - const fee = new MultiToken([], defaults); - fee.joinAddMutable(fee.createDefaultEntry(new BigNumber(txBody.fee().to_str()))); + const mt = new MultiToken([], defaults); + const fee = mt.add(mt.createDefaultEntry(new BigNumber(txBody.fee().to_str()))); const usedUtxos = []; for (const input of iterateLenGet(txBody.inputs())) { diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index 2674c2bb8c..c3d3d2e8f2 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -19,7 +19,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.1", + "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.2", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", @@ -2533,9 +2533,9 @@ } }, "node_modules/@emurgo/yoroi-eutxo-txs": { - "version": "1.0.5-beta.1", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.5-beta.1.tgz", - "integrity": "sha512-ifVQDqgMcL0RVs3WQvgMTGtzJ3UMkITrSVQ4VTrNrCLUsudqGPd2JFQ7LGEp15SVY4Gbo+KzFggZlm1FIOJuRA==", + "version": "1.0.5-beta.2", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.5-beta.2.tgz", + "integrity": "sha512-/KJqGdlSbYMpKa0LC7QYV966VKtIuXfBrk7ZhziOPjOc+FTjsEclsWmMeT3kjo6kHC8xA7XLwYg+7oRMCMcX/w==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "7.1.3", "@emurgo/cross-csl-core": "6.2.1", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index ffb1bec05e..2da0ba457d 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.1", + "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.2", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", From e96c3910a3c6a24e1ab1a495ff2d3d3940422c9c Mon Sep 17 00:00:00 2001 From: vantuz-subhuman Date: Wed, 19 Feb 2025 18:31:52 +0300 Subject: [PATCH 8/8] test fixes --- .../yoroi-extension/app/api/ada/index.test.js | 55 +++++-------------- .../transactions/shelley/transactions.test.js | 50 ++++++++++------- packages/yoroi-extension/package-lock.json | 8 +-- packages/yoroi-extension/package.json | 2 +- 4 files changed, 49 insertions(+), 66 deletions(-) diff --git a/packages/yoroi-extension/app/api/ada/index.test.js b/packages/yoroi-extension/app/api/ada/index.test.js index d1846cd8b7..ea8e11bc9a 100644 --- a/packages/yoroi-extension/app/api/ada/index.test.js +++ b/packages/yoroi-extension/app/api/ada/index.test.js @@ -498,7 +498,7 @@ describe('app/api/ada/index', () => { { identifier: '', networkId: 300, - amount: new BigNumber('8812367') + amount: new BigNumber('8820947') }, { amount: new BigNumber('45000000'), @@ -508,7 +508,7 @@ describe('app/api/ada/index', () => { ] ); - expect(response.unsignedTx.get_fee_if_set()?.to_str()).toEqual('187633'); + expect(response.unsignedTx.get_fee_if_set()?.to_str()).toEqual('179053'); function cmpOutputs(o1: any, o2: any): number { if (o1.address > o2.address) { @@ -530,7 +530,7 @@ describe('app/api/ada/index', () => { collateral_return: null, current_treasury_value: null, donation: null, - fee: '187633', + fee: '179053', inputs: [ { index: 1, @@ -552,26 +552,12 @@ describe('app/api/ada/index', () => { { address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', amount: { - coin: '1000000', - multiasset: null - }, - plutus_data: null, - script_ref: null - }, - { - address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', - amount: { - coin: '1000000', - multiasset: null - }, - plutus_data: null, - script_ref: null - }, - { - address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', - amount: { - coin: '1000000', - multiasset: null + coin: '1155080', + multiasset: { + 'c85f714f2187021c7bab53741f659d0c5b1a6e7529d32b7794ff051c': { + '474f4c44': '45000000', + }, + } }, plutus_data: null, script_ref: null @@ -579,8 +565,8 @@ describe('app/api/ada/index', () => { { address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', amount: { - coin: '1000000', - multiasset: null + coin: '2000000', + multiasset: null, }, plutus_data: null, script_ref: null @@ -588,8 +574,8 @@ describe('app/api/ada/index', () => { { address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', amount: { - coin: '1000000', - multiasset: null + coin: '2000000', + multiasset: null, }, plutus_data: null, script_ref: null @@ -597,20 +583,7 @@ describe('app/api/ada/index', () => { { address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', amount: { - coin: '1155080', - multiasset: { - 'c85f714f2187021c7bab53741f659d0c5b1a6e7529d32b7794ff051c': { - '474f4c44': '45000000', - }, - }, - }, - plutus_data: null, - script_ref: null, - }, - { - address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn', - amount: { - coin: '2657287', + coin: '3665867', multiasset: null }, plutus_data: null, diff --git a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.test.js b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.test.js index adba8312e1..f4708df65b 100644 --- a/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.test.js +++ b/packages/yoroi-extension/app/api/ada/transactions/shelley/transactions.test.js @@ -405,23 +405,23 @@ describe('Create unsigned TX from UTXO', () => { await testTxConstruction([0.2, 0.2, 0.2, 0.2, 0.2], { inputs: [utxos[3]], - fee: '1342', + fee: '1138', sumInputs: '30000000', - sumOutputs: '29998658', + sumOutputs: '29998862', }); await testTxConstruction([0.7, 0.7, 0.7, 0.7, 0.7], { inputs: [utxos[2]], - fee: '1414', + fee: '1210', sumInputs: '10000001', - sumOutputs: '9998587', + sumOutputs: '9998791', }); await testTxConstruction([0.7, 0.2, 0.7, 0.2, 0.7], { inputs: [utxos[2]], - fee: '1414', + fee: '1210', sumInputs: '10000001', - sumOutputs: '9998587', + sumOutputs: '9998791', }); }); @@ -463,16 +463,25 @@ describe('Create unsigned TX from UTXO', () => { ); // always take utxos[4], take either utxos[2] or utxos[3] randomly + let variant; try { - expect(new Set([utxos[4], utxos[2]])).toEqual(new Set(unsignedTxResponse.senderUtxos)); - expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('12000002'); - expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('11998036'); - expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1966'); + expect(new Set(unsignedTxResponse.senderUtxos)).toEqual(new Set([utxos[2], utxos[4]])); + variant = 1; } catch { - expect(new Set([utxos[4], utxos[3]])).toEqual(new Set(unsignedTxResponse.senderUtxos)); + expect(new Set(unsignedTxResponse.senderUtxos)).toEqual(new Set([utxos[3], utxos[4]])); + variant = 2; + } + + if (variant === 1) { + expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('12000002'); + expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('11998240'); + expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1762'); + } else if (variant === 2) { expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('32000001'); - expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('31998319'); - expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1682'); + expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('31998523'); + expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1478'); + } else { + throw new Error('Invalid test variant: ' + variant); } function assertMultiAsset(masset: any, policy: string, name: string, amount: string): void { @@ -494,8 +503,9 @@ describe('Create unsigned TX from UTXO', () => { ); const tx = unsignedTxResponse.txBuilder.build(); + expect(tx.outputs().len()).toEqual(4); assertMultiAsset( - tx.outputs().get(4).amount().multiasset(), + tx.outputs().get(2).amount().multiasset(), assetSplit.policyId, assetSplit.name, '234', @@ -1048,12 +1058,12 @@ describe('Create signed transactions', () => { const txBody = unsignedTxResponse.txBuilder.build(); expect(txBody.withdrawals()?.len()).toEqual(1); const fee = txBody.fee().to_str(); - expect(fee).toEqual('1972'); - expect(txBody.outputs().len()).toEqual(6); - expect(txBody.outputs().get(5).amount().coin().to_str()).toEqual( + expect(fee).toEqual('1712'); + expect(txBody.outputs().len()).toEqual(4); + expect(txBody.outputs().get(3).amount().coin().to_str()).toEqual( new BigNumber(addressedUtxos[3].amount) .minus(fee) - .minus(5_000_000) // collateral + .minus(6_000_000) // collateral .plus(withdrawAmount) .plus(protocolParams.keyDeposit) .toString() @@ -1066,8 +1076,8 @@ describe('Create signed transactions', () => { ].sort(); expect(witArray).toEqual([ - '82582001c01f8b958699ae769a246e9785db5a70e023977ea4b856dfacf23c23346caf5840b84f78dabde17e36fbf2fdf683c6aae459288325afb1cd6873e971c408d991c9e8dfcd742c62773276edfb32f40100e50f6949d8f13e34f10bc58354fad3fe0c', - '82582038c14a0756e1743081a8ebfdb9169b11283a7bf6c38045c4c4a5e62a7689639d5840eba05e14f29629cd90ea8cf0553462714227001c4e0470f278ea84afe3ecedcae4cd5d3fdc73b058991ed79a36829c4889827f2ba43ae6ace6019b8064e8bd0c', + '82582001c01f8b958699ae769a246e9785db5a70e023977ea4b856dfacf23c23346caf5840ee22be758cae48eb64c07c201791ecc5b21a3a6c8d3dc8f85073bf32552f605e7c866ce4a23fc0e95ffe8d51912e9d7ed02e3f197174ac556f695b18a5abee04', + '82582038c14a0756e1743081a8ebfdb9169b11283a7bf6c38045c4c4a5e62a7689639d5840b06f4d4e7127d21368dfac2210f2e7bf7fa059f9c52481d0cc4f96552177c1d47ace7017851bb055abd0a7a74c4940f0e8d8cc2d7d461bec30a3663716b9a20a', ]); }); }); diff --git a/packages/yoroi-extension/package-lock.json b/packages/yoroi-extension/package-lock.json index c3d3d2e8f2..e7fa4575af 100644 --- a/packages/yoroi-extension/package-lock.json +++ b/packages/yoroi-extension/package-lock.json @@ -19,7 +19,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.2", + "@emurgo/yoroi-eutxo-txs": "1.0.5", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated", @@ -2533,9 +2533,9 @@ } }, "node_modules/@emurgo/yoroi-eutxo-txs": { - "version": "1.0.5-beta.2", - "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.5-beta.2.tgz", - "integrity": "sha512-/KJqGdlSbYMpKa0LC7QYV966VKtIuXfBrk7ZhziOPjOc+FTjsEclsWmMeT3kjo6kHC8xA7XLwYg+7oRMCMcX/w==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@emurgo/yoroi-eutxo-txs/-/yoroi-eutxo-txs-1.0.5.tgz", + "integrity": "sha512-+RKvkAmEVhGypC7CRyuEBFBz5NgrwHXIFZthPI96EhtyYi22T7lRpFOB3TtDNuKNQPqRN52GWe/PbmY+nLey+g==", "dependencies": { "@cardano-foundation/ledgerjs-hw-app-cardano": "7.1.3", "@emurgo/cross-csl-core": "6.2.1", diff --git a/packages/yoroi-extension/package.json b/packages/yoroi-extension/package.json index 2da0ba457d..0c0714c0f1 100644 --- a/packages/yoroi-extension/package.json +++ b/packages/yoroi-extension/package.json @@ -153,7 +153,7 @@ "@emurgo/cip14-js": "2.0.0", "@emurgo/cip4-js": "1.0.5", "@emurgo/cross-csl-browser": "6.2.1", - "@emurgo/yoroi-eutxo-txs": "1.0.5-beta.2", + "@emurgo/yoroi-eutxo-txs": "1.0.5", "@emurgo/yoroi-lib": "2.2.6", "@ledgerhq/hw-transport-u2f": "5.36.0-deprecated", "@ledgerhq/hw-transport-webauthn": "5.36.0-deprecated",