@xyo-network/crypto-contract-function-read-plugin 2.99.5 → 2.99.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Plugin.d.cts +2 -2
- package/dist/browser/Plugin.d.mts +2 -2
- package/dist/browser/Plugin.d.ts +2 -2
- package/dist/browser/index.cjs +57 -73
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.mjs +69 -77
- package/dist/browser/index.mjs.map +1 -1
- package/dist/neutral/Plugin.d.cts +2 -2
- package/dist/neutral/Plugin.d.mts +2 -2
- package/dist/neutral/Plugin.d.ts +2 -2
- package/dist/neutral/index.cjs +57 -73
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/index.mjs +69 -77
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/Plugin.d.cts +2 -2
- package/dist/node/Plugin.d.mts +2 -2
- package/dist/node/Plugin.d.ts +2 -2
- package/dist/node/index.cjs +61 -80
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.mjs +73 -84
- package/dist/node/index.mjs.map +1 -1
- package/package.json +34 -34
package/dist/neutral/index.cjs
CHANGED
|
@@ -3,7 +3,6 @@ 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 });
|
|
7
6
|
var __export = (target, all) => {
|
|
8
7
|
for (var name in all)
|
|
9
8
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -34,18 +33,9 @@ var import_crypto_contract_function_read_payload_plugin = require("@xyo-network/
|
|
|
34
33
|
var import_diviner_abstract = require("@xyo-network/diviner-abstract");
|
|
35
34
|
var import_payload_model = require("@xyo-network/payload-model");
|
|
36
35
|
var CryptoContractDiviner = class _CryptoContractDiviner extends import_diviner_abstract.AbstractDiviner {
|
|
37
|
-
static
|
|
38
|
-
__name(this, "CryptoContractDiviner");
|
|
39
|
-
}
|
|
40
|
-
static configSchemas = [
|
|
41
|
-
...super.configSchemas,
|
|
42
|
-
import_crypto_contract_function_read_payload_plugin.CryptoContractDivinerConfigSchema
|
|
43
|
-
];
|
|
36
|
+
static configSchemas = [...super.configSchemas, import_crypto_contract_function_read_payload_plugin.CryptoContractDivinerConfigSchema];
|
|
44
37
|
static defaultConfigSchema = import_crypto_contract_function_read_payload_plugin.CryptoContractDivinerConfigSchema;
|
|
45
|
-
static labels = {
|
|
46
|
-
...super.labels,
|
|
47
|
-
...import_crypto_contract_function_read_payload_plugin.CryptoContractDivinerLabels
|
|
48
|
-
};
|
|
38
|
+
static labels = { ...super.labels, ...import_crypto_contract_function_read_payload_plugin.CryptoContractDivinerLabels };
|
|
49
39
|
static findCallResult(address, functionName, payloads) {
|
|
50
40
|
const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
|
|
51
41
|
return (0, import_crypto_contract_function_read_payload_plugin.asCryptoContractFunctionCallSuccess)(foundPayload)?.result;
|
|
@@ -75,14 +65,16 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends import_diviner_
|
|
|
75
65
|
return prev;
|
|
76
66
|
}, {})
|
|
77
67
|
);
|
|
78
|
-
const result = await Promise.all(
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
68
|
+
const result = await Promise.all(
|
|
69
|
+
addresses.map(async (address) => {
|
|
70
|
+
const foundCallResults = callResults.filter((callResult) => callResult.address === address);
|
|
71
|
+
const info = {
|
|
72
|
+
results: await this.reduceResults(foundCallResults),
|
|
73
|
+
...this.contractInfoRequiredFields(foundCallResults)
|
|
74
|
+
};
|
|
75
|
+
return info;
|
|
76
|
+
})
|
|
77
|
+
);
|
|
86
78
|
return result;
|
|
87
79
|
}
|
|
88
80
|
reduceResults(callResults) {
|
|
@@ -105,13 +97,7 @@ var import_crypto_contract_function_read_payload_plugin2 = require("@xyo-network
|
|
|
105
97
|
var import_payload_model2 = require("@xyo-network/payload-model");
|
|
106
98
|
var import_ethers = require("ethers");
|
|
107
99
|
var CryptoContractFunctionReadWitness = class extends import_abstract_witness.AbstractWitness {
|
|
108
|
-
static
|
|
109
|
-
__name(this, "CryptoContractFunctionReadWitness");
|
|
110
|
-
}
|
|
111
|
-
static configSchemas = [
|
|
112
|
-
...super.configSchemas,
|
|
113
|
-
import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionReadWitnessConfigSchema
|
|
114
|
-
];
|
|
100
|
+
static configSchemas = [...super.configSchemas, import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionReadWitnessConfigSchema];
|
|
115
101
|
static defaultConfigSchema = import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionReadWitnessConfigSchema;
|
|
116
102
|
get abi() {
|
|
117
103
|
return (0, import_assert2.assertEx)(this.config.abi, () => "Missing abi");
|
|
@@ -119,41 +105,41 @@ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.Ab
|
|
|
119
105
|
async observeHandler(inPayloads = []) {
|
|
120
106
|
await this.started("throw");
|
|
121
107
|
try {
|
|
122
|
-
const observations = await Promise.all(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
...args ?? this.config.args ?? []
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
108
|
+
const observations = await Promise.all(
|
|
109
|
+
inPayloads.filter((0, import_payload_model2.isPayloadOfSchemaType)(import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
|
|
110
|
+
const { providers } = this.params;
|
|
111
|
+
const provider = providers[Date.now() % providers.length];
|
|
112
|
+
const validatedAddress = (0, import_assert2.assertEx)(address ?? this.config.address, () => "Missing address");
|
|
113
|
+
const validatedFunctionName = (0, import_assert2.assertEx)(functionName ?? this.config.functionName, () => "Missing address");
|
|
114
|
+
const mergedArgs = [...args ?? this.config.args ?? []];
|
|
115
|
+
const contract = new import_ethers.Contract(validatedAddress, this.abi, provider);
|
|
116
|
+
try {
|
|
117
|
+
const result = await contract[validatedFunctionName](...mergedArgs);
|
|
118
|
+
const transformedResult = typeof result === "bigint" ? result.toString(16) : result;
|
|
119
|
+
const observation = {
|
|
120
|
+
address: validatedAddress,
|
|
121
|
+
args: mergedArgs,
|
|
122
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
123
|
+
functionName: validatedFunctionName,
|
|
124
|
+
result: transformedResult,
|
|
125
|
+
schema: import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallResultSchema
|
|
126
|
+
};
|
|
127
|
+
return observation;
|
|
128
|
+
} catch (ex) {
|
|
129
|
+
const error = ex;
|
|
130
|
+
console.log(`Error [${this.config.name}]: ${error.code}`);
|
|
131
|
+
const observation = {
|
|
132
|
+
address: validatedAddress,
|
|
133
|
+
args: mergedArgs,
|
|
134
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
135
|
+
error: error.code,
|
|
136
|
+
functionName: validatedFunctionName,
|
|
137
|
+
schema: import_crypto_contract_function_read_payload_plugin2.CryptoContractFunctionCallResultSchema
|
|
138
|
+
};
|
|
139
|
+
return observation;
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
);
|
|
157
143
|
return observations;
|
|
158
144
|
} catch (ex) {
|
|
159
145
|
const error = ex;
|
|
@@ -164,15 +150,13 @@ var CryptoContractFunctionReadWitness = class extends import_abstract_witness.Ab
|
|
|
164
150
|
};
|
|
165
151
|
|
|
166
152
|
// src/Plugin.ts
|
|
167
|
-
var CryptoContractFunctionReadWitnessPlugin =
|
|
168
|
-
required: {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}, "witness")
|
|
177
|
-
}), "CryptoContractFunctionReadWitnessPlugin");
|
|
153
|
+
var CryptoContractFunctionReadWitnessPlugin = () => (0, import_payloadset_plugin.createPayloadSetWitnessPlugin)(
|
|
154
|
+
{ required: { [import_crypto_nft_payload_plugin.NftSchema]: 1 }, schema: import_payload_model3.PayloadSetSchema },
|
|
155
|
+
{
|
|
156
|
+
witness: async (params) => {
|
|
157
|
+
const result = await CryptoContractFunctionReadWitness.create(params);
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
);
|
|
178
162
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner/index.ts'\nexport { CryptoContractFunctionReadWitnessPlugin, CryptoContractFunctionReadWitnessPlugin as default } from './Plugin.ts'\nexport * from './Witness.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\n/** @deprecated use EvmCallDiviner instead */\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\n/** @deprecated use EvmCallDiviner instead */\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractDivinerConfigSchema\n static override labels: CryptoContractDivinerLabels = { ...super.labels, ...CryptoContractDivinerLabels }\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 // 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: 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 // 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 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 // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\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\n// eslint-disable-next-line import/no-deprecated\nimport { CryptoContractFunctionReadWitness } from './Witness.ts'\n\n/** @deprecated use EvmCallWitness instead */\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n\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 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, Schema } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\n/** @deprecated use EvmCallWitness instead */\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\n/** @deprecated use EvmCallWitness instead */\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractFunctionReadWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractFunctionReadWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\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.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).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: Number((await provider.getNetwork()).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"],"mappings":"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","names":["CryptoContractDiviner","AbstractDiviner","configSchemas","CryptoContractDivinerConfigSchema","defaultConfigSchema","labels","CryptoContractDivinerLabels","findCallResult","address","functionName","payloads","foundPayload","find","payload","asCryptoContractFunctionCallSuccess","result","matchingExistingField","objs","field","expectedValue","at","didNotMatch","reduce","prev","obj","undefined","contractInfoRequiredFields","callResults","assertEx","chainId","schema","ContractInfoSchema","divineHandler","inPayloads","filter","isPayloadOfSchemaType","CryptoContractFunctionCallResultSchema","addresses","Object","keys","Promise","all","map","foundCallResults","callResult","info","results","reduceResults","import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_payload_model","CryptoContractFunctionReadWitness","AbstractWitness","configSchemas","CryptoContractFunctionReadWitnessConfigSchema","defaultConfigSchema","abi","assertEx","config","observeHandler","inPayloads","started","observations","Promise","all","filter","isPayloadOfSchemaType","CryptoContractFunctionCallSchema","map","functionName","args","address","providers","params","provider","Date","now","length","validatedAddress","validatedFunctionName","mergedArgs","contract","Contract","result","transformedResult","toString","observation","chainId","Number","getNetwork","schema","CryptoContractFunctionCallResultSchema","ex","error","console","log","name","code","message","CryptoContractFunctionReadWitnessPlugin","createPayloadSetWitnessPlugin","required","NftSchema","schema","PayloadSetSchema","witness","params","result","CryptoContractFunctionReadWitness","create"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Diviner/Diviner.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["export * from './Diviner/index.ts'\nexport { CryptoContractFunctionReadWitnessPlugin, CryptoContractFunctionReadWitnessPlugin as default } from './Plugin.ts'\nexport * from './Witness.ts'\n","import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\n/** @deprecated use EvmCallDiviner instead */\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\n/** @deprecated use EvmCallDiviner instead */\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractDivinerConfigSchema\n static override labels: CryptoContractDivinerLabels = { ...super.labels, ...CryptoContractDivinerLabels }\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 // 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: 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 // 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 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 // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\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\n// eslint-disable-next-line import/no-deprecated\nimport { CryptoContractFunctionReadWitness } from './Witness.ts'\n\n/** @deprecated use EvmCallWitness instead */\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n\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 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, Schema } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\n/** @deprecated use EvmCallWitness instead */\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\n/** @deprecated use EvmCallWitness instead */\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractFunctionReadWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractFunctionReadWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\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.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).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: Number((await provider.getNetwork()).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"],"mappings":"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","names":["result","import_payload_model","import_assert","import_crypto_contract_function_read_payload_plugin","import_payload_model"]}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/Diviner/Diviner.ts
|
|
5
2
|
import { assertEx } from "@xylabs/assert";
|
|
6
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
asCryptoContractFunctionCallSuccess,
|
|
5
|
+
ContractInfoSchema,
|
|
6
|
+
CryptoContractDivinerConfigSchema,
|
|
7
|
+
CryptoContractDivinerLabels,
|
|
8
|
+
CryptoContractFunctionCallResultSchema
|
|
9
|
+
} from "@xyo-network/crypto-contract-function-read-payload-plugin";
|
|
7
10
|
import { AbstractDiviner } from "@xyo-network/diviner-abstract";
|
|
8
11
|
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
9
12
|
var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner {
|
|
10
|
-
static
|
|
11
|
-
__name(this, "CryptoContractDiviner");
|
|
12
|
-
}
|
|
13
|
-
static configSchemas = [
|
|
14
|
-
...super.configSchemas,
|
|
15
|
-
CryptoContractDivinerConfigSchema
|
|
16
|
-
];
|
|
13
|
+
static configSchemas = [...super.configSchemas, CryptoContractDivinerConfigSchema];
|
|
17
14
|
static defaultConfigSchema = CryptoContractDivinerConfigSchema;
|
|
18
|
-
static labels = {
|
|
19
|
-
...super.labels,
|
|
20
|
-
...CryptoContractDivinerLabels
|
|
21
|
-
};
|
|
15
|
+
static labels = { ...super.labels, ...CryptoContractDivinerLabels };
|
|
22
16
|
static findCallResult(address, functionName, payloads) {
|
|
23
17
|
const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address);
|
|
24
18
|
return asCryptoContractFunctionCallSuccess(foundPayload)?.result;
|
|
@@ -48,14 +42,16 @@ var CryptoContractDiviner = class _CryptoContractDiviner extends AbstractDiviner
|
|
|
48
42
|
return prev;
|
|
49
43
|
}, {})
|
|
50
44
|
);
|
|
51
|
-
const result = await Promise.all(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
45
|
+
const result = await Promise.all(
|
|
46
|
+
addresses.map(async (address) => {
|
|
47
|
+
const foundCallResults = callResults.filter((callResult) => callResult.address === address);
|
|
48
|
+
const info = {
|
|
49
|
+
results: await this.reduceResults(foundCallResults),
|
|
50
|
+
...this.contractInfoRequiredFields(foundCallResults)
|
|
51
|
+
};
|
|
52
|
+
return info;
|
|
53
|
+
})
|
|
54
|
+
);
|
|
59
55
|
return result;
|
|
60
56
|
}
|
|
61
57
|
reduceResults(callResults) {
|
|
@@ -74,17 +70,15 @@ import { createPayloadSetWitnessPlugin } from "@xyo-network/payloadset-plugin";
|
|
|
74
70
|
// src/Witness.ts
|
|
75
71
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
76
72
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
77
|
-
import {
|
|
73
|
+
import {
|
|
74
|
+
CryptoContractFunctionCallResultSchema as CryptoContractFunctionCallResultSchema2,
|
|
75
|
+
CryptoContractFunctionCallSchema,
|
|
76
|
+
CryptoContractFunctionReadWitnessConfigSchema
|
|
77
|
+
} from "@xyo-network/crypto-contract-function-read-payload-plugin";
|
|
78
78
|
import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
|
|
79
79
|
import { Contract } from "ethers";
|
|
80
80
|
var CryptoContractFunctionReadWitness = class extends AbstractWitness {
|
|
81
|
-
static
|
|
82
|
-
__name(this, "CryptoContractFunctionReadWitness");
|
|
83
|
-
}
|
|
84
|
-
static configSchemas = [
|
|
85
|
-
...super.configSchemas,
|
|
86
|
-
CryptoContractFunctionReadWitnessConfigSchema
|
|
87
|
-
];
|
|
81
|
+
static configSchemas = [...super.configSchemas, CryptoContractFunctionReadWitnessConfigSchema];
|
|
88
82
|
static defaultConfigSchema = CryptoContractFunctionReadWitnessConfigSchema;
|
|
89
83
|
get abi() {
|
|
90
84
|
return assertEx2(this.config.abi, () => "Missing abi");
|
|
@@ -92,41 +86,41 @@ var CryptoContractFunctionReadWitness = class extends AbstractWitness {
|
|
|
92
86
|
async observeHandler(inPayloads = []) {
|
|
93
87
|
await this.started("throw");
|
|
94
88
|
try {
|
|
95
|
-
const observations = await Promise.all(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
...args ?? this.config.args ?? []
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
|
|
89
|
+
const observations = await Promise.all(
|
|
90
|
+
inPayloads.filter(isPayloadOfSchemaType2(CryptoContractFunctionCallSchema)).map(async ({ functionName, args, address }) => {
|
|
91
|
+
const { providers } = this.params;
|
|
92
|
+
const provider = providers[Date.now() % providers.length];
|
|
93
|
+
const validatedAddress = assertEx2(address ?? this.config.address, () => "Missing address");
|
|
94
|
+
const validatedFunctionName = assertEx2(functionName ?? this.config.functionName, () => "Missing address");
|
|
95
|
+
const mergedArgs = [...args ?? this.config.args ?? []];
|
|
96
|
+
const contract = new Contract(validatedAddress, this.abi, provider);
|
|
97
|
+
try {
|
|
98
|
+
const result = await contract[validatedFunctionName](...mergedArgs);
|
|
99
|
+
const transformedResult = typeof result === "bigint" ? result.toString(16) : result;
|
|
100
|
+
const observation = {
|
|
101
|
+
address: validatedAddress,
|
|
102
|
+
args: mergedArgs,
|
|
103
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
104
|
+
functionName: validatedFunctionName,
|
|
105
|
+
result: transformedResult,
|
|
106
|
+
schema: CryptoContractFunctionCallResultSchema2
|
|
107
|
+
};
|
|
108
|
+
return observation;
|
|
109
|
+
} catch (ex) {
|
|
110
|
+
const error = ex;
|
|
111
|
+
console.log(`Error [${this.config.name}]: ${error.code}`);
|
|
112
|
+
const observation = {
|
|
113
|
+
address: validatedAddress,
|
|
114
|
+
args: mergedArgs,
|
|
115
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
116
|
+
error: error.code,
|
|
117
|
+
functionName: validatedFunctionName,
|
|
118
|
+
schema: CryptoContractFunctionCallResultSchema2
|
|
119
|
+
};
|
|
120
|
+
return observation;
|
|
121
|
+
}
|
|
122
|
+
})
|
|
123
|
+
);
|
|
130
124
|
return observations;
|
|
131
125
|
} catch (ex) {
|
|
132
126
|
const error = ex;
|
|
@@ -137,17 +131,15 @@ var CryptoContractFunctionReadWitness = class extends AbstractWitness {
|
|
|
137
131
|
};
|
|
138
132
|
|
|
139
133
|
// src/Plugin.ts
|
|
140
|
-
var CryptoContractFunctionReadWitnessPlugin =
|
|
141
|
-
required: {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}, "witness")
|
|
150
|
-
}), "CryptoContractFunctionReadWitnessPlugin");
|
|
134
|
+
var CryptoContractFunctionReadWitnessPlugin = () => createPayloadSetWitnessPlugin(
|
|
135
|
+
{ required: { [NftSchema]: 1 }, schema: PayloadSetSchema },
|
|
136
|
+
{
|
|
137
|
+
witness: async (params) => {
|
|
138
|
+
const result = await CryptoContractFunctionReadWitness.create(params);
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
);
|
|
151
143
|
export {
|
|
152
144
|
CryptoContractDiviner,
|
|
153
145
|
CryptoContractFunctionReadWitness,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Diviner/Diviner.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\n/** @deprecated use EvmCallDiviner instead */\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\n/** @deprecated use EvmCallDiviner instead */\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractDivinerConfigSchema\n static override labels: CryptoContractDivinerLabels = { ...super.labels, ...CryptoContractDivinerLabels }\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 // 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: 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 // 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 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 // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\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\n// eslint-disable-next-line import/no-deprecated\nimport { CryptoContractFunctionReadWitness } from './Witness.ts'\n\n/** @deprecated use EvmCallWitness instead */\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n\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 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, Schema } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\n/** @deprecated use EvmCallWitness instead */\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\n/** @deprecated use EvmCallWitness instead */\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractFunctionReadWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractFunctionReadWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\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.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).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: Number((await provider.getNetwork()).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"],"mappings":"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","names":["assertEx","asCryptoContractFunctionCallSuccess","ContractInfoSchema","CryptoContractDivinerConfigSchema","CryptoContractDivinerLabels","CryptoContractFunctionCallResultSchema","AbstractDiviner","isPayloadOfSchemaType","CryptoContractDiviner","AbstractDiviner","configSchemas","CryptoContractDivinerConfigSchema","defaultConfigSchema","labels","CryptoContractDivinerLabels","findCallResult","address","functionName","payloads","foundPayload","find","payload","asCryptoContractFunctionCallSuccess","result","matchingExistingField","objs","field","expectedValue","at","didNotMatch","reduce","prev","obj","undefined","contractInfoRequiredFields","callResults","assertEx","chainId","schema","ContractInfoSchema","divineHandler","inPayloads","filter","isPayloadOfSchemaType","CryptoContractFunctionCallResultSchema","addresses","Object","keys","Promise","all","map","foundCallResults","callResult","info","results","reduceResults","NftSchema","PayloadSetSchema","createPayloadSetWitnessPlugin","assertEx","AbstractWitness","CryptoContractFunctionCallResultSchema","CryptoContractFunctionCallSchema","CryptoContractFunctionReadWitnessConfigSchema","isPayloadOfSchemaType","Contract","CryptoContractFunctionReadWitness","AbstractWitness","configSchemas","CryptoContractFunctionReadWitnessConfigSchema","defaultConfigSchema","abi","assertEx","config","observeHandler","inPayloads","started","observations","Promise","all","filter","isPayloadOfSchemaType","CryptoContractFunctionCallSchema","map","functionName","args","address","providers","params","provider","Date","now","length","validatedAddress","validatedFunctionName","mergedArgs","contract","Contract","result","transformedResult","toString","observation","chainId","Number","getNetwork","schema","CryptoContractFunctionCallResultSchema","ex","error","console","log","name","code","message","CryptoContractFunctionReadWitnessPlugin","createPayloadSetWitnessPlugin","required","NftSchema","schema","PayloadSetSchema","witness","params","result","CryptoContractFunctionReadWitness","create"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Diviner/Diviner.ts","../../src/Plugin.ts","../../src/Witness.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { Promisable } from '@xylabs/promise'\nimport {\n asCryptoContractFunctionCallSuccess,\n ContractInfo,\n ContractInfoSchema,\n CryptoContractDivinerConfigSchema,\n CryptoContractDivinerLabels,\n CryptoContractDivinerParams,\n CryptoContractFunctionCallResult,\n CryptoContractFunctionCallResultSchema,\n} from '@xyo-network/crypto-contract-function-read-payload-plugin'\nimport { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport { isPayloadOfSchemaType, Payload, Schema } from '@xyo-network/payload-model'\n\n/** @deprecated use EvmCallDiviner instead */\nexport type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]\n\n/** @deprecated use EvmCallDiviner instead */\nexport class CryptoContractDiviner<TParams extends CryptoContractDivinerParams = CryptoContractDivinerParams> extends AbstractDiviner<TParams> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractDivinerConfigSchema\n static override labels: CryptoContractDivinerLabels = { ...super.labels, ...CryptoContractDivinerLabels }\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 // 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: 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 // 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 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 // eslint-disable-next-line unicorn/no-array-reduce\n return callResults.reduce<Record<string, unknown>>((prev, callResult) => {\n prev[callResult.functionName] = asCryptoContractFunctionCallSuccess(callResult)?.result\n return prev\n }, {})\n }\n}\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\n// eslint-disable-next-line import/no-deprecated\nimport { CryptoContractFunctionReadWitness } from './Witness.ts'\n\n/** @deprecated use EvmCallWitness instead */\nexport const CryptoContractFunctionReadWitnessPlugin = () =>\n\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 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, Schema } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { Contract, Provider } from 'ethers'\n\n/** @deprecated use EvmCallWitness instead */\nexport type CryptoContractFunctionReadWitnessParams = WitnessParams<\n AnyConfigSchema<CryptoContractFunctionReadWitnessConfig>,\n {\n providers: Provider[]\n }\n>\n\n/** @deprecated use EvmCallWitness instead */\nexport class CryptoContractFunctionReadWitness<\n TParams extends CryptoContractFunctionReadWitnessParams = CryptoContractFunctionReadWitnessParams,\n> extends AbstractWitness<TParams, CryptoContractFunctionCall, CryptoContractFunctionCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, CryptoContractFunctionReadWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = CryptoContractFunctionReadWitnessConfigSchema\n\n get abi() {\n return assertEx(this.config.abi, () => 'Missing abi')\n }\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.abi, provider)\n try {\n const result = await contract[validatedFunctionName](...mergedArgs)\n const transformedResult = typeof result === 'bigint' ? result.toString(16) : result\n const observation: CryptoContractFunctionCallSuccess = {\n address: validatedAddress,\n args: mergedArgs,\n chainId: Number((await provider.getNetwork()).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: Number((await provider.getNetwork()).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"],"mappings":"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","names":["result","assertEx","CryptoContractFunctionCallResultSchema","isPayloadOfSchemaType"]}
|
package/dist/node/Plugin.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CryptoContractFunctionReadWitness } from './Witness.ts';
|
|
2
2
|
export declare const CryptoContractFunctionReadWitnessPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<CryptoContractFunctionReadWitness<import("@xylabs/object").BaseParamsFields & {
|
|
3
|
-
account?: import("
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.contract.function.read.config";
|
package/dist/node/Plugin.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CryptoContractFunctionReadWitness } from './Witness.ts';
|
|
2
2
|
export declare const CryptoContractFunctionReadWitnessPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<CryptoContractFunctionReadWitness<import("@xylabs/object").BaseParamsFields & {
|
|
3
|
-
account?: import("
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.contract.function.read.config";
|
package/dist/node/Plugin.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { CryptoContractFunctionReadWitness } from './Witness.ts';
|
|
2
2
|
export declare const CryptoContractFunctionReadWitnessPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetWitnessPlugin<CryptoContractFunctionReadWitness<import("@xylabs/object").BaseParamsFields & {
|
|
3
|
-
account?: import("
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import("
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-c593258ccf/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.crypto.contract.function.read.config";
|