@sentio/sdk 2.41.3-rc.3 → 2.41.3-rc.4

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.
@@ -0,0 +1,17 @@
1
+ import { Plugin } from '@sentio/runtime';
2
+ import { Data_BTCTransaction, DataBinding, HandlerType, ProcessConfigResponse, ProcessResult, StartRequest } from '@sentio/protos';
3
+ interface Handlers {
4
+ txHandlers: ((trace: Data_BTCTransaction) => Promise<ProcessResult>)[];
5
+ }
6
+ export declare class BTCPlugin extends Plugin {
7
+ name: string;
8
+ handlers: Handlers;
9
+ configure(config: ProcessConfigResponse): Promise<void>;
10
+ supportedHandlers: HandlerType[];
11
+ processBinding(request: DataBinding): Promise<ProcessResult>;
12
+ start(request: StartRequest): Promise<void>;
13
+ stateDiff(config: ProcessConfigResponse): boolean;
14
+ processTransaction(binding: DataBinding): Promise<ProcessResult>;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=btc-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-plugin.d.ts","sourceRoot":"","sources":["../../src/btc/btc-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,MAAM,EAAiC,MAAM,iBAAiB,CAAA;AACxH,OAAO,EAEL,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,gBAAgB,CAAA;AAMvB,UAAU,QAAQ;IAChB,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAA;CACvE;AAED,qBAAa,SAAU,SAAQ,MAAM;IACnC,IAAI,EAAE,MAAM,CAAc;IAC1B,QAAQ,EAAE,QAAQ,CAEjB;IAEK,SAAS,CAAC,MAAM,EAAE,qBAAqB;IAqC7C,iBAAiB,gBAAgC;IAEjD,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAStD,KAAK,CAAC,OAAO,EAAE,YAAY;IAEjC,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IAI3C,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAuBvE"}
@@ -0,0 +1,75 @@
1
+ import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime';
2
+ import { ContractConfig, HandlerType } from '@sentio/protos';
3
+ import { ServerError, Status } from 'nice-grpc';
4
+ import { TemplateInstanceState } from '../core/template.js';
5
+ import { BTCProcessorState } from './btc-processor.js';
6
+ export class BTCPlugin extends Plugin {
7
+ name = 'BTCPlugin';
8
+ handlers = {
9
+ txHandlers: []
10
+ };
11
+ async configure(config) {
12
+ const handlers = {
13
+ txHandlers: []
14
+ };
15
+ for (const processor of BTCProcessorState.INSTANCE.getValues()) {
16
+ const contractConfig = ContractConfig.fromPartial({
17
+ processorType: USER_PROCESSOR,
18
+ contract: {
19
+ name: processor.config.name,
20
+ chainId: processor.config.chainId.toString(),
21
+ address: processor.config.address || '*',
22
+ abi: ''
23
+ },
24
+ startBlock: processor.config.startBlock,
25
+ endBlock: processor.config.endBlock
26
+ });
27
+ for (const callHandler of processor.callHandlers) {
28
+ const handlerId = handlers.txHandlers.push(callHandler.handler) - 1;
29
+ contractConfig.btcTransactionConfigs.push({
30
+ filters: [
31
+ {
32
+ address: contractConfig.contract?.address || '*'
33
+ }
34
+ ],
35
+ handlerId
36
+ });
37
+ }
38
+ // Finish up a contract
39
+ config.contractConfigs.push(contractConfig);
40
+ }
41
+ this.handlers = handlers;
42
+ }
43
+ supportedHandlers = [HandlerType.BTC_TRANSACTION];
44
+ processBinding(request) {
45
+ switch (request.handlerType) {
46
+ case HandlerType.BTC_TRANSACTION:
47
+ return this.processTransaction(request);
48
+ default:
49
+ throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType);
50
+ }
51
+ }
52
+ async start(request) { }
53
+ stateDiff(config) {
54
+ return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length;
55
+ }
56
+ async processTransaction(binding) {
57
+ if (!binding.data?.btcTransaction) {
58
+ throw new ServerError(Status.INVALID_ARGUMENT, "BTCEvents can't be null");
59
+ }
60
+ const promises = [];
61
+ const result = binding.data?.btcTransaction;
62
+ for (const handlerId of binding.handlerIds) {
63
+ const promise = this.handlers.txHandlers[handlerId](binding.data?.btcTransaction).catch((e) => {
64
+ throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(result) + '\n' + errorString(e));
65
+ });
66
+ if (GLOBAL_CONFIG.execution.sequential) {
67
+ await promise;
68
+ }
69
+ promises.push(promise);
70
+ }
71
+ return mergeProcessResults(await Promise.all(promises));
72
+ }
73
+ }
74
+ PluginManager.INSTANCE.register(new BTCPlugin());
75
+ //# sourceMappingURL=btc-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-plugin.js","sourceRoot":"","sources":["../../src/btc/btc-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACxH,OAAO,EACL,cAAc,EAGd,WAAW,EAIZ,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAMtD,MAAM,OAAO,SAAU,SAAQ,MAAM;IACnC,IAAI,GAAW,WAAW,CAAA;IAC1B,QAAQ,GAAa;QACnB,UAAU,EAAE,EAAE;KACf,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,MAA6B;QAC3C,MAAM,QAAQ,GAAa;YACzB,UAAU,EAAE,EAAE;SACf,CAAA;QAED,KAAK,MAAM,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC/D,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC;gBAChD,aAAa,EAAE,cAAc;gBAC7B,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI;oBAC3B,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;oBAC5C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG;oBACxC,GAAG,EAAE,EAAE;iBACR;gBACD,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;gBACvC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ;aACpC,CAAC,CAAA;YACF,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAEnE,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC;oBACxC,OAAO,EAAE;wBACP;4BACE,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,IAAI,GAAG;yBACjD;qBACF;oBACD,SAAS;iBACV,CAAC,CAAA;YACJ,CAAC;YAED,uBAAuB;YACvB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED,iBAAiB,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;IAEjD,cAAc,CAAC,OAAoB;QACjC,QAAQ,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,eAAe;gBAC9B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;YACzC;gBACE,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QACtG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAqB,IAAG,CAAC;IAErC,SAAS,CAAC,MAA6B;QACrC,OAAO,qBAAqB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAA;IAC9F,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAoB;QAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;YAClC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAA;QAC3E,CAAC;QAED,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,cAAc,CAAA;QAE3C,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5F,MAAM,IAAI,WAAW,CACnB,MAAM,CAAC,QAAQ,EACf,gCAAgC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAClF,CAAA;YACH,CAAC,CAAC,CAAA;YACF,IAAI,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAA;YACf,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,mBAAmB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,CAAC;CACF;AAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { ListStateStorage } from '@sentio/runtime';
2
+ import { BTCContext, Transaction } from './types.js';
3
+ import { Data_BTCTransaction, ProcessResult } from '@sentio/protos';
4
+ export declare class BTCProcessorState extends ListStateStorage<BTCProcessor> {
5
+ static INSTANCE: BTCProcessorState;
6
+ }
7
+ export declare class BTCProcessor {
8
+ readonly config: BTCProcessorConfig;
9
+ callHandlers: CallHandler<Data_BTCTransaction>[];
10
+ constructor(config: BTCProcessorConfig);
11
+ static bind(config: BTCProcessorConfig): BTCProcessor;
12
+ onTransaction(handler: (transaction: Transaction, ctx: BTCContext) => void | Promise<void>): this;
13
+ }
14
+ interface BTCProcessorConfig {
15
+ chainId: string;
16
+ name?: string;
17
+ address: string;
18
+ startBlock?: bigint;
19
+ endBlock?: bigint;
20
+ }
21
+ export type CallHandler<T> = {
22
+ handler: (call: T) => Promise<ProcessResult>;
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=btc-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-processor.d.ts","sourceRoot":"","sources":["../../src/btc/btc-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnE,qBAAa,iBAAkB,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IACnE,MAAM,CAAC,QAAQ,oBAA0B;CAC1C;AAED,qBAAa,YAAY;IAGX,QAAQ,CAAC,MAAM,EAAE,kBAAkB;IAF/C,YAAY,EAAE,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAK;gBAEhC,MAAM,EAAE,kBAAkB;IAE/C,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY;IAM9C,aAAa,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBlG;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;CAC7C,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { ListStateStorage } from '@sentio/runtime';
2
+ import { BTCContext } from './types.js';
3
+ export class BTCProcessorState extends ListStateStorage {
4
+ static INSTANCE = new BTCProcessorState();
5
+ }
6
+ export class BTCProcessor {
7
+ config;
8
+ callHandlers = [];
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ static bind(config) {
13
+ const processor = new BTCProcessor(config);
14
+ BTCProcessorState.INSTANCE.addValue(processor);
15
+ return processor;
16
+ }
17
+ onTransaction(handler) {
18
+ const callHandler = {
19
+ handler: async (call) => {
20
+ const tx = call.transaction;
21
+ const ctx = new BTCContext(this.config.chainId, this.config.name ?? this.config.address ?? '', tx, this.config.address);
22
+ await handler(tx, ctx);
23
+ return ctx.stopAndGetResult();
24
+ }
25
+ };
26
+ this.callHandlers.push(callHandler);
27
+ return this;
28
+ }
29
+ }
30
+ //# sourceMappingURL=btc-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-processor.js","sourceRoot":"","sources":["../../src/btc/btc-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAe,MAAM,YAAY,CAAA;AAGpD,MAAM,OAAO,iBAAkB,SAAQ,gBAA8B;IACnE,MAAM,CAAC,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAA;;AAG3C,MAAM,OAAO,YAAY;IAGF;IAFrB,YAAY,GAAuC,EAAE,CAAA;IAErD,YAAqB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;IAEnD,MAAM,CAAC,IAAI,CAAC,MAA0B;QACpC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QAC1C,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QAC9C,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,aAAa,CAAC,OAA4E;QAC/F,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,KAAK,EAAE,IAAyB,EAAE,EAAE;gBAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,WAA0B,CAAA;gBAE1C,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EACnB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAC7C,EAAE,EACF,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAA;gBACD,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACtB,OAAO,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC/B,CAAC;SACF,CAAA;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export { BTCPlugin } from './btc-plugin.js';
2
+ export * from './types.js';
3
+ export * from './btc-processor.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { BTCPlugin } from './btc-plugin.js';
2
+ export * from './types.js';
3
+ export * from './btc-processor.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/btc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,71 @@
1
+ import { BaseContext, Labels } from '../core/index.js';
2
+ import { RecordMetaData } from '@sentio/protos';
3
+ import { ChainId } from '@sentio/chain';
4
+ type Vin = {
5
+ txid: string;
6
+ vout: number;
7
+ is_coinbase: boolean;
8
+ scriptsig: string;
9
+ scriptsig_asm: string;
10
+ inner_redeemscript_asm?: string;
11
+ inner_witnessscript_asm?: string;
12
+ sequence: number;
13
+ witness: string[];
14
+ prevout: Vout;
15
+ is_pegin?: boolean;
16
+ issuance?: {
17
+ asset_id: string;
18
+ is_reissuance: boolean;
19
+ asset_blinding_nonce: string;
20
+ asset_entropy: string;
21
+ contract_hash: string;
22
+ assetamount?: number;
23
+ assetamountcommitment?: string;
24
+ tokenamount?: number;
25
+ tokenamountcommitment?: string;
26
+ };
27
+ };
28
+ type Vout = {
29
+ scriptpubkey: string;
30
+ scriptpubkey_asm: string;
31
+ scriptpubkey_type: string;
32
+ scriptpubkey_address: string;
33
+ value: number;
34
+ valuecommitment?: string;
35
+ asset?: string;
36
+ assetcommitment?: string;
37
+ pegout?: {
38
+ genesis_hash: string;
39
+ scriptpubkey: string;
40
+ scriptpubkey_asm: string;
41
+ scriptpubkey_address: string;
42
+ };
43
+ };
44
+ type Status = {
45
+ confirmed: boolean;
46
+ block_height?: number;
47
+ block_hash?: string;
48
+ block_time?: number;
49
+ };
50
+ export type Transaction = {
51
+ txid: string;
52
+ version: number;
53
+ locktime: number;
54
+ size: number;
55
+ weight: number;
56
+ fee: number;
57
+ vin: Vin[];
58
+ vout: Vout[];
59
+ status: Status;
60
+ };
61
+ export declare class BTCContext extends BaseContext {
62
+ readonly chainId: string;
63
+ readonly name: string;
64
+ readonly tx: Transaction;
65
+ readonly address: string;
66
+ constructor(chainId: string, name: string, tx: Transaction, address: string);
67
+ protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData;
68
+ getChainId(): ChainId;
69
+ }
70
+ export {};
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/btc/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,KAAK,GAAG,GAAG;IACT,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAA;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,IAAI,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE;QACT,QAAQ,EAAE,MAAM,CAAA;QAChB,aAAa,EAAE,OAAO,CAAA;QACtB,oBAAoB,EAAE,MAAM,CAAA;QAC5B,aAAa,EAAE,MAAM,CAAA;QACrB,aAAa,EAAE,MAAM,CAAA;QACrB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAC/B,CAAA;CACF,CAAA;AAED,KAAK,IAAI,GAAG;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE;QACP,YAAY,EAAE,MAAM,CAAA;QACpB,YAAY,EAAE,MAAM,CAAA;QACpB,gBAAgB,EAAE,MAAM,CAAA;QACxB,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACF,CAAA;AAED,KAAK,MAAM,GAAG;IACZ,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,GAAG,EAAE,CAAA;IACV,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,qBAAa,UAAW,SAAQ,WAAW;IAEvC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,WAAW;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAHf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM;IAK1B,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAc3E,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,31 @@
1
+ import { BaseContext, normalizeLabels } from '../core/index.js';
2
+ export class BTCContext extends BaseContext {
3
+ chainId;
4
+ name;
5
+ tx;
6
+ address;
7
+ constructor(chainId, name, tx, address) {
8
+ super({});
9
+ this.chainId = chainId;
10
+ this.name = name;
11
+ this.tx = tx;
12
+ this.address = address;
13
+ }
14
+ getMetaDataInternal(name, labels) {
15
+ return {
16
+ address: this.address,
17
+ contractName: this.name,
18
+ blockNumber: BigInt(this.tx.status?.block_time ?? 0),
19
+ transactionIndex: 0,
20
+ transactionHash: this.tx.txid,
21
+ chainId: this.getChainId(),
22
+ name: name,
23
+ logIndex: 0,
24
+ labels: normalizeLabels(labels)
25
+ };
26
+ }
27
+ getChainId() {
28
+ return this.chainId;
29
+ }
30
+ }
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/btc/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAU,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAiEvE,MAAM,OAAO,UAAW,SAAQ,WAAW;IAE9B;IACA;IACA;IACA;IAJX,YACW,OAAe,EACf,IAAY,EACZ,EAAe,EACf,OAAe;QAExB,KAAK,CAAC,EAAE,CAAC,CAAA;QALA,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAQ;QACZ,OAAE,GAAF,EAAE,CAAa;QACf,YAAO,GAAP,OAAO,CAAQ;IAG1B,CAAC;IAES,mBAAmB,CAAC,IAAY,EAAE,MAAc;QACxD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,IAAI;YACvB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;YACpD,gBAAgB,EAAE,CAAC;YACnB,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI;YAC7B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;SAChC,CAAA;IACH,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAkB,CAAA;IAChC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { TestProcessorServer } from './test-processor-server.js';
2
+ import { BTCChainId } from '@sentio/chain';
3
+ import '../btc/btc-plugin.js';
4
+ export declare class BTCFacet {
5
+ server: TestProcessorServer;
6
+ constructor(server: TestProcessorServer);
7
+ testOnTransactions(events: any, network?: BTCChainId): Promise<import("@sentio/protos").ProcessBindingResponse>;
8
+ private buildBinding;
9
+ }
10
+ //# sourceMappingURL=btc-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-facet.d.ts","sourceRoot":"","sources":["../../src/testing/btc-facet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,sBAAsB,CAAA;AAE7B,qBAAa,QAAQ;IACnB,MAAM,EAAE,mBAAmB,CAAA;gBAEf,MAAM,EAAE,mBAAmB;IAIvC,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,UAAmC;IAW5E,OAAO,CAAC,YAAY;CAqBrB"}
@@ -0,0 +1,38 @@
1
+ import { HandlerType } from '@sentio/protos';
2
+ import { BTCChainId } from '@sentio/chain';
3
+ import '../btc/btc-plugin.js';
4
+ export class BTCFacet {
5
+ server;
6
+ constructor(server) {
7
+ this.server = server;
8
+ }
9
+ testOnTransactions(events, network = BTCChainId.BTC_TESTNET) {
10
+ const bindings = this.buildBinding(events, network);
11
+ if (!bindings) {
12
+ throw Error('Invalid test : ' + JSON.stringify(events));
13
+ }
14
+ return this.server.processBindings({
15
+ bindings
16
+ });
17
+ }
18
+ buildBinding(data, network) {
19
+ const res = [];
20
+ for (const config of this.server.contractConfigs) {
21
+ if (config.contract?.chainId !== network) {
22
+ continue;
23
+ }
24
+ for (const txConfig of config.btcTransactionConfigs) {
25
+ const binding = {
26
+ data: {
27
+ btcTransaction: data
28
+ },
29
+ handlerIds: [txConfig.handlerId],
30
+ handlerType: HandlerType.BTC_TRANSACTION
31
+ };
32
+ res.push(binding);
33
+ }
34
+ }
35
+ return res;
36
+ }
37
+ }
38
+ //# sourceMappingURL=btc-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"btc-facet.js","sourceRoot":"","sources":["../../src/testing/btc-facet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,sBAAsB,CAAA;AAE7B,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAqB;IAE3B,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,kBAAkB,CAAC,MAAW,EAAE,UAAsB,UAAU,CAAC,WAAW;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAEO,YAAY,CAAC,IAAS,EAAE,OAAmB;QACjD,MAAM,GAAG,GAAkB,EAAE,CAAA;QAE7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YACjD,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBACzC,SAAQ;YACV,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE;wBACJ,cAAc,EAAE,IAAI;qBACrB;oBACD,UAAU,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAChC,WAAW,EAAE,WAAW,CAAC,eAAe;iBAC1B,CAAA;gBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
@@ -8,6 +8,7 @@ import { SuiFacet } from './sui-facet.js';
8
8
  import { FuelFacet } from './fuel-facet.js';
9
9
  import { CosmosFacet } from './cosmos-facet.js';
10
10
  import { StarknetFacet } from './starknet-facet.js';
11
+ import { BTCFacet } from './btc-facet.js';
11
12
  export declare const TEST_CONTEXT: CallContext;
12
13
  export declare function cleanTest(): void;
13
14
  export declare class TestProcessorServer implements ProcessorServiceImplementation {
@@ -21,6 +22,7 @@ export declare class TestProcessorServer implements ProcessorServiceImplementati
21
22
  fuel: FuelFacet;
22
23
  cosmos: CosmosFacet;
23
24
  starknet: StarknetFacet;
25
+ btc: BTCFacet;
24
26
  constructor(loader: () => Promise<any>, httpEndpoints?: Record<string, string>);
25
27
  start(request?: StartRequest, context?: CallContext): Promise<Empty>;
26
28
  stop(request: Empty, context?: CallContext): Promise<Empty>;
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAa,oBAAoB,EAAS,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAExB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAE/B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,aAAa,CAAA;gBAEX,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAkB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAQtG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAIlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAIlE,wBAAwB,CACtB,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAChD,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;CAOtE"}
1
+ {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAa,oBAAoB,EAAS,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAExB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAE/B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,aAAa,CAAA;IACvB,GAAG,EAAE,QAAQ,CAAA;gBAED,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAmB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAQtG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAIlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAIlE,wBAAwB,CACtB,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAChD,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;CAOtE"}
@@ -7,6 +7,7 @@ import { SuiFacet } from './sui-facet.js';
7
7
  import { FuelFacet } from './fuel-facet.js';
8
8
  import { CosmosFacet } from './cosmos-facet.js';
9
9
  import { StarknetFacet } from './starknet-facet.js';
10
+ import { BTCFacet } from './btc-facet.js';
10
11
  export const TEST_CONTEXT = {};
11
12
  export function cleanTest() {
12
13
  State.reset();
@@ -22,6 +23,7 @@ export class TestProcessorServer {
22
23
  fuel;
23
24
  cosmos;
24
25
  starknet;
26
+ btc;
25
27
  constructor(loader, httpEndpoints = {}) {
26
28
  cleanTest();
27
29
  this.service = new ProcessorServiceImpl(loader);
@@ -32,6 +34,7 @@ export class TestProcessorServer {
32
34
  this.fuel = new FuelFacet(this);
33
35
  this.cosmos = new CosmosFacet(this);
34
36
  this.starknet = new StarknetFacet(this);
37
+ this.btc = new BTCFacet(this);
35
38
  for (const k in CHAIN_MAP) {
36
39
  const http = httpEndpoints[k] || '';
37
40
  Endpoints.INSTANCE.chainServer.set(k, http);
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.41.3-rc.3",
3
+ "version": "2.41.3-rc.4",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -39,7 +39,8 @@
39
39
  "./fuel": "./lib/fuel/index.js",
40
40
  "./fuel/codegen": "./lib/fuel/codegen/index.js",
41
41
  "./store": "./lib/store/index.js",
42
- "./store/codegen": "./lib/store/codegen.js"
42
+ "./store/codegen": "./lib/store/codegen.js",
43
+ "./btc": "./lib/btc/index.js"
43
44
  },
44
45
  "files": [
45
46
  "{lib,src}",
@@ -54,7 +55,7 @@
54
55
  "@project-serum/anchor": "^0.26.0",
55
56
  "@sentio/abi-wan-kanabi": "2.2.2-1",
56
57
  "@sentio/bigdecimal": "9.1.1-patch.3",
57
- "@sentio/chain": "^2.1.0",
58
+ "@sentio/chain": "^2.1.6",
58
59
  "@sentio/ethers-v6": "^1.0.29",
59
60
  "@solana/web3.js": "1.91.8",
60
61
  "@typemove/aptos": "~1.6.3",
@@ -83,8 +84,8 @@
83
84
  "typechain": "^8.3.2",
84
85
  "utility-types": "^3.11.0",
85
86
  "yaml": "^2.3.4",
86
- "@sentio/protos": "2.41.3-rc.3",
87
- "@sentio/runtime": "^2.41.3-rc.3"
87
+ "@sentio/runtime": "^2.41.3-rc.4",
88
+ "@sentio/protos": "2.41.3-rc.4"
88
89
  },
89
90
  "peerDependencies": {
90
91
  "tsup": "npm:@sentio/tsup@^6.7.2"
@@ -0,0 +1,105 @@
1
+ import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'
2
+ import {
3
+ ContractConfig,
4
+ Data_BTCTransaction,
5
+ DataBinding,
6
+ HandlerType,
7
+ ProcessConfigResponse,
8
+ ProcessResult,
9
+ StartRequest
10
+ } from '@sentio/protos'
11
+
12
+ import { ServerError, Status } from 'nice-grpc'
13
+ import { TemplateInstanceState } from '../core/template.js'
14
+ import { BTCProcessorState } from './btc-processor.js'
15
+
16
+ interface Handlers {
17
+ txHandlers: ((trace: Data_BTCTransaction) => Promise<ProcessResult>)[]
18
+ }
19
+
20
+ export class BTCPlugin extends Plugin {
21
+ name: string = 'BTCPlugin'
22
+ handlers: Handlers = {
23
+ txHandlers: []
24
+ }
25
+
26
+ async configure(config: ProcessConfigResponse) {
27
+ const handlers: Handlers = {
28
+ txHandlers: []
29
+ }
30
+
31
+ for (const processor of BTCProcessorState.INSTANCE.getValues()) {
32
+ const contractConfig = ContractConfig.fromPartial({
33
+ processorType: USER_PROCESSOR,
34
+ contract: {
35
+ name: processor.config.name,
36
+ chainId: processor.config.chainId.toString(),
37
+ address: processor.config.address || '*',
38
+ abi: ''
39
+ },
40
+ startBlock: processor.config.startBlock,
41
+ endBlock: processor.config.endBlock
42
+ })
43
+ for (const callHandler of processor.callHandlers) {
44
+ const handlerId = handlers.txHandlers.push(callHandler.handler) - 1
45
+
46
+ contractConfig.btcTransactionConfigs.push({
47
+ filters: [
48
+ {
49
+ address: contractConfig.contract?.address || '*'
50
+ }
51
+ ],
52
+ handlerId
53
+ })
54
+ }
55
+
56
+ // Finish up a contract
57
+ config.contractConfigs.push(contractConfig)
58
+ }
59
+
60
+ this.handlers = handlers
61
+ }
62
+
63
+ supportedHandlers = [HandlerType.BTC_TRANSACTION]
64
+
65
+ processBinding(request: DataBinding): Promise<ProcessResult> {
66
+ switch (request.handlerType) {
67
+ case HandlerType.BTC_TRANSACTION:
68
+ return this.processTransaction(request)
69
+ default:
70
+ throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)
71
+ }
72
+ }
73
+
74
+ async start(request: StartRequest) {}
75
+
76
+ stateDiff(config: ProcessConfigResponse): boolean {
77
+ return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length
78
+ }
79
+
80
+ async processTransaction(binding: DataBinding): Promise<ProcessResult> {
81
+ if (!binding.data?.btcTransaction) {
82
+ throw new ServerError(Status.INVALID_ARGUMENT, "BTCEvents can't be null")
83
+ }
84
+
85
+ const promises: Promise<ProcessResult>[] = []
86
+
87
+ const result = binding.data?.btcTransaction
88
+
89
+ for (const handlerId of binding.handlerIds) {
90
+ const promise = this.handlers.txHandlers[handlerId](binding.data?.btcTransaction).catch((e) => {
91
+ throw new ServerError(
92
+ Status.INTERNAL,
93
+ 'error processing transaction: ' + JSON.stringify(result) + '\n' + errorString(e)
94
+ )
95
+ })
96
+ if (GLOBAL_CONFIG.execution.sequential) {
97
+ await promise
98
+ }
99
+ promises.push(promise)
100
+ }
101
+ return mergeProcessResults(await Promise.all(promises))
102
+ }
103
+ }
104
+
105
+ PluginManager.INSTANCE.register(new BTCPlugin())
@@ -0,0 +1,50 @@
1
+ import { ListStateStorage } from '@sentio/runtime'
2
+ import { BTCContext, Transaction } from './types.js'
3
+ import { Data_BTCTransaction, ProcessResult } from '@sentio/protos'
4
+
5
+ export class BTCProcessorState extends ListStateStorage<BTCProcessor> {
6
+ static INSTANCE = new BTCProcessorState()
7
+ }
8
+
9
+ export class BTCProcessor {
10
+ callHandlers: CallHandler<Data_BTCTransaction>[] = []
11
+
12
+ constructor(readonly config: BTCProcessorConfig) {}
13
+
14
+ static bind(config: BTCProcessorConfig): BTCProcessor {
15
+ const processor = new BTCProcessor(config)
16
+ BTCProcessorState.INSTANCE.addValue(processor)
17
+ return processor
18
+ }
19
+
20
+ public onTransaction(handler: (transaction: Transaction, ctx: BTCContext) => void | Promise<void>) {
21
+ const callHandler = {
22
+ handler: async (call: Data_BTCTransaction) => {
23
+ const tx = call.transaction as Transaction
24
+
25
+ const ctx = new BTCContext(
26
+ this.config.chainId,
27
+ this.config.name ?? this.config.address ?? '',
28
+ tx,
29
+ this.config.address
30
+ )
31
+ await handler(tx, ctx)
32
+ return ctx.stopAndGetResult()
33
+ }
34
+ }
35
+ this.callHandlers.push(callHandler)
36
+ return this
37
+ }
38
+ }
39
+
40
+ interface BTCProcessorConfig {
41
+ chainId: string
42
+ name?: string
43
+ address: string
44
+ startBlock?: bigint
45
+ endBlock?: bigint
46
+ }
47
+
48
+ export type CallHandler<T> = {
49
+ handler: (call: T) => Promise<ProcessResult>
50
+ }
@@ -0,0 +1,3 @@
1
+ export { BTCPlugin } from './btc-plugin.js'
2
+ export * from './types.js'
3
+ export * from './btc-processor.js'
@@ -0,0 +1,93 @@
1
+ import { BaseContext, Labels, normalizeLabels } from '../core/index.js'
2
+ import { RecordMetaData } from '@sentio/protos'
3
+ import { ChainId } from '@sentio/chain'
4
+
5
+ type Vin = {
6
+ txid: string
7
+ vout: number
8
+ is_coinbase: boolean
9
+ scriptsig: string
10
+ scriptsig_asm: string
11
+ inner_redeemscript_asm?: string
12
+ inner_witnessscript_asm?: string
13
+ sequence: number
14
+ witness: string[]
15
+ prevout: Vout
16
+ is_pegin?: boolean
17
+ issuance?: {
18
+ asset_id: string
19
+ is_reissuance: boolean
20
+ asset_blinding_nonce: string
21
+ asset_entropy: string
22
+ contract_hash: string
23
+ assetamount?: number
24
+ assetamountcommitment?: string
25
+ tokenamount?: number
26
+ tokenamountcommitment?: string
27
+ }
28
+ }
29
+
30
+ type Vout = {
31
+ scriptpubkey: string
32
+ scriptpubkey_asm: string
33
+ scriptpubkey_type: string
34
+ scriptpubkey_address: string
35
+ value: number
36
+ valuecommitment?: string
37
+ asset?: string
38
+ assetcommitment?: string
39
+ pegout?: {
40
+ genesis_hash: string
41
+ scriptpubkey: string
42
+ scriptpubkey_asm: string
43
+ scriptpubkey_address: string
44
+ }
45
+ }
46
+
47
+ type Status = {
48
+ confirmed: boolean
49
+ block_height?: number
50
+ block_hash?: string
51
+ block_time?: number
52
+ }
53
+
54
+ export type Transaction = {
55
+ txid: string
56
+ version: number
57
+ locktime: number
58
+ size: number
59
+ weight: number
60
+ fee: number
61
+ vin: Vin[]
62
+ vout: Vout[]
63
+ status: Status
64
+ }
65
+
66
+ export class BTCContext extends BaseContext {
67
+ constructor(
68
+ readonly chainId: string,
69
+ readonly name: string,
70
+ readonly tx: Transaction,
71
+ readonly address: string
72
+ ) {
73
+ super({})
74
+ }
75
+
76
+ protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
77
+ return {
78
+ address: this.address,
79
+ contractName: this.name,
80
+ blockNumber: BigInt(this.tx.status?.block_time ?? 0),
81
+ transactionIndex: 0,
82
+ transactionHash: this.tx.txid,
83
+ chainId: this.getChainId(),
84
+ name: name,
85
+ logIndex: 0,
86
+ labels: normalizeLabels(labels)
87
+ }
88
+ }
89
+
90
+ getChainId(): ChainId {
91
+ return this.chainId as ChainId
92
+ }
93
+ }
@@ -0,0 +1,45 @@
1
+ import { TestProcessorServer } from './test-processor-server.js'
2
+ import { DataBinding, HandlerType } from '@sentio/protos'
3
+ import { BTCChainId } from '@sentio/chain'
4
+ import '../btc/btc-plugin.js'
5
+
6
+ export class BTCFacet {
7
+ server: TestProcessorServer
8
+
9
+ constructor(server: TestProcessorServer) {
10
+ this.server = server
11
+ }
12
+
13
+ testOnTransactions(events: any, network: BTCChainId = BTCChainId.BTC_TESTNET) {
14
+ const bindings = this.buildBinding(events, network)
15
+ if (!bindings) {
16
+ throw Error('Invalid test : ' + JSON.stringify(events))
17
+ }
18
+
19
+ return this.server.processBindings({
20
+ bindings
21
+ })
22
+ }
23
+
24
+ private buildBinding(data: any, network: BTCChainId): DataBinding[] {
25
+ const res: DataBinding[] = []
26
+
27
+ for (const config of this.server.contractConfigs) {
28
+ if (config.contract?.chainId !== network) {
29
+ continue
30
+ }
31
+
32
+ for (const txConfig of config.btcTransactionConfigs) {
33
+ const binding = {
34
+ data: {
35
+ btcTransaction: data
36
+ },
37
+ handlerIds: [txConfig.handlerId],
38
+ handlerType: HandlerType.BTC_TRANSACTION
39
+ } as DataBinding
40
+ res.push(binding)
41
+ }
42
+ }
43
+ return res
44
+ }
45
+ }
@@ -27,6 +27,7 @@ import { SuiFacet } from './sui-facet.js'
27
27
  import { FuelFacet } from './fuel-facet.js'
28
28
  import { CosmosFacet } from './cosmos-facet.js'
29
29
  import { StarknetFacet } from './starknet-facet.js'
30
+ import { BTCFacet } from './btc-facet.js'
30
31
 
31
32
  export const TEST_CONTEXT: CallContext = <CallContext>{}
32
33
 
@@ -46,6 +47,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
46
47
  fuel: FuelFacet
47
48
  cosmos: CosmosFacet
48
49
  starknet: StarknetFacet
50
+ btc: BTCFacet
49
51
 
50
52
  constructor(loader: () => Promise<any>, httpEndpoints: Record<string, string> = {}) {
51
53
  cleanTest()
@@ -58,6 +60,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
58
60
  this.fuel = new FuelFacet(this)
59
61
  this.cosmos = new CosmosFacet(this)
60
62
  this.starknet = new StarknetFacet(this)
63
+ this.btc = new BTCFacet(this)
61
64
 
62
65
  for (const k in CHAIN_MAP) {
63
66
  const http = httpEndpoints[k] || ''