gossip: add interim Transaction deserializer
This commit is contained in:
parent
52f8bf1a1b
commit
9a94d4e982
|
@ -5,12 +5,111 @@ import (
|
||||||
"github.com/novifinancial/serde-reflection/serde-generate/runtime/golang/serde"
|
"github.com/novifinancial/serde-reflection/serde-generate/runtime/golang/serde"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO write codegen for this
|
||||||
|
|
||||||
type Transaction solana.Transaction
|
type Transaction solana.Transaction
|
||||||
|
|
||||||
func DeserializeTransaction(deserializer serde.Deserializer) (Transaction, error) {
|
func DeserializeTransaction(deserializer serde.Deserializer) (Transaction, error) {
|
||||||
panic("not implemented")
|
var obj Transaction
|
||||||
|
numSigs, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
for i := uint8(0); i < numSigs; i++ {
|
||||||
|
sig, err := DeserializeSignature(deserializer)
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Signatures = append(obj.Signatures, solana.Signature(sig))
|
||||||
|
}
|
||||||
|
obj.Message, err = DeserializeTxMessage(deserializer)
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
return obj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (obj *Transaction) Serialize(serializer serde.Serializer) error {
|
func (obj *Transaction) Serialize(serializer serde.Serializer) error {
|
||||||
panic("not implemented")
|
panic("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeserializeTxMessage(deserializer serde.Deserializer) (solana.Message, error) {
|
||||||
|
var obj solana.Message
|
||||||
|
numRequiredSigs, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Header.NumRequiredSignatures = numRequiredSigs
|
||||||
|
numReadonlySignedAccs, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Header.NumReadonlySignedAccounts = numReadonlySignedAccs
|
||||||
|
numReadonlyUnsignedAccs, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Header.NumReadonlyUnsignedAccounts = numReadonlyUnsignedAccs
|
||||||
|
numAccountKeys, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
for i := uint8(0); i < numAccountKeys; i++ {
|
||||||
|
address, err := DeserializePubkey(deserializer)
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.AccountKeys = append(obj.AccountKeys, solana.PublicKey(address))
|
||||||
|
}
|
||||||
|
recentBlockHash, err := DeserializeHash(deserializer)
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.RecentBlockhash = solana.Hash(recentBlockHash)
|
||||||
|
numInsns, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
for i := uint8(0); i < numInsns; i++ {
|
||||||
|
insn, err := DeserializeInstruction(deserializer)
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Instructions = append(obj.Instructions, insn)
|
||||||
|
}
|
||||||
|
return obj, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeserializeInstruction(deserializer serde.Deserializer) (solana.CompiledInstruction, error) {
|
||||||
|
var obj solana.CompiledInstruction
|
||||||
|
programIdIdx, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.ProgramIDIndex = uint16(programIdIdx)
|
||||||
|
numAccs, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
for i := uint8(0); i < numAccs; i++ {
|
||||||
|
idx, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Accounts = append(obj.Accounts, uint16(idx))
|
||||||
|
}
|
||||||
|
// This is brain-dead
|
||||||
|
dataLen, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Data = make([]byte, dataLen)
|
||||||
|
for i := uint8(0); i < dataLen; i++ {
|
||||||
|
_byte, err := deserializer.DeserializeU8()
|
||||||
|
if err != nil {
|
||||||
|
return obj, err
|
||||||
|
}
|
||||||
|
obj.Data[i] = _byte
|
||||||
|
}
|
||||||
|
return obj, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue