@xyo-network/crypto-contract-function-read-plugin 2.77.20 → 2.78.1

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 (48) hide show
  1. package/dist/browser/CryptoContractDiviner.d.cts +3 -4
  2. package/dist/browser/CryptoContractDiviner.d.cts.map +1 -1
  3. package/dist/browser/CryptoContractDiviner.d.mts +3 -4
  4. package/dist/browser/CryptoContractDiviner.d.mts.map +1 -1
  5. package/dist/browser/CryptoContractDiviner.d.ts +3 -4
  6. package/dist/browser/CryptoContractDiviner.d.ts.map +1 -1
  7. package/dist/browser/Plugin.d.cts +33 -3
  8. package/dist/browser/Plugin.d.cts.map +1 -1
  9. package/dist/browser/Plugin.d.mts +33 -3
  10. package/dist/browser/Plugin.d.mts.map +1 -1
  11. package/dist/browser/Plugin.d.ts +33 -3
  12. package/dist/browser/Plugin.d.ts.map +1 -1
  13. package/dist/browser/Witness.d.cts +5 -5
  14. package/dist/browser/Witness.d.cts.map +1 -1
  15. package/dist/browser/Witness.d.mts +5 -5
  16. package/dist/browser/Witness.d.mts.map +1 -1
  17. package/dist/browser/Witness.d.ts +5 -5
  18. package/dist/browser/Witness.d.ts.map +1 -1
  19. package/dist/browser/index.cjs +40 -38
  20. package/dist/browser/index.cjs.map +1 -1
  21. package/dist/browser/index.js +42 -40
  22. package/dist/browser/index.js.map +1 -1
  23. package/dist/node/CryptoContractDiviner.d.cts +3 -4
  24. package/dist/node/CryptoContractDiviner.d.cts.map +1 -1
  25. package/dist/node/CryptoContractDiviner.d.mts +3 -4
  26. package/dist/node/CryptoContractDiviner.d.mts.map +1 -1
  27. package/dist/node/CryptoContractDiviner.d.ts +3 -4
  28. package/dist/node/CryptoContractDiviner.d.ts.map +1 -1
  29. package/dist/node/Plugin.d.cts +33 -3
  30. package/dist/node/Plugin.d.cts.map +1 -1
  31. package/dist/node/Plugin.d.mts +33 -3
  32. package/dist/node/Plugin.d.mts.map +1 -1
  33. package/dist/node/Plugin.d.ts +33 -3
  34. package/dist/node/Plugin.d.ts.map +1 -1
  35. package/dist/node/Witness.d.cts +5 -5
  36. package/dist/node/Witness.d.cts.map +1 -1
  37. package/dist/node/Witness.d.mts +5 -5
  38. package/dist/node/Witness.d.mts.map +1 -1
  39. package/dist/node/Witness.d.ts +5 -5
  40. package/dist/node/Witness.d.ts.map +1 -1
  41. package/dist/node/index.js +42 -38
  42. package/dist/node/index.js.map +1 -1
  43. package/dist/node/index.mjs +44 -40
  44. package/dist/node/index.mjs.map +1 -1
  45. package/package.json +14 -14
  46. package/src/CryptoContractDiviner.ts +8 -23
  47. package/src/Erc721Sentinel.json +12 -63
  48. package/src/Witness.ts +44 -33
@@ -35,45 +35,58 @@ var import_payload_model2 = require("@xyo-network/payload-model");
35
35
  var import_payloadset_plugin = require("@xyo-network/payloadset-plugin");
36
36
 
37
37
  // src/Witness.ts
38
+ var import_bignumber = require("@ethersproject/bignumber");
39
+ var import_contracts = require("@ethersproject/contracts");
38
40
  var import_assert = require("@xylabs/assert");
39
41
  var import_abstract_witness = require("@xyo-network/abstract-witness");
40
42
  var import_crypto_contract_function_read_payload_plugin = require("@xyo-network/crypto-contract-function-read-payload-plugin");
41
- var import_hash = require("@xyo-network/hash");
42
43
  var import_payload_model = require("@xyo-network/payload-model");
