tx · 5dnMr6dnEGiF7GWbUZC5KEp8W6P8gBUicyYfHjbWWShP 3NCMVbH9EWZogGDLtS8sf1N4ShcoDUqxrn7: -0.01000000 Waves 2020.01.21 15:25 [864015] smart account 3NCMVbH9EWZogGDLtS8sf1N4ShcoDUqxrn7 > SELF 0.00000000 Waves
{ "type": 13, "id": "5dnMr6dnEGiF7GWbUZC5KEp8W6P8gBUicyYfHjbWWShP", "fee": 1000000, "feeAssetId": null, "timestamp": 1579609196733, "version": 1, "sender": "3NCMVbH9EWZogGDLtS8sf1N4ShcoDUqxrn7", "senderPublicKey": "JAAzQjxgzdgjCEdwXpfgpoMVcDpJRs4WgA9eTKxJYitU", "proofs": [ "3zwRLUKH9PNS6hKfMgVyJGqf9CfszopPZHzoRz4Z59EoQFzxHbMQraez9W6TQLpc6rWep3VKoXjevcPcSJMagGRJ" ], "script": "base64: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AAAAAAAAAAEEAAAAB2lzVmFsaWQJAAH4AAAABAkBAAAABlNoYTI1NgAAAAAFAAAABnJhbmRvbQUAAAAMc2lnbmVkUmFuZG9tBQAAAA9wbGF5ZXJQdWJsaWNLZXkDCQEAAAABIQAAAAEJAQAAAAhpc1BsYXllcgAAAAIFAAAAAWkFAAAAD3BsYXllclB1YmxpY0tleQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAFT25seSAJAAJYAAAAAQUAAAAPcGxheWVyUHVibGljS2V5AgAAABQgcGxheWVyIGNhbiBkbyB0aGlzLgMJAQAAAAEhAAAAAQUAAAAHaXNWYWxpZAkAAAIAAAABAgAAABdTaWduYXR1cmUgaXMgbm90IHZhbGlkLgMFAAAABmlzVXNlZAkAAAIAAAABAgAAAA1BbHJlYWR5IHVzZWQuAwkAAGYAAAACBQAAAAZoZWlnaHQFAAAACWVuZEhlaWdodAkAAAIAAAABAgAAAAlUb28gbGF0ZS4DCQAAZgAAAAIFAAAAC3N0YXJ0SGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQIAAAAKVG9vIGVhcmx5LgQAAAABcgkAAGkAAAACCQAAZAAAAAIJAABkAAAAAgkAAGQAAAACCQAAagAAAAIJAASxAAAAAQkAAMkAAAACBQAAAAxzaWduZWRSYW5kb20AAAAAAAAAAAgAAAAAAAAAAGQJAABqAAAAAgkABLEAAAABCQAAyQAAAAIJAADKAAAAAgUAAAAMc2lnbmVkUmFuZG9tAAAAAAAAAAAIAAAAAAAAAAAIAAAAAAAAAABkCQAAagAAAAIJAASxAAAAAQkAAMkAAAACCQAAygAAAAIFAAAADHNpZ25lZFJhbmRvbQAAAAAAAAAAEAAAAAAAAAAACAAAAAAAAAAAZAkAAGoAAAACCQAEsQAAAAEJAADJAAAAAgkAAMoAAAACBQAAAAxzaWduZWRSYW5kb20AAAAAAAAAABgAAAAAAAAAAAgAAAAAAAAAAGQAAAAAAAAAAAQEAAAABml0ZW1JZAMJAABmAAAAAgUAAAABcgAAAAAAAAAAWgIAAAALdW5pcUFzc2V0SWQDCQAAZgAAAAIFAAAAAXIAAAAAAAAAAEYCAAAAC3JhcmVBc3NldElkAwkAAGYAAAACBQAAAAFyAAAAAAAAAAAeAgAAAA91bmNvbW1vbkFzc2V0SWQCAAAADWNvbW1vbkFzc2V0SWQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAA51c2VyRGFpbHlRdWVzdAAAAAUFAAAAD3BsYXllclB1YmxpY0tleQUAAAAGcmFuZG9tBQAAAAtzdGFydEhlaWdodAUAAAAJZW5kSGVpZ2h0AAAAAAAAAAABBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAPcGxheWVyUHVibGljS2V5AAAAAAAAAAABCQACWQAAAAEFAAAABml0ZW1JZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA9wbGF5ZXJQdWJsaWNLZXkAAAAAAAAHoSAFAAAABHVuaXQFAAAAA25pbAAAAABoGfws", "chainId": 84, "height": 864015, "spentComplexity": 0 } View: original | compacted Prev: none Next: EqmpxiqvWvaEQ5Bd3axkseZ16HZCxk9HXGzEw7LSZum2 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let rootAccountPublicKey = base58'' | |
5 | + | ||
6 | + | func getPlayerPublicKey (data) = take(data, 32) | |
7 | + | ||
8 | + | ||
9 | + | func getRandom (data) = take(drop(data, 32), 32) | |
10 | + | ||
11 | + | ||
12 | + | func getStartHeight (data) = toInt(take(drop(data, (32 + 32)), 8)) | |
13 | + | ||
14 | + | ||
15 | + | func getEndHeight (data) = toInt(take(drop(data, ((32 + 32) + 8)), 8)) | |
16 | + | ||
17 | + | ||
18 | + | func getIsUsed (data) = toInt(take(drop(data, (((32 + 32) + 8) + 8)), 8)) | |
19 | + | ||
20 | + | ||
21 | + | func userDailyQuestKey (key,startHeight,endHeight) = ((((("QUESTS_" + toBase58String(key)) + "_") + toString(startHeight)) + "_") + toString(endHeight)) | |
22 | + | ||
23 | + | ||
24 | + | func userDailyQuest (key,random,startHeight,endHeight,isUsed) = DataEntry(userDailyQuestKey(key, startHeight, endHeight), ((((key + random) + toBytes(startHeight)) + toBytes(endHeight)) + toBytes(isUsed))) | |
25 | + | ||
26 | + | ||
27 | + | func isPlayer (i,pubKey) = (i.callerPublicKey == pubKey) | |
28 | + | ||
29 | + | ||
30 | + | func isRoot (i) = (i.callerPublicKey == rootAccountPublicKey) | |
31 | + | ||
32 | + | ||
33 | + | @Callable(i) | |
34 | + | func setPlayerDailyQuest (playerPublicKey,random) = if (!(isRoot(i))) | |
35 | + | then throw("Only root can call this.") | |
36 | + | else WriteSet([userDailyQuest(playerPublicKey, random, height, (height + (24 * 60)), 0)]) | |
37 | + | ||
38 | + | ||
39 | + | ||
40 | + | @Callable(i) | |
41 | + | func playerInvoke (dailyQuestKey,signedRandom) = { | |
42 | + | let data = extract(getBinary(this, dailyQuestKey)) | |
43 | + | let playerPublicKey = getPlayerPublicKey(data) | |
44 | + | let random = getRandom(data) | |
45 | + | let startHeight = getStartHeight(data) | |
46 | + | let endHeight = getEndHeight(data) | |
47 | + | let isUsed = (getIsUsed(data) == 1) | |
48 | + | let isValid = rsaVerify(Sha256(), random, signedRandom, playerPublicKey) | |
49 | + | if (!(isPlayer(i, playerPublicKey))) | |
50 | + | then throw((("Only " + toBase58String(playerPublicKey)) + " player can do this.")) | |
51 | + | else if (!(isValid)) | |
52 | + | then throw("Signature is not valid.") | |
53 | + | else if (isUsed) | |
54 | + | then throw("Already used.") | |
55 | + | else if ((height > endHeight)) | |
56 | + | then throw("Too late.") | |
57 | + | else if ((startHeight > height)) | |
58 | + | then throw("Too early.") | |
59 | + | else { | |
60 | + | let r = (((((toInt(take(signedRandom, 8)) % 100) + (toInt(take(drop(signedRandom, 8), 8)) % 100)) + (toInt(take(drop(signedRandom, 16), 8)) % 100)) + (toInt(take(drop(signedRandom, 24), 8)) % 100)) / 4) | |
61 | + | let itemId = if ((r > 90)) | |
62 | + | then "uniqAssetId" | |
63 | + | else if ((r > 70)) | |
64 | + | then "rareAssetId" | |
65 | + | else if ((r > 30)) | |
66 | + | then "uncommonAssetId" | |
67 | + | else "commonAssetId" | |
68 | + | ScriptResult(WriteSet([userDailyQuest(playerPublicKey, random, startHeight, endHeight, 1)]), TransferSet([ScriptTransfer(addressFromPublicKey(playerPublicKey), 1, fromBase58String(itemId)), ScriptTransfer(addressFromPublicKey(playerPublicKey), 500000, unit)])) | |
69 | + | } | |
70 | + | } | |
71 | + | ||
72 | + |
github/deemru/w8io/3ef1775 106.40 ms ◑