You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.4 KiB
105 lines
2.4 KiB
package api
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"git.wownero.com/onionltd/monero-multisig-broker/messagelog"
|
|
)
|
|
|
|
type Message struct {
|
|
RPCName string `json:"rpc_name"`
|
|
Sender string `json:"sender"`
|
|
MultisigInfo string `json:"multisig_info"`
|
|
MultisigTxSet string `json:"multisig_txset"`
|
|
Address string `json:"address"`
|
|
TxDataHex string `json:"tx_data_hex"`
|
|
TxHashList []string `json:"tx_hash_list"`
|
|
}
|
|
|
|
const PrepareMultisig = "prepare_multisig"
|
|
|
|
func NewPrepareMultisig(multisigInfo string) Message {
|
|
return Message{
|
|
RPCName: PrepareMultisig,
|
|
MultisigInfo: multisigInfo,
|
|
}
|
|
}
|
|
|
|
const MakeMultisig = "make_multisig"
|
|
|
|
func NewMakeMultisig(multisigInfo string) Message {
|
|
return Message{
|
|
RPCName: MakeMultisig,
|
|
MultisigInfo: multisigInfo,
|
|
}
|
|
}
|
|
|
|
const FinalizeMultisig = "finalize_multisig"
|
|
|
|
func NewFinalizeMultisig(address string) Message {
|
|
return Message{
|
|
RPCName: FinalizeMultisig,
|
|
Address: address,
|
|
}
|
|
}
|
|
|
|
const Transfer = "transfer"
|
|
|
|
func NewTransferMessage(multisigTxSet string) Message {
|
|
return Message{
|
|
RPCName: Transfer,
|
|
MultisigTxSet: multisigTxSet,
|
|
}
|
|
}
|
|
|
|
func convertToLogMessage(m Message) messagelog.Message {
|
|
return messagelog.Message{
|
|
ContentType: "application/json",
|
|
Content: m,
|
|
}
|
|
}
|
|
|
|
func convertFromLogMessage(m messagelog.Message) (Message, error) {
|
|
content, ok := m.Content.(map[string]interface{})
|
|
if !ok {
|
|
return Message{}, errors.New("content is not an object")
|
|
}
|
|
|
|
messageType, ok := content["rpc_name"].(string)
|
|
if !ok {
|
|
return Message{}, errors.New("unexpected object format")
|
|
}
|
|
|
|
var message Message
|
|
|
|
switch messageType {
|
|
case PrepareMultisig:
|
|
msInfo, ok := content["multisig_info"].(string)
|
|
if !ok {
|
|
return Message{}, fmt.Errorf("missing `%s` for message type %s", "multisig_info", PrepareMultisig)
|
|
}
|
|
message = NewPrepareMultisig(msInfo)
|
|
|
|
case MakeMultisig:
|
|
msInfo, ok := content["multisig_info"].(string)
|
|
if !ok {
|
|
return Message{}, fmt.Errorf("missing `%s` for message type %s", "multisig_info", MakeMultisig)
|
|
}
|
|
message = NewMakeMultisig(msInfo)
|
|
|
|
case FinalizeMultisig:
|
|
address, ok := content["address"].(string)
|
|
if !ok {
|
|
return Message{}, fmt.Errorf("missing `%s` for message type %s", "address", FinalizeMultisig)
|
|
}
|
|
message = NewFinalizeMultisig(address)
|
|
|
|
default:
|
|
return Message{}, errors.New("unknown message type")
|
|
}
|
|
|
|
message.Sender = m.Sender
|
|
|
|
return message, nil
|
|
}
|