@xyo-network/evm-call-witness 2.99.5 → 2.99.6

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.
@@ -2,11 +2,7 @@
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __reflectGet = Reflect.get;
8
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
6
  var __export = (target, all) => {
11
7
  for (var name in all)
12
8
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -20,8 +16,6 @@ var __copyProps = (to, from, except, desc) => {
20
16
  return to;
21
17
  };
22
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
25
19
 
26
20
  // src/index.ts
27
21
  var src_exports = {};
@@ -56,20 +50,23 @@ var EvmCallDivinerLabels = {
56
50
  var import_payload_model = require("@xyo-network/payload-model");
57
51
  var EvmCallSchema = "network.xyo.evm.call";
58
52
  var EvmCallResultSchema = "network.xyo.evm.call.result";
59
- var isEvmCallSuccess = /* @__PURE__ */ __name((payload) => {
53
+ var isEvmCallSuccess = (payload) => {
60
54
  return (payload == null ? void 0 : payload.result) !== void 0;
61
- }, "isEvmCallSuccess");
62
- var isEvmCallFailure = /* @__PURE__ */ __name((payload) => {
55
+ };
56
+ var isEvmCallFailure = (payload) => {
63
57
  return (payload == null ? void 0 : payload.error) !== void 0;
64
- }, "isEvmCallFailure");
58
+ };
65
59
  var isEvmCallResult = (0, import_payload_model.isPayloadOfSchemaType)(EvmCallResultSchema);
66
- var asEvmCallSuccess = /* @__PURE__ */ __name((payload) => isEvmCallSuccess(payload) ? payload : void 0, "asEvmCallSuccess");
67
- var asEvmCallFailure = /* @__PURE__ */ __name((payload) => isEvmCallFailure(payload) ? payload : void 0, "asEvmCallFailure");
60
+ var asEvmCallSuccess = (payload) => isEvmCallSuccess(payload) ? payload : void 0;
61
+ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0;
68
62
 
69
63
  // src/Diviner.ts
70
64
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
71
65
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
72
- var _EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.AbstractDiviner {
66
+ var EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.AbstractDiviner {
67
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
68
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
69
+ static labels = { ...super.labels, ...EvmCallDivinerLabels };
73
70
  static findCallResult(address, functionName, payloads) {
74
71
  var _a;
75
72
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
@@ -101,40 +98,28 @@ var _EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.Abst
101
98
  return prev;
102
99
  }, {})
103
100
  );
104
- const result = await Promise.all(addresses.map(async (address) => {
105
- const foundCallResults = callResults.filter((callResult) => callResult.address === address);
106
- const results = {
107
- results: await this.reduceResults(foundCallResults),
108
- ...this.contractInfoRequiredFields(foundCallResults)
109
- };
110
- return results;
111
- }));
101
+ const result = await Promise.all(
102
+ addresses.map(async (address) => {
103
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address);
104
+ const results = {
105
+ results: await this.reduceResults(foundCallResults),
106
+ ...this.contractInfoRequiredFields(foundCallResults)
107
+ };
108
+ return results;
109
+ })
110
+ );
112
111
  return result;
113
112
  }
114
113
  reduceResults(callResults) {
115
114
  return callResults.reduce((prev, callResult) => {
116
115
  const typedCallResult = asEvmCallSuccess(callResult);
117
116
  if (typedCallResult) {
118
- prev[callResult.functionName] = {
119
- args: typedCallResult.args,
120
- result: typedCallResult == null ? void 0 : typedCallResult.result
121
- };
117
+ prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult == null ? void 0 : typedCallResult.result };
122
118
  }
123
119
  return prev;
124
120
  }, {});
125
121
  }
126
122
  };
127
- __name(_EvmCallDiviner, "EvmCallDiviner");
128
- __publicField(_EvmCallDiviner, "configSchemas", [
129
- ...__superGet(_EvmCallDiviner, _EvmCallDiviner, "configSchemas"),
130
- EvmCallDivinerConfigSchema
131
- ]);
132
- __publicField(_EvmCallDiviner, "defaultConfigSchema", EvmCallDivinerConfigSchema);
133
- __publicField(_EvmCallDiviner, "labels", {
134
- ...__superGet(_EvmCallDiviner, _EvmCallDiviner, "labels"),
135
- ...EvmCallDivinerLabels
136
- });
137
- var EvmCallDiviner = _EvmCallDiviner;
138
123
 
