@sentio/sdk 2.39.0-rc.1 → 2.39.0-rc.2

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.
Files changed (50) hide show
  1. package/lib/cosmos/context.d.ts +15 -0
  2. package/lib/cosmos/context.d.ts.map +1 -0
  3. package/lib/cosmos/context.js +33 -0
  4. package/lib/cosmos/context.js.map +1 -0
  5. package/lib/cosmos/cosmos-plugin.d.ts +17 -0
  6. package/lib/cosmos/cosmos-plugin.d.ts.map +1 -0
  7. package/lib/cosmos/cosmos-plugin.js +71 -0
  8. package/lib/cosmos/cosmos-plugin.js.map +1 -0
  9. package/lib/cosmos/cosmos-processor.d.ts +12 -0
  10. package/lib/cosmos/cosmos-processor.d.ts.map +1 -0
  11. package/lib/cosmos/cosmos-processor.js +36 -0
  12. package/lib/cosmos/cosmos-processor.js.map +1 -0
  13. package/lib/cosmos/index.d.ts +5 -0
  14. package/lib/cosmos/index.d.ts.map +1 -0
  15. package/lib/cosmos/index.js +5 -0
  16. package/lib/cosmos/index.js.map +1 -0
  17. package/lib/cosmos/network.d.ts +8 -0
  18. package/lib/cosmos/network.d.ts.map +1 -0
  19. package/lib/cosmos/network.js +14 -0
  20. package/lib/cosmos/network.js.map +1 -0
  21. package/lib/cosmos/transaction.d.ts +48 -0
  22. package/lib/cosmos/transaction.d.ts.map +1 -0
  23. package/lib/cosmos/transaction.js +2 -0
  24. package/lib/cosmos/transaction.js.map +1 -0
  25. package/lib/cosmos/types.d.ts +21 -0
  26. package/lib/cosmos/types.d.ts.map +1 -0
  27. package/lib/cosmos/types.js +5 -0
  28. package/lib/cosmos/types.js.map +1 -0
  29. package/lib/fuel/network.d.ts.map +1 -1
  30. package/lib/fuel/network.js +0 -1
  31. package/lib/fuel/network.js.map +1 -1
  32. package/lib/testing/cosmos-facet.d.ts +9 -0
  33. package/lib/testing/cosmos-facet.d.ts.map +1 -0
  34. package/lib/testing/cosmos-facet.js +46 -0
  35. package/lib/testing/cosmos-facet.js.map +1 -0
  36. package/lib/testing/test-processor-server.d.ts +2 -0
  37. package/lib/testing/test-processor-server.d.ts.map +1 -1
  38. package/lib/testing/test-processor-server.js +3 -0
  39. package/lib/testing/test-processor-server.js.map +1 -1
  40. package/package.json +5 -4
  41. package/src/cosmos/context.ts +38 -0
  42. package/src/cosmos/cosmos-plugin.ts +100 -0
  43. package/src/cosmos/cosmos-processor.ts +43 -0
  44. package/src/cosmos/index.ts +4 -0
  45. package/src/cosmos/network.ts +16 -0
  46. package/src/cosmos/transaction.ts +46 -0
  47. package/src/cosmos/types.ts +23 -0
  48. package/src/fuel/network.ts +0 -2
  49. package/src/testing/cosmos-facet.ts +54 -0
  50. package/src/testing/test-processor-server.ts +3 -0
