Skip to content
This repository was archived by the owner on Jun 16, 2025. It is now read-only.

Commit dc116d3

Browse files
improves configuration structure
1 parent ea9be7c commit dc116d3

File tree

8 files changed

+126
-37
lines changed

8 files changed

+126
-37
lines changed

deployment/config/config-types.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { ChainId } from "@certusone/wormhole-sdk";
2+
3+
export type TokenRouterConfiguration = {
4+
chainId: ChainId;
5+
ownerAssistant: string;
6+
matchingEngineMintRecipient: string;
7+
matchingEngineChain: string;
8+
matchingEngineDomain: string;
9+
};
10+
11+
export type MatchingEngineConfiguration = {
12+
chainId: ChainId,
13+
ownerAssistant: string,
14+
feeRecipient: string,
15+
userPenaltyRewardBps: string,
16+
initialPenaltyBps: string,
17+
auctionDuration: string,
18+
auctionGracePeriod: string,
19+
auctionPenaltyBlocks: string
20+
};
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[
2+
{
3+
"chainId": 1,
4+
"wormhole": "",
5+
"token": "",
6+
"tokenMessenger": ""
7+
}
8+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"chainId": 1,
3+
"ownerAssistant": "",
4+
"feeRecipient": "",
5+
"userPenaltyRewardBps": "",
6+
"initialPenaltyBps": "",
7+
"auctionDuration": "",
8+
"auctionGracePeriod": "",
9+
"auctionPenaltyBlocks": ""
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[
2+
{
3+
"chainId": "",
4+
"ownerAssistant": "",
5+
"matchingEngineMintRecipient": "",
6+
"matchingEngineChain": "",
7+
"matchingEngineDomain": ""
8+
}
9+
]

deployment/helpers/env.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import fs from "fs";
22
import { ChainId } from "@certusone/wormhole-sdk";
33

4-
/**
5-
* Types:
6-
*/
74
export type ChainInfo = {
85
name: string;
96
chainId: ChainId;
@@ -29,12 +26,13 @@ export type Ecosystem = {
2926

3027
export type ContractsJson = Record<string, Deployment[]>;
3128

32-
interface ChainConfig {
29+
export interface ChainConfig {
3330
chainId: ChainId;
3431
}
3532

3633
export const env = getEnv("ENV");
3734
export const contracts = loadContracts();
35+
export const dependencies = loadDependencies();
3836
export const ecosystemChains = loadEcosystem();
3937

4038
function loadJson<T>(filename: string): T {
@@ -45,6 +43,10 @@ function loadJson<T>(filename: string): T {
4543
return JSON.parse(fileContent.toString()) as T;
4644
}
4745

46+
function loadDependencies<T extends ContractsJson>() {
47+
return loadJson<T>("dependencies");
48+
}
49+
4850
function loadContracts<T extends ContractsJson>() {
4951
return loadJson<T>("contracts");
5052
}
@@ -83,12 +85,36 @@ export async function getContractAddress(contractName: string, chainId: ChainId)
8385
return contract;
8486
}
8587

88+
export function getDependencyAddress(dependencyName: string, chainId: ChainId): string {
89+
const dependency = dependencies[dependencyName]?.find((d) => d.chainId === chainId)?.address;
90+
91+
if (!dependency) {
92+
throw new Error(`No dependency found for ${dependencyName}`);
93+
}
94+
95+
return dependency;
96+
}
97+
8698
export function writeDeployedContract(chain: ChainId, contractName: string, address: string) {
8799
const contracts = loadContracts();
88100
if (!contracts[contractName]) {
89-
contracts[contractName] = [];
101+
contracts[contractName] = [{ chainId: chain, address: process.env[contractName]! }];
90102
}
91-
contracts[contractName].push({ chainId: chain, address: process.env[contractName]! });
103+
104+
else if (!contracts[contractName].find((c) => c.chainId === chain)) {
105+
contracts[contractName].push({ chainId: chain, address });
106+
}
107+
108+
else {
109+
contracts[contractName] = contracts[contractName].map((c) => {
110+
if (c.chainId === chain) {
111+
return { chainId: chain, address };
112+
}
113+
114+
return c;
115+
});
116+
}
117+
92118
fs.writeFileSync(
93119
`./config/${env}/contracts.json`,
94120
JSON.stringify(contracts),

deployment/helpers/evm.ts

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,29 @@
1-
import { ecosystemChains } from "./index";
1+
import { LedgerSigner } from "@xlabs-xyz/ledger-signer";
2+
import { ethers } from "ethers";
3+
import { ChainInfo, ecosystemChains, getEnv, LoggerFn } from "./index";
4+
5+
export type EvmScriptCb = (chain: ChainInfo, signer: ethers.Signer, logFn: LoggerFn) => Promise<void>;
6+
7+
export async function runOnEvms(scriptName: string, cb: EvmScriptCb) {
8+
const chains = evmOperatingChains();
9+
10+
console.log(`Running script on EVMs (${chains.map(c => c.chainId).join(", ")}):`, scriptName);
11+
12+
const result = chains.map(async chain => {
13+
const log = (...args: any[]) => console.log(`[${chain.chainId}]`, ...args);
14+
const signer = await getSigner(chain);
15+
log(`Starting script. Signer: ${await signer.getAddress()}`);
16+
17+
try {
18+
await cb(chain, signer, log);
19+
log("Success");
20+
} catch (error) {
21+
log("Error: ", error);
22+
}
23+
});
24+
25+
await Promise.all(result);
26+
}
227

328
export function evmOperatingChains() {
429
const { operatingChains } = ecosystemChains.evm;
@@ -10,37 +35,25 @@ export function evmOperatingChains() {
1035
return ecosystemChains.evm.networks;
1136
};
1237

38+
export async function getSigner(chain: ChainInfo): Promise<ethers.Signer> {
39+
const derivationPath = getEnv("LEDGER_BIP32_PATH");
40+
const provider = getProvider(chain);
41+
return LedgerSigner.create(provider, derivationPath);
42+
}
1343

14-
// export async function getSigner(chain: ChainInfo): Promise<ethers.Signer> {
15-
// const provider = getProvider(chain);
16-
// const privateKey = loadPrivateKey();
17-
18-
// if (privateKey === "ledger") {
19-
// if (process.env.LEDGER_BIP32_PATH === undefined) {
20-
// throw new Error(`Missing BIP32 derivation path.
21-
// With ledger devices the path needs to be specified in env var 'LEDGER_BIP32_PATH'.`);
22-
// }
23-
// const { LedgerSigner } = await import("@xlabs-xyz/ledger-signer");
24-
// return LedgerSigner.create(provider, process.env.LEDGER_BIP32_PATH);
25-
// }
26-
27-
// const signer = new ethers.Wallet(privateKey, provider);
28-
// return signer;
29-
// }
44+
export function getProvider(
45+
chain: ChainInfo
46+
): ethers.providers.StaticJsonRpcProvider {
47+
const providerRpc = ecosystemChains.evm.networks.find((x: any) => x.chainId == chain.chainId)?.rpc || "";
3048

31-
// export function getProvider(
32-
// chain: ChainInfo
33-
// ): ethers.providers.StaticJsonRpcProvider {
34-
// const providerRpc = loadChains().find((x: any) => x.chainId == chain.chainId)?.rpc || "";
35-
36-
// if (!providerRpc) {
37-
// throw new Error("Failed to find a provider RPC for chain " + chain.chainId);
38-
// }
49+
if (!providerRpc) {
50+
throw new Error("Failed to find a provider RPC for chain " + chain.chainId);
51+
}
3952

40-
// let provider = new ethers.providers.StaticJsonRpcProvider(
41-
// providerRpc,
42-
// );
53+
let provider = new ethers.providers.StaticJsonRpcProvider(
54+
providerRpc,
55+
);
4356

44-
// return provider;
45-
// }
57+
return provider;
58+
}
4659

deployment/helpers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
export * from "./env";
22
export * from "./evm";
33
export * from "./solana";
4+
5+
export type LoggerFn = (...args: any[]) => void;

deployment/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"name": "deployment",
33
"scripts": {
4-
"build-evm": "npx typechain --target=ethers-v5 --out-dir=./contract-bindings ../out/../evm/*/*.json"
4+
"evm-deps": "forge build -C /home/solanoe/xlabs/projects/example-liquidity-layer/evm/lib/openzeppelin-contracts/contracts/proxy/ERC1967",
5+
"build-evm": "npm run evm-deps && npx typechain --target=ethers-v5 --out-dir=./contract-bindings ../evm/out/*/*.json ../evm/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol"
56
},
67
"author": "",
78
"devDependencies": {

0 commit comments

Comments
 (0)