tx · AFkDDS2TKgm6wfCcuCB67Uw4RuCpHyRrXtZn95ReVrxb

3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12:  -0.01400000 Waves

2020.01.16 16:57 [1887252] smart account 3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12 > SELF 0.00000000 Waves

{ "type": 13, "id": "AFkDDS2TKgm6wfCcuCB67Uw4RuCpHyRrXtZn95ReVrxb", "fee": 1400000, "feeAssetId": null, "timestamp": 1579182519549, "version": 1, "sender": "3PA2w9i9GnbKR3HB7XTmwf3DnaFBFcDiP12", "senderPublicKey": "5G9pgymdyBYGnWF3oahQXQNPnVaWEthMkeFRUzHjZ7mX", "proofs": [ "2KQkCNavuhes2zW2C1QHvDx51tmqc1UMw1Q7hAbTb3EG4ThMqEn1zhkjD9tJta35ghqt8pDFEnYPq6scFEKPpBbu", "4n4A3ft5QnZhj87GB6Y12GQ2gRHSrhZvZkxuErWEbg6tLaMhrDvmyFzxdtaP68joYBkCiUtkbFTEvpHxykqbfxsp", "exiKXbiKRZVpLpdUBYDbP9oxyzmq4m85eCpztSSz4FhDWos8DHLsJjxoE62B5xVBis1ZBJGFqLoHYQTEL13qiuS" ], "script": "base64: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", "chainId": 87, "height": 1887252, "spentComplexity": 0 } View: original | compacted Prev: 4Ugfn4vPfGJ8hp9zhRdV7DBkAd7DGHcV4rPhpMhTf4aH Next: Rd2dxg6GJ5gxw9PpWmn53Gr3VMcKuxP1juPx3jGZHJh Diff:
OldNewDifferences
77
88 let minBalance = (100 * decMult)
99
10-let minLockTime = ((((30 * 24) * 60) * 60) * 1000)
10+let minLockTime = (2629800 * 1000)
1111
1212 let myAssetId = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4'
1313
1616 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
1717
1818 let lastBlockTime = value(lastBlock.timestamp)
19+
20+let frameStartTime = ((lastBlockTime / minLockTime) * minLockTime)
1921
2022 @Callable(i)
2123 func deposit () = {
4143 case _ =>
4244 0
4345 }
44- let startTime = if (!(isActive))
46+ let newBalance = (balance + amount)
47+ let newStartTime = if ((minBalance > newBalance))
4548 then 0
46- else match getInteger(this, (client + "_starttime")) {
47- case x: Int =>
48- x
49- case _ =>
50- 0
51- }
52- let newBalance = (balance + amount)
53- let newStartTime = (fraction(startTime, balance, newBalance) + fraction(lastBlockTime, amount, newBalance))
49+ else if ((minBalance > balance))
50+ then lastBlockTime
51+ else {
52+ let updateTime = match getInteger(this, (client + "_updatetime")) {
53+ case x: Int =>
54+ x
55+ case _ =>
56+ 0
57+ }
58+ let startTime = if ((frameStartTime > updateTime))
59+ then frameStartTime
60+ else match getInteger(this, (client + "_starttime")) {
61+ case x: Int =>
62+ x
63+ case _ =>
64+ 0
65+ }
66+ (fraction(startTime, balance, newBalance) + fraction(lastBlockTime, amount, newBalance))
67+ }
5468 if (isActive)
5569 then WriteSet([DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
5670 else {
8094 case _ =>
8195 false
8296 }
83- let balance = match getInteger(this, (client + "_balance")) {
97+ let balance = if (!(isActive))
98+ then 0
99+ else match getInteger(this, (client + "_balance")) {
100+ case x: Int =>
101+ x
102+ case _ =>
103+ 0
104+ }
105+ let lockTime = match getInteger(this, (client + "_updatetime")) {
84106 case x: Int =>
85- x
107+ (x + minLockTime)
86108 case _ =>
87109 0
88110 }
89- let updateTime = match getInteger(this, (client + "_updatetime")) {
90- case x: Int =>
91- x
92- case _ =>
93- 0
94- }
95- let lockTime = (updateTime + minLockTime)
96- let actBalance = if (!(isActive))
97- then 0
98- else balance
99111 let amount = if ((RSCx100000 == 0))
100- then actBalance
112+ then balance
101113 else RSCx100000
102- if (if ((lockTime >= lastBlockTime))
103- then (actBalance >= minBalance)
114+ if (if ((balance >= minBalance))
115+ then (lockTime >= lastBlockTime)
104116 else false)
105117 then throw((("Unable to withdraw coins! Account is locked for up to " + toString((lockTime / 1000))) + " Unix timestamp..."))
106118 else if ((0 >= amount))
107119 then throw("Unable to withdraw zero or negative amount!")
108- else if ((amount > actBalance))
109- then throw(((((("Unable to withdraw more than on the balance: " + toString(actBalance)) + "/") + toString(decMult)) + " ") + myAssetName))
110- else if ((actBalance == amount))
111- then ScriptResult(WriteSet([DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
120+ else if ((amount > balance))
121+ then throw((((((("Unable to withdraw more than on the balance: " + toString(balance)) + " / 10^") + toString((size(toString(decMult)) - 1))) + " ") + myAssetName) + "."))
122+ else if ((balance == amount))
123+ then ScriptResult(WriteSet([DataEntry((client + "_starttime"), frameStartTime), DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
112124 else {
113- let startTime = match getInteger(this, (client + "_starttime")) {
114- case x: Int =>
115- x
116- case _ =>
117- 0
118- }
119125 let newBalance = (balance - amount)
120- let newStartTime = (fraction(startTime, balance, newBalance) - fraction(lastBlockTime, amount, newBalance))
126+ let newStartTime = if ((minBalance > balance))
127+ then 0
128+ else (fraction(frameStartTime, balance, newBalance) - fraction(lastBlockTime, amount, newBalance))
121129 ScriptResult(WriteSet([DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
122130 }
123131 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let decMult = 100000
55
66 let myAssetName = "RusCoin"
77
88 let minBalance = (100 * decMult)
99
10-let minLockTime = ((((30 * 24) * 60) * 60) * 1000)
10+let minLockTime = (2629800 * 1000)
1111
1212 let myAssetId = base58'EMdiF8uaySswfCdMxc114rSfzUsAKCtK9d8eSx6ruKP4'
1313
1414 let ownerPubKey = base58'2in4yGNBKfitQbXbsHmL2unWrUnRo7GWyqcZXsmAzhQi'
1515
1616 let managerPubKey = base58'EaKK5PAFUkgtnF7xcyABUzi8YBQADmUDnPzQBHjCTAKT'
1717
1818 let lastBlockTime = value(lastBlock.timestamp)
19+
20+let frameStartTime = ((lastBlockTime / minLockTime) * minLockTime)
1921
2022 @Callable(i)
2123 func deposit () = {
2224 let p = if (isDefined(i.payment))
2325 then extract(i.payment)
2426 else throw((("Missing " + myAssetName) + " attached payment!"))
2527 if ((p.assetId != myAssetId))
2628 then throw((("Only " + myAssetName) + " is allowed to deposit!"))
2729 else {
2830 let amount = value(p.amount)
2931 let client = toBase58String(i.caller.bytes)
3032 let isActive = match getBoolean(this, (client + "_status")) {
3133 case x: Boolean =>
3234 x
3335 case _ =>
3436 false
3537 }
3638 let balance = if (!(isActive))
3739 then 0
3840 else match getInteger(this, (client + "_balance")) {
3941 case x: Int =>
4042 x
4143 case _ =>
4244 0
4345 }
44- let startTime = if (!(isActive))
46+ let newBalance = (balance + amount)
47+ let newStartTime = if ((minBalance > newBalance))
4548 then 0
46- else match getInteger(this, (client + "_starttime")) {
47- case x: Int =>
48- x
49- case _ =>
50- 0
51- }
52- let newBalance = (balance + amount)
53- let newStartTime = (fraction(startTime, balance, newBalance) + fraction(lastBlockTime, amount, newBalance))
49+ else if ((minBalance > balance))
50+ then lastBlockTime
51+ else {
52+ let updateTime = match getInteger(this, (client + "_updatetime")) {
53+ case x: Int =>
54+ x
55+ case _ =>
56+ 0
57+ }
58+ let startTime = if ((frameStartTime > updateTime))
59+ then frameStartTime
60+ else match getInteger(this, (client + "_starttime")) {
61+ case x: Int =>
62+ x
63+ case _ =>
64+ 0
65+ }
66+ (fraction(startTime, balance, newBalance) + fraction(lastBlockTime, amount, newBalance))
67+ }
5468 if (isActive)
5569 then WriteSet([DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)])
5670 else {
5771 let isClient = match getString(this, (client + "_address")) {
5872 case x: String =>
5973 true
6074 case _ =>
6175 false
6276 }
6377 if (isClient)
6478 then WriteSet([DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
6579 else WriteSet([DataEntry((client + "_address"), client), DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_status"), true), DataEntry((client + "_updatetime"), lastBlockTime)])
6680 }
6781 }
6882 }
6983
7084
7185
7286 @Callable(i)
7387 func withdraw (RSCx100000) = if (isDefined(i.payment))
7488 then throw("Don't attach payment when withdrawing!")
7589 else {
7690 let client = toBase58String(i.caller.bytes)
7791 let isActive = match getBoolean(this, (client + "_status")) {
7892 case x: Boolean =>
7993 x
8094 case _ =>
8195 false
8296 }
83- let balance = match getInteger(this, (client + "_balance")) {
97+ let balance = if (!(isActive))
98+ then 0
99+ else match getInteger(this, (client + "_balance")) {
100+ case x: Int =>
101+ x
102+ case _ =>
103+ 0
104+ }
105+ let lockTime = match getInteger(this, (client + "_updatetime")) {
84106 case x: Int =>
85- x
107+ (x + minLockTime)
86108 case _ =>
87109 0
88110 }
89- let updateTime = match getInteger(this, (client + "_updatetime")) {
90- case x: Int =>
91- x
92- case _ =>
93- 0
94- }
95- let lockTime = (updateTime + minLockTime)
96- let actBalance = if (!(isActive))
97- then 0
98- else balance
99111 let amount = if ((RSCx100000 == 0))
100- then actBalance
112+ then balance
101113 else RSCx100000
102- if (if ((lockTime >= lastBlockTime))
103- then (actBalance >= minBalance)
114+ if (if ((balance >= minBalance))
115+ then (lockTime >= lastBlockTime)
104116 else false)
105117 then throw((("Unable to withdraw coins! Account is locked for up to " + toString((lockTime / 1000))) + " Unix timestamp..."))
106118 else if ((0 >= amount))
107119 then throw("Unable to withdraw zero or negative amount!")
108- else if ((amount > actBalance))
109- then throw(((((("Unable to withdraw more than on the balance: " + toString(actBalance)) + "/") + toString(decMult)) + " ") + myAssetName))
110- else if ((actBalance == amount))
111- then ScriptResult(WriteSet([DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
120+ else if ((amount > balance))
121+ then throw((((((("Unable to withdraw more than on the balance: " + toString(balance)) + " / 10^") + toString((size(toString(decMult)) - 1))) + " ") + myAssetName) + "."))
122+ else if ((balance == amount))
123+ then ScriptResult(WriteSet([DataEntry((client + "_starttime"), frameStartTime), DataEntry((client + "_status"), false), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
112124 else {
113- let startTime = match getInteger(this, (client + "_starttime")) {
114- case x: Int =>
115- x
116- case _ =>
117- 0
118- }
119125 let newBalance = (balance - amount)
120- let newStartTime = (fraction(startTime, balance, newBalance) - fraction(lastBlockTime, amount, newBalance))
126+ let newStartTime = if ((minBalance > balance))
127+ then 0
128+ else (fraction(frameStartTime, balance, newBalance) - fraction(lastBlockTime, amount, newBalance))
121129 ScriptResult(WriteSet([DataEntry((client + "_balance"), newBalance), DataEntry((client + "_starttime"), newStartTime), DataEntry((client + "_updatetime"), lastBlockTime)]), TransferSet([ScriptTransfer(i.caller, amount, myAssetId)]))
122130 }
123131 }
124132
125133
126134 @Verifier(tx)
127135 func verify () = if (if (sigVerify(tx.bodyBytes, tx.proofs[2], ownerPubKey))
128136 then sigVerify(tx.bodyBytes, tx.proofs[1], managerPubKey)
129137 else false)
130138 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
131139 else false
132140

github/deemru/w8io/3ef1775 
75.65 ms