Skip to content

Commit 51e7bf0

Browse files
Merge pull request #5625 from BitGo/BTC-1826.fix-psbt-clone
feat(utxo-lib): preserve network when cloning PSBTs
2 parents b19d35d + 1dd5f42 commit 51e7bf0

File tree

12 files changed

+126
-49
lines changed

12 files changed

+126
-49
lines changed

modules/utxo-core/.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
test/descriptor/psbt/fixtures

modules/utxo-core/test/descriptor/psbt/fixtures/Tr2Of3-NoKeyPath.createPsbt.json

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,25 @@
2424
"masterFingerprint": "86ea6d35",
2525
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
2626
"path": "m/0/0",
27-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
27+
"leafHashes": [
28+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
29+
]
2830
},
2931
{
3032
"masterFingerprint": "96daa738",
3133
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
3234
"path": "m/0/0",
33-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
35+
"leafHashes": [
36+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
37+
]
3438
},
3539
{
3640
"masterFingerprint": "702fc808",
3741
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
3842
"path": "m/0/0",
39-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
43+
"leafHashes": [
44+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
45+
]
4046
}
4147
],
4248
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -59,13 +65,17 @@
5965
"masterFingerprint": "702fc808",
6066
"pubkey": "266670018fb65f1384da4e9b9b92c79d5c42d5f51c3ceb1e516babfb7595f243",
6167
"path": "m/0/1",
62-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
68+
"leafHashes": [
69+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
70+
]
6371
},
6472
{
6573
"masterFingerprint": "86ea6d35",
6674
"pubkey": "4062b7c830cca69d5c808306526e7a980fbdb5356a8a5c9fd6549f2d1bf76e74",
6775
"path": "m/0/1",
68-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
76+
"leafHashes": [
77+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
78+
]
6979
},
7080
{
7181
"masterFingerprint": "f4ac30dd",
@@ -77,7 +87,9 @@
7787
"masterFingerprint": "96daa738",
7888
"pubkey": "d502c2c474f4874a96b544afa9f8a9aa49e03ca8fcf736b1a1d150a663db13a6",
7989
"path": "m/0/1",
80-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
90+
"leafHashes": [
91+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
92+
]
8193
}
8294
],
8395
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -108,19 +120,25 @@
108120
"masterFingerprint": "86ea6d35",
109121
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
110122
"path": "m/0/0",
111-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
123+
"leafHashes": [
124+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
125+
]
112126
},
113127
{
114128
"masterFingerprint": "96daa738",
115129
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
116130
"path": "m/0/0",
117-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
131+
"leafHashes": [
132+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
133+
]
118134
},
119135
{
120136
"masterFingerprint": "702fc808",
121137
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
122138
"path": "m/0/0",
123-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
139+
"leafHashes": [
140+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
141+
]
124142
}
125143
]
126144
}

modules/utxo-core/test/descriptor/psbt/fixtures/Tr2Of3-NoKeyPath.createPsbtFinal.json

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,26 +33,32 @@
3333
{
3434
"masterFingerprint": "f4ac30dd",
3535
"pubkey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
36-
"path": "",
36+
"path": "m",
3737
"leafHashes": []
3838
},
3939
{
4040
"masterFingerprint": "86ea6d35",
4141
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
42-
"path": "0/0",
43-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
42+
"path": "m/0/0",
43+
"leafHashes": [
44+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
45+
]
4446
},
4547
{
4648
"masterFingerprint": "96daa738",
4749
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
48-
"path": "0/0",
49-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
50+
"path": "m/0/0",
51+
"leafHashes": [
52+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
53+
]
5054
},
5155
{
5256
"masterFingerprint": "702fc808",
5357
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
54-
"path": "0/0",
55-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
58+
"path": "m/0/0",
59+
"leafHashes": [
60+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
61+
]
5662
}
5763
]
5864
}
@@ -96,7 +102,6 @@
96102
"nonces": []
97103
},
98104
"opts": {
99-
"maximumFeeRate": 5000,
100-
"bip32PathsAbsolute": false
105+
"maximumFeeRate": 5000
101106
}
102107
}

