tx · J6qmvhu69AkJBPVTCPWy2MkQKD8MZA5ETQhGdBtFJtSy

3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy:  -0.03700000 Waves

2022.10.20 20:24 [2281028] smart account 3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy > SELF 0.00000000 Waves

{ "type": 13, "id": "J6qmvhu69AkJBPVTCPWy2MkQKD8MZA5ETQhGdBtFJtSy", "fee": 3700000, "feeAssetId": null, "timestamp": 1666286774105, "version": 2, "chainId": 84, "sender": "3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy", "senderPublicKey": "GzEvTfwa3251fRwyTL99QzUmkDGBdn4cNr2mR6XQ1UmR", "proofs": [ "2upCPtYERcih4NhkqqawyHcHLBoJic4dEhvZC1ZaGxHwNJgKEyozRoRsFL4CuUjv4ReotP4jhxcWCpvkuk5p5EuX" ], "script": "base64:BgIgCAISAwoBCBIAEgMKAQESABIAEgASAwoBCBIDCgEIEgA2AA1rX3RvdGFsU3VwcGx5Ag1rX3RvdGFsU3VwcGx5AA9rX3Jld2FyZEJhbGFuY2UCD2tfcmV3YXJkQmFsYW5jZQAQa19sYXN0VXBkYXRlVGltZQIQa19sYXN0VXBkYXRlVGltZQAWa19yZXdhcmRQZXJUb2tlblN0b3JlZAIWa19yZXdhcmRQZXJUb2tlblN0b3JlZAAMa19yZXdhcmRSYXRlAgxrX3Jld2FyZFJhdGUADmtfcGVyaW9kRmluaXNoAg5rX3BlcmlvZEZpbmlzaAAJa19iYWxhbmNlAglrX2JhbGFuY2UAFGtfdXNlclJld2FyZFBlclRva2VuAhRrX3VzZXJSZXdhcmRQZXJUb2tlbgAMa191c2VyUmV3YXJkAgxrX3VzZXJSZXdhcmQADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwASa19nb3Zlcm5hbmNlX2Fzc2V0AgtrX2dvdl9hc3NldAANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAASa19hZG1pbl9wdWJsaWNfa2V5AhJrX2FkbWluX3B1YmxpY19rZXkAEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2FkbWluX3B1YmxpY19rZXkBD2dvdmVybmFuY2VBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5tYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX21hbmFnZXJfYWRkcmVzcwIPTWFuYWdlciBub3Qgc2V0AAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAoACgAIRFVSQVRJT04JAGgCCQBoAgA8ADwAGAAKTk9fQUREUkVTUwIAAAlOT19TVEFLRVIAAAEQdXNkbkZyb21EZWNpbWFscwEHX2Ftb3VudAkAaQIFB19hbW91bnQAZAEOdXNkblRvRGVjaW1hbHMBB19hbW91bnQJAGgCBQdfYW1vdW50AGQBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBA2ludAEBawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFAWsJAKwCAgINbm8gdmFsdWUgZm9yIAUBawEEaW50MAEBawkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFrAAABC3RvdGFsU3VwcGx5AAkBBGludDABBQ1rX3RvdGFsU3VwcGx5ARRyZXdhcmRQZXJUb2tlblN0b3JlZAAJAQRpbnQwAQUWa19yZXdhcmRQZXJUb2tlblN0b3JlZAEObGFzdFVwZGF0ZVRpbWUACQEEaW50MAEFEGtfbGFzdFVwZGF0ZVRpbWUBCnJld2FyZFJhdGUACQEEaW50MAEFDGtfcmV3YXJkUmF0ZQEMcGVyaW9kRmluaXNoAAkBBGludDABBQ5rX3BlcmlvZEZpbmlzaAENcmV3YXJkQmFsYW5jZQAJAQRpbnQwAQUPa19yZXdhcmRCYWxhbmNlAQdyZXdhcmRzAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdXNlclJld2FyZAUHX3N0YWtlcgEWdXNlclJld2FyZFBlclRva2VuUGFpZAEHX3N0YWtlcgkBBGludDABCQEOdG9Db21wb3NpdGVLZXkCBRRrX3VzZXJSZXdhcmRQZXJUb2tlbgUHX3N0YWtlcgEJYmFsYW5jZU9mAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFCWtfYmFsYW5jZQUHX3N0YWtlcgELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHARN1cGRhdGVSZXdhcmRCYWxhbmNlAQZfZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfcmV3YXJkQmFsYW5jZQkAZAIJAQ1yZXdhcmRCYWxhbmNlAAUGX2RlbHRhBQNuaWwBEHVwZGF0ZVJld2FyZFJhdGUBC19yZXdhcmRSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrX3Jld2FyZFJhdGUFC19yZXdhcmRSYXRlBQNuaWwBCnVwZGF0ZVRpbWUCD19sYXN0VXBkYXRlVGltZQ1fcGVyaW9kRmluaXNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX2xhc3RVcGRhdGVUaW1lBQ9fbGFzdFVwZGF0ZVRpbWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfcGVyaW9kRmluaXNoBQ1fcGVyaW9kRmluaXNoBQNuaWwBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkARVfcmV3YXJkUGVyVG9rZW5TdG9yZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQFFV9yZXdhcmRQZXJUb2tlblN0b3JlZAUDbmlsARF1cGRhdGVVc2VyUmV3YXJkcwMHX3N0YWtlcgdfcmV3YXJkE191c2VyUmV3YXJkUGVyVG9rZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdXNlclJld2FyZAUHX3N0YWtlcgUHX3Jld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUUa191c2VyUmV3YXJkUGVyVG9rZW4FB19zdGFrZXIFE191c2VyUmV3YXJkUGVyVG9rZW4FA25pbAENdXBkYXRlQmFsYW5jZQIHX3N0YWtlcgZfZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFCWtfYmFsYW5jZQUHX3N0YWtlcgkAZAIJAQliYWxhbmNlT2YBBQdfc3Rha2VyBQZfZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfdG90YWxTdXBwbHkJAGQCCQELdG90YWxTdXBwbHkABQZfZGVsdGEFA25pbAETY3VycmVudFRpbWVzdGFtcFNlYwAJAGkCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcADoBwEYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAkBBG1pbnYCCQETY3VycmVudFRpbWVzdGFtcFNlYwAJAQxwZXJpb2RGaW5pc2gAAQ5yZXdhcmRQZXJUb2tlbgENX2JhbGFuY2VEZWx0YQMJAAACCQBkAgkBC3RvdGFsU3VwcGx5AAUNX2JhbGFuY2VEZWx0YQAACQEUcmV3YXJkUGVyVG9rZW5TdG9yZWQABAx0aW1lSW50ZXJ2YWwJAGUCCQEYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAkBDmxhc3RVcGRhdGVUaW1lAAQSYWN0dWFsVGltZUludGVydmFsAwkAZgIAAAUMdGltZUludGVydmFsAAAFDHRpbWVJbnRlcnZhbAQEZGlmZgkBBGRpdmQCCQBoAgkBCnJld2FyZFJhdGUABRJhY3R1YWxUaW1lSW50ZXJ2YWwJAGQCCQELdG90YWxTdXBwbHkABQ1fYmFsYW5jZURlbHRhCQBkAgkBFHJld2FyZFBlclRva2VuU3RvcmVkAAUEZGlmZgEGZWFybmVkAgdfc3Rha2VyDV9iYWxhbmNlRGVsdGEEC3Jld2FyZERlbHRhCQBlAgkBDnJld2FyZFBlclRva2VuAQUNX2JhbGFuY2VEZWx0YQkBFnVzZXJSZXdhcmRQZXJUb2tlblBhaWQBBQdfc3Rha2VyCQBkAgkBBG11bGQCCQBkAgkBCWJhbGFuY2VPZgEFB19zdGFrZXIFDV9iYWxhbmNlRGVsdGEFC3Jld2FyZERlbHRhCQEHcmV3YXJkcwEFB19zdGFrZXIBDHVwZGF0ZVJld2FyZAIHX3N0YWtlcg1fYmFsYW5jZURlbHRhBBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBDnJld2FyZFBlclRva2VuAQUNX2JhbGFuY2VEZWx0YQQRbmV3TGFzdFVwZGF0ZVRpbWUJARNjdXJyZW50VGltZXN0YW1wU2VjAAQLJHQwNTAyMDUyMTIDCQECIT0CBQdfc3Rha2VyAgAJAJQKAgkBBmVhcm5lZAIFB19zdGFrZXIFDV9iYWxhbmNlRGVsdGEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQCUCgIAAAAABAxzdGFrZXJFYXJuZWQIBQskdDA1MDIwNTIxMgJfMQQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAULJHQwNTAyMDUyMTICXzIJAJYKBAUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQFEW5ld0xhc3RVcGRhdGVUaW1lBQxzdGFrZXJFYXJuZWQFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBaQEKaW5pdGlhbGl6ZQEMX2Nvb3JkaW5hdG9yAwkBC2luaXRpYWxpemVkAAkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MFDF9jb29yZGluYXRvcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQVzdGFrZQAEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQ9nb3Zlcm5hbmNlQXNzZXQABgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIWSW52YWxpZCBjYWxsIHRvICBzdGFrZQQLJHQwNTg2ODYwMzMJAQx1cGRhdGVSZXdhcmQCBQdfc3Rha2VyAAAEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAULJHQwNTg2ODYwMzMCXzEEEW5ld0xhc3RVcGRhdGVUaW1lCAULJHQwNTg2ODYwMzMCXzIEDHN0YWtlckVhcm5lZAgFCyR0MDU4Njg2MDMzAl8zBBhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQskdDA1ODY4NjAzMwJfNAkAzggCCQDOCAIJAM4IAgkBEXVwZGF0ZVVzZXJSZXdhcmRzAwUHX3N0YWtlcgUMc3Rha2VyRWFybmVkBRhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEKdXBkYXRlVGltZQIFEW5ld0xhc3RVcGRhdGVUaW1lCQEMcGVyaW9kRmluaXNoAAkBDXVwZGF0ZUJhbGFuY2UCBQdfc3Rha2VyBQdfYW1vdW50AWkBB3VuU3Rha2UBB19hbW91bnQEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyAwMDCQBmAgUHX2Ftb3VudAkBCWJhbGFuY2VPZgEFB19zdGFrZXIGCQECIT0CCAUBaQhwYXltZW50cwUDbmlsBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIaSW52YWxpZCB1blN0YWtlIHBhcmFtZXRlcnMECyR0MDY1NjQ2NzI5CQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAABBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFCyR0MDY1NjQ2NzI5Al8xBBFuZXdMYXN0VXBkYXRlVGltZQgFCyR0MDY1NjQ2NzI5Al8yBAxzdGFrZXJFYXJuZWQIBQskdDA2NTY0NjcyOQJfMwQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAULJHQwNjU2NDY3MjkCXzQJAM4IAgkAzggCCQDOCAIJAM4IAgkBEXVwZGF0ZVVzZXJSZXdhcmRzAwUHX3N0YWtlcgUMc3Rha2VyRWFybmVkBRhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEKdXBkYXRlVGltZQIFEW5ld0xhc3RVcGRhdGVUaW1lCQEMcGVyaW9kRmluaXNoAAkBDXVwZGF0ZUJhbGFuY2UCBQdfc3Rha2VyCQEBLQEFB19hbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdfYW1vdW50CQEPZ292ZXJuYW5jZUFzc2V0AAUDbmlsAWkBD3dpdGhkcmF3UmV3YXJkcwAEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyBAskdDA3MjA1NzM1MAkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQskdDA3MjA1NzM1MAJfMQQRbmV3TGFzdFVwZGF0ZVRpbWUIBQskdDA3MjA1NzM1MAJfMgQMc3Rha2VyRWFybmVkCAULJHQwNzIwNTczNTACXzMEGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFCyR0MDcyMDU3MzUwAl80AwMJAGcCAAAFDHN0YWtlckVhcm5lZAYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECCU5vIHJld2FyZAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCCQEQdXNkbkZyb21EZWNpbWFscwEFDHN0YWtlckVhcm5lZAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAM4IAgkAzggCCQERdXBkYXRlVXNlclJld2FyZHMDBQdfc3Rha2VyAAAFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQp1cGRhdGVUaW1lAgURbmV3TGFzdFVwZGF0ZVRpbWUJAQxwZXJpb2RGaW5pc2gACQETdXBkYXRlUmV3YXJkQmFsYW5jZQEJAQEtAQUMc3Rha2VyRWFybmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEHVzZG5Gcm9tRGVjaW1hbHMBBQxzdGFrZXJFYXJuZWQJAQpxdW90ZUFzc2V0AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmFkZFJld2FyZHMAAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIZSW52YWxpZCBhZGRSZXdhcmRzIHBhcmFtcwQHX3Jld2FyZAkBDnVzZG5Ub0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQEQdXNkbkZyb21EZWNpbWFscwEFB19yZXdhcmQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAkBDHVwZGF0ZVJld2FyZAIFCk5PX0FERFJFU1MFCU5PX1NUQUtFUgJfMQQJdGltZXN0YW1wCQETY3VycmVudFRpbWVzdGFtcFNlYwAEDW5ld1Jld2FyZFJhdGUDCQBmAgUJdGltZXN0YW1wCQEMcGVyaW9kRmluaXNoAAkAaQIFB19yZXdhcmQFCERVUkFUSU9OBA1yZW1haW5pbmdUaW1lCQBlAgkBDHBlcmlvZEZpbmlzaAAFCXRpbWVzdGFtcAQIbGVmdG92ZXIJAGgCCQEKcmV3YXJkUmF0ZQAFDXJlbWFpbmluZ1RpbWUJAGkCCQBkAgUHX3Jld2FyZAUIbGVmdG92ZXIFCERVUkFUSU9OCQDOCAIJAM4IAgkAzggCCQEQdXBkYXRlUmV3YXJkUmF0ZQEFDW5ld1Jld2FyZFJhdGUJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQETdXBkYXRlUmV3YXJkQmFsYW5jZQEFB19yZXdhcmQJAQp1cGRhdGVUaW1lAgUJdGltZXN0YW1wCQBkAgUJdGltZXN0YW1wBQhEVVJBVElPTgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQphY2tSZXdhcmRzAAQLcmV3YXJkRGVsdGEJAQ51c2RuVG9EZWNpbWFscwEJAPAHAgUEdGhpcwkBCnF1b3RlQXNzZXQAAwkAZgIJAGgCAAEFDERFQ0lNQUxfVU5JVAULcmV3YXJkRGVsdGEFA25pbAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAJARB1c2RuRnJvbURlY2ltYWxzAQULcmV3YXJkRGVsdGEFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEB19yZXdhcmQFC3Jld2FyZERlbHRhBBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgJAQx1cGRhdGVSZXdhcmQCBQpOT19BRERSRVNTBQlOT19TVEFLRVICXzEECXRpbWVzdGFtcAkBE2N1cnJlbnRUaW1lc3RhbXBTZWMABA1uZXdSZXdhcmRSYXRlAwkAZgIFCXRpbWVzdGFtcAkBDHBlcmlvZEZpbmlzaAAJAGkCBQdfcmV3YXJkBQhEVVJBVElPTgQNcmVtYWluaW5nVGltZQkAZQIJAQxwZXJpb2RGaW5pc2gABQl0aW1lc3RhbXAECGxlZnRvdmVyCQBoAgkBCnJld2FyZFJhdGUABQ1yZW1haW5pbmdUaW1lCQBpAgkAZAIFB19yZXdhcmQFCGxlZnRvdmVyBQhEVVJBVElPTgkAzggCCQDOCAIJAM4IAgkBEHVwZGF0ZVJld2FyZFJhdGUBBQ1uZXdSZXdhcmRSYXRlCQEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBE3VwZGF0ZVJld2FyZEJhbGFuY2UBBQdfcmV3YXJkCQEKdXBkYXRlVGltZQIFCXRpbWVzdGFtcAkAZAIFCXRpbWVzdGFtcAUIRFVSQVRJT04JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELdmlld19yZXdhcmQBB19zdGFrZXIEDHN0YWtlckVhcm5lZAgJAQx1cGRhdGVSZXdhcmQCBQdfc3Rha2VyAAACXzMJAAIBCQCkAwEJARB1c2RuRnJvbURlY2ltYWxzAQUMc3Rha2VyRWFybmVkAWkBDWNvbXB1dGVSZXdhcmQBB19zdGFrZXIEDHN0YWtlckVhcm5lZAgJAQx1cGRhdGVSZXdhcmQCBQdfc3Rha2VyAAACXzMJAJQKAgUDbmlsBQxzdGFrZXJFYXJuZWQBaQEQbWlncmF0ZUxpcXVpZGl0eQAEBmFtb3VudAkBEHVzZG5Gcm9tRGVjaW1hbHMBCQENcmV3YXJkQmFsYW5jZQAEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQZhbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQ5hZG1pblB1YmxpY0tleQA7iGmY", "height": 2281028, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fg769VxgVGD1eyQm9t5TBbnuSWeEnEkQsDSpstSqGSZZ Next: 9EiPpCbJrmfoBsvSPeNE9LiBUTc12cSvpP197n2DDXWh Diff:
OldNewDifferences
268268 @Callable(i)
269269 func ackRewards () = {
270270 let rewardDelta = usdnToDecimals(assetBalance(this, quoteAsset()))
271- if ((0 >= rewardDelta))
272- then throw("Invalid ackRewards params")
271+ if (((1 * DECIMAL_UNIT) > rewardDelta))
272+ then nil
273273 else {
274274 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), usdnFromDecimals(rewardDelta))])
275275 if ((stake == stake))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_totalSupply = "k_totalSupply"
55
66 let k_rewardBalance = "k_rewardBalance"
77
88 let k_lastUpdateTime = "k_lastUpdateTime"
99
1010 let k_rewardPerTokenStored = "k_rewardPerTokenStored"
1111
1212 let k_rewardRate = "k_rewardRate"
1313
1414 let k_periodFinish = "k_periodFinish"
1515
1616 let k_balance = "k_balance"
1717
1818 let k_userRewardPerToken = "k_userRewardPerToken"
1919
2020 let k_userReward = "k_userReward"
2121
2222 let k_initialized = "k_initialized"
2323
2424 let k_coordinatorAddress = "k_coordinatorAddress"
2525
2626 let k_governance_asset = "k_gov_asset"
2727
2828 let k_quote_asset = "k_quote_asset"
2929
3030 let k_admin_public_key = "k_admin_public_key"
3131
3232 let k_manager_address = "k_manager_address"
3333
3434 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
3535
3636
3737 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
3838
3939
4040 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
4141
4242
4343 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
4444
4545
4646 func managerAddress () = valueOrErrorMessage(addressFromString(getStringValue(coordinator(), k_manager_address)), "Manager not set")
4747
4848
4949 let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
5050
5151 let DURATION = ((60 * 60) * 24)
5252
5353 let NO_ADDRESS = ""
5454
5555 let NO_STAKER = 0
5656
5757 func usdnFromDecimals (_amount) = (_amount / 100)
5858
5959
6060 func usdnToDecimals (_amount) = (_amount * 100)
6161
6262
6363 func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
6464
6565
6666 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
6767
6868
6969 func abs (_x) = if ((_x > 0))
7070 then _x
7171 else -(_x)
7272
7373
7474 func minv (_x,_y) = if ((_x > _y))
7575 then _y
7676 else _x
7777
7878
7979 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
8080
8181
8282 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
8383
8484
8585 func int0 (k) = valueOrElse(getInteger(this, k), 0)
8686
8787
8888 func totalSupply () = int0(k_totalSupply)
8989
9090
9191 func rewardPerTokenStored () = int0(k_rewardPerTokenStored)
9292
9393
9494 func lastUpdateTime () = int0(k_lastUpdateTime)
9595
9696
9797 func rewardRate () = int0(k_rewardRate)
9898
9999
100100 func periodFinish () = int0(k_periodFinish)
101101
102102
103103 func rewardBalance () = int0(k_rewardBalance)
104104
105105
106106 func rewards (_staker) = int0(toCompositeKey(k_userReward, _staker))
107107
108108
109109 func userRewardPerTokenPaid (_staker) = int0(toCompositeKey(k_userRewardPerToken, _staker))
110110
111111
112112 func balanceOf (_staker) = int0(toCompositeKey(k_balance, _staker))
113113
114114
115115 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
116116
117117
118118 func updateRewardBalance (_delta) = [IntegerEntry(k_rewardBalance, (rewardBalance() + _delta))]
119119
120120
121121 func updateRewardRate (_rewardRate) = [IntegerEntry(k_rewardRate, _rewardRate)]
122122
123123
124124 func updateTime (_lastUpdateTime,_periodFinish) = [IntegerEntry(k_lastUpdateTime, _lastUpdateTime), IntegerEntry(k_periodFinish, _periodFinish)]
125125
126126
127127 func updateRewardPerTokenStored (_rewardPerTokenStored) = [IntegerEntry(k_rewardPerTokenStored, _rewardPerTokenStored)]
128128
129129
130130 func updateUserRewards (_staker,_reward,_userRewardPerToken) = [IntegerEntry(toCompositeKey(k_userReward, _staker), _reward), IntegerEntry(toCompositeKey(k_userRewardPerToken, _staker), _userRewardPerToken)]
131131
132132
133133 func updateBalance (_staker,_delta) = [IntegerEntry(toCompositeKey(k_balance, _staker), (balanceOf(_staker) + _delta)), IntegerEntry(k_totalSupply, (totalSupply() + _delta))]
134134
135135
136136 func currentTimestampSec () = (lastBlock.timestamp / 1000)
137137
138138
139139 func lastTimeRewardApplicable () = minv(currentTimestampSec(), periodFinish())
140140
141141
142142 func rewardPerToken (_balanceDelta) = if (((totalSupply() + _balanceDelta) == 0))
143143 then rewardPerTokenStored()
144144 else {
145145 let timeInterval = (lastTimeRewardApplicable() - lastUpdateTime())
146146 let actualTimeInterval = if ((0 > timeInterval))
147147 then 0
148148 else timeInterval
149149 let diff = divd((rewardRate() * actualTimeInterval), (totalSupply() + _balanceDelta))
150150 (rewardPerTokenStored() + diff)
151151 }
152152
153153
154154 func earned (_staker,_balanceDelta) = {
155155 let rewardDelta = (rewardPerToken(_balanceDelta) - userRewardPerTokenPaid(_staker))
156156 (muld((balanceOf(_staker) + _balanceDelta), rewardDelta) + rewards(_staker))
157157 }
158158
159159
160160 func updateReward (_staker,_balanceDelta) = {
161161 let newRewardPerTokenStored = rewardPerToken(_balanceDelta)
162162 let newLastUpdateTime = currentTimestampSec()
163163 let $t050205212 = if ((_staker != ""))
164164 then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
165165 else $Tuple2(0, 0)
166166 let stakerEarned = $t050205212._1
167167 let stakerRewardPerTokenPaid = $t050205212._2
168168 $Tuple4(newRewardPerTokenStored, newLastUpdateTime, stakerEarned, stakerRewardPerTokenPaid)
169169 }
170170
171171
172172 @Callable(i)
173173 func initialize (_coordinator) = if (initialized())
174174 then throw("Already initialized")
175175 else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
176176
177177
178178
179179 @Callable(i)
180180 func stake () = {
181181 let _staker = toString(i.caller)
182182 let _amount = i.payments[0].amount
183183 if (if ((i.payments[0].assetId != governanceAsset()))
184184 then true
185185 else !(initialized()))
186186 then throw("Invalid call to stake")
187187 else {
188188 let $t058686033 = updateReward(_staker, 0)
189189 let newRewardPerTokenStored = $t058686033._1
190190 let newLastUpdateTime = $t058686033._2
191191 let stakerEarned = $t058686033._3
192192 let stakerRewardPerTokenPaid = $t058686033._4
193193 (((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, _amount))
194194 }
195195 }
196196
197197
198198
199199 @Callable(i)
200200 func unStake (_amount) = {
201201 let _staker = toString(i.caller)
202202 if (if (if ((_amount > balanceOf(_staker)))
203203 then true
204204 else (i.payments != nil))
205205 then true
206206 else !(initialized()))
207207 then throw("Invalid unStake parameters")
208208 else {
209209 let $t065646729 = updateReward(_staker, 0)
210210 let newRewardPerTokenStored = $t065646729._1
211211 let newLastUpdateTime = $t065646729._2
212212 let stakerEarned = $t065646729._3
213213 let stakerRewardPerTokenPaid = $t065646729._4
214214 ((((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, -(_amount))) ++ [ScriptTransfer(i.caller, _amount, governanceAsset())])
215215 }
216216 }
217217
218218
219219
220220 @Callable(i)
221221 func withdrawRewards () = {
222222 let _staker = toString(i.caller)
223223 let $t072057350 = updateReward(_staker, 0)
224224 let newRewardPerTokenStored = $t072057350._1
225225 let newLastUpdateTime = $t072057350._2
226226 let stakerEarned = $t072057350._3
227227 let stakerRewardPerTokenPaid = $t072057350._4
228228 if (if ((0 >= stakerEarned))
229229 then true
230230 else !(initialized()))
231231 then throw("No reward")
232232 else {
233233 let unstake = invoke(managerAddress(), "withdraw", [toBase58String(quoteAsset()), usdnFromDecimals(stakerEarned)], nil)
234234 if ((unstake == unstake))
235235 then ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateRewardBalance(-(stakerEarned))) ++ [ScriptTransfer(i.caller, usdnFromDecimals(stakerEarned), quoteAsset())])
236236 else throw("Strict value is not equal to itself.")
237237 }
238238 }
239239
240240
241241
242242 @Callable(i)
243243 func addRewards () = if (if ((i.payments[0].assetId != quoteAsset()))
244244 then true
245245 else !(initialized()))
246246 then throw("Invalid addRewards params")
247247 else {
248248 let _reward = usdnToDecimals(i.payments[0].amount)
249249 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), usdnFromDecimals(_reward))])
250250 if ((stake == stake))
251251 then {
252252 let newRewardPerTokenStored = updateReward(NO_ADDRESS, NO_STAKER)._1
253253 let timestamp = currentTimestampSec()
254254 let newRewardRate = if ((timestamp > periodFinish()))
255255 then (_reward / DURATION)
256256 else {
257257 let remainingTime = (periodFinish() - timestamp)
258258 let leftover = (rewardRate() * remainingTime)
259259 ((_reward + leftover) / DURATION)
260260 }
261261 (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
262262 }
263263 else throw("Strict value is not equal to itself.")
264264 }
265265
266266
267267
268268 @Callable(i)
269269 func ackRewards () = {
270270 let rewardDelta = usdnToDecimals(assetBalance(this, quoteAsset()))
271- if ((0 >= rewardDelta))
272- then throw("Invalid ackRewards params")
271+ if (((1 * DECIMAL_UNIT) > rewardDelta))
272+ then nil
273273 else {
274274 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), usdnFromDecimals(rewardDelta))])
275275 if ((stake == stake))
276276 then {
277277 let _reward = rewardDelta
278278 let newRewardPerTokenStored = updateReward(NO_ADDRESS, NO_STAKER)._1
279279 let timestamp = currentTimestampSec()
280280 let newRewardRate = if ((timestamp > periodFinish()))
281281 then (_reward / DURATION)
282282 else {
283283 let remainingTime = (periodFinish() - timestamp)
284284 let leftover = (rewardRate() * remainingTime)
285285 ((_reward + leftover) / DURATION)
286286 }
287287 (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
288288 }
289289 else throw("Strict value is not equal to itself.")
290290 }
291291 }
292292
293293
294294
295295 @Callable(i)
296296 func view_reward (_staker) = {
297297 let stakerEarned = updateReward(_staker, 0)._3
298298 throw(toString(usdnFromDecimals(stakerEarned)))
299299 }
300300
301301
302302
303303 @Callable(i)
304304 func computeReward (_staker) = {
305305 let stakerEarned = updateReward(_staker, 0)._3
306306 $Tuple2(nil, stakerEarned)
307307 }
308308
309309
310310
311311 @Callable(i)
312312 func migrateLiquidity () = {
313313 let amount = usdnFromDecimals(rewardBalance())
314314 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), amount)])
315315 if ((stake == stake))
316316 then nil
317317 else throw("Strict value is not equal to itself.")
318318 }
319319
320320
321321 @Verifier(tx)
322322 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
323323

github/deemru/w8io/169f3d6 
40.05 ms