From c8fd833264ba8a7bde8fbade4728120e0739a2e4 Mon Sep 17 00:00:00 2001
From: Philip Offtermatt
Date: Fri, 8 Sep 2023 13:20:34 +0200
Subject: [PATCH] Add test for proposal unwrapping and fix bugs in it
---
tests/e2e/json_chainState_marshalling.go | 168 --
tests/e2e/json_marshal_test.go | 177 ++
tests/e2e/json_utils.go | 52 +-
tests/e2e/trace_handlers_test.go | 6 +-
.../e2e/tracehandler_testdata/happyPath.json | 1937 ++++++++++++++++-
5 files changed, 2156 insertions(+), 184 deletions(-)
delete mode 100644 tests/e2e/json_chainState_marshalling.go
create mode 100644 tests/e2e/json_marshal_test.go
diff --git a/tests/e2e/json_chainState_marshalling.go b/tests/e2e/json_chainState_marshalling.go
deleted file mode 100644
index c5ec20c981..0000000000
--- a/tests/e2e/json_chainState_marshalling.go
+++ /dev/null
@@ -1,168 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "fmt"
- "reflect"
-)
-
-type ProposalWithType struct {
- ProposalType string
- Proposal Proposal
-}
-
-// MarshalJSON marshals a chainState into JSON while including the type of the proposal.
-func (chainState ChainState) MarshalJSON() ([]byte, error) {
- var proposalsWithTypes map[uint]ProposalWithType
- if chainState.Proposals != nil {
- proposalsWithTypes = make(map[uint]ProposalWithType, len(*chainState.Proposals))
-
- for k, v := range *chainState.Proposals {
- proposalsWithTypes[k] = ProposalWithType{
- ProposalType: reflect.TypeOf(v).String(),
- Proposal: v,
- }
- }
- } else {
- proposalsWithTypes = nil
- }
-
- result := struct {
- ValBalances *map[ValidatorID]uint
- Proposals *map[uint]ProposalWithType
- ValPowers *map[ValidatorID]uint
- RepresentativePowers *map[ValidatorID]uint
- Params *[]Param
- Rewards *Rewards
- ConsumerChains *map[ChainID]bool
- AssignedKeys *map[ValidatorID]string
- ProviderKeys *map[ValidatorID]string // validatorID: validator provider key
- ConsumerChainQueueSizes *map[ChainID]uint
- GlobalSlashQueueSize *uint
- }{
- ValBalances: chainState.ValBalances,
- Proposals: &proposalsWithTypes,
- ValPowers: chainState.ValPowers,
- RepresentativePowers: chainState.RepresentativePowers,
- Params: chainState.Params,
- Rewards: chainState.Rewards,
- ConsumerChains: chainState.ConsumerChains,
- AssignedKeys: chainState.AssignedKeys,
- ProviderKeys: chainState.ProviderKeys,
- ConsumerChainQueueSizes: chainState.ConsumerChainQueueSizes,
- GlobalSlashQueueSize: chainState.GlobalSlashQueueSize,
- }
-
- return json.Marshal(result)
-}
-
-func (state *ChainState) UnmarshalJSON(data []byte) error {
- var tmp struct {
- ValBalances *map[ValidatorID]uint
- Proposals *map[uint]json.RawMessage
- ValPowers *map[ValidatorID]uint
- RepresentativePowers *map[ValidatorID]uint
- Params *[]Param
- Rewards *Rewards
- ConsumerChains *map[ChainID]bool
- AssignedKeys *map[ValidatorID]string
- ProviderKeys *map[ValidatorID]string // validatorID: validator provider key
- ConsumerChainQueueSizes *map[ChainID]uint
- GlobalSlashQueueSize *uint
- }
-
- err := json.Unmarshal(data, &tmp)
- if err != nil {
- return err
- }
-
- var proposals *map[uint]Proposal
- if tmp.Proposals != nil {
- proposals, err = UnmarshalProposals(*tmp.Proposals)
- if err != nil {
- return err
- }
- }
-
- state.Proposals = proposals
-
- state.ValBalances = tmp.ValBalances
- state.ValPowers = tmp.ValPowers
- state.RepresentativePowers = tmp.RepresentativePowers
- state.Params = tmp.Params
- state.Rewards = tmp.Rewards
- state.ConsumerChains = tmp.ConsumerChains
- state.AssignedKeys = tmp.AssignedKeys
- state.ProviderKeys = tmp.ProviderKeys
- state.ConsumerChainQueueSizes = tmp.ConsumerChainQueueSizes
- state.GlobalSlashQueueSize = tmp.GlobalSlashQueueSize
-
- return nil
-}
-
-func UnmarshalProposals(proposals map[uint]json.RawMessage) (*map[uint]Proposal, error) {
- result := make(map[uint]Proposal, len(proposals))
-
- for k, v := range proposals {
- var tmp struct {
- Proposal json.RawMessage
- ProposalType string
- }
-
- if err := json.Unmarshal(v, &tmp); err != nil {
- return nil, err
- }
-
- proposal, err := UnmarshalMapToProposalType(tmp.Proposal, tmp.ProposalType)
- if err != nil {
- return nil, err
- }
- result[k] = proposal
- }
-
- return &result, nil
-}
-
-// UnmarshalMapToProposalType takes a JSON message and a proposal type and marshals into an object of the corresponding proposal.
-func UnmarshalMapToProposalType(input json.RawMessage, proposalType string) (Proposal, error) {
- switch proposalType {
- case "main.ConsumerAdditionProposal":
- var proposal ConsumerAdditionProposal
- err := json.Unmarshal(input, &proposal)
- if err != nil {
- return nil, err
- }
- return proposal, nil
- case "main.ConsumerRemovalProposal":
- var proposal ConsumerRemovalProposal
- err := json.Unmarshal(input, &proposal)
- if err != nil {
- return nil, err
- }
- return proposal, nil
- case "main.EquivocationProposal":
- var proposal EquivocationProposal
- err := json.Unmarshal(input, &proposal)
- if err != nil {
- return nil, err
- }
- return proposal, nil
- case "main.ParamsProposal":
- var proposal ParamsProposal
- err := json.Unmarshal(input, &proposal)
- if err != nil {
- return nil, err
- }
- return proposal, nil
-
- case "main.TextProposal":
- var proposal TextProposal
- err := json.Unmarshal(input, &proposal)
- if err != nil {
- return nil, err
- }
- return proposal, nil
- default:
- return nil, fmt.Errorf("%s is not a known proposal type", proposalType)
- }
-}
diff --git a/tests/e2e/json_marshal_test.go b/tests/e2e/json_marshal_test.go
new file mode 100644
index 0000000000..06e54ce69f
--- /dev/null
+++ b/tests/e2e/json_marshal_test.go
@@ -0,0 +1,177 @@
+package main
+
+import (
+ "encoding/json"
+ "reflect"
+ "strings"
+ "testing"
+
+ clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types"
+ "github.com/davecgh/go-spew/spew"
+)
+
+func TestProposalUnmarshal(t *testing.T) {
+ proposalAndTypeString := `{
+ "Type": "main.ConsumerAdditionProposal",
+ "RawProposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }`
+
+ expectedProposal := ConsumerAdditionProposal{
+ Deposit: 10000001,
+ Chain: ChainID("consu"),
+ SpawnTime: 0,
+ InitialHeight: clienttypes.Height{RevisionNumber: 0, RevisionHeight: 1},
+ Status: "PROPOSAL_STATUS_PASSED",
+ }
+
+ propAndType := &ProposalAndType{}
+ err := json.Unmarshal([]byte(proposalAndTypeString), propAndType)
+ if err != nil {
+ t.Errorf("Unexpected error while unmarshalling: %v", err)
+ }
+
+ actualProposal, err := UnmarshalProposalWithType(propAndType.RawProposal, propAndType.Type)
+ if err != nil {
+ t.Errorf("Unexpected error while unmarshalling\n error: %v\n Raw proposal: %v\n Type: %v", err, spew.Sdump(propAndType.RawProposal), propAndType.Type)
+ }
+
+ if !reflect.DeepEqual(actualProposal, expectedProposal) {
+ t.Errorf("Expected proposal: %v, but got: %v", spew.Sdump(expectedProposal), spew.Sdump(actualProposal))
+ }
+}
+
+type ChainStateTestCase struct {
+ name string
+ jsonBytes []byte
+ chainState ChainState
+ expectedErrorText string
+}
+
+var testCases = []ChainStateTestCase{
+ {
+ name: "valid JSON with proposals",
+ jsonBytes: []byte(`{
+ "ValBalances": {
+ "alice": 9500000000,
+ "bob": 9500000000,
+ "carol": 9500000000
+ },
+ "Proposals": {
+ "1": {
+ "ProposalType": "main.ConsumerAdditionProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }
+ }
+ }`),
+ chainState: ChainState{
+ ValBalances: &map[ValidatorID]uint{
+ ValidatorID("alice"): 9500000000,
+ ValidatorID("bob"): 9500000000,
+ ValidatorID("carol"): 9500000000,
+ },
+ Proposals: &map[uint]Proposal{
+ 1: ConsumerAdditionProposal{
+ Deposit: 10000001,
+ Chain: ChainID("consu"),
+ SpawnTime: 0,
+ InitialHeight: clienttypes.Height{RevisionNumber: 0, RevisionHeight: 1},
+ Status: "PROPOSAL_STATUS_PASSED",
+ },
+ },
+ },
+ expectedErrorText: "",
+ },
+ {
+ name: "invalid JSON",
+ jsonBytes: []byte(`thisisnotagoodjsonstring`),
+ expectedErrorText: "invalid json",
+ },
+ {
+ name: "unknown proposal type",
+ jsonBytes: []byte(`{
+ "ValBalances": {
+ "alice": 9500000000,
+ "bob": 9500000000,
+ "carol": 9500000000
+ },
+ "Proposals": {
+ "1": {
+ "ProposalType": "main.NotAProposalTypeProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }
+ },
+ }`),
+ expectedErrorText: "not a known proposal type",
+ },
+}
+
+func TestUnmarshalJSON(t *testing.T) {
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ var result ChainState
+ err := result.UnmarshalJSON(tc.jsonBytes)
+ if err != nil && tc.expectedErrorText == "" {
+ t.Errorf("Unexpected error: %v", err)
+ }
+
+ if err == nil && tc.expectedErrorText != "" {
+ t.Errorf("Expected error to contain: %v, but got no error", tc.expectedErrorText)
+ }
+
+ if err != nil && tc.expectedErrorText != "" && strings.Contains(err.Error(), tc.expectedErrorText) {
+ t.Errorf("Expected error to contain: %v, but got: %v", tc.expectedErrorText, err)
+ }
+
+ if !reflect.DeepEqual(result, tc.chainState) {
+ t.Errorf("Expected ChainState: %v, but got: %v", tc.chainState, result)
+ }
+ })
+ }
+}
+
+func TestMarshalJSON(t *testing.T) {
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ result, err := tc.chainState.MarshalJSON()
+ if err != nil && tc.expectedErrorText == "" {
+ t.Errorf("Unexpected error: %v", err)
+ }
+
+ if err == nil && tc.expectedErrorText != "" {
+ t.Errorf("Expected error to contain: %v, but got no error", tc.expectedErrorText)
+ }
+
+ if err != nil && tc.expectedErrorText != "" && strings.Contains(err.Error(), tc.expectedErrorText) {
+ t.Errorf("Expected error to contain: %v, but got: %v", tc.expectedErrorText, err)
+ }
+
+ if !reflect.DeepEqual(result, tc.jsonBytes) {
+ t.Errorf("Expected JSON: %v, but got: %v", string(tc.jsonBytes), string(result))
+ }
+ })
+ }
+}
diff --git a/tests/e2e/json_utils.go b/tests/e2e/json_utils.go
index 07aa267765..4378f1b934 100644
--- a/tests/e2e/json_utils.go
+++ b/tests/e2e/json_utils.go
@@ -97,22 +97,41 @@ func UnmarshalMapToActionType(inputMap json.RawMessage, actionType string) (inte
// for marshalling/unmarshalling proposals
type ProposalAndType struct {
- RawProposal map[string]any
- Type string `json:"Type"`
+ RawProposal json.RawMessage
+ Type string
}
type ChainStateWithProposalTypes struct {
- ChainState
- Proposals *map[uint]ProposalAndType `json:"Proposals"`
+ ValBalances *map[ValidatorID]uint
+ ValPowers *map[ValidatorID]uint
+ RepresentativePowers *map[ValidatorID]uint
+ Params *[]Param
+ Rewards *Rewards
+ ConsumerChains *map[ChainID]bool
+ AssignedKeys *map[ValidatorID]string
+ ProviderKeys *map[ValidatorID]string
+ ConsumerChainQueueSizes *map[ChainID]uint
+ GlobalSlashQueueSize *uint
+ RegisteredConsumerRewardDenoms *[]string
+ Proposals *map[uint]ProposalAndType // the only thing changed from the real ChainState
}
// custom marshal and unmarshal functions for the chainstate that convert proposals to/from the auxiliary type with type info
// transform the ChainState into a ChainStateWithProposalTypes by adding type info to the proposals
-func (c ChainState) MarshalJson() ([]byte, error) {
- fmt.Println("Custom marshal is called")
+func (c ChainState) MarshalJSON() ([]byte, error) {
chainStateWithProposalTypes := ChainStateWithProposalTypes{
- ChainState: c,
+ ValBalances: c.ValBalances,
+ ValPowers: c.ValPowers,
+ RepresentativePowers: c.RepresentativePowers,
+ Params: c.Params,
+ Rewards: c.Rewards,
+ ConsumerChains: c.ConsumerChains,
+ AssignedKeys: c.AssignedKeys,
+ ProviderKeys: c.ProviderKeys,
+ ConsumerChainQueueSizes: c.ConsumerChainQueueSizes,
+ GlobalSlashQueueSize: c.GlobalSlashQueueSize,
+ RegisteredConsumerRewardDenoms: c.RegisteredConsumerRewardDenoms,
}
if c.Proposals != nil {
proposalsWithTypes := make(map[uint]ProposalAndType)
@@ -130,15 +149,24 @@ func (c ChainState) MarshalJson() ([]byte, error) {
}
// unmarshal the ChainStateWithProposalTypes into a ChainState by removing the type info from the proposals and getting back standard proposals
-func (c *ChainState) UnmarshalJson(data []byte) error {
- fmt.Println("Custom unmarshal is called")
-
+func (c *ChainState) UnmarshalJSON(data []byte) error {
chainStateWithProposalTypes := ChainStateWithProposalTypes{}
err := json.Unmarshal(data, &chainStateWithProposalTypes)
if err != nil {
return err
}
- *c = chainStateWithProposalTypes.ChainState
+ c.ValBalances = chainStateWithProposalTypes.ValBalances
+ c.ValPowers = chainStateWithProposalTypes.ValPowers
+ c.RepresentativePowers = chainStateWithProposalTypes.RepresentativePowers
+ c.Params = chainStateWithProposalTypes.Params
+ c.Rewards = chainStateWithProposalTypes.Rewards
+ c.ConsumerChains = chainStateWithProposalTypes.ConsumerChains
+ c.AssignedKeys = chainStateWithProposalTypes.AssignedKeys
+ c.ProviderKeys = chainStateWithProposalTypes.ProviderKeys
+ c.ConsumerChainQueueSizes = chainStateWithProposalTypes.ConsumerChainQueueSizes
+ c.GlobalSlashQueueSize = chainStateWithProposalTypes.GlobalSlashQueueSize
+ c.RegisteredConsumerRewardDenoms = chainStateWithProposalTypes.RegisteredConsumerRewardDenoms
+
if chainStateWithProposalTypes.Proposals != nil {
proposals := make(map[uint]Proposal)
for k, v := range *chainStateWithProposalTypes.Proposals {
@@ -164,7 +192,7 @@ var proposalRegistry = map[string]Proposal{
}
// UnmarshalProposalWithType takes a JSON object and a proposal type and marshals into an object of the corresponding proposal.
-func UnmarshalProposalWithType(inputMap map[string]any, proposalType string) (Proposal, error) {
+func UnmarshalProposalWithType(inputMap json.RawMessage, proposalType string) (Proposal, error) {
propStruct, ok := proposalRegistry[proposalType]
if !ok {
return nil, fmt.Errorf("%s is not a known proposal type", proposalType)
diff --git a/tests/e2e/trace_handlers_test.go b/tests/e2e/trace_handlers_test.go
index 87bb649d2b..4f0c3d4fe5 100644
--- a/tests/e2e/trace_handlers_test.go
+++ b/tests/e2e/trace_handlers_test.go
@@ -42,9 +42,9 @@ func TestWriterThenParser(t *testing.T) {
tests := map[string]struct {
trace []Step
}{
- "proposalSubmission": {proposalSubmissionSteps},
- "proposalInState": {proposalInStateSteps},
- "start_provider_chain": {stepStartProviderChain()},
+ "proposalSubmission": {proposalSubmissionSteps},
+ // "proposalInState": {proposalInStateSteps},
+ // "start_provider_chain": {stepStartProviderChain()},
// "happyPath": {happyPathSteps},
// "democracy": {democracySteps},
// "slashThrottle": {slashThrottleSteps},
diff --git a/tests/e2e/tracehandler_testdata/happyPath.json b/tests/e2e/tracehandler_testdata/happyPath.json
index b83422912b..1ac9c8ad27 100644
--- a/tests/e2e/tracehandler_testdata/happyPath.json
+++ b/tests/e2e/tracehandler_testdata/happyPath.json
@@ -1 +1,1936 @@
-[{"ActionType":"main.StartChainAction","Action":{"Chain":"provi","Validators":[{"Id":"bob","Allocation":10000000000,"Stake":500000000},{"Id":"alice","Allocation":10000000000,"Stake":500000000},{"Id":"carol","Allocation":10000000000,"Stake":500000000}],"GenesisChanges":"","SkipGentx":false},"State":{"provi":{"ValBalances":{"alice":9500000000,"bob":9500000000,"carol":9500000000},"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.submitConsumerAdditionProposalAction","Action":{"PreCCV":false,"Chain":"provi","From":"alice","Deposit":10000001,"ConsumerChain":"consu","SpawnTime":0,"InitialHeight":{"revision_height":1},"DistributionChannel":""},"State":{"provi":{"ValBalances":{"alice":9489999999,"bob":9500000000},"Proposals":{"1":{"ProposalType":"main.ConsumerAdditionProposal","Proposal":{"Deposit":10000001,"Chain":"consu","SpawnTime":0,"InitialHeight":{"revision_height":1},"Status":"PROPOSAL_STATUS_VOTING_PERIOD"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.assignConsumerPubKeyAction","Action":{"Chain":"consu","Validator":"carol","ConsumerPubkey":"{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}","ReconfigureNode":false,"ExpectError":false,"ExpectedError":""},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":{"carol":"cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"},"ProviderKeys":{"carol":"cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"},"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.assignConsumerPubKeyAction","Action":{"Chain":"consu","Validator":"carol","ConsumerPubkey":"{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}","ReconfigureNode":false,"ExpectError":true,"ExpectedError":"a validator has assigned the consumer key already: consumer key is already in use by a validator"},"State":{}},{"ActionType":"main.assignConsumerPubKeyAction","Action":{"Chain":"consu","Validator":"bob","ConsumerPubkey":"{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}","ReconfigureNode":false,"ExpectError":true,"ExpectedError":"a validator has assigned the consumer key already: consumer key is already in use by a validator"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":{"bob":"","carol":"cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"},"ProviderKeys":{"carol":"cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"},"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.voteGovProposalAction","Action":{"Chain":"provi","From":["alice","bob","carol"],"Vote":["yes","yes","yes"],"PropNumber":1},"State":{"provi":{"ValBalances":{"alice":9500000000,"bob":9500000000},"Proposals":{"1":{"ProposalType":"main.ConsumerAdditionProposal","Proposal":{"Deposit":10000001,"Chain":"consu","SpawnTime":0,"InitialHeight":{"revision_height":1},"Status":"PROPOSAL_STATUS_PASSED"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.startConsumerChainAction","Action":{"ConsumerChain":"consu","ProviderChain":"provi","Validators":[{"Id":"bob","Allocation":10000000000,"Stake":500000000},{"Id":"alice","Allocation":10000000000,"Stake":500000000},{"Id":"carol","Allocation":10000000000,"Stake":500000000}],"GenesisChanges":".app_state.ccvconsumer.params.soft_opt_out_threshold = \"0.05\""},"State":{"consu":{"ValBalances":{"alice":10000000000,"bob":10000000000,"carol":10000000000},"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":{"alice":9500000000,"bob":9500000000,"carol":9500000000},"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.addIbcConnectionAction","Action":{"ChainA":"consu","ChainB":"provi","ClientA":0,"ClientB":0},"State":{}},{"ActionType":"main.addIbcChannelAction","Action":{"ChainA":"consu","ChainB":"provi","ConnectionA":0,"PortA":"consumer","PortB":"provider","Order":"ordered","Version":""},"State":{}},{"ActionType":"main.delegateTokensAction","Action":{"Chain":"provi","From":"alice","To":"alice","Amount":11000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":500,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.SendTokensAction","Action":{"Chain":"consu","From":"alice","To":"bob","Amount":1},"State":{"consu":{"ValBalances":{"alice":10000000000,"bob":10000000000},"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.SendTokensAction","Action":{"Chain":"consu","From":"alice","To":"bob","Amount":1},"State":{"consu":{"ValBalances":{"alice":9999999999,"bob":10000000001},"Proposals":null,"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.assignConsumerPubKeyAction","Action":{"Chain":"consu","Validator":"bob","ConsumerPubkey":"{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"QlG+iYe6AyYpvY1z9RNJKCVlH14Q/qSz4EjGdGCru3o=\"}","ReconfigureNode":true,"ExpectError":false,"ExpectedError":""},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":{"bob":"cosmosvalcons1uuec3cjxajv5te08p220usrjhkfhg9wyvqn0tm","carol":"cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"},"ProviderKeys":{"bob":"cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39","carol":"cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"},"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":{"bob":"cosmosvalcons1uuec3cjxajv5te08p220usrjhkfhg9wyvqn0tm","carol":"cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"},"ProviderKeys":{"bob":"cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39","carol":"cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"},"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.unbondTokensAction","Action":{"Chain":"provi","Sender":"alice","UnbondFrom":"alice","Amount":1000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":511,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.unbondTokensAction","Action":{"Chain":"provi","Sender":"alice","UnbondFrom":"alice","Amount":1000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.cancelUnbondTokensAction","Action":{"Chain":"provi","Delegator":"alice","Validator":"alice","Amount":1000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.redelegateTokensAction","Action":{"Chain":"provi","Src":"alice","Dst":"carol","TxSender":"alice","Amount":450000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":510,"bob":500,"carol":500},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.downtimeSlashAction","Action":{"Chain":"consu","Validator":"alice"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.redelegateTokensAction","Action":{"Chain":"provi","Src":"carol","Dst":"alice","TxSender":"carol","Amount":449000000},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":60,"bob":500,"carol":950},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.downtimeSlashAction","Action":{"Chain":"consu","Validator":"bob"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":0,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":0,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.unjailValidatorAction","Action":{"Provider":"provi","Validator":"bob"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":0,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.downtimeSlashAction","Action":{"Chain":"provi","Validator":"carol"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":501},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.unjailValidatorAction","Action":{"Provider":"provi","Validator":"carol"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":495},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":495},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.submitEquivocationProposalAction","Action":{"Chain":"consu","Height":10,"Time":"2023-09-07T13:27:56.243032+02:00","Power":500,"Validator":"bob","Deposit":10000001,"From":"bob"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":495},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":{"bob":9500000000},"Proposals":{"2":{"ProposalType":"main.TextProposal","Proposal":{"Title":"","Description":"","Deposit":0,"Status":""}}},"ValPowers":{"alice":509,"bob":500,"carol":495},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.doublesignSlashAction","Action":{"Validator":"carol","Chain":"provi"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":495},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.doublesignSlashAction","Action":{"Validator":"bob","Chain":"consu"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.submitEquivocationProposalAction","Action":{"Chain":"consu","Height":10,"Time":"2023-09-07T13:27:56.243036+02:00","Power":500,"Validator":"bob","Deposit":10000001,"From":"bob"},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":{"bob":9489999999},"Proposals":{"2":{"ProposalType":"main.EquivocationProposal","Proposal":{"Height":10,"Power":500,"ConsensusAddress":"cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39","Deposit":10000001,"Status":"PROPOSAL_STATUS_VOTING_PERIOD"}}},"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.voteGovProposalAction","Action":{"Chain":"provi","From":["alice","bob","carol"],"Vote":["yes","yes","yes"],"PropNumber":2},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":500,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":{"2":{"ProposalType":"main.EquivocationProposal","Proposal":{"Height":10,"Power":500,"ConsensusAddress":"cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39","Deposit":10000001,"Status":"PROPOSAL_STATUS_PASSED"}}},"ValPowers":{"alice":509,"bob":0,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.relayPacketsAction","Action":{"ChainA":"provi","ChainB":"consu","Port":"provider","Channel":0},"State":{"consu":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":0,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null},"provi":{"ValBalances":null,"Proposals":null,"ValPowers":{"alice":509,"bob":0,"carol":0},"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":null,"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.startRelayerAction","Action":{},"State":{}},{"ActionType":"main.submitConsumerRemovalProposalAction","Action":{"Chain":"provi","From":"bob","Deposit":10000001,"ConsumerChain":"consu","StopTimeOffset":0},"State":{"provi":{"ValBalances":{"bob":9489999999},"Proposals":{"3":{"ProposalType":"main.ConsumerRemovalProposal","Proposal":{"Deposit":10000001,"Chain":"consu","StopTime":0,"Status":"PROPOSAL_STATUS_VOTING_PERIOD"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":{"consu":true},"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.voteGovProposalAction","Action":{"Chain":"provi","From":["alice","bob","carol"],"Vote":["no","no","no"],"PropNumber":3},"State":{"provi":{"ValBalances":{"bob":9500000000},"Proposals":{"3":{"ProposalType":"main.ConsumerRemovalProposal","Proposal":{"Deposit":10000001,"Chain":"consu","StopTime":0,"Status":"PROPOSAL_STATUS_REJECTED"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":{"consu":true},"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.submitConsumerRemovalProposalAction","Action":{"Chain":"provi","From":"bob","Deposit":10000001,"ConsumerChain":"consu","StopTimeOffset":0},"State":{"provi":{"ValBalances":{"bob":9489999999},"Proposals":{"4":{"ProposalType":"main.ConsumerRemovalProposal","Proposal":{"Deposit":10000001,"Chain":"consu","StopTime":0,"Status":"PROPOSAL_STATUS_VOTING_PERIOD"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":{"consu":true},"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}},{"ActionType":"main.voteGovProposalAction","Action":{"Chain":"provi","From":["alice","bob","carol"],"Vote":["yes","yes","yes"],"PropNumber":4},"State":{"provi":{"ValBalances":{"bob":9500000000},"Proposals":{"4":{"ProposalType":"main.ConsumerRemovalProposal","Proposal":{"Deposit":10000001,"Chain":"consu","StopTime":0,"Status":"PROPOSAL_STATUS_PASSED"}}},"ValPowers":null,"RepresentativePowers":null,"Params":null,"Rewards":null,"ConsumerChains":{},"AssignedKeys":null,"ProviderKeys":null,"ConsumerChainQueueSizes":null,"GlobalSlashQueueSize":null}}}]
\ No newline at end of file
+[
+ {
+ "ActionType": "main.StartChainAction",
+ "Action": {
+ "Chain": "provi",
+ "Validators": [
+ {
+ "Id": "bob",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ },
+ {
+ "Id": "alice",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ },
+ {
+ "Id": "carol",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ }
+ ],
+ "GenesisChanges": "",
+ "SkipGentx": false
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "alice": 9500000000,
+ "bob": 9500000000,
+ "carol": 9500000000
+ },
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.submitConsumerAdditionProposalAction",
+ "Action": {
+ "PreCCV": false,
+ "Chain": "provi",
+ "From": "alice",
+ "Deposit": 10000001,
+ "ConsumerChain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "DistributionChannel": ""
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "alice": 9489999999,
+ "bob": 9500000000
+ },
+ "Proposals": {
+ "1": {
+ "ProposalType": "main.ConsumerAdditionProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "Status": "PROPOSAL_STATUS_VOTING_PERIOD"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.assignConsumerPubKeyAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "carol",
+ "ConsumerPubkey": "{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}",
+ "ReconfigureNode": false,
+ "ExpectError": false,
+ "ExpectedError": ""
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": {
+ "carol": "cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"
+ },
+ "ProviderKeys": {
+ "carol": "cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"
+ },
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.assignConsumerPubKeyAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "carol",
+ "ConsumerPubkey": "{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}",
+ "ReconfigureNode": false,
+ "ExpectError": true,
+ "ExpectedError": "a validator has assigned the consumer key already: consumer key is already in use by a validator"
+ },
+ "State": {}
+ },
+ {
+ "ActionType": "main.assignConsumerPubKeyAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "bob",
+ "ConsumerPubkey": "{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"Ui5Gf1+mtWUdH8u3xlmzdKID+F3PK0sfXZ73GZ6q6is=\"}",
+ "ReconfigureNode": false,
+ "ExpectError": true,
+ "ExpectedError": "a validator has assigned the consumer key already: consumer key is already in use by a validator"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": {
+ "bob": "",
+ "carol": "cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"
+ },
+ "ProviderKeys": {
+ "carol": "cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"
+ },
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.voteGovProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "Vote": [
+ "yes",
+ "yes",
+ "yes"
+ ],
+ "PropNumber": 1
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "alice": 9500000000,
+ "bob": 9500000000
+ },
+ "Proposals": {
+ "1": {
+ "ProposalType": "main.ConsumerAdditionProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "SpawnTime": 0,
+ "InitialHeight": {
+ "revision_height": 1
+ },
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.startConsumerChainAction",
+ "Action": {
+ "ConsumerChain": "consu",
+ "ProviderChain": "provi",
+ "Validators": [
+ {
+ "Id": "bob",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ },
+ {
+ "Id": "alice",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ },
+ {
+ "Id": "carol",
+ "Allocation": 10000000000,
+ "Stake": 500000000
+ }
+ ],
+ "GenesisChanges": ".app_state.ccvconsumer.params.soft_opt_out_threshold = \"0.05\""
+ },
+ "State": {
+ "consu": {
+ "ValBalances": {
+ "alice": 10000000000,
+ "bob": 10000000000,
+ "carol": 10000000000
+ },
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": {
+ "alice": 9500000000,
+ "bob": 9500000000,
+ "carol": 9500000000
+ },
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.addIbcConnectionAction",
+ "Action": {
+ "ChainA": "consu",
+ "ChainB": "provi",
+ "ClientA": 0,
+ "ClientB": 0
+ },
+ "State": {}
+ },
+ {
+ "ActionType": "main.addIbcChannelAction",
+ "Action": {
+ "ChainA": "consu",
+ "ChainB": "provi",
+ "ConnectionA": 0,
+ "PortA": "consumer",
+ "PortB": "provider",
+ "Order": "ordered",
+ "Version": ""
+ },
+ "State": {}
+ },
+ {
+ "ActionType": "main.delegateTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "From": "alice",
+ "To": "alice",
+ "Amount": 11000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 500,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.SendTokensAction",
+ "Action": {
+ "Chain": "consu",
+ "From": "alice",
+ "To": "bob",
+ "Amount": 1
+ },
+ "State": {
+ "consu": {
+ "ValBalances": {
+ "alice": 10000000000,
+ "bob": 10000000000
+ },
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.SendTokensAction",
+ "Action": {
+ "Chain": "consu",
+ "From": "alice",
+ "To": "bob",
+ "Amount": 1
+ },
+ "State": {
+ "consu": {
+ "ValBalances": {
+ "alice": 9999999999,
+ "bob": 10000000001
+ },
+ "Proposals": null,
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.assignConsumerPubKeyAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "bob",
+ "ConsumerPubkey": "{\"@type\":\"/cosmos.crypto.ed25519.PubKey\",\"key\":\"QlG+iYe6AyYpvY1z9RNJKCVlH14Q/qSz4EjGdGCru3o=\"}",
+ "ReconfigureNode": true,
+ "ExpectError": false,
+ "ExpectedError": ""
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": {
+ "bob": "cosmosvalcons1uuec3cjxajv5te08p220usrjhkfhg9wyvqn0tm",
+ "carol": "cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"
+ },
+ "ProviderKeys": {
+ "bob": "cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39",
+ "carol": "cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"
+ },
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": {
+ "bob": "cosmosvalcons1uuec3cjxajv5te08p220usrjhkfhg9wyvqn0tm",
+ "carol": "cosmosvalcons1kswr5sq599365kcjmhgufevfps9njf43e4lwdk"
+ },
+ "ProviderKeys": {
+ "bob": "cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39",
+ "carol": "cosmosvalcons1ezyrq65s3gshhx5585w6mpusq3xsj3ayzf4uv6"
+ },
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.unbondTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "Sender": "alice",
+ "UnbondFrom": "alice",
+ "Amount": 1000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 511,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.unbondTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "Sender": "alice",
+ "UnbondFrom": "alice",
+ "Amount": 1000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.cancelUnbondTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "Delegator": "alice",
+ "Validator": "alice",
+ "Amount": 1000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.redelegateTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "Src": "alice",
+ "Dst": "carol",
+ "TxSender": "alice",
+ "Amount": 450000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 510,
+ "bob": 500,
+ "carol": 500
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.downtimeSlashAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "alice"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.redelegateTokensAction",
+ "Action": {
+ "Chain": "provi",
+ "Src": "carol",
+ "Dst": "alice",
+ "TxSender": "carol",
+ "Amount": 449000000
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 60,
+ "bob": 500,
+ "carol": 950
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.downtimeSlashAction",
+ "Action": {
+ "Chain": "consu",
+ "Validator": "bob"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.unjailValidatorAction",
+ "Action": {
+ "Provider": "provi",
+ "Validator": "bob"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.downtimeSlashAction",
+ "Action": {
+ "Chain": "provi",
+ "Validator": "carol"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 501
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.unjailValidatorAction",
+ "Action": {
+ "Provider": "provi",
+ "Validator": "carol"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 495
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 495
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.submitEquivocationProposalAction",
+ "Action": {
+ "Chain": "consu",
+ "Height": 10,
+ "Time": "2023-09-07T13:27:56.243032+02:00",
+ "Power": 500,
+ "Validator": "bob",
+ "Deposit": 10000001,
+ "From": "bob"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 495
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": {
+ "bob": 9500000000
+ },
+ "Proposals": {
+ "2": {
+ "ProposalType": "main.TextProposal",
+ "Proposal": {
+ "Title": "",
+ "Description": "",
+ "Deposit": 0,
+ "Status": ""
+ }
+ }
+ },
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 495
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.doublesignSlashAction",
+ "Action": {
+ "Validator": "carol",
+ "Chain": "provi"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 495
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.doublesignSlashAction",
+ "Action": {
+ "Validator": "bob",
+ "Chain": "consu"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.submitEquivocationProposalAction",
+ "Action": {
+ "Chain": "consu",
+ "Height": 10,
+ "Time": "2023-09-07T13:27:56.243036+02:00",
+ "Power": 500,
+ "Validator": "bob",
+ "Deposit": 10000001,
+ "From": "bob"
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": {
+ "bob": 9489999999
+ },
+ "Proposals": {
+ "2": {
+ "ProposalType": "main.EquivocationProposal",
+ "Proposal": {
+ "Height": 10,
+ "Power": 500,
+ "ConsensusAddress": "cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39",
+ "Deposit": 10000001,
+ "Status": "PROPOSAL_STATUS_VOTING_PERIOD"
+ }
+ }
+ },
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.voteGovProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "Vote": [
+ "yes",
+ "yes",
+ "yes"
+ ],
+ "PropNumber": 2
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 500,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": {
+ "2": {
+ "ProposalType": "main.EquivocationProposal",
+ "Proposal": {
+ "Height": 10,
+ "Power": 500,
+ "ConsensusAddress": "cosmosvalcons1nx7n5uh0ztxsynn4sje6eyq2ud6rc6klc96w39",
+ "Deposit": 10000001,
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }
+ },
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.relayPacketsAction",
+ "Action": {
+ "ChainA": "provi",
+ "ChainB": "consu",
+ "Port": "provider",
+ "Channel": 0
+ },
+ "State": {
+ "consu": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ },
+ "provi": {
+ "ValBalances": null,
+ "Proposals": null,
+ "ValPowers": {
+ "alice": 509,
+ "bob": 0,
+ "carol": 0
+ },
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": null,
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.startRelayerAction",
+ "Action": {},
+ "State": {}
+ },
+ {
+ "ActionType": "main.submitConsumerRemovalProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": "bob",
+ "Deposit": 10000001,
+ "ConsumerChain": "consu",
+ "StopTimeOffset": 0
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "bob": 9489999999
+ },
+ "Proposals": {
+ "3": {
+ "ProposalType": "main.ConsumerRemovalProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "StopTime": 0,
+ "Status": "PROPOSAL_STATUS_VOTING_PERIOD"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": {
+ "consu": true
+ },
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.voteGovProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "Vote": [
+ "no",
+ "no",
+ "no"
+ ],
+ "PropNumber": 3
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "bob": 9500000000
+ },
+ "Proposals": {
+ "3": {
+ "ProposalType": "main.ConsumerRemovalProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "StopTime": 0,
+ "Status": "PROPOSAL_STATUS_REJECTED"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": {
+ "consu": true
+ },
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.submitConsumerRemovalProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": "bob",
+ "Deposit": 10000001,
+ "ConsumerChain": "consu",
+ "StopTimeOffset": 0
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "bob": 9489999999
+ },
+ "Proposals": {
+ "4": {
+ "ProposalType": "main.ConsumerRemovalProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "StopTime": 0,
+ "Status": "PROPOSAL_STATUS_VOTING_PERIOD"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": {
+ "consu": true
+ },
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ },
+ {
+ "ActionType": "main.voteGovProposalAction",
+ "Action": {
+ "Chain": "provi",
+ "From": [
+ "alice",
+ "bob",
+ "carol"
+ ],
+ "Vote": [
+ "yes",
+ "yes",
+ "yes"
+ ],
+ "PropNumber": 4
+ },
+ "State": {
+ "provi": {
+ "ValBalances": {
+ "bob": 9500000000
+ },
+ "Proposals": {
+ "4": {
+ "ProposalType": "main.ConsumerRemovalProposal",
+ "Proposal": {
+ "Deposit": 10000001,
+ "Chain": "consu",
+ "StopTime": 0,
+ "Status": "PROPOSAL_STATUS_PASSED"
+ }
+ }
+ },
+ "ValPowers": null,
+ "RepresentativePowers": null,
+ "Params": null,
+ "Rewards": null,
+ "ConsumerChains": {},
+ "AssignedKeys": null,
+ "ProviderKeys": null,
+ "ConsumerChainQueueSizes": null,
+ "GlobalSlashQueueSize": null
+ }
+ }
+ }
+]
\ No newline at end of file