tx · YmcdbWZkchU8o6QAMikFaKQonGBb5A8FFBsQ5LRBQDR

3PAZhLney5kv77EYnPufR1DDdRdTVgwr2cL:  -0.01000000 Waves

2023.11.23 12:08 [3921705] smart account 3PAZhLney5kv77EYnPufR1DDdRdTVgwr2cL > SELF 0.00000000 Waves

{ "type": 13, "id": "YmcdbWZkchU8o6QAMikFaKQonGBb5A8FFBsQ5LRBQDR", "fee": 1000000, "feeAssetId": null, "timestamp": 1700730541608, "version": 2, "chainId": 87, "sender": "3PAZhLney5kv77EYnPufR1DDdRdTVgwr2cL", "senderPublicKey": "2YnfmtWgE6g16xfEk7BE6nhfrog4PkTxSLU3gQtJ5CNU", "proofs": [ "5PhcFAF9mwU6hBvhgqMXznbAPJVA5oixsmAVDpkpFGETnDEycu6YHZgeFK2RmBDopX4toxCftSBToYZaSHbtFTdS" ], "script": "base64:BgILCAISAwoBARIAEgAQAARQRVRFASDgBBrgvVLFvGmdYYzEBNHsViaiNECN8HQGYmdKVaSXYgALVGVhbUFkZHJlc3MJAQdBZGRyZXNzAQEaAVesZ9JasQGmo0/p7vF1EjwaTIJ7exFMYDoAD2N1cnJlbnRSb3VuZEtleQINY3VycmVudF9yb3VuZAEIZ2V0Um91bmQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFD2N1cnJlbnRSb3VuZEtleQAAARFnZXRSb3VuZFN0YXR1c0tleQEBcgkArAICCQCsAgICAnJfCQCkAwEFAXICB19zdGF0dXMBFGdldFJvdW5kU3RhcnRlZEF0S2V5AQFyCQCsAgIJAKwCAgICcl8JAKQDAQUBcgILX3N0YXJ0ZWRfYXQBEGdldFJvdW5kRGVsYXlLZXkBAXIJAKwCAgkArAICAgJyXwkApAMBBQFyAgZfZGVsYXkBDWdldFJvdW5kRGVsYXkACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEQZ2V0Um91bmREZWxheUtleQEJAQhnZXRSb3VuZAAAEHJvdW5kRmluaXNoQXRLZXkJAKwCAgkArAICAgJyXwkApAMBCQEIZ2V0Um91bmQAAgpfZmluaXNoX2F0AA9yb3VuZEFkZHJlc3NLZXkJAKwCAgkArAICAgJyXwkApAMBCQEIZ2V0Um91bmQAAghfYWRkcmVzcwATcm91bmRQcmV2QWRkcmVzc0tleQkArAICCQCsAgICAnJfCQCkAwEJAQhnZXRSb3VuZAACDV9wcmV2X2FkZHJlc3MADnJvdW5kV2lubmVyS2V5CQCsAgIJAKwCAgICcl8JAKQDAQkBCGdldFJvdW5kAAIHX3dpbm5lcgARcm91bmRCZXRzQ291bnRLZXkJAKwCAgkArAICAgJyXwkApAMBCQEIZ2V0Um91bmQAAgtfYmV0c19jb3VudAAKQkVUX0FNT1VOVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgpiZXRfYW1vdW50AIDKte4BAAhidXJuUGFydAkAawMFCkJFVF9BTU9VTlQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIJYnVybl9wYXJ0ACgAZAAIdGVhbVBhcnQJAGsDBQpCRVRfQU1PVU5UCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCCXRlYW1fcGFydAAKAGQDAWkBC2NyZWF0ZVJvdW5kAQVkZWxheQMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgULVGVhbUFkZHJlc3MHCQACAQIJeW91IGNhbid0BAZzdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWdldFJvdW5kU3RhdHVzS2V5AQkBCGdldFJvdW5kAAIHbm8gZ2FtZQMJAAACBQZzdGF0dXMCB2luIGdhbWUJAAIBAhNjYW50IHN0YXJ0IG5ldyBnYW1lBAFyCQBkAgkBCGdldFJvdW5kAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9jdXJyZW50Um91bmRLZXkFAXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWdldFJvdW5kU3RhdHVzS2V5AQUBcgIHaW4gZ2FtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGdldFJvdW5kU3RhcnRlZEF0S2V5AQUBcgUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQZ2V0Um91bmREZWxheUtleQEFAXIFBWRlbGF5BQNuaWwBaQEDYmV0AAMDAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEUEVURQcJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUKQkVUX0FNT1VOVAcEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAhmaW5pc2hBdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRByb3VuZEZpbmlzaEF0S2V5BQZoZWlnaHQDCQBmAgUGaGVpZ2h0CQBkAgUIZmluaXNoQXQJAQ1nZXRSb3VuZERlbGF5AAkAAgECDXJvdW5kIGlzIG92ZXIECWJldHNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFyb3VuZEJldHNDb3VudEtleQAABAtwcmV2QWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBRNyb3VuZFByZXZBZGRyZXNzS2V5Agl1bmRlZmluZWQDCQAAAgULcHJldkFkZHJlc3MFC3ByZXZBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRByb3VuZEZpbmlzaEF0S2V5CQBkAgUGaGVpZ2h0CQENZ2V0Um91bmREZWxheQAJAMwIAgkBC1N0cmluZ0VudHJ5AgUPcm91bmRBZGRyZXNzS2V5BQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFyb3VuZEJldHNDb3VudEtleQkAZAIFCWJldHNDb3VudAABCQDMCAIJAQtTdHJpbmdFbnRyeQIFE3JvdW5kUHJldkFkZHJlc3NLZXkFC3ByZXZBZGRyZXNzCQDMCAIJAQRCdXJuAgUEUEVURQUIYnVyblBhcnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwULVGVhbUFkZHJlc3MFCHRlYW1QYXJ0BQRQRVRFBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAgtiYWQgcGF5bWVudAFpAQhmaW5hbGl6ZQAECGZpbmlzaEF0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEHJvdW5kRmluaXNoQXRLZXkFBmhlaWdodAMJAGYCBQZoZWlnaHQJAGQCBQhmaW5pc2hBdAkBDWdldFJvdW5kRGVsYXkABAZ3aW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFD3JvdW5kQWRkcmVzc0tleQkAzAgCCQELU3RyaW5nRW50cnkCCQERZ2V0Um91bmRTdGF0dXNLZXkBCQEIZ2V0Um91bmQAAghmaW5pc2hlZAkAzAgCCQELU3RyaW5nRW50cnkCBQ5yb3VuZFdpbm5lcktleQUGd2lubmVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBndpbm5lcgkA8AcCBQR0aGlzBQRQRVRFBQRQRVRFBQNuaWwJAAIBAhFyb3VuZCBpcyBub3Qgb3ZlcgB0DXaW", "height": 3921705, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ew9bZp7YqNRcYbpeu95TGgC6DcbKcjrswRzAUcjwSFp Next: 3n4hdAedYtsCvq3MSrTMz98XUba67K8dEoZnWawJ42Wc Diff:
OldNewDifferences
1919 func getRoundDelayKey (r) = (("r_" + toString(r)) + "_delay")
2020
2121
22+func getRoundDelay () = getIntegerValue(this, getRoundDelayKey(getRound()))
23+
24+
2225 let roundFinishAtKey = (("r_" + toString(getRound())) + "_finish_at")
2326
2427 let roundAddressKey = (("r_" + toString(getRound())) + "_address")
2528
29+let roundPrevAddressKey = (("r_" + toString(getRound())) + "_prev_address")
30+
2631 let roundWinnerKey = (("r_" + toString(getRound())) + "_winner")
2732
28-func getRoundDelay () = getIntegerValue(this, getRoundDelayKey(getRound()))
29-
33+let roundBetsCountKey = (("r_" + toString(getRound())) + "_bets_count")
3034
3135 let BET_AMOUNT = valueOrElse(getInteger(this, "bet_amount"), 500000000)
3236
6266 let finishAt = valueOrElse(getInteger(this, roundFinishAtKey), height)
6367 if ((height > (finishAt + getRoundDelay())))
6468 then throw("round is over")
65- else [IntegerEntry(roundFinishAtKey, (height + getRoundDelay())), StringEntry(roundAddressKey, address), Burn(PETE, burnPart), ScriptTransfer(TeamAddress, teamPart, PETE)]
69+ else {
70+ let betsCount = valueOrElse(getInteger(this, roundBetsCountKey), 0)
71+ let prevAddress = valueOrElse(getString(this, roundPrevAddressKey), "undefined")
72+ if ((prevAddress == prevAddress))
73+ then [IntegerEntry(roundFinishAtKey, (height + getRoundDelay())), StringEntry(roundAddressKey, address), IntegerEntry(roundBetsCountKey, (betsCount + 1)), StringEntry(roundPrevAddressKey, prevAddress), Burn(PETE, burnPart), ScriptTransfer(TeamAddress, teamPart, PETE)]
74+ else throw("Strict value is not equal to itself.")
75+ }
6676 }
6777 else throw("bad payment")
6878
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let PETE = base58'G5TxNrsZRvBmYW69g7jCB3gcR1J7sKV1Uh328Adtj2w3'
55
66 let TeamAddress = Address(base58'3PHeVKu6hS24p2LX7AdtHnZnpyuC8Q7q2MF')
77
88 let currentRoundKey = "current_round"
99
1010 func getRound () = valueOrElse(getInteger(this, currentRoundKey), 0)
1111
1212
1313 func getRoundStatusKey (r) = (("r_" + toString(r)) + "_status")
1414
1515
1616 func getRoundStartedAtKey (r) = (("r_" + toString(r)) + "_started_at")
1717
1818
1919 func getRoundDelayKey (r) = (("r_" + toString(r)) + "_delay")
2020
2121
22+func getRoundDelay () = getIntegerValue(this, getRoundDelayKey(getRound()))
23+
24+
2225 let roundFinishAtKey = (("r_" + toString(getRound())) + "_finish_at")
2326
2427 let roundAddressKey = (("r_" + toString(getRound())) + "_address")
2528
29+let roundPrevAddressKey = (("r_" + toString(getRound())) + "_prev_address")
30+
2631 let roundWinnerKey = (("r_" + toString(getRound())) + "_winner")
2732
28-func getRoundDelay () = getIntegerValue(this, getRoundDelayKey(getRound()))
29-
33+let roundBetsCountKey = (("r_" + toString(getRound())) + "_bets_count")
3034
3135 let BET_AMOUNT = valueOrElse(getInteger(this, "bet_amount"), 500000000)
3236
3337 let burnPart = fraction(BET_AMOUNT, valueOrElse(getInteger(this, "burn_part"), 40), 100)
3438
3539 let teamPart = fraction(BET_AMOUNT, valueOrElse(getInteger(this, "team_part"), 10), 100)
3640
3741 @Callable(i)
3842 func createRound (delay) = if (if ((i.caller != this))
3943 then (i.caller != TeamAddress)
4044 else false)
4145 then throw("you can't")
4246 else {
4347 let status = valueOrElse(getString(this, getRoundStatusKey(getRound())), "no game")
4448 if ((status == "in game"))
4549 then throw("cant start new game")
4650 else {
4751 let r = (getRound() + 1)
4852 [IntegerEntry(currentRoundKey, r), StringEntry(getRoundStatusKey(r), "in game"), IntegerEntry(getRoundStartedAtKey(r), height), IntegerEntry(getRoundDelayKey(r), delay)]
4953 }
5054 }
5155
5256
5357
5458 @Callable(i)
5559 func bet () = if (if (if ((size(i.payments) == 1))
5660 then (i.payments[0].assetId == PETE)
5761 else false)
5862 then (i.payments[0].amount == BET_AMOUNT)
5963 else false)
6064 then {
6165 let address = toString(i.caller)
6266 let finishAt = valueOrElse(getInteger(this, roundFinishAtKey), height)
6367 if ((height > (finishAt + getRoundDelay())))
6468 then throw("round is over")
65- else [IntegerEntry(roundFinishAtKey, (height + getRoundDelay())), StringEntry(roundAddressKey, address), Burn(PETE, burnPart), ScriptTransfer(TeamAddress, teamPart, PETE)]
69+ else {
70+ let betsCount = valueOrElse(getInteger(this, roundBetsCountKey), 0)
71+ let prevAddress = valueOrElse(getString(this, roundPrevAddressKey), "undefined")
72+ if ((prevAddress == prevAddress))
73+ then [IntegerEntry(roundFinishAtKey, (height + getRoundDelay())), StringEntry(roundAddressKey, address), IntegerEntry(roundBetsCountKey, (betsCount + 1)), StringEntry(roundPrevAddressKey, prevAddress), Burn(PETE, burnPart), ScriptTransfer(TeamAddress, teamPart, PETE)]
74+ else throw("Strict value is not equal to itself.")
75+ }
6676 }
6777 else throw("bad payment")
6878
6979
7080
7181 @Callable(i)
7282 func finalize () = {
7383 let finishAt = valueOrElse(getInteger(this, roundFinishAtKey), height)
7484 if ((height > (finishAt + getRoundDelay())))
7585 then {
7686 let winner = getStringValue(this, roundAddressKey)
7787 [StringEntry(getRoundStatusKey(getRound()), "finished"), StringEntry(roundWinnerKey, winner), ScriptTransfer(addressFromStringValue(winner), assetBalance(this, PETE), PETE)]
7888 }
7989 else throw("round is not over")
8090 }
8191
8292

github/deemru/w8io/6500d08 
28.31 ms