OSDN Git Service

feat: add processIssuing (#152)
[bytom/vapor.git] / vendor / github.com / bytom / protocol / vm / pushdata.go
diff --git a/vendor/github.com/bytom/protocol/vm/pushdata.go b/vendor/github.com/bytom/protocol/vm/pushdata.go
new file mode 100644 (file)
index 0000000..0edf329
--- /dev/null
@@ -0,0 +1,64 @@
+package vm
+
+import "encoding/binary"
+
+func opFalse(vm *virtualMachine) error {
+       err := vm.applyCost(1)
+       if err != nil {
+               return err
+       }
+       return vm.pushBool(false, false)
+}
+
+func opPushdata(vm *virtualMachine) error {
+       err := vm.applyCost(1)
+       if err != nil {
+               return err
+       }
+       d := make([]byte, len(vm.data))
+       copy(d, vm.data)
+       return vm.push(d, false)
+}
+
+func op1Negate(vm *virtualMachine) error {
+       err := vm.applyCost(1)
+       if err != nil {
+               return err
+       }
+       return vm.pushInt64(-1, false)
+}
+
+func opNop(vm *virtualMachine) error {
+       return vm.applyCost(1)
+}
+
+func PushdataBytes(in []byte) []byte {
+       l := len(in)
+       if l == 0 {
+               return []byte{byte(OP_0)}
+       }
+       if l <= 75 {
+               return append([]byte{byte(OP_DATA_1) + uint8(l) - 1}, in...)
+       }
+       if l < 1<<8 {
+               return append([]byte{byte(OP_PUSHDATA1), uint8(l)}, in...)
+       }
+       if l < 1<<16 {
+               var b [2]byte
+               binary.LittleEndian.PutUint16(b[:], uint16(l))
+               return append([]byte{byte(OP_PUSHDATA2), b[0], b[1]}, in...)
+       }
+       var b [4]byte
+       binary.LittleEndian.PutUint32(b[:], uint32(l))
+       return append([]byte{byte(OP_PUSHDATA4), b[0], b[1], b[2], b[3]}, in...)
+}
+
+func PushdataInt64(n int64) []byte {
+       if n == 0 {
+               return []byte{byte(OP_0)}
+       }
+       if n >= 1 && n <= 16 {
+               return []byte{uint8(OP_1) + uint8(n) - 1}
+       }
+       return PushdataBytes(Int64Bytes(n))
+}