Skip to content

Commit

Permalink
better support of transaction with CompressionZlib
Browse files Browse the repository at this point in the history
  • Loading branch information
billettc committed Dec 3, 2018
1 parent 7431261 commit 59875dd
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 7 deletions.
15 changes: 13 additions & 2 deletions p2ptypes.go
Expand Up @@ -294,8 +294,14 @@ func (t *TransactionWithID) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &packed); err != nil {
return err
}

id, err := packed.ID()
if err != nil {
return fmt.Errorf("get id: %s", err)
}

*t = TransactionWithID{
ID: packed.ID(),
ID: id,
Packed: &packed,
}

Expand Down Expand Up @@ -349,8 +355,13 @@ func (t *TransactionWithID) UnmarshalJSON(data []byte) error {
return err
}

id, err := packed.ID()
if err != nil {
return fmt.Errorf("get id: %s", err)
}

*t = TransactionWithID{
ID: packed.ID(),
ID: id,
Packed: &packed,
}
default:
Expand Down
6 changes: 5 additions & 1 deletion responses_test.go
Expand Up @@ -53,7 +53,11 @@ func TestUnmarshalBlockResp(t *testing.T) {
assert.Equal(t, TransactionStatusExecuted, receipt.Status)
assert.Equal(t, CompressionNone, receipt.Transaction.Packed.Compression)
assert.Equal(t, HexBytes{}, receipt.Transaction.Packed.PackedContextFreeData)
assert.Equal(t, hexToChecksum256("7074b6caaac4dfe1d19903a41b88a53b595e963bab02139a508785eba6e11ba5"), receipt.Transaction.Packed.ID())

id, err := receipt.Transaction.Packed.ID()
assert.NoError(t, err)

assert.Equal(t, hexToChecksum256("7074b6caaac4dfe1d19903a41b88a53b595e963bab02139a508785eba6e11ba5"), id)
assert.Len(t, receipt.Transaction.Packed.Signatures, 1)
assert.Equal(t, "SIG_K1_KXsd17mt6qf8JAHvRiVLRH93tMoQrkC69qhoS2suG8N3YYF54LTVkSwnh4t4wscDJXPnSAdbJZpSfHjJjSurDmwGCAxvTs", receipt.Transaction.Packed.Signatures[0].String())

Expand Down
24 changes: 20 additions & 4 deletions transaction.go
Expand Up @@ -144,7 +144,6 @@ func (s *SignedTransaction) PackedTransactionAndCFD() ([]byte, []byte, error) {
return rawtrx, rawcfd, nil
}


func (s *SignedTransaction) Pack(compression CompressionType) (*PackedTransaction, error) {
rawtrx, rawcfd, err := s.PackedTransactionAndCFD()
if err != nil {
Expand Down Expand Up @@ -196,10 +195,27 @@ type PackedTransaction struct {
PackedTransaction HexBytes `json:"packed_trx"`
}

func (p *PackedTransaction) ID() Checksum256 {
func (p *PackedTransaction) ID() (Checksum256, error) {
var txReader io.Reader
txReader = bytes.NewBuffer(p.PackedTransaction)

switch p.Compression {
case CompressionZlib:
var err error
txReader, err = zlib.NewReader(txReader)
if err != nil {
return nil, fmt.Errorf("getting zlib reader, %v", err)
}
}

data, err := ioutil.ReadAll(txReader)
if err != nil {
return nil, fmt.Errorf("unpack read all, %s", err)
}

h := sha256.New()
_, _ = h.Write(p.PackedTransaction)
return h.Sum(nil)
_, _ = h.Write(data)
return h.Sum(nil), nil
}

// Unpack decodes the bytestream of the transaction, and attempts to
Expand Down

0 comments on commit 59875dd

Please sign in to comment.