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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/browser/Diviner.d.cts +2 -2
  2. package/dist/browser/Diviner.d.mts +2 -2
  3. package/dist/browser/Diviner.d.ts +2 -2
  4. package/dist/browser/Witness.d.cts +2 -2
  5. package/dist/browser/Witness.d.mts +2 -2
  6. package/dist/browser/Witness.d.ts +2 -2
  7. package/dist/browser/index.cjs +69 -52
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.d.cts +5 -5
  10. package/dist/browser/index.d.mts +5 -5
  11. package/dist/browser/index.d.ts +5 -5
  12. package/dist/browser/{index.js → index.mjs} +72 -53
  13. package/dist/browser/index.mjs.map +1 -0
  14. package/dist/neutral/Diviner.d.cts +2 -2
  15. package/dist/neutral/Diviner.d.mts +2 -2
  16. package/dist/neutral/Diviner.d.ts +2 -2
  17. package/dist/neutral/Witness.d.cts +2 -2
  18. package/dist/neutral/Witness.d.mts +2 -2
  19. package/dist/neutral/Witness.d.ts +2 -2
  20. package/dist/neutral/index.cjs +69 -52
  21. package/dist/neutral/index.cjs.map +1 -1
  22. package/dist/neutral/index.d.cts +5 -5
  23. package/dist/neutral/index.d.mts +5 -5
  24. package/dist/neutral/index.d.ts +5 -5
  25. package/dist/neutral/{index.js → index.mjs} +72 -53
  26. package/dist/neutral/index.mjs.map +1 -0
  27. package/dist/node/Diviner.d.cts +2 -2
  28. package/dist/node/Diviner.d.mts +2 -2
  29. package/dist/node/Diviner.d.ts +2 -2
  30. package/dist/node/Witness.d.cts +2 -2
  31. package/dist/node/Witness.d.mts +2 -2
  32. package/dist/node/Witness.d.ts +2 -2
  33. package/dist/node/index.cjs +76 -56
  34. package/dist/node/index.cjs.map +1 -1
  35. package/dist/node/index.d.cts +5 -5
  36. package/dist/node/index.d.mts +5 -5
  37. package/dist/node/index.d.ts +5 -5
  38. package/dist/node/index.mjs +184 -0
  39. package/dist/node/index.mjs.map +1 -0
  40. package/package.json +42 -42
  41. package/src/Diviner.ts +4 -4
  42. package/src/Witness.ts +8 -8
  43. package/src/index.ts +5 -5
  44. package/dist/browser/index.js.map +0 -1
  45. package/dist/neutral/index.js.map +0 -1
  46. package/dist/node/index.js +0 -162
  47. package/dist/node/index.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
7
  var __export = (target, all) => {
7
8
  for (var name in all)
8
9
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -50,23 +51,32 @@ var EvmCallDivinerLabels = {
50
51
  var import_payload_model = require("@xyo-network/payload-model");
51
52
  var EvmCallSchema = "network.xyo.evm.call";
52
53
  var EvmCallResultSchema = "network.xyo.evm.call.result";
53
- var isEvmCallSuccess = (payload) => {
54
+ var isEvmCallSuccess = /* @__PURE__ */ __name((payload) => {
54
55
  return payload?.result !== void 0;
55
- };
56
- var isEvmCallFailure = (payload) => {
56
+ }, "isEvmCallSuccess");
57
+ var isEvmCallFailure = /* @__PURE__ */ __name((payload) => {
57
58
  return payload?.error !== void 0;
58
- };
59
+ }, "isEvmCallFailure");
59
60
  var isEvmCallResult = (0, import_payload_model.isPayloadOfSchemaType)(EvmCallResultSchema);
60
- var asEvmCallSuccess = (payload) => isEvmCallSuccess(payload) ? payload : void 0;
61
- var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0;
61
+ var asEvmCallSuccess = /* @__PURE__ */ __name((payload) => isEvmCallSuccess(payload) ? payload : void 0, "asEvmCallSuccess");
62
+ var asEvmCallFailure = /* @__PURE__ */ __name((payload) => isEvmCallFailure(payload) ? payload : void 0, "asEvmCallFailure");
62
63
 
63
64
  // src/Diviner.ts
64
65
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
65
66
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
66
67
  var EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.AbstractDiviner {
67
- static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
68
+ static {
69
+ __name(this, "EvmCallDiviner");
70
+ }
71
+ static configSchemas = [
72
+ ...super.configSchemas,
73
+ EvmCallDivinerConfigSchema
74
+ ];
68
75
  static defaultConfigSchema = EvmCallDivinerConfigSchema;
69
- static labels = { ...super.labels, ...EvmCallDivinerLabels };
76
+ static labels = {
77
+ ...super.labels,
78
+ ...EvmCallDivinerLabels
79
+ };
70
80
  static findCallResult(address, functionName, payloads) {
71
81
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
72
82
  return asEvmCallSuccess(foundPayload)?.result;
@@ -96,23 +106,24 @@ var EvmCallDiviner = class _EvmCallDiviner extends import_diviner_abstract.Abstr
96
106
  return prev;
97
107
  }, {})
98
108
  );
99
- const result = await Promise.all(
100
- addresses.map(async (address) => {
101
- const foundCallResults = callResults.filter((callResult) => callResult.address === address);
102
- const results = {
103
- results: await this.reduceResults(foundCallResults),
104
- ...this.contractInfoRequiredFields(foundCallResults)
105
- };
106
- return results;
107
- })
108
- );
109
+ const result = await Promise.all(addresses.map(async (address) => {
110
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address);
111
+ const results = {
112
+ results: await this.reduceResults(foundCallResults),
113
+ ...this.contractInfoRequiredFields(foundCallResults)
114
+ };
115
+ return results;
116
+ }));
109
117
  return result;
