tx · CKjtQyTtFrhLJoJ3yVia9f9kseVgtroDA5jLj4kbmviF 3N28KoiVw7BkkjZqzT85UZhCqsHbbdogM12: -0.05000000 Waves 2019.08.17 23:44 [635620] smart account 3N28KoiVw7BkkjZqzT85UZhCqsHbbdogM12 > SELF 0.00000000 Waves
{ "type": 13, "id": "CKjtQyTtFrhLJoJ3yVia9f9kseVgtroDA5jLj4kbmviF", "fee": 5000000, "feeAssetId": null, "timestamp": 1566074618817, "version": 1, "sender": "3N28KoiVw7BkkjZqzT85UZhCqsHbbdogM12", "senderPublicKey": "2RLztFfjSUJ2re5chswE74UnmcPkMsiCSfBdKXKayFDv", "proofs": [ "49hWWgPD8qaRLSAxS2E7w2iS8pCRYaags6JRLWnTrfWmJkSqpfHB6JTxsML67naRYHvpzUA83wLAw711bPnmGrih" ], "script": "base64:AAIDAAAAAAAAAAAAAAAlAAAAAAdhY2NvdW50AQAAACAVGDz3S3YQB4aiI51xl2ugWA4gR6Y5O5q6RQqEQ3J4dQAAAAAMYWxsaWNlUHVia2V5AQAAACAreN/NfH/SqCPc/hPnBmh1BIC7xIlb9ZfNOuFi3xLNMAAAAAAJYm9iUHVia2V5AQAAACCUOeSPBy4PhPvyHGcVW4GV0RT93LFhHdQudmgTy+sSbAAAAAAMY29vcGVyUHVia2V5AQAAACCCIe+dk847nIV5gYyG+3h/+qC1bgAyQQ9H2YTdbJdufwAAAAAETk9ORQIAAAAEbm9uZQAAAAAGVk9URVJTAAAAAAAAAAADAAAAAAZRVU9SVU0AAAAAAAAAAAIAAAAABlZPVElORwIAAAAGdm90aW5nAAAAAAZSRVZFQUwCAAAABnJldmVhbAAAAAAIRkVBVFVSRUQCAAAACGZlYXR1cmVkAAAAAAhERUxJU1RFRAIAAAAIZGVsaXN0ZWQAAAAACHZlcmlmaWVyAgAAACMzTXM5c1ViN1czTDU1TExHeGVIV2lxZ1RmZEg5eW4ybWF5YgAAAAAIVkVSSUZJRUQCAAAACHZlcmlmaWVkAAAAAAtCTEFDS0xJU1RFRAIAAAAJYmxhY2tsaXN0AAAAABJtYXhBdWN0aW9uRHVyYXRpb24JAABoAAAAAgAAAAAAAAAFoAAAAAAAAAAAHgEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABAAAAA2tleQQAAAADbnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABQAAAANudW0BAAAAC2dldFN0ckJ5S2V5AAAAAQAAAANrZXkEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQUAAAAETk9ORQUAAAADc3RyAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAGX3ByaWNlAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldEtleUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0BAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIAAAAEdXNlcgAAAARpdGVtCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAFfBQAAAAR1c2VyAgAAAARfY250AQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIAAAAEdXNlcgAAAARpdGVtCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5VXNlckl0ZW1Db3VudGVyAAAAAgUAAAAEdXNlcgUAAAAEaXRlbQEAAAAKZ2V0S2V5SXRlbQAAAAIAAAAIc3VwcGxpZXIAAAAFdGl0bGUJAAEsAAAAAgIAAAAFaXRlbV8JAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAIc3VwcGxpZXIFAAAABXRpdGxlAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAVfZGF0YQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABl9vd25lcgEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABAAAAB2FjY291bnQJAAEsAAAAAgUAAAAHYWNjb3VudAIAAAAIX2JhbGFuY2UBAAAAF2dldFZhbHVlQmFsYW5jZVN1cHBsaWVyAAAAAQAAAAdhY2NvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAHYWNjb3VudAEAAAAMZ2V0S2V5Q29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABGl0ZW0CAAAAAV8FAAAABHVzZXICAAAAB19jb21taXQBAAAADmdldFZhbHVlQ29tbWl0AAAAAgAAAARpdGVtAAAABHVzZXIJAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyAQAAABJnZXRLZXlDb21taXRzQ291bnQAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAHX2NvbWNudAEAAAAUZ2V0VmFsdWVDb21taXRzQ291bnQAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRLZXlDb21taXRzQ291bnQAAAABBQAAAARpdGVtAQAAAAxnZXRLZXlSZXZlYWwAAAACAAAABGl0ZW0AAAAEdXNlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAABXwUAAAAEdXNlcgIAAAAHX3JldmVhbAEAAAAOZ2V0VmFsdWVSZXZlYWwAAAACAAAABGl0ZW0AAAAEdXNlcgkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAADGdldEtleVJldmVhbAAAAAIFAAAABGl0ZW0FAAAABHVzZXIBAAAAEGdldEtleUl0ZW1TdGF0dXMAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAHX3N0YXR1cwEAAAASZ2V0VmFsdWVJdGVtU3RhdHVzAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0BAAAAD2dldEtleVZvdGVDb3VudAAAAAIAAAAEaXRlbQAAAAV2b3V0ZQkAASwAAAACCQABLAAAAAIFAAAABGl0ZW0CAAAABV9yZXM6BQAAAAV2b3V0ZQEAAAASZ2V0VmFsdWVWb3V0ZUNvdW50AAAAAgAAAARpdGVtAAAABXZvdXRlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0S2V5Vm90ZUNvdW50AAAAAgUAAAAEaXRlbQUAAAAFdm91dGUAAAAJAAAAAWkBAAAADHN0YXJ0QXVjdGlvbgAAAAQAAAAIZHVyYXRpb24AAAAKc3RhcnRQcmljZQAAAAlhdWN0aW9uSWQAAAAMcHJpY2VBc3NldElkBAAAAAllbmRIZWlnaHQJAABkAAAAAggFAAAACWxhc3RCbG9jawAAAAZoZWlnaHQFAAAACGR1cmF0aW9uBAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAJYXVjdGlvbklkBQAAAAllbmRIZWlnaHQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAApfb3JnYW5pemVyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfbG90X2Fzc2V0SWQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAIAAAAFV0FWRVMJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAtfbG90X2Ftb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAtfc3RhcnRQcmljZQUAAAAKc3RhcnRQcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9wcmljZUFzc2V0SWQFAAAADHByaWNlQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAA2JpZAAAAAQAAAAJYXVjdGlvbklkAAAAA2JpZAAAAAVwcmljZQAAAAllbmRIZWlnaHQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAA1wbXRBc3NldElkU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQCAAAABVdBVkVTBAAAABBjYWxsZXJBZGRyZXNzU3RyCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADHByaWNlQXNzZXRJZAkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9wcmljZUFzc2V0SWQEAAAABndpbm5lcgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAHX3dpbm5lcgQAAAAJd2luQW1vdW50CQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAApfd2luQW1vdW50BAAAABJiaWRGcm9tVGhlU2FtZVVzZXIDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAGd2lubmVyCQAAAAAAAAIJAQAAAAV2YWx1ZQAAAAEFAAAABndpbm5lcgUAAAAQY2FsbGVyQWRkcmVzc1N0cgcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfcGFydGljaXBhbnQJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAC19sb3RfYW1vdW50BQAAAAVwcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9jb3VudAUAAAADYmlkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAKX2VuZEhlaWdodAUAAAAJZW5kSGVpZ2h0BQAAAANuaWwAAAABaQEAAAAKZW5kQXVjdGlvbgAAAAUAAAAJYXVjdGlvbklkAAAABndpbm5lcgAAAAllbmRIZWlnaHQAAAAJbG90QW1vdW50AAAAA2JpZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAdfd2lubmVyBQAAAAZ3aW5uZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAACWF1Y3Rpb25JZAUAAAAJZW5kSGVpZ2h0CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAALX2xvdF9hbW91bnQFAAAACWxvdEFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9jb3VudAUAAAADYmlkBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAABndpbm5lcgAAAAAAAAAAAQkAAlkAAAABBQAAAAlhdWN0aW9uSWQFAAAAA25pbAAAAAFpAQAAAAhwdXJjaGFzZQAAAAEAAAAEaXRlbQQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAIGNhbiB1c2UgV2F2ZXMgb25seSBhdCB0aGUgbW9tZW50BAAAAAt1c2VyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAVwcmljZQkBAAAAEWdldFZhbHVlSXRlbVByaWNlAAAAAQUAAAAEaXRlbQQAAAAPc3VwcGxpZXJBZGRyZXNzCQEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtAwkAAGYAAAACBQAAAAVwcmljZQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQIAAAAucHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAABmAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAABXByaWNlCQAAAgAAAAECAAAAMHB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgaGlnaGVyIHRoYW4gaXRlbSBwcmljZQMJAAAAAAAAAgUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAROT05FCQAAAgAAAAECAAAAFXN1cHBsaWVyIGlzIG5vdCBleGlzdAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAdhZGRJdGVtAAAAAwAAAAV0aXRsZQAAAAVwcmljZQAAAARkYXRhBAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAEaXRlbQkBAAAACmdldEtleUl0ZW0AAAACBQAAAA9zdXBwbGllckFkZHJlc3MFAAAABXRpdGxlAwkAAGcAAAACAAAAAAAAAAAABQAAAAVwcmljZQkAAAIAAAABAgAAAC5wdXJjaGFzZSBhbW91bnQgY2Fubm90IGJlIGxlc3MgdGhhbiBpdGVtIHByaWNlAwkBAAAAAiE9AAAAAgkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAETk9ORQkAAAIAAAABAgAAABlBbiBpdGVtIGlzIGFsbHJlYWR5IGV4aXN0AwkAAAAAAAACBQAAAA9zdXBwbGllckFkZHJlc3MFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJXN1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3QJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRLZXlJ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", "chainId": 84, "height": 635620, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let account = base58'2RLztFfjSUJ2re5chswE74UnmcPkMsiCSfBdKXKayFDv' | |
5 | + | ||
6 | + | let allicePubkey = base58'3vhS6tWdhTMgiUjYWdqyzTW1ythueupqQ637qnpyDRyZ' | |
7 | + | ||
8 | + | let bobPubkey = base58'AycYKRsxXEWqnc2mGYoxUWjj9mBDhAXMeQ2Ghqb7tXab' | |
9 | + | ||
10 | + | let cooperPubkey = base58'9kz1ogj2BmFYqjEKw7aVXJ7ckEEB27jfcN3Grzo8fxSz' | |
11 | + | ||
12 | + | let NONE = "none" | |
13 | + | ||
14 | + | let VOTERS = 3 | |
15 | + | ||
16 | + | let QUORUM = 2 | |
17 | + | ||
18 | + | let VOTING = "voting" | |
19 | + | ||
20 | + | let REVEAL = "reveal" | |
21 | + | ||
22 | + | let FEATURED = "featured" | |
23 | + | ||
24 | + | let DELISTED = "delisted" | |
25 | + | ||
26 | + | let verifier = "3Ms9sUb7W3L55LLGxeHWiqgTfdH9yn2mayb" | |
27 | + | ||
28 | + | let VERIFIED = "verified" | |
29 | + | ||
30 | + | let BLACKLISTED = "blacklist" | |
31 | + | ||
32 | + | let maxAuctionDuration = (1440 * 30) | |
33 | + | ||
34 | + | func getNumberByKey (key) = { | |
35 | + | let num = match getInteger(this, key) { | |
36 | + | case a: Int => | |
37 | + | a | |
38 | + | case _ => | |
39 | + | 0 | |
40 | + | } | |
41 | + | num | |
42 | + | } | |
43 | + | ||
44 | + | ||
45 | + | func getStrByKey (key) = { | |
46 | + | let str = match getString(this, key) { | |
47 | + | case a: String => | |
48 | + | a | |
49 | + | case _ => | |
50 | + | NONE | |
51 | + | } | |
52 | + | str | |
53 | + | } | |
54 | + | ||
55 | + | ||
56 | + | func getKeyItemPrice (item) = (item + "_price") | |
57 | + | ||
58 | + | ||
59 | + | func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item)) | |
60 | + | ||
61 | + | ||
62 | + | func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt") | |
63 | + | ||
64 | + | ||
65 | + | func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item)) | |
66 | + | ||
67 | + | ||
68 | + | func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title))))) | |
69 | + | ||
70 | + | ||
71 | + | func getKeyItemData (item) = (item + "_data") | |
72 | + | ||
73 | + | ||
74 | + | func getKeyItemSupplier (item) = (item + "_owner") | |
75 | + | ||
76 | + | ||
77 | + | func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item)) | |
78 | + | ||
79 | + | ||
80 | + | func getKeyBalanceSupplier (account) = (account + "_balance") | |
81 | + | ||
82 | + | ||
83 | + | func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account)) | |
84 | + | ||
85 | + | ||
86 | + | func getKeyCommit (item,user) = (((item + "_") + user) + "_commit") | |
87 | + | ||
88 | + | ||
89 | + | func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user)) | |
90 | + | ||
91 | + | ||
92 | + | func getKeyCommitsCount (item) = (item + "_comcnt") | |
93 | + | ||
94 | + | ||
95 | + | func getValueCommitsCount (item) = getNumberByKey(getKeyCommitsCount(item)) | |
96 | + | ||
97 | + | ||
98 | + | func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal") | |
99 | + | ||
100 | + | ||
101 | + | func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user)) | |
102 | + | ||
103 | + | ||
104 | + | func getKeyItemStatus (item) = (item + "_status") | |
105 | + | ||
106 | + | ||
107 | + | func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item)) | |
108 | + | ||
109 | + | ||
110 | + | func getKeyVoteCount (item,voute) = ((item + "_res:") + voute) | |
111 | + | ||
112 | + | ||
113 | + | func getValueVouteCount (item,voute) = getNumberByKey(getKeyVoteCount(item, voute)) | |
114 | + | ||
115 | + | ||
116 | + | @Callable(i) | |
117 | + | func startAuction (duration,startPrice,auctionId,priceAssetId) = { | |
118 | + | let endHeight = (lastBlock.height + duration) | |
119 | + | let pmt = extract(i.payment) | |
120 | + | WriteSet([DataEntry(auctionId, endHeight), DataEntry((auctionId + "_organizer"), toBase58String(i.caller.bytes)), DataEntry((auctionId + "_lot_assetId"), if (isDefined(pmt.assetId)) | |
121 | + | then toBase58String(value(pmt.assetId)) | |
122 | + | else "WAVES"), DataEntry((auctionId + "_lot_amount"), pmt.amount), DataEntry((auctionId + "_startPrice"), startPrice), DataEntry((auctionId + "_priceAssetId"), priceAssetId)]) | |
123 | + | } | |
124 | + | ||
125 | + | ||
126 | + | ||
127 | + | @Callable(i) | |
128 | + | func bid (auctionId,bid,price,endHeight) = { | |
129 | + | let pmt = extract(i.payment) | |
130 | + | let pmtAssetIdStr = if (isDefined(pmt.assetId)) | |
131 | + | then toBase58String(value(pmt.assetId)) | |
132 | + | else "WAVES" | |
133 | + | let callerAddressStr = toBase58String(i.caller.bytes) | |
134 | + | let priceAssetId = getStringValue(this, (auctionId + "_priceAssetId")) | |
135 | + | let winner = getString(this, (auctionId + "_winner")) | |
136 | + | let winAmount = getInteger(this, (auctionId + "_winAmount")) | |
137 | + | let bidFromTheSameUser = if (isDefined(winner)) | |
138 | + | then (value(winner) == callerAddressStr) | |
139 | + | else false | |
140 | + | WriteSet([DataEntry((auctionId + "_participant"), toBase58String(i.caller.bytes)), DataEntry((auctionId + "_lot_amount"), price), DataEntry((auctionId + "_count"), bid), DataEntry((auctionId + "_endHeight"), endHeight)]) | |
141 | + | } | |
142 | + | ||
143 | + | ||
144 | + | ||
145 | + | @Callable(i) | |
146 | + | func endAuction (auctionId,winner,endHeight,lotAmount,bid) = ScriptResult(WriteSet([DataEntry((auctionId + "_winner"), winner), DataEntry(auctionId, endHeight), DataEntry((auctionId + "_lot_amount"), lotAmount), DataEntry((auctionId + "_count"), bid)]), TransferSet([ScriptTransfer(Address(fromBase58String(winner)), 1, fromBase58String(auctionId))])) | |
147 | + | ||
148 | + | ||
149 | + | ||
150 | + | @Callable(i) | |
151 | + | func purchase (item) = { | |
152 | + | let pmt = extract(i.payment) | |
153 | + | if (isDefined(pmt.assetId)) | |
154 | + | then throw("can use Waves only at the moment") | |
155 | + | else { | |
156 | + | let userAddress = toBase58String(i.caller.bytes) | |
157 | + | let price = getValueItemPrice(item) | |
158 | + | let supplierAddress = getValueItemSupplier(item) | |
159 | + | if ((price > pmt.amount)) | |
160 | + | then throw("purchase amount cannot be less than item price") | |
161 | + | else if ((pmt.amount > price)) | |
162 | + | then throw("purchase amount cannot be higher than item price") | |
163 | + | else if ((supplierAddress == NONE)) | |
164 | + | then throw("supplier is not exist") | |
165 | + | else WriteSet([DataEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), DataEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]) | |
166 | + | } | |
167 | + | } | |
168 | + | ||
169 | + | ||
170 | + | ||
171 | + | @Callable(i) | |
172 | + | func addItem (title,price,data) = { | |
173 | + | let supplierAddress = toBase58String(i.caller.bytes) | |
174 | + | let item = getKeyItem(supplierAddress, title) | |
175 | + | if ((0 >= price)) | |
176 | + | then throw("purchase amount cannot be less than item price") | |
177 | + | else if ((getValueItemSupplier(item) != NONE)) | |
178 | + | then throw("An item is allready exist") | |
179 | + | else if ((supplierAddress == BLACKLISTED)) | |
180 | + | then throw("supplier's account has been blacklist") | |
181 | + | else WriteSet([DataEntry(getKeyItemSupplier(item), supplierAddress), DataEntry(getKeyItemPrice(item), price), DataEntry(getKeyItemData(item), data)]) | |
182 | + | } | |
183 | + | ||
184 | + | ||
185 | + | ||
186 | + | @Callable(i) | |
187 | + | func deposit () = { | |
188 | + | let pmt = extract(i.payment) | |
189 | + | let supplierAddress = toBase58String(i.caller.bytes) | |
190 | + | let balance = getValueBalanceSupplier(supplierAddress) | |
191 | + | let newBalance = (balance + pmt.amount) | |
192 | + | if (isDefined(pmt.assetId)) | |
193 | + | then throw("can hodl waves only at the moment") | |
194 | + | else if ((0 > pmt.amount)) | |
195 | + | then throw("Can not deposit negative amount") | |
196 | + | else WriteSet([DataEntry(getKeyBalanceSupplier(supplierAddress), newBalance)]) | |
197 | + | } | |
198 | + | ||
199 | + | ||
200 | + | ||
201 | + | @Callable(i) | |
202 | + | func withdraw (amount) = { | |
203 | + | let supplierAddress = toBase58String(i.caller.bytes) | |
204 | + | let balance = getValueBalanceSupplier(supplierAddress) | |
205 | + | let newBalance = (balance - amount) | |
206 | + | if ((0 > amount)) | |
207 | + | then throw("Can not withdraw negative amount") | |
208 | + | else if ((0 > newBalance)) | |
209 | + | then throw("not enough balance") | |
210 | + | else if ((0 >= balance)) | |
211 | + | then throw("insufficient balance") | |
212 | + | else ScriptResult(WriteSet([DataEntry(getKeyBalanceSupplier(supplierAddress), newBalance)]), TransferSet([ScriptTransfer(addressFromStringValue(supplierAddress), amount, unit)])) | |
213 | + | } | |
214 | + | ||
215 | + | ||
216 | + | ||
217 | + | @Callable(i) | |
218 | + | func voteCommit (item,hash) = { | |
219 | + | let user = toBase58String(i.caller.bytes) | |
220 | + | let commits = getValueCommitsCount(item) | |
221 | + | let status = getValueItemStatus(item) | |
222 | + | if ((commits >= VOTERS)) | |
223 | + | then throw("reached max num of vouters") | |
224 | + | else if ((getValueCommit(item, user) != NONE)) | |
225 | + | then throw("user has allready participated") | |
226 | + | else if ((getKeyItemSupplier(item) == NONE)) | |
227 | + | then throw("item dose not exist") | |
228 | + | else if (if ((status != NONE)) | |
229 | + | then (status != VOTING) | |
230 | + | else false) | |
231 | + | then throw("vouting is not posible") | |
232 | + | else WriteSet([DataEntry(getKeyCommit(item, user), hash), DataEntry(getKeyCommitsCount(item), (commits + 1)), DataEntry(getKeyItemStatus(item), if ((commits == VOTERS)) | |
233 | + | then REVEAL | |
234 | + | else VOTING)]) | |
235 | + | } | |
236 | + | ||
237 | + | ||
238 | + | ||
239 | + | @Callable(i) | |
240 | + | func voteReveal (item,vote,salt) = { | |
241 | + | let user = toBase58String(i.caller.bytes) | |
242 | + | let status = getValueItemStatus(item) | |
243 | + | let newVoteCount = getValueVouteCount(item, vote) | |
244 | + | if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user))) | |
245 | + | then throw("reveal data is not valid") | |
246 | + | else if ((VOTERS > getValueCommitsCount(item))) | |
247 | + | then throw("max num of hasn't reached yet") | |
248 | + | else if ((getValueReveal(item, user) != NONE)) | |
249 | + | then throw("user has already participated") | |
250 | + | else if (if ((status != VOTING)) | |
251 | + | then (status != REVEAL) | |
252 | + | else false) | |
253 | + | then throw("wrong status") | |
254 | + | else if (if ((vote != FEATURED)) | |
255 | + | then (vote != DELISTED) | |
256 | + | else false) | |
257 | + | then throw("wrong vote") | |
258 | + | else if (if ((status == FEATURED)) | |
259 | + | then true | |
260 | + | else (status == DELISTED)) | |
261 | + | then throw("vote has finished") | |
262 | + | else WriteSet([DataEntry(getKeyReveal(item, user), vote), DataEntry(getKeyVoteCount(item, vote), newVoteCount), DataEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM)) | |
263 | + | then vote | |
264 | + | else REVEAL)]) | |
265 | + | } | |
266 | + | ||
267 | + | ||
268 | + | @Verifier(tx) | |
269 | + | func verify () = { | |
270 | + | let alice1 = sigVerify(tx.bodyBytes, tx.proofs[0], allicePubkey) | |
271 | + | let alice2 = sigVerify(tx.bodyBytes, tx.proofs[1], allicePubkey) | |
272 | + | let alice3 = sigVerify(tx.bodyBytes, tx.proofs[2], allicePubkey) | |
273 | + | let bob1 = sigVerify(tx.bodyBytes, tx.proofs[0], bobPubkey) | |
274 | + | let bob2 = sigVerify(tx.bodyBytes, tx.proofs[1], bobPubkey) | |
275 | + | let bob3 = sigVerify(tx.bodyBytes, tx.proofs[2], bobPubkey) | |
276 | + | let cooper1 = sigVerify(tx.bodyBytes, tx.proofs[0], cooperPubkey) | |
277 | + | let copper2 = sigVerify(tx.bodyBytes, tx.proofs[1], cooperPubkey) | |
278 | + | let copper3 = sigVerify(tx.bodyBytes, tx.proofs[2], cooperPubkey) | |
279 | + | let alliceAndBob = if (if (if (if (if (if (alice1) | |
280 | + | then bob2 | |
281 | + | else false) | |
282 | + | then true | |
283 | + | else if (alice1) | |
284 | + | then bob3 | |
285 | + | else false) | |
286 | + | then true | |
287 | + | else if (alice2) | |
288 | + | then bob1 | |
289 | + | else false) | |
290 | + | then true | |
291 | + | else if (alice2) | |
292 | + | then bob3 | |
293 | + | else false) | |
294 | + | then true | |
295 | + | else if (alice3) | |
296 | + | then bob1 | |
297 | + | else false) | |
298 | + | then true | |
299 | + | else if (alice3) | |
300 | + | then bob2 | |
301 | + | else false | |
302 | + | let alliceAndCooper = if (if (if (if (if (if (alice1) | |
303 | + | then copper2 | |
304 | + | else false) | |
305 | + | then true | |
306 | + | else if (alice1) | |
307 | + | then copper3 | |
308 | + | else false) | |
309 | + | then true | |
310 | + | else if (alice2) | |
311 | + | then cooper1 | |
312 | + | else false) | |
313 | + | then true | |
314 | + | else if (alice2) | |
315 | + | then copper3 | |
316 | + | else false) | |
317 | + | then true | |
318 | + | else if (alice3) | |
319 | + | then cooper1 | |
320 | + | else false) | |
321 | + | then true | |
322 | + | else if (alice3) | |
323 | + | then copper2 | |
324 | + | else false | |
325 | + | let bobeAndCooper = if (if (if (if (if (if (cooper1) | |
326 | + | then bob2 | |
327 | + | else false) | |
328 | + | then true | |
329 | + | else if (cooper1) | |
330 | + | then bob3 | |
331 | + | else false) | |
332 | + | then true | |
333 | + | else if (copper2) | |
334 | + | then bob1 | |
335 | + | else false) | |
336 | + | then true | |
337 | + | else if (copper2) | |
338 | + | then bob3 | |
339 | + | else false) | |
340 | + | then true | |
341 | + | else if (copper3) | |
342 | + | then bob1 | |
343 | + | else false) | |
344 | + | then true | |
345 | + | else if (copper3) | |
346 | + | then bob2 | |
347 | + | else false | |
348 | + | match tx { | |
349 | + | case d: SetScriptTransaction => | |
350 | + | sigVerify(tx.bodyBytes, tx.proofs[0], account) | |
351 | + | case d: DataTransaction => | |
352 | + | true | |
353 | + | case _ => | |
354 | + | if (if (alliceAndBob) | |
355 | + | then true | |
356 | + | else alliceAndCooper) | |
357 | + | then true | |
358 | + | else bobeAndCooper | |
359 | + | } | |
360 | + | } | |
361 | + |
github/deemru/w8io/169f3d6 26.62 ms ◑