@rosen-bridge/rosen-extractor 7.2.1 → 7.2.2-f4cdb6ba

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.
Files changed (38) hide show
  1. package/dist/lib/getRosenData/abstract/types.d.ts +13 -13
  2. package/dist/lib/getRosenData/bitcoin/types.d.ts +66 -66
  3. package/dist/lib/getRosenData/bitcoin/utils.d.ts +1 -1
  4. package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts +13 -16
  5. package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts +13 -16
  6. package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts +13 -16
  7. package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts +13 -16
  8. package/dist/lib/getRosenData/const.d.ts +1 -0
  9. package/dist/lib/getRosenData/const.d.ts.map +1 -1
  10. package/dist/lib/getRosenData/const.js +3 -1
  11. package/dist/lib/getRosenData/ergo/types.d.ts +24 -24
  12. package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts +6 -0
  13. package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -1
  14. package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.js +25 -2
  15. package/dist/lib/getRosenData/evm/utils.d.ts +5 -5
  16. package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts +35 -0
  17. package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -0
  18. package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.js +117 -0
  19. package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts +35 -0
  20. package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -0
  21. package/dist/lib/getRosenData/runes/RunesRosenExtractor.js +124 -0
  22. package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts +35 -0
  23. package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -0
  24. package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.js +117 -0
  25. package/dist/lib/getRosenData/runes/types.d.ts +5 -0
  26. package/dist/lib/getRosenData/runes/types.d.ts.map +1 -0
  27. package/dist/lib/getRosenData/runes/types.js +2 -0
  28. package/dist/lib/getRosenData/runes/utils.d.ts +7 -0
  29. package/dist/lib/getRosenData/runes/utils.d.ts.map +1 -0
  30. package/dist/lib/getRosenData/runes/utils.js +31 -0
  31. package/dist/lib/index.d.ts +3 -0
  32. package/dist/lib/index.d.ts.map +1 -1
  33. package/dist/lib/index.js +4 -1
  34. package/dist/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +5 -4
  36. package/dist/lib/getRosenData/Utils.d.ts +0 -59
  37. package/dist/lib/getRosenData/Utils.d.ts.map +0 -1
  38. package/dist/lib/getRosenData/Utils.js +0 -96
