mirror of https://github.com/status-im/op-geth.git
WIP new rlp implementation
This commit is contained in:
parent
b40013ac30
commit
d5d2efbaf3
|
@ -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()
|
||||
}
|
Loading…
Reference in New Issue