Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
janjakubnanista committed Nov 25, 2023
1 parent 7121d53 commit c80f2d6
Show file tree
Hide file tree
Showing 12 changed files with 236 additions and 25 deletions.
93 changes: 93 additions & 0 deletions packages/ua-utils-evm-hardhat-test/test/builder.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { expect } from 'chai'
import hre from 'hardhat'
import { describe } from 'mocha'
import { eidAndDeploymentToPoint, OmniGraphBuilderHardhat } from '@layerzerolabs/ua-utils-evm-hardhat'
import { getNetworkRuntimeEnvironment } from '@layerzerolabs/utils-evm-hardhat'
import { OmniPoint } from '@layerzerolabs/ua-utils'
import assert from 'assert'

describe('builder', () => {
it('should collect all deployed DefaultOApp contracts', async () => {
const britneyEnv = await getNetworkRuntimeEnvironment('britney')
const vengaboysEnv = await getNetworkRuntimeEnvironment('vengaboys')

const britneyDeployment = await britneyEnv.deployments.get('DefaultOApp')
const vengaboysDeployment = await vengaboysEnv.deployments.get('DefaultOApp')

const britneyPoint: OmniPoint = eidAndDeploymentToPoint(britneyEnv.network.config.endpointId, britneyDeployment)
const vengaboysPoint: OmniPoint = eidAndDeploymentToPoint(
vengaboysEnv.network.config.endpointId,
vengaboysDeployment
)

const builder = await OmniGraphBuilderHardhat.fromDeployedContract(hre, 'DefaultOApp')

expect(builder.graph).to.eql({
contracts: [
{
point: vengaboysPoint,
config: undefined,
},
{
point: britneyPoint,
config: undefined,
},
],
connections: [
{
vector: { from: vengaboysPoint, to: britneyPoint },
config: undefined,
},
{
vector: { from: britneyPoint, to: vengaboysPoint },
config: undefined,
},
],
})
})

it('should collect all newly deployed DefaultOApp contracts', async () => {
const britneyEnv = await getNetworkRuntimeEnvironment('britney')
const vengaboysEnv = await getNetworkRuntimeEnvironment('vengaboys')

const [_, deployer] = await britneyEnv.getUnnamedAccounts()
assert(deployer, 'Missing deployer')

const britneyDeployment = await britneyEnv.deployments.deploy('DefaultOApp', {
from: deployer,
skipIfAlreadyDeployed: false,
})
const vengaboysDeployment = await vengaboysEnv.deployments.get('DefaultOApp')

const britneyPoint: OmniPoint = eidAndDeploymentToPoint(britneyEnv.network.config.endpointId, britneyDeployment)
const vengaboysPoint: OmniPoint = eidAndDeploymentToPoint(
vengaboysEnv.network.config.endpointId,
vengaboysDeployment
)

const builder = await OmniGraphBuilderHardhat.fromDeployedContract(hre, 'DefaultOApp')

expect(builder.graph).to.eql({
contracts: [
{
point: vengaboysPoint,
config: undefined,
},
{
point: britneyPoint,
config: undefined,
},
],
connections: [
{
vector: { from: vengaboysPoint, to: britneyPoint },
config: undefined,
},
{
vector: { from: britneyPoint, to: vengaboysPoint },
config: undefined,
},
],
})
})
})
11 changes: 9 additions & 2 deletions packages/ua-utils-evm-hardhat/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
"@gnosis.pm/safe-ethers-lib": "^1.0.0",
"@gnosis.pm/safe-service-client": "1.1.1",
"@layerzerolabs/lz-definitions": "~1.5.62",
"@layerzerolabs/ua-utils": "~0.1.0",
"@layerzerolabs/utils-evm-hardhat": "~0.0.2",
"@nomiclabs/hardhat-ethers": "^2.2.3",
"@types/mocha": "^10.0.6",
"cli-ux": "^6.0.9",
Expand All @@ -48,18 +50,23 @@
"hardhat": "^2.19.0",
"hardhat-deploy": "^0.11.22",
"ts-node": "^10.9.1",
"tslib": "~2.6.2",
"tsup": "^8.0.1",
"typescript": "^5.2.2"
"typescript": "^5.2.2",
"zod": "^3.22.4"
},
"peerDependencies": {
"@gnosis.pm/safe-core-sdk": "^2.0.0",
"@gnosis.pm/safe-core-sdk-types": "^1.0.0",
"@gnosis.pm/safe-ethers-lib": "^1.0.0",
"@gnosis.pm/safe-service-client": "1.1.1",
"@layerzerolabs/lz-definitions": "~1.5.62",
"@layerzerolabs/ua-utils": "~0.1.0",
"@layerzerolabs/utils-evm-hardhat": "~0.0.2",
"@nomiclabs/hardhat-ethers": "^2.2.3",
"ethers": "^5.5.2",
"hardhat": "^2.19.0",
"hardhat-deploy": "^0.11.22"
"hardhat-deploy": "^0.11.22",
"zod": "^3.22.4"
}
}
3 changes: 3 additions & 0 deletions packages/ua-utils-evm-hardhat/src/config/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface OAppContractConfig {}