43
- var import_ethers = require("ethers");
44
44
  var CryptoContractFunctionReadWitness = class extends import_abstract_witness.AbstractWitness {
45
45
  static configSchemas = [import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionReadWitnessConfigSchema];
46
46
  async observeHandler(inPayloads = []) {
47
47
  await this.started("throw");
48
48
  try {
49
49
  const observations = await Promise.all(
50
- inPayloads.filter((0, import_payload_model.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallSchema)).map(async (callPayload) => {
51
- const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload };
52
- const { address, functionName, params } = fullCallPayload;
53
- const validatedAddress = (0, import_assert.assertEx)(address, "Missing address");
54
- const validatedFunctionName = (0, import_assert.assertEx)(functionName, "Missing functionName");
55
- const contract = this.params.factory(validatedAddress);
56
- const func = (0, import_assert.assertEx)(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`);
57
- const rawResult = await func(...params ?? []);
58
- const result = import_ethers.BigNumber.isBigNumber(rawResult) ? { type: "BigNumber", value: rawResult.toHexString() } : { value: rawResult };
59
- const observation = {
60
- address: validatedAddress,
61
- call: await import_hash.PayloadHasher.hashAsync(fullCallPayload),
62
- chainId: (await contract.provider.getNetwork()).chainId,
63
- functionName: validatedFunctionName,
64
- params,
65
- result,
66
- schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
67
- };
68
- return observation;
50
+ inPayloads.filter((0, import_payload_model.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
51
+ const { providers } = this.params;
52
+ const provider = providers[Date.now() % providers.length];
53
+ const validatedAddress = (0, import_assert.assertEx)(address ?? this.config.address, "Missing address");
54
+ const validatedFunctionName = (0, import_assert.assertEx)(functionName ?? this.config.functionName, "Missing address");
55
+ const mergedArgs = [...args ?? this.config.args ?? []];
56
+ const contract = new import_contracts.Contract(validatedAddress, this.config.contract, provider);
57
+ try {
58
+ const result = await contract.callStatic[validatedFunctionName](...mergedArgs);
59
+ const transformedResult = import_bignumber.BigNumber.isBigNumber(result) ? result.toHexString() : result;
60
+ const observation = {
61
+ address: validatedAddress,
62
+ args: mergedArgs,
63
+ chainId: provider.network.chainId,
64
+ functionName: validatedFunctionName,
65
+ result: transformedResult,
66
+ schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
67
+ };
68
+ return observation;
69
+ } catch (ex) {
70
+ const error = ex;
71
+ console.log(`Error [${this.config.name}]: ${error.code}`);
72
+ const observation = {
73
+ address: validatedAddress,
74
+ args: mergedArgs,
75
+ chainId: provider.network.chainId,
76
+ error: error.code,
77
+ functionName: validatedFunctionName,
78
+ schema: import_crypto_contract_function_read_payload_plugin.CryptoContractFunctionCallResultSchema
79
+ };
80
+ return observation;
81
+ }
69
82
  })
70
83
  );
71
- return observations.flat();
84
+ return observations;
72
85
  } catch (ex) {
73
86
  const error = ex;
74
87
  console.log(`Error [${this.config.name}]: ${error.message}`);
88
+ throw error;
75
89
  }
76
- return [];
77
90
  }
78
91
  };
79
92
 
@@ -92,25 +105,15 @@ var CryptoContractFunctionReadWitnessPlugin = () => (0, import_payloadset_plugin
92
105
  var import_assert2 = require("@xylabs/assert");
93
106
  var import_abstract_diviner = require("@xyo-network/abstract-diviner");
94
107
  var import_crypto_contract_function_read_payload_plugin2 = require("@xyo-network/crypto-contract-function-read-payload-plugin");
95
- var import_hash2 = require("@xyo-network/hash");
96
108
  var import_payload_model3 = require("@xyo-network/payload-model");
97
109
  var CryptoContractDivinerConfigSchema = "network.xyo.crypto.contract.diviner.config";
98
110
  var ContractInfoSchema = "network.xyo.crypto.contract.info";
99
111
  var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract_diviner.AbstractDiviner {
100
112
  static configSchemas = [CryptoContractDivinerConfigSchema];
101
- static async findCallResult(address, functionName, params, payloads) {
102
- const callHash = await this.generateCallHash(address, functionName, params);
103
- const foundPayload = payloads.find((payload) => payload.call === callHash);
104
- return foundPayload == null ? void 0 : foundPayload.result.value;
105
- }
106
- static async generateCallHash(address, functionName, params) {
107
- const callPayload = {
108
- address,
109
- functionName,
110
- params,
111
- schema: import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallSchema
112
- };
113
- return await import_hash2.PayloadHasher.hashAsync(callPayload);
113
+ static findCallResult(address, functionName, payloads) {
114
+ var _a;
115
+ const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
116
+ return (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(foundPayload)) == null ? void 0 : _a.result;
114
117
  }
115
118
  static matchingExistingField(objs, field) {
116
119
  var _a;
@@ -151,7 +154,8 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends import_abstract
151
154
  }
152
155
  reduceResults(callResults) {
153
156
  return callResults.reduce((prev, callResult) => {
154
- prev[callResult.functionName] = callResult.result;
157
+ var _a;
158
+ prev[callResult.functionName] = (_a = (0, import_crypto_contract_function_read_payload_plugin2.asCryptoContractFunctionCallSuccess)(callResult)) == null ? void 0 : _a.result;
155
159
  return prev;
156
160
  }, {});
157
161
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts"],"sourcesContent":["import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { BigNumber, Contract } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams<TContract extends Contract> = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n factory: (address: string) => TContract\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TContract extends Contract = Contract,\n TParams extends CryptoContractFunctionReadWitnessParams<TContract> = CryptoContractFunctionReadWitnessParams<TContract>,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall<keyof TContract['callStatic']>, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(\n inPayloads: CryptoContractFunctionCall<keyof TContract['callStatic']>[] = [],\n ): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {\n const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }\n const { address, functionName, params } = fullCallPayload\n const validatedAddress = assertEx(address, 'Missing address')\n const validatedFunctionName = assertEx(functionName, 'Missing functionName')\n const contract = this.params.factory(validatedAddress)\n const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`)\n const rawResult = await func(...(params ?? []))\n const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)\n ? { type: 'BigNumber', value: rawResult.toHexString() }\n : { value: rawResult }\n const observation: CryptoContractFunctionCallResult = {\n address: validatedAddress,\n call: await PayloadHasher.hashAsync(fullCallPayload),\n chainId: (await contract.provider.getNetwork()).chainId,\n functionName: validatedFunctionName,\n params,\n result,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n }\n\n return []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n ContractFunctionResult,\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig<{\n schema: CryptoContractDivinerConfigSchema\n}>\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type ContractInfo = Payload<\n {\n address: string\n chainId: string\n results?: Record<string, ContractFunctionResult>\n },\n ContractInfoSchema\n>\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static async findCallResult<TResult = string>(\n address: string,\n functionName: string,\n params: unknown[],\n payloads: CryptoContractFunctionCallResult[],\n ): Promise<TResult | undefined> {\n const callHash = await this.generateCallHash(address, functionName, params)\n const foundPayload = payloads.find((payload) => payload.call === callHash)\n return foundPayload?.result.value as TResult | undefined\n }\n\n protected static async generateCallHash(address: string, functionName: string, params: unknown[]) {\n const callPayload: CryptoContractFunctionCall = {\n address,\n functionName,\n params,\n schema: CryptoContractFunctionCallSchema,\n }\n return await PayloadHasher.hashAsync(callPayload)\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 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: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\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 info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, ContractFunctionResult>>((prev, callResult) => {\n prev[callResult.functionName] = callResult.result\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_hash","import_payload_model","result"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts"],"sourcesContent":["import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n","import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Contract } from '@ethersproject/contracts'\nimport { JsonRpcProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: JsonRpcProvider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\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 contract = new Contract(validatedAddress, this.config.contract, provider)\n try {\n const result = await contract.callStatic[validatedFunctionName](...mergedArgs)\n const transformedResult = BigNumber.isBigNumber(result) ? result.toHexString() : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: provider.network.chainId,\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: provider.network.chainId,\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\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","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig<{\n schema: CryptoContractDivinerConfigSchema\n}>\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type ContractInfo = Payload<\n {\n address: string\n chainId: string\n results?: Record<string, unknown>\n },\n ContractInfoSchema\n>\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(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 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: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\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 info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n"],"mappings":"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","names":["import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_payload_model","result"]}
@@ -4,6 +4,8 @@ import { PayloadSetSchema } from "@xyo-network/payload-model";
4
4
  import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
5
5
 
6
6
  // src/Witness.ts
7
+ import { BigNumber } from "@ethersproject/bignumber";
8
+ import { Contract } from "@ethersproject/contracts";
7
9
  import { assertEx } from "@xylabs/assert";
8
10
  import { AbstractWitness } from "@xyo-network/abstract-witness";
9
11
  import {
@@ -11,42 +13,53 @@ import {
11
13
  CryptoContractFunctionCallSchema,
12
14
  CryptoContractFunctionReadWitnessConfigSchema
13
15
  } from "@xyo-network/crypto-contract-function-read-payload-plugin";
14
- import { PayloadHasher } from "@xyo-network/hash";
15
16
  import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
16
- import { BigNumber } from "ethers";
17
17
  var CryptoContractFunctionReadWitness = class extends AbstractWitness {
18
18
  static configSchemas = [CryptoContractFunctionReadWitnessConfigSchema];
19
19
  async observeHandler(inPayloads = []) {
20
20
  await this.started("throw");
21
21
  try {
22
22
  const observations = await Promise.all(
23
- inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {
24
- const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload };
25
- const { address, functionName, params } = fullCallPayload;
26
- const validatedAddress = assertEx(address, "Missing address");
27
- const validatedFunctionName = assertEx(functionName, "Missing functionName");
28
- const contract = this.params.factory(validatedAddress);
29
- const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`);
30
- const rawResult = await func(...params ?? []);
31
- const result = BigNumber.isBigNumber(rawResult) ? { type: "BigNumber", value: rawResult.toHexString() } : { value: rawResult };
32
- const observation = {
33
- address: validatedAddress,
34
- call: await PayloadHasher.hashAsync(fullCallPayload),
35
- chainId: (await contract.provider.getNetwork()).chainId,
36
- functionName: validatedFunctionName,
37
- params,
38
- result,
39
- schema: CryptoContractFunctionCallResultSchema
40
- };
41
- return observation;
23
+ inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
24
+ const { providers } = this.params;
25
+ const provider = providers[Date.now() % providers.length];
26
+ const validatedAddress = assertEx(address ?? this.config.address, "Missing address");
27
+ const validatedFunctionName = assertEx(functionName ?? this.config.functionName, "Missing address");
28
+ const mergedArgs = [...args ?? this.config.args ?? []];
29
+ const contract = new Contract(validatedAddress, this.config.contract, provider);
30
+ try {
31
+ const result = await contract.callStatic[validatedFunctionName](...mergedArgs);
32
+ const transformedResult = BigNumber.isBigNumber(result) ? result.toHexString() : result;
33
+ const observation = {
34
+ address: validatedAddress,
35
+ args: mergedArgs,
36
+ chainId: provider.network.chainId,
37
+ functionName: validatedFunctionName,
38
+ result: transformedResult,
39
+ schema: CryptoContractFunctionCallResultSchema
40
+ };
41
+ return observation;
42
+ } catch (ex) {
43
+ const error = ex;
44
+ console.log(`Error [${this.config.name}]: ${error.code}`);
45
+ const observation = {
46
+ address: validatedAddress,
47
+ args: mergedArgs,
48
+ chainId: provider.network.chainId,
49
+ error: error.code,
50
+ functionName: validatedFunctionName,
51
+ schema: CryptoContractFunctionCallResultSchema
52
+ };
53
+ return observation;
54
+ }
42
55
  })
43
56
  );
44
- return observations.flat();
57
+ return observations;
45
58
  } catch (ex) {
46
59
  const error = ex;
47
60
  console.log(`Error [${this.config.name}]: ${error.message}`);
61
+ throw error;
48
62
  }
49
- return [];
50
63
  }
51
64
  };
52
65
 
@@ -65,28 +78,18 @@ var CryptoContractFunctionReadWitnessPlugin = () => createPayloadSetWitnessPlugi
65
78
  import { assertEx as assertEx2 } from "@xylabs/assert";
66
79
  import { AbstractDiviner } from "@xyo-network/abstract-diviner";
67
80
  import {
68
- CryptoContractFunctionCallResultSchema as CryptoContractFunctionCallResultSchema2,
69
- CryptoContractFunctionCallSchema as CryptoContractFunctionCallSchema2
81
+ asCryptoContractFunctionCallSuccess,
82
+ CryptoContractFunctionCallResultSchema as CryptoContractFunctionCallResultSchema2
70
83
  } from "@xyo-network/crypto-contract-function-read-payload-plugin";
71
- import { PayloadHasher as PayloadHasher2 } from "@xyo-network/hash";
72
84
  import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
73
85
  var CryptoContractDivinerConfigSchema = "network.xyo.crypto.contract.diviner.config";
74
86
  var ContractInfoSchema = "network.xyo.crypto.contract.info";
75
87
  var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner {
76
88
  static configSchemas = [CryptoContractDivinerConfigSchema];
77
- static async findCallResult(address, functionName, params, payloads) {
78
- const callHash = await this.generateCallHash(address, functionName, params);
79
- const foundPayload = payloads.find((payload) => payload.call === callHash);
80
- return foundPayload == null ? void 0 : foundPayload.result.value;
81
- }
82
- static async generateCallHash(address, functionName, params) {
83
- const callPayload = {
84
- address,
85
- functionName,
86
- params,
87
- schema: CryptoContractFunctionCallSchema2
88
- };
89
- return await PayloadHasher2.hashAsync(callPayload);
89
+ static findCallResult(address, functionName, payloads) {
90
+ var _a;
91
+ const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
92
+ return (_a = asCryptoContractFunctionCallSuccess(foundPayload)) == null ? void 0 : _a.result;
90
93
  }
91
94
  static matchingExistingField(objs, field) {
92
95
  var _a;
@@ -127,7 +130,8 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner
127
130
  }
128
131
  reduceResults(callResults) {
129
132
  return callResults.reduce((prev, callResult) => {
130
- prev[callResult.functionName] = callResult.result;
133
+ var _a;
134
+ prev[callResult.functionName] = (_a = asCryptoContractFunctionCallSuccess(callResult)) == null ? void 0 : _a.result;
131
135
  return prev;
132
136
  }, {});
133
137
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { BigNumber, Contract } from 'ethers'\n\nexport type CryptoContractFunctionReadWitnessParams<TContract extends Contract> = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n factory: (address: string) => TContract\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TContract extends Contract = Contract,\n TParams extends CryptoContractFunctionReadWitnessParams<TContract> = CryptoContractFunctionReadWitnessParams<TContract>,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall<keyof TContract['callStatic']>, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(\n inPayloads: CryptoContractFunctionCall<keyof TContract['callStatic']>[] = [],\n ): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async (callPayload) => {\n const fullCallPayload = { ...{ params: [] }, ...this.config.call, ...callPayload }\n const { address, functionName, params } = fullCallPayload\n const validatedAddress = assertEx(address, 'Missing address')\n const validatedFunctionName = assertEx(functionName, 'Missing functionName')\n const contract = this.params.factory(validatedAddress)\n const func = assertEx(contract.callStatic[validatedFunctionName], `functionName [${validatedFunctionName}] not found`)\n const rawResult = await func(...(params ?? []))\n const result: CryptoContractFunctionCallResult['result'] = BigNumber.isBigNumber(rawResult)\n ? { type: 'BigNumber', value: rawResult.toHexString() }\n : { value: rawResult }\n const observation: CryptoContractFunctionCallResult = {\n address: validatedAddress,\n call: await PayloadHasher.hashAsync(fullCallPayload),\n chainId: (await contract.provider.getNetwork()).chainId,\n functionName: validatedFunctionName,\n params,\n result,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }),\n )\n return observations.flat()\n } catch (ex) {\n const error = ex as Error\n console.log(`Error [${this.config.name}]: ${error.message}`)\n }\n\n return []\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n ContractFunctionResult,\n CryptoContractFunctionCall,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig<{\n schema: CryptoContractDivinerConfigSchema\n}>\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type ContractInfo = Payload<\n {\n address: string\n chainId: string\n results?: Record<string, ContractFunctionResult>\n },\n ContractInfoSchema\n>\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static async findCallResult<TResult = string>(\n address: string,\n functionName: string,\n params: unknown[],\n payloads: CryptoContractFunctionCallResult[],\n ): Promise<TResult | undefined> {\n const callHash = await this.generateCallHash(address, functionName, params)\n const foundPayload = payloads.find((payload) => payload.call === callHash)\n return foundPayload?.result.value as TResult | undefined\n }\n\n protected static async generateCallHash(address: string, functionName: string, params: unknown[]) {\n const callPayload: CryptoContractFunctionCall = {\n address,\n functionName,\n params,\n schema: CryptoContractFunctionCallSchema,\n }\n return await PayloadHasher.hashAsync(callPayload)\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 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: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\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 info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, ContractFunctionResult>>((prev, callResult) => {\n prev[callResult.functionName] = callResult.result\n return prev\n }, {})\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":"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","names":["assertEx","CryptoContractFunctionCallResultSchema","CryptoContractFunctionCallSchema","PayloadHasher","isPayloadOfSchemaType","result"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Witness.ts","../../src/CryptoContractDiviner.ts","../../src/index.ts"],"sourcesContent":["import { NftSchema } from '@xyo-network/crypto-nft-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetWitnessPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { CryptoContractFunctionReadWitness } from './Witness'\n\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n createPayloadSetWitnessPlugin<CryptoContractFunctionReadWitness>(\n { required: { [NftSchema]: 1 }, schema: PayloadSetSchema },\n {\n witness: async (params) => {\n const result = await CryptoContractFunctionReadWitness.create(params)\n return result\n },\n },\n )\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Contract } from '@ethersproject/contracts'\nimport { JsonRpcProvider } from '@ethersproject/providers'\nimport { assertEx } from '@xylabs/assert'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport {\n CryptoContractFunctionCall,\n CryptoContractFunctionCallFailure,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n CryptoContractFunctionCallSchema,\n CryptoContractFunctionCallSuccess,\n CryptoContractFunctionReadWitnessConfig,\n CryptoContractFunctionReadWitnessConfigSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\n\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: JsonRpcProvider[]\n }\n>\n\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override configSchemas = [CryptoContractFunctionReadWitnessConfigSchema]\n\n protected override async observeHandler(inPayloads: CryptoContractFunctionCall[] = []): Promise<CryptoContractFunctionCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {\n const { providers } = this.params\n const provider = providers[Date.now() % providers.length] //pick a random provider\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 contract = new Contract(validatedAddress, this.config.contract, provider)\n try {\n const result = await contract.callStatic[validatedFunctionName](...mergedArgs)\n const transformedResult = BigNumber.isBigNumber(result) ? result.toHexString() : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: provider.network.chainId,\n functionName: validatedFunctionName,\n result: transformedResult,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n } catch (ex) {\n const error = ex as Error & { code: string }\n console.log(`Error [${this.config.name}]: ${error.code}`)\n const observation: CryptoContractFunctionCallFailure = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: provider.network.chainId,\n error: error.code,\n functionName: validatedFunctionName,\n schema: CryptoContractFunctionCallResultSchema,\n }\n return observation\n }\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","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport {\n asCryptoContractFunctionCallSuccess,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\nexport const CryptoContractDivinerConfigSchema = 'network.xyo.crypto.contract.diviner.config'\nexport type CryptoContractDivinerConfigSchema = typeof CryptoContractDivinerConfigSchema\n\nexport type CryptoContractDivinerConfig = DivinerConfig<{\n schema: CryptoContractDivinerConfigSchema\n}>\nexport type CryptoContractDivinerParams = DivinerParams<CryptoContractDivinerConfig>\n\nexport const ContractInfoSchema = 'network.xyo.crypto.contract.info'\nexport type ContractInfoSchema = typeof ContractInfoSchema\n\nexport type ContractInfo = Payload<\n {\n address: string\n chainId: string\n results?: Record<string, unknown>\n },\n ContractInfoSchema\n>\n\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override configSchemas = [CryptoContractDivinerConfigSchema]\n\n protected static findCallResult<TResult = string>(\n address: string,\n functionName: string,\n payloads: CryptoContractFunctionCallResult[],\n ): TResult | undefined {\n const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)\n return asCryptoContractFunctionCallSuccess(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 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: CryptoContractFunctionCallResult[]): ContractInfo {\n return {\n address: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),\n chainId: assertEx(CryptoContractDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),\n schema: ContractInfoSchema,\n }\n }\n\n protected override async divineHandler(inPayloads: CryptoContractFunctionCallResult[] = []): Promise<ContractInfo[]> {\n const callResults = inPayloads.filter(isPayloadOfSchemaType<CryptoContractFunctionCallResult>(CryptoContractFunctionCallResultSchema))\n const addresses = Object.keys(\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 info: ContractInfo = {\n ...{ results: await this.reduceResults(foundCallResults) },\n ...this.contractInfoRequiredFields(foundCallResults),\n }\n return info\n }),\n )\n\n return result\n }\n\n protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\n","import { CryptoContractFunctionReadWitnessPlugin } from './Plugin'\n\nexport * from './CryptoContractDiviner'\nexport * from './Witness'\n\nexport { CryptoContractFunctionReadWitnessPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default CryptoContractFunctionReadWitnessPlugin\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,wBAAwB;AACjC,SAAS,qCAAqC;;;ACF9C,SAAS,iBAAiB;AAC1B,SAAS,gBAAgB;AAEzB,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC;AAAA,EAIE;AAAA,EACA;AAAA,EAGA;AAAA,OACK;AAEP,SAAS,6BAA6B;AAU/B,IAAM,oCAAN,cAEG,gBAAuF;AAAA,EAC/F,OAAgB,gBAAgB,CAAC,6CAA6C;AAAA,EAE9E,MAAyB,eAAe,aAA2C,CAAC,GAAgD;AAClI,UAAM,KAAK,QAAQ,OAAO;AAC1B,QAAI;AACF,YAAM,eAAe,MAAM,QAAQ;AAAA,QACjC,WAAW,OAAO,sBAAsB,gCAAgC,CAAC,EAAE,IAAI,OAAO,EAAE,cAAc,MAAM,QAAQ,MAAM;AACxH,gBAAM,EAAE,UAAU,IAAI,KAAK;AAC3B,gBAAM,WAAW,UAAU,KAAK,IAAI,IAAI,UAAU,MAAM;AACxD,gBAAM,mBAAmB,SAAS,WAAW,KAAK,OAAO,SAAS,iBAAiB;AACnF,gBAAM,wBAAwB,SAAS,gBAAgB,KAAK,OAAO,cAAc,iBAAiB;AAClG,gBAAM,aAAa,CAAC,GAAI,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAE;AAEvD,gBAAM,WAAW,IAAI,SAAS,kBAAkB,KAAK,OAAO,UAAU,QAAQ;AAC9E,cAAI;AACF,kBAAM,SAAS,MAAM,SAAS,WAAW,qBAAqB,EAAE,GAAG,UAAU;AAC7E,kBAAM,oBAAoB,UAAU,YAAY,MAAM,IAAI,OAAO,YAAY,IAAI;AACjF,kBAAM,cAAiD;AAAA,cACrD,SAAS;AAAA,cACT,MAAM;AAAA,cACN,SAAS,SAAS,QAAQ;AAAA,cAC1B,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,QAAQ;AAAA,YACV;AACA,mBAAO;AAAA,UACT,SAAS,IAAI;AACX,kBAAM,QAAQ;AACd,oBAAQ,IAAI,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,IAAI,EAAE;AACxD,kBAAM,cAAiD;AAAA,cACrD,SAAS;AAAA,cACT,MAAM;AAAA,cACN,SAAS,SAAS,QAAQ;AAAA,cAC1B,OAAO,MAAM;AAAA,cACb,cAAc;AAAA,cACd,QAAQ;AAAA,YACV;AACA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,IAAI,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,OAAO,EAAE;AAC3D,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ADvEO,IAAM,0CAA0C,MACrD;AAAA,EACE,EAAE,UAAU,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EACzD;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,YAAM,SAAS,MAAM,kCAAkC,OAAO,MAAM;AACpE,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AEfF,SAAS,YAAAA,iBAAgB;AAEzB,SAAS,uBAAuB;AAChC;AAAA,EACE;AAAA,EAEA,0CAAAC;AAAA,OACK;AAEP,SAAS,yBAAAC,8BAAsC;AAIxC,IAAM,oCAAoC;AAQ1C,IAAM,qBAAqB;AAY3B,IAAM,wBAAN,MAAM,+BAAyG,gBAAyB;AAAA,EAC7I,OAAgB,gBAAgB,CAAC,iCAAiC;AAAA,EAElE,OAAiB,eACf,SACA,cACA,UACqB;AAxCzB;AAyCI,UAAM,eAAe,SAAS,KAAK,CAAC,YAAY,QAAQ,iBAAiB,gBAAgB,QAAQ,YAAY,OAAO;AACpH,YAAO,yCAAoC,YAAY,MAAhD,mBAAmD;AAAA,EAC5D;AAAA,EAEA,OAAiB,sBAA+D,MAAW,OAA+B;AA7C5H;AA8CI,UAAM,iBAAgB,UAAK,GAAG,CAAC,MAAT,mBAAa;AACnC,UAAM,cAAc,KAAK,OAAO,CAAC,MAAM,QAAQ;AAC7C,aAAO,QAAQ,IAAI,KAAK,MAAM;AAAA,IAChC,GAAG,KAAK;AACR,WAAO,cAAc,SAAY;AAAA,EACnC;AAAA,EAEU,2BAA2B,aAA+D;AAClG,WAAO;AAAA,MACL,SAASF,UAAS,uBAAsB,sBAAsB,aAAa,SAAS,GAAG,oBAAoB;AAAA,MAC3G,SAASA,UAAS,uBAAsB,sBAAsB,aAAa,SAAS,GAAG,oBAAoB;AAAA,MAC3G,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAyB,cAAc,aAAiD,CAAC,GAA4B;AACnH,UAAM,cAAc,WAAW,OAAOE,uBAAwDD,uCAAsC,CAAC;AACrI,UAAM,YAAY,OAAO;AAAA,MACvB,YAAY,OAAgC,CAAC,MAAME,YAAW;AAC5D,YAAIA,QAAO,SAAS;AAClB,eAAKA,QAAO,OAAO,IAAI;AAAA,QACzB;AACA,eAAO;AAAA,MACT,GAAG,CAAC,CAAC;AAAA,IACP;AACA,UAAM,SAAS,MAAM,QAAQ;AAAA,MAC3B,UAAU,IAAI,OAAO,YAAY;AAC/B,cAAM,mBAAmB,YAAY,OAAO,CAAC,eAAe,WAAW,YAAY,OAAO;AAC1F,cAAM,OAAqB;AAAA,UACzB,GAAG,EAAE,SAAS,MAAM,KAAK,cAAc,gBAAgB,EAAE;AAAA,UACzD,GAAG,KAAK,2BAA2B,gBAAgB;AAAA,QACrD;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AAAA,EAEU,cAAc,aAAsF;AAC5G,WAAO,YAAY,OAAgC,CAAC,MAAM,eAAe;AAtF7E;AAuFM,WAAK,WAAW,YAAY,KAAI,yCAAoC,UAAU,MAA9C,mBAAiD;AACjF,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AACF;;;ACnFA,IAAO,cAAQ;","names":["assertEx","CryptoContractFunctionCallResultSchema","isPayloadOfSchemaType","result"]}
package/package.json CHANGED
@@ -12,26 +12,26 @@
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.13.3",
14
14
  "@xylabs/promise": "^2.13.3",
15
- "@xyo-network/abstract-diviner": "~2.77.20",
16
- "@xyo-network/abstract-witness": "~2.77.20",
17
- "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.77.20",
18
- "@xyo-network/crypto-nft-payload-plugin": "~2.77.20",
19
- "@xyo-network/diviner-model": "~2.77.20",
20
- "@xyo-network/hash": "~2.77.20",
21
- "@xyo-network/module-model": "~2.77.20",
22
- "@xyo-network/payload-model": "~2.77.20",
23
- "@xyo-network/payloadset-plugin": "~2.77.20",
24
- "@xyo-network/witness-model": "~2.77.20"
15
+ "@xyo-network/abstract-diviner": "~2.78.1",
16
+ "@xyo-network/abstract-witness": "~2.78.1",
17
+ "@xyo-network/crypto-contract-function-read-payload-plugin": "~2.78.1",
18
+ "@xyo-network/crypto-nft-payload-plugin": "~2.78.1",
19
+ "@xyo-network/diviner-model": "~2.78.1",
20
+ "@xyo-network/hash": "~2.78.1",
21
+ "@xyo-network/module-model": "~2.78.1",
22
+ "@xyo-network/payload-model": "~2.78.1",
23
+ "@xyo-network/payloadset-plugin": "~2.78.1",
24
+ "@xyo-network/witness-model": "~2.78.1"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@ethersproject/providers": "^5.7.2",
28
28
  "@xylabs/jest-helpers": "^2.13.3",
29
29
  "@xylabs/ts-scripts-yarn3": "^3.1.13",
30
30
  "@xylabs/tsconfig": "^3.1.13",
31
- "@xyo-network/account": "~2.77.20",
32
- "@xyo-network/manifest": "~2.77.20",
31
+ "@xyo-network/account": "~2.78.1",
32
+ "@xyo-network/manifest": "~2.78.1",
33
33
  "@xyo-network/open-zeppelin-typechain": "^2.2.11",
34
- "@xyo-network/sentinel-model": "~2.77.20",
34
+ "@xyo-network/sentinel-model": "~2.78.1",
35
35
  "ethers": "^5.7.2",
36
36
  "jest": "^29.7.0",
37
37
  "typescript": "^5.2.2"
@@ -76,5 +76,5 @@
76
76
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
77
77
  },
78
78
  "sideEffects": false,
79
- "version": "2.77.20"
79
+ "version": "2.78.1"
80
80
  }
@@ -2,14 +2,11 @@ import { assertEx } from '@xylabs/assert'
2
2
  import { Promisable } from '@xylabs/promise'
3
3
  import { AbstractDiviner } from '@xyo-network/abstract-diviner'
4
4
  import {
5
- ContractFunctionResult,
6
- CryptoContractFunctionCall,
5
+ asCryptoContractFunctionCallSuccess,
7
6
  CryptoContractFunctionCallResult,
8
7
  CryptoContractFunctionCallResultSchema,
9
- CryptoContractFunctionCallSchema,
10
8
  } from '@xyo-network/crypto-contract-function-read-payload-plugin'
11
9
  import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'
12
- import { PayloadHasher } from '@xyo-network/hash'
13
10
  import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'
14
11
 
15
12
  export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]
@@ -29,7 +26,7 @@ export type ContractInfo = Payload<
29
26
  {
30
27
  address: string
31
28
  chainId: string
32
- results?: Record<string, ContractFunctionResult>
29
+ results?: Record<string, unknown>
33
30
  },
34
31
  ContractInfoSchema
35
32
  >
@@ -37,25 +34,13 @@ export type ContractInfo = Payload<
37
34
  export class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {
38
35
  static override configSchemas = [CryptoContractDivinerConfigSchema]
39
36
 
40
- protected static async findCallResult<TResult = string>(
37
+ protected static findCallResult<TResult = string>(
41
38
  address: string,
42
39
  functionName: string,
43
- params: unknown[],
44
40
  payloads: CryptoContractFunctionCallResult[],
45
- ): Promise<TResult | undefined> {
46
- const callHash = await this.generateCallHash(address, functionName, params)
47
- const foundPayload = payloads.find((payload) => payload.call === callHash)
48
- return foundPayload?.result.value as TResult | undefined
49
- }
50
-
51
- protected static async generateCallHash(address: string, functionName: string, params: unknown[]) {
52
- const callPayload: CryptoContractFunctionCall = {
53
- address,
54
- functionName,
55
- params,
56
- schema: CryptoContractFunctionCallSchema,
57
- }
58
- return await PayloadHasher.hashAsync(callPayload)
41
+ ): TResult | undefined {
42
+ const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)
43
+ return asCryptoContractFunctionCallSuccess(foundPayload)?.result as TResult | undefined
59
44
  }
60
45
 
61
46
  protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {
@@ -99,8 +84,8 @@ export class CryptoContractDiviner<TParams extends CryptoContractDivinerParams =
99
84
  }
100
85
 
101
86
  protected reduceResults(callResults: CryptoContractFunctionCallResult[]): Promisable<ContractInfo['results']> {
102
- return callResults.reduce<Record<string, ContractFunctionResult>>((prev, callResult) => {
103
- prev[callResult.functionName] = callResult.result
87
+ return callResults.reduce<Record<string, unknown>>((prev, callResult) => {
88
+ prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result
104
89
  return prev
105
90
  }, {})
106
91
  }