tx · 4paoA8722FBpwWFuqiBCedYDApq6hAfgTtusyWsgSznc

3PHvU5KXYJUAReeActQpS56TCdF8gupEjdR:  -0.01000000 Waves

2022.05.03 14:01 [3100877] smart account 3PHvU5KXYJUAReeActQpS56TCdF8gupEjdR > SELF 0.00000000 Waves

{ "type": 13, "id": "4paoA8722FBpwWFuqiBCedYDApq6hAfgTtusyWsgSznc", "fee": 1000000, "feeAssetId": null, "timestamp": 1651575642926, "version": 1, "sender": "3PHvU5KXYJUAReeActQpS56TCdF8gupEjdR", "senderPublicKey": "EGGmHBK3xqTV6B19vtf2EhLscX4pB3tBXFKRDH5wdTcz", "proofs": [ "45d6djSwUaNvyujcGsq5R45WC6wpDvfRBqRW7rofEaHYq1yXS7io2bBgfqQMnY6TnjhST8nqYPJb6eEV7bvHw22a" ], "script": "base64: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CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAFnVzZXJWaXJ0dWFsVG9rZW5zU3RvcmUAAAABBQAAAAR1c2VyAgAAAAEwAQAAABN1c2VyRGVwb3NpdGVkVG9rZW5zAAAAAQAAAAR1c2VyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABh1c2VyRGVwb3NpdGVkVG9rZW5zU3RvcmUAAAABBQAAAAR1c2VyAAAAAAAAAAAAAQAAABN1c2VyV2l0aGRyYXduVG9rZW5zAAAAAQAAAAR1c2VyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAABh1c2VyV2l0aGRyYXduVG9rZW5zU3RvcmUAAAABBQAAAAR1c2VyAAAAAAAAAAAAAQAAAA91c2VyRW50cnlIZWlnaHQAAAABAAAABHVzZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkBAAAAFHVzZXJFbnRyeUhlaWdodFN0b3JlAAAAAQUAAAAEdXNlcgAAAAAAAAAAAAEAAAAKdXNlckZhY3RvcgAAAAEAAAAEdXNlcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAAPdXNlckZhY3RvclN0b3JlAAAAAQUAAAAEdXNlcgAAAAAAAAAAAQEAAAAKdXNlckdWaXJlcwAAAAEAAAAEdXNlcgkBAAAAB2Zvcm11bGEAAAACCQEAAAABLQAAAAEJAABlAAAAAgUAAAAGSEVJR0hUBQAAAA1pbml0aWFsSGVpZ2h0CQEAAAARdXNlclZpcnR1YWxUb2tlbnMAAAABBQAAAAR1c2VyAQAAABp0b3RhbFZpcnR1YWxEaXZpZGVuZHNTdG9yZQAAAAEAAAADYWlkCQABLAAAAAIFAAAAA2FpZAIAAAAWX3RvdGFsVmlydHVhbERpdmlkZW5kcwEAAAAXdG90YWxSZWFsRGl2aWRlbmRzU3RvcmUAAAABAAAAA2FpZAkAASwAAAACBQAAAANhaWQCAAAAE190b3RhbFJlYWxEaXZpZGVuZHMBAAAAHnRvdGFsUmVhbERpdmlkZW5kc0NsYWltZWRTdG9yZQAAAAEAAAADYWlkCQABLAAAAAIFAAAAA2FpZAIAAAAaX3RvdGFsUmVhbERpdmlkZW5kc0NsYWltZWQAAAAAF3RvdGFsVmlydHVhbFRva2Vuc1N0b3JlAgAAABJ0b3RhbFZpcnR1YWxUb2tlbnMAAAAAGXRvdGFsRGVwb3NpdGVkVG9rZW5zU3RvcmUCAAAAFHRvdGFsRGVwb3NpdGVkVG9rZW5zAQAAABt0b3RhbERlcG9zaXRlZEJ5RmFjdG9yU3RvcmUAAAABAAAABmZhY3RvcgkAASwAAAACAgAAABR0b3RhbERlcG9zaXRlZFRva2VucwkAAaQAAAABCQEAAAALZmFjdG9yQ2hlY2sAAAABBQAAAAZmYWN0b3IBAAAAFnRvdGFsRGVwb3NpdGVkQnlGYWN0b3IAAAABAAAABmZhY3RvcgkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAAbdG90YWxEZXBvc2l0ZWRCeUZhY3RvclN0b3JlAAAAAQUAAAAGZmFjdG9yAAAAAAAAAAAAAQAAABV0b3RhbFZpcnR1YWxEaXZpZGVuZHMAAAABAAAAA2FpZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAadG90YWxWaXJ0dWFsRGl2aWRlbmRzU3RvcmUAAAABBQAAAANhaWQAAAAAAAAAAAABAAAAEnRvdGFsUmVhbERpdmlkZW5kcwAAAAEAAAADYWlkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABd0b3RhbFJlYWxEaXZpZGVuZHNTdG9yZQAAAAEFAAAAA2FpZAAAAAAAAAAAAAAAAAASdG90YWxWaXJ0dWFsVG9rZW5zCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAXdG90YWxWaXJ0dWFsVG9rZW5zU3RvcmUCAAAAATAAAAAAFHRvdGFsRGVwb3NpdGVkVG9rZW5zCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAGXRvdGFsRGVwb3NpdGVkVG9rZW5zU3RvcmUAAAAAAAAAAAABAAAADHVzZXJPZmZDbGlmZgAAAAEAAAAEdXNlcgQAAAALZW50cnlIZWlnaHQJAQAAAA91c2VyRW50cnlIZWlnaHQAAAABBQAAAAR1c2VyBAAAAAZmYWN0b3IJAQAAAAp1c2VyRmFjdG9yAAAAAQUAAAAEdXNlcgMJAAAAAAAAAgUAAAAGZmFjdG9yAAAAAAAAAAABCQAAZgAAAAIFAAAABkhFSUdIVAkAAGQAAAACBQAAAAtlbnRyeUhlaWdodAkAAGgAAAACAAAAAAAAAAAEBQAAAAhoYWxmTGlmZQMJAAAAAAAAAgUAAAAGZmFjdG9yAAAAAAAAAAACCQAAZgAAAAIFAAAABkhFSUdIVAkAAGQAAAACBQAAAAtlbnRyeUhlaWdodAkAAGgAAAACAAAAAAAAAAAFBQAAAAhoYWxmTGlmZQMJAAAAAAAAAgUAAAAGZmFjdG9yAAAAAAAAAAAECQAAZgAAAAIFAAAABkhFSUdIVAkAAGQAAAACBQAAAAtlbnRyeUhlaWdodAkAAGgAAAACAAAAAAAAAAAGBQAAAAhoYWxmTGlmZQkAAAIAAAABCQABLAAAAAICAAAAC2JhZCBmYWN0b3I6CQABpAAAAAEFAAAABmZhY3RvcgEAAAANdXNlclZpcmVzRGF0YQAAAAEAAAAEdXNlcgQAAAAJZGVwb3NpdGVkCQEAAAATdXNlckRlcG9zaXRlZFRva2VucwAAAAEFAAAABHVzZXIEAAAAAmdWCQEAAAAKdXNlckdWaXJlcwAAAAEFAAAABHVzZXIEAAAADnN1cHBvc2VkTG9ja2VkCQABlwAAAAEJAARMAAAAAgUAAAAJZGVwb3NpdGVkCQAETAAAAAIFAAAAAmdWBQAAAANuaWwEAAAABmxvY2tlZAMJAQAAAAx1c2VyT2ZmQ2xpZmYAAAABBQAAAAR1c2VyAAAAAAAAAAAABQAAAA5zdXBwb3NlZExvY2tlZAQAAAAIdW5sb2NrZWQJAABlAAAAAgUAAAAJZGVwb3NpdGVkBQAAAAZsb2NrZWQEAAAACXdpdGhkcmF3bgkBAAAAE3VzZXJXaXRoZHJhd25Ub2tlbnMAAAABBQAAAAR1c2VyBAAAAAx3aXRoZHJhd2FibGUJAABlAAAAAgUAAAAIdW5sb2NrZWQFAAAACXdpdGhkcmF3bgQAAAAKaW5Qcm90b2NvbAkAAGQAAAACBQAAAAZsb2NrZWQFAAAADHdpdGhkcmF3YWJsZQkABRgAAAAGBQAAAAlkZXBvc2l0ZWQFAAAABmxvY2tlZAUAAAAMd2l0aGRyYXdhYmxlBQAAAAl3aXRoZHJhd24FAAAACmluUHJvdG9jb2wFAAAAAmdWAQAAAA51c2VyUHJvZml0RGF0YQAAAAEAAAAEdXNlcgQAAAALdG90YWxUb2tlbnMJAAGQAAAAAQUAAAAVZGl2aWRlbmRhYmxlVG9rZW5zQXJyBAAAABl0b3RhbERpdmlkZW5kYWJsZVJlc2VydmVzCQABkAAAAAEFAAAAFGRpdmlkZW5kYWJsZVJlc2VydmVzAwkBAAAAAiE9AAAAAgUAAAALdG90YWxUb2tlbnMFAAAAGXRvdGFsRGl2aWRlbmRhYmxlUmVzZXJ2ZXMJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAoaW5jb25zaXN0ZW50IGNvbmZpZ3VyYXRpb246IHRvdGFsVG9rZW5zPQkAAaQAAAABBQAAAAt0b3RhbFRva2VucwIAAAAeLCB0b3RhbERpdmlkZW5kYWJsZVJlc2VydmVzID0gCQABpAAAAAEFAAAAGXRvdGFsRGl2aWRlbmRhYmxlUmVzZXJ2ZXMEAAAADXZpcnR1YWxUb2tlbnMJAQAAABF1c2VyVmlydHVhbFRva2VucwAAAAEFAAAABHVzZXIEAAAACXRva2VuRGF0YQoBAAAABGZvbGQAAAACAAAABnRvdGFscwAAAAVpbmRleAMJAABnAAAAAgUAAAAFaW5kZXgFAAAAC3RvdGFsVG9rZW5zBQAAAAZ0b3RhbHMEAAAAA2FpZAkAAZEAAAACBQAAABVkaXZpZGVuZGFibGVUb2tlbnNBcnIFAAAABWluZGV4BAAAAAskdDA4NDg5ODc1NwQAAAABcgkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEJAAGRAAAAAgUAAAAUZGl2aWRlbmRhYmxlUmVzZXJ2ZXMFAAAABWluZGV4AgAAACNiYWQgcmVzZXJ2ZSBpbiBkaXZpZGVuZGFibGVSZXNlcnZlcwkBAAAAC2FzSW50U3RySW50AAAAAQkAA/wAAAAEBQAAAAFyAgAAABJnZXRSZXNlcnZlRGl2c0luZm8FAAAAA25pbAUAAAADbmlsBAAAAAtyZXNlcnZlRGl2cwgFAAAACyR0MDg0ODk4NzU3AAAAAl8xBAAAAA5yZXNlcnZlQXNzZXRJZAgFAAAACyR0MDg0ODk4NzU3AAAAAl8yBAAAAAxub25DbGFpbWFibGUIBQAAAAskdDA4NDg5ODc1NwAAAAJfMwMJAQAAAAIhPQAAAAIFAAAADnJlc2VydmVBc3NldElkBQAAAANhaWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACtpbmNvbnNpc3RlbnQgY29uZmlndXJhdGlvbjogcmVzZXJ2ZUFzc2V0SWQ9BQAAAA5yZXNlcnZlQXNzZXRJZAIAAAAGLCBhaWQ9BQAAAANhaWQCAAAAFSwgZGl2aWRlbmRhYmxlVG9rZW5zOgUAAAASZGl2aWRlbmRhYmxlVG9rZW5zAgAAABcsIGRpdmlkZW5kYWJsZVJlc2VydmVzOgUAAAAXZGl2aWRlbmRhYmxlUmVzZXJ2ZXNTdHIEAAAAD3VzZXJWaXJ0dWFsRGl2cwMJAAAAAAAAAgUAAAASdG90YWxWaXJ0dWFsVG9rZW5zAAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMJAABkAAAAAgkBAAAAFXRvdGFsVmlydHVhbERpdmlkZW5kcwAAAAEFAAAAA2FpZAUAAAALcmVzZXJ2ZURpdnMFAAAADXZpcnR1YWxUb2tlbnMFAAAAEnRvdGFsVmlydHVhbFRva2VucwQAAAADYWRqCQEAAAAQdXNlckRpdmlkZW5kc0FkagAAAAIFAAAABHVzZXIFAAAAA2FpZAQAAAAIdXNlckRpdnMJAABlAAAAAgUAAAAPdXNlclZpcnR1YWxEaXZzBQAAAANhZGoEAAAAFG5vbkNsYWltYWJsZVVzZXJEaXZzAwkAAAAAAAACBQAAABJ0b3RhbFZpcnR1YWxUb2tlbnMAAAAAAAAAAAAAAAAAAAAAAAAJAABrAAAAAwUAAAAMbm9uQ2xhaW1hYmxlBQAAAA12aXJ0dWFsVG9rZW5zBQAAABJ0b3RhbFZpcnR1YWxUb2tlbnMEAAAAC3VzZXJDbGFpbWVkCQEAAAAUdXNlckRpdmlkZW5kc0NsYWltZWQAAAACBQAAAAR1c2VyBQAAAANhaWQEAAAACWNsYWltYWJsZQkAAZYAAAABCQAETAAAAAIAAAAAAAAAAAAJAARMAAAAAgkAAGUAAAACBQAAAAh1c2VyRGl2cwUAAAALdXNlckNsYWltZWQFAAAAA25pbAMJAABmAAAAAgAAAAAAAAAAAAUAAAAJY2xhaW1hYmxlCQAAAgAAAAEJAAEsAAAAAgIAAAAPY2xhaW1hYmxlIDwgMDogCQABpAAAAAEFAAAACWNsYWltYWJsZQkABE4AAAACBQAAAAZ0b3RhbHMJAARMAAAAAgkABRYAAAAEBQAAAANhaWQFAAAAC3VzZXJDbGFpbWVkBQAAAAljbGFpbWFibGUFAAAAFG5vbkNsYWltYWJsZVVzZXJEaXZzBQAAAANuaWwKAAAAAAIkbAkABEwAAAACAAAAAAAAAAAACQAETAAAAAIAAAAAAAAAAAEJAARMAAAAAgAAAAAAAAAAAgkABEwAAAACAAAAAAAAAAADCQAETAAAAAIAAAAAAAAAAAQJAARMAAAAAgAAAAAAAAAABQkABEwAAAACAAAAAAAAAAAGBQAAAANuaWwKAAAAAAIkcwkAAZAAAAABBQAAAAIkbAoAAAAABSRhY2MwBQAAAANuaWwKAQAAAAUkZjBfMQAAAAIAAAACJGEAAAACJGkDCQAAZwAAAAIFAAAAAiRpBQAAAAIkcwUAAAACJGEJAQAAAARmb2xkAAAAAgUAAAACJGEJAAGRAAAAAgUAAAACJGwFAAAAAiRpCgEAAAAFJGYwXzIAAAACAAAAAiRhAAAAAiRpAwkAAGcAAAACBQAAAAIkaQUAAAACJHMFAAAAAiRhCQAAAgAAAAECAAAAE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQAAAAUkZjBfMgAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIJAQAAAAUkZjBfMQAAAAIFAAAABSRhY2MwAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAACAAAAAAAAAAADAAAAAAAAAAAEAAAAAAAAAAAFAAAAAAAAAAAGAAAAAAAAAAAHCQAFFAAAAAIFAAAADXZpcnR1YWxUb2tlbnMFAAAACXRva2VuRGF0YQEAAAAZY2xhaW1Gcm9tUmVzZXJ2ZXNJbnRlcm5hbAAAAAAEAAAADGFzc2V0SWRTdG9yZQIAAAAHYXNzZXRJZAoBAAAABGZvbGQAAAACAAAABm91dHB1dAAAAAdyZXNlcnZlBAAAAA5yZXNlcnZlQWRkcmVzcwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEJgAAAAEFAAAAB3Jlc2VydmUCAAAAGmFkZGVyOiBiYWQgcmVzZXJ2ZSBhZGRyZXNzBAAAAA1hc3NldElkU3RyaW5nCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAOcmVzZXJ2ZUFkZHJlc3MFAAAADGFzc2V0SWRTdG9yZQIAAAAVbm8gYXNzZXRJZCBpbiByZXNlcnZlBAAAAAdhY3Rpb25zAwkBAAAAASEAAAABCQEAAAAIY29udGFpbnMAAAACBQAAABJkaXZpZGVuZGFibGVUb2tlbnMFAAAADWFzc2V0SWRTdHJpbmcJAAACAAAAAQIAAABeaW5jb25zaXN0ZW50IGNvbmZpZ3VyYXRpb246IGRpdmlkZW5kYWJsZVJlc2VydmUncyBhc3NldCBpZCBpcyBub3Qgc3RvcmVkIGluIGRpdmlkZW5kYWJsZVRva2VucwQAAAAGYW1vdW50CQEAAAAFYXNJbnQAAAABCQAD/AAAAAQFAAAADnJlc2VydmVBZGRyZXNzAgAAABN3aXRoZHJhd0Zyb21SZXNlcnZlCQAETAAAAAIA//////////8FAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAZhbW91bnQFAAAABmFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAGYW1vdW50CQAAAgAAAAECAAAACmJhZCBhbW91bnQDCQAAAAAAAAIFAAAABmFtb3VudAAAAAAAAAAAAAUAAAADbmlsCQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAABp0b3RhbFZpcnR1YWxEaXZpZGVuZHNTdG9yZQAAAAEFAAAADWFzc2V0SWRTdHJpbmcFAAAABmFtb3VudAkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACCQEAAAAXdG90YWxSZWFsRGl2aWRlbmRzU3RvcmUAAAABBQAAAA1hc3NldElkU3RyaW5nBQAAAAZhbW91bnQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJp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AAACZ1YIBQAAAA0kdDAxMzEwMzEzMTg5AAAAAl82BAAAABBvbGRWaXJ0dWFsVG9rZW5zCQEAAAARdXNlclZpcnR1YWxUb2tlbnMAAAABBQAAAAR1c2VyBAAAABBuZXdWaXJ0dWFsVG9rZW5zCQEAAAAHZm9ybXVsYQAAAAIJAABlAAAAAgUAAAAGSEVJR0hUBQAAAA1pbml0aWFsSGVpZ2h0CQAAaAAAAAIFAAAABmZhY3RvcgkAAGQAAAACBQAAAAZ0b2tlbnMFAAAACmluUHJvdG9jb2wEAAAABGRpZmYJAABlAAAAAgUAAAAQbmV3VmlydHVhbFRva2VucwUAAAAQb2xkVmlydHVhbFRva2VucwQAAAAEYmFzZQkABEwAAAACCQEAAAAIY2hhbmdlQnkAAAACBQAAABl0b3RhbERlcG9zaXRlZFRva2Vuc1N0b3JlBQAAAAZ0b2tlbnMJAARMAAAAAgkBAAAAC2NoYW5nZUJ5U3RyAAAAAgUAAAAXdG90YWxWaXJ0dWFsVG9rZW5zU3RvcmUFAAAABGRpZmYJAARMAAAAAgkBAAAAC2NoYW5nZUJ5U3RyAAAAAgkBAAAAFnVzZXJWaXJ0dWFsVG9rZW5zU3RvcmUAAAABBQAAAAR1c2VyBQAAAARkaWZmCQAETAAAAAIJAQAAAAhjaGFuZ2VCeQAAAAIJAQAAABh1c2VyRGVwb3NpdGVkVG9rZW5zU3RvcmUAAAABBQAAAAR1c2VyBQAAAAZ0b2tlbnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABR1c2VyRW50cnlIZWlnaHRTdG9yZQAAAAEFAAAABHVzZXIFAAAABkhFSUdIVAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD3VzZXJGYWN0b3JTdG9yZQAAAAEFAAAABHVzZXIFAAAABmZhY3RvcgUAAAADbmlsBAAAAAl0b2tlbkRhdGEKAQAAAARmb2xkAAAAAgAAAAV0b3RhbAAAAANhaWQEAAAAA2FkagMJAAAAAAAAAgUAAAASdG90YWxWaXJ0dWFsVG9rZW5zAAAAAAAAAAAAAAAAAAAAAAAACQAAawAAAAMFAAAABGRpZmYJAQAAABV0b3RhbFZpcnR1YWxEaXZpZGVuZHMAAAABBQAAAANhaWQFAAAA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", "chainId": 87, "height": 3100877, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Bs66x4ZsLxWDPpjGyZ22RLhyDuVc4kEiJkmF1e5Gswam Next: AKXBhjmzRKQcF5pPvNhnS5MyUnxSQ5LkFkuLCkfmahgA Diff:
OldNewDifferences
114114
115115 let viresStaker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_staker"), "no vires_staker in config")), "invalid vires_staker address")
116116
117-let main = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main")), "invalid main")
117+let main = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(configAddress, "main"), "no main"), "|")[0]), "invalid main")
118118
119-func mainOnly (i) = if ((i.caller == main))
119+func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
120120 then true
121- else throw("invalid user: only main can do")
121+ else throw("only main can do")
122122
123123
124124 let dividendableTokens = valueOrElse(getString(configAddress, "dividendableTokens"), "")
265265 then totals
266266 else {
267267 let aid = dividendableTokensArr[index]
268- let $t084508718 = {
268+ let $t084898757 = {
269269 let r = valueOrErrorMessage(addressFromString(dividendableReserves[index]), "bad reserve in dividendableReserves")
270270 asIntStrInt(invoke(r, "getReserveDivsInfo", nil, nil))
271271 }
272- let reserveDivs = $t084508718._1
273- let reserveAssetId = $t084508718._2
274- let nonClaimable = $t084508718._3
272+ let reserveDivs = $t084898757._1
273+ let reserveAssetId = $t084898757._2
274+ let nonClaimable = $t084898757._3
275275 if ((reserveAssetId != aid))
276276 then throw(((((((("inconsistent configuration: reserveAssetId=" + reserveAssetId) + ", aid=") + aid) + ", dividendableTokens:") + dividendableTokens) + ", dividendableReserves:") + dividendableReservesStr))
277277 else {
345345
346346
347347 func adviseUser (user) = {
348- let $t01082110911 = userViresData(user)
349- let deposited = $t01082110911._1
350- let locked = $t01082110911._2
351- let withdrawable = $t01082110911._3
352- let withdrawn = $t01082110911._4
353- let inProtocol = $t01082110911._5
354- let gVires = $t01082110911._6
355- let $t01091810971 = userProfitData(user)
356- let virtualTokens = $t01091810971._1
357- let tokenData = $t01091810971._2
348+ let $t01086010950 = userViresData(user)
349+ let deposited = $t01086010950._1
350+ let locked = $t01086010950._2
351+ let withdrawable = $t01086010950._3
352+ let withdrawn = $t01086010950._4
353+ let inProtocol = $t01086010950._5
354+ let gVires = $t01086010950._6
355+ let $t01095711010 = userProfitData(user)
356+ let virtualTokens = $t01095711010._1
357+ let tokenData = $t01095711010._2
358358 let power = if ((inProtocol == 0))
359359 then 0
360360 else fraction(10000, gVires, inProtocol)
361361 let base = (((((((((((((((((((" deposited = " + toString(deposited)) + ", virtualTokens = ") + toString(virtualTokens)) + ", locked = ") + toString(locked)) + ", withdrawable = ") + toString(withdrawable)) + ", withdrawn = ") + toString(withdrawn)) + ", inProtocol = ") + toString(inProtocol)) + ", entryHeight = ") + toString(userEntryHeight(user))) + ", factor = ") + toString(userFactor(user))) + ", gVires = ") + toString(gVires)) + ", power = ") + toString(power))
362362 let tokensData = {
363363 func fld (totals,item) = {
364- let $t01170911736 = item
365- let aid = $t01170911736._1
366- let ced = $t01170911736._2
367- let av = $t01170911736._3
368- let nc = $t01170911736._4
364+ let $t01174811775 = item
365+ let aid = $t01174811775._1
366+ let ced = $t01174811775._2
367+ let av = $t01174811775._3
368+ let nc = $t01174811775._4
369369 ((((((((((totals + ", [ ") + "assetId = ") + aid) + ", claimed = ") + toString(ced)) + ", claimable = ") + toString(av)) + ", nonClaimable = ") + toString(nc)) + "]")
370370 }
371371
421421 if ((currentFactor > factor))
422422 then throw("can't downgrade boosting")
423423 else {
424- let $t01306413150 = userViresData(user)
425- let deposited = $t01306413150._1
426- let locked = $t01306413150._2
427- let withdrawable = $t01306413150._3
428- let withdrawn = $t01306413150._4
429- let inProtocol = $t01306413150._5
430- let gV = $t01306413150._6
424+ let $t01310313189 = userViresData(user)
425+ let deposited = $t01310313189._1
426+ let locked = $t01310313189._2
427+ let withdrawable = $t01310313189._3
428+ let withdrawn = $t01310313189._4
429+ let inProtocol = $t01310313189._5
430+ let gV = $t01310313189._6
431431 let oldVirtualTokens = userVirtualTokens(user)
432432 let newVirtualTokens = formula((HEIGHT - initialHeight), (factor * (tokens + inProtocol)))
433433 let diff = (newVirtualTokens - oldVirtualTokens)
527527 if ((checks == checks))
528528 then {
529529 let addr = addressFromStringValue(user)
530- let $t01585715935 = userViresData(user)
531- let deposited = $t01585715935._1
532- let locked = $t01585715935._2
533- let withdrawable = $t01585715935._3
534- let withdrawn = $t01585715935._4
535- let gVires = $t01585715935._5
530+ let $t01589615974 = userViresData(user)
531+ let deposited = $t01589615974._1
532+ let locked = $t01589615974._2
533+ let withdrawable = $t01589615974._3
534+ let withdrawn = $t01589615974._4
535+ let gVires = $t01589615974._5
536536 if ((0 >= withdrawable))
537537 then nil
538538 else {
539539 let userUpdate = if (userOffCliff(user))
540540 then {
541- let $t01603616090 = userProfitData(user)
542- let virtualTokens = $t01603616090._1
543- let tokensData = $t01603616090._2
541+ let $t01607516129 = userProfitData(user)
542+ let virtualTokens = $t01607516129._1
543+ let tokensData = $t01607516129._2
544544 let base = [DeleteEntry(userFactorStore(user)), DeleteEntry(userEntryHeightStore(user)), DeleteEntry(userWithdrawnTokensStore(user)), DeleteEntry(userDepositedTokensStore(user)), DeleteEntry(userVirtualTokensStore(user)), changeByStr(totalVirtualTokensStore, -(withdrawable))]
545545 let tokenData = {
546546 func fold (total,item) = {
547- let $t01658716616 = item
548- let aid = $t01658716616._1
549- let ced = $t01658716616._2
550- let av = $t01658716616._3
551- let nc = $t01658716616._4
547+ let $t01662616655 = item
548+ let aid = $t01662616655._1
549+ let ced = $t01662616655._2
550+ let av = $t01662616655._3
551+ let nc = $t01662616655._4
552552 (total ++ [DeleteEntry(userDividendsClaimedStore(user, aid)), IntegerEntry(userDividendsAdjStore(user, aid), -(av)), IntegerEntry(totalVirtualDividendsStore(aid), fraction(totalVirtualDividends(aid), (totalVirtualTokens - withdrawable), totalVirtualTokens))])
553553 }
554554
601601 if ((checks == checks))
602602 then {
603603 let toAddr = addressFromStringValue(to)
604- let $t01798618039 = userProfitData(from)
605- let virtualTokens = $t01798618039._1
606- let tokensData = $t01798618039._2
604+ let $t01802518078 = userProfitData(from)
605+ let virtualTokens = $t01802518078._1
606+ let tokensData = $t01802518078._2
607607 let relocking = if (relock)
608608 then updateUser(from, 0, userFactor(from))
609609 else nil
610610 let tokenData = {
611611 func fold (total,item) = {
612- let $t01824318272 = item
613- let aid = $t01824318272._1
614- let ced = $t01824318272._2
615- let av = $t01824318272._3
616- let nc = $t01824318272._4
612+ let $t01828218311 = item
613+ let aid = $t01828218311._1
614+ let ced = $t01828218311._2
615+ let av = $t01828218311._3
616+ let nc = $t01828218311._4
617617 (total ++ [changeBy(userDividendsClaimedStore(from, aid), av), changeBy(totalRealDividendsClaimedStore(aid), av), ScriptTransfer(toAddr, av, assetId(aid))])
618618 }
619619
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func asInt (value) = match value {
55 case int: Int =>
66 int
77 case _ =>
88 throw("wrong type, expected: Int")
99 }
1010
1111
1212 func asIntStrInt (value) = match value {
1313 case intStrInt: (Int, String, Int) =>
1414 intStrInt
1515 case intStr: (Int, String) =>
1616 $Tuple3(intStr._1, intStr._2, 0)
1717 case _ =>
1818 throw("wrong type, expected: (Int, String)")
1919 }
2020
2121
2222 func factorCheck (factor) = if (if (if ((factor != 1))
2323 then (factor != 2)
2424 else false)
2525 then (factor != 4)
2626 else false)
2727 then throw("bad factor")
2828 else factor
2929
3030
3131 let viresAssetIdStore = "viresAssetId"
3232
3333 let initialHeightStore = "initialHeight"
3434
3535 let initialHeight = getIntegerValue(this, initialHeightStore)
3636
3737 let configStore = "config"
3838
3939 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configStore), "exp-dividends: no configAddress")), "invalid config address")
4040
4141 let maybeOracleAddress = match getString(configAddress, "oracle_address") {
4242 case s: String =>
4343 addressFromString(s)
4444 case _ =>
4545 unit
4646 }
4747
4848 let HEIGHT = height
4949
5050 let viresIdStr = valueOrErrorMessage(getString(this, viresAssetIdStore), "vires assetId not found")
5151
5252 let viresAssetId = valueOrErrorMessage(fromBase58String(viresIdStr), "invalid vires assetId")
5353
5454 func assetId (s) = if ((s == "WAVES"))
5555 then unit
5656 else fromBase58String(s)
5757
5858
5959 func assetIdStr (aid) = match aid {
6060 case bv: ByteVector =>
6161 toBase58String(bv)
6262 case u: Unit =>
6363 "WAVES"
6464 case _ =>
6565 throw("Match error")
6666 }
6767
6868
6969 func throwIf (condition,error) = if (condition)
7070 then throw(error)
7171 else true
7272
7373
7474 func writeInt (key,value) = if ((0 > value))
7575 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
7676 else IntegerEntry(key, value)
7777
7878
7979 func writeStrInt (key,value) = if ((0 > value))
8080 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
8181 else StringEntry(key, toString(value))
8282
8383
8484 func writeString (key,value) = StringEntry(key, value)
8585
8686
8787 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
8888 then StringEntry(key, value)
8989 else throw(("already initialized: " + key))
9090
9191
9292 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
9393
9494
9595 func changeByStr (key,value) = writeStrInt(key, (parseIntValue(valueOrElse(getString(this, key), "0")) + value))
9696
9797
9898 func viresPayment (i) = if ((size(i.payments) == 0))
9999 then 0
100100 else if ((i.payments[0].assetId != viresAssetId))
101101 then throw("not vires")
102102 else i.payments[0].amount
103103
104104
105105 func opAllowed (op) = match invoke(configAddress, "opAllowed", [viresIdStr, op], nil) {
106106 case b: Boolean =>
107107 if (b)
108108 then true
109109 else throw("not allowed")
110110 case _ =>
111111 throw("opAllowed: unexpected result type")
112112 }
113113
114114
115115 let viresStaker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_staker"), "no vires_staker in config")), "invalid vires_staker address")
116116
117-let main = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "main"), "no main")), "invalid main")
117+let main = valueOrErrorMessage(addressFromString(split(valueOrErrorMessage(getString(configAddress, "main"), "no main"), "|")[0]), "invalid main")
118118
119-func mainOnly (i) = if ((i.caller == main))
119+func mainOnly (i) = if (contains(getStringValue(configAddress, "main"), toString(i.caller)))
120120 then true
121- else throw("invalid user: only main can do")
121+ else throw("only main can do")
122122
123123
124124 let dividendableTokens = valueOrElse(getString(configAddress, "dividendableTokens"), "")
125125
126126 let dividendableTokensArr = if ((dividendableTokens == ""))
127127 then nil
128128 else split(dividendableTokens, "|")
129129
130130 let dividendableReservesStr = valueOrElse(getString(configAddress, "dividendableReserves"), "")
131131
132132 let dividendableReserves = match dividendableReservesStr {
133133 case str: String =>
134134 if ((str == ""))
135135 then nil
136136 else split(str, "|")
137137 case _ =>
138138 nil
139139 }
140140
141141 let halfLife = valueOrErrorMessage(getInteger(configAddress, "vires_lock_half_life"), "half life not set")
142142
143143 let lambda = (69314718056 / halfLife)
144144
145145 let LAMBDABASE = 8
146146
147147 let E = 271828183
148148
149149 let EBASE = 8
150150
151151 func formula (x,y0) = fraction(y0, pow(E, EBASE, fraction(lambda, x, 1000), LAMBDABASE, 8, HALFUP), 100000000)
152152
153153
154154 func userDividendsAdjStore (user,aid) = (((user + "_") + aid) + "_adj")
155155
156156
157157 func userDividendsClaimedStore (user,aid) = (((user + "_") + aid) + "_claimed")
158158
159159
160160 func userVirtualTokensStore (user) = (user + "_virtual")
161161
162162
163163 func userDepositedTokensStore (user) = (user + "_vires")
164164
165165
166166 func userWithdrawnTokensStore (user) = (user + "_vires_withdrawn")
167167
168168
169169 func userEntryHeightStore (user) = (user + "_height")
170170
171171
172172 func userFactorStore (user) = (user + "_factor")
173173
174174
175175 func userDividendsAdj (user,aid) = valueOrElse(getInteger(userDividendsAdjStore(user, aid)), 0)
176176
177177
178178 func userDividendsClaimed (user,aid) = valueOrElse(getInteger(userDividendsClaimedStore(user, aid)), 0)
179179
180180
181181 func userVirtualTokens (user) = parseIntValue(valueOrElse(getString(userVirtualTokensStore(user)), "0"))
182182
183183
184184 func userDepositedTokens (user) = valueOrElse(getInteger(userDepositedTokensStore(user)), 0)
185185
186186
187187 func userWithdrawnTokens (user) = valueOrElse(getInteger(userWithdrawnTokensStore(user)), 0)
188188
189189
190190 func userEntryHeight (user) = valueOrElse(getInteger(userEntryHeightStore(user)), 0)
191191
192192
193193 func userFactor (user) = valueOrElse(getInteger(userFactorStore(user)), 1)
194194
195195
196196 func userGVires (user) = formula(-((HEIGHT - initialHeight)), userVirtualTokens(user))
197197
198198
199199 func totalVirtualDividendsStore (aid) = (aid + "_totalVirtualDividends")
200200
201201
202202 func totalRealDividendsStore (aid) = (aid + "_totalRealDividends")
203203
204204
205205 func totalRealDividendsClaimedStore (aid) = (aid + "_totalRealDividendsClaimed")
206206
207207
208208 let totalVirtualTokensStore = "totalVirtualTokens"
209209
210210 let totalDepositedTokensStore = "totalDepositedTokens"
211211
212212 func totalDepositedByFactorStore (factor) = ("totalDepositedTokens" + toString(factorCheck(factor)))
213213
214214
215215 func totalDepositedByFactor (factor) = valueOrElse(getInteger(totalDepositedByFactorStore(factor)), 0)
216216
217217
218218 func totalVirtualDividends (aid) = valueOrElse(getInteger(this, totalVirtualDividendsStore(aid)), 0)
219219
220220
221221 func totalRealDividends (aid) = valueOrElse(getInteger(this, totalRealDividendsStore(aid)), 0)
222222
223223
224224 let totalVirtualTokens = parseIntValue(valueOrElse(getString(this, totalVirtualTokensStore), "0"))
225225
226226 let totalDepositedTokens = valueOrElse(getInteger(this, totalDepositedTokensStore), 0)
227227
228228 func userOffCliff (user) = {
229229 let entryHeight = userEntryHeight(user)
230230 let factor = userFactor(user)
231231 if ((factor == 1))
232232 then (HEIGHT > (entryHeight + (4 * halfLife)))
233233 else if ((factor == 2))
234234 then (HEIGHT > (entryHeight + (5 * halfLife)))
235235 else if ((factor == 4))
236236 then (HEIGHT > (entryHeight + (6 * halfLife)))
237237 else throw(("bad factor:" + toString(factor)))
238238 }
239239
240240
241241 func userViresData (user) = {
242242 let deposited = userDepositedTokens(user)
243243 let gV = userGVires(user)
244244 let supposedLocked = min([deposited, gV])
245245 let locked = if (userOffCliff(user))
246246 then 0
247247 else supposedLocked
248248 let unlocked = (deposited - locked)
249249 let withdrawn = userWithdrawnTokens(user)
250250 let withdrawable = (unlocked - withdrawn)
251251 let inProtocol = (locked + withdrawable)
252252 $Tuple6(deposited, locked, withdrawable, withdrawn, inProtocol, gV)
253253 }
254254
255255
256256 func userProfitData (user) = {
257257 let totalTokens = size(dividendableTokensArr)
258258 let totalDividendableReserves = size(dividendableReserves)
259259 if ((totalTokens != totalDividendableReserves))
260260 then throw(((("inconsistent configuration: totalTokens=" + toString(totalTokens)) + ", totalDividendableReserves = ") + toString(totalDividendableReserves)))
261261 else {
262262 let virtualTokens = userVirtualTokens(user)
263263 let tokenData = {
264264 func fold (totals,index) = if ((index >= totalTokens))
265265 then totals
266266 else {
267267 let aid = dividendableTokensArr[index]
268- let $t084508718 = {
268+ let $t084898757 = {
269269 let r = valueOrErrorMessage(addressFromString(dividendableReserves[index]), "bad reserve in dividendableReserves")
270270 asIntStrInt(invoke(r, "getReserveDivsInfo", nil, nil))
271271 }
272- let reserveDivs = $t084508718._1
273- let reserveAssetId = $t084508718._2
274- let nonClaimable = $t084508718._3
272+ let reserveDivs = $t084898757._1
273+ let reserveAssetId = $t084898757._2
274+ let nonClaimable = $t084898757._3
275275 if ((reserveAssetId != aid))
276276 then throw(((((((("inconsistent configuration: reserveAssetId=" + reserveAssetId) + ", aid=") + aid) + ", dividendableTokens:") + dividendableTokens) + ", dividendableReserves:") + dividendableReservesStr))
277277 else {
278278 let userVirtualDivs = if ((totalVirtualTokens == 0))
279279 then 0
280280 else fraction((totalVirtualDividends(aid) + reserveDivs), virtualTokens, totalVirtualTokens)
281281 let adj = userDividendsAdj(user, aid)
282282 let userDivs = (userVirtualDivs - adj)
283283 let nonClaimableUserDivs = if ((totalVirtualTokens == 0))
284284 then 0
285285 else fraction(nonClaimable, virtualTokens, totalVirtualTokens)
286286 let userClaimed = userDividendsClaimed(user, aid)
287287 let claimable = max([0, (userDivs - userClaimed)])
288288 if ((0 > claimable))
289289 then throw(("claimable < 0: " + toString(claimable)))
290290 else (totals ++ [$Tuple4(aid, userClaimed, claimable, nonClaimableUserDivs)])
291291 }
292292 }
293293
294294 let $l = [0, 1, 2, 3, 4, 5, 6]
295295 let $s = size($l)
296296 let $acc0 = nil
297297 func $f0_1 ($a,$i) = if (($i >= $s))
298298 then $a
299299 else fold($a, $l[$i])
300300
301301 func $f0_2 ($a,$i) = if (($i >= $s))
302302 then $a
303303 else throw("List size exceeds 7")
304304
305305 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
306306 }
307307 $Tuple2(virtualTokens, tokenData)
308308 }
309309 }
310310
311311
312312 func claimFromReservesInternal () = {
313313 let assetIdStore = "assetId"
314314 func fold (output,reserve) = {
315315 let reserveAddress = valueOrErrorMessage(addressFromString(reserve), "adder: bad reserve address")
316316 let assetIdString = valueOrErrorMessage(getString(reserveAddress, assetIdStore), "no assetId in reserve")
317317 let actions = if (!(contains(dividendableTokens, assetIdString)))
318318 then throw("inconsistent configuration: dividendableReserve's asset id is not stored in dividendableTokens")
319319 else {
320320 let amount = asInt(invoke(reserveAddress, "withdrawFromReserve", [-1], nil))
321321 if ((amount == amount))
322322 then if ((0 > amount))
323323 then throw("bad amount")
324324 else if ((amount == 0))
325325 then nil
326326 else [changeBy(totalVirtualDividendsStore(assetIdString), amount), changeBy(totalRealDividendsStore(assetIdString), amount)]
327327 else throw("Strict value is not equal to itself.")
328328 }
329329 (output ++ actions)
330330 }
331331
332332 let $l = dividendableReserves
333333 let $s = size($l)
334334 let $acc0 = nil
335335 func $f0_1 ($a,$i) = if (($i >= $s))
336336 then $a
337337 else fold($a, $l[$i])
338338
339339 func $f0_2 ($a,$i) = if (($i >= $s))
340340 then $a
341341 else throw("List size exceeds 7")
342342
343343 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
344344 }
345345
346346
347347 func adviseUser (user) = {
348- let $t01082110911 = userViresData(user)
349- let deposited = $t01082110911._1
350- let locked = $t01082110911._2
351- let withdrawable = $t01082110911._3
352- let withdrawn = $t01082110911._4
353- let inProtocol = $t01082110911._5
354- let gVires = $t01082110911._6
355- let $t01091810971 = userProfitData(user)
356- let virtualTokens = $t01091810971._1
357- let tokenData = $t01091810971._2
348+ let $t01086010950 = userViresData(user)
349+ let deposited = $t01086010950._1
350+ let locked = $t01086010950._2
351+ let withdrawable = $t01086010950._3
352+ let withdrawn = $t01086010950._4
353+ let inProtocol = $t01086010950._5
354+ let gVires = $t01086010950._6
355+ let $t01095711010 = userProfitData(user)
356+ let virtualTokens = $t01095711010._1
357+ let tokenData = $t01095711010._2
358358 let power = if ((inProtocol == 0))
359359 then 0
360360 else fraction(10000, gVires, inProtocol)
361361 let base = (((((((((((((((((((" deposited = " + toString(deposited)) + ", virtualTokens = ") + toString(virtualTokens)) + ", locked = ") + toString(locked)) + ", withdrawable = ") + toString(withdrawable)) + ", withdrawn = ") + toString(withdrawn)) + ", inProtocol = ") + toString(inProtocol)) + ", entryHeight = ") + toString(userEntryHeight(user))) + ", factor = ") + toString(userFactor(user))) + ", gVires = ") + toString(gVires)) + ", power = ") + toString(power))
362362 let tokensData = {
363363 func fld (totals,item) = {
364- let $t01170911736 = item
365- let aid = $t01170911736._1
366- let ced = $t01170911736._2
367- let av = $t01170911736._3
368- let nc = $t01170911736._4
364+ let $t01174811775 = item
365+ let aid = $t01174811775._1
366+ let ced = $t01174811775._2
367+ let av = $t01174811775._3
368+ let nc = $t01174811775._4
369369 ((((((((((totals + ", [ ") + "assetId = ") + aid) + ", claimed = ") + toString(ced)) + ", claimable = ") + toString(av)) + ", nonClaimable = ") + toString(nc)) + "]")
370370 }
371371
372372 let $l = tokenData
373373 let $s = size($l)
374374 let $acc0 = ""
375375 func $f0_1 ($a,$i) = if (($i >= $s))
376376 then $a
377377 else fld($a, $l[$i])
378378
379379 func $f0_2 ($a,$i) = if (($i >= $s))
380380 then $a
381381 else throw("List size exceeds 7")
382382
383383 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
384384 }
385385 (base + tokensData)
386386 }
387387
388388
389389 func advise () = {
390390 let totalGvires = formula(-((HEIGHT - initialHeight)), totalVirtualTokens)
391391 let base = (((((((((((" totalDepositedTokens = " + toString(totalDepositedTokens)) + ", totalDepositedTokens1 = ") + toString(totalDepositedByFactor(1))) + ", totalDepositedTokens2 = ") + toString(totalDepositedByFactor(2))) + ", totalDepositedTokens4 = ") + toString(totalDepositedByFactor(4))) + ", totalVirtualTokens = ") + toString(totalVirtualTokens)) + ", totalGvires = ") + toString(totalGvires))
392392 func fold (total,aid) = ((((total + ", ") + aid) + " = ") + toString(totalRealDividends(aid)))
393393
394394 let $l = dividendableTokensArr
395395 let $s = size($l)
396396 let $acc0 = base
397397 func $f0_1 ($a,$i) = if (($i >= $s))
398398 then $a
399399 else fold($a, $l[$i])
400400
401401 func $f0_2 ($a,$i) = if (($i >= $s))
402402 then $a
403403 else throw("List size exceeds 7")
404404
405405 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
406406 }
407407
408408
409409 func updateUser (user,tokens,f) = {
410410 let checks = opAllowed("lock_vires")
411411 if ((checks == checks))
412412 then if (if ((f != 1))
413413 then valueOrElse(getBoolean(configAddress, "allow_boost"), false)
414414 else false)
415415 then throw("boosting not enabled")
416416 else {
417417 let factor = factorCheck(f)
418418 if ((factor == factor))
419419 then {
420420 let currentFactor = userFactor(user)
421421 if ((currentFactor > factor))
422422 then throw("can't downgrade boosting")
423423 else {
424- let $t01306413150 = userViresData(user)
425- let deposited = $t01306413150._1
426- let locked = $t01306413150._2
427- let withdrawable = $t01306413150._3
428- let withdrawn = $t01306413150._4
429- let inProtocol = $t01306413150._5
430- let gV = $t01306413150._6
424+ let $t01310313189 = userViresData(user)
425+ let deposited = $t01310313189._1
426+ let locked = $t01310313189._2
427+ let withdrawable = $t01310313189._3
428+ let withdrawn = $t01310313189._4
429+ let inProtocol = $t01310313189._5
430+ let gV = $t01310313189._6
431431 let oldVirtualTokens = userVirtualTokens(user)
432432 let newVirtualTokens = formula((HEIGHT - initialHeight), (factor * (tokens + inProtocol)))
433433 let diff = (newVirtualTokens - oldVirtualTokens)
434434 let base = [changeBy(totalDepositedTokensStore, tokens), changeByStr(totalVirtualTokensStore, diff), changeByStr(userVirtualTokensStore(user), diff), changeBy(userDepositedTokensStore(user), tokens), IntegerEntry(userEntryHeightStore(user), HEIGHT), IntegerEntry(userFactorStore(user), factor)]
435435 let tokenData = {
436436 func fold (total,aid) = {
437437 let adj = if ((totalVirtualTokens == 0))
438438 then 0
439439 else fraction(diff, totalVirtualDividends(aid), totalVirtualTokens)
440440 (total ++ [changeBy(totalVirtualDividendsStore(aid), adj), IntegerEntry(userDividendsAdjStore(user, aid), (userDividendsAdj(user, aid) + adj))])
441441 }
442442
443443 let $l = dividendableTokensArr
444444 let $s = size($l)
445445 let $acc0 = nil
446446 func $f0_1 ($a,$i) = if (($i >= $s))
447447 then $a
448448 else fold($a, $l[$i])
449449
450450 func $f0_2 ($a,$i) = if (($i >= $s))
451451 then $a
452452 else throw("List size exceeds 7")
453453
454454 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
455455 }
456456 let monitoring = if ((factor != currentFactor))
457457 then [changeBy(totalDepositedByFactorStore(currentFactor), -(inProtocol)), changeBy(totalDepositedByFactorStore(factor), (tokens + inProtocol))]
458458 else [changeBy(totalDepositedByFactorStore(factor), tokens)]
459459 ((base ++ tokenData) ++ monitoring)
460460 }
461461 }
462462 else throw("Strict value is not equal to itself.")
463463 }
464464 else throw("Strict value is not equal to itself.")
465465 }
466466
467467
468468 @Callable(i)
469469 func totalGvires () = $Tuple2(nil, formula(-((HEIGHT - initialHeight)), totalVirtualTokens))
470470
471471
472472
473473 @Callable(i)
474474 func shareProfitManually () = {
475475 let checks = opAllowed("share_dividends_manually")
476476 if ((checks == checks))
477477 then {
478478 let paymentAssetId = assetIdStr(i.payments[0].assetId)
479479 if (!(contains(dividendableTokens, paymentAssetId)))
480480 then throw("bad profit token")
481481 else {
482482 let amt = i.payments[0].amount
483483 [changeBy(totalVirtualDividendsStore(paymentAssetId), amt), changeBy(totalRealDividendsStore(paymentAssetId), amt)]
484484 }
485485 }
486486 else throw("Strict value is not equal to itself.")
487487 }
488488
489489
490490
491491 @Callable(i)
492492 func shareProfitFromReserves () = claimFromReservesInternal()
493493
494494
495495
496496 @Callable(i)
497497 func init (configAddress,vires) = [writeConstString(configStore, configAddress), writeConstString(viresAssetIdStore, vires)]
498498
499499
500500
501501 @Callable(i)
502502 func init2 () = if ((i.caller != this))
503503 then throw("only self can continue")
504504 else [writeInt(initialHeightStore, HEIGHT)]
505505
506506
507507
508508 @Callable(i)
509509 func lockFor (user,factor) = {
510510 let checks = throwIf(if ((toString(i.caller) != user))
511511 then (i.caller != main)
512512 else false, "only main and user directly can do")
513513 if ((checks == checks))
514514 then updateUser(user, viresPayment(i), factor)
515515 else throw("Strict value is not equal to itself.")
516516 }
517517
518518
519519
520520 @Callable(i)
521521 func withdrawUnlockedFor (user) = {
522522 let checks = if (throwIf(if ((toString(i.caller) != user))
523523 then (i.caller != main)
524524 else false, "only main and user directly can do"))
525525 then opAllowed("withdraw_unlocked_vires")
526526 else false
527527 if ((checks == checks))
528528 then {
529529 let addr = addressFromStringValue(user)
530- let $t01585715935 = userViresData(user)
531- let deposited = $t01585715935._1
532- let locked = $t01585715935._2
533- let withdrawable = $t01585715935._3
534- let withdrawn = $t01585715935._4
535- let gVires = $t01585715935._5
530+ let $t01589615974 = userViresData(user)
531+ let deposited = $t01589615974._1
532+ let locked = $t01589615974._2
533+ let withdrawable = $t01589615974._3
534+ let withdrawn = $t01589615974._4
535+ let gVires = $t01589615974._5
536536 if ((0 >= withdrawable))
537537 then nil
538538 else {
539539 let userUpdate = if (userOffCliff(user))
540540 then {
541- let $t01603616090 = userProfitData(user)
542- let virtualTokens = $t01603616090._1
543- let tokensData = $t01603616090._2
541+ let $t01607516129 = userProfitData(user)
542+ let virtualTokens = $t01607516129._1
543+ let tokensData = $t01607516129._2
544544 let base = [DeleteEntry(userFactorStore(user)), DeleteEntry(userEntryHeightStore(user)), DeleteEntry(userWithdrawnTokensStore(user)), DeleteEntry(userDepositedTokensStore(user)), DeleteEntry(userVirtualTokensStore(user)), changeByStr(totalVirtualTokensStore, -(withdrawable))]
545545 let tokenData = {
546546 func fold (total,item) = {
547- let $t01658716616 = item
548- let aid = $t01658716616._1
549- let ced = $t01658716616._2
550- let av = $t01658716616._3
551- let nc = $t01658716616._4
547+ let $t01662616655 = item
548+ let aid = $t01662616655._1
549+ let ced = $t01662616655._2
550+ let av = $t01662616655._3
551+ let nc = $t01662616655._4
552552 (total ++ [DeleteEntry(userDividendsClaimedStore(user, aid)), IntegerEntry(userDividendsAdjStore(user, aid), -(av)), IntegerEntry(totalVirtualDividendsStore(aid), fraction(totalVirtualDividends(aid), (totalVirtualTokens - withdrawable), totalVirtualTokens))])
553553 }
554554
555555 let $l = tokensData
556556 let $s = size($l)
557557 let $acc0 = nil
558558 func $f0_1 ($a,$i) = if (($i >= $s))
559559 then $a
560560 else fold($a, $l[$i])
561561
562562 func $f0_2 ($a,$i) = if (($i >= $s))
563563 then $a
564564 else throw("List size exceeds 7")
565565
566566 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
567567 }
568568 (base ++ tokenData)
569569 }
570570 else [changeBy(userWithdrawnTokensStore(user), withdrawable)]
571571 (userUpdate ++ [changeBy(totalDepositedByFactorStore(userFactor(user)), -(withdrawable)), changeBy(totalDepositedTokensStore, -(withdrawable)), ScriptTransfer(addr, withdrawable, viresAssetId)])
572572 }
573573 }
574574 else throw("Strict value is not equal to itself.")
575575 }
576576
577577
578578
579579 @Callable(i)
580580 func claimProfit (from,to,relock) = {
581581 let validDelegate = if ((from == to))
582582 then true
583583 else match getString(this, ("delegation_claim_" + from)) {
584584 case s: String =>
585585 let data = split(s, "|")
586586 if ((to != data[0]))
587587 then throw(("no delegation rights for " + to))
588588 else if (if (relock)
589589 then (data[1] != "1")
590590 else false)
591591 then throw("attempting to relock while it's not allowed")
592592 else true
593593 case _ =>
594594 throw(("delegation not configured for " + from))
595595 }
596596 let checks = if (if (mainOnly(i))
597597 then opAllowed("claim_dividends")
598598 else false)
599599 then validDelegate
600600 else false
601601 if ((checks == checks))
602602 then {
603603 let toAddr = addressFromStringValue(to)
604- let $t01798618039 = userProfitData(from)
605- let virtualTokens = $t01798618039._1
606- let tokensData = $t01798618039._2
604+ let $t01802518078 = userProfitData(from)
605+ let virtualTokens = $t01802518078._1
606+ let tokensData = $t01802518078._2
607607 let relocking = if (relock)
608608 then updateUser(from, 0, userFactor(from))
609609 else nil
610610 let tokenData = {
611611 func fold (total,item) = {
612- let $t01824318272 = item
613- let aid = $t01824318272._1
614- let ced = $t01824318272._2
615- let av = $t01824318272._3
616- let nc = $t01824318272._4
612+ let $t01828218311 = item
613+ let aid = $t01828218311._1
614+ let ced = $t01828218311._2
615+ let av = $t01828218311._3
616+ let nc = $t01828218311._4
617617 (total ++ [changeBy(userDividendsClaimedStore(from, aid), av), changeBy(totalRealDividendsClaimedStore(aid), av), ScriptTransfer(toAddr, av, assetId(aid))])
618618 }
619619
620620 let $l = tokensData
621621 let $s = size($l)
622622 let $acc0 = nil
623623 func $f0_1 ($a,$i) = if (($i >= $s))
624624 then $a
625625 else fold($a, $l[$i])
626626
627627 func $f0_2 ($a,$i) = if (($i >= $s))
628628 then $a
629629 else throw("List size exceeds 7")
630630
631631 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
632632 }
633633 (relocking ++ tokenData)
634634 }
635635 else throw("Strict value is not equal to itself.")
636636 }
637637
638638
639639
640640 @Callable(i)
641641 func setClaimDelegation (address,relock) = {
642642 let checks = opAllowed("set_delegation_claim")
643643 if ((checks == checks))
644644 then if (!(isDefined(addressFromString(address))))
645645 then throw("bad address")
646646 else [StringEntry(("delegation_claim_" + toString(i.caller)), ((address + "|") + (if (relock)
647647 then "1"
648648 else "0")))]
649649 else throw("Strict value is not equal to itself.")
650650 }
651651
652652
653653
654654 @Callable(i)
655655 func removeClaimDelegation () = {
656656 let checks = opAllowed("set_delegation_claim")
657657 if ((checks == checks))
658658 then [DeleteEntry(("delegation_claim_" + toString(i.caller)))]
659659 else throw("Strict value is not equal to itself.")
660660 }
661661
662662
663663
664664 @Callable(i)
665665 func userPower (user) = $Tuple2(nil, userGVires(user))
666666
667667

github/deemru/w8io/3ef1775 
278.42 ms