139
124
  // src/model.ts
140
125
  var EvmCallWitnessConfigSchema = "network.xyo.evm.call.witness.config";
@@ -147,7 +132,9 @@ var import_erc1967_witness = require("@xyo-network/erc1967-witness");
147
132
  var import_payload_model3 = require("@xyo-network/payload-model");
148
133
  var import_witness_evm_abstract = require("@xyo-network/witness-evm-abstract");
149
134
  var import_ethers = require("ethers");
150
- var _EvmCallWitness = class _EvmCallWitness extends import_witness_evm_abstract.AbstractEvmWitness {
135
+ var EvmCallWitness = class extends import_witness_evm_abstract.AbstractEvmWitness {
136
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
137
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
151
138
  get abi() {
152
139
  return (0, import_assert2.assertEx)(this.config.abi, () => "Missing abi");
153
140
  }
@@ -155,38 +142,38 @@ var _EvmCallWitness = class _EvmCallWitness extends import_witness_evm_abstract.
155
142
  await this.started("throw");
156
143
  await this.getProviders();
157
144
  try {
158
- const observations = await Promise.all(inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
159
- const validatedAddress = (0, import_assert2.assertEx)(address ?? this.config.address, () => "Missing address");
160
- const validatedFunctionName = (0, import_assert2.assertEx)(functionName ?? this.config.functionName, () => "Missing address");
161
- const mergedArgs = [
162
- ...args ?? this.config.args ?? []
163
- ];
164
- const provider = await this.getProvider(true, true);
165
- const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
166
- const erc1967Status = await (0, import_erc1967_witness.getErc1967SlotStatus)(provider, validatedAddress, block);
167
- const erc1822Status = await (0, import_erc1822_witness.getErc1822SlotStatus)(provider, validatedAddress, block);
168
- const implementation = (0, import_hex.isHexZero)(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
169
- const contract = new import_ethers.Contract(implementation, this.abi, provider);
170
- let transformedResult;
171
- try {
172
- const result = await contract[validatedFunctionName](...mergedArgs);
173
- transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
174
- } catch {
175
- }
176
- const observation = {
177
- address: validatedAddress,
178
- args: mergedArgs,
179
- block,
180
- chainId: Number((await provider.getNetwork()).chainId),
181
- functionName: validatedFunctionName,
182
- result: transformedResult,
183
- schema: EvmCallResultSchema
184
- };
185
- if (implementation !== validatedAddress) {
186
- observation.implementation = implementation;
187
- }
188
- return observation;
189
- }));
145
+ const observations = await Promise.all(
146
+ inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
147
+ const validatedAddress = (0, import_assert2.assertEx)(address ?? this.config.address, () => "Missing address");
148
+ const validatedFunctionName = (0, import_assert2.assertEx)(functionName ?? this.config.functionName, () => "Missing address");
149
+ const mergedArgs = [...args ?? this.config.args ?? []];
150
+ const provider = await this.getProvider(true, true);
151
+ const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
152
+ const erc1967Status = await (0, import_erc1967_witness.getErc1967SlotStatus)(provider, validatedAddress, block);
153
+ const erc1822Status = await (0, import_erc1822_witness.getErc1822SlotStatus)(provider, validatedAddress, block);
154
+ const implementation = (0, import_hex.isHexZero)(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
155
+ const contract = new import_ethers.Contract(implementation, this.abi, provider);
156
+ let transformedResult;
157
+ try {
158
+ const result = await contract[validatedFunctionName](...mergedArgs);
159
+ transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
160
+ } catch {
161
+ }
162
+ const observation = {
163
+ address: validatedAddress,
164
+ args: mergedArgs,
165
+ block,
166
+ chainId: Number((await provider.getNetwork()).chainId),
167
+ functionName: validatedFunctionName,
168
+ result: transformedResult,
169
+ schema: EvmCallResultSchema
170
+ };
171
+ if (implementation !== validatedAddress) {
172
+ observation.implementation = implementation;
173
+ }
174
+ return observation;
175
+ })
176
+ );
190
177
  return observations;
191
178
  } catch (ex) {
192
179
  const error = ex;
@@ -195,13 +182,6 @@ var _EvmCallWitness = class _EvmCallWitness extends import_witness_evm_abstract.
195
182
  }