modules/utxo-core/test/descriptor/psbt/fixtures/Tr2Of3-NoKeyPath.createPsbtSignedA.json

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,25 @@
2424
"masterFingerprint": "86ea6d35",
2525
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
2626
"path": "0/0",
27-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
27+
"leafHashes": [
28+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
29+
]
2830
},
2931
{
3032
"masterFingerprint": "96daa738",
3133
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
3234
"path": "0/0",
33-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
35+
"leafHashes": [
36+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
37+
]
3438
},
3539
{
3640
"masterFingerprint": "702fc808",
3741
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
3842
"path": "0/0",
39-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
43+
"leafHashes": [
44+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
45+
]
4046
}
4147
],
4248
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -66,13 +72,17 @@
6672
"masterFingerprint": "702fc808",
6773
"pubkey": "266670018fb65f1384da4e9b9b92c79d5c42d5f51c3ceb1e516babfb7595f243",
6874
"path": "0/1",
69-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
75+
"leafHashes": [
76+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
77+
]
7078
},
7179
{
7280
"masterFingerprint": "86ea6d35",
7381
"pubkey": "4062b7c830cca69d5c808306526e7a980fbdb5356a8a5c9fd6549f2d1bf76e74",
7482
"path": "0/1",
75-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
83+
"leafHashes": [
84+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
85+
]
7686
},
7787
{
7888
"masterFingerprint": "f4ac30dd",
@@ -84,7 +94,9 @@
8494
"masterFingerprint": "96daa738",
8595
"pubkey": "d502c2c474f4874a96b544afa9f8a9aa49e03ca8fcf736b1a1d150a663db13a6",
8696
"path": "0/1",
87-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
97+
"leafHashes": [
98+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
99+
]
88100
}
89101
],
90102
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -122,19 +134,25 @@
122134
"masterFingerprint": "86ea6d35",
123135
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
124136
"path": "0/0",
125-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
137+
"leafHashes": [
138+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
139+
]
126140
},
127141
{
128142
"masterFingerprint": "96daa738",
129143
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
130144
"path": "0/0",
131-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
145+
"leafHashes": [
146+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
147+
]
132148
},
133149
{
134150
"masterFingerprint": "702fc808",
135151
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
136152
"path": "0/0",
137-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
153+
"leafHashes": [
154+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
155+
]
138156
}
139157
]
140158
}

modules/utxo-core/test/descriptor/psbt/fixtures/Tr2Of3-NoKeyPath.createPsbtSignedAB.json

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,25 @@
2424
"masterFingerprint": "86ea6d35",
2525
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
2626
"path": "0/0",
27-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
27+
"leafHashes": [
28+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
29+
]
2830
},
2931
{
3032
"masterFingerprint": "96daa738",
3133
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
3234
"path": "0/0",
33-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
35+
"leafHashes": [
36+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
37+
]
3438
},
3539
{
3640
"masterFingerprint": "702fc808",
3741
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
3842
"path": "0/0",
39-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
43+
"leafHashes": [
44+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
45+
]
4046
}
4147
],
4248
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -71,13 +77,17 @@
7177
"masterFingerprint": "702fc808",
7278
"pubkey": "266670018fb65f1384da4e9b9b92c79d5c42d5f51c3ceb1e516babfb7595f243",
7379
"path": "0/1",
74-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
80+
"leafHashes": [
81+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
82+
]
7583
},
7684
{
7785
"masterFingerprint": "86ea6d35",
7886
"pubkey": "4062b7c830cca69d5c808306526e7a980fbdb5356a8a5c9fd6549f2d1bf76e74",
7987
"path": "0/1",
80-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
88+
"leafHashes": [
89+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
90+
]
8191
},
8292
{
8393
"masterFingerprint": "f4ac30dd",
@@ -89,7 +99,9 @@
8999
"masterFingerprint": "96daa738",
90100
"pubkey": "d502c2c474f4874a96b544afa9f8a9aa49e03ca8fcf736b1a1d150a663db13a6",
91101
"path": "0/1",
92-
"leafHashes": ["4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"]
102+
"leafHashes": [
103+
"4b67eca4ce07266e5fa17d6276fc6fe244a384baeb087983d3500199ec8931b6"
104+
]
93105
}
94106
],
95107
"tapInternalKey": "50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0",
@@ -132,19 +144,25 @@
132144
"masterFingerprint": "86ea6d35",
133145
"pubkey": "85f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
134146
"path": "0/0",
135-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
147+
"leafHashes": [
148+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
149+
]
136150
},
137151
{
138152
"masterFingerprint": "96daa738",
139153
"pubkey": "9a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
140154
"path": "0/0",
141-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
155+
"leafHashes": [
156+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
157+
]
142158
},
143159
{
144160
"masterFingerprint": "702fc808",
145161
"pubkey": "d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
146162
"path": "0/0",
147-
"leafHashes": ["649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"]
163+
"leafHashes": [
164+
"649630c71a6826ae30a736fbb585330dce430fa5683c3f8a8b04cce0c4d7b416"
165+
]
148166
}
149167
]
150168
}

