tx · 5n9u3MMwMgLhRkpGoPjB2Hh9W8WnqnxTCDiPSPx3STwc

3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7:  -0.01400000 Waves

2021.08.02 15:05 [1640689] smart account 3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7 > SELF 0.00000000 Waves

{ "type": 13, "id": "5n9u3MMwMgLhRkpGoPjB2Hh9W8WnqnxTCDiPSPx3STwc", "fee": 1400000, "feeAssetId": null, "timestamp": 1627905928400, "version": 2, "chainId": 84, "sender": "3MovmZoJtqutkf49oGXHzABSMUQ7HU5Dcg7", "senderPublicKey": "3tp5fNYyPi4jMnkf6s1k4kBqvJ7nm57SxzvLyi8RkxT2", "proofs": [ "4VudLvSVSvgpFpJau14RvW7yTYiiwvi5F9X39SQtqGWyYx3VALvB9eZVAqEXg62UXCd12tuB4EJFhdDBY2tkA4sQ" ], "script": "base64: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ZXIJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAVZ2V0S2V5U3VwcGxpZXJCYWxhbmNlAAAAAQUAAAAIc3VwcGxpZXIBAAAAF2dldFZhbHVlVXNlckl0ZW1Db3VudGVyAAAAAgAAAAR1c2VyAAAABGl0ZW0JAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgUAAAAEdXNlcgUAAAAEaXRlbQEAAAAWZ2V0VmFsdWVQdXJjaGFzZVN0YXR1cwAAAAEAAAAIcHVyY2hhc2UJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABRnZXRLZXlQdXJjaGFzZVN0YXR1cwAAAAEFAAAACHB1cmNoYXNlAQAAABRnZXRWYWx1ZVB1cmNoYXNlSXRlbQAAAAEAAAAIcHVyY2hhc2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMJAQAAABJnZXRLZXlQdXJjaGFzZUl0ZW0AAAABBQAAAAhwdXJjaGFzZQEAAAAYZ2V0VmFsdWVQdXJjaGFzZVN1cHBsaWVyAAAAAQAAAAhwdXJjaGFzZQkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkBAAAAFmdldEtleVB1cmNoYXNlU3VwcGxpZXIAAAABBQAAAAhwdXJjaGFzZQEAAAAUZ2V0VmFsdWVQdXJjaGFzZVVzZXIAAAABAAAACHB1cmNoYXNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzCQEAAAASZ2V0S2V5UHVyY2hhc2VVc2VyAAAAAQUAAAAIcHVyY2hhc2UBAAAAFmdldFZhbHVlUHVyY2hhc2VBbW91bnQAAAABAAAACHB1cmNoYXNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzCQEAAAAUZ2V0S2V5UHVyY2hhc2VBbW91bnQAAAABBQAAAAhwdXJjaGFzZQEAAAAZZ2V0VmFsdWVQdXJjaGFzZVRpbWVzdGFtcAAAAAEAAAAIcHVyY2hhc2UJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAXZ2V0S2V5UHVyY2hhc2VUaW1lc3RhbXAAAAABBQAAAAhwdXJjaGFzZQEAAAARZ2V0VmFsdWVJdGVtUHJpY2UAAAABAAAABGl0ZW0JAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEAAAAEaXRlbQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0BAAAAFmdldFZhbHVlSXRlbUV4cGlyZVRpbWUAAAABAAAABGl0ZW0JAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAAUZ2V0S2V5SXRlbUV4cGlyZURhdGUAAAABBQAAAARpdGVtAQAAABFnZXRWYWx1ZUl0ZW1UaXRsZQAAAAEAAAAEaXRlbQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2dldEtleUl0ZW1UaXRsZQAAAAEFAAAABGl0ZW0BAAAAF2dldFZhbHVlSXRlbVNvbGRDb3VudGVyAAAAAQAAAARpdGVtCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQkBAAAAFWdldEtleUl0ZW1Tb2xkQ291bnRlcgAAAAEFAAAABGl0ZW0BAAAADmdldFZhbHVlQ29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABRnZXRWYWx1ZUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAABJnZXRLZXlDb21taXRzQ291bnQAAAABBQAAAARpdGVtAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAA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SXRlbUNvdW50ZXIJAABkAAAAAgkBAAAAF2dldFZhbHVlVXNlckl0ZW1Db3VudGVyAAAAAgUAAAAEdXNlcgUAAAAEaXRlbQAAAAAAAAAAAQQAAAAIcHVyY2hhc2UJAQAAAA5nZW5QdXJjaGFzZUtleQAAAAQFAAAACHN1cHBsaWVyBQAAAARpdGVtBQAAAAR1c2VyBQAAAA91c2VySXRlbUNvdW50ZXIEAAAAEWtleVB1cmNoYXNlU3RhdHVzCQEAAAAUZ2V0S2V5UHVyY2hhc2VTdGF0dXMAAAABBQAAAAhwdXJjaGFzZQQAAAAPa2V5UHVyY2hhc2VJdGVtCQEAAAASZ2V0S2V5UHVyY2hhc2VJdGVtAAAAAQUAAAAIcHVyY2hhc2UEAAAAE2tleVB1cmNoYXNlU3VwcGxpZXIJAQAAABZnZXRLZXlQdXJjaGFzZVN1cHBsaWVyAAAAAQUAAAAIcHVyY2hhc2UEAAAAD2tleVB1cmNoYXNlVXNlcgkBAAAAEmdldEtleVB1cmNoYXNlVXNlcgAAAAEFAAAACHB1cmNoYXNlBAAAABFrZXlQdXJjaGFzZUFtb3VudAkBAAAAFGdldEtleVB1cmNoYXNlQW1vdW50AAAAAQUAAAAIcHVyY2hhc2UEAAAAFGtleVB1cmNoYXNlVGltZXN0YW1wCQEAAAAXZ2V0S2V5UHVyY2hhc2VUaW1lc3RhbXAAAAABBQAAAAhwdXJjaGFzZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5VXNlckl0ZW1Db3VudGVyBQAAAA91c2VySXRlbUNvdW50ZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAARa2V5UHVyY2hhc2VTdGF0dXMFAAAACEFQUFJPVkFMCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVB1cmNoYXNlSXRlbQUAAAAEaXRlbQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABNrZXlQdXJjaGFzZVN1cHBsaWVyBQAAAAhzdXBwbGllcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlQdXJjaGFzZVVzZXIFAAAABHVzZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtleVB1cmNoYXNlQW1vdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAUa2V5UHVyY2hhc2VUaW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAANuaWwAAAABaQEAAAAOcmVqZWN0UHVyY2hhc2UAAAABAAAACHB1cmNoYXNlBAAAAAZjYWxsZXIJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAGc3RhdHVzCQEAAAAWZ2V0VmFsdWVQdXJjaGFzZVN0YXR1cwAAAAEFAAAACHB1cmNoYXNlBAAAAAhzdXBwbGllcgkBAAAAGGdldFZhbHVlUHVyY2hhc2VTdXBwbGllcgAAAAEFAAAACHB1cmNoYXNlBAAAAARpdGVtCQEAAAAUZ2V0VmFsdWVQdXJjaGFzZUl0ZW0AAAABBQAAAAhwdXJjaGFzZQMDCQAAAAAAAAIFAAAACHN1cHBsaWVyBQAAAAROT05FBgkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAAAhzdXBwbGllcgkAAAIAAAABAgAAACNZb3VyIGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgaXRlbQMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAIQVBQUk9WQUwJAAACAAAAAQIAAAAgWW91IGNhbm5vdCByZWplY3QgdGhpcyBwdXJjaGFzZWQEAAAAEWtleVB1cmNoYXNlU3RhdHVzCQEAAAAUZ2V0S2V5UHVyY2hhc2VTdGF0dXMAAAABBQAAAAhwdXJjaGFzZQQAAAARa2V5UHVyY2hhc2VBbW91bnQJAQAAABRnZXRLZXlQdXJjaGFzZUFtb3VudAAAAAEFAAAACHB1cmNoYXNlBAAAABJrZXlTdXBwbGllckJhbGFuY2UJAQAAABVnZXRLZXlTdXBwbGllckJhbGFuY2UAAAABBQAAAAhzdXBwbGllcgQAAAASa2V5SXRlbVNvbGRDb3VudGVyCQEAAAAVZ2V0S2V5SXRlbVNvbGRDb3VudGVyAAAAAQUAAAAEaXRlbQQAAAAEdXNlcgkBAAAAFGdldFZhbHVlUHVyY2hhc2VVc2VyAAAAAQUAAAAIcHVyY2hhc2UEAAAABmFtb3VudAkBAAAAFmdldFZhbHVlUHVyY2hhc2VBbW91bnQAAAABBQAAAAhwdXJjaGFzZQQAAAAPc3VwcGxpZXJCYWxhbmNlCQAAZQAAAAIJAQAAABdnZXRWYWx1ZVN1cHBsaWVyQmFsYW5jZQAAAAEFAAAACHN1cHBsaWVyBQAAAAZhbW91bnQEAAAAD2l0ZW1Tb2xkQ291bnRlcgkAAGUAAAACCQEAAAAXZ2V0VmFsdWVJdGVtU29sZENvdW50ZXIAAAABBQAAAARpdGVtAAAAAAAAAAABBAAAAAdhZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAR1c2VyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAEWtleVB1cmNoYXNlU3RhdHVzBQAAAAhSRUpFQ1RFRAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa2V5UHVyY2hhc2VBbW91bnQAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAHYWRkcmVzcwUAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAOYWNjZXB0UHVyY2hhc2UAAAACAAAACHB1cmNoYXNlAAAADWNvdXBvbkFzc2V0SWQEAAAABmNhbGxlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMJAQAAABZnZXRWYWx1ZVB1cmNoYXNlU3RhdHVzAAAAAQUAAAAIcHVyY2hhc2UEAAAACHN1cHBsaWVyCQEAAAAYZ2V0VmFsdWVQdXJjaGFzZVN1cHBsaWVyAAAAAQUAAAAIcHVyY2hhc2UEAAAABGl0ZW0JAQAAABRnZXRWYWx1ZVB1cmNoYXNlSXRlbQAAAAEFAAAACHB1cmNoYXNlBAAAAAZleHBpcmUJAQAAABZnZXRWYWx1ZUl0ZW1FeHBpcmVUaW1lAAAAAQUAAAAEaXRlbQMDCQAAAAAAAAIFAAAACHN1cHBsaWVyBQAAAAROT05FBgkBAAAAAiE9AAAAAgUAAAAGY2FsbGVyBQAAAAhzdXBwbGllcgkAAAIAAAABAgAAACNZb3VyIGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgaXRlbQMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAIQVBQUk9WQUwJAAACAAAAAQIAAAAgWW91IGNhbm5vdCByZWplY3QgdGhpcyBwdXJjaGFzZWQDAwkAAGYAAAACBQAAAAZleHBpcmUAAAAAAAAAAAAJAABnAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABmV4cGlyZQcJAAACAAAAAQIAAAAOQ291cG9uIGV4cGlyZWQEAAAAEWtleVB1cmNoYXNlU3RhdHVzCQEAAAAUZ2V0S2V5UHVyY2hhc2VTdGF0dXMAAAABBQAAAAhwdXJjaGFzZQQAAAASa2V5U3VwcGxpZXJCYWxhbmNlCQEAAAAVZ2V0S2V5U3VwcGxpZXJCYWxhbmNlAAAAAQUAAAAIc3VwcGxpZXIEAAAAEmtleUl0ZW1Tb2xkQ291bnRlcgkBAAAAFWdldEtleUl0ZW1Tb2xkQ291bnRlcgAAAAEFAAAABGl0ZW0EAAAABmFtb3VudAkBAAAAFmdldFZhbHVlUHVyY2hhc2VBbW91bnQAAAABBQAAAAhwdXJjaGFzZQQAAAAPc3VwcGxpZXJCYWxhbmNlCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVN1cHBsaWVyQmFsYW5jZQAAAAEFAAAACHN1cHBsaWVyBQAAAAZhbW91bnQEAAAAD2l0ZW1Tb2xkQ291bnRlcgkAAGQAAAACCQEAAAAXZ2V0VmFsdWVJdGVtU29sZENvdW50ZXIAAAABBQAAAARpdGVtAAAAAAAAAAABBAAAAAR1c2VyCQEAAAAUZ2V0VmFsdWVQdXJjaGFzZVVzZXIAAAABBQAAAAhwdXJjaGFzZQQAAAAHYWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAEdXNlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASa2V5U3VwcGxpZXJCYWxhbmNlBQAAAA9zdXBwbGllckJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmtleUl0ZW1Tb2xkQ291bnRlcgUAAAAPaXRlbVNvbGRDb3VudGVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAB2FkZHJl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", "height": 1640689, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ca54uLDM9RY2i7g3QrdYDWAomvZQEQaZjoMJoBvyRCzR Next: 5q7WMnPQNVy6wNTAZQzTuUdATLE3DQfCGBpHqEKbxsx6 Diff:
OldNewDifferences
8585 func getKeySupplierBalance (supplier) = (supplier + "_balance")
8686
8787
88-func getPurchase (supplier,item,user) = ("purchase_" + toBase58String(sha256(toBytes(((((supplier + "_") + item) + "_") + user)))))
88+func getKeyUserItemCounter (user,item) = (((user + "_") + item) + "_counter")
89+
90+
91+func genPurchaseKey (supplier,item,user,counter) = ("purchase_" + toBase58String(sha256(toBytes(((((((supplier + "_") + item) + "_") + user) + "_") + toString(counter))))))
8992
9093
9194 func getKeyPurchaseStatus (purchase) = (purchase + "_status")
113116
114117
115118 func getValueSupplierBalance (supplier) = getIntegerByKey(getKeySupplierBalance(supplier))
119+
120+
121+func getValueUserItemCounter (user,item) = getIntegerByKey(getKeyUserItemCounter(user, item))
116122
117123
118124 func getValuePurchaseStatus (purchase) = getStringByKey(getKeyPurchaseStatus(purchase))
243249 else if ((supplier == NONE))
244250 then throw("Supplier does not exists")
245251 else {
246- let purchase = getPurchase(supplier, item, user)
252+ let keyUserItemCounter = getKeyUserItemCounter(user, item)
253+ let userItemCounter = (getValueUserItemCounter(user, item) + 1)
254+ let purchase = genPurchaseKey(supplier, item, user, userItemCounter)
247255 let keyPurchaseStatus = getKeyPurchaseStatus(purchase)
248256 let keyPurchaseItem = getKeyPurchaseItem(purchase)
249257 let keyPurchaseSupplier = getKeyPurchaseSupplier(purchase)
250258 let keyPurchaseUser = getKeyPurchaseUser(purchase)
251259 let keyPurchaseAmount = getKeyPurchaseAmount(purchase)
252260 let keyPurchaseTimestamp = getKeyPurchaseTimestamp(purchase)
253-[StringEntry(keyPurchaseStatus, APPROVAL), StringEntry(keyPurchaseItem, item), StringEntry(keyPurchaseSupplier, supplier), StringEntry(keyPurchaseUser, user), IntegerEntry(keyPurchaseAmount, pmt.amount), IntegerEntry(keyPurchaseTimestamp, lastBlock.timestamp)]
261+[IntegerEntry(keyUserItemCounter, userItemCounter), StringEntry(keyPurchaseStatus, APPROVAL), StringEntry(keyPurchaseItem, item), StringEntry(keyPurchaseSupplier, supplier), StringEntry(keyPurchaseUser, user), IntegerEntry(keyPurchaseAmount, pmt.amount), IntegerEntry(keyPurchaseTimestamp, lastBlock.timestamp)]
254262 }
255263 }
256264 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "NONE"
55
66 let VOTERS = 3
77
88 let QUORUM = 2
99
1010 let FEATURED = "featured"
1111
1212 let DELISTED = "delisted"
1313
1414 let VOTING = "voting"
1515
1616 let REVEAL = "reveal"
1717
1818 let APPROVAL = "approval"
1919
2020 let REJECTED = "rejected"
2121
2222 let ACCEPTED = "accepted"
2323
2424 func getStringByKey (key) = match getString(this, key) {
2525 case a: String =>
2626 a
2727 case _ =>
2828 NONE
2929 }
3030
3131
3232 func getIntegerByKey (key) = match getInteger(this, key) {
3333 case a: Int =>
3434 a
3535 case _ =>
3636 0
3737 }
3838
3939
4040 func getKeySupplierAccount (account) = (account + "_account")
4141
4242
4343 func getSupplierAccount (account) = getStringByKey(getKeySupplierAccount(account))
4444
4545
4646 func getKeyItem (supplier,title) = {
4747 let supplierTitle = (supplier + title)
4848 ("item_" + toBase58String(sha256(toBytes(supplierTitle))))
4949 }
5050
5151
5252 func getKeyItemSupplier (item) = (item + "_owner")
5353
5454
5555 func getKeyItemTitle (item) = (item + "_title")
5656
5757
5858 func getKeyItemPrice (item) = (item + "_price")
5959
6060
6161 func getKeyItemData (item) = (item + "_data")
6262
6363
6464 func getKeyItemExpireDate (item) = (item + "_expiredate")
6565
6666
6767 func getKeyItemSoldCounter (item) = (item + "_sold")
6868
6969
7070 func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
7171
7272
7373 func getKeyCommitsCount (item) = (item + "_cmtcnt")
7474
7575
7676 func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
7777
7878
7979 func getKeyItemStatus (item) = (item + "_status")
8080
8181
8282 func getKeyVotesCount (item,vote) = ((item + "_res:") + vote)
8383
8484
8585 func getKeySupplierBalance (supplier) = (supplier + "_balance")
8686
8787
88-func getPurchase (supplier,item,user) = ("purchase_" + toBase58String(sha256(toBytes(((((supplier + "_") + item) + "_") + user)))))
88+func getKeyUserItemCounter (user,item) = (((user + "_") + item) + "_counter")
89+
90+
91+func genPurchaseKey (supplier,item,user,counter) = ("purchase_" + toBase58String(sha256(toBytes(((((((supplier + "_") + item) + "_") + user) + "_") + toString(counter))))))
8992
9093
9194 func getKeyPurchaseStatus (purchase) = (purchase + "_status")
9295
9396
9497 func getKeyPurchaseItem (purchase) = (purchase + "_item")
9598
9699
97100 func getKeyPurchaseSupplier (purchase) = (purchase + "_supplier")
98101
99102
100103 func getKeyPurchaseUser (purchase) = (purchase + "_user")
101104
102105
103106 func getKeyPurchaseAmount (purchase) = (purchase + "_amount")
104107
105108
106109 func getKeyPurchaseTimestamp (purchase) = (purchase + "_timestamp")
107110
108111
109112 func getKeyCoupon (assetId) = ("coupon_" + assetId)
110113
111114
112115 func getKeyCouponItem (coupon) = (coupon + "_item")
113116
114117
115118 func getValueSupplierBalance (supplier) = getIntegerByKey(getKeySupplierBalance(supplier))
119+
120+
121+func getValueUserItemCounter (user,item) = getIntegerByKey(getKeyUserItemCounter(user, item))
116122
117123
118124 func getValuePurchaseStatus (purchase) = getStringByKey(getKeyPurchaseStatus(purchase))
119125
120126
121127 func getValuePurchaseItem (purchase) = getStringValue(this, getKeyPurchaseItem(purchase))
122128
123129
124130 func getValuePurchaseSupplier (purchase) = getStringValue(this, getKeyPurchaseSupplier(purchase))
125131
126132
127133 func getValuePurchaseUser (purchase) = getStringValue(this, getKeyPurchaseUser(purchase))
128134
129135
130136 func getValuePurchaseAmount (purchase) = getIntegerValue(this, getKeyPurchaseAmount(purchase))
131137
132138
133139 func getValuePurchaseTimestamp (purchase) = getIntegerByKey(getKeyPurchaseTimestamp(purchase))
134140
135141
136142 func getValueItemPrice (item) = getIntegerValue(this, getKeyItemPrice(item))
137143
138144
139145 func getValueItemSupplier (item) = getStringByKey(getKeyItemSupplier(item))
140146
141147
142148 func getValueItemExpireTime (item) = getIntegerByKey(getKeyItemExpireDate(item))
143149
144150
145151 func getValueItemTitle (item) = getStringByKey(getKeyItemTitle(item))
146152
147153
148154 func getValueItemSoldCounter (item) = getIntegerByKey(getKeyItemSoldCounter(item))
149155
150156
151157 func getValueCommit (item,user) = getStringByKey(getKeyCommit(item, user))
152158
153159
154160 func getValueCommitsCount (item) = getIntegerByKey(getKeyCommitsCount(item))
155161
156162
157163 func getValueReveal (item,user) = getStringByKey(getKeyReveal(item, user))
158164
159165
160166 func getValueItemStatus (item) = getStringByKey(getKeyItemStatus(item))
161167
162168
163169 func getValueVotesCount (item,vote) = getIntegerByKey(getKeyVotesCount(item, vote))
164170
165171
166172 @Callable(i)
167173 func registerSupplier (data) = {
168174 let supplier = toBase58String(i.caller.bytes)
169175 let account = getSupplierAccount(supplier)
170176 if ((account != NONE))
171177 then throw("This address has already registred as supplier")
172178 else [StringEntry(getKeySupplierAccount(supplier), data)]
173179 }
174180
175181
176182
177183 @Callable(i)
178184 func addItem (title,price,data,expire) = {
179185 let supplier = toBase58String(i.caller.bytes)
180186 let account = getSupplierAccount(supplier)
181187 let item = getKeyItem(supplier, title)
182188 if ((account == NONE))
183189 then throw("You should register as supplier to add an item")
184190 else if ((0 >= price))
185191 then throw("Purchase amount cannot be less than item price")
186192 else if ((getValueItemSupplier(item) != NONE))
187193 then throw("An item already exists")
188194 else [StringEntry(getKeyItemSupplier(item), supplier), StringEntry(getKeyItemTitle(item), title), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), IntegerEntry(getKeyItemExpireDate(item), expire)]
189195 }
190196
191197
192198
193199 @Callable(i)
194200 func updateItem (item,title,price,data,expire) = {
195201 let supplier = toBase58String(i.caller.bytes)
196202 let account = getSupplierAccount(supplier)
197203 let itemSupplier = getValueItemSupplier(item)
198204 if ((account == NONE))
199205 then throw("You should register as supplier to remove an item")
200206 else if (if ((item == NONE))
201207 then true
202208 else (supplier != itemSupplier))
203209 then throw(("You don't owned item " + item))
204210 else [StringEntry(getKeyItemTitle(item), title), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), IntegerEntry(getKeyItemExpireDate(item), expire)]
205211 }
206212
207213
208214
209215 @Callable(i)
210216 func removeItem (item) = {
211217 let supplier = toBase58String(i.caller.bytes)
212218 let account = getSupplierAccount(supplier)
213219 let itemSupplier = getValueItemSupplier(item)
214220 if ((account == NONE))
215221 then throw("You should register as supplier to remove an item")
216222 else if (if ((item == NONE))
217223 then true
218224 else (supplier != itemSupplier))
219225 then throw(("You don't owned item " + item))
220226 else [DeleteEntry(getKeyItemSupplier(item)), DeleteEntry(getKeyItemTitle(item)), DeleteEntry(getKeyItemPrice(item)), DeleteEntry(getKeyItemData(item)), DeleteEntry(getKeyItemExpireDate(item))]
221227 }
222228
223229
224230
225231 @Callable(i)
226232 func purchase (item) = {
227233 let pmt = i.payments[0]
228234 if (isDefined(pmt.assetId))
229235 then throw("You can buy tokens only with Waves tokens")
230236 else {
231237 let user = toBase58String(i.caller.bytes)
232238 let price = getValueItemPrice(item)
233239 let supplier = getValueItemSupplier(item)
234240 let expire = getValueItemExpireTime(item)
235241 if (if ((expire > 0))
236242 then (lastBlock.timestamp >= expire)
237243 else false)
238244 then throw("Coupon expired")
239245 else if ((price > pmt.amount))
240246 then throw("Purchase amount cannot be less than item price")
241247 else if ((pmt.amount > price))
242248 then throw("Purchase amount cannot be higher than item price")
243249 else if ((supplier == NONE))
244250 then throw("Supplier does not exists")
245251 else {
246- let purchase = getPurchase(supplier, item, user)
252+ let keyUserItemCounter = getKeyUserItemCounter(user, item)
253+ let userItemCounter = (getValueUserItemCounter(user, item) + 1)
254+ let purchase = genPurchaseKey(supplier, item, user, userItemCounter)
247255 let keyPurchaseStatus = getKeyPurchaseStatus(purchase)
248256 let keyPurchaseItem = getKeyPurchaseItem(purchase)
249257 let keyPurchaseSupplier = getKeyPurchaseSupplier(purchase)
250258 let keyPurchaseUser = getKeyPurchaseUser(purchase)
251259 let keyPurchaseAmount = getKeyPurchaseAmount(purchase)
252260 let keyPurchaseTimestamp = getKeyPurchaseTimestamp(purchase)
253-[StringEntry(keyPurchaseStatus, APPROVAL), StringEntry(keyPurchaseItem, item), StringEntry(keyPurchaseSupplier, supplier), StringEntry(keyPurchaseUser, user), IntegerEntry(keyPurchaseAmount, pmt.amount), IntegerEntry(keyPurchaseTimestamp, lastBlock.timestamp)]
261+[IntegerEntry(keyUserItemCounter, userItemCounter), StringEntry(keyPurchaseStatus, APPROVAL), StringEntry(keyPurchaseItem, item), StringEntry(keyPurchaseSupplier, supplier), StringEntry(keyPurchaseUser, user), IntegerEntry(keyPurchaseAmount, pmt.amount), IntegerEntry(keyPurchaseTimestamp, lastBlock.timestamp)]
254262 }
255263 }
256264 }
257265
258266
259267
260268 @Callable(i)
261269 func rejectPurchase (purchase) = {
262270 let caller = toBase58String(i.caller.bytes)
263271 let status = getValuePurchaseStatus(purchase)
264272 let supplier = getValuePurchaseSupplier(purchase)
265273 let item = getValuePurchaseItem(purchase)
266274 if (if ((supplier == NONE))
267275 then true
268276 else (caller != supplier))
269277 then throw("Your are not the owner of this item")
270278 else if ((status != APPROVAL))
271279 then throw("You cannot reject this purchased")
272280 else {
273281 let keyPurchaseStatus = getKeyPurchaseStatus(purchase)
274282 let keyPurchaseAmount = getKeyPurchaseAmount(purchase)
275283 let keySupplierBalance = getKeySupplierBalance(supplier)
276284 let keyItemSoldCounter = getKeyItemSoldCounter(item)
277285 let user = getValuePurchaseUser(purchase)
278286 let amount = getValuePurchaseAmount(purchase)
279287 let supplierBalance = (getValueSupplierBalance(supplier) - amount)
280288 let itemSoldCounter = (getValueItemSoldCounter(item) - 1)
281289 let address = addressFromStringValue(user)
282290 [StringEntry(keyPurchaseStatus, REJECTED), IntegerEntry(keyPurchaseAmount, 0), ScriptTransfer(address, amount, unit)]
283291 }
284292 }
285293
286294
287295
288296 @Callable(i)
289297 func acceptPurchase (purchase,couponAssetId) = {
290298 let caller = toBase58String(i.caller.bytes)
291299 let status = getValuePurchaseStatus(purchase)
292300 let supplier = getValuePurchaseSupplier(purchase)
293301 let item = getValuePurchaseItem(purchase)
294302 let expire = getValueItemExpireTime(item)
295303 if (if ((supplier == NONE))
296304 then true
297305 else (caller != supplier))
298306 then throw("Your are not the owner of this item")
299307 else if ((status != APPROVAL))
300308 then throw("You cannot reject this purchased")
301309 else if (if ((expire > 0))
302310 then (lastBlock.timestamp >= expire)
303311 else false)
304312 then throw("Coupon expired")
305313 else {
306314 let keyPurchaseStatus = getKeyPurchaseStatus(purchase)
307315 let keySupplierBalance = getKeySupplierBalance(supplier)
308316 let keyItemSoldCounter = getKeyItemSoldCounter(item)
309317 let amount = getValuePurchaseAmount(purchase)
310318 let supplierBalance = (getValueSupplierBalance(supplier) + amount)
311319 let itemSoldCounter = (getValueItemSoldCounter(item) + 1)
312320 let user = getValuePurchaseUser(purchase)
313321 let address = addressFromStringValue(user)
314322 [IntegerEntry(keySupplierBalance, supplierBalance), IntegerEntry(keyItemSoldCounter, itemSoldCounter), ScriptTransfer(address, 1, fromBase58String(couponAssetId))]
315323 }
316324 }
317325
318326
319327
320328 @Callable(i)
321329 func voteCommit (item,hash) = {
322330 let user = toBase58String(i.caller.bytes)
323331 let commitsCount = getValueCommitsCount(item)
324332 let status = getValueItemStatus(item)
325333 if ((commitsCount >= VOTERS))
326334 then throw("Reached max number of voters")
327335 else if ((getValueCommit(item, user) != NONE))
328336 then throw("You voted already")
329337 else if ((getKeyItemSupplier(item) == NONE))
330338 then throw("Item does not exists")
331339 else if (if ((status != NONE))
332340 then (status != VOTING)
333341 else false)
334342 then throw("Voting is not active for this item now")
335343 else {
336344 let newStatus = if ((commitsCount == VOTERS))
337345 then REVEAL
338346 else VOTING
339347 [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commitsCount + 1)), StringEntry(getKeyItemStatus(item), newStatus)]
340348 }
341349 }
342350
343351
344352
345353 @Callable(i)
346354 func voteReveal (item,vote,salt) = {
347355 let user = toBase58String(i.caller.bytes)
348356 let status = getValueItemStatus(item)
349357 let newVotesCount = (getValueVotesCount(item, vote) + 1)
350358 let saltedVote = toBase58String(sha256(toBytes(((item + vote) + salt))))
351359 if ((saltedVote != getValueCommit(item, user)))
352360 then throw("Reveal data is not valid")
353361 else if ((VOTERS > getValueCommitsCount(item)))
354362 then throw("Max number of voters not reached")
355363 else if ((getValueReveal(item, user) != NONE))
356364 then throw("You voted already")
357365 else if (if ((status != VOTING))
358366 then (status != REVEAL)
359367 else false)
360368 then throw("Voting is not active for this item now")
361369 else if (if ((vote != FEATURED))
362370 then (vote != DELISTED)
363371 else false)
364372 then throw("Provided voting option is incorrect")
365373 else {
366374 let newStatus = if ((newVotesCount >= QUORUM))
367375 then vote
368376 else REVEAL
369377 [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVotesCount(item, user), newVotesCount), StringEntry(getKeyItemStatus(item), newStatus)]
370378 }
371379 }
372380
373381
374382 @Verifier(tx)
375383 func verify () = match tx {
376384 case t: SetScriptTransaction =>
377385 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
378386 case t: IssueTransaction =>
379387 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
380388 case t: TransferTransaction =>
381389 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
382390 case _ =>
383391 false
384392 }
385393

github/deemru/w8io/026f985 
58.49 ms