@@ -0,0 +1,117 @@
1
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import { RUNES_CHAIN } from '../const';
3
+ import { address, initEccLib } from 'bitcoinjs-lib';
4
+ import { parseRosenData } from './utils';
5
+ import JsonBigInt from '@rosen-bridge/json-bigint';
6
+ import * as tinySecp from 'tiny-secp256k1';
7
+ export class RunesEsploraRosenExtractor extends AbstractRosenDataExtractor {
8
+ chain = RUNES_CHAIN;
9
+ lockScriptPubKey;
10
+ constructor(lockAddress, tokens, logger) {
11
+ super(lockAddress, tokens, logger);
12
+ initEccLib(tinySecp);
13
+ this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
14
+ }
15
+ /**
16
+ * extracts RosenData from given lock transaction in Esplora format
17
+ * @param transaction the lock transaction in Esplora format
18
+ */
19
+ extractRawData = (transaction) => {
20
+ const baseError = `No rosen data is found for tx [${transaction.txid}]`;
21
+ try {
22
+ // validate number of output boxes
23
+ const outputs = transaction.vout;
24
+ if (outputs.length < 5) {
25
+ this.logger.debug(baseError + `: Insufficient number of boxes`);
26
+ return undefined;
27
+ }
28
+ // validate lock conditions
29
+ const validLock = this.validateLock(outputs);
30
+ if (!validLock) {
31
+ this.logger.debug(baseError + `: Failed to find rosen lock utxo`);
32
+ return undefined;
33
+ }
34
+ // validate data conditions
35
+ const lockDataChunks = this.getLockDataChunks(outputs);
36
+ const lockData = this.lockDataFromChunks(lockDataChunks);
37
+ if (!lockData) {
38
+ this.logger.debug(baseError + `: Failed to extract rosen data from utxos`);
39
+ return undefined;
40
+ }
41
+ const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
42
+ return {
43
+ toChain: lockData.toChain,
44
+ toAddress: lockData.toAddress,
45
+ bridgeFee: lockData.bridgeFee,
46
+ networkFee: lockData.networkFee,
47
+ fromAddress: fromAddress,
48
+ sourceChainTokenId: 'undefined',
49
+ amount: '0',
50
+ targetChainTokenId: 'undefined',
51
+ sourceTxId: transaction.txid,
52
+ };
53
+ }
54
+ catch (e) {
55
+ this.logger.debug(`An error occurred while getting Runes rosen data from Esplora: ${e}`);
56
+ if (e instanceof Error && e.stack) {
57
+ this.logger.debug(e.stack);
58
+ }
59
+ }
60
+ return undefined;
61
+ };
62
+ /**
63
+ * extracts RosenData chunks from tx outputs
64
+ * @param outputs
65
+ * @return array of LockDataChunk
66
+ */
67
+ getLockDataChunks = (outputs) => {
68
+ const minUtxoValue = 294;
69
+ const lockDataChunks = [];
70
+ for (let i = 0; i < 4; i++) {
71
+ for (let boxIndex = 0; boxIndex < outputs.length; boxIndex++) {
72
+ const output = outputs[boxIndex];
73
+ if (output.value !== minUtxoValue + i)
74
+ continue; // wrong data index
75
+ if (output.scriptpubkey.slice(0, 4) !== '0014')
76
+ continue; // not a native-segwit utxo
77
+ lockDataChunks.push({
78
+ index: i,
79
+ data: output.scriptpubkey.slice(4),
80
+ });
81
+ }
82
+ }
83
+ return lockDataChunks;
84
+ };
85
+ /**
86
+ * combines lock data chunks into lock data object
87
+ * @param lockDataChunks
88
+ * @return lock data object or undefined
89
+ */
90
+ lockDataFromChunks = (lockDataChunks) => {
91
+ let lockData;
92
+ try {
93
+ lockData = parseRosenData(lockDataChunks.map((chunk) => chunk.data).join(''));
94
+ }
95
+ catch (e) {
96
+ this.logger.debug(`Failed to extract data from chunks [${JsonBigInt.stringify(lockDataChunks)}]: ${e}`);
97
+ }
98
+ return lockData;
99
+ };
100
+ /**
101
+ * check lock box exists in the tx outputs
102
+ * @param outputs
103
+ * @return boolean
104
+ */
105
+ validateLock = (outputs) => {
106
+ let validLock = false;
107
+ for (let i = 0; i < outputs.length; i++) {
108
+ const output = outputs[i];
109
+ if (output.scriptpubkey === this.lockScriptPubKey) {
110
+ validLock = true;
111
+ break;
112
+ }
113
+ }
114
+ return validLock;
115
+ };
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuZXNFc3Bsb3JhUm9zZW5FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL3J1bmVzL1J1bmVzRXNwbG9yYVJvc2VuRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sMEJBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVF2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsTUFBTSxPQUFPLDBCQUEyQixTQUFRLDBCQUFxRDtJQUMxRixLQUFLLEdBQUcsV0FBVyxDQUFDO0lBQ25CLGdCQUFnQixDQUFTO0lBRW5DLFlBQVksV0FBbUIsRUFBRSxNQUFnQixFQUFFLE1BQXVCO1FBQ3hFLEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsR0FBRyxDQUNmLFdBQXNDLEVBQ2YsRUFBRTtRQUN6QixNQUFNLFNBQVMsR0FBRyxrQ0FBa0MsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3hFLElBQUk7WUFDRixrQ0FBa0M7WUFDbEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdB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Q0FBQztJQUN4QixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsa0JBQWtCLEdBQUcsQ0FDbkIsY0FBK0IsRUFDTCxFQUFFO1FBQzVCLElBQUksUUFBa0MsQ0FBQztRQUV2QyxJQUFJO1lBQ0YsUUFBUSxHQUFHLGNBQWMsQ0FDdkIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDbkQsQ0FBQztTQUNIO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZix1Q0FBdUMsVUFBVSxDQUFDLFNBQVMsQ0FDekQsY0FBYyxDQUNmLE1BQU0sQ0FBQyxFQUFFLENBQ1gsQ0FBQztTQUNIO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILFlBQVksR0FBRyxDQUFDLE9BQTBCLEVBQVcsRUFBRTtRQUNyRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2pELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEgfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgUlVORVNfQ0hBSU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQge1xuICBCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uLFxuICBFc3Bsb3JhVHhPdXRwdXQsXG4gIE9wUmV0dXJuRGF0YSxcbn0gZnJvbSAnLi4vYml0Y29pbi90eXBlcyc7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgYWRkcmVzcywgaW5pdEVjY0xpYiB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuaW1wb3J0IHsgcGFyc2VSb3NlbkRhdGEgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBKc29uQmlnSW50IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0ICogYXMgdGlueVNlY3AgZnJvbSAndGlueS1zZWNwMjU2azEnO1xuaW1wb3J0IHsgTG9ja0RhdGFDaHVuayB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUnVuZXNFc3Bsb3JhUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxCaXRjb2luRXNwbG9yYVRyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gUlVORVNfQ0hBSU47XG4gIHByb3RlY3RlZCBsb2NrU2NyaXB0UHViS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIGluaXRFY2NMaWIodGlueVNlY3ApO1xuICAgIHRoaXMubG9ja1NjcmlwdFB1YktleSA9IGFkZHJlc3MudG9PdXRwdXRTY3JpcHQobG9ja0FkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGluIEVzcGxvcmEgZm9ybWF0XG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiB0aGUgbG9jayB0cmFuc2FjdGlvbiBpbiBFc3Bsb3JhIGZvcm1hdFxuICAgKi9cbiAgZXh0cmFjdFJhd0RhdGEgPSAoXG4gICAgdHJhbnNhY3Rpb246IEJpdGNvaW5Fc3Bsb3JhVHJhbnNhY3Rpb25cbiAgKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBpcyBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgLy8gdmFsaWRhdGUgbnVtYmVyIG9mIG91dHB1dCBib3hlc1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWRhdGUgbG9jayBjb25kaXRpb25zXG4gICAgICBjb25zdCB2YWxpZExvY2sgPSB0aGlzLnZhbGlkYXRlTG9jayhvdXRwdXRzKTtcbiAgICAgIGlmICghdmFsaWRMb2NrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEZhaWxlZCB0byBmaW5kIHJvc2VuIGxvY2sgdXR4b2ApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZGF0ZSBkYXRhIGNvbmRpdGlvbnNcbiAgICAgIGNvbnN0IGxvY2tEYXRhQ2h1bmtzID0gdGhpcy5nZXRMb2NrRGF0YUNodW5rcyhvdXRwdXRzKTtcbiAgICAgIGNvbnN0IGxvY2tEYXRhID0gdGhpcy5sb2NrRGF0YUZyb21DaHVua3MobG9ja0RhdGFDaHVua3MpO1xuICAgICAgaWYgKCFsb2NrRGF0YSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZXh0cmFjdCByb3NlbiBkYXRhIGZyb20gdXR4b3NgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gYGJveDoke3RyYW5zYWN0aW9uLnZpblswXS50eGlkfS4ke3RyYW5zYWN0aW9uLnZpblswXS52b3V0fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBsb2NrRGF0YS50b0NoYWluLFxuICAgICAgICB0b0FkZHJlc3M6IGxvY2tEYXRhLnRvQWRkcmVzcyxcbiAgICAgICAgYnJpZGdlRmVlOiBsb2NrRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IGxvY2tEYXRhLm5ldHdvcmtGZWUsXG4gICAgICAgIGZyb21BZGRyZXNzOiBmcm9tQWRkcmVzcyxcbiAgICAgICAgc291cmNlQ2hhaW5Ub2tlbklkOiAndW5kZWZpbmVkJyxcbiAgICAgICAgYW1vdW50OiAnMCcsXG4gICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogJ3VuZGVmaW5lZCcsXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLnR4aWQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBSdW5lcyByb3NlbiBkYXRhIGZyb20gRXNwbG9yYTogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBjaHVua3MgZnJvbSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYXJyYXkgb2YgTG9ja0RhdGFDaHVua1xuICAgKi9cbiAgZ2V0TG9ja0RhdGFDaHVua3MgPSAob3V0cHV0czogRXNwbG9yYVR4T3V0cHV0W10pOiBMb2NrRGF0YUNodW5rW10gPT4ge1xuICAgIGNvbnN0IG1pblV0eG9WYWx1ZSA9IDI5NDtcbiAgICBjb25zdCBsb2NrRGF0YUNodW5rczogTG9ja0RhdGFDaHVua1tdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgZm9yIChsZXQgYm94SW5kZXggPSAwOyBib3hJbmRleCA8IG91dHB1dHMubGVuZ3RoOyBib3hJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYm94SW5kZXhdO1xuXG4gICAgICAgIGlmIChvdXRwdXQudmFsdWUgIT09IG1pblV0eG9WYWx1ZSArIGkpIGNvbnRpbnVlOyAvLyB3cm9uZyBkYXRhIGluZGV4XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5LnNsaWNlKDAsIDQpICE9PSAnMDAxNCcpIGNvbnRpbnVlOyAvLyBub3QgYSBuYXRpdmUtc2Vnd2l0IHV0eG9cblxuICAgICAgICBsb2NrRGF0YUNodW5rcy5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICBkYXRhOiBvdXRwdXQuc2NyaXB0cHVia2V5LnNsaWNlKDQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG9ja0RhdGFDaHVua3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNvbWJpbmVzIGxvY2sgZGF0YSBjaHVua3MgaW50byBsb2NrIGRhdGEgb2JqZWN0XG4gICAqIEBwYXJhbSBsb2NrRGF0YUNodW5rc1xuICAgKiBAcmV0dXJuIGxvY2sgZGF0YSBvYmplY3Qgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBsb2NrRGF0YUZyb21DaHVua3MgPSAoXG4gICAgbG9ja0RhdGFDaHVua3M6IExvY2tEYXRhQ2h1bmtbXVxuICApOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBsb2NrRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2tEYXRhID0gcGFyc2VSb3NlbkRhdGEoXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLm1hcCgoY2h1bmspID0+IGNodW5rLmRhdGEpLmpvaW4oJycpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGNodW5rcyBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICBsb2NrRGF0YUNodW5rc1xuICAgICAgICApfV06ICR7ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NrRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogY2hlY2sgbG9jayBib3ggZXhpc3RzIGluIHRoZSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYm9vbGVhblxuICAgKi9cbiAgdmFsaWRhdGVMb2NrID0gKG91dHB1dHM6IEVzcGxvcmFUeE91dHB1dFtdKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5ID09PSB0aGlzLmxvY2tTY3JpcHRQdWJLZXkpIHtcbiAgICAgICAgdmFsaWRMb2NrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZExvY2s7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { RosenData } from '../abstract/types';
2
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
3
+ import { BitcoinTxOutput, OpReturnData } from '../bitcoin/types';
4
+ import { TokenMap } from '@rosen-bridge/tokens';
5
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
6
+ import { LockDataChunk } from './types';
7
+ export declare class RunesRosenExtractor extends AbstractRosenDataExtractor<string> {
8
+ readonly chain = "runes";
9
+ protected lockScriptPubKey: string;
10
+ constructor(lockAddress: string, tokens: TokenMap, logger?: AbstractLogger);
11
+ /**
12
+ * extracts RosenData from given lock transaction in BitcoinTx format
13
+ * @param serializedTransaction stringified transaction in BitcoinTx format
14
+ */
15
+ extractRawData: (serializedTransaction: string) => RosenData | undefined;
16
+ /**
17
+ * extracts RosenData chunks from tx outputs
18
+ * @param outputs
19
+ * @return array of LockDataChunk
20
+ */
21
+ getLockDataChunks: (outputs: BitcoinTxOutput[]) => LockDataChunk[];
22
+ /**
23
+ * combines lock data chunks into lock data object
24
+ * @param lockDataChunks
25
+ * @return lock data object or undefined
26
+ */
27
+ lockDataFromChunks: (lockDataChunks: LockDataChunk[]) => OpReturnData | undefined;
28
+ /**
29
+ * check lock box exists in the tx outputs
30
+ * @param outputs
31
+ * @return boolean
32
+ */
33
+ validateLock: (outputs: BitcoinTxOutput[]) => boolean;
34
+ }
35
+ //# sourceMappingURL=RunesRosenExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunesRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/runes/RunesRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAa,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,mBAAoB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IACzE,QAAQ,CAAC,KAAK,WAAe;IAC7B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAM1E;;;OAGG;IACH,cAAc,0BAA2B,MAAM,KAAG,SAAS,GAAG,SAAS,CAyDrE;IAEF;;;;OAIG;IACH,iBAAiB,YAAa,eAAe,EAAE,KAAG,aAAa,EAAE,CAmB/D;IAEF;;;;OAIG;IACH,kBAAkB,mBACA,aAAa,EAAE,KAC9B,YAAY,GAAG,SAAS,CAgBzB;IAEF;;;;OAIG;IACH,YAAY,YAAa,eAAe,EAAE,KAAG,OAAO,CAUlD;CACH"}
@@ -0,0 +1,124 @@
1
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import { RUNES_CHAIN } from '../const';
3
+ import { address, initEccLib } from 'bitcoinjs-lib';
4
+ import { parseRosenData } from './utils';
5
+ import JsonBigInt from '@rosen-bridge/json-bigint';
6
+ import * as tinySecp from 'tiny-secp256k1';
7
+ export class RunesRosenExtractor extends AbstractRosenDataExtractor {
8
+ chain = RUNES_CHAIN;
9
+ lockScriptPubKey;
10
+ constructor(lockAddress, tokens, logger) {
11
+ super(lockAddress, tokens, logger);
12
+ initEccLib(tinySecp);
13
+ this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
14
+ }
15
+ /**
16
+ * extracts RosenData from given lock transaction in BitcoinTx format
17
+ * @param serializedTransaction stringified transaction in BitcoinTx format
18
+ */
19
+ extractRawData = (serializedTransaction) => {
20
+ let transaction;
21
+ try {
22
+ transaction = JsonBigInt.parse(serializedTransaction);
23
+ }
24
+ catch (e) {
25
+ throw new Error(`Failed to parse transaction json to BitcoinTx format while extracting rosen data: ${e}`);
26
+ }
27
+ const baseError = `No rosen data is found for tx [${transaction.id}]`;
28
+ try {
29
+ // validate number of output boxes
30
+ const outputs = transaction.outputs;
31
+ if (outputs.length < 5) {
32
+ this.logger.debug(baseError + `: Insufficient number of boxes`);
33
+ return undefined;
34
+ }
35
+ // validate lock conditions
36
+ const validLock = this.validateLock(outputs);
37
+ if (!validLock) {
38
+ this.logger.debug(baseError + `: Failed to find rosen lock utxo`);
39
+ return undefined;
40
+ }
41
+ // validate data conditions
42
+ const lockDataChunks = this.getLockDataChunks(outputs);
43
+ const lockData = this.lockDataFromChunks(lockDataChunks);
44
+ if (!lockData) {
45
+ this.logger.debug(baseError + `: Failed to extract rosen data from utxos`);
46
+ return undefined;
47
+ }
48
+ const fromAddress = `box:${transaction.inputs[0].txId}.${transaction.inputs[0].index}`;
49
+ return {
50
+ toChain: lockData.toChain,
51
+ toAddress: lockData.toAddress,
52
+ bridgeFee: lockData.bridgeFee,
53
+ networkFee: lockData.networkFee,
54
+ fromAddress: fromAddress,
55
+ sourceChainTokenId: 'undefined',
56
+ amount: '0',
57
+ targetChainTokenId: 'undefined',
58
+ sourceTxId: transaction.id,
59
+ };
60
+ }
61
+ catch (e) {
62
+ this.logger.debug(`An error occurred while getting Runes rosen data from BitcoinTx: ${e}`);
63
+ if (e instanceof Error && e.stack) {
64
+ this.logger.debug(e.stack);
65
+ }
66
+ }
67
+ return undefined;
68
+ };
69
+ /**
70
+ * extracts RosenData chunks from tx outputs
71
+ * @param outputs
72
+ * @return array of LockDataChunk
73
+ */
74
+ getLockDataChunks = (outputs) => {
75
+ const minUtxoValue = 294n;
76
+ const lockDataChunks = [];
77
+ for (let i = 0n; i < 4n; i++) {
78
+ for (let boxIndex = 0; boxIndex < outputs.length; boxIndex++) {
79
+ const output = outputs[boxIndex];
80
+ if (output.value !== minUtxoValue + i)
81
+ continue; // wrong data index
82
+ if (output.scriptPubKey.slice(0, 4) !== '0014')
83
+ continue; // not a native-segwit utxo
84
+ lockDataChunks.push({
85
+ index: Number(i),
86
+ data: output.scriptPubKey.slice(4),
87
+ });
88
+ }
89
+ }
90
+ return lockDataChunks;
91
+ };
92
+ /**
93
+ * combines lock data chunks into lock data object
94
+ * @param lockDataChunks
95
+ * @return lock data object or undefined
96
+ */
97
+ lockDataFromChunks = (lockDataChunks) => {
98
+ let lockData;
99
+ try {
100
+ lockData = parseRosenData(lockDataChunks.map((chunk) => chunk.data).join(''));
101
+ }
102
+ catch (e) {
103
+ this.logger.debug(`Failed to extract data from chunks [${JsonBigInt.stringify(lockDataChunks)}]: ${e}`);
104
+ }
105
+ return lockData;
106
+ };
107
+ /**
108
+ * check lock box exists in the tx outputs
109
+ * @param outputs
110
+ * @return boolean
111
+ */
112
+ validateLock = (outputs) => {
113
+ let validLock = false;
114
+ for (let i = 0; i < outputs.length; i++) {
115
+ const output = outputs[i];
116
+ if (output.scriptPubKey === this.lockScriptPubKey) {
117
+ validLock = true;
118
+ break;
119
+ }
120
+ }
121
+ return validLock;
122
+ };
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuZXNSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvcnVuZXMvUnVuZXNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSwwQkFBa0M7SUFDaEUsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLEdBQUcsQ0FBQyxxQkFBNkIsRUFBeUIsRUFBRTtRQUN4RSxJQUFJLFdBQXNCLENBQUM7UUFDM0IsSUFBSTtZQUNGLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdkQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQ2IscUZBQXFGLENBQUMsRUFBRSxDQUN6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Q25CLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm9zZW5EYXRhIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IFJVTkVTX0NIQUlOIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgQml0Y29pblR4T3V0cHV0LCBCaXRjb2luVHgsIE9wUmV0dXJuRGF0YSB9IGZyb20gJy4uL2JpdGNvaW4vdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IGFkZHJlc3MsIGluaXRFY2NMaWIgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IHBhcnNlUm9zZW5EYXRhIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHRpbnlTZWNwIGZyb20gJ3Rpbnktc2VjcDI1NmsxJztcbmltcG9ydCB7IExvY2tEYXRhQ2h1bmsgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFJ1bmVzUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxzdHJpbmc+IHtcbiAgcmVhZG9ubHkgY2hhaW4gPSBSVU5FU19DSEFJTjtcbiAgcHJvdGVjdGVkIGxvY2tTY3JpcHRQdWJLZXk6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihsb2NrQWRkcmVzczogc3RyaW5nLCB0b2tlbnM6IFRva2VuTWFwLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlcik7XG4gICAgaW5pdEVjY0xpYih0aW55U2VjcCk7XG4gICAgdGhpcy5sb2NrU2NyaXB0UHViS2V5ID0gYWRkcmVzcy50b091dHB1dFNjcmlwdChsb2NrQWRkcmVzcykudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gQml0Y29pblR4IGZvcm1hdFxuICAgKiBAcGFyYW0gc2VyaWFsaXplZFRyYW5zYWN0aW9uIHN0cmluZ2lmaWVkIHRyYW5zYWN0aW9uIGluIEJpdGNvaW5UeCBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb246IEJpdGNvaW5UeDtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBKc29uQmlnSW50LnBhcnNlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHRyYW5zYWN0aW9uIGpzb24gdG8gQml0Y29pblR4IGZvcm1hdCB3aGlsZSBleHRyYWN0aW5nIHJvc2VuIGRhdGE6ICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBpcyBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIC8vIHZhbGlkYXRlIG51bWJlciBvZiBvdXRwdXQgYm94ZXNcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzO1xuICAgICAgaWYgKG91dHB1dHMubGVuZ3RoIDwgNSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGJveGVzYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkYXRlIGxvY2sgY29uZGl0aW9uc1xuICAgICAgY29uc3QgdmFsaWRMb2NrID0gdGhpcy52YWxpZGF0ZUxvY2sob3V0cHV0cyk7XG4gICAgICBpZiAoIXZhbGlkTG9jaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZmluZCByb3NlbiBsb2NrIHV0eG9gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWRhdGUgZGF0YSBjb25kaXRpb25zXG4gICAgICBjb25zdCBsb2NrRGF0YUNodW5rcyA9IHRoaXMuZ2V0TG9ja0RhdGFDaHVua3Mob3V0cHV0cyk7XG4gICAgICBjb25zdCBsb2NrRGF0YSA9IHRoaXMubG9ja0RhdGFGcm9tQ2h1bmtzKGxvY2tEYXRhQ2h1bmtzKTtcblxuICAgICAgaWYgKCFsb2NrRGF0YSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZXh0cmFjdCByb3NlbiBkYXRhIGZyb20gdXR4b3NgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gYGJveDoke3RyYW5zYWN0aW9uLmlucHV0c1swXS50eElkfS4ke3RyYW5zYWN0aW9uLmlucHV0c1swXS5pbmRleH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9DaGFpbjogbG9ja0RhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBsb2NrRGF0YS50b0FkZHJlc3MsXG4gICAgICAgIGJyaWRnZUZlZTogbG9ja0RhdGEuYnJpZGdlRmVlLFxuICAgICAgICBuZXR3b3JrRmVlOiBsb2NrRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogJ3VuZGVmaW5lZCcsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6ICd1bmRlZmluZWQnLFxuICAgICAgICBzb3VyY2VUeElkOiB0cmFuc2FjdGlvbi5pZCxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIFJ1bmVzIHJvc2VuIGRhdGEgZnJvbSBCaXRjb2luVHg6ICR7ZX1gXG4gICAgICApO1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGUuc3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgY2h1bmtzIGZyb20gdHggb3V0cHV0c1xuICAgKiBAcGFyYW0gb3V0cHV0c1xuICAgKiBAcmV0dXJuIGFycmF5IG9mIExvY2tEYXRhQ2h1bmtcbiAgICovXG4gIGdldExvY2tEYXRhQ2h1bmtzID0gKG91dHB1dHM6IEJpdGNvaW5UeE91dHB1dFtdKTogTG9ja0RhdGFDaHVua1tdID0+IHtcbiAgICBjb25zdCBtaW5VdHhvVmFsdWUgPSAyOTRuO1xuICAgIGNvbnN0IGxvY2tEYXRhQ2h1bmtzOiBMb2NrRGF0YUNodW5rW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwbjsgaSA8IDRuOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGJveEluZGV4ID0gMDsgYm94SW5kZXggPCBvdXRwdXRzLmxlbmd0aDsgYm94SW5kZXgrKykge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzW2JveEluZGV4XTtcblxuICAgICAgICBpZiAob3V0cHV0LnZhbHVlICE9PSBtaW5VdHhvVmFsdWUgKyBpKSBjb250aW51ZTsgLy8gd3JvbmcgZGF0YSBpbmRleFxuICAgICAgICBpZiAob3V0cHV0LnNjcmlwdFB1YktleS5zbGljZSgwLCA0KSAhPT0gJzAwMTQnKSBjb250aW51ZTsgLy8gbm90IGEgbmF0aXZlLXNlZ3dpdCB1dHhvXG5cbiAgICAgICAgbG9ja0RhdGFDaHVua3MucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE51bWJlcihpKSxcbiAgICAgICAgICBkYXRhOiBvdXRwdXQuc2NyaXB0UHViS2V5LnNsaWNlKDQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG9ja0RhdGFDaHVua3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNvbWJpbmVzIGxvY2sgZGF0YSBjaHVua3MgaW50byBsb2NrIGRhdGEgb2JqZWN0XG4gICAqIEBwYXJhbSBsb2NrRGF0YUNodW5rc1xuICAgKiBAcmV0dXJuIGxvY2sgZGF0YSBvYmplY3Qgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBsb2NrRGF0YUZyb21DaHVua3MgPSAoXG4gICAgbG9ja0RhdGFDaHVua3M6IExvY2tEYXRhQ2h1bmtbXVxuICApOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBsb2NrRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2tEYXRhID0gcGFyc2VSb3NlbkRhdGEoXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLm1hcCgoY2h1bmspID0+IGNodW5rLmRhdGEpLmpvaW4oJycpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGNodW5rcyBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICBsb2NrRGF0YUNodW5rc1xuICAgICAgICApfV06ICR7ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NrRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogY2hlY2sgbG9jayBib3ggZXhpc3RzIGluIHRoZSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYm9vbGVhblxuICAgKi9cbiAgdmFsaWRhdGVMb2NrID0gKG91dHB1dHM6IEJpdGNvaW5UeE91dHB1dFtdKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5ID09PSB0aGlzLmxvY2tTY3JpcHRQdWJLZXkpIHtcbiAgICAgICAgdmFsaWRMb2NrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWxpZExvY2s7XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { RosenData } from '../abstract/types';
2
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
3
+ import { BitcoinRpcTransaction, BitcoinRpcTxOutput, OpReturnData } from '../bitcoin/types';
4
+ import { TokenMap } from '@rosen-bridge/tokens';
5
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
6
+ import { LockDataChunk } from './types';
7
+ export declare class RunesRpcRosenExtractor extends AbstractRosenDataExtractor<BitcoinRpcTransaction> {
8
+ readonly chain = "runes";
9
+ protected lockScriptPubKey: string;
10
+ constructor(lockAddress: string, tokens: TokenMap, logger?: AbstractLogger);
11
+ /**
12
+ * extracts RosenData from given lock transaction in Rpc format
13
+ * @param transaction the lock transaction in Rpc format
14
+ */
15
+ extractRawData: (transaction: BitcoinRpcTransaction) => RosenData | undefined;
16
+ /**
17
+ * extracts RosenData chunks from tx outputs
18
+ * @param outputs
19
+ * @return array of LockDataChunk
20
+ */
21
+ getLockDataChunks: (outputs: BitcoinRpcTxOutput[]) => LockDataChunk[];
22
+ /**
23
+ * combines lock data chunks into lock data object
24
+ * @param lockDataChunks
25
+ * @return lock data object or undefined
26
+ */
27
+ lockDataFromChunks: (lockDataChunks: LockDataChunk[]) => OpReturnData | undefined;
28
+ /**
29
+ * check lock box exists in the tx outputs
30
+ * @param outputs
31
+ * @return boolean
32
+ */
33
+ validateLock: (outputs: BitcoinRpcTxOutput[]) => boolean;
34
+ }
35
+ //# sourceMappingURL=RunesRpcRosenExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunesRpcRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/runes/RunesRpcRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,qBAAa,sBAAuB,SAAQ,0BAA0B,CAAC,qBAAqB,CAAC;IAC3F,QAAQ,CAAC,KAAK,WAAe;IAC7B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAM1E;;;OAGG;IACH,cAAc,gBACC,qBAAqB,KACjC,SAAS,GAAG,SAAS,CAkDtB;IAEF;;;;OAIG;IACH,iBAAiB,YAAa,kBAAkB,EAAE,KAAG,aAAa,EAAE,CAmBlE;IAEF;;;;OAIG;IACH,kBAAkB,mBACA,aAAa,EAAE,KAC9B,YAAY,GAAG,SAAS,CAgBzB;IAEF;;;;OAIG;IACH,YAAY,YAAa,kBAAkB,EAAE,KAAG,OAAO,CAUrD;CACH"}
@@ -0,0 +1,117 @@
1
+ import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
2
+ import { RUNES_CHAIN } from '../const';
3
+ import { address, initEccLib } from 'bitcoinjs-lib';
4
+ import { parseRosenData } from './utils';
5
+ import JsonBigInt from '@rosen-bridge/json-bigint';
6
+ import * as tinySecp from 'tiny-secp256k1';
7
+ export class RunesRpcRosenExtractor extends AbstractRosenDataExtractor {
8
+ chain = RUNES_CHAIN;
9
+ lockScriptPubKey;
10
+ constructor(lockAddress, tokens, logger) {
11
+ super(lockAddress, tokens, logger);
12
+ initEccLib(tinySecp);
13
+ this.lockScriptPubKey = address.toOutputScript(lockAddress).toString('hex');
14
+ }
15
+ /**
16
+ * extracts RosenData from given lock transaction in Rpc format
17
+ * @param transaction the lock transaction in Rpc format
18
+ */
19
+ extractRawData = (transaction) => {
20
+ const baseError = `No rosen data is found for tx [${transaction.txid}]`;
21
+ try {
22
+ // validate number of output boxes
23
+ const outputs = transaction.vout;
24
+ if (outputs.length < 5) {
25
+ this.logger.debug(baseError + `: Insufficient number of boxes`);
26
+ return undefined;
27
+ }
28
+ // validate lock conditions
29
+ const validLock = this.validateLock(outputs);
30
+ if (!validLock) {
31
+ this.logger.debug(baseError + `: Failed to find rosen lock utxo`);
32
+ return undefined;
33
+ }
34
+ // validate data conditions
35
+ const lockDataChunks = this.getLockDataChunks(outputs);
36
+ const lockData = this.lockDataFromChunks(lockDataChunks);
37
+ if (!lockData) {
38
+ this.logger.debug(baseError + `: Failed to extract rosen data from utxos`);
39
+ return undefined;
40
+ }
41
+ const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
42
+ return {
43
+ toChain: lockData.toChain,
44
+ toAddress: lockData.toAddress,
45
+ bridgeFee: lockData.bridgeFee,
46
+ networkFee: lockData.networkFee,
47
+ fromAddress: fromAddress,
48
+ sourceChainTokenId: 'undefined',
49
+ amount: '0',
50
+ targetChainTokenId: 'undefined',
51
+ sourceTxId: transaction.txid,
52
+ };
53
+ }
54
+ catch (e) {
55
+ this.logger.debug(`An error occurred while getting Runes rosen data from Rpc: ${e}`);
56
+ if (e instanceof Error && e.stack) {
57
+ this.logger.debug(e.stack);
58
+ }
59
+ }
60
+ return undefined;
61
+ };
62
+ /**
63
+ * extracts RosenData chunks from tx outputs
64
+ * @param outputs
65
+ * @return array of LockDataChunk
66
+ */
67
+ getLockDataChunks = (outputs) => {
68
+ const minUtxoValue = 294;
69
+ const lockDataChunks = [];
70
+ for (let i = 0; i < 4; i++) {
71
+ for (let boxIndex = 0; boxIndex < outputs.length; boxIndex++) {
72
+ const output = outputs[boxIndex];
73
+ if (output.value * 10 ** 8 !== minUtxoValue + i)
74
+ continue; // wrong data index
75
+ if (output.scriptPubKey.hex.slice(0, 4) !== '0014')
76
+ continue; // not a native-segwit utxo
77
+ lockDataChunks.push({
78
+ index: i,
79
+ data: output.scriptPubKey.hex.slice(4),
80
+ });
81
+ }
82
+ }
83
+ return lockDataChunks;
84
+ };
85
+ /**
86
+ * combines lock data chunks into lock data object
87
+ * @param lockDataChunks
88
+ * @return lock data object or undefined
89
+ */
90
+ lockDataFromChunks = (lockDataChunks) => {
91
+ let lockData;
92
+ try {
93
+ lockData = parseRosenData(lockDataChunks.map((chunk) => chunk.data).join(''));
94
+ }
95
+ catch (e) {
96
+ this.logger.debug(`Failed to extract data from chunks [${JsonBigInt.stringify(lockDataChunks)}]: ${e}`);
97
+ }
98
+ return lockData;
99
+ };
100
+ /**
101
+ * check lock box exists in the tx outputs
102
+ * @param outputs
103
+ * @return boolean
104
+ */
105
+ validateLock = (outputs) => {
106
+ let validLock = false;
107
+ for (let i = 0; i < outputs.length; i++) {
108
+ const output = outputs[i];
109
+ if (output.scriptPubKey.hex === this.lockScriptPubKey) {
110
+ validLock = true;
111
+ break;
112
+ }
113
+ }
114
+ return validLock;
115
+ };
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuZXNScGNSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvcnVuZXMvUnVuZXNScGNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFRdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBaUQ7SUFDbEYsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLEdBQUcsQ0FDZixXQUFrQyxFQUNYLEVBQUU7UUFDekIsTUFBTSxTQUFTLEdBQUcsa0NBQWtDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN4RSxJQUFJO1lBQ0Ysa0NBQWtDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMs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QyxDQUFDO2FBQ0o7U0FDRjtRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxrQkFBa0IsR0FBRyxDQUNuQixjQUErQixFQUNMLEVBQUU7UUFDNUIsSUFBSSxRQUFrQyxDQUFDO1FBRXZDLElBQUk7WUFDRixRQUFRLEdBQUcsY0FBYyxDQUN2QixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNuRCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHVDQUF1QyxVQUFVLENBQUMsU0FBUyxDQUN6RCxjQUFjLENBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FDWCxDQUFDO1NBQ0g7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsWUFBWSxHQUFHLENBQUMsT0FBNkIsRUFBVyxFQUFFO1FBQ3hELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEgfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgUlVORVNfQ0hBSU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQge1xuICBCaXRjb2luUnBjVHJhbnNhY3Rpb24sXG4gIEJpdGNvaW5ScGNUeE91dHB1dCxcbiAgT3BSZXR1cm5EYXRhLFxufSBmcm9tICcuLi9iaXRjb2luL3R5cGVzJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBhZGRyZXNzLCBpbml0RWNjTGliIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBwYXJzZVJvc2VuRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgKiBhcyB0aW55U2VjcCBmcm9tICd0aW55LXNlY3AyNTZrMSc7XG5pbXBvcnQgeyBMb2NrRGF0YUNodW5rIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBSdW5lc1JwY1Jvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8Qml0Y29pblJwY1RyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gUlVORVNfQ0hBSU47XG4gIHByb3RlY3RlZCBsb2NrU2NyaXB0UHViS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIGluaXRFY2NMaWIodGlueVNlY3ApO1xuICAgIHRoaXMubG9ja1NjcmlwdFB1YktleSA9IGFkZHJlc3MudG9PdXRwdXRTY3JpcHQobG9ja0FkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGluIFJwYyBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIFJwYyBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKFxuICAgIHRyYW5zYWN0aW9uOiBCaXRjb2luUnBjVHJhbnNhY3Rpb25cbiAgKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBpcyBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgLy8gdmFsaWRhdGUgbnVtYmVyIG9mIG91dHB1dCBib3hlc1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWRhdGUgbG9jayBjb25kaXRpb25zXG4gICAgICBjb25zdCB2YWxpZExvY2sgPSB0aGlzLnZhbGlkYXRlTG9jayhvdXRwdXRzKTtcblxuICAgICAgaWYgKCF2YWxpZExvY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGZpbmQgcm9zZW4gbG9jayB1dHhvYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkYXRlIGRhdGEgY29uZGl0aW9uc1xuICAgICAgY29uc3QgbG9ja0RhdGFDaHVua3MgPSB0aGlzLmdldExvY2tEYXRhQ2h1bmtzKG91dHB1dHMpO1xuICAgICAgY29uc3QgbG9ja0RhdGEgPSB0aGlzLmxvY2tEYXRhRnJvbUNodW5rcyhsb2NrRGF0YUNodW5rcyk7XG5cbiAgICAgIGlmICghbG9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGV4dHJhY3Qgcm9zZW4gZGF0YSBmcm9tIHV0eG9zYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tQWRkcmVzcyA9IGBib3g6JHt0cmFuc2FjdGlvbi52aW5bMF0udHhpZH0uJHt0cmFuc2FjdGlvbi52aW5bMF0udm91dH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9DaGFpbjogbG9ja0RhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBsb2NrRGF0YS50b0FkZHJlc3MsXG4gICAgICAgIGJyaWRnZUZlZTogbG9ja0RhdGEuYnJpZGdlRmVlLFxuICAgICAgICBuZXR3b3JrRmVlOiBsb2NrRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogJ3VuZGVmaW5lZCcsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6ICd1bmRlZmluZWQnLFxuICAgICAgICBzb3VyY2VUeElkOiB0cmFuc2FjdGlvbi50eGlkLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgUnVuZXMgcm9zZW4gZGF0YSBmcm9tIFJwYzogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBjaHVua3MgZnJvbSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYXJyYXkgb2YgTG9ja0RhdGFDaHVua1xuICAgKi9cbiAgZ2V0TG9ja0RhdGFDaHVua3MgPSAob3V0cHV0czogQml0Y29pblJwY1R4T3V0cHV0W10pOiBMb2NrRGF0YUNodW5rW10gPT4ge1xuICAgIGNvbnN0IG1pblV0eG9WYWx1ZSA9IDI5NDtcbiAgICBjb25zdCBsb2NrRGF0YUNodW5rczogTG9ja0RhdGFDaHVua1tdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgZm9yIChsZXQgYm94SW5kZXggPSAwOyBib3hJbmRleCA8IG91dHB1dHMubGVuZ3RoOyBib3hJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYm94SW5kZXhdO1xuXG4gICAgICAgIGlmIChvdXRwdXQudmFsdWUgKiAxMCAqKiA4ICE9PSBtaW5VdHhvVmFsdWUgKyBpKSBjb250aW51ZTsgLy8gd3JvbmcgZGF0YSBpbmRleFxuICAgICAgICBpZiAob3V0cHV0LnNjcmlwdFB1YktleS5oZXguc2xpY2UoMCwgNCkgIT09ICcwMDE0JykgY29udGludWU7IC8vIG5vdCBhIG5hdGl2ZS1zZWd3aXQgdXR4b1xuXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIGRhdGE6IG91dHB1dC5zY3JpcHRQdWJLZXkuaGV4LnNsaWNlKDQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG9ja0RhdGFDaHVua3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNvbWJpbmVzIGxvY2sgZGF0YSBjaHVua3MgaW50byBsb2NrIGRhdGEgb2JqZWN0XG4gICAqIEBwYXJhbSBsb2NrRGF0YUNodW5rc1xuICAgKiBAcmV0dXJuIGxvY2sgZGF0YSBvYmplY3Qgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBsb2NrRGF0YUZyb21DaHVua3MgPSAoXG4gICAgbG9ja0RhdGFDaHVua3M6IExvY2tEYXRhQ2h1bmtbXVxuICApOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBsb2NrRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2tEYXRhID0gcGFyc2VSb3NlbkRhdGEoXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLm1hcCgoY2h1bmspID0+IGNodW5rLmRhdGEpLmpvaW4oJycpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGNodW5rcyBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICBsb2NrRGF0YUNodW5rc1xuICAgICAgICApfV06ICR7ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NrRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogY2hlY2sgbG9jayBib3ggZXhpc3RzIGluIHRoZSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYm9vbGVhblxuICAgKi9cbiAgdmFsaWRhdGVMb2NrID0gKG91dHB1dHM6IEJpdGNvaW5ScGNUeE91dHB1dFtdKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5LmhleCA9PT0gdGhpcy5sb2NrU2NyaXB0UHViS2V5KSB7XG4gICAgICAgIHZhbGlkTG9jayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRMb2NrO1xuICB9O1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ export type LockDataChunk = {
2
+ index: number;
3
+ data: string;
4
+ };
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/runes/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL3J1bmVzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBMb2NrRGF0YUNodW5rID0geyBpbmRleDogbnVtYmVyOyBkYXRhOiBzdHJpbmcgfTtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { OpReturnData } from '../bitcoin/types';
2
+ /**
3
+ * extracts rosen data from raw hex data
4
+ * @param scriptPubKeyHex
5
+ */
6
+ export declare const parseRosenData: (scriptPubKeyHex: string) => OpReturnData;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/runes/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;;GAGG;AACH,eAAO,MAAM,cAAc,oBAAqB,MAAM,KAAG,YAgCxD,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { decodeAddress } from '@rosen-bridge/address-codec';
2
+ import { SUPPORTED_CHAINS } from '../const';
3
+ /**
4
+ * extracts rosen data from raw hex data
5
+ * @param scriptPubKeyHex
6
+ */
7
+ export const parseRosenData = (scriptPubKeyHex) => {
8
+ // parse toChain
9
+ const toChainHex = scriptPubKeyHex.slice(0, 2);
10
+ const toChainCode = parseInt(toChainHex, 16);
11
+ if (toChainCode >= SUPPORTED_CHAINS.length)
12
+ throw Error(`invalid toChain code, found [${toChainCode}] but only [${SUPPORTED_CHAINS.length}] chains are supported`);
13
+ const toChain = SUPPORTED_CHAINS[toChainCode];
14
+ // parse bridgeFee
15
+ const bridgeFeeHex = scriptPubKeyHex.slice(2, 18);
16
+ const bridgeFee = BigInt('0x' + bridgeFeeHex).toString();
17
+ // parse networkFee
18
+ const networkFeeHex = scriptPubKeyHex.slice(18, 34);
19
+ const networkFee = BigInt('0x' + networkFeeHex).toString();
20
+ // parse toAddress
21
+ const addressLengthCode = scriptPubKeyHex.slice(34, 36);
22
+ const addressHex = scriptPubKeyHex.slice(36, 36 + parseInt(addressLengthCode, 16) * 2);
23
+ const toAddress = decodeAddress(toChain, addressHex);
24
+ return {
25
+ toChain,
26
+ toAddress,
27
+ bridgeFee,
28
+ networkFee,
29
+ };
30
+ };
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL3J1bmVzL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsZUFBdUIsRUFBZ0IsRUFBRTtJQUN0RSxnQkFBZ0I7SUFDaEIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNO1FBQ3hDLE1BQU0sS0FBSyxDQUNULGdDQUFnQyxXQUFXLGVBQWUsZ0JBQWdCLENBQUMsTUFBTSx3QkFBd0IsQ0FDMUcsQ0FBQztJQUNKLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLGtCQUFrQjtJQUNsQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXpELG1CQUFtQjtJQUNuQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELGtCQUFrQjtJQUNsQixNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQ3RDLEVBQUUsRUFDRixFQUFFLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FDekMsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFckQsT0FBTztRQUNMLE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWRkcmVzcy1jb2RlYyc7XG5pbXBvcnQgeyBPcFJldHVybkRhdGEgfSBmcm9tICcuLi9iaXRjb2luL3R5cGVzJztcbmltcG9ydCB7IFNVUFBPUlRFRF9DSEFJTlMgfSBmcm9tICcuLi9jb25zdCc7XG5cbi8qKlxuICogZXh0cmFjdHMgcm9zZW4gZGF0YSBmcm9tIHJhdyBoZXggZGF0YVxuICogQHBhcmFtIHNjcmlwdFB1YktleUhleFxuICovXG5leHBvcnQgY29uc3QgcGFyc2VSb3NlbkRhdGEgPSAoc2NyaXB0UHViS2V5SGV4OiBzdHJpbmcpOiBPcFJldHVybkRhdGEgPT4ge1xuICAvLyBwYXJzZSB0b0NoYWluXG4gIGNvbnN0IHRvQ2hhaW5IZXggPSBzY3JpcHRQdWJLZXlIZXguc2xpY2UoMCwgMik7XG4gIGNvbnN0IHRvQ2hhaW5Db2RlID0gcGFyc2VJbnQodG9DaGFpbkhleCwgMTYpO1xuICBpZiAodG9DaGFpbkNvZGUgPj0gU1VQUE9SVEVEX0NIQUlOUy5sZW5ndGgpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgaW52YWxpZCB0b0NoYWluIGNvZGUsIGZvdW5kIFske3RvQ2hhaW5Db2RlfV0gYnV0IG9ubHkgWyR7U1VQUE9SVEVEX0NIQUlOUy5sZW5ndGh9XSBjaGFpbnMgYXJlIHN1cHBvcnRlZGBcbiAgICApO1xuICBjb25zdCB0b0NoYWluID0gU1VQUE9SVEVEX0NIQUlOU1t0b0NoYWluQ29kZV07XG5cbiAgLy8gcGFyc2UgYnJpZGdlRmVlXG4gIGNvbnN0IGJyaWRnZUZlZUhleCA9IHNjcmlwdFB1YktleUhleC5zbGljZSgyLCAxOCk7XG4gIGNvbnN0IGJyaWRnZUZlZSA9IEJpZ0ludCgnMHgnICsgYnJpZGdlRmVlSGV4KS50b1N0cmluZygpO1xuXG4gIC8vIHBhcnNlIG5ldHdvcmtGZWVcbiAgY29uc3QgbmV0d29ya0ZlZUhleCA9IHNjcmlwdFB1YktleUhleC5zbGljZSgxOCwgMzQpO1xuICBjb25zdCBuZXR3b3JrRmVlID0gQmlnSW50KCcweCcgKyBuZXR3b3JrRmVlSGV4KS50b1N0cmluZygpO1xuXG4gIC8vIHBhcnNlIHRvQWRkcmVzc1xuICBjb25zdCBhZGRyZXNzTGVuZ3RoQ29kZSA9IHNjcmlwdFB1YktleUhleC5zbGljZSgzNCwgMzYpO1xuICBjb25zdCBhZGRyZXNzSGV4ID0gc2NyaXB0UHViS2V5SGV4LnNsaWNlKFxuICAgIDM2LFxuICAgIDM2ICsgcGFyc2VJbnQoYWRkcmVzc0xlbmd0aENvZGUsIDE2KSAqIDJcbiAgKTtcbiAgY29uc3QgdG9BZGRyZXNzID0gZGVjb2RlQWRkcmVzcyh0b0NoYWluLCBhZGRyZXNzSGV4KTtcblxuICByZXR1cm4ge1xuICAgIHRvQ2hhaW4sXG4gICAgdG9BZGRyZXNzLFxuICAgIGJyaWRnZUZlZSxcbiAgICBuZXR3b3JrRmVlLFxuICB9O1xufTtcbiJdfQ==
@@ -16,4 +16,7 @@ export { RosenData } from './getRosenData/abstract/types';
16
16
  export { DogeEsploraRosenExtractor } from './getRosenData/doge/DogeEsploraRosenExtractor';
17
17
  export { DogeRosenExtractor } from './getRosenData/doge/DogeRosenExtractor';
18
18
  export { DogeRpcRosenExtractor } from './getRosenData/doge/DogeRpcRosenExtractor';
19
+ export { RunesEsploraRosenExtractor } from './getRosenData/runes/RunesEsploraRosenExtractor';
20
+ export { RunesRosenExtractor } from './getRosenData/runes/RunesRosenExtractor';
21
+ export { RunesRpcRosenExtractor } from './getRosenData/runes/RunesRpcRosenExtractor';
19
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wDAAwD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wDAAwD,CAAC;AACzG,OAAO,EAAE,4BAA4B,EAAE,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC"}
package/dist/lib/index.js CHANGED
@@ -15,4 +15,7 @@ export { ErgoNodeRosenExtractor } from './getRosenData/ergo/ErgoNodeRosenExtract
15
15
  export { DogeEsploraRosenExtractor } from './getRosenData/doge/DogeEsploraRosenExtractor';
16
16
  export { DogeRosenExtractor } from './getRosenData/doge/DogeRosenExtractor';
17
17
  export { DogeRpcRosenExtractor } from './getRosenData/doge/DogeRpcRosenExtractor';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmV4cG9ydCB7IEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9iaXRjb2luL0JpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJwY1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUnBjUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9Lb2lvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9Sb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9lcmdvL0VyZ29Sb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvTm9kZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZXJnby9FcmdvTm9kZVJvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzJztcbmV4cG9ydCB7IERvZ2VFc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9kb2dlL0RvZ2VFc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRG9nZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZG9nZS9Eb2dlUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRG9nZVJwY1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZG9nZS9Eb2dlUnBjUm9zZW5FeHRyYWN0b3InO1xuIl19
18
+ export { RunesEsploraRosenExtractor } from './getRosenData/runes/RunesEsploraRosenExtractor';
19
+ export { RunesRosenExtractor } from './getRosenData/runes/RunesRosenExtractor';
20
+ export { RunesRpcRosenExtractor } from './getRosenData/runes/RunesRpcRosenExtractor';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmV4cG9ydCB7IEJpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9iaXRjb2luL0JpdGNvaW5Fc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQml0Y29pblJwY1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvYml0Y29pbi9CaXRjb2luUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUnBjUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRXZtUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ldm0vRXZtUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9Lb2lvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9Sb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub1Jvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IENhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3RvciB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2NhcmRhbm8vQ2FyZGFub0dyYXBoUUxSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9lcmdvL0VyZ29Sb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBFcmdvTm9kZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZXJnby9FcmdvTm9kZVJvc2VuRXh0cmFjdG9yJztcbmV4cG9ydCB7IFJvc2VuRGF0YSB9IGZyb20gJy4vZ2V0Um9zZW5EYXRhL2Fic3RyYWN0L3R5cGVzJztcbmV4cG9ydCB7IERvZ2VFc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9kb2dlL0RvZ2VFc3Bsb3JhUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRG9nZVJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZG9nZS9Eb2dlUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgRG9nZVJwY1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvZG9nZS9Eb2dlUnBjUm9zZW5FeHRyYWN0b3InO1xuZXhwb3J0IHsgUnVuZXNFc3Bsb3JhUm9zZW5FeHRyYWN0b3IgfSBmcm9tICcuL2dldFJvc2VuRGF0YS9ydW5lcy9SdW5lc0VzcGxvcmFSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBSdW5lc1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvcnVuZXMvUnVuZXNSb3NlbkV4dHJhY3Rvcic7XG5leHBvcnQgeyBSdW5lc1JwY1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnLi9nZXRSb3NlbkRhdGEvcnVuZXMvUnVuZXNScGNSb3NlbkV4dHJhY3Rvcic7XG4iXX0=