@@ -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
1414func 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) {
128128func 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 )
0 commit comments