tx · 8kx7GHPkWVk6Wb2BvLPpwRC8mYDsVN27xVmCXPLFXofK

3PJLSicudr3yyv87LSzE8dN8n6PcLbRG2wV:  -0.05100000 Waves

2022.08.09 19:20 [3242647] smart account 3PJLSicudr3yyv87LSzE8dN8n6PcLbRG2wV > SELF 0.00000000 Waves

{ "type": 13, "id": "8kx7GHPkWVk6Wb2BvLPpwRC8mYDsVN27xVmCXPLFXofK", "fee": 5100000, "feeAssetId": null, "timestamp": 1660062048310, "version": 2, "chainId": 87, "sender": "3PJLSicudr3yyv87LSzE8dN8n6PcLbRG2wV", "senderPublicKey": "5vDMJKitCLxxnC9bTsYFBtLmY8ZQRbe5i5U5aVzmEjVH", "proofs": [ "4XLSpU8Rsxi5BHN5iVNy6x4RFDFtZJCHwgUrhkWMshtsRxfDsh2KdVtyzGYyf2LzcRweQm81iXYE9L7owhprcWxP" ], "script": "base64:BgI9CAISBAoCCAgSAwoBCBIFCgMICAESBgoECAgIARIFCgMICAgSBAoCCAgSBgoECAgBARIECgIIARIECgIIAUkAE2tfdG90YWxGZWVzSW5QZXJpb2QCE2tfdG90YWxGZWVzSW5QZXJpb2QAFGtfdHJhZGVyRmVlc0luUGVyaW9kAhRrX3RyYWRlckZlZXNJblBlcmlvZAAOa19sYXN0Tm90aW9uYWwCDmtfbGFzdE5vdGlvbmFsABRrX3RvdGFsU2NvcmVJblBlcmlvZAIUa190b3RhbFNjb3JlSW5QZXJpb2QAFWtfdHJhZGVyU2NvcmVJblBlcmlvZAIVa190cmFkZXJTY29yZUluUGVyaW9kAB9rX3RyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kAh9rX3RyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kAA9rX2FtbVJld2FyZFJhdGUCD2tfYW1tUmV3YXJkUmF0ZQAXa19hbW1NYXhBbW91bnRQZXJQZXJpb2QCF2tfYW1tTWF4QW1vdW50UGVyUGVyaW9kABBrX3Jld2FyZEFzc2V0SWRzAhBrX3Jld2FyZEFzc2V0SWRzAAZrX2FtbXMCBmtfYW1tcwAXa19jbGFpbWVkQXNzZXRBbmRQZXJpb2QCF2tfY2xhaW1lZEFzc2V0QW5kUGVyaW9kAA9rX29yYWNsZUFkZHJlc3MCD2tfb3JhY2xlQWRkcmVzcwANa19vcmFjbGVQcmljZQIFcHJpY2UAH2tfdG90YWxDbGFpbWVkRm9yVHJhZGVyQW5kQXNzZXQCH2tfdG90YWxDbGFpbWVkRm9yVHJhZGVyQW5kQXNzZXQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAAVrX2FtbQIFa19hbW0ADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgC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dG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQRpbnQwAQFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWsAAAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHARJnZXRGZWVzSW5QZXJpb2RLZXkDBF9hbW0HX3RyYWRlcgdfd2Vla0lkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBRRrX3RyYWRlckZlZXNJblBlcmlvZAIBXwUEX2FtbQIBXwUHX3RyYWRlcgIBXwkApAMBBQdfd2Vla0lkARdnZXRUb3RhbEZlZXNJblBlcmlvZEtleQIEX2FtbQdfd2Vla0lkCQCsAgIJAKwCAgkArAICCQCsAgIFE2tfdG90YWxGZWVzSW5QZXJpb2QCAV8FBF9hbW0CAV8JAKQDAQUHX3dlZWtJZAESZ2V0TGFzdE5vdGlvbmFsS2V5AgRfYW1tB190cmFkZXIJAKwCAgkArAICCQCsAgIJAKwCAgUOa19sYXN0Tm90aW9uYWwCAV8FBF9hbW0CAV8FB190cmFkZXIBGWdldFRyYWRlclNjb3JlSW5QZXJpb2RLZXkDBF9hbW0HX3RyYWRlcgdfd2Vla0lkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBRVrX3RyYWRlclNjb3JlSW5QZXJpb2QCAV8FBF9hbW0CAV8FB190cmFkZXICAV8JAKQDAQUHX3dlZWtJZAEYZ2V0VG90YWxTY29yZUluUGVyaW9kS2V5AgRfYW1tB193ZWVrSWQJAKwCAgkArAICCQCsAgIJAKwCAgUUa190b3RhbFNjb3JlSW5QZXJpb2QCAV8FBF9hbW0CAV8JAKQDAQUHX3dlZWtJZAEjZ2V0VHJhZGVyQXZlcmFnZU5vdGlvbmFsSW5QZXJpb2RLZXkDBF9hbW0HX3RyYWRlcgdfd2Vla0lkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBR9rX3RyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kAgFfBQRfYW1tAgFfBQdfdHJhZGVyAgFfCQCkAwEFB193ZWVrSWQBE2dldEFtbVJld2FyZFJhdGVLZXkCBF9hbW0IX2Fzc2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgUPa19hbW1SZXdhcmRSYXRlAgFfBQRfYW1tAgFfBQhfYXNzZXRJZAEbZ2V0QW1tTWF4QW1vdW50UGVyUGVyaW9kS2V5AgRfYW1tCF9hc3NldElkCQCsAgIJAKwCAgkArAICCQCsAgIFF2tfYW1tTWF4QW1vdW50UGVyUGVyaW9kAgFfBQRfYW1tAgFfBQhfYXNzZXRJZAEeZ2V0Q2xhaW1lZFRyYWRlckFzc2V0UGVyaW9kS2V5AwdfdHJhZGVyCF9hc3NldElkB19wZXJpb2QJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFF2tfY2xhaW1lZEFzc2V0QW5kUGVyaW9kAgFfBQdfdHJhZGVyAgFfBQhfYXNzZXRJZAIBXwkApAMBBQdfcGVyaW9kARFnZXRPcmFjbGVQcmljZUtleQIIX2Fzc2V0SWQHX3BlcmlvZAkArAICCQCsAgIJAKwCAgkArAICBQ1rX29yYWNsZVByaWNlAgFfCQCkAwEFB19wZXJpb2QCAV8FCF9hc3NldElkASNnZXRUb3RhbENsYWltZWRGb3JUcmFkZXJBbmRBc3NldEtleQIHX3RyYWRlcghfYXNzZXRJZAkArAICCQCsAgIJAKwCAgkArAICBR9rX3RvdGFsQ2xhaW1lZEZvclRyYWRlckFuZEFzc2V0AgFfBQdfdHJhZGVyAgFfBQhfYXNzZXRJZAENdXBkYXRlQW1tRmVlcwUEX2FtbQdfdHJhZGVyB193ZWVrSWQLX3RyYWRlckZlZXMKX3RvdGFsRmVlcwQNdHJhZGVyRmVlc0tleQkBEmdldEZlZXNJblBlcmlvZEtleQMFBF9hbW0FB190cmFkZXIFB193ZWVrSWQEDHRvdGFsRmVlc0tleQkBF2dldFRvdGFsRmVlc0luUGVyaW9kS2V5AgUEX2FtbQUHX3dlZWtJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNdHJhZGVyRmVlc0tleQULX3RyYWRlckZlZXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDHRvdGFsRmVlc0tleQUKX3RvdGFsRmVlcwUDbmlsAQ11cGRhdGVBbW1EYXRhBwRfYW1tB190cmFkZXIHX3dlZWtJZA5fdHJhZGVyQXZlcmFnZRNfdHJhZGVyTGFzdE5vdGlvbmFsDF90cmFkZXJTY29yZQtfdG90YWxTY29yZQQVdG90YWxTY29yZUluUGVyaW9kS2V5CQEYZ2V0VG90YWxTY29yZUluUGVyaW9kS2V5AgUEX2FtbQUHX3dlZWtJZAQWdHJhZGVyU2NvcmVJblBlcmlvZEtleQkBGWdldFRyYWRlclNjb3JlSW5QZXJpb2RLZXkDBQRfYW1tBQdfdHJhZGVyBQdfd2Vla0lkBA9sYXN0Tm90aW9uYWxLZXkJARJnZXRMYXN0Tm90aW9uYWxLZXkCBQRfYW1tBQdfdHJhZGVyBCB0cmFkZXJBdmVyYWdlTm90aW9uYWxJblBlcmlvZEtleQkBI2dldFRyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kS2V5AwUEX2FtbQUHX3RyYWRlcgUHX3dlZWtJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVdG90YWxTY29yZUluUGVyaW9kS2V5BQtfdG90YWxTY29yZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUWdHJhZGVyU2NvcmVJblBlcmlvZEtleQUMX3RyYWRlclNjb3JlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9sYXN0Tm90aW9uYWxLZXkFE190cmFkZXJMYXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFIHRyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kS2V5BQ5fdHJhZGVyQXZlcmFnZQUDbmlsAQ51c2RuVG9EZWNpbWFscwEHX2Ftb3VudAkAaAIFB19hbW91bnQAZAEMZ2V0V2Vla1N0YXJ0AQdfd2Vla0lkCQBoAgUHX3dlZWtJZAUKTVNfSU5fV0VFSwEKZ2V0V2Vla0VuZAEHX3dlZWtJZAkAaAIJAGQCBQdfd2Vla0lkAAEFCk1TX0lOX1dFRUsBCWdldFdlZWtJZAEDX3RzCQBpAgUDX3RzBQpNU19JTl9XRUVLAQ9nZXRGZWVzSW5QZXJpb2QDBF9hbW0HX3RyYWRlcgdfd2Vla0lkBANrZXkJARJnZXRGZWVzSW5QZXJpb2RLZXkDBQRfYW1tBQdfdHJhZGVyBQdfd2Vla0lkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAARRnZXRUb3RhbEZlZXNJblBlcmlvZAIEX2FtbQdfd2Vla0lkBANrZXkJARdnZXRUb3RhbEZlZXNJblBlcmlvZEtleQIFBF9hbW0FB193ZWVrSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABD2dldExhc3ROb3Rpb25hbAIEX2FtbQdfdHJhZGVyBANrZXkJARJnZXRMYXN0Tm90aW9uYWxLZXkCBQRfYW1tBQdfdHJhZGVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAARZnZXRUcmFkZXJTY29yZUluUGVyaW9kAwRfYW1tB190cmFkZXIHX3dlZWtJZAQDa2V5CQEZZ2V0VHJhZGVyU2NvcmVJblBlcmlvZEtleQMFBF9hbW0FB190cmFkZXIFB193ZWVrSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABFWdldFRvdGFsU2NvcmVJblBlcmlvZAIEX2FtbQdfd2Vla0lkBANrZXkJARhnZXRUb3RhbFNjb3JlSW5QZXJpb2RLZXkCBQRfYW1tBQdfd2Vla0lkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQdnZXRBbW1zAAkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUGa19hbW1zAgABEWdldFJld2FyZEFzc2V0SWRzAAkBCXN0clRvTGlzdAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUQa19yZXdhcmRBc3NldElkcwIAARBnZXRBbW1SZXdhcmRSYXRlAgRfYW1tCF9hc3NldElkBANrZXkJARNnZXRBbW1SZXdhcmRSYXRlS2V5AgUEX2FtbQUIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABGGdldEFtbU1heEFtb3VudFBlclBlcmlvZAIEX2FtbQhfYXNzZXRJZAQDa2V5CQEbZ2V0QW1tTWF4QW1vdW50UGVyUGVyaW9kS2V5AgUEX2FtbQUIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABIGdldFRvdGFsQ2xhaW1lZEZvclRyYWRlckFuZEFzc2V0AgdfdHJhZGVyCF9hc3NldElkBANrZXkJASNnZXRUb3RhbENsYWltZWRGb3JUcmFkZXJBbmRBc3NldEtleQIFB190cmFkZXIFCF9hc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAARNnZXRSZXdhcmRBc3NldFByaWNlAghfYXNzZXRJZAdfd2Vla0lkBBBvcmFjbGVBZGRyZXNzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa19vcmFjbGVBZGRyZXNzAg5PcmFjbGUgbm90IHNldAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFEG9yYWNsZUFkZHJlc3NTdHICFkludmFsaWQgb3JhY2xlIGFkZHJlc3MECHByaWNlS2V5CQERZ2V0T3JhY2xlUHJpY2VLZXkCBQhfYXNzZXRJZAUHX3dlZWtJZAkBDnVzZG5Ub0RlY2ltYWxzAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5CQCsAgIJAKwCAgkArAICAhpObyBvcmFjbGUgcHJpY2UgZm9yIGFzc2V0IAUIX2Fzc2V0SWQCCCBwZXJpb2QgCQCkAwEFB193ZWVrSWQBHnJld2FyZEZvclRyYWRlckluQXNzZXRJblBlcmlvZAQEX2FtbQdfdHJhZGVyCF9hc3NldElkB193ZWVrSWQED3Jld2FyZEFzc2V0UmF0ZQkBEGdldEFtbVJld2FyZFJhdGUCBQRfYW1tBQhfYXNzZXRJZAMJAAACBQ9yZXdhcmRBc3NldFJhdGUAAAAABBF0b3RhbEZlZXNJblBlcmlvZAkBFGdldFRvdGFsRmVlc0luUGVyaW9kAgUEX2FtbQUHX3dlZWtJZAQQcmV3YXJkQXNzZXRQcmljZQkBE2dldFJld2FyZEFzc2V0UHJpY2UCBQhfYXNzZXRJZAUHX3dlZWtJZAQcbWF4QW1vdW50T2ZBc3NldFRvRGlzdHJpYnV0ZQkBGGdldEFtbU1heEFtb3VudFBlclBlcmlvZAIFBF9hbW0FCF9hc3NldElkBAt0cmFkZXJTY29yZQkBFmdldFRyYWRlclNjb3JlSW5QZXJpb2QDBQRfYW1tBQdfdHJhZGVyBQdfd2Vla0lkBBB0b3RhbFRyYWRlclNjb3JlCQEVZ2V0VG90YWxTY29yZUluUGVyaW9kAgUEX2FtbQUHX3dlZWtJZAMJAAACBRB0b3RhbFRyYWRlclNjb3JlAAAAAAQWdG90YWxBc3NldFRvRGlzdHJpYnV0ZQkBBG11bGQCCQEEZGl2ZAIFEXRvdGFsRmVlc0luUGVyaW9kBRByZXdhcmRBc3NldFByaWNlBQ9yZXdhcmRBc3NldFJhdGUEHGFjdHVhbFRvdGFsQXNzZXRUb0Rpc3RyaWJ1dGUJAQRtaW52AgUWdG90YWxBc3NldFRvRGlzdHJpYnV0ZQUcbWF4QW1vdW50T2ZBc3NldFRvRGlzdHJpYnV0ZQQUdHJhZGVyU2hhcmVJblJld2FyZHMJAQRkaXZkAgkBBG11bGQCBRxhY3R1YWxUb3RhbEFzc2V0VG9EaXN0cmlidXRlBQt0cmFkZXJTY29yZQUQdG90YWxUcmFkZXJTY29yZQUUdHJhZGVyU2hhcmVJblJld2FyZHMBI3RvdGFsUmV3YXJkRm9yVHJhZGVySW5Bc3NldEluUGVyaW9kAwdfdHJhZGVyCF9hc3NldElkB193ZWVrSWQEBGFtbXMJAQdnZXRBbW1zAAoBB2NvbXB1dGUCBF9hY2MEX2FtbQkAZAIFBF9hY2MJAR5yZXdhcmRGb3JUcmFkZXJJbkFzc2V0SW5QZXJpb2QEBQRfYW1tBQdfdHJhZGVyBQhfYXNzZXRJZAUHX3dlZWtJZAoAAiRsBQRhbW1zCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjb21wdXRlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQBG3RvdGFsUmV3YXJkRm9yVHJhZGVySW5Bc3NldAMHX3RyYWRlcghfYXNzZXRJZAhfcGVyaW9kcwoBB2NvbXB1dGUCBF9hY2MHX3dlZWtJZAkAZAIFBF9hY2MJASN0b3RhbFJld2FyZEZvclRyYWRlckluQXNzZXRJblBlcmlvZAMFB190cmFkZXIFCF9hc3NldElkBQdfd2Vla0lkCgACJGwFCF9wZXJpb2RzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjb21wdXRlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgEgZ2V0VHJhZGVyQXZlcmFnZU5vdGlvbmFsSW5QZXJpb2QEBF9hbW0HX3RyYWRlcgdfd2Vla0lkDV9kZWZhdWx0VmFsdWUEA2tleQkBI2dldFRyYWRlckF2ZXJhZ2VOb3Rpb25hbEluUGVyaW9kS2V5AwUEX2FtbQUHX3RyYWRlcgUHX3dlZWtJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFDV9kZWZhdWx0VmFsdWUBCWlzQ2xhaW1lZAMHX3RyYWRlcghfYXNzZXRJZAdfcGVyaW9kBANrZXkJAR5nZXRDbGFpbWVkVHJhZGVyQXNzZXRQZXJpb2RLZXkDBQdfdHJhZGVyBQhfYXNzZXRJZAUHX3BlcmlvZAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHASBjbGFpbUFsbFJld2FyZEZvclBlcmlvZEZvclRyYWRlcgMHX3RyYWRlcghfYXNzZXRJZAhfcGVyaW9kcwQHcGVyaW9kcwkBCXN0clRvTGlzdAEFCF9wZXJpb2RzCgEQY2hlY2tBbmRGaWx0ZXJGbgIEX2FjYwVfbmV4dAQGcGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQUFX25leHQJAKwCAgIQSW52YWxpZCBwZXJpb2Q6IAUFX25leHQDAwkBD2NvbnRhaW5zRWxlbWVudAIFBF9hY2MFBnBlcmlvZAYJAQlpc0NsYWltZWQDBQdfdHJhZGVyBQhfYXNzZXRJZAUGcGVyaW9kBQRfYWNjCQDNCAIFBF9hY2MFBnBlcmlvZAQMdmFsaWRQZXJpb2RzCgACJGwFB3BlcmlvZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNoZWNrQW5kRmlsdGVyRm4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASCgESbWFya1BlcmlvZEFzRG9uZUZuAgRfYWNjB19wZXJpb2QJAM0IAgUEX2FjYwkBDEJvb2xlYW5FbnRyeQIJAR5nZXRDbGFpbWVkVHJhZGVyQXNzZXRQZXJpb2RLZXkDBQdfdHJhZGVyBQhfYXNzZXRJZAUHX3BlcmlvZAYEFG1hcmtQZXJpb2RzQXNDbGFpbWVkCgACJGwFDHZhbGlkUGVyaW9kcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQESbWFya1BlcmlvZEFzRG9uZUZuAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxOAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgQGYW1vdW50CQEbdG90YWxSZXdhcmRGb3JUcmFkZXJJbkFzc2V0AwUHX3RyYWRlcgUIX2Fzc2V0SWQFDHZhbGlkUGVyaW9kcwkAlAoCBQZhbW91bnQJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQdfdHJhZGVyBQZhbW91bnQJANkEAQUIX2Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJASNnZXRUb3RhbENsYWltZWRGb3JUcmFkZXJBbmRBc3NldEtleQIFB190cmFkZXIFCF9hc3NldElkCQBkAgkBIGdldFRvdGFsQ2xhaW1lZEZvclRyYWRlckFuZEFzc2V0AgUHX3RyYWRlcgUIX2Fzc2V0SWQFBmFtb3VudAUDbmlsBRRtYXJrUGVyaW9kc0FzQ2xhaW1lZAkBaQEKaW5pdGlhbGl6ZQIMX2Nvb3JkaW5hdG9yB19vcmFjbGUDCQELaW5pdGlhbGl6ZWQACQACAQITQWxyZWFkeSBpbml0aWFsaXplZAkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tfb3JhY2xlQWRkcmVzcwUHX29yYWNsZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpARBzZXRPcmFjbGVBZGRyZXNzAQdfb3JhY2xlAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAiNJbnZhbGlkIHNldE9yYWNsZUFkZHJlc3MgcGFyYW1ldGVycwkAzAgCCQELU3RyaW5nRW50cnkCBQ9rX29yYWNsZUFkZHJlc3MFB19vcmFjbGUFA25pbAFpARF2aWV3X2NsYWltUmV3YXJkcwMHX3RyYWRlcghfYXNzZXRJZAdfcGVyaW9kCQACAQkApAMBCQEbdG90YWxSZXdhcmRGb3JUcmFkZXJJbkFzc2V0AwUHX3RyYWRlcgUIX2Fzc2V0SWQJAMwIAgUHX3BlcmlvZAUDbmlsAWkBD3ZpZXdfY2FsY1Jld2FyZAQHX3RyYWRlcgRfYW1tCF9hc3NldElkB19wZXJpb2QJAAIBCQCkAwEJAR5yZXdhcmRGb3JUcmFkZXJJbkFzc2V0SW5QZXJpb2QEBQRfYW1tBQhfYXNzZXRJZAUHX3RyYWRlcgUHX3BlcmlvZAFpARR2aWV3X2NsYWltQWxsUmV3YXJkcwMHX3RyYWRlcghfYXNzZXRJZAhfcGVyaW9kcwQGcmVzdWx0CQEgY2xhaW1BbGxSZXdhcmRGb3JQZXJpb2RGb3JUcmFkZXIDBQdfdHJhZGVyBQhfYXNzZXRJZAUIX3BlcmlvZHMJAAIBCQCsAgIJAKwCAgkApAMBCAUGcmVzdWx0Al8xAgEsCQCkAwEJASBnZXRUb3RhbENsYWltZWRGb3JUcmFkZXJBbmRBc3NldAIFB190cmFkZXIFCF9hc3NldElkAWkBD2NsYWltQWxsUmV3YXJkcwIIX2Fzc2V0SWQIX3BlcmlvZHMEBnRyYWRlcgkApQgBCAUBaQZjYWxsZXIEDSR0MDEyNjM4MTI3MjEJASBjbGFpbUFsbFJld2FyZEZvclBlcmlvZEZvclRyYWRlcgMFBnRyYWRlcgUIX2Fzc2V0SWQFCF9wZXJpb2RzBAZhbW91bnQIBQ0kdDAxMjYzODEyNzIxAl8xBAZyZXN1bHQIBQ0kdDAxMjYzODEyNzIxAl8yAwkAAAIFBmFtb3VudAAACQACAQIQTm90aGluZyB0byBjbGFpbQUGcmVzdWx0AWkBDWF0dGFjaFJld2FyZHMEBF9hbW0IX2Fzc2V0SWQTX21heEFtb3VudFBlclBlcmlvZAtfcmV3YXJkUmF0ZQMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIcSW52YWxpZCBhdHRhY2hSZXdhcmRzIHBhcmFtcwQEYW1tcwkBB2dldEFtbXMABA5yZXdhcmRBc3NldElkcwkBEWdldFJld2FyZEFzc2V0SWRzAAQHbmV3QW1tcwMJAQ9jb250YWluc0VsZW1lbnQCBQRhbW1zBQRfYW1tBQRhbW1zCQDNCAIFBGFtbXMFBF9hbW0EEW5ld1Jld2FyZEFzc2V0SWRzAwkBD2NvbnRhaW5zRWxlbWVudAIFDnJld2FyZEFzc2V0SWRzBQhfYXNzZXRJZAUOcmV3YXJkQXNzZXRJZHMJAM0IAgUOcmV3YXJkQXNzZXRJZHMFCF9hc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETZ2V0QW1tUmV3YXJkUmF0ZUtleQIFBF9hbW0FCF9hc3NldElkBQtfcmV3YXJkUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG2dldEFtbU1heEFtb3VudFBlclBlcmlvZEtleQIFBF9hbW0FCF9hc3NldElkBRNfbWF4QW1vdW50UGVyUGVyaW9kCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtfYW1tcwkBCWxpc3RUb1N0cgEFB25ld0FtbXMJAMwIAgkBC1N0cmluZ0VudHJ5AgUQa19yZXdhcmRBc3NldElkcwkBCWxpc3RUb1N0cgEFEW5ld1Jld2FyZEFzc2V0SWRzBQNuaWwBaQEKbm90aWZ5RmVlcwIHX3RyYWRlcgRfZmVlBANhbW0JAKUIAQgFAWkGY2FsbGVyAwMJAQEhAQkBC2lzV2hpdGVsaXN0AQUDYW1tBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIZSW52YWxpZCBub3RpZnlGZWVzIHBhcmFtcwQJYWN0dWFsRmVlCQEOdXNkblRvRGVjaW1hbHMBBQRfZmVlBAJ0cwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBndlZWtJZAkBCWdldFdlZWtJZAEFAnRzBAxmZWVzSW5QZXJpb2QJAQ9nZXRGZWVzSW5QZXJpb2QDBQNhbW0FB190cmFkZXIFBndlZWtJZAQRdG90YWxGZWVzSW5QZXJpb2QJARRnZXRUb3RhbEZlZXNJblBlcmlvZAIFA2FtbQUGd2Vla0lkBA9uZXdGZWVzSW5QZXJpb2QJAGQCBQxmZWVzSW5QZXJpb2QFCWFjdHVhbEZlZQQUbmV3VG90YWxGZWVzSW5QZXJpb2QJAGQCBRF0b3RhbEZlZXNJblBlcmlvZAUJYWN0dWFsRmVlCQENdXBkYXRlQW1tRmVlcwUFA2FtbQUHX3RyYWRlcgUGd2Vla0lkBQ9uZXdGZWVzSW5QZXJpb2QFFG5ld1RvdGFsRmVlc0luUGVyaW9kAWkBDm5vdGlmeU5vdGlvbmFsAgdfdHJhZGVyCV9ub3Rpb25hbAQDYW1tCQClCAEIBQFpBmNhbGxlcgMDCQEBIQEJAQtpc1doaXRlbGlzdAEFA2FtbQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgbm90aWZ5Tm90aW9uYWwgcGFyYW1zBA5hY3R1YWxOb3Rpb25hbAkBDnVzZG5Ub0RlY2ltYWxzAQUJX25vdGlvbmFsBAJ0cwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDGxhc3ROb3Rpb25hbAkBD2dldExhc3ROb3Rpb25hbAIFA2FtbQUHX3RyYWRlcgQGd2Vla0lkCQEJZ2V0V2Vla0lkAQUCdHMECXdlZWtTdGFydAkBDGdldFdlZWtTdGFydAEFBndlZWtJZAQHd2Vla0VuZAkBCmdldFdlZWtFbmQBBQZ3ZWVrSWQEAXQJAGUCBQd3ZWVrRW5kBQl3ZWVrU3RhcnQEEW9sZFJ1bm5pbmdBdmVyYWdlCQEgZ2V0VHJhZGVyQXZlcmFnZU5vdGlvbmFsSW5QZXJpb2QEBQNhbW0FB190cmFkZXIFBndlZWtJZAUMbGFzdE5vdGlvbmFsBAF3CQEEZGl2ZAIJAGUCBQd3ZWVrRW5kBQJ0cwUBdAQRb2xkVHJhZGVyQW1tU2NvcmUJARZnZXRUcmFkZXJTY29yZUluUGVyaW9kAwUDYW1tBQdfdHJhZGVyBQZ3ZWVrSWQEEG9sZFRvdGFsQW1tU2NvcmUJARVnZXRUb3RhbFNjb3JlSW5QZXJpb2QCBQNhbW0FBndlZWtJZAQEZmVlcwkBD2dldEZlZXNJblBlcmlvZAMFA2FtbQUHX3RyYWRlcgUGd2Vla0lkBBFuZXdSdW5uaW5nQXZlcmFnZQkAZQIJAGQCBRFvbGRSdW5uaW5nQXZlcmFnZQkBBG11bGQCBQ5hY3R1YWxOb3Rpb25hbAUBdwkBBG11bGQCBQxsYXN0Tm90aW9uYWwFAXcEEW5ld1RyYWRlckFtbVNjb3JlCQEEbXVsZAIJAQRwb3dkAgUEZmVlcwUBQQkBBHBvd2QCBRFuZXdSdW5uaW5nQXZlcmFnZQkAZQIFDERFQ0lNQUxfVU5JVAUBQQQYbmV3VG90YWxBbW1TY29yZUluUGVyaW9kCQBkAgkAZQIFEG9sZFRvdGFsQW1tU2NvcmUFEW9sZFRyYWRlckFtbVNjb3JlBRFuZXdUcmFkZXJBbW1TY29yZQkBDXVwZGF0ZUFtbURhdGEHBQNhbW0FB190cmFkZXIFBndlZWtJZAURbmV3UnVubmluZ0F2ZXJhZ2UFDmFjdHVhbE5vdGlvbmFsBRFuZXdUcmFkZXJBbW1TY29yZQUYbmV3VG90YWxBbW1TY29yZUluUGVyaW9kAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5ANJswHw=", "height": 3242647, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GB6pCuAVwWBNgPNM2dvEEyMTTLM45FjwjDc863s9E9dz Next: 1c7XbzZKMg9tqUH85cgKpViy3P2wMRBVH3axJZAbASd Diff:
OldNewDifferences
370370
371371
372372 @Callable(i)
373+func setOracleAddress (_oracle) = if (if (!(initialized()))
374+ then true
375+ else (i.caller != adminAddress()))
376+ then throw("Invalid setOracleAddress parameters")
377+ else [StringEntry(k_oracleAddress, _oracle)]
378+
379+
380+
381+@Callable(i)
373382 func view_claimRewards (_trader,_assetId,_period) = throw(toString(totalRewardForTraderInAsset(_trader, _assetId, [_period])))
374383
375384
390399 @Callable(i)
391400 func claimAllRewards (_assetId,_periods) = {
392401 let trader = toString(i.caller)
393- let $t01235912442 = claimAllRewardForPeriodForTrader(trader, _assetId, _periods)
394- let amount = $t01235912442._1
395- let result = $t01235912442._2
402+ let $t01263812721 = claimAllRewardForPeriodForTrader(trader, _assetId, _periods)
403+ let amount = $t01263812721._1
404+ let result = $t01263812721._2
396405 if ((amount == 0))
397406 then throw("Nothing to claim")
398407 else result
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_totalFeesInPeriod = "k_totalFeesInPeriod"
55
66 let k_traderFeesInPeriod = "k_traderFeesInPeriod"
77
88 let k_lastNotional = "k_lastNotional"
99
1010 let k_totalScoreInPeriod = "k_totalScoreInPeriod"
1111
1212 let k_traderScoreInPeriod = "k_traderScoreInPeriod"
1313
1414 let k_traderAverageNotionalInPeriod = "k_traderAverageNotionalInPeriod"
1515
1616 let k_ammRewardRate = "k_ammRewardRate"
1717
1818 let k_ammMaxAmountPerPeriod = "k_ammMaxAmountPerPeriod"
1919
2020 let k_rewardAssetIds = "k_rewardAssetIds"
2121
2222 let k_amms = "k_amms"
2323
2424 let k_claimedAssetAndPeriod = "k_claimedAssetAndPeriod"
2525
2626 let k_oracleAddress = "k_oracleAddress"
2727
2828 let k_oraclePrice = "price"
2929
3030 let k_totalClaimedForTraderAndAsset = "k_totalClaimedForTraderAndAsset"
3131
3232 let k_initialized = "k_initialized"
3333
3434 let k_coordinatorAddress = "k_coordinatorAddress"
3535
3636 let k_governance_asset = "k_gov_asset"
3737
3838 let k_quote_asset = "k_quote_asset"
3939
4040 let k_admin_public_key = "k_admin_public_key"
4141
4242 let k_admin_address = "k_admin_address"
4343
4444 let k_amm = "k_amm"
4545
4646 let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
4747
4848 let A = 70000000
4949
5050 let MS_IN_WEEK = (1000 * 604800)
5151
5252 func listToStr (_list) = {
5353 func _join (accumulator,val) = ((accumulator + val) + ",")
5454
5555 let newListStr = {
5656 let $l = _list
5757 let $s = size($l)
5858 let $acc0 = ""
5959 func $f0_1 ($a,$i) = if (($i >= $s))
6060 then $a
6161 else _join($a, $l[$i])
6262
6363 func $f0_2 ($a,$i) = if (($i >= $s))
6464 then $a
6565 else throw("List size exceeds 100")
6666
6767 $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($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($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($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), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
6868 }
6969 let newListStrU = dropRight(newListStr, 1)
7070 let newListStrR = if ((take(newListStrU, 1) == ","))
7171 then drop(newListStrU, 1)
7272 else newListStrU
7373 newListStrR
7474 }
7575
7676
7777 func strToList (_str) = if ((_str == ""))
7878 then nil
7979 else split(_str, ",")
8080
8181
8282 func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
8383
8484
8585 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
8686
8787
8888 func powd (_x,_y) = pow(_x, 8, _y, 8, 8, HALFEVEN)
8989
9090
9191 func abs (_x) = if ((_x > 0))
9292 then _x
9393 else -(_x)
9494
9595
9696 func minv (_x,_y) = if ((_x > _y))
9797 then _y
9898 else _x
9999
100100
101101 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
102102
103103
104104 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
105105
106106
107107 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
108108
109109
110110 func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
111111
112112
113113 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
114114
115115
116116 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
117117
118118
119119 func int0 (k) = valueOrElse(getInteger(this, k), 0)
120120
121121
122122 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
123123
124124
125125 func getFeesInPeriodKey (_amm,_trader,_weekId) = ((((((k_traderFeesInPeriod + "_") + _amm) + "_") + _trader) + "_") + toString(_weekId))
126126
127127
128128 func getTotalFeesInPeriodKey (_amm,_weekId) = ((((k_totalFeesInPeriod + "_") + _amm) + "_") + toString(_weekId))
129129
130130
131131 func getLastNotionalKey (_amm,_trader) = ((((k_lastNotional + "_") + _amm) + "_") + _trader)
132132
133133
134134 func getTraderScoreInPeriodKey (_amm,_trader,_weekId) = ((((((k_traderScoreInPeriod + "_") + _amm) + "_") + _trader) + "_") + toString(_weekId))
135135
136136
137137 func getTotalScoreInPeriodKey (_amm,_weekId) = ((((k_totalScoreInPeriod + "_") + _amm) + "_") + toString(_weekId))
138138
139139
140140 func getTraderAverageNotionalInPeriodKey (_amm,_trader,_weekId) = ((((((k_traderAverageNotionalInPeriod + "_") + _amm) + "_") + _trader) + "_") + toString(_weekId))
141141
142142
143143 func getAmmRewardRateKey (_amm,_assetId) = ((((k_ammRewardRate + "_") + _amm) + "_") + _assetId)
144144
145145
146146 func getAmmMaxAmountPerPeriodKey (_amm,_assetId) = ((((k_ammMaxAmountPerPeriod + "_") + _amm) + "_") + _assetId)
147147
148148
149149 func getClaimedTraderAssetPeriodKey (_trader,_assetId,_period) = ((((((k_claimedAssetAndPeriod + "_") + _trader) + "_") + _assetId) + "_") + toString(_period))
150150
151151
152152 func getOraclePriceKey (_assetId,_period) = ((((k_oraclePrice + "_") + toString(_period)) + "_") + _assetId)
153153
154154
155155 func getTotalClaimedForTraderAndAssetKey (_trader,_assetId) = ((((k_totalClaimedForTraderAndAsset + "_") + _trader) + "_") + _assetId)
156156
157157
158158 func updateAmmFees (_amm,_trader,_weekId,_traderFees,_totalFees) = {
159159 let traderFeesKey = getFeesInPeriodKey(_amm, _trader, _weekId)
160160 let totalFeesKey = getTotalFeesInPeriodKey(_amm, _weekId)
161161 [IntegerEntry(traderFeesKey, _traderFees), IntegerEntry(totalFeesKey, _totalFees)]
162162 }
163163
164164
165165 func updateAmmData (_amm,_trader,_weekId,_traderAverage,_traderLastNotional,_traderScore,_totalScore) = {
166166 let totalScoreInPeriodKey = getTotalScoreInPeriodKey(_amm, _weekId)
167167 let traderScoreInPeriodKey = getTraderScoreInPeriodKey(_amm, _trader, _weekId)
168168 let lastNotionalKey = getLastNotionalKey(_amm, _trader)
169169 let traderAverageNotionalInPeriodKey = getTraderAverageNotionalInPeriodKey(_amm, _trader, _weekId)
170170 [IntegerEntry(totalScoreInPeriodKey, _totalScore), IntegerEntry(traderScoreInPeriodKey, _traderScore), IntegerEntry(lastNotionalKey, _traderLastNotional), IntegerEntry(traderAverageNotionalInPeriodKey, _traderAverage)]
171171 }
172172
173173
174174 func usdnToDecimals (_amount) = (_amount * 100)
175175
176176
177177 func getWeekStart (_weekId) = (_weekId * MS_IN_WEEK)
178178
179179
180180 func getWeekEnd (_weekId) = ((_weekId + 1) * MS_IN_WEEK)
181181
182182
183183 func getWeekId (_ts) = (_ts / MS_IN_WEEK)
184184
185185
186186 func getFeesInPeriod (_amm,_trader,_weekId) = {
187187 let key = getFeesInPeriodKey(_amm, _trader, _weekId)
188188 valueOrElse(getInteger(this, key), 0)
189189 }
190190
191191
192192 func getTotalFeesInPeriod (_amm,_weekId) = {
193193 let key = getTotalFeesInPeriodKey(_amm, _weekId)
194194 valueOrElse(getInteger(this, key), 0)
195195 }
196196
197197
198198 func getLastNotional (_amm,_trader) = {
199199 let key = getLastNotionalKey(_amm, _trader)
200200 valueOrElse(getInteger(this, key), 0)
201201 }
202202
203203
204204 func getTraderScoreInPeriod (_amm,_trader,_weekId) = {
205205 let key = getTraderScoreInPeriodKey(_amm, _trader, _weekId)
206206 valueOrElse(getInteger(this, key), 0)
207207 }
208208
209209
210210 func getTotalScoreInPeriod (_amm,_weekId) = {
211211 let key = getTotalScoreInPeriodKey(_amm, _weekId)
212212 valueOrElse(getInteger(this, key), 0)
213213 }
214214
215215
216216 func getAmms () = strToList(valueOrElse(getString(this, k_amms), ""))
217217
218218
219219 func getRewardAssetIds () = strToList(valueOrElse(getString(this, k_rewardAssetIds), ""))
220220
221221
222222 func getAmmRewardRate (_amm,_assetId) = {
223223 let key = getAmmRewardRateKey(_amm, _assetId)
224224 valueOrElse(getInteger(this, key), 0)
225225 }
226226
227227
228228 func getAmmMaxAmountPerPeriod (_amm,_assetId) = {
229229 let key = getAmmMaxAmountPerPeriodKey(_amm, _assetId)
230230 valueOrElse(getInteger(this, key), 0)
231231 }
232232
233233
234234 func getTotalClaimedForTraderAndAsset (_trader,_assetId) = {
235235 let key = getTotalClaimedForTraderAndAssetKey(_trader, _assetId)
236236 valueOrElse(getInteger(this, key), 0)
237237 }
238238
239239
240240 func getRewardAssetPrice (_assetId,_weekId) = {
241241 let oracleAddressStr = valueOrErrorMessage(getString(this, k_oracleAddress), "Oracle not set")
242242 let oracleAddress = valueOrErrorMessage(addressFromString(oracleAddressStr), "Invalid oracle address")
243243 let priceKey = getOraclePriceKey(_assetId, _weekId)
244244 usdnToDecimals(valueOrErrorMessage(getInteger(oracleAddress, priceKey), ((("No oracle price for asset " + _assetId) + " period ") + toString(_weekId))))
245245 }
246246
247247
248248 func rewardForTraderInAssetInPeriod (_amm,_trader,_assetId,_weekId) = {
249249 let rewardAssetRate = getAmmRewardRate(_amm, _assetId)
250250 if ((rewardAssetRate == 0))
251251 then 0
252252 else {
253253 let totalFeesInPeriod = getTotalFeesInPeriod(_amm, _weekId)
254254 let rewardAssetPrice = getRewardAssetPrice(_assetId, _weekId)
255255 let maxAmountOfAssetToDistribute = getAmmMaxAmountPerPeriod(_amm, _assetId)
256256 let traderScore = getTraderScoreInPeriod(_amm, _trader, _weekId)
257257 let totalTraderScore = getTotalScoreInPeriod(_amm, _weekId)
258258 if ((totalTraderScore == 0))
259259 then 0
260260 else {
261261 let totalAssetToDistribute = muld(divd(totalFeesInPeriod, rewardAssetPrice), rewardAssetRate)
262262 let actualTotalAssetToDistribute = minv(totalAssetToDistribute, maxAmountOfAssetToDistribute)
263263 let traderShareInRewards = divd(muld(actualTotalAssetToDistribute, traderScore), totalTraderScore)
264264 traderShareInRewards
265265 }
266266 }
267267 }
268268
269269
270270 func totalRewardForTraderInAssetInPeriod (_trader,_assetId,_weekId) = {
271271 let amms = getAmms()
272272 func compute (_acc,_amm) = (_acc + rewardForTraderInAssetInPeriod(_amm, _trader, _assetId, _weekId))
273273
274274 let $l = amms
275275 let $s = size($l)
276276 let $acc0 = 0
277277 func $f0_1 ($a,$i) = if (($i >= $s))
278278 then $a
279279 else compute($a, $l[$i])
280280
281281 func $f0_2 ($a,$i) = if (($i >= $s))
282282 then $a
283283 else throw("List size exceeds 20")
284284
285285 $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)
286286 }
287287
288288
289289 func totalRewardForTraderInAsset (_trader,_assetId,_periods) = {
290290 func compute (_acc,_weekId) = (_acc + totalRewardForTraderInAssetInPeriod(_trader, _assetId, _weekId))
291291
292292 let $l = _periods
293293 let $s = size($l)
294294 let $acc0 = 0
295295 func $f0_1 ($a,$i) = if (($i >= $s))
296296 then $a
297297 else compute($a, $l[$i])
298298
299299 func $f0_2 ($a,$i) = if (($i >= $s))
300300 then $a
301301 else throw("List size exceeds 18")
302302
303303 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
304304 }
305305
306306
307307 func getTraderAverageNotionalInPeriod (_amm,_trader,_weekId,_defaultValue) = {
308308 let key = getTraderAverageNotionalInPeriodKey(_amm, _trader, _weekId)
309309 valueOrElse(getInteger(this, key), _defaultValue)
310310 }
311311
312312
313313 func isClaimed (_trader,_assetId,_period) = {
314314 let key = getClaimedTraderAssetPeriodKey(_trader, _assetId, _period)
315315 valueOrElse(getBoolean(this, key), false)
316316 }
317317
318318
319319 func claimAllRewardForPeriodForTrader (_trader,_assetId,_periods) = {
320320 let periods = strToList(_periods)
321321 func checkAndFilterFn (_acc,_next) = {
322322 let period = valueOrErrorMessage(parseInt(_next), ("Invalid period: " + _next))
323323 if (if (containsElement(_acc, period))
324324 then true
325325 else isClaimed(_trader, _assetId, period))
326326 then _acc
327327 else (_acc :+ period)
328328 }
329329
330330 let validPeriods = {
331331 let $l = periods
332332 let $s = size($l)
333333 let $acc0 = nil
334334 func $f0_1 ($a,$i) = if (($i >= $s))
335335 then $a
336336 else checkAndFilterFn($a, $l[$i])
337337
338338 func $f0_2 ($a,$i) = if (($i >= $s))
339339 then $a
340340 else throw("List size exceeds 18")
341341
342342 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
343343 }
344344 func markPeriodAsDoneFn (_acc,_period) = (_acc :+ BooleanEntry(getClaimedTraderAssetPeriodKey(_trader, _assetId, _period), true))
345345
346346 let markPeriodsAsClaimed = {
347347 let $l = validPeriods
348348 let $s = size($l)
349349 let $acc0 = nil
350350 func $f1_1 ($a,$i) = if (($i >= $s))
351351 then $a
352352 else markPeriodAsDoneFn($a, $l[$i])
353353
354354 func $f1_2 ($a,$i) = if (($i >= $s))
355355 then $a
356356 else throw("List size exceeds 18")
357357
358358 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
359359 }
360360 let amount = totalRewardForTraderInAsset(_trader, _assetId, validPeriods)
361361 $Tuple2(amount, ([ScriptTransfer(addressFromStringValue(_trader), amount, fromBase58String(_assetId)), IntegerEntry(getTotalClaimedForTraderAndAssetKey(_trader, _assetId), (getTotalClaimedForTraderAndAsset(_trader, _assetId) + amount))] ++ markPeriodsAsClaimed))
362362 }
363363
364364
365365 @Callable(i)
366366 func initialize (_coordinator,_oracle) = if (initialized())
367367 then throw("Already initialized")
368368 else [StringEntry(k_coordinatorAddress, _coordinator), StringEntry(k_oracleAddress, _oracle), BooleanEntry(k_initialized, true)]
369369
370370
371371
372372 @Callable(i)
373+func setOracleAddress (_oracle) = if (if (!(initialized()))
374+ then true
375+ else (i.caller != adminAddress()))
376+ then throw("Invalid setOracleAddress parameters")
377+ else [StringEntry(k_oracleAddress, _oracle)]
378+
379+
380+
381+@Callable(i)
373382 func view_claimRewards (_trader,_assetId,_period) = throw(toString(totalRewardForTraderInAsset(_trader, _assetId, [_period])))
374383
375384
376385
377386 @Callable(i)
378387 func view_calcReward (_trader,_amm,_assetId,_period) = throw(toString(rewardForTraderInAssetInPeriod(_amm, _assetId, _trader, _period)))
379388
380389
381390
382391 @Callable(i)
383392 func view_claimAllRewards (_trader,_assetId,_periods) = {
384393 let result = claimAllRewardForPeriodForTrader(_trader, _assetId, _periods)
385394 throw(((toString(result._1) + ",") + toString(getTotalClaimedForTraderAndAsset(_trader, _assetId))))
386395 }
387396
388397
389398
390399 @Callable(i)
391400 func claimAllRewards (_assetId,_periods) = {
392401 let trader = toString(i.caller)
393- let $t01235912442 = claimAllRewardForPeriodForTrader(trader, _assetId, _periods)
394- let amount = $t01235912442._1
395- let result = $t01235912442._2
402+ let $t01263812721 = claimAllRewardForPeriodForTrader(trader, _assetId, _periods)
403+ let amount = $t01263812721._1
404+ let result = $t01263812721._2
396405 if ((amount == 0))
397406 then throw("Nothing to claim")
398407 else result
399408 }
400409
401410
402411
403412 @Callable(i)
404413 func attachRewards (_amm,_assetId,_maxAmountPerPeriod,_rewardRate) = if (if (!(initialized()))
405414 then true
406415 else (i.caller != adminAddress()))
407416 then throw("Invalid attachRewards params")
408417 else {
409418 let amms = getAmms()
410419 let rewardAssetIds = getRewardAssetIds()
411420 let newAmms = if (containsElement(amms, _amm))
412421 then amms
413422 else (amms :+ _amm)
414423 let newRewardAssetIds = if (containsElement(rewardAssetIds, _assetId))
415424 then rewardAssetIds
416425 else (rewardAssetIds :+ _assetId)
417426 [IntegerEntry(getAmmRewardRateKey(_amm, _assetId), _rewardRate), IntegerEntry(getAmmMaxAmountPerPeriodKey(_amm, _assetId), _maxAmountPerPeriod), StringEntry(k_amms, listToStr(newAmms)), StringEntry(k_rewardAssetIds, listToStr(newRewardAssetIds))]
418427 }
419428
420429
421430
422431 @Callable(i)
423432 func notifyFees (_trader,_fee) = {
424433 let amm = toString(i.caller)
425434 if (if (!(isWhitelist(amm)))
426435 then true
427436 else !(initialized()))
428437 then throw("Invalid notifyFees params")
429438 else {
430439 let actualFee = usdnToDecimals(_fee)
431440 let ts = lastBlock.timestamp
432441 let weekId = getWeekId(ts)
433442 let feesInPeriod = getFeesInPeriod(amm, _trader, weekId)
434443 let totalFeesInPeriod = getTotalFeesInPeriod(amm, weekId)
435444 let newFeesInPeriod = (feesInPeriod + actualFee)
436445 let newTotalFeesInPeriod = (totalFeesInPeriod + actualFee)
437446 updateAmmFees(amm, _trader, weekId, newFeesInPeriod, newTotalFeesInPeriod)
438447 }
439448 }
440449
441450
442451
443452 @Callable(i)
444453 func notifyNotional (_trader,_notional) = {
445454 let amm = toString(i.caller)
446455 if (if (!(isWhitelist(amm)))
447456 then true
448457 else !(initialized()))
449458 then throw("Invalid notifyNotional params")
450459 else {
451460 let actualNotional = usdnToDecimals(_notional)
452461 let ts = lastBlock.timestamp
453462 let lastNotional = getLastNotional(amm, _trader)
454463 let weekId = getWeekId(ts)
455464 let weekStart = getWeekStart(weekId)
456465 let weekEnd = getWeekEnd(weekId)
457466 let t = (weekEnd - weekStart)
458467 let oldRunningAverage = getTraderAverageNotionalInPeriod(amm, _trader, weekId, lastNotional)
459468 let w = divd((weekEnd - ts), t)
460469 let oldTraderAmmScore = getTraderScoreInPeriod(amm, _trader, weekId)
461470 let oldTotalAmmScore = getTotalScoreInPeriod(amm, weekId)
462471 let fees = getFeesInPeriod(amm, _trader, weekId)
463472 let newRunningAverage = ((oldRunningAverage + muld(actualNotional, w)) - muld(lastNotional, w))
464473 let newTraderAmmScore = muld(powd(fees, A), powd(newRunningAverage, (DECIMAL_UNIT - A)))
465474 let newTotalAmmScoreInPeriod = ((oldTotalAmmScore - oldTraderAmmScore) + newTraderAmmScore)
466475 updateAmmData(amm, _trader, weekId, newRunningAverage, actualNotional, newTraderAmmScore, newTotalAmmScoreInPeriod)
467476 }
468477 }
469478
470479
471480 @Verifier(tx)
472481 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
473482

github/deemru/w8io/3ef1775 
53.21 ms