tx · C19BQ5MzffCJG4HmoE3h3waLdqBJooZeSFpj6EJfekKR

3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs:  -0.01000000 Waves

2023.08.29 08:55 [2731591] smart account 3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs > SELF 0.00000000 Waves

{ "type": 13, "id": "C19BQ5MzffCJG4HmoE3h3waLdqBJooZeSFpj6EJfekKR", "fee": 1000000, "feeAssetId": null, "timestamp": 1693288524024, "version": 2, "chainId": 84, "sender": "3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs", "senderPublicKey": "8yQuxvQ2qLzXJrgbKZHbsfnNNjuU5wfHheyVujdALGsF", "proofs": [ "gQTUNLj33odXVssQheRfwDJAUCA6xof4B8Q7h6Vo62Je1G9hga2RdTtB5ju88tcvSzZPXcdHPc1MqVEyi16QH8G" ], "script": "base64:BgIOCAISABIAEgQKAggBEgAKAA5sb3R0ZXJ5QXNzZXRJRAkA2QQBAiwzTHoyM21TVXZUMUVzd2NCbjJzVVJZSkcyYXQ4ckc1YUZ1VXJUQXdhUE02UQAKdGlja2V0U2l6ZQCAwtcvARBnZXRJbnRlZ2VyT3JFbHNlAgNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCfCAEFA2tleQUDdmFsAQJtawEBeAkAuQkCBQF4AgFfARFrZXlBZHJUb3RhbFN0YWtlZAEDYWRyCQECbWsBCQDMCAIFA2FkcgkAzAgCAgt0b3RhbFN0YWtlZAUDbmlsARVrZXlMb3R0ZXJ5VG90YWxTdGFrZWQBC2xvdHRlcnlOYW1lCQECbWsBCQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICEmxvdHRlcnlUb3RhbFN0YWtlZAUDbmlsARhrZXlBZHJMb3R0ZXJ5VG90YWxTdGFrZWQCC2xvdHRlcnlOYW1lA2FkcgkBAm1rAQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCBQNhZHIJAMwIAgILdG90YWxTdGFrZWQFA25pbAEVa2V5TG90dGVyeUZpbmFsSGVpZ2h0AQtsb3R0ZXJ5TmFtZQkBAm1rAQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAhJsb3R0ZXJ5RmluYWxIZWlnaHQFA25pbAEOZ2V0TG90dGVyeU5hbWUACQERQGV4dHJOYXRpdmUoMTA1OCkBAhJjdXJyZW50TG90dGVyeU5hbWUBGGFjdGl2ZUxvdHRlcnlOYW1lT3JGYWxzZQADCQECIT0CCQELdmFsdWVPckVsc2UCCQCgCAECEGxvdHRlcnlJc1N0YXJ0ZWQHBgcEC2xvdHRlcnlOYW1lCQEOZ2V0TG90dGVyeU5hbWUABQtsb3R0ZXJ5TmFtZQQBaQEFc3Rha2UAAwkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkAoAgBAhBsb3R0ZXJ5SXNTdGFydGVkBwYJAAIBAhJMb3R0ZXJ5IG5vdCBhY3RpdmUEC2xvdHRlcnlOYW1lCQEOZ2V0TG90dGVyeU5hbWUABBJsb3R0ZXJ5RmluYWxIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARVrZXlMb3R0ZXJ5RmluYWxIZWlnaHQBBQtsb3R0ZXJ5TmFtZQMJAGcCCQBlAgUGaGVpZ2h0AAEFEmxvdHRlcnlGaW5hbEhlaWdodAkAAgECEkxvdHRlcnkgbm90IGFjdGl2ZQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhBObyBwYXltZW50IGFkZGVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIXVG9vIG1hbnkgcGF5bWVudHMgYWRkZWQDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDmxvdHRlcnlBc3NldElECQACAQIVV3JvbmcgcGF5bWVudCBhc3NldElkBAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAx0aWNrZXRBbW91bnQJAGkCBQZhbW91bnQFCnRpY2tldFNpemUDCQAAAgUMdGlja2V0QW1vdW50AAAJAAIBAiVOb3QgZW5vdWdoIHRvIGJ1eSBhdCBsZWFzdCBvbmUgdGlja2V0BA1jYWxsZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQTX2xvdHRlcnlUb3RhbFN0YWtlZAkBFWtleUxvdHRlcnlUb3RhbFN0YWtlZAEFC2xvdHRlcnlOYW1lBBJsb3R0ZXJ5VG90YWxTdGFrZWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFE19sb3R0ZXJ5VG90YWxTdGFrZWQEBl9vd25lcgkBAm1rAQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCCQCkAwEFEmxvdHRlcnlUb3RhbFN0YWtlZAkAzAgCCQCkAwEJAGUCCQBkAgUSbG90dGVyeVRvdGFsU3Rha2VkBQx0aWNrZXRBbW91bnQAAQkAzAgCAgVPd25lcgUDbmlsBA9fYWRyVG90YWxTdGFrZWQJARFrZXlBZHJUb3RhbFN0YWtlZAEFDWNhbGxlckFkZHJlc3MEDmFkclRvdGFsU3Rha2VkCQEQZ2V0SW50ZWdlck9yRWxzZQIFD19hZHJUb3RhbFN0YWtlZAAABBZfYWRyTG90dGVyeVRvdGFsU3Rha2VkCQEYa2V5QWRyTG90dGVyeVRvdGFsU3Rha2VkAgULbG90dGVyeU5hbWUFDWNhbGxlckFkZHJlc3MEFWFkckxvdHRlcnlUb3RhbFN0YWtlZAkBEGdldEludGVnZXJPckVsc2UCBRZfYWRyTG90dGVyeVRvdGFsU3Rha2VkAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUGYW1vdW50CQBoAgUMdGlja2V0QW1vdW50BQp0aWNrZXRTaXplBQ5sb3R0ZXJ5QXNzZXRJRAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTX2xvdHRlcnlUb3RhbFN0YWtlZAkAZAIFEmxvdHRlcnlUb3RhbFN0YWtlZAUMdGlja2V0QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIFBl9vd25lcgUNY2FsbGVyQWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPX2FkclRvdGFsU3Rha2VkCQBkAgUOYWRyVG90YWxTdGFrZWQFDHRpY2tldEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWX2FkckxvdHRlcnlUb3RhbFN0YWtlZAkAZAIFFWFkckxvdHRlcnlUb3RhbFN0YWtlZAUMdGlja2V0QW1vdW50BQNuaWwBaQEFY2xhaW0ABAtsb3R0ZXJ5TmFtZQkBGGFjdGl2ZUxvdHRlcnlOYW1lT3JGYWxzZQAEFXN0YWtlZEluQWN0aXZlTG90dGVyeQMJAAACBQtsb3R0ZXJ5TmFtZQcAAQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCAgR0ZW1wBRVzdGFrZWRJbkFjdGl2ZUxvdHRlcnkFA25pbAFpAQtpbml0TG90dGVyeQILbG90dGVyeU5hbWUSbG90dGVyeUZpbmFsSGVpZ2h0AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQkAzAgCCQEMQm9vbGVhbkVudHJ5AgIQbG90dGVyeUlzU3RhcnRlZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgISY3VycmVudExvdHRlcnlOYW1lBQtsb3R0ZXJ5TmFtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lBRJsb3R0ZXJ5RmluYWxIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlMb3R0ZXJ5VG90YWxTdGFrZWQBBQtsb3R0ZXJ5TmFtZQAABQNuaWwBaQEEY2FsbAAEBWFzc2V0CQDDCAcCBUFzc2V0AgAAAQAABgUEdW5pdAAABAdhc3NldElkCQC4CAEFBWFzc2V0CQDMCAIJAQtCaW5hcnlFbnRyeQICA2JpbgEACQDMCAIJAQxCb29sZWFuRW50cnkCAgRib29sBgkAzAgCCQEMSW50ZWdlckVudHJ5AgIDaW50AAEJAMwIAgkBC1N0cmluZ0VudHJ5AgIDc3RyAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQIDc3RyCQDMCAIFBWFzc2V0CQDMCAIJAQdSZWlzc3VlAwUHYXNzZXRJZAABBwkAzAgCCQEEQnVybgIFB2Fzc2V0SWQAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleT4s2Eg=", "height": 2731591, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G148PL3j2GbrSs6go1b4RZfbopEtcDCx9D7KoBVppm65 Next: BvGb3AiKngy5DaVxLBf6WFEVvNCQ5xoeHGKsuHZm3qnQ Diff:
OldNewDifferences
55
66 let ticketSize = 100000000
77
8+func getIntegerOrElse (key,val) = valueOrElse(getInteger(key), val)
9+
10+
811 func mk (x) = makeString(x, "_")
912
1013
11-func gs (key) = valueOrErrorMessage(getString(this, key), makeString(["'", key, "' key not found"], ""))
14+func keyAdrTotalStaked (adr) = mk([adr, "totalStaked"])
1215
1316
14-func gi (key) = valueOrErrorMessage(getInteger(this, key), makeString(["'", key, "' key not found"], ""))
17+func keyLotteryTotalStaked (lotteryName) = mk([lotteryName, "lotteryTotalStaked"])
18+
19+
20+func keyAdrLotteryTotalStaked (lotteryName,adr) = mk([lotteryName, adr, "totalStaked"])
21+
22+
23+func keyLotteryFinalHeight (lotteryName) = mk([lotteryName, "lotteryFinalHeight"])
24+
25+
26+func getLotteryName () = getStringValue("currentLotteryName")
27+
28+
29+func activeLotteryNameOrFalse () = if ((valueOrElse(getBoolean("lotteryIsStarted"), false) != true))
30+ then false
31+ else {
32+ let lotteryName = getLotteryName()
33+ lotteryName
34+ }
1535
1636
1737 @Callable(i)
18-func stake () = if ((valueOrElse(getBoolean(this, "lotteryIsStarted"), false) != true))
19- then throw("Lottery has not started yet")
38+func stake () = if ((valueOrElse(getBoolean("lotteryIsStarted"), false) != true))
39+ then throw("Lottery not active")
2040 else {
21- let lotteryName = gs("currentLotteryName")
22- let lotteryFinalHeight = gi(mk([lotteryName, "lotteryFinalHeight"]))
41+ let lotteryName = getLotteryName()
42+ let lotteryFinalHeight = getIntegerValue(keyLotteryFinalHeight(lotteryName))
2343 if (((height - 1) >= lotteryFinalHeight))
24- then throw("Lottery has not started yet")
44+ then throw("Lottery not active")
2545 else if ((size(i.payments) == 0))
2646 then throw("No payment added")
2747 else if ((size(i.payments) != 1))
3151 else {
3252 let amount = i.payments[0].amount
3353 let ticketAmount = (amount / ticketSize)
34- if ((amount == 0))
54+ if ((ticketAmount == 0))
3555 then throw("Not enough to buy at least one ticket")
3656 else {
37- let pointerKey = mk([lotteryName, "pointer"])
38-[ScriptTransfer(i.caller, (amount - (ticketAmount * ticketSize)), lotteryAssetID)]
57+ let callerAddress = toString(i.caller)
58+ let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
59+ let lotteryTotalStaked = getIntegerValue(_lotteryTotalStaked)
60+ let _owner = mk([lotteryName, toString(lotteryTotalStaked), toString(((lotteryTotalStaked + ticketAmount) - 1)), "Owner"])
61+ let _adrTotalStaked = keyAdrTotalStaked(callerAddress)
62+ let adrTotalStaked = getIntegerOrElse(_adrTotalStaked, 0)
63+ let _adrLotteryTotalStaked = keyAdrLotteryTotalStaked(lotteryName, callerAddress)
64+ let adrLotteryTotalStaked = getIntegerOrElse(_adrLotteryTotalStaked, 0)
65+[ScriptTransfer(i.caller, (amount - (ticketAmount * ticketSize)), lotteryAssetID), IntegerEntry(_lotteryTotalStaked, (lotteryTotalStaked + ticketAmount)), StringEntry(_owner, callerAddress), IntegerEntry(_adrTotalStaked, (adrTotalStaked + ticketAmount)), IntegerEntry(_adrLotteryTotalStaked, (adrLotteryTotalStaked + ticketAmount))]
3966 }
4067 }
4168 }
4370
4471
4572 @Callable(i)
73+func claim () = {
74+ let lotteryName = activeLotteryNameOrFalse()
75+ let stakedInActiveLottery = if ((lotteryName == false))
76+ then 1
77+ else 0
78+[IntegerEntry("temp", stakedInActiveLottery)]
79+ }
80+
81+
82+
83+@Callable(i)
4684 func initLottery (lotteryName,lotteryFinalHeight) = if ((i.caller != this))
4785 then throw("admin only")
48- else [BooleanEntry("lotteryIsStarted", true), StringEntry("currentLotteryName", lotteryName), IntegerEntry(mk([lotteryName, "lotteryFinalHeight"]), lotteryFinalHeight), IntegerEntry(mk([lotteryName, "pointer"]), 0)]
86+ else [BooleanEntry("lotteryIsStarted", true), StringEntry("currentLotteryName", lotteryName), IntegerEntry(keyLotteryFinalHeight(lotteryName), lotteryFinalHeight), IntegerEntry(keyLotteryTotalStaked(lotteryName), 0)]
4987
5088
5189
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lotteryAssetID = fromBase58String("3Lz23mSUvT1EswcBn2sURYJG2at8rG5aFuUrTAwaPM6Q")
55
66 let ticketSize = 100000000
77
8+func getIntegerOrElse (key,val) = valueOrElse(getInteger(key), val)
9+
10+
811 func mk (x) = makeString(x, "_")
912
1013
11-func gs (key) = valueOrErrorMessage(getString(this, key), makeString(["'", key, "' key not found"], ""))
14+func keyAdrTotalStaked (adr) = mk([adr, "totalStaked"])
1215
1316
14-func gi (key) = valueOrErrorMessage(getInteger(this, key), makeString(["'", key, "' key not found"], ""))
17+func keyLotteryTotalStaked (lotteryName) = mk([lotteryName, "lotteryTotalStaked"])
18+
19+
20+func keyAdrLotteryTotalStaked (lotteryName,adr) = mk([lotteryName, adr, "totalStaked"])
21+
22+
23+func keyLotteryFinalHeight (lotteryName) = mk([lotteryName, "lotteryFinalHeight"])
24+
25+
26+func getLotteryName () = getStringValue("currentLotteryName")
27+
28+
29+func activeLotteryNameOrFalse () = if ((valueOrElse(getBoolean("lotteryIsStarted"), false) != true))
30+ then false
31+ else {
32+ let lotteryName = getLotteryName()
33+ lotteryName
34+ }
1535
1636
1737 @Callable(i)
18-func stake () = if ((valueOrElse(getBoolean(this, "lotteryIsStarted"), false) != true))
19- then throw("Lottery has not started yet")
38+func stake () = if ((valueOrElse(getBoolean("lotteryIsStarted"), false) != true))
39+ then throw("Lottery not active")
2040 else {
21- let lotteryName = gs("currentLotteryName")
22- let lotteryFinalHeight = gi(mk([lotteryName, "lotteryFinalHeight"]))
41+ let lotteryName = getLotteryName()
42+ let lotteryFinalHeight = getIntegerValue(keyLotteryFinalHeight(lotteryName))
2343 if (((height - 1) >= lotteryFinalHeight))
24- then throw("Lottery has not started yet")
44+ then throw("Lottery not active")
2545 else if ((size(i.payments) == 0))
2646 then throw("No payment added")
2747 else if ((size(i.payments) != 1))
2848 then throw("Too many payments added")
2949 else if ((i.payments[0].assetId != lotteryAssetID))
3050 then throw("Wrong payment assetId")
3151 else {
3252 let amount = i.payments[0].amount
3353 let ticketAmount = (amount / ticketSize)
34- if ((amount == 0))
54+ if ((ticketAmount == 0))
3555 then throw("Not enough to buy at least one ticket")
3656 else {
37- let pointerKey = mk([lotteryName, "pointer"])
38-[ScriptTransfer(i.caller, (amount - (ticketAmount * ticketSize)), lotteryAssetID)]
57+ let callerAddress = toString(i.caller)
58+ let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
59+ let lotteryTotalStaked = getIntegerValue(_lotteryTotalStaked)
60+ let _owner = mk([lotteryName, toString(lotteryTotalStaked), toString(((lotteryTotalStaked + ticketAmount) - 1)), "Owner"])
61+ let _adrTotalStaked = keyAdrTotalStaked(callerAddress)
62+ let adrTotalStaked = getIntegerOrElse(_adrTotalStaked, 0)
63+ let _adrLotteryTotalStaked = keyAdrLotteryTotalStaked(lotteryName, callerAddress)
64+ let adrLotteryTotalStaked = getIntegerOrElse(_adrLotteryTotalStaked, 0)
65+[ScriptTransfer(i.caller, (amount - (ticketAmount * ticketSize)), lotteryAssetID), IntegerEntry(_lotteryTotalStaked, (lotteryTotalStaked + ticketAmount)), StringEntry(_owner, callerAddress), IntegerEntry(_adrTotalStaked, (adrTotalStaked + ticketAmount)), IntegerEntry(_adrLotteryTotalStaked, (adrLotteryTotalStaked + ticketAmount))]
3966 }
4067 }
4168 }
4269
4370
4471
4572 @Callable(i)
73+func claim () = {
74+ let lotteryName = activeLotteryNameOrFalse()
75+ let stakedInActiveLottery = if ((lotteryName == false))
76+ then 1
77+ else 0
78+[IntegerEntry("temp", stakedInActiveLottery)]
79+ }
80+
81+
82+
83+@Callable(i)
4684 func initLottery (lotteryName,lotteryFinalHeight) = if ((i.caller != this))
4785 then throw("admin only")
48- else [BooleanEntry("lotteryIsStarted", true), StringEntry("currentLotteryName", lotteryName), IntegerEntry(mk([lotteryName, "lotteryFinalHeight"]), lotteryFinalHeight), IntegerEntry(mk([lotteryName, "pointer"]), 0)]
86+ else [BooleanEntry("lotteryIsStarted", true), StringEntry("currentLotteryName", lotteryName), IntegerEntry(keyLotteryFinalHeight(lotteryName), lotteryFinalHeight), IntegerEntry(keyLotteryTotalStaked(lotteryName), 0)]
4987
5088
5189
5290 @Callable(i)
5391 func call () = {
5492 let asset = Issue("Asset", "", 1, 0, true, unit, 0)
5593 let assetId = calculateAssetId(asset)
5694 [BinaryEntry("bin", base58''), BooleanEntry("bool", true), IntegerEntry("int", 1), StringEntry("str", ""), DeleteEntry("str"), asset, Reissue(assetId, 1, false), Burn(assetId, 1), ScriptTransfer(i.caller, 1, assetId)]
5795 }
5896
5997
6098 @Verifier(tx)
6199 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
62100

github/deemru/w8io/873ac7e 
29.83 ms