tx · FnFfpLJmGgcNWPSed4wNaW3gmBhqPCFdc5AUkoQE8fn7

3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU:  -0.01400000 Waves

2020.04.02 20:33 [936843] smart account 3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU > SELF 0.00000000 Waves

{ "type": 13, "id": "FnFfpLJmGgcNWPSed4wNaW3gmBhqPCFdc5AUkoQE8fn7", "fee": 1400000, "feeAssetId": null, "timestamp": 1585848822051, "version": 1, "sender": "3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU", "senderPublicKey": "GXTgD3DifeMCqpyW2oL4fX2vdw49UtqWEesdZpaEuEFB", "proofs": [ "3FRzMVSFiY6t7wZdjzbFXvXSMLCzNHUaSfwZ3n7DnmkqSjJxfE7TPp3RegkkZeVFnKpr1VJopkBc4e5mf1V42t3E" ], "script": "base64:AAIDAAAAAAAAAD0IARIGCgQICAEEEgcKBQgBCAEBEgYKBAgBAQgSAwoBCBIHCgUICAEIARIFCgMIAQESBgoECAEIARIDCgEIAAAAKgAAAAAHYWRkcmVzcwIAAAAjM016S3E5RkM4R0FlWXhZTUdacVBaenJYbVJ3eXlLOWVSdFUAAAAADmtleUV2ZW50UHJlZml4AgAAAAJlXwAAAAASa2V5RXZlbnREYXRhUHJlZml4AgAAAAVkYXRhXwAAAAAZa2V5RXZlbnRUaWNrZXRQcmljZVByZWZpeAIAAAAGcHJpY2VfAAAAABJrZXlFdmVudERhdGVQcmVmaXgCAAAABWRhdGVfAAAAABZrZXlFdmVudEF0dGVuZGVlUHJlZml4AgAAAAJhXwAAAAAYa2V5UHJvZHVjZXJCYWxhbmNlUHJlZml4AgAAAAhiYWxhbmNlXwAAAAAaa2V5RXZlbnRBbW91bnRUaWNrZXRQcmVmaXgCAAAADmFtb3VudFRpY2tldHNfAAAAABZrZXlFdmVudENhbmNlbGVkUHJlZml4AgAAAAljYW5jZWxlZF8AAAAAF2tleUV2ZW50VGlja2V0TWF4UHJlZml4AgAAAARtYXhfAAAAABhrZXlFdmVudFJlcXVpcmVzSWRQcmVmaXgCAAAAC3JlcXVpcmVzSWRfAAAAAB9rZXlFdmVudFRpY2tldERlc2NyaXB0aW9uUHJlZml4AgAAABJ0aWNrZXREZXNjcmlwdGlvbl8AAAAAFWtleUV2ZW50VGlja2V0c1ByZWZpeAIAAAAIdGlja2V0c18AAAAABE5PTkUCAAAABG5vbmUAAAAACmNvbW1pc3Npb24AAAAAAAAAAAUBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAAA3N0cgEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQAAAANrZXkEAAAABGJvb2wEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwUAAAAEYm9vbAEAAAALZ2V0RXZlbnRLZXkAAAACAAAACHByb2R1Y2VyAAAABXRpdGxlCQABLAAAAAIFAAAADmtleUV2ZW50UHJlZml4CQACWAAAAAEJAAH3AAAAAQkAAZsAAAABCQABLAAAAAIFAAAACHByb2R1Y2VyBQAAAAV0aXRsZQEAAAAPZ2V0RXZlbnREYXRhS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABJrZXlFdmVudERhdGFQcmVmaXgFAAAABWV2ZW50AQAAABZnZXRFdmVudFRpY2tldFByaWNlS2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAZa2V5RXZlbnRUaWNrZXRQcmljZVByZWZpeAkAAaQAAAABBQAAAAh0aWNrZXRJZAIAAAABXwUAAAAFZXZlbnQBAAAAD2dldEV2ZW50RGF0ZUtleQAAAAEAAAAFZXZlbnQJAAEsAAAAAgUAAAASa2V5RXZlbnREYXRlUHJlZml4BQAAAAVldmVudAEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAQAAAAEdXNlcgAAAAJpZAAAAAh0aWNrZXRJZAAAAAVldmVudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAFmtleUV2ZW50QXR0ZW5kZWVQcmVmaXgJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAEdXNlcgUAAAACaWQCAAAAAV8JAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABJnZXRFdmVudEJhbGFuY2VLZXkAAAACAAAAB2FjY291bnQAAAAFZXZlbnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAGGtleVByb2R1Y2VyQmFsYW5jZVByZWZpeAUAAAAHYWNjb3VudAIAAAABXwUAAAAFZXZlbnQBAAAAF2dldEV2ZW50VGlja2V0QW1vdW50S2V5AAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAaa2V5RXZlbnRBbW91bnRUaWNrZXRQcmVmaXgJAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABNnZXRFdmVudENhbmNlbGVkS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABZrZXlFdmVudENhbmNlbGVkUHJlZml4BQAAAAVldmVudAEAAAAVZ2V0RXZlbnRSZXF1aXJlc0lkS2V5AAAAAQAAAAVldmVudAkAASwAAAACBQAAABhrZXlFdmVudFJlcXVpcmVzSWRQcmVmaXgFAAAABWV2ZW50AQAAABRnZXRFdmVudFRpY2tldE1heEtleQAAAAIAAAAFZXZlbnQAAAAIdGlja2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAF2tleUV2ZW50VGlja2V0TWF4UHJlZml4CQABpAAAAAEFAAAACHRpY2tldElkAgAAAAFfBQAAAAVldmVudAEAAAAcZ2V0RXZlbnRUaWNrZXREZXNjcmlwdGlvbktleQAAAAIAAAAFZXZlbnQAAAAIdGlja2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAH2tleUV2ZW50VGlja2V0RGVzY3JpcHRpb25QcmVmaXgJAAGkAAAAAQUAAAAIdGlja2V0SWQCAAAAAV8FAAAABWV2ZW50AQAAABJnZXRFdmVudFRpY2tldHNLZXkAAAABAAAABWV2ZW50CQABLAAAAAIFAAAAFWtleUV2ZW50VGlja2V0c1ByZWZpeAUAAAAFZXZlbnQBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABBQAAAARpdGVtAQAAAA1nZXRFdmVudFZhbHVlAAAAAgAAAAhwcm9kdWNlcgAAAAV0aXRsZQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAC2dldEV2ZW50S2V5AAAAAgUAAAAIcHJvZHVjZXIFAAAABXRpdGxlAQAAABhnZXRFdmVudFRpY2tldFByaWNlVmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAWZ2V0RXZlbnRUaWNrZXRQcmljZUtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABAAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0RXZlbnREYXRlS2V5AAAAAQUAAAAFZXZlbnQBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAQAAAAEdXNlcgAAAAJpZAAAAAh0aWNrZXRJZAAAAAVldmVudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAE2dldEV2ZW50QXR0ZW5kZWVLZXkAAAAEBQAAAAR1c2VyBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50AQAAABRnZXRFdmVudEJhbGFuY2VWYWx1ZQAAAAIAAAAHYWNjb3VudAAAAAVldmVudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIFAAAAB2FjY291bnQFAAAABWV2ZW50AQAAABlnZXRFdmVudFRpY2tldEFtb3VudFZhbHVlAAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2dldEV2ZW50VGlja2V0QW1vdW50S2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABAAAABWV2ZW50CQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAE2dldEV2ZW50Q2FuY2VsZWRLZXkAAAABBQAAAAVldmVudAEAAAAXZ2V0RXZlbnRSZXF1aXJlc0lkVmFsdWUAAAABAAAABWV2ZW50CQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAFWdldEV2ZW50UmVxdWlyZXNJZEtleQAAAAEFAAAABWV2ZW50AQAAABZnZXRFdmVudFRpY2tldE1heFZhbHVlAAAAAgAAAAVldmVudAAAAAh0aWNrZXRJZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGdldEV2ZW50VGlja2V0TWF4S2V5AAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkAQAAAB5nZXRFdmVudFRpY2tldERlc2NyaXB0aW9uVmFsdWUAAAACAAAABWV2ZW50AAAACHRpY2tldElkCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAcZ2V0RXZlbnRUaWNrZXREZXNjcmlwdGlvbktleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAEAAAAUZ2V0RXZlbnRUaWNrZXRzVmFsdWUAAAABAAAABWV2ZW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0RXZlbnRUaWNrZXRzS2V5AAAAAQUAAAAFZXZlbnQAAAAIAAAAAWkBAAAAC2NyZWF0ZUV2ZW50AAAABAAAAAV0aXRsZQAAAARkYXRhAAAABGRhdGUAAAAKcmVxdWlyZXNJZAQAAAAPcHJvZHVjZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABWV2ZW50CQEAAAALZ2V0RXZlbnRLZXkAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABXRpdGxlAwkBAAAAAiE9AAAAAgkBAAAADWdldEV2ZW50VmFsdWUAAAACBQAAAA9wcm9kdWNlckFkZHJlc3MFAAAABXRpdGxlBQAAAAROT05FCQAAAgAAAAECAAAAF1RoZSBldmVudCBhbHJlYWR5IGV4aXN0AwkAAGYAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAEZGF0ZQkAAAIAAAABAgAAABpEYXRlIGNhbm5vdCBiZSBpbiB0aGUgcGFzdAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAC2dldEV2ZW50S2V5AAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAV0aXRsZQUAAAAPcHJvZHVjZXJBZGRyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAPZ2V0RXZlbnREYXRhS2V5AAAAAQUAAAAFZXZlbnQFAAAABGRhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAA9nZXRFdmVudERhdGVLZXkAAAABBQAAAAVldmVudAUAAAAEZGF0ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEV2ZW50UmVxdWlyZXNJZEtleQAAAAEFAAAABWV2ZW50BQAAAApyZXF1aXJlc0lkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0RXZlbnRUaWNrZXRzS2V5AAAAAQUAAAAFZXZlbnQAAAAAAAAAAAAFAAAAA25pbAAAAAFpAQAAABFjcmVhdGVFdmVudFRpY2tldAAAAAUAAAAFZXZlbnQAAAAFcHJpY2UAAAALZGVzY3JpcHRpb24AAAANYW1vdW50VGlja2V0cwAAAAltYXhBbW91bnQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAPcHJvZHVjZXJBZGRyZXNzCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAQAAAAIdGlja2V0SWQJAQAAABRnZXRFdmVudFRpY2tldHNWYWx1ZQAAAAEFAAAABWV2ZW50AwkBAAAAAiE9AAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAA1jYWxsZXJBZGRyZXNzCQAAAgAAAAECAAAATkV2ZW50IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbgMJAABmAAAAAgkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAOThwAkBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAfVGhpcyBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZAMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAABdUaGlzIGV2ZW50IHdhcyBjYW5jZWxlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFmdldEV2ZW50VGlja2V0UHJpY2VLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQFAAAABXByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAXZ2V0RXZlbnRUaWNrZXRBbW91bnRLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQFAAAADWFtb3VudFRpY2tldHMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABRnZXRFdmVudFRpY2tldE1heEtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAAJbWF4QW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAcZ2V0RXZlbnRUaWNrZXREZXNjcmlwdGlvbktleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAUAAAALZGVzY3JpcHRpb24JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudFRpY2tldHNLZXkAAAABBQAAAAVldmVudAkAAGQAAAACCQEAAAAUZ2V0RXZlbnRUaWNrZXRzVmFsdWUAAAABBQAAAAVldmVudAAAAAAAAAAAAQUAAAADbmlsAAAAAWkBAAAACHB1cmNoYXNlAAAABAAAAAVldmVudAAAAAh0aWNrZXRJZAAAAAZhbW91bnQAAAACaWQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAt1c2VyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAVwcmljZQkBAAAAGGdldEV2ZW50VGlja2V0UHJpY2VWYWx1ZQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAQAAAAPcHJvZHVjZXJBZGRyZXNzCQEAAAARZ2V0RXZlbnRWYWx1ZUJ5SWQAAAABBQAAAAVldmVudAQAAAALdGlja2V0c0xlZnQJAQAAABlnZXRFdmVudFRpY2tldEFtb3VudFZhbHVlAAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkBAAAAAthdHRlbmRlZUtleQIAAAAAAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACBjYW4gdXNlIFdBVkVTIG9ubHkgYXQgdGhlIG1vbWVudAMJAAAAAAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAROT05FCQAAAgAAAAECAAAAFEV2ZW50IGRvZXMgbm90IGV4aXN0AwkAAGYAAAACCQAAaAAAAAIFAAAABXByaWNlBQAAAAZhbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVlvdSBkaWQgbm90IHNlbmQgZW5vdWdoIG1vbmV5LiBZb3Ugc2VudDogCQABpAAAAAEIBQAAAANwbXQAAAAGYW1vdW50AgAAAAwuIEV4cGVjdGVkOiAJAAGkAAAAAQkAAGgAAAACBQAAAAZhbW91bnQFAAAABXByaWNlAwkAAGYAAAACCAUAAAADcG10AAAABmFtb3VudAkAAGgAAAACBQAAAAVwcmljZQUAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI1lvdSBzZW5kIHRvbyBtdWNoIG1vbmV5LiBZb3Ugc2VudDogCQABpAAAAAEIBQAAAANwbXQAAAAGYW1vdW50AgAAAA8uIFRvdGFsIHByaWNlOiAJAAGkAAAAAQkAAGgAAAACBQAAAAZhbW91bnQFAAAABXByaWNlAwkAAGYAAAACAAAAAAAAAAAACQAAZQAAAAIFAAAAC3RpY2tldHNMZWZ0BQAAAAZhbW91bnQJAAACAAAAAQIAAAAXTm90IGVub3VnaCB0aWNrZXRzIGxlZnQDCQAAZgAAAAIJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAAAAAAAADk4cAJAQAAABFnZXRFdmVudERhdGVWYWx1ZQAAAAEFAAAABWV2ZW50CQAAAgAAAAECAAAAH1RoaXMgZXZlbnQgaGFzIGFscmVhZHkgaGFwcGVuZWQDCQEAAAAVZ2V0RXZlbnRDYW5jZWxlZFZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAXVGhpcyBldmVudCB3YXMgY2FuY2VsZWQDAwkBAAAAF2dldEV2ZW50UmVxdWlyZXNJZFZhbHVlAAAAAQUAAAAFZXZlbnQJAAAAAAAAAgUAAAACaWQCAAAAAAcJAAACAAAAAQIAAAA4VGhpcyBldmVudCByZXF1aXJlcyB0aGF0IHlvdSByZWdpc3RlciB3aXRoIGEgcGVyc29uYWwgSUQDCQAAZgAAAAIJAQAAABZnZXRFdmVudFRpY2tldE1heFZhbHVlAAAAAgUAAAAFZXZlbnQFAAAACHRpY2tldElkCQAAZAAAAAIJAQAAABVnZXRFdmVudEF0dGVuZGVlVmFsdWUAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAUAAAAGYW1vdW50CQAAAgAAAAECAAAANUFtb3VudCBvZiBUaWNrZXRzIGV4Y2VlZHMgbWF4aW11bSBhbW91bnQgcGVyIGF0dGVuZGVlCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAE2dldEV2ZW50QXR0ZW5kZWVLZXkAAAAEBQAAAAt1c2VyQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAkAAGQAAAACCQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAUAAAALdXNlckFkZHJlc3MFAAAAAmlkBQAAAAh0aWNrZXRJZAUAAAAFZXZlbnQFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEV2ZW50QmFsYW5jZUtleQAAAAIFAAAAD3Byb2R1Y2VyQWRkcmVzcwUAAAAFZXZlbnQJAABkAAAAAgkBAAAAFGdldEV2ZW50QmFsYW5jZVZhbHVlAAAAAgUAAAAPcHJvZHVjZXJBZGRyZXNzBQAAAAVldmVudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABdnZXRFdmVudFRpY2tldEFtb3VudEtleQAAAAIFAAAABWV2ZW50BQAAAAh0aWNrZXRJZAkAAGUAAAACBQAAAAt0aWNrZXRzTGVmdAUAAAAGYW1vdW50BQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzCAUAAAADcG10AAAABmFtb3VudAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAAC2NhbmNlbEV2ZW50AAAAAQAAAAVldmVudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAADWNhbGxlckFkZHJlc3MJAAACAAAAAQIAAABORXZlbnQgZG9lcyBub3QgZXhpc3QsIG9yIHlvdSBkb24ndCBoYXZlIHRoZSBjcmVkZW50aWFscyB0byBwZXJmb3JtIHRoaXMgYWN0aW9uAwkAAGYAAAACCQAAZAAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAA5OHACQEAAAARZ2V0RXZlbnREYXRlVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IGhhcyBhbHJlYWR5IGhhcHBlbmVkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATZ2V0RXZlbnRDYW5jZWxlZEtleQAAAAEFAAAABWV2ZW50BgUAAAADbmlsAAAAAWkBAAAAB2NoZWNraW4AAAAFAAAABWV2ZW50AAAAD2F0dGVuZGVlQWRkcmVzcwAAAAZhbW91bnQAAAACaWQAAAAIdGlja2V0SWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BQAAAA1jYWxsZXJBZGRyZXNzCQAAAgAAAAECAAAATkV2ZW50IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbgMJAABmAAAAAgUAAAAGYW1vdW50CQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAAgAAAAECAAAAHllvdSBkb24ndCBoYXZlIGVub3VnaCB0aWNrZXRzLgMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAE9UaGlzIGV2ZW50IHdhcyBjYW5jZWxlZC4gWW91IGNhbiByZWRlZW0geW91ciB0aWNrZXQgdXNpbmcgcmVmdW5kVGlja2V0IGZ1bmN0aW9uCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAATZ2V0RXZlbnRBdHRlbmRlZUtleQAAAAQFAAAAD2F0dGVuZGVlQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAkAAGUAAAACCQEAAAAVZ2V0RXZlbnRBdHRlbmRlZVZhbHVlAAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50BQAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAABBlZGl0RXZlbnRUaWNrZXRzAAAAAwAAAAVldmVudAAAAAh0aWNrZXRJZAAAAAluZXdBbW91bnQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BQAAAA1jYWxsZXJBZGRyZXNzCQAAAgAAAAECAAAATkV2ZW50IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbgMJAABmAAAAAgkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAOThwAkBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAfVGhpcyBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZAMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAAB9UaGlzIGV2ZW50IHdhcyBhbHJlYWR5IGNhbmNlbGVkCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAXZ2V0RXZlbnRUaWNrZXRBbW91bnRLZXkAAAACBQAAAAVldmVudAUAAAAIdGlja2V0SWQFAAAACW5ld0Ftb3VudAUAAAADbmlsAAAAAWkBAAAADHJlZnVuZFRpY2tldAAAAAQAAAAFZXZlbnQAAAAGYW1vdW50AAAAAmlkAAAACHRpY2tldElkBAAAAA9hdHRlbmRlZUFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAANYXR0ZW5kZWVWYWx1ZQkBAAAAFWdldEV2ZW50QXR0ZW5kZWVWYWx1ZQAAAAQFAAAAD2F0dGVuZGVlQWRkcmVzcwUAAAACaWQFAAAACHRpY2tldElkBQAAAAVldmVudAMJAAAAAAAAAgkBAAAAEWdldEV2ZW50VmFsdWVCeUlkAAAAAQUAAAAFZXZlbnQFAAAABE5PTkUJAAACAAAAAQIAAAAYVGhlIGV2ZW50IGRvZXMgbm90IGV4aXN0AwkAAGYAAAACBQAAAAZhbW91bnQFAAAADWF0dGVuZGVlVmFsdWUJAAACAAAAAQIAAAA6WW91IGRvbid0IGhhdmUgZW5vdWdoIHJlZ2lzdGVyZWQgdGlja2V0cyB3aXRoIHRoaXMgYWRkcmVzcwMJAABmAAAAAgkAAGQAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAOThwAkBAAAAEWdldEV2ZW50RGF0ZVZhbHVlAAAAAQUAAAAFZXZlbnQJAAACAAAAAQIAAAAfVGhpcyBldmVudCBoYXMgYWxyZWFkeSBoYXBwZW5lZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABNnZXRFdmVudEF0dGVuZGVlS2V5AAAABAUAAAAPYXR0ZW5kZWVBZGRyZXNzBQAAAAJpZAUAAAAIdGlja2V0SWQFAAAABWV2ZW50CQAAZQAAAAIFAAAADWF0dGVuZGVlVmFsdWUFAAAABmFtb3VudAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAPYXR0ZW5kZWVBZGRyZXNzCQAAaAAAAAIFAAAABmFtb3VudAUAAAANYXR0ZW5kZWVWYWx1ZQUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAVldmVudAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdiYWxhbmNlCQEAAAAUZ2V0RXZlbnRCYWxhbmNlVmFsdWUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVldmVudAMJAQAAAAIhPQAAAAIJAQAAABFnZXRFdmVudFZhbHVlQnlJZAAAAAEFAAAABWV2ZW50BQAAAA1jYWxsZXJBZGRyZXNzCQAAAgAAAAECAAAATkV2ZW50IGRvZXMgbm90IGV4aXN0LCBvciB5b3UgZG9uJ3QgaGF2ZSB0aGUgY3JlZGVudGlhbHMgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbgMJAABnAAAAAgAAAAAAAAAAAAUAAAAHYmFsYW5jZQkAAAIAAAABAgAAABRJbnN1ZmZpY2llbnQgYmFsYW5jZQMJAQAAABVnZXRFdmVudENhbmNlbGVkVmFsdWUAAAABBQAAAAVldmVudAkAAAIAAAABAgAAABdFdmVudCBoYXMgYmVlbiBjYW5jZWxlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRFdmVudEJhbGFuY2VLZXkAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVldmVudAAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAANY2FsbGVyQWRkcmVzcwkAAGUAAAACBQAAAAdiYWxhbmNlCQAAaQAAAAIJAABoAAAAAgUAAAAHYmFsYW5jZQUAAAAKY29tbWlzc2lvbgAAAAAAAAAAZAUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MJAABpAAAAAgkAAGgAAAACBQAAAAdiYWxhbmNlBQAAAApjb21taXNzaW9uAAAAAAAAAABkBQAAAAR1bml0BQAAAANuaWwAAAAAlddACQ==", "chainId": 84, "height": 936843, "spentComplexity": 0 } View: original | compacted Prev: N6HWQwhxADhAAsekrL8yauRrcuxYmeX2pSCu2FfqDTA Next: none Diff:
OldNewDifferences
77
88 let keyEventDataPrefix = "data_"
99
10-let keyEventPricePrefix = "price_"
10+let keyEventTicketPricePrefix = "price_"
1111
1212 let keyEventDatePrefix = "date_"
1313
1919
2020 let keyEventCanceledPrefix = "canceled_"
2121
22-let keyEventMaxTicketsPrefix = "max_"
22+let keyEventTicketMaxPrefix = "max_"
2323
2424 let keyEventRequiresIdPrefix = "requiresId_"
2525
7070 func getEventDataKey (event) = (keyEventDataPrefix + event)
7171
7272
73-func getEventPriceKey (event,ticketId) = (((keyEventPricePrefix + toString(ticketId)) + "_") + event)
73+func getEventTicketPriceKey (event,ticketId) = (((keyEventTicketPricePrefix + toString(ticketId)) + "_") + event)
7474
7575
7676 func getEventDateKey (event) = (keyEventDatePrefix + event)
8282 func getEventBalanceKey (account,event) = (((keyProducerBalancePrefix + account) + "_") + event)
8383
8484
85-func getEventAmountTicketsKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
85+func getEventTicketAmountKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
8686
8787
8888 func getEventCanceledKey (event) = (keyEventCanceledPrefix + event)
9191 func getEventRequiresIdKey (event) = (keyEventRequiresIdPrefix + event)
9292
9393
94-func getEventMaxTicketsKey (event,ticketId) = (((keyEventMaxTicketsPrefix + toString(ticketId)) + "_") + event)
94+func getEventTicketMaxKey (event,ticketId) = (((keyEventTicketMaxPrefix + toString(ticketId)) + "_") + event)
9595
9696
9797 func getEventTicketDescriptionKey (event,ticketId) = (((keyEventTicketDescriptionPrefix + toString(ticketId)) + "_") + event)
106106 func getEventValue (producer,title) = getStrByKey(getEventKey(producer, title))
107107
108108
109-func getEventPriceValue (event,ticketId) = getNumberByKey(getEventPriceKey(event, ticketId))
109+func getEventTicketPriceValue (event,ticketId) = getNumberByKey(getEventTicketPriceKey(event, ticketId))
110110
111111
112112 func getEventDateValue (event) = getNumberByKey(getEventDateKey(event))
118118 func getEventBalanceValue (account,event) = getNumberByKey(getEventBalanceKey(account, event))
119119
120120
121-func getEventAmountTicketsValue (event,ticketId) = getNumberByKey(getEventAmountTicketsKey(event, ticketId))
121+func getEventTicketAmountValue (event,ticketId) = getNumberByKey(getEventTicketAmountKey(event, ticketId))
122122
123123
124124 func getEventCanceledValue (event) = getBoolByKey(getEventCanceledKey(event))
127127 func getEventRequiresIdValue (event) = getBoolByKey(getEventRequiresIdKey(event))
128128
129129
130-func getEventMaxTicketsValue (event,ticketId) = getNumberByKey(getEventMaxTicketsKey(event, ticketId))
130+func getEventTicketMaxValue (event,ticketId) = getNumberByKey(getEventTicketMaxKey(event, ticketId))
131131
132132
133133 func getEventTicketDescriptionValue (event,ticketId) = getStrByKey(getEventTicketDescriptionKey(event, ticketId))
150150
151151
152152 @Callable(i)
153-func createEventTicket (event,ticketId,price,description,amountTickets,maxAmount) = {
153+func createEventTicket (event,price,description,amountTickets,maxAmount) = {
154154 let callerAddress = toBase58String(i.caller.bytes)
155155 let producerAddress = getEventValueById(event)
156+ let ticketId = getEventTicketsValue(event)
156157 if ((producerAddress != callerAddress))
157158 then throw("Event does not exist, or you don't have the credentials to perform this action")
158159 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
159160 then throw("This event has already happened")
160161 else if (getEventCanceledValue(event))
161162 then throw("This event was canceled")
162- else WriteSet([DataEntry(getEventPriceKey(event, ticketId), price), DataEntry(getEventAmountTicketsKey(event, ticketId), amountTickets), DataEntry(getEventMaxTicketsKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description), DataEntry(getEventTicketsKey(event), (getEventTicketsValue(event) + 1))])
163+ else WriteSet([DataEntry(getEventTicketPriceKey(event, ticketId), price), DataEntry(getEventTicketAmountKey(event, ticketId), amountTickets), DataEntry(getEventTicketMaxKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description), DataEntry(getEventTicketsKey(event), (getEventTicketsValue(event) + 1))])
163164 }
164165
165166
168169 func purchase (event,ticketId,amount,id) = {
169170 let pmt = extract(i.payment)
170171 let userAddress = toBase58String(i.caller.bytes)
171- let price = getEventPriceValue(event, ticketId)
172+ let price = getEventTicketPriceValue(event, ticketId)
172173 let producerAddress = getEventValueById(event)
173- let ticketsLeft = getEventAmountTicketsValue(event, ticketId)
174+ let ticketsLeft = getEventTicketAmountValue(event, ticketId)
174175 let attendeeKey = ""
175176 if (isDefined(pmt.assetId))
176177 then throw("can use WAVES only at the moment")
190191 then (id == "")
191192 else false)
192193 then throw("This event requires that you register with a personal ID")
193- else if ((getEventMaxTicketsValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
194+ else if ((getEventTicketMaxValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
194195 then throw("Amount of Tickets exceeds maximum amount per attendee")
195- else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventAmountTicketsKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
196+ else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventTicketAmountKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
196197 }
197198
198199
232233 then throw("This event has already happened")
233234 else if (getEventCanceledValue(event))
234235 then throw("This event was already canceled")
235- else WriteSet([DataEntry(getEventAmountTicketsKey(event, ticketId), newAmount)])
236+ else WriteSet([DataEntry(getEventTicketAmountKey(event, ticketId), newAmount)])
236237 }
237238
238239
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let address = "3MzKq9FC8GAeYxYMGZqPZzrXmRwyyK9eRtU"
55
66 let keyEventPrefix = "e_"
77
88 let keyEventDataPrefix = "data_"
99
10-let keyEventPricePrefix = "price_"
10+let keyEventTicketPricePrefix = "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
22-let keyEventMaxTicketsPrefix = "max_"
22+let keyEventTicketMaxPrefix = "max_"
2323
2424 let keyEventRequiresIdPrefix = "requiresId_"
2525
2626 let keyEventTicketDescriptionPrefix = "ticketDescription_"
2727
2828 let keyEventTicketsPrefix = "tickets_"
2929
3030 let NONE = "none"
3131
3232 let commission = 5
3333
3434 func getNumberByKey (key) = {
3535 let num = match getInteger(this, key) {
3636 case a: Int =>
3737 a
3838 case _ =>
3939 0
4040 }
4141 num
4242 }
4343
4444
4545 func getStrByKey (key) = {
4646 let str = match getString(this, key) {
4747 case a: String =>
4848 a
4949 case _ =>
5050 NONE
5151 }
5252 str
5353 }
5454
5555
5656 func getBoolByKey (key) = {
5757 let bool = match getBoolean(this, key) {
5858 case a: Boolean =>
5959 a
6060 case _ =>
6161 false
6262 }
6363 bool
6464 }
6565
6666
6767 func getEventKey (producer,title) = (keyEventPrefix + toBase58String(sha256(toBytes((producer + title)))))
6868
6969
7070 func getEventDataKey (event) = (keyEventDataPrefix + event)
7171
7272
73-func getEventPriceKey (event,ticketId) = (((keyEventPricePrefix + toString(ticketId)) + "_") + event)
73+func getEventTicketPriceKey (event,ticketId) = (((keyEventTicketPricePrefix + toString(ticketId)) + "_") + event)
7474
7575
7676 func getEventDateKey (event) = (keyEventDatePrefix + event)
7777
7878
7979 func getEventAttendeeKey (user,id,ticketId,event) = (((((keyEventAttendeePrefix + toBase58String(sha256(toBytes((user + id))))) + "_") + toString(ticketId)) + "_") + event)
8080
8181
8282 func getEventBalanceKey (account,event) = (((keyProducerBalancePrefix + account) + "_") + event)
8383
8484
85-func getEventAmountTicketsKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
85+func getEventTicketAmountKey (event,ticketId) = (((keyEventAmountTicketPrefix + toString(ticketId)) + "_") + event)
8686
8787
8888 func getEventCanceledKey (event) = (keyEventCanceledPrefix + event)
8989
9090
9191 func getEventRequiresIdKey (event) = (keyEventRequiresIdPrefix + event)
9292
9393
94-func getEventMaxTicketsKey (event,ticketId) = (((keyEventMaxTicketsPrefix + toString(ticketId)) + "_") + event)
94+func getEventTicketMaxKey (event,ticketId) = (((keyEventTicketMaxPrefix + toString(ticketId)) + "_") + event)
9595
9696
9797 func getEventTicketDescriptionKey (event,ticketId) = (((keyEventTicketDescriptionPrefix + toString(ticketId)) + "_") + event)
9898
9999
100100 func getEventTicketsKey (event) = (keyEventTicketsPrefix + event)
101101
102102
103103 func getEventValueById (item) = getStrByKey(item)
104104
105105
106106 func getEventValue (producer,title) = getStrByKey(getEventKey(producer, title))
107107
108108
109-func getEventPriceValue (event,ticketId) = getNumberByKey(getEventPriceKey(event, ticketId))
109+func getEventTicketPriceValue (event,ticketId) = getNumberByKey(getEventTicketPriceKey(event, ticketId))
110110
111111
112112 func getEventDateValue (event) = getNumberByKey(getEventDateKey(event))
113113
114114
115115 func getEventAttendeeValue (user,id,ticketId,event) = getNumberByKey(getEventAttendeeKey(user, id, ticketId, event))
116116
117117
118118 func getEventBalanceValue (account,event) = getNumberByKey(getEventBalanceKey(account, event))
119119
120120
121-func getEventAmountTicketsValue (event,ticketId) = getNumberByKey(getEventAmountTicketsKey(event, ticketId))
121+func getEventTicketAmountValue (event,ticketId) = getNumberByKey(getEventTicketAmountKey(event, ticketId))
122122
123123
124124 func getEventCanceledValue (event) = getBoolByKey(getEventCanceledKey(event))
125125
126126
127127 func getEventRequiresIdValue (event) = getBoolByKey(getEventRequiresIdKey(event))
128128
129129
130-func getEventMaxTicketsValue (event,ticketId) = getNumberByKey(getEventMaxTicketsKey(event, ticketId))
130+func getEventTicketMaxValue (event,ticketId) = getNumberByKey(getEventTicketMaxKey(event, ticketId))
131131
132132
133133 func getEventTicketDescriptionValue (event,ticketId) = getStrByKey(getEventTicketDescriptionKey(event, ticketId))
134134
135135
136136 func getEventTicketsValue (event) = getNumberByKey(getEventTicketsKey(event))
137137
138138
139139 @Callable(i)
140140 func createEvent (title,data,date,requiresId) = {
141141 let producerAddress = toBase58String(i.caller.bytes)
142142 let event = getEventKey(producerAddress, title)
143143 if ((getEventValue(producerAddress, title) != NONE))
144144 then throw("The event already exist")
145145 else if ((lastBlock.timestamp > date))
146146 then throw("Date cannot be in the past")
147147 else WriteSet([DataEntry(getEventKey(producerAddress, title), producerAddress), DataEntry(getEventDataKey(event), data), DataEntry(getEventDateKey(event), date), DataEntry(getEventRequiresIdKey(event), requiresId), DataEntry(getEventTicketsKey(event), 0)])
148148 }
149149
150150
151151
152152 @Callable(i)
153-func createEventTicket (event,ticketId,price,description,amountTickets,maxAmount) = {
153+func createEventTicket (event,price,description,amountTickets,maxAmount) = {
154154 let callerAddress = toBase58String(i.caller.bytes)
155155 let producerAddress = getEventValueById(event)
156+ let ticketId = getEventTicketsValue(event)
156157 if ((producerAddress != callerAddress))
157158 then throw("Event does not exist, or you don't have the credentials to perform this action")
158159 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
159160 then throw("This event has already happened")
160161 else if (getEventCanceledValue(event))
161162 then throw("This event was canceled")
162- else WriteSet([DataEntry(getEventPriceKey(event, ticketId), price), DataEntry(getEventAmountTicketsKey(event, ticketId), amountTickets), DataEntry(getEventMaxTicketsKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description), DataEntry(getEventTicketsKey(event), (getEventTicketsValue(event) + 1))])
163+ else WriteSet([DataEntry(getEventTicketPriceKey(event, ticketId), price), DataEntry(getEventTicketAmountKey(event, ticketId), amountTickets), DataEntry(getEventTicketMaxKey(event, ticketId), maxAmount), DataEntry(getEventTicketDescriptionKey(event, ticketId), description), DataEntry(getEventTicketsKey(event), (getEventTicketsValue(event) + 1))])
163164 }
164165
165166
166167
167168 @Callable(i)
168169 func purchase (event,ticketId,amount,id) = {
169170 let pmt = extract(i.payment)
170171 let userAddress = toBase58String(i.caller.bytes)
171- let price = getEventPriceValue(event, ticketId)
172+ let price = getEventTicketPriceValue(event, ticketId)
172173 let producerAddress = getEventValueById(event)
173- let ticketsLeft = getEventAmountTicketsValue(event, ticketId)
174+ let ticketsLeft = getEventTicketAmountValue(event, ticketId)
174175 let attendeeKey = ""
175176 if (isDefined(pmt.assetId))
176177 then throw("can use WAVES only at the moment")
177178 else if ((producerAddress == NONE))
178179 then throw("Event does not exist")
179180 else if (((price * amount) > pmt.amount))
180181 then throw(((("You did not send enough money. You sent: " + toString(pmt.amount)) + ". Expected: ") + toString((amount * price))))
181182 else if ((pmt.amount > (price * amount)))
182183 then throw(((("You send too much money. You sent: " + toString(pmt.amount)) + ". Total price: ") + toString((amount * price))))
183184 else if ((0 > (ticketsLeft - amount)))
184185 then throw("Not enough tickets left")
185186 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
186187 then throw("This event has already happened")
187188 else if (getEventCanceledValue(event))
188189 then throw("This event was canceled")
189190 else if (if (getEventRequiresIdValue(event))
190191 then (id == "")
191192 else false)
192193 then throw("This event requires that you register with a personal ID")
193- else if ((getEventMaxTicketsValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
194+ else if ((getEventTicketMaxValue(event, ticketId) > (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)))
194195 then throw("Amount of Tickets exceeds maximum amount per attendee")
195- else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventAmountTicketsKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
196+ else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(userAddress, id, ticketId, event), (getEventAttendeeValue(userAddress, id, ticketId, event) + amount)), DataEntry(getEventBalanceKey(producerAddress, event), (getEventBalanceValue(producerAddress, event) + pmt.amount)), DataEntry(getEventTicketAmountKey(event, ticketId), (ticketsLeft - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(address), pmt.amount, unit)]))
196197 }
197198
198199
199200
200201 @Callable(i)
201202 func cancelEvent (event) = {
202203 let callerAddress = toBase58String(i.caller.bytes)
203204 if ((getEventValueById(event) != callerAddress))
204205 then throw("Event does not exist, or you don't have the credentials to perform this action")
205206 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
206207 then throw("This event has already happened")
207208 else WriteSet([DataEntry(getEventCanceledKey(event), true)])
208209 }
209210
210211
211212
212213 @Callable(i)
213214 func checkin (event,attendeeAddress,amount,id,ticketId) = {
214215 let callerAddress = toBase58String(i.caller.bytes)
215216 if ((getEventValueById(event) != callerAddress))
216217 then throw("Event does not exist, or you don't have the credentials to perform this action")
217218 else if ((amount > getEventAttendeeValue(attendeeAddress, id, ticketId, event)))
218219 then throw("You don't have enough tickets.")
219220 else if (getEventCanceledValue(event))
220221 then throw("This event was canceled. You can redeem your ticket using refundTicket function")
221222 else WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (getEventAttendeeValue(attendeeAddress, id, ticketId, event) - amount))])
222223 }
223224
224225
225226
226227 @Callable(i)
227228 func editEventTickets (event,ticketId,newAmount) = {
228229 let callerAddress = toBase58String(i.caller.bytes)
229230 if ((getEventValueById(event) != callerAddress))
230231 then throw("Event does not exist, or you don't have the credentials to perform this action")
231232 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
232233 then throw("This event has already happened")
233234 else if (getEventCanceledValue(event))
234235 then throw("This event was already canceled")
235- else WriteSet([DataEntry(getEventAmountTicketsKey(event, ticketId), newAmount)])
236+ else WriteSet([DataEntry(getEventTicketAmountKey(event, ticketId), newAmount)])
236237 }
237238
238239
239240
240241 @Callable(i)
241242 func refundTicket (event,amount,id,ticketId) = {
242243 let attendeeAddress = toBase58String(i.caller.bytes)
243244 let attendeeValue = getEventAttendeeValue(attendeeAddress, id, ticketId, event)
244245 if ((getEventValueById(event) == NONE))
245246 then throw("The event does not exist")
246247 else if ((amount > attendeeValue))
247248 then throw("You don't have enough registered tickets with this address")
248249 else if (((lastBlock.timestamp + 15000000) > getEventDateValue(event)))
249250 then throw("This event has already happened")
250251 else ScriptResult(WriteSet([DataEntry(getEventAttendeeKey(attendeeAddress, id, ticketId, event), (attendeeValue - amount))]), TransferSet([ScriptTransfer(addressFromStringValue(attendeeAddress), (amount * attendeeValue), unit)]))
251252 }
252253
253254
254255
255256 @Callable(i)
256257 func withdraw (event) = {
257258 let callerAddress = toBase58String(i.caller.bytes)
258259 let balance = getEventBalanceValue(callerAddress, event)
259260 if ((getEventValueById(event) != callerAddress))
260261 then throw("Event does not exist, or you don't have the credentials to perform this action")
261262 else if ((0 >= balance))
262263 then throw("Insufficient balance")
263264 else if (getEventCanceledValue(event))
264265 then throw("Event has been canceled")
265266 else ScriptResult(WriteSet([DataEntry(getEventBalanceKey(callerAddress, event), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(callerAddress), (balance - ((balance * commission) / 100)), unit), ScriptTransfer(addressFromStringValue(address), ((balance * commission) / 100), unit)]))
266267 }
267268
268269

github/deemru/w8io/169f3d6 
63.84 ms