modules/utxo-core/test/descriptor/psbt/fixtures/Wsh2Of3.createPsbtFinal.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@
2424
{
2525
"masterFingerprint": "86ea6d35",
2626
"pubkey": "0285f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
27-
"path": "0/0"
27+
"path": "m/0/0"
2828
},
2929
{
3030
"masterFingerprint": "96daa738",
3131
"pubkey": "029a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
32-
"path": "0/0"
32+
"path": "m/0/0"
3333
},
3434
{
3535
"masterFingerprint": "702fc808",
3636
"pubkey": "02d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
37-
"path": "0/0"
37+
"path": "m/0/0"
3838
}
3939
]
4040
}
@@ -78,7 +78,6 @@
7878
"nonces": []
7979
},
8080
"opts": {
81-
"maximumFeeRate": 5000,
82-
"bip32PathsAbsolute": false
81+
"maximumFeeRate": 5000
8382
}
8483
}

modules/utxo-core/test/descriptor/psbt/fixtures/Wsh2Of3CltvDrop.createPsbtFinal.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,17 @@
2424
{
2525
"masterFingerprint": "86ea6d35",
2626
"pubkey": "0285f9fc63871a4f7e7877923a162c3f14fbaed12fab925e341173cff43eb93c39",
27-
"path": "0/0"
27+
"path": "m/0/0"
2828
},
2929
{
3030
"masterFingerprint": "96daa738",
3131
"pubkey": "029a50a261452c3233d75f3aaa79d7187b823050b329fa1c51d7d5e1067b9de406",
32-
"path": "0/0"
32+
"path": "m/0/0"
3333
},
3434
{
3535
"masterFingerprint": "702fc808",
3636
"pubkey": "02d5298e6df3cc36ef883e10698e31c4d39108bdad04066111b5bb70241373cd3e",
37-
"path": "0/0"
37+
"path": "m/0/0"
3838
}
3939
]
4040
}
@@ -78,7 +78,6 @@
7878
"nonces": []
7979
},
8080
"opts": {
81-
"maximumFeeRate": 5000,
82-
"bip32PathsAbsolute": false
81+
"maximumFeeRate": 5000
8382
}
8483
}

modules/utxo-lib/src/bitgo/UtxoPsbt.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1321,7 +1321,7 @@ export class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransaction<bigin
13211321
}
13221322

13231323
clone(): this {
1324-
return super.clone() as this;
1324+
return UtxoPsbt.fromBuffer(this.toBuffer(), { network: this.network }) as this;
13251325
}
13261326

13271327
extractTransaction(disableFeeCheck = true): UtxoTransaction<bigint> {

modules/utxo-lib/src/bitgo/dash/DashPsbt.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ export class DashPsbt extends UtxoPsbt<DashTransaction<bigint>> {
2727
this.tx.extraPayload = extraPayload;
2828
return this;
2929
}
30+
31+
clone(): this {
32+
return new DashPsbt({ network: this.network }, super.clone().data) as this;
33+
}
3034
}

0 commit comments

Comments
 (0)