@rosen-bridge/rosen-extractor 8.1.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/getRosenData/{runes/RunesEsploraRosenExtractor.d.ts → bitcoin-runes/BitcoinRunesEsploraRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesEsploraRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesEsploraRosenExtractor.js +114 -0
- package/dist/{lib/getRosenData/runes/RunesRosenExtractor.d.ts → getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRosenExtractor.js +121 -0
- package/dist/getRosenData/{runes/RunesRpcRosenExtractor.d.ts → bitcoin-runes/BitcoinRunesRpcRosenExtractor.d.ts} +2 -2
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRpcRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/BitcoinRunesRpcRosenExtractor.js +114 -0
- package/dist/getRosenData/bitcoin-runes/constants.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/constants.js +2 -0
- package/dist/getRosenData/bitcoin-runes/types.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/types.js +2 -0
- package/dist/getRosenData/bitcoin-runes/utils.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin-runes/utils.js +9 -0
- package/dist/getRosenData/const.d.ts +1 -1
- package/dist/getRosenData/const.d.ts.map +1 -1
- package/dist/getRosenData/const.js +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/dist/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +0 -1
- package/dist/getRosenData/runes/RunesEsploraRosenExtractor.js +0 -113
- package/dist/getRosenData/runes/RunesRosenExtractor.d.ts +0 -36
- package/dist/getRosenData/runes/RunesRosenExtractor.d.ts.map +0 -1
- package/dist/getRosenData/runes/RunesRosenExtractor.js +0 -120
- package/dist/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +0 -1
- package/dist/getRosenData/runes/RunesRpcRosenExtractor.js +0 -113
- package/dist/getRosenData/runes/constants.d.ts.map +0 -1
- package/dist/getRosenData/runes/constants.js +0 -2
- package/dist/getRosenData/runes/types.d.ts.map +0 -1
- package/dist/getRosenData/runes/types.js +0 -2
- package/dist/getRosenData/runes/utils.d.ts.map +0 -1
- package/dist/getRosenData/runes/utils.js +0 -9
- package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.d.ts +0 -19
- package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.js +0 -32
- package/dist/lib/getRosenData/abstract/types.d.ts +0 -18
- package/dist/lib/getRosenData/abstract/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/abstract/types.js +0 -2
- package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +0 -105
- package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.js +0 -113
- package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +0 -106
- package/dist/lib/getRosenData/bitcoin/types.d.ts +0 -89
- package/dist/lib/getRosenData/bitcoin/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/bitcoin/types.js +0 -2
- package/dist/lib/getRosenData/bitcoin/utils.d.ts +0 -7
- package/dist/lib/getRosenData/bitcoin/utils.d.ts.map +0 -1
- package/dist/lib/getRosenData/bitcoin/utils.js +0 -17
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts +0 -18
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +0 -94
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts +0 -18
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +0 -92
- package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts +0 -19
- package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.js +0 -95
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts +0 -18
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +0 -97
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts +0 -18
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.js +0 -88
- package/dist/lib/getRosenData/cardano/types.d.ts +0 -102
- package/dist/lib/getRosenData/cardano/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/types.js +0 -2
- package/dist/lib/getRosenData/cardano/utils.d.ts +0 -19
- package/dist/lib/getRosenData/cardano/utils.d.ts.map +0 -1
- package/dist/lib/getRosenData/cardano/utils.js +0 -32
- package/dist/lib/getRosenData/const.d.ts +0 -13
- package/dist/lib/getRosenData/const.d.ts.map +0 -1
- package/dist/lib/getRosenData/const.js +0 -21
- package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.js +0 -104
- package/dist/lib/getRosenData/doge/DogeRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/doge/DogeRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/doge/DogeRosenExtractor.js +0 -112
- package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.js +0 -105
- package/dist/lib/getRosenData/doge/types.d.ts +0 -87
- package/dist/lib/getRosenData/doge/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/doge/types.js +0 -2
- package/dist/lib/getRosenData/doge/utils.d.ts +0 -13
- package/dist/lib/getRosenData/doge/utils.d.ts.map +0 -1
- package/dist/lib/getRosenData/doge/utils.js +0 -58
- package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts +0 -22
- package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.js +0 -105
- package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.d.ts +0 -15
- package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.js +0 -33
- package/dist/lib/getRosenData/ergo/types.d.ts +0 -37
- package/dist/lib/getRosenData/ergo/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/ergo/types.js +0 -2
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts +0 -23
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.js +0 -54
- package/dist/lib/getRosenData/evm/EvmRosenExtractor.d.ts +0 -16
- package/dist/lib/getRosenData/evm/EvmRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/evm/EvmRosenExtractor.js +0 -31
- package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.d.ts +0 -26
- package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.js +0 -123
- package/dist/lib/getRosenData/evm/utils.d.ts +0 -7
- package/dist/lib/getRosenData/evm/utils.d.ts.map +0 -1
- package/dist/lib/getRosenData/evm/utils.js +0 -9
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts +0 -36
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.js +0 -113
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.js +0 -120
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts +0 -36
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.js +0 -113
- package/dist/lib/getRosenData/runes/constants.d.ts +0 -2
- package/dist/lib/getRosenData/runes/constants.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/constants.js +0 -2
- package/dist/lib/getRosenData/runes/types.d.ts +0 -5
- package/dist/lib/getRosenData/runes/types.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/types.js +0 -2
- package/dist/lib/getRosenData/runes/utils.d.ts +0 -7
- package/dist/lib/getRosenData/runes/utils.d.ts.map +0 -1
- package/dist/lib/getRosenData/runes/utils.js +0 -9
- package/dist/lib/index.d.ts +0 -23
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js +0 -25
- package/dist/lib/types.d.ts +0 -7
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -2
- package/dist/lib/utils.d.ts +0 -7
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/lib/utils.js +0 -31
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- /package/dist/getRosenData/{runes → bitcoin-runes}/constants.d.ts +0 -0
- /package/dist/getRosenData/{runes → bitcoin-runes}/types.d.ts +0 -0
- /package/dist/getRosenData/{runes → bitcoin-runes}/utils.d.ts +0 -0
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
-
import { DOGE_CHAIN, DOGE_NATIVE_TOKEN } from '../const';
|
|
3
|
-
import { parseRosenData, addressToOutputScript } from './utils';
|
|
4
|
-
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
5
|
-
export class DogeRosenExtractor extends AbstractRosenDataExtractor {
|
|
6
|
-
chain = DOGE_CHAIN;
|
|
7
|
-
lockScriptPubKey;
|
|
8
|
-
constructor(lockAddress, tokens, logger) {
|
|
9
|
-
super(lockAddress, tokens, logger);
|
|
10
|
-
this.lockScriptPubKey = addressToOutputScript(lockAddress);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* extracts RosenData from given lock transaction in DogeTx format
|
|
14
|
-
* @param serializedTransaction stringified transaction in DogeTx format
|
|
15
|
-
*/
|
|
16
|
-
extractRawData = (serializedTransaction) => {
|
|
17
|
-
let transaction;
|
|
18
|
-
try {
|
|
19
|
-
transaction = JsonBigInt.parse(serializedTransaction);
|
|
20
|
-
}
|
|
21
|
-
catch (e) {
|
|
22
|
-
throw new Error(`Failed to parse transaction json to DogeTx format while extracting rosen data: ${e}`);
|
|
23
|
-
}
|
|
24
|
-
const baseError = `No rosen data found for tx [${transaction.id}]`;
|
|
25
|
-
try {
|
|
26
|
-
const outputs = transaction.outputs;
|
|
27
|
-
if (outputs.length < 2) {
|
|
28
|
-
this.logger.debug(baseError + `: Insufficient number of boxes`);
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
let validData = false; // an OP_RETURN box with valid data is found
|
|
32
|
-
let validLock = false; // a lock box is found with available asset transformation
|
|
33
|
-
// parse rosen data from OP_RETURN box
|
|
34
|
-
let opReturnData;
|
|
35
|
-
for (let i = 0; i < outputs.length; i++) {
|
|
36
|
-
const output = outputs[i];
|
|
37
|
-
if (output.scriptPubKey.slice(0, 2) !== '6a')
|
|
38
|
-
continue; // not an OP_RETURN utxo
|
|
39
|
-
try {
|
|
40
|
-
opReturnData = parseRosenData(output.scriptPubKey);
|
|
41
|
-
validData = true;
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.id}.${i}]: ${e}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (!validData || !opReturnData) {
|
|
49
|
-
this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
// find target chain token id
|
|
53
|
-
let assetTransformation;
|
|
54
|
-
for (let i = 0; i < outputs.length; i++) {
|
|
55
|
-
const output = outputs[i];
|
|
56
|
-
if (output.scriptPubKey !== this.lockScriptPubKey)
|
|
57
|
-
continue; // utxo address is not lock address
|
|
58
|
-
assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
|
|
59
|
-
if (assetTransformation) {
|
|
60
|
-
validLock = true;
|
|
61
|
-
break;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
if (!validLock || !assetTransformation) {
|
|
65
|
-
this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
const fromAddress = `box:${transaction.inputs[0].txId}.${transaction.inputs[0].index}`;
|
|
69
|
-
return {
|
|
70
|
-
toChain: opReturnData.toChain,
|
|
71
|
-
toAddress: opReturnData.toAddress,
|
|
72
|
-
bridgeFee: opReturnData.bridgeFee,
|
|
73
|
-
networkFee: opReturnData.networkFee,
|
|
74
|
-
fromAddress: fromAddress,
|
|
75
|
-
sourceChainTokenId: assetTransformation.from,
|
|
76
|
-
amount: assetTransformation.amount,
|
|
77
|
-
targetChainTokenId: assetTransformation.to,
|
|
78
|
-
sourceTxId: transaction.id,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
this.logger.debug(`An error occurred while getting Doge rosen data: ${e}`);
|
|
83
|
-
if (e instanceof Error && e.stack) {
|
|
84
|
-
this.logger.debug(e.stack);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return undefined;
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* extracts and builds token transformation from UTXO and tokenMap
|
|
91
|
-
* @param box transaction output
|
|
92
|
-
* @param toChain event target chain
|
|
93
|
-
*/
|
|
94
|
-
getAssetTransformation = (box, toChain) => {
|
|
95
|
-
// try to build transformation using locked DOGE
|
|
96
|
-
const wrappedDoge = this.tokens.search(DOGE_CHAIN, {
|
|
97
|
-
tokenId: DOGE_NATIVE_TOKEN,
|
|
98
|
-
});
|
|
99
|
-
if (wrappedDoge.length > 0 && Object.hasOwn(wrappedDoge[0], toChain)) {
|
|
100
|
-
const satoshiAmount = box.value;
|
|
101
|
-
return {
|
|
102
|
-
from: DOGE_NATIVE_TOKEN,
|
|
103
|
-
to: this.tokens.getID(wrappedDoge[0], toChain),
|
|
104
|
-
amount: satoshiAmount.toString(),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
return undefined;
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZVJvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9kb2dlL0RvZ2VSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoRSxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsMEJBQWtDO0lBQy9ELEtBQUssR0FBRyxVQUFVLENBQUM7SUFDbEIsZ0JBQWdCLENBQVM7SUFFbkMsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLEdBQUcsQ0FBQyxxQkFBNkIsRUFBeUIsRUFBRTtRQUN4RSxJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0ZBQWtGLENBQUMsRUFBRSxDQUN0RixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsRUFBRSxHQUFHLENBQUM7UUFDbkUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9B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QUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEsIFRva2VuVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgRE9HRV9DSEFJTiwgRE9HRV9OQVRJVkVfVE9LRU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgeyBEb2dlVHgsIERvZ2VUeE91dHB1dCwgT3BSZXR1cm5EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgcGFyc2VSb3NlbkRhdGEsIGFkZHJlc3NUb091dHB1dFNjcmlwdCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmV4cG9ydCBjbGFzcyBEb2dlUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxzdHJpbmc+IHtcbiAgcmVhZG9ubHkgY2hhaW4gPSBET0dFX0NIQUlOO1xuICBwcm90ZWN0ZWQgbG9ja1NjcmlwdFB1YktleTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGxvY2tBZGRyZXNzOiBzdHJpbmcsIHRva2VuczogVG9rZW5NYXAsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIobG9ja0FkZHJlc3MsIHRva2VucywgbG9nZ2VyKTtcbiAgICB0aGlzLmxvY2tTY3JpcHRQdWJLZXkgPSBhZGRyZXNzVG9PdXRwdXRTY3JpcHQobG9ja0FkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gRG9nZVR4IGZvcm1hdFxuICAgKiBAcGFyYW0gc2VyaWFsaXplZFRyYW5zYWN0aW9uIHN0cmluZ2lmaWVkIHRyYW5zYWN0aW9uIGluIERvZ2VUeCBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb246IERvZ2VUeDtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBKc29uQmlnSW50LnBhcnNlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHRyYW5zYWN0aW9uIGpzb24gdG8gRG9nZVR4IGZvcm1hdCB3aGlsZSBleHRyYWN0aW5nIHJvc2VuIGRhdGE6ICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzO1xuICAgICAgaWYgKG91dHB1dHMubGVuZ3RoIDwgMikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGJveGVzYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWxpZERhdGEgPSBmYWxzZTsgLy8gYW4gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRcbiAgICAgIGxldCB2YWxpZExvY2sgPSBmYWxzZTsgLy8gYSBsb2NrIGJveCBpcyBmb3VuZCB3aXRoIGF2YWlsYWJsZSBhc3NldCB0cmFuc2Zvcm1hdGlvblxuXG4gICAgICAvLyBwYXJzZSByb3NlbiBkYXRhIGZyb20gT1BfUkVUVVJOIGJveFxuICAgICAgbGV0IG9wUmV0dXJuRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0UHViS2V5LnNsaWNlKDAsIDIpICE9PSAnNmEnKSBjb250aW51ZTsgLy8gbm90IGFuIE9QX1JFVFVSTiB1dHhvXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcFJldHVybkRhdGEgPSBwYXJzZVJvc2VuRGF0YShvdXRwdXQuc2NyaXB0UHViS2V5KTtcbiAgICAgICAgICB2YWxpZERhdGEgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIE9QX1JFVFVSTiBib3ggWyR7dHJhbnNhY3Rpb24uaWR9LiR7aX1dOiAke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWREYXRhIHx8ICFvcFJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogTm8gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbmQgdGFyZ2V0IGNoYWluIHRva2VuIGlkXG4gICAgICBsZXQgYXNzZXRUcmFuc2Zvcm1hdGlvbjogVG9rZW5UcmFuc2Zvcm1hdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzW2ldO1xuICAgICAgICBpZiAob3V0cHV0LnNjcmlwdFB1YktleSAhPT0gdGhpcy5sb2NrU2NyaXB0UHViS2V5KSBjb250aW51ZTsgLy8gdXR4byBhZGRyZXNzIGlzIG5vdCBsb2NrIGFkZHJlc3NcbiAgICAgICAgYXNzZXRUcmFuc2Zvcm1hdGlvbiA9IHRoaXMuZ2V0QXNzZXRUcmFuc2Zvcm1hdGlvbihcbiAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgb3BSZXR1cm5EYXRhLnRvQ2hhaW5cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFzc2V0VHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgICB2YWxpZExvY2sgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbGlkTG9jayB8fCAhYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBGYWlsZWQgdG8gZmluZCByb3NlbiBhc3NldCB0cmFuc2Zvcm1hdGlvbmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZnJvbUFkZHJlc3MgPSBgYm94OiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLnR4SWR9LiR7dHJhbnNhY3Rpb24uaW5wdXRzWzBdLmluZGV4fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLmlkLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgRG9nZSByb3NlbiBkYXRhOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhlLnN0YWNrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdHMgYW5kIGJ1aWxkcyB0b2tlbiB0cmFuc2Zvcm1hdGlvbiBmcm9tIFVUWE8gYW5kIHRva2VuTWFwXG4gICAqIEBwYXJhbSBib3ggdHJhbnNhY3Rpb24gb3V0cHV0XG4gICAqIEBwYXJhbSB0b0NoYWluIGV2ZW50IHRhcmdldCBjaGFpblxuICAgKi9cbiAgZ2V0QXNzZXRUcmFuc2Zvcm1hdGlvbiA9IChcbiAgICBib3g6IERvZ2VUeE91dHB1dCxcbiAgICB0b0NoYWluOiBzdHJpbmdcbiAgKTogVG9rZW5UcmFuc2Zvcm1hdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgLy8gdHJ5IHRvIGJ1aWxkIHRyYW5zZm9ybWF0aW9uIHVzaW5nIGxvY2tlZCBET0dFXG4gICAgY29uc3Qgd3JhcHBlZERvZ2UgPSB0aGlzLnRva2Vucy5zZWFyY2goRE9HRV9DSEFJTiwge1xuICAgICAgdG9rZW5JZDogRE9HRV9OQVRJVkVfVE9LRU4sXG4gICAgfSk7XG4gICAgaWYgKHdyYXBwZWREb2dlLmxlbmd0aCA+IDAgJiYgT2JqZWN0Lmhhc093bih3cmFwcGVkRG9nZVswXSwgdG9DaGFpbikpIHtcbiAgICAgIGNvbnN0IHNhdG9zaGlBbW91bnQgPSBib3gudmFsdWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiBET0dFX05BVElWRV9UT0tFTixcbiAgICAgICAgdG86IHRoaXMudG9rZW5zLmdldElEKHdyYXBwZWREb2dlWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBzYXRvc2hpQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
2
|
-
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
3
|
-
import { DogeRpcTransaction, DogeRpcTxOutput } from './types';
|
|
4
|
-
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
|
-
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
6
|
-
export declare class DogeRpcRosenExtractor extends AbstractRosenDataExtractor<DogeRpcTransaction> {
|
|
7
|
-
readonly chain = "doge";
|
|
8
|
-
protected lockScriptPubKey: string;
|
|
9
|
-
constructor(lockAddress: string, tokens: TokenMap, logger?: AbstractLogger);
|
|
10
|
-
/**
|
|
11
|
-
* extracts RosenData from given lock transaction in Rpc format
|
|
12
|
-
* @param transaction the lock transaction in Rpc format
|
|
13
|
-
*/
|
|
14
|
-
extractRawData: (transaction: DogeRpcTransaction) => RosenData | undefined;
|
|
15
|
-
/**
|
|
16
|
-
* extracts and builds token transformation from UTXO and tokenMap
|
|
17
|
-
* @param box transaction output
|
|
18
|
-
* @param toChain event target chain
|
|
19
|
-
*/
|
|
20
|
-
getAssetTransformation: (box: DogeRpcTxOutput, toChain: string) => TokenTransformation | undefined;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=DogeRpcRosenExtractor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DogeRpcRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/doge/DogeRpcRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,qBAAa,qBAAsB,SAAQ,0BAA0B,CAAC,kBAAkB,CAAC;IACvF,QAAQ,CAAC,KAAK,UAAc;IAC5B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GAAI,aAAa,kBAAkB,KAAG,SAAS,GAAG,SAAS,CA6EvE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAgBhC;CACH"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
-
import { DOGE_CHAIN, DOGE_NATIVE_TOKEN } from '../const';
|
|
3
|
-
import { parseRosenData, addressToOutputScript } from './utils';
|
|
4
|
-
export class DogeRpcRosenExtractor extends AbstractRosenDataExtractor {
|
|
5
|
-
chain = DOGE_CHAIN;
|
|
6
|
-
lockScriptPubKey;
|
|
7
|
-
constructor(lockAddress, tokens, logger) {
|
|
8
|
-
super(lockAddress, tokens, logger);
|
|
9
|
-
this.lockScriptPubKey = addressToOutputScript(lockAddress);
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* extracts RosenData from given lock transaction in Rpc format
|
|
13
|
-
* @param transaction the lock transaction in Rpc format
|
|
14
|
-
*/
|
|
15
|
-
extractRawData = (transaction) => {
|
|
16
|
-
const baseError = `No rosen data found for tx [${transaction.txid}]`;
|
|
17
|
-
try {
|
|
18
|
-
const outputs = transaction.vout;
|
|
19
|
-
if (outputs.length < 2) {
|
|
20
|
-
this.logger.debug(baseError + `: Insufficient number of boxes`);
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
let validData = false; // an OP_RETURN box with valid data is found
|
|
24
|
-
let validLock = false; // a lock box is found with available asset transformation
|
|
25
|
-
// parse rosen data from OP_RETURN box
|
|
26
|
-
let opReturnData;
|
|
27
|
-
for (let i = 0; i < outputs.length; i++) {
|
|
28
|
-
const output = outputs[i];
|
|
29
|
-
if (output.scriptPubKey.hex.slice(0, 2) !== '6a')
|
|
30
|
-
continue; // not an OP_RETURN utxo
|
|
31
|
-
try {
|
|
32
|
-
opReturnData = parseRosenData(output.scriptPubKey.hex);
|
|
33
|
-
validData = true;
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
catch (e) {
|
|
37
|
-
this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.txid}.${i}]: ${e}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
if (!validData || !opReturnData) {
|
|
41
|
-
this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
// find target chain token id
|
|
45
|
-
let assetTransformation;
|
|
46
|
-
for (let i = 0; i < outputs.length; i++) {
|
|
47
|
-
const output = outputs[i];
|
|
48
|
-
if (output.scriptPubKey.hex !== this.lockScriptPubKey)
|
|
49
|
-
continue; // utxo address is not lock address
|
|
50
|
-
assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
|
|
51
|
-
if (assetTransformation) {
|
|
52
|
-
validLock = true;
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (!validLock || !assetTransformation) {
|
|
57
|
-
this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
|
|
61
|
-
return {
|
|
62
|
-
toChain: opReturnData.toChain,
|
|
63
|
-
toAddress: opReturnData.toAddress,
|
|
64
|
-
bridgeFee: opReturnData.bridgeFee,
|
|
65
|
-
networkFee: opReturnData.networkFee,
|
|
66
|
-
fromAddress: fromAddress,
|
|
67
|
-
sourceChainTokenId: assetTransformation.from,
|
|
68
|
-
amount: assetTransformation.amount,
|
|
69
|
-
targetChainTokenId: assetTransformation.to,
|
|
70
|
-
sourceTxId: transaction.txid,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
catch (e) {
|
|
74
|
-
this.logger.debug(`An error occurred while getting Doge rosen data from Rpc: ${e}`);
|
|
75
|
-
if (e instanceof Error && e.stack) {
|
|
76
|
-
this.logger.debug(e.stack);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return undefined;
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* extracts and builds token transformation from UTXO and tokenMap
|
|
83
|
-
* @param box transaction output
|
|
84
|
-
* @param toChain event target chain
|
|
85
|
-
*/
|
|
86
|
-
getAssetTransformation = (box, toChain) => {
|
|
87
|
-
// try to build transformation using locked DOGE
|
|
88
|
-
const wrappedDoge = this.tokens.search(DOGE_CHAIN, {
|
|
89
|
-
tokenId: DOGE_NATIVE_TOKEN,
|
|
90
|
-
});
|
|
91
|
-
if (wrappedDoge.length > 0 && Object.hasOwn(wrappedDoge[0], toChain)) {
|
|
92
|
-
const parts = box.value.toString().split('.');
|
|
93
|
-
const part1 = ((parts[1] ?? '') + '0'.repeat(8)).substring(0, 8);
|
|
94
|
-
return {
|
|
95
|
-
from: DOGE_NATIVE_TOKEN,
|
|
96
|
-
to: this.tokens.getID(wrappedDoge[0], toChain),
|
|
97
|
-
amount: (parts[0] === '0' ? '' : parts[0]) + part1,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZVJwY1Jvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9kb2dlL0RvZ2VScGNSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoRSxNQUFNLE9BQU8scUJBQXNCLFNBQVEsMEJBQThDO0lBQzlFLEtBQUssR0FBRyxVQUFVLENBQUM7SUFDbEIsZ0JBQWdCLENBQVM7SUFFbkMsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLEdBQUcsQ0FBQyxXQUErQixFQUF5QixFQUFFO1FBQzFFLE1BQU0sU0FBUyxHQUFHLCtCQUErQixXQUFXLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNoRSxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsNENBQTRDO1lBQ25FLElBQUksU0FBUyxHQUFHLEtB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QyxHQUFHLEtBQUs7YUFDbkQsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm9zZW5EYXRhLCBUb2tlblRyYW5zZm9ybWF0aW9uIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IERPR0VfQ0hBSU4sIERPR0VfTkFUSVZFX1RPS0VOIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgRG9nZVJwY1RyYW5zYWN0aW9uLCBEb2dlUnBjVHhPdXRwdXQsIE9wUmV0dXJuRGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IHBhcnNlUm9zZW5EYXRhLCBhZGRyZXNzVG9PdXRwdXRTY3JpcHQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERvZ2VScGNSb3NlbkV4dHJhY3RvciBleHRlbmRzIEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yPERvZ2VScGNUcmFuc2FjdGlvbj4ge1xuICByZWFkb25seSBjaGFpbiA9IERPR0VfQ0hBSU47XG4gIHByb3RlY3RlZCBsb2NrU2NyaXB0UHViS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIHRoaXMubG9ja1NjcmlwdFB1YktleSA9IGFkZHJlc3NUb091dHB1dFNjcmlwdChsb2NrQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogZXh0cmFjdHMgUm9zZW5EYXRhIGZyb20gZ2l2ZW4gbG9jayB0cmFuc2FjdGlvbiBpbiBScGMgZm9ybWF0XG4gICAqIEBwYXJhbSB0cmFuc2FjdGlvbiB0aGUgbG9jayB0cmFuc2FjdGlvbiBpbiBScGMgZm9ybWF0XG4gICAqL1xuICBleHRyYWN0UmF3RGF0YSA9ICh0cmFuc2FjdGlvbjogRG9nZVJwY1RyYW5zYWN0aW9uKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24udHhpZH1dYDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRyYW5zYWN0aW9uLnZvdXQ7XG4gICAgICBpZiAob3V0cHV0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGJhc2VFcnJvciArIGA6IEluc3VmZmljaWVudCBudW1iZXIgb2YgYm94ZXNgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgbGV0IHZhbGlkRGF0YSA9IGZhbHNlOyAvLyBhbiBPUF9SRVRVUk4gYm94IHdpdGggdmFsaWQgZGF0YSBpcyBmb3VuZFxuICAgICAgbGV0IHZhbGlkTG9jayA9IGZhbHNlOyAvLyBhIGxvY2sgYm94IGlzIGZvdW5kIHdpdGggYXZhaWxhYmxlIGFzc2V0IHRyYW5zZm9ybWF0aW9uXG5cbiAgICAgIC8vIHBhcnNlIHJvc2VuIGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94XG4gICAgICBsZXQgb3BSZXR1cm5EYXRhOiBPcFJldHVybkRhdGEgfCB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG91dHB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1tpXTtcbiAgICAgICAgaWYgKG91dHB1dC5zY3JpcHRQdWJLZXkuaGV4LnNsaWNlKDAsIDIpICE9PSAnNmEnKSBjb250aW51ZTsgLy8gbm90IGFuIE9QX1JFVFVSTiB1dHhvXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcFJldHVybkRhdGEgPSBwYXJzZVJvc2VuRGF0YShvdXRwdXQuc2NyaXB0UHViS2V5LmhleCk7XG4gICAgICAgICAgdmFsaWREYXRhID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBleHRyYWN0IGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94IFske3RyYW5zYWN0aW9uLnR4aWR9LiR7aX1dOiAke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWREYXRhIHx8ICFvcFJldHVybkRhdGEpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogTm8gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbmQgdGFyZ2V0IGNoYWluIHRva2VuIGlkXG4gICAgICBsZXQgYXNzZXRUcmFuc2Zvcm1hdGlvbjogVG9rZW5UcmFuc2Zvcm1hdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0cHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzW2ldO1xuICAgICAgICBpZiAob3V0cHV0LnNjcmlwdFB1YktleS5oZXggIT09IHRoaXMubG9ja1NjcmlwdFB1YktleSkgY29udGludWU7IC8vIHV0eG8gYWRkcmVzcyBpcyBub3QgbG9jayBhZGRyZXNzXG4gICAgICAgIGFzc2V0VHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldEFzc2V0VHJhbnNmb3JtYXRpb24oXG4gICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgIG9wUmV0dXJuRGF0YS50b0NoYWluXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgICAgdmFsaWRMb2NrID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF2YWxpZExvY2sgfHwgIWFzc2V0VHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICsgYDogRmFpbGVkIHRvIGZpbmQgcm9zZW4gYXNzZXQgdHJhbnNmb3JtYXRpb25gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb21BZGRyZXNzID0gYGJveDoke3RyYW5zYWN0aW9uLnZpblswXS50eGlkfS4ke3RyYW5zYWN0aW9uLnZpblswXS52b3V0fWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0NoYWluOiBvcFJldHVybkRhdGEudG9DaGFpbixcbiAgICAgICAgdG9BZGRyZXNzOiBvcFJldHVybkRhdGEudG9BZGRyZXNzLFxuICAgICAgICBicmlkZ2VGZWU6IG9wUmV0dXJuRGF0YS5icmlkZ2VGZWUsXG4gICAgICAgIG5ldHdvcmtGZWU6IG9wUmV0dXJuRGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICBmcm9tQWRkcmVzczogZnJvbUFkZHJlc3MsXG4gICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICBhbW91bnQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uYW1vdW50LFxuICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24udG8sXG4gICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLnR4aWQsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBEb2dlIHJvc2VuIGRhdGEgZnJvbSBScGM6ICR7ZX1gXG4gICAgICApO1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGUuc3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBleHRyYWN0cyBhbmQgYnVpbGRzIHRva2VuIHRyYW5zZm9ybWF0aW9uIGZyb20gVVRYTyBhbmQgdG9rZW5NYXBcbiAgICogQHBhcmFtIGJveCB0cmFuc2FjdGlvbiBvdXRwdXRcbiAgICogQHBhcmFtIHRvQ2hhaW4gZXZlbnQgdGFyZ2V0IGNoYWluXG4gICAqL1xuICBnZXRBc3NldFRyYW5zZm9ybWF0aW9uID0gKFxuICAgIGJveDogRG9nZVJwY1R4T3V0cHV0LFxuICAgIHRvQ2hhaW46IHN0cmluZ1xuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIERPR0VcbiAgICBjb25zdCB3cmFwcGVkRG9nZSA9IHRoaXMudG9rZW5zLnNlYXJjaChET0dFX0NIQUlOLCB7XG4gICAgICB0b2tlbklkOiBET0dFX05BVElWRV9UT0tFTixcbiAgICB9KTtcbiAgICBpZiAod3JhcHBlZERvZ2UubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHdyYXBwZWREb2dlWzBdLCB0b0NoYWluKSkge1xuICAgICAgY29uc3QgcGFydHMgPSBib3gudmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgY29uc3QgcGFydDEgPSAoKHBhcnRzWzFdID8/ICcnKSArICcwJy5yZXBlYXQoOCkpLnN1YnN0cmluZygwLCA4KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZyb206IERPR0VfTkFUSVZFX1RPS0VOLFxuICAgICAgICB0bzogdGhpcy50b2tlbnMuZ2V0SUQod3JhcHBlZERvZ2VbMF0sIHRvQ2hhaW4pLFxuICAgICAgICBhbW91bnQ6IChwYXJ0c1swXSA9PT0gJzAnID8gJycgOiBwYXJ0c1swXSkgKyBwYXJ0MSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
export interface OpReturnData {
|
|
2
|
-
toChain: string;
|
|
3
|
-
toAddress: string;
|
|
4
|
-
bridgeFee: string;
|
|
5
|
-
networkFee: string;
|
|
6
|
-
}
|
|
7
|
-
export interface EsploraTxInput {
|
|
8
|
-
txid: string;
|
|
9
|
-
vout: number;
|
|
10
|
-
prevout: {
|
|
11
|
-
scriptpubkey: string;
|
|
12
|
-
scriptpubkey_asm: string;
|
|
13
|
-
scriptpubkey_type: string;
|
|
14
|
-
scriptpubkey_address: string;
|
|
15
|
-
value: number;
|
|
16
|
-
};
|
|
17
|
-
scriptsig: string;
|
|
18
|
-
scriptsig_asm: string;
|
|
19
|
-
is_coinbase: false;
|
|
20
|
-
sequence: number;
|
|
21
|
-
}
|
|
22
|
-
export interface EsploraTxOutput {
|
|
23
|
-
scriptpubkey: string;
|
|
24
|
-
scriptpubkey_asm: string;
|
|
25
|
-
scriptpubkey_type: string;
|
|
26
|
-
scriptpubkey_address: string;
|
|
27
|
-
value: number;
|
|
28
|
-
}
|
|
29
|
-
export interface DogeEsploraTransaction {
|
|
30
|
-
txid: string;
|
|
31
|
-
version: number;
|
|
32
|
-
locktime: number;
|
|
33
|
-
vin: Array<EsploraTxInput>;
|
|
34
|
-
vout: Array<EsploraTxOutput>;
|
|
35
|
-
size: number;
|
|
36
|
-
weight: number;
|
|
37
|
-
fee: number;
|
|
38
|
-
status: {
|
|
39
|
-
confirmed: true;
|
|
40
|
-
block_height: number;
|
|
41
|
-
block_hash: string;
|
|
42
|
-
block_time: number;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
export interface DogeTxInput {
|
|
46
|
-
txId: string;
|
|
47
|
-
index: number;
|
|
48
|
-
scriptPubKey: string;
|
|
49
|
-
}
|
|
50
|
-
export interface DogeTxOutput {
|
|
51
|
-
scriptPubKey: string;
|
|
52
|
-
value: bigint;
|
|
53
|
-
}
|
|
54
|
-
export interface DogeTx {
|
|
55
|
-
id: string;
|
|
56
|
-
inputs: DogeTxInput[];
|
|
57
|
-
outputs: DogeTxOutput[];
|
|
58
|
-
}
|
|
59
|
-
export interface DogeRpcTxInput {
|
|
60
|
-
txid: string;
|
|
61
|
-
vout: number;
|
|
62
|
-
scriptSig: {
|
|
63
|
-
asm: string;
|
|
64
|
-
hex: string;
|
|
65
|
-
};
|
|
66
|
-
sequence: number;
|
|
67
|
-
}
|
|
68
|
-
export interface DogeRpcTxOutput {
|
|
69
|
-
value: number;
|
|
70
|
-
n: number;
|
|
71
|
-
scriptPubKey: {
|
|
72
|
-
asm: string;
|
|
73
|
-
hex: string;
|
|
74
|
-
type: string;
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
export interface DogeRpcTransaction {
|
|
78
|
-
txid: string;
|
|
79
|
-
hash: string;
|
|
80
|
-
version: number;
|
|
81
|
-
size: number;
|
|
82
|
-
vsize: number;
|
|
83
|
-
locktime: number;
|
|
84
|
-
vin: Array<DogeRpcTxInput>;
|
|
85
|
-
vout: Array<DogeRpcTxOutput>;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/doge/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;CAC9B"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2RvZ2UvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgT3BSZXR1cm5EYXRhIHtcbiAgdG9DaGFpbjogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFc3Bsb3JhVHhJbnB1dCB7XG4gIHR4aWQ6IHN0cmluZztcbiAgdm91dDogbnVtYmVyO1xuICBwcmV2b3V0OiB7XG4gICAgc2NyaXB0cHVia2V5OiBzdHJpbmc7XG4gICAgc2NyaXB0cHVia2V5X2FzbTogc3RyaW5nO1xuICAgIHNjcmlwdHB1YmtleV90eXBlOiBzdHJpbmc7XG4gICAgc2NyaXB0cHVia2V5X2FkZHJlc3M6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICB9O1xuICBzY3JpcHRzaWc6IHN0cmluZztcbiAgc2NyaXB0c2lnX2FzbTogc3RyaW5nO1xuICBpc19jb2luYmFzZTogZmFsc2U7XG4gIHNlcXVlbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXNwbG9yYVR4T3V0cHV0IHtcbiAgc2NyaXB0cHVia2V5OiBzdHJpbmc7XG4gIHNjcmlwdHB1YmtleV9hc206IHN0cmluZztcbiAgc2NyaXB0cHVia2V5X3R5cGU6IHN0cmluZztcbiAgc2NyaXB0cHVia2V5X2FkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb2dlRXNwbG9yYVRyYW5zYWN0aW9uIHtcbiAgdHhpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIGxvY2t0aW1lOiBudW1iZXI7XG4gIHZpbjogQXJyYXk8RXNwbG9yYVR4SW5wdXQ+O1xuICB2b3V0OiBBcnJheTxFc3Bsb3JhVHhPdXRwdXQ+O1xuICBzaXplOiBudW1iZXI7XG4gIHdlaWdodDogbnVtYmVyO1xuICBmZWU6IG51bWJlcjtcbiAgc3RhdHVzOiB7XG4gICAgY29uZmlybWVkOiB0cnVlO1xuICAgIGJsb2NrX2hlaWdodDogbnVtYmVyO1xuICAgIGJsb2NrX2hhc2g6IHN0cmluZztcbiAgICBibG9ja190aW1lOiBudW1iZXI7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9nZVR4SW5wdXQge1xuICB0eElkOiBzdHJpbmc7XG4gIGluZGV4OiBudW1iZXI7XG4gIHNjcmlwdFB1YktleTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvZ2VUeE91dHB1dCB7XG4gIHNjcmlwdFB1YktleTogc3RyaW5nO1xuICB2YWx1ZTogYmlnaW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERvZ2VUeCB7XG4gIGlkOiBzdHJpbmc7XG4gIGlucHV0czogRG9nZVR4SW5wdXRbXTtcbiAgb3V0cHV0czogRG9nZVR4T3V0cHV0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9nZVJwY1R4SW5wdXQge1xuICB0eGlkOiBzdHJpbmc7XG4gIHZvdXQ6IG51bWJlcjtcbiAgc2NyaXB0U2lnOiB7XG4gICAgYXNtOiBzdHJpbmc7XG4gICAgaGV4OiBzdHJpbmc7XG4gIH07XG4gIHNlcXVlbmNlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9nZVJwY1R4T3V0cHV0IHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgbjogbnVtYmVyO1xuICBzY3JpcHRQdWJLZXk6IHtcbiAgICBhc206IHN0cmluZztcbiAgICBoZXg6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9nZVJwY1RyYW5zYWN0aW9uIHtcbiAgdHhpZDogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgc2l6ZTogbnVtYmVyO1xuICB2c2l6ZTogbnVtYmVyO1xuICBsb2NrdGltZTogbnVtYmVyO1xuICB2aW46IEFycmF5PERvZ2VScGNUeElucHV0PjtcbiAgdm91dDogQXJyYXk8RG9nZVJwY1R4T3V0cHV0Pjtcbn1cbiJdfQ==
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { OpReturnData } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Converts a Dogecoin address to its corresponding output script
|
|
4
|
-
* @param addr The Dogecoin address to convert
|
|
5
|
-
* @returns The output script as a hex string
|
|
6
|
-
*/
|
|
7
|
-
export declare const addressToOutputScript: (addr: string) => string;
|
|
8
|
-
/**
|
|
9
|
-
* extracts rosen data from OP_RETURN box script pub key
|
|
10
|
-
* @param scriptPubKeyHex
|
|
11
|
-
*/
|
|
12
|
-
export declare const parseRosenData: (scriptPubKeyHex: string) => OpReturnData;
|
|
13
|
-
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/doge/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAevC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,KAAG,MAEpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,iBAAiB,MAAM,KAAG,YA4CxD,CAAC"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { decodeAddress } from '@rosen-bridge/address-codec';
|
|
2
|
-
import { SUPPORTED_CHAINS } from '../const';
|
|
3
|
-
import { address } from 'bitcoinjs-lib';
|
|
4
|
-
const dogecoinNetwork = {
|
|
5
|
-
messagePrefix: '\x19Dogecoin Signed Message:\n',
|
|
6
|
-
bech32: 'dc',
|
|
7
|
-
bip32: {
|
|
8
|
-
public: 0x02facafd,
|
|
9
|
-
private: 0x02fac398,
|
|
10
|
-
},
|
|
11
|
-
pubKeyHash: 0x1e,
|
|
12
|
-
scriptHash: 0x16,
|
|
13
|
-
wif: 0x9e,
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Converts a Dogecoin address to its corresponding output script
|
|
17
|
-
* @param addr The Dogecoin address to convert
|
|
18
|
-
* @returns The output script as a hex string
|
|
19
|
-
*/
|
|
20
|
-
export const addressToOutputScript = (addr) => {
|
|
21
|
-
return address.toOutputScript(addr, dogecoinNetwork).toString('hex');
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* extracts rosen data from OP_RETURN box script pub key
|
|
25
|
-
* @param scriptPubKeyHex
|
|
26
|
-
*/
|
|
27
|
-
export const parseRosenData = (scriptPubKeyHex) => {
|
|
28
|
-
// check OP_RETURN opcode
|
|
29
|
-
if (scriptPubKeyHex.slice(0, 2) !== '6a')
|
|
30
|
-
throw Error(`script does not start with OP_RETURN opcode (6a)`);
|
|
31
|
-
// check script length (should not use more than one OP_RETURN)
|
|
32
|
-
const dataLength = scriptPubKeyHex.slice(2, 4);
|
|
33
|
-
if (parseInt(dataLength, 16) + 2 !== scriptPubKeyHex.length / 2)
|
|
34
|
-
throw Error(`script length is unexpected [${parseInt(dataLength, 16) + 3} !== ${scriptPubKeyHex.length / 2}]`);
|
|
35
|
-
// parse toChain
|
|
36
|
-
const toChainHex = scriptPubKeyHex.slice(4, 6);
|
|
37
|
-
const toChainCode = parseInt(toChainHex, 16);
|
|
38
|
-
if (toChainCode >= SUPPORTED_CHAINS.length)
|
|
39
|
-
throw Error(`invalid toChain code, found [${toChainCode}] but only [${SUPPORTED_CHAINS.length}] chains are supported`);
|
|
40
|
-
const toChain = SUPPORTED_CHAINS[toChainCode];
|
|
41
|
-
// parse bridgeFee
|
|
42
|
-
const bridgeFeeHex = scriptPubKeyHex.slice(6, 22);
|
|
43
|
-
const bridgeFee = BigInt('0x' + bridgeFeeHex).toString();
|
|
44
|
-
// parse networkFee
|
|
45
|
-
const networkFeeHex = scriptPubKeyHex.slice(22, 38);
|
|
46
|
-
const networkFee = BigInt('0x' + networkFeeHex).toString();
|
|
47
|
-
// parse toAddress
|
|
48
|
-
const addressLengthCode = scriptPubKeyHex.slice(38, 40);
|
|
49
|
-
const addressHex = scriptPubKeyHex.slice(40, 40 + parseInt(addressLengthCode, 16) * 2);
|
|
50
|
-
const toAddress = decodeAddress(toChain, addressHex);
|
|
51
|
-
return {
|
|
52
|
-
toChain,
|
|
53
|
-
toAddress,
|
|
54
|
-
bridgeFee,
|
|
55
|
-
networkFee,
|
|
56
|
-
};
|
|
57
|
-
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2RvZ2UvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUU1QyxPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRWxELE1BQU0sZUFBZSxHQUFHO0lBQ3RCLGFBQWEsRUFBRSxnQ0FBZ0M7SUFDL0MsTUFBTSxFQUFFLElBQUk7SUFDWixLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsVUFBVTtRQUNsQixPQUFPLEVBQUUsVUFBVTtLQUNwQjtJQUNELFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLEdBQUcsRUFBRSxJQUFJO0NBQ1YsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO0lBQzVELE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLGVBQXVCLEVBQWdCLEVBQUU7SUFDdEUseUJBQXlCO0lBQ3pCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSTtRQUN0QyxNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ2xFLCtEQUErRDtJQUMvRCxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM3RCxNQUFNLEtBQUssQ0FDVCxnQ0FBZ0MsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQzFELGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FDM0IsR0FBRyxDQUNKLENBQUM7SUFFSixnQkFBZ0I7SUFDaEIsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxJQUFJLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNO1FBQ3hDLE1BQU0sS0FBSyxDQUNULGdDQUFnQyxXQUFXLGVBQWUsZ0JBQWdCLENBQUMsTUFBTSx3QkFBd0IsQ0FDMUcsQ0FBQztJQUNKLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTlDLGtCQUFrQjtJQUNsQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXpELG1CQUFtQjtJQUNuQixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTNELGtCQUFrQjtJQUNsQixNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQ3RDLEVBQUUsRUFDRixFQUFFLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FDekMsQ0FBQztJQUNGLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFFckQsT0FBTztRQUNMLE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlQWRkcmVzcyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWRkcmVzcy1jb2RlYyc7XG5pbXBvcnQgeyBTVVBQT1JURURfQ0hBSU5TIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgT3BSZXR1cm5EYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhZGRyZXNzLCBuZXR3b3JrcyB9IGZyb20gJ2JpdGNvaW5qcy1saWInO1xuXG5jb25zdCBkb2dlY29pbk5ldHdvcmsgPSB7XG4gIG1lc3NhZ2VQcmVmaXg6ICdcXHgxOURvZ2Vjb2luIFNpZ25lZCBNZXNzYWdlOlxcbicsXG4gIGJlY2gzMjogJ2RjJyxcbiAgYmlwMzI6IHtcbiAgICBwdWJsaWM6IDB4MDJmYWNhZmQsXG4gICAgcHJpdmF0ZTogMHgwMmZhYzM5OCxcbiAgfSxcbiAgcHViS2V5SGFzaDogMHgxZSxcbiAgc2NyaXB0SGFzaDogMHgxNixcbiAgd2lmOiAweDllLFxufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERvZ2Vjb2luIGFkZHJlc3MgdG8gaXRzIGNvcnJlc3BvbmRpbmcgb3V0cHV0IHNjcmlwdFxuICogQHBhcmFtIGFkZHIgVGhlIERvZ2Vjb2luIGFkZHJlc3MgdG8gY29udmVydFxuICogQHJldHVybnMgVGhlIG91dHB1dCBzY3JpcHQgYXMgYSBoZXggc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRyZXNzVG9PdXRwdXRTY3JpcHQgPSAoYWRkcjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGFkZHJlc3MudG9PdXRwdXRTY3JpcHQoYWRkciwgZG9nZWNvaW5OZXR3b3JrKS50b1N0cmluZygnaGV4Jyk7XG59O1xuXG4vKipcbiAqIGV4dHJhY3RzIHJvc2VuIGRhdGEgZnJvbSBPUF9SRVRVUk4gYm94IHNjcmlwdCBwdWIga2V5XG4gKiBAcGFyYW0gc2NyaXB0UHViS2V5SGV4XG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZVJvc2VuRGF0YSA9IChzY3JpcHRQdWJLZXlIZXg6IHN0cmluZyk6IE9wUmV0dXJuRGF0YSA9PiB7XG4gIC8vIGNoZWNrIE9QX1JFVFVSTiBvcGNvZGVcbiAgaWYgKHNjcmlwdFB1YktleUhleC5zbGljZSgwLCAyKSAhPT0gJzZhJylcbiAgICB0aHJvdyBFcnJvcihgc2NyaXB0IGRvZXMgbm90IHN0YXJ0IHdpdGggT1BfUkVUVVJOIG9wY29kZSAoNmEpYCk7XG4gIC8vIGNoZWNrIHNjcmlwdCBsZW5ndGggKHNob3VsZCBub3QgdXNlIG1vcmUgdGhhbiBvbmUgT1BfUkVUVVJOKVxuICBjb25zdCBkYXRhTGVuZ3RoID0gc2NyaXB0UHViS2V5SGV4LnNsaWNlKDIsIDQpO1xuICBpZiAocGFyc2VJbnQoZGF0YUxlbmd0aCwgMTYpICsgMiAhPT0gc2NyaXB0UHViS2V5SGV4Lmxlbmd0aCAvIDIpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgc2NyaXB0IGxlbmd0aCBpcyB1bmV4cGVjdGVkIFske3BhcnNlSW50KGRhdGFMZW5ndGgsIDE2KSArIDN9ICE9PSAke1xuICAgICAgICBzY3JpcHRQdWJLZXlIZXgubGVuZ3RoIC8gMlxuICAgICAgfV1gXG4gICAgKTtcblxuICAvLyBwYXJzZSB0b0NoYWluXG4gIGNvbnN0IHRvQ2hhaW5IZXggPSBzY3JpcHRQdWJLZXlIZXguc2xpY2UoNCwgNik7XG4gIGNvbnN0IHRvQ2hhaW5Db2RlID0gcGFyc2VJbnQodG9DaGFpbkhleCwgMTYpO1xuICBpZiAodG9DaGFpbkNvZGUgPj0gU1VQUE9SVEVEX0NIQUlOUy5sZW5ndGgpXG4gICAgdGhyb3cgRXJyb3IoXG4gICAgICBgaW52YWxpZCB0b0NoYWluIGNvZGUsIGZvdW5kIFske3RvQ2hhaW5Db2RlfV0gYnV0IG9ubHkgWyR7U1VQUE9SVEVEX0NIQUlOUy5sZW5ndGh9XSBjaGFpbnMgYXJlIHN1cHBvcnRlZGBcbiAgICApO1xuICBjb25zdCB0b0NoYWluID0gU1VQUE9SVEVEX0NIQUlOU1t0b0NoYWluQ29kZV07XG5cbiAgLy8gcGFyc2UgYnJpZGdlRmVlXG4gIGNvbnN0IGJyaWRnZUZlZUhleCA9IHNjcmlwdFB1YktleUhleC5zbGljZSg2LCAyMik7XG4gIGNvbnN0IGJyaWRnZUZlZSA9IEJpZ0ludCgnMHgnICsgYnJpZGdlRmVlSGV4KS50b1N0cmluZygpO1xuXG4gIC8vIHBhcnNlIG5ldHdvcmtGZWVcbiAgY29uc3QgbmV0d29ya0ZlZUhleCA9IHNjcmlwdFB1YktleUhleC5zbGljZSgyMiwgMzgpO1xuICBjb25zdCBuZXR3b3JrRmVlID0gQmlnSW50KCcweCcgKyBuZXR3b3JrRmVlSGV4KS50b1N0cmluZygpO1xuXG4gIC8vIHBhcnNlIHRvQWRkcmVzc1xuICBjb25zdCBhZGRyZXNzTGVuZ3RoQ29kZSA9IHNjcmlwdFB1YktleUhleC5zbGljZSgzOCwgNDApO1xuICBjb25zdCBhZGRyZXNzSGV4ID0gc2NyaXB0UHViS2V5SGV4LnNsaWNlKFxuICAgIDQwLFxuICAgIDQwICsgcGFyc2VJbnQoYWRkcmVzc0xlbmd0aENvZGUsIDE2KSAqIDJcbiAgKTtcbiAgY29uc3QgdG9BZGRyZXNzID0gZGVjb2RlQWRkcmVzcyh0b0NoYWluLCBhZGRyZXNzSGV4KTtcblxuICByZXR1cm4ge1xuICAgIHRvQ2hhaW4sXG4gICAgdG9BZGRyZXNzLFxuICAgIGJyaWRnZUZlZSxcbiAgICBuZXR3b3JrRmVlLFxuICB9O1xufTtcbiJdfQ==
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
2
|
-
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
3
|
-
import { NodeOutputBox, NodeTransaction } from './types';
|
|
4
|
-
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
|
-
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
6
|
-
export declare class ErgoNodeRosenExtractor extends AbstractRosenDataExtractor<NodeTransaction> {
|
|
7
|
-
readonly chain = "ergo";
|
|
8
|
-
lockErgoTree: string;
|
|
9
|
-
constructor(lockAddress: string, tokens: TokenMap, logger?: AbstractLogger);
|
|
10
|
-
/**
|
|
11
|
-
* extracts RosenData from given lock transaction in Node format
|
|
12
|
-
* @param transaction the lock transaction in Node format
|
|
13
|
-
*/
|
|
14
|
-
extractRawData: (transaction: NodeTransaction) => RosenData | undefined;
|
|
15
|
-
/**
|
|
16
|
-
* extracts and builds token transformation from NodeOutputBox and tokenMap
|
|
17
|
-
* @param box transaction output
|
|
18
|
-
* @param toChain event target chain
|
|
19
|
-
*/
|
|
20
|
-
getAssetTransformation: (box: NodeOutputBox, toChain: string) => TokenTransformation | undefined;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=ErgoNodeRosenExtractor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ErgoNodeRosenExtractor.d.ts","sourceRoot":"","sources":["../../../../lib/getRosenData/ergo/ErgoNodeRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,qBAAa,sBAAuB,SAAQ,0BAA0B,CAAC,eAAe,CAAC;IACrF,QAAQ,CAAC,KAAK,UAAc;IAC5B,YAAY,EAAE,MAAM,CAAC;gBAET,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAO1E;;;OAGG;IACH,cAAc,GAAI,aAAa,eAAe,KAAG,SAAS,GAAG,SAAS,CAwDpE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,aAAa,EAClB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAmChC;CACH"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
-
import { ERGO_CHAIN, ERGO_NATIVE_TOKEN } from '../const';
|
|
3
|
-
import { Address, Constant } from 'ergo-lib-wasm-nodejs';
|
|
4
|
-
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
5
|
-
export class ErgoNodeRosenExtractor extends AbstractRosenDataExtractor {
|
|
6
|
-
chain = ERGO_CHAIN;
|
|
7
|
-
lockErgoTree;
|
|
8
|
-
constructor(lockAddress, tokens, logger) {
|
|
9
|
-
super(lockAddress, tokens, logger);
|
|
10
|
-
this.lockErgoTree = Address.from_base58(lockAddress)
|
|
11
|
-
.to_ergo_tree()
|
|
12
|
-
.to_base16_bytes();
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* extracts RosenData from given lock transaction in Node format
|
|
16
|
-
* @param transaction the lock transaction in Node format
|
|
17
|
-
*/
|
|
18
|
-
extractRawData = (transaction) => {
|
|
19
|
-
const baseError = `No rosen data found for tx [${transaction.id}]`;
|
|
20
|
-
try {
|
|
21
|
-
for (const box of transaction.outputs) {
|
|
22
|
-
const boxBaseError = `No rosen data found in box [${box.boxId}]`;
|
|
23
|
-
if (box.ergoTree === this.lockErgoTree && box.additionalRegisters?.R4) {
|
|
24
|
-
const R4 = Constant.decode_from_base16(box.additionalRegisters.R4);
|
|
25
|
-
if (R4) {
|
|
26
|
-
const R4Serialized = R4.to_coll_coll_byte();
|
|
27
|
-
if (R4Serialized.length >= 5) {
|
|
28
|
-
const toChain = Buffer.from(R4Serialized[0]).toString();
|
|
29
|
-
const assetTransformation = this.getAssetTransformation(box, toChain);
|
|
30
|
-
if (assetTransformation) {
|
|
31
|
-
return {
|
|
32
|
-
toChain: toChain,
|
|
33
|
-
toAddress: Buffer.from(R4Serialized[1]).toString(),
|
|
34
|
-
bridgeFee: Buffer.from(R4Serialized[3]).toString(),
|
|
35
|
-
networkFee: Buffer.from(R4Serialized[2]).toString(),
|
|
36
|
-
fromAddress: Buffer.from(R4Serialized[4]).toString(),
|
|
37
|
-
sourceChainTokenId: assetTransformation.from,
|
|
38
|
-
amount: assetTransformation.amount,
|
|
39
|
-
targetChainTokenId: assetTransformation.to,
|
|
40
|
-
sourceTxId: transaction.id,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else
|
|
45
|
-
this.logger.debug(boxBaseError +
|
|
46
|
-
`: length of data in R4 is less than expected [${R4Serialized.length} < 5]`);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
if (box.ergoTree !== this.lockErgoTree)
|
|
51
|
-
this.logger.debug(boxBaseError +
|
|
52
|
-
`: invalid ergo tree [${box.ergoTree} !== ${this.lockErgoTree}]`);
|
|
53
|
-
else
|
|
54
|
-
this.logger.debug(boxBaseError + `: no R4`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
this.logger.debug(baseError + `: No valid rosen data found in any output box registers`);
|
|
58
|
-
}
|
|
59
|
-
catch (e) {
|
|
60
|
-
this.logger.debug(`An error occurred while getting Ergo rosen data: ${e}`);
|
|
61
|
-
if (e instanceof Error && e.stack) {
|
|
62
|
-
this.logger.debug(e.stack);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return undefined;
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* extracts and builds token transformation from NodeOutputBox and tokenMap
|
|
69
|
-
* @param box transaction output
|
|
70
|
-
* @param toChain event target chain
|
|
71
|
-
*/
|
|
72
|
-
getAssetTransformation = (box, toChain) => {
|
|
73
|
-
// try to build transformation using locked tokens
|
|
74
|
-
if (box.assets && box.assets.length > 0) {
|
|
75
|
-
for (const lockedToken of box.assets) {
|
|
76
|
-
const token = this.tokens.search(ERGO_CHAIN, {
|
|
77
|
-
tokenId: lockedToken.tokenId,
|
|
78
|
-
});
|
|
79
|
-
if (token.length > 0 && Object.hasOwn(token[0], toChain)) {
|
|
80
|
-
return {
|
|
81
|
-
from: lockedToken.tokenId,
|
|
82
|
-
to: this.tokens.getID(token[0], toChain),
|
|
83
|
-
amount: lockedToken.amount.toString(),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
// try to build transformation using locked Erg
|
|
89
|
-
const erg = this.tokens.search(ERGO_CHAIN, {
|
|
90
|
-
tokenId: ERGO_NATIVE_TOKEN,
|
|
91
|
-
});
|
|
92
|
-
if (erg.length > 0 && Object.hasOwn(erg[0], toChain)) {
|
|
93
|
-
return {
|
|
94
|
-
from: ERGO_NATIVE_TOKEN,
|
|
95
|
-
to: this.tokens.getID(erg[0], toChain),
|
|
96
|
-
amount: box.value.toString(),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.logger.debug(`No rosen asset transformation found for box [${box.boxId}]: box assets: ${JsonBigInt.stringify(box.assets)}`);
|
|
101
|
-
return undefined;
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJnb05vZGVSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvZXJnby9FcmdvTm9kZVJvc2VuRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sMEJBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUd6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSwwQkFBMkM7SUFDNUUsS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUM1QixZQUFZLENBQVM7SUFFckIsWUFBWSxXQUFtQixFQUFFLE1BQWdCLEVBQUUsTUFBdUI7UUFDeEUsS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQzthQUNqRCxZQUFZLEVBQUU7YUFDZCxlQUFlLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLENBQUMsV0FBNEIsRUFBeUIsRUFBRTtRQUN2RSxNQUFNLFNBQVMsR0FBRywrQkFBK0IsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25FLElBQUksQ0FBQztZQUNILEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QyxNQUFNLFlBQVksR0FBRywrQkFBK0IsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDO2dCQUNqRSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsbUJBQW1CLEVBQUUs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LENBQUMsS0FDTixrQkFBa0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDckQsQ0FBQztZQUNGLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvc2VuRGF0YSwgVG9rZW5UcmFuc2Zvcm1hdGlvbiB9IGZyb20gJy4uL2Fic3RyYWN0L3R5cGVzJztcbmltcG9ydCBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvciBmcm9tICcuLi9hYnN0cmFjdC9BYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3Rvcic7XG5pbXBvcnQgeyBFUkdPX0NIQUlOLCBFUkdPX05BVElWRV9UT0tFTiB9IGZyb20gJy4uL2NvbnN0JztcbmltcG9ydCB7IE5vZGVPdXRwdXRCb3gsIE5vZGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBBZGRyZXNzLCBDb25zdGFudCB9IGZyb20gJ2VyZ28tbGliLXdhc20tbm9kZWpzJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmV4cG9ydCBjbGFzcyBFcmdvTm9kZVJvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8Tm9kZVRyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gRVJHT19DSEFJTjtcbiAgbG9ja0VyZ29UcmVlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIHRoaXMubG9ja0VyZ29UcmVlID0gQWRkcmVzcy5mcm9tX2Jhc2U1OChsb2NrQWRkcmVzcylcbiAgICAgIC50b19lcmdvX3RyZWUoKVxuICAgICAgLnRvX2Jhc2UxNl9ieXRlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gTm9kZSBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIE5vZGUgZm9ybWF0XG4gICAqL1xuICBleHRyYWN0UmF3RGF0YSA9ICh0cmFuc2FjdGlvbjogTm9kZVRyYW5zYWN0aW9uKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgYm94IG9mIHRyYW5zYWN0aW9uLm91dHB1dHMpIHtcbiAgICAgICAgY29uc3QgYm94QmFzZUVycm9yID0gYE5vIHJvc2VuIGRhdGEgZm91bmQgaW4gYm94IFske2JveC5ib3hJZH1dYDtcbiAgICAgICAgaWYgKGJveC5lcmdvVHJlZSA9PT0gdGhpcy5sb2NrRXJnb1RyZWUgJiYgYm94LmFkZGl0aW9uYWxSZWdpc3RlcnM/LlI0KSB7XG4gICAgICAgICAgY29uc3QgUjQgPSBDb25zdGFudC5kZWNvZGVfZnJvbV9iYXNlMTYoYm94LmFkZGl0aW9uYWxSZWdpc3RlcnMuUjQpO1xuICAgICAgICAgIGlmIChSNCkge1xuICAgICAgICAgICAgY29uc3QgUjRTZXJpYWxpemVkID0gUjQudG9fY29sbF9jb2xsX2J5dGUoKTtcbiAgICAgICAgICAgIGlmIChSNFNlcmlhbGl6ZWQubGVuZ3RoID49IDUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdG9DaGFpbiA9IEJ1ZmZlci5mcm9tKFI0U2VyaWFsaXplZFswXSkudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICBjb25zdCBhc3NldFRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRBc3NldFRyYW5zZm9ybWF0aW9uKFxuICAgICAgICAgICAgICAgIGJveCxcbiAgICAgICAgICAgICAgICB0b0NoYWluXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIHRvQ2hhaW46IHRvQ2hhaW4sXG4gICAgICAgICAgICAgICAgICB0b0FkZHJlc3M6IEJ1ZmZlci5mcm9tKFI0U2VyaWFsaXplZFsxXSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIGJyaWRnZUZlZTogQnVmZmVyLmZyb20oUjRTZXJpYWxpemVkWzNdKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgbmV0d29ya0ZlZTogQnVmZmVyLmZyb20oUjRTZXJpYWxpemVkWzJdKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgZnJvbUFkZHJlc3M6IEJ1ZmZlci5mcm9tKFI0U2VyaWFsaXplZFs0XSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICAgICAgICAgICAgYW1vdW50OiBhc3NldFRyYW5zZm9ybWF0aW9uLmFtb3VudCxcbiAgICAgICAgICAgICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi50byxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgICAgICBib3hCYXNlRXJyb3IgK1xuICAgICAgICAgICAgICAgICAgYDogbGVuZ3RoIG9mIGRhdGEgaW4gUjQgaXMgbGVzcyB0aGFuIGV4cGVjdGVkIFske1I0U2VyaWFsaXplZC5sZW5ndGh9IDwgNV1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChib3guZXJnb1RyZWUgIT09IHRoaXMubG9ja0VyZ29UcmVlKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgIGJveEJhc2VFcnJvciArXG4gICAgICAgICAgICAgICAgYDogaW52YWxpZCBlcmdvIHRyZWUgWyR7Ym94LmVyZ29UcmVlfSAhPT0gJHt0aGlzLmxvY2tFcmdvVHJlZX1dYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICBlbHNlIHRoaXMubG9nZ2VyLmRlYnVnKGJveEJhc2VFcnJvciArIGA6IG5vIFI0YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBiYXNlRXJyb3IgKyBgOiBObyB2YWxpZCByb3NlbiBkYXRhIGZvdW5kIGluIGFueSBvdXRwdXQgYm94IHJlZ2lzdGVyc2BcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIEVyZ28gcm9zZW4gZGF0YTogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBOb2RlT3V0cHV0Qm94IGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBOb2RlT3V0cHV0Qm94LFxuICAgIHRvQ2hhaW46IHN0cmluZ1xuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIHRva2Vuc1xuICAgIGlmIChib3guYXNzZXRzICYmIGJveC5hc3NldHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBsb2NrZWRUb2tlbiBvZiBib3guYXNzZXRzKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnMuc2VhcmNoKEVSR09fQ0hBSU4sIHtcbiAgICAgICAgICB0b2tlbklkOiBsb2NrZWRUb2tlbi50b2tlbklkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRva2VuLmxlbmd0aCA+IDAgJiYgT2JqZWN0Lmhhc093bih0b2tlblswXSwgdG9DaGFpbikpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnJvbTogbG9ja2VkVG9rZW4udG9rZW5JZCxcbiAgICAgICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh0b2tlblswXSwgdG9DaGFpbiksXG4gICAgICAgICAgICBhbW91bnQ6IGxvY2tlZFRva2VuLmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEVyZ1xuICAgIGNvbnN0IGVyZyA9IHRoaXMudG9rZW5zLnNlYXJjaChFUkdPX0NIQUlOLCB7XG4gICAgICB0b2tlbklkOiBFUkdPX05BVElWRV9UT0tFTixcbiAgICB9KTtcbiAgICBpZiAoZXJnLmxlbmd0aCA+IDAgJiYgT2JqZWN0Lmhhc093bihlcmdbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiBFUkdPX05BVElWRV9UT0tFTixcbiAgICAgICAgdG86IHRoaXMudG9rZW5zLmdldElEKGVyZ1swXSwgdG9DaGFpbiksXG4gICAgICAgIGFtb3VudDogYm94LnZhbHVlLnRvU3RyaW5nKCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYE5vIHJvc2VuIGFzc2V0IHRyYW5zZm9ybWF0aW9uIGZvdW5kIGZvciBib3ggWyR7XG4gICAgICAgICAgYm94LmJveElkXG4gICAgICAgIH1dOiBib3ggYXNzZXRzOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGJveC5hc3NldHMpfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|