From 6c9b62d4618136c094b2116be8e0bba545552703 Mon Sep 17 00:00:00 2001 From: Adrian Brink Date: Sun, 18 Mar 2018 14:51:08 +0100 Subject: [PATCH] Add errors to IBC module --- examples/basecoin/app/app_test.go | 7 ++-- types/errors.go | 2 +- x/bank/errors.go | 14 +++---- x/ibc/errors.go | 40 ++++++++++++++++-- x/ibc/types.go | 69 +++++++++++++++++-------------- 5 files changed, 86 insertions(+), 46 deletions(-) diff --git a/examples/basecoin/app/app_test.go b/examples/basecoin/app/app_test.go index de8105cf3..05c6f47fc 100644 --- a/examples/basecoin/app/app_test.go +++ b/examples/basecoin/app/app_test.go @@ -271,7 +271,8 @@ func TestQuizMsg(t *testing.T) { func TestHandler(t *testing.T) { bapp := newBasecoinApp() - chainid := "ibcchain" + sourceChain := "source-chain" + destChain := "dest-chain" vals := []abci.Validator{} baseAcc := auth.BaseAccount{ @@ -298,8 +299,8 @@ func TestHandler(t *testing.T) { SrcAddr: addr1, DestAddr: addr1, Coins: coins, - SrcChain: chainid, - DestChain: chainid, + SrcChain: sourceChain, + DestChain: destChain, } transferMsg := ibc.IBCTransferMsg{ diff --git a/types/errors.go b/types/errors.go index 9d8175e30..d9d5255a2 100644 --- a/types/errors.go +++ b/types/errors.go @@ -17,7 +17,7 @@ func (code CodeType) IsOK() bool { } // ABCI Response Codes -// Base SDK reserves 0 ~ 99. +// Base SDK reserves 0 - 99. const ( CodeOK CodeType = 0 CodeInternal CodeType = 1 diff --git a/x/bank/errors.go b/x/bank/errors.go index b922e166d..f6f43d026 100644 --- a/x/bank/errors.go +++ b/x/bank/errors.go @@ -8,13 +8,13 @@ import ( type CodeType = sdk.CodeType const ( - // Coin errors reserve 100 ~ 199. - CodeInvalidInput CodeType = 101 - CodeInvalidOutput CodeType = 102 - CodeInvalidAddress CodeType = 103 - CodeUnknownAddress CodeType = 104 - CodeInsufficientCoins CodeType = 105 - CodeInvalidCoins CodeType = 106 + // Coin errors reserve 100 - 199. + CodeInvalidInput CodeType = 100 + CodeInvalidOutput CodeType = 101 + CodeInvalidAddress CodeType = 102 + CodeUnknownAddress CodeType = 103 + CodeInsufficientCoins CodeType = 104 + CodeInvalidCoins CodeType = 105 CodeUnknownRequest CodeType = sdk.CodeUnknownRequest ) diff --git a/x/ibc/errors.go b/x/ibc/errors.go index 00762d589..f3c988b59 100644 --- a/x/ibc/errors.go +++ b/x/ibc/errors.go @@ -5,9 +5,43 @@ import ( ) const ( - CodeInvalidSequence sdk.CodeType = 201 + // IBC errors reserve 200 - 299. + CodeInvalidSequence sdk.CodeType = 200 + CodeIdenticalChains sdk.CodeType = 201 + CodeUnknownRequest sdk.CodeType = sdk.CodeUnknownRequest ) -func ErrInvalidSequence() sdk.Error { - return sdk.NewError(CodeInvalidSequence, "") +func codeToDefaultMsg(code sdk.CodeType) string { + switch code { + case CodeInvalidSequence: + return "Invalid IBC packet sequence" + case CodeIdenticalChains: + return "Source and destination chain cannot be identical" + default: + return sdk.CodeToDefaultMsg(code) + } +} + +func ErrInvalidSequence() sdk.Error { + return newError(CodeInvalidSequence, "") +} + +func ErrIdenticalChains() sdk.Error { + return newError(CodeIdenticalChains, "") +} + +// ------------------------- +// Helpers + +func newError(code sdk.CodeType, msg string) sdk.Error { + msg = msgOrDefaultMsg(msg, code) + return sdk.NewError(code, msg) +} + +func msgOrDefaultMsg(msg string, code sdk.CodeType) string { + if msg != "" { + return msg + } else { + return codeToDefaultMsg(code) + } } diff --git a/x/ibc/types.go b/x/ibc/types.go index d450bae09..e590e337f 100644 --- a/x/ibc/types.go +++ b/x/ibc/types.go @@ -37,36 +37,11 @@ func NewIBCPacket(srcAddr sdk.Address, destAddr sdk.Address, coins sdk.Coins, } } -func makeCodec() *wire.Codec { // basecoin/app.MakeCodec() - const ( - msgTypeSend = 0x1 - msgTypeIssue = 0x2 - msgTypeQuiz = 0x3 - msgTypeSetTrend = 0x4 - msgTypeIBCTransfer = 0x5 - msgTypeIBCReceive = 0x6 - ) - - var _ = oldwire.RegisterInterface( - struct{ sdk.Msg }{}, - oldwire.ConcreteType{bank.SendMsg{}, msgTypeSend}, - oldwire.ConcreteType{bank.IssueMsg{}, msgTypeIssue}, - oldwire.ConcreteType{cool.QuizMsg{}, msgTypeQuiz}, - oldwire.ConcreteType{cool.SetTrendMsg{}, msgTypeSetTrend}, - oldwire.ConcreteType{IBCTransferMsg{}, msgTypeIBCTransfer}, - oldwire.ConcreteType{IBCReceiveMsg{}, msgTypeIBCReceive}, - ) - - const accTypeApp = 0x1 - var _ = oldwire.RegisterInterface( - struct{ sdk.Account }{}, - oldwire.ConcreteType{&types.AppAccount{}, accTypeApp}, - ) - - cdc := wire.NewCodec() - - return cdc - +func (ibcp IBCPacket) ValidateBasic() sdk.Error { + if ibcp.SrcChain == ibcp.DestChain { + return ErrIdenticalChains().Trace("") + } + return nil } // ---------------------------------- @@ -95,7 +70,7 @@ func (msg IBCTransferMsg) GetSignBytes() []byte { } func (msg IBCTransferMsg) ValidateBasic() sdk.Error { - return nil + return msg.IBCPacket.ValidateBasic() } // x/bank/tx.go SendMsg.GetSigners() @@ -132,7 +107,7 @@ func (msg IBCReceiveMsg) GetSignBytes() []byte { } func (msg IBCReceiveMsg) ValidateBasic() sdk.Error { - return nil + return msg.IBCPacket.ValidateBasic() } // x/bank/tx.go SendMsg.GetSigners() @@ -146,3 +121,33 @@ func (msg IBCReceiveMsg) GetSigners() []sdk.Address { func newCodec() *wire.Codec { return wire.NewCodec() } + +func makeCodec() *wire.Codec { // basecoin/app.MakeCodec() + const ( + msgTypeSend = 0x1 + msgTypeIssue = 0x2 + msgTypeQuiz = 0x3 + msgTypeSetTrend = 0x4 + msgTypeIBCTransfer = 0x5 + msgTypeIBCReceive = 0x6 + ) + + var _ = oldwire.RegisterInterface( + struct{ sdk.Msg }{}, + oldwire.ConcreteType{bank.SendMsg{}, msgTypeSend}, + oldwire.ConcreteType{bank.IssueMsg{}, msgTypeIssue}, + oldwire.ConcreteType{cool.QuizMsg{}, msgTypeQuiz}, + oldwire.ConcreteType{cool.SetTrendMsg{}, msgTypeSetTrend}, + oldwire.ConcreteType{IBCTransferMsg{}, msgTypeIBCTransfer}, + oldwire.ConcreteType{IBCReceiveMsg{}, msgTypeIBCReceive}, + ) + + const accTypeApp = 0x1 + var _ = oldwire.RegisterInterface( + struct{ sdk.Account }{}, + oldwire.ConcreteType{&types.AppAccount{}, accTypeApp}, + ) + + cdc := wire.NewCodec() + return cdc +}