mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-25 07:45:18 +00:00
add basic msg logic
This commit is contained in:
parent
4732c32ab1
commit
f146d9ae0c
@ -4,8 +4,8 @@ import (
|
|||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
////////
|
// Paychan Type
|
||||||
|
// Used to represent paychan in keeper module and to serialize.
|
||||||
// probably want to convert this to a general purpose "state"
|
// probably want to convert this to a general purpose "state"
|
||||||
struct Paychan {
|
struct Paychan {
|
||||||
sender sdk.Address
|
sender sdk.Address
|
||||||
@ -15,7 +15,7 @@ struct Paychan {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////
|
// Message Types
|
||||||
|
|
||||||
// Message implement the sdk.Msg interface:
|
// Message implement the sdk.Msg interface:
|
||||||
|
|
||||||
@ -38,62 +38,122 @@ struct Paychan {
|
|||||||
// GetSigners() []Address
|
// GetSigners() []Address
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/////////////// CreatePayChan
|
|
||||||
// find a less confusing name
|
// A message to create a payment channel.
|
||||||
type MsgCreate struct {
|
type MsgCreate struct {
|
||||||
// maybe just wrap a paychan struct
|
// maybe just wrap a paychan struct
|
||||||
sender sdk.Address
|
sender sdk.Address
|
||||||
receiver sdk.Address
|
receiver sdk.Address
|
||||||
amount sdk.Coins
|
amount sdk.Coins
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg CreatMsg) NewMsgCreate() MsgCreate {
|
// Create a new message.
|
||||||
return MsgCreate{ }
|
// Called in client code when constructing transaction from cli args to send to the network.
|
||||||
}
|
// maybe just a placeholder for more advanced future functionality?
|
||||||
|
// func (msg CreatMsg) NewMsgCreate(sender sdk.Address, receiver sdk.Address, amount sdk.Coins) MsgCreate {
|
||||||
|
// return MsgCreate{
|
||||||
|
// sender
|
||||||
|
// receiver
|
||||||
|
// amount
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
func (msg MsgCreate) Type() string { return "paychan" }
|
func (msg MsgCreate) Type() string { return "paychan" }
|
||||||
|
|
||||||
func (msg MsgCreate) GetSigners() []sdk.Address {
|
|
||||||
// sender
|
|
||||||
//return []sdk.Address{msg.sender}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msg MsgCreate) GetSignBytes() []byte {
|
func (msg MsgCreate) GetSignBytes() []byte {
|
||||||
|
// TODO create msgCdc in wire.go
|
||||||
|
b, err := msgCdc.MarshalJSON(struct {
|
||||||
|
SenderAddr string `json:"sender_addr"`
|
||||||
|
ReceiverAddr string `json:"receiver_addr"`
|
||||||
|
Amount sdk.Coins `json:"amount"`
|
||||||
|
}{
|
||||||
|
SenderAddr: sdk.MustBech32ifyAcc(msg.sender),
|
||||||
|
ReceiverAddr: sdk.MustBech32ifyAcc(msg.receiver),
|
||||||
|
Amount: msg.amount,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg MsgCreate) ValidateBasic() sdk.Error {
|
func (msg MsgCreate) ValidateBasic() sdk.Error {
|
||||||
|
// TODO implement
|
||||||
// verify msg as much as possible without using external information (such as account balance)
|
// verify msg as much as possible without using external information (such as account balance)
|
||||||
// are all fields present
|
// are all fields present
|
||||||
// are all fields valid
|
// are all fields valid
|
||||||
// maybe check if sender and receiver is different
|
// maybe check if sender and receiver is different
|
||||||
|
|
||||||
|
// maybe add custom errors
|
||||||
|
// learn how the errors work
|
||||||
|
|
||||||
|
// example from bank
|
||||||
|
// if len(in.Address) == 0 {
|
||||||
|
// return sdk.ErrInvalidAddress(in.Address.String())
|
||||||
|
// }
|
||||||
|
// if !in.Coins.IsValid() {
|
||||||
|
// return sdk.ErrInvalidCoins(in.Coins.String())
|
||||||
|
// }
|
||||||
|
// if !in.Coins.IsPositive() {
|
||||||
|
// return sdk.ErrInvalidCoins(in.Coins.String())
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////
|
func (msg MsgCreate) GetSigners() []sdk.Address {
|
||||||
|
// Only sender must sign to create a paychan
|
||||||
|
return []sdk.Address{msg.sender}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// A message to close a payment channel.
|
||||||
type MsgClose struct {
|
type MsgClose struct {
|
||||||
// have to include sender and receiver in msg explicitly (rather than just universal paychanID)
|
// have to include sender and receiver in msg explicitly (rather than just universal paychanID)
|
||||||
// this gives ability to verify signatures with no external information
|
// this gives ability to verify signatures with no external information
|
||||||
sender sdk.Address
|
sender sdk.Address
|
||||||
receiver sdk.Address
|
receiver sdk.Address
|
||||||
id integer
|
id integer
|
||||||
receiverAmount sdk.Coins // amount the receiver should get - sender amount implicit with paychan balance
|
receiverAmount sdk.Coins // amount the receiver should get - sender amount implicit with paychan balance
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg MsgClose) NewMsgClose( args... ) MsgClose {
|
// func (msg MsgClose) NewMsgClose(sender sdk.Address, receiver sdk.Address, id integer, receiverAmount sdk.Coins) MsgClose {
|
||||||
return MsgClose{ args... }
|
// return MsgClose{
|
||||||
}
|
// sender
|
||||||
|
// receiver
|
||||||
|
// id
|
||||||
|
// receiverAmount
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
func (msg MsgClose) Type() string { return "paychan" }
|
func (msg MsgClose) Type() string { return "paychan" }
|
||||||
|
|
||||||
func (msg MsgClose) GetSigners() []sdk.Address {
|
|
||||||
// sender and receiver
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msg MsgClose) GetSignBytes() []byte {
|
func (msg MsgClose) GetSignBytes() []byte {
|
||||||
|
// TODO create msgCdc in wire.go
|
||||||
|
b, err := msgCdc.MarshalJSON(struct {
|
||||||
|
SenderAddr string `json:"sender_addr"`
|
||||||
|
ReceiverAddr string `json:"receiver_addr"`
|
||||||
|
Id integer `json:"id"`
|
||||||
|
ReceiverAmount sdk.Coins `json:"receiver_amount"`
|
||||||
|
}{
|
||||||
|
SenderAddr: sdk.MustBech32ifyAcc(msg.sender),
|
||||||
|
ReceiverAddr: sdk.MustBech32ifyAcc(msg.receiver),
|
||||||
|
Id: msg.id
|
||||||
|
Amount: msg.receiverAmount,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func (msg MsgClose) ValidateBasic() sdk.Error {
|
func (msg MsgClose) ValidateBasic() sdk.Error {
|
||||||
return msg.IBCPacket.ValidateBasic()
|
// TODO implement
|
||||||
|
//return msg.IBCPacket.ValidateBasic()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (msg MsgClose) GetSigners() []sdk.Address {
|
||||||
|
// Both sender and receiver must sign in order to close a channel
|
||||||
|
retutn []sdk.Address{sender, receiver}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user