export interface OAppConnectionConfig {}
1 change: 1 addition & 0 deletions packages/ua-utils-evm-hardhat/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './omnigraph'
6 changes: 6 additions & 0 deletions packages/ua-utils-evm-hardhat/src/internal/assertions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import assert from 'assert'
import 'hardhat-deploy/dist/src/type-extensions'
import { HardhatRuntimeEnvironment } from 'hardhat/types'

export const assertHardhatDeploy = (hre: HardhatRuntimeEnvironment) =>
assert(hre.deployments, `You don't seem to be using hardhat-deploy in your project`)
40 changes: 40 additions & 0 deletions packages/ua-utils-evm-hardhat/src/omnigraph/builder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'hardhat-deploy/dist/src/type-extensions'
import type { HardhatRuntimeEnvironment } from 'hardhat/types'
import { OmniGraphBuilder } from '@layerzerolabs/ua-utils'
import { createNetworkLogger, getNetworkRuntimeEnvironment } from '@layerzerolabs/utils-evm-hardhat'
import { contractNameToPoint } from './coordinates'
import { vectorFromNodes } from '@layerzerolabs/ua-utils'
import { ignoreLoopback } from '@layerzerolabs/ua-utils'

export class OmniGraphBuilderHardhat<TNodeConfig, TEdgeConfig> extends OmniGraphBuilder<TNodeConfig, TEdgeConfig> {
static async fromDeployedContract(
hre: HardhatRuntimeEnvironment,
contractName: string
): Promise<OmniGraphBuilder<undefined, undefined>> {
const builder = new OmniGraphBuilder<undefined, undefined>()

for (const networkName of Object.keys(hre.config.networks)) {
const logger = createNetworkLogger(networkName)
const env = await getNetworkRuntimeEnvironment(networkName)
const point = await contractNameToPoint(env, contractName)

if (point == null) {
logger.warn(`Could not find contract '${contractName}'`)
logger.warn(``)
logger.warn(`- Make sure the contract has been deployed`)
logger.warn(`- Make sure to include the endpointId in your hardhat networks config`)

continue
}

builder.addNodes({ point, config: undefined })
}

return builder.reconnect(
ignoreLoopback((from, to) => ({
vector: vectorFromNodes(from, to),
config: undefined,
}))
)
}
}
27 changes: 27 additions & 0 deletions packages/ua-utils-evm-hardhat/src/omnigraph/coordinates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'hardhat-deploy/dist/src/type-extensions'
import '@layerzerolabs/utils-evm-hardhat/type-extensions'
import type { EndpointId } from '@layerzerolabs/lz-definitions'
import type { OmniPoint } from '@layerzerolabs/ua-utils'
import type { Deployment } from 'hardhat-deploy/types'
import { HardhatRuntimeEnvironment } from 'hardhat/types'
import { assertHardhatDeploy } from '@/internal/assertions'

export const contractNameToPoint = async (
hre: HardhatRuntimeEnvironment,
contractName: string
): Promise<OmniPoint | undefined> => {
assertHardhatDeploy(hre)

const eid = hre.network.config.endpointId
if (eid == null) return undefined

const deployment = await hre.deployments.getOrNull(contractName)
if (deployment == null) return undefined

return eidAndDeploymentToPoint(eid, deployment)
}

export const eidAndDeploymentToPoint = (eid: EndpointId, { address }: Deployment): OmniPoint => ({
eid,
address,
})
2 changes: 2 additions & 0 deletions packages/ua-utils-evm-hardhat/src/omnigraph/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './builder'
export * from './coordinates'
32 changes: 22 additions & 10 deletions packages/ua-utils-evm-hardhat/tsup.config.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
import { defineConfig } from 'tsup'

export default defineConfig({
entry: ['src/tasks/index.ts'],
outDir: './dist/tasks',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
})
export default defineConfig([
{
entry: ['src/index.ts'],
outDir: './dist',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
},
{
entry: ['src/tasks/index.ts'],
outDir: './dist/tasks',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
},
])
13 changes: 10 additions & 3 deletions packages/utils-evm-hardhat/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,16 @@
},
"license": "MIT",
"exports": {
"types": "./dist/index.d.ts",
"require": "./dist/index.js",
"import": "./dist/index.mjs"
".": {
"types": "./dist/index.d.ts",
"require": "./dist/index.js",
"import": "./dist/index.mjs"
},
"./*": {
"types": "./dist/*.d.ts",
"require": "./dist/*.js",
"import": "./dist/*.mjs"
}
},
"main": "./dist/index.js",
"module": "./dist/index.mjs",
Expand Down
1 change: 1 addition & 0 deletions packages/utils-evm-hardhat/src/type-extensions.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'hardhat/types/config'
import { EndpointId } from '@layerzerolabs/lz-definitions'

declare module 'hardhat/types/config' {
Expand Down
32 changes: 22 additions & 10 deletions packages/utils-evm-hardhat/tsup.config.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,24 @@
import { defineConfig } from 'tsup'

export default defineConfig({
entry: ['src/index.ts'],
outDir: './dist',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
})
export default defineConfig([
{
entry: ['src/index.ts'],
outDir: './dist',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
},
{
entry: ['src/type-extensions.ts'],
outDir: './dist',
clean: true,
dts: true,
sourcemap: true,
splitting: false,
treeshake: true,
format: ['esm', 'cjs'],
},
])

0 comments on commit c80f2d6

Please sign in to comment.