aboutsummaryrefslogtreecommitdiffstats
path: root/rlp.go
diff options
context:
space:
mode:
Diffstat (limited to 'rlp.go')
-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()
+}