Merge PR #2896: Fixed account sequence issue in IBC relay

This commit is contained in:
Tony Stark 2018-11-27 22:52:43 +05:30 committed by Christopher Goes
parent d1e76221d8
commit f8ee8a7f78
1 changed files with 9 additions and 9 deletions

View File

@ -6,7 +6,7 @@ import (
"github.com/cosmos/cosmos-sdk/client/context" "github.com/cosmos/cosmos-sdk/client/context"
"github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/client/keys"
codec "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth"
authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder" authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder"
@ -103,6 +103,7 @@ func (c relayCommander) loop(fromChainID, fromChainNode, toChainID, toChainNode
} }
ingressKey := ibc.IngressSequenceKey(fromChainID) ingressKey := ibc.IngressSequenceKey(fromChainID)
lengthKey := ibc.EgressLengthKey(toChainID)
OUTER: OUTER:
for { for {
@ -120,11 +121,10 @@ OUTER:
panic(err) panic(err)
} }
lengthKey := ibc.EgressLengthKey(toChainID)
egressLengthbz, err := query(fromChainNode, lengthKey, c.ibcStore) egressLengthbz, err := query(fromChainNode, lengthKey, c.ibcStore)
if err != nil { if err != nil {
c.logger.Error("error querying outgoing packet list length", "err", err) c.logger.Error("error querying outgoing packet list length", "err", err)
continue OUTER //TODO replace with continue (I think it should just to the correct place where OUTER is now) continue OUTER // TODO replace with continue (I think it should just to the correct place where OUTER is now)
} }
var egressLength uint64 var egressLength uint64
@ -147,7 +147,7 @@ OUTER:
continue OUTER // TODO replace to break, will break first loop then send back to the beginning (aka OUTER) continue OUTER // TODO replace to break, will break first loop then send back to the beginning (aka OUTER)
} }
err = c.broadcastTx(seq, toChainNode, c.refine(egressbz, i, passphrase)) err = c.broadcastTx(toChainNode, c.refine(egressbz, i, seq, passphrase))
seq++ seq++
@ -166,13 +166,13 @@ func query(node string, key []byte, storeName string) (res []byte, err error) {
} }
// nolint: unparam // nolint: unparam
func (c relayCommander) broadcastTx(seq uint64, node string, tx []byte) error { func (c relayCommander) broadcastTx(node string, tx []byte) error {
_, err := context.NewCLIContext().WithNodeURI(node).BroadcastTx(tx) _, err := context.NewCLIContext().WithNodeURI(node).BroadcastTx(tx)
return err return err
} }
func (c relayCommander) getSequence(node string) uint64 { func (c relayCommander) getSequence(node string) uint64 {
res, err := query(node, c.address, c.accStore) res, err := query(node, auth.AddressStoreKey(c.address), c.accStore)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -189,7 +189,7 @@ func (c relayCommander) getSequence(node string) uint64 {
return 0 return 0
} }
func (c relayCommander) refine(bz []byte, sequence uint64, passphrase string) []byte { func (c relayCommander) refine(bz []byte, ibcSeq, accSeq uint64, passphrase string) []byte {
var packet ibc.IBCPacket var packet ibc.IBCPacket
if err := c.cdc.UnmarshalBinaryLengthPrefixed(bz, &packet); err != nil { if err := c.cdc.UnmarshalBinaryLengthPrefixed(bz, &packet); err != nil {
panic(err) panic(err)
@ -198,10 +198,10 @@ func (c relayCommander) refine(bz []byte, sequence uint64, passphrase string) []
msg := ibc.IBCReceiveMsg{ msg := ibc.IBCReceiveMsg{
IBCPacket: packet, IBCPacket: packet,
Relayer: c.address, Relayer: c.address,
Sequence: sequence, Sequence: ibcSeq,
} }
txBldr := authtxb.NewTxBuilderFromCLI().WithSequence(sequence).WithCodec(c.cdc) txBldr := authtxb.NewTxBuilderFromCLI().WithSequence(accSeq).WithCodec(c.cdc)
cliCtx := context.NewCLIContext() cliCtx := context.NewCLIContext()
name, err := cliCtx.GetFromName() name, err := cliCtx.GetFromName()