@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.
- package/dist/lib/getRosenData/abstract/types.d.ts +13 -13
- package/dist/lib/getRosenData/bitcoin/types.d.ts +66 -66
- package/dist/lib/getRosenData/bitcoin/utils.d.ts +1 -1
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts +13 -16
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts +13 -16
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts +13 -16
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts +13 -16
- package/dist/lib/getRosenData/const.d.ts +1 -0
- package/dist/lib/getRosenData/const.d.ts.map +1 -1
- package/dist/lib/getRosenData/const.js +3 -1
- package/dist/lib/getRosenData/ergo/types.d.ts +24 -24
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts +6 -0
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.js +25 -2
- package/dist/lib/getRosenData/evm/utils.d.ts +5 -5
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts +35 -0
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -0
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.js +117 -0
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts +35 -0
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -0
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.js +124 -0
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts +35 -0
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -0
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.js +117 -0
- package/dist/lib/getRosenData/runes/types.d.ts +5 -0
- package/dist/lib/getRosenData/runes/types.d.ts.map +1 -0
- package/dist/lib/getRosenData/runes/types.js +2 -0
- package/dist/lib/getRosenData/runes/utils.d.ts +7 -0
- package/dist/lib/getRosenData/runes/utils.d.ts.map +1 -0
- package/dist/lib/getRosenData/runes/utils.js +31 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +4 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/dist/lib/getRosenData/Utils.d.ts +0 -59
- package/dist/lib/getRosenData/Utils.d.ts.map +0 -1
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuZXNScGNSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvcnVuZXMvUnVuZXNScGNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFRdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBRzNDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBaUQ7SUFDbEYsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUNuQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLEdBQUcsQ0FDZixXQUFrQyxFQUNYLEVBQUU7UUFDekIsTUFBTSxTQUFTLEdBQUcsa0NBQWtDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN4RSxJQUFJO1lBQ0Ysa0NBQWtDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ2hFLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsMkJBQTJCO1lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsa0NBQWtDLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFFRCwyQkFBMkI7WUFDM0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV6RCxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLFNBQVMsR0FBRywyQ0FBMkMsQ0FDeEQsQ0FBQztnQkFDRixPQUFPLFNBQVMsQ0FBQzthQUNsQjtZQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoRixPQUFPO2dCQUNMLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDekIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLGtCQUFrQixFQUFFLFdBQVc7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHO2dCQUNYLGtCQUFrQixFQUFFLFdBQVc7Z0JBQy9CLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSTthQUM3QixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLDhEQUE4RCxDQUFDLEVBQUUsQ0FDbEUsQ0FBQztZQUNGLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUI7U0FDRjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxpQkFBaUIsR0FBRyxDQUFDLE9BQTZCLEVBQW1CLEVBQUU7UUFDckUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLE1BQU0sY0FBYyxHQUFvQixFQUFFLENBQUM7UUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVqQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQztvQkFBRSxTQUFTLENBQUMsbUJBQW1CO2dCQUM5RSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTTtvQkFBRSxTQUFTLENBQUMsMkJBQTJCO2dCQUV6RixjQUFjLENBQUMsSUFBSSxDQUFDO29CQUNsQixLQUFLLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDdkMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxrQkFBa0IsR0FBRyxDQUNuQixjQUErQixFQUNMLEVBQUU7UUFDNUIsSUFBSSxRQUFrQyxDQUFDO1FBRXZDLElBQUk7WUFDRixRQUFRLEdBQUcsY0FBYyxDQUN2QixjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNuRCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHVDQUF1QyxVQUFVLENBQUMsU0FBUyxDQUN6RCxjQUFjLENBQ2YsTUFBTSxDQUFDLEVBQUUsQ0FDWCxDQUFDO1NBQ0g7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsWUFBWSxHQUFHLENBQUMsT0FBNkIsRUFBVyxFQUFFO1FBQ3hELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JELFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pCLE1BQU07YUFDUDtTQUNGO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEgfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgUlVORVNfQ0hBSU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQge1xuICBCaXRjb2luUnBjVHJhbnNhY3Rpb24sXG4gIEJpdGNvaW5ScGNUeE91dHB1dCxcbiAgT3BSZXR1cm5EYXRhLFxufSBmcm9tICcuLi9iaXRjb2luL3R5cGVzJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBhZGRyZXNzLCBpbml0RWNjTGliIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyBwYXJzZVJvc2VuRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgKiBhcyB0aW55U2VjcCBmcm9tICd0aW55LXNlY3AyNTZrMSc7XG5pbXBvcnQgeyBMb2NrRGF0YUNodW5rIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBSdW5lc1JwY1Jvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8Qml0Y29pblJwY1RyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gUlVORVNfQ0hBSU47XG4gIHByb3RlY3RlZCBsb2NrU2NyaXB0UHViS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIGluaXRFY2NMaWIodGlueVNlY3ApO1xuICAgIHRoaXMubG9ja1NjcmlwdFB1YktleSA9IGFkZHJlc3MudG9PdXRwdXRTY3JpcHQobG9ja0FkZHJlc3MpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGluIFJwYyBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIFJwYyBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKFxuICAgIHRyYW5zYWN0aW9uOiBCaXRjb2luUnBjVHJhbnNhY3Rpb25cbiAgKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBpcyBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgLy8gdmFsaWRhdGUgbnVtYmVyIG9mIG91dHB1dCBib3hlc1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWRhdGUgbG9jayBjb25kaXRpb25zXG4gICAgICBjb25zdCB2YWxpZExvY2sgPSB0aGlzLnZhbGlkYXRlTG9jayhvdXRwdXRzKTtcblxuICAgICAgaWYgKCF2YWxpZExvY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGZpbmQgcm9zZW4gbG9jayB1dHhvYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkYXRlIGRhdGEgY29uZGl0aW9uc1xuICAgICAgY29uc3QgbG9ja0RhdGFDaHVua3MgPSB0aGlzLmdldExvY2tEYXRhQ2h1bmtzKG91dHB1dHMpO1xuICAgICAgY29uc3QgbG9ja0RhdGEgPSB0aGlzLmxvY2tEYXRhRnJvbUNodW5rcyhsb2NrRGF0YUNodW5rcyk7XG5cbiAgICAgIGlmICghbG9ja0RhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGV4dHJhY3Qgcm9zZW4gZGF0YSBmcm9tIHV0eG9zYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tQWRkcmVzcyA9IGBib3g6JHt0cmFuc2FjdGlvbi52aW5bMF0udHhpZH0uJHt0cmFuc2FjdGlvbi52aW5bMF0udm91dH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9DaGFpbjogbG9ja0RhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBsb2NrRGF0YS50b0FkZHJlc3MsXG4gICAgICAgIGJyaWRnZUZlZTogbG9ja0RhdGEuYnJpZGdlRmVlLFxuICAgICAgICBuZXR3b3JrRmVlOiBsb2NrRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogJ3VuZGVmaW5lZCcsXG4gICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6ICd1bmRlZmluZWQnLFxuICAgICAgICBzb3VyY2VUeElkOiB0cmFuc2FjdGlvbi50eGlkLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgUnVuZXMgcm9zZW4gZGF0YSBmcm9tIFJwYzogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBjaHVua3MgZnJvbSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYXJyYXkgb2YgTG9ja0RhdGFDaHVua1xuICAgKi9cbiAgZ2V0TG9ja0RhdGFDaHVua3MgPSAob3V0cHV0czogQml0Y29pblJwY1R4T3V0cHV0W10pOiBMb2NrRGF0YUNodW5rW10gPT4ge1xuICAgIGNvbnN0IG1pblV0eG9WYWx1ZSA9IDI5NDtcbiAgICBjb25zdCBsb2NrRGF0YUNodW5rczogTG9ja0RhdGFDaHVua1tdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgZm9yIChsZXQgYm94SW5kZXggPSAwOyBib3hJbmRleCA8IG91dHB1dHMubGVuZ3RoOyBib3hJbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbYm94SW5kZXhdO1xuXG4gICAgICAgIGlmIChvdXRwdXQudmFsdWUgKiAxMCAqKiA4ICE9PSBtaW5VdHhvVmFsdWUgKyBpKSBjb250aW51ZTsgLy8gd3JvbmcgZGF0YSBpbmRleFxuICAgICAgICBpZiAob3V0cHV0LnNjcmlwdFB1YktleS5oZXguc2xpY2UoMCwgNCkgIT09ICcwMDE0JykgY29udGludWU7IC8vIG5vdCBhIG5hdGl2ZS1zZWd3aXQgdXR4b1xuXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIGRhdGE6IG91dHB1dC5zY3JpcHRQdWJLZXkuaGV4LnNsaWNlKDQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG9ja0RhdGFDaHVua3M7XG4gIH07XG5cbiAgLyoqXG4gICAqIGNvbWJpbmVzIGxvY2sgZGF0YSBjaHVua3MgaW50byBsb2NrIGRhdGEgb2JqZWN0XG4gICAqIEBwYXJhbSBsb2NrRGF0YUNodW5rc1xuICAgKiBAcmV0dXJuIGxvY2sgZGF0YSBvYmplY3Qgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBsb2NrRGF0YUZyb21DaHVua3MgPSAoXG4gICAgbG9ja0RhdGFDaHVua3M6IExvY2tEYXRhQ2h1bmtbXVxuICApOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQgPT4ge1xuICAgIGxldCBsb2NrRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2tEYXRhID0gcGFyc2VSb3NlbkRhdGEoXG4gICAgICAgIGxvY2tEYXRhQ2h1bmtzLm1hcCgoY2h1bmspID0+IGNodW5rLmRhdGEpLmpvaW4oJycpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGNodW5rcyBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICBsb2NrRGF0YUNodW5rc1xuICAgICAgICApfV06ICR7ZX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBsb2NrRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogY2hlY2sgbG9jayBib3ggZXhpc3RzIGluIHRoZSB0eCBvdXRwdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRzXG4gICAqIEByZXR1cm4gYm9vbGVhblxuICAgKi9cbiAgdmFsaWRhdGVMb2NrID0gKG91dHB1dHM6IEJpdGNvaW5ScGNUeE91dHB1dFtdKTogYm9vbGVhbiA9PiB7XG4gICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5LmhleCA9PT0gdGhpcy5sb2NrU2NyaXB0UHViS2V5KSB7XG4gICAgICAgIHZhbGlkTG9jayA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRMb2NrO1xuICB9O1xufVxuIl19
|
|
@@ -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 @@
|
|
|
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==
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -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
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -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
|
-
|
|
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=
|