tx · 7VgLwcsEnPrQQj1sdwvj9SbaKBuoFQQvavCAMpVmBPy2

3MwRiKHmomSqxzrws6x5KYLtgnaBM1hhnRk:  -0.01400000 Waves

2019.09.08 18:31 [667277] smart account 3MwRiKHmomSqxzrws6x5KYLtgnaBM1hhnRk > SELF 0.00000000 Waves

{ "type": 13, "id": "7VgLwcsEnPrQQj1sdwvj9SbaKBuoFQQvavCAMpVmBPy2", "fee": 1400000, "feeAssetId": null, "timestamp": 1567956692577, "version": 1, "sender": "3MwRiKHmomSqxzrws6x5KYLtgnaBM1hhnRk", "senderPublicKey": "4zBZb7taw23PGE9E91m2Kav1ZZGExTVYZkrxt8aPUtRt", "proofs": [ "4JVZYwV723ttexuDUhZgtLRr8hFS4MMGzUMEafnnFr5nZnSaf5i3m2Fc2tD5nt7NdDNCcmZGSiqbogPRK5Ehgz4V" ], "script": "base64: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", "chainId": 84, "height": 667277, "spentComplexity": 0 } View: original | compacted Prev: CanczYRYLF9TgkCw4jLwbrr5S1AuNHq1REQyx3HsLNTp Next: 91gRs9YECAVFMF5bBgniidg6Az8a4Eg6RjLabsTzGhTS Diff:
OldNewDifferences
77 }
88
99
10-func verifyMinDeposit () = {
11- let deposit = getIntegerValue(this, "deposit")
10+func verifyMinDeposit (deposit) = {
1211 let pricePerMinute = getIntegerValue(this, "pricePerMinute")
13- let minimumTime = getIntegerValue(this, "MinimumTime")
12+ let minimumTime = getIntegerValue(this, "minimumTime")
1413 ((deposit / pricePerMinute) > minimumTime)
1514 }
1615
2726 func init () = if (if ((this == i.caller))
2827 then !(isDefined(getInteger(this, "pricePerMinute")))
2928 else false)
30- then WriteSet([DataEntry("pricePerMinute", 10000000), DataEntry("user", ""), DataEntry("timestart", ""), DataEntry("deposit", 0), DataEntry("withDrawAddress", "")])
29+ then WriteSet([DataEntry("minimumTime", 30), DataEntry("pricePerMinute", 1), DataEntry("user", ""), DataEntry("timestart", ""), DataEntry("deposit", 0), DataEntry("withDrawAddress", "3N5KacfEg3N5155jWmxVY39rpdox566YxXa")])
3130 else throw("contract is already inited")
3231
3332
3433
3534 @Callable(i)
36-func activate (deposit,userPk) = if (isActivated())
37- then throw("The scooter is already activated")
38- else if (!(verifyMinDeposit()))
39- then throw("Your deposit should be for 30 minutes minimum")
40- else WriteSet([DataEntry("deposit", deposit), DataEntry("user", userPk), DataEntry("timestart", lastBlock.timestamp)])
35+func activate () = {
36+ let pmt = extract(i.payment)
37+ if (isActivated())
38+ then throw("The scooter is already activated")
39+ else if (!(verifyMinDeposit(pmt.amount)))
40+ then throw("Your deposit should be for 30 minutes minimum")
41+ else WriteSet([DataEntry("deposit", pmt.amount), DataEntry("user", toBase58String(i.callerPublicKey)), DataEntry("timestart", lastBlock.timestamp)])
42+ }
4143
4244
4345
4446 @Callable(i)
4547 func payAndStop (amount) = {
46- let userAddress = addressFromPublicKey(toBytes(getStringValue(this, "user")))
47- let withDrawalAddress = getStringValue(this, "withdrawal")
48+ let userAddress = value(addressFromPublicKey(fromBase58String(getStringValue(this, "user"))))
49+ let withDrawalAddress = getStringValue(this, "withDrawAddress")
4850 let deposit = getIntegerValue(this, "deposit")
4951 let remainder = (deposit - amount)
5052 if ((i.caller == userAddress))
51- then TransferSet([ScriptTransfer(userAddress, remainder, unit), ScriptTransfer(Address(toBytes(withDrawalAddress)), amount, unit)])
53+ then TransferSet([ScriptTransfer(userAddress, remainder, unit), ScriptTransfer(Address(fromBase58String(withDrawalAddress)), amount, unit)])
5254 else throw("not the adress of the renter")
5355 }
5456
6062 else false)
6163 then {
6264 let deposit = getIntegerValue(this, "deposit")
63- ScriptResult(WriteSet([DataEntry("deposit", 0), DataEntry("user", ""), DataEntry("timestart", "")]), TransferSet([ScriptTransfer(Address(toBytes(getStringValue(this, "withDrawalAddress"))), deposit, unit)]))
65+ ScriptResult(WriteSet([DataEntry("deposit", 0), DataEntry("user", ""), DataEntry("timestart", "")]), TransferSet([ScriptTransfer(Address(toBytes(getStringValue(this, "withDrawAddress"))), deposit, unit)]))
6466 }
6567 else throw("withdraw rejected because timelock is still active")
6668
67-
68-@Verifier(tx)
69-func verify () = true
7069
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func isActivated () = {
55 let user = getStringValue(this, "user")
66 (user != "")
77 }
88
99
10-func verifyMinDeposit () = {
11- let deposit = getIntegerValue(this, "deposit")
10+func verifyMinDeposit (deposit) = {
1211 let pricePerMinute = getIntegerValue(this, "pricePerMinute")
13- let minimumTime = getIntegerValue(this, "MinimumTime")
12+ let minimumTime = getIntegerValue(this, "minimumTime")
1413 ((deposit / pricePerMinute) > minimumTime)
1514 }
1615
1716
1817 func isTimeLockOpened (currentTime) = {
1918 let timestart = getIntegerValue(this, "timestart")
2019 let pricePerMinute = getIntegerValue(this, "pricePerMinute")
2120 let deposit = getIntegerValue(this, "deposit")
2221 ((currentTime - timestart) > (deposit / pricePerMinute))
2322 }
2423
2524
2625 @Callable(i)
2726 func init () = if (if ((this == i.caller))
2827 then !(isDefined(getInteger(this, "pricePerMinute")))
2928 else false)
30- then WriteSet([DataEntry("pricePerMinute", 10000000), DataEntry("user", ""), DataEntry("timestart", ""), DataEntry("deposit", 0), DataEntry("withDrawAddress", "")])
29+ then WriteSet([DataEntry("minimumTime", 30), DataEntry("pricePerMinute", 1), DataEntry("user", ""), DataEntry("timestart", ""), DataEntry("deposit", 0), DataEntry("withDrawAddress", "3N5KacfEg3N5155jWmxVY39rpdox566YxXa")])
3130 else throw("contract is already inited")
3231
3332
3433
3534 @Callable(i)
36-func activate (deposit,userPk) = if (isActivated())
37- then throw("The scooter is already activated")
38- else if (!(verifyMinDeposit()))
39- then throw("Your deposit should be for 30 minutes minimum")
40- else WriteSet([DataEntry("deposit", deposit), DataEntry("user", userPk), DataEntry("timestart", lastBlock.timestamp)])
35+func activate () = {
36+ let pmt = extract(i.payment)
37+ if (isActivated())
38+ then throw("The scooter is already activated")
39+ else if (!(verifyMinDeposit(pmt.amount)))
40+ then throw("Your deposit should be for 30 minutes minimum")
41+ else WriteSet([DataEntry("deposit", pmt.amount), DataEntry("user", toBase58String(i.callerPublicKey)), DataEntry("timestart", lastBlock.timestamp)])
42+ }
4143
4244
4345
4446 @Callable(i)
4547 func payAndStop (amount) = {
46- let userAddress = addressFromPublicKey(toBytes(getStringValue(this, "user")))
47- let withDrawalAddress = getStringValue(this, "withdrawal")
48+ let userAddress = value(addressFromPublicKey(fromBase58String(getStringValue(this, "user"))))
49+ let withDrawalAddress = getStringValue(this, "withDrawAddress")
4850 let deposit = getIntegerValue(this, "deposit")
4951 let remainder = (deposit - amount)
5052 if ((i.caller == userAddress))
51- then TransferSet([ScriptTransfer(userAddress, remainder, unit), ScriptTransfer(Address(toBytes(withDrawalAddress)), amount, unit)])
53+ then TransferSet([ScriptTransfer(userAddress, remainder, unit), ScriptTransfer(Address(fromBase58String(withDrawalAddress)), amount, unit)])
5254 else throw("not the adress of the renter")
5355 }
5456
5557
5658
5759 @Callable(i)
5860 func withdraw () = if (if (isTimeLockOpened(lastBlock.timestamp))
5961 then (this == i.caller)
6062 else false)
6163 then {
6264 let deposit = getIntegerValue(this, "deposit")
63- ScriptResult(WriteSet([DataEntry("deposit", 0), DataEntry("user", ""), DataEntry("timestart", "")]), TransferSet([ScriptTransfer(Address(toBytes(getStringValue(this, "withDrawalAddress"))), deposit, unit)]))
65+ ScriptResult(WriteSet([DataEntry("deposit", 0), DataEntry("user", ""), DataEntry("timestart", "")]), TransferSet([ScriptTransfer(Address(toBytes(getStringValue(this, "withDrawAddress"))), deposit, unit)]))
6466 }
6567 else throw("withdraw rejected because timelock is still active")
6668
67-
68-@Verifier(tx)
69-func verify () = true
7069

github/deemru/w8io/169f3d6 
37.56 ms