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