From 8f7f22b425f12c5a6d98f018feaaef3d96ed6bda Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 16 May 2024 12:49:17 +0100 Subject: [PATCH 1/3] feat: reset almanac contract state --- cmd/fetchd/cmd/genasiupgrade.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 41744b2d..981e0a58 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -53,6 +53,9 @@ var networkInfos = map[string]NetworkConfig{ IbcTargetAddr: "fetch1rhrlzsx9z865dqen8t4v47r99dw6y4va4uph0x", // TODO(JS): amend this ReconciliationTargetAddr: &ReconciliationTargetAddr, // TODO(JS): amend this Contracts: &Contracts{ + Almanac: &Almanac{ + Addr: "fetch1479lwv5vy8skute5cycuz727e55spkhxut0valrcm38x9caa2x8q99ef0q", // mainnet STAGING contract, + }, TokenBridge: &TokenBridge{ Addr: "fetch1qxxlalvsdjd07p07y3rc5fu6ll8k4tmetpha8n", NewAdmin: "fetch15p3rl5aavw9rtu86tna5lgxfkz67zzr6ed4yhw", @@ -69,6 +72,11 @@ var networkInfos = map[string]NetworkConfig{ OldDenom: "atestfet", }, IbcTargetAddr: "fetch1rhrlzsx9z865dqen8t4v47r99dw6y4va4uph0x", // TODO(JS): amend this + Contracts: &Contracts{ + Almanac: &Almanac{ + Addr: "fetch1kewgfwxwtuxcnppr547wj6sd0e5fkckyp48dazsh89hll59epgpspmh0tn", // testnet DEVELOPMENT contract, + }, + }, }, } @@ -125,6 +133,11 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { ASIGenesisUpgradeReplaceBridgeAdmin(jsonData, networkConfig) } + // replace almanac contract state + if networkConfig.Contracts != nil && networkConfig.Contracts.Almanac != nil { + ASIGenesisUpgradeReplaceAlmanacState(jsonData, networkConfig) + } + // withdraw balances from IBC channels if err = ASIGenesisUpgradeWithdrawIBCChannelsBalances(jsonData, networkConfig); err != nil { return err @@ -257,6 +270,19 @@ func ASIGenesisUpgradeReplaceDenom(jsonData map[string]interface{}, networkInfo }) } +func ASIGenesisUpgradeReplaceAlmanacState(jsonData map[string]interface{}, networkInfo NetworkConfig) { + contracts := jsonData["wasm"].(map[string]interface{})["contracts"].([]interface{}) + for _, contract := range contracts { + if contract.(map[string]interface{})["contract_address"] == networkInfo.Contracts.Almanac.Addr { + almanacContract := contract.(map[string]interface{}) + // empty the almanac contract state + almanacContract["contract_state"] = []interface{}{} + return + } + } + panic("failed to find almanac contract using provided address") +} + func ASIGenesisUpgradeReplaceAddresses(jsonData map[string]interface{}, networkInfo NetworkConfig) { // account addresses replaceAddresses(AccAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength) @@ -513,9 +539,14 @@ type DenomInfo struct { type Contracts struct { TokenBridge *TokenBridge + Almanac *Almanac } type TokenBridge struct { Addr string NewAdmin string } + +type Almanac struct { + Addr string +} From 60e73eb2c58c0210b90c57a41169e6f0024d765d Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Thu, 16 May 2024 15:53:13 +0100 Subject: [PATCH 2/3] feat: replace AName contract --- cmd/fetchd/cmd/genasiupgrade.go | 60 +++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/cmd/fetchd/cmd/genasiupgrade.go b/cmd/fetchd/cmd/genasiupgrade.go index 981e0a58..5f85ba6e 100644 --- a/cmd/fetchd/cmd/genasiupgrade.go +++ b/cmd/fetchd/cmd/genasiupgrade.go @@ -54,7 +54,10 @@ var networkInfos = map[string]NetworkConfig{ ReconciliationTargetAddr: &ReconciliationTargetAddr, // TODO(JS): amend this Contracts: &Contracts{ Almanac: &Almanac{ - Addr: "fetch1479lwv5vy8skute5cycuz727e55spkhxut0valrcm38x9caa2x8q99ef0q", // mainnet STAGING contract, + Addr: "fetch1mezzhfj7qgveewzwzdk6lz5sae4dunpmmsjr9u7z0tpmdsae8zmquq3y0y", // mainnet STAGING contract, + }, + AName: &AName{ + Addr: "fetch1479lwv5vy8skute5cycuz727e55spkhxut0valrcm38x9caa2x8q99ef0q", // mainnet DEVELOPMENT contract, }, TokenBridge: &TokenBridge{ Addr: "fetch1qxxlalvsdjd07p07y3rc5fu6ll8k4tmetpha8n", @@ -74,8 +77,15 @@ var networkInfos = map[string]NetworkConfig{ IbcTargetAddr: "fetch1rhrlzsx9z865dqen8t4v47r99dw6y4va4uph0x", // TODO(JS): amend this Contracts: &Contracts{ Almanac: &Almanac{ + Addr: "fetch135h26ys2nwqealykzey532gamw4l4s07aewpwc0cyd8z6m92vyhsplf0vp", // testnet DEVELOPMENT contract, + }, + AName: &AName{ Addr: "fetch1kewgfwxwtuxcnppr547wj6sd0e5fkckyp48dazsh89hll59epgpspmh0tn", // testnet DEVELOPMENT contract, }, + TokenBridge: &TokenBridge{ + Addr: "fetch1kewgfwxwtuxcnppr547wj6sd0e5fkckyp48dazsh89hll59epgpspmh0tn", + NewAdmin: "fetch15p3rl5aavw9rtu86tna5lgxfkz67zzr6ed4yhw", + }, }, }, } @@ -138,6 +148,11 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { ASIGenesisUpgradeReplaceAlmanacState(jsonData, networkConfig) } + // replace aname contract state + if networkConfig.Contracts != nil && networkConfig.Contracts.AName != nil { + ASIGenesisUpgradeReplaceANameState(jsonData, networkConfig) + } + // withdraw balances from IBC channels if err = ASIGenesisUpgradeWithdrawIBCChannelsBalances(jsonData, networkConfig); err != nil { return err @@ -241,17 +256,12 @@ func ASIGenesisUpgradeReplaceChainID(genesisData *types.GenesisDoc, networkInfo } func ASIGenesisUpgradeReplaceBridgeAdmin(jsonData map[string]interface{}, networkInfo NetworkConfig) { - contracts := jsonData["wasm"].(map[string]interface{})["contracts"].([]interface{}) + tokenBridgeContract := getContractFromAddr(networkInfo.Contracts.TokenBridge.Addr, jsonData) - for i, contract := range contracts { - c := contract.(map[string]interface{}) - if c["contract_address"] == networkInfo.Contracts.TokenBridge.Addr { - contractInfo := c["contract_info"].(map[string]interface{}) - contractInfo["admin"] = networkInfo.Contracts.TokenBridge.NewAdmin - contracts[i] = c - break - } - } + // replace token bridge admin + contractInfo := tokenBridgeContract["contract_info"].(map[string]interface{}) + contractInfo["admin"] = networkInfo.Contracts.TokenBridge.NewAdmin + return } func ASIGenesisUpgradeReplaceDenom(jsonData map[string]interface{}, networkInfo NetworkConfig) { @@ -271,16 +281,27 @@ func ASIGenesisUpgradeReplaceDenom(jsonData map[string]interface{}, networkInfo } func ASIGenesisUpgradeReplaceAlmanacState(jsonData map[string]interface{}, networkInfo NetworkConfig) { + almanacContract := getContractFromAddr(networkInfo.Contracts.Almanac.Addr, jsonData) + + // empty the almanac contract state + almanacContract["contract_state"] = []interface{}{} +} + +func ASIGenesisUpgradeReplaceANameState(jsonData map[string]interface{}, networkInfo NetworkConfig) { + anameContract := getContractFromAddr(networkInfo.Contracts.AName.Addr, jsonData) + + // empty the AName contract state + anameContract["contract_state"] = []interface{}{} +} + +func getContractFromAddr(addr string, jsonData map[string]interface{}) map[string]interface{} { contracts := jsonData["wasm"].(map[string]interface{})["contracts"].([]interface{}) for _, contract := range contracts { - if contract.(map[string]interface{})["contract_address"] == networkInfo.Contracts.Almanac.Addr { - almanacContract := contract.(map[string]interface{}) - // empty the almanac contract state - almanacContract["contract_state"] = []interface{}{} - return + if contract.(map[string]interface{})["contract_address"] == addr { + return contract.(map[string]interface{}) } } - panic("failed to find almanac contract using provided address") + panic("failed to find contract using provided address") } func ASIGenesisUpgradeReplaceAddresses(jsonData map[string]interface{}, networkInfo NetworkConfig) { @@ -540,6 +561,7 @@ type DenomInfo struct { type Contracts struct { TokenBridge *TokenBridge Almanac *Almanac + AName *AName } type TokenBridge struct { @@ -550,3 +572,7 @@ type TokenBridge struct { type Almanac struct { Addr string } + +type AName struct { + Addr string +} From 26e1bd4eee11d15c4731c6e0e25aafc25e9672cc Mon Sep 17 00:00:00 2001 From: jonathansumner Date: Mon, 20 May 2024 12:20:13 +0100 Subject: [PATCH 3/3] chore: tidy --- cmd/fetchd/cmd/genesis-asi-upgrade.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/fetchd/cmd/genesis-asi-upgrade.go b/cmd/fetchd/cmd/genesis-asi-upgrade.go index 82315f6b..a8078e7c 100644 --- a/cmd/fetchd/cmd/genesis-asi-upgrade.go +++ b/cmd/fetchd/cmd/genesis-asi-upgrade.go @@ -135,7 +135,7 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command { var ok bool var networkConfig NetworkConfig // TODO(JS): potentially just read Chain-ID, instead of taking a new arg if networkConfig, ok = networkInfos[genDoc.ChainID]; !ok { - return fmt.Errorf("network not found, not match for Chain-ID") + return fmt.Errorf("network not found, no match for Chain-ID in genesis file") } var jsonData map[string]interface{}