196
183
  }
197
184
  };
198
- __name(_EvmCallWitness, "EvmCallWitness");
199
- __publicField(_EvmCallWitness, "configSchemas", [
200
- ...__superGet(_EvmCallWitness, _EvmCallWitness, "configSchemas"),
201
- EvmCallWitnessConfigSchema
202
- ]);
203
- __publicField(_EvmCallWitness, "defaultConfigSchema", EvmCallWitnessConfigSchema);
204
- var EvmCallWitness = _EvmCallWitness;
205
185
  // Annotate the CommonJS export names for ESM import in node:
206
186
  0 && (module.exports = {
207
187
  EvmCallDiviner,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner.ts'\nexport * from './Labels.ts'\nexport * from './model.ts'\nexport * from './Payload.ts'\nexport * from './Witness.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels.ts'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload.ts'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static override labels: EvmCallDivinerLabels = { ...super.labels, ...EvmCallDivinerLabels }\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find(payload => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter(callResult => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model.ts'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload.ts'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n // calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n // const error = ex as Error & { code: string }\n // this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n // console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["import_payload_model","EvmCallDivinerLabels","EvmCallSchema","EvmCallResultSchema","isEvmCallSuccess","payload","result","undefined","isEvmCallFailure","error","isEvmCallResult","isPayloadOfSchemaType","asEvmCallSuccess","asEvmCallFailure","EvmCallDivinerConfigSchema","EvmCallResultsSchema","EvmCallDiviner","AbstractDiviner","findCallResult","address","functionName","payloads","foundPayload","find","payload","asEvmCallSuccess","result","matchingExistingField","objs","field","expectedValue","at","didNotMatch","reduce","prev","obj","undefined","contractInfoRequiredFields","callResults","assertEx","chainId","schema","divineHandler","inPayloads","filter","isPayloadOfSchemaType","EvmCallResultSchema","addresses","Object","keys","Promise","all","map","foundCallResults","callResult","results","reduceResults","typedCallResult","args","configSchemas","defaultConfigSchema","labels","EvmCallDivinerLabels","EvmCallWitnessConfigSchema","import_assert","import_payload_model","EvmCallWitness","AbstractEvmWitness","abi","assertEx","config","observeHandler","inPayloads","started","getProviders","observations","Promise","all","filter","isPayloadOfSchemaType","EvmCallSchema","map","functionName","args","address","block","payloadBlock","validatedAddress","validatedFunctionName","mergedArgs","provider","getProvider","getBlockNumber","erc1967Status","getErc1967SlotStatus","erc1822Status","getErc1822SlotStatus","implementation","isHexZero","slots","contract","Contract","transformedResult","result","toString","observation","chainId","Number","getNetwork","schema","EvmCallResultSchema","ex","error","console","log","name","message","configSchemas","EvmCallWitnessConfigSchema","defaultConfigSchema"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner.ts'\nexport * from './Labels.ts'\nexport * from './model.ts'\nexport * from './Payload.ts'\nexport * from './Witness.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels.ts'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload.ts'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static override labels: EvmCallDivinerLabels = { ...super.labels, ...EvmCallDivinerLabels }\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find(payload => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter(callResult => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model.ts'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload.ts'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n // calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n // const error = ex as Error & { code: string }\n // this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n // console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["import_payload_model","result","import_assert","import_payload_model"]}
@@ -1,11 +1,3 @@
1
- var __defProp = Object.defineProperty;
2
- var __getProtoOf = Object.getPrototypeOf;
3
- var __reflectGet = Reflect.get;
4
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
- var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
8
-
9
1
  // src/Diviner.ts
10
2
  import { assertEx } from "@xylabs/assert";
11
3
  import { AbstractDiviner } from "@xyo-network/diviner-abstract";
@@ -20,20 +12,23 @@ var EvmCallDivinerLabels = {
20
12
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
21
13
  var EvmCallSchema = "network.xyo.evm.call";
22
14
  var EvmCallResultSchema = "network.xyo.evm.call.result";
23
- var isEvmCallSuccess = /* @__PURE__ */ __name((payload) => {
15
+ var isEvmCallSuccess = (payload) => {
24
16
  return (payload == null ? void 0 : payload.result) !== void 0;
25
- }, "isEvmCallSuccess");
26
- var isEvmCallFailure = /* @__PURE__ */ __name((payload) => {
17
+ };
18
+ var isEvmCallFailure = (payload) => {
27
19
  return (payload == null ? void 0 : payload.error) !== void 0;
28
- }, "isEvmCallFailure");
20
+ };
29
21
  var isEvmCallResult = isPayloadOfSchemaType(EvmCallResultSchema);
30
- var asEvmCallSuccess = /* @__PURE__ */ __name((payload) => isEvmCallSuccess(payload) ? payload : void 0, "asEvmCallSuccess");
31
- var asEvmCallFailure = /* @__PURE__ */ __name((payload) => isEvmCallFailure(payload) ? payload : void 0, "asEvmCallFailure");
22
+ var asEvmCallSuccess = (payload) => isEvmCallSuccess(payload) ? payload : void 0;
23
+ var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0;
32
24
 
33
25
  // src/Diviner.ts
34
26
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
35
27
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
36
- var _EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
28
+ var EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
29
+ static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
30
+ static defaultConfigSchema = EvmCallDivinerConfigSchema;
31
+ static labels = { ...super.labels, ...EvmCallDivinerLabels };
37
32
  static findCallResult(address, functionName, payloads) {
38
33
  var _a;
39
34
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
@@ -65,40 +60,28 @@ var _EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
65
60
  return prev;
66
61
  }, {})
67
62
  );
68
- const result = await Promise.all(addresses.map(async (address) => {
69
- const foundCallResults = callResults.filter((callResult) => callResult.address === address);
70
- const results = {
71
- results: await this.reduceResults(foundCallResults),
72
- ...this.contractInfoRequiredFields(foundCallResults)
73
- };
74
- return results;
75
- }));
63
+ const result = await Promise.all(
64
+ addresses.map(async (address) => {
65
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address);
66
+ const results = {
67
+ results: await this.reduceResults(foundCallResults),
68
+ ...this.contractInfoRequiredFields(foundCallResults)
69
+ };
70
+ return results;
71
+ })
72
+ );
76
73
  return result;
77
74
  }
78
75
  reduceResults(callResults) {
79
76
  return callResults.reduce((prev, callResult) => {
80
77
  const typedCallResult = asEvmCallSuccess(callResult);
81
78
  if (typedCallResult) {
82
- prev[callResult.functionName] = {
83
- args: typedCallResult.args,
84
- result: typedCallResult == null ? void 0 : typedCallResult.result
85
- };
79
+ prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult == null ? void 0 : typedCallResult.result };
86
80
  }
87
81
  return prev;
88
82
  }, {});
89
83
  }
