Quellcode durchsuchen

Optimism mainnet deploy (#1869)

* Optimism mainnet deploy

* node: added OP token to manual_tokens

* Add to readiness

* File should not have been committed

* Remove readiness since it goes with watcher

* Allow optimism watcher in mainnet

* Add to devnet config

Co-authored-by: Christine Eun <ceun@jumptrading.com>
bruce-riley vor 3 Jahren
Ursprung
Commit
074c98a952

+ 2 - 0
devnet/node.yaml

@@ -88,6 +88,8 @@ spec:
             - ws://eth-devnet:8545
             - --arbitrumRPC
             - ws://eth-devnet:8545
+            - --optimismRPC
+            - ws://eth-devnet:8545            
             - --neonRPC
             - ws://eth-devnet:8545
             # - --wormchainWS

+ 8 - 0
ethereum/.env.optimism.mainnet

@@ -7,3 +7,11 @@ INIT_CHAIN_ID=24
 INIT_GOV_CHAIN_ID=0x1
 INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
 INIT_EVM_CHAIN_ID=10
+
+# Bridge Migrations
+BRIDGE_INIT_CHAIN_ID=24
+BRIDGE_INIT_GOV_CHAIN_ID=0x1
+BRIDGE_INIT_GOV_CONTRACT=0x0000000000000000000000000000000000000000000000000000000000000004
+# There is no WETH.
+BRIDGE_INIT_WETH=0x0000000000000000000000000000000000000000
+BRIDGE_INIT_FINALITY=1

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

@@ -107,6 +107,7 @@ func runListNodes(cmd *cobra.Command, args []string) {
 		{"Pythnet", vaa.ChainIDPythNet},
 		{"Moonbeam", vaa.ChainIDMoonbeam},
 		{"Arbitrum", vaa.ChainIDArbitrum},
+		{"Optimism", vaa.ChainIDOptimism},
 		{"Xpla", vaa.ChainIDXpla},
 		{"Injective", vaa.ChainIDInjective},
 		{"Neon", vaa.ChainIDNeon},

+ 16 - 21
node/cmd/guardiand/node.go

@@ -573,6 +573,10 @@ func runNode(cmd *cobra.Command, args []string) {
 		}
 	}
 
+	if (*optimismRPC == "") != (*optimismContract == "") {
+		logger.Fatal("Both --optimismContract and --optimismRPC must be set together or both unset")
+	}
+
 	if *testnetMode {
 		if *neonRPC == "" {
 			logger.Fatal("Please specify --neonRPC")
@@ -589,9 +593,6 @@ func runNode(cmd *cobra.Command, args []string) {
 		if *injectiveContract == "" {
 			logger.Fatal("Please specify --injectiveContract")
 		}
-		if (*optimismRPC == "") != (*optimismContract == "") {
-			logger.Fatal("Both --optimismContract and --optimismRPC must be set together or both unset")
-		}
 	} else {
 		if *neonRPC != "" && !*unsafeDevMode {
 			logger.Fatal("Please do not specify --neonRPC")
@@ -608,12 +609,6 @@ func runNode(cmd *cobra.Command, args []string) {
 		if *injectiveContract != "" && !*unsafeDevMode {
 			logger.Fatal("Please do not specify --injectiveContract")
 		}
-		if *optimismRPC != "" && !*unsafeDevMode {
-			logger.Fatal("Please do not specify --optimismRPC")
-		}
-		if *optimismContract != "" && !*unsafeDevMode {
-			logger.Fatal("Please do not specify --optimismContract")
-		}
 	}
 	if *nodeName == "" {
 		logger.Fatal("Please specify --nodeName")
@@ -1049,6 +1044,18 @@ func runNode(cmd *cobra.Command, args []string) {
 				return err
 			}
 		}
+		if shouldStart(optimismRPC) {
+			if ethWatcher == nil {
+				log.Fatalf("if optimism is enabled then ethereum must also be enabled.")
+			}
+			logger.Info("Starting Optimism watcher")
+			readiness.RegisterComponent(common.ReadinessOptimismSyncing)
+			chainObsvReqC[vaa.ChainIDOptimism] = make(chan *gossipv1.ObservationRequest, observationRequestBufferSize)
+			if err := supervisor.Run(ctx, "optimismwatch",
+				evm.NewEthWatcher(*optimismRPC, optimismContractAddr, "optimism", common.ReadinessOptimismSyncing, vaa.ChainIDOptimism, lockC, nil, 1, chainObsvReqC[vaa.ChainIDOptimism], *unsafeDevMode, ethWatcher).Run); err != nil {
+				return err
+			}
+		}
 
 		if shouldStart(terraWS) {
 			logger.Info("Starting Terra watcher")
@@ -1157,18 +1164,6 @@ func runNode(cmd *cobra.Command, args []string) {
 					return err
 				}
 			}
-			if shouldStart(optimismRPC) {
-				if ethWatcher == nil {
-					log.Fatalf("if optimism is enabled then ethereum must also be enabled.")
-				}
-				logger.Info("Starting Optimism watcher")
-				readiness.RegisterComponent(common.ReadinessOptimismSyncing)
-				chainObsvReqC[vaa.ChainIDOptimism] = make(chan *gossipv1.ObservationRequest, observationRequestBufferSize)
-				if err := supervisor.Run(ctx, "optimismwatch",
-					evm.NewEthWatcher(*optimismRPC, optimismContractAddr, "optimism", common.ReadinessOptimismSyncing, vaa.ChainIDOptimism, lockC, nil, 1, chainObsvReqC[vaa.ChainIDOptimism], *unsafeDevMode, ethWatcher).Run); err != nil {
-					return err
-				}
-			}
 			if shouldStart(injectiveWS) {
 				logger.Info("Starting Injective watcher")
 				readiness.RegisterComponent(common.ReadinessInjectiveSyncing)

+ 2 - 0
node/hack/repair_eth/repair_eth.go

@@ -43,6 +43,7 @@ var etherscanAPIMap = map[vaa.ChainID]string{
 	vaa.ChainIDCelo:     "https://celoscan.xyz/api",
 	vaa.ChainIDMoonbeam: "https://api-moonbeam.moonscan.io",
 	vaa.ChainIDArbitrum: "https://api.arbiscan.io",
+	vaa.ChainIDOptimism: "https://api-optimistic.etherscan.io",
 }
 
 var coreContractMap = map[vaa.ChainID]string{
@@ -59,6 +60,7 @@ var coreContractMap = map[vaa.ChainID]string{
 	vaa.ChainIDCelo:      strings.ToLower("0xa321448d90d4e5b0A732867c18eA198e75CAC48E"),
 	vaa.ChainIDMoonbeam:  strings.ToLower("0xC8e2b0cD52Cf01b0Ce87d389Daa3d414d4cE29f3"),
 	vaa.ChainIDArbitrum:  strings.ToLower("0xa5f208e072434bC67592E4C49C1B991BA79BCA46"),
+	vaa.ChainIDOptimism:  strings.ToLower("0xEe91C335eab126dF5fDB3797EA9d6aD93aeC9722"),
 }
 
 var (

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

@@ -28,6 +28,7 @@ func chainList() []chainConfigEntry {
 		chainConfigEntry{emitterChainID: vaa.ChainIDTerra2, dailyLimit: 500_000, bigTransactionSize: 50_000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDMoonbeam, dailyLimit: 5_000_000, bigTransactionSize: 500_000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDArbitrum, dailyLimit: 200_000, bigTransactionSize: 20_000},
+		chainConfigEntry{emitterChainID: vaa.ChainIDOptimism, dailyLimit: 200_000, bigTransactionSize: 20_000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDAptos, dailyLimit: 5_000_000, bigTransactionSize: 500_000},
 		chainConfigEntry{emitterChainID: vaa.ChainIDXpla, dailyLimit: 200_000, bigTransactionSize: 20_000},
 	}

+ 1 - 1
node/pkg/governor/mainnet_tokens_test.go

@@ -14,7 +14,7 @@ func TestTokenListSize(t *testing.T) {
 
 	/* Assuming that governed tokens will need to be updated every time
 	   we regenerate it */
-	assert.Equal(t, 132, len(tokenConfigEntries))
+	assert.Equal(t, 133, len(tokenConfigEntries))
 }
 
 func TestTokenListAddressSize(t *testing.T) {

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

@@ -15,5 +15,6 @@ func manualTokenList() []tokenConfigEntry {
 		tokenConfigEntry{chain: 13, addr: "0000000000000000000000005096db80b21ef45230c9e423c373f1fc9c0198dd", symbol: "WEMIX", coinGeckoId: "wemix-token", decimals: 8, price: 1.74},
 		tokenConfigEntry{chain: 13, addr: "0000000000000000000000005c74070fdea071359b86082bd9f9b3deaafbe32b", symbol: "KDAI", coinGeckoId: "dai", decimals: 8, price: 1.00},
 		tokenConfigEntry{chain: 15, addr: "0000000000000000000000000000000000000000000000000000000000000000", symbol: "NEAR", coinGeckoId: "near", decimals: 8, price: 3.85},
+		tokenConfigEntry{chain: 24, addr: "0000000000000000000000004200000000000000000000000000000000000042", symbol: "OP", coinGeckoId: "optimism", decimals: 8, price: 1.31},
 	}
 }

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

@@ -202,8 +202,8 @@ const MAINNET = {
   },
   optimism: {
     core: "0xEe91C335eab126dF5fDB3797EA9d6aD93aeC9722",
-    token_bridge: undefined,
-    nft_bridge: undefined,
+    token_bridge: "0x1D68124e65faFC907325e3EDbF8c4d84499DAa8b",
+    nft_bridge: "0xfE8cD454b4A1CA468B57D79c0cc77Ef5B6f64585",
   },
   gnosis: {
     core: "0xa321448d90d4e5b0A732867c18eA198e75CAC48E",

+ 2 - 0
sdk/mainnet_consts.go

@@ -115,6 +115,7 @@ var knownTokenbridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDNear:      "148410499d3fcda4dcfd68a1ebfcdddda16ab28326448d4aae4d2f0465cdfcb7",
 	vaa.ChainIDMoonbeam:  "000000000000000000000000B1731c586ca89a23809861c6103F0b96B3F57D92",
 	vaa.ChainIDArbitrum:  "0000000000000000000000000b2402144Bb366A632D14B83F244D2e0e21bD39c",
+	vaa.ChainIDOptimism:  "0000000000000000000000001D68124e65faFC907325e3EDbF8c4d84499DAa8b",
 	vaa.ChainIDXpla:      "8f9cf727175353b17a5f574270e370776123d90fd74956ae4277962b4fdee24c",
 }
 
@@ -135,6 +136,7 @@ var knownNFTBridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDCelo:      "000000000000000000000000A6A377d75ca5c9052c9a77ED1e865Cc25Bd97bf3",
 	vaa.ChainIDMoonbeam:  "000000000000000000000000453cfBe096C0f8D763E8C5F24B441097d577bdE2",
 	vaa.ChainIDArbitrum:  "0000000000000000000000003dD14D553cFD986EAC8e3bddF629d82073e188c8",
+	vaa.ChainIDOptimism:  "000000000000000000000000fE8cD454b4A1CA468B57D79c0cc77Ef5B6f64585",
 }
 
 func GetEmitterAddressForChain(chainID vaa.ChainID, emitterType EmitterType) (vaa.Address, error) {

+ 2 - 0
sdk/testnet_consts.go

@@ -27,6 +27,7 @@ var knownTestnetTokenbridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDNear:      "c2c0b6ecbbe9ecf91b2b7999f0264018ba68126c2e83bf413f59f712f3a1df55",
 	vaa.ChainIDMoonbeam:  "000000000000000000000000bc976d4b9d57e57c3ca52e1fd136c45ff7955a96",
 	vaa.ChainIDArbitrum:  "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
+	vaa.ChainIDOptimism:  "000000000000000000000000C7A204bDBFe983FCD8d8E61D02b475D4073fF97e",
 	vaa.ChainIDNeon:      "000000000000000000000000c7a204bdbfe983fcd8d8e61d02b475d4073ff97e",
 	vaa.ChainIDXpla:      "b66da121bd3621c8d2604c08c82965640fe682d606af26a302ee09094f5e62cf",
 }
@@ -48,5 +49,6 @@ var knownTestnetNFTBridgeEmitters = map[vaa.ChainID]string{
 	vaa.ChainIDCelo:      "000000000000000000000000acd8190f647a31e56a656748bc30f69259f245db",
 	vaa.ChainIDMoonbeam:  "00000000000000000000000098a0f4b96972b32fcb3bd03caeb66a44a6ab9edb",
 	vaa.ChainIDArbitrum:  "000000000000000000000000Ee3dB83916Ccdc3593b734F7F2d16D630F39F1D0",
+	vaa.ChainIDOptimism:  "00000000000000000000000023908A62110e21C04F3A4e011d24F901F911744A",
 	vaa.ChainIDNeon:      "00000000000000000000000023908a62110e21c04f3a4e011d24f901f911744a",
 }