@rosen-bridge/rosen-extractor 9.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +300 -0
- package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.d.ts → abstractRosenDataExtractor.d.ts} +1 -1
- package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.d.ts.map → abstractRosenDataExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.js → abstractRosenDataExtractor.js} +1 -1
- package/dist/getRosenData/abstract/types.d.ts +1 -0
- package/dist/getRosenData/abstract/types.d.ts.map +1 -1
- package/dist/getRosenData/abstract/types.js +1 -1
- package/dist/getRosenData/bitcoin/{BitcoinEsploraRosenExtractor.d.ts → bitcoinEsploraRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin/{BitcoinEsploraRosenExtractor.d.ts.map → bitcoinEsploraRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/bitcoin/bitcoinEsploraRosenExtractor.js +108 -0
- package/dist/getRosenData/bitcoin/{BitcoinRosenExtractor.d.ts → bitcoinRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin/{BitcoinRosenExtractor.d.ts.map → bitcoinRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/bitcoin/bitcoinRosenExtractor.js +116 -0
- package/dist/getRosenData/bitcoin/{BitcoinRpcRosenExtractor.d.ts → bitcoinRpcRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin/{BitcoinRpcRosenExtractor.d.ts.map → bitcoinRpcRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/bitcoin/bitcoinRpcRosenExtractor.js +109 -0
- package/dist/getRosenData/bitcoin/utils.js +1 -1
- package/dist/getRosenData/bitcoin-runes/{BitcoinRunesEsploraRosenExtractor.d.ts → bitcoinRunesEsploraRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin-runes/{BitcoinRunesEsploraRosenExtractor.d.ts.map → bitcoinRunesEsploraRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/bitcoin-runes/bitcoinRunesEsploraRosenExtractor.js +117 -0
- package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRosenExtractor.d.ts → bitcoinRunesRosenExtractor.d.ts} +12 -13
- package/dist/getRosenData/bitcoin-runes/bitcoinRunesRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/bitcoinRunesRosenExtractor.js +141 -0
- package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRpcRosenExtractor.d.ts → bitcoinRunesRpcRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin-runes/{BitcoinRunesRpcRosenExtractor.d.ts.map → bitcoinRunesRpcRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/bitcoin-runes/bitcoinRunesRpcRosenExtractor.js +117 -0
- package/dist/getRosenData/bitcoin-runes/types.d.ts +25 -0
- package/dist/getRosenData/bitcoin-runes/types.d.ts.map +1 -1
- package/dist/getRosenData/bitcoin-runes/types.js +1 -1
- package/dist/getRosenData/bitcoin-runes/utils.js +1 -1
- package/dist/getRosenData/cardano/{CardanoBlockFrostRosenExtractor.d.ts → cardanoBlockFrostRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/cardano/{CardanoBlockFrostRosenExtractor.d.ts.map → cardanoBlockFrostRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/cardano/cardanoBlockFrostRosenExtractor.js +96 -0
- package/dist/getRosenData/cardano/{CardanoGraphQLRosenExtractor.d.ts → cardanoGraphQLRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/cardano/{CardanoGraphQLRosenExtractor.d.ts.map → cardanoGraphQLRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/cardano/cardanoGraphQLRosenExtractor.js +94 -0
- package/dist/getRosenData/cardano/{CardanoKoiosRosenExtractor.d.ts → cardanoKoiosRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/cardano/{CardanoKoiosRosenExtractor.d.ts.map → cardanoKoiosRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/cardano/cardanoKoiosRosenExtractor.js +97 -0
- package/dist/getRosenData/cardano/{CardanoOgmiosRosenExtractor.d.ts → cardanoOgmiosRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/cardano/{CardanoOgmiosRosenExtractor.d.ts.map → cardanoOgmiosRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/cardano/cardanoOgmiosRosenExtractor.js +99 -0
- package/dist/getRosenData/cardano/{CardanoRosenExtractor.d.ts → cardanoRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/cardano/{CardanoRosenExtractor.d.ts.map → cardanoRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/cardano/cardanoRosenExtractor.js +90 -0
- package/dist/getRosenData/doge/{DogeEsploraRosenExtractor.d.ts → dogeEsploraRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/doge/{DogeEsploraRosenExtractor.d.ts.map → dogeEsploraRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/doge/dogeEsploraRosenExtractor.js +107 -0
- package/dist/getRosenData/doge/{DogeRosenExtractor.d.ts → dogeRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/doge/{DogeRosenExtractor.d.ts.map → dogeRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/doge/dogeRosenExtractor.js +115 -0
- package/dist/getRosenData/doge/{DogeRpcRosenExtractor.d.ts → dogeRpcRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/doge/{DogeRpcRosenExtractor.d.ts.map → dogeRpcRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/doge/dogeRpcRosenExtractor.js +108 -0
- package/dist/getRosenData/doge/utils.js +1 -1
- package/dist/getRosenData/ergo/{ErgoNodeRosenExtractor.d.ts → ergoNodeRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/ergo/{ErgoNodeRosenExtractor.d.ts.map → ergoNodeRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/ergo/ergoNodeRosenExtractor.js +106 -0
- package/dist/getRosenData/ergo/{ErgoRosenExtractor.d.ts → ergoRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/ergo/{ErgoRosenExtractor.d.ts.map → ergoRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/ergo/{ErgoRosenExtractor.js → ergoRosenExtractor.js} +3 -3
- package/dist/getRosenData/evm/{EvmEthersRosenExtractor.d.ts → evmEthersRosenExtractor.d.ts} +3 -3
- package/dist/getRosenData/evm/{EvmEthersRosenExtractor.d.ts.map → evmEthersRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/evm/{EvmEthersRosenExtractor.js → evmEthersRosenExtractor.js} +3 -3
- package/dist/getRosenData/evm/{EvmRosenExtractor.d.ts → evmRosenExtractor.d.ts} +3 -3
- package/dist/getRosenData/evm/{EvmRosenExtractor.d.ts.map → evmRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/evm/{EvmRosenExtractor.js → evmRosenExtractor.js} +3 -3
- package/dist/getRosenData/evm/{EvmRpcRosenExtractor.d.ts → evmRpcRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/evm/{EvmRpcRosenExtractor.d.ts.map → evmRpcRosenExtractor.d.ts.map} +1 -1
- package/dist/getRosenData/evm/{EvmRpcRosenExtractor.js → evmRpcRosenExtractor.js} +4 -3
- package/dist/index.d.ts +20 -20
- package/dist/index.js +21 -21
- package/dist/utils.js +1 -1
- package/package.json +25 -19
- package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +0 -105
- package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.js +0 -113
- package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +0 -106
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesEsploraRosenExtractor.js +0 -114
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.d.ts.map +0 -1
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.js +0 -121
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRpcRosenExtractor.js +0 -114
- package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +0 -94
- package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +0 -92
- package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.js +0 -95
- package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +0 -97
- package/dist/getRosenData/cardano/CardanoRosenExtractor.js +0 -88
- package/dist/getRosenData/doge/DogeEsploraRosenExtractor.js +0 -104
- package/dist/getRosenData/doge/DogeRosenExtractor.js +0 -112
- package/dist/getRosenData/doge/DogeRpcRosenExtractor.js +0 -105
- package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.js +0 -105
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# @rosen-bridge/rosen-extractor
|
|
2
|
+
|
|
3
|
+
## 10.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add rawData value to The RosenData interface
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Remove unused dependencies and install missed dependencies
|
|
12
|
+
|
|
13
|
+
## 10.0.0
|
|
14
|
+
|
|
15
|
+
### Major Changes
|
|
16
|
+
|
|
17
|
+
- Update node version to 22.18
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Fix Bitcoin Runes extractors for unordered transactions
|
|
22
|
+
- Fix BitcoinRunesRosenExtractor to fully extract RosenData
|
|
23
|
+
- Update dependencies
|
|
24
|
+
- @rosen-bridge/abstract-logger@3.0.0
|
|
25
|
+
- @rosen-bridge/address-codec@1.0.0
|
|
26
|
+
- @rosen-bridge/json-bigint@1.0.0
|
|
27
|
+
- @rosen-bridge/tokens@4.0.0
|
|
28
|
+
|
|
29
|
+
## 9.0.0
|
|
30
|
+
|
|
31
|
+
### Major Changes
|
|
32
|
+
|
|
33
|
+
- Rename Runes chain name to Bitcoin Runes
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- Update Bitcoin Runes getLockDataChunks to ignore the first 3 output boxes
|
|
38
|
+
|
|
39
|
+
## 8.1.0
|
|
40
|
+
|
|
41
|
+
### Minor Changes
|
|
42
|
+
|
|
43
|
+
- Update versions of nodejs to 20.11 & typescript to 5.8
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- Update dependencies
|
|
48
|
+
- @rosen-bridge/abstract-logger@2.1.0
|
|
49
|
+
- @rosen-bridge/address-codec@0.7.0
|
|
50
|
+
- @rosen-bridge/json-bigint@0.2.0
|
|
51
|
+
- @rosen-bridge/tokens@3.2.0
|
|
52
|
+
|
|
53
|
+
## 8.0.1
|
|
54
|
+
|
|
55
|
+
### Patch Changes
|
|
56
|
+
|
|
57
|
+
- Downgrade ethers version
|
|
58
|
+
- Updated dependencies
|
|
59
|
+
- @rosen-bridge/address-codec@0.6.3
|
|
60
|
+
|
|
61
|
+
## 8.0.0
|
|
62
|
+
|
|
63
|
+
### Major Changes
|
|
64
|
+
|
|
65
|
+
- Unify Cardano interfaces (this change only affects `CardanoTx` interface which is used in `CardanoRosenExtractor.extractRawData`)
|
|
66
|
+
- Use new `CardanoTxInput` interface for `CardanoTx.inputs` which only has `txId` and `index` fields
|
|
67
|
+
- Rename `policy_id` to **`policyId`** and `asset_name` to **`assetName`** in `CardanoAsset` interface
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- Update dependencies
|
|
72
|
+
- @rosen-bridge/tokens@3.1.1
|
|
73
|
+
|
|
74
|
+
## 7.3.3
|
|
75
|
+
|
|
76
|
+
### Patch Changes
|
|
77
|
+
|
|
78
|
+
- Update ethers version to v6.14.3
|
|
79
|
+
- Updated dependencies
|
|
80
|
+
- @rosen-bridge/address-codec@0.6.2
|
|
81
|
+
|
|
82
|
+
## 7.3.2
|
|
83
|
+
|
|
84
|
+
### Patch Changes
|
|
85
|
+
|
|
86
|
+
- Replace tiny-secp256k1 dependency with @bitcoinerlab/secp256k1
|
|
87
|
+
- Updated dependencies
|
|
88
|
+
- @rosen-bridge/address-codec@0.6.1
|
|
89
|
+
|
|
90
|
+
## 7.3.1
|
|
91
|
+
|
|
92
|
+
### Patch Changes
|
|
93
|
+
|
|
94
|
+
- Export TokenTransformation type
|
|
95
|
+
|
|
96
|
+
## 7.3.0
|
|
97
|
+
|
|
98
|
+
### Minor Changes
|
|
99
|
+
|
|
100
|
+
- Implement rosen extractor for Bitcoin Runes
|
|
101
|
+
|
|
102
|
+
### Patch Changes
|
|
103
|
+
|
|
104
|
+
- Updated dependencies
|
|
105
|
+
- @rosen-bridge/address-codec@0.6.0
|
|
106
|
+
|
|
107
|
+
## 7.2.2
|
|
108
|
+
|
|
109
|
+
### Patch Changes
|
|
110
|
+
|
|
111
|
+
- Improve EvmEthersRosenExtractor performance by checking address before type conversion and full validation
|
|
112
|
+
- Updated dependencies
|
|
113
|
+
- @rosen-bridge/address-codec@0.5.2
|
|
114
|
+
- @rosen-bridge/tokens@3.1.0
|
|
115
|
+
|
|
116
|
+
## 7.2.1
|
|
117
|
+
|
|
118
|
+
### Patch Changes
|
|
119
|
+
|
|
120
|
+
- Updated dependencies
|
|
121
|
+
- @rosen-bridge/tokens@3.0.0
|
|
122
|
+
|
|
123
|
+
## 7.2.0
|
|
124
|
+
|
|
125
|
+
### Minor Changes
|
|
126
|
+
|
|
127
|
+
- Update koios rosen extractor to use the new interfaces from cardano serialization lib
|
|
128
|
+
|
|
129
|
+
### Patch Changes
|
|
130
|
+
|
|
131
|
+
- Use cardano serialization lib v13
|
|
132
|
+
- Updated dependencies
|
|
133
|
+
- @rosen-bridge/address-codec@0.5.1
|
|
134
|
+
|
|
135
|
+
## 7.1.1
|
|
136
|
+
|
|
137
|
+
### Patch Changes
|
|
138
|
+
|
|
139
|
+
- Fix RPC types of doge
|
|
140
|
+
|
|
141
|
+
## 7.1.0
|
|
142
|
+
|
|
143
|
+
### Minor Changes
|
|
144
|
+
|
|
145
|
+
- Add RPC to for Doge
|
|
146
|
+
|
|
147
|
+
## 7.0.1
|
|
148
|
+
|
|
149
|
+
### Patch Changes
|
|
150
|
+
|
|
151
|
+
- Updated dependencies
|
|
152
|
+
- @rosen-bridge/address-codec@0.5.0
|
|
153
|
+
|
|
154
|
+
## 7.0.0
|
|
155
|
+
|
|
156
|
+
### Major Changes
|
|
157
|
+
|
|
158
|
+
- Constructor get `TokenMap` instead of `RosenTokens`
|
|
159
|
+
|
|
160
|
+
### Minor Changes
|
|
161
|
+
|
|
162
|
+
- Add rosen extractor for the dogecoin blockchain
|
|
163
|
+
|
|
164
|
+
### Patch Changes
|
|
165
|
+
|
|
166
|
+
- Fix floating error in BitcoinRpcRosenExtractor
|
|
167
|
+
- Updated dependencies
|
|
168
|
+
- @rosen-bridge/tokens@2.0.0
|
|
169
|
+
|
|
170
|
+
## 6.3.1
|
|
171
|
+
|
|
172
|
+
### Patch Changes
|
|
173
|
+
|
|
174
|
+
- Updated dependencies
|
|
175
|
+
- @rosen-bridge/tokens@1.2.2
|
|
176
|
+
- @rosen-bridge/address-codec@0.4.0
|
|
177
|
+
|
|
178
|
+
## 6.3.0
|
|
179
|
+
|
|
180
|
+
### Minor Changes
|
|
181
|
+
|
|
182
|
+
- Add Binance chain
|
|
183
|
+
|
|
184
|
+
## 6.2.2
|
|
185
|
+
|
|
186
|
+
### Patch Changes
|
|
187
|
+
|
|
188
|
+
- Updated dependencies
|
|
189
|
+
- @rosen-bridge/abstract-logger@2.0.1
|
|
190
|
+
|
|
191
|
+
## 6.2.1
|
|
192
|
+
|
|
193
|
+
### Patch Changes
|
|
194
|
+
|
|
195
|
+
- Updated dependencies
|
|
196
|
+
- @rosen-bridge/abstract-logger@2.0.0
|
|
197
|
+
|
|
198
|
+
## 6.2.0
|
|
199
|
+
|
|
200
|
+
### Minor Changes
|
|
201
|
+
|
|
202
|
+
- Verify destination address encoded in lock transactions
|
|
203
|
+
|
|
204
|
+
### Patch Changes
|
|
205
|
+
|
|
206
|
+
- Updated dependencies
|
|
207
|
+
- @rosen-bridge/address-codec@0.3.0
|
|
208
|
+
|
|
209
|
+
## 6.1.1
|
|
210
|
+
|
|
211
|
+
### Patch Changes
|
|
212
|
+
|
|
213
|
+
- fix EvmRosenExtractor serialization
|
|
214
|
+
|
|
215
|
+
## 6.1.0
|
|
216
|
+
|
|
217
|
+
### Minor Changes
|
|
218
|
+
|
|
219
|
+
- add EvmEthersRosenExtractor
|
|
220
|
+
|
|
221
|
+
## 6.0.1
|
|
222
|
+
|
|
223
|
+
### Patch Changes
|
|
224
|
+
|
|
225
|
+
- Updated dependencies
|
|
226
|
+
- @rosen-bridge/tokens@1.2.1
|
|
227
|
+
|
|
228
|
+
## 6.0.0
|
|
229
|
+
|
|
230
|
+
### Major Changes
|
|
231
|
+
|
|
232
|
+
- consider decimals drop in AbstractRosenDataExtractor
|
|
233
|
+
|
|
234
|
+
### Patch Changes
|
|
235
|
+
|
|
236
|
+
- Updated dependencies
|
|
237
|
+
- @rosen-bridge/tokens@1.2.0
|
|
238
|
+
|
|
239
|
+
## 5.0.1
|
|
240
|
+
|
|
241
|
+
### Patch Changes
|
|
242
|
+
|
|
243
|
+
- Fix btc rpc extractor to extract amount without decimal
|
|
244
|
+
|
|
245
|
+
## 5.0.0
|
|
246
|
+
|
|
247
|
+
### Major Changes
|
|
248
|
+
|
|
249
|
+
- change fromAddress to first input box ID (Only for Bitcoin)
|
|
250
|
+
|
|
251
|
+
### Minor Changes
|
|
252
|
+
|
|
253
|
+
- add bitcoin RPC rosen extractor
|
|
254
|
+
|
|
255
|
+
## 4.1.1
|
|
256
|
+
|
|
257
|
+
### Patch Changes
|
|
258
|
+
|
|
259
|
+
- fix bitcoin rosen-extractors (remove PUSH_DATA1 opcode from expected OP_RETURN script)
|
|
260
|
+
|
|
261
|
+
## 4.1.0
|
|
262
|
+
|
|
263
|
+
### Minor Changes
|
|
264
|
+
|
|
265
|
+
- allow custom order for tx outputs in bitcoin extractors
|
|
266
|
+
|
|
267
|
+
## 4.0.1
|
|
268
|
+
|
|
269
|
+
### Patch Changes
|
|
270
|
+
|
|
271
|
+
- check token availability on target chain
|
|
272
|
+
- Updated dependencies
|
|
273
|
+
- @rosen-bridge/address-codec@0.2.1
|
|
274
|
+
|
|
275
|
+
## 4.0.0
|
|
276
|
+
|
|
277
|
+
### Major Changes
|
|
278
|
+
|
|
279
|
+
- change EvmRosenExtractor tx format
|
|
280
|
+
|
|
281
|
+
### Minor Changes
|
|
282
|
+
|
|
283
|
+
- add universal evm rosen extractor
|
|
284
|
+
|
|
285
|
+
## 3.5.0
|
|
286
|
+
|
|
287
|
+
### Minor Changes
|
|
288
|
+
|
|
289
|
+
- RPC rosen extractor added for EVM chains
|
|
290
|
+
|
|
291
|
+
### Patch Changes
|
|
292
|
+
|
|
293
|
+
- Updated dependencies
|
|
294
|
+
- @rosen-bridge/address-codec@0.2.0
|
|
295
|
+
|
|
296
|
+
## 3.4.0
|
|
297
|
+
|
|
298
|
+
### Minor Changes
|
|
299
|
+
|
|
300
|
+
- add universal bitcoin rosen extractor
|
|
@@ -16,4 +16,4 @@ export default abstract class AbstractRosenDataExtractor<TransactionType> {
|
|
|
16
16
|
*/
|
|
17
17
|
abstract extractRawData: (transaction: TransactionType) => RosenData | undefined;
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=abstractRosenDataExtractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"abstractRosenDataExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/abstractRosenDataExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAG5E,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,0BAA0B,CAAC,eAAe;IACtE,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAE3B,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAM1E;;OAEG;IACH,GAAG,GAAI,aAAa,eAAe,KAAG,SAAS,GAAG,SAAS,CAoBzD;IAEF;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,WAAW,EAAE,eAAe,KACzB,SAAS,GAAG,SAAS,CAAC;CAC5B"}
|
package/dist/getRosenData/abstract/{AbstractRosenDataExtractor.js → abstractRosenDataExtractor.js}
RENAMED
|
@@ -29,4 +29,4 @@ export default class AbstractRosenDataExtractor {
|
|
|
29
29
|
return rawData;
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L2Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxPQUFPLE9BQWdCLDBCQUEwQjtJQUVuQyxNQUFNLENBQWlCO0lBQ3ZCLE1BQU0sQ0FBVztJQUNqQixXQUFXLENBQVM7SUFFdkMsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLEdBQUcsQ0FBQyxXQUE0QixFQUF5QixFQUFFO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQztnQkFDSCxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsZ0RBQWdELE9BQU8sQ0FBQyxTQUFTLGVBQWUsT0FBTyxDQUFDLE9BQU8sa0JBQWtCLENBQUMsRUFBRSxDQUNySCxDQUFDO2dCQUNGLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNO2lCQUN6QixVQUFVLENBQ1QsT0FBTyxDQUFDLGtCQUFrQixFQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYO2lCQUNBLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDO0NBUUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVBZGRyZXNzIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hZGRyZXNzLWNvZGVjJztcblxuZXhwb3J0IGRlZmF1bHQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8VHJhbnNhY3Rpb25UeXBlPiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNoYWluOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdG9rZW5zOiBUb2tlbk1hcDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2tBZGRyZXNzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICB0aGlzLmxvY2tBZGRyZXNzID0gbG9ja0FkZHJlc3M7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGFuZCB3cmFwIHRoZSBhbW91bnRcbiAgICovXG4gIGdldCA9ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb25UeXBlKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCByYXdEYXRhID0gdGhpcy5leHRyYWN0UmF3RGF0YSh0cmFuc2FjdGlvbik7XG4gICAgaWYgKHJhd0RhdGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhbGlkYXRlQWRkcmVzcyhyYXdEYXRhLnRvQ2hhaW4sIHJhd0RhdGEudG9BZGRyZXNzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFJlY2VpdmVyIGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsZWQgKGFkZHJlc3MgWyR7cmF3RGF0YS50b0FkZHJlc3N9XSBvbiBjaGFpbiBbJHtyYXdEYXRhLnRvQ2hhaW59XSkgd2l0aCBlcnJvcjogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByYXdEYXRhLmFtb3VudCA9IHRoaXMudG9rZW5zXG4gICAgICAgIC53cmFwQW1vdW50KFxuICAgICAgICAgIHJhd0RhdGEuc291cmNlQ2hhaW5Ub2tlbklkLFxuICAgICAgICAgIEJpZ0ludChyYXdEYXRhLmFtb3VudCksXG4gICAgICAgICAgdGhpcy5jaGFpbixcbiAgICAgICAgKVxuICAgICAgICAuYW1vdW50LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiByYXdEYXRhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uXG4gICAqL1xuICBhYnN0cmFjdCBleHRyYWN0UmF3RGF0YTogKFxuICAgIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvblR5cGUsXG4gICkgPT4gUm9zZW5EYXRhIHwgdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/abstract/types.ts"],"names":[],"mappings":"AAAA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgUm9zZW5EYXRhIHtcbiAgdG9DaGFpbjogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbiAgc291cmNlQ2hhaW5Ub2tlbklkOiBzdHJpbmc7XG4gIGFtb3VudDogc3RyaW5nO1xuICB0YXJnZXRDaGFpblRva2VuSWQ6IHN0cmluZztcbiAgc291cmNlVHhJZDogc3RyaW5nO1xuICByYXdEYXRhOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUb2tlblRyYW5zZm9ybWF0aW9uIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHsgUm9zZW5EYXRhLCBUb2tlblRyYW5zZm9ybWF0aW9uIH07XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
2
|
-
import AbstractRosenDataExtractor from '../abstract/
|
|
2
|
+
import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
|
|
3
3
|
import { BitcoinEsploraTransaction, EsploraTxOutput } from './types';
|
|
4
4
|
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
5
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
@@ -19,4 +19,4 @@ export declare class BitcoinEsploraRosenExtractor extends AbstractRosenDataExtra
|
|
|
19
19
|
*/
|
|
20
20
|
getAssetTransformation: (box: EsploraTxOutput, toChain: string) => TokenTransformation | undefined;
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=bitcoinEsploraRosenExtractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"bitcoinEsploraRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/bitcoinEsploraRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EACL,yBAAyB,EACzB,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAI/D,qBAAa,4BAA6B,SAAQ,0BAA0B,CAAC,yBAAyB,CAAC;IACrG,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GACZ,aAAa,yBAAyB,KACrC,SAAS,GAAG,SAAS,CAgFtB;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
|
|
2
|
+
import { BITCOIN_CHAIN, BITCOIN_NATIVE_TOKEN } from '../const';
|
|
3
|
+
import { address } from 'bitcoinjs-lib';
|
|
4
|
+
import { parseOpReturn } from './utils';
|
|
5
|
+
export class BitcoinEsploraRosenExtractor extends AbstractRosenDataExtractor {
|
|
6
|
+
chain = BITCOIN_CHAIN;
|
|
7
|
+
lockScriptPubKey;
|
|
8
|
+
constructor(lockAddress, tokens, logger) {
|
|
9
|
+
super(lockAddress, tokens, logger);
|
|
10
|
+
this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* extracts RosenData from given lock transaction in Esplora format
|
|
14
|
+
* @param transaction the lock transaction in Esplora format
|
|
15
|
+
*/
|
|
16
|
+
extractRawData = (transaction) => {
|
|
17
|
+
const baseError = `No rosen data found for tx [${transaction.txid}]`;
|
|
18
|
+
try {
|
|
19
|
+
const outputs = transaction.vout;
|
|
20
|
+
if (outputs.length < 2) {
|
|
21
|
+
this.logger.debug(baseError + `: Insufficient number of boxes`);
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
let validData = false; // an OP_RETURN box with valid data is found
|
|
25
|
+
let validLock = false; // a lock box is found with available asset transformation
|
|
26
|
+
// parse rosen data from OP_RETURN box
|
|
27
|
+
let opReturnData;
|
|
28
|
+
let rawData = '';
|
|
29
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
30
|
+
const output = outputs[i];
|
|
31
|
+
if (output.scriptpubkey.slice(0, 2) !== '6a')
|
|
32
|
+
continue; // not an OP_RETURN utxo
|
|
33
|
+
try {
|
|
34
|
+
opReturnData = parseOpReturn(output.scriptpubkey);
|
|
35
|
+
rawData = output.scriptpubkey;
|
|
36
|
+
validData = true;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
catch (e) {
|
|
40
|
+
this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.txid}.${i}]: ${e}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (!validData || !opReturnData) {
|
|
44
|
+
this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// find target chain token id
|
|
48
|
+
let assetTransformation;
|
|
49
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
50
|
+
const output = outputs[i];
|
|
51
|
+
if (output.scriptpubkey !== this.lockScriptPubKey)
|
|
52
|
+
continue; // utxo address is not lock address
|
|
53
|
+
assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
|
|
54
|
+
if (assetTransformation) {
|
|
55
|
+
validLock = true;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (!validLock || !assetTransformation) {
|
|
60
|
+
this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
|
|
64
|
+
return {
|
|
65
|
+
toChain: opReturnData.toChain,
|
|
66
|
+
toAddress: opReturnData.toAddress,
|
|
67
|
+
bridgeFee: opReturnData.bridgeFee,
|
|
68
|
+
networkFee: opReturnData.networkFee,
|
|
69
|
+
fromAddress: fromAddress,
|
|
70
|
+
sourceChainTokenId: assetTransformation.from,
|
|
71
|
+
amount: assetTransformation.amount,
|
|
72
|
+
targetChainTokenId: assetTransformation.to,
|
|
73
|
+
sourceTxId: transaction.txid,
|
|
74
|
+
rawData,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
this.logger.debug(`An error occurred while getting Bitcoin rosen data from Esplora: ${e}`);
|
|
79
|
+
if (e instanceof Error && e.stack) {
|
|
80
|
+
this.logger.debug(e.stack);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return undefined;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* extracts and builds token transformation from UTXO and tokenMap
|
|
87
|
+
* @param box transaction output
|
|
88
|
+
* @param toChain event target chain
|
|
89
|
+
*/
|
|
90
|
+
getAssetTransformation = (box, toChain) => {
|
|
91
|
+
// try to build transformation using locked BTC
|
|
92
|
+
const wrappedBtc = this.tokens.search(BITCOIN_CHAIN, {
|
|
93
|
+
tokenId: BITCOIN_NATIVE_TOKEN,
|
|
94
|
+
});
|
|
95
|
+
if (wrappedBtc.length > 0 && Object.hasOwn(wrappedBtc[0], toChain)) {
|
|
96
|
+
const satoshiAmount = box.value;
|
|
97
|
+
return {
|
|
98
|
+
from: BITCOIN_NATIVE_TOKEN,
|
|
99
|
+
to: this.tokens.getID(wrappedBtc[0], toChain),
|
|
100
|
+
amount: satoshiAmount.toString(),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pbkVzcGxvcmFSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvYml0Y29pbi9iaXRjb2luRXNwbG9yYVJvc2VuRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sMEJBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVEvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxPQUFPLDRCQUE2QixTQUFRLDBCQUFxRDtJQUM1RixLQUFLLEdBQUcsYUFBYSxDQUFDO0lBQ3JCLGdCQUFnQixDQUFTO0lBRW5DLFlBQVksV0FBbUIsRUFBRSxNQUFnQixFQUFFLE1BQXVCO1FBQ3hFLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLENBQ2YsV0FBc0MsRUFDZixFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLFNBQVMsQ0FBQztZ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bWF0aW9uIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L2Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IEJJVENPSU5fQ0hBSU4sIEJJVENPSU5fTkFUSVZFX1RPS0VOIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHtcbiAgQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbixcbiAgRXNwbG9yYVR4T3V0cHV0LFxuICBPcFJldHVybkRhdGEsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IGFkZHJlc3MgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IHBhcnNlT3BSZXR1cm4gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gQklUQ09JTl9DSEFJTjtcbiAgcHJvdGVjdGVkIGxvY2tTY3JpcHRQdWJLZXk6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihsb2NrQWRkcmVzczogc3RyaW5nLCB0b2tlbnM6IFRva2VuTWFwLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlcik7XG4gICAgdGhpcy5sb2NrU2NyaXB0UHViS2V5ID0gYWRkcmVzcy50b091dHB1dFNjcmlwdChsb2NrQWRkcmVzcykudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gRXNwbG9yYSBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIEVzcGxvcmEgZm9ybWF0XG4gICAqL1xuICBleHRyYWN0UmF3RGF0YSA9IChcbiAgICB0cmFuc2FjdGlvbjogQml0Y29pbkVzcGxvcmFUcmFuc2FjdGlvbixcbiAgKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IHZhbGlkRGF0YSA9IGZhbHNlOyAvLyBhbiBPUF9SRVRVUk4gYm94IHdpdGggdmFsaWQgZGF0YSBpcyBmb3VuZFxuICAgICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlOyAvLyBhIGxvY2sgYm94IGlzIGZvdW5kIHdpdGggYXZhaWxhYmxlIGFzc2V0IHRyYW5zZm9ybWF0aW9uXG5cbiAgICAgIC8vIHBhcnNlIHJvc2VuIGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94XG4gICAgICBsZXQgb3BSZXR1cm5EYXRhOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcmF3RGF0YTogc3RyaW5nID0gJyc7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgICAgaWYgKG91dHB1dC5zY3JpcHRwdWJrZXkuc2xpY2UoMCwgMikgIT09ICc2YScpIGNvbnRpbnVlOyAvLyBub3QgYW4gT1BfUkVUVVJOIHV0eG9cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG9wUmV0dXJuRGF0YSA9IHBhcnNlT3BSZXR1cm4ob3V0cHV0LnNjcmlwdHB1YmtleSk7XG4gICAgICAgICAgcmF3RGF0YSA9IG91dHB1dC5zY3JpcHRwdWJrZXk7XG4gICAgICAgICAgdmFsaWREYXRhID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBleHRyYWN0IGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94IFske3RyYW5zYWN0aW9uLnR4aWR9LiR7aX1dOiAke2V9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbGlkRGF0YSB8fCAhb3BSZXR1cm5EYXRhKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IE5vIE9QX1JFVFVSTiBib3ggd2l0aCB2YWxpZCBkYXRhIGlzIGZvdW5kYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCB0YXJnZXQgY2hhaW4gdG9rZW4gaWRcbiAgICAgIGxldCBhc3NldFRyYW5zZm9ybWF0aW9uOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5ICE9PSB0aGlzLmxvY2tTY3JpcHRQdWJLZXkpIGNvbnRpbnVlOyAvLyB1dHhvIGFkZHJlc3MgaXMgbm90IGxvY2sgYWRkcmVzc1xuICAgICAgICBhc3NldFRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRBc3NldFRyYW5zZm9ybWF0aW9uKFxuICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFzc2V0VHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgICB2YWxpZExvY2sgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbGlkTG9jayB8fCAhYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZmluZCByb3NlbiBhc3NldCB0cmFuc2Zvcm1hdGlvbmAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gYGJveDoke3RyYW5zYWN0aW9uLnZpblswXS50eGlkfS4ke3RyYW5zYWN0aW9uLnZpblswXS52b3V0fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLnR4aWQsXG4gICAgICAgIHJhd0RhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBCaXRjb2luIHJvc2VuIGRhdGEgZnJvbSBFc3Bsb3JhOiAke2V9YCxcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBVVFhPIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBFc3Bsb3JhVHhPdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nLFxuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEJUQ1xuICAgIGNvbnN0IHdyYXBwZWRCdGMgPSB0aGlzLnRva2Vucy5zZWFyY2goQklUQ09JTl9DSEFJTiwge1xuICAgICAgdG9rZW5JZDogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgfSk7XG4gICAgaWYgKHdyYXBwZWRCdGMubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHdyYXBwZWRCdGNbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICBjb25zdCBzYXRvc2hpQW1vdW50ID0gYm94LnZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh3cmFwcGVkQnRjWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBzYXRvc2hpQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
2
|
-
import AbstractRosenDataExtractor from '../abstract/
|
|
2
|
+
import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
|
|
3
3
|
import { BitcoinTxOutput } from './types';
|
|
4
4
|
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
5
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
@@ -19,4 +19,4 @@ export declare class BitcoinRosenExtractor extends AbstractRosenDataExtractor<st
|
|
|
19
19
|
*/
|
|
20
20
|
getAssetTransformation: (box: BitcoinTxOutput, toChain: string) => TokenTransformation | undefined;
|
|
21
21
|
}
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=bitcoinRosenExtractor.d.ts.map
|
package/dist/getRosenData/bitcoin/{BitcoinRosenExtractor.d.ts.map → bitcoinRosenExtractor.d.ts.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"bitcoinRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/bitcoin/bitcoinRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAa,eAAe,EAAgB,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,qBAAa,qBAAsB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,CAAC,KAAK,aAAiB;IAC/B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GAAI,uBAAuB,MAAM,KAAG,SAAS,GAAG,SAAS,CAwFrE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/abstractRosenDataExtractor';
|
|
2
|
+
import { BITCOIN_CHAIN, BITCOIN_NATIVE_TOKEN } from '../const';
|
|
3
|
+
import { address } from 'bitcoinjs-lib';
|
|
4
|
+
import { parseOpReturn } from './utils';
|
|
5
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
6
|
+
export class BitcoinRosenExtractor extends AbstractRosenDataExtractor {
|
|
7
|
+
chain = BITCOIN_CHAIN;
|
|
8
|
+
lockScriptPubKey;
|
|
9
|
+
constructor(lockAddress, tokens, logger) {
|
|
10
|
+
super(lockAddress, tokens, logger);
|
|
11
|
+
this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* extracts RosenData from given lock transaction in BitcoinTx format
|
|
15
|
+
* @param serializedTransaction stringified transaction in BitcoinTx format
|
|
16
|
+
*/
|
|
17
|
+
extractRawData = (serializedTransaction) => {
|
|
18
|
+
let transaction;
|
|
19
|
+
try {
|
|
20
|
+
transaction = JsonBigInt.parse(serializedTransaction);
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
throw new Error(`Failed to parse transaction json to BitcoinTx format while extracting rosen data: ${e}`);
|
|
24
|
+
}
|
|
25
|
+
const baseError = `No rosen data found for tx [${transaction.id}]`;
|
|
26
|
+
try {
|
|
27
|
+
const outputs = transaction.outputs;
|
|
28
|
+
if (outputs.length < 2) {
|
|
29
|
+
this.logger.debug(baseError + `: Insufficient number of boxes`);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
let validData = false; // an OP_RETURN box with valid data is found
|
|
33
|
+
let validLock = false; // a lock box is found with available asset transformation
|
|
34
|
+
// parse rosen data from OP_RETURN box
|
|
35
|
+
let opReturnData;
|
|
36
|
+
let rawData = '';
|
|
37
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
38
|
+
const output = outputs[i];
|
|
39
|
+
if (output.scriptPubKey.slice(0, 2) !== '6a')
|
|
40
|
+
continue; // not an OP_RETURN utxo
|
|
41
|
+
try {
|
|
42
|
+
opReturnData = parseOpReturn(output.scriptPubKey);
|
|
43
|
+
rawData = output.scriptPubKey;
|
|
44
|
+
validData = true;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.id}.${i}]: ${e}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (!validData || !opReturnData) {
|
|
52
|
+
this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
// find target chain token id
|
|
56
|
+
let assetTransformation;
|
|
57
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
58
|
+
const output = outputs[i];
|
|
59
|
+
if (output.scriptPubKey !== this.lockScriptPubKey)
|
|
60
|
+
continue; // utxo address is not lock address
|
|
61
|
+
assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
|
|
62
|
+
if (assetTransformation) {
|
|
63
|
+
validLock = true;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!validLock || !assetTransformation) {
|
|
68
|
+
this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const fromAddress = `box:${transaction.inputs[0].txId}.${transaction.inputs[0].index}`;
|
|
72
|
+
return {
|
|
73
|
+
toChain: opReturnData.toChain,
|
|
74
|
+
toAddress: opReturnData.toAddress,
|
|
75
|
+
bridgeFee: opReturnData.bridgeFee,
|
|
76
|
+
networkFee: opReturnData.networkFee,
|
|
77
|
+
fromAddress: fromAddress,
|
|
78
|
+
sourceChainTokenId: assetTransformation.from,
|
|
79
|
+
amount: assetTransformation.amount,
|
|
80
|
+
targetChainTokenId: assetTransformation.to,
|
|
81
|
+
sourceTxId: transaction.id,
|
|
82
|
+
rawData,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
this.logger.debug(`An error occurred while getting Bitcoin rosen data: ${e}`);
|
|
87
|
+
if (e instanceof Error && e.stack) {
|
|
88
|
+
this.logger.debug(e.stack);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* extracts and builds token transformation from UTXO and tokenMap
|
|
95
|
+
* @param box transaction output
|
|
96
|
+
* @param toChain event target chain
|
|
97
|
+
*/
|
|
98
|
+
getAssetTransformation = (box, toChain) => {
|
|
99
|
+
// try to build transformation using locked BTC
|
|
100
|
+
const wrappedBtc = this.tokens.search(BITCOIN_CHAIN, {
|
|
101
|
+
tokenId: BITCOIN_NATIVE_TOKEN,
|
|
102
|
+
});
|
|
103
|
+
if (wrappedBtc.length > 0 && Object.hasOwn(wrappedBtc[0], toChain)) {
|
|
104
|
+
const satoshiAmount = box.value;
|
|
105
|
+
return {
|
|
106
|
+
from: BITCOIN_NATIVE_TOKEN,
|
|
107
|
+
to: this.tokens.getID(wrappedBtc[0], toChain),
|
|
108
|
+
amount: satoshiAmount.toString(),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0Y29pblJvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9iaXRjb2luL2JpdGNvaW5Sb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3hDLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSwwQkFBa0M7SUFDbEUsS0FBSyxHQUFHLGFBQWEsQ0FBQztJQUNyQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsR0FBRyxDQUFDLHFCQUE2QixFQUF5QixFQUFFO1FBQ3hFLElBQUksV0FBc0IsQ0FBQztRQUMzQixJQUFJLENBQUM7WUFDSCxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixxRkFBcUYsQ0FBQyxFQUFFLENBQ3pGLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsK0JBQStCLFdBQVcs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QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2dCQUM3QyxNQUFNLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTthQUNqQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEsIFRva2VuVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvYWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgQklUQ09JTl9DSEFJTiwgQklUQ09JTl9OQVRJVkVfVE9LRU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBCaXRjb2luVHgsIEJpdGNvaW5UeE91dHB1dCwgT3BSZXR1cm5EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgYWRkcmVzcyB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgcGFyc2VPcFJldHVybiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmV4cG9ydCBjbGFzcyBCaXRjb2luUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxzdHJpbmc+IHtcbiAgcmVhZG9ubHkgY2hhaW4gPSBCSVRDT0lOX0NIQUlOO1xuICBwcm90ZWN0ZWQgbG9ja1NjcmlwdFB1YktleTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGxvY2tBZGRyZXNzOiBzdHJpbmcsIHRva2VuczogVG9rZW5NYXAsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIobG9ja0FkZHJlc3MsIHRva2VucywgbG9nZ2VyKTtcbiAgICB0aGlzLmxvY2tTY3JpcHRQdWJLZXkgPSBhZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGxvY2tBZGRyZXNzKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogZXh0cmFjdHMgUm9zZW5EYXRhIGZyb20gZ2l2ZW4gbG9jayB0cmFuc2FjdGlvbiBpbiBCaXRjb2luVHggZm9ybWF0XG4gICAqIEBwYXJhbSBzZXJpYWxpemVkVHJhbnNhY3Rpb24gc3RyaW5naWZpZWQgdHJhbnNhY3Rpb24gaW4gQml0Y29pblR4IGZvcm1hdFxuICAgKi9cbiAgZXh0cmFjdFJhd0RhdGEgPSAoc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBSb3NlbkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCB0cmFuc2FjdGlvbjogQml0Y29pblR4O1xuICAgIHRyeSB7XG4gICAgICB0cmFuc2FjdGlvbiA9IEpzb25CaWdJbnQucGFyc2Uoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcGFyc2UgdHJhbnNhY3Rpb24ganNvbiB0byBCaXRjb2luVHggZm9ybWF0IHdoaWxlIGV4dHJhY3Rpbmcgcm9zZW4gZGF0YTogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzO1xuICAgICAgaWYgKG91dHB1dHMubGVuZ3RoIDwgMikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGJveGVzYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWxpZERhdGEgPSBmYWxzZTsgLy8gYW4gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRcbiAgICAgIGxldCB2YWxpZExvY2sgPSBmYWxzZTsgLy8gYSBsb2NrIGJveCBpcyBmb3VuZCB3aXRoIGF2YWlsYWJsZSBhc3NldCB0cmFuc2Zvcm1hdGlvblxuXG4gICAgICAvLyBwYXJzZSByb3NlbiBkYXRhIGZyb20gT1BfUkVUVVJOIGJveFxuICAgICAgbGV0IG9wUmV0dXJuRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IHJhd0RhdGE6IHN0cmluZyA9ICcnO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5LnNsaWNlKDAsIDIpICE9PSAnNmEnKSBjb250aW51ZTsgLy8gbm90IGFuIE9QX1JFVFVSTiB1dHhvXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcFJldHVybkRhdGEgPSBwYXJzZU9wUmV0dXJuKG91dHB1dC5zY3JpcHRQdWJLZXkpO1xuICAgICAgICAgIHJhd0RhdGEgPSBvdXRwdXQuc2NyaXB0UHViS2V5O1xuICAgICAgICAgIHZhbGlkRGF0YSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXh0cmFjdCBkYXRhIGZyb20gT1BfUkVUVVJOIGJveCBbJHt0cmFuc2FjdGlvbi5pZH0uJHtpfV06ICR7ZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWREYXRhIHx8ICFvcFJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogTm8gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRgLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5kIHRhcmdldCBjaGFpbiB0b2tlbiBpZFxuICAgICAgbGV0IGFzc2V0VHJhbnNmb3JtYXRpb246IFRva2VuVHJhbnNmb3JtYXRpb24gfCB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgICAgaWYgKG91dHB1dC5zY3JpcHRQdWJLZXkgIT09IHRoaXMubG9ja1NjcmlwdFB1YktleSkgY29udGludWU7IC8vIHV0eG8gYWRkcmVzcyBpcyBub3QgbG9jayBhZGRyZXNzXG4gICAgICAgIGFzc2V0VHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldEFzc2V0VHJhbnNmb3JtYXRpb24oXG4gICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgIG9wUmV0dXJuRGF0YS50b0NoYWluLFxuICAgICAgICApO1xuICAgICAgICBpZiAoYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICAgIHZhbGlkTG9jayA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRMb2NrIHx8ICFhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IEZhaWxlZCB0byBmaW5kIHJvc2VuIGFzc2V0IHRyYW5zZm9ybWF0aW9uYCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSBgYm94OiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLnR4SWR9LiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLmluZGV4fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLmlkLFxuICAgICAgICByYXdEYXRhLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgQml0Y29pbiByb3NlbiBkYXRhOiAke2V9YCxcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBVVFhPIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBCaXRjb2luVHhPdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nLFxuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEJUQ1xuICAgIGNvbnN0IHdyYXBwZWRCdGMgPSB0aGlzLnRva2Vucy5zZWFyY2goQklUQ09JTl9DSEFJTiwge1xuICAgICAgdG9rZW5JZDogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgfSk7XG4gICAgaWYgKHdyYXBwZWRCdGMubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHdyYXBwZWRCdGNbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICBjb25zdCBzYXRvc2hpQW1vdW50ID0gYm94LnZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogQklUQ09JTl9OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh3cmFwcGVkQnRjWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBzYXRvc2hpQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|