tx · qBZc8XWZyBsN2kUhygkHF9fc4GuZWGRbCKry6JHGfLk

3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF:  -0.01400000 Waves

2019.08.14 09:19 [630369] smart account 3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF > SELF 0.00000000 Waves

{ "type": 13, "id": "qBZc8XWZyBsN2kUhygkHF9fc4GuZWGRbCKry6JHGfLk", "fee": 1400000, "feeAssetId": null, "timestamp": 1565763541766, "version": 1, "sender": "3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF", "senderPublicKey": "9i5FpMUFCwhogG5euZDBZKV6NehQN4xX83qvNr8NWipE", "proofs": [ "47cpVMsR5KGgJ5aMyYeFokoeJL6mezXuz6QZ7ta3wVK51xrAQUNEkTkZhh6ZK7gePG7gUpx2VrVekyRDhhnvB4U5" ], "script": "base64:AAIDAAAAAAAAAAAAAABYAAAAAAROT05FAgAAAARub25lAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAANudW0EAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAFAAAAA251bQEAAAALZ2V0U3RyQnlLZXkAAAABAAAAA2tleQQAAAADc3RyBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAAROT05FBQAAAANzdHIBAAAAEmdldEtleVdoaXRlbGlzdFJlZgAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAd3bF9yZWZfBQAAAAdhY2NvdW50AQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABAAAAB2FjY291bnQJAAEsAAAAAgIAAAAHd2xfc3RzXwUAAAAHYWNjb3VudAEAAAANZ2V0S2V5QmFsYW5jZQAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAhiYWxhbmNlXwUAAAAHYWNjb3VudAEAAAASZ2V0S2V5V2hpdGVsaXN0QmlvAAAAAQAAAAdhY2NvdW50CQABLAAAAAICAAAAB3dsX2Jpb18FAAAAB2FjY291bnQBAAAAFGdldEtleVdoaXRlbGlzdEJsb2NrAAAAAQAAAAdhY2NvdW50CQABLAAAAAICAAAAB3dsX2Jsa18FAAAAB2FjY291bnQBAAAAEGdldEtleUl0ZW1BdXRob3IAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAHYXV0aG9yXwUAAAAEaXRlbQEAAAAPZ2V0S2V5SXRlbUJsb2NrAAAAAQAAAARpdGVtCQABLAAAAAICAAAABmJsb2NrXwUAAAAEaXRlbQEAAAAaZ2V0S2V5SXRlbVZvdGluZ0V4cGlyYXRpb24AAAABAAAABGl0ZW0JAAEsAAAAAgIAAAARZXhwaXJhdGlvbl9ibG9ja18FAAAABGl0ZW0BAAAADmdldEtleUl0ZW1CYW5rAAAAAQAAAARpdGVtCQABLAAAAAICAAAABWJhbmtfBQAAAARpdGVtAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQABLAAAAAICAAAAB3N0YXR1c18FAAAABGl0ZW0BAAAADmdldEtleUl0ZW1EYXRhAAAAAQAAAARpdGVtCQABLAAAAAICAAAACWRhdGFqc29uXwUAAAAEaXRlbQEAAAARZ2V0S2V5Q29udGVzdERhdGEAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAARY29udGVzdF9kYXRhanNvbl8FAAAABGl0ZW0BAAAAGWdldEtleUl0ZW1Dcm93ZEV4cGlyYXRpb24AAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAPZXhwaXJhdGlvbl9vbmVfBQAAAARpdGVtAQAAABlnZXRLZXlJdGVtV2hhbGVFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQABLAAAAAICAAAAD2V4cGlyYXRpb25fdHdvXwUAAAAEaXRlbQEAAAASZ2V0S2V5SXRlbU5Db21taXRzAAAAAQAAAARpdGVtCQABLAAAAAICAAAACW5jb21taXRzXwUAAAAEaXRlbQEAAAAXZ2V0S2V5SXRlbUFjY1JlcG9ydERhdGEAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHcmVwb3J0XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAATZ2V0S2V5SXRlbUFjY0NvbW1pdAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdjb21taXRfBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABNnZXRLZXlJdGVtQWNjUmV2ZWFsAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAB3JldmVhbF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAEmdldEtleUl0ZW1Wb3Rlc1llcwAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAhjbnRfeWVzXwUAAAAEaXRlbQEAAAARZ2V0S2V5SXRlbVZvdGVzTm8AAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAHY250X25vXwUAAAAEaXRlbQEAAAASZ2V0S2V5SXRlbUFjY0ZpbmFsAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABmZpbmFsXwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAAWZ2V0S2V5SXRlbUZ1bmRQb3NpdGl2ZQAAAAEAAAAEaXRlbQkAASwAAAACAgAAAA5wb3NpdGl2ZV9mdW5kXwUAAAAEaXRlbQEAAAAWZ2V0S2V5SXRlbUZ1bmROZWdhdGl2ZQAAAAEAAAAEaXRlbQkAASwAAAACAgAAAA5uZWdhdGl2ZV9mdW5kXwUAAAAEaXRlbQEAAAAZZ2V0S2V5SXRlbUFjY0Z1bmRQb3NpdGl2ZQAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABlnZXRLZXlJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQEAAAAWZ2V0S2V5SXRlbUZ1bmROZWdhdGl2ZQAAAAEFAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdzQ250AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADHJldmlld3NfY250XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdyZXZpZXdfBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkAASwAAAACCQABLAAAAAIJAQAAABNnZXRLZXlJdGVtQWNjUmV2aWV3AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAIAAAAJX3RleHRfaWQ6BQAAAANjbnQBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQABLAAAAAIJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAlfbW9kZV9pZDoFAAAAA2NudAEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RpZXIAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAAEsAAAAAgkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAACV90aWVyX2lkOgUAAAADY250AQAAABtnZXRLZXlJdGVtQWNjVm90ZVJldmlld1RleHQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAAC192b3RlcmV2aWV3AQAAABxnZXRLZXlJdGVtQWNjV2hhbGVSZXZpZXdUZXh0AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAxfd2hhbGVyZXZpZXcBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOYnV5b3V0X2Ftb3VudF8FAAAABGl0ZW0BAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl3aW5uaW5nc18FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFGdldFZhbHVlV2hpdGVsaXN0UmVmAAAAAQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5V2hpdGVsaXN0UmVmAAAAAQUAAAAHYWNjb3VudAEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AQAAAA9nZXRWYWx1ZUJhbGFuY2UAAAABAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA1nZXRLZXlCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RCaW8AAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAAdhY2NvdW50AQAAABZnZXRWYWx1ZVdoaXRlbGlzdEJsb2NrAAAAAQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAUZ2V0S2V5V2hpdGVsaXN0QmxvY2sAAAABBQAAAAdhY2NvdW50AQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtQXV0aG9yAAAAAQUAAAAEaXRlbQEAAAARZ2V0VmFsdWVJdGVtQmxvY2sAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRLZXlJdGVtQmxvY2sAAAABBQAAAARpdGVtAQAAABxnZXRWYWx1ZUl0ZW1Wb3RpbmdFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAaZ2V0S2V5SXRlbVZvdGluZ0V4cGlyYXRpb24AAAABBQAAAARpdGVtAQAAABBnZXRWYWx1ZUl0ZW1CYW5rAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAOZ2V0S2V5SXRlbUJhbmsAAAABBQAAAARpdGVtAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQEAAAAQZ2V0VmFsdWVJdGVtRGF0YQAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAZZ2V0S2V5SXRlbUNyb3dkRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAG2dldFZhbHVlSXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1XaGFsZUV4cGlyYXRpb24AAAABBQAAAARpdGVtAQAAABRnZXRWYWx1ZUl0ZW1OQ29tbWl0cwAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1OQ29tbWl0cwAAAAEFAAAABGl0ZW0BAAAAFWdldFZhbHVlSXRlbUFjY0NvbW1pdAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAATZ2V0S2V5SXRlbUFjY0NvbW1pdAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAFWdldFZhbHVlSXRlbUFjY1JldmVhbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAATZ2V0S2V5SXRlbUFjY1JldmVhbAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAFGdldFZhbHVlSXRlbVZvdGVzWWVzAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVZvdGVzWWVzAAAAAQUAAAAEaXRlbQEAAAATZ2V0VmFsdWVJdGVtVm90ZXNObwAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldEtleUl0ZW1Wb3Rlc05vAAAAAQUAAAAEaXRlbQEAAAAUZ2V0VmFsdWVJdGVtQWNjRmluYWwAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1BY2NGaW5hbAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAGGdldFZhbHVlSXRlbUZ1bmRQb3NpdGl2ZQAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABBQAAAARpdGVtAQAAABhnZXRWYWx1ZUl0ZW1GdW5kTmVnYXRpdmUAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRLZXlJdGVtRnVuZE5lZ2F0aXZlAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3c0NudAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld3NDbnQAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdUZXh0AAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RleHQAAAADBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAANjbnQBAAAAGWdldFZhbHVlSXRlbUFjY1Jldmlld01vZGUAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3TW9kZQAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAAA2NudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3VGllcgAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdUaWVyAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAADY250AQAAABhnZXRWYWx1ZUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRLZXlJdGVtQnV5b3V0QW1vdW50AAAAAQUAAAAEaXRlbQEAAAAXZ2V0VmFsdWVJdGVtQWNjV2lubmluZ3MAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQAAAAAC1dISVRFTElTVEVEAgAAAApyZWdpc3RlcmVkAAAAAAdJTlZJVEVEAgAAAAdpbnZpdGVkAAAAAAVXSEFMRQIAAAAFd2hhbGUAAAAAC1NQRU5ESU5WSVRFAgAAAAxzcGVuZF9pbnZpdGUAAAAABkNPTU1JVAIAAAANdm90aW5nX2NvbW1pdAAAAAAGUkVWRUFMAgAAAA12b3RpbmdfcmV2ZWFsAAAAAAhGRUFUVVJFRAIAAAAIZmVhdHVyZWQAAAAACERFTElTVEVEAgAAAAhkZWxpc3RlZAAAAAAHQ0FTSE9VVAIAAAAHY2FzaG91dAAAAAAGQlVZT1VUAgAAAAZidXlvdXQAAAAACEZJTklTSEVEAgAAAAhmaW5pc2hlZAAAAAAHQ0xBSU1FRAIAAAAHY2xhaW1lZAAAAAAIUE9TSVRJVkUCAAAACHBvc2l0aXZlAAAAAAhORUdBVElWRQIAAAAIbmVnYXRpdmUAAAAAB0dFTkVTSVMCAAAAIzNQOEZ2eTF5RHdOSHZWcmFiZTRlazViOWRBd3hGakRLVjdSAAAAAAVBRE1JTgIAAAAjM013TVIxWkZmeTcxMnRySFZMaXNpelltdlJRd3NnOHo5Qm4AAAAABlZPVEVSUwAAAAAAAAAAAwAAAAAGUVVPUlVNAAAAAAAAAAACAAAAAAVUSUVSUwkABEwAAAAC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", "chainId": 84, "height": 630369, "spentComplexity": 0 } View: original | compacted Prev: GKqtaUb3TKEsN6PYdrMLMHbpkeonLC14NEvikfQ9dyuo Next: GaDrKbipb4oa46YZHzDvYC4jR18xaTTneDtPDwXM1JZJ Diff:
OldNewDifferences
6868
6969
7070 func getKeyItemNCommits (item) = ("ncommits_" + item)
71+
72+
73+func getKeyItemAccReportData (item,account) = ((("report_" + item) + "_") + account)
7174
7275
7376 func getKeyItemAccCommit (item,account) = ((("commit_" + item) + "_") + account)
219222
220223 let SPENDINVITE = "spend_invite"
221224
222-let NEW = "new"
223-
224225 let COMMIT = "voting_commit"
225226
226227 let REVEAL = "voting_reveal"
360361 then throw("Incorrect time parameters")
361362 else if ((getValueItemAuthor(item) != NONE))
362363 then throw("Item already exist")
363- else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), NEW), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
364+ else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
364365 }
365366
366367
367368
368369 @Callable(i)
369-func votecommit (item,hash) = {
370+func reportProject (item,data) = {
370371 let account = toBase58String(i.caller.bytes)
371- let commits = getValueItemNCommits(item)
372- let status = getValueItemStatus(item)
373- let pmt = extract(i.payment)
374- if (isDefined(pmt.assetId))
375- then throw("can use waves only at the moment")
376- else if ((pmt.amount != (2 * VOTEBET)))
377- then throw("Not enough funds to vote for a new item")
378- else if ((height > getValueItemVotingExpiration(item)))
379- then throw("The voting has expired")
380- else if ((getValueItemAuthor(item) == account))
381- then throw("Cannot vote for own proposal")
382- else if (if ((status != NEW))
383- then (status != COMMIT)
384- else false)
385- then throw("Wrong item status for 'commit' action")
386- else if ((commits >= VOTERS))
387- then throw("No more voters for this item")
388- else if ((getValueItemAccCommit(item, account) != NONE))
389- then throw("Can't vote twice")
390- else WriteSet([DataEntry(getKeyItemStatus(item), if (((commits + 1) == VOTERS))
391- then REVEAL
392- else COMMIT), DataEntry(getKeyItemAccCommit(item, account), hash), DataEntry(getKeyItemNCommits(item), (commits + 1))])
393- }
394-
395-
396-
397-@Callable(i)
398-func votereveal (item,vote,salt,review) = {
399- let ridehash = toBase58String(sha256(toBytes((vote + salt))))
400- let account = toBase58String(i.caller.bytes)
401- let yesmltp = if ((vote == FEATURED))
402- then 1
403- else 0
404- let notmltp = if ((vote == DELISTED))
405- then 1
406- else 0
407- let yescnt = getValueItemVotesYes(item)
408- let notcnt = getValueItemVotesNo(item)
409- let newstatus = if ((yescnt >= QUORUM))
410- then FEATURED
411- else if ((notcnt >= QUORUM))
412- then DELISTED
413- else REVEAL
414- if ((getValueItemAccCommit(item, account) != ridehash))
415- then throw("Hashes don't match")
416- else if ((height > getValueItemVotingExpiration(item)))
417- then throw("The challenge has expired")
418- else if ((VOTERS > getValueItemNCommits(item)))
419- then throw("It's still commit stage")
420- else if (if ((getValueItemStatus(item) != REVEAL))
421- then (getValueItemStatus(item) != newstatus)
422- else false)
423- then throw("Wrong item status for 'reveal' action")
424- else if ((getValueItemAccReveal(item, account) != NONE))
425- then throw("Can't vote twice")
426- else if (if ((vote != FEATURED))
427- then (vote != DELISTED)
428- else false)
429- then throw("Bad vote result format")
430- else ScriptResult(WriteSet([DataEntry(getKeyItemAccReveal(item, account), vote), DataEntry(getKeyItemVotesYes(item), (yescnt + yesmltp)), DataEntry(getKeyItemVotesNo(item), (notcnt + notmltp)), DataEntry(getKeyItemStatus(item), newstatus), DataEntry(getKeyItemAccVoteReviewText(item, account), review)]), TransferSet([ScriptTransfer(addressFromStringValue(account), VOTEBET, unit)]))
431- }
432-
433-
434-
435-@Callable(i)
436-func finalizevoting (item,account) = {
437- let yescnt = getValueItemVotesYes(item)
438- let notcnt = getValueItemVotesNo(item)
439- let accvote = getValueItemAccReveal(item, account)
440- let isauthor = (account == getValueItemAuthor(item))
441- let finalstatus = if ((yescnt > QUORUM))
442- then FEATURED
443- else if ((notcnt > QUORUM))
444- then DELISTED
445- else NONE
446- let mltisnotfullmajority = if (if ((yescnt == VOTERS))
447- then true
448- else (notcnt == VOTERS))
449- then 0
450- else 1
451- let nwinners = if ((finalstatus == FEATURED))
452- then yescnt
453- else if ((finalstatus == DELISTED))
454- then notcnt
455- else 0
456- let nloosers = (VOTERS - nwinners)
457- let mltacciswinner = if ((finalstatus == accvote))
458- then 1
459- else 0
460- let voteprofit = if ((nwinners == 0))
461- then 0
462- else (mltacciswinner * (VOTEBET + ((mltisnotfullmajority * ((nloosers * VOTEBET) + LISTINGFEE)) / nwinners)))
463- let authorreturn = (((LISTINGFEE * (if (isauthor)
464- then 1
465- else 0)) * (if ((mltisnotfullmajority == 1))
466- then 0
467- else 1)) * (if ((finalstatus == FEATURED))
468- then 1
469- else 0))
470- if ((getValueItemVotingExpiration(item) > height))
471- then throw("The voting hasn't finished yet")
472- else if ((getValueItemAccFinal(item, account) == FINISHED))
473- then throw("Account has already claimed")
474- else if (if ((accvote == NONE))
475- then !(isauthor)
476- else false)
477- then throw("Account hasnot voted, hasnot reveal or isnot author")
478- else if ((finalstatus == NONE))
479- then throw("Voting has expired")
480- else ScriptResult(WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED)]), TransferSet([ScriptTransfer(addressFromStringValue(account), (voteprofit + authorreturn), unit)]))
481- }
482-
483-
484-
485-@Callable(i)
486-func closeexpiredvoting (item,account) = {
487- let finalstatus = if ((getValueItemVotesYes(item) > QUORUM))
488- then FEATURED
489- else if ((getValueItemVotesNo(item) > QUORUM))
490- then DELISTED
491- else NONE
492- let accvote = getValueItemAccReveal(item, account)
493- let isauthor = (account == getValueItemAuthor(item))
494- let acccomi = getValueItemAccCommit(item, account)
495- let hasrevealstage = (getValueItemNCommits(item) == VOTERS)
496- let authorreturn = (LISTINGFEE * (if (isauthor)
497- then 1
498- else 0))
499- let votersreturn1 = ((VOTEBET * (if (hasrevealstage)
500- then 1
501- else 0)) * (if ((accvote != NONE))
502- then 1
503- else 0))
504- let votersreturn2 = (((2 * VOTEBET) * (if (hasrevealstage)
505- then 0
506- else 1)) * (if ((acccomi != NONE))
507- then 1
508- else 0))
509- if ((getValueItemVotingExpiration(item) > height))
510- then throw("The voting hasn't finished yet")
511- else if (if (!(isauthor))
512- then (acccomi == NONE)
513- else false)
514- then throw("Wrong account or item")
515- else if ((getValueItemAccFinal(item, account) == FINISHED))
516- then throw("Account has already claimed")
517- else if ((finalstatus != NONE))
518- then throw("Wrong item status")
519- else ScriptResult(WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED)]), TransferSet([ScriptTransfer(addressFromStringValue(account), ((authorreturn + votersreturn1) + votersreturn2), unit)]))
372+ WriteSet([DataEntry(getKeyItemAccReportData(item, account), data)])
520373 }
521374
522375
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
66 func getNumberByKey (key) = {
77 let num = match getInteger(this, key) {
88 case a: Int =>
99 a
1010 case _ =>
1111 0
1212 }
1313 num
1414 }
1515
1616
1717 func getStrByKey (key) = {
1818 let str = match getString(this, key) {
1919 case a: String =>
2020 a
2121 case _ =>
2222 NONE
2323 }
2424 str
2525 }
2626
2727
2828 func getKeyWhitelistRef (account) = ("wl_ref_" + account)
2929
3030
3131 func getKeyWhitelistStatus (account) = ("wl_sts_" + account)
3232
3333
3434 func getKeyBalance (account) = ("balance_" + account)
3535
3636
3737 func getKeyWhitelistBio (account) = ("wl_bio_" + account)
3838
3939
4040 func getKeyWhitelistBlock (account) = ("wl_blk_" + account)
4141
4242
4343 func getKeyItemAuthor (item) = ("author_" + item)
4444
4545
4646 func getKeyItemBlock (item) = ("block_" + item)
4747
4848
4949 func getKeyItemVotingExpiration (item) = ("expiration_block_" + item)
5050
5151
5252 func getKeyItemBank (item) = ("bank_" + item)
5353
5454
5555 func getKeyItemStatus (item) = ("status_" + item)
5656
5757
5858 func getKeyItemData (item) = ("datajson_" + item)
5959
6060
6161 func getKeyContestData (item) = ("contest_datajson_" + item)
6262
6363
6464 func getKeyItemCrowdExpiration (item) = ("expiration_one_" + item)
6565
6666
6767 func getKeyItemWhaleExpiration (item) = ("expiration_two_" + item)
6868
6969
7070 func getKeyItemNCommits (item) = ("ncommits_" + item)
71+
72+
73+func getKeyItemAccReportData (item,account) = ((("report_" + item) + "_") + account)
7174
7275
7376 func getKeyItemAccCommit (item,account) = ((("commit_" + item) + "_") + account)
7477
7578
7679 func getKeyItemAccReveal (item,account) = ((("reveal_" + item) + "_") + account)
7780
7881
7982 func getKeyItemVotesYes (item) = ("cnt_yes_" + item)
8083
8184
8285 func getKeyItemVotesNo (item) = ("cnt_no_" + item)
8386
8487
8588 func getKeyItemAccFinal (item,account) = ((("final_" + item) + "_") + account)
8689
8790
8891 func getKeyItemFundPositive (item) = ("positive_fund_" + item)
8992
9093
9194 func getKeyItemFundNegative (item) = ("negative_fund_" + item)
9295
9396
9497 func getKeyItemAccFundPositive (item,account) = ((getKeyItemFundPositive(item) + "_") + account)
9598
9699
97100 func getKeyItemAccFundNegative (item,account) = ((getKeyItemFundNegative(item) + "_") + account)
98101
99102
100103 func getKeyItemAccReviewsCnt (item,account) = ((("reviews_cnt_" + item) + "_") + account)
101104
102105
103106 func getKeyItemAccReview (item,account) = ((("review_" + item) + "_") + account)
104107
105108
106109 func getKeyItemAccReviewText (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_text_id:") + cnt)
107110
108111
109112 func getKeyItemAccReviewMode (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_mode_id:") + cnt)
110113
111114
112115 func getKeyItemAccReviewTier (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_tier_id:") + cnt)
113116
114117
115118 func getKeyItemAccVoteReviewText (item,account) = (getKeyItemAccReview(item, account) + "_votereview")
116119
117120
118121 func getKeyItemAccWhaleReviewText (item,account) = (getKeyItemAccReview(item, account) + "_whalereview")
119122
120123
121124 func getKeyItemBuyoutAmount (item) = ("buyout_amount_" + item)
122125
123126
124127 func getKeyItemAccWinnings (item,account) = ((("winnings_" + item) + "_") + account)
125128
126129
127130 func getValueWhitelistRef (account) = getStrByKey(getKeyWhitelistRef(account))
128131
129132
130133 func getValueWhitelistStatus (account) = getStrByKey(getKeyWhitelistStatus(account))
131134
132135
133136 func getValueBalance (account) = getNumberByKey(getKeyBalance(account))
134137
135138
136139 func getValueWhitelistBio (account) = getStrByKey(getKeyWhitelistBio(account))
137140
138141
139142 func getValueWhitelistBlock (account) = getStrByKey(getKeyWhitelistBlock(account))
140143
141144
142145 func getValueItemAuthor (item) = getStrByKey(getKeyItemAuthor(item))
143146
144147
145148 func getValueItemBlock (item) = getNumberByKey(getKeyItemBlock(item))
146149
147150
148151 func getValueItemVotingExpiration (item) = getNumberByKey(getKeyItemVotingExpiration(item))
149152
150153
151154 func getValueItemBank (item) = getNumberByKey(getKeyItemBank(item))
152155
153156
154157 func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
155158
156159
157160 func getValueItemData (item) = getStrByKey(getKeyItemData(item))
158161
159162
160163 func getValueItemCrowdExpiration (item) = getNumberByKey(getKeyItemCrowdExpiration(item))
161164
162165
163166 func getValueItemWhaleExpiration (item) = getNumberByKey(getKeyItemWhaleExpiration(item))
164167
165168
166169 func getValueItemNCommits (item) = getNumberByKey(getKeyItemNCommits(item))
167170
168171
169172 func getValueItemAccCommit (item,account) = getStrByKey(getKeyItemAccCommit(item, account))
170173
171174
172175 func getValueItemAccReveal (item,account) = getStrByKey(getKeyItemAccReveal(item, account))
173176
174177
175178 func getValueItemVotesYes (item) = getNumberByKey(getKeyItemVotesYes(item))
176179
177180
178181 func getValueItemVotesNo (item) = getNumberByKey(getKeyItemVotesNo(item))
179182
180183
181184 func getValueItemAccFinal (item,account) = getStrByKey(getKeyItemAccFinal(item, account))
182185
183186
184187 func getValueItemFundPositive (item) = getNumberByKey(getKeyItemFundPositive(item))
185188
186189
187190 func getValueItemFundNegative (item) = getNumberByKey(getKeyItemFundNegative(item))
188191
189192
190193 func getValueItemAccFundPositive (item,account) = getNumberByKey(getKeyItemAccFundPositive(item, account))
191194
192195
193196 func getValueItemAccFundNegative (item,account) = getNumberByKey(getKeyItemAccFundNegative(item, account))
194197
195198
196199 func getValueItemAccReviewsCnt (item,account) = getNumberByKey(getKeyItemAccReviewsCnt(item, account))
197200
198201
199202 func getValueItemAccReviewText (item,account,cnt) = getStrByKey(getKeyItemAccReviewText(item, account, cnt))
200203
201204
202205 func getValueItemAccReviewMode (item,account,cnt) = getStrByKey(getKeyItemAccReviewMode(item, account, cnt))
203206
204207
205208 func getValueItemAccReviewTier (item,account,cnt) = getNumberByKey(getKeyItemAccReviewTier(item, account, cnt))
206209
207210
208211 func getValueItemBuyoutAmount (item) = getNumberByKey(getKeyItemBuyoutAmount(item))
209212
210213
211214 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
212215
213216
214217 let WHITELISTED = "registered"
215218
216219 let INVITED = "invited"
217220
218221 let WHALE = "whale"
219222
220223 let SPENDINVITE = "spend_invite"
221224
222-let NEW = "new"
223-
224225 let COMMIT = "voting_commit"
225226
226227 let REVEAL = "voting_reveal"
227228
228229 let FEATURED = "featured"
229230
230231 let DELISTED = "delisted"
231232
232233 let CASHOUT = "cashout"
233234
234235 let BUYOUT = "buyout"
235236
236237 let FINISHED = "finished"
237238
238239 let CLAIMED = "claimed"
239240
240241 let POSITIVE = "positive"
241242
242243 let NEGATIVE = "negative"
243244
244245 let GENESIS = "3P8Fvy1yDwNHvVrabe4ek5b9dAwxFjDKV7R"
245246
246247 let ADMIN = "3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn"
247248
248249 let VOTERS = 3
249250
250251 let QUORUM = 2
251252
252253 let TIERS = [(3 * 100000000), (10 * 100000000), (100 * 100000000), (300 * 100000000), (1000 * 100000000)]
253254
254255 let LISTINGFEE = (3 * 100000000)
255256
256257 let VOTEBET = (1 * 100000000)
257258
258259 let MULTIPLIER = 150
259260
260261 @Callable(i)
261262 func inviteuser (newaccount,data) = {
262263 let account = toBase58String(i.caller.bytes)
263264 let newstatus = getValueWhitelistStatus(newaccount)
264265 let currstatus = getValueWhitelistStatus(account)
265266 if (if ((newstatus == WHITELISTED))
266267 then true
267268 else (newstatus == WHALE))
268269 then throw("User has already been registered")
269270 else if (if (if ((currstatus != WHITELISTED))
270271 then (account != GENESIS)
271272 else false)
272273 then (currstatus != WHALE)
273274 else false)
274275 then throw(("Your account should be whitelisted. status: " + currstatus))
275276 else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
276277 }
277278
278279
279280
280281 @Callable(i)
281282 func signupbylink (hash,data,type) = {
282283 let account = toBase58String(i.caller.bytes)
283284 let status = getValueWhitelistStatus(hash)
284285 if ((status != INVITED))
285286 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(hash)) + ", account:") + hash))
286287 else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
287288 then WHALE
288289 else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash))])
289290 }
290291
291292
292293
293294 @Callable(i)
294295 func signup (data,type) = {
295296 let account = toBase58String(i.caller.bytes)
296297 let status = getValueWhitelistStatus(account)
297298 if ((status == NONE))
298299 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(account)) + ", account:") + account))
299300 else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
300301 then WHALE
301302 else WHITELISTED)])
302303 }
303304
304305
305306
306307 @Callable(i)
307308 func userupdate (data,type) = {
308309 let account = toBase58String(i.caller.bytes)
309310 WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
310311 then WHALE
311312 else WHITELISTED)])
312313 }
313314
314315
315316
316317 @Callable(i)
317318 func projupdate (item,data) = {
318319 let account = toBase58String(i.caller.bytes)
319320 if ((getValueItemAuthor(item) != account))
320321 then throw("You're not author")
321322 else WriteSet([DataEntry(getKeyItemData(item), data)])
322323 }
323324
324325
325326
326327 @Callable(i)
327328 func contestAddOrUpdate (item,data) = {
328329 let account = toBase58String(i.caller.bytes)
329330 if ((account != ADMIN))
330331 then throw("You're not admin")
331332 else WriteSet([DataEntry(getKeyContestData(item), data)])
332333 }
333334
334335
335336
336337 @Callable(i)
337338 func withdraw () = {
338339 let currentKey = toBase58String(i.caller.bytes)
339340 let amount = getValueBalance(currentKey)
340341 if ((0 >= amount))
341342 then throw("Not enough balance")
342343 else ScriptResult(WriteSet([DataEntry(getKeyBalance(currentKey), 0)]), TransferSet([ScriptTransfer(i.caller, amount, unit)]))
343344 }
344345
345346
346347
347348 @Callable(i)
348349 func additem (item,expVoting,expCrowd,expWhale,data) = {
349350 let account = toBase58String(i.caller.bytes)
350351 let pmt = extract(i.payment)
351352 if (isDefined(pmt.assetId))
352353 then throw("can use waves only at the moment")
353354 else if ((pmt.amount != LISTINGFEE))
354355 then throw(((("Please pay exact amount for the listing: " + toString(LISTINGFEE)) + ", actual payment is: ") + toString(pmt.amount)))
355356 else if (!(if (if ((expVoting > 2))
356357 then (expCrowd > expVoting)
357358 else false)
358359 then (expWhale > expCrowd)
359360 else false))
360361 then throw("Incorrect time parameters")
361362 else if ((getValueItemAuthor(item) != NONE))
362363 then throw("Item already exist")
363- else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), NEW), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
364+ else WriteSet([DataEntry(getKeyItemAuthor(item), account), DataEntry(getKeyItemBlock(item), height), DataEntry(getKeyItemVotingExpiration(item), (height + expVoting)), DataEntry(getKeyItemBank(item), LISTINGFEE), DataEntry(getKeyItemStatus(item), FEATURED), DataEntry(getKeyItemData(item), data), DataEntry(getKeyItemCrowdExpiration(item), (height + expCrowd)), DataEntry(getKeyItemWhaleExpiration(item), (height + expWhale))])
364365 }
365366
366367
367368
368369 @Callable(i)
369-func votecommit (item,hash) = {
370+func reportProject (item,data) = {
370371 let account = toBase58String(i.caller.bytes)
371- let commits = getValueItemNCommits(item)
372- let status = getValueItemStatus(item)
373- let pmt = extract(i.payment)
374- if (isDefined(pmt.assetId))
375- then throw("can use waves only at the moment")
376- else if ((pmt.amount != (2 * VOTEBET)))
377- then throw("Not enough funds to vote for a new item")
378- else if ((height > getValueItemVotingExpiration(item)))
379- then throw("The voting has expired")
380- else if ((getValueItemAuthor(item) == account))
381- then throw("Cannot vote for own proposal")
382- else if (if ((status != NEW))
383- then (status != COMMIT)
384- else false)
385- then throw("Wrong item status for 'commit' action")
386- else if ((commits >= VOTERS))
387- then throw("No more voters for this item")
388- else if ((getValueItemAccCommit(item, account) != NONE))
389- then throw("Can't vote twice")
390- else WriteSet([DataEntry(getKeyItemStatus(item), if (((commits + 1) == VOTERS))
391- then REVEAL
392- else COMMIT), DataEntry(getKeyItemAccCommit(item, account), hash), DataEntry(getKeyItemNCommits(item), (commits + 1))])
393- }
394-
395-
396-
397-@Callable(i)
398-func votereveal (item,vote,salt,review) = {
399- let ridehash = toBase58String(sha256(toBytes((vote + salt))))
400- let account = toBase58String(i.caller.bytes)
401- let yesmltp = if ((vote == FEATURED))
402- then 1
403- else 0
404- let notmltp = if ((vote == DELISTED))
405- then 1
406- else 0
407- let yescnt = getValueItemVotesYes(item)
408- let notcnt = getValueItemVotesNo(item)
409- let newstatus = if ((yescnt >= QUORUM))
410- then FEATURED
411- else if ((notcnt >= QUORUM))
412- then DELISTED
413- else REVEAL
414- if ((getValueItemAccCommit(item, account) != ridehash))
415- then throw("Hashes don't match")
416- else if ((height > getValueItemVotingExpiration(item)))
417- then throw("The challenge has expired")
418- else if ((VOTERS > getValueItemNCommits(item)))
419- then throw("It's still commit stage")
420- else if (if ((getValueItemStatus(item) != REVEAL))
421- then (getValueItemStatus(item) != newstatus)
422- else false)
423- then throw("Wrong item status for 'reveal' action")
424- else if ((getValueItemAccReveal(item, account) != NONE))
425- then throw("Can't vote twice")
426- else if (if ((vote != FEATURED))
427- then (vote != DELISTED)
428- else false)
429- then throw("Bad vote result format")
430- else ScriptResult(WriteSet([DataEntry(getKeyItemAccReveal(item, account), vote), DataEntry(getKeyItemVotesYes(item), (yescnt + yesmltp)), DataEntry(getKeyItemVotesNo(item), (notcnt + notmltp)), DataEntry(getKeyItemStatus(item), newstatus), DataEntry(getKeyItemAccVoteReviewText(item, account), review)]), TransferSet([ScriptTransfer(addressFromStringValue(account), VOTEBET, unit)]))
431- }
432-
433-
434-
435-@Callable(i)
436-func finalizevoting (item,account) = {
437- let yescnt = getValueItemVotesYes(item)
438- let notcnt = getValueItemVotesNo(item)
439- let accvote = getValueItemAccReveal(item, account)
440- let isauthor = (account == getValueItemAuthor(item))
441- let finalstatus = if ((yescnt > QUORUM))
442- then FEATURED
443- else if ((notcnt > QUORUM))
444- then DELISTED
445- else NONE
446- let mltisnotfullmajority = if (if ((yescnt == VOTERS))
447- then true
448- else (notcnt == VOTERS))
449- then 0
450- else 1
451- let nwinners = if ((finalstatus == FEATURED))
452- then yescnt
453- else if ((finalstatus == DELISTED))
454- then notcnt
455- else 0
456- let nloosers = (VOTERS - nwinners)
457- let mltacciswinner = if ((finalstatus == accvote))
458- then 1
459- else 0
460- let voteprofit = if ((nwinners == 0))
461- then 0
462- else (mltacciswinner * (VOTEBET + ((mltisnotfullmajority * ((nloosers * VOTEBET) + LISTINGFEE)) / nwinners)))
463- let authorreturn = (((LISTINGFEE * (if (isauthor)
464- then 1
465- else 0)) * (if ((mltisnotfullmajority == 1))
466- then 0
467- else 1)) * (if ((finalstatus == FEATURED))
468- then 1
469- else 0))
470- if ((getValueItemVotingExpiration(item) > height))
471- then throw("The voting hasn't finished yet")
472- else if ((getValueItemAccFinal(item, account) == FINISHED))
473- then throw("Account has already claimed")
474- else if (if ((accvote == NONE))
475- then !(isauthor)
476- else false)
477- then throw("Account hasnot voted, hasnot reveal or isnot author")
478- else if ((finalstatus == NONE))
479- then throw("Voting has expired")
480- else ScriptResult(WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED)]), TransferSet([ScriptTransfer(addressFromStringValue(account), (voteprofit + authorreturn), unit)]))
481- }
482-
483-
484-
485-@Callable(i)
486-func closeexpiredvoting (item,account) = {
487- let finalstatus = if ((getValueItemVotesYes(item) > QUORUM))
488- then FEATURED
489- else if ((getValueItemVotesNo(item) > QUORUM))
490- then DELISTED
491- else NONE
492- let accvote = getValueItemAccReveal(item, account)
493- let isauthor = (account == getValueItemAuthor(item))
494- let acccomi = getValueItemAccCommit(item, account)
495- let hasrevealstage = (getValueItemNCommits(item) == VOTERS)
496- let authorreturn = (LISTINGFEE * (if (isauthor)
497- then 1
498- else 0))
499- let votersreturn1 = ((VOTEBET * (if (hasrevealstage)
500- then 1
501- else 0)) * (if ((accvote != NONE))
502- then 1
503- else 0))
504- let votersreturn2 = (((2 * VOTEBET) * (if (hasrevealstage)
505- then 0
506- else 1)) * (if ((acccomi != NONE))
507- then 1
508- else 0))
509- if ((getValueItemVotingExpiration(item) > height))
510- then throw("The voting hasn't finished yet")
511- else if (if (!(isauthor))
512- then (acccomi == NONE)
513- else false)
514- then throw("Wrong account or item")
515- else if ((getValueItemAccFinal(item, account) == FINISHED))
516- then throw("Account has already claimed")
517- else if ((finalstatus != NONE))
518- then throw("Wrong item status")
519- else ScriptResult(WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED)]), TransferSet([ScriptTransfer(addressFromStringValue(account), ((authorreturn + votersreturn1) + votersreturn2), unit)]))
372+ WriteSet([DataEntry(getKeyItemAccReportData(item, account), data)])
520373 }
521374
522375
523376
524377 @Callable(i)
525378 func donate (item,tier,mode,review) = {
526379 let account = toBase58String(i.caller.bytes)
527380 let pmt = extract(i.payment)
528381 if (isDefined(pmt.assetId))
529382 then throw("can use waves only at the moment")
530383 else {
531384 let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
532385 let newnegativefund = (getValueItemFundNegative(item) + ((if ((mode == NEGATIVE))
533386 then 1
534387 else 0) * pmt.amount))
535388 let newpositivefund = (getValueItemFundPositive(item) + ((if ((mode == POSITIVE))
536389 then 1
537390 else 0) * pmt.amount))
538391 if ((getValueItemStatus(item) != FEATURED))
539392 then throw("The project hasn't accepted by community")
540393 else if ((height >= getValueItemCrowdExpiration(item)))
541394 then throw("The time for crowdfunding has expired")
542395 else if ((newnegativefund >= newpositivefund))
543396 then throw("Negative fund can't be higher than positive fund")
544397 else if (if ((mode != POSITIVE))
545398 then (mode != NEGATIVE)
546399 else false)
547400 then throw("Wrong mode parameter")
548401 else if ((getValueItemAuthor(item) == account))
549402 then throw("Can't donate own project")
550403 else if ((pmt.amount != TIERS[(tier - 1)]))
551404 then throw(("The payment must be equal to tier amount: " + toString(TIERS[(tier - 1)])))
552405 else WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + ((if ((mode == POSITIVE))
553406 then 1
554407 else 0) * pmt.amount))), DataEntry(getKeyItemAccFundNegative(item, account), (getValueItemAccFundNegative(item, account) + ((if ((mode == NEGATIVE))
555408 then 1
556409 else 0) * pmt.amount))), DataEntry(getKeyItemFundPositive(item), newpositivefund), DataEntry(getKeyItemFundNegative(item), newnegativefund), DataEntry(getKeyItemAccReviewText(item, account, toString(cnt)), review), DataEntry(getKeyItemAccReviewMode(item, account, toString(cnt)), mode), DataEntry(getKeyItemAccReviewTier(item, account, toString(cnt)), tier)])
557410 }
558411 }
559412
560413
561414
562415 @Callable(i)
563416 func whale (item,review) = {
564417 let account = toBase58String(i.caller.bytes)
565418 let pmt = extract(i.payment)
566419 if (isDefined(pmt.assetId))
567420 then throw("can use waves only at the moment")
568421 else if ((getValueItemStatus(item) != FEATURED))
569422 then throw("The project hasn't accepted by community")
570423 else if ((getValueItemCrowdExpiration(item) > height))
571424 then throw("The time for crowdfunding has not expired yet")
572425 else if ((height > getValueItemWhaleExpiration(item)))
573426 then throw("The time for grant has expired")
574427 else if ((getValueItemStatus(item) == BUYOUT))
575428 then throw("Investement has already done")
576429 else if ((((getValueItemFundPositive(item) * MULTIPLIER) / 100) > pmt.amount))
577430 then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
578431 else WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyItemAccWhaleReviewText(item, account), review), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item))), DataEntry(getKeyItemBuyoutAmount(item), pmt.amount)])
579432 }
580433
581434
582435
583436 @Callable(i)
584437 func claimwinnings (item,account) = {
585438 let status = getValueItemStatus(item)
586439 let isbayout = if ((status == BUYOUT))
587440 then 1
588441 else 0
589442 let iscrowdf = if ((status != BUYOUT))
590443 then 1
591444 else 0
592445 let positivefund = getValueItemFundPositive(item)
593446 let negativefund = getValueItemFundNegative(item)
594447 let share = (((isbayout * (getValueItemAccFundPositive(item, account) * 100)) / (if ((0 >= positivefund))
595448 then 1
596449 else positivefund)) + ((iscrowdf * (getValueItemAccFundNegative(item, account) * 100)) / (if ((0 >= negativefund))
597450 then 1
598451 else negativefund)))
599452 let tmpnegwin = ((negativefund * MULTIPLIER) / 100)
600453 let betprofit = ((isbayout * ((share * negativefund) / 100)) + (iscrowdf * ((share * (if ((positivefund > tmpnegwin))
601454 then tmpnegwin
602455 else positivefund)) / 100)))
603456 let roiprofit = (isbayout * ((share * getValueItemBuyoutAmount(item)) / 100))
604457 let authorprofit = (((if ((getValueItemAuthor(item) == account))
605458 then 1
606459 else 0) * positivefund) * (if ((status != BUYOUT))
607460 then 1
608461 else 0))
609462 if ((status == DELISTED))
610463 then throw("The project hasn't accepted by community")
611464 else if (if ((status != BUYOUT))
612465 then (getValueItemWhaleExpiration(item) >= height)
613466 else false)
614467 then throw("The time for grant has not expired yet")
615468 else if ((0 >= (positivefund + negativefund)))
616469 then throw("The campaign wasn't active")
617470 else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemStatus(item), if ((authorprofit > 0))
618471 then CASHOUT
619472 else status), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
620473 }
621474
622475

github/deemru/w8io/6500d08 
98.89 ms