@rosen-bridge/evm-observation-extractor 5.2.2 → 5.3.0-82c56984
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/{BinanceRpcObservationExtractor.d.ts → binanceRpcObservationExtractor.d.ts} +3 -3
- package/dist/binanceRpcObservationExtractor.d.ts.map +1 -0
- package/dist/binanceRpcObservationExtractor.js +13 -0
- package/dist/{EthereumRpcObservationExtractor.d.ts → ethereumRpcObservationExtractor.d.ts} +3 -3
- package/dist/ethereumRpcObservationExtractor.d.ts.map +1 -0
- package/dist/ethereumRpcObservationExtractor.js +13 -0
- package/dist/{EvmRpcObservationExtractor.d.ts → evmRpcObservationExtractor.d.ts} +2 -2
- package/dist/evmRpcObservationExtractor.d.ts.map +1 -0
- package/dist/evmRpcObservationExtractor.js +60 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -4
- package/package.json +17 -16
- package/dist/BinanceRpcObservationExtractor.d.ts.map +0 -1
- package/dist/BinanceRpcObservationExtractor.js +0 -13
- package/dist/EthereumRpcObservationExtractor.d.ts.map +0 -1
- package/dist/EthereumRpcObservationExtractor.js +0 -13
- package/dist/EvmRpcObservationExtractor.d.ts.map +0 -1
- package/dist/EvmRpcObservationExtractor.js +0 -59
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @rosen-bridge/evm-observation-extractor
|
|
2
2
|
|
|
3
|
+
## 5.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add rawData to the return data of the extractor's `processTransactions` method
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Fix package-lock and move typescript and types/node into root
|
|
12
|
+
- Update eslint and plugins:
|
|
13
|
+
- Apply new rules such as sort imports and file name
|
|
14
|
+
- Update dependencies
|
|
15
|
+
- @rosen-bridge/extended-typeorm@1.0.1
|
|
16
|
+
- @rosen-clients/rate-limited-axios@1.1.0
|
|
17
|
+
- @rosen-bridge/rosen-extractor@10.1.1
|
|
18
|
+
- @rosen-bridge/tokens@4.0.1
|
|
19
|
+
- @rosen-bridge/abstract-logger@3.0.1
|
|
20
|
+
- @rosen-bridge/json-bigint@1.1.0
|
|
21
|
+
- @rosen-clients/ergo-explorer@2.1.0
|
|
22
|
+
- @rosen-clients/ergo-node@3.1.0
|
|
23
|
+
- @rosen-bridge/abstract-observation-extractor@0.2.0
|
|
24
|
+
- @rosen-bridge/scanner-interfaces@0.2.1
|
|
25
|
+
|
|
3
26
|
## 5.2.2
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
-
import { TokenMap } from '@rosen-bridge/tokens';
|
|
3
2
|
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
-
import {
|
|
3
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
+
import { EvmRpcObservationExtractor } from './evmRpcObservationExtractor';
|
|
5
5
|
export declare class BinanceRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
6
6
|
readonly FROM_CHAIN = "binance";
|
|
7
7
|
constructor(lockAddress: string, dataSource: DataSource, tokens: TokenMap, logger?: AbstractLogger);
|
|
@@ -10,4 +10,4 @@ export declare class BinanceRpcObservationExtractor extends EvmRpcObservationExt
|
|
|
10
10
|
*/
|
|
11
11
|
getId: () => string;
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=binanceRpcObservationExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binanceRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/binanceRpcObservationExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,8BAA+B,SAAQ,0BAA0B;IAC5E,QAAQ,CAAC,UAAU,aAAa;gBAG9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAgBzB;;OAEG;IACH,KAAK,eAAiC;CACvC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EvmEthersRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
2
|
+
import { EvmRpcObservationExtractor } from './evmRpcObservationExtractor';
|
|
3
|
+
export class BinanceRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
4
|
+
FROM_CHAIN = 'binance';
|
|
5
|
+
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
+
super(dataSource, tokens, new EvmEthersRosenExtractor(lockAddress, tokens, 'binance', 'bnb', logger), logger);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* gets Id for current extractor
|
|
10
|
+
*/
|
|
11
|
+
getId = () => 'binance-rpc-extractor';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYW5jZVJwY09ic2VydmF0aW9uRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2JpbmFuY2VScGNPYnNlcnZhdGlvbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsMEJBQTBCO0lBQ25FLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFFaEMsWUFDRSxXQUFtQixFQUNuQixVQUFzQixFQUN0QixNQUFnQixFQUNoQixNQUF1QjtRQUV2QixLQUFLLENBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixJQUFJLHVCQUF1QixDQUN6QixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxDQUNQLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Q0FDdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Jvc2VuLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcblxuaW1wb3J0IHsgRXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IgfSBmcm9tICcuL2V2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yJztcblxuZXhwb3J0IGNsYXNzIEJpbmFuY2VScGNPYnNlcnZhdGlvbkV4dHJhY3RvciBleHRlbmRzIEV2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yIHtcbiAgcmVhZG9ubHkgRlJPTV9DSEFJTiA9ICdiaW5hbmNlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsb2NrQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgdG9rZW5zOiBUb2tlbk1hcCxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgdG9rZW5zLFxuICAgICAgbmV3IEV2bUV0aGVyc1Jvc2VuRXh0cmFjdG9yKFxuICAgICAgICBsb2NrQWRkcmVzcyxcbiAgICAgICAgdG9rZW5zLFxuICAgICAgICAnYmluYW5jZScsXG4gICAgICAgICdibmInLFxuICAgICAgICBsb2dnZXIsXG4gICAgICApLFxuICAgICAgbG9nZ2VyLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyBJZCBmb3IgY3VycmVudCBleHRyYWN0b3JcbiAgICovXG4gIGdldElkID0gKCkgPT4gJ2JpbmFuY2UtcnBjLWV4dHJhY3Rvcic7XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
-
import { TokenMap } from '@rosen-bridge/tokens';
|
|
3
2
|
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
-
import {
|
|
3
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
+
import { EvmRpcObservationExtractor } from './evmRpcObservationExtractor';
|
|
5
5
|
export declare class EthereumRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
6
6
|
readonly FROM_CHAIN = "ethereum";
|
|
7
7
|
constructor(lockAddress: string, dataSource: DataSource, tokens: TokenMap, logger?: AbstractLogger);
|
|
@@ -10,4 +10,4 @@ export declare class EthereumRpcObservationExtractor extends EvmRpcObservationEx
|
|
|
10
10
|
*/
|
|
11
11
|
getId: () => string;
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=ethereumRpcObservationExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereumRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/ethereumRpcObservationExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,+BAAgC,SAAQ,0BAA0B;IAC7E,QAAQ,CAAC,UAAU,cAAc;gBAG/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAgBzB;;OAEG;IACH,KAAK,eAAkC;CACxC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EvmEthersRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
2
|
+
import { EvmRpcObservationExtractor } from './evmRpcObservationExtractor';
|
|
3
|
+
export class EthereumRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
4
|
+
FROM_CHAIN = 'ethereum';
|
|
5
|
+
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
+
super(dataSource, tokens, new EvmEthersRosenExtractor(lockAddress, tokens, 'ethereum', 'eth', logger), logger);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* gets Id for current extractor
|
|
10
|
+
*/
|
|
11
|
+
getId = () => 'ethereum-rpc-extractor';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoZXJldW1ScGNPYnNlcnZhdGlvbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9ldGhlcmV1bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFFLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSwwQkFBMEI7SUFDcEUsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUVqQyxZQUNFLFdBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLE1BQWdCLEVBQ2hCLE1BQXVCO1FBRXZCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLElBQUksdUJBQXVCLENBQ3pCLFdBQVcsRUFDWCxNQUFNLEVBQ04sVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLENBQ1AsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztDQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBFdm1FdGhlcnNSb3NlbkV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvcm9zZW4tZXh0cmFjdG9yJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuXG5pbXBvcnQgeyBFdm1ScGNPYnNlcnZhdGlvbkV4dHJhY3RvciB9IGZyb20gJy4vZXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3InO1xuXG5leHBvcnQgY2xhc3MgRXRoZXJldW1ScGNPYnNlcnZhdGlvbkV4dHJhY3RvciBleHRlbmRzIEV2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yIHtcbiAgcmVhZG9ubHkgRlJPTV9DSEFJTiA9ICdldGhlcmV1bSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbG9ja0FkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHRva2VuczogVG9rZW5NYXAsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZGF0YVNvdXJjZSxcbiAgICAgIHRva2VucyxcbiAgICAgIG5ldyBFdm1FdGhlcnNSb3NlbkV4dHJhY3RvcihcbiAgICAgICAgbG9ja0FkZHJlc3MsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgJ2V0aGVyZXVtJyxcbiAgICAgICAgJ2V0aCcsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICksXG4gICAgICBsb2dnZXIsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRzIElkIGZvciBjdXJyZW50IGV4dHJhY3RvclxuICAgKi9cbiAgZ2V0SWQgPSAoKSA9PiAnZXRoZXJldW0tcnBjLWV4dHJhY3Rvcic7XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
2
1
|
import { TransactionResponse } from 'ethers';
|
|
2
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
3
|
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
4
4
|
export declare abstract class EvmRpcObservationExtractor extends AbstractObservationExtractor<TransactionResponse> {
|
|
5
5
|
/**
|
|
@@ -15,4 +15,4 @@ export declare abstract class EvmRpcObservationExtractor extends AbstractObserva
|
|
|
15
15
|
*/
|
|
16
16
|
getTxId: (tx: TransactionResponse) => string;
|
|
17
17
|
}
|
|
18
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=evmRpcObservationExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evmRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/evmRpcObservationExtractor.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EACL,4BAA4B,EAE7B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,8BAAsB,0BAA2B,SAAQ,4BAA4B,CAAC,mBAAmB,CAAC;IACxG;;;;;;OAMG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,mBAAmB,CAAC,EAC/B,OAAO,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAwCjB;IAEF;;OAEG;IACH,OAAO,GAAI,IAAI,mBAAmB,YAOhC;CACH"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { blake2b } from 'blakejs';
|
|
2
|
+
import { isCallException } from 'ethers';
|
|
3
|
+
import { AbstractObservationExtractor, } from '@rosen-bridge/abstract-observation-extractor';
|
|
4
|
+
export class EvmRpcObservationExtractor extends AbstractObservationExtractor {
|
|
5
|
+
/**
|
|
6
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
7
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
8
|
+
* additionally, it returns false if the transaction is failed
|
|
9
|
+
* @param block
|
|
10
|
+
* @param txs
|
|
11
|
+
*/
|
|
12
|
+
processTransactions = async (txs, block) => {
|
|
13
|
+
const observations = [];
|
|
14
|
+
for (const transaction of txs) {
|
|
15
|
+
const data = this.extractor.get(transaction);
|
|
16
|
+
if (data) {
|
|
17
|
+
try {
|
|
18
|
+
const result = await transaction.wait(0);
|
|
19
|
+
if (result) {
|
|
20
|
+
const requestId = Buffer.from(blake2b(this.getTxId(transaction), undefined, 32)).toString('hex');
|
|
21
|
+
observations.push({
|
|
22
|
+
fromChain: this.FROM_CHAIN,
|
|
23
|
+
toChain: data.toChain,
|
|
24
|
+
amount: data.amount,
|
|
25
|
+
sourceChainTokenId: data.sourceChainTokenId,
|
|
26
|
+
targetChainTokenId: data.targetChainTokenId,
|
|
27
|
+
sourceTxId: data.sourceTxId,
|
|
28
|
+
bridgeFee: data.bridgeFee,
|
|
29
|
+
networkFee: data.networkFee,
|
|
30
|
+
sourceBlockId: block.hash,
|
|
31
|
+
requestId: requestId,
|
|
32
|
+
toAddress: data.toAddress,
|
|
33
|
+
fromAddress: data.fromAddress,
|
|
34
|
+
rawData: data.rawData,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else
|
|
38
|
+
throw Error(`Impossible behavior: Evm Tx [${transaction.hash}] is included in block [${block.hash}] but waiting resulted in null or undefined`);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
if (isCallException(e))
|
|
42
|
+
this.logger.debug(`found valid lock transaction [${transaction.hash}] but tx is failed`);
|
|
43
|
+
else
|
|
44
|
+
throw e;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return this.actions.storeObservations(observations, block, this.getId());
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* gets transaction id from TransactionType
|
|
52
|
+
*/
|
|
53
|
+
getTxId = (tx) => {
|
|
54
|
+
if (tx.hash == null) {
|
|
55
|
+
throw Error('ImpossibleBehavior: Transactions coming from RPC have to be signed.');
|
|
56
|
+
}
|
|
57
|
+
return tx.hash;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvZXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZUFBZSxFQUF1QixNQUFNLFFBQVEsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsNEJBQTRCLEdBRTdCLE1BQU0sOENBQThDLENBQUM7QUFHdEQsTUFBTSxPQUFnQiwwQkFBMkIsU0FBUSw0QkFBaUQ7SUFDeEc7Ozs7OztPQU1HO0lBQ0gsbUJBQW1CLEdBQUcsS0FBSyxFQUN6QixHQUErQixFQUMvQixLQUFZLEVBQ00sRUFBRTtRQUNwQixNQUFNLFlBQVksR0FBZ0MsRUFBRSxDQUFDO1FBQ3JELEtBQUssTUFBTSxXQUFXLElBQUksR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDbEQsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07NEJBQ25CLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7NEJBQzNDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7NEJBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7NEJBQzNCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSTs0QkFDekIsU0FBUyxFQUFFLFNBQVM7NEJBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzs0QkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXOzRCQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87eUJBQ3RCLENBQUMsQ0FBQztvQkFDTCxDQUFDOzt3QkFDQyxNQUFNLEtBQUssQ0FDVCxnQ0FBZ0MsV0FBVyxDQUFDLElBQUksMkJBQTJCLEtBQUssQ0FBQyxJQUFJLDZDQUE2QyxDQUNuSSxDQUFDO2dCQUNOLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7d0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGlDQUFpQyxXQUFXLENBQUMsSUFBSSxvQkFBb0IsQ0FDdEUsQ0FBQzs7d0JBQ0MsTUFBTSxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxPQUFPLEdBQUcsQ0FBQyxFQUF1QixFQUFFLEVBQUU7UUFDcEMsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sS0FBSyxDQUNULHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQztJQUNqQixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJsYWtlMmIgfSBmcm9tICdibGFrZWpzJztcbmltcG9ydCB7IGlzQ2FsbEV4Y2VwdGlvbiwgVHJhbnNhY3Rpb25SZXNwb25zZSB9IGZyb20gJ2V0aGVycyc7XG5cbmltcG9ydCB7XG4gIEFic3RyYWN0T2JzZXJ2YXRpb25FeHRyYWN0b3IsXG4gIEV4dHJhY3RlZE9ic2VydmF0aW9uLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LW9ic2VydmF0aW9uLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBCbG9jayB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEV2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RPYnNlcnZhdGlvbkV4dHJhY3RvcjxUcmFuc2FjdGlvblJlc3BvbnNlPiB7XG4gIC8qKlxuICAgKiBnZXRzIGJsb2NrIGlkIGFuZCB0cmFuc2FjdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2sgYW5kIHNhdmVzIGlmIHRoZXkgYXJlIHZhbGlkIHJvc2VuXG4gICAqICB0cmFuc2FjdGlvbnMgYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyByZXR1cm4gdHJ1ZSBhbmQgaW4gY2FzZSBvZiBmYWlsdXJlIHJldHVybnMgZmFsc2VcbiAgICogYWRkaXRpb25hbGx5LCBpdCByZXR1cm5zIGZhbHNlIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBmYWlsZWRcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSB0eHNcbiAgICovXG4gIHByb2Nlc3NUcmFuc2FjdGlvbnMgPSBhc3luYyAoXG4gICAgdHhzOiBBcnJheTxUcmFuc2FjdGlvblJlc3BvbnNlPixcbiAgICBibG9jazogQmxvY2ssXG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IG9ic2VydmF0aW9uczogQXJyYXk8RXh0cmFjdGVkT2JzZXJ2YXRpb24+ID0gW107XG4gICAgZm9yIChjb25zdCB0cmFuc2FjdGlvbiBvZiB0eHMpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmV4dHJhY3Rvci5nZXQodHJhbnNhY3Rpb24pO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2FjdGlvbi53YWl0KDApO1xuICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgICAgICAgICBibGFrZTJiKHRoaXMuZ2V0VHhJZCh0cmFuc2FjdGlvbiksIHVuZGVmaW5lZCwgMzIpLFxuICAgICAgICAgICAgKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICBvYnNlcnZhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZyb21DaGFpbjogdGhpcy5GUk9NX0NIQUlOLFxuICAgICAgICAgICAgICB0b0NoYWluOiBkYXRhLnRvQ2hhaW4sXG4gICAgICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogZGF0YS5zb3VyY2VDaGFpblRva2VuSWQsXG4gICAgICAgICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogZGF0YS50YXJnZXRDaGFpblRva2VuSWQsXG4gICAgICAgICAgICAgIHNvdXJjZVR4SWQ6IGRhdGEuc291cmNlVHhJZCxcbiAgICAgICAgICAgICAgYnJpZGdlRmVlOiBkYXRhLmJyaWRnZUZlZSxcbiAgICAgICAgICAgICAgbmV0d29ya0ZlZTogZGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICAgICAgICBzb3VyY2VCbG9ja0lkOiBibG9jay5oYXNoLFxuICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgdG9BZGRyZXNzOiBkYXRhLnRvQWRkcmVzcyxcbiAgICAgICAgICAgICAgZnJvbUFkZHJlc3M6IGRhdGEuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICAgIHJhd0RhdGE6IGRhdGEucmF3RGF0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIGBJbXBvc3NpYmxlIGJlaGF2aW9yOiBFdm0gVHggWyR7dHJhbnNhY3Rpb24uaGFzaH1dIGlzIGluY2x1ZGVkIGluIGJsb2NrIFske2Jsb2NrLmhhc2h9XSBidXQgd2FpdGluZyByZXN1bHRlZCBpbiBudWxsIG9yIHVuZGVmaW5lZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGlzQ2FsbEV4Y2VwdGlvbihlKSlcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBgZm91bmQgdmFsaWQgbG9jayB0cmFuc2FjdGlvbiBbJHt0cmFuc2FjdGlvbi5oYXNofV0gYnV0IHR4IGlzIGZhaWxlZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLnN0b3JlT2JzZXJ2YXRpb25zKG9ic2VydmF0aW9ucywgYmxvY2ssIHRoaXMuZ2V0SWQoKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldHMgdHJhbnNhY3Rpb24gaWQgZnJvbSBUcmFuc2FjdGlvblR5cGVcbiAgICovXG4gIGdldFR4SWQgPSAodHg6IFRyYW5zYWN0aW9uUmVzcG9uc2UpID0+IHtcbiAgICBpZiAodHguaGFzaCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0ltcG9zc2libGVCZWhhdmlvcjogVHJhbnNhY3Rpb25zIGNvbWluZyBmcm9tIFJQQyBoYXZlIHRvIGJlIHNpZ25lZC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4Lmhhc2g7XG4gIH07XG59XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
1
|
+
export * from './binanceRpcObservationExtractor';
|
|
2
|
+
export * from './ethereumRpcObservationExtractor';
|
|
3
|
+
export * from './evmRpcObservationExtractor';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './binanceRpcObservationExtractor';
|
|
2
|
+
export * from './ethereumRpcObservationExtractor';
|
|
3
|
+
export * from './evmRpcObservationExtractor';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2JpbmFuY2VScGNPYnNlcnZhdGlvbkV4dHJhY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL2V0aGVyZXVtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9ldm1ScGNPYnNlcnZhdGlvbkV4dHJhY3Rvcic7XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/evm-observation-extractor",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0-82c56984",
|
|
4
4
|
"description": "Event observation data extractor for EVM-compatible chains",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,32 +17,33 @@
|
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "tsc --build tsconfig.build.json",
|
|
20
|
+
"clean": "rimraf dist && rimraf tsconfig.build.tsbuildinfo",
|
|
20
21
|
"coverage": "npm run test -- --coverage",
|
|
21
22
|
"lint": "eslint --fix . && npm run prettify",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
23
|
+
"lint:check": "eslint . && npm run prettify:check",
|
|
24
|
+
"prettify": "prettier --write . --ignore-path ../../../.gitignore",
|
|
25
|
+
"prettify:check": "prettier --check . --ignore-path ../../../.gitignore",
|
|
26
|
+
"release": "npm run test -- --run && npm run clean && npm run build && npm publish --access public",
|
|
24
27
|
"test": "NODE_OPTIONS='--import tsx' vitest",
|
|
25
28
|
"type-check": "tsc --noEmit"
|
|
26
29
|
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@rosen-bridge/abstract-logger": "^3.0.1",
|
|
32
|
+
"@rosen-bridge/abstract-observation-extractor": "^0.2.0-82c56984",
|
|
33
|
+
"@rosen-bridge/extended-typeorm": "^1.0.1",
|
|
34
|
+
"@rosen-bridge/rosen-extractor": "^11.0.0",
|
|
35
|
+
"@rosen-bridge/scanner-interfaces": "^0.2.1-82c56984",
|
|
36
|
+
"@rosen-bridge/tokens": "^4.0.1",
|
|
37
|
+
"blakejs": "^1.2.1",
|
|
38
|
+
"ethers": "6.13.2"
|
|
39
|
+
},
|
|
27
40
|
"devDependencies": {
|
|
28
|
-
"@rosen-bridge/abstract-scanner": "^0.2.
|
|
29
|
-
"@types/node": "^22.18.0",
|
|
41
|
+
"@rosen-bridge/abstract-scanner": "^0.2.1-82c56984",
|
|
30
42
|
"@vitest/coverage-istanbul": "^3.1.4",
|
|
31
43
|
"tsx": "^4.19.4",
|
|
32
|
-
"typescript": "^5.3.3",
|
|
33
44
|
"vitest": "^3.1.4"
|
|
34
45
|
},
|
|
35
46
|
"engines": {
|
|
36
47
|
"node": ">=22.18.0"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"@rosen-bridge/abstract-logger": "^3.0.0",
|
|
40
|
-
"@rosen-bridge/abstract-observation-extractor": "^0.1.2",
|
|
41
|
-
"@rosen-bridge/extended-typeorm": "^1.0.0",
|
|
42
|
-
"@rosen-bridge/rosen-extractor": "^10.0.0",
|
|
43
|
-
"@rosen-bridge/scanner-interfaces": "^0.2.0",
|
|
44
|
-
"@rosen-bridge/tokens": "^4.0.0",
|
|
45
|
-
"blakejs": "^1.2.1",
|
|
46
|
-
"ethers": "6.13.2"
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BinanceRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/BinanceRpcObservationExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,8BAA+B,SAAQ,0BAA0B;IAC5E,QAAQ,CAAC,UAAU,aAAa;gBAG9B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAgBzB;;OAEG;IACH,KAAK,eAAiC;CACvC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { EvmEthersRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
2
|
-
import { EvmRpcObservationExtractor } from './EvmRpcObservationExtractor';
|
|
3
|
-
export class BinanceRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
4
|
-
FROM_CHAIN = 'binance';
|
|
5
|
-
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
-
super(dataSource, tokens, new EvmEthersRosenExtractor(lockAddress, tokens, 'binance', 'bnb', logger), logger);
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* gets Id for current extractor
|
|
10
|
-
*/
|
|
11
|
-
getId = () => 'binance-rpc-extractor';
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmluYW5jZVJwY09ic2VydmF0aW9uRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0JpbmFuY2VScGNPYnNlcnZhdGlvbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUd4RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsMEJBQTBCO0lBQ25FLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFFaEMsWUFDRSxXQUFtQixFQUNuQixVQUFzQixFQUN0QixNQUFnQixFQUNoQixNQUF1QjtRQUV2QixLQUFLLENBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixJQUFJLHVCQUF1QixDQUN6QixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxDQUNQLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Q0FDdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IEV2bUV0aGVyc1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9yb3Nlbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9leHRlbmRlZC10eXBlb3JtJztcbmltcG9ydCB7IEV2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yIH0gZnJvbSAnLi9Fdm1ScGNPYnNlcnZhdGlvbkV4dHJhY3Rvcic7XG5cbmV4cG9ydCBjbGFzcyBCaW5hbmNlUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IgZXh0ZW5kcyBFdm1ScGNPYnNlcnZhdGlvbkV4dHJhY3RvciB7XG4gIHJlYWRvbmx5IEZST01fQ0hBSU4gPSAnYmluYW5jZSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbG9ja0FkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHRva2VuczogVG9rZW5NYXAsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZGF0YVNvdXJjZSxcbiAgICAgIHRva2VucyxcbiAgICAgIG5ldyBFdm1FdGhlcnNSb3NlbkV4dHJhY3RvcihcbiAgICAgICAgbG9ja0FkZHJlc3MsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgJ2JpbmFuY2UnLFxuICAgICAgICAnYm5iJyxcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgKSxcbiAgICAgIGxvZ2dlcixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldHMgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+ICdiaW5hbmNlLXJwYy1leHRyYWN0b3InO1xufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EthereumRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/EthereumRpcObservationExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,qBAAa,+BAAgC,SAAQ,0BAA0B;IAC7E,QAAQ,CAAC,UAAU,cAAc;gBAG/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAgBzB;;OAEG;IACH,KAAK,eAAkC;CACxC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { EvmEthersRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
2
|
-
import { EvmRpcObservationExtractor } from './EvmRpcObservationExtractor';
|
|
3
|
-
export class EthereumRpcObservationExtractor extends EvmRpcObservationExtractor {
|
|
4
|
-
FROM_CHAIN = 'ethereum';
|
|
5
|
-
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
-
super(dataSource, tokens, new EvmEthersRosenExtractor(lockAddress, tokens, 'ethereum', 'eth', logger), logger);
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* gets Id for current extractor
|
|
10
|
-
*/
|
|
11
|
-
getId = () => 'ethereum-rpc-extractor';
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXRoZXJldW1ScGNPYnNlcnZhdGlvbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9FdGhlcmV1bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFFLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSwwQkFBMEI7SUFDcEUsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUVqQyxZQUNFLFdBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLE1BQWdCLEVBQ2hCLE1BQXVCO1FBRXZCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLElBQUksdUJBQXVCLENBQ3pCLFdBQVcsRUFDWCxNQUFNLEVBQ04sVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLENBQ1AsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztDQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Jvc2VuLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgRXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IgfSBmcm9tICcuL0V2bVJwY09ic2VydmF0aW9uRXh0cmFjdG9yJztcblxuZXhwb3J0IGNsYXNzIEV0aGVyZXVtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IgZXh0ZW5kcyBFdm1ScGNPYnNlcnZhdGlvbkV4dHJhY3RvciB7XG4gIHJlYWRvbmx5IEZST01fQ0hBSU4gPSAnZXRoZXJldW0nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvY2tBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICB0b2tlbnM6IFRva2VuTWFwLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyLFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICB0b2tlbnMsXG4gICAgICBuZXcgRXZtRXRoZXJzUm9zZW5FeHRyYWN0b3IoXG4gICAgICAgIGxvY2tBZGRyZXNzLFxuICAgICAgICB0b2tlbnMsXG4gICAgICAgICdldGhlcmV1bScsXG4gICAgICAgICdldGgnLFxuICAgICAgICBsb2dnZXIsXG4gICAgICApLFxuICAgICAgbG9nZ2VyLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0cyBJZCBmb3IgY3VycmVudCBleHRyYWN0b3JcbiAgICovXG4gIGdldElkID0gKCkgPT4gJ2V0aGVyZXVtLXJwYy1leHRyYWN0b3InO1xufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EvmRpcObservationExtractor.d.ts","sourceRoot":"","sources":["../lib/EvmRpcObservationExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAE7B,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAmB,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE9D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,8BAAsB,0BAA2B,SAAQ,4BAA4B,CAAC,mBAAmB,CAAC;IACxG;;;;;;OAMG;IACH,mBAAmB,QACZ,MAAM,mBAAmB,CAAC,SACxB,KAAK,KACX,QAAQ,OAAO,CAAC,CAuCjB;IAEF;;OAEG;IACH,OAAO,OAAQ,mBAAmB,YAOhC;CACH"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { AbstractObservationExtractor, } from '@rosen-bridge/abstract-observation-extractor';
|
|
2
|
-
import { isCallException } from 'ethers';
|
|
3
|
-
import { blake2b } from 'blakejs';
|
|
4
|
-
export class EvmRpcObservationExtractor extends AbstractObservationExtractor {
|
|
5
|
-
/**
|
|
6
|
-
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
7
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
8
|
-
* additionally, it returns false if the transaction is failed
|
|
9
|
-
* @param block
|
|
10
|
-
* @param txs
|
|
11
|
-
*/
|
|
12
|
-
processTransactions = async (txs, block) => {
|
|
13
|
-
const observations = [];
|
|
14
|
-
for (const transaction of txs) {
|
|
15
|
-
const data = this.extractor.get(transaction);
|
|
16
|
-
if (data) {
|
|
17
|
-
try {
|
|
18
|
-
const result = await transaction.wait(0);
|
|
19
|
-
if (result) {
|
|
20
|
-
const requestId = Buffer.from(blake2b(this.getTxId(transaction), undefined, 32)).toString('hex');
|
|
21
|
-
observations.push({
|
|
22
|
-
fromChain: this.FROM_CHAIN,
|
|
23
|
-
toChain: data.toChain,
|
|
24
|
-
amount: data.amount,
|
|
25
|
-
sourceChainTokenId: data.sourceChainTokenId,
|
|
26
|
-
targetChainTokenId: data.targetChainTokenId,
|
|
27
|
-
sourceTxId: data.sourceTxId,
|
|
28
|
-
bridgeFee: data.bridgeFee,
|
|
29
|
-
networkFee: data.networkFee,
|
|
30
|
-
sourceBlockId: block.hash,
|
|
31
|
-
requestId: requestId,
|
|
32
|
-
toAddress: data.toAddress,
|
|
33
|
-
fromAddress: data.fromAddress,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
else
|
|
37
|
-
throw Error(`Impossible behavior: Evm Tx [${transaction.hash}] is included in block [${block.hash}] but waiting resulted in null or undefined`);
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
if (isCallException(e))
|
|
41
|
-
this.logger.debug(`found valid lock transaction [${transaction.hash}] but tx is failed`);
|
|
42
|
-
else
|
|
43
|
-
throw e;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return this.actions.storeObservations(observations, block, this.getId());
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* gets transaction id from TransactionType
|
|
51
|
-
*/
|
|
52
|
-
getTxId = (tx) => {
|
|
53
|
-
if (tx.hash == null) {
|
|
54
|
-
throw Error('ImpossibleBehavior: Transactions coming from RPC have to be signed.');
|
|
55
|
-
}
|
|
56
|
-
return tx.hash;
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvRXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDRCQUE0QixHQUU3QixNQUFNLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQXVCLE1BQU0sUUFBUSxDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHbEMsTUFBTSxPQUFnQiwwQkFBMkIsU0FBUSw0QkFBaUQ7SUFDeEc7Ozs7OztPQU1HO0lBQ0gsbUJBQW1CLEdBQUcsS0FBSyxFQUN6QixHQUErQixFQUMvQixLQUFZLEVBQ00sRUFBRTtRQUNwQixNQUFNLFlBQVksR0FBZ0MsRUFBRSxDQUFDO1FBQ3JELEtBQUssTUFBTSxXQUFXLElBQUksR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUNYLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDbEQsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07NEJBQ25CLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7NEJBQzNDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7NEJBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7NEJBQzNCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSTs0QkFDekIsU0FBUyxFQUFFLFNBQVM7NEJBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzs0QkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO3lCQUM5QixDQUFDLENBQUM7b0JBQ0wsQ0FBQzs7d0JBQ0MsTUFBTSxLQUFLLENBQ1QsZ0NBQWdDLFdBQVcsQ0FBQyxJQUFJLDJCQUEyQixLQUFLLENBQUMsSUFBSSw2Q0FBNkMsQ0FDbkksQ0FBQztnQkFDTixDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDO3dCQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixpQ0FBaUMsV0FBVyxDQUFDLElBQUksb0JBQW9CLENBQ3RFLENBQUM7O3dCQUNDLE1BQU0sQ0FBQyxDQUFDO2dCQUNmLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsT0FBTyxHQUFHLENBQUMsRUFBdUIsRUFBRSxFQUFFO1FBQ3BDLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNwQixNQUFNLEtBQUssQ0FDVCxxRUFBcUUsQ0FDdEUsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDakIsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yLFxuICBFeHRyYWN0ZWRPYnNlcnZhdGlvbixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgaXNDYWxsRXhjZXB0aW9uLCBUcmFuc2FjdGlvblJlc3BvbnNlIH0gZnJvbSAnZXRoZXJzJztcbmltcG9ydCB7IGJsYWtlMmIgfSBmcm9tICdibGFrZWpzJztcbmltcG9ydCB7IEJsb2NrIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRXZtUnBjT2JzZXJ2YXRpb25FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yPFRyYW5zYWN0aW9uUmVzcG9uc2U+IHtcbiAgLyoqXG4gICAqIGdldHMgYmxvY2sgaWQgYW5kIHRyYW5zYWN0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSBibG9jayBhbmQgc2F2ZXMgaWYgdGhleSBhcmUgdmFsaWQgcm9zZW5cbiAgICogIHRyYW5zYWN0aW9ucyBhbmQgaW4gY2FzZSBvZiBzdWNjZXNzIHJldHVybiB0cnVlIGFuZCBpbiBjYXNlIG9mIGZhaWx1cmUgcmV0dXJucyBmYWxzZVxuICAgKiBhZGRpdGlvbmFsbHksIGl0IHJldHVybnMgZmFsc2UgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGZhaWxlZFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIHR4c1xuICAgKi9cbiAgcHJvY2Vzc1RyYW5zYWN0aW9ucyA9IGFzeW5jIChcbiAgICB0eHM6IEFycmF5PFRyYW5zYWN0aW9uUmVzcG9uc2U+LFxuICAgIGJsb2NrOiBCbG9jayxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3Qgb2JzZXJ2YXRpb25zOiBBcnJheTxFeHRyYWN0ZWRPYnNlcnZhdGlvbj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRyYW5zYWN0aW9uIG9mIHR4cykge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZXh0cmFjdG9yLmdldCh0cmFuc2FjdGlvbik7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zYWN0aW9uLndhaXQoMCk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgIGJsYWtlMmIodGhpcy5nZXRUeElkKHRyYW5zYWN0aW9uKSwgdW5kZWZpbmVkLCAzMiksXG4gICAgICAgICAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICAgIG9ic2VydmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgZnJvbUNoYWluOiB0aGlzLkZST01fQ0hBSU4sXG4gICAgICAgICAgICAgIHRvQ2hhaW46IGRhdGEudG9DaGFpbixcbiAgICAgICAgICAgICAgYW1vdW50OiBkYXRhLmFtb3VudCxcbiAgICAgICAgICAgICAgc291cmNlQ2hhaW5Ub2tlbklkOiBkYXRhLnNvdXJjZUNoYWluVG9rZW5JZCxcbiAgICAgICAgICAgICAgdGFyZ2V0Q2hhaW5Ub2tlbklkOiBkYXRhLnRhcmdldENoYWluVG9rZW5JZCxcbiAgICAgICAgICAgICAgc291cmNlVHhJZDogZGF0YS5zb3VyY2VUeElkLFxuICAgICAgICAgICAgICBicmlkZ2VGZWU6IGRhdGEuYnJpZGdlRmVlLFxuICAgICAgICAgICAgICBuZXR3b3JrRmVlOiBkYXRhLm5ldHdvcmtGZWUsXG4gICAgICAgICAgICAgIHNvdXJjZUJsb2NrSWQ6IGJsb2NrLmhhc2gsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgICAgICAgICB0b0FkZHJlc3M6IGRhdGEudG9BZGRyZXNzLFxuICAgICAgICAgICAgICBmcm9tQWRkcmVzczogZGF0YS5mcm9tQWRkcmVzcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICAgIGBJbXBvc3NpYmxlIGJlaGF2aW9yOiBFdm0gVHggWyR7dHJhbnNhY3Rpb24uaGFzaH1dIGlzIGluY2x1ZGVkIGluIGJsb2NrIFske2Jsb2NrLmhhc2h9XSBidXQgd2FpdGluZyByZXN1bHRlZCBpbiBudWxsIG9yIHVuZGVmaW5lZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGlzQ2FsbEV4Y2VwdGlvbihlKSlcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBgZm91bmQgdmFsaWQgbG9jayB0cmFuc2FjdGlvbiBbJHt0cmFuc2FjdGlvbi5oYXNofV0gYnV0IHR4IGlzIGZhaWxlZGAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zLnN0b3JlT2JzZXJ2YXRpb25zKG9ic2VydmF0aW9ucywgYmxvY2ssIHRoaXMuZ2V0SWQoKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGdldHMgdHJhbnNhY3Rpb24gaWQgZnJvbSBUcmFuc2FjdGlvblR5cGVcbiAgICovXG4gIGdldFR4SWQgPSAodHg6IFRyYW5zYWN0aW9uUmVzcG9uc2UpID0+IHtcbiAgICBpZiAodHguaGFzaCA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0ltcG9zc2libGVCZWhhdmlvcjogVHJhbnNhY3Rpb25zIGNvbWluZyBmcm9tIFJQQyBoYXZlIHRvIGJlIHNpZ25lZC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4Lmhhc2g7XG4gIH07XG59XG4iXX0=
|