bug fixes (TCP + uint256) and started core part (#14)
* Fixed TCP read + Uint256 reversed array + started on some core pieces * Disabled some debug output + muted test * 0.5.0
This commit is contained in:
parent
5aed624f1d
commit
628656483a
27 changed files with 824 additions and 337 deletions
82
pkg/util/uint256.go
Normal file
82
pkg/util/uint256.go
Normal file
|
@ -0,0 +1,82 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const uint256Size = 32
|
||||
|
||||
// Uint256 is a 32 byte long unsigned integer.
|
||||
type Uint256 [uint256Size]uint8
|
||||
|
||||
// Uint256DecodeFromString returns an Uint256 from a (hex) string.
|
||||
func Uint256DecodeFromString(s string) (Uint256, error) {
|
||||
var val Uint256
|
||||
|
||||
if len(s) != uint256Size*2 {
|
||||
return val, fmt.Errorf("expected string size of %d got %d", uint256Size*2, len(s))
|
||||
}
|
||||
|
||||
b, err := hex.DecodeString(s)
|
||||
if err != nil {
|
||||
return val, err
|
||||
}
|
||||
|
||||
b = ReverseByteSlice(b)
|
||||
|
||||
return Uint256DecodeFromBytes(b)
|
||||
}
|
||||
|
||||
// Uint256DecodeFromBytes return an Uint256 from a byte slice.
|
||||
func Uint256DecodeFromBytes(b []byte) (Uint256, error) {
|
||||
var val Uint256
|
||||
|
||||
if len(b) != uint256Size {
|
||||
return val, fmt.Errorf("expected []byte of size %d got %d", uint256Size, len(b))
|
||||
}
|
||||
|
||||
for i := 0; i < uint256Size; i++ {
|
||||
val[i] = b[i]
|
||||
}
|
||||
|
||||
return val, nil
|
||||
}
|
||||
|
||||
func ReverseByteSlice(b []byte) []byte {
|
||||
dest := make([]byte, len(b))
|
||||
|
||||
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
|
||||
dest[i], dest[j] = b[j], b[i]
|
||||
}
|
||||
|
||||
return dest
|
||||
}
|
||||
|
||||
// ToSlice returns a byte slice of u.
|
||||
func (u Uint256) ToSlice() []byte {
|
||||
b := make([]byte, uint256Size)
|
||||
for i := 0; i < uint256Size; i++ {
|
||||
b[i] = byte(u[i])
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// ToSliceReverse returns a reversed byte slice of u.
|
||||
func (u Uint256) ToSliceReverse() []byte {
|
||||
b := make([]byte, uint256Size)
|
||||
for i, j := 0, uint256Size-1; i < j; i, j = i+1, j-1 {
|
||||
b[i], b[j] = byte(u[j]), byte(u[i])
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// Equals returns true if both Uint256 values are the same.
|
||||
func (u Uint256) Equals(other Uint256) bool {
|
||||
return u.String() == other.String()
|
||||
}
|
||||
|
||||
// String implements the stringer interface.
|
||||
func (u Uint256) String() string {
|
||||
return hex.EncodeToString(u.ToSliceReverse())
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue