tx · 2oQbY7i8T5Ct4KLEXKXnWj86QFUA2spdumz9fWwvwwt9

3PMXJ1EhpYFvBFQ2mHjrTCqd28Zem1YuSeN:  -0.01400000 Waves

2020.01.26 12:42 [1901663] smart account 3PMXJ1EhpYFvBFQ2mHjrTCqd28Zem1YuSeN > SELF 0.00000000 Waves

{ "type": 13, "id": "2oQbY7i8T5Ct4KLEXKXnWj86QFUA2spdumz9fWwvwwt9", "fee": 1400000, "feeAssetId": null, "timestamp": 1580031760629, "version": 1, "sender": "3PMXJ1EhpYFvBFQ2mHjrTCqd28Zem1YuSeN", "senderPublicKey": "2o1waDCX67ArC4iV4WWHa41MHbCKS4na7KWDJmcKNAQ3", "proofs": [ "4YBAWwTZRWfw2Af8kF8iUH4uDJpQz5zR7AKeuXSwCuJenyRTduNXcVBwB2BWdEDN2KrCYuw4ysoVnDEXGw5ioi5Q" ], "script": "base64:AAIDAAAAAAAAABEIARIAEgYKBAgCAgISAwoBCAAAADYAAAAAFmRpdmlkZW5kUHJvZ3JhbUFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQIAAAAsNFl6U1F4ano4dGFoUTYyYmdjS0x4b2g5NDI0RVlEaVlkWlV6VXRRVkN6a3MAAAAADWdhbWVQdWJsaWNLZXkJAAJZAAAAAQIAAAAsMm8xd2FEQ1g2N0FyQzRpVjRXV0hhNDFNSGJDS1M0bmE3S1dESm1jS05BUTMAAAAAFnJlZmVycmFsUHJvZ3JhbUFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQIAAAABMQAAAAANcnNhUHVibGljS2V5MQkAAlsAAAABAgAAAIBNRnd3RFFZSktvWklodmNOQVFFQkJRQURTd0F3U0FKQkFPa2l1ei9CVjRFam94R2hUbU5DYnQyVGdrYlNQSC93NjliM0YxckttRDYxSmlQWHZ2RjhMMnBJOXhPWWNXNEZtb0VaVkhsUlF0QWxhSnlrbDMrcnNyRUNBd0VBQVE9PQAAAAANcnNhUHVibGljS2V5MgkAAlsAAAABAgAAAIBNRnd3RFFZSktvWklodmNOQVFFQkJRQURTd0F3U0FKQkFKblh6Yk0vVjJzRFYxVUxiUFNPbEhrbGRPVFdSckhpNWZ4SWtCbXVldnJDbE1QVkg3cnFjY3dpckROY01kSWR3WEhJOUFkaGo5Rldqd0dJd2ZVL0s2TUNBd0VBQVE9PQAAAAANcnNhUHVibGljS2V5MwkAAlsAAAABAgAAAIBNRnd3RFFZSktvWklodmNOQVFFQkJRQURTd0F3U0FKQkFPUkRldnkwcjRrekxxT3lTbG9CNjNIdXYyZTR6ZUhLSGpDc3k1dnRGS21XWmJYSmE4Z1pZdDQrRWtsRklvMUs5b3F1NUJBUFZmSjNGT3pzMlUxQStnMENBd0VBQVE9PQAAAAAFZHJ1bTEJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABNQkABEwAAAACAgAAAAE3CQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATUJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0BQAAAANuaWwAAAAABWRydW0yCQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE2CQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATUJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABNwUAAAADbmlsAAAAAAVkcnVtMwkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNwkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATUJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATcJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATYFAAAAA25pbAAAAAANZ2FtZVRpbWVGcmFtZQAAAAAAAAALQAAAAAAKY29tbWlzc2lvbgAAAAAAAAehIAAAAAAIc3RhdGVBY2MCAAAACEFjY2VwdGVkAAAAAAhzdGF0ZVdpbgIAAAADV2luAAAAAAxzdGF0ZVRpbWVvdXQCAAAADFdpbkJ5VGltZW91dAAAAAAJ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bGFuY2UEAAAAFHZhbHVlUmVzZXJ2ZWRCYWxhbmNlCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAMcG10QXNzZXROYW1lAgAAAAlfUmVzZXJ2ZWQEAAAAByRtYXRjaDAFAAAAFHZhbHVlUmVzZXJ2ZWRCYWxhbmNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEm5ld1Jlc2VydmVkQmFsYW5jZQkAAGQAAAACBQAAABZjdXJyZW50UmVzZXJ2ZWRCYWxhbmNlCQAAaAAAAAIFAAAABnBtdEFtdAAAAAAAAAABBAMJAABnAAAAAgkAA+sAAAACBQAAAAR0aGlzBQAAAAlhc3NldElkNTgFAAAAEm5ld1Jlc2VydmVkQmFsYW5jZQUAAAASbmV3UmVzZXJ2ZWRCYWxhbmNlCQAAAgAAAAECAAAANUJldCB3YXMgcmVqZWN0ZWQuIEluc3VmZmljaWVudCBmdW5kcyBvbiBnYW1lIGFjY291bnQuAQAAABdkZWNyZWFzZVJlc2VydmVkQmFsYW5jZQAAAAIAAAAGYmV0QW10AAAAB2Fzc2V0SWQEAAAAFHZhbHVlUmVzZXJ2ZWRCYWxhbmNlCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHYXNzZXRJZAIAAAAJX1Jlc2VydmVkBAAAABZleHRyYWN0UmVzZXJ2ZWRCYWxhbmNlBAAAAAckbWF0Y2gwBQAAABR2YWx1ZVJlc2VydmVkQmFsYW5jZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABdkZWNyZWFzZVJlc2VydmVkQmFsYW5jZQkAAGUAAAACBQAAABZleHRyYWN0UmVzZXJ2ZWRCYWxhbmNlCQAAaAAAAAIFAAAABmJldEFtdAAAAAAAAAABBAMJAABnAAAAAgUAAAAXZGVjcmVhc2VSZXNlcnZlZEJhbGFuY2UAAAAAAAAAAAAFAAAAF2RlY3JlYXNlUmVzZXJ2ZWRCYWxhbmNlCQAAAgAAAAECAAAAKFJlc2VydmVkIGJhbGFuY2UgY291bGRuJ3QgYmUgbGVzcyB0aGFuIDABAAAA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ZEJhbGFuY2UFAAAAA25pbAkAAAIAAAABAgAAABRhc3NldElkIGlzIGluY29ycmVjdAAAAAFpAQAAAAhwbGF5R2FtZQAAAAQAAAAGZ2FtZUlkAAAACHJzYVNpZ24xAAAACHJzYVNpZ24yAAAACHJzYVNpZ24zBAAAAAhkYXRhTGlzdAkBAAAAC2dldERhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAAEAAAADXBsYXllckFkZHJlc3MJAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAEEAAAABmJldEFtdAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGRhdGFMaXN0AAAAAAAAAAACBAAAAAlhc3NldE5hbWUJAAGRAAAAAgUAAAAIZGF0YUxpc3QAAAAAAAAAAAMEAAAACWdhbWVTdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGRhdGFMaXN0AAAAAAAAAAAEBAAAAAlhc3NldElkNTgJAQAAABFhc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAACWFzc2V0TmFtZQQAAAASc2V0UmVzZXJ2ZWRCYWxhbmNlCQEAAAAXZGVjcmVhc2VSZXNlcnZlZEJhbGFuY2UAAAACBQAAAAZiZXRBbXQFAAAACWFzc2V0TmFtZQQAAAAIZHJ1bTFJbnQJAQAAAAhyc2FUb0ludAAAAAMFAAAABmdhbWVJZAUAAAAIcnNhU2lnbjEFAAAADXJzYVB1YmxpY0tleTEEAAAACGRydW0ySW50CQEAAAAIcnNhVG9JbnQAAAADBQAAAAZnYW1lSWQFAAAACHJzYVNpZ24yBQAAAA1yc2FQdWJsaWNLZXkyBAAAAAhkcnVtM0ludAkBAAAACHJzYVRvSW50AAAAAwUAAAAGZ2FtZUlkBQAAAAhyc2FTaWduMwUAAAANcnNhUHVibGljS2V5MwQAAAAJdHdvSW5BUm93CQABLAAAAAIJAAGRAAAAAgUAAAAFZHJ1bTEFAAAACGRydW0xSW50CQABkQAAAAIFAAAABWRydW0yBQAAAAhkcnVtMkludAQAAAALdGhyZWVJbkFSb3cJAAEsAAAAAgUAAAAJdHdvSW5BUm93CQABkQAAAAIFAAAABWRydW0zBQAAAAhkcnVtM0ludAQAAAAVZHJvcHBlZEVsZW1lbnRzU3RyaW5nCQABLAAAAAIJAAEsAAAAAgkBAAAAD2RydW1JbnRUb1N0cmluZwAAAAEFAAAACGRydW0xSW50CQEAAAAPZHJ1bUludFRvU3RyaW5nAAAAAQUAAAAIZHJ1bTJJbnQJAQAAAA9kcnVtSW50VG9TdHJpbmcAAAABBQAAAAhkcnVtM0ludAQAAAAGd2luQW10CQAAaQAAAAIJAABoAAAAAgUAAAAGYmV0QW10CQEAAAAQZGVmaW5lTXVsdGlwbGllcgAAAAIFAAAAC3RocmVlSW5BUm93BQAAAAl0d29JbkFSb3cAAAAAAAAAAAoEAAAADHJlZmVyQWRkcmVzcwkBAAAAD2dldFJlZmVyQWRkcmVzcwAAAAEFAAAADXBsYXllckFkZHJlc3MEAAAAC3JlZmVyUmV3YXJkCQEAAAAPc2V0TmV3UmVmUmV3YXJkAAAAAwUAAAAMcmVmZXJBZGRyZXNzBQAAAAZiZXRBbXQFAAAABndpbkFtdAMJAAAAAAAAAgUAAAAJZ2FtZVN0YXRlBQAAAAhzdGF0ZUFjYwMJAABmAAAAAgUAAAANZ2FtZVRpbWVGcmFtZQkAAGUAAAACBQAAAAZoZWlnaHQFAAAACWdhbWVTdGFydAMJAAAAAAAAAgUAAAAGd2luQW10AAAAAAAAAAAABAAAABJhdmFpbGFibGVEaXZpZGVuZHMEAAAACWRpdmlkZW5kcwkAAGQAAAACCQEAAAAQZ2V0Q3VycmVudEluY29tZQAAAAEFAAAACWFzc2V0TmFtZQUAAAAGYmV0QW10AwkAAGYAAAACBQAAAAlkaXZpZGVuZHMAAAAAAAAAAAAFAAAACWRpdmlkZW5kcwAAAAAAAAAAAAQAAAAGaW5jb21lBAAAAAlkaXZpZGVuZHMJAABkAAAAAgkBAAAAEGdldEN1cnJlbnRJbmNvbWUAAAABBQAAAAlhc3NldE5hbWUFAAAABmJldEFtdAMJAABmAAAAAgUAAAAJZGl2aWRlbmRzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAlkaXZpZGVuZHMDCQAAAAAAAAIFAAAADHJlZmVyQWRkcmVzcwIAAAAETm9uZQkBAAAADFNjcmlwdFJl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AAZoZWlnaHQCAAAAAV8JAAGkAAAAAQkAAGgAAAACBQAAAAZiZXRBbXQAAAAAAAAAAAICAAAAAV8CAAAAAzAwMAIAAAABXwIAAAAGMDAwMDAwCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWFzc2V0TmFtZQIAAAAJX1Jlc2VydmVkBQAAABJzZXRSZXNlcnZlZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAAdfSW5jb21lCQAAZQAAAAIJAQAAABBnZXRDdXJyZW50SW5jb21lAAAAAQUAAAAJYXNzZXROYW1lCQAAaAAAAAIFAAAABmJldEFtdAAAAAAAAAAAAgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAANcGxheWVyQWRkcmVzcwkAAGgAAAACBQAAAAZiZXRBbXQAAAAAAAAAAAIFAAAACWFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAAF0dhbWUgc3RhdGUgaXMgaW5jb3JyZWN0AAAAAWkBAAAAD3dpdGhkcmF3RGVwb3NpdAAAAAEAAAAJYXNzZXROYW1lBAAAAAlhc3NldElkNTgJAQAAABFhc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAACWFzc2V0TmFtZQQAAAAJY2FsbGVyUHViCQEAAAAUY2FsbGVySXNEZXBvc2l0T3duZXIAAAACBQAAAAlhc3NldE5hbWUJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAABNkaXZpZGVuZFN0YXJ0SGVpZ2h0CQEAAAAOZ2V0RGVwb3NpdERhdGEAAAACBQAAAAlhc3NldE5hbWUCAAAAEl9EZXBvc2l0U3RhcnRCbG9jawQAAAAPZGVwb3NpdER1cmF0aW9uCQEAAAAOZ2V0RGVwb3NpdERhdGEAAAACBQAAAAlhc3NldE5hbWUCAAAAFV9EZXBvc2l0RHVyYXRpb25CbG9jawQAAAANZGVwb3NpdEFtb3VudAkBAAAADmdldERlcG9zaXREYXRhAAAAAgUAAAAJYXNzZXROYW1lAgAAAA5fRGVwb3NpdEFtb3VudAMJAABnAAAAAgkAAGUAAAACBQAAAAZoZWlnaHQFAAAAE2RpdmlkZW5kU3RhcnRIZWlnaHQFAAAAD2RlcG9zaXREdXJhdGlvbgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAB1fRGVwb3NpdFdpdGhkcmF3VHJhbnNhY3Rpb25JZAgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAJY2FsbGVyUHViBQAAAA1kZXBvc2l0QW1vdW50BQAAAAlhc3NldElkNTgFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAaRGVwb3NpdCB0aW1lIGlzIG5vdCBvdmVyLiAJAAGkAAAAAQkAAGUAAAACBQAAAAZoZWlnaHQJAABkAAAAAgUAAAATZGl2aWRlbmRTdGFydEhlaWdodAUAAAAPZGVwb3NpdER1cmF0aW9uAgAAAA0gYmxvY2tzIGxlZnQuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA1nYW1lUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAABHNzdHgFAAAAByRtYXRjaDAGBwfJGVIx", "chainId": 87, "height": 1901663, "spentComplexity": 0 } View: original | compacted Prev: 7rDU1YAPsmdNaRdEd2bLeaSq1gnBqi95MQRZsJEvBYVo Next: 8ho2RsXqe78Phmoq729jsAiRmJD39U6tH6YvG6YzYp32 Diff:
OldNewDifferences
308308 }
309309
310310
311-func getCurrentDebt (assetName) = {
312- let val = getInteger(this, (assetName + "_Debt"))
311+func getCurrentIncome (assetName) = {
312+ let val = getInteger(this, (assetName + "_Income"))
313313 match val {
314314 case a: Int =>
315315 a
383383 then if ((winAmt == 0))
384384 then {
385385 let availableDividends = {
386- let dividends = (getCurrentDebt(assetName) + betAmt)
386+ let dividends = (getCurrentIncome(assetName) + betAmt)
387387 if ((dividends > 0))
388388 then dividends
389389 else 0
390390 }
391- let debt = {
392- let dividends = (getCurrentDebt(assetName) + betAmt)
391+ let income = {
392+ let dividends = (getCurrentIncome(assetName) + betAmt)
393393 if ((dividends > 0))
394394 then 0
395395 else dividends
396396 }
397397 if ((referAddress == "None"))
398- then ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), debt), DataEntry((playerAddress + "_GamesPlayed"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
399- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), debt), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress)), DataEntry((referAddress + "_ReferReward"), referReward)]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
398+ then ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), income), DataEntry((playerAddress + "_GamesPlayed"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
399+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), income)]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
400400 }
401- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateWin + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), (getCurrentDebt(assetName) - winAmt)), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), winAmt, assetId58)]))
402- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateTimeout + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString((betAmt * 2))) + "_") + "000") + "_") + "000000")), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), (getCurrentDebt(assetName) - (betAmt * 2))), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), (betAmt * 2), assetId58)]))
401+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateWin + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), (getCurrentIncome(assetName) - winAmt))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), winAmt, assetId58)]))
402+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateTimeout + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString((betAmt * 2))) + "_") + "000") + "_") + "000000")), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), (getCurrentIncome(assetName) - (betAmt * 2)))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), (betAmt * 2), assetId58)]))
403403 else throw("Game state is incorrect")
404404 }
405405
418418 }
419419
420420
421-
422-@Callable(i)
423-func withdrawRefReward (address,assetName) = {
424- let assetId58 = assetNameToBase58(assetName)
425- let rewardAmountChecked = {
426- let rewardAmount = match getInteger(this, (address + "_ReferReward")) {
427- case a: Int =>
428- a
429- case _ =>
430- throw("Couldn't find referral reward for this address")
431- }
432- let rewardAmountCorrect = if ((assetId58 == wavesId))
433- then if ((rewardAmount > 100000000))
434- then true
435- else false
436- else if ((assetId58 == btcId))
437- then if ((rewardAmount > 100000000))
438- then true
439- else false
440- else if ((assetId58 == ethId))
441- then if ((rewardAmount > 100000000))
442- then true
443- else false
444- else if ((assetId58 == westId))
445- then if ((rewardAmount > 100000000))
446- then true
447- else false
448- else if ((assetId58 == wctId))
449- then if ((rewardAmount > 100000000))
450- then true
451- else false
452- else if ((rewardAmount > 100000000))
453- then true
454- else false
455- if (rewardAmountCorrect)
456- then rewardAmount
457- else throw("Reward Amount is too low to withdraw")
458- }
459- ScriptResult(WriteSet([DataEntry((address + "_ReferReward"), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(address), rewardAmountChecked, assetId58)]))
460- }
461-
462-
463421 @Verifier(tx)
464422 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], gamePublicKey))
465423 then match tx {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dividendProgramAddress = addressFromPublicKey(fromBase58String("4YzSQxjz8tahQ62bgcKLxoh9424EYDiYdZUzUtQVCzks"))
55
66 let gamePublicKey = fromBase58String("2o1waDCX67ArC4iV4WWHa41MHbCKS4na7KWDJmcKNAQ3")
77
88 let referralProgramAddress = addressFromPublicKey(fromBase58String("1"))
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 gameTimeFrame = 2880
2323
2424 let commission = 500000
2525
2626 let stateAcc = "Accepted"
2727
2828 let stateWin = "Win"
2929
3030 let stateTimeout = "WinByTimeout"
3131
3232 let stateLose = "Lose"
3333
3434 let wavesId = unit
3535
3636 let btcId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
3737
3838 let ethId = base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu'
3939
4040 let ltcId = base58'HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk'
4141
4242 let westId = base58'4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8'
4343
4444 let wctId = base58'DHgwrRvVyqJsepd32YbBqUeDH4GJ1N984X8QoekjgH8J'
4545
4646 let usdtId = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
4747
4848 let usdnId = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
4949
5050 let wavesMinAmt = 20000000
5151
5252 let wavesMaxAmt = (wavesMinAmt * 10)
5353
5454 let btcMinAmt = 2000
5555
5656 let btcMaxAmt = (btcMinAmt * 10)
5757
5858 let ethMinAmt = 100000
5959
6060 let ethMaxAmt = (ethMinAmt * 10)
6161
6262 let ltcMinAmt = 200000
6363
6464 let ltcMaxAmt = (ltcMinAmt * 10)
6565
6666 let wctMinAmt = 200000000
6767
6868 let wctMaxAmt = (wctMinAmt * 10)
6969
7070 let westMinAmt = 200000000
7171
7272 let westMaxAmt = (westMinAmt * 10)
7373
7474 let usdtMinAmt = 200000
7575
7676 let usdtMaxAmt = (usdtMinAmt * 10)
7777
7878 let usdnMinAmt = 200000
7979
8080 let usdnMaxAmt = (usdnMinAmt * 10)
8181
8282 func pmtAmtCheck (pmtAssetId,betAmount) = if ((pmtAssetId == "WAVES"))
8383 then if (if ((betAmount >= wavesMinAmt))
8484 then (wavesMaxAmt >= betAmount)
8585 else false)
8686 then true
8787 else throw("Bet amount is not in range")
8888 else if ((pmtAssetId == "BTC"))
8989 then if (if ((betAmount >= btcMinAmt))
9090 then (btcMaxAmt >= betAmount)
9191 else false)
9292 then true
9393 else throw("Bet amount is not in range")
9494 else if ((pmtAssetId == "ETH"))
9595 then if (if ((betAmount >= ethMinAmt))
9696 then (ethMaxAmt >= betAmount)
9797 else false)
9898 then true
9999 else throw("Bet amount is not in range")
100100 else if ((pmtAssetId == "LTC"))
101101 then if (if ((betAmount >= ltcMinAmt))
102102 then (ltcMaxAmt >= betAmount)
103103 else false)
104104 then true
105105 else throw("Bet amount is not in range")
106106 else if ((pmtAssetId == "WEST"))
107107 then if (if ((betAmount >= westMinAmt))
108108 then (westMaxAmt >= betAmount)
109109 else false)
110110 then true
111111 else throw("Bet amount is not in range")
112112 else if ((pmtAssetId == "USDT"))
113113 then if (if ((betAmount >= usdtMinAmt))
114114 then (usdtMaxAmt >= betAmount)
115115 else false)
116116 then true
117117 else throw("Bet amount is not in range")
118118 else if ((pmtAssetId == "USDN"))
119119 then if (if ((betAmount >= usdnMinAmt))
120120 then (usdnMaxAmt >= betAmount)
121121 else false)
122122 then true
123123 else throw("Bet amount is not in range")
124124 else if (if ((betAmount >= wctMinAmt))
125125 then (wctMaxAmt >= betAmount)
126126 else false)
127127 then true
128128 else throw("Bet amount is not in range")
129129
130130
131131 func getDataList (gameId) = {
132132 let getDataString = getString(this, (gameId + "_GameId"))
133133 let a = match getDataString {
134134 case a: String =>
135135 a
136136 case _ =>
137137 throw("GameId was not found")
138138 }
139139 split(a, "_")
140140 }
141141
142142
143143 func rsaToInt (gameId,rsaSign,rsaPublicKey) = {
144144 let rsaCheck = rsaVerify(SHA256, toBytes(gameId), rsaSign, rsaPublicKey)
145145 if (rsaCheck)
146146 then (toInt(sha256(rsaSign)) % 19)
147147 else throw("Rsa Signature is invalid")
148148 }
149149
150150
151151 func increaseReservedBalance (pmtAmt,pmtAssetName,assetId58) = {
152152 let currentReservedBalance = {
153153 let valueReservedBalance = getInteger(this, (pmtAssetName + "_Reserved"))
154154 match valueReservedBalance {
155155 case a: Int =>
156156 a
157157 case _ =>
158158 0
159159 }
160160 }
161161 let newReservedBalance = (currentReservedBalance + (pmtAmt * 260))
162162 if ((assetBalance(this, assetId58) >= newReservedBalance))
163163 then newReservedBalance
164164 else throw("Bet was rejected. Insufficient funds on game account.")
165165 }
166166
167167
168168 func decreaseReservedBalance (betAmt,assetId) = {
169169 let valueReservedBalance = getInteger(this, (assetId + "_Reserved"))
170170 let extractReservedBalance = match valueReservedBalance {
171171 case a: Int =>
172172 a
173173 case _ =>
174174 0
175175 }
176176 let decreaseReservedBalance = (extractReservedBalance - (betAmt * 260))
177177 if ((decreaseReservedBalance >= 0))
178178 then decreaseReservedBalance
179179 else throw("Reserved balance couldn't be less than 0")
180180 }
181181
182182
183183 func drumIntToString (drumInt) = if ((10 > drumInt))
184184 then ("0" + toString(drumInt))
185185 else toString(drumInt)
186186
187187
188188 func defineMultiplier (threeInARow,twoInARow) = if ((threeInARow == "777"))
189189 then 2600
190190 else if ((threeInARow == "666"))
191191 then 1300
192192 else if ((threeInARow == "555"))
193193 then 450
194194 else if ((threeInARow == "444"))
195195 then 200
196196 else if ((threeInARow == "333"))
197197 then 150
198198 else if ((threeInARow == "222"))
199199 then 110
200200 else if ((threeInARow == "111"))
201201 then 50
202202 else if ((twoInARow == "77"))
203203 then 270
204204 else if ((twoInARow == "66"))
205205 then 130
206206 else if ((twoInARow == "55"))
207207 then 45
208208 else if ((twoInARow == "44"))
209209 then 30
210210 else if ((twoInARow == "33"))
211211 then 20
212212 else if ((twoInARow == "22"))
213213 then 17
214214 else if ((twoInARow == "11"))
215215 then 13
216216 else 0
217217
218218
219219 func assetNameToBase58 (assetName) = if ((assetName == "WAVES"))
220220 then wavesId
221221 else if ((assetName == "BTC"))
222222 then btcId
223223 else if ((assetName == "ETH"))
224224 then ethId
225225 else if ((assetName == "LTC"))
226226 then ltcId
227227 else if ((assetName == "WEST"))
228228 then westId
229229 else if ((assetName == "WCT"))
230230 then wctId
231231 else if ((assetName == "USDT"))
232232 then usdtId
233233 else if ((assetName == "USDN"))
234234 then usdnId
235235 else throw("Asset name is incorrect")
236236
237237
238238 func assetBase58ToName (assetId) = if (!(isDefined(assetId)))
239239 then "WAVES"
240240 else if ((assetId == btcId))
241241 then "BTC"
242242 else if ((assetId == ethId))
243243 then "ETH"
244244 else if ((assetId == ltcId))
245245 then "LTC"
246246 else if ((assetId == westId))
247247 then "WEST"
248248 else if ((assetId == wctId))
249249 then "WCT"
250250 else if ((assetId == usdtId))
251251 then "USDT"
252252 else if ((assetId == usdnId))
253253 then "USDN"
254254 else throw("AssetId is incorrect")
255255
256256
257257 func getReferAddress (address) = {
258258 let referAddress = getString(referralProgramAddress, (address + "_Refer"))
259259 match referAddress {
260260 case a: String =>
261261 a
262262 case _ =>
263263 "None"
264264 }
265265 }
266266
267267
268268 func setNewRefReward (referAddress,betAmt,winAmt) = if ((referAddress == "None"))
269269 then 0
270270 else {
271271 let valueRefReward = getInteger(this, (referAddress + "_RefReward"))
272272 let currentRefReward = match valueRefReward {
273273 case a: Int =>
274274 a
275275 case _ =>
276276 throw("Couldn't find refer reward for this address")
277277 }
278278 let refKoeff = {
279279 let a = match getInteger(this, (referAddress + "_GamesPlayedByRef")) {
280280 case a: Int =>
281281 a
282282 case _ =>
283283 throw("Couldn't find games played number by referrals for this address")
284284 }
285285 if ((a > 10000))
286286 then 30
287287 else if ((a > 1000))
288288 then 20
289289 else if ((a > 100))
290290 then 10
291291 else 5
292292 }
293293 let gameIncome = (betAmt - winAmt)
294294 let rewardForThisGame = ((gameIncome * refKoeff) / 100)
295295 (currentRefReward + rewardForThisGame)
296296 }
297297
298298
299299 func setNewGamesPlayedNum (address) = {
300300 let valueGamesPlayedNum = getInteger(this, (address + "_GamesPlayed"))
301301 let currentGamesPlayedNum = match valueGamesPlayedNum {
302302 case a: Int =>
303303 a
304304 case _ =>
305305 0
306306 }
307307 (currentGamesPlayedNum + 1)
308308 }
309309
310310
311-func getCurrentDebt (assetName) = {
312- let val = getInteger(this, (assetName + "_Debt"))
311+func getCurrentIncome (assetName) = {
312+ let val = getInteger(this, (assetName + "_Income"))
313313 match val {
314314 case a: Int =>
315315 a
316316 case _ =>
317317 0
318318 }
319319 }
320320
321321
322322 func callerIsDepositOwner (assetName,callerPublicKey) = {
323323 let depositOwner = getString(dividendProgramAddress, (assetName + "_DepositOwner"))
324324 if ((callerPublicKey == depositOwner))
325325 then callerPublicKey
326326 else throw("Only deposit owner can withdrawal deposit")
327327 }
328328
329329
330330 func getDepositData (assetName,keySuffix) = {
331331 let key = (assetName + keySuffix)
332332 let val = getInteger(dividendProgramAddress, key)
333333 match val {
334334 case a: Int =>
335335 a
336336 case _ =>
337337 throw("Couldn't find dividend program start height")
338338 }
339339 }
340340
341341
342342 @Callable(i)
343343 func makeBet () = {
344344 let pmt = extract(i.payment)
345345 let betAmount = (pmt.amount - commission)
346346 let assetId = pmt.assetId
347347 let gameId = toBase58String(i.transactionId)
348348 let playerAddress = extract(i.caller)
349349 let pmtAssetName = assetBase58ToName(assetId)
350350 let setReservedBalance = increaseReservedBalance(betAmount, pmtAssetName, pmt.assetId)
351351 let pmtAmtCorrect = pmtAmtCheck(pmtAssetName, betAmount)
352352 if (pmtAmtCorrect)
353353 then {
354354 let dataString = ((((((((stateAcc + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_") + pmtAssetName) + "_") + toString(height))
355355 WriteSet([DataEntry((gameId + "_GameId"), dataString), DataEntry((pmtAssetName + "_Reserved"), setReservedBalance)])
356356 }
357357 else throw("assetId is incorrect")
358358 }
359359
360360
361361
362362 @Callable(i)
363363 func playGame (gameId,rsaSign1,rsaSign2,rsaSign3) = {
364364 let dataList = getDataList(gameId)
365365 let gameState = dataList[0]
366366 let playerAddress = dataList[1]
367367 let betAmt = parseIntValue(dataList[2])
368368 let assetName = dataList[3]
369369 let gameStart = parseIntValue(dataList[4])
370370 let assetId58 = assetNameToBase58(assetName)
371371 let setReservedBalance = decreaseReservedBalance(betAmt, assetName)
372372 let drum1Int = rsaToInt(gameId, rsaSign1, rsaPublicKey1)
373373 let drum2Int = rsaToInt(gameId, rsaSign2, rsaPublicKey2)
374374 let drum3Int = rsaToInt(gameId, rsaSign3, rsaPublicKey3)
375375 let twoInARow = (drum1[drum1Int] + drum2[drum2Int])
376376 let threeInARow = (twoInARow + drum3[drum3Int])
377377 let droppedElementsString = ((drumIntToString(drum1Int) + drumIntToString(drum2Int)) + drumIntToString(drum3Int))
378378 let winAmt = ((betAmt * defineMultiplier(threeInARow, twoInARow)) / 10)
379379 let referAddress = getReferAddress(playerAddress)
380380 let referReward = setNewRefReward(referAddress, betAmt, winAmt)
381381 if ((gameState == stateAcc))
382382 then if ((gameTimeFrame > (height - gameStart)))
383383 then if ((winAmt == 0))
384384 then {
385385 let availableDividends = {
386- let dividends = (getCurrentDebt(assetName) + betAmt)
386+ let dividends = (getCurrentIncome(assetName) + betAmt)
387387 if ((dividends > 0))
388388 then dividends
389389 else 0
390390 }
391- let debt = {
392- let dividends = (getCurrentDebt(assetName) + betAmt)
391+ let income = {
392+ let dividends = (getCurrentIncome(assetName) + betAmt)
393393 if ((dividends > 0))
394394 then 0
395395 else dividends
396396 }
397397 if ((referAddress == "None"))
398- then ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), debt), DataEntry((playerAddress + "_GamesPlayed"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
399- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), debt), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress)), DataEntry((referAddress + "_ReferReward"), referReward)]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
398+ then ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), income), DataEntry((playerAddress + "_GamesPlayed"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
399+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateLose + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), income)]), TransferSet([ScriptTransfer(dividendProgramAddress, availableDividends, assetId58)]))
400400 }
401- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateWin + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), (getCurrentDebt(assetName) - winAmt)), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), winAmt, assetId58)]))
402- else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateTimeout + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString((betAmt * 2))) + "_") + "000") + "_") + "000000")), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Debt"), (getCurrentDebt(assetName) - (betAmt * 2))), DataEntry((referAddress + "_GamesPlayedByRef"), setNewGamesPlayedNum(referAddress))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), (betAmt * 2), assetId58)]))
401+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateWin + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString(winAmt)) + "_") + threeInARow) + "_") + droppedElementsString)), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), (getCurrentIncome(assetName) - winAmt))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), winAmt, assetId58)]))
402+ else ScriptResult(WriteSet([DataEntry((gameId + "_GameId"), ((((((((((((((stateTimeout + "_") + dataList[1]) + "_") + dataList[2]) + "_") + dataList[3]) + "_") + toString(height)) + "_") + toString((betAmt * 2))) + "_") + "000") + "_") + "000000")), DataEntry((assetName + "_Reserved"), setReservedBalance), DataEntry((assetName + "_Income"), (getCurrentIncome(assetName) - (betAmt * 2)))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddress), (betAmt * 2), assetId58)]))
403403 else throw("Game state is incorrect")
404404 }
405405
406406
407407
408408 @Callable(i)
409409 func withdrawDeposit (assetName) = {
410410 let assetId58 = assetNameToBase58(assetName)
411411 let callerPub = callerIsDepositOwner(assetName, toBase58String(i.callerPublicKey))
412412 let dividendStartHeight = getDepositData(assetName, "_DepositStartBlock")
413413 let depositDuration = getDepositData(assetName, "_DepositDurationBlock")
414414 let depositAmount = getDepositData(assetName, "_DepositAmount")
415415 if (((height - dividendStartHeight) >= depositDuration))
416416 then ScriptResult(WriteSet([DataEntry((assetName + "_DepositWithdrawTransactionId"), i.transactionId)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(callerPub)), depositAmount, assetId58)]))
417417 else throw((("Deposit time is not over. " + toString((height - (dividendStartHeight + depositDuration)))) + " blocks left."))
418418 }
419419
420420
421-
422-@Callable(i)
423-func withdrawRefReward (address,assetName) = {
424- let assetId58 = assetNameToBase58(assetName)
425- let rewardAmountChecked = {
426- let rewardAmount = match getInteger(this, (address + "_ReferReward")) {
427- case a: Int =>
428- a
429- case _ =>
430- throw("Couldn't find referral reward for this address")
431- }
432- let rewardAmountCorrect = if ((assetId58 == wavesId))
433- then if ((rewardAmount > 100000000))
434- then true
435- else false
436- else if ((assetId58 == btcId))
437- then if ((rewardAmount > 100000000))
438- then true
439- else false
440- else if ((assetId58 == ethId))
441- then if ((rewardAmount > 100000000))
442- then true
443- else false
444- else if ((assetId58 == westId))
445- then if ((rewardAmount > 100000000))
446- then true
447- else false
448- else if ((assetId58 == wctId))
449- then if ((rewardAmount > 100000000))
450- then true
451- else false
452- else if ((rewardAmount > 100000000))
453- then true
454- else false
455- if (rewardAmountCorrect)
456- then rewardAmount
457- else throw("Reward Amount is too low to withdraw")
458- }
459- ScriptResult(WriteSet([DataEntry((address + "_ReferReward"), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(address), rewardAmountChecked, assetId58)]))
460- }
461-
462-
463421 @Verifier(tx)
464422 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], gamePublicKey))
465423 then match tx {
466424 case sstx: SetScriptTransaction =>
467425 true
468426 case _ =>
469427 false
470428 }
471429 else false
472430

github/deemru/w8io/6500d08 
81.39 ms