1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00

fixes on the checks, also consider name typos, as we currently have

This commit is contained in:
paulo-ocean 2024-09-06 15:07:57 +01:00
parent 1ca23626c2
commit 9277847279
3 changed files with 113 additions and 43 deletions

View File

@ -160,7 +160,7 @@ export const configHelperNetworks: Config[] = [
{ {
...configHelperNetworksBase, ...configHelperNetworksBase,
chainId: 23295, chainId: 23295,
network: 'oasis_saphire_testnet', network: 'oasis_sapphire_testnet',
nodeUri: 'https://testnet.sapphire.oasis.dev', nodeUri: 'https://testnet.sapphire.oasis.dev',
subgraphUri: subgraphUri:
'https://v4.subgraph.sapphire-testnet.oceanprotocol.com/subgraphs/name/oceanprotocol/ocean-subgraph', 'https://v4.subgraph.sapphire-testnet.oceanprotocol.com/subgraphs/name/oceanprotocol/ocean-subgraph',
@ -181,9 +181,16 @@ export const configHelperNetworks: Config[] = [
] ]
export const KNOWN_CONFIDENTIAL_EVMS = { export const KNOWN_CONFIDENTIAL_EVMS = {
names: ['asis_saphire_testnet', 'oasis_saphire'], // there are some typos around these names (on addresses.json is just one 'p' on 'sapphire')
chainIds: [23295, 23294] networks: [
{
name: ['oasis_sapphire', 'oasis_saphire'], // include alias or typos
chainId: 23294
},
{ name: ['oasis_sapphire_testnet', 'oasis_saphire_testnet'], chainId: 23295 }
]
} }
export class ConfigHelper { export class ConfigHelper {
/* Load contract addresses from env ADDRESS_FILE (generated by ocean-contracts) */ /* Load contract addresses from env ADDRESS_FILE (generated by ocean-contracts) */
public getAddressesFromEnv(network: string, customAddresses?: any): Partial<Config> { public getAddressesFromEnv(network: string, customAddresses?: any): Partial<Config> {
@ -271,6 +278,22 @@ export class ConfigHelper {
return configAddresses return configAddresses
} }
private checkConfigConfidential(network: string | number): boolean {
let search
if (typeof network === 'string') {
search = KNOWN_CONFIDENTIAL_EVMS.networks.filter((netInfo) => {
return netInfo.name.includes(network.toString())
})
// chain id
} else {
search = KNOWN_CONFIDENTIAL_EVMS.networks.filter((netInfo) => {
return netInfo.chainId === Number(network)
})
}
return search.length > 0
}
/** /**
* Returns the config object for a specific network supported by the oceanprotocol stack * Returns the config object for a specific network supported by the oceanprotocol stack
* @param {string | number} network the network's chainId or name * @param {string | number} network the network's chainId or name
@ -279,8 +302,27 @@ export class ConfigHelper {
*/ */
public getConfig(network: string | number, infuraProjectId?: string): Config { public getConfig(network: string | number, infuraProjectId?: string): Config {
const filterBy = typeof network === 'string' ? 'network' : 'chainId' const filterBy = typeof network === 'string' ? 'network' : 'chainId'
let config = configHelperNetworks.find((c) => c[filterBy] === network) let config = configHelperNetworks.find((c) => c[filterBy] === network)
if (!config) {
// check typos of network name
const checkAlternateNames =
filterBy === 'network' && network.toString().includes('oasis_sap')
if (checkAlternateNames) {
let networkName = network.toString()
// 1st search was with 2 'pp' characters
if (networkName.indexOf('sapp') > -1) {
networkName = networkName.replace('sapp', 'sap')
// try just one 'p
} else {
networkName = networkName.replace('sap', 'sapp')
// try with 2 pp
}
config = configHelperNetworks.find((c) => c[filterBy] === networkName)
}
}
if (!config) { if (!config) {
LoggerInstance.error(`No config found for given network '${network}'`) LoggerInstance.error(`No config found for given network '${network}'`)
return null return null
@ -299,15 +341,8 @@ export class ConfigHelper {
addresses = null addresses = null
} }
const contractAddressesConfig = this.getAddressesFromEnv(config.network, addresses) const contractAddressesConfig = this.getAddressesFromEnv(config.network, addresses)
// network name
if (filterBy === 'network') { config.confidentialEVM = this.checkConfigConfidential(network)
config.confidentialEVM = KNOWN_CONFIDENTIAL_EVMS.names.includes(
network.toString().toLowerCase()
)
// chain id
} else {
config.confidentialEVM = KNOWN_CONFIDENTIAL_EVMS.chainIds.includes(Number(network))
}
config = { ...config, ...contractAddressesConfig } config = { ...config, ...contractAddressesConfig }

View File

@ -1,31 +1,22 @@
import { SHA256 } from 'crypto-js' import { SHA256 } from 'crypto-js'
import { ethers, Signer } from 'ethers' import { ethers, Signer } from 'ethers'
import { import { ConfigHelper, KNOWN_CONFIDENTIAL_EVMS } from '../../src/config'
Aquarius,
DatatokenCreateParams,
Nft,
NftCreateData,
NftFactory,
ProviderInstance,
ZERO_ADDRESS,
// approveWei,
// ProviderComputeInitialize,
// ConsumeMarketFee,
// Datatoken,
// Config,
// DDO,
// ProviderFees,
getEventFromTx,
DispenserCreationParams,
FreCreationParams,
ConfigHelper
} from '../../src'
import { hexlify } from 'ethers/lib/utils' import { hexlify } from 'ethers/lib/utils'
import { createHash } from 'crypto' import { createHash } from 'crypto'
import fs from 'fs' import fs from 'fs'
// eslint-disable-next-line import/no-named-default // eslint-disable-next-line import/no-named-default
import { default as Addresses } from '@oceanprotocol/contracts/addresses/address.json' import { default as Addresses } from '@oceanprotocol/contracts/addresses/address.json'
import { Aquarius } from '../services/Aquarius'
import { NftFactory } from '../contracts/NFTFactory'
import { Nft } from '../contracts/NFT'
import { DatatokenCreateParams } from '../@types/Datatoken'
import { NftCreateData } from '../@types/NFTFactory'
import { ZERO_ADDRESS } from './Constants'
import { DispenserCreationParams } from '../@types/Dispenser'
import { FreCreationParams } from '../@types/FixedPrice'
import { getEventFromTx } from './ContractUtils'
import { ProviderInstance } from '../services/Provider'
// template address OR templateId // template address OR templateId
export function isConfidentialEVM(network: string | number): boolean { export function isConfidentialEVM(network: string | number): boolean {
@ -88,7 +79,7 @@ export async function calculateTemplateIndex(
if (typeof template === 'string') { if (typeof template === 'string') {
const templateAddresses: any[] = Object.values(templatesAvailable) const templateAddresses: any[] = Object.values(templatesAvailable)
index = templateAddresses.findIndex(function (item) { index = templateAddresses.findIndex(function (item) {
return item.indexOf(template) !== -1 return item === template
}) })
} else { } else {
const templateIndexes = Object.keys(templatesAvailable) const templateIndexes = Object.keys(templatesAvailable)
@ -96,6 +87,9 @@ export async function calculateTemplateIndex(
return item.indexOf(template.toString()) !== -1 return item.indexOf(template.toString()) !== -1
}) })
} }
if (index !== -1) {
index += 1
}
} }
} }
return index return index

View File

@ -4,15 +4,18 @@ import { calculateTemplateIndex, isConfidentialEVM } from '../../src/utils'
describe('Asset utils (createAsset)', () => { describe('Asset utils (createAsset)', () => {
it('should check if confidential EVM', async () => { it('should check if confidential EVM', async () => {
for (const name of KNOWN_CONFIDENTIAL_EVMS.names) { for (const network of KNOWN_CONFIDENTIAL_EVMS.networks) {
assert( network.name.map((networkName) => {
isConfidentialEVM(name) === true, assert(
`Network: "${name}" is not a confidental EVM` isConfidentialEVM(networkName) === true,
) `Network: "${networkName}" is not a confidental EVM`
)
return true
})
} }
for (const chain of KNOWN_CONFIDENTIAL_EVMS.chainIds) { for (const chain of KNOWN_CONFIDENTIAL_EVMS.networks) {
assert( assert(
isConfidentialEVM(chain) === true, isConfidentialEVM(chain.chainId) === true,
`Chain Id: "${chain}" is not a confidental EVM` `Chain Id: "${chain}" is not a confidental EVM`
) )
} }
@ -25,17 +28,55 @@ describe('Asset utils (createAsset)', () => {
) )
}) })
it('should get correct template index from contract artifacts', async () => { it('should get correct template index from contract artifacts (using SC address as template)', async () => {
const wrongOne = await calculateTemplateIndex( const wrongOne = await calculateTemplateIndex(
KNOWN_CONFIDENTIAL_EVMS.chainIds[0], // testnet chain KNOWN_CONFIDENTIAL_EVMS.networks[1].chainId, // testnet chain
'12' '12'
) )
assert(wrongOne === -1, 'wrong template index, should be inexistent!') assert(wrongOne === -1, 'wrong template index, should be inexistent!')
const okIndex = await calculateTemplateIndex( const okIndex = await calculateTemplateIndex(
KNOWN_CONFIDENTIAL_EVMS.chainIds[1], // mainnet chain KNOWN_CONFIDENTIAL_EVMS.networks[0].chainId, // mainnet chain
'0x4dD281EB67DED07E76E413Df16176D66ae69e240' '0x4dD281EB67DED07E76E413Df16176D66ae69e240'
) )
assert(okIndex >= 1, 'wrong template index, should exist!') assert(okIndex >= 1, 'wrong template index, should exist!')
const okIndexNonConfidential = await calculateTemplateIndex(
11155111, // sepolia
'0xDEfD0018969cd2d4E648209F876ADe184815f038'
)
assert(okIndexNonConfidential === 2, 'Should be template 2 for sepolia!')
const notOkIndexNonConfidential = await calculateTemplateIndex(
11155111, // sepolia
'0xDEfD0018969cd2d4E648209F876ADe184815f022' // wrong template
)
assert(notOkIndexNonConfidential === -1, 'Template should not exist on sepolia!')
})
it('should get correct template index from contract artifacts (using template ID as template)', async () => {
const okTemplate = await calculateTemplateIndex(
KNOWN_CONFIDENTIAL_EVMS.networks[1].chainId, // testnet chain
4
)
assert(okTemplate === 4, 'wrong template index, should be index 4!')
const wrongOne = await calculateTemplateIndex(
KNOWN_CONFIDENTIAL_EVMS.networks[0].chainId, // mainnet chain
6
)
assert(wrongOne === -1, 'wrong template index, should only exist 5!')
const okIndexNonConfidential = await calculateTemplateIndex(
11155111, // sepolia
2 // ok template
)
assert(okIndexNonConfidential === 2, 'Should be template 2 for sepolia!')
const notOkIndexNonConfidential = await calculateTemplateIndex(
11155111, // sepolia
3 // wrong template
)
assert(notOkIndexNonConfidential === -1, 'Template 3 should not exist on sepolia!')
}) })
}) })