Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/@types/C2D/C2D.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ export interface RunningPlatform {

export interface ComputeAccessList {
addresses: string[]
accessLists: { [chainId: string]: string[] }
accessLists: { [chainId: string]: string[] }[] | null
}

export interface ComputeEnvironmentFreeOptions {
Expand Down
51 changes: 27 additions & 24 deletions src/components/core/compute/startCompute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ async function validateAccess(

if (
!access.accessLists ||
(Object.keys(access.accessLists).length === 0 && access.addresses.length === 0)
(access.accessLists.length === 0 && access.addresses.length === 0)
) {
return true
}
Expand All @@ -993,33 +993,36 @@ async function validateAccess(

const config = await getConfiguration()
const { supportedNetworks } = config
for (const chain of Object.keys(access.accessLists)) {
const { chainId } = supportedNetworks[chain]
try {
const blockchain = oceanNode.getBlockchain(chainId)
if (!blockchain) {
for (const accessListMap of access.accessLists) {
if (!accessListMap) continue
for (const chain of Object.keys(accessListMap)) {
const { chainId } = supportedNetworks[chain]
try {
const blockchain = oceanNode.getBlockchain(chainId)
if (!blockchain) {
CORE_LOGGER.logMessage(
`Blockchain instance not available for chain ${chainId}, skipping access list check`,
true
)
continue
}
const signer = await blockchain.getSigner()
for (const accessListAddress of accessListMap[chain]) {
const hasAccess = await checkAddressOnAccessList(
accessListAddress,
consumerAddress,
signer
)
if (hasAccess) {
return true
}
}
} catch (error) {
CORE_LOGGER.logMessage(
`Blockchain instance not available for chain ${chainId}, skipping access list check`,
`Failed to check access lists on chain ${chain}: ${error.message}`,
true
)
continue
}
const signer = await blockchain.getSigner()
for (const accessListAddress of access.accessLists[chain]) {
const hasAccess = await checkAddressOnAccessList(
accessListAddress,
consumerAddress,
signer
)
if (hasAccess) {
return true
}
}
} catch (error) {
CORE_LOGGER.logMessage(
`Failed to check access lists on chain ${chain}: ${error.message}`,
true
)
}
}

Expand Down
12 changes: 5 additions & 7 deletions src/test/integration/compute.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2280,9 +2280,7 @@ describe('Compute Access Restrictions', () => {
minJobDuration: 60,
access: {
addresses: [],
accessLists: {
[DEVELOPMENT_CHAIN_ID]: [accessListAddress]
}
accessLists: [{ [DEVELOPMENT_CHAIN_ID]: [accessListAddress] }]
},
fees: {
[DEVELOPMENT_CHAIN_ID]: [
Expand All @@ -2298,9 +2296,7 @@ describe('Compute Access Restrictions', () => {
maxJobs: 3,
access: {
addresses: [],
accessLists: {
DEVELOPMENT_CHAIN_ID: [accessListAddress]
}
accessLists: [{ [DEVELOPMENT_CHAIN_ID]: [accessListAddress] }]
},
resources: [
{ id: 'cpu', max: 1 },
Expand Down Expand Up @@ -2357,7 +2353,9 @@ describe('Compute Access Restrictions', () => {
firstEnv = computeEnvironments[0]
assert(firstEnv.access, 'Access control should exist')
assert(
firstEnv.access.accessLists[DEVELOPMENT_CHAIN_ID].includes(accessListAddress),
firstEnv.access.accessLists?.some((map) =>
map?.[DEVELOPMENT_CHAIN_ID]?.includes(accessListAddress)
),
'Should have access list address'
)
})
Expand Down
10 changes: 8 additions & 2 deletions src/utils/config/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,10 @@ export const ComputeEnvironmentFreeOptionsSchema = z.object({
access: z
.object({
addresses: z.array(z.string()),
accessLists: z.array(z.string())
accessLists: z
.array(z.record(z.string(), z.array(z.string())))
.nullable()
.optional()
})
.optional()
})
Expand All @@ -160,7 +163,10 @@ export const C2DDockerConfigSchema = z.array(
access: z
.object({
addresses: z.array(z.string()),
accessLists: z.array(z.string())
accessLists: z
.array(z.record(z.string(), z.array(z.string())))
.nullable()
.optional()
})
.optional(),
fees: z.record(z.string(), z.array(ComputeEnvFeesSchema)).optional(),
Expand Down
Loading