tx · CQ8ZR49QPe99Qv1v33eFVnBEpTj4kNK6SUaGv4Zrqj2A

3N6btuDfXTh8F6rcCbpuevwjxv78VSjwy1g:  -0.03700000 Waves

2022.06.27 19:37 [2115092] smart account 3N6btuDfXTh8F6rcCbpuevwjxv78VSjwy1g > SELF 0.00000000 Waves

{ "type": 13, "id": "CQ8ZR49QPe99Qv1v33eFVnBEpTj4kNK6SUaGv4Zrqj2A", "fee": 3700000, "feeAssetId": null, "timestamp": 1656347856936, "version": 2, "chainId": 84, "sender": "3N6btuDfXTh8F6rcCbpuevwjxv78VSjwy1g", "senderPublicKey": "hJkk5tHmPi9MxaRx78ukB4hcN5qJ2csYAuNxdNix7yB", "proofs": [ "2sby7cUwqgaLLci2hfNu8wNtBXZjASzC5rKj1WzHdjmFGk4vCy7E2BdjvosCGEoGkDDDV42gEQEfo7iepo8a9ExK" ], "script": "base64:AAIFAAAAAAAAABkIAhIDCgEIEgASAwoBARIAEgASABIDCgEIAAAANAAAAAANa190b3RhbFN1cHBseQIAAAANa190b3RhbFN1cHBseQAAAAAPa19yZXdhcmRCYWxhbmNlAgAAAA9rX3Jld2FyZEJhbGFuY2UAAAAAEGtfbGFzdFVwZGF0ZVRpbWUCAAAAEGtfbGFzdFVwZGF0ZVRpbWUAAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQCAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAADGtfcmV3YXJkUmF0ZQIAAAAMa19yZXdhcmRSYXRlAAAAAA5rX3BlcmlvZEZpbmlzaAIAAAAOa19wZXJpb2RGaW5pc2gAAAAACWtfYmFsYW5jZQIAAAAJa19iYWxhbmNlAAAAABRrX3VzZXJSZXdhcmRQZXJUb2tlbgIAAAAUa191c2VyUmV3YXJkUGVyVG9rZW4AAAAADGtfdXNlclJld2FyZAIAAAAMa191c2VyUmV3YXJkAAAAAA1rX2luaXRpYWxpemVkAgAAAA1rX2luaXRpYWxpemVkAAAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAAUa19jb29yZGluYXRvckFkZHJlc3MAAAAAEmtfZ292ZXJuYW5jZV9hc3NldAIAAAALa19nb3ZfYXNzZXQAAAAADWtfcXVvdGVfYXNzZXQCAAAADWtfcXVvdGVfYXNzZXQAAAAAEmtfYWRtaW5fcHVibGljX2tleQIAAAASa19hZG1pbl9wdWJsaWNfa2V5AQAAAAtjb29yZGluYXRvcgAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAATQ29vcmRpbmF0b3Igbm90IHNldAEAAAAOYWRtaW5QdWJsaWNLZXkAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAtjb29yZGluYXRvcgAAAAAFAAAAEmtfYWRtaW5fcHVibGljX2tleQEAAAAPZ292ZXJuYW5jZUFzc2V0AAAAAAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAABJrX2dvdmVybmFuY2VfYXNzZXQBAAAACnF1b3RlQXNzZXQAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAtjb29yZGluYXRvcgAAAAAFAAAADWtfcXVvdGVfYXNzZXQAAAAADERFQ0lNQUxfVU5JVAkAAGgAAAACAAAAAAAAAAABCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAACERVUkFUSU9OCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAPAAAAAAAAAAAPAAAAAAAAAAAGAAAAAALTk9fQURERFJFU1MCAAAAAAAAAAAJTk9fU1RBS0VSAAAAAAAAAAAAAQAAABB1c2RuRnJvbURlY2ltYWxzAAAAAQAAAAdfYW1vdW50CQAAaQAAAAIFAAAAB19hbW91bnQAAAAAAAAAAGQBAAAADnVzZG5Ub0RlY2ltYWxzAAAAAQAAAAdfYW1vdW50CQAAaAAAAAIFAAAAB19hbW91bnQAAAAAAAAAAGQBAAAABGRpdmQAAAACAAAAAl94AAAAAl95CQEAAAAIZnJhY3Rpb24AAAAEBQAAAAJfeAUAAAAMREVDSU1BTF9VTklUBQAAAAJfeQUAAAAISEFMRkVWRU4BAAAABG11bGQAAAACAAAAAl94AAAAAl95CQEAAAAIZnJhY3Rpb24AAAAEBQAAAAJfeAUAAAACX3kFAAAADERFQ0lNQUxfVU5JVAUAAAAISEFMRkVWRU4BAAAAA2FicwAAAAEAAAACX3gDCQAAZgAAAAIFAAAAAl94AAAAAAAAAAAABQAAAAJfeAkBAAAAAS0AAAABBQAAAAJfeAEAAAAEbWludgAAAAIAAAACX3gAAAACX3kDCQAAZgAAAAIFAAAAAl94BQAAAAJfeQUAAAACX3kFAAAAAl94AQAAAA50b0NvbXBvc2l0ZUtleQAAAAIAAAAEX2tleQAAAAhfYWRkcmVzcwkAASwAAAACCQABLAAAAAIFAAAABF9rZXkCAAAAAV8FAAAACF9hZGRyZXNzAQAAAANpbnQAAAABAAAAAWsJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAFrCQABLAAAAAICAAAADW5vIHZhbHVlIGZvciAFAAAAAWsBAAAABGludDAAAAABAAAAAWsJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAABawAAAAAAAAAAAAEAAAALdG90YWxTdXBwbHkAAAAACQEAAAAEaW50MAAAAAEFAAAADWtfdG90YWxTdXBwbHkBAAAAFHJld2FyZFBlclRva2VuU3RvcmVkAAAAAAkBAAAABGludDAAAAABBQAAABZrX3Jld2FyZFBlclRva2VuU3RvcmVkAQAAAA5sYXN0VXBkYXRlVGltZQAAAAAJAQAAAARpbnQwAAAAAQUAAAAQa19sYXN0VXBkYXRlVGltZQEAAAAKcmV3YXJkUmF0ZQAAAAAJAQAAAARpbnQwAAAAAQUAAAAMa19yZXdhcmRSYXRlAQAAAAxwZXJpb2RGaW5pc2gAAAAACQEAAAAEaW50MAAAAAEFAAAADmtfcGVyaW9kRmluaXNoAQAAAA1yZXdhcmRCYWxhbmNlAAAAAAkBAAAABGludDAAAAABBQAAAA9rX3Jld2FyZEJhbGFuY2UBAAAAB3Jld2FyZHMAAAABAAAAB19zdGFrZXIJAQAAAARpbnQwAAAAAQkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAMa191c2VyUmV3YXJkBQAAAAdfc3Rha2VyAQAAABZ1c2VyUmV3YXJkUGVyVG9rZW5QYWlkAAAAAQAAAAdfc3Rha2VyCQEAAAAEaW50MAAAAAEJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAAFGtfdXNlclJld2FyZFBlclRva2VuBQAAAAdfc3Rha2VyAQAAAAliYWxhbmNlT2YAAAABAAAAB19zdGFrZXIJAQAAAARpbnQwAAAAAQkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAJa19iYWxhbmNlBQAAAAdfc3Rha2VyAQAAAAtpbml0aWFsaXplZAAAAAAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAANa19pbml0aWFsaXplZAcBAAAAE3VwZGF0ZVJld2FyZEJhbGFuY2UAAAABAAAABl9kZWx0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa19yZXdhcmRCYWxhbmNlCQAAZAAAAAIJAQAAAA1yZXdhcmRCYWxhbmNlAAAAAAUAAAAGX2RlbHRhBQAAAANuaWwBAAAAEHVwZGF0ZVJld2FyZFJhdGUAAAABAAAAC19yZXdhcmRSYXRlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAxrX3Jld2FyZFJhdGUFAAAAC19yZXdhcmRSYXRlBQAAAANuaWwBAAAACnVwZGF0ZVRpbWUAAAACAAAAD19sYXN0VXBkYXRlVGltZQAAAA1fcGVyaW9kRmluaXNoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABBrX2xhc3RVcGRhdGVUaW1lBQAAAA9fbGFzdFVwZGF0ZVRpbWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADmtfcGVyaW9kRmluaXNoBQAAAA1fcGVyaW9kRmluaXNoBQAAAANuaWwBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQAAABVfcmV3YXJkUGVyVG9rZW5TdG9yZWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQFAAAAFV9yZXdhcmRQZXJUb2tlblN0b3JlZAUAAAADbmlsAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMAAAAHX3N0YWtlcgAAAAdfcmV3YXJkAAAAE191c2VyUmV3YXJkUGVyVG9rZW4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAADGtfdXNlclJld2FyZAUAAAAHX3N0YWtlcgUAAAAHX3Jld2FyZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAUa191c2VyUmV3YXJkUGVyVG9rZW4FAAAAB19zdGFrZXIFAAAAE191c2VyUmV3YXJkUGVyVG9rZW4FAAAAA25pbAEAAAANdXBkYXRlQmFsYW5jZQAAAAIAAAAHX3N0YWtlcgAAAAZfZGVsdGEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA50b0NvbXBvc2l0ZUtleQAAAAIFAAAACWtfYmFsYW5jZQUAAAAHX3N0YWtlcgkAAGQAAAACCQEAAAAJYmFsYW5jZU9mAAAAAQUAAAAHX3N0YWtlcgUAAAAGX2RlbHRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rX3RvdGFsU3VwcGx5CQAAZAAAAAIJAQAAAAt0b3RhbFN1cHBseQAAAAAFAAAABl9kZWx0YQUAAAADbmlsAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAkAAGkAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAAAAAAAAAAD6AEAAAAYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAAAAAkBAAAABG1pbnYAAAACCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAJAQAAAAxwZXJpb2RGaW5pc2gAAAAAAQAAAA5yZXdhcmRQZXJUb2tlbgAAAAEAAAANX2JhbGFuY2VEZWx0YQMJAAAAAAAAAgkAAGQAAAACCQEAAAALdG90YWxTdXBwbHkAAAAABQAAAA1fYmFsYW5jZURlbHRhAAAAAAAAAAAACQEAAAAUcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAABAAAAAx0aW1lSW50ZXJ2YWwJAABlAAAAAgkBAAAAGGxhc3RUaW1lUmV3YXJkQXBwbGljYWJsZQAAAAAJAQAAAA5sYXN0VXBkYXRlVGltZQAAAAAEAAAAEWFjdHVhbFRpbWVJbnRldmFsAwkAAGYAAAACAAAAAAAAAAAABQAAAAx0aW1lSW50ZXJ2YWwAAAAAAAAAAAAFAAAADHRpbWVJbnRlcnZhbAQAAAAEZGlmZgkAAGgAAAACCQEAAAAEZGl2ZAAAAAIJAQAAAApyZXdhcmRSYXRlAAAAAAkAAGQAAAACCQEAAAALdG90YWxTdXBwbHkAAAAABQAAAA1fYmFsYW5jZURlbHRhBQAAABFhY3R1YWxUaW1lSW50ZXZhbAkAAGQAAAACCQEAAAAUcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAABQAAAARkaWZmAQAAAAZlYXJuZWQAAAACAAAAB19zdGFrZXIAAAANX2JhbGFuY2VEZWx0YQQAAAALcmV3YXJkRGVsdGEJAABlAAAAAgkBAAAADnJld2FyZFBlclRva2VuAAAAAQUAAAANX2JhbGFuY2VEZWx0YQkBAAAAFnVzZXJSZXdhcmRQZXJUb2tlblBhaWQAAAABBQAAAAdfc3Rha2VyCQAAZAAAAAIJAQAAAARtdWxkAAAAAgkAAGQAAAACCQEAAAAJYmFsYW5jZU9mAAAAAQUAAAAHX3N0YWtlcgUAAAANX2JhbGFuY2VEZWx0YQUAAAALcmV3YXJkRGVsdGEJAQAAAAdyZXdhcmRzAAAAAQUAAAAHX3N0YWtlcgEAAAAMdXBkYXRlUmV3YXJkAAAAAgAAAAdfc3Rha2VyAAAADV9iYWxhbmNlRGVsdGEEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAAOcmV3YXJkUGVyVG9rZW4AAAABBQAAAA1fYmFsYW5jZURlbHRhBAAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAABAAAAAskdDA0ODU0NTA0NgMJAQAAAAIhPQAAAAIFAAAAB19zdGFrZXICAAAAAAkABRQAAAACCQEAAAAGZWFybmVkAAAAAgUAAAAHX3N0YWtlcgUAAAANX2JhbGFuY2VEZWx0YQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAAUUAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNDg1NDUwNDYAAAACXzEEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDQ4NTQ1MDQ2AAAAAl8yCQAFFgAAAAQFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkBQAAABFuZXdMYXN0VXBkYXRlVGltZQUAAAAMc3Rha2VyRWFybmVkBQAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQAAAAHAAAAAWkBAAAACmluaXRpYWxpemUAAAABAAAADF9jb29yZGluYXRvcgMJAQAAAAtpbml0aWFsaXplZAAAAAAJAAACAAAAAQIAAAATQWxyZWFkeSBpbml0aWFsaXplZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUAAAAMX2Nvb3JkaW5hdG9yCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA1rX2luaXRpYWxpemVkBgUAAAADbmlsAAAAAWkBAAAABXN0YWtlAAAAAAQAAAAHX3N0YWtlcgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAB19hbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAMDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkCQEAAAAPZ292ZXJuYW5jZUFzc2V0AAAAAAYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAkAAAIAAAABAgAAABZJbnZhbGlkIGNhbGwgdG8gIHN0YWtlBAAAAAskdDA1NzAyNTg2NwkBAAAADHVwZGF0ZVJld2FyZAAAAAIFAAAAB19zdGFrZXIAAAAAAAAAAAAEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAUAAAALJHQwNTcwMjU4NjcAAAACXzEEAAAAEW5ld0xhc3RVcGRhdGVUaW1lCAUAAAALJHQwNTcwMjU4NjcAAAACXzIEAAAADHN0YWtlckVhcm5lZAgFAAAACyR0MDU3MDI1ODY3AAAAAl8zBAAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQAAAAskdDA1NzAyNTg2NwAAAAJfNAkABE4AAAACCQAETgAAAAIJAAROAAAAAgkBAAAAEXVwZGF0ZVVzZXJSZXdhcmRzAAAAAwUAAAAHX3N0YWtlcgUAAAAMc3Rha2VyRWFybmVkBQAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAAKdXBkYXRlVGltZQAAAAIFAAAAEW5ld0xhc3RVcGRhdGVUaW1lCQEAAAAMcGVyaW9kRmluaXNoAAAAAAkBAAAADXVwZGF0ZUJhbGFuY2UAAAACBQAAAAdfc3Rha2VyBQAAAAdfYW1vdW50AAAAAWkBAAAAB3VuU3Rha2UAAAABAAAAB19hbW91bnQEAAAAB19zdGFrZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwMDCQAAZgAAAAIFAAAAB19hbW91bnQJAQAAAAliYWxhbmNlT2YAAAABBQAAAAdfc3Rha2VyBgkBAAAAAiE9AAAAAggFAAAAAWkAAAAIcGF5bWVudHMFAAAAA25pbAYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAkAAAIAAAABAgAAABtJbnZhbGlkIHVuU3Rha2UgcGFyYW1ldGV0cnMEAAAACyR0MDYzOTk2NTY0CQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgAAAAAAAAAAAAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA2Mzk5NjU2NAAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA2Mzk5NjU2NAAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNjM5OTY1NjQAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDYzOTk2NTY0AAAAAl80CQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgkBAAAAAS0AAAABBQAAAAdfYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHX2Ftb3VudAkBAAAAD2dvdmVybmFuY2VBc3NldAAAAAAFAAAAA25pbAAAAAFpAQAAAA93aXRoZHJhd1Jld2FyZHMAAAAABAAAAAdfc3Rha2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALJHQwNzA0MDcxODUJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAABAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFAAAACyR0MDcwNDA3MTg1AAAAAl8xBAAAABFuZXdMYXN0VXBkYXRlVGltZQgFAAAACyR0MDcwNDA3MTg1AAAAAl8yBAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA3MDQwNzE4NQAAAAJfMwQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNzA0MDcxODUAAAACXzQDAwkAAGcAAAACAAAAAAAAAAAABQAAAAxzdGFrZXJFYXJuZWQGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAJAAACAAAAAQIAAAAJTm8gcmV3YXJkCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIAAAAAAAAAAAAFAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAARbmV3TGFzdFVwZGF0ZVRpbWUJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEJAQAAAAEtAAAAAQUAAAAMc3Rha2VyRWFybmVkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkBAAAAEHVzZG5Gcm9tRGVjaW1hbHMAAAABBQAAAAxzdGFrZXJFYXJuZWQJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAADbmlsAAAAAWkBAAAACmFkZFJld2FyZHMAAAAAAwMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQJAQAAAApxdW90ZUFzc2V0AAAAAAYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAkAAAIAAAABAgAAABpJbnZhbGlpZCBhZGRSZXdhcmRzIHBhcmFtcwQAAAAHX3Jld2FyZAkBAAAADnVzZG5Ub0RlY2ltYWxzAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50BAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAtOT19BREREUkVTUwUAAAAJTk9fU1RBS0VSAAAAAl8xBAAAAAl0aW1lc3RhbXAJAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAQAAAANbmV3UmV3YXJkUmF0ZQMJAABmAAAAAgUAAAAJdGltZXN0YW1wCQEAAAAMcGVyaW9kRmluaXNoAAAAAAkAAGkAAAACBQAAAAdfcmV3YXJkBQAAAAhEVVJBVElPTgQAAAANcmVtYWluaW5nVGltZQkAAGUAAAACCQEAAAAMcGVyaW9kRmluaXNoAAAAAAUAAAAJdGltZXN0YW1wBAAAAAhsZWZ0b3ZlcgkAAGgAAAACCQEAAAAKcmV3YXJkUmF0ZQAAAAAFAAAADXJlbWFpbmluZ1RpbWUJAABpAAAAAgkAAGQAAAACBQAAAAdfcmV3YXJkBQAAAAhsZWZ0b3ZlcgUAAAAIRFVSQVRJT04JAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABB1cGRhdGVSZXdhcmRSYXRlAAAAAQUAAAANbmV3UmV3YXJkUmF0ZQkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAABN1cGRhdGVSZXdhcmRCYWxhbmNlAAAAAQUAAAAHX3Jld2FyZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAAAl0aW1lc3RhbXAJAABkAAAAAgUAAAAJdGltZXN0YW1wBQAAAAhEVVJBVElPTgAAAAFpAQAAAAphY2tSZXdhcmRzAAAAAAQAAAAOY3VycmVudEJhbGFuY2UJAQAAAA51c2RuVG9EZWNpbWFscwAAAAEJAAPwAAAAAgUAAAAEdGhpcwkBAAAACnF1b3RlQXNzZXQAAAAABAAAAA5yZXdhcmRCYWxhbmNlZQkBAAAADXJld2FyZEJhbGFuY2UAAAAABAAAAAtyZXdhcmREZWx0YQkAAGUAAAACBQAAAA5jdXJyZW50QmFsYW5jZQUAAAAOcmV3YXJkQmFsYW5jZWUDCQAAZwAAAAIAAAAAAAAAAAAFAAAAC3Jld2FyZERlbHRhCQAAAgAAAAECAAAAGkludmFsaWlkIGFja1Jld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkBQAAAAtyZXdhcmREZWx0YQQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAALTk9fQURERFJFU1MFAAAACU5PX1NUQUtFUgAAAAJfMQQAAAAJdGltZXN0YW1wCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAEAAAADW5ld1Jld2FyZFJhdGUDCQAAZgAAAAIFAAAACXRpbWVzdGFtcAkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAABpAAAAAgUAAAAHX3Jld2FyZAUAAAAIRFVSQVRJT04EAAAADXJlbWFpbmluZ1RpbWUJAABlAAAAAgkBAAAADHBlcmlvZEZpbmlzaAAAAAAFAAAACXRpbWVzdGFtcAQAAAAIbGVmdG92ZXIJAABoAAAAAgkBAAAACnJld2FyZFJhdGUAAAAABQAAAA1yZW1haW5pbmdUaW1lCQAAaQAAAAIJAABkAAAAAgUAAAAHX3Jld2FyZAUAAAAIbGVmdG92ZXIFAAAACERVUkFUSU9OCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEFAAAADW5ld1Jld2FyZFJhdGUJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEFAAAAB19yZXdhcmQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAACXRpbWVzdGFtcAUAAAAIRFVSQVRJT04AAAABaQEAAAALdmlld19yZXdhcmQAAAABAAAAB19zdGFrZXIEAAAADHN0YWtlckVhcm5lZAgJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAAAAAAAl8zCQAAAgAAAAEJAAGkAAAAAQkBAAAAEHVzZG5Gcm9tRGVjaW1hbHMAAAABBQAAAAxzdGFrZXJFYXJuZWQAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAACQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAkBAAAADmFkbWluUHVibGljS2V5AAAAAJw3htI=", "height": 2115092, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: E4ca5VEYWMrUzDRL4gRpNSkfRGiNJUELNETzWrqkbSNY Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_totalSupply = "k_totalSupply"
5+
6+let k_rewardBalance = "k_rewardBalance"
7+
8+let k_lastUpdateTime = "k_lastUpdateTime"
9+
10+let k_rewardPerTokenStored = "k_rewardPerTokenStored"
11+
12+let k_rewardRate = "k_rewardRate"
13+
14+let k_periodFinish = "k_periodFinish"
15+
16+let k_balance = "k_balance"
17+
18+let k_userRewardPerToken = "k_userRewardPerToken"
19+
20+let k_userReward = "k_userReward"
21+
22+let k_initialized = "k_initialized"
23+
24+let k_coordinatorAddress = "k_coordinatorAddress"
25+
26+let k_governance_asset = "k_gov_asset"
27+
28+let k_quote_asset = "k_quote_asset"
29+
30+let k_admin_public_key = "k_admin_public_key"
31+
32+func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
33+
34+
35+func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
36+
37+
38+func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
39+
40+
41+func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
42+
43+
44+let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
45+
46+let DURATION = ((60 * 60) * 24)
47+
48+let NO_ADDDRESS = ""
49+
50+let NO_STAKER = 0
51+
52+func usdnFromDecimals (_amount) = (_amount / 100)
53+
54+
55+func usdnToDecimals (_amount) = (_amount * 100)
56+
57+
58+func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
59+
60+
61+func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
62+
63+
64+func abs (_x) = if ((_x > 0))
65+ then _x
66+ else -(_x)
67+
68+
69+func minv (_x,_y) = if ((_x > _y))
70+ then _y
71+ else _x
72+
73+
74+func toCompositeKey (_key,_address) = ((_key + "_") + _address)
75+
76+
77+func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
78+
79+
80+func int0 (k) = valueOrElse(getInteger(this, k), 0)
81+
82+
83+func totalSupply () = int0(k_totalSupply)
84+
85+
86+func rewardPerTokenStored () = int0(k_rewardPerTokenStored)
87+
88+
89+func lastUpdateTime () = int0(k_lastUpdateTime)
90+
91+
92+func rewardRate () = int0(k_rewardRate)
93+
94+
95+func periodFinish () = int0(k_periodFinish)
96+
97+
98+func rewardBalance () = int0(k_rewardBalance)
99+
100+
101+func rewards (_staker) = int0(toCompositeKey(k_userReward, _staker))
102+
103+
104+func userRewardPerTokenPaid (_staker) = int0(toCompositeKey(k_userRewardPerToken, _staker))
105+
106+
107+func balanceOf (_staker) = int0(toCompositeKey(k_balance, _staker))
108+
109+
110+func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
111+
112+
113+func updateRewardBalance (_delta) = [IntegerEntry(k_rewardBalance, (rewardBalance() + _delta))]
114+
115+
116+func updateRewardRate (_rewardRate) = [IntegerEntry(k_rewardRate, _rewardRate)]
117+
118+
119+func updateTime (_lastUpdateTime,_periodFinish) = [IntegerEntry(k_lastUpdateTime, _lastUpdateTime), IntegerEntry(k_periodFinish, _periodFinish)]
120+
121+
122+func updateRewardPerTokenStored (_rewardPerTokenStored) = [IntegerEntry(k_rewardPerTokenStored, _rewardPerTokenStored)]
123+
124+
125+func updateUserRewards (_staker,_reward,_userRewardPerToken) = [IntegerEntry(toCompositeKey(k_userReward, _staker), _reward), IntegerEntry(toCompositeKey(k_userRewardPerToken, _staker), _userRewardPerToken)]
126+
127+
128+func updateBalance (_staker,_delta) = [IntegerEntry(toCompositeKey(k_balance, _staker), (balanceOf(_staker) + _delta)), IntegerEntry(k_totalSupply, (totalSupply() + _delta))]
129+
130+
131+func currentTimestampSec () = (lastBlock.timestamp / 1000)
132+
133+
134+func lastTimeRewardApplicable () = minv(currentTimestampSec(), periodFinish())
135+
136+
137+func rewardPerToken (_balanceDelta) = if (((totalSupply() + _balanceDelta) == 0))
138+ then rewardPerTokenStored()
139+ else {
140+ let timeInterval = (lastTimeRewardApplicable() - lastUpdateTime())
141+ let actualTimeInteval = if ((0 > timeInterval))
142+ then 0
143+ else timeInterval
144+ let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * actualTimeInteval)
145+ (rewardPerTokenStored() + diff)
146+ }
147+
148+
149+func earned (_staker,_balanceDelta) = {
150+ let rewardDelta = (rewardPerToken(_balanceDelta) - userRewardPerTokenPaid(_staker))
151+ (muld((balanceOf(_staker) + _balanceDelta), rewardDelta) + rewards(_staker))
152+ }
153+
154+
155+func updateReward (_staker,_balanceDelta) = {
156+ let newRewardPerTokenStored = rewardPerToken(_balanceDelta)
157+ let newLastUpdateTime = currentTimestampSec()
158+ let $t048545046 = if ((_staker != ""))
159+ then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
160+ else $Tuple2(0, 0)
161+ let stakerEarned = $t048545046._1
162+ let stakerRewardPerTokenPaid = $t048545046._2
163+ $Tuple4(newRewardPerTokenStored, newLastUpdateTime, stakerEarned, stakerRewardPerTokenPaid)
164+ }
165+
166+
167+@Callable(i)
168+func initialize (_coordinator) = if (initialized())
169+ then throw("Already initialized")
170+ else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
171+
172+
173+
174+@Callable(i)
175+func stake () = {
176+ let _staker = toString(i.caller)
177+ let _amount = i.payments[0].amount
178+ if (if ((i.payments[0].assetId != governanceAsset()))
179+ then true
180+ else !(initialized()))
181+ then throw("Invalid call to stake")
182+ else {
183+ let $t057025867 = updateReward(_staker, 0)
184+ let newRewardPerTokenStored = $t057025867._1
185+ let newLastUpdateTime = $t057025867._2
186+ let stakerEarned = $t057025867._3
187+ let stakerRewardPerTokenPaid = $t057025867._4
188+ (((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, _amount))
189+ }
190+ }
191+
192+
193+
194+@Callable(i)
195+func unStake (_amount) = {
196+ let _staker = toString(i.caller)
197+ if (if (if ((_amount > balanceOf(_staker)))
198+ then true
199+ else (i.payments != nil))
200+ then true
201+ else !(initialized()))
202+ then throw("Invalid unStake parametetrs")
203+ else {
204+ let $t063996564 = updateReward(_staker, 0)
205+ let newRewardPerTokenStored = $t063996564._1
206+ let newLastUpdateTime = $t063996564._2
207+ let stakerEarned = $t063996564._3
208+ let stakerRewardPerTokenPaid = $t063996564._4
209+ ((((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, -(_amount))) ++ [ScriptTransfer(i.caller, _amount, governanceAsset())])
210+ }
211+ }
212+
213+
214+
215+@Callable(i)
216+func withdrawRewards () = {
217+ let _staker = toString(i.caller)
218+ let $t070407185 = updateReward(_staker, 0)
219+ let newRewardPerTokenStored = $t070407185._1
220+ let newLastUpdateTime = $t070407185._2
221+ let stakerEarned = $t070407185._3
222+ let stakerRewardPerTokenPaid = $t070407185._4
223+ if (if ((0 >= stakerEarned))
224+ then true
225+ else !(initialized()))
226+ then throw("No reward")
227+ else ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateRewardBalance(-(stakerEarned))) ++ [ScriptTransfer(i.caller, usdnFromDecimals(stakerEarned), quoteAsset())])
228+ }
229+
230+
231+
232+@Callable(i)
233+func addRewards () = if (if ((i.payments[0].assetId != quoteAsset()))
234+ then true
235+ else !(initialized()))
236+ then throw("Invaliid addRewards params")
237+ else {
238+ let _reward = usdnToDecimals(i.payments[0].amount)
239+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
240+ let timestamp = currentTimestampSec()
241+ let newRewardRate = if ((timestamp > periodFinish()))
242+ then (_reward / DURATION)
243+ else {
244+ let remainingTime = (periodFinish() - timestamp)
245+ let leftover = (rewardRate() * remainingTime)
246+ ((_reward + leftover) / DURATION)
247+ }
248+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
249+ }
250+
251+
252+
253+@Callable(i)
254+func ackRewards () = {
255+ let currentBalance = usdnToDecimals(assetBalance(this, quoteAsset()))
256+ let rewardBalancee = rewardBalance()
257+ let rewardDelta = (currentBalance - rewardBalancee)
258+ if ((0 >= rewardDelta))
259+ then throw("Invaliid ackRewards params")
260+ else {
261+ let _reward = rewardDelta
262+ let newRewardPerTokenStored = updateReward(NO_ADDDRESS, NO_STAKER)._1
263+ let timestamp = currentTimestampSec()
264+ let newRewardRate = if ((timestamp > periodFinish()))
265+ then (_reward / DURATION)
266+ else {
267+ let remainingTime = (periodFinish() - timestamp)
268+ let leftover = (rewardRate() * remainingTime)
269+ ((_reward + leftover) / DURATION)
270+ }
271+ (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
272+ }
273+ }
274+
275+
276+
277+@Callable(i)
278+func view_reward (_staker) = {
279+ let stakerEarned = updateReward(_staker, 0)._3
280+ throw(toString(usdnFromDecimals(stakerEarned)))
281+ }
282+
283+
284+@Verifier(tx)
285+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
286+

github/deemru/w8io/c3f4982 
43.70 ms