tx · B35FRY9KNJiD7xt2zYtkNkpoZJ4SNs3Run4Tkq15R2dW

3My9Kd9gApw3GCoz2KWSZPiTRNzDsNE2eeh:  -0.01400000 Waves

2021.02.15 21:40 [1399653] smart account 3My9Kd9gApw3GCoz2KWSZPiTRNzDsNE2eeh > SELF 0.00000000 Waves

{ "type": 13, "id": "B35FRY9KNJiD7xt2zYtkNkpoZJ4SNs3Run4Tkq15R2dW", "fee": 1400000, "feeAssetId": null, "timestamp": 1613414400333, "version": 2, "chainId": 84, "sender": "3My9Kd9gApw3GCoz2KWSZPiTRNzDsNE2eeh", "senderPublicKey": "BjjwtwUgZ4s8p9HJuFwyRMR3egd3zMAHGDV2HoZ1J7ho", "proofs": [ "3qFV26UZBrU6tcSWVrML9RVRRaYmzZSBSBi3rj3RMUGqqaYiFd7RficQ47jZBpTVRVLny7aP7qHSDQgdTMxWqE5S" ], "script": "base64:AAIDAAAAAAAAAAYIARIAEgAAAAAdAAAAAA1nYW1lUHVibGljS2V5CQACWQAAAAECAAAALEJqand0d1VnWjRzOHA5SEp1Rnd5Uk1SM2VnZDN6TUFIR0RWMkhvWjFKN2hvAAAAAA5BZG1pblB1YmxpY0tleQkAAlkAAAABAgAAACw1MkRqVE54b3llc0FkTGtLcDlVSjdyTjFYMk5QNW5uTnZrSHdLTDI5d2JuWgAAAAAWZGl2aWRlbmRQcm9ncmFtQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAOQWRtaW5QdWJsaWNLZXkAAAAADXJzYVB1YmxpY0tleTEJAAJbAAAAAQIAAACATUZ3d0RRWUpLb1pJaHZjTkFRRUJCUUFEU3dBd1NBSkJBT2tpdXovQlY0RWpveEdoVG1OQ2J0MlRna2JTUEgvdzY5YjNGMXJLbUQ2MUppUFh2dkY4TDJwSTl4T1ljVzRGbW9FWlZIbFJRdEFsYUp5a2wzK3JzckVDQXdFQUFRPT0AAAAADXJzYVB1YmxpY0tleTIJAAJbAAAAAQIAAACATUZ3d0RRWUpLb1pJaHZjTkFRRUJCUUFEU3dBd1NBSkJBSm5YemJNL1Yyc0RWMVVMYlBTT2xIa2xkT1RXUnJIaTVmeElrQm11ZXZyQ2xNUFZIN3JxY2N3aXJETmNNZElkd1hISTlBZGhqOUZXandHSXdmVS9LNk1DQXdFQUFRPT0AAAAADXJzYVB1YmxpY0tleTMJAAJbAAAAAQIAAACATUZ3d0RRWUpLb1pJaHZjTkFRRUJCUUFEU3dBd1NBSkJBT1JEZXZ5MHI0a3pMcU95U2xvQjYzSHV2MmU0emVIS0hqQ3N5NXZ0RkttV1piWEphOGdaWXQ0K0VrbEZJbzFLOW9xdTVCQVBWZkozRk96czJVMUErZzBDQXdFQUFRPT0AAAAABWRydW0xCQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATUJAARMAAAAAgIAAAABNwkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATYJAARMAAAAAgIAAAABNQkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNAUAAAADbmlsAAAAAAVkcnVtMgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATYJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNQkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATcFAAAAA25pbAAAAAAFZHJ1bTMJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATcJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATYJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNQkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE3CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE2BQAAAANuaWwAAAAACHN0YXRlQWNjAgAAAAhBY2NlcHRlZAAAAAAIc3RhdGVXaW4CAAAAA1dpbgAAAAAJc3RhdGVMb3NlAgAAAARMb3NlAAAAAAxzdGF0ZVRpbWVvdXQCAAAADFdpbkJ5VGltZW91dAAAAAAHd2F2ZXNJZAUAAAAEdW5pdAAAAAALd2F2ZXNNaW5BbXQAAAAAAAExLQAAAAAAC3dhdmVzTWF4QW10CQAAaAAAAAIFAAAAC3dh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AABkAAAAAgUAAAAVY3VycmVudEdhbWVzUGxheWVkTnVtAAAAAAAAAAABAQAAABJjaGVja0NhbGxlcklzQWRtaW4AAAABAAAAD2NhbGxlclB1YmxpY0tleQkAAAAAAAACBQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADkFkbWluUHVibGljS2V5AQAAABBnZXRDdXJyZW50SW5jb21lAAAAAQAAAAlhc3NldE5hbWUEAAAAA3ZhbAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWFzc2V0TmFtZQIAAAAHX0luY29tZQQAAAAHJG1hdGNoMAUAAAADdmFsAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAABAAAAFGNhbGxlcklzRGVwb3NpdE93bmVyAAAAAgAAAAlhc3NldE5hbWUAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxkZXBvc2l0T3duZXIJAAQdAAAAAgUAAAAWZGl2aWRlbmRQcm9ncmFtQWRkcmVzcwkAASwAAAACBQAAAAlhc3NldE5hbWUCAAAADV9EZXBvc2l0T3duZXIDCQAAAAAAAAIFAAAAD2NhbGxlclB1YmxpY0tleQUAAAAMZGVwb3NpdE93bmVyBQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAApT25seSBkZXBvc2l0IG93bmVyIGNhbiB3aXRoZHJhd2FsIGRlcG9zaXQBAAAADmdldERlcG9zaXREYXRhAAAAAgAAAAlhc3NldE5hbWUAAAAJa2V5U3VmZml4BAAAAANrZXkJAAEsAAAAAgUAAAAJYXNzZXROYW1lBQAAAAlrZXlTdWZmaXgEAAAAA3ZhbAkABBoAAAACBQAAABZkaXZpZGVuZFByb2dyYW1BZGRyZXNzBQAAAANrZXkEAAAAByRtYXRjaDAFAAAAA3ZhbAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAK0NvdWxkbid0IGZpbmQgZGl2aWRlbmQgcHJvZ3JhbSBzdGFydCBoZWlnaHQAAAACAAAAAWkBAAAACGluaXRHYW1lAAAAAAMJAQAAABJjaGVja0NhbGxlcklzQWRtaW4AAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAAOWF9HQU1FU0NPVU5URVIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAAMR0FNRVNDT1VOVEVSBQAAAAckbWF0Y2gwCQAAAgAAAAECAAAAEUlOSVRfQUxSRUFEWV9ET05FCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAAA5YX0dBTUVTQ09VTlRFUgAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgIAAAAOV0FWRVNfUmVzZXJ2ZWQFAAAAC3dhdmVzTWluQW10BQAAAANuaWwJAAACAAAAAQIAAAASaW5pdEdhbWVfRk9SQkJJREVOAAAAAWkBAAAAB21ha2VCZXQAAAAABAAAAAZnYW1lSWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAANcGxheWVyQWRkcmVzcwkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAliZXRBbW91bnQJAABlAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAACmNvbW1pc3Npb24EAAAADXBtdEFtdENvcnJlY3QJAQAAAAtwbXRBbXRDaGVjawAAAAEFAAAACWJldEFtb3VudAMFAAAADXBtdEFtdENvcnJlY3QEAAAACmRhdGFTdHJpbmcJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAACHN0YXRlQWNjAgAAAAFfCQAEJQAAAAEFAAAADXBsYXllckFkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAAJYmV0QW1vdW50AgAAAAdfV0FWRVNfCQABpAAAAAEFAAAABmhlaWdodAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZnYW1lSWQCAAAAB19HYW1lSWQFAAAACmRhdGFTdHJpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAADldBVkVTX1Jlc2VydmVkBQAAAAliZXRBbW91bnQFAAAAA25pbAkAAAIAAAABAgAAABRBc3NldElkIGlzIGluY29ycmVjdAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAANZ2FtZVB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAAJ0eAUAAAAHJG1hdGNoMAYHB7nPOec=", "height": 1399653, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GpQJHPfxJeAn48zLv3UXjZYKrRWXaJn6rJ2jj3EJKKEw Next: JDaxUVvNtYCTC9ZLZ9eGb2hTmLhSH1y2Lpieoz5x3Gpp Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let gamePublicKey = fromBase58String("BjjwtwUgZ4s8p9HJuFwyRMR3egd3zMAHGDV2HoZ1J7ho")
55
6-let serverPublicKey = fromBase58String("52DjTNxoyesAdLkKp9UJ7rN1X2NP5nnNvkHwKL29wbnZ")
6+let AdminPublicKey = fromBase58String("52DjTNxoyesAdLkKp9UJ7rN1X2NP5nnNvkHwKL29wbnZ")
77
8-let dividendProgramAddress = addressFromPublicKey(serverPublicKey)
8+let dividendProgramAddress = addressFromPublicKey(AdminPublicKey)
99
1010 let rsaPublicKey1 = fromBase64String("MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOkiuz/BV4EjoxGhTmNCbt2TgkbSPH/w69b3F1rKmD61JiPXvvF8L2pI9xOYcW4FmoEZVHlRQtAlaJykl3+rsrECAwEAAQ==")
1111
3737
3838 let gameTimeFrame = 2880
3939
40-func pmtAmtCheck (pmtAssetId,betAmount) = if ((pmtAssetId == "WAVES"))
41- then if (if ((betAmount >= wavesMinAmt))
42- then (wavesMaxAmt >= betAmount)
43- else false)
44- then true
45- else throw("Bet amount is not in range")
46- else throw("Payment Asset ID is not valid")
40+func pmtAmtCheck (betAmount) = if (if ((betAmount >= wavesMinAmt))
41+ then (wavesMaxAmt >= betAmount)
42+ else false)
43+ then true
44+ else throw("Bet amount is not in range")
4745
4846
4947 func getDataList (gameId) = {
6361 if (rsaCheck)
6462 then (toInt(sha256(rsaSign)) % 19)
6563 else throw("Invalid RSA Signature")
66- }
67-
68-
69-func increaseReservedBalance (pmtAmt,assetId58) = {
70- let currentReservedBalance = {
71- let valueReservedBalance = getInteger(this, "WAVES_Reserved")
72- match valueReservedBalance {
73- case a: Int =>
74- a
75- case _ =>
76- 0
77- }
78- }
79- let newReservedBalance = (currentReservedBalance + (pmtAmt * 260))
80- if ((assetBalance(this, assetId58) >= newReservedBalance))
81- then newReservedBalance
82- else throw("Bet was rejected. Insufficient funds on game account.")
83- }
84-
85-
86-func decreaseReservedBalance (betAmt,assetId) = {
87- let valueReservedBalance = getInteger(this, (assetId + "_Reserved"))
88- let extractReservedBalance = match valueReservedBalance {
89- case a: Int =>
90- a
91- case _ =>
92- 0
93- }
94- let decreaseReservedBalance = (extractReservedBalance - (betAmt * 260))
95- if ((decreaseReservedBalance >= 0))
96- then decreaseReservedBalance
97- else throw("Reserved balance couldn't be less than 0")
9864 }
9965
10066
139105 else throw("Asset name is incorrect")
140106
141107
142-func assetBase58ToName (assetId) = if (!(isDefined(assetId)))
143- then "WAVES"
144- else throw("AssetId is incorrect")
145-
146-
147108 func setNewGamesPlayedNum (address) = {
148109 let valueGamesPlayedNum = getInteger(this, (address + "_GamesPlayed"))
149110 let currentGamesPlayedNum = match valueGamesPlayedNum {
156117 }
157118
158119
159-func checkPermission (callerPublicKey) = (callerPublicKey != serverPublicKey)
120+func checkCallerIsAdmin (callerPublicKey) = (callerPublicKey == AdminPublicKey)
160121
161122
162123 func getCurrentIncome (assetName) = {
191152
192153
193154 @Callable(i)
194-func initGame () = if (checkPermission(i.callerPublicKey))
195- then throw("initGame_FORBBIDEN")
196- else match getInteger(this, "X_GAMESCOUNTER") {
155+func initGame () = if (checkCallerIsAdmin(i.callerPublicKey))
156+ then match getInteger(this, "X_GAMESCOUNTER") {
197157 case GAMESCOUNTER: Int =>
198158 throw("INIT_ALREADY_DONE")
199159 case _ =>
200160 WriteSet([DataEntry("X_GAMESCOUNTER", 1), DataEntry("WAVES_Reserved", wavesMinAmt)])
201161 }
162+ else throw("initGame_FORBBIDEN")
202163
203164
204165
205166 @Callable(i)
206167 func makeBet () = {
168+ let gameId = toBase58String(i.transactionId)
169+ let playerAddress = extract(i.caller)
207170 let pmt = extract(i.payment)
208171 let betAmount = (pmt.amount - commission)
209- let assetId = pmt.assetId
210- let gameId = toBase58String(i.transactionId)
211- let playerAddress = extract(i.caller)
212- let setReservedBalance = increaseReservedBalance(betAmount, pmt.assetId)
213- let pmtAmtCorrect = pmtAmtCheck("WAVES", betAmount)
172+ let pmtAmtCorrect = pmtAmtCheck(betAmount)
214173 if (pmtAmtCorrect)
215174 then {
216175 let dataString = ((((((stateAcc + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height))
217- WriteSet([DataEntry((gameId + "_GameId"), dataString), DataEntry("WAVES_Reserved", setReservedBalance)])
176+ WriteSet([DataEntry((gameId + "_GameId"), dataString), DataEntry("WAVES_Reserved", betAmount)])
218177 }
219178 else throw("AssetId is incorrect")
220179 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gamePublicKey = fromBase58String("BjjwtwUgZ4s8p9HJuFwyRMR3egd3zMAHGDV2HoZ1J7ho")
55
6-let serverPublicKey = fromBase58String("52DjTNxoyesAdLkKp9UJ7rN1X2NP5nnNvkHwKL29wbnZ")
6+let AdminPublicKey = fromBase58String("52DjTNxoyesAdLkKp9UJ7rN1X2NP5nnNvkHwKL29wbnZ")
77
8-let dividendProgramAddress = addressFromPublicKey(serverPublicKey)
8+let dividendProgramAddress = addressFromPublicKey(AdminPublicKey)
99
1010 let rsaPublicKey1 = fromBase64String("MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOkiuz/BV4EjoxGhTmNCbt2TgkbSPH/w69b3F1rKmD61JiPXvvF8L2pI9xOYcW4FmoEZVHlRQtAlaJykl3+rsrECAwEAAQ==")
1111
1212 let rsaPublicKey2 = fromBase64String("MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJnXzbM/V2sDV1ULbPSOlHkldOTWRrHi5fxIkBmuevrClMPVH7rqccwirDNcMdIdwXHI9Adhj9FWjwGIwfU/K6MCAwEAAQ==")
1313
1414 let rsaPublicKey3 = fromBase64String("MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAORDevy0r4kzLqOySloB63Huv2e4zeHKHjCsy5vtFKmWZbXJa8gZYt4+EklFIo1K9oqu5BAPVfJ3FOzs2U1A+g0CAwEAAQ==")
1515
1616 let drum1 = ["2", "1", "3", "5", "7", "3", "3", "1", "4", "1", "3", "5", "2", "4", "2", "6", "5", "2", "1", "4"]
1717
1818 let drum2 = ["4", "2", "3", "1", "6", "4", "2", "1", "4", "2", "1", "6", "3", "1", "2", "5", "1", "5", "3", "7"]
1919
2020 let drum3 = ["3", "2", "7", "4", "1", "6", "4", "2", "3", "1", "4", "1", "5", "5", "1", "3", "7", "1", "2", "6"]
2121
2222 let stateAcc = "Accepted"
2323
2424 let stateWin = "Win"
2525
2626 let stateLose = "Lose"
2727
2828 let stateTimeout = "WinByTimeout"
2929
3030 let wavesId = unit
3131
3232 let wavesMinAmt = 20000000
3333
3434 let wavesMaxAmt = (wavesMinAmt * 10)
3535
3636 let commission = 500000
3737
3838 let gameTimeFrame = 2880
3939
40-func pmtAmtCheck (pmtAssetId,betAmount) = if ((pmtAssetId == "WAVES"))
41- then if (if ((betAmount >= wavesMinAmt))
42- then (wavesMaxAmt >= betAmount)
43- else false)
44- then true
45- else throw("Bet amount is not in range")
46- else throw("Payment Asset ID is not valid")
40+func pmtAmtCheck (betAmount) = if (if ((betAmount >= wavesMinAmt))
41+ then (wavesMaxAmt >= betAmount)
42+ else false)
43+ then true
44+ else throw("Bet amount is not in range")
4745
4846
4947 func getDataList (gameId) = {
5048 let getDataString = getString(this, (gameId + "_GameId"))
5149 let a = match getDataString {
5250 case a: String =>
5351 a
5452 case _ =>
5553 throw("GameId was not found")
5654 }
5755 split(a, "_")
5856 }
5957
6058
6159 func rsaToInt (gameId,rsaSign,rsaPublicKey) = {
6260 let rsaCheck = rsaVerify(SHA256, toBytes(gameId), rsaSign, rsaPublicKey)
6361 if (rsaCheck)
6462 then (toInt(sha256(rsaSign)) % 19)
6563 else throw("Invalid RSA Signature")
66- }
67-
68-
69-func increaseReservedBalance (pmtAmt,assetId58) = {
70- let currentReservedBalance = {
71- let valueReservedBalance = getInteger(this, "WAVES_Reserved")
72- match valueReservedBalance {
73- case a: Int =>
74- a
75- case _ =>
76- 0
77- }
78- }
79- let newReservedBalance = (currentReservedBalance + (pmtAmt * 260))
80- if ((assetBalance(this, assetId58) >= newReservedBalance))
81- then newReservedBalance
82- else throw("Bet was rejected. Insufficient funds on game account.")
83- }
84-
85-
86-func decreaseReservedBalance (betAmt,assetId) = {
87- let valueReservedBalance = getInteger(this, (assetId + "_Reserved"))
88- let extractReservedBalance = match valueReservedBalance {
89- case a: Int =>
90- a
91- case _ =>
92- 0
93- }
94- let decreaseReservedBalance = (extractReservedBalance - (betAmt * 260))
95- if ((decreaseReservedBalance >= 0))
96- then decreaseReservedBalance
97- else throw("Reserved balance couldn't be less than 0")
9864 }
9965
10066
10167 func drumIntToString (drumInt) = if ((10 > drumInt))
10268 then ("0" + toString(drumInt))
10369 else toString(drumInt)
10470
10571
10672 func defineMultiplier (threeInARow,twoInARow) = if ((threeInARow == "777"))
10773 then 2600
10874 else if ((threeInARow == "666"))
10975 then 1300
11076 else if ((threeInARow == "555"))
11177 then 450
11278 else if ((threeInARow == "444"))
11379 then 200
11480 else if ((threeInARow == "333"))
11581 then 150
11682 else if ((threeInARow == "222"))
11783 then 110
11884 else if ((threeInARow == "111"))
11985 then 50
12086 else if ((twoInARow == "77"))
12187 then 270
12288 else if ((twoInARow == "66"))
12389 then 130
12490 else if ((twoInARow == "55"))
12591 then 45
12692 else if ((twoInARow == "44"))
12793 then 30
12894 else if ((twoInARow == "33"))
12995 then 20
13096 else if ((twoInARow == "22"))
13197 then 17
13298 else if ((twoInARow == "11"))
13399 then 13
134100 else 0
135101
136102
137103 func assetNameToBase58 (assetName) = if ((assetName == "WAVES"))
138104 then wavesId
139105 else throw("Asset name is incorrect")
140106
141107
142-func assetBase58ToName (assetId) = if (!(isDefined(assetId)))
143- then "WAVES"
144- else throw("AssetId is incorrect")
145-
146-
147108 func setNewGamesPlayedNum (address) = {
148109 let valueGamesPlayedNum = getInteger(this, (address + "_GamesPlayed"))
149110 let currentGamesPlayedNum = match valueGamesPlayedNum {
150111 case a: Int =>
151112 a
152113 case _ =>
153114 0
154115 }
155116 (currentGamesPlayedNum + 1)
156117 }
157118
158119
159-func checkPermission (callerPublicKey) = (callerPublicKey != serverPublicKey)
120+func checkCallerIsAdmin (callerPublicKey) = (callerPublicKey == AdminPublicKey)
160121
161122
162123 func getCurrentIncome (assetName) = {
163124 let val = getInteger(this, (assetName + "_Income"))
164125 match val {
165126 case a: Int =>
166127 a
167128 case _ =>
168129 0
169130 }
170131 }
171132
172133
173134 func callerIsDepositOwner (assetName,callerPublicKey) = {
174135 let depositOwner = getString(dividendProgramAddress, (assetName + "_DepositOwner"))
175136 if ((callerPublicKey == depositOwner))
176137 then callerPublicKey
177138 else throw("Only deposit owner can withdrawal deposit")
178139 }
179140
180141
181142 func getDepositData (assetName,keySuffix) = {
182143 let key = (assetName + keySuffix)
183144 let val = getInteger(dividendProgramAddress, key)
184145 match val {
185146 case a: Int =>
186147 a
187148 case _ =>
188149 throw("Couldn't find dividend program start height")
189150 }
190151 }
191152
192153
193154 @Callable(i)
194-func initGame () = if (checkPermission(i.callerPublicKey))
195- then throw("initGame_FORBBIDEN")
196- else match getInteger(this, "X_GAMESCOUNTER") {
155+func initGame () = if (checkCallerIsAdmin(i.callerPublicKey))
156+ then match getInteger(this, "X_GAMESCOUNTER") {
197157 case GAMESCOUNTER: Int =>
198158 throw("INIT_ALREADY_DONE")
199159 case _ =>
200160 WriteSet([DataEntry("X_GAMESCOUNTER", 1), DataEntry("WAVES_Reserved", wavesMinAmt)])
201161 }
162+ else throw("initGame_FORBBIDEN")
202163
203164
204165
205166 @Callable(i)
206167 func makeBet () = {
168+ let gameId = toBase58String(i.transactionId)
169+ let playerAddress = extract(i.caller)
207170 let pmt = extract(i.payment)
208171 let betAmount = (pmt.amount - commission)
209- let assetId = pmt.assetId
210- let gameId = toBase58String(i.transactionId)
211- let playerAddress = extract(i.caller)
212- let setReservedBalance = increaseReservedBalance(betAmount, pmt.assetId)
213- let pmtAmtCorrect = pmtAmtCheck("WAVES", betAmount)
172+ let pmtAmtCorrect = pmtAmtCheck(betAmount)
214173 if (pmtAmtCorrect)
215174 then {
216175 let dataString = ((((((stateAcc + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height))
217- WriteSet([DataEntry((gameId + "_GameId"), dataString), DataEntry("WAVES_Reserved", setReservedBalance)])
176+ WriteSet([DataEntry((gameId + "_GameId"), dataString), DataEntry("WAVES_Reserved", betAmount)])
218177 }
219178 else throw("AssetId is incorrect")
220179 }
221180
222181
223182 @Verifier(tx)
224183 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], gamePublicKey))
225184 then match tx {
226185 case tx: SetScriptTransaction =>
227186 true
228187 case _ =>
229188 false
230189 }
231190 else false
232191

github/deemru/w8io/169f3d6 
34.44 ms