[cosmwasm] chain ids for pyth mainnet, pyth testnet stable, and pyth testnet edge feeds (#822)

* add chainids

* chain ids

* wormhole, instantiate, and test

* update chain structure

* update test script

* update chain id guidelines

* if brackets

* correct test arguments
This commit is contained in:
Dev Kalra 2023-05-23 11:16:50 +05:30 committed by GitHub
parent 4f67343323
commit fbcb8a14f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 1256 additions and 593 deletions

View File

@ -1,6 +1,19 @@
import { CHAINS as WORMHOLE_CHAINS } from "@certusone/wormhole-sdk";
export { CHAINS as WORMHOLE_CHAINS } from "@certusone/wormhole-sdk";
// GUIDELINES to add a chain
// PYTH will have:
// 1. Mainnet Deployment - which will have pyth mainnet governance and data sources
// 2. Testnet Stable Deployment - which will also have pyth mainnet governance and data sources
// 3. Testnet Edge Deployment - which will have pyth testnet governance and data sources.
// Different chains will have different chain ids i.e., mainnet and testnet will have different chain ids.
// Though stable and edge contracts on testnet will share the same chain id. They are governed by different
// sources hence there is no chance of collision.
// If there is already a chain id in wormhole sdk. Use that for Mainnet
// Else add a chain id for mainnet too.
// Add an id for the testnet
// Currently we are deploying this for cosmos chains only. But this will be for all the chains in future.
export const RECEIVER_CHAINS = {
cronos: 60001,
kcc: 60002,
@ -14,10 +27,18 @@ export const RECEIVER_CHAINS = {
meter: 60010,
mantle: 60011,
conflux_espace: 60012,
sei: 60013,
// for cosmos
injective_testnet: 60013,
osmosis: 60014,
neutron: 60015,
juno: 60016,
osmosis_testnet_4: 60015,
osmosis_testnet_5: 60016,
sei: 60017,
sei_testnet_atlantic_2: 60018,
neutron: 60019,
neutron_testnet_pion_1: 60020,
juno: 60020,
juno_testnet: 60021,
};
// If there is any overlapping value the receiver chain will replace the wormhole

View File

@ -28,7 +28,8 @@
"node-downloader-helper": "^2.1.7",
"osmojs": "^13.0.0-rc.7-i-alpha",
"rimraf": "^5.0.0",
"yargs": "^17.0.1"
"yargs": "^17.0.1",
"@pythnetwork/price-service-client": "*"
},
"devDependencies": {
"@types/adm-zip": "^0.5.0",

View File

@ -12,27 +12,26 @@ export enum ChainType {
// CHAINNAME{_OPTIONAL-IDENTIFIER}
// ENUM Value should be of the form:
// chainname{_optional-identifier}
export enum ChainIdTestnet {
export enum ChainId {
INJECTIVE_TESTNET = "injective_testnet",
OSMOSIS_TESTNET_4 = "osmosis_testnet_4",
OSMOSIS_TESTNET_5 = "osmosis_testnet_5",
SEI_TESTNET_ATLANTIC_2 = "sei_testnet_atlantic_2",
NEUTRON_TESTNET_PION_1 = "neutron_testnet_pion_1",
JUNO_TESTNET = "juno_testnet",
// Below are mainnet chain ids
INJECTIVE = "injective",
OSMOSIS_4 = "osmosis_4",
OSMOSIS_5 = "osmosis_5",
SEI_ATLANTIC_2 = "sei_atlantic_2",
NEUTRON_PION_1 = "neutron_pion_1",
JUNO = "juno",
OSMOSIS = "osmosis",
}
export const ChainIdsTestnet = Object.values(ChainIdTestnet);
export const ChainIds = Object.values(ChainId);
// TODO: ADD MAINNET IDs IN FUTURE
// export enum ChainIdMainnet {
// INJECTIVE = "injective",
// }
export type ChainConfig =
export type ChainNetworkConfig =
| {
// usually the chain name
// osmosis, injective
chainId: ChainIdTestnet;
chainId: ChainId;
chainType: ChainType.INJECTIVE;
// endpoints to create executor and querier for a particular chain
@ -42,7 +41,7 @@ export type ChainConfig =
| {
// usually the chain name
// osmosis, injective
chainId: ChainIdTestnet;
chainId: ChainId;
chainType: ChainType.COSMWASM;
// endpoints to create executor and querier for a particular chain
@ -58,60 +57,76 @@ export type ChainConfig =
gasPrice: string;
};
export const ChainsConfigTestnet: Record<ChainIdTestnet, ChainConfig> = {
[ChainIdTestnet.INJECTIVE]: {
chainId: ChainIdTestnet.INJECTIVE,
export const CHAINS_NETWORK_CONFIG: Record<ChainId, ChainNetworkConfig> = {
[ChainId.INJECTIVE_TESTNET]: {
chainId: ChainId.INJECTIVE_TESTNET,
chainType: ChainType.INJECTIVE,
querierEndpoint: "https://k8s.testnet.tm.injective.network:443",
executorEndpoint: "https://k8s.testnet.chain.grpc-web.injective.network",
},
[ChainIdTestnet.OSMOSIS_5]: {
chainId: ChainIdTestnet.OSMOSIS_5,
[ChainId.OSMOSIS_TESTNET_5]: {
chainId: ChainId.OSMOSIS_TESTNET_5,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc.osmotest5.osmosis.zone/",
querierEndpoint: "https://rpc.osmotest5.osmosis.zone/",
prefix: "osmo",
gasPrice: "0.025uosmo",
},
[ChainIdTestnet.OSMOSIS_4]: {
chainId: ChainIdTestnet.OSMOSIS_4,
[ChainId.OSMOSIS_TESTNET_4]: {
chainId: ChainId.OSMOSIS_TESTNET_4,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc-test.osmosis.zone:443",
querierEndpoint: "https://rpc-test.osmosis.zone:443",
prefix: "osmo",
gasPrice: "0.025uosmo",
},
[ChainIdTestnet.SEI_ATLANTIC_2]: {
chainId: ChainIdTestnet.SEI_ATLANTIC_2,
[ChainId.SEI_TESTNET_ATLANTIC_2]: {
chainId: ChainId.SEI_TESTNET_ATLANTIC_2,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc.atlantic-2.seinetwork.io/",
querierEndpoint: "https://rpc.atlantic-2.seinetwork.io/",
prefix: "sei",
gasPrice: "0.01usei",
},
[ChainIdTestnet.NEUTRON_PION_1]: {
chainId: ChainIdTestnet.NEUTRON_PION_1,
[ChainId.NEUTRON_TESTNET_PION_1]: {
chainId: ChainId.NEUTRON_TESTNET_PION_1,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc.pion.rs-testnet.polypore.xyz/",
querierEndpoint: "https://rpc.pion.rs-testnet.polypore.xyz/",
prefix: "neutron",
gasPrice: "0.025untrn",
},
[ChainIdTestnet.JUNO]: {
chainId: ChainIdTestnet.JUNO,
[ChainId.JUNO_TESTNET]: {
chainId: ChainId.JUNO_TESTNET,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc.uni.junonetwork.io/",
querierEndpoint: "https://rpc.uni.junonetwork.io/",
prefix: "juno",
gasPrice: "0.025ujunox",
},
// Mainnet chains
[ChainId.INJECTIVE]: {
chainId: ChainId.INJECTIVE,
chainType: ChainType.INJECTIVE,
querierEndpoint: "https://k8s.testnet.tm.injective.network:443",
executorEndpoint: "https://k8s.testnet.chain.grpc-web.injective.network",
},
[ChainId.OSMOSIS]: {
chainId: ChainId.OSMOSIS,
chainType: ChainType.COSMWASM,
executorEndpoint: "https://rpc.osmotest5.osmosis.zone/",
querierEndpoint: "https://rpc.osmotest5.osmosis.zone/",
prefix: "osmo",
gasPrice: "0.025uosmo",
},
};
/**
* This method will return an executor for given chainConfig.
*/
export function createExecutorForChain(
chainConfig: ChainConfig,
chainConfig: ChainNetworkConfig,
mnemonic: string
): ChainExecutor {
const chainType = chainConfig.chainType;

View File

@ -0,0 +1,173 @@
import { CHAINS } from "@pythnetwork/xc-governance-sdk";
import { ChainId } from "./chains-manager/chains";
import { DeploymentType } from "./helper";
type ChainContractConfig = {
feeDenom: string;
pythArtifactZipName: string;
wormholeChainId: number;
};
export const CHAINS_CONTRACT_CONFIG: Record<ChainId, ChainContractConfig> = {
[ChainId.INJECTIVE_TESTNET]: {
feeDenom: "inj",
pythArtifactZipName: "injective",
wormholeChainId: CHAINS.injective_testnet,
},
[ChainId.OSMOSIS_TESTNET_4]: {
feeDenom: "uosmo",
pythArtifactZipName: "osmosis",
wormholeChainId: CHAINS.osmosis_testnet_4,
},
[ChainId.OSMOSIS_TESTNET_5]: {
feeDenom: "uosmo",
pythArtifactZipName: "osmosis",
wormholeChainId: CHAINS.osmosis_testnet_5,
},
[ChainId.SEI_TESTNET_ATLANTIC_2]: {
feeDenom: "usei",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.sei_testnet_atlantic_2,
},
[ChainId.NEUTRON_TESTNET_PION_1]: {
feeDenom: "untrn",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.neutron_testnet_pion_1,
},
[ChainId.JUNO_TESTNET]: {
feeDenom: "ujunox",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.juno_testnet,
},
// mainnet
[ChainId.INJECTIVE]: {
feeDenom: "inj",
pythArtifactZipName: "injective",
wormholeChainId: CHAINS.injective,
},
[ChainId.OSMOSIS]: {
feeDenom: "uosmo",
pythArtifactZipName: "osmosis",
wormholeChainId: CHAINS.osmosis,
},
};
function getPythSources(deploymentType: DeploymentType) {
if (deploymentType === "stable") {
return {
data_sources: [
{
emitter: Buffer.from(
"6bb14509a612f01fbbc4cffeebd4bbfb492a86df717ebe92eb6df432a3f00a25",
"hex"
).toString("base64"),
chain_id: 1,
},
{
emitter: Buffer.from(
"f8cd23c2ab91237730770bbea08d61005cdda0984348f3f6eecb559638c0bba0",
"hex"
).toString("base64"),
chain_id: 26,
},
],
governance_source: {
emitter: Buffer.from(
"5635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e",
"hex"
).toString("base64"),
chain_id: 1,
},
};
}
return {
data_sources: [
{
emitter: Buffer.from(
"f346195ac02f37d60d4db8ffa6ef74cb1be3550047543a4a9ee9acf4d78697b0",
"hex"
).toString("base64"),
chain_id: 1,
},
{
emitter: Buffer.from(
"a27839d641b07743c0cb5f68c51f8cd31d2c0762bec00dc6fcd25433ef1ab5b6",
"hex"
).toString("base64"),
chain_id: 26,
},
],
governance_source: {
emitter: Buffer.from(
"63278d271099bfd491951b3e648f08b1c71631e4a53674ad43e8f9f98068c385",
"hex"
).toString("base64"),
chain_id: 1,
},
};
}
export function getPythConfig({
feeDenom,
wormholeContract,
wormholeChainId,
deploymentType,
}: {
feeDenom: string;
wormholeContract: string;
wormholeChainId: number;
deploymentType: DeploymentType;
}) {
return {
wormhole_contract: wormholeContract,
governance_source_index: 0,
governance_sequence_number: 0,
chain_id: wormholeChainId,
valid_time_period_secs: 60,
fee: {
amount: "1",
denom: feeDenom,
},
...getPythSources(deploymentType),
};
}
interface ReqWormholeConfig {
feeDenom: string;
wormholeChainId: number;
deploymentType: DeploymentType;
}
export function getWormholeConfig({
feeDenom,
wormholeChainId,
deploymentType,
}: ReqWormholeConfig) {
if (deploymentType === "stable") {
return {
chain_id: wormholeChainId,
fee_denom: feeDenom,
gov_chain: 1,
gov_address: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ=",
guardian_set_expirity: 86400,
initial_guardian_set: {
addresses: [{ bytes: "WMw65cCXshPOPIGXnhuflXB0aqU=" }],
expiration_time: 0,
},
};
}
return {
chain_id: wormholeChainId,
fee_denom: feeDenom,
gov_chain: 1,
gov_address: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ=",
guardian_set_expirity: 86400,
initial_guardian_set: {
addresses: [{ bytes: "E5R71IsY5T/a7ud/NHM5Gscnxjg=" }],
expiration_time: 0,
},
};
}

View File

@ -1,54 +0,0 @@
import { CHAINS } from "@pythnetwork/xc-governance-sdk";
import {
ChainConfig,
ChainIdTestnet,
ChainsConfigTestnet,
} from "./chains-manager/chains";
export type ExtendedChainConfig = ChainConfig & {
feeDenom: string;
pythArtifactZipName: string;
wormholeChainId: number;
};
export const ExtendedChainsConfigTestnet: Record<
ChainIdTestnet,
ExtendedChainConfig
> = {
[ChainIdTestnet.INJECTIVE]: {
feeDenom: "inj",
pythArtifactZipName: "injective",
wormholeChainId: CHAINS.injective,
...ChainsConfigTestnet[ChainIdTestnet.INJECTIVE],
},
[ChainIdTestnet.OSMOSIS_4]: {
feeDenom: "uosmo",
pythArtifactZipName: "osmosis",
wormholeChainId: CHAINS.osmosis,
...ChainsConfigTestnet[ChainIdTestnet.OSMOSIS_4],
},
[ChainIdTestnet.OSMOSIS_5]: {
feeDenom: "uosmo",
pythArtifactZipName: "osmosis",
wormholeChainId: CHAINS.osmosis,
...ChainsConfigTestnet[ChainIdTestnet.OSMOSIS_5],
},
[ChainIdTestnet.SEI_ATLANTIC_2]: {
feeDenom: "usei",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.sei,
...ChainsConfigTestnet[ChainIdTestnet.SEI_ATLANTIC_2],
},
[ChainIdTestnet.NEUTRON_PION_1]: {
feeDenom: "untrn",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.neutron,
...ChainsConfigTestnet[ChainIdTestnet.NEUTRON_PION_1],
},
[ChainIdTestnet.JUNO]: {
feeDenom: "ujunox",
pythArtifactZipName: "cosmwasm",
wormholeChainId: CHAINS.juno,
...ChainsConfigTestnet[ChainIdTestnet.JUNO],
},
};

View File

@ -3,6 +3,31 @@ import { rimrafSync } from "rimraf";
import AdmZip from "adm-zip";
import path from "path";
import { DownloaderHelper } from "node-downloader-helper";
import { ChainId } from "./chains-manager/chains";
export function getChainIdsForStableDeployment(): ChainId[] {
return [
ChainId.INJECTIVE_TESTNET,
ChainId.OSMOSIS_TESTNET_4,
ChainId.OSMOSIS_TESTNET_5,
ChainId.SEI_TESTNET_ATLANTIC_2,
ChainId.NEUTRON_TESTNET_PION_1,
ChainId.JUNO_TESTNET,
];
}
export function getChainIdsForEdgeDeployment(): ChainId[] {
return [
ChainId.INJECTIVE_TESTNET,
ChainId.OSMOSIS_TESTNET_4,
ChainId.OSMOSIS_TESTNET_5,
ChainId.SEI_TESTNET_ATLANTIC_2,
ChainId.NEUTRON_TESTNET_PION_1,
ChainId.JUNO_TESTNET,
];
}
export type DeploymentType = "stable" | "edge";
// We have released the compile contacts on github. If a chain needs some specific
// feature in a contract, a version of the contract with that specific features is
@ -74,18 +99,14 @@ export async function getContractBytesDict(
}
export const WORMHOLE_CONTRACT_VERSION = "2.14.9";
// This method returns the file name which stores the deployment result for
// wormhole stub
export function getWormholeFileName(
chainId: string,
version: string,
mainnet: boolean
deploymentType: DeploymentType
): string {
const WORMHOLE_STORAGE_DIR = mainnet
? "../wormhole-stub/mainnet"
: "../wormhole-stub/testnet";
const WORMHOLE_STORAGE_DIR = "../wormhole-stub/" + deploymentType;
return `${WORMHOLE_STORAGE_DIR}/${chainId}-${version}.json`;
}
@ -94,9 +115,9 @@ export function getWormholeFileName(
export function getWormholeContractAddress(
chainId: string,
version: string,
mainnet: boolean
deploymentType: DeploymentType
): string {
let deployedFilePath = getWormholeFileName(chainId, version, mainnet);
let deployedFilePath = getWormholeFileName(chainId, version, deploymentType);
const wormholeContractAddress = JSON.parse(
readFileSync(deployedFilePath).toString()
)["instantiate-contract"].result.contractAddr;
@ -110,6 +131,53 @@ export function getWormholeContractAddress(
return wormholeContractAddress;
}
// This method returns the file name which stores the deployment result for
// pyth instantiation
export function getPythInstantiateFileName(
chainId: string,
version: string,
deploymentType: DeploymentType
): string {
const STORAGE_DIR = `./store/${deploymentType}/instantiate-pyth`;
return `${STORAGE_DIR}/${chainId}-${version}.json`;
}
// This method returns the file name which stores the deployment result for
// test pyth contract
export function getTestPythContractFileName(
chainId: string,
version: string,
deploymentType: DeploymentType
): string {
const STORAGE_DIR = `./store/${deploymentType}/test-contracts`;
return `${STORAGE_DIR}/${chainId}-${version}.json`;
}
// This method will read the pyth file with the deployment resutt and will
// return the deployed pyth contract address
export function getPythContractAddress(
chainId: string,
version: string,
deploymentType: DeploymentType
): string {
let deployedFilePath = getPythInstantiateFileName(
chainId,
version,
deploymentType
);
const pythContractAddress = JSON.parse(
readFileSync(deployedFilePath).toString()
)["instantiate-contract"].result.contractAddr;
if (pythContractAddress === undefined)
throw new Error(
"Wormhole contract address should be present in the file" +
deployedFilePath
);
return pythContractAddress;
}
export function hexToBase64(hex: string): string {
return Buffer.from(hex, "hex").toString("base64");
}

View File

@ -1,6 +1,6 @@
import {
ChainIdsTestnet,
createExecutorForChain,
CHAINS_NETWORK_CONFIG,
} from "./chains-manager/chains";
import yargs from "yargs";
import { hideBin } from "yargs/helpers";
@ -10,16 +10,20 @@ import {
} from "./chains-manager/chain-executor";
import { Pipeline } from "./pipeline";
import {
DeploymentType,
WORMHOLE_CONTRACT_VERSION,
getChainIdsForEdgeDeployment,
getChainIdsForStableDeployment,
getContractBytesDict,
getPythInstantiateFileName,
getWormholeContractAddress,
} from "./helper";
import { ExtendedChainsConfigTestnet } from "./extended-chain-config";
import { sha256 } from "@cosmjs/crypto";
import { CHECKSUM } from "./contract-checksum";
import { CHAINS_CONTRACT_CONFIG, getPythConfig } from "./configs";
const argv = yargs(hideBin(process.argv))
.usage("USAGE: npm run wormhole-stub -- <command>")
.usage("USAGE: npm run instantiate-pyth -- <command>")
.option("mnemonic", {
type: "string",
demandOption: "Please provide the mnemonic",
@ -28,13 +32,11 @@ const argv = yargs(hideBin(process.argv))
type: "string",
demandOption: `Please input the contract-version of the pyth contract.`,
})
.option("chain-id", {
.option("deploy", {
type: "string",
choices: ChainIdsTestnet,
})
.option("mainnet", {
type: "boolean",
desc: "Execute this script for mainnet networks. THIS WILL BE ADDED IN FUTURE",
desc: "Execute this script for the given networks.",
choices: ["edge", "stable"],
demandOption: "Please provide the deployment type",
})
.help()
.alias("help", "h")
@ -42,12 +44,17 @@ const argv = yargs(hideBin(process.argv))
.parseSync();
async function run() {
const STORAGE_DIR = "./testnet/instantiate-pyth";
let chainIds;
if (argv.deploy === "stable") {
chainIds = getChainIdsForStableDeployment();
} else {
chainIds = getChainIdsForEdgeDeployment();
}
// get the wasm code from github
let contractBytesDict = await getContractBytesDict(
Object.values(ExtendedChainsConfigTestnet).map(
({ pythArtifactZipName }) => pythArtifactZipName
chainIds.map(
(chainId) => CHAINS_CONTRACT_CONFIG[chainId].pythArtifactZipName
),
argv.contractVersion
);
@ -70,28 +77,28 @@ async function run() {
);
}
console.log();
let chainIds = argv.chainId === undefined ? ChainIdsTestnet : [argv.chainId];
for (let chainId of chainIds) {
let pipelineStoreFilePath = `${STORAGE_DIR}/${chainId}-${argv.contractVersion}.json`;
const pipeline = new Pipeline(chainId, pipelineStoreFilePath);
let chainConfig = CHAINS_NETWORK_CONFIG[chainId];
let contractConfig = CHAINS_CONTRACT_CONFIG[chainId];
const chainExecutor = createExecutorForChain(
ExtendedChainsConfigTestnet[chainId],
argv.mnemonic
const pipeline = new Pipeline(
chainId,
getPythInstantiateFileName(
chainId,
argv.contractVersion,
argv.deploy as DeploymentType
)
);
const chainExecutor = createExecutorForChain(chainConfig, argv.mnemonic);
// add stages
// 1 deploy artifact
pipeline.addStage({
id: "deploy-pyth-code",
executor: async () => {
return chainExecutor.storeCode({
contractBytes:
contractBytesDict[
ExtendedChainsConfigTestnet[chainId].pythArtifactZipName
],
contractBytes: contractBytesDict[contractConfig.pythArtifactZipName],
});
},
});
@ -106,14 +113,14 @@ async function run() {
return chainExecutor.instantiateContract({
codeId: storeCodeRes.codeId,
instMsg: getPythConfig({
feeDenom: ExtendedChainsConfigTestnet[chainId].feeDenom,
wormholeChainId:
ExtendedChainsConfigTestnet[chainId].wormholeChainId,
feeDenom: contractConfig.feeDenom,
wormholeChainId: contractConfig.wormholeChainId,
wormholeContract: getWormholeContractAddress(
chainId,
WORMHOLE_CONTRACT_VERSION,
false
argv.deploy as DeploymentType
),
deploymentType: argv.deploy as DeploymentType,
}),
label: "wormhole",
});
@ -138,50 +145,4 @@ async function run() {
}
}
function getPythConfig({
feeDenom,
wormholeContract,
wormholeChainId,
}: {
feeDenom: string;
wormholeContract: string;
wormholeChainId: number;
}) {
return {
wormhole_contract: wormholeContract,
governance_source_index: 0,
governance_sequence_number: 0,
chain_id: wormholeChainId,
valid_time_period_secs: 60,
fee: {
amount: "1",
denom: feeDenom,
},
// All contracts on any network are using mainnet data sources.
data_sources: [
{
emitter: Buffer.from(
"6bb14509a612f01fbbc4cffeebd4bbfb492a86df717ebe92eb6df432a3f00a25",
"hex"
).toString("base64"),
chain_id: 1,
},
{
emitter: Buffer.from(
"f8cd23c2ab91237730770bbea08d61005cdda0984348f3f6eecb559638c0bba0",
"hex"
).toString("base64"),
chain_id: 26,
},
],
governance_source: {
emitter: Buffer.from(
"5635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e",
"hex"
).toString("base64"),
chain_id: 1,
},
};
}
run();

View File

@ -0,0 +1,112 @@
import {
CHAINS_NETWORK_CONFIG,
createExecutorForChain,
} from "./chains-manager/chains";
import yargs from "yargs";
import { hideBin } from "yargs/helpers";
import { Pipeline } from "./pipeline";
import { PythWrapperExecutor, PythWrapperQuerier } from "./pyth-wrapper";
import {
DeploymentType,
getChainIdsForEdgeDeployment,
getChainIdsForStableDeployment,
getPythContractAddress,
getTestPythContractFileName,
} from "./helper";
import { PriceServiceConnection } from "@pythnetwork/price-service-client";
import { CosmwasmQuerier } from "./chains-manager/chain-querier";
const argv = yargs(hideBin(process.argv))
.usage("USAGE: npm run test -- <command>")
.option("mnemonic", {
type: "string",
demandOption: "Please provide the mnemonic",
})
.option("contract-version", {
type: "string",
description: `Please input the contract-version of the pyth contract.`,
default: "1.2.0",
})
.option("deploy", {
type: "string",
desc: "test the following deployment type.",
choices: ["stable", "edge"],
demandOption: "Please provide the deployment type",
})
.help()
.alias("help", "h")
.wrap(yargs.terminalWidth())
.parseSync();
async function run() {
let chainIds;
if (argv.deploy === "stable") {
chainIds = getChainIdsForStableDeployment();
} else {
chainIds = getChainIdsForEdgeDeployment();
}
for (let chainId of chainIds) {
let chainConfig = CHAINS_NETWORK_CONFIG[chainId];
const pipeline = new Pipeline(
chainId,
getTestPythContractFileName(
chainId,
argv.contractVersion,
argv.deploy as DeploymentType
)
);
const chainExecutor = createExecutorForChain(chainConfig, argv.mnemonic);
const pythExecutor = new PythWrapperExecutor(chainExecutor);
const chainQuerier = await CosmwasmQuerier.connect(
chainConfig.querierEndpoint
);
const pythQuerier = new PythWrapperQuerier(chainQuerier);
const priceServiceConnection = new PriceServiceConnection(
argv.deploy === "stable"
? "https://xc-mainnet.pyth.network"
: "https://xc-testnet.pyth.network"
);
const priceFeedId =
argv.deploy === "stable"
? "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43"
: "f9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b";
const pythContractAddr = getPythContractAddress(
chainId,
argv.contractVersion,
argv.deploy as DeploymentType
);
// add stages
// 1 push price update
pipeline.addStage({
id: "push-price-update",
executor: async () => {
const vaas = await priceServiceConnection.getLatestVaas([priceFeedId]);
const fund = await pythQuerier.getUpdateFee(pythContractAddr, vaas);
return pythExecutor.executeUpdatePriceFeeds({
contractAddr: pythContractAddr,
vaas,
fund,
});
},
});
// 2 fetch the updated price feed
pipeline.addStage({
id: "fetch-price-feed-update",
executor: () => {
return pythQuerier.getPriceFeed(pythContractAddr, priceFeedId);
},
});
await pipeline.run();
}
}
run();

View File

@ -1,5 +1,5 @@
import {
ChainIdsTestnet,
CHAINS_NETWORK_CONFIG,
createExecutorForChain,
} from "./chains-manager/chains";
import yargs from "yargs";
@ -10,8 +10,14 @@ import {
StoreCodeResponse,
} from "./chains-manager/chain-executor";
import { Pipeline } from "./pipeline";
import { getWormholeFileName, hexToBase64 } from "./helper";
import { ExtendedChainsConfigTestnet } from "./extended-chain-config";
import {
DeploymentType,
getChainIdsForEdgeDeployment,
getChainIdsForStableDeployment,
getWormholeFileName,
hexToBase64,
} from "./helper";
import { getWormholeConfig, CHAINS_CONTRACT_CONFIG } from "./configs";
const argv = yargs(hideBin(process.argv))
.usage("USAGE: npm run wormhole-stub -- <command>")
.option("mnemonic", {
@ -24,21 +30,18 @@ const argv = yargs(hideBin(process.argv))
There should be a compiled code at the path - "../wormhole-stub/artifacts/wormhole-\${contract-version}.wasm"`,
default: "2.14.9",
})
.option("chain-id", {
.option("deploy", {
type: "string",
choices: ChainIdsTestnet,
})
.option("mainnet", {
type: "boolean",
desc: "Execute this script for mainnet networks. THIS WILL BE ADDED IN FUTURE",
default: false,
desc: "Execute this script for the given deployment type.",
choices: ["stable", "edge"],
demandOption: "Please provide the deployment type",
})
.help()
.alias("help", "h")
.wrap(yargs.terminalWidth())
.parseSync();
const VAA_MAINNET_UPGRADES = {
const STABLE_VAA_UPGRADES = {
GUARDIAN_SET_UPGRADE_1_VAA:
"010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d",
GUARDIAN_SET_UPGRADE_2_VAA:
@ -53,19 +56,25 @@ async function run() {
// get the wormhole code
const contractBytes = readFileSync(wasmFilePath);
let chainIds = argv.chainId === undefined ? ChainIdsTestnet : [argv.chainId];
let chainIds;
if (argv.deploy === "stable") {
chainIds = getChainIdsForStableDeployment();
} else {
chainIds = getChainIdsForEdgeDeployment();
}
for (let chainId of chainIds) {
let contractConfig = CHAINS_CONTRACT_CONFIG[chainId];
let chainConfig = CHAINS_NETWORK_CONFIG[chainId];
let pipelineStoreFilePath = getWormholeFileName(
chainId,
argv.contractVersion,
argv.mainnet
argv.deploy as DeploymentType
);
const pipeline = new Pipeline(chainId, pipelineStoreFilePath);
const chainExecutor = createExecutorForChain(
ExtendedChainsConfigTestnet[chainId],
argv.mnemonic
);
const chainExecutor = createExecutorForChain(chainConfig, argv.mnemonic);
// add stages
// 1 deploy artifact
@ -88,7 +97,11 @@ async function run() {
return chainExecutor.instantiateContract({
codeId: storeCodeRes.codeId,
instMsg: getWormholeConfig(ExtendedChainsConfigTestnet[chainId]),
instMsg: getWormholeConfig({
feeDenom: contractConfig.feeDenom,
wormholeChainId: contractConfig.wormholeChainId,
deploymentType: argv.deploy as DeploymentType,
}),
label: "wormhole",
});
},
@ -108,45 +121,28 @@ async function run() {
},
});
// 4 vaa upgrades for guardian set
Object.keys(VAA_MAINNET_UPGRADES).forEach((id) => {
pipeline.addStage({
id,
executor: (getResultOfPastStage) => {
const instantiateContractRes: InstantiateContractResponse =
getResultOfPastStage("instantiate-contract");
// 4 vaa upgrades for guardian set for mainnet sources only
if (argv.deploy === "stable")
Object.keys(STABLE_VAA_UPGRADES).forEach((id) => {
pipeline.addStage({
id,
executor: (getResultOfPastStage) => {
const instantiateContractRes: InstantiateContractResponse =
getResultOfPastStage("instantiate-contract");
return chainExecutor.executeContract({
contractAddr: instantiateContractRes.contractAddr,
msg: {
// @ts-ignore
submit_v_a_a: { vaa: hexToBase64(VAA_MAINNET_UPGRADES[id]) },
},
});
},
return chainExecutor.executeContract({
contractAddr: instantiateContractRes.contractAddr,
msg: {
// @ts-ignore
submit_v_a_a: { vaa: hexToBase64(VAA_MAINNET_UPGRADES[id]) },
},
});
},
});
});
});
await pipeline.run();
}
}
interface ReqWormholeConfig {
feeDenom: string;
wormholeChainId: number;
}
function getWormholeConfig({ feeDenom, wormholeChainId }: ReqWormholeConfig) {
return {
chain_id: wormholeChainId,
fee_denom: feeDenom,
gov_chain: 1,
gov_address: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ=",
guardian_set_expirity: 86400,
initial_guardian_set: {
addresses: [{ bytes: "WMw65cCXshPOPIGXnhuflXB0aqU=" }],
expiration_time: 0,
},
};
}
run();

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"txHash": "98A1B62C8BAC210199EE846EB24FC1D5A0A51D98660DDFCC638C09A6A17472AE",
"codeId": 1334
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "A52159524B70297968F1FEFE54BBB395034D055624D9A7089A5E1AD633F555C6",
"contractAddr": "inj1rsw2p7dp4ezu02a6h0d026c5qh3vx79raal6pq"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "D1235A3BCB49F98E6211BE565A1C9351673D67DC5A1C4C5B31F36D732CCE8DCE"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 1888,
"txHash": "76869C7ACD433D74783668D7459957AF708A408E3C93E89BF6E18D045F420190"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno1jh89jkvvh8yfcxrt79p9d34el3ds8f845tvlvn6hpy6d5nwnn58srhadyy",
"txHash": "8C7E3551437A324278261CBFD25FD10998A71D642B0F7EDE57B2D6AC62BE5219"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "51ECDC4927B50E33F3AFF86C457E7ABC6F79FD41F36F9E26B3370BB261F83759"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 473,
"txHash": "73EFB113F0AA5D4C7DC98E96F1452E5DCC1C8C43F335CADEB7351777F0D7F7F1"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron1e52nk064un8kad6z6xw8vu9uhp699wcdqkkve2qhpdsya6tqp69qys4xcz",
"txHash": "67DDA90AE2515DA518F4AD6CC99A0770BA303DBCEDF530187E570AFFEC12EC0D"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "913A34B58BF1276401ACFF66F05DD0CAD74F1FD9261FB1563FE7FFE34F29E8BB"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 7133,
"txHash": "AE36A4CAB335E9D1EF7E721F82FCAEC6A41E864886642FE3BAE5C93A692E0E91"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo13uelnx8ly3gc3l6sp7chsp23y025vmg73cw4lln6efm84h9ehl2q6j847p",
"txHash": "099841FD973C8E5C03973175585332B606F22B00A23C3BE023B51B66A043BAD8"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "3FD23762917EA5084D71B01A9158A732BEDA6D9ADD42EB52F18B8EF26B9CA957"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 214,
"txHash": "435D94FBBF4523CAF79386C2B73E0C723947DF15ECF61C5AE96422B1C288840D"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo14tkdsu8x3adqsldcx2h88ez6vt4f5z566mkgxaq696ztext2xxxquq5u6v",
"txHash": "81DA00CB7165CF03A937F4806FADC212E34F2132F89769C8382D9780E67F0B6C"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "61429384488D4850C3B4A26A576364D33EA0641B3A8CDF966FB03509E9B6ADDB"
}
}
}

View File

@ -0,0 +1,6 @@
{
"deploy-pyth-code": {
"status": "rejected",
"reason": {}
}
}

View File

@ -0,0 +1,34 @@
{
"push-price-update": {
"status": "rejected",
"reason": {
"code": 2,
"metadata": {
"headersMap": {
"date": ["Mon, 22 May 2023 14:18:22 GMT"],
"content-type": ["application/grpc-web+proto"],
"transfer-encoding": ["chunked"],
"connection": ["close"],
"set-cookie": [
"chain-cookie=897b26a087ddf13b95194a034c704cf7; Expires=Wed, 24-May-23 14:18:22 GMT; Max-Age=172800; Path=/; Secure; HttpOnly"
],
"access-control-expose-headers": [
"X-Cosmos-Block-Height, Grpc-Status, Grpc-Message, Grpc-Status-Details-Bin, Date, Vary, Content-Type, grpc-status, grpc-message"
],
"grpc-message": [
"failed to execute message; message index: 0: dispatch: submessages: unauthorized Pyth price relay [!injective!labs/wasmd@v0.30.0-inj-1/x/wasm/keeper/keeper.go:1238] With gas wanted: '30000000' and gas used: '326963'"
],
"grpc-status": ["2"],
"grpc-status-details-bin": [
"CAIS2AFmYWlsZWQgdG8gZXhlY3V0ZSBtZXNzYWdlOyBtZXNzYWdlIGluZGV4OiAwOiBkaXNwYXRjaDogc3VibWVzc2FnZXM6IHVuYXV0aG9yaXplZCBQeXRoIHByaWNlIHJlbGF5IFshaW5qZWN0aXZlIWxhYnMvd2FzbWRAdjAuMzAuMC1pbmotMS94L3dhc20va2VlcGVyL2tlZXBlci5nbzoxMjM4XSBXaXRoIGdhcyB3YW50ZWQ6ICczMDAwMDAwMCcgYW5kIGdhcyB1c2VkOiAnMzI2OTYzJyAacAoodHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucnBjLkVycm9ySW5mbxJECh11bmF1dGhvcml6ZWQgUHl0aCBwcmljZSByZWxheRoTCglDb2Rlc3BhY2USBm9yYWNsZRoOCghBQkNJQ29kZRICMzU"
],
"vary": ["Origin, Origin"],
"x-cosmos-block-height": ["11702504"],
"strict-transport-security": ["max-age=15724800; includeSubDomains"],
"access-control-allow-origin": ["*"],
"access-control-allow-credentials": ["true"]
}
}
}
}
}

View File

@ -0,0 +1,28 @@
{
"push-price-update": {
"status": "fulfilled",
"result": {
"txHash": "ED580159C0393A11223C2CC1C51200D0BDC9EB28E22C5DB28AA5934761248F78"
}
},
"fetch-price-feed-update": {
"status": "fulfilled",
"result": {
"price_feed": {
"id": "f9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b",
"price": {
"price": "2690892219934",
"conf": "640219934",
"expo": -8,
"publish_time": 1684765098
},
"ema_price": {
"price": "2687619200000",
"conf": "644806510",
"expo": -8,
"publish_time": 1684765098
}
}
}
}
}

View File

@ -0,0 +1,28 @@
{
"push-price-update": {
"status": "fulfilled",
"result": {
"txHash": "570218013CF48B72BB00E5DF8349EF3967962C399B2659FFA36663C6D97CFF4B"
}
},
"fetch-price-feed-update": {
"status": "fulfilled",
"result": {
"price_feed": {
"id": "f9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b",
"price": {
"price": "2691128116226",
"conf": "783518657",
"expo": -8,
"publish_time": 1684765109
},
"ema_price": {
"price": "2687631700000",
"conf": "644643440",
"expo": -8,
"publish_time": 1684765109
}
}
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"txHash": "152C096B601252279BCBB9FB15D6B6E4C0FFF2A4E428F24C8F47B86BBFB757BA",
"codeId": 1333
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "B9B18667E75A21D82A4684FEDE8DAB57BC4575E19EAB8A5D6FAC8F7D816D064D",
"contractAddr": "inj1228a0hxh6pnu6mnwmwvxus2lufwetnqrhz9hk9"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "13F148074A7D0D392C77A4A71F8E25BF6C2592A216392E2BA909915E74B67FAA"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 1887,
"txHash": "7295D9B243928F66B786C74FAC622533F68B5C19F7B1F1C701BCFF3E33268383"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno16uf644hk8ttekqkv9mjc0rmk5a7jeg84h4kfuj67e6y54c0up6yqpa3v9t",
"txHash": "B2F15C9CDE960B405A3843ABA535A91FB95FC43823E7D2B15C4EDBEE2F333FE9"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "EFA1BE55168369371B6C4852011D8AFE9B1C557AE3D92D6C9C9B3CA0CE2DD122"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 472,
"txHash": "00A7125012E7B5ECE6DB5938DC177B37A37C0AEC42B08D3D5A7B3CC9C1A2161D"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron1r02wenxmllx8avqqd2nh4fa40ps6ka0vawl4ushvk7kllgq6de3q060zat",
"txHash": "283DC501A8860BF203D9B97D90FE0E894CE38A54749FB8F04B0FFA35F2385521"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "DD8756593547B35BDEDB6A66EAB25D1CD03B6D7494F5449291DD766A7D925E57"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 7132,
"txHash": "63B8EBA9DB096D34D0A20EACA201F11C11CCD8CAF8FDCA1C54C6EC3C9096676E"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1jzrpy80uzhypjpg9r88dshqy8slmcfenwgem2n2acgd55zdgk07sm2w0ar",
"txHash": "BA8844E42D412FB07AA752086674A991112500F6DA0799454C731BCAC9E5F6A7"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "C9508A2252269E7863D10980FA4309ECFD0BEF7F9D138ABD80ABE7523ABCB833"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 213,
"txHash": "667B97258DE10844A41FDA7B773DABE680FF3A272027F82C3FF8F94B9198ED27"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1cskn9mhyj4f3e5t0vcuujvug4pte7qzcmmfqyncckhy82zar6feq5chter",
"txHash": "EA7B5ED27B9331AFAF835AB1FDA6F0F5AD291923EE9EF2FE05FC2221E542CF70"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "4B2C516AEE584AB30E821FD898FA5AF7B709F8AEFBEFD186AFD5969178059643"
}
}
}

View File

@ -0,0 +1,10 @@
{
"deploy-pyth-code": {
"status": "rejected",
"reason": {
"code": 5,
"codespace": "sdk",
"log": ""
}
}
}

View File

@ -0,0 +1,34 @@
{
"push-price-update": {
"status": "rejected",
"reason": {
"code": 2,
"metadata": {
"headersMap": {
"date": ["Mon, 22 May 2023 14:19:12 GMT"],
"content-type": ["application/grpc-web+proto"],
"transfer-encoding": ["chunked"],
"connection": ["close"],
"set-cookie": [
"chain-cookie=26cc53620be2cd8c5e20599b6cee03e1; Expires=Wed, 24-May-23 14:19:12 GMT; Max-Age=172800; Path=/; Secure; HttpOnly"
],
"access-control-expose-headers": [
"Vary, Grpc-Status-Details-Bin, Date, Content-Type, X-Cosmos-Block-Height, Grpc-Status, Grpc-Message, grpc-status, grpc-message"
],
"grpc-message": [
"failed to execute message; message index: 0: dispatch: submessages: unauthorized Pyth price relay [!injective!labs/wasmd@v0.30.0-inj-1/x/wasm/keeper/keeper.go:1238] With gas wanted: '30000000' and gas used: '456932'"
],
"grpc-status": ["2"],
"grpc-status-details-bin": [
"CAIS2AFmYWlsZWQgdG8gZXhlY3V0ZSBtZXNzYWdlOyBtZXNzYWdlIGluZGV4OiAwOiBkaXNwYXRjaDogc3VibWVzc2FnZXM6IHVuYXV0aG9yaXplZCBQeXRoIHByaWNlIHJlbGF5IFshaW5qZWN0aXZlIWxhYnMvd2FzbWRAdjAuMzAuMC1pbmotMS94L3dhc20va2VlcGVyL2tlZXBlci5nbzoxMjM4XSBXaXRoIGdhcyB3YW50ZWQ6ICczMDAwMDAwMCcgYW5kIGdhcyB1c2VkOiAnNDU2OTMyJyAacAoodHlwZS5nb29nbGVhcGlzLmNvbS9nb29nbGUucnBjLkVycm9ySW5mbxJECh11bmF1dGhvcml6ZWQgUHl0aCBwcmljZSByZWxheRoTCglDb2Rlc3BhY2USBm9yYWNsZRoOCghBQkNJQ29kZRICMzU"
],
"vary": ["Origin, Origin"],
"x-cosmos-block-height": ["11702525"],
"strict-transport-security": ["max-age=15724800; includeSubDomains"],
"access-control-allow-origin": ["*"],
"access-control-allow-credentials": ["true"]
}
}
}
}
}

View File

@ -0,0 +1,28 @@
{
"push-price-update": {
"status": "fulfilled",
"result": {
"txHash": "3FCC45CA1B82CA05BDDBE4BB528DCDB354CBC599F973B08F514A16437342EA8B"
}
},
"fetch-price-feed-update": {
"status": "fulfilled",
"result": {
"price_feed": {
"id": "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
"price": {
"price": "2692904856472",
"conf": "789206669",
"expo": -8,
"publish_time": 1684765152
},
"ema_price": {
"price": "2687021600000",
"conf": "646106260",
"expo": -8,
"publish_time": 1684765152
}
}
}
}
}

View File

@ -0,0 +1,28 @@
{
"push-price-update": {
"status": "fulfilled",
"result": {
"txHash": "82EEEF5980B69EC8A5DC86B3E0C8E936DAF2EC428F14C1B3FDC5D0DF8E05866A"
}
},
"fetch-price-feed-update": {
"status": "fulfilled",
"result": {
"price_feed": {
"id": "e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
"price": {
"price": "2693155000000",
"conf": "741500000",
"expo": -8,
"publish_time": 1684765163
},
"ema_price": {
"price": "2687039700000",
"conf": "646255300",
"expo": -8,
"publish_time": 1684765163
}
}
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"txHash": "193319C684AB2D1CA0681F051D987A2112027A87A8F9BB75C938AF51B65E6F9B",
"codeId": 1138
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "5B8D14C4AA0D75C42681F6F1E68F4DD4DF49EB5B3D5DD97DF421B5C89F878A16",
"contractAddr": "inj1yzx0wdn6t7xrjdpgztnrraq57nw2zxhstr97xw"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "FDEC7C27C8B2AB1148C7AFEFD8AEB8D64F5119CFA70898803A0F88C56AE1A64F"
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 1807,
"txHash": "92123EFAEC260CAF9141AEE163CA4185C410EE82E4387AED2D95BA0C9F2068D1"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno1ygyhu0zn69zm0354nzpd7zrp5xs9vpkqcuk7kfneyghrpa87msmqeskxqa",
"txHash": "09CC1174E8816F8628E2F17887CB718766E3B1032A4173A85682BF278A1DB53D"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "042B4697E5CAFCB73C8EC5514C9A8E52CC3BD96BC645DD47F07030C5B075A545"
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 245,
"txHash": "23783BB7AE1D66EA132B25C505B9E15F4E899D58EA8A57545C62BBB50DC40F9D"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron1zpn7yhxqx2f0c6cpmp3fr42yafupz9elglvgdss2300c847ph0hsgurhlj",
"txHash": "24372E431DA7DD46DCFCABA1E18E6C8427A03EE2D6BE9DB4E700906FEEF333FC"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "A604787CA8E32079B1A05CE5BDED1183E46102860E1A5A924A1A15B9932947BC"
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 6957,
"txHash": "BEA793ECF41BE43AFD43254D4241C6D2C9124271371A52D1856116EE68B953E3"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1xws8v2yv50v0spn90yr9fe9zx8zxfppl3syn38zw59npvp8dd70sutnvsm",
"txHash": "C2BE424676D9680CFA8AE1C3DFD09E489D4D65A2A37EA0C5D311BFB21DF39A4A"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "8500646587F80EEE7E066263236DB4C01D4F41EF7BD6F0029542B18771CA03FD"
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 60,
"txHash": "4F4C940801C122C4F25DBF4E5BFC513859C8EBAE596E2225E9274C724A1C29BE"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo12u2vqdecdte84kg6c3d40nwzjsya59hsj048n687m9q3t6wdmqgsq6zrlx",
"txHash": "8793156BE964DCF2631F2EE4E6C3D9FF9E037ACD89ABB3DA3B3242766CA689E7"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "4E329EE9AE8F63DFC5C876573D5EA66063C875B4591B13555855937FE57B31B6"
}
}
}

View File

@ -1,22 +0,0 @@
{
"deploy-pyth-code": {
"status": "fulfilled",
"result": {
"codeId": 370,
"txHash": "C6290D3455B244DD9B8503E5F219EECA29DB7B750B3FFC36CE07C7002743F522"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "sei1977nnu5jqatteqgve8tx7nzu9y7eh6cvq0e4g6xjx8tf5wm4nkmsfljunh",
"txHash": "D0ACC86A5098E70F6DCA8408EE41C3E774836F2C2796DADBEE5DAC70D74582DD"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "5C5ACED6A47A32BB1990656FBC4960BCB12847CEC32C0BC61F44D2DB07B3E07B"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"txHash": "6FCD437FE0EBB28614022E0FC3E34D3322D200FB08518CC761D8AC2C11619141",
"codeId": 1331
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "8BB15D28C0534467DF4C66AB9B8A075584A823E810386BBDBBA5A80A935280AF",
"contractAddr": "inj1hglkee95shfsl5xxky26hdqxj0mqp54lh7xm59"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "734C4200684D83BB84AA96168C310CFA4B130CD8410C3A9F9BF60CCDE6F26F84"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 1885,
"txHash": "32BDB4863384BC2FA3AEF2F9D72AD0F8B92296862409CC934AEFF4003A255E87"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno1g9xhl5jzhlm6lqc2earxkzyazwl2cshr5cnemxtjy0le64s4w22skukkxj",
"txHash": "A69B6651EEB76E41F5D5884EDAA7EC43925750B4A277D27ED2E53359465F482B"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "791389480F1CBBD7777F859F300065E8A2F75048A09A615605723263A98C7D8A"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 470,
"txHash": "BDD4AEB11E02B22B22624BDD98301BDA057192AF666A73B4D8090D41FB43474D"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron1nxs2ajn4ejrggfuvqczfx4txghrendcpy3526avg2tsngjktedtspgla8t",
"txHash": "40E62B2FDC59CFEAFC22762B6142158394811FBEFEBAC3C493031FC9C138180F"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "E197367F00F2EA5EB2B209A29C73E9A5731E41289C392ACF60750753EF7F6558"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 7130,
"txHash": "692DAB9B4EFE3F94C7D4A80488CF783CB1E889D4D928008027CAF63C1804FC41"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1yh0fe3vzk97kktt9r8h460nye55c2freayx4w62dt3hmw987y4ussurxew",
"txHash": "1D930C3C434902EBFE7E2C21E5AD31C216EEEF2907846CEADCF701A3B0365892"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "766B58D3F8235E1D88212C5721440616026630A7497E1CC9F7D3C999A90FD8D6"
}
}
}

View File

@ -0,0 +1,22 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 210,
"txHash": "6C1B94D25A47DA90D61D553E8C52D55290FAAD9C56029748B272C5E438BCD591"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo19ah8ak7rgmds40te22xnz7zsdmx5twjulv3sypqm79skkl2ajm4skuhwmf",
"txHash": "2833D3B3FF4D3A78D5157F2F9B6F5A71515113439E95183A2F151E94843EBF92"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "FC58312A9043611CDD5EFA96478244DB4A14667C50AC16C08B6CDB0BB15FAA73"
}
}
}

View File

@ -0,0 +1,10 @@
{
"deploy-wormhole-code": {
"status": "rejected",
"reason": {
"code": 5,
"codespace": "sdk",
"log": ""
}
}
}

View File

@ -0,0 +1,40 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"txHash": "FE81072106D8DDA388804B8A1A590AD8796A45AC83B63120CFE5673F7F15EF49",
"codeId": 1332
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "343906935EEC0C1B4E1F63BA379EE77B52588CE99E6961A682B2004554AB7108",
"contractAddr": "inj17sy3vx5dfeva9wx33d09yqdwruntpccnjyw0hj"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "BA69843DA903712167D709E136F5AE967D0D04401603C4FCB23A72A502FCFD18"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "CDB601D4153C63B415908FEAB5D80BF2A3A4B06118FFCB9B922E6AA811375A9E"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "80CE6312F486757DBA3E54F2A411C7F05F65BED4715A54F1C141A8F30DA442A5"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "4A10072F131CEAA521C194A266948053E59AC31775228A1EBD16A1F97CD54D59"
}
}
}

View File

@ -0,0 +1,40 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 1886,
"txHash": "C8528EE8A90148BDEF78F1F5E9E1AFBACC009E1922DBEBD0C2FA5808BBD90DD8"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno1h7m0xwgu4qh0nrthahpydxzw7klvyd5w8d7jjl675p944ds7jr4sf3ta4l",
"txHash": "A09236DA89A9C0BE7C83A0DD3410D29985E139459635460B24CA60023BAA7B3D"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "9B5A30599102D811858E8891A71EC9A6266A2449666657B4F8CBDBBD9EE3028A"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "EF9E6459A6D977F927397F5D897DB053DF76C45911FC3D769B30BD66085994C2"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "6537ACE56F769CE9053739C6D99C8754ADA195B59A883649354D13BE4EF82332"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "CE6AD3DB1086C3589EB770AAD2ECCA02157802BAF367F3CFDC81515C2461F9D6"
}
}
}

View File

@ -0,0 +1,40 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 471,
"txHash": "B9040626F0F295AB29B5158356EA9FEC0287F47A3B9AA0BA4F92DF087BA95271"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron1wtuuak4yt4vyhtv7gt4xnv0m8zfakad5lnz6r7dx8alyydu0sgns67kmvy",
"txHash": "6364F32E86326919C760AC5DE8C69CA753B7A830C4A2138F65B3847138971F4D"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "1D05FAC3DA7980F7CB28F9A99881DD630A4F3E028C03423B7D2A12127C58739A"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "B6AAA6F13F33901A107A45643C57B75114F807C921A00B3BA277BADA3361F598"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "796009ED6F910F29EAF153E493913AB1487BB2EE9BB6C75659E2236115FFC06C"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "8C46D4BD36312D34F599ED71CFB62B635B96BCAEA21BDF75C29807D5CC9AF8BD"
}
}
}

View File

@ -0,0 +1,40 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 7131,
"txHash": "165CBD8DE1680C42C99B7E508383AF9A6441182469FE17B071D944DBBCFE250D"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1lcv8tazwtf00rs3zlpdp5a7dlcw2zvsmxacvfdpdxwf242e8nhfscvrwdg",
"txHash": "601E0DF159B92E1AB6184D430AE329BF7988E6FEB08170671DC30EB80D091031"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "77FBC16D529BA8E064E283EFA387E3DFF7730028A1AF05E1AC7ECA280F8F6209"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "3A8DC5F03AC31C7E8DE20889B2515E60A1938BC8F374A2F935B8EBD2612CE7B8"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "176C79E3192FAD3BC6C72A74948CFB962F90AAED2F28B25CCE4B777642DBDF94"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "9336F2FCA6E94BEAEF99A166517EB7E8AC7698882F07942804B15174BAFF6CF0"
}
}
}

View File

@ -0,0 +1,40 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 211,
"txHash": "5D5EECA973F0707D47596DFD5C6CD50D43CB73FA87AD760BA32842A5DC8D1219"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1llum0y8zc4h2f0rhcdn63xje4mrkdljrve9l40lun9lpeyu2l7cq4phaw6",
"txHash": "FC446A15972BE20201582C9569EBA91E0B705C168A70C31A0AF49B8521F2E7AE"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "586F2E0AAD1465DDAE2A2BCFEB50A17DBB8E1F93A927A2D8F0AB4E01F3CCE037"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "3091E097418924C4800F482DAC11701F82CD0D041EE8CEF632E648E71313A882"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "0028F2D365230E4ED2E3CAF0EB57ADBFB2B22CF28B1FEA18521FC678EB950B7C"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "C753B360348D133F484FD4FEA53BA53B5CFC88EB96B6513E8D8659A986AAEC9D"
}
}
}

View File

@ -0,0 +1,6 @@
{
"deploy-wormhole-code": {
"status": "rejected",
"reason": {}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"txHash": "609E6EFFD1C191FA69157BC124CD15B0448E30A11AA65D36CF8BE66666127828",
"codeId": 1116
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"txHash": "6408D6691CF40E3C13062F12FD65E3599722A8FDBD3664852BB44DC739C57B9A",
"contractAddr": "inj1ks8v2tvx2vsqxx7sgckl9h7rxga60tuvgezpps"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "5B31A48AEF4250FAA09117EF63E49E81B6EFBFAC1B1C6AEFF80265434A70DD7D"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "C68250F924EF5E97DA190EBEEFA550CDACC8E6F51B280AC47E7569025DE35534"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "C320BDBD719DFD5B1074AB901C4A64B209C5F882B90D8AD785D28E6C5EE4C05F"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "C20DD672BABB67868FC53E2EAF1113AFBBE718365211259D2338F746C37513F5"
}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 1806,
"txHash": "F7B066A9B667F4E66F9FEF5D2EDF6E997645AE99018F261AA9B03C0B86E5EEEA"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "juno1ar2pvs0p2a67fcg0x26paq0zckqs9fjxmfcwuy8hvvam68g24kdsh6pt52",
"txHash": "C922ABBADD9E2042DDE4DE88F9F30B41AFE53D41DD29FA8714F492735422BEB9"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "F7720D2F24481BD718881B5C7394948ECEDB0A59DAD884E15164A51AF1F7BD9F"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "1EE0886A74FF1A76D1552209085FC345294CDE7300BBFD4D32423FA1D275E971"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "6809F305AC6ED188BD00C390CA6737D0A5F36BA39D8ED8504F181810671A1E20"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "8B09ED936129EDBC7FC19B00A292BCF9B9FF0819028E039C68B861F60DC94A6C"
}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 244,
"txHash": "C8F04CFACC75C28862F3E2A6D08F5F9B869268F09B9D792EBD6C4EC8BC8F36DE"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "neutron17xlvf3f82tklvzpveam56n96520pdrxfgpralyhf3nq7f33uvgzqrgegc7",
"txHash": "8456CC89F7253998E0A22AD5F037574682315F332C661AC357AF927FDFF489B0"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "B9188160725B5282D11DB83F1AC28F88879A4C03AF7B6F178EA44BD07BB76805"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "6ACF2A42CEE311F5D2C980AE8CD90D0DC92330EDA940E49BEDBB7C9A8FE2802F"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "621914F52BC5BED6BF5F4D6966B8FDF7BDA4E552D1A69AA4BE78FA0C7C5500AC"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "4ED3C3AF3223030E2BBB9068767C1E8C60B7D7E5895BDE586F0E07CAA649A05C"
}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 6949,
"txHash": "504970A0B21933FCE9BA22E2819AEEC643E7DBFA230C7BEA2E8A068522605E65"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo18njur8dzzq6lm5dd6n2td94jgmnywt0j9es2ymxpa0zyy7jrwwuq4v8arc",
"txHash": "E8B11F851BF79448129D1F75D67B9020A794E9DA9686B56EDC458FFC338D69B1"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "CACD7F3608E915AC629B399C63EE2C595583AE76418949847B43795208F656EE"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "068EF47F42D6A1D44EFD4100B91CCE5A5050F505A088567271F5B6689A224EE5"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "AA7D06318A6945F1519A8C7DAD75141BCBC21C1F7E800B48C8045AAF1BF8A887"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "0C67CABFC942171919425A1D8A64AB40D4FF5FC49667D0B6B161704DB9C22E0C"
}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 58,
"txHash": "48375A885AE7047D38C4001C4F16F8852E4971F7E761108075AC4BD447A05AFB"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "osmo1224ksv5ckfcuz2geeqfpdu2u3uf706y5fx8frtgz6egmgy0hkxxqtgad95",
"txHash": "B5A7FDC5220C05D446BBB9207F0DDA8C8C7FEB1DBF11127993D014C20FAF0CFA"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "E4CA160348165532DBE7B43C116A801E78FE77122928DB9F9D4DB41514F53F53"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "0C75CE16C91F32A902E43A6326B63800DA5182EFC52AA245E101C6374E3671B1"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "F58EF5AC1A1941362339A2355F2A2DD44BF46522C37E3D60602C0E731B36F0B6"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "59984BB3216E6A7D44501B11EE1F51735E9DE9C8D24D87343B9DDB480F3B5ED3"
}
}
}

View File

@ -1,40 +0,0 @@
{
"deploy-wormhole-code": {
"status": "fulfilled",
"result": {
"codeId": 369,
"txHash": "240C71EE74A1C676A054FD6F6E81CC46701103EF8CAB3A431ACFC18042B0AC09"
}
},
"instantiate-contract": {
"status": "fulfilled",
"result": {
"contractAddr": "sei1tu7w5lxsckpa4ahd4umra0k02zyd7eq79j7zxk8e3ds8evlejywqrtsl6a",
"txHash": "72FA96116275D66D8CF83BCD955E837FDB9CBA085CF0D57EC6FA30C20F106E0B"
}
},
"set-own-admin": {
"status": "fulfilled",
"result": {
"txHash": "3BFF9026BCAF0B08C1A6FDE3F26D051860D21CCCC1DF28D9A09D0C9F570815A0"
}
},
"GUARDIAN_SET_UPGRADE_1_VAA": {
"status": "fulfilled",
"result": {
"txHash": "CED60F9D4502BF3FC369048B404DF437349323C5786DF8D1D8E6FDDDBC70E855"
}
},
"GUARDIAN_SET_UPGRADE_2_VAA": {
"status": "fulfilled",
"result": {
"txHash": "A7A5CDDBE806530830B006D1E90F8C152BF4DE50AFC1567EA209FCB0854334C1"
}
},
"GUARDIAN_SET_UPGRADE_3_VAA": {
"status": "fulfilled",
"result": {
"txHash": "F0C189FDCB03F26568BDA7597C94235C92197D0B1C5591CCD6510F374DF9480D"
}
}
}