mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 06:37:26 +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"          
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
////////
 | 
			
		||||
 | 
			
		||||
// Paychan Type
 | 
			
		||||
// Used to represent paychan in keeper module and to serialize.
 | 
			
		||||
// probably want to convert this to a general purpose "state"
 | 
			
		||||
struct Paychan {
 | 
			
		||||
	sender sdk.Address
 | 
			
		||||
@ -15,7 +15,7 @@ struct Paychan {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////
 | 
			
		||||
// Message Types
 | 
			
		||||
 | 
			
		||||
// Message implement the sdk.Msg interface:
 | 
			
		||||
 | 
			
		||||
@ -38,62 +38,122 @@ struct Paychan {
 | 
			
		||||
// 	GetSigners() []Address
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
/////////////// CreatePayChan
 | 
			
		||||
// find a less confusing name
 | 
			
		||||
 | 
			
		||||
// A message to create a payment channel.
 | 
			
		||||
type MsgCreate struct {
 | 
			
		||||
	// maybe just wrap a paychan struct
 | 
			
		||||
	sender sdk.Address
 | 
			
		||||
	sender   sdk.Address
 | 
			
		||||
	receiver sdk.Address
 | 
			
		||||
	amount sdk.Coins
 | 
			
		||||
	amount   sdk.Coins
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msg CreatMsg) NewMsgCreate() MsgCreate {
 | 
			
		||||
	return MsgCreate{ }
 | 
			
		||||
}
 | 
			
		||||
// Create a new message.
 | 
			
		||||
// 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) GetSigners() []sdk.Address {
 | 
			
		||||
	// sender
 | 
			
		||||
	//return []sdk.Address{msg.sender}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 {
 | 
			
		||||
	// TODO implement
 | 
			
		||||
	// verify msg as much as possible without using external information (such as account balance)
 | 
			
		||||
	// are all fields present
 | 
			
		||||
	// are all fields valid
 | 
			
		||||
	// 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 {
 | 
			
		||||
	// have to include sender and receiver in msg explicitly (rather than just universal paychanID)
 | 
			
		||||
	//  this gives ability to verify signatures with no external information
 | 
			
		||||
	sender sdk.Address
 | 
			
		||||
	receiver sdk.Address
 | 
			
		||||
	id integer
 | 
			
		||||
	sender         sdk.Address
 | 
			
		||||
	receiver       sdk.Address
 | 
			
		||||
	id             integer
 | 
			
		||||
	receiverAmount sdk.Coins // amount the receiver should get - sender amount implicit with paychan balance
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (msg MsgClose) NewMsgClose( args... ) MsgClose {
 | 
			
		||||
	return MsgClose{ args... }
 | 
			
		||||
}
 | 
			
		||||
// func (msg MsgClose) NewMsgClose(sender sdk.Address, receiver sdk.Address, id integer, receiverAmount sdk.Coins) MsgClose {
 | 
			
		||||
// 	return MsgClose{
 | 
			
		||||
// 		sender
 | 
			
		||||
// 		receiver
 | 
			
		||||
// 		id
 | 
			
		||||
// 		receiverAmount
 | 
			
		||||
// 	}
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
func (msg MsgClose) Type() string { return "paychan" }
 | 
			
		||||
 | 
			
		||||
func (msg MsgClose) GetSigners() []sdk.Address {
 | 
			
		||||
	// sender and receiver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 {
 | 
			
		||||
	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