@@ -0,0 +1,15 @@
1
+ import { BaseContext, Labels } from '../core/index.js';
2
+ import { ChainId, CosmosChainId } from '@sentio/chain';
3
+ import { RecordMetaData } from '@sentio/protos';
4
+ import { CosmosTransaction } from './transaction.js';
5
+ export declare class CosmosContext extends BaseContext {
6
+ readonly chainId: CosmosChainId;
7
+ readonly contractAddress: string;
8
+ readonly transaction: CosmosTransaction;
9
+ private logIndex;
10
+ constructor(chainId: CosmosChainId, contractAddress: string, transaction: CosmosTransaction);
11
+ getChainId(): ChainId;
12
+ setLogIndex(logIndex: number): void;
13
+ protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData;
14
+ }
15
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/cosmos/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAmB,MAAM,kBAAkB,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD,qBAAa,aAAc,SAAQ,WAAW;IAI1C,QAAQ,CAAC,OAAO,EAAE,aAAa;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM;IAChC,QAAQ,CAAC,WAAW,EAAE,iBAAiB;IALzC,OAAO,CAAC,QAAQ,CAAa;gBAGlB,OAAO,EAAE,aAAa,EACtB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,iBAAiB;IAKzC,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;CAa5E"}
@@ -0,0 +1,33 @@
1
+ import { BaseContext, normalizeLabels } from '../core/index.js';
2
+ export class CosmosContext extends BaseContext {
3
+ chainId;
4
+ contractAddress;
5
+ transaction;
6
+ logIndex = -1;
7
+ constructor(chainId, contractAddress, transaction) {
8
+ super({});
9
+ this.chainId = chainId;
10
+ this.contractAddress = contractAddress;
11
+ this.transaction = transaction;
12
+ }
13
+ getChainId() {
14
+ return this.chainId;
15
+ }
16
+ setLogIndex(logIndex) {
17
+ this.logIndex = logIndex;
18
+ }
19
+ getMetaDataInternal(name, labels) {
20
+ return {
21
+ address: this.contractAddress,
22
+ contractName: labels['name'] || '',
23
+ blockNumber: BigInt(this.transaction?.height || 0),
24
+ transactionIndex: 0,
25
+ transactionHash: this.transaction?.txhash || '',
26
+ chainId: this.getChainId(),
27
+ name: name,
28
+ logIndex: this.logIndex,
29
+ labels: normalizeLabels(labels)
30
+ };
31
+ }
32
+ }
33
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cosmos/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAU,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKvE,MAAM,OAAO,aAAc,SAAQ,WAAW;IAIjC;IACA;IACA;IALH,QAAQ,GAAW,CAAC,CAAC,CAAA;IAE7B,YACW,OAAsB,EACtB,eAAuB,EACvB,WAA8B;QAEvC,KAAK,CAAC,EAAE,CAAC,CAAA;QAJA,YAAO,GAAP,OAAO,CAAe;QACtB,oBAAe,GAAf,eAAe,CAAQ;QACvB,gBAAW,GAAX,WAAW,CAAmB;IAGzC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAES,mBAAmB,CAAC,IAAY,EAAE,MAAc;QACxD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,eAAe;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAClC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC;YAClD,gBAAgB,EAAE,CAAC;YACnB,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,EAAE;YAC/C,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;SAChC,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { Plugin } from '@sentio/runtime';
2
+ import { Data_CosmosCall, DataBinding, HandlerType, ProcessConfigResponse, ProcessResult, StartRequest } from '@sentio/protos';
3
+ interface Handlers {
4
+ callHandlers: ((trace: Data_CosmosCall) => Promise<ProcessResult>)[];
5
+ }
6
+ export declare class CosmosPlugin 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=cosmos-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-plugin.d.ts","sourceRoot":"","sources":["../../src/cosmos/cosmos-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,MAAM,EAAiC,MAAM,iBAAiB,CAAA;AACxH,OAAO,EAEL,eAAe,EACf,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,gBAAgB,CAAA;AAKvB,UAAU,QAAQ;IAChB,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,CAAA;CACrE;AAED,qBAAa,YAAa,SAAQ,MAAM;IACtC,IAAI,EAAE,MAAM,CAAiB;IAC7B,QAAQ,EAAE,QAAQ,CAEjB;IAEK,SAAS,CAAC,MAAM,EAAE,qBAAqB;IAkC7C,iBAAiB,gBAA4B;IAE7C,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;CAsBvE"}
@@ -0,0 +1,71 @@
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 { CosmosProcessorState } from './types.js';
6
+ export class CosmosPlugin extends Plugin {
7
+ name = 'CosmosPlugin';
8
+ handlers = {
9
+ callHandlers: []
10
+ };
11
+ async configure(config) {
12
+ const handlers = {
13
+ callHandlers: []
14
+ };
15
+ for (const processor of CosmosProcessorState.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.callHandlers.push(callHandler.handler) - 1;
29
+ contractConfig.cosmosLogConfigs.push({
30
+ handlerId,
31
+ logFilters: callHandler.logConfig?.logFilters || []
32
+ });
33
+ }
34
+ // Finish up a contract
35
+ config.contractConfigs.push(contractConfig);
36
+ }
37
+ this.handlers = handlers;
38
+ }
39
+ supportedHandlers = [HandlerType.COSMOS_CALL];
40
+ processBinding(request) {
41
+ switch (request.handlerType) {
42
+ case HandlerType.COSMOS_CALL:
43
+ return this.processTransaction(request);
44
+ default:
45
+ throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType);
46
+ }
47
+ }
48
+ async start(request) { }
49
+ stateDiff(config) {
50
+ return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length;
51
+ }
52
+ async processTransaction(binding) {
53
+ if (!binding.data?.cosmosCall?.transaction) {
54
+ throw new ServerError(Status.INVALID_ARGUMENT, "transaction can't be null");
55
+ }
56
+ const call = binding.data.cosmosCall;
57
+ const promises = [];
58
+ for (const handlerId of binding.handlerIds) {
59
+ const promise = this.handlers.callHandlers[handlerId](call).catch((e) => {
60
+ throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(call.transaction) + '\n' + errorString(e));
61
+ });
62
+ if (GLOBAL_CONFIG.execution.sequential) {
63
+ await promise;
64
+ }
65
+ promises.push(promise);
66
+ }
67
+ return mergeProcessResults(await Promise.all(promises));
68
+ }
69
+ }
70
+ PluginManager.INSTANCE.register(new CosmosPlugin());
71
+ //# sourceMappingURL=cosmos-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-plugin.js","sourceRoot":"","sources":["../../src/cosmos/cosmos-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;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAMjD,MAAM,OAAO,YAAa,SAAQ,MAAM;IACtC,IAAI,GAAW,cAAc,CAAA;IAC7B,QAAQ,GAAa;QACnB,YAAY,EAAE,EAAE;KACjB,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,MAA6B;QAC3C,MAAM,QAAQ,GAAa;YACzB,YAAY,EAAE,EAAE;SACjB,CAAA;QAED,KAAK,MAAM,SAAS,IAAI,oBAAoB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAClE,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;YAEF,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAErE,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACnC,SAAS;oBACT,UAAU,EAAE,WAAW,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE;iBACpD,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,WAAW,CAAC,CAAA;IAE7C,cAAc,CAAC,OAAoB;QACjC,QAAQ,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,WAAW;gBAC1B,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,UAAU,EAAE,WAAW,EAAE,CAAC;YAC3C,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAA;QAC7E,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAA;QAEpC,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAE7C,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtE,MAAM,IAAI,WAAW,CACnB,MAAM,CAAC,QAAQ,EACf,gCAAgC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAC5F,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,YAAY,EAAE,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { CallHandler, CosmosProcessorConfig } from './types.js';
2
+ import { Data_CosmosCall } from '@sentio/protos';
3
+ import { CosmosContext } from './context.js';
4
+ import { CosmosEvent, CosmosTxLog } from './transaction.js';
5
+ export declare class CosmosProcessor {
6
+ readonly config: CosmosProcessorConfig;
7
+ callHandlers: CallHandler<Data_CosmosCall>[];
8
+ constructor(config: CosmosProcessorConfig);
9
+ static bind(config: CosmosProcessorConfig): CosmosProcessor;
10
+ onLogEvent(logFilters: string[] | string, handler: (log: CosmosTxLog, event: CosmosEvent, context: CosmosContext) => void | Promise<void>): this;
11
+ }
12
+ //# sourceMappingURL=cosmos-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-processor.d.ts","sourceRoot":"","sources":["../../src/cosmos/cosmos-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAwB,MAAM,YAAY,CAAA;AACrF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9E,qBAAa,eAAe;IAGd,QAAQ,CAAC,MAAM,EAAE,qBAAqB;IAFlD,YAAY,EAAE,WAAW,CAAC,eAAe,CAAC,EAAE,CAAK;gBAE5B,MAAM,EAAE,qBAAqB;IAElD,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe;IAMpD,UAAU,CACf,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAwBlG"}
@@ -0,0 +1,36 @@
1
+ import { CosmosProcessorState } from './types.js';
2
+ import { CosmosContext } from './context.js';
3
+ export class CosmosProcessor {
4
+ config;
5
+ callHandlers = [];
6
+ constructor(config) {
7
+ this.config = config;
8
+ }
9
+ static bind(config) {
10
+ const processor = new CosmosProcessor(config);
11
+ CosmosProcessorState.INSTANCE.addValue(processor);
12
+ return processor;
13
+ }
14
+ onLogEvent(logFilters, handler) {
15
+ const filter = Array.isArray(logFilters) ? logFilters : [logFilters];
16
+ const callHandler = {
17
+ handler: async (call) => {
18
+ const transaction = call.transaction;
19
+ const ctx = new CosmosContext(this.config.chainId, this.config.address, transaction);
20
+ for (const log of transaction.logs) {
21
+ const event = log.events.filter((e) => filter.includes(e.type));
22
+ for (const e of event) {
23
+ await handler(log, e, ctx);
24
+ }
25
+ }
26
+ return ctx.stopAndGetResult();
27
+ },
28
+ logConfig: {
29
+ logFilters: filter
30
+ }
31
+ };
32
+ this.callHandlers.push(callHandler);
33
+ return this;
34
+ }
35
+ }
36
+ //# sourceMappingURL=cosmos-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-processor.js","sourceRoot":"","sources":["../../src/cosmos/cosmos-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsC,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG5C,MAAM,OAAO,eAAe;IAGL;IAFrB,YAAY,GAAmC,EAAE,CAAA;IAEjD,YAAqB,MAA6B;QAA7B,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAEtD,MAAM,CAAC,IAAI,CAAC,MAA6B;QACvC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;QAC7C,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACjD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,UAAU,CACf,UAA6B,EAC7B,OAA+F;QAE/F,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QACpE,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,KAAK,EAAE,IAAqB,EAAE,EAAE;gBACvC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAgC,CAAA;gBAEzD,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;gBAEpF,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC/D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;wBACtB,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;oBAC5B,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC/B,CAAC;YACD,SAAS,EAAE;gBACT,UAAU,EAAE,MAAM;aACnB;SACF,CAAA;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { CosmosPlugin } from './cosmos-plugin.js';
2
+ export * from './cosmos-processor.js';
3
+ export * from './types.js';
4
+ export * from './transaction.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cosmos/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,cAAc,uBAAuB,CAAA;AACrC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { CosmosPlugin } from './cosmos-plugin.js';
2
+ export * from './cosmos-processor.js';
3
+ export * from './types.js';
4
+ export * from './transaction.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cosmos/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,cAAc,uBAAuB,CAAA;AACrC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { CosmosChainId } from '@sentio/chain';
2
+ export type CosmosNetwork = CosmosChainId;
3
+ export declare const CosmosNetwork: {
4
+ readonly INJECTIVE_MAINNET: CosmosChainId.INJECTIVE_MAINNET;
5
+ readonly INJECTIVE_TESTNET: CosmosChainId.INJECTIVE_TESTNET;
6
+ };
7
+ export declare function getRpcEndpoint(network: CosmosNetwork): string;
8
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/cosmos/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,aAAa,GAAG,aAAa,CAAA;AACzC,eAAO,MAAM,aAAa;;;CAGzB,CAAA;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAO7D"}
@@ -0,0 +1,14 @@
1
+ import { CosmosChainId } from '@sentio/chain';
2
+ export const CosmosNetwork = {
3
+ INJECTIVE_MAINNET: CosmosChainId.INJECTIVE_MAINNET,
4
+ INJECTIVE_TESTNET: CosmosChainId.INJECTIVE_TESTNET
5
+ };
6
+ export function getRpcEndpoint(network) {
7
+ switch (network) {
8
+ case CosmosNetwork.INJECTIVE_MAINNET:
9
+ return 'https://sentry.lcd.injective.network:443';
10
+ case CosmosNetwork.INJECTIVE_TESTNET:
11
+ return 'https://testnet.sentry.lcd.injective.network:443';
12
+ }
13
+ }
14
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/cosmos/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;IAClD,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;CACnD,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,OAAsB;IACnD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,aAAa,CAAC,iBAAiB;YAClC,OAAO,0CAA0C,CAAA;QACnD,KAAK,aAAa,CAAC,iBAAiB;YAClC,OAAO,kDAAkD,CAAA;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,48 @@
1
+ export interface CosmosTransaction {
2
+ height: string;
3
+ txhash: string;
4
+ codespace: string;
5
+ code: number;
6
+ data: string;
7
+ raw_log: string;
8
+ logs: CosmosTxLog[];
9
+ info: string;
10
+ gas_wanted: string;
11
+ gas_used: string;
12
+ tx: RestTx;
13
+ timestamp: string;
14
+ events: CosmosEvent[];
15
+ }
16
+ interface RestTxBody {
17
+ messages: any[];
18
+ memo: string;
19
+ timeout_height: string;
20
+ }
21
+ interface RestTx {
22
+ body: RestTxBody;
23
+ auth_info: RestAuthInfo;
24
+ signatures: string[];
25
+ }
26
+ interface RestSignerInfo {
27
+ public_key: any;
28
+ mode_info: any;
29
+ sequence: string;
30
+ }
31
+ interface RestAuthInfo {
32
+ signer_infos: RestSignerInfo[];
33
+ fee: any;
34
+ }
35
+ export type CosmosEvent = {
36
+ type: string;
37
+ attributes: {
38
+ key: string;
39
+ value: string;
40
+ }[];
41
+ };
42
+ export interface CosmosTxLog {
43
+ msg_index: number;
44
+ log: string;
45
+ events: CosmosEvent[];
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/cosmos/transaction.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB;AAED,UAAU,UAAU;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,YAAY,CAAA;IACvB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,GAAG,CAAA;IACf,SAAS,EAAE,GAAG,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,YAAY;IACpB,YAAY,EAAE,cAAc,EAAE,CAAA;IAC9B,GAAG,EAAE,GAAG,CAAA;CACT;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAA;AAExF,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,EAAE,CAAA;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/cosmos/transaction.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { ListStateStorage } from '@sentio/runtime';
2
+ import { CosmosProcessor } from './cosmos-processor.js';
3
+ import { ProcessResult } from '@sentio/protos';
4
+ import { CosmosNetwork } from './network.js';
5
+ export declare class CosmosProcessorState extends ListStateStorage<CosmosProcessor> {
6
+ static INSTANCE: CosmosProcessorState;
7
+ }
8
+ export type CallHandler<T> = {
9
+ handler: (call: T) => Promise<ProcessResult>;
10
+ logConfig?: {
11
+ logFilters: string[];
12
+ };
13
+ };
14
+ export type CosmosProcessorConfig = {
15
+ address: string;
16
+ name?: string;
17
+ chainId: CosmosNetwork;
18
+ startBlock?: bigint;
19
+ endBlock?: bigint;
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cosmos/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,qBAAa,oBAAqB,SAAQ,gBAAgB,CAAC,eAAe,CAAC;IACzE,MAAM,CAAC,QAAQ,uBAA6B;CAC7C;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5C,SAAS,CAAC,EAAE;QACV,UAAU,EAAE,MAAM,EAAE,CAAA;KACrB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { ListStateStorage } from '@sentio/runtime';
2
+ export class CosmosProcessorState extends ListStateStorage {
3
+ static INSTANCE = new CosmosProcessorState();
4
+ }
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cosmos/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAKlD,MAAM,OAAO,oBAAqB,SAAQ,gBAAiC;IACzE,MAAM,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/fuel/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAK3C,MAAM,MAAM,WAAW,GAAG,WAAW,CAAA;AACrC,eAAO,MAAM,WAAW;;;CAGvB,CAAA;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAM3D"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/fuel/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C,MAAM,MAAM,WAAW,GAAG,WAAW,CAAA;AACrC,eAAO,MAAM,WAAW;;;CAGvB,CAAA;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAM3D"}
@@ -1,6 +1,5 @@
1
1
  import { FuelChainId } from '@sentio/chain';
2
2
  import { FUEL_NETWORK_URL } from 'fuels';
3
- const SENTIO_FUEL_TESTNET = 'http://sentio-0.sentio.xyz:8080/sentio-internal-api/fuel-testnet/';
4
3
  export const FuelNetwork = {
5
4
  MAIN_NET: FuelChainId.FUEL_MAINNET,
6
5
  TEST_NET: FuelChainId.FUEL_TESTNET
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/fuel/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAExC,MAAM,mBAAmB,GAAG,mEAAmE,CAAA;AAG/F,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,QAAQ,EAAE,WAAW,CAAC,YAAY;IAClC,QAAQ,EAAE,WAAW,CAAC,YAAY;CACnC,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,yCAAyC,CAAA;IACpD,CAAC;IACD,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/fuel/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAA;AAGxC,MAAM,CAAC,MAAM,WAAW,GAAU;IAChC,QAAQ,EAAE,WAAW,CAAC,YAAY;IAClC,QAAQ,EAAE,WAAW,CAAC,YAAY;CACnC,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,OAAoB;IACjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,yCAAyC,CAAA;IACpD,CAAC;IACD,OAAO,gBAAgB,CAAA;AACzB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { TestProcessorServer } from './test-processor-server.js';
2
+ import { CosmosNetwork } from '../cosmos/network.js';
3
+ export declare class CosmosFacet {
4
+ server: TestProcessorServer;
5
+ constructor(server: TestProcessorServer);
6
+ testOnTransaction(transaction: any, network?: CosmosNetwork): Promise<import("@sentio/protos").ProcessBindingResponse>;
7
+ private buildBinding;
8
+ }
9
+ //# sourceMappingURL=cosmos-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-facet.d.ts","sourceRoot":"","sources":["../../src/testing/cosmos-facet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,qBAAa,WAAW;IACtB,MAAM,EAAE,mBAAmB,CAAA;gBAEf,MAAM,EAAE,mBAAmB;IAIvC,iBAAiB,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,GAAE,aAA+C;IAW5F,OAAO,CAAC,YAAY;CA+BrB"}
@@ -0,0 +1,46 @@
1
+ import { HandlerType } from '@sentio/protos';
2
+ import { CosmosNetwork } from '../cosmos/network.js';
3
+ export class CosmosFacet {
4
+ server;
5
+ constructor(server) {
6
+ this.server = server;
7
+ }
8
+ testOnTransaction(transaction, network = CosmosNetwork.INJECTIVE_TESTNET) {
9
+ const bindings = this.buildBinding(transaction, network);
10
+ if (!bindings) {
11
+ throw Error('Invalid test transaction: ' + JSON.stringify(transaction));
12
+ }
13
+ return this.server.processBindings({
14
+ bindings
15
+ });
16
+ }
17
+ buildBinding(transaction, network) {
18
+ const res = [];
19
+ for (const config of this.server.contractConfigs) {
20
+ if (config.contract?.chainId !== network) {
21
+ continue;
22
+ }
23
+ for (const logConfig of config.cosmosLogConfigs) {
24
+ const binding = {
25
+ data: {
26
+ cosmosCall: {
27
+ transaction,
28
+ timestamp: new Date()
29
+ }
30
+ },
31
+ handlerIds: [logConfig.handlerId],
32
+ handlerType: HandlerType.COSMOS_CALL
33
+ };
34
+ const logFilters = logConfig.logFilters;
35
+ for (const log of transaction.logs || []) {
36
+ if (log.events.find((e) => logFilters.includes(e.type))) {
37
+ res.push(binding);
38
+ break;
39
+ }
40
+ }
41
+ }
42
+ }
43
+ return res;
44
+ }
45
+ }
46
+ //# sourceMappingURL=cosmos-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-facet.js","sourceRoot":"","sources":["../../src/testing/cosmos-facet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,OAAO,WAAW;IACtB,MAAM,CAAqB;IAE3B,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,iBAAiB,CAAC,WAAgB,EAAE,UAAyB,aAAa,CAAC,iBAAiB;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAA;QACzE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAEO,YAAY,CAAC,WAAgB,EAAE,OAAsB;QAC3D,MAAM,GAAG,GAAkB,EAAE,CAAA;QAC7B,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,SAAS,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE;wBACJ,UAAU,EAAE;4BACV,WAAW;4BACX,SAAS,EAAE,IAAI,IAAI,EAAE;yBACtB;qBACF;oBACD,UAAU,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;oBACjC,WAAW,EAAE,WAAW,CAAC,WAAW;iBACrC,CAAA;gBAED,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;gBACvC,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;oBACzC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;wBAC7D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;wBACjB,MAAK;oBACP,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
@@ -6,6 +6,7 @@ import { SolanaFacet } from './solana-facet.js';
6
6
  import { EthFacet } from './eth-facet.js';
7
7
  import { SuiFacet } from './sui-facet.js';
8
8
  import { FuelFacet } from './fuel-facet.js';
9
+ import { CosmosFacet } from './cosmos-facet.js';
9
10
  export declare const TEST_CONTEXT: CallContext;
10
11
  export declare function cleanTest(): void;
11
12
  export declare class TestProcessorServer implements ProcessorServiceImplementation {
@@ -17,6 +18,7 @@ export declare class TestProcessorServer implements ProcessorServiceImplementati
17
18
  solana: SolanaFacet;
18
19
  sui: SuiFacet;
19
20
  fuel: FuelFacet;
21
+ cosmos: CosmosFacet;
20
22
  constructor(loader: () => Promise<any>, httpEndpoints?: Record<string, string>);
21
23
  start(request?: StartRequest, context?: CallContext): Promise<Empty>;
22
24
  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,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;AAE3C,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;gBAEH,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAgB5E,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;CAOnE"}
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,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;AAE/C,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;gBAEP,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAiB5E,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;CAOnE"}
@@ -5,6 +5,7 @@ import { SolanaFacet } from './solana-facet.js';
5
5
  import { EthFacet } from './eth-facet.js';
6
6
  import { SuiFacet } from './sui-facet.js';
7
7
  import { FuelFacet } from './fuel-facet.js';
8
+ import { CosmosFacet } from './cosmos-facet.js';
8
9
  export const TEST_CONTEXT = {};
9
10
  export function cleanTest() {
10
11
  State.reset();
@@ -18,6 +19,7 @@ export class TestProcessorServer {
18
19
  solana;
19
20
  sui;
20
21
  fuel;
22
+ cosmos;
21
23
  constructor(loader, httpEndpoints = {}) {
22
24
  cleanTest();
23
25
  this.service = new ProcessorServiceImpl(loader);
@@ -26,6 +28,7 @@ export class TestProcessorServer {
26
28
  this.eth = new EthFacet(this);
27
29
  this.sui = new SuiFacet(this);
28
30
  this.fuel = new FuelFacet(this);
31
+ this.cosmos = new CosmosFacet(this);
29
32
  for (const k in CHAIN_MAP) {
30
33
  const http = httpEndpoints[k] || '';
31
34
  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":"AAiBA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,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;AAE3C,MAAM,CAAC,MAAM,YAAY,GAA6B,EAAE,CAAA;AAExD,MAAM,UAAU,SAAS;IACvB,KAAK,CAAC,KAAK,EAAE,CAAA;AACf,CAAC;AAED,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAsB;IAC7B,eAAe,CAAkB;IACjC,cAAc,CAAiB;IAE/B,KAAK,CAAY;IACjB,GAAG,CAAU;IACb,MAAM,CAAa;IACnB,GAAG,CAAU;IACb,IAAI,CAAW;IAEf,YAAY,MAA0B,EAAE,gBAAwC,EAAE;QAChF,SAAS,EAAE,CAAA;QAEX,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;QAE/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACnC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAwB,EAAE,iBAAiB,EAAE,EAAE,EAAE,EAAE,OAAO,GAAG,YAAY;QACnF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;QAC7C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;QAC3C,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,OAAc,EAAE,OAAO,GAAG,YAAY;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,SAAS,CAAC,OAA6B,EAAE,OAAO,GAAG,YAAY;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IAED,eAAe,CACb,OAA+B,EAC/B,UAAuB,YAAY;QAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACvD,CAAC;IAED,cAAc,CAAC,OAAoB,EAAE,UAAuB,YAAY;QACtE,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IACvE,CAAC;IAED,qBAAqB,CACnB,QAA6C,EAC7C,OAAoB;QAEpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;CAKF"}
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.39.0-rc.1",
3
+ "version": "2.39.0-rc.2",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -36,6 +36,7 @@
36
36
  "./sui/builtin/0x3": "./lib/sui/builtin/0x3.js",
37
37
  "./fuel": "./lib/fuel/index.js",
38
38
  "./fuel/codegen": "./lib/fuel/codegen/index.js",
39
+ "./cosmos": "./lib/cosmos/index.js",
39
40
  "./store": "./lib/store/index.js",
40
41
  "./store/codegen": "./lib/store/codegen.js"
41
42
  },
@@ -54,7 +55,7 @@
54
55
  "@mysten/sui.js": "~0.54.1",
55
56
  "@project-serum/anchor": "^0.26.0",
56
57
  "@sentio/bigdecimal": "9.1.1-patch.3",
57
- "@sentio/chain": "^1.1.2",
58
+ "@sentio/chain": "^1.1.3",
58
59
  "@sentio/ethers-v6": "^1.0.29",
59
60
  "@solana/web3.js": "1.91.8",
60
61
  "@typemove/aptos": "~1.6.1",
@@ -82,8 +83,8 @@
82
83
  "typedoc": "^0.25.7",
83
84
  "utility-types": "^3.11.0",
84
85
  "yaml": "^2.3.4",
85
- "@sentio/runtime": "^2.39.0-rc.1",
86
- "@sentio/protos": "2.39.0-rc.1"
86
+ "@sentio/runtime": "^2.39.0-rc.2",
87
+ "@sentio/protos": "2.39.0-rc.2"
87
88
  },
88
89
  "peerDependencies": {
89
90
  "tsup": "npm:@sentio/tsup@^6.7.2"
@@ -0,0 +1,38 @@
1
+ import { BaseContext, Labels, normalizeLabels } from '../core/index.js'
2
+ import { ChainId, CosmosChainId } from '@sentio/chain'
3
+ import { RecordMetaData } from '@sentio/protos'
4
+ import { CosmosTransaction } from './transaction.js'
5
+
6
+ export class CosmosContext extends BaseContext {
7
+ private logIndex: number = -1
8
+
9
+ constructor(
10
+ readonly chainId: CosmosChainId,
11
+ readonly contractAddress: string,
12
+ readonly transaction: CosmosTransaction
13
+ ) {
14
+ super({})
15
+ }
16
+
17
+ getChainId(): ChainId {
18
+ return this.chainId
19
+ }
20
+
21
+ setLogIndex(logIndex: number): void {
22
+ this.logIndex = logIndex
23
+ }
24
+
25
+ protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
26
+ return {
27
+ address: this.contractAddress,
28
+ contractName: labels['name'] || '',
29
+ blockNumber: BigInt(this.transaction?.height || 0),
30
+ transactionIndex: 0,
31
+ transactionHash: this.transaction?.txhash || '',
32
+ chainId: this.getChainId(),
33
+ name: name,
34
+ logIndex: this.logIndex,
35
+ labels: normalizeLabels(labels)
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,100 @@
1
+ import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'
2
+ import {
3
+ ContractConfig,
4
+ Data_CosmosCall,
5
+ DataBinding,
6
+ HandlerType,
7
+ ProcessConfigResponse,
8
+ ProcessResult,
9
+ StartRequest
10
+ } from '@sentio/protos'
11
+ import { ServerError, Status } from 'nice-grpc'
12
+ import { TemplateInstanceState } from '../core/template.js'
13
+ import { CosmosProcessorState } from './types.js'
14
+
15
+ interface Handlers {
16
+ callHandlers: ((trace: Data_CosmosCall) => Promise<ProcessResult>)[]
17
+ }
18
+
19
+ export class CosmosPlugin extends Plugin {
20
+ name: string = 'CosmosPlugin'
21
+ handlers: Handlers = {
22
+ callHandlers: []
23
+ }
24
+
25
+ async configure(config: ProcessConfigResponse) {
26
+ const handlers: Handlers = {
27
+ callHandlers: []
28
+ }
29
+
30
+ for (const processor of CosmosProcessorState.INSTANCE.getValues()) {
31
+ const contractConfig = ContractConfig.fromPartial({
32
+ processorType: USER_PROCESSOR,
33
+ contract: {
34
+ name: processor.config.name,
35
+ chainId: processor.config.chainId.toString(),
36
+ address: processor.config.address || '*',
37
+ abi: ''
38
+ },
39
+ startBlock: processor.config.startBlock,
40
+ endBlock: processor.config.endBlock
41
+ })
42
+
43
+ for (const callHandler of processor.callHandlers) {
44
+ const handlerId = handlers.callHandlers.push(callHandler.handler) - 1
45
+
46
+ contractConfig.cosmosLogConfigs.push({
47
+ handlerId,
48
+ logFilters: callHandler.logConfig?.logFilters || []
49
+ })
50
+ }
51
+
52
+ // Finish up a contract
53
+ config.contractConfigs.push(contractConfig)
54
+ }
55
+
56
+ this.handlers = handlers
57
+ }
58
+
59
+ supportedHandlers = [HandlerType.COSMOS_CALL]
60
+
61
+ processBinding(request: DataBinding): Promise<ProcessResult> {
62
+ switch (request.handlerType) {
63
+ case HandlerType.COSMOS_CALL:
64
+ return this.processTransaction(request)
65
+ default:
66
+ throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)
67
+ }
68
+ }
69
+
70
+ async start(request: StartRequest) {}
71
+
72
+ stateDiff(config: ProcessConfigResponse): boolean {
73
+ return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length
74
+ }
75
+
76
+ async processTransaction(binding: DataBinding): Promise<ProcessResult> {
77
+ if (!binding.data?.cosmosCall?.transaction) {
78
+ throw new ServerError(Status.INVALID_ARGUMENT, "transaction can't be null")
79
+ }
80
+ const call = binding.data.cosmosCall
81
+
82
+ const promises: Promise<ProcessResult>[] = []
83
+
84
+ for (const handlerId of binding.handlerIds) {
85
+ const promise = this.handlers.callHandlers[handlerId](call).catch((e) => {
86
+ throw new ServerError(
87
+ Status.INTERNAL,
88
+ 'error processing transaction: ' + JSON.stringify(call.transaction) + '\n' + errorString(e)
89
+ )
90
+ })
91
+ if (GLOBAL_CONFIG.execution.sequential) {
92
+ await promise
93
+ }
94
+ promises.push(promise)
95
+ }
96
+ return mergeProcessResults(await Promise.all(promises))
97
+ }
98
+ }
99
+
100
+ PluginManager.INSTANCE.register(new CosmosPlugin())
@@ -0,0 +1,43 @@
1
+ import { CallHandler, CosmosProcessorConfig, CosmosProcessorState } from './types.js'
2
+ import { Data_CosmosCall } from '@sentio/protos'
3
+ import { CosmosContext } from './context.js'
4
+ import { CosmosEvent, CosmosTransaction, CosmosTxLog } from './transaction.js'
5
+
6
+ export class CosmosProcessor {
7
+ callHandlers: CallHandler<Data_CosmosCall>[] = []
8
+
9
+ constructor(readonly config: CosmosProcessorConfig) {}
10
+
11
+ static bind(config: CosmosProcessorConfig): CosmosProcessor {
12
+ const processor = new CosmosProcessor(config)
13
+ CosmosProcessorState.INSTANCE.addValue(processor)
14
+ return processor
15
+ }
16
+
17
+ public onLogEvent(
18
+ logFilters: string[] | string,
19
+ handler: (log: CosmosTxLog, event: CosmosEvent, context: CosmosContext) => void | Promise<void>
20
+ ) {
21
+ const filter = Array.isArray(logFilters) ? logFilters : [logFilters]
22
+ const callHandler = {
23
+ handler: async (call: Data_CosmosCall) => {
24
+ const transaction = call.transaction as CosmosTransaction
25
+
26
+ const ctx = new CosmosContext(this.config.chainId, this.config.address, transaction)
27
+
28
+ for (const log of transaction.logs) {
29
+ const event = log.events.filter((e) => filter.includes(e.type))
30
+ for (const e of event) {
31
+ await handler(log, e, ctx)
32
+ }
33
+ }
34
+ return ctx.stopAndGetResult()
35
+ },
36
+ logConfig: {
37
+ logFilters: filter
38
+ }
39
+ }
40
+ this.callHandlers.push(callHandler)
41
+ return this
42
+ }
43
+ }
@@ -0,0 +1,4 @@
1
+ export { CosmosPlugin } from './cosmos-plugin.js'
2
+ export * from './cosmos-processor.js'
3
+ export * from './types.js'
4
+ export * from './transaction.js'
@@ -0,0 +1,16 @@
1
+ import { CosmosChainId } from '@sentio/chain'
2
+
3
+ export type CosmosNetwork = CosmosChainId
4
+ export const CosmosNetwork = <const>{
5
+ INJECTIVE_MAINNET: CosmosChainId.INJECTIVE_MAINNET,
6
+ INJECTIVE_TESTNET: CosmosChainId.INJECTIVE_TESTNET
7
+ }
8
+
9
+ export function getRpcEndpoint(network: CosmosNetwork): string {
10
+ switch (network) {
11
+ case CosmosNetwork.INJECTIVE_MAINNET:
12
+ return 'https://sentry.lcd.injective.network:443'
13
+ case CosmosNetwork.INJECTIVE_TESTNET:
14
+ return 'https://testnet.sentry.lcd.injective.network:443'
15
+ }
16
+ }
@@ -0,0 +1,46 @@
1
+ export interface CosmosTransaction {
2
+ height: string
3
+ txhash: string
4
+ codespace: string
5
+ code: number
6
+ data: string
7
+ raw_log: string
8
+ logs: CosmosTxLog[]
9
+ info: string
10
+ gas_wanted: string
11
+ gas_used: string
12
+ tx: RestTx
13
+ timestamp: string
14
+ events: CosmosEvent[]
15
+ }
16
+
17
+ interface RestTxBody {
18
+ messages: any[]
19
+ memo: string
20
+ timeout_height: string
21
+ }
22
+
23
+ interface RestTx {
24
+ body: RestTxBody
25
+ auth_info: RestAuthInfo
26
+ signatures: string[]
27
+ }
28
+
29
+ interface RestSignerInfo {
30
+ public_key: any
31
+ mode_info: any
32
+ sequence: string
33
+ }
34
+
35
+ interface RestAuthInfo {
36
+ signer_infos: RestSignerInfo[]
37
+ fee: any
38
+ }
39
+
40
+ export type CosmosEvent = { type: string; attributes: { key: string; value: string }[] }
41
+
42
+ export interface CosmosTxLog {
43
+ msg_index: number
44
+ log: string
45
+ events: CosmosEvent[]
46
+ }
@@ -0,0 +1,23 @@
1
+ import { ListStateStorage } from '@sentio/runtime'
2
+ import { CosmosProcessor } from './cosmos-processor.js'
3
+ import { ProcessResult } from '@sentio/protos'
4
+ import { CosmosNetwork } from './network.js'
5
+
6
+ export class CosmosProcessorState extends ListStateStorage<CosmosProcessor> {
7
+ static INSTANCE = new CosmosProcessorState()
8
+ }
9
+
10
+ export type CallHandler<T> = {
11
+ handler: (call: T) => Promise<ProcessResult>
12
+ logConfig?: {
13
+ logFilters: string[]
14
+ }
15
+ }
16
+
17
+ export type CosmosProcessorConfig = {
18
+ address: string
19
+ name?: string
20
+ chainId: CosmosNetwork
21
+ startBlock?: bigint
22
+ endBlock?: bigint
23
+ }
@@ -1,8 +1,6 @@
1
1
  import { FuelChainId } from '@sentio/chain'
2
2
  import { FUEL_NETWORK_URL } from 'fuels'
3
3
 
4
- const SENTIO_FUEL_TESTNET = 'http://sentio-0.sentio.xyz:8080/sentio-internal-api/fuel-testnet/'
5
-
6
4
  export type FuelNetwork = FuelChainId
7
5
  export const FuelNetwork = <const>{
8
6
  MAIN_NET: FuelChainId.FUEL_MAINNET,
@@ -0,0 +1,54 @@
1
+ import { TestProcessorServer } from './test-processor-server.js'
2
+ import { DataBinding, HandlerType } from '@sentio/protos'
3
+ import { CosmosNetwork } from '../cosmos/network.js'
4
+
5
+ export class CosmosFacet {
6
+ server: TestProcessorServer
7
+
8
+ constructor(server: TestProcessorServer) {
9
+ this.server = server
10
+ }
11
+
12
+ testOnTransaction(transaction: any, network: CosmosNetwork = CosmosNetwork.INJECTIVE_TESTNET) {
13
+ const bindings = this.buildBinding(transaction, network)
14
+ if (!bindings) {
15
+ throw Error('Invalid test transaction: ' + JSON.stringify(transaction))
16
+ }
17
+
18
+ return this.server.processBindings({
19
+ bindings
20
+ })
21
+ }
22
+
23
+ private buildBinding(transaction: any, network: CosmosNetwork): DataBinding[] {
24
+ const res: DataBinding[] = []
25
+ for (const config of this.server.contractConfigs) {
26
+ if (config.contract?.chainId !== network) {
27
+ continue
28
+ }
29
+
30
+ for (const logConfig of config.cosmosLogConfigs) {
31
+ const binding = {
32
+ data: {
33
+ cosmosCall: {
34
+ transaction,
35
+ timestamp: new Date()
36
+ }
37
+ },
38
+ handlerIds: [logConfig.handlerId],
39
+ handlerType: HandlerType.COSMOS_CALL
40
+ }
41
+
42
+ const logFilters = logConfig.logFilters
43
+ for (const log of transaction.logs || []) {
44
+ if (log.events.find((e: any) => logFilters.includes(e.type))) {
45
+ res.push(binding)
46
+ break
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ return res
53
+ }
54
+ }
@@ -23,6 +23,7 @@ import { SolanaFacet } from './solana-facet.js'
23
23
  import { EthFacet } from './eth-facet.js'
24
24
  import { SuiFacet } from './sui-facet.js'
25
25
  import { FuelFacet } from './fuel-facet.js'
26
+ import { CosmosFacet } from './cosmos-facet.js'
26
27
 
27
28
  export const TEST_CONTEXT: CallContext = <CallContext>{}
28
29
 
@@ -40,6 +41,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
40
41
  solana: SolanaFacet
41
42
  sui: SuiFacet
42
43
  fuel: FuelFacet
44
+ cosmos: CosmosFacet
43
45
 
44
46
  constructor(loader: () => Promise<any>, httpEndpoints: Record<string, string> = {}) {
45
47
  cleanTest()
@@ -50,6 +52,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
50
52
  this.eth = new EthFacet(this)
51
53
  this.sui = new SuiFacet(this)
52
54
  this.fuel = new FuelFacet(this)
55
+ this.cosmos = new CosmosFacet(this)
53
56
 
54
57
  for (const k in CHAIN_MAP) {
55
58
  const http = httpEndpoints[k] || ''