tx · 8otep9FLY12CxpHZjxv8vV9mwiUA1r43gWWppzJ7t2RF

3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy:  -0.03700000 Waves

2022.07.07 10:56 [2128992] smart account 3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy > SELF 0.00000000 Waves

{ "type": 13, "id": "8otep9FLY12CxpHZjxv8vV9mwiUA1r43gWWppzJ7t2RF", "fee": 3700000, "feeAssetId": null, "timestamp": 1657180676551, "version": 2, "chainId": 84, "sender": "3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy", "senderPublicKey": "GzEvTfwa3251fRwyTL99QzUmkDGBdn4cNr2mR6XQ1UmR", "proofs": [ "3863YBKbWxuVyUEmtGxqSFM8WaQgAVoF9bxugkESpnQwaUZrWKE3EsH9zUYH6YsY4FyNU9VoeiTk1NvWys86bK7W" ], "script": "base64:AAIFAAAAAAAAABkIAhIDCgEIEgASAwoBARIAEgASABIDCgEIAAAANAAAAAANa190b3RhbFN1cHBseQIAAAANa190b3RhbFN1cHBseQAAAAAPa19yZXdhcmRCYWxhbmNlAgAAAA9rX3Jld2FyZEJhbGFuY2UAAAAAEGtfbGFzdFVwZGF0ZVRpbWUCAAAAEGtfbGFzdFVwZGF0ZVRpbWUAAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQCAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAADGtfcmV3YXJkUmF0ZQIAAAAMa19yZXdhcmRSYXRlAAAAAA5rX3BlcmlvZEZpbmlzaAIAAAAOa19wZXJpb2RGaW5pc2gAAAAACWtfYmFsYW5jZQIAAAAJa19iYWxhbmNlAAAAABRrX3VzZXJSZXdhcmRQZXJUb2tlbgIAAAAUa191c2VyUmV3YXJkUGVyVG9rZW4AAAAADGtfdXNlclJld2FyZAIAAAAMa191c2VyUmV3YXJkAAAAAA1rX2luaXRpYWxpemVkAgAAAA1rX2luaXRpYWxpemVkAAAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAAUa19jb29yZGluYXRvckFkZHJlc3MAAAAAEmtfZ292ZXJuYW5jZV9hc3NldAIAAAALa19nb3ZfYXNzZXQAAAAADWtfcXVvdGVfYXNzZXQCAAAADWtfcXVvdGVfYXNzZXQAAAAAEmtfYWRtaW5fcHVibGljX2tleQIAAAASa19hZG1pbl9wdWJsaWNfa2V5AQAAAAtjb29yZGluYXRvcgAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCYAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIAAAATQ29vcmRpbmF0b3Igbm90IHNldAEAAAAOYWRtaW5QdWJsaWNLZXkAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAtjb29yZGluYXRvcgAAAAAFAAAAEmtfYWRtaW5fcHVibGljX2tleQEAAAAPZ292ZXJuYW5jZUFzc2V0AAAAAAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACCQEAAAALY29vcmRpbmF0b3IAAAAABQAAABJrX2dvdmVybmFuY2VfYXNzZXQBAAAACnF1b3RlQXNzZXQAAAAACQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIJAQAAAAtjb29yZGluYXRvcgAAAAAFAAAADWtfcXVvdGVfYXNzZXQAAAAADERFQ0lNQUxfVU5JVAkAAGgAAAACAAAAAAAAAAABCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIJAABoAAAAAgkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAAAAAAAAoAAAAACERVUkFUSU9OCQAAaAAAAAIJAABoAAAAAgAAAAAAAAAAPAAAAAAAAAAAPAAAAAAAAAAAGAAAAAAKTk9fQUREUkVTUwIAAAAAAAAAAAlOT19TVEFLRVIAAAAAAAAAAAABAAAAEHVzZG5Gcm9tRGVjaW1hbHMAAAABAAAAB19hbW91bnQJAABpAAAAAgUAAAAHX2Ftb3VudAAAAAAAAAAAZAEAAAAOdXNkblRvRGVjaW1hbHMAAAABAAAAB19hbW91bnQJAABoAAAAAgUAAAAHX2Ftb3VudAAAAAAAAAAAZAEAAAAEZGl2ZAAAAAIAAAACX3gAAAACX3kJAQAAAAhmcmFjdGlvbgAAAAQFAAAAAl94BQAAAAxERUNJTUFMX1VOSVQFAAAAAl95BQAAAAhIQUxGRVZFTgEAAAAEbXVsZAAAAAIAAAACX3gAAAACX3kJAQAAAAhmcmFjdGlvbgAAAAQFAAAAAl94BQAAAAJfeQUAAAAMREVDSU1BTF9VTklUBQAAAAhIQUxGRVZFTgEAAAADYWJzAAAAAQAAAAJfeAMJAABmAAAAAgUAAAACX3gAAAAAAAAAAAAFAAAAAl94CQEAAAABLQAAAAEFAAAAAl94AQAAAARtaW52AAAAAgAAAAJfeAAAAAJfeQMJAABmAAAAAgUAAAACX3gFAAAAAl95BQAAAAJfeQUAAAACX3gBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgAAAARfa2V5AAAACF9hZGRyZXNzCQABLAAAAAIJAAEsAAAAAgUAAAAEX2tleQIAAAABXwUAAAAIX2FkZHJlc3MBAAAAA2ludAAAAAEAAAABawkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAAWsJAAEsAAAAAgIAAAANbm8gdmFsdWUgZm9yIAUAAAABawEAAAAEaW50MAAAAAEAAAABawkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAAAFrAAAAAAAAAAAAAQAAAAt0b3RhbFN1cHBseQAAAAAJAQAAAARpbnQwAAAAAQUAAAANa190b3RhbFN1cHBseQEAAAAUcmV3YXJkUGVyVG9rZW5TdG9yZWQAAAAACQEAAAAEaW50MAAAAAEFAAAAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQBAAAADmxhc3RVcGRhdGVUaW1lAAAAAAkBAAAABGludDAAAAABBQAAABBrX2xhc3RVcGRhdGVUaW1lAQAAAApyZXdhcmRSYXRlAAAAAAkBAAAABGludDAAAAABBQAAAAxrX3Jld2FyZFJhdGUBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAARpbnQwAAAAAQUAAAAOa19wZXJpb2RGaW5pc2gBAAAADXJld2FyZEJhbGFuY2UAAAAACQEAAAAEaW50MAAAAAEFAAAAD2tfcmV3YXJkQmFsYW5jZQEAAAAHcmV3YXJkcwAAAAEAAAAHX3N0YWtlcgkBAAAABGludDAAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAAxrX3VzZXJSZXdhcmQFAAAAB19zdGFrZXIBAAAAFnVzZXJSZXdhcmRQZXJUb2tlblBhaWQAAAABAAAAB19zdGFrZXIJAQAAAARpbnQwAAAAAQkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAUa191c2VyUmV3YXJkUGVyVG9rZW4FAAAAB19zdGFrZXIBAAAACWJhbGFuY2VPZgAAAAEAAAAHX3N0YWtlcgkBAAAABGludDAAAAABCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAAAlrX2JhbGFuY2UFAAAAB19zdGFrZXIBAAAAC2luaXRpYWxpemVkAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAA1rX2luaXRpYWxpemVkBwEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEAAAAGX2RlbHRhCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rX3Jld2FyZEJhbGFuY2UJAABkAAAAAgkBAAAADXJld2FyZEJhbGFuY2UAAAAABQAAAAZfZGVsdGEFAAAAA25pbAEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEAAAALX3Jld2FyZFJhdGUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtfcmV3YXJkUmF0ZQUAAAALX3Jld2FyZFJhdGUFAAAAA25pbAEAAAAKdXBkYXRlVGltZQAAAAIAAAAPX2xhc3RVcGRhdGVUaW1lAAAADV9wZXJpb2RGaW5pc2gJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGtfbGFzdFVwZGF0ZVRpbWUFAAAAD19sYXN0VXBkYXRlVGltZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOa19wZXJpb2RGaW5pc2gFAAAADV9wZXJpb2RGaW5pc2gFAAAAA25pbAEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABAAAAFV9yZXdhcmRQZXJUb2tlblN0b3JlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAWa19yZXdhcmRQZXJUb2tlblN0b3JlZAUAAAAVX3Jld2FyZFBlclRva2VuU3RvcmVkBQAAAANuaWwBAAAAEXVwZGF0ZVVzZXJSZXdhcmRzAAAAAwAAAAdfc3Rha2VyAAAAB19yZXdhcmQAAAATX3VzZXJSZXdhcmRQZXJUb2tlbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAMa191c2VyUmV3YXJkBQAAAAdfc3Rha2VyBQAAAAdfcmV3YXJkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOdG9Db21wb3NpdGVLZXkAAAACBQAAABRrX3VzZXJSZXdhcmRQZXJUb2tlbgUAAAAHX3N0YWtlcgUAAAATX3VzZXJSZXdhcmRQZXJUb2tlbgUAAAADbmlsAQAAAA11cGRhdGVCYWxhbmNlAAAAAgAAAAdfc3Rha2VyAAAABl9kZWx0YQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADnRvQ29tcG9zaXRlS2V5AAAAAgUAAAAJa19iYWxhbmNlBQAAAAdfc3Rha2VyCQAAZAAAAAIJAQAAAAliYWxhbmNlT2YAAAABBQAAAAdfc3Rha2VyBQAAAAZfZGVsdGEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtfdG90YWxTdXBwbHkJAABkAAAAAgkBAAAAC3RvdGFsU3VwcGx5AAAAAAUAAAAGX2RlbHRhBQAAAANuaWwBAAAAE2N1cnJlbnRUaW1lc3RhbXBTZWMAAAAACQAAaQAAAAIIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAAAAAAAAAAPoAQAAABhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUAAAAACQEAAAAEbWludgAAAAIJAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAkBAAAADHBlcmlvZEZpbmlzaAAAAAABAAAADnJld2FyZFBlclRva2VuAAAAAQAAAA1fYmFsYW5jZURlbHRhAwkAAAAAAAACCQAAZAAAAAIJAQAAAAt0b3RhbFN1cHBseQAAAAAFAAAADV9iYWxhbmNlRGVsdGEAAAAAAAAAAAAJAQAAABRyZXdhcmRQZXJUb2tlblN0b3JlZAAAAAAEAAAADHRpbWVJbnRlcnZhbAkAAGUAAAACCQEAAAAYbGFzdFRpbWVSZXdhcmRBcHBsaWNhYmxlAAAAAAkBAAAADmxhc3RVcGRhdGVUaW1lAAAAAAQAAAASYWN0dWFsVGltZUludGVydmFsAwkAAGYAAAACAAAAAAAAAAAABQAAAAx0aW1lSW50ZXJ2YWwAAAAAAAAAAAAFAAAADHRpbWVJbnRlcnZhbAQAAAAEZGlmZgkAAGgAAAACCQEAAAAEZGl2ZAAAAAIJAQAAAApyZXdhcmRSYXRlAAAAAAkAAGQAAAACCQEAAAALdG90YWxTdXBwbHkAAAAABQAAAA1fYmFsYW5jZURlbHRhBQAAABJhY3R1YWxUaW1lSW50ZXJ2YWwJAABkAAAAAgkBAAAAFHJld2FyZFBlclRva2VuU3RvcmVkAAAAAAUAAAAEZGlmZgEAAAAGZWFybmVkAAAAAgAAAAdfc3Rha2VyAAAADV9iYWxhbmNlRGVsdGEEAAAAC3Jld2FyZERlbHRhCQAAZQAAAAIJAQAAAA5yZXdhcmRQZXJUb2tlbgAAAAEFAAAADV9iYWxhbmNlRGVsdGEJAQAAABZ1c2VyUmV3YXJkUGVyVG9rZW5QYWlkAAAAAQUAAAAHX3N0YWtlcgkAAGQAAAACCQEAAAAEbXVsZAAAAAIJAABkAAAAAgkBAAAACWJhbGFuY2VPZgAAAAEFAAAAB19zdGFrZXIFAAAADV9iYWxhbmNlRGVsdGEFAAAAC3Jld2FyZERlbHRhCQEAAAAHcmV3YXJkcwAAAAEFAAAAB19zdGFrZXIBAAAADHVwZGF0ZVJld2FyZAAAAAIAAAAHX3N0YWtlcgAAAA1fYmFsYW5jZURlbHRhBAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAADnJld2FyZFBlclRva2VuAAAAAQUAAAANX2JhbGFuY2VEZWx0YQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUJAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAQAAAALJHQwNDg0MjUwMzQDCQEAAAACIT0AAAACBQAAAAdfc3Rha2VyAgAAAAAJAAUUAAAAAgkBAAAABmVhcm5lZAAAAAIFAAAAB19zdGFrZXIFAAAADV9iYWxhbmNlRGVsdGEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQAFFAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAEAAAADHN0YWtlckVhcm5lZAgFAAAACyR0MDQ4NDI1MDM0AAAAAl8xBAAAABhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQAAAAskdDA0ODQyNTAzNAAAAAJfMgkABRYAAAAEBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAUAAAARbmV3TGFzdFVwZGF0ZVRpbWUFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkAAAABwAAAAFpAQAAAAppbml0aWFsaXplAAAAAQAAAAxfY29vcmRpbmF0b3IDCQEAAAALaW5pdGlhbGl6ZWQAAAAACQAAAgAAAAECAAAAE0FscmVhZHkgaW5pdGlhbGl6ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAUa19jb29yZGluYXRvckFkZHJlc3MFAAAADF9jb29yZGluYXRvcgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAANa19pbml0aWFsaXplZAYFAAAAA25pbAAAAAFpAQAAAAVzdGFrZQAAAAAEAAAAB19zdGFrZXIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAdfYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQDAwkBAAAAAiE9AAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAkBAAAAD2dvdmVybmFuY2VBc3NldAAAAAAGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAJAAACAAAAAQIAAAAWSW52YWxpZCBjYWxsIHRvICBzdGFrZQQAAAALJHQwNTY5MDU4NTUJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAABAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFAAAACyR0MDU2OTA1ODU1AAAAAl8xBAAAABFuZXdMYXN0VXBkYXRlVGltZQgFAAAACyR0MDU2OTA1ODU1AAAAAl8yBAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA1NjkwNTg1NQAAAAJfMwQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNTY5MDU4NTUAAAACXzQJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgUAAAAHX2Ftb3VudAAAAAFpAQAAAAd1blN0YWtlAAAAAQAAAAdfYW1vdW50BAAAAAdfc3Rha2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgMDAwkAAGYAAAACBQAAAAdfYW1vdW50CQEAAAAJYmFsYW5jZU9mAAAAAQUAAAAHX3N0YWtlcgYJAQAAAAIhPQAAAAIIBQAAAAFpAAAACHBheW1lbnRzBQAAAANuaWwGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAJAAACAAAAAQIAAAAaSW52YWxpZCB1blN0YWtlIHBhcmFtZXRlcnMEAAAACyR0MDYzODY2NTUxCQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAHX3N0YWtlcgAAAAAAAAAAAAQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQAAAAskdDA2Mzg2NjU1MQAAAAJfMQQAAAARbmV3TGFzdFVwZGF0ZVRpbWUIBQAAAAskdDA2Mzg2NjU1MQAAAAJfMgQAAAAMc3Rha2VyRWFybmVkCAUAAAALJHQwNjM4NjY1NTEAAAACXzMEAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFAAAACyR0MDYzODY2NTUxAAAAAl80CQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIFAAAADHN0YWtlckVhcm5lZAUAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEAAAAadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQAAAABBQAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAABFuZXdMYXN0VXBkYXRlVGltZQkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAQAAAA11cGRhdGVCYWxhbmNlAAAAAgUAAAAHX3N0YWtlcgkBAAAAAS0AAAABBQAAAAdfYW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAHX2Ftb3VudAkBAAAAD2dvdmVybmFuY2VBc3NldAAAAAAFAAAAA25pbAAAAAFpAQAAAA93aXRoZHJhd1Jld2FyZHMAAAAABAAAAAdfc3Rha2VyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALJHQwNzAyNzcxNzIJAQAAAAx1cGRhdGVSZXdhcmQAAAACBQAAAAdfc3Rha2VyAAAAAAAAAAAABAAAABduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFAAAACyR0MDcwMjc3MTcyAAAAAl8xBAAAABFuZXdMYXN0VXBkYXRlVGltZQgFAAAACyR0MDcwMjc3MTcyAAAAAl8yBAAAAAxzdGFrZXJFYXJuZWQIBQAAAAskdDA3MDI3NzE3MgAAAAJfMwQAAAAYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUAAAALJHQwNzAyNzcxNzIAAAACXzQDAwkAAGcAAAACAAAAAAAAAAAABQAAAAxzdGFrZXJFYXJuZWQGCQEAAAABIQAAAAEJAQAAAAtpbml0aWFsaXplZAAAAAAJAAACAAAAAQIAAAAJTm8gcmV3YXJkCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABF1cGRhdGVVc2VyUmV3YXJkcwAAAAMFAAAAB19zdGFrZXIAAAAAAAAAAAAFAAAAGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAARbmV3TGFzdFVwZGF0ZVRpbWUJAQAAAAxwZXJpb2RGaW5pc2gAAAAACQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEJAQAAAAEtAAAAAQUAAAAMc3Rha2VyRWFybmVkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgkBAAAAEHVzZG5Gcm9tRGVjaW1hbHMAAAABBQAAAAxzdGFrZXJFYXJuZWQJAQAAAApxdW90ZUFzc2V0AAAAAAUAAAADbmlsAAAAAWkBAAAACmFkZFJld2FyZHMAAAAAAwMJAQAAAAIhPQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQJAQAAAApxdW90ZUFzc2V0AAAAAAYJAQAAAAEhAAAAAQkBAAAAC2luaXRpYWxpemVkAAAAAAkAAAIAAAABAgAAABlJbnZhbGlkIGFkZFJld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkCQEAAAAOdXNkblRvRGVjaW1hbHMAAAABCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQEAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAkBAAAADHVwZGF0ZVJld2FyZAAAAAIFAAAACk5PX0FERFJFU1MFAAAACU5PX1NUQUtFUgAAAAJfMQQAAAAJdGltZXN0YW1wCQEAAAATY3VycmVudFRpbWVzdGFtcFNlYwAAAAAEAAAADW5ld1Jld2FyZFJhdGUDCQAAZgAAAAIFAAAACXRpbWVzdGFtcAkBAAAADHBlcmlvZEZpbmlzaAAAAAAJAABpAAAAAgUAAAAHX3Jld2FyZAUAAAAIRFVSQVRJT04EAAAADXJlbWFpbmluZ1RpbWUJAABlAAAAAgkBAAAADHBlcmlvZEZpbmlzaAAAAAAFAAAACXRpbWVzdGFtcAQAAAAIbGVmdG92ZXIJAABoAAAAAgkBAAAACnJld2FyZFJhdGUAAAAABQAAAA1yZW1haW5pbmdUaW1lCQAAaQAAAAIJAABkAAAAAgUAAAAHX3Jld2FyZAUAAAAIbGVmdG92ZXIFAAAACERVUkFUSU9OCQAETgAAAAIJAAROAAAAAgkABE4AAAACCQEAAAAQdXBkYXRlUmV3YXJkUmF0ZQAAAAEFAAAADW5ld1Jld2FyZFJhdGUJAQAAABp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAAAAAEFAAAAF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEAAAATdXBkYXRlUmV3YXJkQmFsYW5jZQAAAAEFAAAAB19yZXdhcmQJAQAAAAp1cGRhdGVUaW1lAAAAAgUAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAACXRpbWVzdGFtcAUAAAAIRFVSQVRJT04AAAABaQEAAAAKYWNrUmV3YXJkcwAAAAAEAAAADmN1cnJlbnRCYWxhbmNlCQEAAAAOdXNkblRvRGVjaW1hbHMAAAABCQAD8AAAAAIFAAAABHRoaXMJAQAAAApxdW90ZUFzc2V0AAAAAAQAAAAOX3Jld2FyZEJhbGFuY2UJAQAAAA1yZXdhcmRCYWxhbmNlAAAAAAQAAAALcmV3YXJkRGVsdGEJAABlAAAAAgUAAAAOY3VycmVudEJhbGFuY2UFAAAADl9yZXdhcmRCYWxhbmNlAwkAAGcAAAACAAAAAAAAAAAABQAAAAtyZXdhcmREZWx0YQkAAAIAAAABAgAAABlJbnZhbGlkIGFja1Jld2FyZHMgcGFyYW1zBAAAAAdfcmV3YXJkBQAAAAtyZXdhcmREZWx0YQQAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEAAAAMdXBkYXRlUmV3YXJkAAAAAgUAAAAKTk9fQUREUkVTUwUAAAAJTk9fU1RBS0VSAAAAAl8xBAAAAAl0aW1lc3RhbXAJAQAAABNjdXJyZW50VGltZXN0YW1wU2VjAAAAAAQAAAANbmV3UmV3YXJkUmF0ZQMJAABmAAAAAgUAAAAJdGltZXN0YW1wCQEAAAAMcGVyaW9kRmluaXNoAAAAAAkAAGkAAAACBQAAAAdfcmV3YXJkBQAAAAhEVVJBVElPTgQAAAANcmVtYWluaW5nVGltZQkAAGUAAAACCQEAAAAMcGVyaW9kRmluaXNoAAAAAAUAAAAJdGltZXN0YW1wBAAAAAhsZWZ0b3ZlcgkAAGgAAAACCQEAAAAKcmV3YXJkUmF0ZQAAAAAFAAAADXJlbWFpbmluZ1RpbWUJAABpAAAAAgkAAGQAAAACBQAAAAdfcmV3YXJkBQAAAAhsZWZ0b3ZlcgUAAAAIRFVSQVRJT04JAAROAAAAAgkABE4AAAACCQAETgAAAAIJAQAAABB1cGRhdGVSZXdhcmRSYXRlAAAAAQUAAAANbmV3UmV3YXJkUmF0ZQkBAAAAGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAAAAAQUAAAAXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQAAABN1cGRhdGVSZXdhcmRCYWxhbmNlAAAAAQUAAAAHX3Jld2FyZAkBAAAACnVwZGF0ZVRpbWUAAAACBQAAAAl0aW1lc3RhbXAJAABkAAAAAgUAAAAJdGltZXN0YW1wBQAAAAhEVVJBVElPTgAAAAFpAQAAAAt2aWV3X3Jld2FyZAAAAAEAAAAHX3N0YWtlcgQAAAAMc3Rha2VyRWFybmVkCAkBAAAADHVwZGF0ZVJld2FyZAAAAAIFAAAAB19zdGFrZXIAAAAAAAAAAAAAAAACXzMJAAACAAAAAQkAAaQAAAABCQEAAAAQdXNkbkZyb21EZWNpbWFscwAAAAEFAAAADHN0YWtlckVhcm5lZAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQEAAAAOYWRtaW5QdWJsaWNLZXkAAAAAza+c0A==", "height": 2128992, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: AZfJwranHSXKucjoToZXrfqpxi7VyY46kqZXSp8sFwUu 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_ADDRESS = ""
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 actualTimeInterval = if ((0 > timeInterval))
142+ then 0
143+ else timeInterval
144+ let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * actualTimeInterval)
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 $t048425034 = if ((_staker != ""))
159+ then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
160+ else $Tuple2(0, 0)
161+ let stakerEarned = $t048425034._1
162+ let stakerRewardPerTokenPaid = $t048425034._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 $t056905855 = updateReward(_staker, 0)
184+ let newRewardPerTokenStored = $t056905855._1
185+ let newLastUpdateTime = $t056905855._2
186+ let stakerEarned = $t056905855._3
187+ let stakerRewardPerTokenPaid = $t056905855._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 parameters")
203+ else {
204+ let $t063866551 = updateReward(_staker, 0)
205+ let newRewardPerTokenStored = $t063866551._1
206+ let newLastUpdateTime = $t063866551._2
207+ let stakerEarned = $t063866551._3
208+ let stakerRewardPerTokenPaid = $t063866551._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 $t070277172 = updateReward(_staker, 0)
219+ let newRewardPerTokenStored = $t070277172._1
220+ let newLastUpdateTime = $t070277172._2
221+ let stakerEarned = $t070277172._3
222+ let stakerRewardPerTokenPaid = $t070277172._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("Invalid addRewards params")
237+ else {
238+ let _reward = usdnToDecimals(i.payments[0].amount)
239+ let newRewardPerTokenStored = updateReward(NO_ADDRESS, 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 _rewardBalance = rewardBalance()
257+ let rewardDelta = (currentBalance - _rewardBalance)
258+ if ((0 >= rewardDelta))
259+ then throw("Invalid ackRewards params")
260+ else {
261+ let _reward = rewardDelta
262+ let newRewardPerTokenStored = updateReward(NO_ADDRESS, 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/873ac7e 
21.28 ms