112 lines
1.8 KiB
Markdown
112 lines
1.8 KiB
Markdown
# IBC Spec
|
|
|
|
## MVP3
|
|
|
|
`IBCOpenMsg` is added to open the connection between two chains. Also, `IBCUpdateMsg` is added, making it able to prove the header.
|
|
|
|
### IBC Module
|
|
|
|
|
|
// Implements sdk.Msg
|
|
type IBCTransferMsg struct {
|
|
Packet
|
|
}
|
|
|
|
// Implements sdk.Msg
|
|
type IBCReceiveMsg struct {
|
|
Packet
|
|
}
|
|
|
|
// Internal API
|
|
|
|
|
|
|
|
```golang
|
|
// User facing API
|
|
|
|
type Packet struct {
|
|
Data Payload
|
|
SrcChain string
|
|
DestChain string
|
|
}
|
|
|
|
type Payload interface {
|
|
Type() string
|
|
ValidateBasic() sdk.Error
|
|
}
|
|
|
|
type TransferPayload struct {
|
|
SrcAddr sdk.Address
|
|
DestAddr sdk.Address
|
|
Coins sdk.Coins
|
|
}
|
|
|
|
// Implements sdk.Msg
|
|
type IBCTransferMsg struct {
|
|
Packet
|
|
}
|
|
|
|
// Implements sdk.Msg
|
|
type IBCReceiveMsg struct {
|
|
Packet
|
|
Proof iavl.Proof
|
|
FromChainID string
|
|
FromChainHeight uint64
|
|
}
|
|
|
|
type RootOfTrust struct {
|
|
//
|
|
}
|
|
|
|
// Implements sdk.Msg
|
|
type IBCOpenMsg struct {
|
|
ROT RootOfTrust
|
|
Chain string
|
|
}
|
|
|
|
// Implements sdk.Msg
|
|
type IBCUpdateMsg struct {
|
|
Header tm.Header
|
|
Commit tm.Commit
|
|
}
|
|
|
|
// Internal API
|
|
|
|
type rule struct {
|
|
r string
|
|
f func(sdk.Context, IBCPacket) sdk.Result
|
|
}
|
|
|
|
type Dispatcher struct {
|
|
rules []rule
|
|
}
|
|
|
|
func NewHandler(dispatcher Dispatcher, ibcm IBCMapper) sdk.Handler
|
|
|
|
type IBCMapper struct {
|
|
ibcKey sdk.StoreKey // IngressKey / EgressKey / HeaderKey => Value
|
|
// ChannelID => last income msg's sequence
|
|
// (ChannelID, Msg index) => length / indexed msg
|
|
// ChannelID => last known header
|
|
}
|
|
|
|
type IngressKey struct {
|
|
ChannelID uint64
|
|
}
|
|
|
|
type EgressKey struct {
|
|
ChannelID uint64
|
|
Index int64
|
|
}
|
|
|
|
type HeaderKey struct {
|
|
ChannelID uint64
|
|
}
|
|
|
|
// Used by other modules
|
|
func (ibcm IBCMapper) PushPacket(ctx sdk.Context, dest string, payload Payload)
|
|
|
|
```
|
|
|
|
|