mirror of
https://github.com/logos-storage/logos-storage-nim-validator.git
synced 2026-01-04 14:33:12 +00:00
serialize signed transaction
This commit is contained in:
parent
1c538eb74f
commit
8bb117cd40
@ -1,7 +1,9 @@
|
||||
import ./signatures/identity
|
||||
import ./signatures/signing
|
||||
import ./signatures/signed
|
||||
import ./signatures/serialization
|
||||
|
||||
export identity
|
||||
export signing
|
||||
export signed
|
||||
export serialization
|
||||
|
||||
13
codexvalidator/signatures/serialization.nim
Normal file
13
codexvalidator/signatures/serialization.nim
Normal file
@ -0,0 +1,13 @@
|
||||
import pkg/blscurve
|
||||
import ./identity
|
||||
import ./signing
|
||||
|
||||
func toBytes*(identifier: Identifier): seq[byte] =
|
||||
var bytes: array[48, byte]
|
||||
doAssert blscurve.serialize(bytes, identifier)
|
||||
@bytes
|
||||
|
||||
func toBytes*(signature: Signature): seq[byte] =
|
||||
var bytes: array[96, byte]
|
||||
doAssert blscurve.serialize(bytes, signature)
|
||||
@bytes
|
||||
@ -1,5 +1,6 @@
|
||||
import pkg/protobuf_serialization
|
||||
import ../basics
|
||||
import ../signatures
|
||||
import ./transaction
|
||||
|
||||
export protobuf_serialization
|
||||
@ -63,3 +64,21 @@ func init*(_: type TransactionMessage, transaction: Transaction): TransactionMes
|
||||
|
||||
func toBytes*(transaction: Transaction): seq[byte] =
|
||||
ProtoBuf.encode(TransactionMessage.init(transaction))
|
||||
|
||||
type SignedTransactionMessage* {.proto3.} = object
|
||||
transaction* {.fieldNumber: 1.}: TransactionMessage
|
||||
signer* {.fieldNumber: 2.}: seq[byte]
|
||||
signature* {.fieldNumber: 3.}: seq[byte]
|
||||
|
||||
func init*(
|
||||
_: type SignedTransactionMessage,
|
||||
signed: Signed[Transaction]
|
||||
): SignedTransactionMessage =
|
||||
SignedTransactionMessage(
|
||||
transaction: TransactionMessage.init(signed.value),
|
||||
signer: signed.signer.toBytes(),
|
||||
signature: signed.signature.toBytes()
|
||||
)
|
||||
|
||||
func toBytes*(signed: Signed[Transaction]): seq[byte] =
|
||||
Protobuf.encode(SignedTransactionMessage.init(signed))
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import ../basics
|
||||
import codexvalidator/transaction
|
||||
import codexvalidator/transaction/serialization
|
||||
import codexvalidator/signatures
|
||||
|
||||
suite "Transaction serialization":
|
||||
|
||||
@ -40,3 +41,13 @@ suite "Transaction serialization":
|
||||
check protobuf.proof.b.y.imag == transaction.proof.b.y.imag.toBytesBE()
|
||||
check protobuf.proof.c.x == transaction.proof.c.x.toBytesBE()
|
||||
check protobuf.proof.c.y == transaction.proof.c.y.toBytesBE()
|
||||
|
||||
test "serializes a signed transaction with protobuf":
|
||||
let transaction = Transaction.example
|
||||
let identity = Identity.example
|
||||
let signed = Signed.sign(identity, transaction)
|
||||
let serialized = signed.toBytes()
|
||||
let protobuf = Protobuf.decode(serialized, SignedTransactionMessage)
|
||||
check protobuf.transaction == TransactionMessage.init(transaction)
|
||||
check protobuf.signer == signed.signer.toBytes()
|
||||
check protobuf.signature == signed.signature.toBytes()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user