tx · EFnd6Gnt74Qd7ZXFFzDP9RzttDtE9roj8166LAWqGhTu

3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF:  -0.01400000 Waves

2019.06.23 21:22 [555055] smart account 3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF > SELF 0.00000000 Waves

{ "type": 13, "id": "EFnd6Gnt74Qd7ZXFFzDP9RzttDtE9roj8166LAWqGhTu", "fee": 1400000, "feeAssetId": null, "timestamp": 1561314189152, "version": 1, "sender": "3NBB3iv7YDRsD8ZM2Pw2V5eTcsfqh3j2mvF", "senderPublicKey": "9i5FpMUFCwhogG5euZDBZKV6NehQN4xX83qvNr8NWipE", "proofs": [ "3zngR1kozgn7TaEv3KNqfBNQyzmuNZZwhiAiDLetg26i7UXpyPLnjquSk9z2odKBTq2z4SFx614rEV7m1femkh4T" ], "script": "base64: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X2Z1bmRfBQAAAARpdGVtAQAAABZnZXRLZXlJdGVtRnVuZE5lZ2F0aXZlAAAAAQAAAARpdGVtCQABLAAAAAICAAAADm5lZ2F0aXZlX2Z1bmRfBQAAAARpdGVtAQAAABlnZXRLZXlJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQEAAAAWZ2V0S2V5SXRlbUZ1bmRQb3NpdGl2ZQAAAAEFAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAGWdldEtleUl0ZW1BY2NGdW5kTmVnYXRpdmUAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAQAAABZnZXRLZXlJdGVtRnVuZE5lZ2F0aXZlAAAAAQUAAAAEaXRlbQIAAAABXwUAAAAHYWNjb3VudAEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld3NDbnQAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAMcmV2aWV3c19jbnRfBQAAAARpdGVtAgAAAAFfBQAAAAdhY2NvdW50AQAAABNnZXRLZXlJdGVtQWNjUmV2aWV3AAAAAgAAAARpdGVtAAAAB2FjY291bnQJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAB3Jldmlld18FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdUZXh0AAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQABLAAAAAIJAAEsAAAAAgkBAAAAE2dldEtleUl0ZW1BY2NSZXZpZXcAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AgAAAAlfdGV4dF9pZDoFAAAAA2NudAEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld01vZGUAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAAEsAAAAAgkAASwAAAACCQEAAAATZ2V0S2V5SXRlbUFjY1JldmlldwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQCAAAACV9tb2RlX2lkOgUAAAADY250AQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3VGllcgAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkAASwAAAACCQABLAAAAAIJAQAAABNnZXRLZXlJdGVtQWNjUmV2aWV3AAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAIAAAAJX3RpZXJfaWQ6BQAAAANjbnQBAAAAFmdldEtleUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAAEsAAAAAgIAAAAOYnV5b3V0X2Ftb3VudF8FAAAABGl0ZW0BAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAl3aW5uaW5nc18FAAAABGl0ZW0CAAAAAV8FAAAAB2FjY291bnQBAAAAFGdldFZhbHVlV2hpdGVsaXN0UmVmAAAAAQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5V2hpdGVsaXN0UmVmAAAAAQUAAAAHYWNjb3VudAEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AQAAAA9nZXRWYWx1ZUJhbGFuY2UAAAABAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA1nZXRLZXlCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RCaW8AAAABAAAAB2FjY291bnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAAdhY2NvdW50AQAAABZnZXRWYWx1ZVdoaXRlbGlzdEJsb2NrAAAAAQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAUZ2V0S2V5V2hpdGVsaXN0QmxvY2sAAAABBQAAAAdhY2NvdW50AQAAABJnZXRWYWx1ZUl0ZW1BdXRob3IAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtQXV0aG9yAAAAAQUAAAAEaXRlbQEAAAARZ2V0VmFsdWVJdGVtQmxvY2sAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRLZXlJdGVtQmxvY2sAAAABBQAAAARpdGVtAQAAABxnZXRWYWx1ZUl0ZW1Wb3RpbmdFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAaZ2V0S2V5SXRlbVZvdGluZ0V4cGlyYXRpb24AAAABBQAAAARpdGVtAQAAABBnZXRWYWx1ZUl0ZW1CYW5rAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAOZ2V0S2V5SXRlbUJhbmsAAAABBQAAAARpdGVtAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQEAAAAQZ2V0VmFsdWVJdGVtRGF0YQAAAAEAAAAEaXRlbQkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtQ3Jvd2RFeHBpcmF0aW9uAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAZZ2V0S2V5SXRlbUNyb3dkRXhwaXJhdGlvbgAAAAEFAAAABGl0ZW0BAAAAG2dldFZhbHVlSXRlbVdoYWxlRXhwaXJhdGlvbgAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGWdldEtleUl0ZW1XaGFsZUV4cGlyYXRpb24AAAABBQAAAARpdGVtAQAAABRnZXRWYWx1ZUl0ZW1OQ29tbWl0cwAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1OQ29tbWl0cwAAAAEFAAAABGl0ZW0BAAAAFWdldFZhbHVlSXRlbUFjY0NvbW1pdAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAATZ2V0S2V5SXRlbUFjY0NvbW1pdAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAFWdldFZhbHVlSXRlbUFjY1JldmVhbAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAATZ2V0S2V5SXRlbUFjY1JldmVhbAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAFGdldFZhbHVlSXRlbVZvdGVzWWVzAAAAAQAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVZvdGVzWWVzAAAAAQUAAAAEaXRlbQEAAAATZ2V0VmFsdWVJdGVtVm90ZXNObwAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEWdldEtleUl0ZW1Wb3Rlc05vAAAAAQUAAAAEaXRlbQEAAAAUZ2V0VmFsdWVJdGVtQWNjRmluYWwAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAAEmdldEtleUl0ZW1BY2NGaW5hbAAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQBAAAAGGdldFZhbHVlSXRlbUZ1bmRQb3NpdGl2ZQAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldEtleUl0ZW1GdW5kUG9zaXRpdmUAAAABBQAAAARpdGVtAQAAABhnZXRWYWx1ZUl0ZW1GdW5kTmVnYXRpdmUAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRLZXlJdGVtRnVuZE5lZ2F0aXZlAAAAAQUAAAAEaXRlbQEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQWNjRnVuZFBvc2l0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAbZ2V0VmFsdWVJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgAAAARpdGVtAAAAB2FjY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABlnZXRLZXlJdGVtQWNjRnVuZE5lZ2F0aXZlAAAAAgUAAAAEaXRlbQUAAAAHYWNjb3VudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3c0NudAAAAAIAAAAEaXRlbQAAAAdhY2NvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld3NDbnQAAAACBQAAAARpdGVtBQAAAAdhY2NvdW50AQAAABlnZXRWYWx1ZUl0ZW1BY2NSZXZpZXdUZXh0AAAAAwAAAARpdGVtAAAAB2FjY291bnQAAAADY250CQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAXZ2V0S2V5SXRlbUFjY1Jldmlld1RleHQAAAADBQAAAARpdGVtBQAAAAdhY2NvdW50BQAAAANjbnQBAAAAGWdldFZhbHVlSXRlbUFjY1Jldmlld01vZGUAAAADAAAABGl0ZW0AAAAHYWNjb3VudAAAAANjbnQJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABdnZXRLZXlJdGVtQWNjUmV2aWV3TW9kZQAAAAMFAAAABGl0ZW0FAAAAB2FjY291bnQFAAAAA2NudAEAAAAZZ2V0VmFsdWVJdGVtQWNjUmV2aWV3VGllcgAAAAMAAAAEaXRlbQAAAAdhY2NvdW50AAAAA2NudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAF2dldEtleUl0ZW1BY2NSZXZpZXdUaWVyAAAAAwUAAAAEaXRlbQUAAAAHYWNjb3VudAUAAAADY250AQAAABhnZXRWYWx1ZUl0ZW1CdXlvdXRBbW91bnQAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRLZXlJdGVtQnV5b3V0QW1vdW50AAAAAQUAAAAEaXRlbQEAAAAXZ2V0VmFsdWVJdGVtQWNjV2lubmluZ3MAAAACAAAABGl0ZW0AAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleUl0ZW1BY2NXaW5uaW5ncwAAAAIFAAAABGl0ZW0FAAAAB2FjY291bnQAAAAAC1dISVRFTElTVEVEAgAAAApyZWdpc3RlcmVkAAAAAAdJTlZJVEVEAgAAAAdpbnZpdGVkAAAAAAVXSEFMRQIAAAAFd2hhbGUAAAAAA05FVwIAAAADbmV3AAAAAAZDT01NSVQCAAAADXZvdGluZ19jb21taXQAAAAABlJFVkVBTAIAAAANdm90aW5nX3JldmVhbAAAAAAIRkVBVFVSRUQCAAAACGZlYXR1cmVkAAAAAAhERUxJU1RFRAIAAAAIZGVsaXN0ZWQAAAAAB0NBU0hPVVQCAAAAB2Nhc2hvdXQAAAAABkJVWU9VVAIAAAAGYnV5b3V0AAAAAAhGSU5JU0hFRAIAAAAIZmluaXNoZWQAAAAAB0NMQUlNRUQCAAAAB2NsYWltZWQAAAAACFBPU0lUSVZFAgAAAAhwb3NpdGl2ZQAAAAAITkVHQVRJVkUCAAAACG5lZ2F0aXZlAAAAAAdHRU5FU0lTAgAAACMzTXM5ZHY1d3J0M2tQWGVUMmc5eUxNMkxoUzMzQ1Q3aXVpUQAAAAAGVk9URVJTAAAAAAAAAAADAAAAAAZRVU9SVU0AAAAAAAAAAAIAAAAACkxJU1RJTkdGRUUJAABpAAAAAgAAAAAAHc1lAAAAAAAAAAAD6AAAAAAHVk9URUJFVAkAAGkAAAACAAAAAAAI8NGAAAAAAAAAAAPoAAAAAAVUSUVSUwkABEwAAAACAAAAAAAAAAAKCQAETAAAAAIAAAAAAAAAADIJAARMAAAAAgAAAAAAAAAA+gkABEwAAAACAAAAAAAAAATiCQAETAAAAAIAAAAAAAAAGGoFAAAAA25pbAAAAAAKTVVMVElQTElFUgAAAAAAAAAAlgAAAAsAAAABaQEAAAAKaW52aXRldXNlcgAAAAIAAAAKbmV3YWNjb3VudAAAAARkYXRhBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAAUZ2V0VmFsdWVXaGl0ZWxpc3RSZWYAAAABBQAAAApuZXdhY2NvdW50BQAAAAROT05FCQAAAgAAAAECAAAAHVVzZXIgaGFzIGFscmVhZHkgYmVlbiBpbnZpdGVkAwMJAQAAAAIhPQAAAAIJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50BQAAAAtXSElURUxJU1RFRAkBAAAAAiE9AAAAAgUAAAAHYWNjb3VudAUAAAAHR0VORVNJUwcJAAACAAAAAQIAAAAiWW91ciBhY2NvdW50IHNob3VsZCBiZSB3aGl0ZWxpc3RlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEmdldEtleVdoaXRlbGlzdFJlZgAAAAEFAAAACm5ld2FjY291bnQFAAAAB2FjY291bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAApuZXdhY2NvdW50BQAAAARkYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5V2hpdGVsaXN0U3RhdHVzAAAAAQUAAAAKbmV3YWNjb3VudAUAAAAHSU5WSVRFRAUAAAADbmlsAAAAAWkBAAAABnNpZ251cAAAAAIAAAAEZGF0YQAAAAdpc1doYWxlBAAAAAdhY2NvdW50CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAACIT0AAAACCQEAAAAXZ2V0VmFsdWVXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50BQAAAAdJTlZJVEVECQAAAgAAAAECAAAAFlJlZmVycmFsIGludml0ZSBuZWVkZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlXaGl0ZWxpc3RCaW8AAAABBQAAAAdhY2NvdW50BQAAAARkYXRhCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAUZ2V0S2V5V2hpdGVsaXN0QmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRLZXlXaGl0ZWxpc3RTdGF0dXMAAAABBQAAAAdhY2NvdW50AwUAAAAHaXNXaGFsZQUAAAAFV0hBTEUFAAAAC1dISVRFTElTVEVEBQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAAABAAAAApjdXJyZW50S2V5CQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABmFtb3VudAkBAAAAD2dldFZhbHVlQmFsYW5jZQAAAAEF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", "chainId": 84, "height": 555055, "spentComplexity": 0 } View: original | compacted Prev: DpJ6F73LB42TawkjWSnaymnFSo8ZYetqZfrNZ7DQ9gKS Next: 9inPjLbZ3doqYzt11ts8SUTnkQDPYyugrn79mhWfBMrP Diff:
OldNewDifferences
2626
2727
2828 func getKeyWhitelistRef (account) = ("wl_ref_" + account)
29-
30-
31-func getKeyWhitelistInvitationData (account) = ("wl_invdata_" + account)
3229
3330
3431 func getKeyWhitelistStatus (account) = ("wl_sts_" + account)
205202 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
206203
207204
208-let WHITELISTED = "whitelisted"
205+let WHITELISTED = "registered"
206+
207+let INVITED = "invited"
208+
209+let WHALE = "whale"
209210
210211 let NEW = "new"
211212
252253 then (account != GENESIS)
253254 else false)
254255 then throw("Your account should be whitelisted")
255- else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistInvitationData(newaccount), data)])
256+ else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
256257 }
257258
258259
259260
260261 @Callable(i)
261-func signup (data) = {
262+func signup (data,isWhale) = {
262263 let account = toBase58String(i.caller.bytes)
263- if ((getKeyWhitelistRef(account) == NONE))
264+ if ((getValueWhitelistStatus(account) != INVITED))
264265 then throw("Referral invite needed")
265- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), WHITELISTED)])
266+ else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if (isWhale)
267+ then WHALE
268+ else WHITELISTED)])
266269 }
267270
268271
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)
29-
30-
31-func getKeyWhitelistInvitationData (account) = ("wl_invdata_" + account)
3229
3330
3431 func getKeyWhitelistStatus (account) = ("wl_sts_" + account)
3532
3633
3734 func getKeyBalance (account) = ("balance_" + account)
3835
3936
4037 func getKeyWhitelistBio (account) = ("wl_bio_" + account)
4138
4239
4340 func getKeyWhitelistBlock (account) = ("wl_blk_" + account)
4441
4542
4643 func getKeyItemAuthor (item) = ("author_" + item)
4744
4845
4946 func getKeyItemBlock (item) = ("block_" + item)
5047
5148
5249 func getKeyItemVotingExpiration (item) = ("expiration_block_" + item)
5350
5451
5552 func getKeyItemBank (item) = ("bank_" + item)
5653
5754
5855 func getKeyItemStatus (item) = ("status_" + item)
5956
6057
6158 func getKeyItemData (item) = ("datajson_" + item)
6259
6360
6461 func getKeyItemCrowdExpiration (item) = ("expiration_one_" + item)
6562
6663
6764 func getKeyItemWhaleExpiration (item) = ("expiration_two_" + item)
6865
6966
7067 func getKeyItemNCommits (item) = ("ncommits_" + item)
7168
7269
7370 func getKeyItemAccCommit (item,account) = ((("commit_" + item) + "_") + account)
7471
7572
7673 func getKeyItemAccReveal (item,account) = ((("reveal_" + item) + "_") + account)
7774
7875
7976 func getKeyItemVotesYes (item) = ("cnt_yes_" + item)
8077
8178
8279 func getKeyItemVotesNo (item) = ("cnt_no_" + item)
8380
8481
8582 func getKeyItemAccFinal (item,account) = ((("final_" + item) + "_") + account)
8683
8784
8885 func getKeyItemFundPositive (item) = ("positive_fund_" + item)
8986
9087
9188 func getKeyItemFundNegative (item) = ("negative_fund_" + item)
9289
9390
9491 func getKeyItemAccFundPositive (item,account) = ((getKeyItemFundPositive(item) + "_") + account)
9592
9693
9794 func getKeyItemAccFundNegative (item,account) = ((getKeyItemFundNegative(item) + "_") + account)
9895
9996
10097 func getKeyItemAccReviewsCnt (item,account) = ((("reviews_cnt_" + item) + "_") + account)
10198
10299
103100 func getKeyItemAccReview (item,account) = ((("review_" + item) + "_") + account)
104101
105102
106103 func getKeyItemAccReviewText (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_text_id:") + cnt)
107104
108105
109106 func getKeyItemAccReviewMode (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_mode_id:") + cnt)
110107
111108
112109 func getKeyItemAccReviewTier (item,account,cnt) = ((getKeyItemAccReview(item, account) + "_tier_id:") + cnt)
113110
114111
115112 func getKeyItemBuyoutAmount (item) = ("buyout_amount_" + item)
116113
117114
118115 func getKeyItemAccWinnings (item,account) = ((("winnings_" + item) + "_") + account)
119116
120117
121118 func getValueWhitelistRef (account) = getStrByKey(getKeyWhitelistRef(account))
122119
123120
124121 func getValueWhitelistStatus (account) = getStrByKey(getKeyWhitelistStatus(account))
125122
126123
127124 func getValueBalance (account) = getNumberByKey(getKeyBalance(account))
128125
129126
130127 func getValueWhitelistBio (account) = getStrByKey(getKeyWhitelistBio(account))
131128
132129
133130 func getValueWhitelistBlock (account) = getStrByKey(getKeyWhitelistBlock(account))
134131
135132
136133 func getValueItemAuthor (item) = getStrByKey(getKeyItemAuthor(item))
137134
138135
139136 func getValueItemBlock (item) = getNumberByKey(getKeyItemBlock(item))
140137
141138
142139 func getValueItemVotingExpiration (item) = getNumberByKey(getKeyItemVotingExpiration(item))
143140
144141
145142 func getValueItemBank (item) = getNumberByKey(getKeyItemBank(item))
146143
147144
148145 func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
149146
150147
151148 func getValueItemData (item) = getStrByKey(getKeyItemData(item))
152149
153150
154151 func getValueItemCrowdExpiration (item) = getNumberByKey(getKeyItemCrowdExpiration(item))
155152
156153
157154 func getValueItemWhaleExpiration (item) = getNumberByKey(getKeyItemWhaleExpiration(item))
158155
159156
160157 func getValueItemNCommits (item) = getNumberByKey(getKeyItemNCommits(item))
161158
162159
163160 func getValueItemAccCommit (item,account) = getStrByKey(getKeyItemAccCommit(item, account))
164161
165162
166163 func getValueItemAccReveal (item,account) = getStrByKey(getKeyItemAccReveal(item, account))
167164
168165
169166 func getValueItemVotesYes (item) = getNumberByKey(getKeyItemVotesYes(item))
170167
171168
172169 func getValueItemVotesNo (item) = getNumberByKey(getKeyItemVotesNo(item))
173170
174171
175172 func getValueItemAccFinal (item,account) = getStrByKey(getKeyItemAccFinal(item, account))
176173
177174
178175 func getValueItemFundPositive (item) = getNumberByKey(getKeyItemFundPositive(item))
179176
180177
181178 func getValueItemFundNegative (item) = getNumberByKey(getKeyItemFundNegative(item))
182179
183180
184181 func getValueItemAccFundPositive (item,account) = getNumberByKey(getKeyItemAccFundPositive(item, account))
185182
186183
187184 func getValueItemAccFundNegative (item,account) = getNumberByKey(getKeyItemAccFundNegative(item, account))
188185
189186
190187 func getValueItemAccReviewsCnt (item,account) = getNumberByKey(getKeyItemAccReviewsCnt(item, account))
191188
192189
193190 func getValueItemAccReviewText (item,account,cnt) = getStrByKey(getKeyItemAccReviewText(item, account, cnt))
194191
195192
196193 func getValueItemAccReviewMode (item,account,cnt) = getStrByKey(getKeyItemAccReviewMode(item, account, cnt))
197194
198195
199196 func getValueItemAccReviewTier (item,account,cnt) = getNumberByKey(getKeyItemAccReviewTier(item, account, cnt))
200197
201198
202199 func getValueItemBuyoutAmount (item) = getNumberByKey(getKeyItemBuyoutAmount(item))
203200
204201
205202 func getValueItemAccWinnings (item,account) = getNumberByKey(getKeyItemAccWinnings(item, account))
206203
207204
208-let WHITELISTED = "whitelisted"
205+let WHITELISTED = "registered"
206+
207+let INVITED = "invited"
208+
209+let WHALE = "whale"
209210
210211 let NEW = "new"
211212
212213 let COMMIT = "voting_commit"
213214
214215 let REVEAL = "voting_reveal"
215216
216217 let FEATURED = "featured"
217218
218219 let DELISTED = "delisted"
219220
220221 let CASHOUT = "cashout"
221222
222223 let BUYOUT = "buyout"
223224
224225 let FINISHED = "finished"
225226
226227 let CLAIMED = "claimed"
227228
228229 let POSITIVE = "positive"
229230
230231 let NEGATIVE = "negative"
231232
232233 let GENESIS = "3Ms9dv5wrt3kPXeT2g9yLM2LhS33CT7iuiQ"
233234
234235 let VOTERS = 3
235236
236237 let QUORUM = 2
237238
238239 let LISTINGFEE = (500000000 / 1000)
239240
240241 let VOTEBET = (150000000 / 1000)
241242
242243 let TIERS = [10, 50, 250, 1250, 6250]
243244
244245 let MULTIPLIER = 150
245246
246247 @Callable(i)
247248 func inviteuser (newaccount,data) = {
248249 let account = toBase58String(i.caller.bytes)
249250 if ((getValueWhitelistRef(newaccount) != NONE))
250251 then throw("User has already been invited")
251252 else if (if ((getKeyWhitelistStatus(account) != WHITELISTED))
252253 then (account != GENESIS)
253254 else false)
254255 then throw("Your account should be whitelisted")
255- else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistInvitationData(newaccount), data)])
256+ else WriteSet([DataEntry(getKeyWhitelistRef(newaccount), account), DataEntry(getKeyWhitelistBio(newaccount), data), DataEntry(getKeyWhitelistStatus(newaccount), INVITED)])
256257 }
257258
258259
259260
260261 @Callable(i)
261-func signup (data) = {
262+func signup (data,isWhale) = {
262263 let account = toBase58String(i.caller.bytes)
263- if ((getKeyWhitelistRef(account) == NONE))
264+ if ((getValueWhitelistStatus(account) != INVITED))
264265 then throw("Referral invite needed")
265- else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), WHITELISTED)])
266+ else WriteSet([DataEntry(getKeyWhitelistBio(account), data), DataEntry(getKeyWhitelistBlock(account), height), DataEntry(getKeyWhitelistStatus(account), if (isWhale)
267+ then WHALE
268+ else WHITELISTED)])
266269 }
267270
268271
269272
270273 @Callable(i)
271274 func withdraw () = {
272275 let currentKey = toBase58String(i.caller.bytes)
273276 let amount = getValueBalance(currentKey)
274277 if ((0 >= amount))
275278 then throw("Not enough balance")
276279 else ScriptResult(WriteSet([DataEntry(getKeyBalance(currentKey), 0)]), TransferSet([ScriptTransfer(i.caller, amount, unit)]))
277280 }
278281
279282
280283
281284 @Callable(i)
282285 func additem (item,expVoting,expCrowd,expWhale,data) = {
283286 let account = toBase58String(i.caller.bytes)
284287 let pmt = extract(i.payment)
285288 if (isDefined(pmt.assetId))
286289 then throw("can use waves only at the moment")
287290 else if ((pmt.amount != LISTINGFEE))
288291 then throw("Please pay exact amount for the listing")
289292 else if (if (if ((expVoting > 2))
290293 then (expCrowd > 3)
291294 else false)
292295 then (expWhale > 4)
293296 else false)
294297 then throw("Incorrect time parameters")
295298 else if ((getValueItemAuthor(item) != NONE))
296299 then throw("Item already exist")
297300 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))])
298301 }
299302
300303
301304
302305 @Callable(i)
303306 func votecommit (item,hash) = {
304307 let account = toBase58String(i.caller.bytes)
305308 let commits = getValueItemNCommits(item)
306309 let status = getValueItemStatus(item)
307310 let pmt = extract(i.payment)
308311 if (isDefined(pmt.assetId))
309312 then throw("can use waves only at the moment")
310313 else if ((pmt.amount != (2 * VOTEBET)))
311314 then throw("Not enough funds to vote for a new item")
312315 else if ((height > getValueItemVotingExpiration(item)))
313316 then throw("The voting has expired")
314317 else if ((getValueItemAuthor(item) == account))
315318 then throw("Cannot vote for own proposal")
316319 else if (if ((status != NEW))
317320 then (status != COMMIT)
318321 else false)
319322 then throw("Wrong item status for 'commit' action")
320323 else if ((commits >= VOTERS))
321324 then throw("No more voters for this item")
322325 else if ((getValueItemAccCommit(item, account) != NONE))
323326 then throw("Can't vote twice")
324327 else WriteSet([DataEntry(getKeyItemStatus(item), if (((commits + 1) == VOTERS))
325328 then REVEAL
326329 else COMMIT), DataEntry(getKeyItemAccCommit(item, account), hash), DataEntry(getKeyItemNCommits(item), (commits + 1))])
327330 }
328331
329332
330333
331334 @Callable(i)
332335 func votereveal (item,vote,salt) = {
333336 let ridehash = toBase58String(sha256(toBytes((vote + salt))))
334337 let account = toBase58String(i.caller.bytes)
335338 let yesmltp = if ((vote == FEATURED))
336339 then 1
337340 else 0
338341 let notmltp = if ((vote == DELISTED))
339342 then 1
340343 else 0
341344 let yescnt = getValueItemVotesYes(item)
342345 let notcnt = getValueItemVotesNo(item)
343346 let newstatus = if ((yescnt >= QUORUM))
344347 then FEATURED
345348 else if ((notcnt >= QUORUM))
346349 then DELISTED
347350 else REVEAL
348351 if ((getValueItemAccCommit(item, account) != ridehash))
349352 then throw("Hashes don't match")
350353 else if ((height > getValueItemVotingExpiration(item)))
351354 then throw("The challenge has expired")
352355 else if ((VOTERS > getValueItemNCommits(item)))
353356 then throw("It's still commit stage")
354357 else if (if ((getValueItemStatus(item) != REVEAL))
355358 then (getValueItemStatus(item) != newstatus)
356359 else false)
357360 then throw("Wrong item status for 'reveal' action")
358361 else if ((getValueItemAccReveal(item, account) != NONE))
359362 then throw("Can't vote twice")
360363 else if (if ((vote != FEATURED))
361364 then (vote != DELISTED)
362365 else false)
363366 then throw("Bad vote result format")
364367 else WriteSet([DataEntry(getKeyItemAccReveal(item, account), vote), DataEntry(getKeyItemVotesYes(item), (yescnt + yesmltp)), DataEntry(getKeyItemVotesNo(item), (notcnt + notmltp)), DataEntry(getKeyItemStatus(item), newstatus), DataEntry(getKeyBalance(account), (getValueBalance(account) + VOTEBET))])
365368 }
366369
367370
368371
369372 @Callable(i)
370373 func finalizevoting (item,account) = {
371374 let yescnt = getValueItemVotesYes(item)
372375 let notcnt = getValueItemVotesNo(item)
373376 let accvote = getValueItemAccReveal(item, account)
374377 let isauthor = (account == getValueItemAuthor(item))
375378 let finalstatus = if ((yescnt > QUORUM))
376379 then FEATURED
377380 else if ((notcnt > QUORUM))
378381 then DELISTED
379382 else NONE
380383 let mltisnotfullmajority = if (if ((yescnt == VOTERS))
381384 then true
382385 else (notcnt == VOTERS))
383386 then 0
384387 else 1
385388 let nwinners = if ((finalstatus == FEATURED))
386389 then yescnt
387390 else if ((finalstatus == DELISTED))
388391 then notcnt
389392 else 0
390393 let nloosers = (VOTERS - nwinners)
391394 let mltacciswinner = if ((finalstatus == accvote))
392395 then 1
393396 else 0
394397 let voteprofit = if ((nwinners == 0))
395398 then 0
396399 else (mltacciswinner * (VOTEBET + ((mltisnotfullmajority * ((nloosers * VOTEBET) + LISTINGFEE)) / nwinners)))
397400 let authorreturn = (((LISTINGFEE * (if (isauthor)
398401 then 1
399402 else 0)) * (if ((mltisnotfullmajority == 1))
400403 then 0
401404 else 1)) * (if ((finalstatus == FEATURED))
402405 then 1
403406 else 0))
404407 if ((getValueItemVotingExpiration(item) > height))
405408 then throw("The voting hasn't finished yet")
406409 else if ((getValueItemAccFinal(item, account) == FINISHED))
407410 then throw("Account has already claimed")
408411 else if (if ((accvote == NONE))
409412 then !(isauthor)
410413 else false)
411414 then throw("Account hasnot voted, hasnot reveal or isnot author")
412415 else if ((finalstatus == NONE))
413416 then throw("Voting has expired")
414417 else WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED), DataEntry(getKeyBalance(account), ((getValueBalance(account) + voteprofit) + authorreturn))])
415418 }
416419
417420
418421
419422 @Callable(i)
420423 func closeexpiredvoting (item,account) = {
421424 let finalstatus = if ((getValueItemVotesYes(item) > QUORUM))
422425 then FEATURED
423426 else if ((getValueItemVotesNo(item) > QUORUM))
424427 then DELISTED
425428 else NONE
426429 let accvote = getValueItemAccReveal(item, account)
427430 let isauthor = (account == getValueItemAuthor(item))
428431 let acccomi = getValueItemAccCommit(item, account)
429432 let hasrevealstage = (getValueItemNCommits(item) == VOTERS)
430433 let authorreturn = (LISTINGFEE * (if (isauthor)
431434 then 1
432435 else 0))
433436 let votersreturn1 = ((VOTEBET * (if (hasrevealstage)
434437 then 1
435438 else 0)) * (if ((accvote != NONE))
436439 then 1
437440 else 0))
438441 let votersreturn2 = (((2 * VOTEBET) * (if (hasrevealstage)
439442 then 0
440443 else 1)) * (if ((acccomi != NONE))
441444 then 1
442445 else 0))
443446 if ((getValueItemVotingExpiration(item) > height))
444447 then throw("The voting hasn't finished yet")
445448 else if (if (!(isauthor))
446449 then (acccomi == NONE)
447450 else false)
448451 then throw("Wrong account or item")
449452 else if ((getValueItemAccFinal(item, account) == FINISHED))
450453 then throw("Account has already claimed")
451454 else if ((finalstatus != NONE))
452455 then throw("Wrong item status")
453456 else WriteSet([DataEntry(getKeyItemAccFinal(item, account), FINISHED), DataEntry(getKeyBalance(account), (((getValueBalance(account) + authorreturn) + votersreturn1) + votersreturn2))])
454457 }
455458
456459
457460
458461 @Callable(i)
459462 func donate (item,tier,mode,review) = {
460463 let account = toBase58String(i.caller.bytes)
461464 let pmt = extract(i.payment)
462465 if (isDefined(pmt.assetId))
463466 then throw("can use waves only at the moment")
464467 else {
465468 let cnt = (getValueItemAccReviewsCnt(item, account) + 1)
466469 let newnegativefund = (getValueItemFundNegative(item) + ((if ((mode == NEGATIVE))
467470 then 1
468471 else 0) * pmt.amount))
469472 let newpositivefund = (getValueItemFundPositive(item) + ((if ((mode == POSITIVE))
470473 then 1
471474 else 0) * pmt.amount))
472475 if ((getValueItemStatus(item) != FEATURED))
473476 then throw("The project hasn't accepted by community")
474477 else if ((height >= getValueItemCrowdExpiration(item)))
475478 then throw("The time for crowdfunding has expired")
476479 else if ((newnegativefund >= newpositivefund))
477480 then throw("Negative fund can't be higher than positive fund")
478481 else if (if ((mode != POSITIVE))
479482 then (mode != NEGATIVE)
480483 else false)
481484 then throw("Wrong mode parameter")
482485 else if ((getValueItemAuthor(item) == account))
483486 then throw("Can't donate own project")
484487 else if ((pmt.amount != TIERS[(tier - 1)]))
485488 then throw(("The payment must be equal to tier amount: " + toString(TIERS[(tier - 1)])))
486489 else WriteSet([DataEntry(getKeyItemAccReviewsCnt(item, account), cnt), DataEntry(getKeyItemAccFundPositive(item, account), (getValueItemAccFundPositive(item, account) + ((if ((mode == POSITIVE))
487490 then 1
488491 else 0) * pmt.amount))), DataEntry(getKeyItemAccFundNegative(item, account), (getValueItemAccFundNegative(item, account) + ((if ((mode == NEGATIVE))
489492 then 1
490493 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)])
491494 }
492495 }
493496
494497
495498
496499 @Callable(i)
497500 func whale (item) = {
498501 let pmt = extract(i.payment)
499502 if (isDefined(pmt.assetId))
500503 then throw("can use waves only at the moment")
501504 else if ((getValueItemStatus(item) != FEATURED))
502505 then throw("The project hasn't accepted by community")
503506 else if ((getValueItemCrowdExpiration(item) > height))
504507 then throw("The time for crowdfunding has not expired yet")
505508 else if ((height > getValueItemWhaleExpiration(item)))
506509 then throw("The time for grant has expired")
507510 else if ((getValueItemStatus(item) == BUYOUT))
508511 then throw("Investement has already done")
509512 else if ((((getValueItemFundPositive(item) * MULTIPLIER) / 100) > pmt.amount))
510513 then throw((("Investement must be more than " + toString(MULTIPLIER)) + "% of supportes funds"))
511514 else WriteSet([DataEntry(getKeyItemStatus(item), BUYOUT), DataEntry(getKeyBalance(getValueItemAuthor(item)), (getValueBalance(getValueItemAuthor(item)) + getValueItemFundPositive(item))), DataEntry(getKeyItemBuyoutAmount(item), pmt.amount)])
512515 }
513516
514517
515518
516519 @Callable(i)
517520 func claimwinnings (item,account) = {
518521 let status = getValueItemStatus(item)
519522 let isbayout = if ((status == BUYOUT))
520523 then 1
521524 else 0
522525 let iscrowdf = if ((status != BUYOUT))
523526 then 1
524527 else 0
525528 let positivefund = getValueItemFundPositive(item)
526529 let negativefund = getValueItemFundNegative(item)
527530 let share = (((isbayout * (getValueItemAccFundPositive(item, account) * 100)) / (if ((0 >= positivefund))
528531 then 1
529532 else positivefund)) + ((iscrowdf * (getValueItemAccFundNegative(item, account) * 100)) / (if ((0 >= negativefund))
530533 then 1
531534 else negativefund)))
532535 let tmpnegwin = ((negativefund * MULTIPLIER) / 100)
533536 let betprofit = ((isbayout * ((share * negativefund) / 100)) + (iscrowdf * ((share * (if ((positivefund > tmpnegwin))
534537 then tmpnegwin
535538 else positivefund)) / 100)))
536539 let roiprofit = (isbayout * ((share * getValueItemBuyoutAmount(item)) / 100))
537540 let authorprofit = (((if ((getValueItemAuthor(item) == account))
538541 then 1
539542 else 0) * positivefund) * (if ((status != BUYOUT))
540543 then 1
541544 else 0))
542545 if ((status == DELISTED))
543546 then throw("The project hasn't accepted by community")
544547 else if (if ((status != BUYOUT))
545548 then (getValueItemWhaleExpiration(item) >= height)
546549 else false)
547550 then throw("The time for grant has not expired yet")
548551 else if ((0 >= (positivefund + negativefund)))
549552 then throw("The campaign wasn't active")
550553 else WriteSet([DataEntry(getKeyBalance(account), (((getValueBalance(account) + betprofit) + roiprofit) + authorprofit)), DataEntry(getKeyItemStatus(item), if ((authorprofit > 0))
551554 then CASHOUT
552555 else status), DataEntry(getKeyItemAccFinal(item, account), CLAIMED)])
553556 }
554557
555558

github/deemru/w8io/169f3d6 
82.93 ms