tx · Vu7W66vSTkdNsX8Xz8vXX5BPbvhSuZHZuJSe2rcdZB6

3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt:  -0.01400000 Waves

2019.10.08 22:14 [1741473] smart account 3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt > SELF 0.00000000 Waves

{ "type": 13, "id": "Vu7W66vSTkdNsX8Xz8vXX5BPbvhSuZHZuJSe2rcdZB6", "fee": 1400000, "feeAssetId": null, "timestamp": 1570561964962, "version": 1, "sender": "3PLFZ6T6AhuzZ9SMoFpHBx91oFyy68a3GCt", "senderPublicKey": "Asi3vKEqgmq2AuW1fky6nxPgx65gB8esHy3DGsubEbkw", "proofs": [ "675atBoMwVxwounaH6i5AeHtS1cfjV4xEsjFA2deu3aAhPHYZzjE7hDrFEbYK7mRLrHF6aaywPiXt8f8B7LXwPtw" ], "script": "base64:AAIDAAAAAAAAAF4IARIECgIICBIFCgMICAgSBAoCCAgSBAoCCAgSBAoCCAgSBAoCCAgSAwoBCBIHCgUIAQEBCBIECgIICBIECgIICBIDCgEIEgYKBAgBCAgSAwoBCBIECgIICBIDCgEIAAAAYQAAAAAETk9ORQIAAAAEbm9uZQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABAAAAB2FjY291bnQJAAEsAAAAAgIAAAAHd2xfcmVmXwUAAAAHYWNjb3VudAEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQAAAAdhY2NvdW50CQABLAAAAAICAAAAB3dsX3N0c18FAAAAB2FjY291bnQBAAAADWdldEtleUJhbGFuY2UAAAABAAAAB2FjY291bnQJAAEsAAAAAgIAAAAIYmFsYW5jZV8FAAAAB2FjY291bnQBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAd3bF9iaW9fBQAAAAdhY2NvdW50AQAAABRnZXRLZXlXaGl0ZWxpc3RCbG9jawAAAAEAAAAHYWNjb3VudAkAASwAAAACAgAAAAd3bF9ibGtfBQAAAAdhY2NvdW50AQAAABBnZXRLZXlJdGVtQXV0aG9yAAAAAQAAAARpdGVtCQABLAAAAAICAAAAB2F1dGhvcl8FAAAABGl0ZW0BAAAAD2dldEtleUl0ZW1CbG9jawAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAZibG9ja18FAAAABGl0ZW0BAAAAGmdldEtleUl0ZW1Wb3RpbmdFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQABLAAAAAICAAAAEWV4cGlyYXRpb25fYmxvY2tfBQAAAARpdGVtAQAAAA5nZXRLZXlJdGVtQmFuawAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAViYW5rXwUAAAAEaXRlbQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAdzdGF0dXNfBQAAAARpdGVtAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAlkYXRhanNvbl8FAAAABGl0ZW0BAAAAEWdldEtleUNvbnRlc3REYXRhAAAAAQAAAARpdGVtCQABLAAAAAICAAAAEWNvbnRlc3RfZGF0YWpzb25fBQAAAARpdGVtAQAAABlnZXRLZXlJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQABLAAAAAICAAAAD2V4cGlyYXRpb25fb25lXwUAAAAEaXRlbQEAAAAZZ2V0S2V5SXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEAAAAEaXRlbQkAASwAAAACAgAAAA9leHBpcmF0aW9uX3R3b18FAAAABGl0ZW0BAAAAEmdldEtleUl0ZW1OQ29tbWl0cwAAAAEAAAAEaXRlbQkAASwAAAACAgAAAAluY29tbWl0c18FAAAABGl0ZW0BAAAAF2dldEtleUl0ZW1BY2NSZXBvcnREYXRhAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAB3JlcG9ydF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAE2dldEtleUl0ZW1BY2NDb21taXQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHY29tbWl0XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAATZ2V0S2V5SXRlbUFjY1JldmVhbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAdyZXZlYWxfBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABJnZXRLZXlJdGVtVm90ZXNZZXMAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAIY250X3llc18FAAAABGl0ZW0BAAAAEWdldEtleUl0ZW1Wb3Rlc05vAAAAAQAAAARpdGVtCQABLAAAAAICAAAAB2NudF9ub18FAAAABGl0ZW0BAAAAEmdldEtleUl0ZW1BY2NGaW5hbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAZmaW5hbF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOcG9zaXRpdmVfZnVuZF8FAAAABGl0ZW0BAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAObmVnYXRpdmVfZnVuZF8FAAAABGl0ZW0BAAAAGWdldEtleUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAQAAABZnZXRLZXlJdGVtRnVuZFBvc2l0aXZlAAAAAQUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAAZZ2V0S2V5SXRlbUFjY0Z1bmROZWdhdGl2ZQAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkBAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3c0NudAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxyZXZpZXdzX2NudF8FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAHcmV2aWV3XwUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAASZ2V0S2V5VHJhbnNmZXJMaW5rAAAAAQAAAARoYXNoCQABLAAAAAICAAAADnRyYW5zZmVyX2xpbmtfBQAAAARoYXNoAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkAASwAAAACCQABLAAAAAIJAQAAABNnZXRLZXlJdGVtQWNjUmV2aWV3AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAIAAAAJX3RleHRfaWQ6BQAAAANjbnQBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQABLAAAAAIJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAlfbW9kZV9pZDoFAAAAA2NudAEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RpZXIAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAAEsAAAAAgkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAACV90aWVyX2lkOgUAAAADY250AQAAABtnZXRLZXlJdGVtQWNjVm90ZVJldmlld1RleHQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAAC192b3RlcmV2aWV3AQAAABxnZXRLZXlJdGVtQWNjV2hhbGVSZXZpZXdUZXh0AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAxfd2hhbGVyZXZpZXcBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOYnV5b3V0X2Ftb3VudF8FAAAABGl0ZW0BAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl3aW5uaW5nc18FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFWdldEtleUZyZWVJbnZpdGVDb3VudAAAAAACAAAAEWZyZWVfaW52aXRlX2NvdW50AQAAABVnZXRLZXlGcmVlSW52aXRlQmxvY2sAAAAAAgAAABFmcmVlX2ludml0ZV9ibG9jawEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RSZWYAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlXaGl0ZWxpc3RSZWYAAAABBQAAAAdhY2NvdW50AQAAABdnZXRWYWx1ZVdoaXRlbGlzdFN0YXR1cwAAAAEAAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAAB2FjY291bnQBAAAAD2dldFZhbHVlQmFsYW5jZQAAAAEAAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAADWdldEtleUJhbGFuY2UAAAABBQAAAAdhY2NvdW50AQAAABRnZXRWYWx1ZVdoaXRlbGlzdEJpbwAAAAEAAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEmdldEtleVdoaXRlbGlzdEJpbwAAAAEFAAAAB2FjY291bnQBAAAAFmdldFZhbHVlV2hpdGVsaXN0QmxvY2sAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABRnZXRLZXlXaGl0ZWxpc3RCbG9jawAAAAEFAAAAB2FjY291bnQBAAAAEmdldFZhbHVlSXRlbUF1dGhvcgAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEGdldEtleUl0ZW1BdXRob3IAAAABBQAAAARpdGVtAQAAABFnZXRWYWx1ZUl0ZW1CbG9jawAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldEtleUl0ZW1CbG9jawAAAAEFAAAABGl0ZW0BAAAAHGdldFZhbHVlSXRlbVZvdGluZ0V4cGlyYXRpb24AAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABpnZXRLZXlJdGVtVm90aW5nRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAEGdldFZhbHVlSXRlbUJhbmsAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA5nZXRLZXlJdGVtQmFuawAAAAEFAAAABGl0ZW0BAAAAEmdldFZhbHVlSXRlbVN0YXR1cwAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtAQAAABBnZXRWYWx1ZUl0ZW1EYXRhAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAOZ2V0S2V5SXRlbURhdGEAAAABBQAAAARpdGVtAQAAABtnZXRWYWx1ZUl0ZW1Dcm93ZEV4cGlyYXRpb24AAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtV2hhbGVFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAZZ2V0S2V5SXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAFGdldFZhbHVlSXRlbU5Db21taXRzAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbU5Db21taXRzAAAAAQUAAAAEaXRlbQEAAAAVZ2V0VmFsdWVJdGVtQWNjQ29tbWl0AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABNnZXRLZXlJdGVtQWNjQ29tbWl0AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAVZ2V0VmFsdWVJdGVtQWNjUmV2ZWFsAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABNnZXRLZXlJdGVtQWNjUmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAUZ2V0VmFsdWVJdGVtVm90ZXNZZXMAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRLZXlJdGVtVm90ZXNZZXMAAAABBQAAAARpdGVtAQAAABNnZXRWYWx1ZUl0ZW1Wb3Rlc05vAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAARZ2V0S2V5SXRlbVZvdGVzTm8AAAABBQAAAARpdGVtAQAAABRnZXRWYWx1ZUl0ZW1BY2NGaW5hbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbUFjY0ZpbmFsAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAYZ2V0VmFsdWVJdGVtRnVuZFBvc2l0aXZlAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAWZ2V0S2V5SXRlbUZ1bmRQb3NpdGl2ZQAAAAEFAAAABGl0ZW0BAAAAGGdldFZhbHVlSXRlbUZ1bmROZWdhdGl2ZQAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1GdW5kTmVnYXRpdmUAAAABBQAAAARpdGVtAQAAABtnZXRWYWx1ZUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1BY2NGdW5kUG9zaXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABtnZXRWYWx1ZUl0ZW1BY2NGdW5kTmVnYXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1BY2NGdW5kTmVnYXRpdmUAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdzQ250AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3c0NudAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAGWdldFZhbHVlSXRlbUFjY1Jldmlld1RleHQAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGV4dAAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAAA2NudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3TW9kZQAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdNb2RlAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAADY250AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdUaWVyAAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RpZXIAAAADBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAANjbnQBAAAAGGdldFZhbHVlSXRlbUJ1eW91dEFtb3VudAAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABBQAAAARpdGVtAQAAABdnZXRWYWx1ZUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5SXRlbUFjY1dpbm5pbmdzAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAAAAAALV0hJVEVMSVNURUQCAAAACnJlZ2lzdGVyZWQAAAAAB0lOVklURUQCAAAAB2ludml0ZWQAAAAABVdIQUxFAgAAAAV3aGFsZQAAAAALU1BFTkRJTlZJVEUCAAAADHNwZW5kX2ludml0ZQAAAAAGQ09NTUlUAgAAAA12b3RpbmdfY29tbWl0AAAAAAZSRVZFQUwCAAAADXZvdGluZ19yZXZlYWwAAAAACEZFQVRVUkVEAgAAAAhmZWF0dXJlZAAAAAAIREVMSVNURUQCAAAACGRlbGlzdGVkAAAAAAdDQVNIT1VUAgAAAAdjYXNob3V0AAAAAAZCVVlPVVQCAAAABmJ1eW91dAAAAAAIRklOSVNIRUQCAAAACGZpbmlzaGVkAAAAAAdDTEFJTUVEAgAAAAdjbGFpbWVkAAAAAAhQT1NJVElWRQIAAAAIcG9zaXRpdmUAAAAACE5FR0FUSVZFAgAAAAhuZWdhdGl2ZQAAAAAHR0VORVNJUwIAAAAjM1A4RnZ5MXlEd05IdlZyYWJlNGVrNWI5ZEF3eEZqREtWN1IAAAAABUFETUlOAgAAACMzUDlORHh0OVk2ZVBmTTloa1F5c2dTdmJISnZpaHI1NloxOAAAAAAETEFCUwIAAAAjM1AzTVVDdkpqdmlKYXhNVWU3NDNMVmV6M3FUaGJMN1U4dVAAAAAABlZPVEVSUwAAAAAAAAAAAwAAAAAGUVVPUlVNAAAAAAAAAAACAAAAAAVUSUVSUwkABEwAAAACCQAAaAAAAAIAAAAAAAAAAAMAAAAAAAX14QAJAARMAAAAAgkAAGgAAAACAAAAAAAAAAAKAAAAAAAF9eEACQAETAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAABfXhAAkABEwAAAACCQAAaAAAAAIAAAAAAAAAASwAAAAAAAX14QAJAARMAAAAAgkAAGgAAAACAAAAAAAAAAPoAAAAAAAF9eEABQAAAANuaWwAAAAACkxJU1RJTkdGRUUJAABoAAAAAgAAAAAAAAAAAQAAAAAABfXhAAAAAAAHVk9URUJFVAkAAGgAAAACAAAAAAAAAAABAAAAAAAF9eEAAAAAAAtCTE9DS1NJTkRBWQAAAAAAAAAFoAAAAAAKTVVMVElQTElFUgAAAAAAAAAAlgAAAAANTUFYRlJFRUlOVklURQAAAAAAAAAAZAAAAAAJSU5WSVRFRkVFAAAAAAAAB6EgAAAAAA9mcmVlSW52aXRlQ291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlGcmVlSW52aXRlQ291bnQAAAAAAAAAAA9mcmVlSW52aXRlQmxvY2sJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABVnZXRLZXlGcmVlSW52aXRlQmxvY2sAAAAAAAAADwAAAAFpAQAAAAppbnZpdGV1c2VyAAAAAgAAAApuZXdhY2NvdW50AAAABGRhdGEEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAJbmV3c3RhdHVzCQEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAApuZXdhY2NvdW50BAAAAApjdXJyc3RhdHVzCQEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AwMJAAAAAAAAAgUAAAAJbmV3c3RhdHVzBQAAAAtXSElURUxJU1RFRAYJAAAAAAAAAgUAAAAJbmV3c3RhdHVzBQAAAAVXSEFMRQkAAAIAAAABAgAAACBVc2VyIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZAMDAwkBAAAAAiE9AAAAAgUAAAAKY3VycnN0YXR1cwUAAAALV0hJVEVMSVNURUQJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAAB0dFTkVTSVMHCQEAAAACIT0AAAACBQAAAApjdXJyc3RhdHVzBQAAAAVXSEFMRQcJAAACAAAAAQkAASwAAAACAgAAACxZb3VyIGFjY291bnQgc2hvdWxkIGJlIHdoaXRlbGlzdGVkLiBzdGF0dXM6IAUAAAAKY3VycnN0YXR1cwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEtleVdoaXRlbGlzdFJlZgAAAAEFAAAACm5ld2FjY291bnQFAAAAB2FjY291bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAApuZXdhY2NvdW50BQAAAARkYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAKbmV3YWNjb3VudAUAAAAHSU5WSVRFRAUAAAADbmlsAAAAAWkBAAAADHNpZ251cGJ5bGluawAAAAMAAAAEaGFzaAAAAARkYXRhAAAABHR5cGUEAAAAB2FjY291bnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAGc3RhdHVzCQEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAARoYXNoAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAdJTlZJVEVECQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAChSZWZlcnJhbCBpbnZpdGUgbmVlZGVkLiBDdXJyZW50IHN0YXR1czogBQAAAAZzdGF0dXMCAAAABiwga2V5OgkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAABGhhc2gCAAAACiwgYWNjb3VudDoFAAAABGhhc2gJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0S2V5V2hpdGVsaXN0QmlvAAAAAQUAAAAHYWNjb3VudAUAAAAEZGF0YQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFGdldEtleVdoaXRlbGlzdEJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAHYWNjb3VudAMJAAAAAAAAAgUAAAAEdHlwZQUAAAAFV0hBTEUFAAAABVdIQUxFBQAAAAtXSElURUxJU1RFRAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVdoaXRlbGlzdFN0YXR1cwAAAAEFAAAABGhhc2gFAAAAC1NQRU5ESU5WSVRFCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAASZ2V0S2V5V2hpdGVsaXN0UmVmAAAAAQUAAAAHYWNjb3VudAkBAAAAFGdldFZhbHVlV2hpdGVsaXN0UmVmAAAAAQUAAAAEaGFzaAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleUZyZWVJbnZpdGVCbG9jawAAAAADCQAAZgAAAAIFAAAABmhlaWdodAUAAAAPZnJlZUludml0ZUJsb2NrCQAAZAAAAAIFAAAABmhlaWdodAUAAAALQkxPQ0tTSU5EQVkFAAAAD2ZyZWVJbnZpdGVCbG9jawkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleUZyZWVJbnZp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", "chainId": 87, "height": 1741473, "spentComplexity": 0 } View: original | compacted Prev: 8JnnV3Q9tgshp9pc33FRtP5fzJt8HrhCzgUydsFRVXDT Next: DBttMGutThxvntqv6zsryd4JmorBdVWCC3evF4pbciTC Diff:
OldNewDifferences
5858 func getKeyItemData (item) = ("datajson_" + item)
5959
6060
61-func getKeyFreeItemAuthor (item) = ("free_author_" + item)
62-
63-
64-func getKeyFreeItemBlock (item) = ("free_block_" + item)
65-
66-
67-func getKeyFreeItemStatus (item) = ("free_status_" + item)
68-
69-
70-func getKeyFreeItemData (item) = ("free_datajson_" + item)
71-
72-
73-func getKeyFreeItemContest (item) = ("free_contest_" + item)
74-
75-
7661 func getKeyContestData (item) = ("contest_datajson_" + item)
77-
78-
79-func getKeyContestType (item) = ("contest_type_" + item)
8062
8163
8264 func getKeyItemCrowdExpiration (item) = ("expiration_one_" + item)
124106 func getKeyItemAccReview (item,account) = ((("review_" + item) + "_") + account)
125107
126108
109+func getKeyTransferLink (hash) = ("transfer_link_" + hash)
110+
111+
127112 func getKeyItemAccReviewText (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_text_id:") + cnt)
128113
129114
143128
144129
145130 func getKeyItemAccWinnings (item,account) = ((("winnings_" + item) + "_") + account)
131+
132+
133+func getKeyFreeInviteCount () = "free_invite_count"
134+
135+
136+func getKeyFreeInviteBlock () = "free_invite_block"
146137
147138
148139 func getValueWhitelistRef (account) = getStrByKey(getKeyWhitelistRef(account))
176167
177168
178169 func getValueItemData (item) = getStrByKey(getKeyItemData(item))
179-
180-
181-func getValueFreeItemAuthor (item) = getStrByKey(getKeyFreeItemAuthor(item))
182-
183-
184-func getValueFreeItemBlock (item) = getNumberByKey(getKeyFreeItemBlock(item))
185-
186-
187-func getValueFreeItemStatus (item) = getStrByKey(getKeyFreeItemStatus(item))
188-
189-
190-func getValueFreeItemData (item) = getStrByKey(getKeyFreeItemData(item))
191-
192-
193-func getValueFreeItemContest (item) = getStrByKey(getKeyFreeItemContest(item))
194170
195171
196172 func getValueItemCrowdExpiration (item) = getNumberByKey(getKeyItemCrowdExpiration(item))
247223 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
248224
249225
250-func getContestType (item) = getStrByKey(getKeyContestType(item))
251-
252-
253-let NEW = "new"
254-
255-let DONATED = "donated"
256-
257-let REJECTED = "rejected"
258-
259-let OWNERDONATE = "owner_donate"
260-
261-let USERSDONATE = "users_donate"
262-
263226 let WHITELISTED = "registered"
264227
265228 let INVITED = "invited"
292255
293256 let ADMIN = "3P9NDxt9Y6ePfM9hkQysgSvbHJvihr56Z18"
294257
258+let LABS = "3P3MUCvJjviJaxMUe743LVez3qThbL7U8uP"
259+
295260 let VOTERS = 3
296261
297262 let QUORUM = 2
302267
303268 let VOTEBET = (1 * 100000000)
304269
270+let BLOCKSINDAY = 1440
271+
305272 let MULTIPLIER = 150
306273
307-let SplitDataSymbol = "+"
274+let MAXFREEINVITE = 100
275+
276+let INVITEFEE = 500000
277+
278+let freeInviteCount = getNumberByKey(getKeyFreeInviteCount())
279+
280+let freeInviteBlock = getNumberByKey(getKeyFreeInviteBlock())
308281
309282 @Callable(i)
310283 func inviteuser (newaccount,data) = {
332305 let status = getValueWhitelistStatus(hash)
333306 if ((status != INVITED))
334307 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(hash)) + ", account:") + hash))
335- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
308+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
336309 then WHALE
337- else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash))])
310+ else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
311+ then (height + BLOCKSINDAY)
312+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
313+ then MAXFREEINVITE
314+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
315+ then (freeInviteCount > 0)
316+ else false)
317+ then INVITEFEE
318+ else 0, unit)]))
338319 }
339320
340321
375356
376357
377358 @Callable(i)
378-func contestAddOrUpdate (item,data,type) = {
359+func contestAddOrUpdate (item,data) = {
379360 let account = toBase58String(i.caller.bytes)
380- let typeContest = if ((type == OWNERDONATE))
381- then OWNERDONATE
382- else USERSDONATE
383361 if ((account != ADMIN))
384362 then throw("You're not admin")
385- else WriteSet([DataEntry(getKeyContestData(item), data), DataEntry(getKeyContestType(item), typeContest)])
363+ else WriteSet([DataEntry(getKeyContestData(item), data)])
386364 }
387365
388366
393371 if ((0 >= amount))
394372 then throw("Not enough balance")
395373 else ScriptResult(WriteSet([DataEntry(getKeyBalance(address), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(address), amount, unit)]))
396- }
397-
398-
399-
400-@Callable(i)
401-func addFreeItem (item,data,contestId) = {
402- let type = getContestType(contestId)
403- if ((type == USERSDONATE))
404- then throw(("Contest type is " + USERSDONATE))
405- else if ((getValueItemAuthor(item) != NONE))
406- then throw("Item already exist")
407- else WriteSet([DataEntry(getKeyFreeItemAuthor(item), toString(i.caller)), DataEntry(getKeyFreeItemBlock(item), height), DataEntry(getKeyFreeItemStatus(item), NEW), DataEntry(getKeyFreeItemData(item), data), DataEntry(getKeyFreeItemContest(item), contestId)])
408- }
409-
410-
411-
412-@Callable(i)
413-func updateFreeItem (item,data) = {
414- let status = getValueFreeItemStatus(item)
415- if ((status != NEW))
416- then throw(("Status is not " + NEW))
417- else WriteSet([DataEntry(getKeyFreeItemData(item), data)])
418- }
419-
420-
421-
422-@Callable(i)
423-func rejectFreeItem (item) = {
424- let status = getValueFreeItemStatus(item)
425- let contestOwner = toString(i.caller)
426- if ((contestOwner != ADMIN))
427- then throw("You're not admin")
428- else if ((status != NEW))
429- then throw(("Status is not " + NEW))
430- else WriteSet([DataEntry(getKeyFreeItemStatus(item), REJECTED)])
431- }
432-
433-
434-
435-@Callable(i)
436-func donateFreeItem (item) = {
437- let status = getValueFreeItemStatus(item)
438- let author = getValueFreeItemAuthor(item)
439- let pmt = extract(i.payment)
440- let contestOwner = toString(i.caller)
441- if ((contestOwner != ADMIN))
442- then throw("You're not admin")
443- else if (isDefined(pmt.assetId))
444- then throw("can use waves only at the moment")
445- else if ((pmt.amount == 0))
446- then throw("invalid amount")
447- else if ((status != NEW))
448- then throw(("Status is not " + NEW))
449- else WriteSet([DataEntry(getKeyFreeItemStatus(item), DONATED), DataEntry(getKeyBalance(author), (getValueBalance(author) + pmt.amount))])
450374 }
451375
452376
476400 func reportProject (item,data) = {
477401 let account = toBase58String(i.caller.bytes)
478402 WriteSet([DataEntry(getKeyItemAccReportData(item, account), data)])
403+ }
404+
405+
406+
407+@Callable(i)
408+func labsdonate (item,review) = {
409+ let account = toBase58String(i.caller.bytes)
410+ let pmt = extract(i.payment)
411+ if (isDefined(pmt.assetId))
412+ then throw("can use waves only at the moment")
413+ else if ((account != LABS))
414+ then throw("labs donation is allowed only for waves labs")
415+ else if ((getValueItemStatus(item) != BUYOUT))
416+ then throw("Investement has already done")
417+ else {
418+ let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
419+ let newpositivefund = (getValueItemFundPositive(item) + pmt.amount)
420+ WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + pmt.amount)), DataEntry(getKeyItemFundPositive(item), newpositivefund), DataEntry(getKeyItemAccReviewText(item, account, toString(cnt)), review), DataEntry(getKeyItemAccReviewMode(item, account, toString(cnt)), POSITIVE), DataEntry(getKeyItemAccReviewTier(item, account, toString(cnt)), 5), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + pmt.amount)), DataEntry(getKeyItemStatus(item), CASHOUT)])
421+ }
422+ }
423+
424+
425+
426+@Callable(i)
427+func changeStatus (item) = {
428+ let account = toBase58String(i.caller.bytes)
429+ if ((account != LABS))
430+ then throw("labs change is allowed only for waves labs")
431+ else WriteSet([DataEntry(getKeyItemStatus(item), CASHOUT)])
479432 }
480433
481434
519472
520473
521474 @Callable(i)
522-func whale (item,review) = {
475+func whale (item) = {
523476 let account = toBase58String(i.caller.bytes)
524477 let pmt = extract(i.payment)
525478 if (isDefined(pmt.assetId))
526479 then throw("can use waves only at the moment")
527- else if ((getValueItemStatus(item) != FEATURED))
528- then throw("The project hasn't accepted by community")
529- else if ((getValueItemCrowdExpiration(item) > height))
530- then throw("The time for crowdfunding has not expired yet")
531- else if ((height > getValueItemWhaleExpiration(item)))
532- then throw("The time for grant has expired")
533- else if ((getValueItemStatus(item) == BUYOUT))
534- then throw("Investement has already done")
535- else if ((((getValueItemFundPositive(item) * MULTIPLIER) / 100) > pmt.amount))
536- then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
537- else {
538- let bayoutAmount = ((getValueItemFundPositive(item) * MULTIPLIER) / 100)
539- let donateAmount = (pmt.amount - bayoutAmount)
540- WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyItemAccWhaleReviewText(item, account), review), DataEntry(getKeyBalance(getValueItemAuthor(item)), ((getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item)) + donateAmount)), DataEntry(getKeyItemBuyoutAmount(item), bayoutAmount)])
541- }
480+ else if ((account != LABS))
481+ then throw("labs donation is allowed only for waves labs")
482+ else if ((getValueItemStatus(item) != FEATURED))
483+ then throw("The project hasn't accepted by community")
484+ else if ((getValueItemCrowdExpiration(item) > height))
485+ then throw("The time for crowdfunding has not expired yet")
486+ else if ((height > getValueItemWhaleExpiration(item)))
487+ then throw("The time for grant has expired")
488+ else if ((getValueItemStatus(item) == BUYOUT))
489+ then throw("Investement has already done")
490+ else if ((pmt.amount != ((getValueItemFundPositive(item) * MULTIPLIER) / 100)))
491+ then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
492+ else WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item))), DataEntry(getKeyItemBuyoutAmount(item), pmt.amount), DataEntry(getKeyItemAccFinal(item, getValueItemAuthor(item)), CLAIMED)])
542493 }
543494
544495
552503 let iscrowdf = if ((status != BUYOUT))
553504 then 1
554505 else 0
555- let positivefund = getValueItemFundPositive(item)
506+ let positivefund = (getValueItemFundPositive(item) - getValueItemAccFundPositive(item, LABS))
556507 let negativefund = getValueItemFundNegative(item)
557508 let share = (((isbayout * (getValueItemAccFundPositive(item, account) * 100)) / (if ((0 >= positivefund))
558509 then 1
563514 let betprofit = ((isbayout * ((share * negativefund) / 100)) + (iscrowdf * ((share * (if ((positivefund > tmpnegwin))
564515 then tmpnegwin
565516 else positivefund)) / 100)))
566- let roiprofit = (isbayout * ((share * getValueItemBuyoutAmount(item)) / 100))
567- let authorprofit = (((if ((getValueItemAuthor(item) == account))
517+ let roiprofit = (isbayout * ((getValueItemAccFundPositive(item, account) * MULTIPLIER) / 100))
518+ let authorprofit = ((iscrowdf * (if ((getValueItemAuthor(item) == account))
568519 then 1
569- else 0) * positivefund) * (if ((status != BUYOUT))
570- then 1
520+ else 0)) * (if ((positivefund > tmpnegwin))
521+ then (positivefund - tmpnegwin)
571522 else 0))
572- if ((status == DELISTED))
573- then throw("The project hasn't accepted by community")
574- else if ((status == CASHOUT))
575- then throw("Status is cashout")
576- else if ((getValueItemAccFinal(item, account) == CLAIMED))
577- then throw("Status is claimed")
578- else if (if ((share == 0))
579- then (authorprofit == 0)
580- else false)
581- then throw("The share equals zero")
582- else if (if ((status != BUYOUT))
583- then (getValueItemWhaleExpiration(item) >= height)
523+ if ((toString(i.caller) != LABS))
524+ then throw("caller error")
525+ else if ((status == DELISTED))
526+ then throw("The project hasn't accepted by community")
527+ else if ((account == LABS))
528+ then throw("account error")
529+ else if ((getValueItemAccFinal(item, account) == CLAIMED))
530+ then throw("Status is claimed")
531+ else if (if (if ((roiprofit == 0))
532+ then (betprofit == 0)
584533 else false)
585- then throw("The time for grant has not expired yet")
586- else if ((0 >= (positivefund + negativefund)))
587- then throw("The campaign wasn't active")
588- else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemStatus(item), if ((authorprofit > 0))
589- then CASHOUT
590- else status), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
534+ then (authorprofit == 0)
535+ else false)
536+ then throw("The share equals zero")
537+ else if (if ((status != BUYOUT))
538+ then (getValueItemWhaleExpiration(item) >= height)
539+ else false)
540+ then throw("The time for grant has not expired yet")
541+ else if ((0 >= (positivefund + negativefund)))
542+ then throw("The campaign wasn't active")
543+ else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
591544 }
592545
593546
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
61-func getKeyFreeItemAuthor (item) = ("free_author_" + item)
62-
63-
64-func getKeyFreeItemBlock (item) = ("free_block_" + item)
65-
66-
67-func getKeyFreeItemStatus (item) = ("free_status_" + item)
68-
69-
70-func getKeyFreeItemData (item) = ("free_datajson_" + item)
71-
72-
73-func getKeyFreeItemContest (item) = ("free_contest_" + item)
74-
75-
7661 func getKeyContestData (item) = ("contest_datajson_" + item)
77-
78-
79-func getKeyContestType (item) = ("contest_type_" + item)
8062
8163
8264 func getKeyItemCrowdExpiration (item) = ("expiration_one_" + item)
8365
8466
8567 func getKeyItemWhaleExpiration (item) = ("expiration_two_" + item)
8668
8769
8870 func getKeyItemNCommits (item) = ("ncommits_" + item)
8971
9072
9173 func getKeyItemAccReportData (item,account) = ((("report_" + item) + "_") + account)
9274
9375
9476 func getKeyItemAccCommit (item,account) = ((("commit_" + item) + "_") + account)
9577
9678
9779 func getKeyItemAccReveal (item,account) = ((("reveal_" + item) + "_") + account)
9880
9981
10082 func getKeyItemVotesYes (item) = ("cnt_yes_" + item)
10183
10284
10385 func getKeyItemVotesNo (item) = ("cnt_no_" + item)
10486
10587
10688 func getKeyItemAccFinal (item,account) = ((("final_" + item) + "_") + account)
10789
10890
10991 func getKeyItemFundPositive (item) = ("positive_fund_" + item)
11092
11193
11294 func getKeyItemFundNegative (item) = ("negative_fund_" + item)
11395
11496
11597 func getKeyItemAccFundPositive (item,account) = ((getKeyItemFundPositive(item) + "_") + account)
11698
11799
118100 func getKeyItemAccFundNegative (item,account) = ((getKeyItemFundNegative(item) + "_") + account)
119101
120102
121103 func getKeyItemAccReviewsCnt (item,account) = ((("reviews_cnt_" + item) + "_") + account)
122104
123105
124106 func getKeyItemAccReview (item,account) = ((("review_" + item) + "_") + account)
125107
126108
109+func getKeyTransferLink (hash) = ("transfer_link_" + hash)
110+
111+
127112 func getKeyItemAccReviewText (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_text_id:") + cnt)
128113
129114
130115 func getKeyItemAccReviewMode (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_mode_id:") + cnt)
131116
132117
133118 func getKeyItemAccReviewTier (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_tier_id:") + cnt)
134119
135120
136121 func getKeyItemAccVoteReviewText (item,account) = (getKeyItemAccReview(item, account) + "_votereview")
137122
138123
139124 func getKeyItemAccWhaleReviewText (item,account) = (getKeyItemAccReview(item, account) + "_whalereview")
140125
141126
142127 func getKeyItemBuyoutAmount (item) = ("buyout_amount_" + item)
143128
144129
145130 func getKeyItemAccWinnings (item,account) = ((("winnings_" + item) + "_") + account)
131+
132+
133+func getKeyFreeInviteCount () = "free_invite_count"
134+
135+
136+func getKeyFreeInviteBlock () = "free_invite_block"
146137
147138
148139 func getValueWhitelistRef (account) = getStrByKey(getKeyWhitelistRef(account))
149140
150141
151142 func getValueWhitelistStatus (account) = getStrByKey(getKeyWhitelistStatus(account))
152143
153144
154145 func getValueBalance (account) = getNumberByKey(getKeyBalance(account))
155146
156147
157148 func getValueWhitelistBio (account) = getStrByKey(getKeyWhitelistBio(account))
158149
159150
160151 func getValueWhitelistBlock (account) = getStrByKey(getKeyWhitelistBlock(account))
161152
162153
163154 func getValueItemAuthor (item) = getStrByKey(getKeyItemAuthor(item))
164155
165156
166157 func getValueItemBlock (item) = getNumberByKey(getKeyItemBlock(item))
167158
168159
169160 func getValueItemVotingExpiration (item) = getNumberByKey(getKeyItemVotingExpiration(item))
170161
171162
172163 func getValueItemBank (item) = getNumberByKey(getKeyItemBank(item))
173164
174165
175166 func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
176167
177168
178169 func getValueItemData (item) = getStrByKey(getKeyItemData(item))
179-
180-
181-func getValueFreeItemAuthor (item) = getStrByKey(getKeyFreeItemAuthor(item))
182-
183-
184-func getValueFreeItemBlock (item) = getNumberByKey(getKeyFreeItemBlock(item))
185-
186-
187-func getValueFreeItemStatus (item) = getStrByKey(getKeyFreeItemStatus(item))
188-
189-
190-func getValueFreeItemData (item) = getStrByKey(getKeyFreeItemData(item))
191-
192-
193-func getValueFreeItemContest (item) = getStrByKey(getKeyFreeItemContest(item))
194170
195171
196172 func getValueItemCrowdExpiration (item) = getNumberByKey(getKeyItemCrowdExpiration(item))
197173
198174
199175 func getValueItemWhaleExpiration (item) = getNumberByKey(getKeyItemWhaleExpiration(item))
200176
201177
202178 func getValueItemNCommits (item) = getNumberByKey(getKeyItemNCommits(item))
203179
204180
205181 func getValueItemAccCommit (item,account) = getStrByKey(getKeyItemAccCommit(item, account))
206182
207183
208184 func getValueItemAccReveal (item,account) = getStrByKey(getKeyItemAccReveal(item, account))
209185
210186
211187 func getValueItemVotesYes (item) = getNumberByKey(getKeyItemVotesYes(item))
212188
213189
214190 func getValueItemVotesNo (item) = getNumberByKey(getKeyItemVotesNo(item))
215191
216192
217193 func getValueItemAccFinal (item,account) = getStrByKey(getKeyItemAccFinal(item, account))
218194
219195
220196 func getValueItemFundPositive (item) = getNumberByKey(getKeyItemFundPositive(item))
221197
222198
223199 func getValueItemFundNegative (item) = getNumberByKey(getKeyItemFundNegative(item))
224200
225201
226202 func getValueItemAccFundPositive (item,account) = getNumberByKey(getKeyItemAccFundPositive(item, account))
227203
228204
229205 func getValueItemAccFundNegative (item,account) = getNumberByKey(getKeyItemAccFundNegative(item, account))
230206
231207
232208 func getValueItemAccReviewsCnt (item,account) = getNumberByKey(getKeyItemAccReviewsCnt(item, account))
233209
234210
235211 func getValueItemAccReviewText (item,account,cnt) = getStrByKey(getKeyItemAccReviewText(item, account, cnt))
236212
237213
238214 func getValueItemAccReviewMode (item,account,cnt) = getStrByKey(getKeyItemAccReviewMode(item, account, cnt))
239215
240216
241217 func getValueItemAccReviewTier (item,account,cnt) = getNumberByKey(getKeyItemAccReviewTier(item, account, cnt))
242218
243219
244220 func getValueItemBuyoutAmount (item) = getNumberByKey(getKeyItemBuyoutAmount(item))
245221
246222
247223 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
248224
249225
250-func getContestType (item) = getStrByKey(getKeyContestType(item))
251-
252-
253-let NEW = "new"
254-
255-let DONATED = "donated"
256-
257-let REJECTED = "rejected"
258-
259-let OWNERDONATE = "owner_donate"
260-
261-let USERSDONATE = "users_donate"
262-
263226 let WHITELISTED = "registered"
264227
265228 let INVITED = "invited"
266229
267230 let WHALE = "whale"
268231
269232 let SPENDINVITE = "spend_invite"
270233
271234 let COMMIT = "voting_commit"
272235
273236 let REVEAL = "voting_reveal"
274237
275238 let FEATURED = "featured"
276239
277240 let DELISTED = "delisted"
278241
279242 let CASHOUT = "cashout"
280243
281244 let BUYOUT = "buyout"
282245
283246 let FINISHED = "finished"
284247
285248 let CLAIMED = "claimed"
286249
287250 let POSITIVE = "positive"
288251
289252 let NEGATIVE = "negative"
290253
291254 let GENESIS = "3P8Fvy1yDwNHvVrabe4ek5b9dAwxFjDKV7R"
292255
293256 let ADMIN = "3P9NDxt9Y6ePfM9hkQysgSvbHJvihr56Z18"
294257
258+let LABS = "3P3MUCvJjviJaxMUe743LVez3qThbL7U8uP"
259+
295260 let VOTERS = 3
296261
297262 let QUORUM = 2
298263
299264 let TIERS = [(3 * 100000000), (10 * 100000000), (100 * 100000000), (300 * 100000000), (1000 * 100000000)]
300265
301266 let LISTINGFEE = (1 * 100000000)
302267
303268 let VOTEBET = (1 * 100000000)
304269
270+let BLOCKSINDAY = 1440
271+
305272 let MULTIPLIER = 150
306273
307-let SplitDataSymbol = "+"
274+let MAXFREEINVITE = 100
275+
276+let INVITEFEE = 500000
277+
278+let freeInviteCount = getNumberByKey(getKeyFreeInviteCount())
279+
280+let freeInviteBlock = getNumberByKey(getKeyFreeInviteBlock())
308281
309282 @Callable(i)
310283 func inviteuser (newaccount,data) = {
311284 let account = toBase58String(i.caller.bytes)
312285 let newstatus = getValueWhitelistStatus(newaccount)
313286 let currstatus = getValueWhitelistStatus(account)
314287 if (if ((newstatus == WHITELISTED))
315288 then true
316289 else (newstatus == WHALE))
317290 then throw("User has already been registered")
318291 else if (if (if ((currstatus != WHITELISTED))
319292 then (account != GENESIS)
320293 else false)
321294 then (currstatus != WHALE)
322295 else false)
323296 then throw(("Your account should be whitelisted. status: " + currstatus))
324297 else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
325298 }
326299
327300
328301
329302 @Callable(i)
330303 func signupbylink (hash,data,type) = {
331304 let account = toBase58String(i.caller.bytes)
332305 let status = getValueWhitelistStatus(hash)
333306 if ((status != INVITED))
334307 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(hash)) + ", account:") + hash))
335- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
308+ else ScriptResult(WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
336309 then WHALE
337- else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash))])
310+ else WHITELISTED), DataEntry(getKeyWhitelistStatus(hash), SPENDINVITE), DataEntry(getKeyWhitelistRef(account), getValueWhitelistRef(hash)), DataEntry(getKeyFreeInviteBlock(), if ((height > freeInviteBlock))
311+ then (height + BLOCKSINDAY)
312+ else freeInviteBlock), DataEntry(getKeyFreeInviteCount(), if ((height > freeInviteBlock))
313+ then MAXFREEINVITE
314+ else (freeInviteCount - 1))]), TransferSet([ScriptTransfer(addressFromStringValue(account), if (if ((wavesBalance(addressFromStringValue(account)) == 0))
315+ then (freeInviteCount > 0)
316+ else false)
317+ then INVITEFEE
318+ else 0, unit)]))
338319 }
339320
340321
341322
342323 @Callable(i)
343324 func signup (data,type) = {
344325 let account = toBase58String(i.caller.bytes)
345326 let status = getValueWhitelistStatus(account)
346327 if ((status == NONE))
347328 then throw(((((("Referral invite needed. Current status: " + status) + ", key:") + getKeyWhitelistStatus(account)) + ", account:") + account))
348329 else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
349330 then WHALE
350331 else WHITELISTED)])
351332 }
352333
353334
354335
355336 @Callable(i)
356337 func userupdate (data,type) = {
357338 let account = toBase58String(i.caller.bytes)
358339 if ((getKeyWhitelistBio(account) == NONE))
359340 then throw("user not signup")
360341 else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistStatus(account), if ((type == WHALE))
361342 then WHALE
362343 else WHITELISTED)])
363344 }
364345
365346
366347
367348 @Callable(i)
368349 func projupdate (item,data) = {
369350 let account = toBase58String(i.caller.bytes)
370351 if ((getValueItemAuthor(item) != account))
371352 then throw("You're not author")
372353 else WriteSet([DataEntry(getKeyItemData(item), data)])
373354 }
374355
375356
376357
377358 @Callable(i)
378-func contestAddOrUpdate (item,data,type) = {
359+func contestAddOrUpdate (item,data) = {
379360 let account = toBase58String(i.caller.bytes)
380- let typeContest = if ((type == OWNERDONATE))
381- then OWNERDONATE
382- else USERSDONATE
383361 if ((account != ADMIN))
384362 then throw("You're not admin")
385- else WriteSet([DataEntry(getKeyContestData(item), data), DataEntry(getKeyContestType(item), typeContest)])
363+ else WriteSet([DataEntry(getKeyContestData(item), data)])
386364 }
387365
388366
389367
390368 @Callable(i)
391369 func withdraw (address) = {
392370 let amount = getValueBalance(address)
393371 if ((0 >= amount))
394372 then throw("Not enough balance")
395373 else ScriptResult(WriteSet([DataEntry(getKeyBalance(address), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(address), amount, unit)]))
396- }
397-
398-
399-
400-@Callable(i)
401-func addFreeItem (item,data,contestId) = {
402- let type = getContestType(contestId)
403- if ((type == USERSDONATE))
404- then throw(("Contest type is " + USERSDONATE))
405- else if ((getValueItemAuthor(item) != NONE))
406- then throw("Item already exist")
407- else WriteSet([DataEntry(getKeyFreeItemAuthor(item), toString(i.caller)), DataEntry(getKeyFreeItemBlock(item), height), DataEntry(getKeyFreeItemStatus(item), NEW), DataEntry(getKeyFreeItemData(item), data), DataEntry(getKeyFreeItemContest(item), contestId)])
408- }
409-
410-
411-
412-@Callable(i)
413-func updateFreeItem (item,data) = {
414- let status = getValueFreeItemStatus(item)
415- if ((status != NEW))
416- then throw(("Status is not " + NEW))
417- else WriteSet([DataEntry(getKeyFreeItemData(item), data)])
418- }
419-
420-
421-
422-@Callable(i)
423-func rejectFreeItem (item) = {
424- let status = getValueFreeItemStatus(item)
425- let contestOwner = toString(i.caller)
426- if ((contestOwner != ADMIN))
427- then throw("You're not admin")
428- else if ((status != NEW))
429- then throw(("Status is not " + NEW))
430- else WriteSet([DataEntry(getKeyFreeItemStatus(item), REJECTED)])
431- }
432-
433-
434-
435-@Callable(i)
436-func donateFreeItem (item) = {
437- let status = getValueFreeItemStatus(item)
438- let author = getValueFreeItemAuthor(item)
439- let pmt = extract(i.payment)
440- let contestOwner = toString(i.caller)
441- if ((contestOwner != ADMIN))
442- then throw("You're not admin")
443- else if (isDefined(pmt.assetId))
444- then throw("can use waves only at the moment")
445- else if ((pmt.amount == 0))
446- then throw("invalid amount")
447- else if ((status != NEW))
448- then throw(("Status is not " + NEW))
449- else WriteSet([DataEntry(getKeyFreeItemStatus(item), DONATED), DataEntry(getKeyBalance(author), (getValueBalance(author) + pmt.amount))])
450374 }
451375
452376
453377
454378 @Callable(i)
455379 func additem (item,expVoting,expCrowd,expWhale,data) = {
456380 let account = toBase58String(i.caller.bytes)
457381 let pmt = extract(i.payment)
458382 if (isDefined(pmt.assetId))
459383 then throw("can use waves only at the moment")
460384 else if ((pmt.amount != LISTINGFEE))
461385 then throw(((("Please pay exact amount for the listing: " + toString(LISTINGFEE)) + ", actual payment is: ") + toString(pmt.amount)))
462386 else if (!(if (if ((expVoting > 2))
463387 then (expCrowd > expVoting)
464388 else false)
465389 then (expWhale > expCrowd)
466390 else false))
467391 then throw("Incorrect time parameters")
468392 else if ((getValueItemAuthor(item) != NONE))
469393 then throw("Item already exist")
470394 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))])
471395 }
472396
473397
474398
475399 @Callable(i)
476400 func reportProject (item,data) = {
477401 let account = toBase58String(i.caller.bytes)
478402 WriteSet([DataEntry(getKeyItemAccReportData(item, account), data)])
403+ }
404+
405+
406+
407+@Callable(i)
408+func labsdonate (item,review) = {
409+ let account = toBase58String(i.caller.bytes)
410+ let pmt = extract(i.payment)
411+ if (isDefined(pmt.assetId))
412+ then throw("can use waves only at the moment")
413+ else if ((account != LABS))
414+ then throw("labs donation is allowed only for waves labs")
415+ else if ((getValueItemStatus(item) != BUYOUT))
416+ then throw("Investement has already done")
417+ else {
418+ let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
419+ let newpositivefund = (getValueItemFundPositive(item) + pmt.amount)
420+ WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + pmt.amount)), DataEntry(getKeyItemFundPositive(item), newpositivefund), DataEntry(getKeyItemAccReviewText(item, account, toString(cnt)), review), DataEntry(getKeyItemAccReviewMode(item, account, toString(cnt)), POSITIVE), DataEntry(getKeyItemAccReviewTier(item, account, toString(cnt)), 5), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + pmt.amount)), DataEntry(getKeyItemStatus(item), CASHOUT)])
421+ }
422+ }
423+
424+
425+
426+@Callable(i)
427+func changeStatus (item) = {
428+ let account = toBase58String(i.caller.bytes)
429+ if ((account != LABS))
430+ then throw("labs change is allowed only for waves labs")
431+ else WriteSet([DataEntry(getKeyItemStatus(item), CASHOUT)])
479432 }
480433
481434
482435
483436 @Callable(i)
484437 func donate (item,tier,mode,review) = {
485438 let account = toBase58String(i.caller.bytes)
486439 let pmt = extract(i.payment)
487440 if (isDefined(pmt.assetId))
488441 then throw("can use waves only at the moment")
489442 else {
490443 let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
491444 let newnegativefund = (getValueItemFundNegative(item) + ((if ((mode == NEGATIVE))
492445 then 1
493446 else 0) * pmt.amount))
494447 let newpositivefund = (getValueItemFundPositive(item) + ((if ((mode == POSITIVE))
495448 then 1
496449 else 0) * pmt.amount))
497450 if ((getValueItemStatus(item) != FEATURED))
498451 then throw("The project hasn't accepted by community")
499452 else if ((height >= getValueItemCrowdExpiration(item)))
500453 then throw("The time for crowdfunding has expired")
501454 else if ((newnegativefund >= newpositivefund))
502455 then throw("Negative fund can't be higher than positive fund")
503456 else if (if ((mode != POSITIVE))
504457 then (mode != NEGATIVE)
505458 else false)
506459 then throw("Wrong mode parameter")
507460 else if ((getValueItemAuthor(item) == account))
508461 then throw("Can't donate own project")
509462 else if ((pmt.amount != TIERS[(tier - 1)]))
510463 then throw(("The payment must be equal to tier amount: " + toString(TIERS[(tier - 1)])))
511464 else WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + ((if ((mode == POSITIVE))
512465 then 1
513466 else 0) * pmt.amount))), DataEntry(getKeyItemAccFundNegative(item, account), (getValueItemAccFundNegative(item, account) + ((if ((mode == NEGATIVE))
514467 then 1
515468 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)])
516469 }
517470 }
518471
519472
520473
521474 @Callable(i)
522-func whale (item,review) = {
475+func whale (item) = {
523476 let account = toBase58String(i.caller.bytes)
524477 let pmt = extract(i.payment)
525478 if (isDefined(pmt.assetId))
526479 then throw("can use waves only at the moment")
527- else if ((getValueItemStatus(item) != FEATURED))
528- then throw("The project hasn't accepted by community")
529- else if ((getValueItemCrowdExpiration(item) > height))
530- then throw("The time for crowdfunding has not expired yet")
531- else if ((height > getValueItemWhaleExpiration(item)))
532- then throw("The time for grant has expired")
533- else if ((getValueItemStatus(item) == BUYOUT))
534- then throw("Investement has already done")
535- else if ((((getValueItemFundPositive(item) * MULTIPLIER) / 100) > pmt.amount))
536- then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
537- else {
538- let bayoutAmount = ((getValueItemFundPositive(item) * MULTIPLIER) / 100)
539- let donateAmount = (pmt.amount - bayoutAmount)
540- WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyItemAccWhaleReviewText(item, account), review), DataEntry(getKeyBalance(getValueItemAuthor(item)), ((getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item)) + donateAmount)), DataEntry(getKeyItemBuyoutAmount(item), bayoutAmount)])
541- }
480+ else if ((account != LABS))
481+ then throw("labs donation is allowed only for waves labs")
482+ else if ((getValueItemStatus(item) != FEATURED))
483+ then throw("The project hasn't accepted by community")
484+ else if ((getValueItemCrowdExpiration(item) > height))
485+ then throw("The time for crowdfunding has not expired yet")
486+ else if ((height > getValueItemWhaleExpiration(item)))
487+ then throw("The time for grant has expired")
488+ else if ((getValueItemStatus(item) == BUYOUT))
489+ then throw("Investement has already done")
490+ else if ((pmt.amount != ((getValueItemFundPositive(item) * MULTIPLIER) / 100)))
491+ then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
492+ else WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item))), DataEntry(getKeyItemBuyoutAmount(item), pmt.amount), DataEntry(getKeyItemAccFinal(item, getValueItemAuthor(item)), CLAIMED)])
542493 }
543494
544495
545496
546497 @Callable(i)
547498 func claimwinnings (item,account) = {
548499 let status = getValueItemStatus(item)
549500 let isbayout = if ((status == BUYOUT))
550501 then 1
551502 else 0
552503 let iscrowdf = if ((status != BUYOUT))
553504 then 1
554505 else 0
555- let positivefund = getValueItemFundPositive(item)
506+ let positivefund = (getValueItemFundPositive(item) - getValueItemAccFundPositive(item, LABS))
556507 let negativefund = getValueItemFundNegative(item)
557508 let share = (((isbayout * (getValueItemAccFundPositive(item, account) * 100)) / (if ((0 >= positivefund))
558509 then 1
559510 else positivefund)) + ((iscrowdf * (getValueItemAccFundNegative(item, account) * 100)) / (if ((0 >= negativefund))
560511 then 1
561512 else negativefund)))
562513 let tmpnegwin = ((negativefund * MULTIPLIER) / 100)
563514 let betprofit = ((isbayout * ((share * negativefund) / 100)) + (iscrowdf * ((share * (if ((positivefund > tmpnegwin))
564515 then tmpnegwin
565516 else positivefund)) / 100)))
566- let roiprofit = (isbayout * ((share * getValueItemBuyoutAmount(item)) / 100))
567- let authorprofit = (((if ((getValueItemAuthor(item) == account))
517+ let roiprofit = (isbayout * ((getValueItemAccFundPositive(item, account) * MULTIPLIER) / 100))
518+ let authorprofit = ((iscrowdf * (if ((getValueItemAuthor(item) == account))
568519 then 1
569- else 0) * positivefund) * (if ((status != BUYOUT))
570- then 1
520+ else 0)) * (if ((positivefund > tmpnegwin))
521+ then (positivefund - tmpnegwin)
571522 else 0))
572- if ((status == DELISTED))
573- then throw("The project hasn't accepted by community")
574- else if ((status == CASHOUT))
575- then throw("Status is cashout")
576- else if ((getValueItemAccFinal(item, account) == CLAIMED))
577- then throw("Status is claimed")
578- else if (if ((share == 0))
579- then (authorprofit == 0)
580- else false)
581- then throw("The share equals zero")
582- else if (if ((status != BUYOUT))
583- then (getValueItemWhaleExpiration(item) >= height)
523+ if ((toString(i.caller) != LABS))
524+ then throw("caller error")
525+ else if ((status == DELISTED))
526+ then throw("The project hasn't accepted by community")
527+ else if ((account == LABS))
528+ then throw("account error")
529+ else if ((getValueItemAccFinal(item, account) == CLAIMED))
530+ then throw("Status is claimed")
531+ else if (if (if ((roiprofit == 0))
532+ then (betprofit == 0)
584533 else false)
585- then throw("The time for grant has not expired yet")
586- else if ((0 >= (positivefund + negativefund)))
587- then throw("The campaign wasn't active")
588- else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemStatus(item), if ((authorprofit > 0))
589- then CASHOUT
590- else status), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
534+ then (authorprofit == 0)
535+ else false)
536+ then throw("The share equals zero")
537+ else if (if ((status != BUYOUT))
538+ then (getValueItemWhaleExpiration(item) >= height)
539+ else false)
540+ then throw("The time for grant has not expired yet")
541+ else if ((0 >= (positivefund + negativefund)))
542+ then throw("The campaign wasn't active")
543+ else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
591544 }
592545
593546
594547
595548 @Callable(i)
596549 func transfer (account) = {
597550 let pmt = extract(i.payment)
598551 if (isDefined(pmt.assetId))
599552 then throw("can use waves only at the moment")
600553 else TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, unit)])
601554 }
602555
603556

github/deemru/w8io/3ef1775 
134.42 ms