• R/O
  • HTTP
  • SSH
  • HTTPS

bytom: Commit

Official Go implementation of the Bytom protocol


Commit MetaInfo

Revisionb4da11c495bc48b3026055e0bbc286f5a3615829 (tree)
Zeit2021-06-21 21:15:49
Autorpaladz <colt@Colt...>
Commiterpaladz

Log Message

edit for elegant

Ändern Zusammenfassung

Diff

--- a/api/assets.go
+++ b/api/assets.go
@@ -17,7 +17,7 @@ func (a *API) createAsset(ctx context.Context, ins struct {
1717 RootXPubs []chainkd.XPub `json:"root_xpubs"`
1818 Quorum int `json:"quorum"`
1919 Definition map[string]interface{} `json:"definition"`
20- LimitHeight int64 `json:"limit_height"`
20+ LimitHeight uint64 `json:"limit_height"`
2121 IssuanceProgram chainjson.HexBytes `json:"issuance_program"`
2222 }) Response {
2323 ass, err := a.wallet.AssetReg.Define(
--- a/asset/asset.go
+++ b/asset/asset.go
@@ -126,7 +126,7 @@ func (reg *Registry) getNextAssetIndex() uint64 {
126126 }
127127
128128 // Define defines a new Asset.
129-func (reg *Registry) Define(xpubs []chainkd.XPub, quorum int, definition map[string]interface{}, limitHeight int64, alias string, issuanceProgram chainjson.HexBytes) (*Asset, error) {
129+func (reg *Registry) Define(xpubs []chainkd.XPub, quorum int, definition map[string]interface{}, limitHeight uint64, alias string, issuanceProgram chainjson.HexBytes) (*Asset, error) {
130130 var err error
131131 var assetSigner *signers.Signer
132132
@@ -363,7 +363,7 @@ func serializeAssetDef(def map[string]interface{}) ([]byte, error) {
363363 return json.MarshalIndent(def, "", " ")
364364 }
365365
366-func multisigIssuanceProgram(pubkeys []ed25519.PublicKey, nrequired int, blockHeight int64) (program []byte, vmversion uint64, err error) {
366+func multisigIssuanceProgram(pubkeys []ed25519.PublicKey, nrequired int, blockHeight uint64) (program []byte, vmversion uint64, err error) {
367367 issuanceProg, err := vmutil.P2SPMultiSigProgramWithHeight(pubkeys, nrequired, blockHeight)
368368 if err != nil {
369369 return nil, 0, err
--- a/blockchain/txbuilder/constraint.go
+++ b/blockchain/txbuilder/constraint.go
@@ -39,8 +39,8 @@ type payConstraint struct {
3939
4040 func (p payConstraint) code() []byte {
4141 builder := vmutil.NewBuilder()
42- builder.AddInt64(int64(p.Index))
43- builder.AddInt64(int64(p.Amount)).AddData(p.AssetId.Bytes()).AddInt64(1).AddData(p.Program)
42+ builder.AddUint64(uint64(p.Index))
43+ builder.AddUint64(uint64(p.Amount)).AddData(p.AssetId.Bytes()).AddUint64(1).AddData(p.Program)
4444 builder.AddOp(vm.OP_CHECKOUTPUT)
4545 prog, _ := builder.Build() // error is impossible
4646 return prog
--- a/equity/compiler/compile.go
+++ b/equity/compiler/compile.go
@@ -139,13 +139,13 @@ func Instantiate(body []byte, params []*Param, recursive bool, args []ContractAr
139139 a := args[i]
140140 switch {
141141 case a.B != nil:
142- var n int64
142+ var n uint64
143143 if *a.B {
144144 n = 1
145145 }
146- b.AddInt64(n)
146+ b.AddUint64(n)
147147 case a.I != nil:
148- b.AddInt64(*a.I)
148+ b.AddUint64(uint64(*a.I))
149149 case a.S != nil:
150150 b.AddData(*a.S)
151151 }
@@ -160,7 +160,7 @@ func Instantiate(body []byte, params []*Param, recursive bool, args []ContractAr
160160 b.AddOp(vm.OP_DEPTH)
161161 b.AddData(body)
162162 }
163- b.AddInt64(0)
163+ b.AddUint64(0)
164164 b.AddOp(vm.OP_CHECKPREDICATE)
165165 return b.Build()
166166 }
--- a/protocol/vm/bitwise.go
+++ b/protocol/vm/bitwise.go
@@ -50,7 +50,7 @@ func opAnd(vm *virtualMachine) error {
5050 for i := 0; i < min; i++ {
5151 res = append(res, a[i]&b[i])
5252 }
53- return vm.push(res, true)
53+ return vm.pushDataStack(res, true)
5454 }
5555
5656 func opOr(vm *virtualMachine) error {
@@ -103,7 +103,7 @@ func doOr(vm *virtualMachine, xor bool) error {
103103
104104 res = append(res, resByte)
105105 }
106- return vm.push(res, true)
106+ return vm.pushDataStack(res, true)
107107 }
108108
109109 func opEqual(vm *virtualMachine) error {
--- a/protocol/vm/crypto.go
+++ b/protocol/vm/crypto.go
@@ -37,7 +37,7 @@ func doHash(vm *virtualMachine, hashFactory func() hash.Hash) error {
3737 if err != nil {
3838 return err
3939 }
40- return vm.push(h.Sum(nil), false)
40+ return vm.pushDataStack(h.Sum(nil), false)
4141 }
4242
4343 func opCheckSig(vm *virtualMachine) error {
@@ -148,7 +148,7 @@ func opTxSigHash(vm *virtualMachine) error {
148148 if vm.context.TxSigHash == nil {
149149 return ErrContext
150150 }
151- return vm.push(vm.context.TxSigHash(), false)
151+ return vm.pushDataStack(vm.context.TxSigHash(), false)
152152 }
153153
154154 func opHash160(vm *virtualMachine) error {
@@ -162,5 +162,5 @@ func opHash160(vm *virtualMachine) error {
162162 return err
163163 }
164164
165- return vm.push(crypto.Ripemd160(data), false)
165+ return vm.pushDataStack(crypto.Ripemd160(data), false)
166166 }
--- a/protocol/vm/introspection.go
+++ b/protocol/vm/introspection.go
@@ -58,7 +58,7 @@ func opAsset(vm *virtualMachine) error {
5858 if vm.context.AssetID == nil {
5959 return ErrContext
6060 }
61- return vm.push(*vm.context.AssetID, true)
61+ return vm.pushDataStack(*vm.context.AssetID, true)
6262 }
6363
6464 func opAmount(vm *virtualMachine) error {
@@ -80,7 +80,7 @@ func opProgram(vm *virtualMachine) error {
8080 return err
8181 }
8282
83- return vm.push(vm.context.Code, true)
83+ return vm.pushDataStack(vm.context.Code, true)
8484 }
8585
8686 func opIndex(vm *virtualMachine) error {
@@ -100,7 +100,7 @@ func opEntryID(vm *virtualMachine) error {
100100 if err != nil {
101101 return err
102102 }
103- return vm.push(vm.context.EntryID, true)
103+ return vm.pushDataStack(vm.context.EntryID, true)
104104 }
105105
106106 func opOutputID(vm *virtualMachine) error {
@@ -112,7 +112,7 @@ func opOutputID(vm *virtualMachine) error {
112112 if vm.context.SpentOutputID == nil {
113113 return ErrContext
114114 }
115- return vm.push(*vm.context.SpentOutputID, true)
115+ return vm.pushDataStack(*vm.context.SpentOutputID, true)
116116 }
117117
118118 func opBlockHeight(vm *virtualMachine) error {
--- a/protocol/vm/pushdata.go
+++ b/protocol/vm/pushdata.go
@@ -3,21 +3,21 @@ package vm
33 import "encoding/binary"
44
55 func opFalse(vm *virtualMachine) error {
6- err := vm.applyCost(1)
7- if err != nil {
6+ if err := vm.applyCost(1); err != nil {
87 return err
98 }
9+
1010 return vm.pushBool(false, false)
1111 }
1212
1313 func opPushdata(vm *virtualMachine) error {
14- err := vm.applyCost(1)
15- if err != nil {
14+ if err := vm.applyCost(1); err != nil {
1615 return err
1716 }
17+
1818 d := make([]byte, len(vm.data))
1919 copy(d, vm.data)
20- return vm.push(d, false)
20+ return vm.pushDataStack(d, false)
2121 }
2222
2323 func opNop(vm *virtualMachine) error {
@@ -46,13 +46,15 @@ func PushDataBytes(in []byte) []byte {
4646 return append([]byte{byte(OP_PUSHDATA4), b[0], b[1], b[2], b[3]}, in...)
4747 }
4848
49-// PushDataInt64 push int64 to stack
50-func PushDataInt64(n int64) []byte {
49+// PushDataUint64 push int64 to stack
50+func PushDataUint64(n uint64) []byte {
5151 if n == 0 {
5252 return []byte{byte(OP_0)}
5353 }
54+
5455 if n >= 1 && n <= 16 {
5556 return []byte{uint8(OP_1) + uint8(n) - 1}
5657 }
57- return PushDataBytes(Uint64Bytes(uint64(n)))
58+
59+ return PushDataBytes(Uint64Bytes(n))
5860 }
--- a/protocol/vm/pushdata_test.go
+++ b/protocol/vm/pushdata_test.go
@@ -140,7 +140,7 @@ func TestPushDataBytes(t *testing.T) {
140140
141141 func TestPushdataInt64(t *testing.T) {
142142 type test struct {
143- num int64
143+ num uint64
144144 want []byte
145145 }
146146 cases := []test{{
@@ -155,23 +155,17 @@ func TestPushdataInt64(t *testing.T) {
155155 }, {
156156 num: 256,
157157 want: []byte{byte(OP_DATA_2), 0x00, 0x01},
158- }, {
159- num: -1,
160- want: []byte{byte(OP_DATA_8), 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
161- }, {
162- num: -2,
163- want: []byte{byte(OP_DATA_8), 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
164158 }}
165159
166160 for i := 1; i <= 16; i++ {
167161 cases = append(cases, test{
168- num: int64(i),
162+ num: uint64(i),
169163 want: []byte{byte(OP_1) - 1 + byte(i)},
170164 })
171165 }
172166
173167 for _, c := range cases {
174- got := PushDataInt64(c.num)
168+ got := PushDataUint64(c.num)
175169
176170 if !bytes.Equal(got, c.want) {
177171 t.Errorf("PushDataInt64(%d) = %x want %x", c.num, got, c.want)
--- a/protocol/vm/splice.go
+++ b/protocol/vm/splice.go
@@ -7,29 +7,27 @@ import (
77 )
88
99 func opCat(vm *virtualMachine) error {
10- err := vm.applyCost(4)
11- if err != nil {
10+ if err := vm.applyCost(4); err != nil {
1211 return err
1312 }
13+
1414 b, err := vm.pop(true)
1515 if err != nil {
1616 return err
1717 }
18+
1819 a, err := vm.pop(true)
1920 if err != nil {
2021 return err
2122 }
23+
2224 lens := int64(len(a) + len(b))
23- err = vm.applyCost(lens)
24- if err != nil {
25+ if err = vm.applyCost(lens); err != nil {
2526 return err
2627 }
28+
2729 vm.deferCost(-lens)
28- err = vm.push(append(a, b...), true)
29- if err != nil {
30- return err
31- }
32- return nil
30+ return vm.pushDataStack(append(a, b...), true)
3331 }
3432
3533 func opSubstr(vm *virtualMachine) error {
@@ -72,7 +70,7 @@ func opSubstr(vm *virtualMachine) error {
7270 return ErrBadValue
7371 }
7472
75- return vm.push(str[offset:end], true)
73+ return vm.pushDataStack(str[offset:end], true)
7674 }
7775
7876 func opLeft(vm *virtualMachine) error {
@@ -104,7 +102,7 @@ func opLeft(vm *virtualMachine) error {
104102 return ErrBadValue
105103 }
106104
107- return vm.push(str[:size], true)
105+ return vm.pushDataStack(str[:size], true)
108106 }
109107
110108 func opRight(vm *virtualMachine) error {
@@ -131,12 +129,13 @@ func opRight(vm *virtualMachine) error {
131129 if err != nil {
132130 return err
133131 }
132+
134133 lstr := int64(len(str))
135134 if size > lstr {
136135 return ErrBadValue
137136 }
138137
139- return vm.push(str[lstr-size:], true)
138+ return vm.pushDataStack(str[lstr-size:], true)
140139 }
141140
142141 func opSize(vm *virtualMachine) error {
@@ -153,24 +152,25 @@ func opSize(vm *virtualMachine) error {
153152 }
154153
155154 func opCatpushdata(vm *virtualMachine) error {
156- err := vm.applyCost(4)
157- if err != nil {
155+ if err := vm.applyCost(4); err != nil {
158156 return err
159157 }
158+
160159 b, err := vm.pop(true)
161160 if err != nil {
162161 return err
163162 }
163+
164164 a, err := vm.pop(true)
165165 if err != nil {
166166 return err
167167 }
168- lb := len(b)
169- lens := int64(len(a) + lb)
170- err = vm.applyCost(lens)
171- if err != nil {
168+
169+ lens := int64(len(a) + len(b))
170+ if err = vm.applyCost(lens); err != nil {
172171 return err
173172 }
173+
174174 vm.deferCost(-lens)
175- return vm.push(append(a, PushDataBytes(b)...), true)
175+ return vm.pushDataStack(append(a, PushDataBytes(b)...), true)
176176 }
--- a/protocol/vm/stack.go
+++ b/protocol/vm/stack.go
@@ -7,10 +7,10 @@ import (
77 )
88
99 func opToAltStack(vm *virtualMachine) error {
10- err := vm.applyCost(2)
11- if err != nil {
10+ if err := vm.applyCost(2); err != nil {
1211 return err
1312 }
13+
1414 if len(vm.dataStack) == 0 {
1515 return ErrDataStackUnderflow
1616 }
@@ -21,13 +21,14 @@ func opToAltStack(vm *virtualMachine) error {
2121 }
2222
2323 func opFromAltStack(vm *virtualMachine) error {
24- err := vm.applyCost(2)
25- if err != nil {
24+ if err := vm.applyCost(2); err != nil {
2625 return err
2726 }
27+
2828 if len(vm.altStack) == 0 {
2929 return ErrAltStackUnderflow
3030 }
31+
3132 // no standard memory cost accounting here
3233 vm.dataStack = append(vm.dataStack, vm.altStack[len(vm.altStack)-1])
3334 vm.altStack = vm.altStack[:len(vm.altStack)-1]
@@ -35,13 +36,12 @@ func opFromAltStack(vm *virtualMachine) error {
3536 }
3637
3738 func op2Drop(vm *virtualMachine) error {
38- err := vm.applyCost(2)
39- if err != nil {
39+ if err := vm.applyCost(2); err != nil {
4040 return err
4141 }
42+
4243 for i := 0; i < 2; i++ {
43- _, err = vm.pop(false)
44- if err != nil {
44+ if _, err := vm.pop(false); err != nil {
4545 return err
4646 }
4747 }
@@ -57,16 +57,16 @@ func op3Dup(vm *virtualMachine) error {
5757 }
5858
5959 func nDup(vm *virtualMachine, n int) error {
60- err := vm.applyCost(int64(n))
61- if err != nil {
60+ if err := vm.applyCost(int64(n)); err != nil {
6261 return err
6362 }
63+
6464 if len(vm.dataStack) < n {
6565 return ErrDataStackUnderflow
6666 }
67+
6768 for i := 0; i < n; i++ {
68- err = vm.push(vm.dataStack[len(vm.dataStack)-n], false)
69- if err != nil {
69+ if err := vm.pushDataStack(vm.dataStack[len(vm.dataStack)-n], false); err != nil {
7070 return err
7171 }
7272 }
@@ -74,16 +74,16 @@ func nDup(vm *virtualMachine, n int) error {
7474 }
7575
7676 func op2Over(vm *virtualMachine) error {
77- err := vm.applyCost(2)
78- if err != nil {
77+ if err := vm.applyCost(2); err != nil {
7978 return err
8079 }
80+
8181 if len(vm.dataStack) < 4 {
8282 return ErrDataStackUnderflow
8383 }
84+
8485 for i := 0; i < 2; i++ {
85- err = vm.push(vm.dataStack[len(vm.dataStack)-4], false)
86- if err != nil {
86+ if err := vm.pushDataStack(vm.dataStack[len(vm.dataStack)-4], false); err != nil {
8787 return err
8888 }
8989 }
@@ -91,13 +91,14 @@ func op2Over(vm *virtualMachine) error {
9191 }
9292
9393 func op2Rot(vm *virtualMachine) error {
94- err := vm.applyCost(2)
95- if err != nil {
94+ if err := vm.applyCost(2); err != nil {
9695 return err
9796 }
97+
9898 if len(vm.dataStack) < 6 {
9999 return ErrDataStackUnderflow
100100 }
101+
101102 newStack := make([][]byte, 0, len(vm.dataStack))
102103 newStack = append(newStack, vm.dataStack[:len(vm.dataStack)-6]...)
103104 newStack = append(newStack, vm.dataStack[len(vm.dataStack)-4:]...)
@@ -108,13 +109,14 @@ func op2Rot(vm *virtualMachine) error {
108109 }
109110
110111 func op2Swap(vm *virtualMachine) error {
111- err := vm.applyCost(2)
112- if err != nil {
112+ if err := vm.applyCost(2); err != nil {
113113 return err
114114 }
115+
115116 if len(vm.dataStack) < 4 {
116117 return ErrDataStackUnderflow
117118 }
119+
118120 newStack := make([][]byte, 0, len(vm.dataStack))
119121 newStack = append(newStack, vm.dataStack[:len(vm.dataStack)-4]...)
120122 newStack = append(newStack, vm.dataStack[len(vm.dataStack)-2:]...)
@@ -125,19 +127,17 @@ func op2Swap(vm *virtualMachine) error {
125127 }
126128
127129 func opIfDup(vm *virtualMachine) error {
128- err := vm.applyCost(1)
129- if err != nil {
130+ if err := vm.applyCost(1); err != nil {
130131 return err
131132 }
133+
132134 item, err := vm.top()
133135 if err != nil {
134136 return err
135137 }
138+
136139 if AsBool(item) {
137- err = vm.push(item, false)
138- if err != nil {
139- return err
140- }
140+ return vm.pushDataStack(item, false)
141141 }
142142 return nil
143143 }
@@ -151,15 +151,12 @@ func opDepth(vm *virtualMachine) error {
151151 }
152152
153153 func opDrop(vm *virtualMachine) error {
154- err := vm.applyCost(1)
155- if err != nil {
156- return err
157- }
158- _, err = vm.pop(false)
159- if err != nil {
154+ if err := vm.applyCost(1); err != nil {
160155 return err
161156 }
162- return nil
157+
158+ _, err := vm.pop(false)
159+ return err
163160 }
164161
165162 func opDup(vm *virtualMachine) error {
@@ -167,18 +164,18 @@ func opDup(vm *virtualMachine) error {
167164 }
168165
169166 func opNip(vm *virtualMachine) error {
170- err := vm.applyCost(1)
171- if err != nil {
167+ if err := vm.applyCost(1); err != nil {
172168 return err
173169 }
170+
174171 top, err := vm.top()
175172 if err != nil {
176173 return err
177174 }
175+
178176 // temporarily pop off the top value with no standard memory accounting
179177 vm.dataStack = vm.dataStack[:len(vm.dataStack)-1]
180- _, err = vm.pop(false)
181- if err != nil {
178+ if _, err = vm.pop(false); err != nil {
182179 return err
183180 }
184181 // now put the top item back
@@ -187,18 +184,15 @@ func opNip(vm *virtualMachine) error {
187184 }
188185
189186 func opOver(vm *virtualMachine) error {
190- err := vm.applyCost(1)
191- if err != nil {
187+ if err := vm.applyCost(1); err != nil {
192188 return err
193189 }
190+
194191 if len(vm.dataStack) < 2 {
195192 return ErrDataStackUnderflow
196193 }
197- err = vm.push(vm.dataStack[len(vm.dataStack)-2], false)
198- if err != nil {
199- return err
200- }
201- return nil
194+
195+ return vm.pushDataStack(vm.dataStack[len(vm.dataStack)-2], false)
202196 }
203197
204198 func opPick(vm *virtualMachine) error {
@@ -216,11 +210,12 @@ func opPick(vm *virtualMachine) error {
216210 return ErrBadValue
217211 }
218212
219- if int64(len(vm.dataStack)) < off {
213+ dataStackSize := int64(len(vm.dataStack))
214+ if dataStackSize < off {
220215 return ErrDataStackUnderflow
221216 }
222217
223- return vm.push(vm.dataStack[int64(len(vm.dataStack))-(off)], false)
218+ return vm.pushDataStack(vm.dataStack[dataStackSize-off], false)
224219 }
225220
226221 func opRoll(vm *virtualMachine) error {
@@ -242,24 +237,22 @@ func opRoll(vm *virtualMachine) error {
242237 }
243238
244239 func opRot(vm *virtualMachine) error {
245- err := vm.applyCost(2)
246- if err != nil {
247- return err
248- }
249- err = rot(vm, 3)
250- if err != nil {
240+ if err := vm.applyCost(2); err != nil {
251241 return err
252242 }
253- return nil
243+
244+ return rot(vm, 3)
254245 }
255246
256247 func rot(vm *virtualMachine, n int64) error {
257248 if n < 1 {
258249 return ErrBadValue
259250 }
251+
260252 if int64(len(vm.dataStack)) < n {
261253 return ErrDataStackUnderflow
262254 }
255+
263256 index := int64(len(vm.dataStack)) - n
264257 newStack := make([][]byte, 0, len(vm.dataStack))
265258 newStack = append(newStack, vm.dataStack[:index]...)
@@ -270,34 +263,36 @@ func rot(vm *virtualMachine, n int64) error {
270263 }
271264
272265 func opSwap(vm *virtualMachine) error {
273- err := vm.applyCost(1)
274- if err != nil {
266+ if err := vm.applyCost(1); err != nil {
275267 return err
276268 }
269+
277270 l := len(vm.dataStack)
278271 if l < 2 {
279272 return ErrDataStackUnderflow
280273 }
274+
281275 vm.dataStack[l-1], vm.dataStack[l-2] = vm.dataStack[l-2], vm.dataStack[l-1]
282276 return nil
283277 }
284278
285279 func opTuck(vm *virtualMachine) error {
286- err := vm.applyCost(1)
287- if err != nil {
280+ if err := vm.applyCost(1); err != nil {
288281 return err
289282 }
283+
290284 if len(vm.dataStack) < 2 {
291285 return ErrDataStackUnderflow
292286 }
287+
293288 top2 := make([][]byte, 2)
294289 copy(top2, vm.dataStack[len(vm.dataStack)-2:])
295290 // temporarily remove the top two items without standard memory accounting
296291 vm.dataStack = vm.dataStack[:len(vm.dataStack)-2]
297- err = vm.push(top2[1], false)
298- if err != nil {
292+ if err := vm.pushDataStack(top2[1], false); err != nil {
299293 return err
300294 }
295+
301296 vm.dataStack = append(vm.dataStack, top2...)
302297 return nil
303298 }
--- a/protocol/vm/vm.go
+++ b/protocol/vm/vm.go
@@ -61,13 +61,13 @@ func Verify(context *Context, gasLimit int64) (gasLeft int64, err error) {
6161 }
6262
6363 for i, state := range context.StateData {
64- if err = vm.pushAlt(state, false); err != nil {
64+ if err = vm.pushAltStack(state, false); err != nil {
6565 return vm.runLimit, errors.Wrapf(err, "pushing initial statedata %d", i)
6666 }
6767 }
6868
6969 for i, arg := range context.Arguments {
70- if err = vm.push(arg, false); err != nil {
70+ if err = vm.pushDataStack(arg, false); err != nil {
7171 return vm.runLimit, errors.Wrapf(err, "pushing initial argument %d", i)
7272 }
7373 }
@@ -115,6 +115,7 @@ func (vm *virtualMachine) step() error {
115115 if vm.expansionReserved {
116116 return ErrDisallowedOpcode
117117 }
118+
118119 vm.pc = vm.nextPC
119120 return vm.applyCost(1)
120121 }
@@ -139,7 +140,7 @@ func (vm *virtualMachine) step() error {
139140 return nil
140141 }
141142
142-func (vm *virtualMachine) push(data []byte, deferred bool) error {
143+func (vm *virtualMachine) pushDataStack(data []byte, deferred bool) error {
143144 cost := 8 + int64(len(data))
144145 if deferred {
145146 vm.deferCost(cost)
@@ -151,7 +152,7 @@ func (vm *virtualMachine) push(data []byte, deferred bool) error {
151152 return nil
152153 }
153154
154-func (vm *virtualMachine) pushAlt(data []byte, deferred bool) error {
155+func (vm *virtualMachine) pushAltStack(data []byte, deferred bool) error {
155156 cost := 8 + int64(len(data))
156157 if deferred {
157158 vm.deferCost(cost)
@@ -164,11 +165,11 @@ func (vm *virtualMachine) pushAlt(data []byte, deferred bool) error {
164165 }
165166
166167 func (vm *virtualMachine) pushBool(b bool, deferred bool) error {
167- return vm.push(BoolBytes(b), deferred)
168+ return vm.pushDataStack(BoolBytes(b), deferred)
168169 }
169170
170171 func (vm *virtualMachine) pushBigInt(n *uint256.Int, deferred bool) error {
171- return vm.push(BigIntBytes(n), deferred)
172+ return vm.pushDataStack(BigIntBytes(n), deferred)
172173 }
173174
174175 func (vm *virtualMachine) pop(deferred bool) ([]byte, error) {
--- a/protocol/vm/vmutil/builder.go
+++ b/protocol/vm/vmutil/builder.go
@@ -27,8 +27,8 @@ func NewBuilder() *Builder {
2727 }
2828
2929 // AddInt64 adds a pushdata instruction for an integer value.
30-func (b *Builder) AddInt64(n int64) *Builder {
31- b.program = append(b.program, vm.PushDataInt64(n)...)
30+func (b *Builder) AddUint64(n uint64) *Builder {
31+ b.program = append(b.program, vm.PushDataUint64(n)...)
3232 return b
3333 }
3434
--- a/protocol/vm/vmutil/script.go
+++ b/protocol/vm/vmutil/script.go
@@ -28,9 +28,9 @@ func (b *Builder) addP2SPMultiSig(pubkeys []ed25519.PublicKey, nrequired int) er
2828 for _, p := range pubkeys {
2929 b.AddData(p)
3030 }
31- b.AddInt64(int64(nrequired)) // stack is now [... SIG SIG SIG PREDICATEHASH PUB PUB PUB M]
32- b.AddInt64(int64(len(pubkeys))) // stack is now [... SIG SIG SIG PREDICATEHASH PUB PUB PUB M N]
33- b.AddOp(vm.OP_CHECKMULTISIG) // stack is now [... NARGS]
31+ b.AddUint64(uint64(nrequired)) // stack is now [... SIG SIG SIG PREDICATEHASH PUB PUB PUB M]
32+ b.AddUint64(uint64(len(pubkeys))) // stack is now [... SIG SIG SIG PREDICATEHASH PUB PUB PUB M N]
33+ b.AddOp(vm.OP_CHECKMULTISIG) // stack is now [... NARGS]
3434 return nil
3535 }
3636
@@ -44,7 +44,7 @@ func DefaultCoinbaseProgram() ([]byte, error) {
4444 // P2WPKHProgram return the segwit pay to public key hash
4545 func P2WPKHProgram(hash []byte) ([]byte, error) {
4646 builder := NewBuilder()
47- builder.AddInt64(0)
47+ builder.AddUint64(0)
4848 builder.AddData(hash)
4949 return builder.Build()
5050 }
@@ -52,7 +52,7 @@ func P2WPKHProgram(hash []byte) ([]byte, error) {
5252 // P2WSHProgram return the segwit pay to script hash
5353 func P2WSHProgram(hash []byte) ([]byte, error) {
5454 builder := NewBuilder()
55- builder.AddInt64(0)
55+ builder.AddUint64(0)
5656 builder.AddData(hash)
5757 return builder.Build()
5858 }
@@ -111,9 +111,9 @@ func P2SHProgram(scriptHash []byte) ([]byte, error) {
111111 builder.AddOp(vm.OP_SHA3)
112112 builder.AddData(scriptHash)
113113 builder.AddOp(vm.OP_EQUALVERIFY)
114- builder.AddInt64(0)
114+ builder.AddUint64(0)
115115 builder.AddOp(vm.OP_SWAP)
116- builder.AddInt64(0)
116+ builder.AddUint64(0)
117117 builder.AddOp(vm.OP_CHECKPREDICATE)
118118 return builder.Build()
119119 }
@@ -128,10 +128,10 @@ func P2SPMultiSigProgram(pubkeys []ed25519.PublicKey, nrequired int) ([]byte, er
128128 }
129129
130130 // P2SPMultiSigProgramWithHeight generates the script with block height for control transaction output
131-func P2SPMultiSigProgramWithHeight(pubkeys []ed25519.PublicKey, nrequired int, blockHeight int64) ([]byte, error) {
131+func P2SPMultiSigProgramWithHeight(pubkeys []ed25519.PublicKey, nrequired int, blockHeight uint64) ([]byte, error) {
132132 builder := NewBuilder()
133133 if blockHeight > 0 {
134- builder.AddInt64(blockHeight)
134+ builder.AddUint64(blockHeight)
135135 builder.AddOp(vm.OP_BLOCKHEIGHT)
136136 builder.AddOp(vm.OP_GREATERTHAN)
137137 builder.AddOp(vm.OP_VERIFY)
--- a/protocol/vm/vmutil/script_test.go
+++ b/protocol/vm/vmutil/script_test.go
@@ -107,7 +107,7 @@ func TestP2SPMultiSigProgramWithHeight(t *testing.T) {
107107 tests := []struct {
108108 pubkeys []ed25519.PublicKey
109109 nrequired int
110- height int64
110+ height uint64
111111 wantProgram string
112112 wantErr error
113113 }{
@@ -127,12 +127,6 @@ func TestP2SPMultiSigProgramWithHeight(t *testing.T) {
127127 wantProgram: "ae20988650ff921c82d47a953527894f792572ba63197c56e5fe79e5df0c444d6bb6207192bf4eac0789ee19c88dfa87861cf59e215820f7bdb7be02761d9ed92e6c62208bcd251d9f4e03877130b6e6f1d577eda562375f07c3cdfad8f1d541002fd1a35253ad",
128128 },
129129 {
130- pubkeys: []ed25519.PublicKey{pub1},
131- nrequired: 1,
132- height: -1,
133- wantErr: errors.WithDetail(ErrBadValue, "negative blockHeight"),
134- },
135- {
136130 pubkeys: []ed25519.PublicKey{pub1},
137131 nrequired: 1,
138132 height: 0,
Show on old repository browser