tx · D7Qcnoj3M59mbKsaLdHwGhrd7ArcHbGuDK3e7HD67p1E

3P7ok1T2xn87ea5xjxBPFZPNeShgSqHeaHg:  -0.01400000 Waves

2020.02.04 07:16 [1914465] smart account 3P7ok1T2xn87ea5xjxBPFZPNeShgSqHeaHg > SELF 0.00000000 Waves

{ "type": 13, "id": "D7Qcnoj3M59mbKsaLdHwGhrd7ArcHbGuDK3e7HD67p1E", "fee": 1400000, "feeAssetId": null, "timestamp": 1580789754455, "version": 1, "sender": "3P7ok1T2xn87ea5xjxBPFZPNeShgSqHeaHg", "senderPublicKey": "5KD6eu1HF3Fnzdr5L6ebB4u1fQEDtLwtpvTGJfKgQc4h", "proofs": [ "4duqbcq3UfBNDMxUbN51bYBcT6jcAVnnsxdLfZPRXz23b36J4sMxGAxLsPEZskG3yNb9ZpHSSbS9btNkkSibEUhb", "4e4wBZU9a2ga42KaiBN4kWiCt2Jc3aBxSAm6vDbLqKnfcdE3oRLtcAE8VuktbbTEUEaa81NhVHhXyYU3vCugLGyD" ], "script": "base64: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", "chainId": 87, "height": 1914465, "spentComplexity": 0 } View: original | compacted Prev: CcFWaVLFcAXc6xDfC1FkoxGgCBzVkyVzDdT3VpHYd3Q Next: 8mpLXejqh6WsXH8rNcFeXhX4PqA1WRyubYWjKdnzNhJM Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
2-{-# CONTENT_TYPE EXPRESSION #-}
3-let payoutAddress = "3P8uxNCMRWjj2DUWAXaRXF4Q4thX9jQxXcs"
4-let redeemAddress = "3PAkNyfHB5NV9jXioZ1DG3mynhUZyUzHWML"
5-let votingAddress = "3PGEh2VpbpYyetTUTCY6bRxv2mpMwZoz5sP"
6-let lockExpired = (value(lastBlock.timestamp) >= (1609459200 * 1000))
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
74 let priceAssetId = Unit()
5+
86 let amountAssetId = base58'BS1KFNR8zrXKBEWdUUvpaP6G57Hic3aESkwK7qQKdLpB'
9-let matcherFeeId = Unit()
10-let payoutAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
11-let traderPubKey = extract(tx.senderPublicKey)
7+
8+let daoAddress = "3PLmA3WSdGbeX3FdyWyyLyWvZoffnMrND7D"
9+
10+let voteAddress = "3PGEh2VpbpYyetTUTCY6bRxv2mpMwZoz5sP"
11+
12+let voteFunction = "vote"
13+
1214 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
13-let investorPubKeys = [base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT']
14-func isFiatAsset (assetId) = if (if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'))
15+
16+let investorPubKeys = [base58'66BGZcJJ9yAWcHKZZeiuA71wAvC5GWTmdQWArjt1g6jC']
17+
18+let avgMonth = (2629746 * 1000)
19+
20+let lastBlockTime = lastBlock.timestamp
21+
22+let monthOpenTime = ((lastBlockTime / avgMonth) * avgMonth)
23+
24+let quarterOpenTime = ((lastBlockTime / (3 * avgMonth)) * (3 * avgMonth))
25+
26+func isFiatAsset (assetId) = if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'))
1527 then true
1628 else (assetId == base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'))
17- then true
18- else (assetId == base58'DEJbZipbKQjwEiRjx2AqQFucrj5CZ3rAc4ZvFM8nAsoA'))
1929 then true
2030 else (assetId == base58'2mX5DzVKWrAJw8iwdJnV2qtoeVG9h5nTDpTqC1wb1WEN'))
2131 then true
2333 then true
2434 else (assetId == base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p')
2535
26-match tx {
27- case o: Order =>
28- let rightOrder = if (if (if (if ((o.matcherFeeAssetId == matcherFeeId))
29- then (o.assetPair.priceAsset == priceAssetId)
30- else false)
31- then (o.assetPair.amountAsset == amountAssetId)
32- else false)
33- then true
34- else if (if (if ((o.orderType == Buy))
35- then !(isDefined(o.matcherFeeAssetId))
36+
37+func toDateTimeString (timestamp) = {
38+ let sp = " "
39+ let zz = " UTC"
40+ let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
41+ let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
42+ if (if ((-12212553600000 > timestamp))
43+ then true
44+ else (timestamp > 253402300799999))
45+ then throw("ISO 8601: Only years from 1583 to 9999 are permitted.")
46+ else {
47+ let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
48+ let ce = (timestamp + ((epoch * 86400) * 1000))
49+ let date = {
50+ let yy = ((ce / (31556952 * 1000)) - 1)
51+ let dty = (((((yy * 365) + (yy / 4)) - (yy / 100)) + (yy / 400)) + 366)
52+ let ytd = ((ce / (86400 * 1000)) - dty)
53+ let months = if (if (if ((((yy + 1) % 4) == 0))
54+ then (((yy + 1) % 100) != 0)
55+ else false)
56+ then true
57+ else (((yy + 1) % 400) == 0))
58+ then leap
59+ else norm
60+ let mm = if ((ytd >= months[12]))
61+ then throw()
62+ else if ((ytd >= months[11]))
63+ then 11
64+ else if ((ytd >= months[10]))
65+ then 10
66+ else if ((ytd >= months[9]))
67+ then 9
68+ else if ((ytd >= months[8]))
69+ then 8
70+ else if ((ytd >= months[7]))
71+ then 7
72+ else if ((ytd >= months[6]))
73+ then 6
74+ else if ((ytd >= months[5]))
75+ then 5
76+ else if ((ytd >= months[4]))
77+ then 4
78+ else if ((ytd >= months[3]))
79+ then 3
80+ else if ((ytd >= months[2]))
81+ then 2
82+ else if ((ytd >= months[1]))
83+ then 1
84+ else if ((ytd >= months[0]))
85+ then 0
86+ else throw()
87+ let dd = (ytd - months[mm])
88+ ((((toString((yy + 1)) + "-") + drop(toString((mm + 101)), 1)) + "-") + drop(toString((dd + 101)), 1))
89+ }
90+ let time = {
91+ let rd = (ce % (86400 * 1000))
92+ let hh = (rd / (3600 * 1000))
93+ let rh = (rd % (3600 * 1000))
94+ let mm = (rh / (60 * 1000))
95+ let rm = (rh % (60 * 1000))
96+ let ss = (rm / 1000)
97+ let ms = (rm % 1000)
98+ ((((drop(toString((hh + 100)), 1) + ":") + drop(toString((mm + 100)), 1)) + ":") + drop(toString((ss + 100)), 1))
99+ }
100+ (((date + sp) + time) + zz)
101+ }
102+ }
103+
104+
105+@Callable(inv)
106+func setBalance () = {
107+ let isActive = match getBoolean(this, "dapp_status") {
108+ case x: Boolean =>
109+ x
110+ case _ =>
111+ false
112+ }
113+ if (isActive)
114+ then throw("The account is already initialized for trading.")
115+ else if ((inv.callerPublicKey != managerPubKey))
116+ then throw("Only the administrator can adjust the balance!")
117+ else if (isDefined(inv.payment))
118+ then throw("Please do not attach payment when setting balance.")
119+ else {
120+ let date = toDateTimeString(lastBlockTime)
121+ let lastUpdate = (((take(date, 10) + "T") + take(drop(date, 11), 8)) + "Z")
122+ let baseBalance = assetBalance(this, amountAssetId)
123+ let quoteBalance = assetBalance(this, priceAssetId)
124+ WriteSet([DataEntry("balance_base", baseBalance), DataEntry("balance_quote", quoteBalance), DataEntry("dapp_status", true), DataEntry("last_update", lastUpdate)])
125+ }
126+ }
127+
128+
129+
130+@Callable(inv)
131+func sendReward (amount) = {
132+ let isActive = match getBoolean(this, "dapp_status") {
133+ case x: Boolean =>
134+ x
135+ case _ =>
136+ false
137+ }
138+ if (if (!(isActive))
139+ then true
140+ else (lastBlockTime >= (monthOpenTime + (86400 * 1000))))
141+ then throw((("The next reward will be sent after " + toDateTimeString((monthOpenTime + avgMonth))) + "."))
142+ else if ((inv.callerPublicKey != managerPubKey))
143+ then throw("Only administrator can send rewards!")
144+ else if (isDefined(inv.payment))
145+ then throw("Please do not attach payment when sending reward.")
146+ else {
147+ let oldBaseBalance = getIntegerValue(this, "balance_base")
148+ let oldQuoteBalance = getIntegerValue(this, "balance_quote")
149+ let baseBalance = assetBalance(this, amountAssetId)
150+ let quoteBalance = assetBalance(this, priceAssetId)
151+ let maxAmount = ((quoteBalance - (if (isDefined(priceAssetId))
152+ then 0
153+ else 500000)) - fraction(oldQuoteBalance, oldBaseBalance, baseBalance))
154+ if ((0 >= amount))
155+ then throw("Zero or negative rewards are not allowed.")
156+ else if ((amount > maxAmount))
157+ then throw((("The maximum allowed amount is " + toString(maxAmount)) + "."))
158+ else {
159+ let date = toDateTimeString(lastBlockTime)
160+ let lastUpdate = (((take(date, 10) + "T") + take(drop(date, 11), 8)) + "Z")
161+ let daoRecipient = extract(addressFromString(daoAddress))
162+ ScriptResult(WriteSet([DataEntry("dapp_status", false), DataEntry("last_update", lastUpdate)]), TransferSet([ScriptTransfer(daoRecipient, amount, priceAssetId)]))
163+ }
164+ }
165+ }
166+
167+
168+@Verifier(tx)
169+func verify () = {
170+ let rightSignature = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
171+ match tx {
172+ case o: Order =>
173+ let rightOrder = if (if (if (if ((o.matcherFeeAssetId == priceAssetId))
174+ then (o.assetPair.priceAsset == priceAssetId)
36175 else false)
37- then !(isDefined(o.assetPair.amountAsset))
176+ then (o.assetPair.amountAsset == amountAssetId)
38177 else false)
39- then (o.assetPair.priceAsset == payoutAssetId)
178+ then true
179+ else if (if (if ((o.orderType == Buy))
180+ then !(isDefined(priceAssetId))
181+ else false)
182+ then !(isDefined(o.matcherFeeAssetId))
183+ else false)
184+ then !(isDefined(o.assetPair.amountAsset))
185+ else false)
186+ then true
187+ else if (if (if ((o.orderType == Sell))
188+ then !(isDefined(o.matcherFeeAssetId))
189+ else false)
190+ then if (!(isDefined(o.assetPair.priceAsset)))
191+ then true
192+ else !(isDefined(o.assetPair.amountAsset))
193+ else false)
194+ then !(isFiatAsset(o.assetPair.priceAsset))
195+ else false
196+ if (rightOrder)
197+ then rightSignature
198+ else false
199+ case l: LeaseCancelTransaction|LeaseTransaction =>
200+ rightSignature
201+ case i: InvokeScriptTransaction =>
202+ let recipient = addressFromRecipient(i.dApp)
203+ let rightInvoke = if ((i.function == voteFunction))
204+ then (recipient == addressFromString(voteAddress))
205+ else false
206+ if (rightInvoke)
207+ then rightSignature
208+ else false
209+ case t: TransferTransaction =>
210+ let recipient = addressFromRecipient(t.recipient)
211+ let rightTransfer = if (if (((quarterOpenTime + (86400 * 1000)) > lastBlockTime))
212+ then if ((t.assetId == priceAssetId))
213+ then true
214+ else (t.assetId == amountAssetId)
40215 else false)
41- then true
42- else if (if (if ((o.orderType == Sell))
43- then !(isDefined(o.matcherFeeAssetId))
44- else false)
45- then if (!(isDefined(o.assetPair.priceAsset)))
46- then true
47- else !(isDefined(o.assetPair.amountAsset))
48- else false)
49- then !(isFiatAsset(o.assetPair.priceAsset))
216+ then (recipient == addressFromString(daoAddress))
50217 else false
51- if (rightOrder)
52- then sigVerify(o.bodyBytes, o.proofs[0], traderPubKey)
53- else false
54- case b: BurnTransaction =>
55- let rightBurn = if (if ((b.assetId != payoutAssetId))
56- then (b.assetId != if (isDefined(priceAssetId))
57- then priceAssetId
58- else base58'')
59- else false)
60- then (b.assetId != if (isDefined(amountAssetId))
61- then amountAssetId
62- else base58'')
63- else false
64- if (rightBurn)
65- then sigVerify(b.bodyBytes, b.proofs[0], traderPubKey)
66- else false
67- case l: LeaseCancelTransaction|LeaseTransaction =>
68- sigVerify(l.bodyBytes, l.proofs[0], traderPubKey)
69- case i: InvokeScriptTransaction =>
70- let rightInvoke = (addressFromRecipient(i.dApp) == addressFromString(votingAddress))
71- if (rightInvoke)
72- then sigVerify(i.bodyBytes, i.proofs[0], traderPubKey)
73- else false
74- case t: TransferTransaction =>
75- let recipient = addressFromRecipient(t.recipient)
76- let rightTransfer = if (if ((t.assetId == payoutAssetId))
77- then (recipient == addressFromString(payoutAddress))
78- else false)
79- then true
80- else if (if ((t.assetId == priceAssetId))
81- then true
82- else (t.assetId == amountAssetId))
83- then (recipient == addressFromString(redeemAddress))
218+ if (rightTransfer)
219+ then rightSignature
84220 else false
85- if (rightTransfer)
86- then if (sigVerify(t.bodyBytes, t.proofs[1], managerPubKey))
87- then true
88- else lockExpired
89- else false
90- case s: SetScriptTransaction =>
91- let keys = extract(s.senderPublicKey) :: investorPubKeys
92- let rightSetScript = ((if (sigVerify(s.bodyBytes, s.proofs[1], keys[1]))
93- then 1
94- else 0) > (size(investorPubKeys) / 2))
95- if (rightSetScript)
96- then sigVerify(s.bodyBytes, s.proofs[0], keys[0])
97- else false
98- case _ =>
99- false
100-}
221+ case s: SetScriptTransaction =>
222+ let keys = s.senderPublicKey :: investorPubKeys
223+ let rightSetScript = ((if (sigVerify(s.bodyBytes, s.proofs[1], keys[1]))
224+ then 1
225+ else 0) > (size(investorPubKeys) / 2))
226+ if (rightSetScript)
227+ then rightSignature
228+ else false
229+ case _ =>
230+ false
231+ }
232+ }
233+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
2-{-# CONTENT_TYPE EXPRESSION #-}
3-let payoutAddress = "3P8uxNCMRWjj2DUWAXaRXF4Q4thX9jQxXcs"
4-let redeemAddress = "3PAkNyfHB5NV9jXioZ1DG3mynhUZyUzHWML"
5-let votingAddress = "3PGEh2VpbpYyetTUTCY6bRxv2mpMwZoz5sP"
6-let lockExpired = (value(lastBlock.timestamp) >= (1609459200 * 1000))
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
74 let priceAssetId = Unit()
5+
86 let amountAssetId = base58'BS1KFNR8zrXKBEWdUUvpaP6G57Hic3aESkwK7qQKdLpB'
9-let matcherFeeId = Unit()
10-let payoutAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
11-let traderPubKey = extract(tx.senderPublicKey)
7+
8+let daoAddress = "3PLmA3WSdGbeX3FdyWyyLyWvZoffnMrND7D"
9+
10+let voteAddress = "3PGEh2VpbpYyetTUTCY6bRxv2mpMwZoz5sP"
11+
12+let voteFunction = "vote"
13+
1214 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
13-let investorPubKeys = [base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT']
14-func isFiatAsset (assetId) = if (if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'))
15+
16+let investorPubKeys = [base58'66BGZcJJ9yAWcHKZZeiuA71wAvC5GWTmdQWArjt1g6jC']
17+
18+let avgMonth = (2629746 * 1000)
19+
20+let lastBlockTime = lastBlock.timestamp
21+
22+let monthOpenTime = ((lastBlockTime / avgMonth) * avgMonth)
23+
24+let quarterOpenTime = ((lastBlockTime / (3 * avgMonth)) * (3 * avgMonth))
25+
26+func isFiatAsset (assetId) = if (if (if (if ((assetId == base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'))
1527 then true
1628 else (assetId == base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'))
17- then true
18- else (assetId == base58'DEJbZipbKQjwEiRjx2AqQFucrj5CZ3rAc4ZvFM8nAsoA'))
1929 then true
2030 else (assetId == base58'2mX5DzVKWrAJw8iwdJnV2qtoeVG9h5nTDpTqC1wb1WEN'))
2131 then true
2232 else (assetId == base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'))
2333 then true
2434 else (assetId == base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p')
2535
26-match tx {
27- case o: Order =>
28- let rightOrder = if (if (if (if ((o.matcherFeeAssetId == matcherFeeId))
29- then (o.assetPair.priceAsset == priceAssetId)
30- else false)
31- then (o.assetPair.amountAsset == amountAssetId)
32- else false)
33- then true
34- else if (if (if ((o.orderType == Buy))
35- then !(isDefined(o.matcherFeeAssetId))
36+
37+func toDateTimeString (timestamp) = {
38+ let sp = " "
39+ let zz = " UTC"
40+ let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
41+ let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
42+ if (if ((-12212553600000 > timestamp))
43+ then true
44+ else (timestamp > 253402300799999))
45+ then throw("ISO 8601: Only years from 1583 to 9999 are permitted.")
46+ else {
47+ let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
48+ let ce = (timestamp + ((epoch * 86400) * 1000))
49+ let date = {
50+ let yy = ((ce / (31556952 * 1000)) - 1)
51+ let dty = (((((yy * 365) + (yy / 4)) - (yy / 100)) + (yy / 400)) + 366)
52+ let ytd = ((ce / (86400 * 1000)) - dty)
53+ let months = if (if (if ((((yy + 1) % 4) == 0))
54+ then (((yy + 1) % 100) != 0)
55+ else false)
56+ then true
57+ else (((yy + 1) % 400) == 0))
58+ then leap
59+ else norm
60+ let mm = if ((ytd >= months[12]))
61+ then throw()
62+ else if ((ytd >= months[11]))
63+ then 11
64+ else if ((ytd >= months[10]))
65+ then 10
66+ else if ((ytd >= months[9]))
67+ then 9
68+ else if ((ytd >= months[8]))
69+ then 8
70+ else if ((ytd >= months[7]))
71+ then 7
72+ else if ((ytd >= months[6]))
73+ then 6
74+ else if ((ytd >= months[5]))
75+ then 5
76+ else if ((ytd >= months[4]))
77+ then 4
78+ else if ((ytd >= months[3]))
79+ then 3
80+ else if ((ytd >= months[2]))
81+ then 2
82+ else if ((ytd >= months[1]))
83+ then 1
84+ else if ((ytd >= months[0]))
85+ then 0
86+ else throw()
87+ let dd = (ytd - months[mm])
88+ ((((toString((yy + 1)) + "-") + drop(toString((mm + 101)), 1)) + "-") + drop(toString((dd + 101)), 1))
89+ }
90+ let time = {
91+ let rd = (ce % (86400 * 1000))
92+ let hh = (rd / (3600 * 1000))
93+ let rh = (rd % (3600 * 1000))
94+ let mm = (rh / (60 * 1000))
95+ let rm = (rh % (60 * 1000))
96+ let ss = (rm / 1000)
97+ let ms = (rm % 1000)
98+ ((((drop(toString((hh + 100)), 1) + ":") + drop(toString((mm + 100)), 1)) + ":") + drop(toString((ss + 100)), 1))
99+ }
100+ (((date + sp) + time) + zz)
101+ }
102+ }
103+
104+
105+@Callable(inv)
106+func setBalance () = {
107+ let isActive = match getBoolean(this, "dapp_status") {
108+ case x: Boolean =>
109+ x
110+ case _ =>
111+ false
112+ }
113+ if (isActive)
114+ then throw("The account is already initialized for trading.")
115+ else if ((inv.callerPublicKey != managerPubKey))
116+ then throw("Only the administrator can adjust the balance!")
117+ else if (isDefined(inv.payment))
118+ then throw("Please do not attach payment when setting balance.")
119+ else {
120+ let date = toDateTimeString(lastBlockTime)
121+ let lastUpdate = (((take(date, 10) + "T") + take(drop(date, 11), 8)) + "Z")
122+ let baseBalance = assetBalance(this, amountAssetId)
123+ let quoteBalance = assetBalance(this, priceAssetId)
124+ WriteSet([DataEntry("balance_base", baseBalance), DataEntry("balance_quote", quoteBalance), DataEntry("dapp_status", true), DataEntry("last_update", lastUpdate)])
125+ }
126+ }
127+
128+
129+
130+@Callable(inv)
131+func sendReward (amount) = {
132+ let isActive = match getBoolean(this, "dapp_status") {
133+ case x: Boolean =>
134+ x
135+ case _ =>
136+ false
137+ }
138+ if (if (!(isActive))
139+ then true
140+ else (lastBlockTime >= (monthOpenTime + (86400 * 1000))))
141+ then throw((("The next reward will be sent after " + toDateTimeString((monthOpenTime + avgMonth))) + "."))
142+ else if ((inv.callerPublicKey != managerPubKey))
143+ then throw("Only administrator can send rewards!")
144+ else if (isDefined(inv.payment))
145+ then throw("Please do not attach payment when sending reward.")
146+ else {
147+ let oldBaseBalance = getIntegerValue(this, "balance_base")
148+ let oldQuoteBalance = getIntegerValue(this, "balance_quote")
149+ let baseBalance = assetBalance(this, amountAssetId)
150+ let quoteBalance = assetBalance(this, priceAssetId)
151+ let maxAmount = ((quoteBalance - (if (isDefined(priceAssetId))
152+ then 0
153+ else 500000)) - fraction(oldQuoteBalance, oldBaseBalance, baseBalance))
154+ if ((0 >= amount))
155+ then throw("Zero or negative rewards are not allowed.")
156+ else if ((amount > maxAmount))
157+ then throw((("The maximum allowed amount is " + toString(maxAmount)) + "."))
158+ else {
159+ let date = toDateTimeString(lastBlockTime)
160+ let lastUpdate = (((take(date, 10) + "T") + take(drop(date, 11), 8)) + "Z")
161+ let daoRecipient = extract(addressFromString(daoAddress))
162+ ScriptResult(WriteSet([DataEntry("dapp_status", false), DataEntry("last_update", lastUpdate)]), TransferSet([ScriptTransfer(daoRecipient, amount, priceAssetId)]))
163+ }
164+ }
165+ }
166+
167+
168+@Verifier(tx)
169+func verify () = {
170+ let rightSignature = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
171+ match tx {
172+ case o: Order =>
173+ let rightOrder = if (if (if (if ((o.matcherFeeAssetId == priceAssetId))
174+ then (o.assetPair.priceAsset == priceAssetId)
36175 else false)
37- then !(isDefined(o.assetPair.amountAsset))
176+ then (o.assetPair.amountAsset == amountAssetId)
38177 else false)
39- then (o.assetPair.priceAsset == payoutAssetId)
178+ then true
179+ else if (if (if ((o.orderType == Buy))
180+ then !(isDefined(priceAssetId))
181+ else false)
182+ then !(isDefined(o.matcherFeeAssetId))
183+ else false)
184+ then !(isDefined(o.assetPair.amountAsset))
185+ else false)
186+ then true
187+ else if (if (if ((o.orderType == Sell))
188+ then !(isDefined(o.matcherFeeAssetId))
189+ else false)
190+ then if (!(isDefined(o.assetPair.priceAsset)))
191+ then true
192+ else !(isDefined(o.assetPair.amountAsset))
193+ else false)
194+ then !(isFiatAsset(o.assetPair.priceAsset))
195+ else false
196+ if (rightOrder)
197+ then rightSignature
198+ else false
199+ case l: LeaseCancelTransaction|LeaseTransaction =>
200+ rightSignature
201+ case i: InvokeScriptTransaction =>
202+ let recipient = addressFromRecipient(i.dApp)
203+ let rightInvoke = if ((i.function == voteFunction))
204+ then (recipient == addressFromString(voteAddress))
205+ else false
206+ if (rightInvoke)
207+ then rightSignature
208+ else false
209+ case t: TransferTransaction =>
210+ let recipient = addressFromRecipient(t.recipient)
211+ let rightTransfer = if (if (((quarterOpenTime + (86400 * 1000)) > lastBlockTime))
212+ then if ((t.assetId == priceAssetId))
213+ then true
214+ else (t.assetId == amountAssetId)
40215 else false)
41- then true
42- else if (if (if ((o.orderType == Sell))
43- then !(isDefined(o.matcherFeeAssetId))
44- else false)
45- then if (!(isDefined(o.assetPair.priceAsset)))
46- then true
47- else !(isDefined(o.assetPair.amountAsset))
48- else false)
49- then !(isFiatAsset(o.assetPair.priceAsset))
216+ then (recipient == addressFromString(daoAddress))
50217 else false
51- if (rightOrder)
52- then sigVerify(o.bodyBytes, o.proofs[0], traderPubKey)
53- else false
54- case b: BurnTransaction =>
55- let rightBurn = if (if ((b.assetId != payoutAssetId))
56- then (b.assetId != if (isDefined(priceAssetId))
57- then priceAssetId
58- else base58'')
59- else false)
60- then (b.assetId != if (isDefined(amountAssetId))
61- then amountAssetId
62- else base58'')
63- else false
64- if (rightBurn)
65- then sigVerify(b.bodyBytes, b.proofs[0], traderPubKey)
66- else false
67- case l: LeaseCancelTransaction|LeaseTransaction =>
68- sigVerify(l.bodyBytes, l.proofs[0], traderPubKey)
69- case i: InvokeScriptTransaction =>
70- let rightInvoke = (addressFromRecipient(i.dApp) == addressFromString(votingAddress))
71- if (rightInvoke)
72- then sigVerify(i.bodyBytes, i.proofs[0], traderPubKey)
73- else false
74- case t: TransferTransaction =>
75- let recipient = addressFromRecipient(t.recipient)
76- let rightTransfer = if (if ((t.assetId == payoutAssetId))
77- then (recipient == addressFromString(payoutAddress))
78- else false)
79- then true
80- else if (if ((t.assetId == priceAssetId))
81- then true
82- else (t.assetId == amountAssetId))
83- then (recipient == addressFromString(redeemAddress))
218+ if (rightTransfer)
219+ then rightSignature
84220 else false
85- if (rightTransfer)
86- then if (sigVerify(t.bodyBytes, t.proofs[1], managerPubKey))
87- then true
88- else lockExpired
89- else false
90- case s: SetScriptTransaction =>
91- let keys = extract(s.senderPublicKey) :: investorPubKeys
92- let rightSetScript = ((if (sigVerify(s.bodyBytes, s.proofs[1], keys[1]))
93- then 1
94- else 0) > (size(investorPubKeys) / 2))
95- if (rightSetScript)
96- then sigVerify(s.bodyBytes, s.proofs[0], keys[0])
97- else false
98- case _ =>
99- false
100-}
221+ case s: SetScriptTransaction =>
222+ let keys = s.senderPublicKey :: investorPubKeys
223+ let rightSetScript = ((if (sigVerify(s.bodyBytes, s.proofs[1], keys[1]))
224+ then 1
225+ else 0) > (size(investorPubKeys) / 2))
226+ if (rightSetScript)
227+ then rightSignature
228+ else false
229+ case _ =>
230+ false
231+ }
232+ }
233+

github/deemru/w8io/3ef1775 
71.34 ms