• R/O
  • HTTP
  • SSH
  • HTTPS

bytom: Commit

Official Go implementation of the Bytom protocol


Commit MetaInfo

Révisionce79e116892c95671aa376a891a3f21fcd2a8eab (tree)
l'heure2021-10-22 11:53:43
Auteurhyl <563807243@qq.c...>
Commiterhyl

Message de Log

fix pk for sig

Change Summary

Modification

--- a/nft/nft.go
+++ b/nft/nft.go
@@ -6,120 +6,120 @@ import (
66 )
77
88 /*
9- init alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
9+ init alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
1010 buy data stack [buyer, marginAmount, selecter]
1111 edit data stack [newMarginAsset, newMarginAmount, selecter]
1212 */
1313
1414 func NewContract(platformScript []byte, marginFold uint64) ([]byte, error) {
1515 builder := vmutil.NewBuilder()
16- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
16+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
1717 // data statck [...... selecter]
1818 builder.AddJumpIf(0)
19- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
19+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
2020 // data statck [marginAsset, buyer, newMarginAmount]
21- cpAltStack(builder, 0)
21+ cpAltStack(builder, 1)
2222 builder.AddUint64(marginFold)
2323 builder.AddOp(vm.OP_MUL)
24- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
24+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
2525 // data statck [marginAsset, buyer, newMarginAmount, payAmount=marginAmount*marginFold]
2626 builder.AddOp(vm.OP_DUP)
2727 builder.AddUint64(100)
2828 builder.AddOp(vm.OP_DIV)
29- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
29+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
3030 // data statck [marginAsset, buyer, newMarginAmount, payAmount, platformFee]
3131 builder.AddOp(vm.OP_SWAP)
3232 builder.AddOp(vm.OP_DUP)
33- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
33+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
3434 // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, payAmount]
35- cpAltStack(builder, 4)
35+ cpAltStack(builder, 5)
3636 builder.AddOp(vm.OP_MUL)
3737 builder.AddUint64(10000)
3838 builder.AddOp(vm.OP_DIV)
39- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
39+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
4040 // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, createrTax]
4141 builder.AddOp(vm.OP_DUP)
4242 builder.AddUint64(2)
4343 builder.AddOp(vm.OP_SWAP)
44- cpAltStack(builder, 1)
44+ cpAltStack(builder, 2)
4545 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]
4848 // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount, createrTax, 2, createrTax, marginAsset, 1, PROGRAM]
4949 builder.AddOp(vm.OP_CHECKOUTPUT)
5050 builder.AddOp(vm.OP_VERIFY)
5151 builder.AddOp(vm.OP_SUB)
52- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
52+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
5353 // data statck [marginAsset, buyer, newMarginAmount, platformFee, payAmount-createrTax]
5454 builder.AddOp(vm.OP_SWAP)
5555 builder.AddOp(vm.OP_DUP)
5656 builder.AddUint64(3)
5757 builder.AddOp(vm.OP_SWAP)
58- cpAltStack(builder, 1)
58+ cpAltStack(builder, 2)
5959 builder.AddUint64(1)
6060 builder.AddData(platformScript)
61- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
61+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
6262 // data statck [marginAsset, buyer, newMarginAmount, payAmount-createrTax, platformFee, 3, platformFee, marginAsset, 1, platformScript]
6363 builder.AddOp(vm.OP_CHECKOUTPUT)
6464 builder.AddOp(vm.OP_VERIFY)
6565 builder.AddOp(vm.OP_SUB)
66- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
66+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
6767 // data statck [marginAsset, buyer, newMarginAmount, ownerGot]
68- cpAltStack(builder, 0)
68+ cpAltStack(builder, 1)
6969 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]
7272 builder.AddUint64(4)
7373 builder.AddOp(vm.OP_SWAP)
74- cpAltStack(builder, 1)
75- builder.AddUint64(1)
7674 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]
7878 // data statck [marginAsset, buyer, newMarginAmount, 4, ownerGot+marginAmount, marginAsset, 1, owner]
7979 builder.AddOp(vm.OP_CHECKOUTPUT)
8080 builder.AddOp(vm.OP_VERIFY)
81- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
81+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
8282 // 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)
8784 swapAltStack(builder, 0, 1)
85+ // alt stack [creater, taxRate, nftAsset, buyer, marginAsset, newMarginAmount, publicKey]
86+ // data statck [marginAsset]
87+ swapAltStack(builder, 0, 2)
8888 builder.AddJump(1)
8989
9090 builder.SetJumpTarget(0)
91- // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount]
91+ // alt stack [creater, taxRate, nftAsset, owner, marginAsset, marginAmount, publicKey]
9292 // 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]
9595 // 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]
9898 // data statck [ownerSig, owner]
9999 builder.AddOp(vm.OP_TXSIGHASH)
100100 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]
103103 builder.AddOp(vm.OP_CHECKSIG)
104104 builder.AddOp(vm.OP_VERIFY)
105- // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount]
105+ // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey]
106106 // data statck []
107107 builder.SetJumpTarget(1)
108108 builder.AddUint64(0)
109109 builder.AddUint64(1)
110- cpAltStack(builder, 3)
110+ cpAltStack(builder, 4)
111111 builder.AddUint64(1)
112112 builder.AddOp(vm.OP_PROGRAM)
113- // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount]
113+ // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey]
114114 // data statck [0, 1, nftAsset, 1, PROGRAM]
115115 builder.AddOp(vm.OP_CHECKOUTPUT)
116116 builder.AddOp(vm.OP_VERIFY)
117117 builder.AddUint64(1)
118- cpAltStack(builder, 0)
119118 cpAltStack(builder, 1)
119+ cpAltStack(builder, 2)
120120 builder.AddUint64(1)
121121 builder.AddOp(vm.OP_PROGRAM)
122- // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount]
122+ // alt stack [creater, taxRate, nftAsset, owner, newMarginAsset, newMarginAmount, publicKey]
123123 // data statck [1, newMarginAmount, newMarginAsset, 1, PROGRAM]
124124 builder.AddOp(vm.OP_CHECKOUTPUT)
125125 return builder.Build()
@@ -132,7 +132,7 @@ func NewOffer(nftContract []byte) ([]byte, error) {
132132 builder.AddJump(1)
133133
134134 // need check sig for cancel func
135- cpAltStack(builder, 2)
135+ cpAltStack(builder, 0)
136136 builder.AddOp(vm.OP_TXSIGHASH)
137137 builder.AddOp(vm.OP_SWAP)
138138 builder.AddOp(vm.OP_CHECKSIG)
@@ -141,14 +141,14 @@ func NewOffer(nftContract []byte) ([]byte, error) {
141141 builder.SetJumpTarget(0)
142142 builder.AddUint64(0)
143143 builder.AddUint64(1)
144- cpAltStack(builder, 3)
144+ cpAltStack(builder, 4)
145145 builder.AddUint64(1)
146146 builder.AddData(nftContract)
147147 builder.AddOp(vm.OP_CHECKOUTPUT)
148148 builder.AddOp(vm.OP_VERIFY)
149149 builder.AddUint64(1)
150- cpAltStack(builder, 0)
151150 cpAltStack(builder, 1)
151+ cpAltStack(builder, 2)
152152 builder.AddUint64(1)
153153 builder.AddData(nftContract)
154154 builder.AddOp(vm.OP_CHECKOUTPUT)
--- a/nft/nft_test.go
+++ b/nft/nft_test.go
@@ -22,8 +22,9 @@ var (
2222 ETH = testutil.MustDecodeAsset("78de44ffa1bce37b757c9eae8925b5f199dc4621b412ef0f3f46168865284a93")
2323
2424 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")
2728 )
2829
2930 // 从2个BTC的押金换成3个BTC的
@@ -40,6 +41,7 @@ func TestEditMargin(t *testing.T) {
4041 ownerScirpt,
4142 BTC.Bytes(),
4243 vm.Uint64Bytes(200000000),
44+ publicKey,
4345 }
4446
4547 newStateData := [][]byte{
@@ -49,10 +51,11 @@ func TestEditMargin(t *testing.T) {
4951 ownerScirpt,
5052 BTC.Bytes(),
5153 vm.Uint64Bytes(300000000),
54+ publicKey,
5255 }
5356
5457 arguments := [][]byte{
55- testutil.MustDecodeHexString("6c25b3220df660b06bf17ca881e6a31811fc4f33f78e5c0597a1e29b5d0030d9494bff417a237b907eac5cdce1dc0dfe1f258103dee32fcc84a2dd5e8c614209"),
58+ testutil.MustDecodeHexString("b90890b349b0cc0d4e86d21efccc517fdf1bcd0038bbbdf518433905e10ec81130906c816298381a6cedacd037b3084b503c146f7cf710fc759c367da1552a09"),
5659 vm.Uint64Bytes(300000000),
5760 vm.Uint64Bytes(1),
5861 }
@@ -92,6 +95,7 @@ func TestRegularBuy(t *testing.T) {
9295 ownerScirpt,
9396 ETH.Bytes(),
9497 vm.Uint64Bytes(10000000000),
98+ publicKey,
9599 }
96100
97101 newStateData := [][]byte{
@@ -101,6 +105,7 @@ func TestRegularBuy(t *testing.T) {
101105 buyerScirpt,
102106 ETH.Bytes(),
103107 vm.Uint64Bytes(15000000000),
108+ publicKey,
104109 }
105110
106111 arguments := [][]byte{
@@ -148,6 +153,7 @@ func TestBuySwapMargin(t *testing.T) {
148153 ownerScirpt,
149154 ETH.Bytes(),
150155 vm.Uint64Bytes(10000000000),
156+ publicKey,
151157 }
152158
153159 newStateData := [][]byte{
@@ -157,6 +163,7 @@ func TestBuySwapMargin(t *testing.T) {
157163 buyerScirpt,
158164 BTC.Bytes(),
159165 vm.Uint64Bytes(200000000),
166+ publicKey,
160167 }
161168
162169 arguments := [][]byte{
@@ -210,6 +217,7 @@ func TestOfferBuy(t *testing.T) {
210217 ownerScirpt,
211218 ETH.Bytes(),
212219 vm.Uint64Bytes(10000000000),
220+ publicKey,
213221 }
214222
215223 newStateData := [][]byte{
@@ -219,6 +227,7 @@ func TestOfferBuy(t *testing.T) {
219227 buyerScirpt,
220228 ETH.Bytes(),
221229 vm.Uint64Bytes(15000000000),
230+ publicKey,
222231 }
223232
224233 arguments := [][]byte{
Afficher sur ancien navigateur de dépôt.