Преглед изворни кода

[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
Dev Kalra пре 2 година
родитељ
комит
fbcb8a14f6
51 измењених фајлова са 1258 додато и 595 уклоњено
  1. 24 3
      governance/xc_governance_sdk_js/src/chains.ts
  2. 2 1
      target_chains/cosmwasm/tools/package.json
  3. 44 29
      target_chains/cosmwasm/tools/src/chains-manager/chains.ts
  4. 173 0
      target_chains/cosmwasm/tools/src/configs.ts
  5. 0 54
      target_chains/cosmwasm/tools/src/extended-chain-config.ts
  6. 76 8
      target_chains/cosmwasm/tools/src/helper.ts
  7. 36 75
      target_chains/cosmwasm/tools/src/instantiate-pyth.ts
  8. 112 0
      target_chains/cosmwasm/tools/src/test.ts
  9. 49 53
      target_chains/cosmwasm/tools/src/wormhole-stub.ts
  10. 22 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/injective_testnet-1.2.0.json
  11. 22 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/juno_testnet-1.2.0.json
  12. 22 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/neutron_testnet_pion_1-1.2.0.json
  13. 22 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/osmosis_testnet_4-1.2.0.json
  14. 22 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/osmosis_testnet_5-1.2.0.json
  15. 6 0
      target_chains/cosmwasm/tools/store/edge/instantiate-pyth/sei_testnet_atlantic_2-1.2.0.json
  16. 34 0
      target_chains/cosmwasm/tools/store/edge/test-contracts/injective_testnet-1.2.0.json
  17. 28 0
      target_chains/cosmwasm/tools/store/edge/test-contracts/osmosis_testnet_4-1.2.0.json
  18. 28 0
      target_chains/cosmwasm/tools/store/edge/test-contracts/osmosis_testnet_5-1.2.0.json
  19. 22 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/injective_testnet-1.2.0.json
  20. 22 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/juno_testnet-1.2.0.json
  21. 22 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/neutron_testnet_pion_1-1.2.0.json
  22. 22 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/osmosis_testnet_4-1.2.0.json
  23. 22 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/osmosis_testnet_5-1.2.0.json
  24. 10 0
      target_chains/cosmwasm/tools/store/stable/instantiate-pyth/sei_testnet_atlantic_2-1.2.0.json
  25. 34 0
      target_chains/cosmwasm/tools/store/stable/test-contracts/injective_testnet-1.2.0.json
  26. 28 0
      target_chains/cosmwasm/tools/store/stable/test-contracts/osmosis_testnet_4-1.2.0.json
  27. 28 0
      target_chains/cosmwasm/tools/store/stable/test-contracts/osmosis_testnet_5-1.2.0.json
  28. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/injective-1.2.0.json
  29. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/juno-1.2.0.json
  30. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/neutron_pion_1-1.2.0.json
  31. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/osmosis_4-1.2.0.json
  32. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/osmosis_5-1.2.0.json
  33. 0 22
      target_chains/cosmwasm/tools/testnet/instantiate-pyth/sei_atlantic_2-1.2.0.json
  34. 22 0
      target_chains/cosmwasm/wormhole-stub/edge/injective_testnet-2.14.9.json
  35. 22 0
      target_chains/cosmwasm/wormhole-stub/edge/juno_testnet-2.14.9.json
  36. 22 0
      target_chains/cosmwasm/wormhole-stub/edge/neutron_testnet_pion_1-2.14.9.json
  37. 22 0
      target_chains/cosmwasm/wormhole-stub/edge/osmosis_testnet_4-2.14.9.json
  38. 22 0
      target_chains/cosmwasm/wormhole-stub/edge/osmosis_testnet_5-2.14.9.json
  39. 10 0
      target_chains/cosmwasm/wormhole-stub/edge/sei_atlantic_testnet_2-2.14.9.json
  40. 40 0
      target_chains/cosmwasm/wormhole-stub/stable/injective_testnet-2.14.9.json
  41. 40 0
      target_chains/cosmwasm/wormhole-stub/stable/juno_testnet-2.14.9.json
  42. 40 0
      target_chains/cosmwasm/wormhole-stub/stable/neutron_testnet_pion_1-2.14.9.json
  43. 40 0
      target_chains/cosmwasm/wormhole-stub/stable/osmosis_testnet_4-2.14.9.json
  44. 40 0
      target_chains/cosmwasm/wormhole-stub/stable/osmosis_testnet_5-2.14.9.json
  45. 6 0
      target_chains/cosmwasm/wormhole-stub/stable/sei_testnet_atlantic_2-2.14.9.json
  46. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/injective-2.14.9.json
  47. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/juno-2.14.9.json
  48. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/neutron_pion_1-2.14.9.json
  49. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/osmosis_4-2.14.9.json
  50. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/osmosis_5-2.14.9.json
  51. 0 40
      target_chains/cosmwasm/wormhole-stub/testnet/sei_atlantic_2-2.14.9.json

+ 24 - 3
governance/xc_governance_sdk_js/src/chains.ts

@@ -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

+ 2 - 1
target_chains/cosmwasm/tools/package.json

@@ -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",

+ 44 - 29
target_chains/cosmwasm/tools/src/chains-manager/chains.ts

@@ -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);
-
-// TODO: ADD MAINNET IDs IN FUTURE
-// export enum ChainIdMainnet {
-//   INJECTIVE = "injective",
-// }
+export const ChainIds = Object.values(ChainId);
 
