Changed Tx serialization to return bytes instead of a string

pull/2/head
obscuren 11 years ago
parent 8301d154ae
commit dca9ee79b3
  1. 8
      serialization.go
  2. 16
      transaction.go

@ -28,6 +28,10 @@ func NumToVarInt(x int) string {
func RlpEncode(object interface{}) string { func RlpEncode(object interface{}) string {
if str, ok := object.(string); ok { if str, ok := object.(string); ok {
return "\x00" + NumToVarInt(len(str)) + str return "\x00" + NumToVarInt(len(str)) + str
} else if num, ok := object.(uint32); ok {
return RlpEncode(Uitoa(num))
} else if byt, ok := object.([]byte); ok {
return RlpEncode(string(byt))
} else if slice, ok := object.([]interface{}); ok { } else if slice, ok := object.([]interface{}); ok {
var buffer bytes.Buffer var buffer bytes.Buffer
for _, val := range slice { for _, val := range slice {
@ -53,7 +57,7 @@ func RlpEncode(object interface{}) string {
} }
type RlpSerializer interface { type RlpSerializer interface {
MarshalRls() []byte MarshalRlp() []byte
UnmarshalRls([]byte) UnmarshalRlp([]byte)
} }

@ -6,7 +6,6 @@ import (
"encoding/hex" "encoding/hex"
"crypto/sha256" "crypto/sha256"
_ "bytes" _ "bytes"
"strconv"
) )
/* /*
@ -35,14 +34,17 @@ var Period3Reward *big.Int = new(big.Int)
var Period4Reward *big.Int = new(big.Int) var Period4Reward *big.Int = new(big.Int)
type Transaction struct { type Transaction struct {
RlpSerializer
sender string sender string
recipient uint32 recipient uint32
value uint32 value uint32
fee uint32 fee uint32
data []string data []string
memory []int memory []int
signature string
// To be removed
signature string
addr string addr string
} }
@ -61,18 +63,14 @@ func NewTransaction(to uint32, value uint32, data []string) *Transaction {
tx.data[i] = instr tx.data[i] = instr
} }
b:= []byte(tx.Serialize()) b:= []byte(tx.MarshalRlp())
hash := sha256.Sum256(b) hash := sha256.Sum256(b)
tx.addr = hex.EncodeToString(hash[0:19]) tx.addr = hex.EncodeToString(hash[0:19])
return &tx return &tx
} }
func Uitoa(i uint32) string { func (tx *Transaction) MarshalRlp() []byte {
return strconv.FormatUint(uint64(i), 10)
}
func (tx *Transaction) Serialize() string {
// Prepare the transaction for serialization // Prepare the transaction for serialization
preEnc := []interface{}{ preEnc := []interface{}{
"0", // TODO last Tx "0", // TODO last Tx
@ -84,7 +82,7 @@ func (tx *Transaction) Serialize() string {
tx.data, tx.data,
} }
return RlpEncode(preEnc) return []byte(RlpEncode(preEnc))
} }
func InitFees() { func InitFees() {

Loading…
Cancel
Save