@rosen-bridge/cardano-observation-extractor 0.1.0-52fc0239
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 +8 -0
- package/README.md +24 -0
- package/dist/const.d.ts +2 -0
- package/dist/const.d.ts.map +1 -0
- package/dist/const.js +2 -0
- package/dist/extractor/blockfrost.d.ts +40 -0
- package/dist/extractor/blockfrost.d.ts.map +1 -0
- package/dist/extractor/blockfrost.js +82 -0
- package/dist/extractor/koios.d.ts +35 -0
- package/dist/extractor/koios.d.ts.map +1 -0
- package/dist/extractor/koios.js +82 -0
- package/dist/extractor/ogmios.d.ts +35 -0
- package/dist/extractor/ogmios.d.ts.map +1 -0
- package/dist/extractor/ogmios.js +82 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/interfaces/koiosTransaction.d.ts +13 -0
- package/dist/interfaces/koiosTransaction.d.ts.map +1 -0
- package/dist/interfaces/koiosTransaction.js +2 -0
- package/package.json +51 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# @rosen-bridge/cardano-observation-extractor
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## 0.1.0
|
|
6
|
+
|
|
7
|
+
- This package was **extracted** from `@rosen-bridge/observation-extractor`.
|
|
8
|
+
You can follow the previous history in the old package’s changelog. The last changelog update is available [here](https://github.com/rosen-bridge/scanner/blob/d4a5539b01c523b101104470b03ff7023a10b70b/packages/observation-extractor/CHANGELOG.md).
|
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @rosen-bridge/cardano-observation-extractor
|
|
2
|
+
|
|
3
|
+
## Table of contents
|
|
4
|
+
|
|
5
|
+
- [Introduction](#introduction)
|
|
6
|
+
- [Installation](#installation)
|
|
7
|
+
|
|
8
|
+
## Introduction
|
|
9
|
+
|
|
10
|
+
Event observation data extractor for Cardano chain.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
npm:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i @rosen-bridge/cardano-observation-extractor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
yarn:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
yarn add @rosen-bridge/cardano-observation-extractor
|
|
24
|
+
```
|
package/dist/const.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../lib/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAQ,CAAC"}
|
package/dist/const.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const CARDANO_NATIVE_TOKEN = 'ada';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENBUkRBTk9fTkFUSVZFX1RPS0VOID0gJ2FkYSc7XG4iXX0=
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
+
import { components } from '@blockfrost/openapi';
|
|
5
|
+
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
7
|
+
interface BlockFrostTransaction {
|
|
8
|
+
utxos: components['schemas']['tx_content_utxo'];
|
|
9
|
+
metadata: components['schemas']['tx_content_metadata'];
|
|
10
|
+
}
|
|
11
|
+
export declare class CardanoBlockFrostObservationExtractor extends AbstractExtractor<BlockFrostTransaction> {
|
|
12
|
+
readonly logger: AbstractLogger;
|
|
13
|
+
private readonly actions;
|
|
14
|
+
private readonly extractor;
|
|
15
|
+
static readonly FROM_CHAIN: string;
|
|
16
|
+
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
17
|
+
/**
|
|
18
|
+
* get Id for current extractor
|
|
19
|
+
*/
|
|
20
|
+
getId: () => string;
|
|
21
|
+
/**
|
|
22
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
23
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
24
|
+
* @param block
|
|
25
|
+
* @param txs
|
|
26
|
+
*/
|
|
27
|
+
processTransactions: (txs: Array<BlockFrostTransaction>, block: Block) => Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* fork one block and remove all stored information for this block
|
|
30
|
+
* @param hash: block hash
|
|
31
|
+
*/
|
|
32
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Extractor box initialization
|
|
35
|
+
* No action needed in cardano extractors
|
|
36
|
+
*/
|
|
37
|
+
initializeBoxes: () => Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=blockfrost.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockfrost.d.ts","sourceRoot":"","sources":["../../lib/extractor/blockfrost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAMrE,UAAU,qBAAqB;IAC7B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;CACxD;AAED,qBAAa,qCAAsC,SAAQ,iBAAiB,CAAC,qBAAqB,CAAC;IACjG,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAC5D,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAG7C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc;IAYzB;;OAEG;IACH,KAAK,eAAwC;IAE7C;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,qBAAqB,CAAC,EACjC,OAAO,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAyCjB;IAEF;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAEF;;;OAGG;IACH,eAAe,sBAEb;CACH"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { blake2b } from 'blakejs';
|
|
3
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { CardanoBlockFrostRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
6
|
+
import { ObservationEntityAction, } from '@rosen-bridge/abstract-observation-extractor';
|
|
7
|
+
export class CardanoBlockFrostObservationExtractor extends AbstractExtractor {
|
|
8
|
+
logger;
|
|
9
|
+
actions;
|
|
10
|
+
extractor;
|
|
11
|
+
static FROM_CHAIN = 'cardano';
|
|
12
|
+
constructor(dataSource, tokens, address, logger) {
|
|
13
|
+
super();
|
|
14
|
+
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
+
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
+
this.extractor = new CardanoBlockFrostRosenExtractor(address, tokens, this.logger);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* get Id for current extractor
|
|
20
|
+
*/
|
|
21
|
+
getId = () => 'cardano-blockfrost-extractor';
|
|
22
|
+
/**
|
|
23
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
24
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
+
* @param block
|
|
26
|
+
* @param txs
|
|
27
|
+
*/
|
|
28
|
+
processTransactions = (txs, block) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
try {
|
|
31
|
+
const observations = [];
|
|
32
|
+
txs.forEach((transaction) => {
|
|
33
|
+
const data = this.extractor.get(transaction);
|
|
34
|
+
if (data) {
|
|
35
|
+
const requestId = Buffer.from(blake2b(transaction.utxos.hash, undefined, 32)).toString('hex');
|
|
36
|
+
observations.push({
|
|
37
|
+
fromChain: CardanoBlockFrostObservationExtractor.FROM_CHAIN,
|
|
38
|
+
toChain: data.toChain,
|
|
39
|
+
amount: data.amount,
|
|
40
|
+
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
+
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
+
sourceTxId: data.sourceTxId,
|
|
43
|
+
bridgeFee: data.bridgeFee,
|
|
44
|
+
networkFee: data.networkFee,
|
|
45
|
+
sourceBlockId: block.hash,
|
|
46
|
+
requestId: requestId,
|
|
47
|
+
toAddress: data.toAddress,
|
|
48
|
+
fromAddress: data.fromAddress,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this.actions
|
|
53
|
+
.storeObservations(observations, block, this.getId())
|
|
54
|
+
.then((status) => {
|
|
55
|
+
resolve(status);
|
|
56
|
+
})
|
|
57
|
+
.catch((e) => {
|
|
58
|
+
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
+
reject(e);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
reject(e);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* fork one block and remove all stored information for this block
|
|
69
|
+
* @param hash: block hash
|
|
70
|
+
*/
|
|
71
|
+
forkBlock = async (hash) => {
|
|
72
|
+
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Extractor box initialization
|
|
76
|
+
* No action needed in cardano extractors
|
|
77
|
+
*/
|
|
78
|
+
initializeBoxes = async () => {
|
|
79
|
+
return;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tmcm9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9leHRyYWN0b3IvYmxvY2tmcm9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQ0wsdUJBQXVCLEdBRXhCLE1BQU0sOENBQThDLENBQUM7QUFPdEQsTUFBTSxPQUFPLHFDQUFzQyxTQUFRLGlCQUF3QztJQUN4RixNQUFNLENBQWlCO0lBQ2YsT0FBTyxDQUEwQjtJQUNqQyxTQUFTLENBQWtDO0lBQzVELE1BQU0sQ0FBVSxVQUFVLEdBQVcsU0FBUyxDQUFDO0lBRS9DLFlBQ0UsVUFBc0IsRUFDdEIsTUFBZ0IsRUFDaEIsT0FBZSxFQUNmLE1BQXVCO1FBRXZCLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUJBQXVCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksK0JBQStCLENBQ2xELE9BQU8sRUFDUCxNQUFNLEVBQ04sSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDO0lBRTdDOzs7OztPQUtHO0lBQ0gsbUJBQW1CLEdBQUcsQ0FDcEIsR0FBaUMsRUFDakMsS0FBWSxFQUNNLEVBQUU7UUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQWdDLEVBQUUsQ0FBQztnQkFDckQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDVCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMzQixPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUMvQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQzs0QkFDaEIsU0FBUyxFQUFFLHFDQUFxQyxDQUFDLFVBQVU7NEJBQzNELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNOzRCQUNuQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCOzRCQUMzQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCOzRCQUMzQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7NEJBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzs0QkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUMzQixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUk7NEJBQ3pCLFNBQVMsRUFBRSxTQUFTOzRCQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt5QkFDOUIsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE9BQU87cUJBQ1QsaUJBQWlCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3BELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGdEQUFnRCxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztvQkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBaUIsRUFBRTtRQUNoRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILGVBQWUsR0FBRyxLQUFLLElBQUksRUFBRTtRQUMzQixPQUFPO0lBQ1QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgYmxha2UyYiB9IGZyb20gJ2JsYWtlanMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBDYXJkYW5vQmxvY2tGcm9zdFJvc2VuRXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9yb3Nlbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgY29tcG9uZW50cyB9IGZyb20gJ0BibG9ja2Zyb3N0L29wZW5hcGknO1xuaW1wb3J0IHsgQmxvY2sgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7XG4gIE9ic2VydmF0aW9uRW50aXR5QWN0aW9uLFxuICBFeHRyYWN0ZWRPYnNlcnZhdGlvbixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuXG5pbnRlcmZhY2UgQmxvY2tGcm9zdFRyYW5zYWN0aW9uIHtcbiAgdXR4b3M6IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsndHhfY29udGVudF91dHhvJ107XG4gIG1ldGFkYXRhOiBjb21wb25lbnRzWydzY2hlbWFzJ11bJ3R4X2NvbnRlbnRfbWV0YWRhdGEnXTtcbn1cblxuZXhwb3J0IGNsYXNzIENhcmRhbm9CbG9ja0Zyb3N0T2JzZXJ2YXRpb25FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdEV4dHJhY3RvcjxCbG9ja0Zyb3N0VHJhbnNhY3Rpb24+IHtcbiAgcmVhZG9ubHkgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zOiBPYnNlcnZhdGlvbkVudGl0eUFjdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBleHRyYWN0b3I6IENhcmRhbm9CbG9ja0Zyb3N0Um9zZW5FeHRyYWN0b3I7XG4gIHN0YXRpYyByZWFkb25seSBGUk9NX0NIQUlOOiBzdHJpbmcgPSAnY2FyZGFubyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICB0b2tlbnM6IFRva2VuTWFwLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gICAgdGhpcy5hY3Rpb25zID0gbmV3IE9ic2VydmF0aW9uRW50aXR5QWN0aW9uKGRhdGFTb3VyY2UsIHRoaXMubG9nZ2VyKTtcbiAgICB0aGlzLmV4dHJhY3RvciA9IG5ldyBDYXJkYW5vQmxvY2tGcm9zdFJvc2VuRXh0cmFjdG9yKFxuICAgICAgYWRkcmVzcyxcbiAgICAgIHRva2VucyxcbiAgICAgIHRoaXMubG9nZ2VyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+ICdjYXJkYW5vLWJsb2NrZnJvc3QtZXh0cmFjdG9yJztcblxuICAvKipcbiAgICogZ2V0cyBibG9jayBpZCBhbmQgdHJhbnNhY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJsb2NrIGFuZCBzYXZlcyBpZiB0aGV5IGFyZSB2YWxpZCByb3NlblxuICAgKiAgdHJhbnNhY3Rpb25zIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MgcmV0dXJuIHRydWUgYW5kIGluIGNhc2Ugb2YgZmFpbHVyZSByZXR1cm5zIGZhbHNlXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gdHhzXG4gICAqL1xuICBwcm9jZXNzVHJhbnNhY3Rpb25zID0gKFxuICAgIHR4czogQXJyYXk8QmxvY2tGcm9zdFRyYW5zYWN0aW9uPixcbiAgICBibG9jazogQmxvY2tcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmF0aW9uczogQXJyYXk8RXh0cmFjdGVkT2JzZXJ2YXRpb24+ID0gW107XG4gICAgICAgIHR4cy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmV4dHJhY3Rvci5nZXQodHJhbnNhY3Rpb24pO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICAgYmxha2UyYih0cmFuc2FjdGlvbi51dHhvcy5oYXNoLCB1bmRlZmluZWQsIDMyKVxuICAgICAgICAgICAgKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICBvYnNlcnZhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZyb21DaGFpbjogQ2FyZGFub0Jsb2NrRnJvc3RPYnNlcnZhdGlvbkV4dHJhY3Rvci5GUk9NX0NIQUlOLFxuICAgICAgICAgICAgICB0b0NoYWluOiBkYXRhLnRvQ2hhaW4sXG4gICAgICAgICAgICAgIGFtb3VudDogZGF0YS5hbW91bnQsXG4gICAgICAgICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogZGF0YS5zb3VyY2VDaGFpblRva2VuSWQsXG4gICAgICAgICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogZGF0YS50YXJnZXRDaGFpblRva2VuSWQsXG4gICAgICAgICAgICAgIHNvdXJjZVR4SWQ6IGRhdGEuc291cmNlVHhJZCxcbiAgICAgICAgICAgICAgYnJpZGdlRmVlOiBkYXRhLmJyaWRnZUZlZSxcbiAgICAgICAgICAgICAgbmV0d29ya0ZlZTogZGF0YS5uZXR3b3JrRmVlLFxuICAgICAgICAgICAgICBzb3VyY2VCbG9ja0lkOiBibG9jay5oYXNoLFxuICAgICAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgdG9BZGRyZXNzOiBkYXRhLnRvQWRkcmVzcyxcbiAgICAgICAgICAgICAgZnJvbUFkZHJlc3M6IGRhdGEuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGlvbnNcbiAgICAgICAgICAuc3RvcmVPYnNlcnZhdGlvbnMob2JzZXJ2YXRpb25zLCBibG9jaywgdGhpcy5nZXRJZCgpKVxuICAgICAgICAgIC50aGVuKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc3RvcmUgb2JzZXJ2YXRpb25zOiAke2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmb3JrIG9uZSBibG9jayBhbmQgcmVtb3ZlIGFsbCBzdG9yZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgYmxvY2tcbiAgICogQHBhcmFtIGhhc2g6IGJsb2NrIGhhc2hcbiAgICovXG4gIGZvcmtCbG9jayA9IGFzeW5jIChoYXNoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBhd2FpdCB0aGlzLmFjdGlvbnMuZGVsZXRlQmxvY2tPYnNlcnZhdGlvbihoYXNoLCB0aGlzLmdldElkKCkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYWN0b3IgYm94IGluaXRpYWxpemF0aW9uXG4gICAqIE5vIGFjdGlvbiBuZWVkZWQgaW4gY2FyZGFubyBleHRyYWN0b3JzXG4gICAqL1xuICBpbml0aWFsaXplQm94ZXMgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
+
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
5
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
6
|
+
import { KoiosTransaction } from '../interfaces/koiosTransaction';
|
|
7
|
+
export declare class CardanoKoiosObservationExtractor extends AbstractExtractor<KoiosTransaction> {
|
|
8
|
+
readonly logger: AbstractLogger;
|
|
9
|
+
private readonly actions;
|
|
10
|
+
private readonly extractor;
|
|
11
|
+
static readonly FROM_CHAIN: string;
|
|
12
|
+
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
13
|
+
/**
|
|
14
|
+
* get Id for current extractor
|
|
15
|
+
*/
|
|
16
|
+
getId: () => string;
|
|
17
|
+
/**
|
|
18
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
19
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
20
|
+
* @param block
|
|
21
|
+
* @param txs
|
|
22
|
+
*/
|
|
23
|
+
processTransactions: (txs: Array<KoiosTransaction>, block: Block) => Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* fork one block and remove all stored information for this block
|
|
26
|
+
* @param hash: block hash
|
|
27
|
+
*/
|
|
28
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Extractor box initialization
|
|
31
|
+
* No action needed in cardano extractors
|
|
32
|
+
*/
|
|
33
|
+
initializeBoxes: () => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=koios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"koios.d.ts","sourceRoot":"","sources":["../../lib/extractor/koios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAKrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,qBAAa,gCAAiC,SAAQ,iBAAiB,CAAC,gBAAgB,CAAC;IACvF,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAG7C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc;IAYzB;;OAEG;IACH,KAAK,eAAmC;IAExC;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,gBAAgB,CAAC,EAC5B,OAAO,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAyCjB;IAEF;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAEF;;;OAGG;IACH,eAAe,sBAEb;CACH"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { blake2b } from 'blakejs';
|
|
3
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { CardanoKoiosRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
6
|
+
import { ObservationEntityAction, } from '@rosen-bridge/abstract-observation-extractor';
|
|
7
|
+
export class CardanoKoiosObservationExtractor extends AbstractExtractor {
|
|
8
|
+
logger;
|
|
9
|
+
actions;
|
|
10
|
+
extractor;
|
|
11
|
+
static FROM_CHAIN = 'cardano';
|
|
12
|
+
constructor(dataSource, tokens, address, logger) {
|
|
13
|
+
super();
|
|
14
|
+
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
+
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
+
this.extractor = new CardanoKoiosRosenExtractor(address, tokens, this.logger);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* get Id for current extractor
|
|
20
|
+
*/
|
|
21
|
+
getId = () => 'cardano-koios-extractor';
|
|
22
|
+
/**
|
|
23
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
24
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
+
* @param block
|
|
26
|
+
* @param txs
|
|
27
|
+
*/
|
|
28
|
+
processTransactions = (txs, block) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
try {
|
|
31
|
+
const observations = [];
|
|
32
|
+
txs.forEach((transaction) => {
|
|
33
|
+
const data = this.extractor.get(transaction);
|
|
34
|
+
if (data) {
|
|
35
|
+
const requestId = Buffer.from(blake2b(transaction.tx_hash, undefined, 32)).toString('hex');
|
|
36
|
+
observations.push({
|
|
37
|
+
fromChain: CardanoKoiosObservationExtractor.FROM_CHAIN,
|
|
38
|
+
toChain: data.toChain,
|
|
39
|
+
amount: data.amount,
|
|
40
|
+
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
+
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
+
sourceTxId: data.sourceTxId,
|
|
43
|
+
bridgeFee: data.bridgeFee,
|
|
44
|
+
networkFee: data.networkFee,
|
|
45
|
+
sourceBlockId: block.hash,
|
|
46
|
+
requestId: requestId,
|
|
47
|
+
toAddress: data.toAddress,
|
|
48
|
+
fromAddress: data.fromAddress,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
this.actions
|
|
53
|
+
.storeObservations(observations, block, this.getId())
|
|
54
|
+
.then((status) => {
|
|
55
|
+
resolve(status);
|
|
56
|
+
})
|
|
57
|
+
.catch((e) => {
|
|
58
|
+
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
+
reject(e);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
reject(e);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* fork one block and remove all stored information for this block
|
|
69
|
+
* @param hash: block hash
|
|
70
|
+
*/
|
|
71
|
+
forkBlock = async (hash) => {
|
|
72
|
+
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Extractor box initialization
|
|
76
|
+
* No action needed in cardano extractors
|
|
77
|
+
*/
|
|
78
|
+
initializeBoxes = async () => {
|
|
79
|
+
return;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29pb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZXh0cmFjdG9yL2tvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFFTCx1QkFBdUIsR0FDeEIsTUFBTSw4Q0FBOEMsQ0FBQztBQUd0RCxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsaUJBQW1DO0lBQzlFLE1BQU0sQ0FBaUI7SUFDZixPQUFPLENBQTBCO0lBQ2pDLFNBQVMsQ0FBNkI7SUFDdkQsTUFBTSxDQUFVLFVBQVUsR0FBVyxTQUFTLENBQUM7SUFFL0MsWUFDRSxVQUFzQixFQUN0QixNQUFnQixFQUNoQixPQUFlLEVBQ2YsTUFBdUI7UUFFdkIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSwwQkFBMEIsQ0FDN0MsT0FBTyxFQUNQLE1BQU0sRUFDTixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7SUFFeEM7Ozs7O09BS0c7SUFDSCxtQkFBbUIsR0FBRyxDQUNwQixHQUE0QixFQUM1QixLQUFZLEVBQ00sRUFBRTtRQUNwQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQztnQkFDSCxNQUFNLFlBQVksR0FBZ0MsRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDNUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFNBQVMsRUFBRSxnQ0FBZ0MsQ0FBQyxVQUFVOzRCQUN0RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTs0QkFDbkIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjs0QkFDM0Msa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjs0QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDM0IsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJOzRCQUN6QixTQUFTLEVBQUUsU0FBUzs0QkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7eUJBQzlCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxPQUFPO3FCQUNULGlCQUFpQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNwRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDZixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixnREFBZ0QsQ0FBQyxFQUFFLENBQ3BELENBQUM7b0JBQ0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNaLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsU0FBUyxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQWlCLEVBQUU7UUFDaEQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxlQUFlLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDM0IsT0FBTztJQUNULENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGJsYWtlMmIgfSBmcm9tICdibGFrZWpzJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Jvc2VuLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBCbG9jayB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFic3RyYWN0RXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1leHRyYWN0b3InO1xuaW1wb3J0IHtcbiAgRXh0cmFjdGVkT2JzZXJ2YXRpb24sXG4gIE9ic2VydmF0aW9uRW50aXR5QWN0aW9uLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LW9ic2VydmF0aW9uLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBLb2lvc1RyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rb2lvc1RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIENhcmRhbm9Lb2lvc09ic2VydmF0aW9uRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RFeHRyYWN0b3I8S29pb3NUcmFuc2FjdGlvbj4ge1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbnM6IE9ic2VydmF0aW9uRW50aXR5QWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4dHJhY3RvcjogQ2FyZGFub0tvaW9zUm9zZW5FeHRyYWN0b3I7XG4gIHN0YXRpYyByZWFkb25seSBGUk9NX0NIQUlOOiBzdHJpbmcgPSAnY2FyZGFubyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICB0b2tlbnM6IFRva2VuTWFwLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyID8gbG9nZ2VyIDogbmV3IER1bW15TG9nZ2VyKCk7XG4gICAgdGhpcy5hY3Rpb25zID0gbmV3IE9ic2VydmF0aW9uRW50aXR5QWN0aW9uKGRhdGFTb3VyY2UsIHRoaXMubG9nZ2VyKTtcbiAgICB0aGlzLmV4dHJhY3RvciA9IG5ldyBDYXJkYW5vS29pb3NSb3NlbkV4dHJhY3RvcihcbiAgICAgIGFkZHJlc3MsXG4gICAgICB0b2tlbnMsXG4gICAgICB0aGlzLmxvZ2dlclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IElkIGZvciBjdXJyZW50IGV4dHJhY3RvclxuICAgKi9cbiAgZ2V0SWQgPSAoKSA9PiAnY2FyZGFuby1rb2lvcy1leHRyYWN0b3InO1xuXG4gIC8qKlxuICAgKiBnZXRzIGJsb2NrIGlkIGFuZCB0cmFuc2FjdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2sgYW5kIHNhdmVzIGlmIHRoZXkgYXJlIHZhbGlkIHJvc2VuXG4gICAqICB0cmFuc2FjdGlvbnMgYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyByZXR1cm4gdHJ1ZSBhbmQgaW4gY2FzZSBvZiBmYWlsdXJlIHJldHVybnMgZmFsc2VcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSB0eHNcbiAgICovXG4gIHByb2Nlc3NUcmFuc2FjdGlvbnMgPSAoXG4gICAgdHhzOiBBcnJheTxLb2lvc1RyYW5zYWN0aW9uPixcbiAgICBibG9jazogQmxvY2tcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmF0aW9uczogQXJyYXk8RXh0cmFjdGVkT2JzZXJ2YXRpb24+ID0gW107XG4gICAgICAgIHR4cy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmV4dHJhY3Rvci5nZXQodHJhbnNhY3Rpb24pO1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SWQgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgICAgICAgYmxha2UyYih0cmFuc2FjdGlvbi50eF9oYXNoLCB1bmRlZmluZWQsIDMyKVxuICAgICAgICAgICAgKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICBvYnNlcnZhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGZyb21DaGFpbjogQ2FyZGFub0tvaW9zT2JzZXJ2YXRpb25FeHRyYWN0b3IuRlJPTV9DSEFJTixcbiAgICAgICAgICAgICAgdG9DaGFpbjogZGF0YS50b0NoYWluLFxuICAgICAgICAgICAgICBhbW91bnQ6IGRhdGEuYW1vdW50LFxuICAgICAgICAgICAgICBzb3VyY2VDaGFpblRva2VuSWQ6IGRhdGEuc291cmNlQ2hhaW5Ub2tlbklkLFxuICAgICAgICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGRhdGEudGFyZ2V0Q2hhaW5Ub2tlbklkLFxuICAgICAgICAgICAgICBzb3VyY2VUeElkOiBkYXRhLnNvdXJjZVR4SWQsXG4gICAgICAgICAgICAgIGJyaWRnZUZlZTogZGF0YS5icmlkZ2VGZWUsXG4gICAgICAgICAgICAgIG5ldHdvcmtGZWU6IGRhdGEubmV0d29ya0ZlZSxcbiAgICAgICAgICAgICAgc291cmNlQmxvY2tJZDogYmxvY2suaGFzaCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIHRvQWRkcmVzczogZGF0YS50b0FkZHJlc3MsXG4gICAgICAgICAgICAgIGZyb21BZGRyZXNzOiBkYXRhLmZyb21BZGRyZXNzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25zXG4gICAgICAgICAgLnN0b3JlT2JzZXJ2YXRpb25zKG9ic2VydmF0aW9ucywgYmxvY2ssIHRoaXMuZ2V0SWQoKSlcbiAgICAgICAgICAudGhlbigoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHN0YXR1cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIG9ic2VydmF0aW9uczogJHtlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogZm9yayBvbmUgYmxvY2sgYW5kIHJlbW92ZSBhbGwgc3RvcmVkIGluZm9ybWF0aW9uIGZvciB0aGlzIGJsb2NrXG4gICAqIEBwYXJhbSBoYXNoOiBibG9jayBoYXNoXG4gICAqL1xuICBmb3JrQmxvY2sgPSBhc3luYyAoaGFzaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgdGhpcy5hY3Rpb25zLmRlbGV0ZUJsb2NrT2JzZXJ2YXRpb24oaGFzaCwgdGhpcy5nZXRJZCgpKTtcbiAgfTtcblxuICAvKipcbiAgICogRXh0cmFjdG9yIGJveCBpbml0aWFsaXphdGlvblxuICAgKiBObyBhY3Rpb24gbmVlZGVkIGluIGNhcmRhbm8gZXh0cmFjdG9yc1xuICAgKi9cbiAgaW5pdGlhbGl6ZUJveGVzID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybjtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { Transaction } from '@cardano-ogmios/schema';
|
|
3
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
|
+
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
7
|
+
export declare class CardanoOgmiosObservationExtractor extends AbstractExtractor<Transaction> {
|
|
8
|
+
readonly logger: AbstractLogger;
|
|
9
|
+
private readonly actions;
|
|
10
|
+
private readonly extractor;
|
|
11
|
+
static readonly FROM_CHAIN: string;
|
|
12
|
+
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
13
|
+
/**
|
|
14
|
+
* get Id for current extractor
|
|
15
|
+
*/
|
|
16
|
+
getId: () => string;
|
|
17
|
+
/**
|
|
18
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
19
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
20
|
+
* @param block
|
|
21
|
+
* @param txs
|
|
22
|
+
*/
|
|
23
|
+
processTransactions: (txs: Array<Transaction>, block: Block) => Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* fork one block and remove all stored information for this block
|
|
26
|
+
* @param hash: block hash
|
|
27
|
+
*/
|
|
28
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Extractor box initialization
|
|
31
|
+
* No action needed in cardano extractors
|
|
32
|
+
*/
|
|
33
|
+
initializeBoxes: () => Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ogmios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ogmios.d.ts","sourceRoot":"","sources":["../../lib/extractor/ogmios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAMrE,qBAAa,iCAAkC,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IACxD,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAG7C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,cAAc;IAYzB;;OAEG;IACH,KAAK,eAAoC;IAEzC;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,WAAW,CAAC,EACvB,OAAO,KAAK,KACX,OAAO,CAAC,OAAO,CAAC,CAyCjB;IAEF;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE7C;IAEF;;;OAGG;IACH,eAAe,sBAEb;CACH"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
3
|
+
import { blake2b } from 'blakejs';
|
|
4
|
+
import { CardanoOgmiosRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
+
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
6
|
+
import { ObservationEntityAction, } from '@rosen-bridge/abstract-observation-extractor';
|
|
7
|
+
export class CardanoOgmiosObservationExtractor extends AbstractExtractor {
|
|
8
|
+
logger;
|
|
9
|
+
actions;
|
|
10
|
+
extractor;
|
|
11
|
+
static FROM_CHAIN = 'cardano';
|
|
12
|
+
constructor(dataSource, tokens, address, logger) {
|
|
13
|
+
super();
|
|
14
|
+
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
+
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
+
this.extractor = new CardanoOgmiosRosenExtractor(address, tokens, this.logger);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* get Id for current extractor
|
|
20
|
+
*/
|
|
21
|
+
getId = () => 'cardano-ogmios-extractor';
|
|
22
|
+
/**
|
|
23
|
+
* gets block id and transactions corresponding to the block and saves if they are valid rosen
|
|
24
|
+
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
+
* @param block
|
|
26
|
+
* @param txs
|
|
27
|
+
*/
|
|
28
|
+
processTransactions = (txs, block) => {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
try {
|
|
31
|
+
const observations = [];
|
|
32
|
+
for (const transaction of txs) {
|
|
33
|
+
const data = this.extractor.get(transaction);
|
|
34
|
+
if (data) {
|
|
35
|
+
const requestId = Buffer.from(blake2b(transaction.id, undefined, 32)).toString('hex');
|
|
36
|
+
observations.push({
|
|
37
|
+
fromChain: CardanoOgmiosObservationExtractor.FROM_CHAIN,
|
|
38
|
+
toChain: data.toChain,
|
|
39
|
+
amount: data.amount,
|
|
40
|
+
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
+
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
+
sourceTxId: data.sourceTxId,
|
|
43
|
+
bridgeFee: data.bridgeFee,
|
|
44
|
+
networkFee: data.networkFee,
|
|
45
|
+
sourceBlockId: block.hash,
|
|
46
|
+
requestId: requestId,
|
|
47
|
+
toAddress: data.toAddress,
|
|
48
|
+
fromAddress: data.fromAddress,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.actions
|
|
53
|
+
.storeObservations(observations, block, this.getId())
|
|
54
|
+
.then((status) => {
|
|
55
|
+
resolve(status);
|
|
56
|
+
})
|
|
57
|
+
.catch((e) => {
|
|
58
|
+
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
+
reject(e);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
reject(e);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* fork one block and remove all stored information for this block
|
|
69
|
+
* @param hash: block hash
|
|
70
|
+
*/
|
|
71
|
+
forkBlock = async (hash) => {
|
|
72
|
+
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Extractor box initialization
|
|
76
|
+
* No action needed in cardano extractors
|
|
77
|
+
*/
|
|
78
|
+
initializeBoxes = async () => {
|
|
79
|
+
return;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2dtaW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4dHJhY3Rvci9vZ21pb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUk1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUVMLHVCQUF1QixHQUN4QixNQUFNLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sT0FBTyxpQ0FBa0MsU0FBUSxpQkFBOEI7SUFDMUUsTUFBTSxDQUFpQjtJQUNmLE9BQU8sQ0FBMEI7SUFDakMsU0FBUyxDQUE4QjtJQUN4RCxNQUFNLENBQVUsVUFBVSxHQUFXLFNBQVMsQ0FBQztJQUUvQyxZQUNFLFVBQXNCLEVBQ3RCLE1BQWdCLEVBQ2hCLE9BQWUsRUFDZixNQUF1QjtRQUV2QixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLDJCQUEyQixDQUM5QyxPQUFPLEVBQ1AsTUFBTSxFQUNOLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNILG1CQUFtQixHQUFHLENBQ3BCLEdBQXVCLEVBQ3ZCLEtBQVksRUFDTSxFQUFFO1FBQ3BCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDO2dCQUNILE1BQU0sWUFBWSxHQUFnQyxFQUFFLENBQUM7Z0JBQ3JELEtBQUssTUFBTSxXQUFXLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUNULE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzNCLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDdkMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUM7NEJBQ2hCLFNBQVMsRUFBRSxpQ0FBaUMsQ0FBQyxVQUFVOzRCQUN2RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTs0QkFDbkIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjs0QkFDM0Msa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjs0QkFDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVOzRCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDM0IsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJOzRCQUN6QixTQUFTLEVBQUUsU0FBUzs0QkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUN6QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7eUJBQzlCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU87cUJBQ1QsaUJBQWlCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ3BELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGdEQUFnRCxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztvQkFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBaUIsRUFBRTtRQUNoRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILGVBQWUsR0FBRyxLQUFLLElBQUksRUFBRTtRQUMzQixPQUFPO0lBQ1QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdAY2FyZGFuby1vZ21pb3Mvc2NoZW1hJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgVG9rZW5NYXAgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Rva2Vucyc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgYmxha2UyYiB9IGZyb20gJ2JsYWtlanMnO1xuaW1wb3J0IHsgQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9yb3Nlbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgQmxvY2sgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7XG4gIEV4dHJhY3RlZE9ic2VydmF0aW9uLFxuICBPYnNlcnZhdGlvbkVudGl0eUFjdGlvbixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuXG5leHBvcnQgY2xhc3MgQ2FyZGFub09nbWlvc09ic2VydmF0aW9uRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb24+IHtcbiAgcmVhZG9ubHkgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb25zOiBPYnNlcnZhdGlvbkVudGl0eUFjdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBleHRyYWN0b3I6IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvcjtcbiAgc3RhdGljIHJlYWRvbmx5IEZST01fQ0hBSU46IHN0cmluZyA9ICdjYXJkYW5vJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHRva2VuczogVG9rZW5NYXAsXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXIgPyBsb2dnZXIgOiBuZXcgRHVtbXlMb2dnZXIoKTtcbiAgICB0aGlzLmFjdGlvbnMgPSBuZXcgT2JzZXJ2YXRpb25FbnRpdHlBY3Rpb24oZGF0YVNvdXJjZSwgdGhpcy5sb2dnZXIpO1xuICAgIHRoaXMuZXh0cmFjdG9yID0gbmV3IENhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3RvcihcbiAgICAgIGFkZHJlc3MsXG4gICAgICB0b2tlbnMsXG4gICAgICB0aGlzLmxvZ2dlclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IElkIGZvciBjdXJyZW50IGV4dHJhY3RvclxuICAgKi9cbiAgZ2V0SWQgPSAoKSA9PiAnY2FyZGFuby1vZ21pb3MtZXh0cmFjdG9yJztcblxuICAvKipcbiAgICogZ2V0cyBibG9jayBpZCBhbmQgdHJhbnNhY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJsb2NrIGFuZCBzYXZlcyBpZiB0aGV5IGFyZSB2YWxpZCByb3NlblxuICAgKiAgdHJhbnNhY3Rpb25zIGFuZCBpbiBjYXNlIG9mIHN1Y2Nlc3MgcmV0dXJuIHRydWUgYW5kIGluIGNhc2Ugb2YgZmFpbHVyZSByZXR1cm5zIGZhbHNlXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gdHhzXG4gICAqL1xuICBwcm9jZXNzVHJhbnNhY3Rpb25zID0gKFxuICAgIHR4czogQXJyYXk8VHJhbnNhY3Rpb24+LFxuICAgIGJsb2NrOiBCbG9ja1xuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YXRpb25zOiBBcnJheTxFeHRyYWN0ZWRPYnNlcnZhdGlvbj4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0cmFuc2FjdGlvbiBvZiB0eHMpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5leHRyYWN0b3IuZ2V0KHRyYW5zYWN0aW9uKTtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdElkID0gQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgIGJsYWtlMmIodHJhbnNhY3Rpb24uaWQsIHVuZGVmaW5lZCwgMzIpXG4gICAgICAgICAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgICAgICAgIG9ic2VydmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgZnJvbUNoYWluOiBDYXJkYW5vT2dtaW9zT2JzZXJ2YXRpb25FeHRyYWN0b3IuRlJPTV9DSEFJTixcbiAgICAgICAgICAgICAgdG9DaGFpbjogZGF0YS50b0NoYWluLFxuICAgICAgICAgICAgICBhbW91bnQ6IGRhdGEuYW1vdW50LFxuICAgICAgICAgICAgICBzb3VyY2VDaGFpblRva2VuSWQ6IGRhdGEuc291cmNlQ2hhaW5Ub2tlbklkLFxuICAgICAgICAgICAgICB0YXJnZXRDaGFpblRva2VuSWQ6IGRhdGEudGFyZ2V0Q2hhaW5Ub2tlbklkLFxuICAgICAgICAgICAgICBzb3VyY2VUeElkOiBkYXRhLnNvdXJjZVR4SWQsXG4gICAgICAgICAgICAgIGJyaWRnZUZlZTogZGF0YS5icmlkZ2VGZWUsXG4gICAgICAgICAgICAgIG5ldHdvcmtGZWU6IGRhdGEubmV0d29ya0ZlZSxcbiAgICAgICAgICAgICAgc291cmNlQmxvY2tJZDogYmxvY2suaGFzaCxcbiAgICAgICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICAgICAgICAgIHRvQWRkcmVzczogZGF0YS50b0FkZHJlc3MsXG4gICAgICAgICAgICAgIGZyb21BZGRyZXNzOiBkYXRhLmZyb21BZGRyZXNzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9uc1xuICAgICAgICAgIC5zdG9yZU9ic2VydmF0aW9ucyhvYnNlcnZhdGlvbnMsIGJsb2NrLCB0aGlzLmdldElkKCkpXG4gICAgICAgICAgLnRoZW4oKHN0YXR1cykgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShzdGF0dXMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzdG9yZSBvYnNlcnZhdGlvbnM6ICR7ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZvcmsgb25lIGJsb2NrIGFuZCByZW1vdmUgYWxsIHN0b3JlZCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBibG9ja1xuICAgKiBAcGFyYW0gaGFzaDogYmxvY2sgaGFzaFxuICAgKi9cbiAgZm9ya0Jsb2NrID0gYXN5bmMgKGhhc2g6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5kZWxldGVCbG9ja09ic2VydmF0aW9uKGhhc2gsIHRoaXMuZ2V0SWQoKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RvciBib3ggaW5pdGlhbGl6YXRpb25cbiAgICogTm8gYWN0aW9uIG5lZWRlZCBpbiBjYXJkYW5vIGV4dHJhY3RvcnNcbiAgICovXG4gIGluaXRpYWxpemVCb3hlcyA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm47XG4gIH07XG59XG4iXX0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './extractor/blockfrost';
|
|
2
|
+
export * from './extractor/koios';
|
|
3
|
+
export * from './extractor/ogmios';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2V4dHJhY3Rvci9ibG9ja2Zyb3N0JztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdG9yL2tvaW9zJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdG9yL29nbWlvcyc7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TransactionJSON } from '@emurgo/cardano-serialization-lib-nodejs';
|
|
2
|
+
interface KoiosCborTx {
|
|
3
|
+
tx_hash: string;
|
|
4
|
+
block_hash: string;
|
|
5
|
+
block_height: number;
|
|
6
|
+
epoch_no: number;
|
|
7
|
+
absolute_slot: number;
|
|
8
|
+
tx_timestamp: number;
|
|
9
|
+
cbor: string;
|
|
10
|
+
}
|
|
11
|
+
type KoiosTransaction = KoiosCborTx & TransactionJSON;
|
|
12
|
+
export { KoiosTransaction };
|
|
13
|
+
//# sourceMappingURL=koiosTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"koiosTransaction.d.ts","sourceRoot":"","sources":["../../lib/interfaces/koiosTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29pb3NUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbnRlcmZhY2VzL2tvaW9zVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uSlNPTiB9IGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuXG5pbnRlcmZhY2UgS29pb3NDYm9yVHgge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIGJsb2NrX2hhc2g6IHN0cmluZztcbiAgYmxvY2tfaGVpZ2h0OiBudW1iZXI7XG4gIGVwb2NoX25vOiBudW1iZXI7XG4gIGFic29sdXRlX3Nsb3Q6IG51bWJlcjtcbiAgdHhfdGltZXN0YW1wOiBudW1iZXI7XG4gIGNib3I6IHN0cmluZztcbn1cblxudHlwZSBLb2lvc1RyYW5zYWN0aW9uID0gS29pb3NDYm9yVHggJiBUcmFuc2FjdGlvbkpTT047XG5cbmV4cG9ydCB7IEtvaW9zVHJhbnNhY3Rpb24gfTtcbiJdfQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rosen-bridge/cardano-observation-extractor",
|
|
3
|
+
"version": "0.1.0-52fc0239",
|
|
4
|
+
"description": "Event observation data extractor for Cardano chain",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/rosen-bridge/scanner.git"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": "Rosen Team",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"main": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"CHANGELOG.md"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc --build tsconfig.build.json",
|
|
20
|
+
"coverage": "npm run test -- --coverage",
|
|
21
|
+
"lint": "eslint --fix . && npm run prettify",
|
|
22
|
+
"prettify": "prettier --write . --ignore-path ./.gitignore",
|
|
23
|
+
"release": "npm run test -- --run && npm run build && npm publish --access public",
|
|
24
|
+
"test": "NODE_OPTIONS='--import tsx' vitest",
|
|
25
|
+
"type-check": "tsc --noEmit"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^22.18.0",
|
|
29
|
+
"@vitest/coverage-istanbul": "^3.1.4",
|
|
30
|
+
"@rosen-bridge/abstract-scanner": "^0.1.0-52fc0239",
|
|
31
|
+
"tsx": "^4.19.4",
|
|
32
|
+
"typescript": "^5.3.3",
|
|
33
|
+
"vitest": "^3.1.4"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@blockfrost/openapi": "0.1.78",
|
|
37
|
+
"@cardano-ogmios/schema": "^6.6.1",
|
|
38
|
+
"@emurgo/cardano-serialization-lib-nodejs": "^13.2.1",
|
|
39
|
+
"@rosen-bridge/abstract-observation-extractor": "^0.1.0-52fc0239",
|
|
40
|
+
"@rosen-bridge/abstract-extractor": "^2.0.3-52fc0239",
|
|
41
|
+
"@rosen-bridge/abstract-logger": "^2.0.1",
|
|
42
|
+
"@rosen-bridge/rosen-extractor": "^8.0.1",
|
|
43
|
+
"@rosen-bridge/scanner-interfaces": "^0.1.1-52fc0239",
|
|
44
|
+
"@rosen-bridge/tokens": "^3.1.1",
|
|
45
|
+
"blakejs": "^1.2.1",
|
|
46
|
+
"@rosen-bridge/extended-typeorm": "^0.2.1"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=22.18.0"
|
|
50
|
+
}
|
|
51
|
+
}
|