-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;

+ 173 - 0
target_chains/cosmwasm/tools/src/configs.ts

@@ -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,
+    },
+  };
+}

+ 0 - 54
target_chains/cosmwasm/tools/src/extended-chain-config.ts

@@ -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],
-  },
-};

+ 76 - 8
target_chains/cosmwasm/tools/src/helper.ts

@@ -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");
 }

+ 36 - 75
target_chains/cosmwasm/tools/src/instantiate-pyth.ts

@@ -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);
-
-    const chainExecutor = createExecutorForChain(
-      ExtendedChainsConfigTestnet[chainId],
-      argv.mnemonic
+    let chainConfig = CHAINS_NETWORK_CONFIG[chainId];
+    let contractConfig = CHAINS_CONTRACT_CONFIG[chainId];
+
+    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();

+ 112 - 0
target_chains/cosmwasm/tools/src/test.ts

@@ -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();

+ 49 - 53
target_chains/cosmwasm/tools/src/wormhole-stub.ts

@@ -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");
-
-          return chainExecutor.executeContract({
-            contractAddr: instantiateContractRes.contractAddr,
-            msg: {
-              // @ts-ignore
-              submit_v_a_a: { vaa: hexToBase64(VAA_MAINNET_UPGRADES[id]) },
-            },
-          });
-        },
+    // 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]) },
+              },
+            });
+          },
+        });
       });
-    });
 
     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();

+ 22 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/injective_testnet-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/juno_testnet-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/neutron_testnet_pion_1-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/osmosis_testnet_4-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/osmosis_testnet_5-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 6 - 0
target_chains/cosmwasm/tools/store/edge/instantiate-pyth/sei_testnet_atlantic_2-1.2.0.json

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

+ 34 - 0
target_chains/cosmwasm/tools/store/edge/test-contracts/injective_testnet-1.2.0.json

@@ -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"]
+        }
+      }
+    }
+  }
+}

+ 28 - 0
target_chains/cosmwasm/tools/store/edge/test-contracts/osmosis_testnet_4-1.2.0.json

@@ -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
+        }
+      }
+    }
+  }
+}

+ 28 - 0
target_chains/cosmwasm/tools/store/edge/test-contracts/osmosis_testnet_5-1.2.0.json

@@ -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
+        }
+      }
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/injective_testnet-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/juno_testnet-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/neutron_testnet_pion_1-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/osmosis_testnet_4-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/osmosis_testnet_5-1.2.0.json

@@ -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"
+    }
+  }
+}

+ 10 - 0
target_chains/cosmwasm/tools/store/stable/instantiate-pyth/sei_testnet_atlantic_2-1.2.0.json

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

+ 34 - 0
target_chains/cosmwasm/tools/store/stable/test-contracts/injective_testnet-1.2.0.json

@@ -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"]
+        }
+      }
+    }
+  }
+}

+ 28 - 0
target_chains/cosmwasm/tools/store/stable/test-contracts/osmosis_testnet_4-1.2.0.json

@@ -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
+        }
+      }
+    }
+  }
+}

+ 28 - 0
target_chains/cosmwasm/tools/store/stable/test-contracts/osmosis_testnet_5-1.2.0.json

@@ -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
+        }
+      }
+    }
+  }
+}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/injective-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/juno-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/neutron_pion_1-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/osmosis_4-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/osmosis_5-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 0 - 22
target_chains/cosmwasm/tools/testnet/instantiate-pyth/sei_atlantic_2-1.2.0.json

@@ -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"
-    }
-  }
-}

+ 22 - 0
target_chains/cosmwasm/wormhole-stub/edge/injective_testnet-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/wormhole-stub/edge/juno_testnet-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/wormhole-stub/edge/neutron_testnet_pion_1-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/wormhole-stub/edge/osmosis_testnet_4-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 22 - 0
target_chains/cosmwasm/wormhole-stub/edge/osmosis_testnet_5-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 10 - 0
target_chains/cosmwasm/wormhole-stub/edge/sei_atlantic_testnet_2-2.14.9.json

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

+ 40 - 0
target_chains/cosmwasm/wormhole-stub/stable/injective_testnet-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 40 - 0
target_chains/cosmwasm/wormhole-stub/stable/juno_testnet-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 40 - 0
target_chains/cosmwasm/wormhole-stub/stable/neutron_testnet_pion_1-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 40 - 0
target_chains/cosmwasm/wormhole-stub/stable/osmosis_testnet_4-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 40 - 0
target_chains/cosmwasm/wormhole-stub/stable/osmosis_testnet_5-2.14.9.json

@@ -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"
+    }
+  }
+}

+ 6 - 0
target_chains/cosmwasm/wormhole-stub/stable/sei_testnet_atlantic_2-2.14.9.json

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

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/injective-2.14.9.json

@@ -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"
-    }
-  }
-}

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/juno-2.14.9.json

@@ -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"
-    }
-  }
-}

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/neutron_pion_1-2.14.9.json

@@ -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"
-    }
-  }
-}

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/osmosis_4-2.14.9.json

@@ -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"
-    }
-  }
-}

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/osmosis_5-2.14.9.json

@@ -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"
-    }
-  }
-}

+ 0 - 40
target_chains/cosmwasm/wormhole-stub/testnet/sei_atlantic_2-2.14.9.json

@@ -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"
-    }
-  }
-}