Skip to content

Commit

Permalink
improves configuration structure
Browse files Browse the repository at this point in the history
  • Loading branch information
solanoepalacio committed May 10, 2024
1 parent ea9be7c commit dc116d3
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 37 deletions.
20 changes: 20 additions & 0 deletions deployment/config/config-types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { ChainId } from "@certusone/wormhole-sdk";

export type TokenRouterConfiguration = {
chainId: ChainId;
ownerAssistant: string;
matchingEngineMintRecipient: string;
matchingEngineChain: string;
matchingEngineDomain: string;
};

export type MatchingEngineConfiguration = {
chainId: ChainId,
ownerAssistant: string,
feeRecipient: string,
userPenaltyRewardBps: string,
initialPenaltyBps: string,
auctionDuration: string,
auctionGracePeriod: string,
auctionPenaltyBlocks: string
};
8 changes: 8 additions & 0 deletions deployment/config/testnet/dependencies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{
"chainId": 1,
"wormhole": "",
"token": "",
"tokenMessenger": ""
}
]
10 changes: 10 additions & 0 deletions deployment/config/testnet/matching-engine.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"chainId": 1,
"ownerAssistant": "",
"feeRecipient": "",
"userPenaltyRewardBps": "",
"initialPenaltyBps": "",
"auctionDuration": "",
"auctionGracePeriod": "",
"auctionPenaltyBlocks": ""
}
9 changes: 9 additions & 0 deletions deployment/config/testnet/token-router.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[
{
"chainId": "",
"ownerAssistant": "",
"matchingEngineMintRecipient": "",
"matchingEngineChain": "",
"matchingEngineDomain": ""
}
]
38 changes: 32 additions & 6 deletions deployment/helpers/env.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import fs from "fs";
import { ChainId } from "@certusone/wormhole-sdk";

/**
* Types:
*/
export type ChainInfo = {
name: string;
chainId: ChainId;
Expand All @@ -29,12 +26,13 @@ export type Ecosystem = {

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

interface ChainConfig {
export interface ChainConfig {
chainId: ChainId;
}

export const env = getEnv("ENV");
export const contracts = loadContracts();
export const dependencies = loadDependencies();
export const ecosystemChains = loadEcosystem();

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

function loadDependencies<T extends ContractsJson>() {
return loadJson<T>("dependencies");
}

function loadContracts<T extends ContractsJson>() {
return loadJson<T>("contracts");
}
Expand Down Expand Up @@ -83,12 +85,36 @@ export async function getContractAddress(contractName: string, chainId: ChainId)
return contract;
}

export function getDependencyAddress(dependencyName: string, chainId: ChainId): string {
const dependency = dependencies[dependencyName]?.find((d) => d.chainId === chainId)?.address;

if (!dependency) {
throw new Error(`No dependency found for ${dependencyName}`);
}

return dependency;
}

export function writeDeployedContract(chain: ChainId, contractName: string, address: string) {
const contracts = loadContracts();
if (!contracts[contractName]) {
contracts[contractName] = [];
contracts[contractName] = [{ chainId: chain, address: process.env[contractName]! }];
}
contracts[contractName].push({ chainId: chain, address: process.env[contractName]! });

else if (!contracts[contractName].find((c) => c.chainId === chain)) {
contracts[contractName].push({ chainId: chain, address });
}

else {
contracts[contractName] = contracts[contractName].map((c) => {
if (c.chainId === chain) {
return { chainId: chain, address };
}

return c;
});
}

fs.writeFileSync(
`./config/${env}/contracts.json`,
JSON.stringify(contracts),
Expand Down
73 changes: 43 additions & 30 deletions deployment/helpers/evm.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,29 @@
import { ecosystemChains } from "./index";
import { LedgerSigner } from "@xlabs-xyz/ledger-signer";
import { ethers } from "ethers";
import { ChainInfo, ecosystemChains, getEnv, LoggerFn } from "./index";

export type EvmScriptCb = (chain: ChainInfo, signer: ethers.Signer, logFn: LoggerFn) => Promise<void>;

export async function runOnEvms(scriptName: string, cb: EvmScriptCb) {
const chains = evmOperatingChains();

console.log(`Running script on EVMs (${chains.map(c => c.chainId).join(", ")}):`, scriptName);

const result = chains.map(async chain => {
const log = (...args: any[]) => console.log(`[${chain.chainId}]`, ...args);
const signer = await getSigner(chain);
log(`Starting script. Signer: ${await signer.getAddress()}`);

try {
await cb(chain, signer, log);
log("Success");
} catch (error) {
log("Error: ", error);
}
});

await Promise.all(result);
}

export function evmOperatingChains() {
const { operatingChains } = ecosystemChains.evm;
Expand All @@ -10,37 +35,25 @@ export function evmOperatingChains() {
return ecosystemChains.evm.networks;
};

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

// export async function getSigner(chain: ChainInfo): Promise<ethers.Signer> {
// const provider = getProvider(chain);
// const privateKey = loadPrivateKey();

// if (privateKey === "ledger") {
// if (process.env.LEDGER_BIP32_PATH === undefined) {
// throw new Error(`Missing BIP32 derivation path.
// With ledger devices the path needs to be specified in env var 'LEDGER_BIP32_PATH'.`);
// }
// const { LedgerSigner } = await import("@xlabs-xyz/ledger-signer");
// return LedgerSigner.create(provider, process.env.LEDGER_BIP32_PATH);
// }

// const signer = new ethers.Wallet(privateKey, provider);
// return signer;
// }
export function getProvider(
chain: ChainInfo
): ethers.providers.StaticJsonRpcProvider {
const providerRpc = ecosystemChains.evm.networks.find((x: any) => x.chainId == chain.chainId)?.rpc || "";

// export function getProvider(
// chain: ChainInfo
// ): ethers.providers.StaticJsonRpcProvider {
// const providerRpc = loadChains().find((x: any) => x.chainId == chain.chainId)?.rpc || "";

// if (!providerRpc) {
// throw new Error("Failed to find a provider RPC for chain " + chain.chainId);
// }
if (!providerRpc) {
throw new Error("Failed to find a provider RPC for chain " + chain.chainId);
}

// let provider = new ethers.providers.StaticJsonRpcProvider(
// providerRpc,
// );
let provider = new ethers.providers.StaticJsonRpcProvider(
providerRpc,
);

// return provider;
// }
return provider;
}

2 changes: 2 additions & 0 deletions deployment/helpers/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export * from "./env";
export * from "./evm";
export * from "./solana";

export type LoggerFn = (...args: any[]) => void;
3 changes: 2 additions & 1 deletion deployment/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"name": "deployment",
"scripts": {
"build-evm": "npx typechain --target=ethers-v5 --out-dir=./contract-bindings ../out/../evm/*/*.json"
"evm-deps": "forge build -C /home/solanoe/xlabs/projects/example-liquidity-layer/evm/lib/openzeppelin-contracts/contracts/proxy/ERC1967",
"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"
},
"author": "",
"devDependencies": {
Expand Down

0 comments on commit dc116d3

Please sign in to comment.