From d5d2efbaf3c3a84f0084058eacd535d077c363e1 Mon Sep 17 00:00:00 2001 From: obscuren Date: Fri, 27 Dec 2013 21:20:47 +0100 Subject: WIP new rlp implementation --- rlp.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 rlp.go diff --git a/rlp.go b/rlp.go new file mode 100644 index 000000000..2c722cf7a --- /dev/null +++ b/rlp.go @@ -0,0 +1,52 @@ +package main + +import ( + _"fmt" + "bytes" + "math" +) + +func EncodeSlice(slice []interface{}) []byte { + var buff bytes.Buffer + + for _, val := range slice { + switch t := val.(type) { + case []interface{}, []string: + buff.Write(Encode(t)) + } + } + + return buff.Bytes() +} + +func Encode(object interface{}) []byte { + var buff bytes.Buffer + + switch t := object.(type) { + case string: + if len(t) < 56 { + buff.WriteString(string(len(t) + 64) + t) + } else { + + } + case uint32, uint64: + var num uint64 + if _num, ok := t.(uint64); ok { + num = _num + } else if _num, ok := t.(uint32); ok { + num = uint64(_num) + } + + if num >= 0 && num < 24 { + buff.WriteString(string(num)) + } else if num <= uint64(math.Pow(2, 256)) { + } + case []byte: + // Cast the byte slice to a string + buff.Write(Encode(string(t))) + case []interface{}: + buff.Write(EncodeSlice(t)) + } + + return buff.Bytes() +} -- cgit v1.2.3