-
Notifications
You must be signed in to change notification settings - Fork 185
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
dc88a88
commit 60409af
Showing
12 changed files
with
236 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
}, | ||
], | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
export interface OAppContractConfig {} | ||
|
||
export interface OAppConnectionConfig {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export * from './omnigraph' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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`) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
27
packages/ua-utils-evm-hardhat/src/omnigraph/coordinates.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
export * from './builder' | ||
export * from './coordinates' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'], | ||
}, | ||
]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'], | ||
}, | ||
]) |