90
84
  };
91
- __name(_EvmCallDiviner, "EvmCallDiviner");
92
- __publicField(_EvmCallDiviner, "configSchemas", [
93
- ...__superGet(_EvmCallDiviner, _EvmCallDiviner, "configSchemas"),
94
- EvmCallDivinerConfigSchema
95
- ]);
96
- __publicField(_EvmCallDiviner, "defaultConfigSchema", EvmCallDivinerConfigSchema);
97
- __publicField(_EvmCallDiviner, "labels", {
98
- ...__superGet(_EvmCallDiviner, _EvmCallDiviner, "labels"),
99
- ...EvmCallDivinerLabels
100
- });
101
- var EvmCallDiviner = _EvmCallDiviner;
102
85
 
103
86
  // src/model.ts
104
87
  var EvmCallWitnessConfigSchema = "network.xyo.evm.call.witness.config";
@@ -111,7 +94,9 @@ import { getErc1967SlotStatus } from "@xyo-network/erc1967-witness";
111
94
  import { isPayloadOfSchemaType as isPayloadOfSchemaType3 } from "@xyo-network/payload-model";
112
95
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
113
96
  import { Contract } from "ethers";
114
- var _EvmCallWitness = class _EvmCallWitness extends AbstractEvmWitness {
97
+ var EvmCallWitness = class extends AbstractEvmWitness {
98
+ static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
99
+ static defaultConfigSchema = EvmCallWitnessConfigSchema;
115
100
  get abi() {
116
101
  return assertEx2(this.config.abi, () => "Missing abi");
117
102
  }
@@ -119,38 +104,38 @@ var _EvmCallWitness = class _EvmCallWitness extends AbstractEvmWitness {
119
104
  await this.started("throw");
120
105
  await this.getProviders();
121
106
  try {
122
- const observations = await Promise.all(inPayloads.filter(isPayloadOfSchemaType3(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
123
- const validatedAddress = assertEx2(address ?? this.config.address, () => "Missing address");
124
- const validatedFunctionName = assertEx2(functionName ?? this.config.functionName, () => "Missing address");
125
- const mergedArgs = [
126
- ...args ?? this.config.args ?? []
127
- ];
128
- const provider = await this.getProvider(true, true);
129
- const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
130
- const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block);
131
- const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block);
132
- const implementation = isHexZero(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
133
- const contract = new Contract(implementation, this.abi, provider);
134
- let transformedResult;
135
- try {
136
- const result = await contract[validatedFunctionName](...mergedArgs);
137
- transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
138
- } catch {
139
- }
140
- const observation = {
141
- address: validatedAddress,
142
- args: mergedArgs,
143
- block,
144
- chainId: Number((await provider.getNetwork()).chainId),
145
- functionName: validatedFunctionName,
146
- result: transformedResult,
147
- schema: EvmCallResultSchema
148
- };
149
- if (implementation !== validatedAddress) {
150
- observation.implementation = implementation;
151
- }
152
- return observation;
153
- }));
107
+ const observations = await Promise.all(
108
+ inPayloads.filter(isPayloadOfSchemaType3(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
109
+ const validatedAddress = assertEx2(address ?? this.config.address, () => "Missing address");
110
+ const validatedFunctionName = assertEx2(functionName ?? this.config.functionName, () => "Missing address");
111
+ const mergedArgs = [...args ?? this.config.args ?? []];
112
+ const provider = await this.getProvider(true, true);
113
+ const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
114
+ const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block);
115
+ const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block);
116
+ const implementation = isHexZero(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
117
+ const contract = new Contract(implementation, this.abi, provider);
118
+ let transformedResult;
119
+ try {
120
+ const result = await contract[validatedFunctionName](...mergedArgs);
121
+ transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
122
+ } catch {
123
+ }
124
+ const observation = {
125
+ address: validatedAddress,
126
+ args: mergedArgs,
127
+ block,
128
+ chainId: Number((await provider.getNetwork()).chainId),
129
+ functionName: validatedFunctionName,
130
+ result: transformedResult,
131
+ schema: EvmCallResultSchema
132
+ };
133
+ if (implementation !== validatedAddress) {
134
+ observation.implementation = implementation;
135
+ }
136
+ return observation;
137
+ })
138
+ );
154
139
  return observations;
155
140
  } catch (ex) {
156
141
  const error = ex;
@@ -159,13 +144,6 @@ var _EvmCallWitness = class _EvmCallWitness extends AbstractEvmWitness {
159
144
  }
160
145
  }
161
146
  };
