aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <obscuren@obscura.com>2013-12-28 04:20:47 +0800
committerobscuren <obscuren@obscura.com>2013-12-28 04:20:47 +0800
commitd5d2efbaf3c3a84f0084058eacd535d077c363e1 (patch)
treef96fff4f901a42cff27b488b77ee2c7f2b6b8f98
parentb40013ac30006fe5a43abdca574b438cf60db86e (diff)
downloadgo-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar.gz
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar.bz2
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar.lz
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar.xz
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.tar.zst
go-tangerine-d5d2efbaf3c3a84f0084058eacd535d077c363e1.zip
WIP new rlp implementation
-rw-r--r--rlp.go52
1 files changed, 52 insertions, 0 deletions
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()
+}