tx · FgGwVDJBxQpDRhjptLszfPEHxCo5MDtLiLDXujggxAEh

3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u:  -0.01400000 Waves

2019.10.27 01:31 [737708] smart account 3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u > SELF 0.00000000 Waves

{ "type": 13, "id": "FgGwVDJBxQpDRhjptLszfPEHxCo5MDtLiLDXujggxAEh", "fee": 1400000, "feeAssetId": null, "timestamp": 1572129103425, "version": 1, "sender": "3MxsZUkxjngrsHn7WNd2xEbwWkUfKdmzP6u", "senderPublicKey": "BFgvNhTxuzThVrRXLX7LfTfCHVeCPDsF6JEpadKJPvox", "proofs": [ "61KAciQ9VFATf8X5e67ngEn21Sk1wbSK7p8NXjuKPUrhaPjc9548AWbWC5APfwXefv69gdE2wMWZiYe4aif4X4FA" ], "script": "base64:AAIDAAAAAAAAABEIARIDCgEIEgMKAQgSAwoBCAAAACMAAAAACVJTQVBVQkxJQwkAAlsAAAABAgAAAY9iYXNlNjQ6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFtT2xSQlRZRU8zSDdZOXJCbW9GUUZuNDM5MlB4MFF3MTNEc2RFaG56TUgyY2o2WTV5bVB1Q09MTU5lNXFyVXpRbDhvUkx6SUJ6RlZNWmx3VVlsMmJvc3JPSXhRYllGN1dWUVd2b1Z4RVQxWUlnRG0zTnp6T0xBNXVIN0NLTzBzbnNobU1GQ0RPWkVldzQxR2pLaDNQZ3grbmJBZ3VQOVpRUGZxU2FmRW1DM0NOLzR5RHNKcktyaVJuaVpKbzlqUy80TExzUkt3QjdIQVpIem9GOUxMN3RTWkgzaHRhTkd0YmRUa3haMVR6U1QzTWIyVlBTenNadlFEb2NYVVZPbUpPdTBvMjlhT1krR2tHL0c0UkNLMEZCV1FIRVV2QzUxVFJEUzVrOGphZDBPMU1vYmpRYzZiMThkK2Z1b1ZGZE5mWndHSCt1RnVkdFBHM1VKVGYybWt6WlFJREFRQUIAAAAAD0dBTUVTQ09VTlRFUktFWQIAAAAJJEdBTUVfTlVNAAAAAA5SRVNFUlZBVElPTktFWQIAAAAQJFJFU0VSVkVEX0FNT1VOVAAAAAAEV0JFVAEAAAAgD5uLrFpvaCc5H1Jt+IyA7GJAqs11k4f4jn5gjTii4MkAAAAADldBTExFVFdBVkVTQkVUCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUjmD063sxkBCLSiisiwOufXcqpucc4Di4AAAAAAxXQUxMRVRNQ0FGRkUJAQAAAAdBZGRyZXNzAAAAAQEAAAAAAAAAAAdXQVZFTEVUCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAZAAAAAAAAAAD6AAAAAAAAAAD6AAAAAAOU1RBVEVTVUJNSVRURUQCAAAACVNVQk1JVFRFRAAAAAAMU1RBVEVXQUlUSU5HAgAAAAdXQUlUSU5HAAAAAA1TVEFURUZJTklTSEVEAgAAAAhGSU5JU0hFRAAAAAANU1RBVEVDQU5DRUxFRAIAAAAIQ0FOQ0VMRUQAAAAAC0ZFRVdBVkVTQkVUAAAAAAAAAAAEAAAAAAlGRUVNQ0FG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BQAAAAlyZW1haW5pbmcDCQAAZgAAAAIFAAAAAXMAAAAAAAAAAAAEAAAAAm5uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAEvAAAAAgUAAAAJcmVtYWluaW5nAAAAAAAAAAACBAAAAAF2CQABLwAAAAIJAAEwAAAAAgUAAAAJcmVtYWluaW5nAAAAAAAAAAACBQAAAAJubgQAAAAMdG1wUmVtYWluaW5nCQABMAAAAAIFAAAACXJlbWFpbmluZwkAAGQAAAACBQAAAAJubgAAAAAAAAAAAgQAAAAOcmVtYWluaW5nU3RhdGUJAQAAABlSZW1vdmVVbmRlcnNjb3JlSWZQcmVzZW50AAAAAQUAAAAMdG1wUmVtYWluaW5nCQAETAAAAAIFAAAAAXYJAARMAAAAAgUAAAAOcmVtYWluaW5nU3RhdGUFAAAAA25pbAkAAAIAAAABAgAAADRFbXB0eSBzdHJpbmcgd2FzIHBhc3NlZCBpbnRvIHBhcnNlTmV4dEF0dHJpYnV0ZSBmdW5jAQAAABNQYXJzZUdhbWVSYXdEYXRhU3RyAAAAAQAAAAtyYXdTdGF0ZVN0cgQAAAAJZ2FtZVN0YXRlCQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQUAAAALcmF3U3RhdGVTdHIEAAAADXBsYXllckFDaG9pY2UJAQAAABJQYXJzZU5leHRBdHRyaWJ1dGUAAAABCQABkQAAAAIFAAAACWdhbWVTdGF0ZQAAAAAAAAAAAQQAAAAPcGxheWVyQVB1YktleTU4CQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQkAAZEAAAACBQAAAA1wbGF5ZXJBQ2hvaWNlAAAAAAAAAAABBAAAAA5wbGF5ZXJBUGF5VHlwZQkBAAAAElBhcnNlTmV4dEF0dHJpYnV0ZQAAAAEJAAGRAAAAAgUAAAAPcGxheWVyQVB1YktleTU4AAAAAAAAAAABBAAAAA1wbGF5ZXJBUGF5QW10CQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQkAAZEAAAACBQAAAA5wbGF5ZXJBUGF5VHlwZQAAAAAAAAAAAQQAAAAGd2luQW10CQEAAAASUGFyc2VOZXh0QXR0cmlidXRlAAAAAQkAAZEAAAACBQAAAA1wbGF5ZXJBUGF5QW10AAAAAAAAAAABCQAETAAAAAIJAAGRAAAAAgUAAAAJZ2FtZVN0YXRlAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAANcGxheWVyQUNob2ljZQAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAAD3BsYXllckFQdWJLZXk1OAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAADnBsYXllckFQYXlUeXBlAAAAAAAAAAAACQAETAAAAAIJAAGRAAAAAgUAAAANcGxheWVyQVBheUFtdAAAAAAAAAAAAAkABEwAAAACCQABkQAAAAIFAAAABndpbkFtdAAAAAAAAAAAAAUAAAADbmlsAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQAAAAZnYW1lSWQEAAAACnJhd0RhdGFTdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAA3N0cgUAAAAHJG1hdGNoMAUAAAADc3RyCQAAAgAAAAEJAAEsAAAAAgIAAAAWQ291bGRuJ3QgZmluZCBnYW1lIGJ5IAUAAAAGZ2FtZUlkCQEAAAATUGFyc2VHYW1lUmF3RGF0YVN0cgAAAAEFAAAACnJhd0RhdGFTdHIBAAAAC1R5cGVQYXltZW50AAAAAQAAAAFwAwkAAAAAAAACCAUAAAABcAAAAAdhc3NldElkCQAD7AAAAAEBAAAABBOr2TMCAAAABVdBVkVTAgAAAARXQkVUAQAAAAlUeXBlVG9rZW4AAAABAAAAAXMDCQAAAAAAAAIFAAAAAXMCAAAABVdBVkVTBQAAAAR1bml0BQAAAARXQkVUAQAAAAtTZWxlY3RDb2luQgAAAAEAAAAEY29pbgMJAAAAAAAAAgUAAAAEY29pbgIAAAADUkVEAgAAAARCTFVFAgAAAANSRUQAAAADAAAAAWkBAAAACHBsYXlDb2luAAAAAQAAAAZwYUNvaW4EAAAABmdhbWVJZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACmZlZUFzc2V0SWQJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABaQAAAApmZWVBc3NldElkBAAAAApnYW1lSWRVc2VkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAZnYW1lSWQEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAgUAAAAGcGFDb2luCAUAAAAHcGF5bWVudAAAAAZhbW91bnQDAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAA+wAAAABAQAAAAQTq9kzCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAARXQkVUBwkAAAIAAAABAgAAACZQYXltZW50IHNob3VsZCBiZSBpbiBXYXZlc2JldCBvciBXYXZlcwMFAAAACmZlZUFzc2V0SWQJAAACAAAAAQIAAAAxVHJhbnNhY3Rpb24ncyBmZWUgbXVzdCBiZSBpbiBXYXZlcy4gR2FtZSBhYm9ydGVkLgMFAAAACmdhbWVJZFVzZWQJAAACAAAAAQIAAAAxUGFzc2VkIGdhbWVJZCBoYWQgYmVlbiB1c2VkIGJlZm9yZS4gR2FtZSBhYm9ydGVkLgQAAAAKbmV3R2FtZU51bQkBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAA9wbGF5ZXJBUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAdwYXlUeXBlCQEAAAALVHlwZVBheW1lbnQAAAABBQAAAAdwYXltZW50BAAAAAtnYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAACQUAAAAOU1RBVEVTVUJNSVRURUQFAAAABnBhQ29pbgUAAAAPcGxheWVyQVB1YktleTU4BQAAAAdwYXlUeXBlCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAABndpbkFtdAIAAAAAAgAAAAACAAAAAAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZCQEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQUAAAAGd2luQW10CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9HQU1FU0NPVU5URVJLRVkFAAAACm5ld0dhbWVOdW0JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAALZ2FtZURhdGFTdHIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA5XQUxMRVRXQVZFU0JFVAkAAGkAAAACCQAAaAAAAAIIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAALRkVFV0FWRVNCRVQAAAAAAAAAAGQFAAAABFdCRVQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAEdGhpcwAAAAAAAAPQkAUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAAD2FjY2VwdENoYWxsZW5nZQAAAAEAAAAGZ2FtZUlkBAAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAACmZlZUFzc2V0SWQJAQAAAAlpc0RlZmluZWQAAAABCAUAAAABaQAAAApmZWVBc3NldElkBAAAAAhwYXlUeXBlQgkBAAAAC1R5cGVQYXltZW50AAAAAQUAAAAHcGF5bWVudAQAAAAMZ2FtZURhdGFMaXN0CQEAAAATRXh0cmFjdEdhbWVEYXRhTGlzdAAAAAEFAAAABmdhbWVJZAQAAAAJZ2FtZVN0YXRlCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAMSWR4R2FtZVN0YXRlBAAAAAhwYXlUeXBlQQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACklkeFBheVR5cGUEAAAABnBheUFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAJSWR4UGF5QW10AwMJAQAAAAIhPQAAAAIIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAPsAAAAAQEAAAAEE6vZMwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAAEV0JFVAcJAAACAAAAAQIAAAAmUGF5bWVudCBzaG91bGQgYmUgaW4gV2F2ZXNiZXQgb3IgV2F2ZXMDBQAAAApmZWVBc3NldElkCQAAAgAAAAECAAAAMVRyYW5zYWN0aW9uJ3MgZmVlIG11c3QgYmUgaW4gV2F2ZXMuIEdhbWUgYWJvcnRlZC4DCQEAAAACIT0AAAACBQAAAAhwYXlUeXBlQgUAAAAIcGF5VHlwZUEJAAACAAAAAQIAAABVUGF5bWVudCBtdXN0IGJlIG1hZGUgaW4gdGhlIHNhbWUgY3VycmVuY3kgdG9rZW4gYXMgdGhlIGJldCwgV0JFVC9XQkVUIG9yIFdBVkVTL1dBVkVTLgMJAAAAAAAAAggFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAZwYXlBbXQJAAACAAAAAQIAAAAnUGF5b3V0IG11c3QgYmUgZXF1YWwgdG8gdGhlIGJldCBhbW91bnQuAwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQEAAAABnBhQ29pbgkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAADklkeFBsYXllckFDb2luBAAAAApwYVB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAASSWR4UGxheWVyQVB1YktleTU4BAAAAAZ3aW5BbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACUlkeFdpbkFtdAQAAAAGcGJDb2luCQEAAAALU2VsZWN0Q29pbkIAAAABBQAAAAZwYUNvaW4EAAAACnBiUHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAACQUAAAAMU1RBVEVXQUlUSU5HBQAAAAZwYUNvaW4FAAAACnBhUHViS2V5NTgFAAAACHBheVR5cGVBBQAAAAZwYXlBbXQFAAAABndpbkFtdAUAAAAGcGJDb2luBQAAAApwYlB1YktleTU4AgAAAAAJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAOV0FMTEVUV0FWRVNCRVQJAABpAAAAAgkAAGgAAAACCAUAAAAHcGF5bWVudAAAAAZhbW91bnQFAAAAC0ZFRVdBVkVTQkVUAAAAAAAAAABkBQAAAARXQkVUCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABHRoaXMAAAAAAAAHoSAFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAA9jYW5jZWxDaGFsbGVuZ2UAAAABAAAABmdhbWVJZAQAAAAKZmVlQXNzZXRJZAkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFpAAAACmZlZUFzc2V0SWQEAAAADGdhbWVEYXRhTGlzdAkBAAAAE0V4dHJhY3RHYW1lRGF0YUxpc3QAAAABBQAAAAZnYW1lSWQEAAAACWdhbWVTdGF0ZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAADElkeEdhbWVTdGF0ZQQAAAAKcGFQdWJLZXk1OAkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAEklkeFBsYXllckFQdWJLZXk1OAQAAAAIcHViS2V5NTgJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5AwUAAAAKZmVlQXNzZXRJZAkAAAIAAAABAgAAADFUcmFuc2FjdGlvbidzIGZlZSBtdXN0IGJlIGluIFdhdmVzLiBHYW1lIGFib3J0ZWQuAwkBAAAAAiE9AAAAAgUAAAAJZ2FtZVN0YXRlBQAAAA5TVEFURVNVQk1JVFRFRAkAAAIAAAABAgAAACRJbnZhbGlkIGdhbWUgc3RhdGUgZm9yIHBhc3NlZCBnYW1lSWQDCQEAAAACIT0AAAACBQAAAApwYVB1YktleTU4BQAAAAhwdWJLZXk1OAkAAAIAAAABAgAAADBQdWJsaWMga2V5IGlzIG5vdCB0aGUgc2FtZSBhcyBjaGFsbGVuZ2UgY3JlYXRpb24EAAAABnBhQ29pbgkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAADklkeFBsYXllckFDb2luBAAAAAZ3aW5BbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACUlkeFdpbkFtdAQAAAAIcGF5VHlwZUEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAApJZHhQYXlUeXBlBAAAAAZwYXlBbXQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAACUlkeFBheUFtdAQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAkFAAAADVNUQVRFQ0FOQ0VMRUQFAAAABnBhQ29pbgUAAAAKcGFQdWJLZXk1OAUAAAAIcGF5VHlwZUEFAAAABnBheUFtdAUAAAAGd2luQW10AgAAAAACAAAAAAIAAAAABAAAAAZyZWZ1bmQJAABlAAAAAgUAAAAGcGF5QW10CQAAaQAAAAIJAABoAAAAAgUAAAAGcGF5QW10BQAAAAtGRUVXQVZFU0JFVAAAAAAAAAAAZAQAAAAJYWRyUmVmdW5kCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQABmwAAAAEFAAAACnBhUHViS2V5NTgEAAAACHJlZlRva2VuCQEAAAAJVHlwZVRva2VuAAAAAQUAAAAIcGF5VHlwZUEJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAJYWRyUmVmdW5kBQAAAAZyZWZ1bmQFAAAACHJlZlRva2VuBQAAAANuaWwAAAAA3lkrxQ==", "chainId": 84, "height": 737708, "spentComplexity": 0 } View: original | compacted Prev: 6dEwU3mctjSEM7kmZYmu8JmbC5n96r1VzhDJymkjmuJp Next: 58rFq6D2pEd9u3aceBSk6e4Ke1ejtL7oT6C1xqyirK5A Diff:
OldNewDifferences
1212 let WALLETWAVESBET = Address(base58'3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX')
1313
1414 let WALLETMCAFFE = Address(base58'')
15+
16+let WAVELET = ((100 * 1000) * 1000)
1517
1618 let STATESUBMITTED = "SUBMITTED"
1719
5860 then (playerCoin != "BLUE")
5961 else false)
6062 then throw("Invalid play, change your play to RED or BLUE.")
61- else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
63+ else (((((amount * 2) * WAVELET) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
6264
6365
6466 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
181183 let playerAPubKey58 = toBase58String(i.callerPublicKey)
182184 let payType = TypePayment(payment)
183185 let gameDataStr = FormatGameDataStr(STATESUBMITTED, paCoin, playerAPubKey58, payType, payment.amount, winAmt, "", "", "")
184- ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
186+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 250000, unit)]))
185187 }
186188 }
187189
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'')
15+
16+let WAVELET = ((100 * 1000) * 1000)
1517
1618 let STATESUBMITTED = "SUBMITTED"
1719
1820 let STATEWAITING = "WAITING"
1921
2022 let STATEFINISHED = "FINISHED"
2123
2224 let STATECANCELED = "CANCELED"
2325
2426 let FEEWAVESBET = 4
2527
2628 let FEEMCAFEE = 2
2729
2830 let IdxGameState = 0
2931
3032 let IdxPlayerACoin = 1
3133
3234 let IdxPlayerAPubKey58 = 2
3335
3436 let IdxPayType = 3
3537
3638 let IdxPayAmt = 4
3739
3840 let IdxWinAmt = 5
3941
4042 let IdxPlayerBCoin = 6
4143
4244 let IdxPlayerBPubKey58 = 7
4345
4446 let IdxRandOrEmpty = 8
4547
4648 func IncrementGameNum () = {
4749 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
4850 case num: Int =>
4951 num
5052 case _ =>
5153 0
5254 }
5355 (gameNum + 1)
5456 }
5557
5658
5759 func ValidateBetAndDefineWinAmt (playerCoin,amount) = if (if ((playerCoin != "RED"))
5860 then (playerCoin != "BLUE")
5961 else false)
6062 then throw("Invalid play, change your play to RED or BLUE.")
61- else ((((amount * 2) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
63+ else (((((amount * 2) * WAVELET) / 100000) * (100 - (FEEWAVESBET + FEEMCAFEE))) / 100)
6264
6365
6466 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
6567 case a: Int =>
6668 a
6769 case _ =>
6870 0
6971 }
7072
7173
7274 func ValidateAndIncreaseReservedAmt (winAmt) = {
7375 let newReservedAmount = (ExtractReservedAmt() + winAmt)
7476 newReservedAmount
7577 }
7678
7779
7880 func FormatGameDataParam (p) = {
7981 let s = size(p)
8082 if ((s == 0))
8183 then throw("Parameter size must be greater then 0.")
8284 else if ((s > 99))
8385 then throw("Parameter size must be less then 100.")
8486 else if ((10 > s))
8587 then (("0" + toString(s)) + p)
8688 else (toString(s) + p)
8789 }
8890
8991
9092 func FormatGameDataStr (gameState,playerACoin,playerAPubKey58,payType,payAmount,winAmt,playerBCoin,playerBPubKey58,randOrEmpty) = {
9193 let fullStateStr = ((((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerACoin)) + "_") + FormatGameDataParam(playerAPubKey58)) + "_") + FormatGameDataParam(payType)) + "_") + FormatGameDataParam(toString(payAmount))) + "_") + FormatGameDataParam(toString(winAmt)))
9294 if (if (if ((playerBCoin == ""))
9395 then (playerBPubKey58 == "")
9496 else false)
9597 then (randOrEmpty == "")
9698 else false)
9799 then fullStateStr
98100 else if (if (if ((playerBCoin != ""))
99101 then (playerBPubKey58 != "")
100102 else false)
101103 then (randOrEmpty == "")
102104 else false)
103105 then (((fullStateStr + "_") + (FormatGameDataParam(playerBCoin) + "_")) + (FormatGameDataParam(playerBPubKey58) + "_"))
104106 else ((((fullStateStr + "_") + (FormatGameDataParam(playerBCoin) + "_")) + (FormatGameDataParam(playerBPubKey58) + "_")) + FormatGameDataParam(randOrEmpty))
105107 }
106108
107109
108110 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
109111 then drop(remaining, 1)
110112 else remaining
111113
112114
113115 func ParseNextAttribute (remaining) = {
114116 let s = size(remaining)
115117 if ((s > 0))
116118 then {
117119 let nn = parseIntValue(take(remaining, 2))
118120 let v = take(drop(remaining, 2), nn)
119121 let tmpRemaining = drop(remaining, (nn + 2))
120122 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
121123 [v, remainingState]
122124 }
123125 else throw("Empty string was passed into parseNextAttribute func")
124126 }
125127
126128
127129 func ParseGameRawDataStr (rawStateStr) = {
128130 let gameState = ParseNextAttribute(rawStateStr)
129131 let playerAChoice = ParseNextAttribute(gameState[1])
130132 let playerAPubKey58 = ParseNextAttribute(playerAChoice[1])
131133 let playerAPayType = ParseNextAttribute(playerAPubKey58[1])
132134 let playerAPayAmt = ParseNextAttribute(playerAPayType[1])
133135 let winAmt = ParseNextAttribute(playerAPayAmt[1])
134136 [gameState[0], playerAChoice[0], playerAPubKey58[0], playerAPayType[0], playerAPayAmt[0], winAmt[0]]
135137 }
136138
137139
138140 func ExtractGameDataList (gameId) = {
139141 let rawDataStr = match getString(this, gameId) {
140142 case str: String =>
141143 str
142144 case _ =>
143145 throw(("Couldn't find game by " + gameId))
144146 }
145147 ParseGameRawDataStr(rawDataStr)
146148 }
147149
148150
149151 func TypePayment (p) = if ((p.assetId == assetInfo(base58'WAVES')))
150152 then "WAVES"
151153 else "WBET"
152154
153155
154156 func TypeToken (s) = if ((s == "WAVES"))
155157 then unit
156158 else WBET
157159
158160
159161 func SelectCoinB (coin) = if ((coin == "RED"))
160162 then "BLUE"
161163 else "RED"
162164
163165
164166 @Callable(i)
165167 func playCoin (paCoin) = {
166168 let gameId = toBase58String(i.transactionId)
167169 let payment = extract(i.payment)
168170 let feeAssetId = isDefined(i.feeAssetId)
169171 let gameIdUsed = isDefined(getString(this, gameId))
170172 let winAmt = ValidateBetAndDefineWinAmt(paCoin, payment.amount)
171173 if (if ((payment.assetId != assetInfo(base58'WAVES')))
172174 then (payment.assetId != WBET)
173175 else false)
174176 then throw("Payment should be in Wavesbet or Waves")
175177 else if (feeAssetId)
176178 then throw("Transaction's fee must be in Waves. Game aborted.")
177179 else if (gameIdUsed)
178180 then throw("Passed gameId had been used before. Game aborted.")
179181 else {
180182 let newGameNum = IncrementGameNum()
181183 let playerAPubKey58 = toBase58String(i.callerPublicKey)
182184 let payType = TypePayment(payment)
183185 let gameDataStr = FormatGameDataStr(STATESUBMITTED, paCoin, playerAPubKey58, payType, payment.amount, winAmt, "", "", "")
184- ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
186+ ScriptResult(WriteSet([DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 250000, unit)]))
185187 }
186188 }
187189
188190
189191
190192 @Callable(i)
191193 func acceptChallenge (gameId) = {
192194 let payment = extract(i.payment)
193195 let feeAssetId = isDefined(i.feeAssetId)
194196 let payTypeB = TypePayment(payment)
195197 let gameDataList = ExtractGameDataList(gameId)
196198 let gameState = gameDataList[IdxGameState]
197199 let payTypeA = gameDataList[IdxPayType]
198200 let payAmt = parseIntValue(gameDataList[IdxPayAmt])
199201 if (if ((payment.assetId != assetInfo(base58'WAVES')))
200202 then (payment.assetId != WBET)
201203 else false)
202204 then throw("Payment should be in Wavesbet or Waves")
203205 else if (feeAssetId)
204206 then throw("Transaction's fee must be in Waves. Game aborted.")
205207 else if ((payTypeB != payTypeA))
206208 then throw("Payment must be made in the same currency token as the bet, WBET/WBET or WAVES/WAVES.")
207209 else if ((payment.amount == payAmt))
208210 then throw("Payout must be equal to the bet amount.")
209211 else if ((gameState != STATESUBMITTED))
210212 then throw("Invalid game state for passed gameId")
211213 else {
212214 let paCoin = gameDataList[IdxPlayerACoin]
213215 let paPubKey58 = gameDataList[IdxPlayerAPubKey58]
214216 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
215217 let pbCoin = SelectCoinB(paCoin)
216218 let pbPubKey58 = toBase58String(i.callerPublicKey)
217219 let newGameDataStr = FormatGameDataStr(STATEWAITING, paCoin, paPubKey58, payTypeA, payAmt, winAmt, pbCoin, pbPubKey58, "")
218220 ScriptResult(WriteSet([DataEntry(gameId, newGameDataStr)]), TransferSet([ScriptTransfer(WALLETWAVESBET, ((payment.amount * FEEWAVESBET) / 100), WBET), ScriptTransfer(this, 500000, unit)]))
219221 }
220222 }
221223
222224
223225
224226 @Callable(i)
225227 func cancelChallenge (gameId) = {
226228 let feeAssetId = isDefined(i.feeAssetId)
227229 let gameDataList = ExtractGameDataList(gameId)
228230 let gameState = gameDataList[IdxGameState]
229231 let paPubKey58 = gameDataList[IdxPlayerAPubKey58]
230232 let pubKey58 = toBase58String(i.callerPublicKey)
231233 if (feeAssetId)
232234 then throw("Transaction's fee must be in Waves. Game aborted.")
233235 else if ((gameState != STATESUBMITTED))
234236 then throw("Invalid game state for passed gameId")
235237 else if ((paPubKey58 != pubKey58))
236238 then throw("Public key is not the same as challenge creation")
237239 else {
238240 let paCoin = gameDataList[IdxPlayerACoin]
239241 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
240242 let payTypeA = gameDataList[IdxPayType]
241243 let payAmt = parseIntValue(gameDataList[IdxPayAmt])
242244 let newGameDataStr = FormatGameDataStr(STATECANCELED, paCoin, paPubKey58, payTypeA, payAmt, winAmt, "", "", "")
243245 let refund = (payAmt - ((payAmt * FEEWAVESBET) / 100))
244246 let adrRefund = addressFromPublicKey(toBytes(paPubKey58))
245247 let refToken = TypeToken(payTypeA)
246248 ScriptResult(WriteSet([DataEntry(gameId, newGameDataStr)]), TransferSet([ScriptTransfer(adrRefund, refund, refToken)]))
247249 }
248250 }
249251
250252

github/deemru/w8io/169f3d6 
50.84 ms