tx · 9xtPa2pVYEVR4GSjHKmWLeHg8nJ8oYsG9Zv1KXEq2vGf

3NBdqVGWfdqV3UJ8S1xsz5qoBRGTEsLioLf:  -0.01400000 Waves

2020.03.14 14:42 [908814] smart account 3NBdqVGWfdqV3UJ8S1xsz5qoBRGTEsLioLf > SELF 0.00000000 Waves

{ "type": 13, "id": "9xtPa2pVYEVR4GSjHKmWLeHg8nJ8oYsG9Zv1KXEq2vGf", "fee": 1400000, "feeAssetId": null, "timestamp": 1584186129019, "version": 1, "sender": "3NBdqVGWfdqV3UJ8S1xsz5qoBRGTEsLioLf", "senderPublicKey": "3LEuAZxU2NYqTtbUBJLs5XaFQ8z781ENmxbLvFXZy33D", "proofs": [ "BeB3oREPpQuv1kRVLtGnZoNKVKn2WMM3dDZ5UEBAqot3AdCZ8S5AHhgmct5QhAEwzTYFS5QyGCzc8uQdQtZYjmk" ], "script": "base64:AAIDAAAAAAAAADEIARIICgYIAQgBAQQSBQoDCAEIEgMKAQgSBgoECAgBCBIDCgEIEgUKAwgBCBIDCgEIAAAAIAAAAAAHYWRkcmVzcwIAAAAjM05CZHFWR1dmZHFWM1VKOFMxeHN6NXFvQlJHVEVzTGlvTGYAAAAADmtleUV2ZW50UHJlZml4AgAAAAJlXwAAAAASa2V5RXZlbnREYXRhUHJlZml4AgAAAAVkYXRhXwAAAAATa2V5RXZlbnRQcmljZVByZWZpeAIAAAAGcHJpY2VfAAAAABJrZXlFdmVudERhdGVQcmVmaXgCAAAABWRhdGVfAAAAABZrZXlFdmVudEF0dGVuZGVlUHJlZml4AgAAAAJhXwAAAAAYa2V5UHJvZHVjZXJCYWxhbmNlUHJlZml4AgAAAAhiYWxhbmNlXwAAAAAaa2V5RXZlbnRBbW91bnRUaWNrZXRQcmVmaXgCAAAADmFtb3VudFRpY2tldHNfAAAAABZrZXlFdmVudENhbmNlbGVkUHJlZml4AgAAAAljYW5jZWxlZF8AAAAAGGtleUV2ZW50UmVxdWlyZXNJZFByZWZpeAIAAAALcmVxdWlyZXNJZF8AAAAABE5PTkUCAAAABG5vbmUBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAAA3N0cgEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAABGJvb2wEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwUAAAAEYm9vbAEAAAALZ2V0RXZlbnRLZXkAAAACAAAACHByb2R1Y2VyAAAABXRpdGxlCQABLAAAAAIFAAAADmtleUV2ZW50UHJlZml4CQACWAAAAAEJAAH3AAAAAQkAAZsAAAABCQABLAAAAAIFAAAACHByb2R1Y2VyBQAAAAV0aXRsZQEAAAAPZ2V0RXZlbnREYXRhS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABJrZXlFdmVudERhdGFQcmVmaXgFAAAABWV2ZW50AQAAABBnZXRFdmVudFByaWNlS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABNrZXlFdmVudFByaWNlUHJlZml4BQAAAAVldmVudAEAAAAPZ2V0RXZlbnREYXRlS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABJrZXlFdmVudERhdGVQcmVmaXgFAAAABWV2ZW50AQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAAAwAAAAR1c2VyAAAAAmlkAAAABWV2ZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABZrZXlFdmVudEF0dGVuZGVlUHJlZml4CQACWAAAAAEJAAH3AAAAAQkAAZsAAAABCQABLAAAAAIFAAAABHVzZXIFAAAAAmlkAgAAAAFfBQAAAAVldmVudAEAAAASZ2V0RXZlbnRCYWxhbmNlS2V5AAAAAgAAAAdhY2NvdW50AAAABWV2ZW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAABhrZXlQcm9kdWNlckJhbGFuY2VQcmVmaXgFAAAAB2FjY291bnQCAAAAAV8FAAAABWV2ZW50AQAAABhnZXRFdmVudEFtb3VudFRpY2tldHNLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAGmtleUV2ZW50QW1vdW50VGlja2V0UHJlZml4BQAAAAVldmVudAEAAAATZ2V0RXZlbnRDYW5jZWxlZEtleQAAAAEAAAAFZXZlbnQJAAEsAAAAAgUAAAAWa2V5RXZlbnRDYW5jZWxlZFByZWZpeAUAAAAFZXZlbnQBAAAAFWdldEV2ZW50UmVxdWlyZXNJZEtleQAAAAEAAAAFZXZlbnQJAAEsAAAAAgUAAAAYa2V5RXZlbnRSZXF1aXJlc0lkUHJlZml4BQAAAAVldmVudAEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEFAAAABGl0ZW0BAAAADWdldEV2ZW50VmFsdWUAAAACAAAACHByb2R1Y2VyAAAABXRpdGxlCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAAhwcm9kdWNlcgUAAAAFdGl0bGUBAAAAEmdldEV2ZW50UHJpY2VWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRFdmVudFByaWNlS2V5AAAAAQUAAAAFZXZlbnQBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQAAAAVldmVudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldEV2ZW50RGF0ZUtleQAAAAEFAAAABWV2ZW50AQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAADAAAABHVzZXIAAAACaWQAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAAAwUAAAAEdXNlcgUAAAACaWQFAAAABWV2ZW50AQAAABRnZXRFdmVudEJhbGFuY2VWYWx1ZQAAAAIAAAAHYWNjb3VudAAAAAVldmVudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAABWV2ZW50AQAAABpnZXRFdmVudEFtb3VudFRpY2tldHNWYWx1ZQAAAAEAAAAFZXZlbnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRFdmVudEFtb3VudFRpY2tldHNLZXkAAAABBQAAAAVldmVudAEAAAAVZ2V0RXZlbnRDYW5jZWxlZFZhbHVlAAAAAQAAAAVldmVudAkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQUAAAAFZXZlbnQBAAAAF2dldEV2ZW50UmVxdWlyZXNJZFZhbHVlAAAAAQAAAAVldmVudAkBAAAADGdldEJvb2xCeUtleQAAAAEJAQAAABVnZXRFdmVudFJlcXVpcmVzSWRLZXkAAAABBQAAAAVldmVudAAAAAcAAAABaQEAAAALY3JlYXRlRXZlbnQAAAAGAAAABXRpdGxlAAAABXByaWNlAAAABGRhdGEAAAAEZGF0ZQAAAA1hbW91bnRUaWNrZXRzAAAACnJlcXVpcmVzSWQEAAAAD3Byb2R1Y2VyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAVldmVudAkBAAAAC2dldEV2ZW50S2V5AAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAV0aXRsZQMJAQAAAAIhPQAAAAIJAQAAAA1nZXRFdmVudFZhbHVlAAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAV0aXRsZQUAAAAETk9ORQkAAAIAAAABAgAAABdUaGUgZXZlbnQgYWxyZWFkeSBleGlzdAMJAABmAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABGRhdGUJAAACAAAAAQIAAAAaRGF0ZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAAtnZXRFdmVudEtleQAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAFdGl0bGUFAAAAD3Byb2R1Y2VyQWRkcmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGdldEV2ZW50UHJpY2VLZXkAAAABBQAAAAVldmVudAUAAAAFcHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRFdmVudERhdGFLZXkAAAABBQAAAAVldmVudAUAAAAEZGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAD2dldEV2ZW50RGF0ZUtleQAAAAEFAAAABWV2ZW50BQAAAARkYXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0RXZlbnRBbW91bnRUaWNrZXRzS2V5AAAAAQUAAAAFZXZlbnQFAAAADWFtb3VudFRpY2tldHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRF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AAJpZAQAAAAPcHJvZHVjZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAAPcHJvZHVjZXJBZGRyZXNzCQAAAgAAAAECAAAAR1RoaXMgZXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24nZSBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBjaGVja2luAwkAAGYAAAACBQAAAAZhbW91bnQJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAADBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAVldmVudAkAAAIAAAABAgAAAB5Zb3UgZG9uJ3QgaGF2ZSBlbm91Z2ggdGlja2V0cy4DCQEAAAAVZ2V0RXZlbnRDYW5jZWxlZFZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAABPVGhpcyBldmVudCB3YXMgY2FuY2VsZWQuIFlvdSBjYW4gcmVkZWVtIHlvdXIgdGlja2V0IHVzaW5nIHJlZnVuZFRpY2tldCBmdW5jdGlvbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAE2dldEV2ZW50QXR0ZW5kZWVLZXkAAAADBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAVldmVudAkAAGUAAAACCQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAAAwUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAFZXZlbnQFAAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAC2NhbmNlbEV2ZW50AAAAAQAAAAVldmVudAQAAAAPcHJvZHVjZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAAPcHJvZHVjZXJBZGRyZXNzCQAAAgAAAAECAAAAI1lvdSBoYXZlIG5vdCBjcmVhdGVkIGFueSBFdmVudCB5ZXQhAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkAwkBAAAAFWdldEV2ZW50Q2FuY2VsZWRWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgd2FzIGFscmVhZHkgY2FuY2VsZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQUAAAAFZXZlbnQGBQAAAANuaWwAAAABaQEAAAAMcmVmdW5kVGlja2V0AAAAAwAAAAVldmVudAAAAAZhbW91bnQAAAACaWQEAAAAD2F0dGVuZGVlQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkAAAAAAAACCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAUAAAAETk9ORQkAAAIAAAABAgAAABhUaGUgZXZlbnQgZG9lcyBub3QgZXhpc3QDCQAAZgAAAAIFAAAABmFtb3VudAkBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAMFAAAAD2F0dGVuZGVlQWRkcmVzcwUAAAACaWQFAAAABWV2ZW50CQAAAgAAAAECAAAAOllvdSBkb24ndCBoYXZlIGVub3VnaCByZWdpc3RlcmVkIHRpY2tldHMgd2l0aCB0aGlzIGFkZHJlc3MDCQAAZgAAAAIJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAADk4cAJAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAMFAAAAD2F0dGVuZGVlQWRkcmVzcwUAAAACaWQFAAAABWV2ZW50CQAAZQAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAADBQAAAA9hdHRlbmRlZUFkZHJlc3MFAAAAAmlkBQAAAAVldmVudAUAAAAGYW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA9hdHRlbmRlZUFkZHJlc3MJAABoAAAAAgUAAAAGYW1vdW50CQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAAAwUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAFZXZlbnQFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAEAAAAFZXZlbnQEAAAAD3Byb2R1Y2VyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdiYWxhbmNlCQEAAAAUZ2V0RXZlbnRCYWxhbmNlVmFsdWUAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABWV2ZW50AwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAAD3Byb2R1Y2VyQWRkcmVzcwkAAAIAAAABAgAAAE5FdmVudCBkb2VzIG5vdCBleGlzdCwgb3IgeW91IGRvbid0IGhhdmUgdGhlIGNyZWRlbnRpYWxzIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24DCQAAZwAAAAIAAAAAAAAAAAAFAAAAB2JhbGFuY2UJAAACAAAAAQIAAAAUSW5zdWZmaWNpZW50IGJhbGFuY2UDCQAAZgAAAAIJAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEFAAAABWV2ZW50CQAAZQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAAD0JACQAAAgAAAAECAAAARUV2ZW50IGhhcyBub3QgeWV0IHRha2VuIHBsYWNlLiBXaXRoZHJhdyBmdW5kcyB3aGVuIGV2ZW50IHRha2VzIHBsYWNlLgMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAABdFdmVudCBoYXMgYmVlbiBjYW5jZWxlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudEJhbGFuY2VLZXkAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABWV2ZW50AAAAAAAAAAAABQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAAB2JhbGFuY2UFAAAABHVuaXQFAAAAA25pbAAAAAA3uiNt", "chainId": 84, "height": 908814, "spentComplexity": 0 } View: original | compacted Prev: CGgKimGMwUnbW1WykpgYirVwa5WBCHxpsHCyFd1MZBh4 Next: Etz3bJuM4TgLGD1ZPuwS1UVET27Pd1cEgVNqqgqbpy7g Diff:
OldNewDifferences
206206 let attendeeAddress = toBase58String(i.caller.bytes)
207207 if ((getEventValueById(event) == NONE))
208208 then throw("The event does not exist")
209- else if ((amount >= getEventAttendeeValue(attendeeAddress, id, event)))
209+ else if ((amount > getEventAttendeeValue(attendeeAddress, id, event)))
210210 then throw("You don't have enough registered tickets with this address")
211211 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
212212 then throw("This event has already happened")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let address = "3NBdqVGWfdqV3UJ8S1xsz5qoBRGTEsLioLf"
55
66 let keyEventPrefix = "e_"
77
88 let keyEventDataPrefix = "data_"
99
1010 let keyEventPricePrefix = "price_"
1111
1212 let keyEventDatePrefix = "date_"
1313
1414 let keyEventAttendeePrefix = "a_"
1515
1616 let keyProducerBalancePrefix = "balance_"
1717
1818 let keyEventAmountTicketPrefix = "amountTickets_"
1919
2020 let keyEventCanceledPrefix = "canceled_"
2121
2222 let keyEventRequiresIdPrefix = "requiresId_"
2323
2424 let NONE = "none"
2525
2626 func getNumberByKey (key) = {
2727 let num = match getInteger(this, key) {
2828 case a: Int =>
2929 a
3030 case _ =>
3131 0
3232 }
3333 num
3434 }
3535
3636
3737 func getStrByKey (key) = {
3838 let str = match getString(this, key) {
3939 case a: String =>
4040 a
4141 case _ =>
4242 NONE
4343 }
4444 str
4545 }
4646
4747
4848 func getBoolByKey (key) = {
4949 let bool = match getBoolean(this, key) {
5050 case a: Boolean =>
5151 a
5252 case _ =>
5353 false
5454 }
5555 bool
5656 }
5757
5858
5959 func getEventKey (producer,title) = (keyEventPrefix + toBase58String(sha256(toBytes((producer + title)))))
6060
6161
6262 func getEventDataKey (event) = (keyEventDataPrefix + event)
6363
6464
6565 func getEventPriceKey (event) = (keyEventPricePrefix + event)
6666
6767
6868 func getEventDateKey (event) = (keyEventDatePrefix + event)
6969
7070
7171 func getEventAttendeeKey (user,id,event) = (((keyEventAttendeePrefix + toBase58String(sha256(toBytes((user + id))))) + "_") + event)
7272
7373
7474 func getEventBalanceKey (account,event) = (((keyProducerBalancePrefix + account) + "_") + event)
7575
7676
7777 func getEventAmountTicketsKey (event) = (keyEventAmountTicketPrefix + event)
7878
7979
8080 func getEventCanceledKey (event) = (keyEventCanceledPrefix + event)
8181
8282
8383 func getEventRequiresIdKey (event) = (keyEventRequiresIdPrefix + event)
8484
8585
8686 func getEventValueById (item) = getStrByKey(item)
8787
8888
8989 func getEventValue (producer,title) = getStrByKey(getEventKey(producer, title))
9090
9191
9292 func getEventPriceValue (event) = getNumberByKey(getEventPriceKey(event))
9393
9494
9595 func getEventDateValue (event) = getNumberByKey(getEventDateKey(event))
9696
9797
9898 func getEventAttendeeValue (user,id,event) = getNumberByKey(getEventAttendeeKey(user, id, event))
9999
100100
101101 func getEventBalanceValue (account,event) = getNumberByKey(getEventBalanceKey(account, event))
102102
103103
104104 func getEventAmountTicketsValue (event) = getNumberByKey(getEventAmountTicketsKey(event))
105105
106106
107107 func getEventCanceledValue (event) = getBoolByKey(getEventCanceledKey(event))
108108
109109
110110 func getEventRequiresIdValue (event) = getBoolByKey(getEventRequiresIdKey(event))
111111
112112
113113 @Callable(i)
114114 func createEvent (title,price,data,date,amountTickets,requiresId) = {
115115 let producerAddress = toBase58String(i.caller.bytes)
116116 let event = getEventKey(producerAddress, title)
117117 if ((getEventValue(producerAddress, title) != NONE))
118118 then throw("The event already exist")
119119 else if ((lastBlock.timestamp > date))
120120 then throw("Date cannot be in the past")
121121 else WriteSet([DataEntry(getEventKey(producerAddress, title), producerAddress), DataEntry(getEventPriceKey(event), price), DataEntry(getEventDataKey(event), data), DataEntry(getEventDateKey(event), date), DataEntry(getEventAmountTicketsKey(event), amountTickets), DataEntry(getEventRequiresIdKey(event), requiresId)])
122122 }
123123
124124
125125
126126 @Callable(i)
127127 func purchase (event,amount,id) = {
128128 let pmt = extract(i.payment)
129129 if (isDefined(pmt.assetId))
130130 then throw("can use WAVES only at the moment")
131131 else {
132132 let userAddress = toBase58String(i.caller.bytes)
133133 let price = getEventPriceValue(event)
134134 let producerAddress = getEventValueById(event)
135135 let ticketsLeft = getEventAmountTicketsValue(event)
136136 let attendeeKey = ""
137137 if ((producerAddress == NONE))
138138 then throw("Event does not exist")
139139 else if (((price * amount) > pmt.amount))
140140 then throw(((("You did not send enough money. You sent: " + toString(pmt.amount)) + ". Expected: ") + toString((amount * price))))
141141 else if ((pmt.amount > (price * amount)))
142142 then throw(((("You send too much money. You sent: " + toString(pmt.amount)) + ". Total price: ") + toString((amount * price))))
143143 else if ((0 > (ticketsLeft - amount)))
144144 then throw("Not enough tickets left")
145145 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
146146 then throw("This event has already happened")
147147 else if (getEventCanceledValue(event))
148148 then throw("This event was canceled")
149149 else if (if (getEventRequiresIdValue(event))
150150 then (id == "")
151151 else false)
152152 then throw("This event requires that you register with a personal ID")
153153 else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, event), (getEventAttendeeValue(userAddress, id, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventAmountTicketsKey(event), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
154154 }
155155 }
156156
157157
158158
159159 @Callable(i)
160160 func endTicketSale (title) = {
161161 let producerAddress = toBase58String(i.caller.bytes)
162162 let event = getEventKey(producerAddress, title)
163163 if (if ((event == ""))
164164 then true
165165 else (getEventValueById(event) != producerAddress))
166166 then throw("You have not created any Event yet!")
167167 else if (getEventCanceledValue(event))
168168 then throw("This event was canceled")
169169 else if ((lastBlock.timestamp > getEventDateValue(event)))
170170 then throw("This event has already happened")
171171 else WriteSet([DataEntry(getEventAmountTicketsKey(event), 0)])
172172 }
173173
174174
175175
176176 @Callable(i)
177177 func checkin (event,attendeeAddress,amount,id) = {
178178 let producerAddress = toBase58String(i.caller.bytes)
179179 if ((getEventValueById(event) != producerAddress))
180180 then throw("This event does not exist, or you don'e have the credentials to checkin")
181181 else if ((amount > getEventAttendeeValue(attendeeAddress, id, event)))
182182 then throw("You don't have enough tickets.")
183183 else if (getEventCanceledValue(event))
184184 then throw("This event was canceled. You can redeem your ticket using refundTicket function")
185185 else WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, event), (getEventAttendeeValue(attendeeAddress, id, event) - amount))])
186186 }
187187
188188
189189
190190 @Callable(i)
191191 func cancelEvent (event) = {
192192 let producerAddress = toBase58String(i.caller.bytes)
193193 if ((getEventValueById(event) != producerAddress))
194194 then throw("You have not created any Event yet!")
195195 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
196196 then throw("This event has already happened")
197197 else if (getEventCanceledValue(event))
198198 then throw("This event was already canceled")
199199 else WriteSet([DataEntry(getEventCanceledKey(event), true)])
200200 }
201201
202202
203203
204204 @Callable(i)
205205 func refundTicket (event,amount,id) = {
206206 let attendeeAddress = toBase58String(i.caller.bytes)
207207 if ((getEventValueById(event) == NONE))
208208 then throw("The event does not exist")
209- else if ((amount >= getEventAttendeeValue(attendeeAddress, id, event)))
209+ else if ((amount > getEventAttendeeValue(attendeeAddress, id, event)))
210210 then throw("You don't have enough registered tickets with this address")
211211 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
212212 then throw("This event has already happened")
213213 else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, event), (getEventAttendeeValue(attendeeAddress, id, event) - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(attendeeAddress), (amount * getEventAttendeeValue(attendeeAddress, id, event)), unit)]))
214214 }
215215
216216
217217
218218 @Callable(i)
219219 func withdraw (event) = {
220220 let producerAddress = toBase58String(i.caller.bytes)
221221 let balance = getEventBalanceValue(producerAddress, event)
222222 if ((getEventValueById(event) != producerAddress))
223223 then throw("Event does not exist, or you don't have the credentials to perform this action")
224224 else if ((0 >= balance))
225225 then throw("Insufficient balance")
226226 else if ((getEventDateValue(event) > (lastBlock.timestamp - 1000000)))
227227 then throw("Event has not yet taken place. Withdraw funds when event takes place.")
228228 else if (getEventCanceledValue(event))
229229 then throw("Event has been canceled")
230230 else ScriptResult(WriteSet([DataEntry(getEventBalanceKey(producerAddress, event), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(producerAddress), balance, unit)]))
231231 }
232232
233233

github/deemru/w8io/873ac7e 
34.63 ms