@sentio/sdk-bundle 2.42.0-rc.7 → 2.42.0-rc.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/btc/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAIrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;AAEvE,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,iBAAiB,CAAC,CAAA;AAEvE,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAA;AAEnC,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI;KACpC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU;CAClC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,EAAE,CAAC,EAAE,UAAU,CAAA;IAEf,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAE1B,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1B,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC5B,cAAc,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;QACzC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;KAEnC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAE3C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAA;IACrC,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACxC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/E,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;AA2CxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,CAShF"}
1
+ {"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/btc/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAMrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;AAEvE,MAAM,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,iBAAiB,CAAC,CAAA;AAEvE,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAA;AAEnC,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI;KACpC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU;CAClC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,EAAE,CAAC,EAAE,UAAU,CAAA;IACf,GAAG,CAAC,EAAE,UAAU,CAAA;IAChB,EAAE,CAAC,EAAE,UAAU,CAAA;IAEf,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAE1B,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;IAC1B,EAAE,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAC5B,cAAc,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;QACzC,YAAY,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;KAEnC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;AAE3C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAA;IACrC,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACxC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/E,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAAA;AAoDxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,EAAE,CAShF"}
package/lib/btc/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{a as r,b as e,c as f,d as m,e as o}from"../chunk-PEB2BU4O.js";import"../chunk-TO35Z22E.js";import"../chunk-SBU7XQ42.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import"../chunk-FC546GTB.js";import"../chunk-LLHU72AA.js";export{r as BTCContext,o as BTCPlugin,f as BTCProcessor,e as BTCProcessorState,m as filters2Proto};
2
+ import{a as r,b as e,c as f,d as m,e as o}from"../chunk-3AEWKTHO.js";import"../chunk-TO35Z22E.js";import"../chunk-SBU7XQ42.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import"../chunk-FC546GTB.js";import"../chunk-LLHU72AA.js";export{r as BTCContext,o as BTCPlugin,f as BTCProcessor,e as BTCProcessorState,m as filters2Proto};
3
3
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,4 @@
1
+ import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
+ import{D as m,Ka as _,La as y,Lc as N,Na as T,Oa as x,Pa as B,W as C,bd as o,fd as I,kd as k,tc as A}from"./chunk-TO35Z22E.js";import{a as V}from"./chunk-FC546GTB.js";import{e as P,g as F}from"./chunk-LLHU72AA.js";var p=class extends I{constructor(e,n,i,s){super({});this.chainId=e;this.name=n;this.tx=i;this.address=s}getMetaDataInternal(e,n){return{address:this.address,contractName:this.name,blockNumber:BigInt(this.tx.block_number??0),transactionIndex:0,transactionHash:this.tx.transaction_hash,chainId:this.getChainId(),name:e,logIndex:0,labels:A(n)}}getChainId(){return this.chainId}};import{ListStateStorage as R}from"@sentio/runtime";var g=class extends R{},l=g;F(l,"INSTANCE",new g);var d=class{constructor(t){this.config=t}callHandlers=[];static bind(t){let e=new d(t);return l.INSTANCE.addValue(e),e}onTransaction(t,e){let n={handler:async i=>{let s=i.transaction,a=new p(this.config.chainId,this.config.name??this.config.address??"",s,this.config.address??s.vout[0].script_address);return await t(s,a),a.stopAndGetResult()},filter:e};return this.callHandlers.push(n),this}};function w(r){if(r){let t=x.create(),e=[],n=[],i=[];for(let s of Array.isArray(r)?r:[r]){let{preVOut:a,preTransaction:b,...O}=s;e.push(O),a&&n.push(a),b&&i.push(b)}if(t.filters=T.create({filters:u(e)}),n.length>0){let s=u(n);s&&s.length>0&&(t.preVOut=s[0])}return i.length>0&&(t.preTransaction=f(i)?.[0]),t}}function D(r){if(r){let t=B.create(),e=Array.isArray(r)?r:[r];return t.filters=T.create({filters:u(e)}),t}}function f(r){return(Array.isArray(r)?r:[r]).map(e=>({filter:u(e.filter),inputFilter:w(e.inputFilter),outputFilter:D(e.outputFilter)}))}function S(r){let t=_.create();r instanceof Date&&(t.eq=o(r)),typeof r=="number"&&(t.eq=o(r)),typeof r=="string"&&(t.eq=o(r)),r instanceof V&&(t.eq=o(r)),typeof r=="bigint"&&(t.eq=o(r)),typeof r=="boolean"&&(t.eq=o(r)),Array.isArray(r)&&(t.in={values:r.map(e=>o(e))});for(let[e,n]of Object.entries(r))switch(e){case"prefix":case"contains":case"notContains":t[e]=n.toString();break;case"length":t.lengthEq=n;break;case"lengthGt":case"lengthLt":t[e]=n;break;case"hasAny":case"hasAll":case"in":t[e]={values:n.map(i=>o(i))};break;case"eq":case"gt":case"gte":case"lt":case"lte":case"ne":t[e]=o(n);break;default:throw new Error("Unknown condition op: "+e)}return t}function u(r){if(r&&r.length>0){let t=[];for(let e of r){let n=y.create();for(let[i,s]of Object.entries(e))n.conditions[i]=S(s);t.push(n)}return t}return[]}import{errorString as H,GLOBAL_CONFIG as E,mergeProcessResults as q,Plugin as v,PluginManager as L,USER_PROCESSOR as G}from"@sentio/runtime";var c=P(N(),1);var h=class extends v{name="BTCPlugin";handlers={txHandlers:[]};async configure(t){let e={txHandlers:[]};for(let n of l.INSTANCE.getValues()){let i=C.fromPartial({processorType:G,contract:{name:n.config.name,chainId:n.config.chainId.toString(),address:n.config.address||"*",abi:""},startBlock:n.config.startBlock,endBlock:n.config.endBlock});for(let s of n.callHandlers){let a=e.txHandlers.push(s.handler)-1;s.filter?i.btcTransactionConfigs.push({filters:f(s.filter),handlerId:a}):i.contract?.address!="*"&&i.btcTransactionConfigs.push({filters:f({outputFilter:{script_address:n.config.address}}),handlerId:a})}t.contractConfigs.push(i)}this.handlers=e}supportedHandlers=[m.BTC_TRANSACTION];processBinding(t){switch(t.handlerType){case m.BTC_TRANSACTION:return this.processTransaction(t);default:throw new c.ServerError(c.Status.INVALID_ARGUMENT,"No handle type registered "+t.handlerType)}}async start(t){}stateDiff(t){return k.INSTANCE.getValues().length!==t.templateInstances.length}async processTransaction(t){if(!t.data?.btcTransaction)throw new c.ServerError(c.Status.INVALID_ARGUMENT,"BTCEvents can't be null");let e=[],n=t.data?.btcTransaction;for(let i of t.handlerIds){let s=this.handlers.txHandlers[i](t.data?.btcTransaction).catch(a=>{throw new c.ServerError(c.Status.INTERNAL,"error processing transaction: "+JSON.stringify(n)+`
3
+ `+H(a))});E.execution.sequential&&await s,e.push(s)}return q(await Promise.all(e))}};L.INSTANCE.register(new h);export{p as a,l as b,d as c,f as d,h as e};
4
+ //# sourceMappingURL=chunk-3AEWKTHO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/btc/types.ts","../src/btc/btc-processor.ts","../src/btc/filter.ts","../src/btc/btc-plugin.ts"],"sourcesContent":["import { BaseContext, Labels, normalizeLabels } from '../core/index.js'\nimport { RecordMetaData } from '@sentio/protos'\nimport { ChainId } from '@sentio/chain'\n\nexport type Vin = {\n vin_index: number\n coinbase?: string\n spent_transaction_hash?: string\n spent_output_index?: number\n sequence: number\n witness?: string[]\n script_asm: string\n script_hex: string\n value: number\n addresses?: string[]\n pre_vout?: Vout\n pre_transaction?: Transaction\n}\n\nexport type Vout = {\n value: number\n vout_index: number\n script_asm: string\n script_hex: string\n script_type: string\n script_address: string\n script_reg_sigs: number\n}\n\nexport type Transaction = {\n transaction_hash: string\n transaction_index: number\n block_hash: string\n block_number: number\n block_timestamp: Date\n size: number\n virtual_size: number\n version: number\n lock_time: number\n input_count: number\n output_count: number\n vin: Vin[]\n vout: Vout[]\n}\n\nexport type Block = {\n block_hash: string\n block_number: number\n block_timestamp: Date\n size: number\n stripped_size: number\n weight: number\n version: number\n merkle_root: string\n nonce: number\n bits: string\n difficulty: number\n previous_hash: string\n next_hash: string\n transaction_count: number\n}\n\nexport class BTCContext extends BaseContext {\n constructor(\n readonly chainId: string,\n readonly name: string,\n readonly tx: Transaction,\n readonly address: string\n ) {\n super({})\n }\n\n protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.name,\n blockNumber: BigInt(this.tx.block_number ?? 0),\n transactionIndex: 0,\n transactionHash: this.tx.transaction_hash,\n chainId: this.getChainId(),\n name: name,\n logIndex: 0,\n labels: normalizeLabels(labels)\n }\n }\n\n getChainId(): ChainId {\n return this.chainId as ChainId\n }\n}\n","import { ListStateStorage } from '@sentio/runtime'\nimport { BTCContext, Transaction } from './types.js'\nimport { Data_BTCTransaction, ProcessResult } from '@sentio/protos'\nimport { TransactionFilters } from './filter.js'\n\nexport class BTCProcessorState extends ListStateStorage<BTCProcessor> {\n static INSTANCE = new BTCProcessorState()\n}\n\nexport class BTCProcessor {\n callHandlers: CallHandler<Data_BTCTransaction>[] = []\n\n constructor(readonly config: BTCProcessorConfig) {}\n\n static bind(config: BTCProcessorConfig): BTCProcessor {\n const processor = new BTCProcessor(config)\n BTCProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n public onTransaction(\n handler: (transaction: Transaction, ctx: BTCContext) => void | Promise<void>,\n filter?: TransactionFilters\n ) {\n const callHandler = {\n handler: async (call: Data_BTCTransaction) => {\n const tx = call.transaction as Transaction\n\n const ctx = new BTCContext(\n this.config.chainId,\n this.config.name ?? this.config.address ?? '',\n tx,\n this.config.address ?? tx.vout[0].script_address\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n filter\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n\ninterface BTCProcessorConfig {\n chainId: string\n name?: string\n address?: string\n startBlock?: bigint\n endBlock?: bigint\n}\n\nexport type CallHandler<T> = {\n handler: (call: T) => Promise<ProcessResult>\n filter?: TransactionFilters\n}\n","import {\n BTCTransactionFilter,\n BTCTransactionFilter_Condition,\n BTCTransactionFilter_Filter,\n BTCTransactionFilter_Filters,\n BTCTransactionFilter_VinFilter,\n BTCTransactionFilter_VOutFilter\n} from '@sentio/protos'\nimport { serializeRichValue } from '../store/util.js'\nimport { BigDecimal } from '@sentio/bigdecimal'\nimport { Transaction, Vin, Vout } from './types.js'\n\nexport type TransactionFields = keyof Omit<Transaction, 'vin' | 'vout'>\n\nexport type VinFields = keyof Omit<Vin, 'pre_vout' | 'pre_transaction'>\n\nexport type VOutFields = keyof Vout\n\nexport type Filter<F extends string> = {\n [K in F]?: Condition | Comparable\n}\n\nexport type Condition = {\n eq?: Comparable\n gt?: Comparable\n gte?: Comparable\n lt?: Comparable\n lte?: Comparable\n ne?: Comparable\n // string has the prefix\n prefix?: string\n // string contains\n contains?: string\n notContains?: string\n length?: number\n lengthGt?: number\n lengthLt?: number\n // array contains any of the values\n hasAny?: Array<Comparable>\n // array contains all the values\n hasAll?: Array<Comparable>\n in?: Array<Comparable>\n}\n\nexport type Filters<T extends string> = Filter<T> | Filter<T>[]\n\nexport type VinFilter = Filter<VinFields> & {\n preVOut?: Filter<VOutFields>\n preTransaction?: {\n filter?: Array<Filter<TransactionFields>>\n outputFilter?: Filters<VOutFields>\n // can't have inputFilter here, we can only support one level of nesting\n }\n}\n\nexport type VOutFilter = Filter<VOutFields>\n\nexport type TransactionFilter = {\n inputFilter?: VinFilter | VinFilter[]\n outputFilter?: VOutFilter | VOutFilter[]\n filter?: Array<Filter<TransactionFields>>\n}\n\nexport type Comparable = number | BigDecimal | bigint | Date | string | boolean\n\nexport type TransactionFilters = TransactionFilter | TransactionFilter[]\n\nfunction toVinFilter(inputFilter?: VinFilter | VinFilter[]): BTCTransactionFilter_VinFilter | undefined {\n if (inputFilter) {\n const ret = BTCTransactionFilter_VinFilter.create()\n const filters = []\n const vouts: Filter<VOutFields>[] = []\n const txs: TransactionFilters = []\n\n for (const f of Array.isArray(inputFilter) ? inputFilter : [inputFilter]) {\n const { preVOut, preTransaction, ...rest } = f\n filters.push(rest)\n if (preVOut) {\n vouts.push(preVOut)\n }\n if (preTransaction) {\n txs.push(preTransaction)\n }\n }\n ret.filters = BTCTransactionFilter_Filters.create({\n filters: convertFilters(filters)\n })\n\n if (vouts.length > 0) {\n const voutFilters = convertFilters(vouts)\n if (voutFilters && voutFilters.length > 0) {\n ret.preVOut = voutFilters[0]\n }\n }\n if (txs.length > 0) {\n ret.preTransaction = filters2Proto(txs)?.[0]\n }\n\n return ret\n }\n\n return undefined\n}\n\nfunction toVOutFilter(outputFilter?: VOutFilter | VOutFilter[]): BTCTransactionFilter_VOutFilter | undefined {\n if (outputFilter) {\n const ret = BTCTransactionFilter_VOutFilter.create()\n const filters = Array.isArray(outputFilter) ? outputFilter : ([outputFilter] as Filter<VOutFields>[])\n ret.filters = BTCTransactionFilter_Filters.create({\n filters: convertFilters(filters)\n })\n\n return ret\n }\n return undefined\n}\n\nexport function filters2Proto(filter: TransactionFilters): BTCTransactionFilter[] {\n const filters = Array.isArray(filter) ? filter : [filter]\n return filters.map((f) => {\n return {\n filter: convertFilters(f.filter),\n inputFilter: toVinFilter(f.inputFilter),\n outputFilter: toVOutFilter(f.outputFilter)\n } as BTCTransactionFilter\n })\n}\n\nfunction toCondition(value: Condition | Comparable): BTCTransactionFilter_Condition {\n const ret: BTCTransactionFilter_Condition = BTCTransactionFilter_Condition.create()\n if (value instanceof Date) {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'number') {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'string') {\n ret.eq = serializeRichValue(value)\n }\n if (value instanceof BigDecimal) {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'bigint') {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'boolean') {\n ret.eq = serializeRichValue(value)\n }\n if (Array.isArray(value)) {\n ret.in = { values: value.map((v) => serializeRichValue(v)) }\n }\n\n for (const [k, v] of Object.entries(value)) {\n switch (k) {\n case 'prefix':\n case 'contains':\n case 'notContains':\n ret[k] = v.toString()\n break\n case 'length':\n ret['lengthEq'] = v\n break\n case 'lengthGt':\n case 'lengthLt':\n ret[k] = v\n break\n case 'hasAny':\n case 'hasAll':\n case 'in':\n ret[k] = { values: v.map((v: any) => serializeRichValue(v)) }\n break\n case 'eq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n case 'ne':\n ret[k] = serializeRichValue(v)\n break\n default:\n throw new Error('Unknown condition op: ' + k)\n }\n }\n\n return ret\n}\n\nfunction convertFilters<T extends string>(filters?: Array<Filter<T>>): BTCTransactionFilter_Filter[] | undefined {\n if (filters && filters.length > 0) {\n const ret: BTCTransactionFilter_Filter[] = []\n for (const filter of filters) {\n const f: BTCTransactionFilter_Filter = BTCTransactionFilter_Filter.create()\n for (const [key, value] of Object.entries(filter)) {\n f.conditions[key] = toCondition(value as any)\n }\n ret.push(f)\n }\n return ret\n }\n return []\n}\n","import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n ContractConfig,\n Data_BTCTransaction,\n DataBinding,\n HandlerType,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { BTCProcessorState } from './btc-processor.js'\nimport { filters2Proto, TransactionFilter } from './filter.js'\n\ninterface Handlers {\n txHandlers: ((trace: Data_BTCTransaction) => Promise<ProcessResult>)[]\n}\n\nexport class BTCPlugin extends Plugin {\n name: string = 'BTCPlugin'\n handlers: Handlers = {\n txHandlers: []\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n txHandlers: []\n }\n\n for (const processor of BTCProcessorState.INSTANCE.getValues()) {\n const contractConfig = ContractConfig.fromPartial({\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: processor.config.chainId.toString(),\n address: processor.config.address || '*',\n abi: ''\n },\n startBlock: processor.config.startBlock,\n endBlock: processor.config.endBlock\n })\n for (const callHandler of processor.callHandlers) {\n const handlerId = handlers.txHandlers.push(callHandler.handler) - 1\n\n if (callHandler.filter) {\n contractConfig.btcTransactionConfigs.push({\n filters: filters2Proto(callHandler.filter),\n handlerId\n })\n } else if (contractConfig.contract?.address != '*') {\n contractConfig.btcTransactionConfigs.push({\n filters: filters2Proto({\n outputFilter: {\n script_address: processor.config.address\n }\n } as TransactionFilter),\n handlerId\n })\n }\n }\n\n // Finish up a contract\n config.contractConfigs.push(contractConfig)\n }\n\n this.handlers = handlers\n }\n\n supportedHandlers = [HandlerType.BTC_TRANSACTION]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.BTC_TRANSACTION:\n return this.processTransaction(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async start(request: StartRequest) {}\n\n stateDiff(config: ProcessConfigResponse): boolean {\n return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length\n }\n\n async processTransaction(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.btcTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"BTCEvents can't be null\")\n }\n\n const promises: Promise<ProcessResult>[] = []\n\n const result = binding.data?.btcTransaction\n\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.txHandlers[handlerId](binding.data?.btcTransaction).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing transaction: ' + JSON.stringify(result) + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n}\n\nPluginManager.INSTANCE.register(new BTCPlugin())\n"],"mappings":"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","names":["BTCContext","BaseContext","chainId","name","tx","address","labels","normalizeLabels","ListStateStorage","_BTCProcessorState","ListStateStorage","BTCProcessorState","__publicField","BTCProcessor","config","processor","handler","filter","callHandler","call","tx","ctx","BTCContext","toVinFilter","inputFilter","ret","BTCTransactionFilter_VinFilter","filters","vouts","txs","f","preVOut","preTransaction","rest","BTCTransactionFilter_Filters","convertFilters","voutFilters","filters2Proto","toVOutFilter","outputFilter","BTCTransactionFilter_VOutFilter","filter","toCondition","value","BTCTransactionFilter_Condition","serializeRichValue","BigDecimal","v","k","BTCTransactionFilter_Filter","key","errorString","GLOBAL_CONFIG","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","BTCPlugin","Plugin","config","handlers","processor","BTCProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","callHandler","handlerId","filters2Proto","HandlerType","request","TemplateInstanceState","binding","promises","result","promise","e","errorString","GLOBAL_CONFIG","mergeProcessResults","PluginManager"]}
@@ -1,3 +1,3 @@
1
1
  import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{b as F}from"../chunk-BY3NP62H.js";import"../chunk-PEB2BU4O.js";import{g as _}from"../chunk-JEAW5KKT.js";import"../chunk-LDCEM6PZ.js";import"../chunk-ZGALPNQV.js";import{f as g}from"../chunk-ZDHGKRIS.js";import"../chunk-GTPT4243.js";import{c as T}from"../chunk-ZY643Q3A.js";import"../chunk-3FX7DHPT.js";import"../chunk-SSMP6EWG.js";import"../chunk-F2HFFA4Z.js";import"../chunk-NHARQGR7.js";import"../chunk-PE6MZT4O.js";import{d as M}from"../chunk-GORIGKSL.js";import"../chunk-PNA6LFOX.js";import"../chunk-ZIGQO7R5.js";import{a as D,d as u,n as E}from"../chunk-4TVQXTHY.js";import"../chunk-7SE2IH73.js";import"../chunk-ECTPH53D.js";import"../chunk-MGWHCJHO.js";import"../chunk-2GOCSOX5.js";import{a as m}from"../chunk-7HVQTJAO.js";import{D as a}from"../chunk-TO35Z22E.js";import"../chunk-SBU7XQ42.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import{a as L}from"../chunk-FC546GTB.js";import{e as h}from"../chunk-LLHU72AA.js";var U=h(m(),1);import{Endpoints as q,ProcessorServiceImpl as G,State as j}from"@sentio/runtime";var I=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=T.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=T.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=T.MAIN_NET){let n=e.payload;for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.moveCallConfigs)for(let o of s.filters)if(u(r.contract.address)+"::"+o.function===n.function)return{data:{aptCall:{transaction:e}},handlerIds:[s.handlerId],handlerType:a.APT_CALL}}}testEvent(e,t=T.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}buildEventBinding(e,t=T.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events)if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{aptEvent:{transaction:e}},handlerIds:[r.handlerId],handlerType:a.APT_EVENT}}}};var v=class{server;constructor(e){this.server=e}testInstructions(e){return this.server.processBindings({bindings:e.map(t=>({data:{raw:new Uint8Array,solInstruction:t},handlerIds:[],handlerType:a.SOL_INSTRUCTION}))})}};var f=h(m(),1),B=class{server;constructor(e){this.server=e}testTrace(e,t=f.EthChainId.ETHEREUM){return this.testTraces([e],t)}testTraces(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildTraceBinding(r,t);if(!s)throw Error("Invalid test trace: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildTraceBinding(e,t=f.EthChainId.ETHEREUM){if(e.type!=="call"||!e.action.input)throw Error("Invalid test trace: "+JSON.stringify(e));let n=e.action.input.slice(0,10);for(let r of this.server.contractConfigs)if(r.contract?.chainId===t&&!(e.action.to?.toLowerCase()!==r.contract?.address.toLowerCase()&&r.contract?.address!=="*")){for(let s of r.traceConfigs)if(s.signature==n)return{data:{ethTrace:{trace:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_TRACE}}}testLog(e,t=f.EthChainId.ETHEREUM){return this.testLogs([e],t)}testLogs(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildLogBinding(r,t);if(!s)throw Error("Invalid test log: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildLogBinding(e,t=f.EthChainId.ETHEREUM){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t&&!(e.address.toLowerCase()!==n.contract?.address.toLowerCase()&&n.contract?.address!=="*"))for(let r of n.logConfigs)for(let s of r.filters){let o=!0;for(let c in s.topics){let d=e.topics[c],l=s.topics[c].hashes;if(l.length!==0&&!l.find(p=>p.toLowerCase()===d.toLowerCase())){o=!1;break}}if(o)return{data:{ethLog:{log:e,timestamp:new Date}},handlerIds:[r.handlerId],handlerType:a.ETH_LOG}}}testAccountLog(e,t,n=f.EthChainId.ETHEREUM){return this.testAccountLogs(e,[t],n)}testAccountLogs(e,t,n=f.EthChainId.ETHEREUM){let r=[];for(let s of t){let o=this.buildAccountLogBinding(e,s,n);if(!o)throw Error("Invalid test log: "+JSON.stringify(s));r.push(o)}return this.server.processBindings({bindings:r})}buildAccountLogBinding(e,t,n=f.EthChainId.ETHEREUM){for(let r of this.server.accountConfigs)if(r.chainId===n&&e.toLowerCase()===r.address.toLowerCase())for(let s of r.logConfigs)for(let o of s.filters){let c=!0;for(let d in o.topics){let l=t.topics[d],p=o.topics[d].hashes;if(p.length!==0&&!p.find(w=>w.toLowerCase()===l.toLowerCase())){c=!1;break}}if(c)return{data:{ethLog:{log:t,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_LOG}}}testBlock(e,t=f.EthChainId.ETHEREUM){return this.testBlocks([e],t)}testBlocks(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildBlockBinding(r,t);if(!s)throw Error("Invalid test block: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildBlockBinding(e,t=f.EthChainId.ETHEREUM){let n={data:{ethBlock:{block:e}},handlerType:a.ETH_BLOCK,handlerIds:[]};for(let r of this.server.contractConfigs){if(r.contract?.chainId!==t)continue;let s=e.number;if(!(s<r.startBlock)&&!(r.endBlock!==0n&&s>=r.endBlock))for(let o of r.intervalConfigs)n.handlerIds.push(o.handlerId)}return n}};var S=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=g.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=g.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=g.MAIN_NET){let n=_(e);for(let r of n){let s=[u(r.package),r.module,r.function].join(D);for(let o of this.server.contractConfigs)if(o.contract?.chainId===t){for(let c of o.moveCallConfigs)for(let d of c.filters)if(u(o.contract.address)+"::"+d.function===s)return{data:{suiCall:{transaction:e,timestamp:new Date,slot:10000n}},handlerIds:[c.handlerId],handlerType:a.SUI_CALL}}}}testEvent(e,t=g.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}testGlobalTransaction(e,t=g.MAIN_NET){let n=[];for(let s of this.server.contractConfigs)if(s.contract?.address==="*")for(let o of s.moveCallConfigs)o.filters.length===1&&o.filters[0].function===""&&n.push(o.handlerId);if(n.length===0)throw Error("Invalid test global transaction: "+JSON.stringify(e));let r={handlerIds:n,handlerType:a.SUI_CALL,data:{suiCall:{transaction:e,timestamp:e.timestampMs?new Date(e.timestampMs):new Date,slot:BigInt(e.checkpoint||0)}}};return this.server.processBinding(r)}buildEventBinding(e,t=g.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events||[])if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{suiEvent:{transaction:e,timestamp:new Date(e.timestampMs||0),slot:10000n}},handlerIds:[r.handlerId],handlerType:a.SUI_EVENT}}}};var N=class{server;constructor(e){this.server=e}testOnTransaction(e,t=F.TEST_NET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.fuelCallConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.filters[0]?.function;if(c)for(let d of e.status.receipts||[])d.receiptType=="CALL"&&d.param1==c&&n.push(o);else n.push(o)}for(let s of r.fuelLogConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.logIds;for(let d of e.status.receipts||[])if((d.receiptType=="LOG"||d.receiptType=="LOG_DATA")&&c.includes(d.rb)){n.push(o);break}}for(let s of r.assetConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL};n.push(o)}}return n}};var R=h(m(),1),x={INJECTIVE_MAINNET:R.CosmosChainId.INJECTIVE_MAINNET,INJECTIVE_TESTNET:R.CosmosChainId.INJECTIVE_TESTNET};var P=class{server;constructor(e){this.server=e}testOnTransaction(e,t=x.INJECTIVE_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.cosmosLogConfigs){let o={data:{cosmosCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.COSMOS_CALL},c=s.logFilters;for(let d of e.logs||[])if(d.events.find(l=>c.includes(l.type))){n.push(o);break}}return n}};var O=h(m(),1),y=class{server;constructor(e){this.server=e}testOnEvents(e,t=O.StarknetChainId.STARKNET_SEPOLIA){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[],r=Array.isArray(e)?e:[e];for(let s of r)for(let o of this.server.contractConfigs)if(o.contract?.chainId===t)for(let c of o.starknetEventConfigs){let d={data:{starknetEvents:{result:s,timestamp:new Date}},handlerIds:[c.handlerId],handlerType:a.STARKNET_EVENT},l=c.filters,p=s.keys;for(let w of p)for(let J of l)if(J.keys.includes(w))return n.push(d),n}return n}};var H=h(m(),1);var b=class{server;constructor(e){this.server=e}testOnTransactions(e,t=H.BTCChainId.BTC_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.btcTransactionConfigs){let o={data:{btcTransaction:e},handlerIds:[s.handlerId],handlerType:a.BTC_TRANSACTION};n.push(o)}return n}};var C={};function K(){j.reset()}var k=class{service;contractConfigs;accountConfigs;aptos;eth;solana;sui;fuel;cosmos;starknet;btc;constructor(e,t={}){K(),this.service=new G(e),this.aptos=new I(this),this.solana=new v(this),this.eth=new B(this),this.sui=new S(this),this.fuel=new N(this),this.cosmos=new P(this),this.starknet=new y(this),this.btc=new b(this);for(let n in U.CHAIN_MAP){let r=t[n]||"";q.INSTANCE.chainServer.set(n,r)}}async start(e={templateInstances:[]},t=C){let n=await this.service.start(e,t),r=await this.getConfig({});return this.contractConfigs=r.contractConfigs,this.accountConfigs=r.accountConfigs,n}stop(e,t=C){return this.service.stop(e,t)}getConfig(e,t=C){return this.service.getConfig(e,t)}processBindings(e,t=C){return this.service.processBindings(e,t)}processBinding(e,t=C){return this.service.processBindings({bindings:[e]},t)}processBindingsStream(e,t){throw new Error("Method not implemented.")}preprocessBindingsStream(e,t){throw new Error("Method not implemented.")}};function A(i){if(i!==void 0){if(i.doubleValue!==void 0)return i.doubleValue;if(i.bigInteger!==void 0){let e=M(i.bigInteger.data);return i.bigInteger.negative&&(e=-e),e}if(i.bigDecimal!==void 0)return new L(i.bigDecimal)}}function X(i,e){if(i){for(let t of i.counters)if(t.metadata?.name===e)return A(t.metricValue)}}function z(i,e){if(i){for(let t of i.gauges)if(t.metadata?.name===e)return A(t.metricValue)}}var V=h(m(),1);import{Endpoints as Q}from"@sentio/runtime";function W(i){let e=[];Array.isArray(i)||(i=[i]);for(let t of Object.keys(V.CHAIN_MAP)){let n="TEST_ENDPOINT_"+t,r=process.env[n];r&&(e.push(t),Q.INSTANCE.chainServer.set(t,r))}for(let t of i)if(!e.includes(t))return!1;return!0}export{A as MetricValueToNumber,k as TestProcessorServer,X as firstCounterValue,z as firstGaugeValue,W as loadTestProvidersFromEnv};
