Official Go implementation of the Bytom protocol
Revision | ce79e116892c95671aa376a891a3f21fcd2a8eab (tree) |
---|---|
Time | 2021-10-22 11:53:43 |
Author | hyl <563807243@qq.c...> |
Commiter | hyl |
fix pk for sig
@@ -6,120 +6,120 @@ import ( | ||
6 | 6 | ) |
7 | 7 | |
8 | 8 | /* |
9 | - init alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
9 | + init alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
10 | 10 | buy data stack [buyer, marginAmount, selecter] |
11 | 11 | edit data stack [newMarginAsset, newMarginAmount, selecter] |
12 | 12 | */ |
13 | 13 | |
14 | 14 | func NewContract(platformScript []byte, marginFold uint64) ([]byte, error) { |
15 | 15 | builder := vmutil.NewBuilder() |
16 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
16 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
17 | 17 | // data statck [...... selecter] |
18 | 18 | builder.AddJumpIf(0) |
19 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
19 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
20 | 20 | // data statck [marginAsset, buyer, newMarginAmount] |
21 | - cpAltStack(builder, 0) | |
21 | + cpAltStack(builder, 1) | |
22 | 22 | builder.AddUint64(marginFold) |
23 | 23 | builder.AddOp(vm.OP_MUL) |
24 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
24 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
25 | 25 | // data statck [marginAsset, buyer, newMarginAmount, payAmount=marginAmount*marginFold] |
26 | 26 | builder.AddOp(vm.OP_DUP) |
27 | 27 | builder.AddUint64(100) |
28 | 28 | builder.AddOp(vm.OP_DIV) |
29 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
29 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
30 | 30 | // data statck [marginAsset, buyer, newMarginAmount, payAmount, platformFee] |
31 | 31 | builder.AddOp(vm.OP_SWAP) |
32 | 32 | builder.AddOp(vm.OP_DUP) |
33 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
33 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
34 | 34 | // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, payAmount] |
35 | - cpAltStack(builder, 4) | |
35 | + cpAltStack(builder, 5) | |
36 | 36 | builder.AddOp(vm.OP_MUL) |
37 | 37 | builder.AddUint64(10000) |
38 | 38 | builder.AddOp(vm.OP_DIV) |
39 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
39 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
40 | 40 | // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, createrTax] |
41 | 41 | builder.AddOp(vm.OP_DUP) |
42 | 42 | builder.AddUint64(2) |
43 | 43 | builder.AddOp(vm.OP_SWAP) |
44 | - cpAltStack(builder, 1) | |
44 | + cpAltStack(builder, 2) | |
45 | 45 | builder.AddUint64(1) |
46 | - cpAltStack(builder, 5) | |
47 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
46 | + cpAltStack(builder, 6) | |
47 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
48 | 48 | // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, createrTax, 2, createrTax, marginAsset, 1, PROGRAM] |
49 | 49 | builder.AddOp(vm.OP_CHECKOUTPUT) |
50 | 50 | builder.AddOp(vm.OP_VERIFY) |
51 | 51 | builder.AddOp(vm.OP_SUB) |
52 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
52 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
53 | 53 | // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount-createrTax] |
54 | 54 | builder.AddOp(vm.OP_SWAP) |
55 | 55 | builder.AddOp(vm.OP_DUP) |
56 | 56 | builder.AddUint64(3) |
57 | 57 | builder.AddOp(vm.OP_SWAP) |
58 | - cpAltStack(builder, 1) | |
58 | + cpAltStack(builder, 2) | |
59 | 59 | builder.AddUint64(1) |
60 | 60 | builder.AddData(platformScript) |
61 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
61 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
62 | 62 | // data statck [marginAsset, buyer, newMarginAmount, payAmount-createrTax, platformFee, 3, platformFee, marginAsset, 1, platformScript] |
63 | 63 | builder.AddOp(vm.OP_CHECKOUTPUT) |
64 | 64 | builder.AddOp(vm.OP_VERIFY) |
65 | 65 | builder.AddOp(vm.OP_SUB) |
66 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
66 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
67 | 67 | // data statck [marginAsset, buyer, newMarginAmount, ownerGot] |
68 | - cpAltStack(builder, 0) | |
68 | + cpAltStack(builder, 1) | |
69 | 69 | builder.AddOp(vm.OP_ADD) |
70 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
71 | - // data statck [marginAsset, buyer, newMarginAmount, ownerGot+marginAmount] | |
70 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
71 | + // data statck [marginAsset, buyer, newMarginAmount, ownerGot+marginAmount, publicKey] | |
72 | 72 | builder.AddUint64(4) |
73 | 73 | builder.AddOp(vm.OP_SWAP) |
74 | - cpAltStack(builder, 1) | |
75 | - builder.AddUint64(1) | |
76 | 74 | cpAltStack(builder, 2) |
77 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
75 | + builder.AddUint64(1) | |
76 | + cpAltStack(builder, 3) | |
77 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
78 | 78 | // data statck [marginAsset, buyer, newMarginAmount, 4, ownerGot+marginAmount, marginAsset, 1, owner] |
79 | 79 | builder.AddOp(vm.OP_CHECKOUTPUT) |
80 | 80 | builder.AddOp(vm.OP_VERIFY) |
81 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
81 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
82 | 82 | // data statck [marginAsset, buyer, newMarginAmount] |
83 | - swapAltStack(builder, 1, 2) | |
84 | - swapAltStack(builder, 0, 0) | |
85 | - // alt stack [creater, taxRate, nftAsset, buyer, marginAsset, newMarginAmount] | |
86 | - // data statck [marginAsset] | |
83 | + swapAltStack(builder, 1, 3) | |
87 | 84 | swapAltStack(builder, 0, 1) |
85 | + // alt stack [creater, taxRate, nftAsset, buyer, marginAsset, newMarginAmount, publicKey] | |
86 | + // data statck [marginAsset] | |
87 | + swapAltStack(builder, 0, 2) | |
88 | 88 | builder.AddJump(1) |
89 | 89 | |
90 | 90 | builder.SetJumpTarget(0) |
91 | - // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount] | |
91 | + // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey] | |
92 | 92 | // data statck [ownerSig, newMarginAmount] |
93 | - swapAltStack(builder, 0, 0) | |
94 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
93 | + swapAltStack(builder, 0, 1) | |
94 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
95 | 95 | // data statck [ownerSig] |
96 | - cpAltStack(builder, 2) | |
97 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
96 | + cpAltStack(builder, 0) | |
97 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
98 | 98 | // data statck [ownerSig, owner] |
99 | 99 | builder.AddOp(vm.OP_TXSIGHASH) |
100 | 100 | builder.AddOp(vm.OP_SWAP) |
101 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
102 | - // data statck [ownerSig, txSigHash, owner] | |
101 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
102 | + // data statck [ownerSig, txSigHash, publicKey] | |
103 | 103 | builder.AddOp(vm.OP_CHECKSIG) |
104 | 104 | builder.AddOp(vm.OP_VERIFY) |
105 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
105 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
106 | 106 | // data statck [] |
107 | 107 | builder.SetJumpTarget(1) |
108 | 108 | builder.AddUint64(0) |
109 | 109 | builder.AddUint64(1) |
110 | - cpAltStack(builder, 3) | |
110 | + cpAltStack(builder, 4) | |
111 | 111 | builder.AddUint64(1) |
112 | 112 | builder.AddOp(vm.OP_PROGRAM) |
113 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
113 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
114 | 114 | // data statck [0, 1, nftAsset, 1, PROGRAM] |
115 | 115 | builder.AddOp(vm.OP_CHECKOUTPUT) |
116 | 116 | builder.AddOp(vm.OP_VERIFY) |
117 | 117 | builder.AddUint64(1) |
118 | - cpAltStack(builder, 0) | |
119 | 118 | cpAltStack(builder, 1) |
119 | + cpAltStack(builder, 2) | |
120 | 120 | builder.AddUint64(1) |
121 | 121 | builder.AddOp(vm.OP_PROGRAM) |
122 | - // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount] | |
122 | + // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey] | |
123 | 123 | // data statck [1, newMarginAmount, newMarginAsset, 1, PROGRAM] |
124 | 124 | builder.AddOp(vm.OP_CHECKOUTPUT) |
125 | 125 | return builder.Build() |
@@ -132,7 +132,7 @@ func NewOffer(nftContract []byte) ([]byte, error) { | ||
132 | 132 | builder.AddJump(1) |
133 | 133 | |
134 | 134 | // need check sig for cancel func |
135 | - cpAltStack(builder, 2) | |
135 | + cpAltStack(builder, 0) | |
136 | 136 | builder.AddOp(vm.OP_TXSIGHASH) |
137 | 137 | builder.AddOp(vm.OP_SWAP) |
138 | 138 | builder.AddOp(vm.OP_CHECKSIG) |
@@ -141,14 +141,14 @@ func NewOffer(nftContract []byte) ([]byte, error) { | ||
141 | 141 | builder.SetJumpTarget(0) |
142 | 142 | builder.AddUint64(0) |
143 | 143 | builder.AddUint64(1) |
144 | - cpAltStack(builder, 3) | |
144 | + cpAltStack(builder, 4) | |
145 | 145 | builder.AddUint64(1) |
146 | 146 | builder.AddData(nftContract) |
147 | 147 | builder.AddOp(vm.OP_CHECKOUTPUT) |
148 | 148 | builder.AddOp(vm.OP_VERIFY) |
149 | 149 | builder.AddUint64(1) |
150 | - cpAltStack(builder, 0) | |
151 | 150 | cpAltStack(builder, 1) |
151 | + cpAltStack(builder, 2) | |
152 | 152 | builder.AddUint64(1) |
153 | 153 | builder.AddData(nftContract) |
154 | 154 | builder.AddOp(vm.OP_CHECKOUTPUT) |
@@ -22,8 +22,9 @@ var ( | ||
22 | 22 | ETH = testutil.MustDecodeAsset("78de44ffa1bce37b757c9eae8925b5f199dc4621b412ef0f3f46168865284a93") |
23 | 23 | |
24 | 24 | utxoSourceID = testutil.MustDecodeHash("762ec536ea64f71feac5fd4000a4807fc8e9d08d757889bd0206a02b79f9db8e") |
25 | - ownerScirpt = testutil.MustDecodeHexString("0100000000000000000000000000000000000000000000000000000000000000") //[]byte("ownerScirpt") | |
26 | - buyerScirpt = testutil.MustDecodeHexString("0100000000000000000000000000000000000000000000000000000000000000") //[]byte("buyerScirpt") | |
25 | + ownerScirpt = []byte("ownerScirpt") | |
26 | + buyerScirpt = []byte("buyerScirpt") | |
27 | + publicKey = testutil.MustDecodeHexString("0100000000000000000000000000000000000000000000000000000000000000") | |
27 | 28 | ) |
28 | 29 | |
29 | 30 | // 从2个BTC的押金换成3个BTC的 |
@@ -40,6 +41,7 @@ func TestEditMargin(t *testing.T) { | ||
40 | 41 | ownerScirpt, |
41 | 42 | BTC.Bytes(), |
42 | 43 | vm.Uint64Bytes(200000000), |
44 | + publicKey, | |
43 | 45 | } |
44 | 46 | |
45 | 47 | newStateData := [][]byte{ |
@@ -49,10 +51,11 @@ func TestEditMargin(t *testing.T) { | ||
49 | 51 | ownerScirpt, |
50 | 52 | BTC.Bytes(), |
51 | 53 | vm.Uint64Bytes(300000000), |
54 | + publicKey, | |
52 | 55 | } |
53 | 56 | |
54 | 57 | arguments := [][]byte{ |
55 | - testutil.MustDecodeHexString("6c25b3220df660b06bf17ca881e6a31811fc4f33f78e5c0597a1e29b5d0030d9494bff417a237b907eac5cdce1dc0dfe1f258103dee32fcc84a2dd5e8c614209"), | |
58 | + testutil.MustDecodeHexString("b90890b349b0cc0d4e86d21efccc517fdf1bcd0038bbbdf518433905e10ec81130906c816298381a6cedacd037b3084b503c146f7cf710fc759c367da1552a09"), | |
56 | 59 | vm.Uint64Bytes(300000000), |
57 | 60 | vm.Uint64Bytes(1), |
58 | 61 | } |
@@ -92,6 +95,7 @@ func TestRegularBuy(t *testing.T) { | ||
92 | 95 | ownerScirpt, |
93 | 96 | ETH.Bytes(), |
94 | 97 | vm.Uint64Bytes(10000000000), |
98 | + publicKey, | |
95 | 99 | } |
96 | 100 | |
97 | 101 | newStateData := [][]byte{ |
@@ -101,6 +105,7 @@ func TestRegularBuy(t *testing.T) { | ||
101 | 105 | buyerScirpt, |
102 | 106 | ETH.Bytes(), |
103 | 107 | vm.Uint64Bytes(15000000000), |
108 | + publicKey, | |
104 | 109 | } |
105 | 110 | |
106 | 111 | arguments := [][]byte{ |
@@ -148,6 +153,7 @@ func TestBuySwapMargin(t *testing.T) { | ||
148 | 153 | ownerScirpt, |
149 | 154 | ETH.Bytes(), |
150 | 155 | vm.Uint64Bytes(10000000000), |
156 | + publicKey, | |
151 | 157 | } |
152 | 158 | |
153 | 159 | newStateData := [][]byte{ |
@@ -157,6 +163,7 @@ func TestBuySwapMargin(t *testing.T) { | ||
157 | 163 | buyerScirpt, |
158 | 164 | BTC.Bytes(), |
159 | 165 | vm.Uint64Bytes(200000000), |
166 | + publicKey, | |
160 | 167 | } |
161 | 168 | |
162 | 169 | arguments := [][]byte{ |
@@ -210,6 +217,7 @@ func TestOfferBuy(t *testing.T) { | ||
210 | 217 | ownerScirpt, |
211 | 218 | ETH.Bytes(), |
212 | 219 | vm.Uint64Bytes(10000000000), |
220 | + publicKey, | |
213 | 221 | } |
214 | 222 | |
215 | 223 | newStateData := [][]byte{ |
@@ -219,6 +227,7 @@ func TestOfferBuy(t *testing.T) { | ||
219 | 227 | buyerScirpt, |
220 | 228 | ETH.Bytes(), |
221 | 229 | vm.Uint64Bytes(15000000000), |
230 | + publicKey, | |
222 | 231 | } |
223 | 232 | |
224 | 233 | arguments := [][]byte{ |