tx · 32qsTgxx1aTMzvupms8e8DT2nUht88BvHGKzJrqh3Vd5

3N6yFJ5Z8NUUQvfGGMLp5efmevRRtTgQuun:  -0.01400000 Waves

2019.09.08 07:40 [666639] smart account 3N6yFJ5Z8NUUQvfGGMLp5efmevRRtTgQuun > SELF 0.00000000 Waves

{ "type": 13, "id": "32qsTgxx1aTMzvupms8e8DT2nUht88BvHGKzJrqh3Vd5", "fee": 1400000, "feeAssetId": null, "timestamp": 1567917129579, "version": 1, "sender": "3N6yFJ5Z8NUUQvfGGMLp5efmevRRtTgQuun", "senderPublicKey": "7uRSDXQUkUS7719CDA4wXghhzsWrF22gb18FGDPZyA6P", "proofs": [ "5wKQutbkQD4g1dmoRY4DbgUoSQGjTpqKBrieYWMG2m2JkHsKutULg7mcKQ3oL8Ntvv9gyT27cDt1TNwBxn4tqBfp" ], "script": "base64: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AAAAAgUAAAAGZ2FtZUlkAgAAAAFfBQAAABBwbGF5ZXJBZGRyZXNzU3RyAgAAAAhfdGlja2V0cwkBAAAACmdldFRpY2tldHMAAAADBQAAAAZnYW1lSWQFAAAAEHBsYXllckFkZHJlc3NTdHIFAAAACnBheW1lbnRBbXQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGZ2FtZUlkAgAAAAhfcGxheWVycwkBAAAADmdldFBsYXllcnNMaXN0AAAAAgUAAAAGZ2FtZUlkBQAAABBwbGF5ZXJBZGRyZXNzU3RyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAApMQVNUVElDS0VUCQEAAAANZ2V0TGFzdFRpY2tldAAAAAEFAAAACnBheW1lbnRBbXQFAAAAA25pbAQAAAALdG9XaW5TZXJ2ZXIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJV2luU2VydmVyBQAAAApwYXltZW50QW10BQAAAAR1bml0BQAAAANuaWwJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABBQAAAAdiZXREYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAAt0b1dpblNlcnZlcgAAAACvT5MX", "chainId": 84, "height": 666639, "spentComplexity": 0 } View: original | compacted Prev: none Next: CyA88LXvvL7V7Z6igTx4qK4bBM1sq3vi2nAgmDmJ1DY9 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let WinServer = addressFromStringValue("3N9XnyPpWxYohKH7z5dEuq8rpnobpyzPrzE")
5+
6+let WAVELET = ((100 * 1000) * 1000)
7+
8+let COMMISSION = ((5 * WAVELET) / 1000)
9+
10+let TicketsPerWave = 100
11+
12+let CURRENTGAME = "$CURRENT_GAME"
13+
14+let GAMESCOUNTERKEY = "$GAME_NUM"
15+
16+let LASTTICKET = "$LAST_TICKET"
17+
18+func getPlayersList (gameId,currentPlayer) = {
19+ let playersPresented = isDefined(getString(this, (gameId + "_players")))
20+ if (!(playersPresented))
21+ then currentPlayer
22+ else if (isDefined(getString(this, (((gameId + "_") + currentPlayer) + "_tickets"))))
23+ then getStringValue(this, (gameId + "_players"))
24+ else ((getStringValue(this, (gameId + "_players")) + "_") + currentPlayer)
25+ }
26+
27+
28+func FormatGameDataParam (p) = {
29+ let s = size(p)
30+ if ((s == 0))
31+ then throw("Parameter size must be greater then 0")
32+ else if ((s > 99))
33+ then throw("Parameter size must be less then 100")
34+ else if ((10 > s))
35+ then (("0" + toString(s)) + p)
36+ else (toString(s) + p)
37+ }
38+
39+
40+func getOrCreateLastTicket () = {
41+ let isLastTicketPresented = isDefined(getInteger(this, LASTTICKET))
42+ if (!(isLastTicketPresented))
43+ then 0
44+ else getIntegerValue(this, LASTTICKET)
45+ }
46+
47+
48+func getTickets (gameId,playerAddressStr,paymentAmt) = {
49+ let lastTicket = getOrCreateLastTicket()
50+ let wavesPayment = (paymentAmt / WAVELET)
51+ let firstNewTicket = (lastTicket + 1)
52+ let lastNewTicket = ((firstNewTicket + (wavesPayment * TicketsPerWave)) - 1)
53+ let newTickets = ((FormatGameDataParam(toString(firstNewTicket)) + "_") + FormatGameDataParam(toString(lastNewTicket)))
54+ let ticketsStr = isDefined(getString(this, (((gameId + "_") + playerAddressStr) + "_tickets")))
55+ if (ticketsStr)
56+ then {
57+ let currentTickets = getStringValue(this, (((gameId + "_") + playerAddressStr) + "_tickets"))
58+ ((currentTickets + " ") + newTickets)
59+ }
60+ else newTickets
61+ }
62+
63+
64+func getLastTicket (paymentAmt) = {
65+ let lastTicket = getOrCreateLastTicket()
66+ let wavesPayment = (paymentAmt / WAVELET)
67+ (lastTicket + (wavesPayment * TicketsPerWave))
68+ }
69+
70+
71+func IncrementGameNum (gameId,txId) = {
72+ let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
73+ case num: Int =>
74+ num
75+ case _ =>
76+ 0
77+ }
78+ if ((gameId == txId))
79+ then (gameNum + 1)
80+ else gameNum
81+ }
82+
83+
84+func getOrCreateCurrentGame (txId) = {
85+ let isCurrentGamePresented = isDefined(getString(this, CURRENTGAME))
86+ if (!(isCurrentGamePresented))
87+ then txId
88+ else if ((getStringValue(this, CURRENTGAME) == ""))
89+ then txId
90+ else getStringValue(this, CURRENTGAME)
91+ }
92+
93+
94+func getCurrentGame (txId) = {
95+ let gameId = getOrCreateCurrentGame(txId)
96+ let gameAlreadyPlayed = isDefined(getString(this, (gameId + "_result")))
97+ if (gameAlreadyPlayed)
98+ then txId
99+ else gameId
100+ }
101+
102+
103+@Callable(i)
104+func resetGameData (gameId) = {
105+ let playerPubKey58 = toBase58String(i.callerPublicKey)
106+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
107+ let playerAddressStr = toString(playerAddress)
108+ let zeroData = [DataEntry(CURRENTGAME, ""), DataEntry(GAMESCOUNTERKEY, 0), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), ""), DataEntry((gameId + "_players"), ""), DataEntry(LASTTICKET, 0)]
109+ WriteSet(zeroData)
110+ }
111+
112+
113+
114+@Callable(i)
115+func bet () = {
116+ let txId = toBase58String(i.transactionId)
117+ let gameId = getCurrentGame(txId)
118+ let gameNum = IncrementGameNum(gameId, txId)
119+ let pmt = extract(i.payment)
120+ let paymentAmt = pmt.amount
121+ let betNotInWaves = isDefined(pmt.assetId)
122+ let feeNotInWaves = isDefined(pmt.assetId)
123+ let playerPubKey58 = toBase58String(i.callerPublicKey)
124+ let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
125+ if (betNotInWaves)
126+ then throw("Bet amount must be in Waves")
127+ else if (feeNotInWaves)
128+ then throw("Transaction's fee must be in Waves")
129+ else {
130+ let playerAddressStr = toString(playerAddress)
131+ let betData = [DataEntry(CURRENTGAME, gameId), DataEntry(GAMESCOUNTERKEY, gameNum), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), getTickets(gameId, playerAddressStr, paymentAmt)), DataEntry((gameId + "_players"), getPlayersList(gameId, playerAddressStr)), DataEntry(LASTTICKET, getLastTicket(paymentAmt))]
132+ let toWinServer = [ScriptTransfer(WinServer, paymentAmt, unit)]
133+ ScriptResult(WriteSet(betData), TransferSet(toWinServer))
134+ }
135+ }
136+
137+

github/deemru/w8io/026f985 
17.54 ms