tx · J5riRfkd9W8cDjN8nL4GXqvAQV6TGAiWiWRyuvoyJVtD

3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12:  -0.01400000 Waves

2020.02.25 06:47 [1945180] smart account 3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12 > SELF 0.00000000 Waves

{ "type": 13, "id": "J5riRfkd9W8cDjN8nL4GXqvAQV6TGAiWiWRyuvoyJVtD", "fee": 1400000, "feeAssetId": null, "timestamp": 1582600847298, "version": 1, "sender": "3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12", "senderPublicKey": "5G9pgymdyBYGnWF3oahQXQNPnVaWEthMkeFRUzHjZ7mX", "proofs": [ "23iXhxjQy97F3pjDWfgfRbossKrvwigk6wS7Vmqjbif1Veu35jnSNGDC2QVv3cZHqPYnaANADTYi81tvmfcDtp4X", "5PkUpNNnvHFdzMW3en9Ke6PipCyDVKB54JoAvAis6WUjd5SVsuiWwn4nKW6MxDjggmZK5X5rstzMrzCniv1SxEwN", "4vcvK7ECQ8aBv8FEUjyCT17LoLCFtsUJYrzF2qXW5Ls3fch2PdP8YH1Msb3FF7CRBPY9cJ3Ep1maPnyJErDpMaaL" ], "script": "base64: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AAAAAAAAAwUAAAANJGFjYzMzMjcyMzMyOAQAAAANJGFjYzQzMjcyMzMyOAkBAAAADWpvaW5UaG91c2FuZHMAAAACBQAAAA0kYWNjMzMyNzIzMzI4CQABkQAAAAIFAAAADSRsaXN0MzI3MjMzMjgAAAAAAAAAAAMDCQAAAAAAAAIFAAAADSRzaXplMzI3MjMzMjgAAAAAAAAAAAQFAAAADSRhY2M0MzI3MjMzMjgEAAAADSRhY2M1MzI3MjMzMjgJAQAAAA1qb2luVGhvdXNhbmRzAAAAAgUAAAANJGFjYzQzMjcyMzMyOAkAAZEAAAACBQAAAA0kbGlzdDMyNzIzMzI4AAAAAAAAAAAEAwkAAAAAAAACBQAAAA0kc2l6ZTMyNzIzMzI4AAAAAAAAAAAFBQAAAA0kYWNjNTMyNzIzMzI4BAAAAA0kYWNjNjMyNzIzMzI4CQEAAAANam9pblRob3VzYW5kcwAAAAIFAAAADSRhY2M1MzI3MjMzMjgJAAGRAAAAAgUAAAANJGxpc3QzMjcyMzMyOAAAAAAAAAAABQMJAAAAAAAAAgUAAAANJHNpemUzMjcyMzMyOAAAAAAAAAAABgUAAAANJGFjYzYzMjcyMzMyOAQAAAANJGFjYzczMjcyMzMyOAkBAAAADWpvaW5UaG91c2FuZHMAAAACBQAAAA0kYWNjNjMyNzIzMzI4CQABkQAAAAIFAAAADSRsaXN0MzI3MjMzMjgAAAAAAAAAAAYDCQAAAAAAAAIFAAAADSRzaXplMzI3MjMzMjgAAAAAAAAAAAcFAAAADSRhY2M3MzI3MjMzMjgEAAAADSRhY2M4MzI3MjMzMjgJAQAAAA1qb2luVGhvdXNhbmRzAAAAAgUAAAANJGFjYzczMjcyMzMyOAkAAZEAAAACBQAAAA0kbGlzdDMyNzIzMzI4AAAAAAAAAAAHCQAAAgAAAAECAAAAEkxpc3Qgc2l6ZSBleGNlZWQgNwQAAAACZnMJAQAAAA1kcm9wUmlnaHRaZXJvAAAAAQkBAAAADWRyb3BSaWdodFplcm8AAAABCQEAAAANZHJvcFJpZ2h0WmVybwAAAAEJAQAAAA1kcm9wUmlnaHRaZXJvAAAAAQkBAAAADWRyb3BSaWdodFplcm8AAAABCQEAAAANZHJvcFJpZ2h0WmVybwAAAAEJAQAAAA1kcm9wUmln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", "chainId": 87, "height": 1945180, "spentComplexity": 0 } View: original | compacted Prev: CcXRbcLQXjKzZViGJQ7CfPvJiqnfTGtMWcoY7fY5KSCY Next: none Diff:
OldNewDifferences
44 let assetName = "RusCoin"
55
66 let decMult = 100000
7-
8-let minConf = (960 * 1000)
97
108 let lockPeriod = (2629746 * 1000)
119
2523
2624 let frameCloseTime = (frameOpenTime + lockPeriod)
2725
28-let payoutOpenTime = (frameOpenTime + ((30 * 86400) * 1000))
26+let payoutOpenTime = (frameCloseTime - (86400 * 1000))
2927
3028 func toFloatString (num,mult) = {
3129 let th = ","
5755 let q1 = (r2 / 1000)
5856 let r1 = (r2 % 1000)
5957 let is = {
60- let $list33433399 = [q6, q5, q4, q3, q2, q1, r1]
61- let $size33433399 = size($list33433399)
62- let $acc033433399 = ""
63- if (($size33433399 == 0))
64- then $acc033433399
58+ let $list32723328 = [q6, q5, q4, q3, q2, q1, r1]
59+ let $size32723328 = size($list32723328)
60+ let $acc032723328 = ""
61+ if (($size32723328 == 0))
62+ then $acc032723328
6563 else {
66- let $acc133433399 = joinThousands($acc033433399, $list33433399[0])
67- if (($size33433399 == 1))
68- then $acc133433399
64+ let $acc132723328 = joinThousands($acc032723328, $list32723328[0])
65+ if (($size32723328 == 1))
66+ then $acc132723328
6967 else {
70- let $acc233433399 = joinThousands($acc133433399, $list33433399[1])
71- if (($size33433399 == 2))
72- then $acc233433399
68+ let $acc232723328 = joinThousands($acc132723328, $list32723328[1])
69+ if (($size32723328 == 2))
70+ then $acc232723328
7371 else {
74- let $acc333433399 = joinThousands($acc233433399, $list33433399[2])
75- if (($size33433399 == 3))
76- then $acc333433399
72+ let $acc332723328 = joinThousands($acc232723328, $list32723328[2])
73+ if (($size32723328 == 3))
74+ then $acc332723328
7775 else {
78- let $acc433433399 = joinThousands($acc333433399, $list33433399[3])
79- if (($size33433399 == 4))
80- then $acc433433399
76+ let $acc432723328 = joinThousands($acc332723328, $list32723328[3])
77+ if (($size32723328 == 4))
78+ then $acc432723328
8179 else {
82- let $acc533433399 = joinThousands($acc433433399, $list33433399[4])
83- if (($size33433399 == 5))
84- then $acc533433399
80+ let $acc532723328 = joinThousands($acc432723328, $list32723328[4])
81+ if (($size32723328 == 5))
82+ then $acc532723328
8583 else {
86- let $acc633433399 = joinThousands($acc533433399, $list33433399[5])
87- if (($size33433399 == 6))
88- then $acc633433399
84+ let $acc632723328 = joinThousands($acc532723328, $list32723328[5])
85+ if (($size32723328 == 6))
86+ then $acc632723328
8987 else {
90- let $acc733433399 = joinThousands($acc633433399, $list33433399[6])
91- if (($size33433399 == 7))
92- then $acc733433399
88+ let $acc732723328 = joinThousands($acc632723328, $list32723328[6])
89+ if (($size32723328 == 7))
90+ then $acc732723328
9391 else {
94- let $acc833433399 = joinThousands($acc733433399, $list33433399[7])
92+ let $acc832723328 = joinThousands($acc732723328, $list32723328[7])
9593 throw("List size exceed 7")
9694 }
9795 }
217215 let newBalance = if (isActive)
218216 then (balance + amount)
219217 else amount
220- if (if ((minBalance > newBalance))
221- then true
222- else (newBalance > maxBalance))
223- then throw((((((((("The minimum allowable balance is " + toFloatString(minBalance, decMult)) + " ") + assetName) + ", and the maximum is ") + toFloatString(maxBalance, decMult)) + " ") + assetName) + "."))
224- else {
225- let startTime = if (if (isOlder)
226- then isActive
227- else false)
228- then frameOpenTime
229- else if (if (isOlder)
230- then !(isActive)
218+ if ((minBalance > newBalance))
219+ then throw((((("The minimum allowable balance is " + toFloatString(minBalance, decMult)) + " ") + assetName) + "."))
220+ else if ((newBalance > maxBalance))
221+ then throw((((("The maximum allowable balance is " + toFloatString(maxBalance, decMult)) + " ") + assetName) + "."))
222+ else {
223+ let startTime = if (if (isOlder)
224+ then isActive
231225 else false)
232- then lastBlockTime
233- else match getInteger(this, (client + "_starttime")) {
234- case x: Int =>
235- if (isActive)
236- then x
237- else ((x + lastBlockTime) - updateTime)
238- case _ =>
239- 0
240- }
241- let newStartTime = if ((startTime > lastBlockTime))
242- then frameCloseTime
243- else {
244- let balWeight = (balance / minBalance)
245- let sumWeight = (newBalance / minBalance)
246- (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
247- }
248- if (isActive)
249- then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
250- else if (isDefined(getString(this, (client + "_address"))))
251- then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
252- else WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
253- }
226+ then frameOpenTime
227+ else if (if (isOlder)
228+ then !(isActive)
229+ else false)
230+ then lastBlockTime
231+ else match getInteger(this, (client + "_starttime")) {
232+ case x: Int =>
233+ if (isActive)
234+ then x
235+ else ((x + lastBlockTime) - updateTime)
236+ case _ =>
237+ 0
238+ }
239+ let newStartTime = if ((startTime > lastBlockTime))
240+ then frameCloseTime
241+ else {
242+ let balWeight = (balance / minBalance)
243+ let sumWeight = (newBalance / minBalance)
244+ (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
245+ }
246+ if (isActive)
247+ then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
248+ else if (isDefined(getString(this, (client + "_address"))))
249+ then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
250+ else WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
251+ }
254252 }
255253 }
256254
300298 then (expiration > lastBlockTime)
301299 else false)
302300 then throw((("Unable to withdraw coins! The account is locked for up to " + toDateTimeString(expiration)) + ". Please wait..."))
303- else if ((0 >= amount))
304- then throw("It's impossible to withdraw a negative amount or no balance.")
305- else if ((amount > balance))
306- then throw((((((("It's impossible to withdraw more than the balance of " + toString(balance)) + " (") + toFloatString(balance, decMult)) + " ") + assetName) + ")."))
307- else if ((minBalance > amount))
308- then throw((((((("The minimum withdrawal amount is " + toString(minBalance)) + " (") + toFloatString(minBalance, decMult)) + " ") + assetName) + ")."))
309- else if (((lastUpdate + minConf) > lastBlockTime))
310- then throw((((("Please wait " + toString((minConf / 60000))) + " confirmations until ") + drop(toDateTimeString((lastUpdate + minConf)), 11)) + "..."))
301+ else if ((lastBlockTime >= payoutOpenTime))
302+ then throw((("Sending rewards: The account is suspended for the period until " + toDateTimeString(frameCloseTime)) + ". Please wait..."))
303+ else if ((0 >= amount))
304+ then throw("It's impossible to withdraw a negative amount or no balance.")
305+ else if ((amount > balance))
306+ then throw((((((("It's impossible to withdraw more than the balance of " + toString(balance)) + " (") + toFloatString(balance, decMult)) + " ") + assetName) + ")."))
307+ else if ((minBalance > amount))
308+ then throw((((((("The minimum withdrawal amount is " + toString(minBalance)) + " (") + toFloatString(minBalance, decMult)) + " ") + assetName) + ")."))
311309 else {
312310 let startTime = if (isOlder)
313311 then frameOpenTime
341339 then throw("Only an administrator can set and modify minStake!")
342340 else if (isDefined(inv.payment))
343341 then throw("Please do not attach payment when setting up minStake.")
344- else {
345- let dapp = toBase58String(this.bytes)
346- if (isDefined(getString(this, (dapp + "_address"))))
347- then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
348- else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
349- }
342+ else if ((0 > RSCx100000))
343+ then throw("Negative values are not allowed. Zero to block all deposits...")
344+ else {
345+ let dapp = toBase58String(this.bytes)
346+ if (isDefined(getString(this, (dapp + "_address"))))
347+ then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
348+ else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
349+ }
350350
351351
352352
375375 else if ((rewards > effBalance))
376376 then throw((((("Insufficient effective balance! The required amount is " + toFloatString((rewards - effBalance), decMult)) + " ") + assetName) + "."))
377377 else {
378- let data9 = if (if ((addr9 == "-"))
379- then (amount9 == 0)
378+ let data9 = if (if ((amount9 == 0))
379+ then if (if ((addr9 == ""))
380+ then true
381+ else (addr9 == "-"))
382+ then true
383+ else (addr9 == "n/a")
380384 else false)
381385 then nil
382386 else if (!(getBooleanValue(this, (addr9 + "_status"))))
389393 then throw("Deposit of address #9 will be overfilled!")
390394 else [DataEntry((addr9 + "_balance"), newBalance), DataEntry((addr9 + "_starttime"), frameCloseTime)]
391395 }
392- let data8 = if (if ((addr8 == "-"))
393- then (amount8 == 0)
396+ let data8 = if (if ((amount8 == 0))
397+ then if (if ((addr8 == ""))
398+ then true
399+ else (addr8 == "-"))
400+ then true
401+ else (addr8 == "n/a")
394402 else false)
395403 then data9
396404 else if (!(getBooleanValue(this, (addr8 + "_status"))))
403411 then throw("Deposit of address #8 will be overfilled!")
404412 else [DataEntry((addr8 + "_balance"), newBalance), DataEntry((addr8 + "_starttime"), frameCloseTime)] :: data9
405413 }
406- let data7 = if (if ((addr7 == "-"))
407- then (amount7 == 0)
414+ let data7 = if (if ((amount7 == 0))
415+ then if (if ((addr7 == ""))
416+ then true
417+ else (addr7 == "-"))
418+ then true
419+ else (addr7 == "n/a")
408420 else false)
409421 then data8
410422 else if (!(getBooleanValue(this, (addr7 + "_status"))))
417429 then throw("Deposit of address #7 will be overfilled!")
418430 else [DataEntry((addr7 + "_balance"), newBalance), DataEntry((addr7 + "_starttime"), frameCloseTime)] :: data8
419431 }
420- let data6 = if (if ((addr6 == "-"))
421- then (amount6 == 0)
432+ let data6 = if (if ((amount6 == 0))
433+ then if (if ((addr6 == ""))
434+ then true
435+ else (addr6 == "-"))
436+ then true
437+ else (addr6 == "n/a")
422438 else false)
423439 then data7
424440 else if (!(getBooleanValue(this, (addr6 + "_status"))))
431447 then throw("Deposit of address #6 will be overfilled!")
432448 else [DataEntry((addr6 + "_balance"), newBalance), DataEntry((addr6 + "_starttime"), frameCloseTime)] :: data7
433449 }
434- let data5 = if (if ((addr5 == "-"))
435- then (amount5 == 0)
450+ let data5 = if (if ((amount5 == 0))
451+ then if (if ((addr5 == ""))
452+ then true
453+ else (addr5 == "-"))
454+ then true
455+ else (addr5 == "n/a")
436456 else false)
437457 then data6
438458 else if (!(getBooleanValue(this, (addr5 + "_status"))))
445465 then throw("Deposit of address #5 will be overfilled!")
446466 else [DataEntry((addr5 + "_balance"), newBalance), DataEntry((addr5 + "_starttime"), frameCloseTime)] :: data6
447467 }
448- let data4 = if (if ((addr4 == "-"))
449- then (amount4 == 0)
468+ let data4 = if (if ((amount4 == 0))
469+ then if (if ((addr4 == ""))
470+ then true
471+ else (addr4 == "-"))
472+ then true
473+ else (addr4 == "n/a")
450474 else false)
451475 then data5
452476 else if (!(getBooleanValue(this, (addr4 + "_status"))))
459483 then throw("Deposit of address #4 will be overfilled!")
460484 else [DataEntry((addr4 + "_balance"), newBalance), DataEntry((addr4 + "_starttime"), frameCloseTime)] :: data5
461485 }
462- let data3 = if (if ((addr3 == "-"))
463- then (amount3 == 0)
486+ let data3 = if (if ((amount3 == 0))
487+ then if (if ((addr3 == ""))
488+ then true
489+ else (addr3 == "-"))
490+ then true
491+ else (addr3 == "n/a")
464492 else false)
465493 then data4
466494 else if (!(getBooleanValue(this, (addr3 + "_status"))))
473501 then throw("Deposit of address #3 will be overfilled!")
474502 else [DataEntry((addr3 + "_balance"), newBalance), DataEntry((addr3 + "_starttime"), frameCloseTime)] :: data4
475503 }
476- let data2 = if (if ((addr2 == "-"))
477- then (amount2 == 0)
504+ let data2 = if (if ((amount2 == 0))
505+ then if (if ((addr2 == ""))
506+ then true
507+ else (addr2 == "-"))
508+ then true
509+ else (addr2 == "n/a")
478510 else false)
479511 then data3
480512 else if (!(getBooleanValue(this, (addr2 + "_status"))))
487519 then throw("Deposit of address #2 will be overfilled!")
488520 else [DataEntry((addr2 + "_balance"), newBalance), DataEntry((addr2 + "_starttime"), frameCloseTime)] :: data3
489521 }
490- let data1 = if (if ((addr1 == "-"))
491- then (amount1 == 0)
522+ let data1 = if (if ((amount1 == 0))
523+ then if (if ((addr1 == ""))
524+ then true
525+ else (addr1 == "-"))
526+ then true
527+ else (addr1 == "n/a")
492528 else false)
493529 then data2
494530 else if (!(getBooleanValue(this, (addr1 + "_status"))))
501537 then throw("Deposit of address #1 will be overfilled!")
502538 else [DataEntry((addr1 + "_balance"), newBalance), DataEntry((addr1 + "_starttime"), frameCloseTime)] :: data2
503539 }
504- let data0 = if (if ((addr0 == "-"))
505- then (amount0 == 0)
540+ let data0 = if (if ((amount0 == 0))
541+ then if (if ((addr0 == ""))
542+ then true
543+ else (addr0 == "-"))
544+ then true
545+ else (addr0 == "n/a")
506546 else false)
507547 then data1
508548 else if (!(getBooleanValue(this, (addr0 + "_status"))))
522562
523563 @Verifier(tx)
524564 func verify () = match tx {
525- case a: CreateAliasTransaction =>
526- sigVerify(a.bodyBytes, a.proofs[0], a.senderPublicKey)
527565 case t: TransferTransaction =>
528566 if (if ((t.assetId != myAssetId))
529567 then (t.feeAssetId != myAssetId)
530568 else false)
531- then sigVerify(t.bodyBytes, t.proofs[0], t.senderPublicKey)
569+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
532570 else false
533571 case s: SetScriptTransaction =>
534- if (sigVerify(s.bodyBytes, s.proofs[2], ownerPubKey))
535- then sigVerify(s.bodyBytes, s.proofs[1], managerPubKey)
572+ if (sigVerify(tx.bodyBytes, tx.proofs[2], ownerPubKey))
573+ then sigVerify(tx.bodyBytes, tx.proofs[1], managerPubKey)
536574 else false
537575 case _ =>
538576 false
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let assetName = "RusCoin"
55
66 let decMult = 100000
7-
8-let minConf = (960 * 1000)
97
108 let lockPeriod = (2629746 * 1000)
119
1210 let minBalance = (decMult / 100)
1311
1412 let maxBalance = (10000 * decMult)
1513
1614 let myAssetId = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4'
1715
1816 let ownerPubKey = base58'2in4yGNBKfitQbXbsHmL2unWrUnRo7GWyqcZXsmAzhQi'
1917
2018 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
2119
2220 let lastBlockTime = lastBlock.timestamp
2321
2422 let frameOpenTime = ((lastBlockTime / lockPeriod) * lockPeriod)
2523
2624 let frameCloseTime = (frameOpenTime + lockPeriod)
2725
28-let payoutOpenTime = (frameOpenTime + ((30 * 86400) * 1000))
26+let payoutOpenTime = (frameCloseTime - (86400 * 1000))
2927
3028 func toFloatString (num,mult) = {
3129 let th = ","
3230 let dp = "."
3331 func joinThousands (acc,val) = if (if ((acc == ""))
3432 then (val == 0)
3533 else false)
3634 then ""
3735 else if ((acc == ""))
3836 then toString(val)
3937 else ((acc + th) + drop(toString((val + 1000)), 1))
4038
4139 func dropRightZero (str) = if ((drop(str, (size(str) - 1)) != "0"))
4240 then str
4341 else take(str, (size(str) - 1))
4442
4543 let ip = (num / mult)
4644 let fp = (num % mult)
4745 let q6 = (ip / (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
4846 let r6 = (ip % (((((1000 * 1000) * 1000) * 1000) * 1000) * 1000))
4947 let q5 = (r6 / ((((1000 * 1000) * 1000) * 1000) * 1000))
5048 let r5 = (r6 % ((((1000 * 1000) * 1000) * 1000) * 1000))
5149 let q4 = (r5 / (((1000 * 1000) * 1000) * 1000))
5250 let r4 = (r5 % (((1000 * 1000) * 1000) * 1000))
5351 let q3 = (r4 / ((1000 * 1000) * 1000))
5452 let r3 = (r4 % ((1000 * 1000) * 1000))
5553 let q2 = (r3 / (1000 * 1000))
5654 let r2 = (r3 % (1000 * 1000))
5755 let q1 = (r2 / 1000)
5856 let r1 = (r2 % 1000)
5957 let is = {
60- let $list33433399 = [q6, q5, q4, q3, q2, q1, r1]
61- let $size33433399 = size($list33433399)
62- let $acc033433399 = ""
63- if (($size33433399 == 0))
64- then $acc033433399
58+ let $list32723328 = [q6, q5, q4, q3, q2, q1, r1]
59+ let $size32723328 = size($list32723328)
60+ let $acc032723328 = ""
61+ if (($size32723328 == 0))
62+ then $acc032723328
6563 else {
66- let $acc133433399 = joinThousands($acc033433399, $list33433399[0])
67- if (($size33433399 == 1))
68- then $acc133433399
64+ let $acc132723328 = joinThousands($acc032723328, $list32723328[0])
65+ if (($size32723328 == 1))
66+ then $acc132723328
6967 else {
70- let $acc233433399 = joinThousands($acc133433399, $list33433399[1])
71- if (($size33433399 == 2))
72- then $acc233433399
68+ let $acc232723328 = joinThousands($acc132723328, $list32723328[1])
69+ if (($size32723328 == 2))
70+ then $acc232723328
7371 else {
74- let $acc333433399 = joinThousands($acc233433399, $list33433399[2])
75- if (($size33433399 == 3))
76- then $acc333433399
72+ let $acc332723328 = joinThousands($acc232723328, $list32723328[2])
73+ if (($size32723328 == 3))
74+ then $acc332723328
7775 else {
78- let $acc433433399 = joinThousands($acc333433399, $list33433399[3])
79- if (($size33433399 == 4))
80- then $acc433433399
76+ let $acc432723328 = joinThousands($acc332723328, $list32723328[3])
77+ if (($size32723328 == 4))
78+ then $acc432723328
8179 else {
82- let $acc533433399 = joinThousands($acc433433399, $list33433399[4])
83- if (($size33433399 == 5))
84- then $acc533433399
80+ let $acc532723328 = joinThousands($acc432723328, $list32723328[4])
81+ if (($size32723328 == 5))
82+ then $acc532723328
8583 else {
86- let $acc633433399 = joinThousands($acc533433399, $list33433399[5])
87- if (($size33433399 == 6))
88- then $acc633433399
84+ let $acc632723328 = joinThousands($acc532723328, $list32723328[5])
85+ if (($size32723328 == 6))
86+ then $acc632723328
8987 else {
90- let $acc733433399 = joinThousands($acc633433399, $list33433399[6])
91- if (($size33433399 == 7))
92- then $acc733433399
88+ let $acc732723328 = joinThousands($acc632723328, $list32723328[6])
89+ if (($size32723328 == 7))
90+ then $acc732723328
9391 else {
94- let $acc833433399 = joinThousands($acc733433399, $list33433399[7])
92+ let $acc832723328 = joinThousands($acc732723328, $list32723328[7])
9593 throw("List size exceed 7")
9694 }
9795 }
9896 }
9997 }
10098 }
10199 }
102100 }
103101 }
104102 }
105103 let fs = dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(dropRightZero(take(drop(toString((fp + mult)), 1), 8)))))))))
106104 ((if ((is != ""))
107105 then is
108106 else "0") + (if ((fs != ""))
109107 then (dp + fs)
110108 else ""))
111109 }
112110
113111
114112 func toDateTimeString (timestamp) = {
115113 let sp = " "
116114 let zz = " UTC"
117115 let norm = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]
118116 let leap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]
119117 if (if ((-12212553600000 > timestamp))
120118 then true
121119 else (timestamp > 253402300799999))
122120 then throw("ISO 8601: Only years from 1583 to 9999 are permitted.")
123121 else {
124122 let epoch = (((((1969 * 365) + (1969 / 4)) - (1969 / 100)) + (1969 / 400)) + 366)
125123 let ce = (timestamp + ((epoch * 86400) * 1000))
126124 let date = {
127125 let yy = ((ce / (31556952 * 1000)) - 1)
128126 let dty = (((((yy * 365) + (yy / 4)) - (yy / 100)) + (yy / 400)) + 366)
129127 let ytd = ((ce / (86400 * 1000)) - dty)
130128 let months = if (if (if ((((yy + 1) % 4) == 0))
131129 then (((yy + 1) % 100) != 0)
132130 else false)
133131 then true
134132 else (((yy + 1) % 400) == 0))
135133 then leap
136134 else norm
137135 let mm = if ((ytd >= months[12]))
138136 then throw()
139137 else if ((ytd >= months[11]))
140138 then 11
141139 else if ((ytd >= months[10]))
142140 then 10
143141 else if ((ytd >= months[9]))
144142 then 9
145143 else if ((ytd >= months[8]))
146144 then 8
147145 else if ((ytd >= months[7]))
148146 then 7
149147 else if ((ytd >= months[6]))
150148 then 6
151149 else if ((ytd >= months[5]))
152150 then 5
153151 else if ((ytd >= months[4]))
154152 then 4
155153 else if ((ytd >= months[3]))
156154 then 3
157155 else if ((ytd >= months[2]))
158156 then 2
159157 else if ((ytd >= months[1]))
160158 then 1
161159 else if ((ytd >= months[0]))
162160 then 0
163161 else throw()
164162 let dd = (ytd - months[mm])
165163 ((((toString((yy + 1)) + "-") + drop(toString((mm + 101)), 1)) + "-") + drop(toString((dd + 101)), 1))
166164 }
167165 let time = {
168166 let rd = (ce % (86400 * 1000))
169167 let hh = (rd / (3600 * 1000))
170168 let rh = (rd % (3600 * 1000))
171169 let mm = (rh / (60 * 1000))
172170 let rm = (rh % (60 * 1000))
173171 let ss = (rm / 1000)
174172 let ms = (rm % 1000)
175173 ((((drop(toString((hh + 100)), 1) + ":") + drop(toString((mm + 100)), 1)) + ":") + drop(toString((ss + 100)), 1))
176174 }
177175 (((date + sp) + time) + zz)
178176 }
179177 }
180178
181179
182180 @Callable(inv)
183181 func deposit () = {
184182 let attPayment = if (isDefined(inv.payment))
185183 then extract(inv.payment)
186184 else throw((("There is no attached payment " + assetName) + "."))
187185 if ((attPayment.assetId != myAssetId))
188186 then throw((("Only " + assetName) + " is allowed to deposit."))
189187 else {
190188 let dapp = toBase58String(this.bytes)
191189 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
192190 let client = toBase58String(inv.caller.bytes)
193191 let updateTime = match getInteger(this, (client + "_updatetime")) {
194192 case x: Int =>
195193 x
196194 case _ =>
197195 0
198196 }
199197 let isOlder = (frameOpenTime >= updateTime)
200198 let isActive = match getBoolean(this, (client + "_status")) {
201199 case x: Boolean =>
202200 x
203201 case _ =>
204202 false
205203 }
206204 let balance = if (if (isOlder)
207205 then !(isActive)
208206 else false)
209207 then 0
210208 else match getInteger(this, (client + "_balance")) {
211209 case x: Int =>
212210 x
213211 case _ =>
214212 0
215213 }
216214 let amount = attPayment.amount
217215 let newBalance = if (isActive)
218216 then (balance + amount)
219217 else amount
220- if (if ((minBalance > newBalance))
221- then true
222- else (newBalance > maxBalance))
223- then throw((((((((("The minimum allowable balance is " + toFloatString(minBalance, decMult)) + " ") + assetName) + ", and the maximum is ") + toFloatString(maxBalance, decMult)) + " ") + assetName) + "."))
224- else {
225- let startTime = if (if (isOlder)
226- then isActive
227- else false)
228- then frameOpenTime
229- else if (if (isOlder)
230- then !(isActive)
218+ if ((minBalance > newBalance))
219+ then throw((((("The minimum allowable balance is " + toFloatString(minBalance, decMult)) + " ") + assetName) + "."))
220+ else if ((newBalance > maxBalance))
221+ then throw((((("The maximum allowable balance is " + toFloatString(maxBalance, decMult)) + " ") + assetName) + "."))
222+ else {
223+ let startTime = if (if (isOlder)
224+ then isActive
231225 else false)
232- then lastBlockTime
233- else match getInteger(this, (client + "_starttime")) {
234- case x: Int =>
235- if (isActive)
236- then x
237- else ((x + lastBlockTime) - updateTime)
238- case _ =>
239- 0
240- }
241- let newStartTime = if ((startTime > lastBlockTime))
242- then frameCloseTime
243- else {
244- let balWeight = (balance / minBalance)
245- let sumWeight = (newBalance / minBalance)
246- (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
247- }
248- if (isActive)
249- then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
250- else if (isDefined(getString(this, (client + "_address"))))
251- then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
252- else WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
253- }
226+ then frameOpenTime
227+ else if (if (isOlder)
228+ then !(isActive)
229+ else false)
230+ then lastBlockTime
231+ else match getInteger(this, (client + "_starttime")) {
232+ case x: Int =>
233+ if (isActive)
234+ then x
235+ else ((x + lastBlockTime) - updateTime)
236+ case _ =>
237+ 0
238+ }
239+ let newStartTime = if ((startTime > lastBlockTime))
240+ then frameCloseTime
241+ else {
242+ let balWeight = (balance / minBalance)
243+ let sumWeight = (newBalance / minBalance)
244+ (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
245+ }
246+ if (isActive)
247+ then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
248+ else if (isDefined(getString(this, (client + "_address"))))
249+ then WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
250+ else WriteSet([DataEntry((dapp + "_balance"), (sumTotal + amount)), DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
251+ }
254252 }
255253 }
256254
257255
258256
259257 @Callable(inv)
260258 func withdraw (RSCx100000) = if (isDefined(inv.payment))
261259 then throw("Please do not attach payment when withdrawing funds.")
262260 else {
263261 let dapp = toBase58String(this.bytes)
264262 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
265263 let minStake = getIntegerValue(this, (dapp + "_starttime"))
266264 let dappTime = getIntegerValue(this, (dapp + "_updatetime"))
267265 let client = toBase58String(inv.caller.bytes)
268266 let updateTime = match getInteger(this, (client + "_updatetime")) {
269267 case x: Int =>
270268 x
271269 case _ =>
272270 0
273271 }
274272 let isOlder = (frameOpenTime >= updateTime)
275273 let isActive = match getBoolean(this, (client + "_status")) {
276274 case x: Boolean =>
277275 x
278276 case _ =>
279277 false
280278 }
281279 let balance = if (!(isActive))
282280 then 0
283281 else match getInteger(this, (client + "_balance")) {
284282 case x: Int =>
285283 x
286284 case _ =>
287285 0
288286 }
289287 let expiration = (updateTime + lockPeriod)
290288 let lastUpdate = if ((dappTime > updateTime))
291289 then dappTime
292290 else updateTime
293291 let amount = if ((RSCx100000 > 0))
294292 then RSCx100000
295293 else balance
296294 let newBalance = (balance - amount)
297295 if (if (if ((minStake >= 0))
298296 then (balance >= minStake)
299297 else false)
300298 then (expiration > lastBlockTime)
301299 else false)
302300 then throw((("Unable to withdraw coins! The account is locked for up to " + toDateTimeString(expiration)) + ". Please wait..."))
303- else if ((0 >= amount))
304- then throw("It's impossible to withdraw a negative amount or no balance.")
305- else if ((amount > balance))
306- then throw((((((("It's impossible to withdraw more than the balance of " + toString(balance)) + " (") + toFloatString(balance, decMult)) + " ") + assetName) + ")."))
307- else if ((minBalance > amount))
308- then throw((((((("The minimum withdrawal amount is " + toString(minBalance)) + " (") + toFloatString(minBalance, decMult)) + " ") + assetName) + ")."))
309- else if (((lastUpdate + minConf) > lastBlockTime))
310- then throw((((("Please wait " + toString((minConf / 60000))) + " confirmations until ") + drop(toDateTimeString((lastUpdate + minConf)), 11)) + "..."))
301+ else if ((lastBlockTime >= payoutOpenTime))
302+ then throw((("Sending rewards: The account is suspended for the period until " + toDateTimeString(frameCloseTime)) + ". Please wait..."))
303+ else if ((0 >= amount))
304+ then throw("It's impossible to withdraw a negative amount or no balance.")
305+ else if ((amount > balance))
306+ then throw((((((("It's impossible to withdraw more than the balance of " + toString(balance)) + " (") + toFloatString(balance, decMult)) + " ") + assetName) + ")."))
307+ else if ((minBalance > amount))
308+ then throw((((((("The minimum withdrawal amount is " + toString(minBalance)) + " (") + toFloatString(minBalance, decMult)) + " ") + assetName) + ")."))
311309 else {
312310 let startTime = if (isOlder)
313311 then frameOpenTime
314312 else match getInteger(this, (client + "_starttime")) {
315313 case x: Int =>
316314 x
317315 case _ =>
318316 0
319317 }
320318 let newStartTime = if ((startTime > lastBlockTime))
321319 then frameCloseTime
322320 else if ((minBalance > newBalance))
323321 then startTime
324322 else {
325323 let balWeight = (balance / minBalance)
326324 let sumWeight = (newBalance / minBalance)
327325 (fraction(startTime, balWeight, sumWeight) + fraction(lastBlockTime, (sumWeight - balWeight), sumWeight))
328326 }
329327 if ((newBalance >= minBalance))
330328 then ScriptResult(WriteSet([DataEntry((dapp + "_balance"), (sumTotal - amount)), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(inv.caller, amount, myAssetId)]))
331329 else ScriptResult(WriteSet([DataEntry((dapp + "_balance"), (sumTotal - balance)), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(inv.caller, balance, myAssetId)]))
332330 }
333331 }
334332
335333
336334
337335 @Callable(inv)
338336 func setMinStake (RSCx100000) = if (if ((inv.callerPublicKey != ownerPubKey))
339337 then (inv.callerPublicKey != managerPubKey)
340338 else false)
341339 then throw("Only an administrator can set and modify minStake!")
342340 else if (isDefined(inv.payment))
343341 then throw("Please do not attach payment when setting up minStake.")
344- else {
345- let dapp = toBase58String(this.bytes)
346- if (isDefined(getString(this, (dapp + "_address"))))
347- then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
348- else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
349- }
342+ else if ((0 > RSCx100000))
343+ then throw("Negative values are not allowed. Zero to block all deposits...")
344+ else {
345+ let dapp = toBase58String(this.bytes)
346+ if (isDefined(getString(this, (dapp + "_address"))))
347+ then WriteSet([DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_updatetime"), lastBlockTime)])
348+ else WriteSet([DataEntry((dapp + "_address"), dapp), DataEntry((dapp + "_balance"), 0), DataEntry((dapp + "_starttime"), RSCx100000), DataEntry((dapp + "_status"), false), DataEntry((dapp + "_updatetime"), lastBlockTime)])
349+ }
350350
351351
352352
353353 @Callable(inv)
354354 func sendRewards (addr0,amount0,addr1,amount1,addr2,amount2,addr3,amount3,addr4,amount4,addr5,amount5,addr6,amount6,addr7,amount7,addr8,amount8,addr9,amount9) = if (if ((inv.callerPublicKey != ownerPubKey))
355355 then (inv.callerPublicKey != managerPubKey)
356356 else false)
357357 then throw("Only administrator can send rewards to customers!")
358358 else if ((payoutOpenTime > lastBlockTime))
359359 then throw((("The time to send rewards has not yet come! Beginning at " + toDateTimeString(payoutOpenTime)) + ". Please wait..."))
360360 else {
361361 let dapp = toBase58String(this.bytes)
362362 let sumTotal = getIntegerValue(this, (dapp + "_balance"))
363363 let available = (assetBalance(this, myAssetId) - sumTotal)
364364 let rewards = (((((((((amount0 + amount1) + amount2) + amount3) + amount4) + amount5) + amount6) + amount7) + amount8) + amount9)
365365 let effBalance = if (!(isDefined(inv.payment)))
366366 then available
367367 else {
368368 let attPayment = extract(inv.payment)
369369 if ((attPayment.assetId != myAssetId))
370370 then throw((("Only " + assetName) + " is allowed to deposit."))
371371 else (available + attPayment.amount)
372372 }
373373 if ((0 >= rewards))
374374 then throw("Zero or negative rewards are not allowed.")
375375 else if ((rewards > effBalance))
376376 then throw((((("Insufficient effective balance! The required amount is " + toFloatString((rewards - effBalance), decMult)) + " ") + assetName) + "."))
377377 else {
378- let data9 = if (if ((addr9 == "-"))
379- then (amount9 == 0)
378+ let data9 = if (if ((amount9 == 0))
379+ then if (if ((addr9 == ""))
380+ then true
381+ else (addr9 == "-"))
382+ then true
383+ else (addr9 == "n/a")
380384 else false)
381385 then nil
382386 else if (!(getBooleanValue(this, (addr9 + "_status"))))
383387 then throw("The status of address #9 is inactive!")
384388 else if ((0 >= amount9))
385389 then throw("Zero or negative amounts are not allowed.")
386390 else {
387391 let newBalance = (getIntegerValue(this, (addr9 + "_balance")) + amount9)
388392 if ((newBalance > maxBalance))
389393 then throw("Deposit of address #9 will be overfilled!")
390394 else [DataEntry((addr9 + "_balance"), newBalance), DataEntry((addr9 + "_starttime"), frameCloseTime)]
391395 }
392- let data8 = if (if ((addr8 == "-"))
393- then (amount8 == 0)
396+ let data8 = if (if ((amount8 == 0))
397+ then if (if ((addr8 == ""))
398+ then true
399+ else (addr8 == "-"))
400+ then true
401+ else (addr8 == "n/a")
394402 else false)
395403 then data9
396404 else if (!(getBooleanValue(this, (addr8 + "_status"))))
397405 then throw("The status of address #8 is inactive!")
398406 else if ((0 >= amount8))
399407 then throw("Zero or negative amounts are not allowed.")
400408 else {
401409 let newBalance = (getIntegerValue(this, (addr8 + "_balance")) + amount8)
402410 if ((newBalance > maxBalance))
403411 then throw("Deposit of address #8 will be overfilled!")
404412 else [DataEntry((addr8 + "_balance"), newBalance), DataEntry((addr8 + "_starttime"), frameCloseTime)] :: data9
405413 }
406- let data7 = if (if ((addr7 == "-"))
407- then (amount7 == 0)
414+ let data7 = if (if ((amount7 == 0))
415+ then if (if ((addr7 == ""))
416+ then true
417+ else (addr7 == "-"))
418+ then true
419+ else (addr7 == "n/a")
408420 else false)
409421 then data8
410422 else if (!(getBooleanValue(this, (addr7 + "_status"))))
411423 then throw("The status of address #7 is inactive!")
412424 else if ((0 >= amount7))
413425 then throw("Zero or negative amounts are not allowed.")
414426 else {
415427 let newBalance = (getIntegerValue(this, (addr7 + "_balance")) + amount7)
416428 if ((newBalance > maxBalance))
417429 then throw("Deposit of address #7 will be overfilled!")
418430 else [DataEntry((addr7 + "_balance"), newBalance), DataEntry((addr7 + "_starttime"), frameCloseTime)] :: data8
419431 }
420- let data6 = if (if ((addr6 == "-"))
421- then (amount6 == 0)
432+ let data6 = if (if ((amount6 == 0))
433+ then if (if ((addr6 == ""))
434+ then true
435+ else (addr6 == "-"))
436+ then true
437+ else (addr6 == "n/a")
422438 else false)
423439 then data7
424440 else if (!(getBooleanValue(this, (addr6 + "_status"))))
425441 then throw("The status of address #6 is inactive!")
426442 else if ((0 >= amount6))
427443 then throw("Zero or negative amounts are not allowed.")
428444 else {
429445 let newBalance = (getIntegerValue(this, (addr6 + "_balance")) + amount6)
430446 if ((newBalance > maxBalance))
431447 then throw("Deposit of address #6 will be overfilled!")
432448 else [DataEntry((addr6 + "_balance"), newBalance), DataEntry((addr6 + "_starttime"), frameCloseTime)] :: data7
433449 }
434- let data5 = if (if ((addr5 == "-"))
435- then (amount5 == 0)
450+ let data5 = if (if ((amount5 == 0))
451+ then if (if ((addr5 == ""))
452+ then true
453+ else (addr5 == "-"))
454+ then true
455+ else (addr5 == "n/a")
436456 else false)
437457 then data6
438458 else if (!(getBooleanValue(this, (addr5 + "_status"))))
439459 then throw("The status of address #5 is inactive!")
440460 else if ((0 >= amount5))
441461 then throw("Zero or negative amounts are not allowed.")
442462 else {
443463 let newBalance = (getIntegerValue(this, (addr5 + "_balance")) + amount5)
444464 if ((newBalance > maxBalance))
445465 then throw("Deposit of address #5 will be overfilled!")
446466 else [DataEntry((addr5 + "_balance"), newBalance), DataEntry((addr5 + "_starttime"), frameCloseTime)] :: data6
447467 }
448- let data4 = if (if ((addr4 == "-"))
449- then (amount4 == 0)
468+ let data4 = if (if ((amount4 == 0))
469+ then if (if ((addr4 == ""))
470+ then true
471+ else (addr4 == "-"))
472+ then true
473+ else (addr4 == "n/a")
450474 else false)
451475 then data5
452476 else if (!(getBooleanValue(this, (addr4 + "_status"))))
453477 then throw("The status of address #4 is inactive!")
454478 else if ((0 >= amount4))
455479 then throw("Zero or negative amounts are not allowed.")
456480 else {
457481 let newBalance = (getIntegerValue(this, (addr4 + "_balance")) + amount4)
458482 if ((newBalance > maxBalance))
459483 then throw("Deposit of address #4 will be overfilled!")
460484 else [DataEntry((addr4 + "_balance"), newBalance), DataEntry((addr4 + "_starttime"), frameCloseTime)] :: data5
461485 }
462- let data3 = if (if ((addr3 == "-"))
463- then (amount3 == 0)
486+ let data3 = if (if ((amount3 == 0))
487+ then if (if ((addr3 == ""))
488+ then true
489+ else (addr3 == "-"))
490+ then true
491+ else (addr3 == "n/a")
464492 else false)
465493 then data4
466494 else if (!(getBooleanValue(this, (addr3 + "_status"))))
467495 then throw("The status of address #3 is inactive!")
468496 else if ((0 >= amount3))
469497 then throw("Zero or negative amounts are not allowed.")
470498 else {
471499 let newBalance = (getIntegerValue(this, (addr3 + "_balance")) + amount3)
472500 if ((newBalance > maxBalance))
473501 then throw("Deposit of address #3 will be overfilled!")
474502 else [DataEntry((addr3 + "_balance"), newBalance), DataEntry((addr3 + "_starttime"), frameCloseTime)] :: data4
475503 }
476- let data2 = if (if ((addr2 == "-"))
477- then (amount2 == 0)
504+ let data2 = if (if ((amount2 == 0))
505+ then if (if ((addr2 == ""))
506+ then true
507+ else (addr2 == "-"))
508+ then true
509+ else (addr2 == "n/a")
478510 else false)
479511 then data3
480512 else if (!(getBooleanValue(this, (addr2 + "_status"))))
481513 then throw("The status of address #2 is inactive!")
482514 else if ((0 >= amount2))
483515 then throw("Zero or negative amounts are not allowed.")
484516 else {
485517 let newBalance = (getIntegerValue(this, (addr2 + "_balance")) + amount2)
486518 if ((newBalance > maxBalance))
487519 then throw("Deposit of address #2 will be overfilled!")
488520 else [DataEntry((addr2 + "_balance"), newBalance), DataEntry((addr2 + "_starttime"), frameCloseTime)] :: data3
489521 }
490- let data1 = if (if ((addr1 == "-"))
491- then (amount1 == 0)
522+ let data1 = if (if ((amount1 == 0))
523+ then if (if ((addr1 == ""))
524+ then true
525+ else (addr1 == "-"))
526+ then true
527+ else (addr1 == "n/a")
492528 else false)
493529 then data2
494530 else if (!(getBooleanValue(this, (addr1 + "_status"))))
495531 then throw("The status of address #1 is inactive!")
496532 else if ((0 >= amount1))
497533 then throw("Zero or negative amounts are not allowed.")
498534 else {
499535 let newBalance = (getIntegerValue(this, (addr1 + "_balance")) + amount1)
500536 if ((newBalance > maxBalance))
501537 then throw("Deposit of address #1 will be overfilled!")
502538 else [DataEntry((addr1 + "_balance"), newBalance), DataEntry((addr1 + "_starttime"), frameCloseTime)] :: data2
503539 }
504- let data0 = if (if ((addr0 == "-"))
505- then (amount0 == 0)
540+ let data0 = if (if ((amount0 == 0))
541+ then if (if ((addr0 == ""))
542+ then true
543+ else (addr0 == "-"))
544+ then true
545+ else (addr0 == "n/a")
506546 else false)
507547 then data1
508548 else if (!(getBooleanValue(this, (addr0 + "_status"))))
509549 then throw("The status of address #0 is inactive!")
510550 else if ((0 >= amount0))
511551 then throw("Zero or negative amounts are not allowed.")
512552 else {
513553 let newBalance = (getIntegerValue(this, (addr0 + "_balance")) + amount0)
514554 if ((newBalance > maxBalance))
515555 then throw("Deposit of address #0 will be overfilled!")
516556 else [DataEntry((addr0 + "_balance"), newBalance), DataEntry((addr0 + "_starttime"), frameCloseTime)] :: data1
517557 }
518558 WriteSet([DataEntry((dapp + "_balance"), (sumTotal + rewards)), DataEntry((dapp + "_updatetime"), lastBlockTime)] :: data0)
519559 }
520560 }
521561
522562
523563 @Verifier(tx)
524564 func verify () = match tx {
525- case a: CreateAliasTransaction =>
526- sigVerify(a.bodyBytes, a.proofs[0], a.senderPublicKey)
527565 case t: TransferTransaction =>
528566 if (if ((t.assetId != myAssetId))
529567 then (t.feeAssetId != myAssetId)
530568 else false)
531- then sigVerify(t.bodyBytes, t.proofs[0], t.senderPublicKey)
569+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
532570 else false
533571 case s: SetScriptTransaction =>
534- if (sigVerify(s.bodyBytes, s.proofs[2], ownerPubKey))
535- then sigVerify(s.bodyBytes, s.proofs[1], managerPubKey)
572+ if (sigVerify(tx.bodyBytes, tx.proofs[2], ownerPubKey))
573+ then sigVerify(tx.bodyBytes, tx.proofs[1], managerPubKey)
536574 else false
537575 case _ =>
538576 false
539577 }
540578

github/deemru/w8io/3ef1775 
125.45 ms