2
+ import{b as F}from"../chunk-BY3NP62H.js";import"../chunk-3AEWKTHO.js";import{g as _}from"../chunk-JEAW5KKT.js";import"../chunk-LDCEM6PZ.js";import"../chunk-ZGALPNQV.js";import{f as g}from"../chunk-ZDHGKRIS.js";import"../chunk-GTPT4243.js";import{c as T}from"../chunk-ZY643Q3A.js";import"../chunk-3FX7DHPT.js";import"../chunk-SSMP6EWG.js";import"../chunk-F2HFFA4Z.js";import"../chunk-NHARQGR7.js";import"../chunk-PE6MZT4O.js";import{d as M}from"../chunk-GORIGKSL.js";import"../chunk-PNA6LFOX.js";import"../chunk-ZIGQO7R5.js";import{a as D,d as u,n as E}from"../chunk-4TVQXTHY.js";import"../chunk-7SE2IH73.js";import"../chunk-ECTPH53D.js";import"../chunk-MGWHCJHO.js";import"../chunk-2GOCSOX5.js";import{a as m}from"../chunk-7HVQTJAO.js";import{D as a}from"../chunk-TO35Z22E.js";import"../chunk-SBU7XQ42.js";import"../chunk-PLLN42GP.js";import"../chunk-NMFPLO65.js";import"../chunk-K6FJLTBX.js";import"../chunk-GQE2JYJW.js";import"../chunk-DJQ5RDDN.js";import{a as L}from"../chunk-FC546GTB.js";import{e as h}from"../chunk-LLHU72AA.js";var U=h(m(),1);import{Endpoints as q,ProcessorServiceImpl as G,State as j}from"@sentio/runtime";var I=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=T.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=T.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=T.MAIN_NET){let n=e.payload;for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.moveCallConfigs)for(let o of s.filters)if(u(r.contract.address)+"::"+o.function===n.function)return{data:{aptCall:{transaction:e}},handlerIds:[s.handlerId],handlerType:a.APT_CALL}}}testEvent(e,t=T.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}buildEventBinding(e,t=T.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events)if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{aptEvent:{transaction:e}},handlerIds:[r.handlerId],handlerType:a.APT_EVENT}}}};var v=class{server;constructor(e){this.server=e}testInstructions(e){return this.server.processBindings({bindings:e.map(t=>({data:{raw:new Uint8Array,solInstruction:t},handlerIds:[],handlerType:a.SOL_INSTRUCTION}))})}};var f=h(m(),1),B=class{server;constructor(e){this.server=e}testTrace(e,t=f.EthChainId.ETHEREUM){return this.testTraces([e],t)}testTraces(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildTraceBinding(r,t);if(!s)throw Error("Invalid test trace: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildTraceBinding(e,t=f.EthChainId.ETHEREUM){if(e.type!=="call"||!e.action.input)throw Error("Invalid test trace: "+JSON.stringify(e));let n=e.action.input.slice(0,10);for(let r of this.server.contractConfigs)if(r.contract?.chainId===t&&!(e.action.to?.toLowerCase()!==r.contract?.address.toLowerCase()&&r.contract?.address!=="*")){for(let s of r.traceConfigs)if(s.signature==n)return{data:{ethTrace:{trace:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_TRACE}}}testLog(e,t=f.EthChainId.ETHEREUM){return this.testLogs([e],t)}testLogs(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildLogBinding(r,t);if(!s)throw Error("Invalid test log: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildLogBinding(e,t=f.EthChainId.ETHEREUM){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t&&!(e.address.toLowerCase()!==n.contract?.address.toLowerCase()&&n.contract?.address!=="*"))for(let r of n.logConfigs)for(let s of r.filters){let o=!0;for(let c in s.topics){let d=e.topics[c],l=s.topics[c].hashes;if(l.length!==0&&!l.find(p=>p.toLowerCase()===d.toLowerCase())){o=!1;break}}if(o)return{data:{ethLog:{log:e,timestamp:new Date}},handlerIds:[r.handlerId],handlerType:a.ETH_LOG}}}testAccountLog(e,t,n=f.EthChainId.ETHEREUM){return this.testAccountLogs(e,[t],n)}testAccountLogs(e,t,n=f.EthChainId.ETHEREUM){let r=[];for(let s of t){let o=this.buildAccountLogBinding(e,s,n);if(!o)throw Error("Invalid test log: "+JSON.stringify(s));r.push(o)}return this.server.processBindings({bindings:r})}buildAccountLogBinding(e,t,n=f.EthChainId.ETHEREUM){for(let r of this.server.accountConfigs)if(r.chainId===n&&e.toLowerCase()===r.address.toLowerCase())for(let s of r.logConfigs)for(let o of s.filters){let c=!0;for(let d in o.topics){let l=t.topics[d],p=o.topics[d].hashes;if(p.length!==0&&!p.find(w=>w.toLowerCase()===l.toLowerCase())){c=!1;break}}if(c)return{data:{ethLog:{log:t,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.ETH_LOG}}}testBlock(e,t=f.EthChainId.ETHEREUM){return this.testBlocks([e],t)}testBlocks(e,t=f.EthChainId.ETHEREUM){let n=[];for(let r of e){let s=this.buildBlockBinding(r,t);if(!s)throw Error("Invalid test block: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildBlockBinding(e,t=f.EthChainId.ETHEREUM){let n={data:{ethBlock:{block:e}},handlerType:a.ETH_BLOCK,handlerIds:[]};for(let r of this.server.contractConfigs){if(r.contract?.chainId!==t)continue;let s=e.number;if(!(s<r.startBlock)&&!(r.endBlock!==0n&&s>=r.endBlock))for(let o of r.intervalConfigs)n.handlerIds.push(o.handlerId)}return n}};var S=class{server;constructor(e){this.server=e}testEntryFunctionCall(e,t=g.MAIN_NET){return this.testEntryFunctionCalls([e],t)}testEntryFunctionCalls(e,t=g.MAIN_NET){let n=[];for(let r of e){let s=this.buildEntryFunctionCallBinding(r,t);if(!s)throw Error("Invalid test transaction: "+JSON.stringify(r));n.push(s)}return this.server.processBindings({bindings:n})}buildEntryFunctionCallBinding(e,t=g.MAIN_NET){let n=_(e);for(let r of n){let s=[u(r.package),r.module,r.function].join(D);for(let o of this.server.contractConfigs)if(o.contract?.chainId===t){for(let c of o.moveCallConfigs)for(let d of c.filters)if(u(o.contract.address)+"::"+d.function===s)return{data:{suiCall:{transaction:e,timestamp:new Date,slot:10000n}},handlerIds:[c.handlerId],handlerType:a.SUI_CALL}}}}testEvent(e,t=g.MAIN_NET){let n=this.buildEventBinding(e,t);if(!n)throw Error("Invalid test event: "+JSON.stringify(e));return this.server.processBinding(n)}testGlobalTransaction(e,t=g.MAIN_NET){let n=[];for(let s of this.server.contractConfigs)if(s.contract?.address==="*")for(let o of s.moveCallConfigs)o.filters.length===1&&o.filters[0].function===""&&n.push(o.handlerId);if(n.length===0)throw Error("Invalid test global transaction: "+JSON.stringify(e));let r={handlerIds:n,handlerType:a.SUI_CALL,data:{suiCall:{transaction:e,timestamp:e.timestampMs?new Date(e.timestampMs):new Date,slot:BigInt(e.checkpoint||0)}}};return this.server.processBinding(r)}buildEventBinding(e,t=g.MAIN_NET){for(let n of this.server.contractConfigs)if(n.contract?.chainId===t){for(let r of n.moveEventConfigs)for(let s of r.filters)for(let o of e.events||[])if(u(n.contract.address)+"::"+s.type===E(o.type).qname)return{data:{suiEvent:{transaction:e,timestamp:new Date(e.timestampMs||0),slot:10000n}},handlerIds:[r.handlerId],handlerType:a.SUI_EVENT}}}};var N=class{server;constructor(e){this.server=e}testOnTransaction(e,t=F.TEST_NET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t){for(let s of r.fuelCallConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.filters[0]?.function;if(c)for(let d of e.status.receipts||[])d.receiptType=="CALL"&&d.param1==c&&n.push(o);else n.push(o)}for(let s of r.fuelLogConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL},c=s.logIds;for(let d of e.status.receipts||[])if((d.receiptType=="LOG"||d.receiptType=="LOG_DATA")&&c.includes(d.rb)){n.push(o);break}}for(let s of r.assetConfigs){let o={data:{fuelCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.FUEL_CALL};n.push(o)}}return n}};var R=h(m(),1),x={INJECTIVE_MAINNET:R.CosmosChainId.INJECTIVE_MAINNET,INJECTIVE_TESTNET:R.CosmosChainId.INJECTIVE_TESTNET};var P=class{server;constructor(e){this.server=e}testOnTransaction(e,t=x.INJECTIVE_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test transaction: "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.cosmosLogConfigs){let o={data:{cosmosCall:{transaction:e,timestamp:new Date}},handlerIds:[s.handlerId],handlerType:a.COSMOS_CALL},c=s.logFilters;for(let d of e.logs||[])if(d.events.find(l=>c.includes(l.type))){n.push(o);break}}return n}};var O=h(m(),1),y=class{server;constructor(e){this.server=e}testOnEvents(e,t=O.StarknetChainId.STARKNET_SEPOLIA){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[],r=Array.isArray(e)?e:[e];for(let s of r)for(let o of this.server.contractConfigs)if(o.contract?.chainId===t)for(let c of o.starknetEventConfigs){let d={data:{starknetEvents:{result:s,timestamp:new Date}},handlerIds:[c.handlerId],handlerType:a.STARKNET_EVENT},l=c.filters,p=s.keys;for(let w of p)for(let J of l)if(J.keys.includes(w))return n.push(d),n}return n}};var H=h(m(),1);var b=class{server;constructor(e){this.server=e}testOnTransactions(e,t=H.BTCChainId.BTC_TESTNET){let n=this.buildBinding(e,t);if(!n)throw Error("Invalid test : "+JSON.stringify(e));return this.server.processBindings({bindings:n})}buildBinding(e,t){let n=[];for(let r of this.server.contractConfigs)if(r.contract?.chainId===t)for(let s of r.btcTransactionConfigs){let o={data:{btcTransaction:e},handlerIds:[s.handlerId],handlerType:a.BTC_TRANSACTION};n.push(o)}return n}};var C={};function K(){j.reset()}var k=class{service;contractConfigs;accountConfigs;aptos;eth;solana;sui;fuel;cosmos;starknet;btc;constructor(e,t={}){K(),this.service=new G(e),this.aptos=new I(this),this.solana=new v(this),this.eth=new B(this),this.sui=new S(this),this.fuel=new N(this),this.cosmos=new P(this),this.starknet=new y(this),this.btc=new b(this);for(let n in U.CHAIN_MAP){let r=t[n]||"";q.INSTANCE.chainServer.set(n,r)}}async start(e={templateInstances:[]},t=C){let n=await this.service.start(e,t),r=await this.getConfig({});return this.contractConfigs=r.contractConfigs,this.accountConfigs=r.accountConfigs,n}stop(e,t=C){return this.service.stop(e,t)}getConfig(e,t=C){return this.service.getConfig(e,t)}processBindings(e,t=C){return this.service.processBindings(e,t)}processBinding(e,t=C){return this.service.processBindings({bindings:[e]},t)}processBindingsStream(e,t){throw new Error("Method not implemented.")}preprocessBindingsStream(e,t){throw new Error("Method not implemented.")}};function A(i){if(i!==void 0){if(i.doubleValue!==void 0)return i.doubleValue;if(i.bigInteger!==void 0){let e=M(i.bigInteger.data);return i.bigInteger.negative&&(e=-e),e}if(i.bigDecimal!==void 0)return new L(i.bigDecimal)}}function X(i,e){if(i){for(let t of i.counters)if(t.metadata?.name===e)return A(t.metricValue)}}function z(i,e){if(i){for(let t of i.gauges)if(t.metadata?.name===e)return A(t.metricValue)}}var V=h(m(),1);import{Endpoints as Q}from"@sentio/runtime";function W(i){let e=[];Array.isArray(i)||(i=[i]);for(let t of Object.keys(V.CHAIN_MAP)){let n="TEST_ENDPOINT_"+t,r=process.env[n];r&&(e.push(t),Q.INSTANCE.chainServer.set(t,r))}for(let t of i)if(!e.includes(t))return!1;return!0}export{A as MetricValueToNumber,k as TestProcessorServer,X as firstCounterValue,z as firstGaugeValue,W as loadTestProvidersFromEnv};
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk-bundle",
3
- "version": "2.42.0-rc.7",
3
+ "version": "2.42.0-rc.8",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -48,7 +48,7 @@
48
48
  "!{lib,src}/*/tests"
49
49
  ],
50
50
  "dependencies": {
51
- "@sentio/runtime": "^2.42.0-rc.7"
51
+ "@sentio/runtime": "^2.42.0-rc.8"
52
52
  },
53
53
  "peerDependencies": {},
54
54
  "devDependencies": {},
package/src/btc/filter.ts CHANGED
@@ -2,7 +2,9 @@ import {
2
2
  BTCTransactionFilter,
3
3
  BTCTransactionFilter_Condition,
4
4
  BTCTransactionFilter_Filter,
5
- BTCTransactionFilter_VinFilter
5
+ BTCTransactionFilter_Filters,
6
+ BTCTransactionFilter_VinFilter,
7
+ BTCTransactionFilter_VOutFilter
6
8
  } from '@sentio/protos'
7
9
  import { serializeRichValue } from '../store/util.js'
8
10
  import { BigDecimal } from '@sentio/bigdecimal'
@@ -65,8 +67,9 @@ export type TransactionFilters = TransactionFilter | TransactionFilter[]
65
67
 
66
68
  function toVinFilter(inputFilter?: VinFilter | VinFilter[]): BTCTransactionFilter_VinFilter | undefined {
67
69
  if (inputFilter) {
70
+ const ret = BTCTransactionFilter_VinFilter.create()
68
71
  const filters = []
69
- const vouts = []
72
+ const vouts: Filter<VOutFields>[] = []
70
73
  const txs: TransactionFilters = []
71
74
 
72
75
  for (const f of Array.isArray(inputFilter) ? inputFilter : [inputFilter]) {
@@ -79,27 +82,35 @@ function toVinFilter(inputFilter?: VinFilter | VinFilter[]): BTCTransactionFilte
79
82
  txs.push(preTransaction)
80
83
  }
81
84
  }
82
-
83
- const protoFilters = convertFilters(filters)
84
-
85
- return {
86
- filters: protoFilters
87
- ? {
88
- filters: protoFilters
89
- }
90
- : undefined,
91
- preVOut: vouts?.length > 0 ? convertFilters(vouts as Filter<VOutFields>[])?.[0] : undefined,
92
- preTransaction: txs.length > 0 ? filters2Proto(txs)?.[0] : undefined
85
+ ret.filters = BTCTransactionFilter_Filters.create({
86
+ filters: convertFilters(filters)
87
+ })
88
+
89
+ if (vouts.length > 0) {
90
+ const voutFilters = convertFilters(vouts)
91
+ if (voutFilters && voutFilters.length > 0) {
92
+ ret.preVOut = voutFilters[0]
93
+ }
94
+ }
95
+ if (txs.length > 0) {
96
+ ret.preTransaction = filters2Proto(txs)?.[0]
93
97
  }
98
+
99
+ return ret
94
100
  }
95
101
 
96
102
  return undefined
97
103
  }
98
104
 
99
- function toVOutFilter(outputFilter?: VOutFilter | VOutFilter[]) {
105
+ function toVOutFilter(outputFilter?: VOutFilter | VOutFilter[]): BTCTransactionFilter_VOutFilter | undefined {
100
106
  if (outputFilter) {
107
+ const ret = BTCTransactionFilter_VOutFilter.create()
101
108
  const filters = Array.isArray(outputFilter) ? outputFilter : ([outputFilter] as Filter<VOutFields>[])
102
- return convertFilters(filters)?.[0]
109
+ ret.filters = BTCTransactionFilter_Filters.create({
110
+ filters: convertFilters(filters)
111
+ })
112
+
113
+ return ret
103
114
  }
104
115
  return undefined
105
116
  }
@@ -116,7 +127,7 @@ export function filters2Proto(filter: TransactionFilters): BTCTransactionFilter[
116
127
  }
117
128
 
118
129
  function toCondition(value: Condition | Comparable): BTCTransactionFilter_Condition {
119
- const ret: BTCTransactionFilter_Condition = {}
130
+ const ret: BTCTransactionFilter_Condition = BTCTransactionFilter_Condition.create()
120
131
  if (value instanceof Date) {
121
132
  ret.eq = serializeRichValue(value)
122
133
  }
@@ -178,9 +189,7 @@ function convertFilters<T extends string>(filters?: Array<Filter<T>>): BTCTransa
178
189
  if (filters && filters.length > 0) {
179
190
  const ret: BTCTransactionFilter_Filter[] = []
180
191
  for (const filter of filters) {
181
- const f: BTCTransactionFilter_Filter = {
182
- conditions: {}
183
- }
192
+ const f: BTCTransactionFilter_Filter = BTCTransactionFilter_Filter.create()
184
193
  for (const [key, value] of Object.entries(filter)) {
185
194
  f.conditions[key] = toCondition(value as any)
186
195
  }
@@ -188,5 +197,5 @@ function convertFilters<T extends string>(filters?: Array<Filter<T>>): BTCTransa
188
197
  }
189
198
  return ret
190
199
  }
191
- return undefined
200
+ return []
192
201
  }
@@ -1,4 +0,0 @@
1
- import { createRequire as createRequireSdkShim } from 'module'; const require = createRequireSdkShim(import.meta.url);
2
- import{D as m,Lc as A,W as C,bd as o,fd as _,kd as x,tc as y}from"./chunk-TO35Z22E.js";import{a as F}from"./chunk-FC546GTB.js";import{e as B,g as b}from"./chunk-LLHU72AA.js";var d=class extends _{constructor(e,n,s,i){super({});this.chainId=e;this.name=n;this.tx=s;this.address=i}getMetaDataInternal(e,n){return{address:this.address,contractName:this.name,blockNumber:BigInt(this.tx.block_number??0),transactionIndex:0,transactionHash:this.tx.transaction_hash,chainId:this.getChainId(),name:e,logIndex:0,labels:y(n)}}getChainId(){return this.chainId}};import{ListStateStorage as I}from"@sentio/runtime";var g=class extends I{},l=g;b(l,"INSTANCE",new g);var p=class{constructor(t){this.config=t}callHandlers=[];static bind(t){let e=new p(t);return l.INSTANCE.addValue(e),e}onTransaction(t,e){let n={handler:async s=>{let i=s.transaction,a=new d(this.config.chainId,this.config.name??this.config.address??"",i,this.config.address??i.vout[0].script_address);return await t(i,a),a.stopAndGetResult()},filter:e};return this.callHandlers.push(n),this}};function k(r){if(r){let t=[],e=[],n=[];for(let i of Array.isArray(r)?r:[r]){let{preVOut:a,preTransaction:h,...V}=i;t.push(V),a&&e.push(a),h&&n.push(h)}let s=u(t);return{filters:s?{filters:s}:void 0,preVOut:e?.length>0?u(e)?.[0]:void 0,preTransaction:n.length>0?f(n)?.[0]:void 0}}}function O(r){if(r){let t=Array.isArray(r)?r:[r];return u(t)?.[0]}}function f(r){return(Array.isArray(r)?r:[r]).map(e=>({filter:u(e.filter),inputFilter:k(e.inputFilter),outputFilter:O(e.outputFilter)}))}function P(r){let t={};r instanceof Date&&(t.eq=o(r)),typeof r=="number"&&(t.eq=o(r)),typeof r=="string"&&(t.eq=o(r)),r instanceof F&&(t.eq=o(r)),typeof r=="bigint"&&(t.eq=o(r)),typeof r=="boolean"&&(t.eq=o(r)),Array.isArray(r)&&(t.in={values:r.map(e=>o(e))});for(let[e,n]of Object.entries(r))switch(e){case"prefix":case"contains":case"notContains":t[e]=n.toString();break;case"length":t.lengthEq=n;break;case"lengthGt":case"lengthLt":t[e]=n;break;case"hasAny":case"hasAll":case"in":t[e]={values:n.map(s=>o(s))};break;case"eq":case"gt":case"gte":case"lt":case"lte":case"ne":t[e]=o(n);break;default:throw new Error("Unknown condition op: "+e)}return t}function u(r){if(r&&r.length>0){let t=[];for(let e of r){let n={conditions:{}};for(let[s,i]of Object.entries(e))n.conditions[s]=P(i);t.push(n)}return t}}import{errorString as N,GLOBAL_CONFIG as R,mergeProcessResults as w,Plugin as D,PluginManager as S,USER_PROCESSOR as H}from"@sentio/runtime";var c=B(A(),1);var T=class extends D{name="BTCPlugin";handlers={txHandlers:[]};async configure(t){let e={txHandlers:[]};for(let n of l.INSTANCE.getValues()){let s=C.fromPartial({processorType:H,contract:{name:n.config.name,chainId:n.config.chainId.toString(),address:n.config.address||"*",abi:""},startBlock:n.config.startBlock,endBlock:n.config.endBlock});for(let i of n.callHandlers){let a=e.txHandlers.push(i.handler)-1;i.filter?s.btcTransactionConfigs.push({filters:f(i.filter),handlerId:a}):s.contract?.address!="*"&&s.btcTransactionConfigs.push({filters:f({outputFilter:{script_address:n.config.address}}),handlerId:a})}t.contractConfigs.push(s)}this.handlers=e}supportedHandlers=[m.BTC_TRANSACTION];processBinding(t){switch(t.handlerType){case m.BTC_TRANSACTION:return this.processTransaction(t);default:throw new c.ServerError(c.Status.INVALID_ARGUMENT,"No handle type registered "+t.handlerType)}}async start(t){}stateDiff(t){return x.INSTANCE.getValues().length!==t.templateInstances.length}async processTransaction(t){if(!t.data?.btcTransaction)throw new c.ServerError(c.Status.INVALID_ARGUMENT,"BTCEvents can't be null");let e=[],n=t.data?.btcTransaction;for(let s of t.handlerIds){let i=this.handlers.txHandlers[s](t.data?.btcTransaction).catch(a=>{throw new c.ServerError(c.Status.INTERNAL,"error processing transaction: "+JSON.stringify(n)+`
3
- `+N(a))});R.execution.sequential&&await i,e.push(i)}return w(await Promise.all(e))}};S.INSTANCE.register(new T);export{d as a,l as b,p as c,f as d,T as e};
4
- //# sourceMappingURL=chunk-PEB2BU4O.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/btc/types.ts","../src/btc/btc-processor.ts","../src/btc/filter.ts","../src/btc/btc-plugin.ts"],"sourcesContent":["import { BaseContext, Labels, normalizeLabels } from '../core/index.js'\nimport { RecordMetaData } from '@sentio/protos'\nimport { ChainId } from '@sentio/chain'\n\nexport type Vin = {\n vin_index: number\n coinbase?: string\n spent_transaction_hash?: string\n spent_output_index?: number\n sequence: number\n witness?: string[]\n script_asm: string\n script_hex: string\n value: number\n addresses?: string[]\n pre_vout?: Vout\n pre_transaction?: Transaction\n}\n\nexport type Vout = {\n value: number\n vout_index: number\n script_asm: string\n script_hex: string\n script_type: string\n script_address: string\n script_reg_sigs: number\n}\n\nexport type Transaction = {\n transaction_hash: string\n transaction_index: number\n block_hash: string\n block_number: number\n block_timestamp: Date\n size: number\n virtual_size: number\n version: number\n lock_time: number\n input_count: number\n output_count: number\n vin: Vin[]\n vout: Vout[]\n}\n\nexport type Block = {\n block_hash: string\n block_number: number\n block_timestamp: Date\n size: number\n stripped_size: number\n weight: number\n version: number\n merkle_root: string\n nonce: number\n bits: string\n difficulty: number\n previous_hash: string\n next_hash: string\n transaction_count: number\n}\n\nexport class BTCContext extends BaseContext {\n constructor(\n readonly chainId: string,\n readonly name: string,\n readonly tx: Transaction,\n readonly address: string\n ) {\n super({})\n }\n\n protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.name,\n blockNumber: BigInt(this.tx.block_number ?? 0),\n transactionIndex: 0,\n transactionHash: this.tx.transaction_hash,\n chainId: this.getChainId(),\n name: name,\n logIndex: 0,\n labels: normalizeLabels(labels)\n }\n }\n\n getChainId(): ChainId {\n return this.chainId as ChainId\n }\n}\n","import { ListStateStorage } from '@sentio/runtime'\nimport { BTCContext, Transaction } from './types.js'\nimport { Data_BTCTransaction, ProcessResult } from '@sentio/protos'\nimport { TransactionFilters } from './filter.js'\n\nexport class BTCProcessorState extends ListStateStorage<BTCProcessor> {\n static INSTANCE = new BTCProcessorState()\n}\n\nexport class BTCProcessor {\n callHandlers: CallHandler<Data_BTCTransaction>[] = []\n\n constructor(readonly config: BTCProcessorConfig) {}\n\n static bind(config: BTCProcessorConfig): BTCProcessor {\n const processor = new BTCProcessor(config)\n BTCProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n public onTransaction(\n handler: (transaction: Transaction, ctx: BTCContext) => void | Promise<void>,\n filter?: TransactionFilters\n ) {\n const callHandler = {\n handler: async (call: Data_BTCTransaction) => {\n const tx = call.transaction as Transaction\n\n const ctx = new BTCContext(\n this.config.chainId,\n this.config.name ?? this.config.address ?? '',\n tx,\n this.config.address ?? tx.vout[0].script_address\n )\n await handler(tx, ctx)\n return ctx.stopAndGetResult()\n },\n filter\n }\n this.callHandlers.push(callHandler)\n return this\n }\n}\n\ninterface BTCProcessorConfig {\n chainId: string\n name?: string\n address?: string\n startBlock?: bigint\n endBlock?: bigint\n}\n\nexport type CallHandler<T> = {\n handler: (call: T) => Promise<ProcessResult>\n filter?: TransactionFilters\n}\n","import {\n BTCTransactionFilter,\n BTCTransactionFilter_Condition,\n BTCTransactionFilter_Filter,\n BTCTransactionFilter_VinFilter\n} from '@sentio/protos'\nimport { serializeRichValue } from '../store/util.js'\nimport { BigDecimal } from '@sentio/bigdecimal'\nimport { Transaction, Vin, Vout } from './types.js'\n\nexport type TransactionFields = keyof Omit<Transaction, 'vin' | 'vout'>\n\nexport type VinFields = keyof Omit<Vin, 'pre_vout' | 'pre_transaction'>\n\nexport type VOutFields = keyof Vout\n\nexport type Filter<F extends string> = {\n [K in F]?: Condition | Comparable\n}\n\nexport type Condition = {\n eq?: Comparable\n gt?: Comparable\n gte?: Comparable\n lt?: Comparable\n lte?: Comparable\n ne?: Comparable\n // string has the prefix\n prefix?: string\n // string contains\n contains?: string\n notContains?: string\n length?: number\n lengthGt?: number\n lengthLt?: number\n // array contains any of the values\n hasAny?: Array<Comparable>\n // array contains all the values\n hasAll?: Array<Comparable>\n in?: Array<Comparable>\n}\n\nexport type Filters<T extends string> = Filter<T> | Filter<T>[]\n\nexport type VinFilter = Filter<VinFields> & {\n preVOut?: Filter<VOutFields>\n preTransaction?: {\n filter?: Array<Filter<TransactionFields>>\n outputFilter?: Filters<VOutFields>\n // can't have inputFilter here, we can only support one level of nesting\n }\n}\n\nexport type VOutFilter = Filter<VOutFields>\n\nexport type TransactionFilter = {\n inputFilter?: VinFilter | VinFilter[]\n outputFilter?: VOutFilter | VOutFilter[]\n filter?: Array<Filter<TransactionFields>>\n}\n\nexport type Comparable = number | BigDecimal | bigint | Date | string | boolean\n\nexport type TransactionFilters = TransactionFilter | TransactionFilter[]\n\nfunction toVinFilter(inputFilter?: VinFilter | VinFilter[]): BTCTransactionFilter_VinFilter | undefined {\n if (inputFilter) {\n const filters = []\n const vouts = []\n const txs: TransactionFilters = []\n\n for (const f of Array.isArray(inputFilter) ? inputFilter : [inputFilter]) {\n const { preVOut, preTransaction, ...rest } = f\n filters.push(rest)\n if (preVOut) {\n vouts.push(preVOut)\n }\n if (preTransaction) {\n txs.push(preTransaction)\n }\n }\n\n const protoFilters = convertFilters(filters)\n\n return {\n filters: protoFilters\n ? {\n filters: protoFilters\n }\n : undefined,\n preVOut: vouts?.length > 0 ? convertFilters(vouts as Filter<VOutFields>[])?.[0] : undefined,\n preTransaction: txs.length > 0 ? filters2Proto(txs)?.[0] : undefined\n }\n }\n\n return undefined\n}\n\nfunction toVOutFilter(outputFilter?: VOutFilter | VOutFilter[]) {\n if (outputFilter) {\n const filters = Array.isArray(outputFilter) ? outputFilter : ([outputFilter] as Filter<VOutFields>[])\n return convertFilters(filters)?.[0]\n }\n return undefined\n}\n\nexport function filters2Proto(filter: TransactionFilters): BTCTransactionFilter[] {\n const filters = Array.isArray(filter) ? filter : [filter]\n return filters.map((f) => {\n return {\n filter: convertFilters(f.filter),\n inputFilter: toVinFilter(f.inputFilter),\n outputFilter: toVOutFilter(f.outputFilter)\n } as BTCTransactionFilter\n })\n}\n\nfunction toCondition(value: Condition | Comparable): BTCTransactionFilter_Condition {\n const ret: BTCTransactionFilter_Condition = {}\n if (value instanceof Date) {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'number') {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'string') {\n ret.eq = serializeRichValue(value)\n }\n if (value instanceof BigDecimal) {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'bigint') {\n ret.eq = serializeRichValue(value)\n }\n if (typeof value === 'boolean') {\n ret.eq = serializeRichValue(value)\n }\n if (Array.isArray(value)) {\n ret.in = { values: value.map((v) => serializeRichValue(v)) }\n }\n\n for (const [k, v] of Object.entries(value)) {\n switch (k) {\n case 'prefix':\n case 'contains':\n case 'notContains':\n ret[k] = v.toString()\n break\n case 'length':\n ret['lengthEq'] = v\n break\n case 'lengthGt':\n case 'lengthLt':\n ret[k] = v\n break\n case 'hasAny':\n case 'hasAll':\n case 'in':\n ret[k] = { values: v.map((v: any) => serializeRichValue(v)) }\n break\n case 'eq':\n case 'gt':\n case 'gte':\n case 'lt':\n case 'lte':\n case 'ne':\n ret[k] = serializeRichValue(v)\n break\n default:\n throw new Error('Unknown condition op: ' + k)\n }\n }\n\n return ret\n}\n\nfunction convertFilters<T extends string>(filters?: Array<Filter<T>>): BTCTransactionFilter_Filter[] | undefined {\n if (filters && filters.length > 0) {\n const ret: BTCTransactionFilter_Filter[] = []\n for (const filter of filters) {\n const f: BTCTransactionFilter_Filter = {\n conditions: {}\n }\n for (const [key, value] of Object.entries(filter)) {\n f.conditions[key] = toCondition(value as any)\n }\n ret.push(f)\n }\n return ret\n }\n return undefined\n}\n","import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n ContractConfig,\n Data_BTCTransaction,\n DataBinding,\n HandlerType,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { BTCProcessorState } from './btc-processor.js'\nimport { filters2Proto, TransactionFilter } from './filter.js'\n\ninterface Handlers {\n txHandlers: ((trace: Data_BTCTransaction) => Promise<ProcessResult>)[]\n}\n\nexport class BTCPlugin extends Plugin {\n name: string = 'BTCPlugin'\n handlers: Handlers = {\n txHandlers: []\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n txHandlers: []\n }\n\n for (const processor of BTCProcessorState.INSTANCE.getValues()) {\n const contractConfig = ContractConfig.fromPartial({\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: processor.config.chainId.toString(),\n address: processor.config.address || '*',\n abi: ''\n },\n startBlock: processor.config.startBlock,\n endBlock: processor.config.endBlock\n })\n for (const callHandler of processor.callHandlers) {\n const handlerId = handlers.txHandlers.push(callHandler.handler) - 1\n\n if (callHandler.filter) {\n contractConfig.btcTransactionConfigs.push({\n filters: filters2Proto(callHandler.filter),\n handlerId\n })\n } else if (contractConfig.contract?.address != '*') {\n contractConfig.btcTransactionConfigs.push({\n filters: filters2Proto({\n outputFilter: {\n script_address: processor.config.address\n }\n } as TransactionFilter),\n handlerId\n })\n }\n }\n\n // Finish up a contract\n config.contractConfigs.push(contractConfig)\n }\n\n this.handlers = handlers\n }\n\n supportedHandlers = [HandlerType.BTC_TRANSACTION]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.BTC_TRANSACTION:\n return this.processTransaction(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async start(request: StartRequest) {}\n\n stateDiff(config: ProcessConfigResponse): boolean {\n return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length\n }\n\n async processTransaction(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.btcTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"BTCEvents can't be null\")\n }\n\n const promises: Promise<ProcessResult>[] = []\n\n const result = binding.data?.btcTransaction\n\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.txHandlers[handlerId](binding.data?.btcTransaction).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing transaction: ' + JSON.stringify(result) + '\\n' + errorString(e)\n )\n })\n if (GLOBAL_CONFIG.execution.sequential) {\n await promise\n }\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n}\n\nPluginManager.INSTANCE.register(new BTCPlugin())\n"],"mappings":"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","names":["BTCContext","BaseContext","chainId","name","tx","address","labels","normalizeLabels","ListStateStorage","_BTCProcessorState","ListStateStorage","BTCProcessorState","__publicField","BTCProcessor","config","processor","handler","filter","callHandler","call","tx","ctx","BTCContext","toVinFilter","inputFilter","filters","vouts","txs","f","preVOut","preTransaction","rest","protoFilters","convertFilters","filters2Proto","toVOutFilter","outputFilter","filter","toCondition","value","ret","serializeRichValue","BigDecimal","v","k","key","errorString","GLOBAL_CONFIG","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","BTCPlugin","Plugin","config","handlers","processor","BTCProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","callHandler","handlerId","filters2Proto","HandlerType","request","TemplateInstanceState","binding","promises","result","promise","e","errorString","GLOBAL_CONFIG","mergeProcessResults","PluginManager"]}