110
118
  }
111
119
  reduceResults(callResults) {
112
120
  return callResults.reduce((prev, callResult) => {
113
121
  const typedCallResult = asEvmCallSuccess(callResult);
114
122
  if (typedCallResult) {
115
- prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result };
123
+ prev[callResult.functionName] = {
124
+ args: typedCallResult.args,
125
+ result: typedCallResult?.result
126
+ };
116
127
  }
117
128
  return prev;
118
129
  }, {});
@@ -131,7 +142,13 @@ var import_payload_model3 = require("@xyo-network/payload-model");
131
142
  var import_witness_evm_abstract = require("@xyo-network/witness-evm-abstract");
132
143
  var import_ethers = require("ethers");
133
144
  var EvmCallWitness = class extends import_witness_evm_abstract.AbstractEvmWitness {
134
- static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
145
+ static {
146
+ __name(this, "EvmCallWitness");
147
+ }
148
+ static configSchemas = [
149
+ ...super.configSchemas,
150
+ EvmCallWitnessConfigSchema
151
+ ];
135
152
  static defaultConfigSchema = EvmCallWitnessConfigSchema;
136
153
  get abi() {
137
154
  return (0, import_assert2.assertEx)(this.config.abi, () => "Missing abi");
@@ -140,38 +157,38 @@ var EvmCallWitness = class extends import_witness_evm_abstract.AbstractEvmWitnes
140
157
  await this.started("throw");
141
158
  await this.getProviders();
142
159
  try {
143
- const observations = await Promise.all(
144
- inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
145
- const validatedAddress = (0, import_assert2.assertEx)(address ?? this.config.address, () => "Missing address");
146
- const validatedFunctionName = (0, import_assert2.assertEx)(functionName ?? this.config.functionName, () => "Missing address");
147
- const mergedArgs = [...args ?? this.config.args ?? []];
148
- const provider = await this.getProvider(true, true);
149
- const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
150
- const erc1967Status = await (0, import_erc1967_witness.getErc1967SlotStatus)(provider, validatedAddress, block);
151
- const erc1822Status = await (0, import_erc1822_witness.getErc1822SlotStatus)(provider, validatedAddress, block);
152
- const implementation = (0, import_hex.isHexZero)(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
153
- const contract = new import_ethers.Contract(implementation, this.abi, provider);
154
- let transformedResult;
155
- try {
156
- const result = await contract[validatedFunctionName](...mergedArgs);
157
- transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
158
- } catch {
159
- }
160
- const observation = {
161
- address: validatedAddress,
162
- args: mergedArgs,
163
- block,
164
- chainId: Number((await provider.getNetwork()).chainId),
165
- functionName: validatedFunctionName,
166
- result: transformedResult,
167
- schema: EvmCallResultSchema
168
- };
169
- if (implementation !== validatedAddress) {
170
- observation.implementation = implementation;
171
- }
172
- return observation;
173
- })
174
- );
160
+ const observations = await Promise.all(inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
161
+ const validatedAddress = (0, import_assert2.assertEx)(address ?? this.config.address, () => "Missing address");
162
+ const validatedFunctionName = (0, import_assert2.assertEx)(functionName ?? this.config.functionName, () => "Missing address");
163
+ const mergedArgs = [
164
+ ...args ?? this.config.args ?? []
165
+ ];
166
+ const provider = await this.getProvider(true, true);
167
+ const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
168
+ const erc1967Status = await (0, import_erc1967_witness.getErc1967SlotStatus)(provider, validatedAddress, block);
169
+ const erc1822Status = await (0, import_erc1822_witness.getErc1822SlotStatus)(provider, validatedAddress, block);
170
+ const implementation = (0, import_hex.isHexZero)(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
171
+ const contract = new import_ethers.Contract(implementation, this.abi, provider);
172
+ let transformedResult;
173
+ try {
174
+ const result = await contract[validatedFunctionName](...mergedArgs);
175
+ transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
176
+ } catch {
177
+ }
178
+ const observation = {
179
+ address: validatedAddress,
180
+ args: mergedArgs,
181
+ block,
182
+ chainId: Number((await provider.getNetwork()).chainId),
183
+ functionName: validatedFunctionName,
184
+ result: transformedResult,
185
+ schema: EvmCallResultSchema
186
+ };
187
+ if (implementation !== validatedAddress) {
188
+ observation.implementation = implementation;
189
+ }
190
+ return observation;
191
+ }));
175
192
  return observations;
176
193
  } catch (ex) {
177
194
  const error = ex;
@@ -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.js'\nexport * from './Labels.js'\nexport * from './model.js'\nexport * from './Payload.js'\nexport * from './Witness.js'\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.js'\nimport { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload.js'\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.js'\nimport { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload.js'\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
+ {"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","configSchemas","defaultConfigSchema","labels","EvmCallDivinerLabels","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","EvmCallWitnessConfigSchema","import_assert","import_payload_model","EvmCallWitness","AbstractEvmWitness","configSchemas","EvmCallWitnessConfigSchema","defaultConfigSchema","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"]}
@@ -1,6 +1,6 @@
1
- export * from './Diviner.js';
2
- export * from './Labels.js';
3
- export * from './model.js';
4
- export * from './Payload.js';
5
- export * from './Witness.js';
1
+ export * from './Diviner.ts';
2
+ export * from './Labels.ts';
3
+ export * from './model.ts';
4
+ export * from './Payload.ts';
5
+ export * from './Witness.ts';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
- export * from './Diviner.js';
2
- export * from './Labels.js';
3
- export * from './model.js';
4
- export * from './Payload.js';
5
- export * from './Witness.js';
1
+ export * from './Diviner.ts';
2
+ export * from './Labels.ts';
3
+ export * from './model.ts';
4
+ export * from './Payload.ts';
5
+ export * from './Witness.ts';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
- export * from './Diviner.js';
2
- export * from './Labels.js';
3
- export * from './model.js';
4
- export * from './Payload.js';
5
- export * from './Witness.js';
1
+ export * from './Diviner.ts';
2
+ export * from './Labels.ts';
3
+ export * from './model.ts';
4
+ export * from './Payload.ts';
5
+ export * from './Witness.ts';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/Diviner.ts
2
5
  import { assertEx } from "@xylabs/assert";
3
6
  import { AbstractDiviner } from "@xyo-network/diviner-abstract";
@@ -12,23 +15,32 @@ var EvmCallDivinerLabels = {
12
15
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
13
16
  var EvmCallSchema = "network.xyo.evm.call";
14
17
  var EvmCallResultSchema = "network.xyo.evm.call.result";
15
- var isEvmCallSuccess = (payload) => {
18
+ var isEvmCallSuccess = /* @__PURE__ */ __name((payload) => {
16
19
  return payload?.result !== void 0;
17
- };
18
- var isEvmCallFailure = (payload) => {
20
+ }, "isEvmCallSuccess");
21
+ var isEvmCallFailure = /* @__PURE__ */ __name((payload) => {
19
22
  return payload?.error !== void 0;
20
- };
23
+ }, "isEvmCallFailure");
21
24
  var isEvmCallResult = isPayloadOfSchemaType(EvmCallResultSchema);
22
- var asEvmCallSuccess = (payload) => isEvmCallSuccess(payload) ? payload : void 0;
23
- var asEvmCallFailure = (payload) => isEvmCallFailure(payload) ? payload : void 0;
25
+ var asEvmCallSuccess = /* @__PURE__ */ __name((payload) => isEvmCallSuccess(payload) ? payload : void 0, "asEvmCallSuccess");
26
+ var asEvmCallFailure = /* @__PURE__ */ __name((payload) => isEvmCallFailure(payload) ? payload : void 0, "asEvmCallFailure");
24
27
 
25
28
  // src/Diviner.ts
26
29
  var EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
27
30
  var EvmCallResultsSchema = "network.xyo.evm.call.results";
28
31
  var EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
29
- static configSchemas = [...super.configSchemas, EvmCallDivinerConfigSchema];
32
+ static {
33
+ __name(this, "EvmCallDiviner");
34
+ }
35
+ static configSchemas = [
36
+ ...super.configSchemas,
37
+ EvmCallDivinerConfigSchema
38
+ ];
30
39
  static defaultConfigSchema = EvmCallDivinerConfigSchema;
31
- static labels = { ...super.labels, ...EvmCallDivinerLabels };
40
+ static labels = {
41
+ ...super.labels,
42
+ ...EvmCallDivinerLabels
43
+ };
32
44
  static findCallResult(address, functionName, payloads) {
33
45
  const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
34
46
  return asEvmCallSuccess(foundPayload)?.result;
@@ -58,23 +70,24 @@ var EvmCallDiviner = class _EvmCallDiviner extends AbstractDiviner {
58
70
  return prev;
59
71
  }, {})
60
72
  );
61
- const result = await Promise.all(
62
- addresses.map(async (address) => {
63
- const foundCallResults = callResults.filter((callResult) => callResult.address === address);
64
- const results = {
65
- results: await this.reduceResults(foundCallResults),
66
- ...this.contractInfoRequiredFields(foundCallResults)
67
- };
68
- return results;
69
- })
70
- );
73
+ const result = await Promise.all(addresses.map(async (address) => {
74
+ const foundCallResults = callResults.filter((callResult) => callResult.address === address);
75
+ const results = {
76
+ results: await this.reduceResults(foundCallResults),
77
+ ...this.contractInfoRequiredFields(foundCallResults)
78
+ };
79
+ return results;
80
+ }));
71
81
  return result;
72
82
  }
73
83
  reduceResults(callResults) {
74
84
  return callResults.reduce((prev, callResult) => {
75
85
  const typedCallResult = asEvmCallSuccess(callResult);
76
86
  if (typedCallResult) {
77
- prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result };
87
+ prev[callResult.functionName] = {
88
+ args: typedCallResult.args,
89
+ result: typedCallResult?.result
90
+ };
78
91
  }
79
92
  return prev;
80
93
  }, {});
@@ -93,7 +106,13 @@ import { isPayloadOfSchemaType as isPayloadOfSchemaType3 } from "@xyo-network/pa
93
106
  import { AbstractEvmWitness } from "@xyo-network/witness-evm-abstract";
94
107
  import { Contract } from "ethers";
95
108
  var EvmCallWitness = class extends AbstractEvmWitness {
96
- static configSchemas = [...super.configSchemas, EvmCallWitnessConfigSchema];
109
+ static {
110
+ __name(this, "EvmCallWitness");
111
+ }
112
+ static configSchemas = [
113
+ ...super.configSchemas,
114
+ EvmCallWitnessConfigSchema
115
+ ];
97
116
  static defaultConfigSchema = EvmCallWitnessConfigSchema;
98
117
  get abi() {
99
118
  return assertEx2(this.config.abi, () => "Missing abi");
@@ -102,38 +121,38 @@ var EvmCallWitness = class extends AbstractEvmWitness {
102
121
  await this.started("throw");
103
122
  await this.getProviders();
104
123
  try {
105
- const observations = await Promise.all(
106
- inPayloads.filter(isPayloadOfSchemaType3(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
107
- const validatedAddress = assertEx2(address ?? this.config.address, () => "Missing address");
108
- const validatedFunctionName = assertEx2(functionName ?? this.config.functionName, () => "Missing address");
109
- const mergedArgs = [...args ?? this.config.args ?? []];
110
- const provider = await this.getProvider(true, true);
111
- const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
112
- const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block);
113
- const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block);
114
- const implementation = isHexZero(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
115
- const contract = new Contract(implementation, this.abi, provider);
116
- let transformedResult;
117
- try {
118
- const result = await contract[validatedFunctionName](...mergedArgs);
119
- transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
120
- } catch {
121
- }
122
- const observation = {
123
- address: validatedAddress,
124
- args: mergedArgs,
125
- block,
126
- chainId: Number((await provider.getNetwork()).chainId),
127
- functionName: validatedFunctionName,
128
- result: transformedResult,
129
- schema: EvmCallResultSchema
130
- };
131
- if (implementation !== validatedAddress) {
132
- observation.implementation = implementation;
133
- }
134
- return observation;
135
- })
136
- );
124
+ const observations = await Promise.all(inPayloads.filter(isPayloadOfSchemaType3(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
125
+ const validatedAddress = assertEx2(address ?? this.config.address, () => "Missing address");
126
+ const validatedFunctionName = assertEx2(functionName ?? this.config.functionName, () => "Missing address");
127
+ const mergedArgs = [
128
+ ...args ?? this.config.args ?? []
129
+ ];
130
+ const provider = await this.getProvider(true, true);
131
+ const block = this.config.block ?? payloadBlock ?? await provider.getBlockNumber();
132
+ const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block);
133
+ const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block);
134
+ const implementation = isHexZero(erc1967Status.slots.implementation ?? "0x00") ? erc1822Status.implementation : erc1967Status.implementation;
135
+ const contract = new Contract(implementation, this.abi, provider);
136
+ let transformedResult;
137
+ try {
138
+ const result = await contract[validatedFunctionName](...mergedArgs);
139
+ transformedResult = typeof result === "bigint" ? `0x${result.toString(16)}` : result;
140
+ } catch {
141
+ }
142
+ const observation = {
143
+ address: validatedAddress,
144
+ args: mergedArgs,
145
+ block,
146
+ chainId: Number((await provider.getNetwork()).chainId),
147
+ functionName: validatedFunctionName,
148
+ result: transformedResult,
149
+ schema: EvmCallResultSchema
150
+ };
151
+ if (implementation !== validatedAddress) {
152
+ observation.implementation = implementation;
153
+ }
154
+ return observation;
155
+ }));
137
156
  return observations;
138
157
  } catch (ex) {
139
158
  const error = ex;
@@ -157,4 +176,4 @@ export {
157
176
  isEvmCallResult,
158
177
  isEvmCallSuccess
159
178
  };
160
- //# sourceMappingURL=index.js.map
179
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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","configSchemas","defaultConfigSchema","labels","EvmCallDivinerLabels","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","EvmCallWitnessConfigSchema","assertEx","isHexZero","getErc1822SlotStatus","getErc1967SlotStatus","isPayloadOfSchemaType","AbstractEvmWitness","Contract","EvmCallWitness","AbstractEvmWitness","configSchemas","EvmCallWitnessConfigSchema","defaultConfigSchema","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"]}
@@ -2,8 +2,8 @@ import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
4
  import { Payload, Schema } from '@xyo-network/payload-model';
5
- import { EvmCallDivinerLabels } from './Labels.js';
6
- import { EvmCallResult } from './Payload.js';
5
+ import { EvmCallDivinerLabels } from './Labels.ts';
6
+ import { EvmCallResult } from './Payload.ts';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
8
8
  export declare const EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
9
9
  export type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema;
@@ -2,8 +2,8 @@ import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
4
  import { Payload, Schema } from '@xyo-network/payload-model';
5
- import { EvmCallDivinerLabels } from './Labels.js';
6
- import { EvmCallResult } from './Payload.js';
5
+ import { EvmCallDivinerLabels } from './Labels.ts';
6
+ import { EvmCallResult } from './Payload.ts';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
8
8
  export declare const EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
9
9
  export type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema;
@@ -2,8 +2,8 @@ import { Promisable } from '@xylabs/promise';
2
2
  import { AbstractDiviner } from '@xyo-network/diviner-abstract';
3
3
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model';
4
4
  import { Payload, Schema } from '@xyo-network/payload-model';
5
- import { EvmCallDivinerLabels } from './Labels.js';
6
- import { EvmCallResult } from './Payload.js';
5
+ import { EvmCallDivinerLabels } from './Labels.ts';
6
+ import { EvmCallResult } from './Payload.ts';
7
7
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined];
8
8
  export declare const EvmCallDivinerConfigSchema = "network.xyo.evm.call.diviner.config";
9
9
  export type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema;
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;
@@ -1,7 +1,7 @@
1
1
  import { Schema } from '@xyo-network/payload-model';
2
2
  import { AbstractEvmWitness } from '@xyo-network/witness-evm-abstract';
3
- import { EvmCallWitnessParams } from './model.js';
4
- import { EvmCall, EvmCallResult } from './Payload.js';
3
+ import { EvmCallWitnessParams } from './model.ts';
4
+ import { EvmCall, EvmCallResult } from './Payload.ts';
5
5
  export declare class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractEvmWitness<TParams, EvmCall, EvmCallResult> {
6
6
  static readonly configSchemas: Schema[];
7
7
  static readonly defaultConfigSchema: Schema;