tx · APbzzM5VjNWLiMHwvRkmAECYLHYTchpUGXQNjnCiz9kK

3Mz6zqqBMkE7DWq2qYjoc75jqXr4rADunfv:  -0.01400000 Waves

2021.03.23 19:26 [1450628] smart account 3Mz6zqqBMkE7DWq2qYjoc75jqXr4rADunfv > SELF 0.00000000 Waves

{ "type": 13, "id": "APbzzM5VjNWLiMHwvRkmAECYLHYTchpUGXQNjnCiz9kK", "fee": 1400000, "feeAssetId": null, "timestamp": 1616516760604, "version": 2, "chainId": 84, "sender": "3Mz6zqqBMkE7DWq2qYjoc75jqXr4rADunfv", "senderPublicKey": "2vP8gqLvBxSiqzeDLEs1FTiL4V79GvhVT64PXEtTewFH", "proofs": [ "5jhKAM3bkRDhDhGDApFP4M89pMdShGDWkG5u6UqHC57yudidHMm1bedoUkSHikASnzmk37dMq2qXNjiFbWfAUQP5" ], "script": "base64:AAIEAAAAAAAAAAsIAhIAEgASAwoBCAAAAAsAAAAAEmtXYWl0aW5nRGVwb3NpdFF0eQIAAAATd2FpdGluZ19kZXBvc2l0X3F0eQAAAAARa0xhc3RSZXF1ZXN0QmxvY2sCAAAAEmxhc3RfcmVxdWVzdF9ibG9jawAAAAAMa1VzZXJCYWxhbmNlAgAAAAx1c2VyX2JhbGFuY2UAAAAAF2tVc2VyV2l0aGRyYXdXYWl0aW5nUXR5AgAAABl1c2VyX3dpdGhkcmF3X3dhaXRpbmdfcXR5AQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQAAAAAAAAAAAAEAAAARZ2V0V2FpdGluZ0Rwc3RRdHkAAAAACQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABJrV2FpdGluZ0RlcG9zaXRRdHkBAAAAE2dldExhc3RSZXF1ZXN0QmxvY2sAAAAACQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABFrTGFzdFJlcXVlc3RCbG9jawEAAAAPY0tleVVzZXJCYWxhbmNlAAAAAQAAAAR1c2VyCQABLAAAAAIFAAAABHVzZXIFAAAADGtVc2VyQmFsYW5jZQEAAAAOZ2V0VXNlckJhbGFuY2UAAAABAAAABHVzZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9jS2V5VXNlckJhbGFuY2UAAAABBQAAAAR1c2VyAQAAABZjS2V5VXNlcld0aGRXYWl0aW5nUXR5AAAAAQAAAAR1c2VyCQABLAAAAAIFAAAABHVzZXIFAAAAF2tVc2VyV2l0aGRyYXdXYWl0aW5nUXR5AQAAABVnZXRVc2VyV3RoZFdhaXRpbmdRdHkAAAABAAAABHVzZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZjS2V5VXNlcld0aGRXYWl0aW5nUXR5AAAAAQUAAAAEdXNlcgAAAAMAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAA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", "height": 1450628, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C6Ttapb2W6oaahnsFCio5QJ88TCJx8rFuspobGXYePQf Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let NONE = "none"
4+let kWaitingDepositQty = "waiting_deposit_qty"
55
6-func getNumberByKey (key) = {
7- let num = match getInteger(this, key) {
8- case a: Int =>
9- a
10- case _ =>
11- 0
12- }
13- num
14- }
6+let kLastRequestBlock = "last_request_block"
7+
8+let kUserBalance = "user_balance"
9+
10+let kUserWithdrawWaitingQty = "user_withdraw_waiting_qty"
11+
12+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
1513
1614
17-func getStrByKey (key) = {
18- let str = match getString(this, key) {
19- case a: String =>
20- a
21- case _ =>
22- NONE
23- }
24- str
25- }
15+func getWaitingDpstQty () = getNumberByKey(kWaitingDepositQty)
2616
2717
28-func getKeyItemPrice (item) = (item + "_price")
18+func getLastRequestBlock () = getNumberByKey(kLastRequestBlock)
2919
3020
31-func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
21+func cKeyUserBalance (user) = (user + kUserBalance)
3222
3323
34-func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
24+func getUserBalance (user) = getNumberByKey(cKeyUserBalance(user))
3525
3626
37-func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
27+func cKeyUserWthdWaitingQty (user) = (user + kUserWithdrawWaitingQty)
3828
3929
40-func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
41-
42-
43-func getKeyItemData (item) = (item + "_data")
44-
45-
46-func getKeyItemSupplier (item) = (item + "_owner")
47-
48-
49-func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
50-
51-
52-func getKeyBalanceSupplierAccount (account) = (account + "_balance")
53-
54-
55-func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplierAccount(account))
30+func getUserWthdWaitingQty (user) = getNumberByKey(cKeyUserWthdWaitingQty(user))
5631
5732
5833 @Callable(i)
59-func addItem (title,price,data) = {
60- let supplierAddress = toBase58String(i.caller.bytes)
61- let item = getKeyItem(supplierAddress, title)
62- if ((0 >= price))
63- then throw("Price set too low")
64- else if ((getValueItemSupplier(item) != NONE))
65- then throw("Already exist !")
66- else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
67- }
68-
69-
70-
71-@Callable(i)
72-func purchase (item) = {
34+func deposit () = {
7335 let pmt = value(i.payments[0])
7436 if (isDefined(pmt.assetId))
75- then throw("Only Waves can be used at the moment")
76- else {
77- let userAddress = toBase58String(i.caller.bytes)
78- let price = getValueItemPrice(item)
79- let supplierAddress = getValueItemSupplier(item)
80- if ((price > pmt.amount))
81- then throw("Can't validate payment, too low amount")
82- else if ((supplierAddress == NONE))
83- then throw("Supplier does not exist")
84- else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplierAccount(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
85- }
37+ then throw("Error: only Waves can be used at the moment")
38+ else if ((0 >= pmt.amount))
39+ then throw("Error: deposit amount is negative or zero.")
40+ else {
41+ let adr = toBase58String(i.caller.bytes)
42+[IntegerEntry(cKeyUserBalance(adr), (getUserBalance(adr) + pmt.amount))]
43+ }
8644 }
8745
8846
9048 @Callable(i)
9149 func withdraw () = {
9250 let adr = toBase58String(i.caller.bytes)
93- let curBalance = getValueBalanceSupplier(adr)
51+ let curBalance = getUserBalance(adr)
9452 if ((0 >= curBalance))
95- then throw("No balance for the moment")
96- else [IntegerEntry(getKeyBalanceSupplierAccount(adr), 0), ScriptTransfer(addressFromStringValue(adr), curBalance, unit)]
53+ then throw("Error: No balance for the moment")
54+ else if (((wavesBalance(this).available - 2) >= curBalance))
55+ then [IntegerEntry(cKeyUserBalance(adr), 0), ScriptTransfer(addressFromStringValue(adr), curBalance, unit)]
56+ else [IntegerEntry(cKeyUserBalance(adr), 0), IntegerEntry(cKeyUserWthdWaitingQty(adr), (getUserWthdWaitingQty(adr) + curBalance))]
9757 }
9858
59+
60+
61+@Callable(i)
62+func sendToUserWaiting (user) = {
63+ let adr = user
64+ let curWaiting = getUserWthdWaitingQty(adr)
65+ if ((0 >= curWaiting))
66+ then throw("Error: No amount currently in wait for withdraw")
67+ else if ((curWaiting > (wavesBalance(this).available - 2)))
68+ then throw("Error: Dapp is withdrawing your funds, please wait a bit!")
69+ else [IntegerEntry(cKeyUserWthdWaitingQty(adr), 0), ScriptTransfer(addressFromStringValue(adr), curWaiting, unit)]
70+ }
71+
72+
73+@Verifier(tx)
74+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
9975
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let NONE = "none"
4+let kWaitingDepositQty = "waiting_deposit_qty"
55
6-func getNumberByKey (key) = {
7- let num = match getInteger(this, key) {
8- case a: Int =>
9- a
10- case _ =>
11- 0
12- }
13- num
14- }
6+let kLastRequestBlock = "last_request_block"
7+
8+let kUserBalance = "user_balance"
9+
10+let kUserWithdrawWaitingQty = "user_withdraw_waiting_qty"
11+
12+func getNumberByKey (key) = valueOrElse(getInteger(this, key), 0)
1513
1614
17-func getStrByKey (key) = {
18- let str = match getString(this, key) {
19- case a: String =>
20- a
21- case _ =>
22- NONE
23- }
24- str
25- }
15+func getWaitingDpstQty () = getNumberByKey(kWaitingDepositQty)
2616
2717
28-func getKeyItemPrice (item) = (item + "_price")
18+func getLastRequestBlock () = getNumberByKey(kLastRequestBlock)
2919
3020
31-func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
21+func cKeyUserBalance (user) = (user + kUserBalance)
3222
3323
34-func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
24+func getUserBalance (user) = getNumberByKey(cKeyUserBalance(user))
3525
3626
37-func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
27+func cKeyUserWthdWaitingQty (user) = (user + kUserWithdrawWaitingQty)
3828
3929
40-func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
41-
42-
43-func getKeyItemData (item) = (item + "_data")
44-
45-
46-func getKeyItemSupplier (item) = (item + "_owner")
47-
48-
49-func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
50-
51-
52-func getKeyBalanceSupplierAccount (account) = (account + "_balance")
53-
54-
55-func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplierAccount(account))
30+func getUserWthdWaitingQty (user) = getNumberByKey(cKeyUserWthdWaitingQty(user))
5631
5732
5833 @Callable(i)
59-func addItem (title,price,data) = {
60- let supplierAddress = toBase58String(i.caller.bytes)
61- let item = getKeyItem(supplierAddress, title)
62- if ((0 >= price))
63- then throw("Price set too low")
64- else if ((getValueItemSupplier(item) != NONE))
65- then throw("Already exist !")
66- else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data)]
67- }
68-
69-
70-
71-@Callable(i)
72-func purchase (item) = {
34+func deposit () = {
7335 let pmt = value(i.payments[0])
7436 if (isDefined(pmt.assetId))
75- then throw("Only Waves can be used at the moment")
76- else {
77- let userAddress = toBase58String(i.caller.bytes)
78- let price = getValueItemPrice(item)
79- let supplierAddress = getValueItemSupplier(item)
80- if ((price > pmt.amount))
81- then throw("Can't validate payment, too low amount")
82- else if ((supplierAddress == NONE))
83- then throw("Supplier does not exist")
84- else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplierAccount(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
85- }
37+ then throw("Error: only Waves can be used at the moment")
38+ else if ((0 >= pmt.amount))
39+ then throw("Error: deposit amount is negative or zero.")
40+ else {
41+ let adr = toBase58String(i.caller.bytes)
42+[IntegerEntry(cKeyUserBalance(adr), (getUserBalance(adr) + pmt.amount))]
43+ }
8644 }
8745
8846
8947
9048 @Callable(i)
9149 func withdraw () = {
9250 let adr = toBase58String(i.caller.bytes)
93- let curBalance = getValueBalanceSupplier(adr)
51+ let curBalance = getUserBalance(adr)
9452 if ((0 >= curBalance))
95- then throw("No balance for the moment")
96- else [IntegerEntry(getKeyBalanceSupplierAccount(adr), 0), ScriptTransfer(addressFromStringValue(adr), curBalance, unit)]
53+ then throw("Error: No balance for the moment")
54+ else if (((wavesBalance(this).available - 2) >= curBalance))
55+ then [IntegerEntry(cKeyUserBalance(adr), 0), ScriptTransfer(addressFromStringValue(adr), curBalance, unit)]
56+ else [IntegerEntry(cKeyUserBalance(adr), 0), IntegerEntry(cKeyUserWthdWaitingQty(adr), (getUserWthdWaitingQty(adr) + curBalance))]
9757 }
9858
59+
60+
61+@Callable(i)
62+func sendToUserWaiting (user) = {
63+ let adr = user
64+ let curWaiting = getUserWthdWaitingQty(adr)
65+ if ((0 >= curWaiting))
66+ then throw("Error: No amount currently in wait for withdraw")
67+ else if ((curWaiting > (wavesBalance(this).available - 2)))
68+ then throw("Error: Dapp is withdrawing your funds, please wait a bit!")
69+ else [IntegerEntry(cKeyUserWthdWaitingQty(adr), 0), ScriptTransfer(addressFromStringValue(adr), curWaiting, unit)]
70+ }
71+
72+
73+@Verifier(tx)
74+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
9975

github/deemru/w8io/873ac7e 
25.67 ms