162
- __name(_EvmCallWitness, "EvmCallWitness");
163
- __publicField(_EvmCallWitness, "configSchemas", [
164
- ...__superGet(_EvmCallWitness, _EvmCallWitness, "configSchemas"),
165
- EvmCallWitnessConfigSchema
166
- ]);
167
- __publicField(_EvmCallWitness, "defaultConfigSchema", EvmCallWitnessConfigSchema);
168
- var EvmCallWitness = _EvmCallWitness;
169
147
  export {
170
148
  EvmCallDiviner,
171
149
  EvmCallDivinerConfigSchema,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels.ts'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload.ts'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static override labels: EvmCallDivinerLabels = { ...super.labels, ...EvmCallDivinerLabels }\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find(payload => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter(callResult => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model.ts'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload.ts'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n // calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n // const error = ex as Error & { code: string }\n // this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n // console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["assertEx","AbstractDiviner","isPayloadOfSchemaType","EvmCallDivinerLabels","isPayloadOfSchemaType","EvmCallSchema","EvmCallResultSchema","isEvmCallSuccess","payload","result","undefined","isEvmCallFailure","error","isEvmCallResult","isPayloadOfSchemaType","asEvmCallSuccess","asEvmCallFailure","EvmCallDivinerConfigSchema","EvmCallResultsSchema","EvmCallDiviner","AbstractDiviner","findCallResult","address","functionName","payloads","foundPayload","find","payload","asEvmCallSuccess","result","matchingExistingField","objs","field","expectedValue","at","didNotMatch","reduce","prev","obj","undefined","contractInfoRequiredFields","callResults","assertEx","chainId","schema","divineHandler","inPayloads","filter","isPayloadOfSchemaType","EvmCallResultSchema","addresses","Object","keys","Promise","all","map","foundCallResults","callResult","results","reduceResults","typedCallResult","args","configSchemas","defaultConfigSchema","labels","EvmCallDivinerLabels","EvmCallWitnessConfigSchema","assertEx","isHexZero","getErc1822SlotStatus","getErc1967SlotStatus","isPayloadOfSchemaType","AbstractEvmWitness","Contract","EvmCallWitness","AbstractEvmWitness","abi","assertEx","config","observeHandler","inPayloads","started","getProviders","observations","Promise","all","filter","isPayloadOfSchemaType","EvmCallSchema","map","functionName","args","address","block","payloadBlock","validatedAddress","validatedFunctionName","mergedArgs","provider","getProvider","getBlockNumber","erc1967Status","getErc1967SlotStatus","erc1822Status","getErc1822SlotStatus","implementation","isHexZero","slots","contract","Contract","transformedResult","result","toString","observation","chainId","Number","getNetwork","schema","EvmCallResultSchema","ex","error","console","log","name","message","configSchemas","EvmCallWitnessConfigSchema","defaultConfigSchema"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/Labels.ts","../../src/Payload.ts","../../src/model.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\nimport { EvmCallDivinerLabels } from './Labels.ts'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload.ts'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'\nexport type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema\n\nexport type EvmCallDivinerConfig = DivinerConfig<{\n schema: EvmCallDivinerConfigSchema\n}>\nexport type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>\n\nexport const EvmCallResultsSchema = 'network.xyo.evm.call.results'\nexport type EvmCallResultsSchema = typeof EvmCallResultsSchema\n\nexport type EvmCallResults = Payload<\n {\n address: string\n chainId: number\n results?: Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n },\n EvmCallResultsSchema\n>\n\nexport class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallDivinerConfigSchema\n static override labels: EvmCallDivinerLabels = { ...super.labels, ...EvmCallDivinerLabels }\n\n protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {\n const foundPayload = payloads.find(payload => payload.functionName === functionName && payload.address === address)\n return asEvmCallSuccess(foundPayload)?.result as TResult | undefined\n }\n\n protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {\n const expectedValue = objs.at(0)?.[field] as R\n // eslint-disable-next-line unicorn/no-array-reduce\n const didNotMatch = objs.reduce((prev, obj) => {\n return prev || obj[field] !== expectedValue\n }, false)\n return didNotMatch ? undefined : expectedValue\n }\n\n protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {\n return {\n address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), () => 'Mismatched address'),\n chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), () => 'Mismatched chainId'),\n schema: EvmCallResultsSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))\n const addresses = Object.keys(\n // eslint-disable-next-line unicorn/no-array-reduce\n callResults.reduce<Record<string, boolean>>((prev, result) => {\n if (result.address) {\n prev[result.address] = true\n }\n return prev\n }, {}),\n )\n const result = await Promise.all(\n addresses.map(async (address) => {\n const foundCallResults = callResults.filter(callResult => callResult.address === address)\n const results: EvmCallResults = {\n results: await this.reduceResults(foundCallResults),\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return results\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {\n // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<\n Record<\n string,\n {\n args?: unknown[]\n result: unknown\n }\n >\n >((prev, callResult) => {\n const typedCallResult = asEvmCallSuccess(callResult)\n if (typedCallResult) {\n prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }\n }\n return prev\n }, {})\n }\n}\n","import { Labels } from '@xyo-network/module-model'\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport interface EvmCallDivinerLabels extends Labels {\n 'network.xyo.crypto.contract.info': 'diviner'\n}\n\n/**\n * Labels for Crypto Contract Diviner components\n */\nexport const EvmCallDivinerLabels: EvmCallDivinerLabels = {\n 'network.xyo.crypto.contract.info': 'diviner',\n}\n","import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const EvmCallSchema = 'network.xyo.evm.call'\nexport type EvmCallSchema = typeof EvmCallSchema\n\nexport type EvmCall = Payload<\n {\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallSchema\n>\n\nexport const EvmCallResultSchema = 'network.xyo.evm.call.result'\nexport type EvmCallResultSchema = typeof EvmCallResultSchema\n\nexport type EvmCallResultBase = Payload<\n {\n address: string\n args: unknown[]\n block?: number\n chainId: number\n functionName: string\n implementation?: string\n },\n EvmCallResultSchema\n>\n\nexport type EvmCallSuccess = EvmCallResultBase & {\n result: unknown\n}\n\nexport type EvmCallFailure = EvmCallResultBase & {\n error: string\n}\n\nexport type EvmCallResult = EvmCallSuccess | EvmCallFailure\n\nexport const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {\n return (payload as EvmCallSuccess | undefined)?.result !== undefined\n}\n\nexport const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {\n return (payload as EvmCallFailure | undefined)?.error !== undefined\n}\n\nexport const isEvmCallResult = isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema)\n\nexport const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)\n\nexport const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)\n","import { EvmWitnessConfig, EvmWitnessParams } from '@xyo-network/witness-evm-abstract'\nimport { JsonFragment } from 'ethers'\n\nexport type Abi = string | ReadonlyArray<JsonFragment | string>\n\nexport const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'\nexport type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema\n\nexport type EvmCallWitnessConfig = EvmWitnessConfig<\n {\n abi?: Abi\n address?: string\n args?: unknown[]\n block?: number\n functionName?: string\n },\n EvmCallWitnessConfigSchema\n>\n\nexport type EvmCallWitnessParams = EvmWitnessParams<EvmCallWitnessConfig>\n","import { assertEx } from '@xylabs/assert'\nimport { isHexZero } from '@xylabs/hex'\nimport { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'\nimport { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract'\nimport { Contract } from 'ethers'\n\nimport { EvmCallWitnessConfigSchema, EvmCallWitnessParams } from './model.ts'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload.ts'\n\nexport class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EvmCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = EvmCallWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\n\n protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {\n await this.started('throw')\n // calling it here to make sure we rests the cache\n await this.getProviders()\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<EvmCall>(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {\n const validatedAddress = assertEx(address ?? this.config.address, () => 'Missing address')\n const validatedFunctionName = assertEx(functionName ?? this.config.functionName, () => 'Missing address')\n const mergedArgs = [...(args ?? this.config.args ?? [])]\n\n const provider = await this.getProvider(true, true)\n\n const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())\n\n // Check if ERC-1967 Upgradeable\n const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)\n\n // Check if ERC-1822 Upgradeable\n const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)\n\n const implementation = isHexZero(erc1967Status.slots.implementation ?? '0x00') ? erc1822Status.implementation : erc1967Status.implementation\n\n const contract = new Contract(implementation, this.abi, provider)\n let transformedResult: unknown\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result\n } catch {\n // const error = ex as Error & { code: string }\n // this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)\n }\n const observation: EvmCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n block,\n chainId: Number((await provider.getNetwork()).chainId),\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: EvmCallResultSchema,\n }\n if (implementation !== validatedAddress) {\n observation.implementation = implementation\n }\n // console.log(`observation: ${JSON.stringify(observation, null, 2)}`)\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n throw error\n }\n }\n}\n"],"mappings":"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","names":["isPayloadOfSchemaType","isPayloadOfSchemaType","result","assertEx","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType"]}