@xyo-network/evm-call-witness 2.84.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.
- package/LICENSE +165 -0
- package/README.md +13 -0
- package/dist/browser/Diviner.d.cts +31 -0
- package/dist/browser/Diviner.d.cts.map +1 -0
- package/dist/browser/Diviner.d.mts +31 -0
- package/dist/browser/Diviner.d.mts.map +1 -0
- package/dist/browser/Diviner.d.ts +31 -0
- package/dist/browser/Diviner.d.ts.map +1 -0
- package/dist/browser/Payload.d.cts +53 -0
- package/dist/browser/Payload.d.cts.map +1 -0
- package/dist/browser/Payload.d.mts +53 -0
- package/dist/browser/Payload.d.mts.map +1 -0
- package/dist/browser/Payload.d.ts +53 -0
- package/dist/browser/Payload.d.ts.map +1 -0
- package/dist/browser/Witness.d.cts +20 -0
- package/dist/browser/Witness.d.cts.map +1 -0
- package/dist/browser/Witness.d.mts +20 -0
- package/dist/browser/Witness.d.mts.map +1 -0
- package/dist/browser/Witness.d.ts +20 -0
- package/dist/browser/Witness.d.ts.map +1 -0
- package/dist/browser/index.cjs +178 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +4 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts +4 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +155 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/node/Diviner.d.cts +31 -0
- package/dist/node/Diviner.d.cts.map +1 -0
- package/dist/node/Diviner.d.mts +31 -0
- package/dist/node/Diviner.d.mts.map +1 -0
- package/dist/node/Diviner.d.ts +31 -0
- package/dist/node/Diviner.d.ts.map +1 -0
- package/dist/node/Payload.d.cts +53 -0
- package/dist/node/Payload.d.cts.map +1 -0
- package/dist/node/Payload.d.mts +53 -0
- package/dist/node/Payload.d.mts.map +1 -0
- package/dist/node/Payload.d.ts +53 -0
- package/dist/node/Payload.d.ts.map +1 -0
- package/dist/node/Witness.d.cts +20 -0
- package/dist/node/Witness.d.cts.map +1 -0
- package/dist/node/Witness.d.mts +20 -0
- package/dist/node/Witness.d.mts.map +1 -0
- package/dist/node/Witness.d.ts +20 -0
- package/dist/node/Witness.d.ts.map +1 -0
- package/dist/node/index.cjs +194 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +4 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +4 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +157 -0
- package/dist/node/index.js.map +1 -0
- package/package.json +78 -0
- package/src/Diviner.ts +102 -0
- package/src/Payload.ts +51 -0
- package/src/Witness.ts +106 -0
- package/src/index.ts +3 -0
- package/src/spec/Erc721Sentinel.json +134 -0
- package/src/spec/Erc721TokenSentinel.json +86 -0
- package/typedoc.json +5 -0
- package/xy.config.ts +14 -0
package/package.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xyo-network/evm-call-witness",
|
|
3
|
+
"author": {
|
|
4
|
+
"email": "support@xyo.network",
|
|
5
|
+
"name": "XYO Development Team",
|
|
6
|
+
"url": "https://xyo.network"
|
|
7
|
+
},
|
|
8
|
+
"bugs": {
|
|
9
|
+
"email": "support@xyo.network",
|
|
10
|
+
"url": "https://github.com/XYOracleNetwork/plugins/issues"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@xylabs/assert": "^2.13.20",
|
|
14
|
+
"@xylabs/promise": "^2.13.20",
|
|
15
|
+
"@xyo-network/abstract-diviner": "^2.84.3",
|
|
16
|
+
"@xyo-network/diviner-model": "^2.84.3",
|
|
17
|
+
"@xyo-network/erc1822-witness": "~2.84.1",
|
|
18
|
+
"@xyo-network/erc1967-witness": "~2.84.1",
|
|
19
|
+
"@xyo-network/payload-model": "^2.84.3",
|
|
20
|
+
"@xyo-network/witness-blockchain-abstract": "^2.84.3",
|
|
21
|
+
"ethers": "^6.9.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@xylabs/jest-helpers": "^2.13.20",
|
|
25
|
+
"@xylabs/profile": "^2.13.20",
|
|
26
|
+
"@xylabs/ts-scripts-yarn3": "^3.2.19",
|
|
27
|
+
"@xylabs/tsconfig": "^3.2.19",
|
|
28
|
+
"@xyo-network/account": "^2.84.3",
|
|
29
|
+
"@xyo-network/manifest": "^2.84.3",
|
|
30
|
+
"@xyo-network/module-model": "^2.84.3",
|
|
31
|
+
"@xyo-network/open-zeppelin-typechain": "^3.0.5",
|
|
32
|
+
"@xyo-network/sentinel-model": "^2.84.3",
|
|
33
|
+
"@xyo-network/witness-model": "^2.84.3",
|
|
34
|
+
"jest": "^29.7.0",
|
|
35
|
+
"typescript": "^5.3.3"
|
|
36
|
+
},
|
|
37
|
+
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
38
|
+
"types": "dist/node/index.d.ts",
|
|
39
|
+
"exports": {
|
|
40
|
+
".": {
|
|
41
|
+
"browser": {
|
|
42
|
+
"require": {
|
|
43
|
+
"types": "./dist/browser/index.d.cts",
|
|
44
|
+
"default": "./dist/browser/index.cjs"
|
|
45
|
+
},
|
|
46
|
+
"import": {
|
|
47
|
+
"types": "./dist/browser/index.d.mts",
|
|
48
|
+
"default": "./dist/browser/index.js"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"node": {
|
|
52
|
+
"require": {
|
|
53
|
+
"types": "./dist/node/index.d.cts",
|
|
54
|
+
"default": "./dist/node/index.cjs"
|
|
55
|
+
},
|
|
56
|
+
"import": {
|
|
57
|
+
"types": "./dist/node/index.d.mts",
|
|
58
|
+
"default": "./dist/node/index.js"
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"./package.json": "./package.json"
|
|
63
|
+
},
|
|
64
|
+
"main": "dist/node/index.cjs",
|
|
65
|
+
"module": "dist/node/index.js",
|
|
66
|
+
"homepage": "https://xyo.network",
|
|
67
|
+
"license": "LGPL-3.0-only",
|
|
68
|
+
"publishConfig": {
|
|
69
|
+
"access": "public"
|
|
70
|
+
},
|
|
71
|
+
"repository": {
|
|
72
|
+
"type": "git",
|
|
73
|
+
"url": "https://github.com/XYOracleNetwork/plugins.git"
|
|
74
|
+
},
|
|
75
|
+
"sideEffects": false,
|
|
76
|
+
"version": "2.84.1",
|
|
77
|
+
"type": "module"
|
|
78
|
+
}
|
package/src/Diviner.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { Promisable } from '@xylabs/promise'
|
|
3
|
+
import { AbstractDiviner } from '@xyo-network/abstract-diviner'
|
|
4
|
+
import { DivinerConfig, DivinerParams } from '@xyo-network/diviner-model'
|
|
5
|
+
import { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'
|
|
6
|
+
|
|
7
|
+
import { asEvmCallSuccess, EvmCallResult, EvmCallResultSchema } from './Payload'
|
|
8
|
+
|
|
9
|
+
export type FindCallResult<TResult = string, TPayload = Payload> = [TResult, TPayload] | [undefined, TPayload] | [undefined, undefined]
|
|
10
|
+
|
|
11
|
+
export const EvmCallDivinerConfigSchema = 'network.xyo.evm.call.diviner.config'
|
|
12
|
+
export type EvmCallDivinerConfigSchema = typeof EvmCallDivinerConfigSchema
|
|
13
|
+
|
|
14
|
+
export type EvmCallDivinerConfig = DivinerConfig<{
|
|
15
|
+
schema: EvmCallDivinerConfigSchema
|
|
16
|
+
}>
|
|
17
|
+
export type EvmCallDivinerParams = DivinerParams<EvmCallDivinerConfig>
|
|
18
|
+
|
|
19
|
+
export const EvmCallResultsSchema = 'network.xyo.evm.call.results'
|
|
20
|
+
export type EvmCallResultsSchema = typeof EvmCallResultsSchema
|
|
21
|
+
|
|
22
|
+
export type EvmCallResults = Payload<
|
|
23
|
+
{
|
|
24
|
+
address: string
|
|
25
|
+
chainId: string
|
|
26
|
+
results?: Record<
|
|
27
|
+
string,
|
|
28
|
+
{
|
|
29
|
+
args?: unknown[]
|
|
30
|
+
result: unknown
|
|
31
|
+
}
|
|
32
|
+
>
|
|
33
|
+
},
|
|
34
|
+
EvmCallResultsSchema
|
|
35
|
+
>
|
|
36
|
+
|
|
37
|
+
export class EvmCallDiviner<TParams extends EvmCallDivinerParams = EvmCallDivinerParams> extends AbstractDiviner<TParams> {
|
|
38
|
+
static override configSchemas = [EvmCallDivinerConfigSchema]
|
|
39
|
+
|
|
40
|
+
protected static findCallResult<TResult = string>(address: string, functionName: string, payloads: EvmCallResult[]): TResult | undefined {
|
|
41
|
+
const foundPayload = payloads.find((payload) => payload.functionName === functionName && payload.address === address)
|
|
42
|
+
return asEvmCallSuccess(foundPayload)?.result as TResult | undefined
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
protected static matchingExistingField<R = string, T extends Payload = Payload>(objs: T[], field: keyof T): R | undefined {
|
|
46
|
+
const expectedValue = objs.at(0)?.[field] as R
|
|
47
|
+
const didNotMatch = objs.reduce((prev, obj) => {
|
|
48
|
+
return prev || obj[field] !== expectedValue
|
|
49
|
+
}, false)
|
|
50
|
+
return didNotMatch ? undefined : expectedValue
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected contractInfoRequiredFields(callResults: EvmCallResult[]): EvmCallResults {
|
|
54
|
+
return {
|
|
55
|
+
address: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'address'), 'Mismatched address'),
|
|
56
|
+
chainId: assertEx(EvmCallDiviner.matchingExistingField(callResults, 'chainId'), 'Mismatched chainId'),
|
|
57
|
+
schema: EvmCallResultsSchema,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
protected override async divineHandler(inPayloads: EvmCallResult[] = []): Promise<EvmCallResults[]> {
|
|
62
|
+
const callResults = inPayloads.filter(isPayloadOfSchemaType<EvmCallResult>(EvmCallResultSchema))
|
|
63
|
+
const addresses = Object.keys(
|
|
64
|
+
callResults.reduce<Record<string, boolean>>((prev, result) => {
|
|
65
|
+
if (result.address) {
|
|
66
|
+
prev[result.address] = true
|
|
67
|
+
}
|
|
68
|
+
return prev
|
|
69
|
+
}, {}),
|
|
70
|
+
)
|
|
71
|
+
const result = await Promise.all(
|
|
72
|
+
addresses.map(async (address) => {
|
|
73
|
+
const foundCallResults = callResults.filter((callResult) => callResult.address === address)
|
|
74
|
+
const results: EvmCallResults = {
|
|
75
|
+
...{ results: await this.reduceResults(foundCallResults) },
|
|
76
|
+
...this.contractInfoRequiredFields(foundCallResults),
|
|
77
|
+
}
|
|
78
|
+
return results
|
|
79
|
+
}),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
return result
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
protected reduceResults(callResults: EvmCallResult[]): Promisable<EvmCallResults['results']> {
|
|
86
|
+
return callResults.reduce<
|
|
87
|
+
Record<
|
|
88
|
+
string,
|
|
89
|
+
{
|
|
90
|
+
args?: unknown[]
|
|
91
|
+
result: unknown
|
|
92
|
+
}
|
|
93
|
+
>
|
|
94
|
+
>((prev, callResult) => {
|
|
95
|
+
const typedCallResult = asEvmCallSuccess(callResult)
|
|
96
|
+
if (typedCallResult) {
|
|
97
|
+
prev[callResult.functionName] = { args: typedCallResult.args, result: typedCallResult?.result }
|
|
98
|
+
}
|
|
99
|
+
return prev
|
|
100
|
+
}, {})
|
|
101
|
+
}
|
|
102
|
+
}
|
package/src/Payload.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Payload } from '@xyo-network/payload-model'
|
|
2
|
+
|
|
3
|
+
export const EvmCallSchema = 'network.xyo.blockchain.contract.call'
|
|
4
|
+
export type EvmCallSchema = typeof EvmCallSchema
|
|
5
|
+
|
|
6
|
+
export type EvmCall = Payload<
|
|
7
|
+
{
|
|
8
|
+
address?: string
|
|
9
|
+
args?: unknown[]
|
|
10
|
+
block?: number
|
|
11
|
+
functionName?: string
|
|
12
|
+
},
|
|
13
|
+
EvmCallSchema
|
|
14
|
+
>
|
|
15
|
+
|
|
16
|
+
export const EvmCallResultSchema = 'network.xyo.blockchain.contract.call.result'
|
|
17
|
+
export type EvmCallResultSchema = typeof EvmCallResultSchema
|
|
18
|
+
|
|
19
|
+
export type EvmCallResultBase = Payload<
|
|
20
|
+
{
|
|
21
|
+
address: string
|
|
22
|
+
args: unknown[]
|
|
23
|
+
block?: number
|
|
24
|
+
chainId: number
|
|
25
|
+
functionName: string
|
|
26
|
+
implementation?: string
|
|
27
|
+
},
|
|
28
|
+
EvmCallResultSchema
|
|
29
|
+
>
|
|
30
|
+
|
|
31
|
+
export type EvmCallSuccess = EvmCallResultBase & {
|
|
32
|
+
result: unknown
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type EvmCallFailure = EvmCallResultBase & {
|
|
36
|
+
error: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type EvmCallResult = EvmCallSuccess | EvmCallFailure
|
|
40
|
+
|
|
41
|
+
export const isEvmCallSuccess = (payload?: EvmCallResult): payload is EvmCallSuccess => {
|
|
42
|
+
return (payload as EvmCallSuccess | undefined)?.result !== undefined
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const isEvmCallFailure = (payload?: EvmCallResult): payload is EvmCallFailure => {
|
|
46
|
+
return (payload as EvmCallFailure | undefined)?.error !== undefined
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const asEvmCallSuccess = (payload?: EvmCallResult) => (isEvmCallSuccess(payload) ? payload : undefined)
|
|
50
|
+
|
|
51
|
+
export const asEvmCallFailure = (payload?: EvmCallResult) => (isEvmCallFailure(payload) ? payload : undefined)
|
package/src/Witness.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { assertEx } from '@xylabs/assert'
|
|
2
|
+
import { getErc1822SlotStatus } from '@xyo-network/erc1822-witness'
|
|
3
|
+
import { getErc1967SlotStatus } from '@xyo-network/erc1967-witness'
|
|
4
|
+
import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
|
|
5
|
+
import { AbstractBlockchainWitness, BlockchainWitnessConfig, BlockchainWitnessParams } from '@xyo-network/witness-blockchain-abstract'
|
|
6
|
+
import { Contract, JsonFragment } from 'ethers'
|
|
7
|
+
|
|
8
|
+
import { EvmCall, EvmCallResult, EvmCallResultSchema, EvmCallSchema, EvmCallSuccess } from './Payload'
|
|
9
|
+
|
|
10
|
+
export type Abi = string | ReadonlyArray<JsonFragment | string>
|
|
11
|
+
|
|
12
|
+
export const EvmCallWitnessConfigSchema = 'network.xyo.evm.call.witness.config'
|
|
13
|
+
export type EvmCallWitnessConfigSchema = typeof EvmCallWitnessConfigSchema
|
|
14
|
+
|
|
15
|
+
export type EvmCallWitnessConfig = BlockchainWitnessConfig<
|
|
16
|
+
{
|
|
17
|
+
abi?: Abi
|
|
18
|
+
address?: string
|
|
19
|
+
args?: unknown[]
|
|
20
|
+
block?: number
|
|
21
|
+
functionName?: string
|
|
22
|
+
},
|
|
23
|
+
EvmCallWitnessConfigSchema
|
|
24
|
+
>
|
|
25
|
+
|
|
26
|
+
export type EvmCallWitnessParams = BlockchainWitnessParams<EvmCallWitnessConfig>
|
|
27
|
+
|
|
28
|
+
const prefixHex = (value?: string) => {
|
|
29
|
+
if (value !== undefined) {
|
|
30
|
+
const lowerValue = value.toLowerCase()
|
|
31
|
+
return lowerValue.startsWith('0x') ? lowerValue : `0x${lowerValue}`
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const isHexZero = (value?: string) => {
|
|
36
|
+
const prefixedValue = prefixHex(value)
|
|
37
|
+
return prefixedValue === undefined ? true : BigInt(prefixedValue) === 0n
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class EvmCallWitness<TParams extends EvmCallWitnessParams = EvmCallWitnessParams> extends AbstractBlockchainWitness<
|
|
41
|
+
TParams,
|
|
42
|
+
EvmCall,
|
|
43
|
+
EvmCallResult
|
|
44
|
+
> {
|
|
45
|
+
static override configSchemas = [EvmCallWitnessConfigSchema]
|
|
46
|
+
|
|
47
|
+
get abi() {
|
|
48
|
+
return assertEx(this.config.abi, 'Missing abi')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
protected override async observeHandler(inPayloads: EvmCall[] = []): Promise<EvmCallResult[]> {
|
|
52
|
+
await this.started('throw')
|
|
53
|
+
//calling it here to make sure we rests the cache
|
|
54
|
+
await this.getProviders()
|
|
55
|
+
try {
|
|
56
|
+
const observations = await Promise.all(
|
|
57
|
+
inPayloads.filter(isPayloadOfSchemaType(EvmCallSchema)).map(async ({ functionName, args, address, block: payloadBlock }) => {
|
|
58
|
+
const validatedAddress = assertEx(address ?? this.config.address, 'Missing address')
|
|
59
|
+
const validatedFunctionName = assertEx(functionName ?? this.config.functionName, 'Missing address')
|
|
60
|
+
const mergedArgs = [...(args ?? this.config.args ?? [])]
|
|
61
|
+
|
|
62
|
+
const provider = await this.getProvider(true, true)
|
|
63
|
+
|
|
64
|
+
const block = this.config.block ?? payloadBlock ?? (await provider.getBlockNumber())
|
|
65
|
+
|
|
66
|
+
//Check if ERC-1967 Upgradeable
|
|
67
|
+
const erc1967Status = await getErc1967SlotStatus(provider, validatedAddress, block)
|
|
68
|
+
|
|
69
|
+
//Check if ERC-1822 Upgradeable
|
|
70
|
+
const erc1822Status = await getErc1822SlotStatus(provider, validatedAddress, block)
|
|
71
|
+
|
|
72
|
+
const implementation = isHexZero(erc1967Status.slots.implementation) ? erc1822Status.implementation : erc1967Status.implementation
|
|
73
|
+
|
|
74
|
+
const contract = new Contract(implementation, this.abi, provider)
|
|
75
|
+
let transformedResult: unknown
|
|
76
|
+
try {
|
|
77
|
+
const result = await contract[validatedFunctionName](...mergedArgs)
|
|
78
|
+
transformedResult = typeof result === 'bigint' ? `0x${result.toString(16)}` : result
|
|
79
|
+
} catch (ex) {
|
|
80
|
+
//const error = ex as Error & { code: string }
|
|
81
|
+
//this.logger.error(`Error [${this.config.name}]: ${error.code} : ${error.message}`)
|
|
82
|
+
}
|
|
83
|
+
const observation: EvmCallSuccess = {
|
|
84
|
+
address: validatedAddress,
|
|
85
|
+
args: mergedArgs,
|
|
86
|
+
block,
|
|
87
|
+
chainId: Number((await provider.getNetwork()).chainId),
|
|
88
|
+
functionName: validatedFunctionName,
|
|
89
|
+
result: transformedResult,
|
|
90
|
+
schema: EvmCallResultSchema,
|
|
91
|
+
}
|
|
92
|
+
if (implementation !== validatedAddress) {
|
|
93
|
+
observation.implementation = implementation
|
|
94
|
+
}
|
|
95
|
+
console.log(`observation: ${JSON.stringify(observation, null, 2)}`)
|
|
96
|
+
return observation
|
|
97
|
+
}),
|
|
98
|
+
)
|
|
99
|
+
return observations
|
|
100
|
+
} catch (ex) {
|
|
101
|
+
const error = ex as Error
|
|
102
|
+
console.log(`Error [${this.config.name}]: ${error.message}`)
|
|
103
|
+
throw error
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"config": {
|
|
6
|
+
"name": "Erc721Info",
|
|
7
|
+
"schema": "network.xyo.node.config"
|
|
8
|
+
},
|
|
9
|
+
"modules": {
|
|
10
|
+
"public": [
|
|
11
|
+
{
|
|
12
|
+
"config": {
|
|
13
|
+
"functionName": "name",
|
|
14
|
+
"labels": {
|
|
15
|
+
"network.xyo.evm.interface": "Erc721"
|
|
16
|
+
},
|
|
17
|
+
"language": "javascript",
|
|
18
|
+
"name": "Erc721NameWitness",
|
|
19
|
+
"params": [],
|
|
20
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"config": {
|
|
25
|
+
"functionName": "symbol",
|
|
26
|
+
"labels": {
|
|
27
|
+
"network.xyo.evm.interface": "Erc721"
|
|
28
|
+
},
|
|
29
|
+
"language": "javascript",
|
|
30
|
+
"name": "Erc721SymbolWitness",
|
|
31
|
+
"params": [],
|
|
32
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"config": {
|
|
37
|
+
"functionName": "tokenURI",
|
|
38
|
+
"labels": {
|
|
39
|
+
"network.xyo.evm.interface": "Erc721"
|
|
40
|
+
},
|
|
41
|
+
"language": "javascript",
|
|
42
|
+
"name": "Erc721TokenURIWitness",
|
|
43
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"config": {
|
|
48
|
+
"functionName": "ownerOf",
|
|
49
|
+
"labels": {
|
|
50
|
+
"network.xyo.evm.interface": "Erc721"
|
|
51
|
+
},
|
|
52
|
+
"language": "javascript",
|
|
53
|
+
"name": "Erc721OwnerOfWitness",
|
|
54
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"config": {
|
|
59
|
+
"functionName": "totalSupply",
|
|
60
|
+
"labels": {
|
|
61
|
+
"network.xyo.evm.interface": "Erc721Enumerable"
|
|
62
|
+
},
|
|
63
|
+
"language": "javascript",
|
|
64
|
+
"name": "Erc721TotalSupplyWitness",
|
|
65
|
+
"params": [],
|
|
66
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"config": {
|
|
71
|
+
"functionName": "tokenByIndex",
|
|
72
|
+
"labels": {
|
|
73
|
+
"network.xyo.evm.interface": "Erc721Enumerable"
|
|
74
|
+
},
|
|
75
|
+
"language": "javascript",
|
|
76
|
+
"name": "Erc721TokenByIndexWitness",
|
|
77
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"config": {
|
|
82
|
+
"functionName": "uri",
|
|
83
|
+
"labels": {
|
|
84
|
+
"network.xyo.evm.interface": "Erc1155"
|
|
85
|
+
},
|
|
86
|
+
"language": "javascript",
|
|
87
|
+
"name": "Erc1155UriWitness",
|
|
88
|
+
"params": [],
|
|
89
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"config": {
|
|
94
|
+
"language": "javascript",
|
|
95
|
+
"name": "ContractInfoDiviner",
|
|
96
|
+
"schema": "network.xyo.evm.call.diviner.config"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"config": {
|
|
101
|
+
"language": "javascript",
|
|
102
|
+
"name": "NftInfoSentinel",
|
|
103
|
+
"schema": "network.xyo.sentinel.config",
|
|
104
|
+
"synchronous": "true",
|
|
105
|
+
"tasks": [
|
|
106
|
+
{
|
|
107
|
+
"input": true,
|
|
108
|
+
"module": "Erc721NameWitness"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"input": true,
|
|
112
|
+
"module": "Erc721SymbolWitness"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"input": true,
|
|
116
|
+
"module": "Erc721TotalSupplyWitness"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"input": [
|
|
120
|
+
"Erc721NameWitness",
|
|
121
|
+
"Erc721SymbolWitness",
|
|
122
|
+
"Erc721TotalSupplyWitness"
|
|
123
|
+
],
|
|
124
|
+
"module": "ContractInfoDiviner"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
"schema": "network.xyo.manifest"
|
|
134
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/XYOracleNetwork/sdk-xyo-client-js/main/packages/manifest/src/schema.json",
|
|
3
|
+
"nodes": [
|
|
4
|
+
{
|
|
5
|
+
"config": {
|
|
6
|
+
"name": "Erc721TokenInfo",
|
|
7
|
+
"schema": "network.xyo.node.config"
|
|
8
|
+
},
|
|
9
|
+
"modules": {
|
|
10
|
+
"public": [
|
|
11
|
+
{
|
|
12
|
+
"config": {
|
|
13
|
+
"functionName": "tokenURI",
|
|
14
|
+
"labels": {
|
|
15
|
+
"network.xyo.evm.interface": "ERC721URIStorage"
|
|
16
|
+
},
|
|
17
|
+
"language": "javascript",
|
|
18
|
+
"name": "Erc721TokenURIWitness",
|
|
19
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"config": {
|
|
24
|
+
"functionName": "ownerOf",
|
|
25
|
+
"labels": {
|
|
26
|
+
"network.xyo.evm.interface": "Erc721"
|
|
27
|
+
},
|
|
28
|
+
"language": "javascript",
|
|
29
|
+
"name": "Erc721OwnerOfWitness",
|
|
30
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"config": {
|
|
35
|
+
"functionName": "uri",
|
|
36
|
+
"labels": {
|
|
37
|
+
"network.xyo.evm.interface": "Erc1155"
|
|
38
|
+
},
|
|
39
|
+
"language": "javascript",
|
|
40
|
+
"name": "Erc1155UriWitness",
|
|
41
|
+
"schema": "network.xyo.evm.call.witness.config"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"config": {
|
|
46
|
+
"language": "javascript",
|
|
47
|
+
"name": "TokenInfoDiviner",
|
|
48
|
+
"schema": "network.xyo.evm.call.diviner.config"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"config": {
|
|
53
|
+
"language": "javascript",
|
|
54
|
+
"name": "NftTokenInfoSentinel",
|
|
55
|
+
"schema": "network.xyo.sentinel.config",
|
|
56
|
+
"synchronous": "true",
|
|
57
|
+
"tasks": [
|
|
58
|
+
{
|
|
59
|
+
"input": true,
|
|
60
|
+
"module": "Erc721TokenURIWitness"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"input": true,
|
|
64
|
+
"module": "Erc721OwnerOfWitness"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"input": true,
|
|
68
|
+
"module": "Erc1155UriWitness"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"input": [
|
|
72
|
+
"Erc721TokenURIWitness",
|
|
73
|
+
"Erc721OwnerOfWitness",
|
|
74
|
+
"Erc1155UriWitness"
|
|
75
|
+
],
|
|
76
|
+
"module": "TokenInfoDiviner"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
],
|
|
85
|
+
"schema": "network.xyo.manifest"
|
|
86
|
+
}
|
package/typedoc.json
ADDED
package/xy.config.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
|
|
2
|
+
const config: XyTsupConfig = {
|
|
3
|
+
compile: {
|
|
4
|
+
browser: {
|
|
5
|
+
src: true,
|
|
6
|
+
},
|
|
7
|
+
node: {
|
|
8
|
+
src: true,
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// eslint-disable-next-line import/no-default-export
|
|
14
|
+
export default config
|