tx · FixSVkRrmDnHcVkiatMYhbvWkTvoEHqCG9UER5Vs1xM2

3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u:  -0.01400000 Waves

2019.10.27 00:09 [737624] smart account 3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u > SELF 0.00000000 Waves

{ "type": 13, "id": "FixSVkRrmDnHcVkiatMYhbvWkTvoEHqCG9UER5Vs1xM2", "fee": 1400000, "feeAssetId": null, "timestamp": 1572124147927, "version": 1, "sender": "3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u", "senderPublicKey": "BFgvNhTxuzThVrRXLX7LfTfCHVeCPDsF6JEpadKJPvox", "proofs": [ "2VUmsoYZoVVR9oT5sm9G76UwvjQoJCFyGMu6DXwuN5LqyKdN2CipkSDXUdm4xtFu4Reso9RAi1QxwCY5Q8z7mqhM" ], "script": "base64:AAIDAAAAAAAAABEIARIDCgEIEgMKAQgSAwoBCAAAACIAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFtT2xSQlRZRU8zSDdZOXJCbW9GUUZuNDM5MlB4MFF3MTNEc2RFaG56TUgyY2o2WTV5bVB1Q09MTU5lNXFyVXpRbDhvUkx6SUJ6RlZNWmx3VVlsMmJvc3JPSXhRYllGN1dWUVd2b1Z4RVQxWUlnRG0zTnp6T0xBNXVIN0NLTzBzbnNobU1GQ0RPWkVldzQxR2pLaDNQZ3grbmJBZ3VQOVpRUGZxU2FmRW1DM0NOLzR5RHNKcktyaVJuaVpKbzlqUy80TExzUkt3QjdIQVpIem9GOUxMN3RTWkgzaHRhTkd0YmRUa3haMVR6U1QzTWIyVlBTenNadlFEb2NYVVZPbUpPdTBvMjlhT1krR2tHL0c0UkNLMEZCV1FIRVV2QzUxVFJEUzVrOGphZDBPMU1vYmpRYzZiMThkK2Z1b1ZGZE5mWndHSCt1RnVkdFBHM1VKVGYybWt6WlFJREFRQUIAAAAAD0dBTUVTQ09VTlRFUktFWQIAAAAJJEdBTUVfTlVNAAAAAA5SRVNFUlZBVElPTktFWQIAAAAQJFJFU0VSVkVEX0FNT1VOVAAAAAAEV0JFVAEAAAAgD5uLrFpvaCc5H1Jt+IyA7GJAqs11k4f4jn5gjTii4MkAAAAADldBTExFVFdBVkVTQkVUCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUjmD063sxkBCLSiisiwOufXcqpucc4Di4AAAAAAxXQUxMRVRNQ0FGRkUJAQAAAAdBZGRyZXNzAAAAAQEAAAAAAAAAAA5TVEFURVNVQk1JVFRFRAIAAAAJU1VCTUlUVEVEAAAAAAxTVEFURVdBSVRJTkcCAAAAB1dBSVRJTkcAAAAADVNUQVRFRklOSVNIRUQCAAAACEZJTklTSEVEAAAAAA1TVEFURUNBTkNFTEVEAgAAAAhDQU5DRUxFRAAAAAALRkVFV0FWRVNCRVQAAAAAAAAAAAQAAAAACUZFRU1DQUZFRQAAAAAAAAAAAgAAAAAMSWR4R2FtZVN0YXRlAAAAAAAAAAAAAAAAAA5JZHhQbGF5ZXJBQ29p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AAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACmZlZUFzc2V0SWQJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABaQAAAApmZWVBc3NldElkBAAAAApnYW1lSWRVc2VkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAZnYW1lSWQEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAgUAAAAGcGFDb2luCAUAAAAHcGF5bWVudAAAAAZhbW91bnQDAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAA+wAAAABAQAAAAQTq9kzCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAARXQkVUBwkAAAIAAAABAgAAACZQYXltZW50IHNob3VsZCBiZSBpbiBXYXZlc2JldCBvciBXYXZlcwMFAAAACmZlZUFzc2V0SWQJAAACAAAAAQIAAAAxVHJhbnNhY3Rpb24ncyBmZWUgbXVzdCBiZSBpbiBXYXZlcy4gR2FtZSBhYm9ydGVkLgMFAAAACmdhbWVJZFVzZWQJAAACAAAAAQIAAAAxUGFzc2VkIGdhbWVJZCBoYWQgYmVlbiB1c2VkIGJlZm9yZS4gR2FtZSBhYm9ydGVkLgQAAAAKbmV3R2FtZU51bQkBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAA9wbGF5ZXJBUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAdwYXlUeXBlCQEAAAALVHlwZVBheW1lbnQAAAABBQAAAAdwYXltZW50BAAAAAtnYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAACQUAAAAOU1RBVEVTVUJNSVRURUQFAAAABnBhQ29pbgUAAAAPcGxheWVyQVB1YktleTU4BQAAAAdwYXlUeXBlCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAABndpbkFtdAIAAAAAAgAAAAACAAAAAAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALZ2FtZURhdGFTdHIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5XQUxMRVRXQVZFU0JFVAkAAGkAAAACCQAAaAAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAALRkVFV0FWRVNCRVQAAAAAAAAAAGQFAAAABFdCRVQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAEdGhpcwAAAAAAAAehIAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAAD2FjY2VwdENoYWxsZW5nZQAAAAEAAAAGZ2FtZUlkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACmZlZUFzc2V0SWQJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABaQAAAApmZWVBc3NldElkBAAAAAhwYXlUeXBlQgkBAAAAC1R5cGVQYXltZW50AAAAAQUAAAAHcGF5bWVudAQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAAhwYXlUeXBlQQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACklkeFBheVR5cGUEAAAABnBheUFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4UGF5QW10AwMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAPsAAAAAQEAAAAEE6vZMwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAAEV0JFVAcJAAACAAAAAQIAAAAmUGF5bWVudCBzaG91bGQgYmUgaW4gV2F2ZXNiZXQgb3IgV2F2ZXMDBQAAAApmZWVBc3NldElkCQAAAgAAAAECAAAAMVRyYW5zYWN0aW9uJ3MgZmVlIG11c3QgYmUgaW4gV2F2ZXMuIEdhbWUgYWJvcnRlZC4DCQEAAAACIT0AAAACBQAAAAhwYXlUeXBlQgUAAAAIcGF5VHlwZUEJAAACAAAAAQIAAABVUGF5bWVudCBtdXN0IGJlIG1hZGUgaW4gdGhlIHNhbWUgY3VycmVuY3kgdG9rZW4gYXMgdGhlIGJldCwgV0JFVC9XQkVUIG9yIFdBVkVTL1dBVkVTLgMJAAAAAAAAAggFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAZwYXlBbXQJAAACAAAAAQIAAAAnUGF5b3V0IG11c3QgYmUgZXF1YWwgdG8gdGhlIGJldCBhbW91bnQuAwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQEAAAABnBhQ29pbgkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAADklkeFBsYXllckFDb2luBAAAAApwYVB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAASSWR4UGxheWVyQVB1YktleTU4BAAAAAZ3aW5BbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACUlkeFdpbkFtdAQAAAAGcGJDb2luCQEAAAALU2VsZWN0Q29pbkIAAAABBQAAAAZwYUNvaW4EAAAACnBiUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAACQUAAAAMU1RBVEVXQUlUSU5HBQAAAAZwYUNvaW4FAAAACnBhUHViS2V5NTgFAAAACHBheVR5cGVBBQAAAAZwYXlBbXQFAAAABndpbkFtdAUAAAAGcGJDb2luBQAAAApwYlB1YktleTU4AgAAAAAJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAOV0FMTEVUV0FWRVNCRVQJAABpAAAAAgkAAGgAAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAC0ZFRVdBVkVTQkVUAAAAAAAAAABkBQAAAARXQkVUCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABHRoaXMAAAAAAAAHoSAFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAA9jYW5jZWxDaGFsbGVuZ2UAAAABAAAABmdhbWVJZAQAAAAKZmVlQXNzZXRJZAkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFpAAAACmZlZUFzc2V0SWQEAAAADGdhbWVEYXRhTGlzdAkBAAAAE0V4dHJhY3RHYW1lRGF0YUxpc3QAAAABBQAAAAZnYW1lSWQEAAAACWdhbWVTdGF0ZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAADElkeEdhbWVTdGF0ZQMFAAAACmZlZUFzc2V0SWQJAAACAAAAAQIAAAAxVHJhbnNhY3Rpb24ncyBmZWUgbXVzdCBiZSBpbiBXYXZlcy4gR2FtZSBhYm9ydGVkLgMJAQAAAAIhPQAAAAIFAAAACWdhbWVTdGF0ZQUAAAAOU1RBVEVTVUJNSVRURUQJAAACAAAAAQIAAAAkSW52YWxpZCBnYW1lIHN0YXRlIGZvciBwYXNzZWQgZ2FtZUlkBAAAAAZwYUNvaW4JAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAA5JZHhQbGF5ZXJBQ29pbgQAAAAKcGFQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEklkeFBsYXllckFQdWJLZXk1OAQAAAAGd2luQW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhXaW5BbXQEAAAACHBheVR5cGVBCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAKSWR4UGF5VHlwZQQAAAAGcGF5QW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhQYXlBbXQEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAJBQAAAA1TVEFURUNBTkNFTEVEBQAAAAZwYUNvaW4FAAAACnBhUHViS2V5NTgFAAAACHBheVR5cGVBBQAAAAZwYXlBbXQFAAAABndpbkFtdAIAAAAAAgAAAAACAAAAAAQAAAAGcmVmdW5kCQAAZQAAAAIFAAAABnBheUFtdAkAAGkAAAACCQAAaAAAAAIFAAAABnBheUFtdAUAAAALRkVFV0FWRVNCRVQAAAAAAAAAAGQEAAAACWFkclJlZnVuZAkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAZsAAAABBQAAAApwYVB1YktleTU4BAAAAAhyZWZUb2tlbgkBAAAACVR5cGVUb2tlbgAAAAEFAAAACHBheVR5cGVBCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAACWFkclJlZnVuZAUAAAAGcmVmdW5kBQAAAAhyZWZUb2tlbgUAAAADbmlsAAAAABFps70=", "chainId": 84, "height": 737624, "spentComplexity": 0 } View: original | compacted Prev: CSmMhCBT2QSKv9kBb6gAT7evvRvN9QGSr2SkYiMDci11 Next: GMbPSk3Z9idYFohU2phfuwYk5cgP5ku8mZqFrKAER3dx Diff:
OldNewDifferences
2121
2222 let STATECANCELED = "CANCELED"
2323
24-let WAVELET = 1
25-
2624 let FEEWAVESBET = 4
2725
2826 let FEEMCAFEE = 2
29-
30-let BETMIN = (1 * WAVELET)
31-
32-let BETMAX = ((1000 * 100) * WAVELET)
3327
3428 let IdxGameState = 0
3529
6458 then (playerCoin != "BLUE")
6559 else false)
6660 then throw("Invalid play, change your play to RED or BLUE.")
67- else if (if ((BETMIN > amount))
68- then true
69- else (amount > BETMAX))
70- then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / 100000000))) + " maxBet=") + toString((BETMAX / 100000000))))
71- else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
61+ else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
7262
7363
7464 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
164154 else "WBET"
165155
166156
157+func TypeToken (s) = if ((s == "WAVES"))
158+ then unit
159+ else WBET
160+
161+
167162 func SelectCoinB (coin) = if ((coin == "RED"))
168163 then "BLUE"
169164 else "RED"
228223 }
229224
230225
226+
227+@Callable(i)
228+func cancelChallenge (gameId) = {
229+ let feeAssetId = isDefined(i.feeAssetId)
230+ let gameDataList = ExtractGameDataList(gameId)
231+ let gameState = gameDataList[IdxGameState]
232+ if (feeAssetId)
233+ then throw("Transaction's fee must be in Waves. Game aborted.")
234+ else if ((gameState != STATESUBMITTED))
235+ then throw("Invalid game state for passed gameId")
236+ else {
237+ let paCoin = gameDataList[IdxPlayerACoin]
238+ let paPubKey58 = gameDataList[IdxPlayerAPubKey58]
239+ let winAmt = parseIntValue(gameDataList[IdxWinAmt])
240+ let payTypeA = gameDataList[IdxPayType]
241+ let payAmt = parseIntValue(gameDataList[IdxPayAmt])
242+ let newGameDataStr = FormatGameDataStr(STATECANCELED, paCoin, paPubKey58, payTypeA, payAmt, winAmt, "", "", "")
243+ let refund = (payAmt - ((payAmt * FEEWAVESBET) / 100))
244+ let adrRefund = addressFromPublicKey(toBytes(paPubKey58))
245+ let refToken = TypeToken(payTypeA)
246+ ScriptResult(WriteSet([DataEntry(gameId, newGameDataStr)]), TransferSet([ScriptTransfer(adrRefund, refund, refToken)]))
247+ }
248+ }
249+
250+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmOlRBTYEO3H7Y9rBmoFQFn4392Px0Qw13DsdEhnzMH2cj6Y5ymPuCOLMNe5qrUzQl8oRLzIBzFVMZlwUYl2bosrOIxQbYF7WVQWvoVxET1YIgDm3NzzOLA5uH7CKO0snshmMFCDOZEew41GjKh3Pgx+nbAguP9ZQPfqSafEmC3CN/4yDsJrKriRniZJo9jS/4LLsRKwB7HAZHzoF9LL7tSZH3htaNGtbdTkxZ1TzST3Mb2VPSzsZvQDocXUVOmJOu0o29aOY+GkG/G4RCK0FBWQHEUvC51TRDS5k8jad0O1MobjQc6b18d+fuoVFdNfZwGH+uFudtPG3UJTf2mkzZQIDAQAB")
55
66 let GAMESCOUNTERKEY = "$GAME_NUM"
77
88 let RESERVATIONKEY = "$RESERVED_AMOUNT"
99
1010 let WBET = base58'23vgV9p9pD83A7CFbsDEc4zjanep7UeFo4ZRS6oGorhv'
1111
1212 let WALLETWAVESBET = Address(base58'3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX')
1313
1414 let WALLETMCAFFE = Address(base58'')
1515
1616 let STATESUBMITTED = "SUBMITTED"
1717
1818 let STATEWAITING = "WAITING"
1919
2020 let STATEFINISHED = "FINISHED"
2121
2222 let STATECANCELED = "CANCELED"
2323
24-let WAVELET = 1
25-
2624 let FEEWAVESBET = 4
2725
2826 let FEEMCAFEE = 2
29-
30-let BETMIN = (1 * WAVELET)
31-
32-let BETMAX = ((1000 * 100) * WAVELET)
3327
3428 let IdxGameState = 0
3529
3630 let IdxPlayerACoin = 1
3731
3832 let IdxPlayerAPubKey58 = 2
3933
4034 let IdxPayType = 3
4135
4236 let IdxPayAmt = 4
4337
4438 let IdxWinAmt = 5
4539
4640 let IdxPlayerBCoin = 6
4741
4842 let IdxPlayerBPubKey58 = 7
4943
5044 let IdxRandOrEmpty = 8
5145
5246 func IncrementGameNum () = {
5347 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
5448 case num: Int =>
5549 num
5650 case _ =>
5751 0
5852 }
5953 (gameNum + 1)
6054 }
6155
6256
6357 func ValidateBetAndDefineWinAmt (playerCoin,amount) = if (if ((playerCoin != "RED"))
6458 then (playerCoin != "BLUE")
6559 else false)
6660 then throw("Invalid play, change your play to RED or BLUE.")
67- else if (if ((BETMIN > amount))
68- then true
69- else (amount > BETMAX))
70- then throw(((("Bet amount is not in range: minBet=" + toString((BETMIN / 100000000))) + " maxBet=") + toString((BETMAX / 100000000))))
71- else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
61+ else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
7262
7363
7464 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
7565 case a: Int =>
7666 a
7767 case _ =>
7868 0
7969 }
8070
8171
8272 func ValidateAndIncreaseReservedAmt (winAmt) = {
8373 let newReservedAmount = (ExtractReservedAmt() + winAmt)
8474 let balance = wavesBalance(this)
8575 if ((newReservedAmount > balance))
8676 then throw("Insufficient funds on Waves Rider account. Transaction was rejected for your safety.")
8777 else newReservedAmount
8878 }
8979
9080
9181 func FormatGameDataParam (p) = {
9282 let s = size(p)
9383 if ((s == 0))
9484 then throw("Parameter size must be greater then 0.")
9585 else if ((s > 99))
9686 then throw("Parameter size must be less then 100.")
9787 else if ((10 > s))
9888 then (("0" + toString(s)) + p)
9989 else (toString(s) + p)
10090 }
10191
10292
10393 func FormatGameDataStr (gameState,playerACoin,playerAPubKey58,payType,payAmount,winAmt,playerBCoin,playerBPubKey58,randOrEmpty) = {
10494 let fullStateStr = ((((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerACoin)) + "_") + FormatGameDataParam(playerAPubKey58)) + "_") + FormatGameDataParam(payType)) + "_") + FormatGameDataParam(toString(payAmount))) + "_") + FormatGameDataParam(toString(winAmt)))
10595 if (if (if ((playerBCoin == ""))
10696 then (playerBPubKey58 == "")
10797 else false)
10898 then (randOrEmpty == "")
10999 else false)
110100 then fullStateStr
111101 else if (if (if ((playerBCoin != ""))
112102 then (playerBPubKey58 != "")
113103 else false)
114104 then (randOrEmpty == "")
115105 else false)
116106 then (((fullStateStr + "_") + (FormatGameDataParam(playerBCoin) + "_")) + (FormatGameDataParam(playerBPubKey58) + "_"))
117107 else ((((fullStateStr + "_") + (FormatGameDataParam(playerBCoin) + "_")) + (FormatGameDataParam(playerBPubKey58) + "_")) + FormatGameDataParam(randOrEmpty))
118108 }
119109
120110
121111 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
122112 then drop(remaining, 1)
123113 else remaining
124114
125115
126116 func ParseNextAttribute (remaining) = {
127117 let s = size(remaining)
128118 if ((s > 0))
129119 then {
130120 let nn = parseIntValue(take(remaining, 2))
131121 let v = take(drop(remaining, 2), nn)
132122 let tmpRemaining = drop(remaining, (nn + 2))
133123 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
134124 [v, remainingState]
135125 }
136126 else throw("Empty string was passed into parseNextAttribute func")
137127 }
138128
139129
140130 func ParseGameRawDataStr (rawStateStr) = {
141131 let gameState = ParseNextAttribute(rawStateStr)
142132 let playerAChoice = ParseNextAttribute(gameState[1])
143133 let playerAPubKey58 = ParseNextAttribute(playerAChoice[1])
144134 let playerAPayType = ParseNextAttribute(playerAPubKey58[1])
145135 let playerAPayAmt = ParseNextAttribute(playerAPayType[1])
146136 let winAmt = ParseNextAttribute(playerAPayAmt[1])
147137 [gameState[0], playerAChoice[0], playerAPubKey58[0], playerAPayType[0], playerAPayAmt[0], winAmt[0]]
148138 }
149139
150140
151141 func ExtractGameDataList (gameId) = {
152142 let rawDataStr = match getString(this, gameId) {
153143 case str: String =>
154144 str
155145 case _ =>
156146 throw(("Couldn't find game by " + gameId))
157147 }
158148 ParseGameRawDataStr(rawDataStr)
159149 }
160150
161151
162152 func TypePayment (p) = if ((p.assetId == assetInfo(base58'WAVES')))
163153 then "WAVES"
164154 else "WBET"
165155
166156
157+func TypeToken (s) = if ((s == "WAVES"))
158+ then unit
159+ else WBET
160+
161+
167162 func SelectCoinB (coin) = if ((coin == "RED"))
168163 then "BLUE"
169164 else "RED"
170165
171166
172167 @Callable(i)
173168 func playCoin (paCoin) = {
174169 let gameId = toBase58String(i.transactionId)
175170 let payment = extract(i.payment)
176171 let feeAssetId = isDefined(i.feeAssetId)
177172 let gameIdUsed = isDefined(getString(this, gameId))
178173 let winAmt = ValidateBetAndDefineWinAmt(paCoin, payment.amount)
179174 if (if ((payment.assetId != assetInfo(base58'WAVES')))
180175 then (payment.assetId != WBET)
181176 else false)
182177 then throw("Payment should be in Wavesbet or Waves")
183178 else if (feeAssetId)
184179 then throw("Transaction's fee must be in Waves. Game aborted.")
185180 else if (gameIdUsed)
186181 then throw("Passed gameId had been used before. Game aborted.")
187182 else {
188183 let newGameNum = IncrementGameNum()
189184 let playerAPubKey58 = toBase58String(i.callerPublicKey)
190185 let payType = TypePayment(payment)
191186 let gameDataStr = FormatGameDataStr(STATESUBMITTED, paCoin, playerAPubKey58, payType, payment.amount, winAmt, "", "", "")
192187 ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
193188 }
194189 }
195190
196191
197192
198193 @Callable(i)
199194 func acceptChallenge (gameId) = {
200195 let payment = extract(i.payment)
201196 let feeAssetId = isDefined(i.feeAssetId)
202197 let payTypeB = TypePayment(payment)
203198 let gameDataList = ExtractGameDataList(gameId)
204199 let gameState = gameDataList[IdxGameState]
205200 let payTypeA = gameDataList[IdxPayType]
206201 let payAmt = parseIntValue(gameDataList[IdxPayAmt])
207202 if (if ((payment.assetId != assetInfo(base58'WAVES')))
208203 then (payment.assetId != WBET)
209204 else false)
210205 then throw("Payment should be in Wavesbet or Waves")
211206 else if (feeAssetId)
212207 then throw("Transaction's fee must be in Waves. Game aborted.")
213208 else if ((payTypeB != payTypeA))
214209 then throw("Payment must be made in the same currency token as the bet, WBET/WBET or WAVES/WAVES.")
215210 else if ((payment.amount == payAmt))
216211 then throw("Payout must be equal to the bet amount.")
217212 else if ((gameState != STATESUBMITTED))
218213 then throw("Invalid game state for passed gameId")
219214 else {
220215 let paCoin = gameDataList[IdxPlayerACoin]
221216 let paPubKey58 = gameDataList[IdxPlayerAPubKey58]
222217 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
223218 let pbCoin = SelectCoinB(paCoin)
224219 let pbPubKey58 = toBase58String(i.callerPublicKey)
225220 let newGameDataStr = FormatGameDataStr(STATEWAITING, paCoin, paPubKey58, payTypeA, payAmt, winAmt, pbCoin, pbPubKey58, "")
226221 ScriptResult(WriteSet([DataEntry(gameId, newGameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
227222 }
228223 }
229224
230225
226+
227+@Callable(i)
228+func cancelChallenge (gameId) = {
229+ let feeAssetId = isDefined(i.feeAssetId)
230+ let gameDataList = ExtractGameDataList(gameId)
231+ let gameState = gameDataList[IdxGameState]
232+ if (feeAssetId)
233+ then throw("Transaction's fee must be in Waves. Game aborted.")
234+ else if ((gameState != STATESUBMITTED))
235+ then throw("Invalid game state for passed gameId")
236+ else {
237+ let paCoin = gameDataList[IdxPlayerACoin]
238+ let paPubKey58 = gameDataList[IdxPlayerAPubKey58]
239+ let winAmt = parseIntValue(gameDataList[IdxWinAmt])
240+ let payTypeA = gameDataList[IdxPayType]
241+ let payAmt = parseIntValue(gameDataList[IdxPayAmt])
242+ let newGameDataStr = FormatGameDataStr(STATECANCELED, paCoin, paPubKey58, payTypeA, payAmt, winAmt, "", "", "")
243+ let refund = (payAmt - ((payAmt * FEEWAVESBET) / 100))
244+ let adrRefund = addressFromPublicKey(toBytes(paPubKey58))
245+ let refToken = TypeToken(payTypeA)
246+ ScriptResult(WriteSet([DataEntry(gameId, newGameDataStr)]), TransferSet([ScriptTransfer(adrRefund, refund, refToken)]))
247+ }
248+ }
249+
250+

github/deemru/w8io/169f3d6 
59.30 ms