--- /dev/null
+package vm
+
+import "encoding/binary"
+
+var trueBytes = []byte{1}
+
+func BoolBytes(b bool) (result []byte) {
+ if b {
+ return trueBytes
+ }
+ return []byte{}
+}
+
+func AsBool(bytes []byte) bool {
+ for _, b := range bytes {
+ if b != 0 {
+ return true
+ }
+ }
+ return false
+}
+
+func Int64Bytes(n int64) []byte {
+ if n == 0 {
+ return []byte{}
+ }
+ res := make([]byte, 8)
+ // converting int64 to uint64 is a safe operation that
+ // preserves all data
+ binary.LittleEndian.PutUint64(res, uint64(n))
+ for len(res) > 0 && res[len(res)-1] == 0 {
+ res = res[:len(res)-1]
+ }
+ return res
+}
+
+func AsInt64(b []byte) (int64, error) {
+ if len(b) == 0 {
+ return 0, nil
+ }
+ if len(b) > 8 {
+ return 0, ErrBadValue
+ }
+
+ var padded [8]byte
+ copy(padded[:], b)
+
+ res := binary.LittleEndian.Uint64(padded[:])
+ // converting uint64 to int64 is a safe operation that
+ // preserves all data
+ return int64(res), nil
+}