Skip to content
This repository was archived by the owner on Mar 21, 2024. It is now read-only.

Commit d8080df

Browse files
committed
fix pk for sig
fix cancel
1 parent c3610f1 commit d8080df

File tree

2 files changed

+58
-49
lines changed

2 files changed

+58
-49
lines changed

nft/nft.go

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -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()
@@ -128,27 +128,26 @@ func NewContract(platformScript []byte, marginFold uint64) ([]byte, error) {
128128
func NewOffer(nftContract []byte) ([]byte, error) {
129129
builder := vmutil.NewBuilder()
130130
builder.AddJumpIf(0)
131-
builder.AddUint64(1)
132-
builder.AddJump(1)
133-
134131
// need check sig for cancel func
135-
cpAltStack(builder, 2)
132+
cpAltStack(builder, 0)
136133
builder.AddOp(vm.OP_TXSIGHASH)
137134
builder.AddOp(vm.OP_SWAP)
138135
builder.AddOp(vm.OP_CHECKSIG)
139136
builder.AddOp(vm.OP_VERIFY)
140137

138+
builder.AddUint64(1)
139+
builder.AddJump(1)
141140
builder.SetJumpTarget(0)
142141
builder.AddUint64(0)
143142
builder.AddUint64(1)
144-
cpAltStack(builder, 3)
143+
cpAltStack(builder, 4)
145144
builder.AddUint64(1)
146145
builder.AddData(nftContract)
147146
builder.AddOp(vm.OP_CHECKOUTPUT)
148147
builder.AddOp(vm.OP_VERIFY)
149148
builder.AddUint64(1)
150-
cpAltStack(builder, 0)
151149
cpAltStack(builder, 1)
150+
cpAltStack(builder, 2)
152151
builder.AddUint64(1)
153152
builder.AddData(nftContract)
154153
builder.AddOp(vm.OP_CHECKOUTPUT)

nft/nft_test.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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{
@@ -270,10 +279,11 @@ func TestCancelOffer(t *testing.T) {
270279
buyerScirpt,
271280
ETH.Bytes(),
272281
vm.Uint64Bytes(15000000000),
282+
publicKey,
273283
}
274284

275285
arguments := [][]byte{
276-
testutil.MustDecodeHexString("2dbbae17e2aed7639ba212f46fd28b9ccb122c1a24ebd1a48e2dddcaf675252e9adb7c8fe504fa4aad4d054d87701d93d67c5e62bee9ccdc442a39a207dcd106"),
286+
testutil.MustDecodeHexString("5409d2b5395f3516843e60118259be4ef1bea1e77e82b959a82fe5a98ce1a0eccbbbdbbd0156c392e7aacdbfbdec1d827b62813a17535a474c018151b25ca40d"),
277287
vm.Uint64Bytes(0),
278288
}
279289

0 commit comments

Comments
 (0)