tx · 6B68AXHMQy9e5gXPgYHtJysFGrrroUN8sFLprbQJJicj

3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs:  -0.01000000 Waves

2023.09.07 11:55 [2744750] smart account 3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs > SELF 0.00000000 Waves

{ "type": 13, "id": "6B68AXHMQy9e5gXPgYHtJysFGrrroUN8sFLprbQJJicj", "fee": 1000000, "feeAssetId": null, "timestamp": 1694076894899, "version": 2, "chainId": 84, "sender": "3N4Kzbxu521DHPxcgrmZ4XUqN2kF6TqLTzs", "senderPublicKey": "8yQuxvQ2qLzXJrgbKZHbsfnNNjuU5wfHheyVujdALGsF", "proofs": [ "iqLyB3LFfDanFKP8DwiKrsjvv5E7B2b5gFeJQo2f2u4mom5C3iLrXiAVuo1oDJj11XaDyVjhQh59S6aerrhBDqC" ], "script": "base64:BgIfCAISABIECgIIARIGCgQIAQEIEgQKAggBEgUKAwgBCBIADmxvdHRlcnlBc3NldElEASAi1eE3pAm1kH7yDd2K/R2HDGQ6c8cmK+ceUzFNVsLOiQEQZ2V0SW50ZWdlck9yRWxzZQIDa2V5A3ZhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQNrZXkFA3ZhbAEPZ2V0U3RyaW5nT3JFbHNlAgNrZXkDdmFsCQELdmFsdWVPckVsc2UCCQCiCAEFA2tleQUDdmFsAQ9zdHJpbmdLZXlFeGlzdHMBA2tleQMJAQlpc0RlZmluZWQBCQCiCAEFA2tleQYHAQJtawEBeAkAuQkCBQF4AgFfARVrZXlMb3R0ZXJ5VG90YWxTdGFrZWQBC2xvdHRlcnlOYW1lCQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgILdG90YWxTdGFrZWQFA25pbAETa2V5TG90dGVyeUFkclN0YWtlZAILbG90dGVyeU5hbWUDYWRyCQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgIDYWRyCQDMCAIFA2FkcgkAzAgCAgZzdGFrZWQFA25pbAETa2V5TG90dGVyeUFkckxvY2tlZAILbG90dGVyeU5hbWUDYWRyCQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgIDYWRyCQDMCAIFA2FkcgkAzAgCAgZsb2NrZWQFA25pbAEVa2V5TG90dGVyeUZpbmFsSGVpZ2h0AQtsb3R0ZXJ5TmFtZQkBAm1rAQkAzAgCAgdsb3R0ZXJ5CQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICC2ZpbmFsSGVpZ2h0BQNuaWwBFWtleUxvdHRlcnlTdGFydEhlaWdodAELbG90dGVyeU5hbWUJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgtzdGFydEhlaWdodAUDbmlsARRrZXlMb3R0ZXJ5UHJpemVWYWx1ZQILbG90dGVyeU5hbWUHcHJpemVJRAkBAm1rAQkAzAgCAgdsb3R0ZXJ5CQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICBXByaXplCQDMCAIJAKQDAQUHcHJpemVJRAkAzAgCAgV2YWx1ZQUDbmlsARhrZXlMb3R0ZXJ5UHJpemVUaHJlc2hvbGQCC2xvdHRlcnlOYW1lB3ByaXplSUQJAQJtawEJAMwIAgIHbG90dGVyeQkAzAgCBQtsb3R0ZXJ5TmFtZQkAzAgCAgVwcml6ZQkAzAgCCQCkAwEFB3ByaXplSUQJAMwIAgIJdGhyZXNob2xkBQNuaWwBFWtleUxvdHRlcnlQcml6ZVJhbmRvbQILbG90dGVyeU5hbWUHcHJpemVJRAkBAm1rAQkAzAgCAgdsb3R0ZXJ5CQDMCAIFC2xvdHRlcnlOYW1lCQDMCAICBXByaXplCQDMCAIJAKQDAQUHcHJpemVJRAkAzAgCAgZyYW5kb20FA25pbAEVa2V5TG90dGVyeVByaXplV2lubmVyAgtsb3R0ZXJ5TmFtZQdwcml6ZUlECQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgIFcHJpemUJAMwIAgkApAMBBQdwcml6ZUlECQDMCAICBndpbm5lcgUDbmlsARZrZXlMb3R0ZXJ5VGlja2V0c093bmVyAwtsb3R0ZXJ5TmFtZQRmcm9tAnRvCQECbWsBCQDMCAICB2xvdHRlcnkJAMwIAgULbG90dGVyeU5hbWUJAMwIAgIEZnJvbQkAzAgCCQCkAwEFBGZyb20JAMwIAgICdG8JAMwIAgkApAMBBQJ0bwkAzAgCAgVvd25lcgUDbmlsABJfYWN0aXZlTG90dGVyeU5hbWUJAQJtawEJAMwIAgIFcGFyYW0JAMwIAgIRYWN0aXZlTG90dGVyeU5hbWUFA25pbAASX2dsb2JhbFRvdGFsU3Rha2VkCQECbWsBCQDMCAICBXBhcmFtCQDMCAICEWdsb2JhbFRvdGFsU3Rha2VkBQNuaWwBEWFjdGl2ZUxvdHRlcnlOYW1lAAQLbG90dGVyeU5hbWUJAQ9nZXRTdHJpbmdPckVsc2UCBRJfYWN0aXZlTG90dGVyeU5hbWUCAAMJAAACBQtsb3R0ZXJ5TmFtZQIAAgAEEmxvdHRlcnlGaW5hbEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lAwkAZwIFBmhlaWdodAUSbG90dGVyeUZpbmFsSGVpZ2h0AgAFC2xvdHRlcnlOYW1lBQFpAQVzdGFrZQAEC2xvdHRlcnlOYW1lCQERYWN0aXZlTG90dGVyeU5hbWUAAwkAAAIFC2xvdHRlcnlOYW1lAgAJAAIBAhJMb3R0ZXJ5IG5vdCBhY3RpdmUDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQI/Tm8gcGF5bWVudCBhZGRlZC4gWW91IG11c3QgYXR0YWNoIGEgcGF5bWVudCBpbiBEb2RsbG5vZGUgdG9rZW5zAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQJAVG9vIG1hbnkgcGF5bWVudHMgYWRkZWQuIFRoZXJlIG11c3QgYmUgb25seSBvbmUgYXR0YWNoZWQgcGF5bWVudAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUObG90dGVyeUFzc2V0SUQJAAIBAkRXcm9uZyBwYXltZW50IGFzc2V0SUQuIFlvdSBtdXN0IGF0dGFjaCBhIHBheW1lbnQgaW4gRG9kbGxub2RlIHRva2VucwQGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMJAGYCAAEFBmFtb3VudAkAAgECNE5vdCBlbm91Z2ggcGF5bWVudCB0byBwdXJjaGFzZSBldmVuIGEgc2luZ2xlIHRpY2tldC4EDWNhbGxlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBBNfbG90dGVyeVRvdGFsU3Rha2VkCQEVa2V5TG90dGVyeVRvdGFsU3Rha2VkAQULbG90dGVyeU5hbWUEEmxvdHRlcnlUb3RhbFN0YWtlZAkBEGdldEludGVnZXJPckVsc2UCBRNfbG90dGVyeVRvdGFsU3Rha2VkAAAEEV9sb3R0ZXJ5QWRyU3Rha2VkCQETa2V5TG90dGVyeUFkclN0YWtlZAIFC2xvdHRlcnlOYW1lBQ1jYWxsZXJBZGRyZXNzBBBsb3R0ZXJ5QWRyU3Rha2VkCQEQZ2V0SW50ZWdlck9yRWxzZQIFEV9sb3R0ZXJ5QWRyU3Rha2VkAAAEBl9vd25lcgkBFmtleUxvdHRlcnlUaWNrZXRzT3duZXIDBQtsb3R0ZXJ5TmFtZQUSbG90dGVyeVRvdGFsU3Rha2VkCQBlAgkAZAIFEmxvdHRlcnlUb3RhbFN0YWtlZAUGYW1vdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIFE19sb3R0ZXJ5VG90YWxTdGFrZWQJAGQCBRJsb3R0ZXJ5VG90YWxTdGFrZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURX2xvdHRlcnlBZHJTdGFrZWQJAGQCBRBsb3R0ZXJ5QWRyU3Rha2VkBQZhbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGX293bmVyBQ1jYWxsZXJBZGRyZXNzBQNuaWwBaQELaW5pdExvdHRlcnkCC2xvdHRlcnlOYW1lEmxvdHRlcnlGaW5hbEhlaWdodAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUSX2FjdGl2ZUxvdHRlcnlOYW1lBQtsb3R0ZXJ5TmFtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lBRJsb3R0ZXJ5RmluYWxIZWlnaHQFA25pbAFpAQxkZWNsYXJlUHJpemUEC2xvdHRlcnlOYW1lB3ByaXplSWQOcHJpemVUaHJlc2hvbGQKcHJpemVWYWx1ZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlMb3R0ZXJ5UHJpemVUaHJlc2hvbGQCBQtsb3R0ZXJ5TmFtZQUHcHJpemVJZAUOcHJpemVUaHJlc2hvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleUxvdHRlcnlQcml6ZVZhbHVlAgULbG90dGVyeU5hbWUFB3ByaXplSWQFCnByaXplVmFsdWUFA25pbAFpARRmaW5hbGFpemVQcml6ZVJhbmRvbQILbG90dGVyeU5hbWUHcHJpemVJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkEEmxvdHRlcnlGaW5hbEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBFWtleUxvdHRlcnlGaW5hbEhlaWdodAEFC2xvdHRlcnlOYW1lAwkAZgIJAGQCBRJsb3R0ZXJ5RmluYWxIZWlnaHQAAQUGaGVpZ2h0CQACAQIXTG90dGVyeSBpcyBub3Qgb3ZlciB5ZXQEEWxvdHRlcnlQcml6ZVZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleUxvdHRlcnlQcml6ZVZhbHVlAgULbG90dGVyeU5hbWUFB3ByaXplSWQCFFByaXplIGRvZXMgbm90IGV4aXN0BBNfbG90dGVyeVByaXplUmFuZG9tCQEVa2V5TG90dGVyeVByaXplUmFuZG9tAgULbG90dGVyeU5hbWUFB3ByaXplSWQDCQEPc3RyaW5nS2V5RXhpc3RzAQUTX2xvdHRlcnlQcml6ZVJhbmRvbQkAAgECLFRoZSBwcml6ZSByYW5kb20gaGFzIGFscmVhZHkgYmVlbiBmaW5hbGFpemVkBAtmaW5hbEJsb2NrMAkBBXZhbHVlAQkA7QcBBRJsb3R0ZXJ5RmluYWxIZWlnaHQEC2ZpbmFsQmxvY2sxCQEFdmFsdWUBCQDtBwEJAGQCBRJsb3R0ZXJ5RmluYWxIZWlnaHQAAQQOcHJpemVSYW5kb21SYXcJAJ4DAQkA9wMBCQDLAQIJAMsBAgkAywECAQl2h2WWWi216vIJAJoDAQUHcHJpemVJZAkBBXZhbHVlAQgFC2ZpbmFsQmxvY2swA3ZyZgkBBXZhbHVlAQgFC2ZpbmFsQmxvY2sxA3ZyZgQLcHJpemVSYW5kb20DCQC/AgIJALYCAQAABQ5wcml6ZVJhbmRvbVJhdwkAvgIBBQ5wcml6ZVJhbmRvbVJhdwUOcHJpemVSYW5kb21SYXcJAMwIAgkBC1N0cmluZ0VudHJ5AgUTX2xvdHRlcnlQcml6ZVJhbmRvbQkApgMBBQtwcml6ZVJhbmRvbQUDbmlsAWkBFGZpbmFsYWl6ZVByaXplV2lubmVyAwtsb3R0ZXJ5TmFtZQdwcml6ZUlkCXdpbm5lckFkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIG9ubHkEE19sb3R0ZXJ5UHJpemVXaW5uZXIJARVrZXlMb3R0ZXJ5UHJpemVXaW5uZXICBQtsb3R0ZXJ5TmFtZQUHcHJpemVJZAMJAQ9zdHJpbmdLZXlFeGlzdHMBBRNfbG90dGVyeVByaXplV2lubmVyCQACAQIsVGhlIHByaXplIHdpbm5lciBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsYWl6ZWQEEV9sb3R0ZXJ5QWRyU3Rha2VkCQETa2V5TG90dGVyeUFkclN0YWtlZAIFC2xvdHRlcnlOYW1lBQl3aW5uZXJBZHIEEGxvdHRlcnlBZHJTdGFrZWQJARBnZXRJbnRlZ2VyT3JFbHNlAgURX2xvdHRlcnlBZHJTdGFrZWQAAAQRX2xvdHRlcnlBZHJMb2NrZWQJARNrZXlMb3R0ZXJ5QWRyTG9ja2VkAgULbG90dGVyeU5hbWUFCXdpbm5lckFkcgQQbG90dGVyeUFkckxvY2tlZAkBEGdldEludGVnZXJPckVsc2UCBRFfbG90dGVyeUFkckxvY2tlZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFfbG90dGVyeUFkclN0YWtlZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFfbG90dGVyeUFkckxvY2tlZAkAZAIFEGxvdHRlcnlBZHJMb2NrZWQFEGxvdHRlcnlBZHJTdGFrZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUTX2xvdHRlcnlQcml6ZVdpbm5lcgUJd2lubmVyQWRyBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5RZ7jWg==", "height": 2744750, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GKCL5iBWBeTaduHTMLGS9LwgiGYf8cbVMyc1Peum3dqQ Next: FDMsfhsuZi2tm5SDvhD3tPWmnSNHLM7W1gMnLzV2H53v Diff:
OldNewDifferences
2727
2828
2929 func keyLotteryFinalHeight (lotteryName) = mk(["lottery", lotteryName, "finalHeight"])
30+
31+
32+func keyLotteryStartHeight (lotteryName) = mk(["lottery", lotteryName, "startHeight"])
3033
3134
3235 func keyLotteryPrizeValue (lotteryName,prizeID) = mk(["lottery", lotteryName, "prize", toString(prizeID), "value"])
7477 then throw("Wrong payment assetID. You must attach a payment in Dodllnode tokens")
7578 else {
7679 let amount = i.payments[0].amount
77- let callerAddress = toString(i.caller)
78- let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
79- let lotteryTotalStaked = getIntegerOrElse(_lotteryTotalStaked, 0)
80- let _lotteryAdrStaked = keyLotteryAdrStaked(lotteryName, callerAddress)
81- let lotteryAdrStaked = getIntegerOrElse(_lotteryAdrStaked, 0)
82- let _owner = keyLotteryTicketsOwner(lotteryName, lotteryTotalStaked, ((lotteryTotalStaked + amount) - 1))
80+ if ((1 > amount))
81+ then throw("Not enough payment to purchase even a single ticket.")
82+ else {
83+ let callerAddress = toString(i.caller)
84+ let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
85+ let lotteryTotalStaked = getIntegerOrElse(_lotteryTotalStaked, 0)
86+ let _lotteryAdrStaked = keyLotteryAdrStaked(lotteryName, callerAddress)
87+ let lotteryAdrStaked = getIntegerOrElse(_lotteryAdrStaked, 0)
88+ let _owner = keyLotteryTicketsOwner(lotteryName, lotteryTotalStaked, ((lotteryTotalStaked + amount) - 1))
8389 [IntegerEntry(_lotteryTotalStaked, (lotteryTotalStaked + amount)), IntegerEntry(_lotteryAdrStaked, (lotteryAdrStaked + amount)), StringEntry(_owner, callerAddress)]
90+ }
8491 }
8592 }
8693
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let lotteryAssetID = base58'3Lz23mSUvT1EswcBn2sURYJG2at8rG5aFuUrTAwaPM6Q'
55
66 func getIntegerOrElse (key,val) = valueOrElse(getInteger(key), val)
77
88
99 func getStringOrElse (key,val) = valueOrElse(getString(key), val)
1010
1111
1212 func stringKeyExists (key) = if (isDefined(getString(key)))
1313 then true
1414 else false
1515
1616
1717 func mk (x) = makeString(x, "_")
1818
1919
2020 func keyLotteryTotalStaked (lotteryName) = mk(["lottery", lotteryName, "totalStaked"])
2121
2222
2323 func keyLotteryAdrStaked (lotteryName,adr) = mk(["lottery", lotteryName, "adr", adr, "staked"])
2424
2525
2626 func keyLotteryAdrLocked (lotteryName,adr) = mk(["lottery", lotteryName, "adr", adr, "locked"])
2727
2828
2929 func keyLotteryFinalHeight (lotteryName) = mk(["lottery", lotteryName, "finalHeight"])
30+
31+
32+func keyLotteryStartHeight (lotteryName) = mk(["lottery", lotteryName, "startHeight"])
3033
3134
3235 func keyLotteryPrizeValue (lotteryName,prizeID) = mk(["lottery", lotteryName, "prize", toString(prizeID), "value"])
3336
3437
3538 func keyLotteryPrizeThreshold (lotteryName,prizeID) = mk(["lottery", lotteryName, "prize", toString(prizeID), "threshold"])
3639
3740
3841 func keyLotteryPrizeRandom (lotteryName,prizeID) = mk(["lottery", lotteryName, "prize", toString(prizeID), "random"])
3942
4043
4144 func keyLotteryPrizeWinner (lotteryName,prizeID) = mk(["lottery", lotteryName, "prize", toString(prizeID), "winner"])
4245
4346
4447 func keyLotteryTicketsOwner (lotteryName,from,to) = mk(["lottery", lotteryName, "from", toString(from), "to", toString(to), "owner"])
4548
4649
4750 let _activeLotteryName = mk(["param", "activeLotteryName"])
4851
4952 let _globalTotalStaked = mk(["param", "globalTotalStaked"])
5053
5154 func activeLotteryName () = {
5255 let lotteryName = getStringOrElse(_activeLotteryName, "")
5356 if ((lotteryName == ""))
5457 then ""
5558 else {
5659 let lotteryFinalHeight = getIntegerValue(keyLotteryFinalHeight(lotteryName))
5760 if ((height >= lotteryFinalHeight))
5861 then ""
5962 else lotteryName
6063 }
6164 }
6265
6366
6467 @Callable(i)
6568 func stake () = {
6669 let lotteryName = activeLotteryName()
6770 if ((lotteryName == ""))
6871 then throw("Lottery not active")
6972 else if ((size(i.payments) == 0))
7073 then throw("No payment added. You must attach a payment in Dodllnode tokens")
7174 else if ((size(i.payments) != 1))
7275 then throw("Too many payments added. There must be only one attached payment")
7376 else if ((i.payments[0].assetId != lotteryAssetID))
7477 then throw("Wrong payment assetID. You must attach a payment in Dodllnode tokens")
7578 else {
7679 let amount = i.payments[0].amount
77- let callerAddress = toString(i.caller)
78- let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
79- let lotteryTotalStaked = getIntegerOrElse(_lotteryTotalStaked, 0)
80- let _lotteryAdrStaked = keyLotteryAdrStaked(lotteryName, callerAddress)
81- let lotteryAdrStaked = getIntegerOrElse(_lotteryAdrStaked, 0)
82- let _owner = keyLotteryTicketsOwner(lotteryName, lotteryTotalStaked, ((lotteryTotalStaked + amount) - 1))
80+ if ((1 > amount))
81+ then throw("Not enough payment to purchase even a single ticket.")
82+ else {
83+ let callerAddress = toString(i.caller)
84+ let _lotteryTotalStaked = keyLotteryTotalStaked(lotteryName)
85+ let lotteryTotalStaked = getIntegerOrElse(_lotteryTotalStaked, 0)
86+ let _lotteryAdrStaked = keyLotteryAdrStaked(lotteryName, callerAddress)
87+ let lotteryAdrStaked = getIntegerOrElse(_lotteryAdrStaked, 0)
88+ let _owner = keyLotteryTicketsOwner(lotteryName, lotteryTotalStaked, ((lotteryTotalStaked + amount) - 1))
8389 [IntegerEntry(_lotteryTotalStaked, (lotteryTotalStaked + amount)), IntegerEntry(_lotteryAdrStaked, (lotteryAdrStaked + amount)), StringEntry(_owner, callerAddress)]
90+ }
8491 }
8592 }
8693
8794
8895
8996 @Callable(i)
9097 func initLottery (lotteryName,lotteryFinalHeight) = if ((i.caller != this))
9198 then throw("Admin only")
9299 else [StringEntry(_activeLotteryName, lotteryName), IntegerEntry(keyLotteryFinalHeight(lotteryName), lotteryFinalHeight)]
93100
94101
95102
96103 @Callable(i)
97104 func declarePrize (lotteryName,prizeId,prizeThreshold,prizeValue) = if ((i.caller != this))
98105 then throw("Admin only")
99106 else [IntegerEntry(keyLotteryPrizeThreshold(lotteryName, prizeId), prizeThreshold), StringEntry(keyLotteryPrizeValue(lotteryName, prizeId), prizeValue)]
100107
101108
102109
103110 @Callable(i)
104111 func finalaizePrizeRandom (lotteryName,prizeId) = if ((i.caller != this))
105112 then throw("Admin only")
106113 else {
107114 let lotteryFinalHeight = getIntegerValue(keyLotteryFinalHeight(lotteryName))
108115 if (((lotteryFinalHeight + 1) > height))
109116 then throw("Lottery is not over yet")
110117 else {
111118 let lotteryPrizeValue = valueOrErrorMessage(getString(keyLotteryPrizeValue(lotteryName, prizeId)), "Prize does not exist")
112119 let _lotteryPrizeRandom = keyLotteryPrizeRandom(lotteryName, prizeId)
113120 if (stringKeyExists(_lotteryPrizeRandom))
114121 then throw("The prize random has already been finalaized")
115122 else {
116123 let finalBlock0 = value(blockInfoByHeight(lotteryFinalHeight))
117124 let finalBlock1 = value(blockInfoByHeight((lotteryFinalHeight + 1)))
118125 let prizeRandomRaw = toBigInt(sha256((((base58'2WWKxchwx7zBB' + toBytes(prizeId)) + value(finalBlock0.vrf)) + value(finalBlock1.vrf))))
119126 let prizeRandom = if ((toBigInt(0) > prizeRandomRaw))
120127 then -(prizeRandomRaw)
121128 else prizeRandomRaw
122129 [StringEntry(_lotteryPrizeRandom, toString(prizeRandom))]
123130 }
124131 }
125132 }
126133
127134
128135
129136 @Callable(i)
130137 func finalaizePrizeWinner (lotteryName,prizeId,winnerAdr) = if ((i.caller != this))
131138 then throw("Admin only")
132139 else {
133140 let _lotteryPrizeWinner = keyLotteryPrizeWinner(lotteryName, prizeId)
134141 if (stringKeyExists(_lotteryPrizeWinner))
135142 then throw("The prize winner has already been finalaized")
136143 else {
137144 let _lotteryAdrStaked = keyLotteryAdrStaked(lotteryName, winnerAdr)
138145 let lotteryAdrStaked = getIntegerOrElse(_lotteryAdrStaked, 0)
139146 let _lotteryAdrLocked = keyLotteryAdrLocked(lotteryName, winnerAdr)
140147 let lotteryAdrLocked = getIntegerOrElse(_lotteryAdrLocked, 0)
141148 [IntegerEntry(_lotteryAdrStaked, 0), IntegerEntry(_lotteryAdrLocked, (lotteryAdrLocked + lotteryAdrStaked)), StringEntry(_lotteryPrizeWinner, winnerAdr)]
142149 }
143150 }
144151
145152
146153 @Verifier(tx)
147154 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
148155

github/deemru/w8io/169f3d6 
416.97 ms