Bladeren bron

Near mainnet deploy (#1467)

* Initial commit

* Updated mainnet_tokens with Near token

* Near CLI changes

* More CLI tweaks

* Revert ethers in cli

* Fix lint error

* Testnet emitter is wrong

Co-authored-by: Christine Eun <ceun@jumptrading.com>
bruce-riley 3 jaren geleden
bovenliggende
commit
4a42c29c0f

+ 17 - 8
clients/js/near.ts

@@ -13,14 +13,15 @@ export async function execute_near(
   let n = NETWORKS[network]["near"];
   let contracts = CONTRACTS[network]["near"];
 
-  let account: string;
+  let target_contract = "";
+  let numSubmits = 1
 
   switch (payload.module) {
     case "Core":
       if (contracts.core === undefined) {
         throw new Error("Core bridge not supported yet for near");
       }
-      account = "wormhole." + n.baseAccount;
+      target_contract = contracts.core;
       switch (payload.type) {
         case "GuardianSetUpgrade":
           console.log("Submitting new guardian set");
@@ -36,7 +37,8 @@ export async function execute_near(
       if (contracts.nft_bridge === undefined) {
         throw new Error("NFT bridge not supported yet for near");
       }
-      account = "nft." + n.baseAccount;
+      numSubmits = 2
+      target_contract = contracts.nft_bridge;
       switch (payload.type) {
         case "ContractUpgrade":
           console.log("Upgrading contract");
@@ -52,7 +54,11 @@ export async function execute_near(
       }
       break;
     case "TokenBridge":
-      account = "token." + n.baseAccount;
+      if (contracts.token_bridge === undefined) {
+        throw new Error("Token bridge not supported yet for near");
+      }
+      numSubmits = 2
+      target_contract = contracts.token_bridge;
       switch (payload.type) {
         case "ContractUpgrade":
           console.log("Upgrading contract");
@@ -77,12 +83,10 @@ export async function execute_near(
       impossible(payload);
   }
 
-  let target_contract = account;
-
   let key = nearAPI.utils.KeyPair.fromString(n.key);
 
   let keyStore = new nearAPI.keyStores.InMemoryKeyStore();
-  keyStore.setKey(n.networkId, account, key);
+  keyStore.setKey(n.networkId, n.deployerAccount, key);
 
   let near = await nearAPI.connect({
     deps: {
@@ -92,7 +96,7 @@ export async function execute_near(
     nodeUrl: n.rpc,
   });
 
-  let nearAccount = new nearAPI.Account(near.connection, account);
+  let nearAccount = new nearAPI.Account(near.connection, n.deployerAccount);
 
   console.log("submitting vaa the first time");
   let result1 = await nearAccount.functionCall({
@@ -105,6 +109,11 @@ export async function execute_near(
     gas: new BN("300000000000000"),
   });
 
+  if (numSubmits <= 1) {
+    console.log("Hash: " + result1.transaction.hash);
+    return
+  }
+
   // You have to feed a vaa twice into the contract (two submits),
   // The first time, it checks if it has been seen at all.
   // The second time, it executes.

+ 6 - 6
clients/js/networks.ts

@@ -79,10 +79,10 @@ const MAINNET = {
     key: get_env_var("ETH_KEY"),
   },
   near: {
-    rpc: undefined,
-    key: undefined,
-    networkId: "",
-    baseAccount: "",
+    rpc: "https://rpc.mainnet.near.org",
+    key: get_env_var("NEAR_KEY"),
+    networkId: "mainnet",
+    deployerAccount: "85957f38de1768d6db9eab29bee9dd2a01462aff9c8d83daefb9bcd2506c32d2",
   },
   injective: {
     rpc: undefined,
@@ -205,7 +205,7 @@ const TESTNET = {
     rpc: "https://rpc.testnet.near.org",
     key: get_env_var("NEAR_KEY_TESTNET"),
     networkId: "testnet",
-    baseAccount: "wormhole.testnet",
+    deployerAccount: undefined,
   },
   injective: {
     rpc: undefined,
@@ -328,7 +328,7 @@ const DEVNET = {
     rpc: undefined,
     key: undefined,
     networkId: "sandbox",
-    baseAccount: "test.near",
+    deployerAccount: "test.near",
   },
   injective: {
     rpc: undefined,

+ 1 - 0
node/cmd/guardiand/adminnodes.go

@@ -110,6 +110,7 @@ func runListNodes(cmd *cobra.Command, args []string) {
 		{"Acala", vaa.ChainIDAcala},
 		{"Klaytn", vaa.ChainIDKlaytn},
 		{"Celo", vaa.ChainIDCelo},
+		{"Near", vaa.ChainIDNear},
 		{"Terra2", vaa.ChainIDTerra2},
 	}
 

+ 5 - 13
node/cmd/guardiand/node.go

@@ -532,14 +532,12 @@ func runNode(cmd *cobra.Command, args []string) {
 	if *celoContract == "" && !*unsafeDevMode {
 		logger.Fatal("Please specify --celoContract")
 	}
-	if *testnetMode || *unsafeDevMode {
-		if *nearRPC != "" {
-			if *nearContract == "" {
-				logger.Fatal("If --nearRPC is specified, then --nearContract must be specified")
-			}
-		} else if *nearContract != "" {
-			logger.Fatal("If --nearContract is specified, then --nearRPC must be specified")
+	if *nearRPC != "" {
+		if *nearContract == "" {
+			logger.Fatal("If --nearRPC is specified, then --nearContract must be specified")
 		}
+	} else if *nearContract != "" {
+		logger.Fatal("If --nearContract is specified, then --nearRPC must be specified")
 	}
 	if *testnetMode {
 		if *ethRopstenRPC == "" {
@@ -597,12 +595,6 @@ func runNode(cmd *cobra.Command, args []string) {
 		if *injectiveContract != "" && !*unsafeDevMode {
 			logger.Fatal("Please do not specify --injectiveContract")
 		}
-		if *nearRPC != "" && !*unsafeDevMode {
-			logger.Fatal("Please do not specify --nearRPC")
-		}
-		if *nearContract != "" && !*unsafeDevMode {
-			logger.Fatal("Please do not specify --nearContract")
-		}
 	}
 	if *nodeName == "" {
 		logger.Fatal("Please specify --nodeName")

+ 1 - 0
node/pkg/common/mainnet_consts.go

@@ -113,6 +113,7 @@ var knownTokenbridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDAcala:     "000000000000000000000000ae9d7fe007b3327AA64A32824Aaac52C42a6E624",
 	vaa.ChainIDKlaytn:    "0000000000000000000000005b08ac39EAED75c0439FC750d9FE7E1F9dD0193F",
 	vaa.ChainIDCelo:      "000000000000000000000000796Dff6D74F3E27060B71255Fe517BFb23C93eed",
+	vaa.ChainIDNear:      "148410499d3fcda4dcfd68a1ebfcdddda16ab28326448d4aae4d2f0465cdfcb7",
 }
 
 // KnownNFTBridgeEmitters is a list of well-known mainnet emitters for the NFT bridge.

+ 1 - 0
node/pkg/common/testnet_consts.go

@@ -23,6 +23,7 @@ var knownTestnetTokenbridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDAcala:           "000000000000000000000000eba00cbe08992edd08ed7793e07ad6063c807004",
 	vaa.ChainIDKlaytn:          "000000000000000000000000c7a13be098720840dea132d860fdfa030884b09a",
 	vaa.ChainIDCelo:            "00000000000000000000000005ca6037ec51f8b712ed2e6fa72219feae74e153",
+	vaa.ChainIDNear:            "c2c0b6ecbbe9ecf91b2b7999f0264018ba68126c2e83bf413f59f712f3a1df55",
 	vaa.ChainIDMoonbeam:        "000000000000000000000000bc976d4b9d57e57c3ca52e1fd136c45ff7955a96",
 	vaa.ChainIDNeon:            "000000000000000000000000d11de1f930ea1f7dd0290fe3a2e35b9c91aefb37",
 	vaa.ChainIDEthereumRopsten: "000000000000000000000000F174F9A837536C449321df1Ca093Bb96948D5386",

+ 1 - 0
node/pkg/governor/mainnet_chains.go

@@ -24,6 +24,7 @@ func chainList() []chainConfigEntry {
 		chainConfigEntry{emitterChainID: vaa.ChainIDAcala, dailyLimit: 500000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDKlaytn, dailyLimit: 500000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDCelo, dailyLimit: 500000},
+		chainConfigEntry{emitterChainID: vaa.ChainIDNear, dailyLimit: 200000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDTerra2, dailyLimit: 500000},
 	}
 }

+ 3 - 0
node/pkg/governor/mainnet_tokens.go

@@ -72,6 +72,7 @@ func tokenList() []tokenConfigEntry {
 		tokenConfigEntry{chain: 2, addr: "000000000000000000000000f1f955016ecbcd7321c7266bccfb96c68ea5e49b", symbol: "RLY", coinGeckoId: "rally-2", decimals: 8, price: 0.0417475},                   // Addr: 0xf1f955016ecbcd7321c7266bccfb96c68ea5e49b, Notional: 4774851
 		tokenConfigEntry{chain: 2, addr: "000000000000000000000000f8c3527cc04340b208c854e985240c02f7b7793f", symbol: "FRONT", coinGeckoId: "frontier-token", decimals: 8, price: 0.275458},           // Addr: 0xf8c3527cc04340b208c854e985240c02f7b7793f, Notional: 446100
 		tokenConfigEntry{chain: 2, addr: "000000000000000000000000fd09911130e6930bf87f2b0554c44f400bd80d3e", symbol: "ETHIX", coinGeckoId: "ethichub", decimals: 8, price: 0.255996},                 // Addr: 0xfd09911130e6930bf87f2b0554c44f400bd80d3e, Notional: 1633516
+		tokenConfigEntry{chain: 2, addr: "00000000000000000000000085f17cf997934a597031b2e18a9ab6ebd4b9f6a4", symbol: "NEAR", coinGeckoId: "near", decimals: 8, price: 4.330},                         // *** manually added. Near on ethereum
 		tokenConfigEntry{chain: 3, addr: "0000000000000000000000008f5cd460d57ac54e111646fc569179144c7f0c28", symbol: "PLY", coinGeckoId: "playnity", decimals: 6, price: 0.00955359},                 // Addr: terra13awdgcx40tz5uygkgm79dytez3x87rpg4uhnvu, Notional: 1073506
 		tokenConfigEntry{chain: 3, addr: "0000000000000000000000002c71557d2edfedd8330e52be500058a014d329e7", symbol: "BTL", coinGeckoId: "bitlocus", decimals: 6, price: 0.00214964},                 // Addr: terra193c42lfwmlkasvcw22l9qqzc5q2dx208tkd7wl, Notional: 1058903
 		tokenConfigEntry{chain: 3, addr: "000000000000000000000000b8ae5604d7858eaa46197b19494b595b586e466c", symbol: "aUST", coinGeckoId: "anchorust", decimals: 6, price: 0.04135693},               // Addr: terra1hzh9vpxhsk8253se0vv5jj6etdvxu3nv8z07zu, Notional: 156051
@@ -107,6 +108,7 @@ func tokenList() []tokenConfigEntry {
 		tokenConfigEntry{chain: 9, addr: "000000000000000000000000c9bdeed33cd01541e1eed10f90519d2c06fe3feb", symbol: "WETH", coinGeckoId: "weth", decimals: 8, price: 1881.9},                        // Addr: 0xc9bdeed33cd01541e1eed10f90519d2c06fe3feb, Notional: 4978
 		tokenConfigEntry{chain: 9, addr: "0000000000000000000000008bec47865ade3b172a928df8f990bc7f2a3b9f79", symbol: "AURORA", coinGeckoId: "aurora", decimals: 8, price: 1.82},                      // *** manually added
 		tokenConfigEntry{chain: 9, addr: "000000000000000000000000e4b9e004389d91e4134a28f19bd833cba1d994b6", symbol: "FRAX", coinGeckoId: "frax", decimals: 8, price: 0.999322},                      // *** manually added
+		tokenConfigEntry{chain: 9, addr: "000000000000000000000000c42c30ac6cc15fac9bd938618bcaa1a1fae8501d", symbol: "NEAR", coinGeckoId: "near", decimals: 8, price: 4.330},                         // *** manually added. Near on aurora. 24 decimals
 		tokenConfigEntry{chain: 10, addr: "00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75", symbol: "USDC", coinGeckoId: "usd-coin", decimals: 6, price: 0.999041},                 // Addr: 0x04068da6c83afcfa0e13ba15a6696662335d5b75, Notional: 778356
 		tokenConfigEntry{chain: 10, addr: "00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83", symbol: "WFTM", coinGeckoId: "wrapped-fantom", decimals: 8, price: 0.370202},           // Addr: 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83, Notional: 126455
 		tokenConfigEntry{chain: 10, addr: "000000000000000000000000260b3e40c714ce8196465ec824cd8bb915081812", symbol: "IronICE", coinGeckoId: "iron-bsc", decimals: 8, price: 0.571011},              // Addr: 0x260b3e40c714ce8196465ec824cd8bb915081812, Notional: 1303
@@ -128,6 +130,7 @@ func tokenList() []tokenConfigEntry {
 		tokenConfigEntry{chain: 14, addr: "000000000000000000000000471ece3750da237f93b8e339c536989b8978a438", symbol: "CELO", coinGeckoId: "celo", decimals: 8, price: 1.059},                        // Addr: 0x471ece3750da237f93b8e339c536989b8978a438, Notional: 2006
 		tokenConfigEntry{chain: 14, addr: "000000000000000000000000765de816845861e75a25fca122bb6898b8b1282a", symbol: "cUSD", coinGeckoId: "celo-dollar", decimals: 8, price: 0.993661},              // Addr: 0x765de816845861e75a25fca122bb6898b8b1282a, Notional: 1
 		tokenConfigEntry{chain: 14, addr: "000000000000000000000000d8763cba276a3738e6de85b4b3bf5fded6d6ca73", symbol: "cEUR", coinGeckoId: "celo-euro", decimals: 8, price: 1.009},                   // Addr: 0xd8763cba276a3738e6de85b4b3bf5fded6d6ca73, Notional: 101465
+		tokenConfigEntry{chain: 15, addr: "0000000000000000000000000000000000000000000000000000000000000000", symbol: "NEAR", coinGeckoId: "near", decimals: 8, price: 4.330},                        // *** manually added
 		tokenConfigEntry{chain: 18, addr: "01fa6c6fbc36d8c245b0a852a43eb5d644e8b4c477b27bfab9537c10945939da", symbol: "LUNA", coinGeckoId: "terra-luna-2", decimals: 6, price: 1.99},                 // Addr: uluna, Notional: 1182
 	}
 }

+ 4 - 4
sdk/js/src/utils/consts.ts

@@ -152,8 +152,8 @@ const MAINNET = {
     nft_bridge: "0xA6A377d75ca5c9052c9a77ED1e865Cc25Bd97bf3",
   },
   near: {
-    core: undefined,
-    token_bridge: undefined,
+    core: "contract.wormhole_crypto.near",
+    token_bridge: "contract.portalbridge.near",
     nft_bridge: undefined,
   },
   injective: {
@@ -301,8 +301,8 @@ const TESTNET = {
     nft_bridge: "0xaCD8190F647a31E56A656748bC30F69259f245Db",
   },
   near: {
-    core: undefined,
-    token_bridge: undefined,
+    core: "wormhole.wormhole.testnet",
+    token_bridge: "token.wormhole.testnet",
     nft_bridge: undefined,
   },
   injective: {