package ibc import ( sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" ) // ------------------------------ // IBCPacket // nolint - TODO rename to Packet as IBCPacket stutters (golint) // IBCPacket defines a piece of data that can be send between two separate // blockchains. type IBCPacket struct { SrcAddr sdk.Address DestAddr sdk.Address Coins sdk.Coins SrcChain string DestChain string } func NewIBCPacket(srcAddr sdk.Address, destAddr sdk.Address, coins sdk.Coins, srcChain string, destChain string) IBCPacket { return IBCPacket{ SrcAddr: srcAddr, DestAddr: destAddr, Coins: coins, SrcChain: srcChain, DestChain: destChain, } } // validator the ibc packey func (ibcp IBCPacket) ValidateBasic() sdk.Error { if ibcp.SrcChain == ibcp.DestChain { return ErrIdenticalChains(DefaultCodespace).Trace("") } if !ibcp.Coins.IsValid() { return sdk.ErrInvalidCoins("") } return nil } // ---------------------------------- // IBCTransferMsg // nolint - TODO rename to TransferMsg as folks will reference with ibc.TransferMsg // IBCTransferMsg defines how another module can send an IBCPacket. type IBCTransferMsg struct { IBCPacket } // nolint func (msg IBCTransferMsg) Type() string { return "ibc" } func (msg IBCTransferMsg) Get(key interface{}) interface{} { return nil } // x/bank/tx.go MsgSend.GetSigners() func (msg IBCTransferMsg) GetSigners() []sdk.Address { return []sdk.Address{msg.SrcAddr} } // get the sign bytes for ibc transfer message func (msg IBCTransferMsg) GetSignBytes() []byte { cdc := wire.NewCodec() bz, err := cdc.MarshalBinary(msg) if err != nil { panic(err) } return bz } // validate ibc transfer message func (msg IBCTransferMsg) ValidateBasic() sdk.Error { return msg.IBCPacket.ValidateBasic() } // ---------------------------------- // IBCReceiveMsg // nolint - TODO rename to ReceiveMsg as folks will reference with ibc.ReceiveMsg // IBCReceiveMsg defines the message that a relayer uses to post an IBCPacket // to the destination chain. type IBCReceiveMsg struct { IBCPacket Relayer sdk.Address Sequence int64 } // nolint func (msg IBCReceiveMsg) Type() string { return "ibc" } func (msg IBCReceiveMsg) Get(key interface{}) interface{} { return nil } func (msg IBCReceiveMsg) ValidateBasic() sdk.Error { return msg.IBCPacket.ValidateBasic() } // x/bank/tx.go MsgSend.GetSigners() func (msg IBCReceiveMsg) GetSigners() []sdk.Address { return []sdk.Address{msg.Relayer} } // get the sign bytes for ibc receive message func (msg IBCReceiveMsg) GetSignBytes() []byte { cdc := wire.NewCodec() bz, err := cdc.MarshalBinary(msg) if err != nil { panic(err) } return bz }