111 lines
3.4 KiB
TypeScript
111 lines
3.4 KiB
TypeScript
import { ChainId, tryNativeToHexString } from "@certusone/wormhole-sdk";
|
|
import type { BigNumberish } from "ethers";
|
|
import {
|
|
init,
|
|
loadChains,
|
|
ChainInfo,
|
|
loadScriptConfig,
|
|
getWormholeRelayerAddress,
|
|
getDeliveryProvider,
|
|
getDeliveryProviderAddress,
|
|
getOperatingChains,
|
|
} from "../helpers/env";
|
|
import { wait } from "../helpers/utils";
|
|
|
|
import type { DeliveryProviderStructs } from "../../../ethers-contracts/DeliveryProvider";
|
|
|
|
/**
|
|
* Meant for `config.pricingInfo`
|
|
*/
|
|
interface PricingInfo {
|
|
chainId: ChainId
|
|
deliverGasOverhead: BigNumberish
|
|
updatePriceGas: BigNumberish
|
|
updatePriceNative: BigNumberish
|
|
maximumBudget: BigNumberish
|
|
};
|
|
|
|
const processName = "configureDeliveryProvider";
|
|
init();
|
|
const operatingChains = getOperatingChains();
|
|
const chains = loadChains();
|
|
const config = loadScriptConfig(processName);
|
|
|
|
async function run() {
|
|
console.log("Start! " + processName);
|
|
|
|
for (let i = 0; i < operatingChains.length; i++) {
|
|
await configureChainsDeliveryProvider(chains[i]);
|
|
}
|
|
}
|
|
|
|
async function configureChainsDeliveryProvider(chain: ChainInfo) {
|
|
console.log("about to perform DeliveryProvider configuration for chain " + chain.chainId);
|
|
const deliveryProvider = getDeliveryProvider(chain);
|
|
const coreRelayer = await getWormholeRelayerAddress(chain);
|
|
|
|
const thisChainsConfigInfo = config.addresses.find(
|
|
(x: any) => x.chainId == chain.chainId
|
|
);
|
|
|
|
if (!thisChainsConfigInfo) {
|
|
throw new Error(
|
|
"Failed to find address config info for chain " + chain.chainId
|
|
);
|
|
}
|
|
if (!thisChainsConfigInfo.rewardAddress) {
|
|
throw new Error(
|
|
"Failed to find reward address info for chain " + chain.chainId
|
|
);
|
|
}
|
|
|
|
const coreConfig: DeliveryProviderStructs.CoreConfigStruct = {
|
|
updateWormholeRelayer: true,
|
|
updateRewardAddress: true,
|
|
updateSupportedKeyTypes: true,
|
|
coreRelayer,
|
|
rewardAddress: thisChainsConfigInfo.rewardAddress,
|
|
supportedKeyTypesBitmap: 1 << 1 // VAA_KEY_TYPE
|
|
};
|
|
const updates: DeliveryProviderStructs.UpdateStruct[] = [];
|
|
|
|
// Set the entire relay provider configuration
|
|
for (const targetChain of chains) {
|
|
const targetChainPriceUpdate = (config.pricingInfo as PricingInfo[]).find(
|
|
(x: any) => x.chainId == targetChain.chainId
|
|
);
|
|
if (!targetChainPriceUpdate) {
|
|
throw new Error(
|
|
"Failed to find pricingInfo for chain " + targetChain.chainId
|
|
);
|
|
}
|
|
const targetChainProviderAddress = getDeliveryProviderAddress(targetChain);
|
|
const remoteDeliveryProvider =
|
|
"0x" + tryNativeToHexString(targetChainProviderAddress, "ethereum");
|
|
const chainConfigUpdate = {
|
|
chainId: targetChain.chainId,
|
|
updateAssetConversionBuffer: true,
|
|
updateDeliverGasOverhead: true,
|
|
updatePrice: true,
|
|
updateMaximumBudget: true,
|
|
updateTargetChainAddress: true,
|
|
updateSupportedChain: true,
|
|
isSupported: true,
|
|
buffer: 5,
|
|
bufferDenominator: 100,
|
|
newWormholeFee: 0,
|
|
newGasOverhead: targetChainPriceUpdate.deliverGasOverhead,
|
|
gasPrice: targetChainPriceUpdate.updatePriceGas,
|
|
nativeCurrencyPrice: targetChainPriceUpdate.updatePriceNative,
|
|
targetChainAddress: remoteDeliveryProvider,
|
|
maximumTotalBudget: targetChainPriceUpdate.maximumBudget,
|
|
};
|
|
updates.push(chainConfigUpdate);
|
|
}
|
|
await deliveryProvider.updateConfig(updates, coreConfig).then(wait);
|
|
|
|
console.log("done with DeliveryProvider configuration on " + chain.chainId);
|
|
}
|
|
|
|
run().then(() => console.log("Done! " + processName));
|