tx · AcJUmqbKU5rdASQSatyKku8N5Me3dqsoRUW8PnRCAgSz

3P7jrtZsbrDVZFcF8AgmpJ8qQxRAzxCNsit:  -0.00700000 Waves

2023.09.12 20:05 [3818211] smart account 3P7jrtZsbrDVZFcF8AgmpJ8qQxRAzxCNsit > SELF 0.00000000 Waves

{ "type": 13, "id": "AcJUmqbKU5rdASQSatyKku8N5Me3dqsoRUW8PnRCAgSz", "fee": 700000, "feeAssetId": null, "timestamp": 1694538364572, "version": 1, "sender": "3P7jrtZsbrDVZFcF8AgmpJ8qQxRAzxCNsit", "senderPublicKey": "7jQAY4oPmY68S5ehfbKJcpYKYoUcTTRtQYvHWmCjp8kD", "proofs": [ "LGPyKiSmfFiyEUJQUgcshdJBqXCc69tKqbXksHQMcqQ2rQK7R3NQqhpcfhLwwNpqxZCcE4YeqnPjSGaYkDhwJsY" ], "script": "base64:BgIYCAISBAoCCAESAwoBARIAEgASABIDCgEIHwASY29uZmlnQWRkcmVzc1N0b3JlAg1jb25maWdBZGRyZXNzAA1jb25maWdBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFEmNvbmZpZ0FkZHJlc3NTdG9yZQIgdm90aW5nIHJld2FyZHM6IG5vIGNvbmZpZ0FkZHJlc3MCFmludmFsaWQgY29uZmlnIGFkZHJlc3MAD3N0YWtpbmdDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhBjb250cmFjdF9zdGFraW5nAhNubyBzdGFraW5nX2NvbnRyYWN0AhhpbnZhbGlkIHN0YWtpbmcgY29udHJhY3QADm1pbnRlckNvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCD2NvbnRyYWN0X21pbnRlcgISbm8gY29udHJhY3RfbWludGVyAhdpbnZhbGlkIG1pbnRlciBjb250cmFjdAAKcHdyQXNzZXRJZAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIMcG93ZXJBc3NldElkAhZwd3IgYXNzZXQgaWQgbm90IGZvdW5kAQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlARB3cml0ZUNvbnN0U3RyaW5nAgNrZXkFdmFsdWUDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFA2tleQkBC1N0cmluZ0VudHJ5AgUDa2V5BQV2YWx1ZQkAAgEJAKwCAgIVYWxyZWFkeSBpbml0aWFsaXplZDogBQNrZXkBDXdyaXRlQ29uc3RJbnQCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwUDa2V5CQEMSW50ZWdlckVudHJ5AgUDa2V5BQV2YWx1ZQkAAgEJAKwCAgIQYWxyZWFkeSBleGlzdHM6IAUDa2V5AQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEJb3BBbGxvd2VkAQJvcAQBYQkA/AcEBQ1jb25maWdBZGRyZXNzAglvcEFsbG93ZWQJAMwIAgUCb3AFA25pbAUDbmlsAwkAAAIFAWEFAWEGCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAZIRUlHSFQFBmhlaWdodAAPdm90aW5nRW5kc1N0b3JlAgt2b3RpbmdfZW5kcwAKZXBvY2hTdG9yZQIFZXBvY2gABWVwb2NoCQELdmFsdWVPckVsc2UCCQCfCAEFCmVwb2NoU3RvcmUAAAENZXBvY2hBcHJTdG9yZQEBZQkArAICCQCsAgICBmVwb2NoXwkApAMBBQFlAgRfYXByAQ9lcG9jaFBvd2VyU3RvcmUBAWUJAKwCAgkArAICAgZlcG9jaF8JAKQDAQUBZQIGX3Bvd2VyARBlcG9jaEhlaWdodFN0b3JlAQFlCQCsAgIJAKwCAgIGZXBvY2hfCQCkAwEFAWUCB19oZWlnaHQADmVwb2NoTWluQmxvY2tzCQELdmFsdWVPckVsc2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAhFfZXBvY2hfbWluX2Jsb2NrcwkAaAIAoAsADgAQdm90aW5nUmV3YXJkc0FwcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIJAKUIAQUEdGhpcwITX3ZvdGluZ19yZXdhcmRzX2FwcgC5AQAHQXByQmFzZQDoBwAFUkJhc2UAgICE/qbe4READWJsb2Nrc1BlclllYXIJAGgCCQBoAgDtAgAYADwBD3RvdGFsVm90ZXNTdG9yZQEBZQkArAICCQCsAgICBmVwb2NoXwkApAMBBQFlAgxfdG90YWxfdm90ZXMBDnVzZXJWb3Rlc1N0b3JlAgFlBHVzZXIJAKwCAgkArAICCQCsAgICBmVwb2NoXwkApAMBBQFlAgxfdXNlcl92b3Rlc18FBHVzZXIBFW5leHRDbGFpbWVkRXBvY2hTdG9yZQEEdXNlcgkArAICAhNuZXh0X2NsYWltZWRfZXBvY2hfBQR1c2VyARB1c2VyQ2xhaW1lZFN0b3JlAQR1c2VyCQCsAgICCGNsYWltZWRfBQR1c2VyARB0b3RhbFBvd2VyU3Rha2VkAAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCnRvdGFsUG93ZXIFA25pbAUDbmlsAQxlcG9jaFJld2FyZHMDBHVzZXIBZQ9uZXh0RXBvY2hIZWlnaHQEC2Vwb2NoSGVpZ2h0CQCfCAEJARBlcG9jaEhlaWdodFN0b3JlAQUBZQMJAQEhAQkBCWlzRGVmaW5lZAEFC2Vwb2NoSGVpZ2h0AAAEBXRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEJAQ90b3RhbFZvdGVzU3RvcmUBBQFlAAADCQAAAgUFdG90YWwAAAAABAl1c2VyVm90ZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDnVzZXJWb3Rlc1N0b3JlAgUBZQUEdXNlcgAABAlSVXNlclBhcnQJAGsDBQl1c2VyVm90ZXMFBVJCYXNlBQV0b3RhbAQGYmxvY2tzCQBlAgUPbmV4dEVwb2NoSGVpZ2h0CQEFdmFsdWUBBQtlcG9jaEhlaWdodAMJAAACBQZibG9ja3MAAAAABANhcHIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ1lcG9jaEFwclN0b3JlAQUBZQQFcG93ZXIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ9lcG9jaFBvd2VyU3RvcmUBBQFlBAx0b3RhbFJld2FyZHMJAGsDBQVwb3dlcgkAaAIFBmJsb2NrcwUDYXByCQBoAgUHQXByQmFzZQUNYmxvY2tzUGVyWWVhcgkAawMFDHRvdGFsUmV3YXJkcwUJUlVzZXJQYXJ0BQVSQmFzZQEJY2xhaW1hYmxlAQR1c2VyCgEEZm9sZAIDYWNjA25hXwQLJHQwMzM4OTM0MDcFA2FjYwQBZQgFCyR0MDMzODkzNDA3Al8xBANzdW0IBQskdDAzMzg5MzQwNwJfMgQLZXBvY2hIZWlnaHQJAJ8IAQkBEGVwb2NoSGVpZ2h0U3RvcmUBBQFlAwkBASEBCQEJaXNEZWZpbmVkAQULZXBvY2hIZWlnaHQFA2FjYwQJbmV4dEVwb2NoCQBkAgUBZQABBA9uZXh0RXBvY2hIZWlnaHQJAJ8IAQkBEGVwb2NoSGVpZ2h0U3RvcmUBBQluZXh0RXBvY2gDCQEBIQEJAQlpc0RlZmluZWQBBQ9uZXh0RXBvY2hIZWlnaHQFA2FjYwkAlAoCBQluZXh0RXBvY2gJAGQCBQNzdW0JAQxlcG9jaFJld2FyZHMDBQR1c2VyBQFlCQEFdmFsdWUBBQ9uZXh0RXBvY2hIZWlnaHQEBmxpc3QzMAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUCQDMCAIAFQkAzAgCABYJAMwIAgAXCQDMCAIAGAkAzAgCABkJAMwIAgAaCQDMCAIAGwkAzAgCABwJAMwIAgAdCQDMCAIAHgUDbmlsCgACJGwFBmxpc3QzMAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEVbmV4dENsYWltZWRFcG9jaFN0b3JlAQUEdXNlcgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAQphZHZpc2VVc2VyAQdhZGRyZXNzBAskdDA0MDEyNDA2MAkBCWNsYWltYWJsZQEFB2FkZHJlc3MECW5leHRFcG9jaAgFCyR0MDQwMTI0MDYwAl8xBApjbGFpbWFibGUxCAULJHQwNDAxMjQwNjACXzIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIIaGVpZ2h0OiAJAKQDAQUGSEVJR0hUAg0sIGNsYWltYWJsZTogCQCkAwEFCmNsYWltYWJsZTECFywgY2xhaW1hYmxlX3RpbGxfZXBvY2g6CQCkAwEFCW5leHRFcG9jaAIRLCBjbGFpbWFibGVfdGlsbDoJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEQZXBvY2hIZWlnaHRTdG9yZQEFCW5leHRFcG9jaAD///////////8BAhcsIG5leHRfY2xhaW1hYmxlX2Vwb2NoOgkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEJARVuZXh0Q2xhaW1lZEVwb2NoU3RvcmUBBQdhZGRyZXNzAAACCywgY2xhaW1lZDogCQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEHVzZXJDbGFpbWVkU3RvcmUBBQdhZGRyZXNzAAACCywgcGVuZGluZzogCQCkAwEJAQxlcG9jaFJld2FyZHMDBQdhZGRyZXNzBQVlcG9jaAUGSEVJR0hUBgFpAQljb3VudFZvdGUCBHVzZXIFdm90ZXMJAMwIAgkBCGNoYW5nZUJ5AgkBD3RvdGFsVm90ZXNTdG9yZQEFBWVwb2NoBQV2b3RlcwkAzAgCCQEIY2hhbmdlQnkCCQEOdXNlclZvdGVzU3RvcmUCBQVlcG9jaAUEdXNlcgUFdm90ZXMFA25pbAFpAQp2b3RpbmdFbmRzAQFoAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPdm90aW5nRW5kc1N0b3JlAAAFAWgFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUPdm90aW5nRW5kc1N0b3JlBQFoBQNuaWwBaQEMaW5pdGlhbEVwb2NoAAkAzAgCCQENd3JpdGVDb25zdEludAIFCmVwb2NoU3RvcmUAAAkAzAgCCQENd3JpdGVDb25zdEludAIJARBlcG9jaEhlaWdodFN0b3JlAQAABQZIRUlHSFQJAMwIAgkBDXdyaXRlQ29uc3RJbnQCCQENZXBvY2hBcHJTdG9yZQEAAAUQdm90aW5nUmV3YXJkc0FwcgkAzAgCCQENd3JpdGVDb25zdEludAIJAQ9lcG9jaFBvd2VyU3RvcmUBAAAJARB0b3RhbFBvd2VyU3Rha2VkAAUDbmlsAWkBCW5leHRFcG9jaAAEBmNoZWNrcwkBCW9wQWxsb3dlZAECGXZvdGluZ19yZXdhcmRzX25leHRfZXBvY2gDCQAAAgUGY2hlY2tzBQZjaGVja3MDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ92b3RpbmdFbmRzU3RvcmUAAAUGSEVJR0hUCQACAQIbdm90aW5nIGlzIGFjdGl2ZS4gdHJ5IGxhdGVyAwkAZgIJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEJARBlcG9jaEhlaWdodFN0b3JlAQUFZXBvY2gAAAUOZXBvY2hNaW5CbG9ja3MFBkhFSUdIVAkAAgECCXRvbyBlYXJseQQIbmV3RXBvY2gJAGQCBQVlcG9jaAABCQDMCAIJAQhjaGFuZ2VCeQIJAQ90b3RhbFZvdGVzU3RvcmUBBQVlcG9jaAAACQDMCAIJAQh3cml0ZUludAIFCmVwb2NoU3RvcmUFCG5ld0Vwb2NoCQDMCAIJAQ13cml0ZUNvbnN0SW50AgkBEGVwb2NoSGVpZ2h0U3RvcmUBBQhuZXdFcG9jaAUGSEVJR0hUCQDMCAIJAQ13cml0ZUNvbnN0SW50AgkBDWVwb2NoQXByU3RvcmUBBQhuZXdFcG9jaAUQdm90aW5nUmV3YXJkc0FwcgkAzAgCCQENd3JpdGVDb25zdEludAIJAQ9lcG9jaFBvd2VyU3RvcmUBBQhuZXdFcG9jaAkBEHRvdGFsUG93ZXJTdGFrZWQABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFY2xhaW0ABAZjaGVja3MJAQlvcEFsbG93ZWQBAhR2b3RpbmdfcmV3YXJkc19jbGFpbQMJAAACBQZjaGVja3MFBmNoZWNrcwQEdXNlcgkApQgBCAUBaQZjYWxsZXIECyR0MDU5MDE1OTUxCQEJY2xhaW1hYmxlAQUEdXNlcgQQbmV4dENsYWltZWRFcG9jaAgFCyR0MDU5MDE1OTUxAl8xBAdyZXdhcmRzCAULJHQwNTkwMTU5NTECXzIEAW0JAPwHBAUObWludGVyQ29udHJhY3QCBG1pbnQJAMwIAgUHcmV3YXJkcwUDbmlsBQNuaWwDCQAAAgUBbQUBbQQBcwkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCHN0YWtlRm9yCQDMCAIFBHVzZXIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcHdyQXNzZXRJZAUHcmV3YXJkcwUDbmlsAwkAAAIFAXMFAXMJAMwIAgkBCHdyaXRlSW50AgkBFW5leHRDbGFpbWVkRXBvY2hTdG9yZQEFBHVzZXIFEG5leHRDbGFpbWVkRXBvY2gJAMwIAgkBCGNoYW5nZUJ5AgkBEHVzZXJDbGFpbWVkU3RvcmUBBQR1c2VyBQdyZXdhcmRzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEEaW5pdAEGY29uZmlnCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgUSY29uZmlnQWRkcmVzc1N0b3JlBQZjb25maWcFA25pbADg6RFz", "chainId": 87, "height": 3818211, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6i7xMng8mkhb4mekPKXfVms8LGm9mNMASFSiaP7JoUEL Next: Cgrqk5VZWuAYNPoAGUBZYPEmfMW73cpB3N9AqmSfaWKw Diff:
OldNewDifferences
8888
8989
9090 func epochRewards (user,e,nextEpochHeight) = {
91- let total = valueOrElse(getInteger(totalVotesStore(e)), 0)
92- if ((total == 0))
91+ let epochHeight = getInteger(epochHeightStore(e))
92+ if (!(isDefined(epochHeight)))
9393 then 0
9494 else {
95- let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
96- let RUserPart = fraction(userVotes, RBase, total)
97- let epochHeight = getInteger(epochHeightStore(e))
98- if (!(isDefined(epochHeight)))
95+ let total = valueOrElse(getInteger(totalVotesStore(e)), 0)
96+ if ((total == 0))
9997 then 0
10098 else {
99+ let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
100+ let RUserPart = fraction(userVotes, RBase, total)
101101 let blocks = (nextEpochHeight - value(epochHeight))
102102 if ((blocks == 0))
103103 then 0
113113
114114
115115 func claimable (user) = {
116- let nextClaimedEpoch = valueOrElse(getInteger(nextClaimedEpochStore(user)), 0)
117116 func fold (acc,na_) = {
118- let $t034743492 = acc
119- let e = $t034743492._1
120- let sum = $t034743492._2
121- let total = getInteger(totalVotesStore(e))
122- if (!(isDefined(total)))
117+ let $t033893407 = acc
118+ let e = $t033893407._1
119+ let sum = $t033893407._2
120+ let epochHeight = getInteger(epochHeightStore(e))
121+ if (!(isDefined(epochHeight)))
123122 then acc
124123 else {
125- let totalValue = value(total)
126124 let nextEpoch = (e + 1)
127- if ((totalValue == 0))
128- then $Tuple2(nextEpoch, sum)
129- else {
130- let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
131- let RUserPart = fraction(userVotes, RBase, totalValue)
132- let epochHeight = getInteger(epochHeightStore(e))
133- let nextEpochHeight = getInteger(epochHeightStore(nextEpoch))
134- if (if (!(isDefined(epochHeight)))
135- then true
136- else !(isDefined(nextEpochHeight)))
137- then acc
138- else {
139- let blocks = (value(nextEpochHeight) - value(epochHeight))
140- let apr = getIntegerValue(epochAprStore(e))
141- let power = getIntegerValue(epochPowerStore(e))
142- let totalRewards = fraction(power, (blocks * apr), (AprBase * blocksPerYear))
143- let userRewards = fraction(totalRewards, RUserPart, RBase)
144- $Tuple2(nextEpoch, (sum + userRewards))
145- }
146- }
125+ let nextEpochHeight = getInteger(epochHeightStore(nextEpoch))
126+ if (!(isDefined(nextEpochHeight)))
127+ then acc
128+ else $Tuple2(nextEpoch, (sum + epochRewards(user, e, value(nextEpochHeight))))
147129 }
148130 }
149131
150- let $l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
132+ let list30 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
133+ let $l = list30
151134 let $s = size($l)
152- let $acc0 = $Tuple2(0, nextClaimedEpoch)
135+ let $acc0 = $Tuple2(valueOrElse(getInteger(nextClaimedEpochStore(user)), 0), 0)
153136 func $f0_1 ($a,$i) = if (($i >= $s))
154137 then $a
155138 else fold($a, $l[$i])
156139
157140 func $f0_2 ($a,$i) = if (($i >= $s))
158141 then $a
159- else throw("List size exceeds 20")
142+ else throw("List size exceeds 30")
160143
161- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
144+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
162145 }
163146
164147
165148 func adviseUser (address) = {
166- let $t046034652 = claimable(address)
167- let nextEpoch = $t046034652._1
168- let claimable1 = $t046034652._2
169- ((((((((("height: " + toString(HEIGHT)) + ", claimable: ") + toString(claimable1)) + ", claimable_till:") + toString(valueOrElse(getInteger(epochHeightStore(nextEpoch)), -1))) + ", claimed: ") + toString(valueOrElse(getInteger(userClaimedStore(address)), 0))) + ", pending: ") + toString(epochRewards(address, epoch, HEIGHT)))
149+ let $t040124060 = claimable(address)
150+ let nextEpoch = $t040124060._1
151+ let claimable1 = $t040124060._2
152+ ((((((((((((("height: " + toString(HEIGHT)) + ", claimable: ") + toString(claimable1)) + ", claimable_till_epoch:") + toString(nextEpoch)) + ", claimable_till:") + toString(valueOrElse(getInteger(epochHeightStore(nextEpoch)), -1))) + ", next_claimable_epoch:") + toString(valueOrElse(getInteger(nextClaimedEpochStore(address)), 0))) + ", claimed: ") + toString(valueOrElse(getInteger(userClaimedStore(address)), 0))) + ", pending: ") + toString(epochRewards(address, epoch, HEIGHT)))
170153 }
171154
172155
183166
184167
185168 @Callable(i)
186-func initialEpoch () = [writeConstInt(epochStore, 0), writeConstInt(epochHeightStore(0), 3807686), writeConstInt(epochAprStore(0), votingRewardsApr), writeConstInt(epochPowerStore(0), totalPowerStaked())]
169+func initialEpoch () = [writeConstInt(epochStore, 0), writeConstInt(epochHeightStore(0), HEIGHT), writeConstInt(epochAprStore(0), votingRewardsApr), writeConstInt(epochPowerStore(0), totalPowerStaked())]
187170
188171
189172
190173 @Callable(i)
191174 func nextEpoch () = {
192- let checks = opAllowed("voting_rewards_next_epoch_paused")
175+ let checks = opAllowed("voting_rewards_next_epoch")
193176 if ((checks == checks))
194177 then if ((valueOrElse(getInteger(votingEndsStore), 0) > HEIGHT))
195178 then throw("voting is active. try later")
206189
207190 @Callable(i)
208191 func claim () = {
209- let checks = opAllowed("voting_rewards_claim_paused")
192+ let checks = opAllowed("voting_rewards_claim")
210193 if ((checks == checks))
211194 then {
212195 let user = toString(i.caller)
213- let $t063476570 = claimable(user)
214- let newNextClaimedEpoch = $t063476570._1
215- let rewards = $t063476570._2
216-[writeInt(nextClaimedEpochStore(user), newNextClaimedEpoch), changeBy(userClaimedStore(user), rewards)]
196+ let $t059015951 = claimable(user)
197+ let nextClaimedEpoch = $t059015951._1
198+ let rewards = $t059015951._2
199+ let m = invoke(minterContract, "mint", [rewards], nil)
200+ if ((m == m))
201+ then {
202+ let s = invoke(stakingContract, "stakeFor", [user], [AttachedPayment(pwrAssetId, rewards)])
203+ if ((s == s))
204+ then [writeInt(nextClaimedEpochStore(user), nextClaimedEpoch), changeBy(userClaimedStore(user), rewards)]
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
217208 }
218209 else throw("Strict value is not equal to itself.")
219210 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let configAddressStore = "configAddress"
55
66 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "voting rewards: no configAddress")), "invalid config address")
77
88 let stakingContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_staking"), "no staking_contract")), "invalid staking contract")
99
1010 let minterContract = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_minter"), "no contract_minter")), "invalid minter contract")
1111
1212 let pwrAssetId = fromBase58String(valueOrErrorMessage(getString(configAddress, "powerAssetId"), "pwr asset id not found"))
1313
1414 func writeInt (key,value) = if ((0 > value))
1515 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1616 else IntegerEntry(key, value)
1717
1818
1919 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
2020 then StringEntry(key, value)
2121 else throw(("already initialized: " + key))
2222
2323
2424 func writeConstInt (key,value) = if (!(isDefined(getInteger(this, key))))
2525 then IntegerEntry(key, value)
2626 else throw(("already exists: " + key))
2727
2828
2929 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
3030
3131
3232 func asInt (value) = match value {
3333 case int: Int =>
3434 int
3535 case _ =>
3636 throw("wrong type, expected: Int")
3737 }
3838
3939
4040 func opAllowed (op) = {
4141 let a = invoke(configAddress, "opAllowed", [op], nil)
4242 if ((a == a))
4343 then true
4444 else throw("Strict value is not equal to itself.")
4545 }
4646
4747
4848 let HEIGHT = height
4949
5050 let votingEndsStore = "voting_ends"
5151
5252 let epochStore = "epoch"
5353
5454 let epoch = valueOrElse(getInteger(epochStore), 0)
5555
5656 func epochAprStore (e) = (("epoch_" + toString(e)) + "_apr")
5757
5858
5959 func epochPowerStore (e) = (("epoch_" + toString(e)) + "_power")
6060
6161
6262 func epochHeightStore (e) = (("epoch_" + toString(e)) + "_height")
6363
6464
6565 let epochMinBlocks = valueOrElse(getInteger(configAddress, (toString(this) + "_epoch_min_blocks")), (1440 * 14))
6666
6767 let votingRewardsApr = valueOrElse(getInteger(configAddress, (toString(this) + "_voting_rewards_apr")), 185)
6868
6969 let AprBase = 1000
7070
7171 let RBase = 10000000000000000
7272
7373 let blocksPerYear = ((365 * 24) * 60)
7474
7575 func totalVotesStore (e) = (("epoch_" + toString(e)) + "_total_votes")
7676
7777
7878 func userVotesStore (e,user) = ((("epoch_" + toString(e)) + "_user_votes_") + user)
7979
8080
8181 func nextClaimedEpochStore (user) = ("next_claimed_epoch_" + user)
8282
8383
8484 func userClaimedStore (user) = ("claimed_" + user)
8585
8686
8787 func totalPowerStaked () = asInt(invoke(stakingContract, "totalPower", nil, nil))
8888
8989
9090 func epochRewards (user,e,nextEpochHeight) = {
91- let total = valueOrElse(getInteger(totalVotesStore(e)), 0)
92- if ((total == 0))
91+ let epochHeight = getInteger(epochHeightStore(e))
92+ if (!(isDefined(epochHeight)))
9393 then 0
9494 else {
95- let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
96- let RUserPart = fraction(userVotes, RBase, total)
97- let epochHeight = getInteger(epochHeightStore(e))
98- if (!(isDefined(epochHeight)))
95+ let total = valueOrElse(getInteger(totalVotesStore(e)), 0)
96+ if ((total == 0))
9997 then 0
10098 else {
99+ let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
100+ let RUserPart = fraction(userVotes, RBase, total)
101101 let blocks = (nextEpochHeight - value(epochHeight))
102102 if ((blocks == 0))
103103 then 0
104104 else {
105105 let apr = getIntegerValue(epochAprStore(e))
106106 let power = getIntegerValue(epochPowerStore(e))
107107 let totalRewards = fraction(power, (blocks * apr), (AprBase * blocksPerYear))
108108 fraction(totalRewards, RUserPart, RBase)
109109 }
110110 }
111111 }
112112 }
113113
114114
115115 func claimable (user) = {
116- let nextClaimedEpoch = valueOrElse(getInteger(nextClaimedEpochStore(user)), 0)
117116 func fold (acc,na_) = {
118- let $t034743492 = acc
119- let e = $t034743492._1
120- let sum = $t034743492._2
121- let total = getInteger(totalVotesStore(e))
122- if (!(isDefined(total)))
117+ let $t033893407 = acc
118+ let e = $t033893407._1
119+ let sum = $t033893407._2
120+ let epochHeight = getInteger(epochHeightStore(e))
121+ if (!(isDefined(epochHeight)))
123122 then acc
124123 else {
125- let totalValue = value(total)
126124 let nextEpoch = (e + 1)
127- if ((totalValue == 0))
128- then $Tuple2(nextEpoch, sum)
129- else {
130- let userVotes = valueOrElse(getInteger(userVotesStore(e, user)), 0)
131- let RUserPart = fraction(userVotes, RBase, totalValue)
132- let epochHeight = getInteger(epochHeightStore(e))
133- let nextEpochHeight = getInteger(epochHeightStore(nextEpoch))
134- if (if (!(isDefined(epochHeight)))
135- then true
136- else !(isDefined(nextEpochHeight)))
137- then acc
138- else {
139- let blocks = (value(nextEpochHeight) - value(epochHeight))
140- let apr = getIntegerValue(epochAprStore(e))
141- let power = getIntegerValue(epochPowerStore(e))
142- let totalRewards = fraction(power, (blocks * apr), (AprBase * blocksPerYear))
143- let userRewards = fraction(totalRewards, RUserPart, RBase)
144- $Tuple2(nextEpoch, (sum + userRewards))
145- }
146- }
125+ let nextEpochHeight = getInteger(epochHeightStore(nextEpoch))
126+ if (!(isDefined(nextEpochHeight)))
127+ then acc
128+ else $Tuple2(nextEpoch, (sum + epochRewards(user, e, value(nextEpochHeight))))
147129 }
148130 }
149131
150- let $l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
132+ let list30 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
133+ let $l = list30
151134 let $s = size($l)
152- let $acc0 = $Tuple2(0, nextClaimedEpoch)
135+ let $acc0 = $Tuple2(valueOrElse(getInteger(nextClaimedEpochStore(user)), 0), 0)
153136 func $f0_1 ($a,$i) = if (($i >= $s))
154137 then $a
155138 else fold($a, $l[$i])
156139
157140 func $f0_2 ($a,$i) = if (($i >= $s))
158141 then $a
159- else throw("List size exceeds 20")
142+ else throw("List size exceeds 30")
160143
161- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
144+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
162145 }
163146
164147
165148 func adviseUser (address) = {
166- let $t046034652 = claimable(address)
167- let nextEpoch = $t046034652._1
168- let claimable1 = $t046034652._2
169- ((((((((("height: " + toString(HEIGHT)) + ", claimable: ") + toString(claimable1)) + ", claimable_till:") + toString(valueOrElse(getInteger(epochHeightStore(nextEpoch)), -1))) + ", claimed: ") + toString(valueOrElse(getInteger(userClaimedStore(address)), 0))) + ", pending: ") + toString(epochRewards(address, epoch, HEIGHT)))
149+ let $t040124060 = claimable(address)
150+ let nextEpoch = $t040124060._1
151+ let claimable1 = $t040124060._2
152+ ((((((((((((("height: " + toString(HEIGHT)) + ", claimable: ") + toString(claimable1)) + ", claimable_till_epoch:") + toString(nextEpoch)) + ", claimable_till:") + toString(valueOrElse(getInteger(epochHeightStore(nextEpoch)), -1))) + ", next_claimable_epoch:") + toString(valueOrElse(getInteger(nextClaimedEpochStore(address)), 0))) + ", claimed: ") + toString(valueOrElse(getInteger(userClaimedStore(address)), 0))) + ", pending: ") + toString(epochRewards(address, epoch, HEIGHT)))
170153 }
171154
172155
173156 @Callable(i)
174157 func countVote (user,votes) = [changeBy(totalVotesStore(epoch), votes), changeBy(userVotesStore(epoch, user), votes)]
175158
176159
177160
178161 @Callable(i)
179162 func votingEnds (h) = if ((valueOrElse(getInteger(votingEndsStore), 0) > h))
180163 then nil
181164 else [IntegerEntry(votingEndsStore, h)]
182165
183166
184167
185168 @Callable(i)
186-func initialEpoch () = [writeConstInt(epochStore, 0), writeConstInt(epochHeightStore(0), 3807686), writeConstInt(epochAprStore(0), votingRewardsApr), writeConstInt(epochPowerStore(0), totalPowerStaked())]
169+func initialEpoch () = [writeConstInt(epochStore, 0), writeConstInt(epochHeightStore(0), HEIGHT), writeConstInt(epochAprStore(0), votingRewardsApr), writeConstInt(epochPowerStore(0), totalPowerStaked())]
187170
188171
189172
190173 @Callable(i)
191174 func nextEpoch () = {
192- let checks = opAllowed("voting_rewards_next_epoch_paused")
175+ let checks = opAllowed("voting_rewards_next_epoch")
193176 if ((checks == checks))
194177 then if ((valueOrElse(getInteger(votingEndsStore), 0) > HEIGHT))
195178 then throw("voting is active. try later")
196179 else if (((valueOrElse(getInteger(epochHeightStore(epoch)), 0) + epochMinBlocks) > HEIGHT))
197180 then throw("too early")
198181 else {
199182 let newEpoch = (epoch + 1)
200183 [changeBy(totalVotesStore(epoch), 0), writeInt(epochStore, newEpoch), writeConstInt(epochHeightStore(newEpoch), HEIGHT), writeConstInt(epochAprStore(newEpoch), votingRewardsApr), writeConstInt(epochPowerStore(newEpoch), totalPowerStaked())]
201184 }
202185 else throw("Strict value is not equal to itself.")
203186 }
204187
205188
206189
207190 @Callable(i)
208191 func claim () = {
209- let checks = opAllowed("voting_rewards_claim_paused")
192+ let checks = opAllowed("voting_rewards_claim")
210193 if ((checks == checks))
211194 then {
212195 let user = toString(i.caller)
213- let $t063476570 = claimable(user)
214- let newNextClaimedEpoch = $t063476570._1
215- let rewards = $t063476570._2
216-[writeInt(nextClaimedEpochStore(user), newNextClaimedEpoch), changeBy(userClaimedStore(user), rewards)]
196+ let $t059015951 = claimable(user)
197+ let nextClaimedEpoch = $t059015951._1
198+ let rewards = $t059015951._2
199+ let m = invoke(minterContract, "mint", [rewards], nil)
200+ if ((m == m))
201+ then {
202+ let s = invoke(stakingContract, "stakeFor", [user], [AttachedPayment(pwrAssetId, rewards)])
203+ if ((s == s))
204+ then [writeInt(nextClaimedEpochStore(user), nextClaimedEpoch), changeBy(userClaimedStore(user), rewards)]
205+ else throw("Strict value is not equal to itself.")
206+ }
207+ else throw("Strict value is not equal to itself.")
217208 }
218209 else throw("Strict value is not equal to itself.")
219210 }
220211
221212
222213
223214 @Callable(i)
224215 func init (config) = [writeConstString(configAddressStore, config)]
225216
226217

github/deemru/w8io/3ef1775 
45.19 ms