diff --git a/pkg/core/transaction/publish.go b/pkg/core/transaction/publish.go index c62d91661..9dd896e89 100644 --- a/pkg/core/transaction/publish.go +++ b/pkg/core/transaction/publish.go @@ -56,7 +56,22 @@ func (tx *PublishTX) DecodeBinary(r io.Reader) error { // EncodeBinary implements the Payload interface. func (tx *PublishTX) EncodeBinary(w io.Writer) error { - return nil + bw := util.BinWriter{W: w} + bw.WriteBytes(tx.Script) + bw.WriteVarUint(uint64(len(tx.ParamList))) + for _, param := range tx.ParamList { + bw.WriteLE(uint8(param)) + } + bw.WriteLE(uint8(tx.ReturnType)) + if tx.Version >= 1 { + bw.WriteLE(tx.NeedStorage) + } + bw.WriteString(tx.Name) + bw.WriteString(tx.CodeVersion) + bw.WriteString(tx.Author) + bw.WriteString(tx.Email) + bw.WriteString(tx.Description) + return bw.Err } func (tx *PublishTX) Size() int { diff --git a/pkg/core/transaction/transaction_test.go b/pkg/core/transaction/transaction_test.go index 4fd748349..3bfeb94da 100644 --- a/pkg/core/transaction/transaction_test.go +++ b/pkg/core/transaction/transaction_test.go @@ -144,4 +144,9 @@ func TestDecodePublishTX(t *testing.T) { assert.Equal(t, expectedTX.Data, actualTX.Data) assert.Equal(t, expectedTX.Type, actualTX.Type) assert.Equal(t, expectedTX.Version, actualTX.Version) + + buf := new(bytes.Buffer) + err := actualTX.EncodeBinary(buf) + assert.Nil(t, err) + assert.Equal(t, rawPublishTX, hex.EncodeToString(buf.Bytes())) }