Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: ASI alamanac state replacement #352

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 68 additions & 11 deletions cmd/fetchd/cmd/genesis-asi-upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@ var networkInfos = map[string]NetworkConfig{
IbcTargetAddr: "fetch1rhrlzsx9z865dqen8t4v47r99dw6y4va4uph0x", // TODO(JS): amend this
ReconciliationTargetAddr: &ReconciliationTargetAddr, // TODO(JS): amend this
Contracts: &Contracts{
Almanac: &Almanac{
Addr: "fetch1mezzhfj7qgveewzwzdk6lz5sae4dunpmmsjr9u7z0tpmdsae8zmquq3y0y", // mainnet STAGING contract,
},
AName: &AName{
Addr: "fetch1479lwv5vy8skute5cycuz727e55spkhxut0valrcm38x9caa2x8q99ef0q", // mainnet DEVELOPMENT contract,
},
TokenBridge: &TokenBridge{
Addr: "fetch1qxxlalvsdjd07p07y3rc5fu6ll8k4tmetpha8n",
NewAdmin: "fetch15p3rl5aavw9rtu86tna5lgxfkz67zzr6ed4yhw",
Expand All @@ -77,6 +83,18 @@ var networkInfos = map[string]NetworkConfig{
UpdatedSupplyOverflowAddr: "fetch15p3rl5aavw9rtu86tna5lgxfkz67zzr6ed4yhw", // TODO(JS): likely amend this
},
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",
},
},
},
}

Expand Down Expand Up @@ -117,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{}
Expand All @@ -135,6 +153,16 @@ func ASIGenesisUpgradeCmd(defaultNodeHome string) *cobra.Command {

manifest := ASIUpgradeManifest{}

// replace almanac contract state
if networkConfig.Contracts != nil && networkConfig.Contracts.Almanac != nil {
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, &manifest); err != nil {
return err
Expand Down Expand Up @@ -245,17 +273,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) {
Expand All @@ -274,6 +297,30 @@ 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"] == addr {
return contract.(map[string]interface{})
}
}
panic("failed to find contract using provided address")
}

func ASIGenesisUpgradeReplaceAddresses(jsonData map[string]interface{}, networkInfo NetworkConfig) {
// account addresses
replaceAddresses(AccAddressPrefix, jsonData, AddrDataLength+AddrChecksumLength)
Expand Down Expand Up @@ -603,9 +650,19 @@ type DenomInfo struct {

type Contracts struct {
TokenBridge *TokenBridge
Almanac *Almanac
AName *AName
}

type TokenBridge struct {
Addr string
NewAdmin string
}

type Almanac struct {
Addr string
}

type AName struct {
Addr string
}
Loading