tx · 9pLz7eev4hTAbL6UederunZSrj6zHEg8pMaFjVMmHDXz

3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs:  -0.01400000 Waves

2019.09.07 03:55 [664963] smart account 3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs > SELF 0.00000000 Waves

{ "type": 13, "id": "9pLz7eev4hTAbL6UederunZSrj6zHEg8pMaFjVMmHDXz", "fee": 1400000, "feeAssetId": null, "timestamp": 1567817706403, "version": 1, "sender": "3N2Z6EjzrzaCpD8ypDYLWDKe2PPVU8y9dJs", "senderPublicKey": "HSTmdhPrJF81ozDBaqVn8QVtV76oD7gzDfcHPQRdxdwW", "proofs": [ "4fJFttL4imVj811i7fgqk9knB9qiTTaP3H11w54m4j64qhYNvx5CmgFQn8vfZfCfk5872qjGBoUdZC1CPdJsxuwV" ], "script": "base64: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", "chainId": 84, "height": 664963, "spentComplexity": 0 } View: original | compacted Prev: 9pAnbzNCLGuURtfJX6wFQU47v6Pp24hYbU1EtHRbohjw Next: JBR3Ab46RRb7MWoEStof8mBaJAqHDJVY17wDZYUkWCwK Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ServerBetPublicKey = fromBase58String("7im9caiCmE4SL6jTm4KTicHH4bGPf5v59rnfUA3cCRDj")
5-
64 let WAVELET = ((100 * 1000) * 1000)
75
86 let COMMISSION = ((5 * WAVELET) / 1000)
1614 let LASTTICKET = "$LAST_TICKET"
1715
1816 func getPlayersList (gameId,currentPlayer) = {
19- let playersPresented = isDefined(getStringValue(this, (gameId + "_players")))
17+ let playersPresented = isDefined(getString(this, (gameId + "_players")))
2018 if (!(playersPresented))
2119 then currentPlayer
22- else if (isDefined(getStringValue(this, (((gameId + "_") + currentPlayer) + "_tickets"))))
20+ else if (isDefined(getString(this, (((gameId + "_") + currentPlayer) + "_tickets"))))
2321 then getStringValue(this, (gameId + "_players"))
2422 else ((getStringValue(this, (gameId + "_players")) + "_") + currentPlayer)
2523 }
2624
2725
28-func getTickets (paymentAmt) = {
26+func FormatGameDataParam (p) = {
27+ let s = size(p)
28+ if ((s == 0))
29+ then throw("Parameter size must be greater then 0")
30+ else if ((s > 99))
31+ then throw("Parameter size must be less then 100")
32+ else if ((10 > s))
33+ then (("0" + toString(s)) + p)
34+ else (toString(s) + p)
35+ }
36+
37+
38+func getTickets (gameId,playerAddressStr,paymentAmt) = {
2939 let lastTicket = getIntegerValue(this, LASTTICKET)
3040 let wavesPayment = (paymentAmt / WAVELET)
31- let tickets = "011_03100__03101_03300__010_010__010_010__010_010"
32- tickets
41+ let firstNewTicket = (lastTicket + 1)
42+ let lastNewTicket = (firstNewTicket + (wavesPayment * TicketsPerWave))
43+ let newTickets = ((FormatGameDataParam(toString(firstNewTicket)) + "_") + FormatGameDataParam(toString(lastNewTicket)))
44+ let ticketsStr = isDefined(getString(this, (((gameId + "_") + playerAddressStr) + "_tickets")))
45+ if (ticketsStr)
46+ then {
47+ let currentTickets = getStringValue(this, (((gameId + "_") + playerAddressStr) + "_tickets"))
48+ ((currentTickets + " ") + newTickets)
49+ }
50+ else newTickets
3351 }
3452
3553
7189 then throw("Transaction's fee must be in Waves")
7290 else {
7391 let playerAddressStr = toString(playerAddress)
74- let betData = [DataEntry(CURRENTGAME, gameId), DataEntry(GAMESCOUNTERKEY, gameNum), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), getTickets(pmt.amount)), DataEntry((gameId + "_players"), getPlayersList(gameId, playerAddressStr))]
92+ let betData = [DataEntry(CURRENTGAME, gameId), DataEntry(GAMESCOUNTERKEY, gameNum), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), getTickets(gameId, playerAddressStr, pmt.amount)), DataEntry((gameId + "_players"), getPlayersList(gameId, playerAddressStr))]
7593 WriteSet(betData)
7694 }
7795 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let ServerBetPublicKey = fromBase58String("7im9caiCmE4SL6jTm4KTicHH4bGPf5v59rnfUA3cCRDj")
5-
64 let WAVELET = ((100 * 1000) * 1000)
75
86 let COMMISSION = ((5 * WAVELET) / 1000)
97
108 let TicketsPerWave = 100
119
1210 let CURRENTGAME = "$CURRENT_GAME"
1311
1412 let GAMESCOUNTERKEY = "$GAME_NUM"
1513
1614 let LASTTICKET = "$LAST_TICKET"
1715
1816 func getPlayersList (gameId,currentPlayer) = {
19- let playersPresented = isDefined(getStringValue(this, (gameId + "_players")))
17+ let playersPresented = isDefined(getString(this, (gameId + "_players")))
2018 if (!(playersPresented))
2119 then currentPlayer
22- else if (isDefined(getStringValue(this, (((gameId + "_") + currentPlayer) + "_tickets"))))
20+ else if (isDefined(getString(this, (((gameId + "_") + currentPlayer) + "_tickets"))))
2321 then getStringValue(this, (gameId + "_players"))
2422 else ((getStringValue(this, (gameId + "_players")) + "_") + currentPlayer)
2523 }
2624
2725
28-func getTickets (paymentAmt) = {
26+func FormatGameDataParam (p) = {
27+ let s = size(p)
28+ if ((s == 0))
29+ then throw("Parameter size must be greater then 0")
30+ else if ((s > 99))
31+ then throw("Parameter size must be less then 100")
32+ else if ((10 > s))
33+ then (("0" + toString(s)) + p)
34+ else (toString(s) + p)
35+ }
36+
37+
38+func getTickets (gameId,playerAddressStr,paymentAmt) = {
2939 let lastTicket = getIntegerValue(this, LASTTICKET)
3040 let wavesPayment = (paymentAmt / WAVELET)
31- let tickets = "011_03100__03101_03300__010_010__010_010__010_010"
32- tickets
41+ let firstNewTicket = (lastTicket + 1)
42+ let lastNewTicket = (firstNewTicket + (wavesPayment * TicketsPerWave))
43+ let newTickets = ((FormatGameDataParam(toString(firstNewTicket)) + "_") + FormatGameDataParam(toString(lastNewTicket)))
44+ let ticketsStr = isDefined(getString(this, (((gameId + "_") + playerAddressStr) + "_tickets")))
45+ if (ticketsStr)
46+ then {
47+ let currentTickets = getStringValue(this, (((gameId + "_") + playerAddressStr) + "_tickets"))
48+ ((currentTickets + " ") + newTickets)
49+ }
50+ else newTickets
3351 }
3452
3553
3654 func IncrementGameNum (gameId,txId) = if ((gameId == txId))
3755 then {
3856 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
3957 case num: Int =>
4058 num
4159 case _ =>
4260 0
4361 }
4462 toString((gameNum + 1))
4563 }
4664 else toString(getIntegerValue(this, GAMESCOUNTERKEY))
4765
4866
4967 func getCurrentGame (txId) = {
5068 let gameId = getStringValue(this, CURRENTGAME)
5169 let gameStillOpen = isDefined(getString(this, (gameId + "_result")))
5270 if (gameStillOpen)
5371 then gameId
5472 else txId
5573 }
5674
5775
5876 @Callable(i)
5977 func bet () = {
6078 let txId = toBase58String(i.transactionId)
6179 let gameId = getCurrentGame(txId)
6280 let gameNum = IncrementGameNum(gameId, txId)
6381 let pmt = extract(i.payment)
6482 let betNotInWaves = isDefined(pmt.assetId)
6583 let feeNotInWaves = isDefined(pmt.assetId)
6684 let playerPubKey58 = toBase58String(i.callerPublicKey)
6785 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
6886 if (betNotInWaves)
6987 then throw("Bet amount must be in Waves")
7088 else if (feeNotInWaves)
7189 then throw("Transaction's fee must be in Waves")
7290 else {
7391 let playerAddressStr = toString(playerAddress)
74- let betData = [DataEntry(CURRENTGAME, gameId), DataEntry(GAMESCOUNTERKEY, gameNum), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), getTickets(pmt.amount)), DataEntry((gameId + "_players"), getPlayersList(gameId, playerAddressStr))]
92+ let betData = [DataEntry(CURRENTGAME, gameId), DataEntry(GAMESCOUNTERKEY, gameNum), DataEntry((((gameId + "_") + playerAddressStr) + "_tickets"), getTickets(gameId, playerAddressStr, pmt.amount)), DataEntry((gameId + "_players"), getPlayersList(gameId, playerAddressStr))]
7593 WriteSet(betData)
7694 }
7795 }
7896
7997

github/deemru/w8io/026f985 
37.61 ms