Skip to content

Commit

Permalink
Match config/schema to diviner name
Browse files Browse the repository at this point in the history
  • Loading branch information
JoelBCarter committed Dec 14, 2023
1 parent 06b340f commit e94f6b3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@ import { Interface, JsonFragment } from 'ethers'

import { EvmTokenInterfaceImplemented, EvmTokenInterfaceImplementedSchema, TokenInterface } from './Payload'

export const EvmTokenInterfaceDivinerConfigSchema = `${EvmTokenInterfaceImplementedSchema}.diviner.config`
export type EvmTokenInterfaceDivinerConfigSchema = typeof EvmTokenInterfaceDivinerConfigSchema
export const EvmTokenInterfaceImplementedDivinerConfigSchema = `${EvmTokenInterfaceImplementedSchema}.diviner.config`
export type EvmTokenInterfaceImplementedDivinerConfigSchema = typeof EvmTokenInterfaceImplementedDivinerConfigSchema

export type EvmTokenInterfaceDivinerConfig = DivinerConfig<{ schema: EvmTokenInterfaceDivinerConfigSchema; tokenInterfaces?: TokenInterface[] }>
export type EvmTokenInterfaceImplementedDivinerConfig = DivinerConfig<{
schema: EvmTokenInterfaceImplementedDivinerConfigSchema
tokenInterfaces?: TokenInterface[]
}>

export type EvmTokenInterfaceDivinerParams = DivinerParams<AnyConfigSchema<EvmTokenInterfaceDivinerConfig>>
export type EvmTokenInterfaceImplementedDivinerParams = DivinerParams<AnyConfigSchema<EvmTokenInterfaceImplementedDivinerConfig>>

type DistributiveMappedType<T> = T extends string ? { [K in T]: readonly JsonFragment[] } : never
type TokenInterfaceDictionary = DistributiveMappedType<TokenInterface>
Expand All @@ -31,7 +34,7 @@ type TokenInterfaceDictionary = DistributiveMappedType<TokenInterface>
* A diviner that checks if a contract implements a token interface
*/
export class EvmTokenInterfaceImplementedDiviner<
TParams extends EvmTokenInterfaceDivinerParams = EvmTokenInterfaceDivinerParams,
TParams extends EvmTokenInterfaceImplementedDivinerParams = EvmTokenInterfaceImplementedDivinerParams,
> extends AbstractDiviner<TParams, EvmContract, EvmTokenInterfaceImplemented> {
/**
* The list of supported token interfaces
Expand All @@ -46,7 +49,7 @@ export class EvmTokenInterfaceImplementedDiviner<
ERC721Metadata: IERC721Metadata__factory.abi,
ERC721TokenReceiver: IERC721Receiver__factory.abi,
}
static override configSchemas = [EvmTokenInterfaceDivinerConfigSchema]
static override configSchemas = [EvmTokenInterfaceImplementedDivinerConfigSchema]

private _tokenInterfaces?: TokenInterfaceDictionary

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { describeIf } from '@xylabs/jest-helpers'
import { EvmContractSchema, EvmContractWitness, EvmContractWitnessConfigSchema } from '@xyo-network/evm-contract-witness'
import { BlockchainAddressSchema, getProvidersFromEnv } from '@xyo-network/witness-blockchain-abstract'

import { EvmTokenInterfaceDivinerConfigSchema, EvmTokenInterfaceImplementedDiviner } from '../Diviner'
import { EvmTokenInterfaceImplementedDiviner, EvmTokenInterfaceImplementedDivinerConfigSchema } from '../Diviner'
import { TokenInterface } from '../Payload'

describeIf(process.env.INFURA_PROJECT_ID)('EvmTokenInterfaceImplementedDiviner', () => {
Expand All @@ -22,7 +22,7 @@ describeIf(process.env.INFURA_PROJECT_ID)('EvmTokenInterfaceImplementedDiviner',
})
const diviner = await EvmTokenInterfaceImplementedDiviner.create({
account: 'random',
config: { schema: EvmTokenInterfaceDivinerConfigSchema, tokenInterfaces },
config: { schema: EvmTokenInterfaceImplementedDivinerConfigSchema, tokenInterfaces },
})
const observations = await witness.observe([{ address, schema: BlockchainAddressSchema }])
expect(observations?.length).toBeGreaterThan(0)
Expand All @@ -39,7 +39,7 @@ describeIf(process.env.INFURA_PROJECT_ID)('EvmTokenInterfaceImplementedDiviner',
it.each(cases)('returns implemented false', async (address, tokenInterfaces) => {
const diviner = await EvmTokenInterfaceImplementedDiviner.create({
account: 'random',
config: { schema: EvmTokenInterfaceDivinerConfigSchema, tokenInterfaces },
config: { schema: EvmTokenInterfaceImplementedDivinerConfigSchema, tokenInterfaces },
})
const results = await diviner.divine([{ address, block: 0, chainId: 1, code: '0x00', schema: EvmContractSchema }])
expect(results?.length).toBeGreaterThan(0)
Expand Down

0 comments on commit e94f6b3

Please sign in to comment.