Ver Fonte

Add deployment files of optimism goerli + fix bugs (#364)

Ali Behjati há 3 anos atrás
pai
commit
a9a1fb7b5a

+ 0 - 1
ethereum/.env.cluster.mainnet

@@ -1,4 +1,3 @@
-WORMHOLE_BRIDGE_ADDRESS=0xa5f208e072434bC67592E4C49C1B991BA79BCA46
 SOLANA_CHAIN_ID=0x1
 SOLANA_EMITTER=0x6bb14509a612f01fbbc4cffeebd4bbfb492a86df717ebe92eb6df432a3f00a25
 PYTHNET_CHAIN_ID=0x1a

+ 0 - 1
ethereum/.env.cluster.testnet

@@ -1,4 +1,3 @@
-WORMHOLE_BRIDGE_ADDRESS=0xBd07292de7b505a4E803CEe286184f7Acf908F5e
 SOLANA_CHAIN_ID=0x1
 SOLANA_EMITTER=0xf346195ac02f37d60d4db8ffa6ef74cb1be3550047543a4a9ee9acf4d78697b0
 PYTHNET_CHAIN_ID=0x1a

+ 7 - 0
ethereum/.env.prod.optimism_goerli

@@ -0,0 +1,7 @@
+# Mumbai is Polygon testnet network
+
+MIGRATIONS_DIR=./migrations/prod
+MIGRATIONS_NETWORK=optimism_goerli
+WORMHOLE_CHAIN_NAME=optimism
+CLUSTER=testnet
+VALID_TIME_PERIOD_SECONDS=60

+ 0 - 1
ethereum/.env.template

@@ -13,7 +13,6 @@ WORMHOLE_CHAIN_NAME= # ethereum, defined in https://github.com/wormhole-foundati
 CLUSTER= #mainnet/testnet The configs below are read from the cluster file
 
 # Pyth Migrations           # Example Format. If deployed on mainnet/testnet it is available in env.cluster.{cluster}
-WORMHOLE_BRIDGE_ADDRESS     # 0x68605AD7b15c732a30b1BbC62BE8F2A509D74b4D (only if wormhole exists)
 SOLANA_CHAIN_ID=  # 0x1
 SOLANA_EMITTER=   # 0xf346195ac02f37d60d4db8ffa6ef74cb1be3550047543a4a9ee9acf4d78697b0
 PYTHNET_CHAIN_ID= # 0x1a

+ 237 - 0
ethereum/.openzeppelin/unknown-420.json

@@ -0,0 +1,237 @@
+{
+  "manifestVersion": "3.2",
+  "proxies": [
+    {
+      "address": "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C",
+      "txHash": "0x89c663594a3d7468ab799b75b6424586c6bc150720584a952d8610165ba6c302",
+      "kind": "uups"
+    }
+  ],
+  "impls": {
+    "4668cc132635455aee5bae29a5a10e6705f120d1a86872391fd048b22c3f4c1e": {
+      "address": "0xB2eeb93D778c364E7E2274D6299e2aa0c2Bea090",
+      "txHash": "0x7231242ffd6a4bc25e06cfc3656353f80e75d4a0af21401856df83c731493def",
+      "layout": {
+        "storage": [
+          {
+            "contract": "Initializable",
+            "label": "_initialized",
+            "type": "t_bool",
+            "src": "../@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:39"
+          },
+          {
+            "contract": "Initializable",
+            "label": "_initializing",
+            "type": "t_bool",
+            "src": "../@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:44"
+          },
+          {
+            "contract": "ContextUpgradeable",
+            "label": "__gap",
+            "type": "t_array(t_uint256)50_storage",
+            "src": "../@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36"
+          },
+          {
+            "contract": "OwnableUpgradeable",
+            "label": "_owner",
+            "type": "t_address",
+            "src": "../@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22"
+          },
+          {
+            "contract": "OwnableUpgradeable",
+            "label": "__gap",
+            "type": "t_array(t_uint256)49_storage",
+            "src": "../@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:87"
+          },
+          {
+            "contract": "ERC1967UpgradeUpgradeable",
+            "label": "__gap",
+            "type": "t_array(t_uint256)50_storage",
+            "src": "../@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:211"
+          },
+          {
+            "contract": "UUPSUpgradeable",
+            "label": "__gap",
+            "type": "t_array(t_uint256)50_storage",
+            "src": "../@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:107"
+          },
+          {
+            "contract": "PythState",
+            "label": "_state",
+            "type": "t_struct(State)5213_storage",
+            "src": "../project:/contracts/pyth/PythState.sol:50"
+          }
+        ],
+        "types": {
+          "t_struct(State)5213_storage": {
+            "label": "struct PythStorage.State",
+            "members": [
+              {
+                "label": "wormhole",
+                "type": "t_address"
+              },
+              {
+                "label": "_deprecatedPyth2WormholeChainId",
+                "type": "t_uint16"
+              },
+              {
+                "label": "_deprecatedPyth2WormholeEmitter",
+                "type": "t_bytes32"
+              },
+              {
+                "label": "_deprecatedLatestPriceInfo",
+                "type": "t_mapping(t_bytes32,t_struct(PriceInfo)5039_storage)"
+              },
+              {
+                "label": "validDataSources",
+                "type": "t_array(t_struct(DataSource)5044_storage)dyn_storage"
+              },
+              {
+                "label": "isValidDataSource",
+                "type": "t_mapping(t_bytes32,t_bool)"
+              },
+              {
+                "label": "singleUpdateFeeInWei",
+                "type": "t_uint256"
+              },
+              {
+                "label": "validTimePeriodSeconds",
+                "type": "t_uint256"
+              },
+              {
+                "label": "governanceDataSource",
+                "type": "t_struct(DataSource)5044_storage"
+              },
+              {
+                "label": "lastExecutedGovernanceSequence",
+                "type": "t_uint64"
+              },
+              {
+                "label": "latestPriceInfo",
+                "type": "t_mapping(t_bytes32,t_struct(PriceInfo)5039_storage)"
+              },
+              {
+                "label": "governanceDataSourceIndex",
+                "type": "t_uint32"
+              }
+            ]
+          },
+          "t_address": {
+            "label": "address"
+          },
+          "t_uint16": {
+            "label": "uint16"
+          },
+          "t_bytes32": {
+            "label": "bytes32"
+          },
+          "t_mapping(t_bytes32,t_struct(PriceInfo)5039_storage)": {
+            "label": "mapping(bytes32 => struct PythInternalStructs.PriceInfo)"
+          },
+          "t_struct(PriceInfo)5039_storage": {
+            "label": "struct PythInternalStructs.PriceInfo",
+            "members": [
+              {
+                "label": "attestationTime",
+                "type": "t_uint256"
+              },
+              {
+                "label": "arrivalTime",
+                "type": "t_uint256"
+              },
+              {
+                "label": "arrivalBlock",
+                "type": "t_uint256"
+              },
+              {
+                "label": "priceFeed",
+                "type": "t_struct(PriceFeed)2424_storage"
+              }
+            ]
+          },
+          "t_array(t_struct(DataSource)5044_storage)dyn_storage": {
+            "label": "struct PythInternalStructs.DataSource[]"
+          },
+          "t_struct(DataSource)5044_storage": {
+            "label": "struct PythInternalStructs.DataSource",
+            "members": [
+              {
+                "label": "chainId",
+                "type": "t_uint16"
+              },
+              {
+                "label": "emitterAddress",
+                "type": "t_bytes32"
+              }
+            ]
+          },
+          "t_mapping(t_bytes32,t_bool)": {
+            "label": "mapping(bytes32 => bool)"
+          },
+          "t_bool": {
+            "label": "bool"
+          },
+          "t_uint256": {
+            "label": "uint256"
+          },
+          "t_uint64": {
+            "label": "uint64"
+          },
+          "t_uint32": {
+            "label": "uint32"
+          },
+          "t_struct(PriceFeed)2424_storage": {
+            "label": "struct PythStructs.PriceFeed",
+            "members": [
+              {
+                "label": "id",
+                "type": "t_bytes32"
+              },
+              {
+                "label": "price",
+                "type": "t_struct(Price)2415_storage"
+              },
+              {
+                "label": "emaPrice",
+                "type": "t_struct(Price)2415_storage"
+              }
+            ]
+          },
+          "t_struct(Price)2415_storage": {
+            "label": "struct PythStructs.Price",
+            "members": [
+              {
+                "label": "price",
+                "type": "t_int64"
+              },
+              {
+                "label": "conf",
+                "type": "t_uint64"
+              },
+              {
+                "label": "expo",
+                "type": "t_int32"
+              },
+              {
+                "label": "publishTime",
+                "type": "t_uint256"
+              }
+            ]
+          },
+          "t_int64": {
+            "label": "int64"
+          },
+          "t_int32": {
+            "label": "int32"
+          },
+          "t_array(t_uint256)50_storage": {
+            "label": "uint256[50]"
+          },
+          "t_array(t_uint256)49_storage": {
+            "label": "uint256[49]"
+          }
+        }
+      }
+    }
+  }
+}

+ 1 - 1
ethereum/migrations/prod/10_pyth_make_interface_simpler.js

@@ -6,7 +6,7 @@ const governance = require("@pythnetwork/xc-governance-sdk");
 const PythUpgradable = artifacts.require("PythUpgradable");
 const wormholeChainName = process.env.WORMHOLE_CHAIN_NAME;
 
-const { deployProxyImpl } = require('@openzeppelin/truffle-upgrades/dist/utils');
+const { upgradeProxy } = require("@openzeppelin/truffle-upgrades");
 const { assert } = require('chai');
 
 /**

+ 0 - 1
ethereum/migrations/prod/12_pyth_set_fee_1_wei.js

@@ -1,4 +1,3 @@
-const { assert } = require("chai");
 const governance = require("@pythnetwork/xc-governance-sdk");
 const assertVaaPayloadEquals = require("../../scripts/assertVaaPayloadEquals");
 const { assert } = require("chai");

+ 12 - 2
ethereum/migrations/prod/2_deploy_pyth.js

@@ -3,18 +3,28 @@ loadEnv("../../");
 
 const PythUpgradable = artifacts.require("PythUpgradable");
 
-const wormholeBridgeAddress = process.env.WORMHOLE_BRIDGE_ADDRESS;
 const pyth2WormholeChainId = process.env.SOLANA_CHAIN_ID;
 const pyth2WormholeEmitter = process.env.SOLANA_EMITTER;
 
 const { deployProxy } = require("@openzeppelin/truffle-upgrades");
 const tdr = require('truffle-deploy-registry');
+const { CONTRACTS } = require('@certusone/wormhole-sdk');
+const { assert } = require("chai");
 
-console.log("Wormhole bridge address: " + wormholeBridgeAddress)
 console.log("pyth2WormholeEmitter: " + pyth2WormholeEmitter)
 console.log("pyth2WormholeChainId: " + pyth2WormholeChainId)
 
 module.exports = async function (deployer, network) {
+    const cluster = process.env.CLUSTER;
+    const chainName = process.env.WORMHOLE_CHAIN_NAME;
+
+    assert(cluster !== undefined && chainName !== undefined);
+
+    const wormholeBridgeAddress = CONTRACTS[cluster.toUpperCase()][chainName].core;
+    assert(wormholeBridgeAddress !== undefined);
+
+    console.log("Wormhole bridge address: " + wormholeBridgeAddress)
+
     // Deploy the proxy. This will return an instance of PythUpgradable,
     // with the address field corresponding to the fronting ERC1967Proxy.
     let proxyInstance = await deployProxy(PythUpgradable,

+ 0 - 4
ethereum/migrations/prod/3_pyth_multiple_emitters.js

@@ -1,10 +1,6 @@
 const loadEnv = require("../../scripts/loadEnv");
 loadEnv("../../");
 
-if (process.env.CLUSTER !== undefined) {
-  dotenv.config({ path: `../../.env.cluster.${process.env.CLUSTER}`});
-}
-
 const PythUpgradable = artifacts.require("PythUpgradable");
 
 const { upgradeProxy } = require("@openzeppelin/truffle-upgrades");

+ 0 - 4
ethereum/migrations/prod/4_pyth_add_events_and_update_fee.js

@@ -1,10 +1,6 @@
 const loadEnv = require("../../scripts/loadEnv");
 loadEnv("../../");
 
-if (process.env.CLUSTER !== undefined) {
-  dotenv.config({ path: `../../.env.cluster.${process.env.CLUSTER}`});
-}
-
 const PythUpgradable = artifacts.require("PythUpgradable");
 
 const { upgradeProxy } = require("@openzeppelin/truffle-upgrades");

+ 11 - 0
ethereum/networks/420.json

@@ -0,0 +1,11 @@
+[
+  {
+    "contractName": "Migrations",
+    "address": "0x1c6Cd107fB71768FBc46F8B6180Eec155C03eEb5"
+  },
+  {
+    "contractName": "PythUpgradable",
+    "address": "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C",
+    "transactionHash": "0x89c663594a3d7468ab799b75b6424586c6bc150720584a952d8610165ba6c302"
+  }
+]

Diff do ficheiro suprimidas por serem muito extensas
+ 985 - 249
ethereum/package-lock.json


+ 2 - 0
ethereum/package.json

@@ -28,6 +28,7 @@
   "author": "",
   "license": "ISC",
   "dependencies": {
+    "@certusone/wormhole-sdk": "^0.8.0",
     "@certusone/wormhole-sdk-wasm": "^0.0.1",
     "@openzeppelin/contracts": "^4.5.0",
     "@openzeppelin/contracts-upgradeable": "^4.5.2",
@@ -35,6 +36,7 @@
     "@pythnetwork/xc-governance-sdk": "file:../third_party/pyth/xc-governance-sdk-js",
     "dotenv": "^10.0.0",
     "elliptic": "^6.5.2",
+    "ethers": "^5.6.8",
     "ganache-cli": "^6.12.1",
     "jsonfile": "^4.0.0",
     "solc": "^0.8.4",

+ 9 - 0
ethereum/truffle-config.js

@@ -172,6 +172,15 @@ module.exports = {
       },
       network_id: 10,
     },
+    optimism_goerli: {
+      provider: () => {
+        return new HDWalletProvider(
+          process.env.MNEMONIC,
+          "https://opt-goerli.g.alchemy.com/v2/demo"
+        );
+      },
+      network_id: 420,
+    },
     fantom: {
       provider: () => {
         return new HDWalletProvider(

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff