tests: remove multisig tests from test_jade.py
What changed, and why it matters
This commit only deletes test files and test code for multisignature wallet features from the Blockstream Jade test suite. It does not change the actual firmware, runtime code, or how the device handles multisig wallets. There is no security fix or vulnerability introduced here—only a cleanup of automated tests.
No security action required. If the removal was unintentional, restore the test files; if intentional, document the rationale in the commit message or project notes so future reviewers understand why multisig tests were dropped.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit removes 1,826 lines across 62 files, all under test_data/ and within test_jade.py. The deleted content consists of multisig registration test vectors, malformed multisig file test cases, and Python test functions exercising register_multisig(), register_multisig_file(), get_receive_address(), and related APIs. No source code in the firmware or library implementation is modified. The change is purely a reduction in test coverage for multisig functionality.
Changed components
test_jade.pytest_data/multisig_*.dattest_data/multisig_*.jsonInspect captured patch +0 / −1826
### test_data/multisig_bad_file_derivation.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 3
-Derivation: m/48'/0'/0'/2'/0/1/2/3/4/5/6/7/8/9/1/2/3/4/5/6/7/8/9
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_derivation.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_derivation.dat"
- },
- "expected_error": "Invalid derivation path"
-}
### test_data/multisig_bad_file_derivation2.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 3
-Derivation: m/48/0J/K/silly/2
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_derivation2.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_derivation2.dat"
- },
- "expected_error": "Invalid derivation path"
-}
### test_data/multisig_bad_file_duplicate_field1.dat
@@ -1,12 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File
-Name: Jade File Test
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_duplicate_field1.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_duplicate_field1.dat"
- },
- "expected_error": "Invalid multisig file"
-}
### test_data/multisig_bad_file_duplicate_field2.dat
@@ -1,12 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-Policy: 2 of 3
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_duplicate_field2.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_duplicate_field2.dat"
- },
- "expected_error": "Invalid multisig file"
-}
### test_data/multisig_bad_file_duplicate_field3.dat
@@ -1,12 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 2
-Format: P2WSH
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_duplicate_field3.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_duplicate_field3.dat"
- },
- "expected_error": "Invalid multisig file"
-}
### test_data/multisig_bad_file_field_missing1.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-# Name: Jade File Test
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_field_missing1.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_field_missing1.dat"
- },
- "expected_error": "Insufficient information records"
-}
### test_data/multisig_bad_file_field_missing2.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-# Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_field_missing2.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_field_missing2.dat"
- },
- "expected_error": "Insufficient information records"
-}
### test_data/multisig_bad_file_field_missing3.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 2
-# Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_field_missing3.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_field_missing3.dat"
- },
- "expected_error": "Insufficient information records"
-}
### test_data/multisig_bad_file_field_missing4.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-# Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_field_missing4.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_field_missing4.dat"
- },
- "expected_error": "Insufficient information records"
-}
### test_data/multisig_bad_file_format.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 3
-Derivation: m/48'/0'/0'/2'
-Format: P2WPKH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_format.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_format.dat"
- },
- "expected_error": "Invalid multisig format"
-}
### test_data/multisig_bad_file_not_in.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 3
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_not_in.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_not_in.dat"
- },
- "expected_error": "Failed to validate co-signers"
-}
### test_data/multisig_bad_file_policy.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 3 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_policy.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_policy.dat"
- },
- "expected_error": "Invalid multisig policy"
-}
### test_data/multisig_bad_file_policy2.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 3 of 17
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_policy2.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_policy2.dat"
- },
- "expected_error": "Invalid multisig policy"
-}
### test_data/multisig_bad_file_policy3.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2/3
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_policy3.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_policy3.dat"
- },
- "expected_error": "Invalid multisig policy"
-}
### test_data/multisig_bad_file_signers1.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_signers1.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_signers1.dat"
- },
- "expected_error": "Invalid number of signers"
-}
### test_data/multisig_bad_file_signers2.dat
@@ -1,11 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 2 of 4
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_signers2.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_signers2.dat"
- },
- "expected_error": "Invalid number of signers"
-}
### test_data/multisig_bad_file_sorted.dat
@@ -1,12 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 3 of 3
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-Sorted: Maybe
-
-B237FE9D: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
-
### test_data/multisig_bad_file_sorted.json
@@ -1,6 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_bad_file_sorted.dat"
- },
- "expected_error": "Invalid sorted flag"
-}
### test_data/multisig_file_bw.dat
@@ -1,14 +0,0 @@
-# BlueWallet Multisig setup file
-# this file contains only public keys and is safe to
-# distribute among cosigners
-#
-Name: Jade File Test
-Policy: 1 of 3
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-B237FE9D: Zpub73XMvHZfpJ9CF85L8MPDMpFEBLUbYFoJuwaoiqaPaxiM63bz4UbHkupFaPckzVc7rSNnDqpkAR1NBnvCuqhKq9cRL97ao5qoYnreX4D9XZ8
-
-249192D2: Zpub75A9iMaNq4BkAnQEcGwzLaXFaZYTtkxzxJd44pzov8ANAfMU9hEij2UzwavF3toNgyt7YBV7D14Je5Resqv1HdH39kPdLHAVuhBwqf7EJQm
-
-E3EBCC79: Zpub73tYrs7quETG9dFvPU76eTCwEz34g68rByS7WnkiipwKQnmBzyzfJRg2ppWxyXvXnkpKnbiHacFZZDSFr8zPg3J657ZEc3gyVzZXCNV5bnR
### test_data/multisig_file_bw.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_bw.dat"
- },
- "expected_result": {
- "multisig_name": "Jade_File_Test",
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 1,
- "num_signers": 3
- }
-}
### test_data/multisig_file_jade.dat
@@ -1,10 +0,0 @@
-# Exported by Blockstream Jade
-Name: Jade_File_Test
-Policy: 1 of 2
-Format: P2WSH
-Sorted: False
-BlindingKey: 3172ae4169b206645a52df2ef79dff7a8c23412e6c0f129ef92e3ec570c5e2d1
-Derivation: m/48'/0'/0'/2'
-e3ebcc79: xpub6DKw8J3a2uow2TiJn64sQCg8BFhuaVUG3Uk12jhQb3M9gQZpjGHFyBVpyheKRHPnk1WjR4X3n59xfUbN7X1Qw5pDVy3z2pb14pAMqKjDQnF
-Derivation: m/48'/0'/0'/2'
-8d688ea0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_jade.json
@@ -1,13 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_jade.dat"
- },
- "expected_result": {
- "multisig_name": "Jade_File_Test",
- "variant": "wsh(multi(k))",
- "sorted": false,
- "master_blinding_key": "3172ae4169b206645a52df2ef79dff7a8c23412e6c0f129ef92e3ec570c5e2d1",
- "threshold": 1,
- "num_signers": 2
- }
-}
### test_data/multisig_file_nunchuk.dat
@@ -1,13 +0,0 @@
-# Exported from Nunchuk
-Name: Jade File Test
-Policy: 2 of 3
-Format: P2WSH
-
-Derivation: m/48h/0h/0h/2h
-b237fe9d: xpub6CxkBiVPwyVs7xXiWyLz7ZiR7c9SSf8imSthEnX5TB8BMfQcnkstRfe3jGk7SF5Noh5BrJdWMsumJ45KBDiM6C8YkzcLDrjq7cTV9z2gWVG
-
-Derivation: m/48h/0h/0h/2h
-e3ebcc79: xpub6DKw8J3a2uow2TiJn64sQCg8BFhuaVUG3Uk12jhQb3M9gQZpjGHFyBVpyheKRHPnk1WjR4X3n59xfUbN7X1Qw5pDVy3z2pb14pAMqKjDQnF
-
-Derivation: m/48h/0h/0h/2h
-67f90ffc: xpub6CR6P93rHbYagohgWYgVomk4scHtFreyYz4BiVn4J5VsmEkWSXw1QgyLrfEJ7kTwN3mhFWSrEMBaFNyCRjtaHe6BQcjXmSGxY6AyhXor6zp
### test_data/multisig_file_nunchuk.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_nunchuk.dat"
- },
- "expected_result": {
- "multisig_name": "Jade_File_Test",
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 2,
- "num_signers": 3
- }
-}
### test_data/multisig_file_p2sh-p2wsh.dat
@@ -1,7 +0,0 @@
-Name: Test 17characters
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/1'
-Format: P2SH-P2WSH
-Sorted: False
-E3EBCC79: xpub6EWJLhf2M3Xb7VA48uSBTHy2FFhu7rzZQyraJxWCCjPPpS1Jms4k7yLsA3v82b3sCTVPFKRqkwWKnub9nNegJsRW757zrB6J6e1pinjzRzo
-8D688EA0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_p2sh-p2wsh.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_p2sh-p2wsh.dat"
- },
- "expected_result": {
- "multisig_name": "Test_17characte",
- "variant": "sh(wsh(multi(k)))",
- "sorted": false,
- "threshold": 2,
- "num_signers": 2
- }
-}
### test_data/multisig_file_p2sh.dat
@@ -1,7 +0,0 @@
-Name: Test p2sh with very long name
-Policy: 2 of 2
-Derivation: m/48'/0'/0'/0'
-Format: P2SH
-Sorted: True
-E3EBCC79: xpub6EWJLhf2M3Xb6uBhFYuxCDQfxoB58GtJomaCUiVfWGPwX7YuXvzmf8FttVw94WfkLLcsg54HM8xTaBC3RehKasxVURatHY88b4wFX3uRRU9
-8D688EA0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_p2sh.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_p2sh.dat"
- },
- "expected_result": {
- "multisig_name": "Test_p2sh_with_",
- "variant": "sh(multi(k))",
- "sorted": true,
- "threshold": 2,
- "num_signers": 2
- }
-}
### test_data/multisig_file_p2wsh-p2sh.dat
@@ -1,6 +0,0 @@
-Name: Test of 16 chars
-Policy: 1 of 2
-Derivation: m/48'/0'/0'/1'
-Format: P2WSH-P2SH
-E3EBCC79: xpub6EWJLhf2M3Xb7VA48uSBTHy2FFhu7rzZQyraJxWCCjPPpS1Jms4k7yLsA3v82b3sCTVPFKRqkwWKnub9nNegJsRW757zrB6J6e1pinjzRzo
-8D688EA0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_p2wsh-p2sh.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_p2wsh-p2sh.dat"
- },
- "expected_result": {
- "multisig_name": "Test_of_16_char",
- "variant": "sh(wsh(multi(k)))",
- "sorted": true,
- "threshold": 1,
- "num_signers": 2
- }
-}
### test_data/multisig_file_p2wsh.dat
@@ -1,6 +0,0 @@
-Name: Test of 15chars
-Policy: 1 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-E3EBCC79: xpub6EWJLhf2M3XbBH22hCW69RL6gvfeUyLFfhLBtAH7W8ci4DgTCmEmoDEqkYVME5qAx6DtUG82h4JeNPHV33AoD93uGM7MzvuoJNvBmStqhwc
-8D688EA0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_p2wsh.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_p2wsh.dat"
- },
- "expected_result": {
- "multisig_name": "Test_of_15chars",
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 1,
- "num_signers": 2
- }
-}
### test_data/multisig_file_sparrow.dat
@@ -1,10 +0,0 @@
-# Passport Multisig setup file (created by Sparrow)
-#
-Name: Jade File Test
-Policy: 3 of 3
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-
-E3EBCC79: xpub6EWJLhf2M3XbBH22hCW69RL6gvfeUyLFfhLBtAH7W8ci4DgTCmEmoDEqkYVME5qAx6DtUG82h4JeNPHV33AoD93uGM7MzvuoJNvBmStqhwc
-249192D2: xpub6EbXynW6xjYR3crcztum6KzSWqDJoAJQoovwamwVnLaCSHA6syXKPnJo6U3bVeGdeEaXAeHsQTxhkLam9Dw2YfoAabtNm44XUWnnUZfHJRq
-67F90FFC: xpub6EHuWWrYd8bp5FS1XAZsMPkmCqLSjpULmygWqAqWRCCjSWQwz6ntq5KnuQnL23No2Jo8qdp48PrL8SVyf14uBrynurgPxonvnX6R5pbit3w
### test_data/multisig_file_sparrow.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_sparrow.dat"
- },
- "expected_result": {
- "multisig_name": "Jade_File_Test",
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 3,
- "num_signers": 3
- }
-}
### test_data/multisig_file_specter.dat
@@ -1,7 +0,0 @@
-Name: Jade File Test
-Policy: 1 of 2
-Derivation: m/48'/0'/0'/2'
-Format: P2WSH
-Sorted: False
-E3EBCC79: xpub6DKw8J3a2uow2TiJn64sQCg8BFhuaVUG3Uk12jhQb3M9gQZpjGHFyBVpyheKRHPnk1WjR4X3n59xfUbN7X1Qw5pDVy3z2pb14pAMqKjDQnF
-8D688EA0: xpub6Ch41kHXUBgLjAPHeSZCC1v8emQ2x2BhDcRHcxbhSmqTV8AmGYh8xQdLzM5uPpvScYAMjcMFHL983xvuqYWtW1athULQ2W9mV37ZKbkMjML
### test_data/multisig_file_specter.json
@@ -1,12 +0,0 @@
-{
- "input": {
- "multisig_file": "multisig_file_specter.dat"
- },
- "expected_result": {
- "multisig_name": "Jade_File_Test",
- "variant": "wsh(multi(k))",
- "sorted": false,
- "threshold": 1,
- "num_signers": 2
- }
-}
### test_data/multisig_reg_15of15.json
@@ -1,330 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "test_multisig",
- "descriptor": {
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 15,
- "signers": [
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 1
- ],
- "xpub": "tpubD9wHvxq4yutRMa2nmuFG1V56vbfT5o1vvQCNBwGLwCimjnKyTYTWUXAdVYEjqDhJ67Ass4bLupZcuuPwtMJLzdDiGeASdprQDtp9WF4E9po",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2
- ],
- "xpub": "tpubD9wHvxq4yutRNzrVaW7GGUQqHXCehqZB7eKxsi7cS9dWEZS28QQDSjxdrP8WXyMjRMLVPDccStkUTGon14mC1KTfS1xjkKCiw99w5yVnq7v",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 3
- ],
- "xpub": "tpubD9wHvxq4yutRTiMDtBSnjcXvaFSzcWcf7AhwXj1wpQujGxUYUxCYcayxrgNAM6jgeeqi5Jww7jnaSHnQnqAhkEWTrY79kR9rVB91ozjDeyX",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 4
- ],
- "xpub": "tpubD9wHvxq4yutRW5G11rXgZGJxVYxWK274XqXqMbxvj5nLbMrB7bEZWyNKcxxSy5yc8astSfzxA83M1D1C7ygXsuZKhH26qWfzJK1cTP4J44U",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 5
- ],
- "xpub": "tpubD9wHvxq4yutRYkHhxXUvzxdUfZDSz29FfsHeqCjBi4PM7GVzX2CVrdoHH1E1PjpBQW6Ry5eoezYvq5AUTS8ChV5AjT4DRUpkUQpK8i3rx9B",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 6
- ],
- "xpub": "tpubD9wHvxq4yutRaYSLLTxkMuSGafH6NyQMJeGhqsug25o2p9KMNqZAcSV1eYcX31eVXf5vS8MYUPp5Cr2HHAkmpgAHQHa7iG4bqW6ajLq6WVk",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 7
- ],
- "xpub": "tpubD9wHvxq4yutRdcZmN6V4PPtQ5JwYfWPQzS38BqzR71ApcxNR34ZZ3snA6gYLyoaXAWMhBvQUK2hXLGpgcfdELGn5cRfgXm4vXWpu1SwZ2Ei",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 8
- ],
- "xpub": "tpubD9wHvxq4yutRfj84ykuiUivBTsURBVeevqM9TTfuxJtDoe8yQynSVSD5mXoJX5RVrCcuV9i7vJjTFt2yhSDTuFwGoZnyQnRzS9haZG64JwH",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 9
- ],
- "xpub": "tpubD9wHvxq4yutRiZB4ZzbewJVyDeMfdUdvoh4rj4pLbDQwLzSNFhvH8ZJU6gV1XjALj7bq9XVEx5ErBGAa26vrQJ8qJqsxKPFjKvtBf9paGUm",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 10
- ],
- "xpub": "tpubD9wHvxq4yutRjN2hsSaQwNGhfJDZpg5kG42PWfFpVBW5eKayNsyPagQwCq9rbyYMYm1JQg3mspo6MfRRVbvxtBaUPGLmyuAB1ShTQStQapV",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 11
- ],
- "xpub": "tpubD9wHvxq4yutRovyjNTpKzEXQNofxLUk2Rm2ApTdjYVgg9AGgXb455h7kfBM2tyxEL4Eqs3qU55dk6Go7zdGrAi6wrT4PaLeDZR73at6dwZh",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 12
- ],
- "xpub": "tpubD9wHvxq4yutRpR8ThUyXpkM4PZaDaC6HWgUizZJT8Uf3aLd3BL1yvkAaWYR777G37MkikaNndqJ8gEsiJwukphx1fLqgS7FG8PUtRbrFXAh",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 13
- ],
- "xpub": "tpubD9wHvxq4yutRtjqSuGii53GjhfEc77Tj4unaGnnxchNtL6bP7v6v4hSHbNZ3ZKDGhZCpofdhM8Gi1cPeKebL1DeQHw5J9CDyq2cpqUkNc28",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 14
- ],
- "xpub": "tpubD9wHvxq4yutRuX8pzQwyHKuYqWHiBdnZ8FAYLYmna4rh3QtoNzT4agqUKeBWcQWHf3nqTygW4xvazfxhFH1tB8wATjjYM3hknDvE4MemY1J",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 15
- ],
- "xpub": "tpubD9wHvxq4yutRx3H71svxg1ufNGX9UFDCMvvwaTZHVDzKFtu8644vUVDY6oArDBF5tAXKuN45DUjdkqwWeMaxSaJFWbSsjiwuC4Bt98r9WtC",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ],
- [
- 1,
- 12
- ]
- ],
- "expected_address": "tb1qa403yh7y82d4zulerkssk8atr298sf559z3ygu8w5zmszgl4zs7s5l0why"
- },
- {
- "paths": [
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ],
- [
- 0,
- 121
- ]
- ],
- "expected_address": "tb1q2ga3aeakyjdzkrqgpqyd69z7xh82h8rrggv985va7wwstpkte60q53tcts"
- },
- {
- "paths": [
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ],
- [
- 0,
- 385
- ]
- ],
- "expected_address": "tb1qrn5f6e20qdza0hveg8kj884texraxgj4cs2ja8f5dzms9yfjyu3qd2t0jn"
- }
- ]
-}
### test_data/multisig_reg_1of1.json
@@ -1,50 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "test_multisig",
- "descriptor": {
- "variant": "sh(multi(k))",
- "sorted": false,
- "threshold": 1,
- "signers": [
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 1
- ],
- "xpub": "tpubD9wHvxq4yutRMa2nmuFG1V56vbfT5o1vvQCNBwGLwCimjnKyTYTWUXAdVYEjqDhJ67Ass4bLupZcuuPwtMJLzdDiGeASdprQDtp9WF4E9po",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1,
- 2
- ]
- ],
- "expected_address": "2MzG3wAfDrrqtHaRMvns7XTQeuUKaBfAQAL"
- },
- {
- "paths": [
- [
- 0,
- 21
- ]
- ],
- "expected_address": "2Mv5BY3giHrUhxzYP1koxNYTBkzq9aDP3VH"
- },
- {
- "paths": [
- [
- 0,
- 35
- ]
- ],
- "expected_address": "2NFo8VDZP747hH1VFYXCPz6nfwJMsrs2QVW"
- }
- ]
-}
### test_data/multisig_reg_liquid_matches_ga_2of2.json
@@ -1,103 +0,0 @@
-{
- "input": {
- "network": "testnet-liquid",
- "multisig_name": "matches_ga",
- "descriptor": {
- "variant": "sh(wsh(multi(k)))",
- "sorted": false,
- "threshold": 2,
- "master_blinding_key": "afacc503637e85da661ca1706c4ea147f1407868c48d8f92dd339ac272293cdc",
- "signers": [
- {
- "fingerprint": "b5281696",
- "derivation": [
- 3
- ],
- "xpub": "tpubECMbgHMZm4QymESFZ9tr4ADVDyePJChBrHH6s1Vp728PdQcPbGNoG6HjPx9pH3SzmtmJuiBPhmVBhYgJF6t9tz1SADXpvqeexwWCq79KoRa",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483651,
- 2147483649,
- 1
- ],
- "xpub": "tpubDDExQpZg2tziZ7ACSBCYsY3rYxAZtTRBgWwioRLYqgNBguH6rMHN1D8epTxUQUB5kM5nxkEtr2SNic6PJLPubcGMR6S2fmDZTzL9dHpU7ka",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1
- ],
- [
- 1
- ]
- ],
- "expected_address": "vjTyeX1qFEukxp2Yi3T9ohfyLxxSKfn2NnRNHuniCqpQhkTv53HkUi9i4hunmxbm1WFy1QVogAeXkQ6A"
- },
- {
- "paths": [
- [
- 13
- ],
- [
- 13
- ]
- ],
- "expected_address": "vjTzSC6bGysq9Jy5cNwtsKy2pKfZYBXB282RWc5vSPoCqa1hJWzFNYF4jfdDuu2bEy7esRHdVAoiNPVN"
- },
- {
- "paths": [
- [
- 184
- ],
- [
- 184
- ]
- ],
- "expected_address": "vjTuw7vXSzdqePhAvLLoY3xNpEvVLYocWn1sppCQkaEt2SvSt9u3C2kJeTG4kzsh74PRHKGqbz31245q"
- }
- ],
- "blinding_key_tests": [
- {
- "script": "02d99b0422d53f8d54acfbd38e069b830d536a98ce42ccf9b29bffc2798503f898",
- "their_pubkey": "03e7cd9230b30bf53753a43add0e88931bac3be21baa4c6465d9f8da9251f2904c",
- "expected_blinding_key": "03e0450d6d8070de11e7fa15c76bf8235fdc8dd0dfb447f696ec412283f1fa6cc6",
- "expected_shared_nonce": "08a0d87175abb7aea216518982c8bc8dda493b6f1ee9b08f21388e1beb797af0"
- },
- {
- "script": "748c6321035df68631449c3f5b0f0c29212b866096239267d0608caa709b71edd85f76bbcead6703ffff00b2756821026d317cd38337a908816c63b712c22c03a67551cae4f16ee4dde729686f5cc4eeac",
- "their_pubkey": "031127ef35e4690ff035e13ebab340ab3fa2327c0409bbed3dbf03b8932777d929",
- "expected_blinding_key": "027e56b8950406552361313b9a5b55c15c823d259d1b25c6c9228a9c801469b6e3",
- "expected_shared_nonce": "31df2657027e6265575e950323469ab00ad6cfcf9db3ea294dc9daa5107c658e"
- }
- ],
- "commitments_tests": [
- {
- "hash_prevouts": "bd911e94000753ef3d03b9cf1628622932acd98f6599d8687ee70376615236ff",
- "output_index": 0,
- "asset_id": "5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225",
- "value": 100000000,
- "abf": "5d2c18ddf48c6b6fd122aa86f56f37a378bbffd9199d997051421e211c82dae2",
- "vbf": "80e7f420ab47c61c43f17e3bcab90ca29bd419597b4212b28ce2996f6e290da2",
- "asset_generator": "0b4debee792952fe8b5c17d415b4be0f8aa419ab6bc92c62e2f7031d1d2492fbce",
- "value_commitment": "09aebfcf2bffe1da3c46549e002a5ab58e98cf1a7ff1817c15d0c566bfcd757253"
- },
- {
- "hash_prevouts": "e68e7a4f5259c57155bc15e90a3009ab77d77256c991c071ecb4164729d81c87",
- "output_index": 2,
- "asset_id": "144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49",
- "value": 1899993973,
- "abf": "754779f3fc74b4ec04cd9522658b7f49e77dac2669fcb7dfb2d59abd102cb732",
- "vbf": "bdc087ea25048fcdff330e6eedeb3da680bd763a2a5d283d932fba17e3309248",
- "asset_generator": "0b93ecdc468b47d352d2dd19990d3ee37ef39fb599a0f786b8332cd4639c5da4e9",
- "value_commitment": "0915dacf21a158e5930a1ff10b19528ead7dee2186c55fc8f942a01c7bc7581fba"
- }
- ]
-}
### test_data/multisig_reg_matches_ga_2of2.json
@@ -1,64 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "matches_ga",
- "descriptor": {
- "variant": "sh(wsh(multi(k)))",
- "sorted": false,
- "threshold": 2,
- "signers": [
- {
- "fingerprint": "b5281696",
- "derivation": [
- 1
- ],
- "xpub": "tpubEAUTpVqYYmPAmbP956Rtt4FwBhiS1iQAWsYjPcZk1BzgdmrbUL7ykgtAggVJvc9z8Fdh4TPUwZc7MekLy1Mh2J4G5nthx2Hqt7EdLKX2ar8",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 1
- ],
- "xpub": "tpubD9wHvxq4yutRMa2nmuFG1V56vbfT5o1vvQCNBwGLwCimjnKyTYTWUXAdVYEjqDhJ67Ass4bLupZcuuPwtMJLzdDiGeASdprQDtp9WF4E9po",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1
- ],
- [
- 1
- ]
- ],
- "expected_address": "2MzJXUmHm7PNGvPpu4oUf7y3igBYhQQvPf1"
- },
- {
- "paths": [
- [
- 57
- ],
- [
- 57
- ]
- ],
- "expected_address": "2N8Db39ESjCTxixPJXrumosubzPUiRx1ELW"
- },
- {
- "paths": [
- [
- 1438
- ],
- [
- 1438
- ]
- ],
- "expected_address": "2NEsFCXpzxusNmhnH6myhUTRrYPL1UZvrGs"
- }
- ]
-}
### test_data/multisig_reg_ss_liquid_1of2.json
@@ -1,115 +0,0 @@
-{
- "input": {
- "network": "testnet-liquid",
- "multisig_name": "wsh_liquid_1of2",
- "descriptor": {
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 1,
- "master_blinding_key": "3172ae4169b206645a52df2ef79dff7a8c23412e6c0f129ef92e3ec570c5e2d1",
- "signers": [
- {
- "fingerprint": "1273da33",
- "derivation": [
- 44,
- 2147483648,
- 2147483648
- ],
- "xpub": "tpubDDCNstnPhbdd4vwbw5UWK3vRQSF1WXQkvBHpNXpKJAkwFYjwu735EH3GVf53qwbWimzewDUv68MUmRDgYtQ1AU8FRCPkazfuaBp7LaEaohG",
- "path": [
- 3,
- 1
- ]
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483651,
- 2147483649,
- 1
- ],
- "xpub": "tpubDDExQpZg2tziZ7ACSBCYsY3rYxAZtTRBgWwioRLYqgNBguH6rMHN1D8epTxUQUB5kM5nxkEtr2SNic6PJLPubcGMR6S2fmDZTzL9dHpU7ka",
- "path": [
- 1
- ]
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1,
- 2
- ],
- [
- 1
- ]
- ],
- "expected_address": "tlq1qq294z89t2ts2rv84maarj34439e88uvgjd9fxy28qqyurygj5nf4rjh8f5l2h8w6tav4rkzq66gv0dpc4ffywtf6z8fvk90gqwdtmm32vt2zyfatf483"
- },
- {
- "paths": [
- [
- 0
- ],
- [
- 1,
- 2,
- 3
- ]
- ],
- "expected_address": "tlq1qq2qweq69hnfre4d4dvu55j8lstjqn507h7upk67z9vvnfys76as33ysvw2xvdps5pu4gms05e6hk7hxgvfmqk2zv65ymcuuv5zu69n6nl3npnc7ywfyh"
- },
- {
- "paths": [
- [
- 1,
- 13
- ],
- [
- 1,
- 13
- ]
- ],
- "expected_address": "tlq1qqfe7uvucqx47sydlaesu355wwnxqcpm6wcy58a8z9qv622yxkra3wycdadv40clvgzkdyke9xwylwagqskrwgl3ypuf6wx3alqwjxtdyate3cn2p0tlc"
- }
- ],
- "blinding_key_tests": [
- {
- "script": "02d99b0422d53f8d54acfbd38e069b830d536a98ce42ccf9b29bffc2798503f898",
- "their_pubkey": "03e7cd9230b30bf53753a43add0e88931bac3be21baa4c6465d9f8da9251f2904c",
- "expected_blinding_key": "032b44ca6c7034492be668a9c1fbacc8364db894e3922d247f9469a1bce7319f71",
- "expected_shared_nonce": "2c5b800f26d7ee9e20deba9340276fbd99f4469169ad784dee3bfef265bf2f75"
- },
- {
- "script": "748c6321035df68631449c3f5b0f0c29212b866096239267d0608caa709b71edd85f76bbcead6703ffff00b2756821026d317cd38337a908816c63b712c22c03a67551cae4f16ee4dde729686f5cc4eeac",
- "their_pubkey": "031127ef35e4690ff035e13ebab340ab3fa2327c0409bbed3dbf03b8932777d929",
- "expected_blinding_key": "031e2b1fb58e46895fd1cc4bb2cb1e9f8b48a7ee8ab44f5f9c6c233bd75a4ff8f8",
- "expected_shared_nonce": "d3f920b036b0695df3450339cbf7c14451e47005ac97378291c854d178c9f605"
- }
- ],
- "commitments_tests": [
- {
- "hash_prevouts": "bd911e94000753ef3d03b9cf1628622932acd98f6599d8687ee70376615236ff",
- "output_index": 0,
- "asset_id": "5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225",
- "value": 100000000,
- "abf": "56b55d7604c6eace7c763648f5412fa8688550a57586b21ddcc0cbc77728c351",
- "vbf": "8648994470f45d8bc6f1f0b7bb3927e1a2aa79abc8ccd38b22ef9d5676b11a98",
- "asset_generator": "0b3d74ffe9fccf2d562867c670214c39245e9c7d97dbbbc3c3567e84bf39e8f97f",
- "value_commitment": "09ca90f20ddfe9c60f956a71dbb0d8caedd389aba391bf43d6af41c27fdd9ab037"
- },
- {
- "hash_prevouts": "e68e7a4f5259c57155bc15e90a3009ab77d77256c991c071ecb4164729d81c87",
- "output_index": 2,
- "asset_id": "144c654344aa716d6f3abcc1ca90e5641e4e2a7f633bc09fe3baf64585819a49",
- "value": 1899993973,
- "abf": "5deae09a7ab346a6dd52e28bda68785142c031de2b94c3e21c8b9f1bf2036e53",
- "vbf": "6d99a3025d92d7b40b98a440e585c02f789c0e3be3ec6a42c152b02e4c801012",
- "asset_generator": "0b9a2560ae19962f22dc9ade093380028eefe4afffa9a7668944e9dd5071d233ab",
- "value_commitment": "0986c7a01885a372ee1a20604ecb15785f3cf5fe17909ae6a00e50f9fcd57e718b"
- }
- ]
-}
### test_data/multisig_reg_ss_matches_ga_2of3.json
@@ -1,83 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "matches_ga",
- "descriptor": {
- "variant": "sh(wsh(multi(k)))",
- "sorted": false,
- "threshold": 2,
- "signers": [
- {
- "fingerprint": "b5281696",
- "derivation": [
- 3
- ],
- "xpub": "tpubECMbgHMZm4QymrFbuEntaWbSsaaKvJVpoR6rhVwxGUrT9qf6WLfC88piWYVsQDV86PUKx3QsXYiCqugWX1oz8ekucUdFUdupuNCgjf17EYK",
- "path": []
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483651,
- 2147483650,
- 1
- ],
- "xpub": "tpubDD8fpYqWy6DEvbqdj9CVWptA3gd3xqarNN6wCAjfDs1sFnd8zfb9SeDzRAXA3S4eeeYvo2sz6mbyS3KaXuDe5PcWy94PqShTpBjiJN198A6",
- "path": []
- },
- {
- "fingerprint": "1273da33",
- "derivation": [
- 1
- ],
- "xpub": "tpubD8PzcLmm1rVeUpEjmd2kQD6a9DXy6dwVVgE14mrh1zc6L98nmNqmDaApAbEcbrJ1iPBpo2gnEniSpVXHgovU8ecWwfHVP113DK2bWEMPpEs",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1
- ],
- [
- 1
- ],
- [
- 1
- ]
- ],
- "expected_address": "2NDkhxmpwKwUkQ4C4J6Th1SJBCDn4TWpb4j"
- },
- {
- "paths": [
- [
- 13
- ],
- [
- 13
- ],
- [
- 13
- ]
- ],
- "expected_address": "2NFgE1k4EpyiBTN4SBkGamFU9E1DwLLajLo"
- },
- {
- "paths": [
- [
- 377
- ],
- [
- 377
- ],
- [
- 377
- ]
- ],
- "expected_address": "2NDqRSb2hZPLn5B6sufEZdYro9LySNrvyQ7"
- }
- ]
-}
### test_data/multisig_reg_ss_p2sh.json
@@ -1,80 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "test_multisig",
- "descriptor": {
- "variant": "sh(multi(k))",
- "sorted": false,
- "threshold": 2,
- "signers": [
- {
- "fingerprint": "1273da33",
- "derivation": [
- 44,
- 2147483648,
- 2147483648
- ],
- "xpub": "tpubDDCNstnPhbdd4vwbw5UWK3vRQSF1WXQkvBHpNXpKJAkwFYjwu735EH3GVf53qwbWimzewDUv68MUmRDgYtQ1AU8FRCPkazfuaBp7LaEaohG",
- "path": [
- 3,
- 1
- ]
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483651,
- 2147483649,
- 1
- ],
- "xpub": "tpubDDExQpZg2tziZ7ACSBCYsY3rYxAZtTRBgWwioRLYqgNBguH6rMHN1D8epTxUQUB5kM5nxkEtr2SNic6PJLPubcGMR6S2fmDZTzL9dHpU7ka",
- "path": [
- 1
- ]
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 1,
- 2,
- 3
- ],
- [
- 1
- ]
- ],
- "expected_address": "2MsXzKqXp789oiJPth1HzcjoxCug9R5JfvP"
- },
- {
- "paths": [
- [
- 11,
- 12
- ],
- [
- 3,
- 4,
- 5
- ]
- ],
- "expected_address": "2N2K6xGHeEYNaKEHZSBVy33g2GfUdFwJr2A"
- },
- {
- "paths": [
- [
- 0,
- 2
- ],
- [
- 0,
- 2
- ]
- ],
- "expected_address": "2MvvWr96VXAYHB4DibdZzPDviwoeLNSkMZb"
- }
- ]
-}
### test_data/multisig_reg_ss_qr_example.json
@@ -1,74 +0,0 @@
-{
- "input": {
- "network": "mainnet",
- "multisig_name": "2of2_qr_example",
- "descriptor": {
- "variant": "sh(wsh(multi(k)))",
- "sorted": false,
- "threshold": 2,
- "signers": [
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483732,
- 2147483648,
- 2147483649
- ],
- "xpub": "xpub6CbnTfaeNsCD1nUCyoVq9k4L7TdZ88ai4b9CMRh4R1sbPYGRTUubBmBrA1iejEGfxprJ4LHufCk9kjfHKpZob4vMhqUjpkv1cVjzQVyV2sf",
- "path": []
- },
- {
- "fingerprint": "1273da33",
- "derivation": [
- 2147483732,
- 2147483648,
- 2147483649
- ],
- "xpub": "xpub6BgEp9o9FqRytpBhbVtsX4N9aHRYR3ECgfGWy9hLshQo1RBZeb9mXdavGY73yzf8W2b2AgMp8fCQ75bJDTSuBPhqiXB7BAUbocmzwGwrqCr",
- "path": []
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 0,
- 1
- ],
- [
- 0,
- 1
- ]
- ],
- "expected_address": "3MrWdmrk65DcuXXVNbXubyJo6fSma21Xx9"
- },
- {
- "paths": [
- [
- 0,
- 13
- ],
- [
- 0,
- 13
- ]
- ],
- "expected_address": "36YsoiamjkEBbAPQd9Nv1DFWTYWWego4w5"
- },
- {
- "paths": [
- [
- 0,
- 377
- ],
- [
- 0,
- 377
- ]
- ],
- "expected_address": "39SPyWf1s5rKxTLwh7a5HDzhEr6MaAD88H"
- }
- ]
-}
### test_data/multisig_reg_ss_wsh_sorted.json
@@ -1,81 +0,0 @@
-{
- "input": {
- "network": "testnet",
- "multisig_name": "wsh_2of2_sorted",
- "descriptor": {
- "variant": "wsh(multi(k))",
- "sorted": true,
- "threshold": 2,
- "signers": [
- {
- "fingerprint": "1273da33",
- "derivation": [
- 44,
- 2147483648,
- 2147483648
- ],
- "xpub": "tpubDDCNstnPhbdd4vwbw5UWK3vRQSF1WXQkvBHpNXpKJAkwFYjwu735EH3GVf53qwbWimzewDUv68MUmRDgYtQ1AU8FRCPkazfuaBp7LaEaohG",
- "path": [
- 3,
- 1
- ]
- },
- {
- "fingerprint": "e3ebcc79",
- "derivation": [
- 2147483651,
- 2147483649,
- 1
- ],
- "xpub": "tpubDDExQpZg2tziZ7ACSBCYsY3rYxAZtTRBgWwioRLYqgNBguH6rMHN1D8epTxUQUB5kM5nxkEtr2SNic6PJLPubcGMR6S2fmDZTzL9dHpU7ka",
- "path": [
- 1
- ]
- }
- ]
- }
- },
- "address_tests": [
- {
- "paths": [
- [
- 0,
- 1
- ],
- [
- 0,
- 16
- ]
- ],
- "expected_address": "tb1qx474um8lr97sn46wz9v90u6qs49ttrhdze2cfxa5x4tajvl62avshcqval"
- },
- {
- "paths": [
- [
- 1,
- 34
- ],
- [
- 1,
- 87
- ]
- ],
- "expected_address": "tb1qzf8rqun55uplysruppqp6stjwkwucj7cdkrjezy492scj8kxtq8qm7qkrx"
- },
- {
- "paths": [
- [
- 1,
- 2,
- 3
- ],
- [
- 17,
- 108,
- 234
- ]
- ],
- "expected_address": "tb1q8jqk69auqm7alkdqavhs92f9wz7jy83s3h3nmsu7rhpu2plfwusq9sepyv"
- }
- ]
-}
### test_jade.py
@@ -2584,357 +2584,6 @@ def test_liquid_blinded_commitments(jadeapi):
assert rslt == ledger_commitments[1]
-# Helper to check a multisig registration
-def _check_multisig_registration(jadeapi, multisig_data):
- # Register the multisig
- inputdata = multisig_data['input']
- descriptor = inputdata['descriptor']
- rslt = jadeapi.register_multisig(inputdata['network'],
- inputdata['multisig_name'],
- descriptor['variant'],
- descriptor['sorted'],
- descriptor['threshold'],
- descriptor['signers'],
- master_blinding_key=descriptor.get('master_blinding_key'))
- assert rslt is True
-
- # Pull the data back, then reload (roundtrip) - should be a no-op
- roundtrip = jadeapi.get_registered_multisig(inputdata['multisig_name'])
- fetched = roundtrip['descriptor']
- assert fetched['variant'] == descriptor['variant']
- assert fetched['sorted'] == descriptor['sorted']
- assert fetched['threshold'] == descriptor['threshold']
- assert fetched['master_blinding_key'] == descriptor.get('master_blinding_key', b'')
- assert fetched['signers'] == descriptor['signers']
-
- roundtrip['network'] = inputdata['network'] # the only item not roundtripped
- if not fetched['master_blinding_key']:
- del fetched['master_blinding_key'] # don't send null/empty blinding key
-
- rslt = jadeapi._jadeRpc('register_multisig', roundtrip) # push result structure back
- assert rslt
-
- # Check present and correct in 'get_registered_multisigs' also
- registered_multisigs = jadeapi.get_registered_multisigs()
- multisig_desc = registered_multisigs.get(inputdata['multisig_name'])
- assert multisig_desc is not None
- assert multisig_desc['variant'] == descriptor['variant']
- assert multisig_desc['sorted'] == descriptor['sorted']
- assert multisig_desc['threshold'] == descriptor['threshold']
- assert multisig_desc['num_signers'] == len(descriptor['signers'])
- assert multisig_desc['master_blinding_key'] == descriptor.get('master_blinding_key', b'')
-
- # This includes 'get receive address' tests ...
- for addr_test in multisig_data['address_tests']:
- rslt = jadeapi.get_receive_address(inputdata['network'],
- addr_test['paths'],
- multisig_name=inputdata['multisig_name'])
- assert rslt == addr_test['expected_address']
-
- # ... and maybe blinding key tests ...
- for blinding_test in multisig_data.get('blinding_key_tests', []):
- rslt = jadeapi.get_blinding_key(blinding_test['script'],
- multisig_name=inputdata['multisig_name'])
- assert rslt == blinding_test['expected_blinding_key']
-
- rslt = jadeapi.get_shared_nonce(blinding_test['script'],
- blinding_test['their_pubkey'],
- multisig_name=inputdata['multisig_name'])
- assert rslt == blinding_test['expected_shared_nonce']
-
- rslt = jadeapi.get_shared_nonce(blinding_test['script'],
- blinding_test['their_pubkey'],
- include_pubkey=True,
- multisig_name=inputdata['multisig_name'])
- assert rslt['blinding_key'] == blinding_test['expected_blinding_key']
- assert rslt['shared_nonce'] == blinding_test['expected_shared_nonce']
-
- # ... and blinding/commitments tests!
- for blinding_test in multisig_data.get('commitments_tests', []):
- for bf_type, rslt_key in [('ASSET', 'abf'), ('VALUE', 'vbf')]:
- rslt = jadeapi.get_blinding_factor(blinding_test['hash_prevouts'],
- blinding_test['output_index'],
- bf_type,
- multisig_name=inputdata['multisig_name'])
- assert rslt == blinding_test[rslt_key]
-
- rslt = jadeapi.get_commitments(blinding_test['asset_id'],
- blinding_test['value'],
- blinding_test['hash_prevouts'],
- blinding_test['output_index'],
- multisig_name=inputdata['multisig_name'])
- assert rslt['abf'] == blinding_test['abf']
- assert rslt['vbf'] == blinding_test['vbf']
- assert rslt['asset_generator'] == blinding_test['asset_generator']
- assert rslt['value_commitment'] == blinding_test['value_commitment']
-
-
-def test_generic_multisig_registration(jadeapi):
- # Generic multisig - check register multisig wallets and get receive addresses
- # Run all of these tests since later test cases rely on them :(
- for multisig_data in _get_test_cases(MULTI_REG_TESTS, allow_sampling=False):
- _check_multisig_registration(jadeapi, multisig_data)
-
- # Ensure the 1of1 is registered at the end - same name will be used to overwrite
- # any large test cases (eg. nof15) that otherwise consume all the storage space.
- for multisig_data in _get_test_cases('multisig_reg_1of1.json'):
- inputdata = multisig_data['input']
- descriptor = inputdata['descriptor']
- rslt = jadeapi.register_multisig(inputdata['network'],
- inputdata['multisig_name'],
- descriptor['variant'],
- descriptor['sorted'],
- descriptor['threshold'],
- descriptor['signers'],
- master_blinding_key=descriptor.get('master_blinding_key'))
- assert rslt
-
-
-def test_generic_multisig_files(jadeapi):
- # Check these multisig files load ok
- for multisig_file_test in _get_test_cases(MULTI_REG_FILE_TESTS):
- expected_result = multisig_file_test['expected_result']
- multisig_filename = multisig_file_test['input']['multisig_file']
- with open('./test_data/' + multisig_filename, 'r') as f:
- multisig_file = f.read()
-
- rslt = jadeapi.register_multisig_file(multisig_file)
- assert rslt
-
- # Pull the data back, then reload (roundtrip) - should be a no-op
- roundtrip = jadeapi.get_registered_multisig(expected_result['multisig_name'], as_file=True)
- rslt = jadeapi.register_multisig_file(roundtrip['multisig_file'])
- assert rslt
-
- # Check registered as expected
- fetched = jadeapi.get_registered_multisig(expected_result['multisig_name'])
- fetched = fetched['descriptor']
- assert fetched['variant'] == expected_result['variant']
- assert fetched['sorted'] == expected_result['sorted']
- assert fetched['threshold'] == expected_result['threshold']
- assert fetched['master_blinding_key'] == expected_result.get('master_blinding_key', b'')
- assert len(fetched['signers']) == expected_result['num_signers']
-
- registered_multisigs = jadeapi.get_registered_multisigs()
- multisig_desc = registered_multisigs.get(expected_result['multisig_name'])
- assert multisig_desc is not None
- assert multisig_desc['sorted'] == expected_result['sorted']
- assert multisig_desc['variant'] == expected_result['variant']
- assert multisig_desc['threshold'] == expected_result['threshold']
- assert multisig_desc['num_signers'] == expected_result['num_signers']
- assert multisig_desc['master_blinding_key'] == \
- expected_result.get('master_blinding_key', b'')
-
- # Check these multisig files *do not* load
- for multisig_file_test in _get_test_cases(MULTI_REG_BAD_FILE_TESTS):
- expected_error = multisig_file_test['expected_error']
- multisig_filename = multisig_file_test['input']['multisig_file']
- with open('./test_data/' + multisig_filename, 'r') as f:
- multisig_file = f.read()
-
- try:
- jadeapi.register_multisig_file(multisig_file)
- assert False, 'Expected error: ' + expected_error
- except JadeError as e:
- assert e.message == expected_error, 'Expected: ' + expected_error
-
-
-def test_generic_multisig_matches_ga_addresses(jadeapi):
- # This test checks that the generic multisig wallets 'matches_ga', do...
- # ie. if I use the standard ga receive-address, I get the same result as
- # that using 'generic multisig' (as the co-signers are set-up to match green)
- matching_ga_msigs = list(_get_test_cases('multisig_reg_*matches_ga_*.json'))
-
- for ga_msig in matching_ga_msigs:
- inputdata = ga_msig['input']
- signers = inputdata['descriptor']['signers']
-
- # Register multisig wallet
- descriptor = inputdata['descriptor']
- rslt = jadeapi.register_multisig(inputdata['network'],
- inputdata['multisig_name'],
- descriptor['variant'],
- descriptor['sorted'],
- descriptor['threshold'],
- descriptor['signers'],
- master_blinding_key=descriptor.get('master_blinding_key'))
- assert rslt is True
-
- # Check this test looks good - ie. 2of2 or 2of3
- assert inputdata['descriptor']['threshold'] == 2
- assert len(signers) == 2 or len(signers) == 3
- user_signer = signers[1] # signers[0] is ga-service
-
- # Handle subaccounts
- if len(user_signer['derivation']) == 1:
- subaccount = 0
- branch = user_signer['derivation'][0]
- elif len(user_signer['derivation']) == 3:
- assert user_signer['derivation'][0] == 2147483651 # 3'
- assert user_signer['derivation'][1] > 2147483648 # subaccount'
- subaccount = user_signer['derivation'][1] - 2147483648 # unharden
- branch = user_signer['derivation'][2]
- else:
- assert False, 'Unexpected derivation for ga-multisig wallet'
-
- user_xpub = jadeapi.get_xpub(inputdata['network'], user_signer['derivation'])
- assert user_xpub == user_signer['xpub'] # checks our xpub entry
- recovery_xpub = signers[2]['xpub'] if len(signers) == 3 else None
-
- # Check receive addresses fetched using normal green call matches the
- # expected results (which are tested as a generic multisig address above)
- for addr_test in ga_msig['address_tests']:
- ptr = addr_test['paths'][0][0]
- # check all signers have same single-entry path (ie. 'ptr')
- assert all(p == [ptr] for p in addr_test['paths'])
- rslt = jadeapi.get_receive_address(inputdata['network'], subaccount, branch, ptr,
- recovery_xpub=recovery_xpub)
- assert rslt == addr_test['expected_address']
-
- # ... and maybe blinding key tests ...
- for blinding_test in ga_msig.get('blinding_key_tests', []):
- rslt = jadeapi.get_blinding_key(blinding_test['script'])
- assert rslt == blinding_test['expected_blinding_key']
-
- rslt = jadeapi.get_shared_nonce(blinding_test['script'],
- blinding_test['their_pubkey'])
- assert rslt == blinding_test['expected_shared_nonce']
-
- rslt = jadeapi.get_shared_nonce(blinding_test['script'],
- blinding_test['their_pubkey'],
- include_pubkey=True)
- assert rslt['blinding_key'] == blinding_test['expected_blinding_key']
- assert rslt['shared_nonce'] == blinding_test['expected_shared_nonce']
-
- # ... and blinding/commitments tests!
- for blinding_test in ga_msig.get('commitments_tests', []):
- for bf_type, rslt_key in [('ASSET', 'abf'), ('VALUE', 'vbf')]:
- rslt = jadeapi.get_blinding_factor(blinding_test['hash_prevouts'],
- blinding_test['output_index'],
- bf_type)
- assert rslt == blinding_test[rslt_key]
-
- rslt = jadeapi.get_commitments(blinding_test['asset_id'],
- blinding_test['value'],
- blinding_test['hash_prevouts'],
- blinding_test['output_index'],
- multisig_name=inputdata['multisig_name'])
- assert rslt['abf'] == blinding_test['abf']
- assert rslt['vbf'] == blinding_test['vbf']
- assert rslt['asset_generator'] == blinding_test['asset_generator']
- assert rslt['value_commitment'] == blinding_test['value_commitment']
-
-
-def test_generic_multisig_matches_ga_signatures(jadeapi):
- # Sign txns using generic multisig registration - should get same sigs as ga
- ga_2of2_multisig_data = list(_get_test_cases('multisig_reg_matches_ga_2of2.json'))
- assert len(ga_2of2_multisig_data) == 1
- inputdata = ga_2of2_multisig_data[0]['input']
- descriptor = inputdata['descriptor']
- rslt = jadeapi.register_multisig(inputdata['network'],
- inputdata['multisig_name'],
- descriptor['variant'],
- descriptor['sorted'],
- descriptor['threshold'],
- descriptor['signers'],
- master_blinding_key=descriptor.get('master_blinding_key'))
- assert rslt
-
- ga_2of2_multisig_name = inputdata['multisig_name']
- MULTISIG_SIGN_TXS = ['txn_2of2_change.json', 'txn_segwit_multi_input.json']
- ga_2of2_multisig_txns = (list(_get_test_cases(testcase))[0] for testcase in MULTISIG_SIGN_TXS)
- for ga_msig in ga_2of2_multisig_txns:
- inputdata = ga_msig['input']
-
- # Doctor the change paths to include the registered multisig name, but not
- # the multisig xpub root (ie. to only contain the final 'ptr' part)
- # (as the subact/branch is part of the multisig registration)
- for change in inputdata['change'] or []:
- if change is not None:
- path = change.pop('path')
- change['paths'] = [path[-1:]] * 2
- change['multisig_name'] = ga_2of2_multisig_name
-
- use_ae_signatures = inputdata.get('use_ae_signatures')
- use_legacy_flow = not use_ae_signatures and not args.no_legacy_flow
- rslt = jadeapi.sign_tx(inputdata['network'],
- inputdata['txn'],
- inputdata.get('inputs'),
- inputdata['change'],
- use_ae_signatures,
- use_legacy_flow)
-
- # Check returned signatures
- _check_tx_signatures(jadeapi, ga_msig, rslt)
-
-
-def test_generic_multisig_matches_ga_signatures_liquid(jadeapi):
- # Sign liquid txns using generic multisig registration - should get same sigs as ga
- ga_2of2_multisig_data = list(_get_test_cases('multisig_reg_liquid_matches_ga_2of2.json'))
- assert len(ga_2of2_multisig_data) == 1
- inputdata = ga_2of2_multisig_data[0]['input']
- descriptor = inputdata['descriptor']
- rslt = jadeapi.register_multisig(inputdata['network'],
- inputdata['multisig_name'],
- descriptor['variant'],
- descriptor['sorted'],
- descriptor['threshold'],
- descriptor['signers'],
- master_blinding_key=descriptor.get('master_blinding_key'))
- assert rslt
-
- ga_2of2_multisig_name = inputdata['multisig_name']
- MULTISIG_SIGN_TXS = ['liquid_txn_lowr_nochange.json', 'liquid_txn_noncsv.json']
- ga_2of2_multisig_txns = (list(_get_test_cases(testcase))[0] for testcase in MULTISIG_SIGN_TXS)
- for ga_msig in ga_2of2_multisig_txns:
- inputdata = ga_msig['input']
-
- # Doctor the change paths to include the registered multisig name, but not
- # the multisig xpub root (ie. to only contain the final 'ptr' part)
- # (as the subact/branch is part of the multisig registration)
- for change in inputdata['change'] or []:
- if change is not None:
- path = change.pop('path')
- change['paths'] = [path[-1:]] * 2
- change['multisig_name'] = ga_2of2_multisig_name
-
- rslt = jadeapi.sign_liquid_tx(inputdata['network'],
- inputdata['txn'],
- inputdata.get('inputs'),
- inputdata['trusted_commitments'],
- inputdata['change'],
- inputdata.get('use_ae_signatures'),
- inputdata.get('asset_info'),
- inputdata.get('additional_info'))
-
- # Check returned signatures
- _check_tx_signatures(jadeapi, ga_msig, rslt)
-
-
-def test_generic_multisig_ss_signer(jadeapi):
- # Register multisig wallets again - this checks that a second user from the multisig
- # gets the same receive-address. ie. in the tests 'multisig_reg_ss' the 'single sig'
- # signer is also in the multisig, so we can check it from this signer also.
- for multisig_data in _get_test_cases(MULTI_REG_SS_TESTS):
- # Test trying to access the multisig description registered under the
- # main test mnemonic fails (as must be registered by accessing wallet)
- inputdata = multisig_data['input']
- descriptor = inputdata['descriptor']
- try:
- for addr_test in multisig_data['address_tests']:
- rslt = jadeapi.get_receive_address(inputdata['network'],
- addr_test['paths'],
- multisig_name=inputdata['multisig_name'])
- assert False, 'Accessing other wallet multisig should fail'
- except JadeError as e:
- assert e.code == JadeError.BAD_PARAMETERS
- assert e.message == 'Cannot de-serialise multisig wallet data', e.message
-
- # If we register the same multisig description to this wallet, it should produce
- # the same addresses as it did previously (for the other signatory)
- _check_multisig_registration(jadeapi, multisig_data)
-
-
def test_miniscript_descriptor_registration(jadeapi, pattern):
for descriptor_data in _get_test_cases(pattern):
# Register the descriptor
@@ -3168,14 +2817,6 @@ def run_api_tests(jadeapi, isble, qemu, authuser=False):
# Test update pinserver details
test_set_pinserver(jadeapi)
- # Test generic multisig
- test_generic_multisig_registration(jadeapi)
- test_generic_multisig_matches_ga_addresses(jadeapi)
- if not args.json_filter:
- test_generic_multisig_matches_ga_signatures(jadeapi)
- test_generic_multisig_matches_ga_signatures_liquid(jadeapi)
- test_generic_multisig_files(jadeapi)
-
# Test descriptor wallets
test_miniscript_descriptor_registration(jadeapi, DESCRIPTOR_REG_TESTS)
test_descriptor_slip77_network_rules(jadeapi)
@@ -3195,11 +2836,6 @@ def run_api_tests(jadeapi, isble, qemu, authuser=False):
rslt = jadeapi.set_seed(bytes.fromhex(TEST_SEED_SINGLE_SIG))
assert rslt is True
- # Test the generic multisigs again, using a second signer
- # NOTE: some of these tests assume 'test_generic_multisig_registration()' test
- # has already been run, to register the multisigs for the test mnemonic signer
- test_generic_multisig_ss_signer(jadeapi)
-
# Test the descriptor wallets again, using a second signer
test_miniscript_descriptor_registration(jadeapi, DESCRIPTOR_REG_SS_TESTS)
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.