tx · AZfJwranHSXKucjoToZXrfqpxi7VyY46kqZXSp8sFwUu

3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy:  -0.03700000 Waves

2022.09.13 21:27 [2227684] smart account 3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy > SELF 0.00000000 Waves

{ "type": 13, "id": "AZfJwranHSXKucjoToZXrfqpxi7VyY46kqZXSp8sFwUu", "fee": 3700000, "feeAssetId": null, "timestamp": 1663093680047, "version": 2, "chainId": 84, "sender": "3N4QWZXfZqNf284CJVbtxzCerqARoALxJEy", "senderPublicKey": "GzEvTfwa3251fRwyTL99QzUmkDGBdn4cNr2mR6XQ1UmR", "proofs": [ "2NM3wKR838sqVTAfoiNCU84grKVL2i28wfpjDGpEd91PX4j4TeTUjyA3mmGBgTSqipJys4msfnZ43eCXycxmQ3yL" ], "script": "base64:BgIeCAISAwoBCBIAEgMKAQESABIAEgASAwoBCBIDCgEINAANa190b3RhbFN1cHBseQINa190b3RhbFN1cHBseQAPa19yZXdhcmRCYWxhbmNlAg9rX3Jld2FyZEJhbGFuY2UAEGtfbGFzdFVwZGF0ZVRpbWUCEGtfbGFzdFVwZGF0ZVRpbWUAFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQCFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQADGtfcmV3YXJkUmF0ZQIMa19yZXdhcmRSYXRlAA5rX3BlcmlvZEZpbmlzaAIOa19wZXJpb2RGaW5pc2gACWtfYmFsYW5jZQIJa19iYWxhbmNlABRrX3VzZXJSZXdhcmRQZXJUb2tlbgIUa191c2VyUmV3YXJkUGVyVG9rZW4ADGtfdXNlclJld2FyZAIMa191c2VyUmV3YXJkAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAEmtfZ292ZXJuYW5jZV9hc3NldAILa19nb3ZfYXNzZXQADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAEmtfYWRtaW5fcHVibGljX2tleQISa19hZG1pbl9wdWJsaWNfa2V5AQtjb29yZGluYXRvcgAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEPZ292ZXJuYW5jZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRJrX2dvdmVybmFuY2VfYXNzZXQBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoACgAKAAhEVVJBVElPTgkAaAIJAGgCADwAPAAYAApOT19BRERSRVNTAgAACU5PX1NUQUtFUgAAARB1c2RuRnJvbURlY2ltYWxzAQdfYW1vdW50CQBpAgUHX2Ftb3VudABkAQ51c2RuVG9EZWNpbWFscwEHX2Ftb3VudAkAaAIFB19hbW91bnQAZAEEZGl2ZAICX3gCX3kJAG4EBQJfeAUMREVDSU1BTF9VTklUBQJfeQUISEFMRkVWRU4BBG11bGQCAl94Al95CQBuBAUCX3gFAl95BQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQRtaW52AgJfeAJfeQMJAGYCBQJfeAUCX3kFAl95BQJfeAEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQRpbnQwAQFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWsAAAELdG90YWxTdXBwbHkACQEEaW50MAEFDWtfdG90YWxTdXBwbHkBFHJld2FyZFBlclRva2VuU3RvcmVkAAkBBGludDABBRZrX3Jld2FyZFBlclRva2VuU3RvcmVkAQ5sYXN0VXBkYXRlVGltZQAJAQRpbnQwAQUQa19sYXN0VXBkYXRlVGltZQEKcmV3YXJkUmF0ZQAJAQRpbnQwAQUMa19yZXdhcmRSYXRlAQxwZXJpb2RGaW5pc2gACQEEaW50MAEFDmtfcGVyaW9kRmluaXNoAQ1yZXdhcmRCYWxhbmNlAAkBBGludDABBQ9rX3Jld2FyZEJhbGFuY2UBB3Jld2FyZHMBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUMa191c2VyUmV3YXJkBQdfc3Rha2VyARZ1c2VyUmV3YXJkUGVyVG9rZW5QYWlkAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFFGtfdXNlclJld2FyZFBlclRva2VuBQdfc3Rha2VyAQliYWxhbmNlT2YBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUJa19iYWxhbmNlBQdfc3Rha2VyAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBE3VwZGF0ZVJld2FyZEJhbGFuY2UBBl9kZWx0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19yZXdhcmRCYWxhbmNlCQBkAgkBDXJld2FyZEJhbGFuY2UABQZfZGVsdGEFA25pbAEQdXBkYXRlUmV3YXJkUmF0ZQELX3Jld2FyZFJhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtfcmV3YXJkUmF0ZQULX3Jld2FyZFJhdGUFA25pbAEKdXBkYXRlVGltZQIPX2xhc3RVcGRhdGVUaW1lDV9wZXJpb2RGaW5pc2gJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbGFzdFVwZGF0ZVRpbWUFD19sYXN0VXBkYXRlVGltZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUOa19wZXJpb2RGaW5pc2gFDV9wZXJpb2RGaW5pc2gFA25pbAEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBFV9yZXdhcmRQZXJUb2tlblN0b3JlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19yZXdhcmRQZXJUb2tlblN0b3JlZAUVX3Jld2FyZFBlclRva2VuU3RvcmVkBQNuaWwBEXVwZGF0ZVVzZXJSZXdhcmRzAwdfc3Rha2VyB19yZXdhcmQTX3VzZXJSZXdhcmRQZXJUb2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUMa191c2VyUmV3YXJkBQdfc3Rha2VyBQdfcmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRRrX3VzZXJSZXdhcmRQZXJUb2tlbgUHX3N0YWtlcgUTX3VzZXJSZXdhcmRQZXJUb2tlbgUDbmlsAQ11cGRhdGVCYWxhbmNlAgdfc3Rha2VyBl9kZWx0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUJa19iYWxhbmNlBQdfc3Rha2VyCQBkAgkBCWJhbGFuY2VPZgEFB19zdGFrZXIFBl9kZWx0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa190b3RhbFN1cHBseQkAZAIJAQt0b3RhbFN1cHBseQAFBl9kZWx0YQUDbmlsARNjdXJyZW50VGltZXN0YW1wU2VjAAkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHARhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUACQEEbWludgIJARNjdXJyZW50VGltZXN0YW1wU2VjAAkBDHBlcmlvZEZpbmlzaAABDnJld2FyZFBlclRva2VuAQ1fYmFsYW5jZURlbHRhAwkAAAIJAGQCCQELdG90YWxTdXBwbHkABQ1fYmFsYW5jZURlbHRhAAAJARRyZXdhcmRQZXJUb2tlblN0b3JlZAAEDHRpbWVJbnRlcnZhbAkAZQIJARhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUACQEObGFzdFVwZGF0ZVRpbWUABBJhY3R1YWxUaW1lSW50ZXJ2YWwDCQBmAgAABQx0aW1lSW50ZXJ2YWwAAAUMdGltZUludGVydmFsBARkaWZmCQEEZGl2ZAIJAGgCCQEKcmV3YXJkUmF0ZQAFEmFjdHVhbFRpbWVJbnRlcnZhbAkAZAIJAQt0b3RhbFN1cHBseQAFDV9iYWxhbmNlRGVsdGEJAGQCCQEUcmV3YXJkUGVyVG9rZW5TdG9yZWQABQRkaWZmAQZlYXJuZWQCB19zdGFrZXINX2JhbGFuY2VEZWx0YQQLcmV3YXJkRGVsdGEJAGUCCQEOcmV3YXJkUGVyVG9rZW4BBQ1fYmFsYW5jZURlbHRhCQEWdXNlclJld2FyZFBlclRva2VuUGFpZAEFB19zdGFrZXIJAGQCCQEEbXVsZAIJAGQCCQEJYmFsYW5jZU9mAQUHX3N0YWtlcgUNX2JhbGFuY2VEZWx0YQULcmV3YXJkRGVsdGEJAQdyZXdhcmRzAQUHX3N0YWtlcgEMdXBkYXRlUmV3YXJkAgdfc3Rha2VyDV9iYWxhbmNlRGVsdGEEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEOcmV3YXJkUGVyVG9rZW4BBQ1fYmFsYW5jZURlbHRhBBFuZXdMYXN0VXBkYXRlVGltZQkBE2N1cnJlbnRUaW1lc3RhbXBTZWMABAskdDA0ODQyNTAzNAMJAQIhPQIFB19zdGFrZXICAAkAlAoCCQEGZWFybmVkAgUHX3N0YWtlcgUNX2JhbGFuY2VEZWx0YQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAJQKAgAAAAAEDHN0YWtlckVhcm5lZAgFCyR0MDQ4NDI1MDM0Al8xBBhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQskdDA0ODQyNTAzNAJfMgkAlgoEBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAURbmV3TGFzdFVwZGF0ZVRpbWUFDHN0YWtlckVhcm5lZAUYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAFpAQppbml0aWFsaXplAQxfY29vcmRpbmF0b3IDCQELaW5pdGlhbGl6ZWQACQACAQITQWxyZWFkeSBpbml0aWFsaXplZAkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBBXN0YWtlAAQHX3N0YWtlcgkApQgBCAUBaQZjYWxsZXIEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBD2dvdmVybmFuY2VBc3NldAAGCQEBIQEJAQtpbml0aWFsaXplZAAJAAIBAhZJbnZhbGlkIGNhbGwgdG8gIHN0YWtlBAskdDA1NjkwNTg1NQkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQskdDA1NjkwNTg1NQJfMQQRbmV3TGFzdFVwZGF0ZVRpbWUIBQskdDA1NjkwNTg1NQJfMgQMc3Rha2VyRWFybmVkCAULJHQwNTY5MDU4NTUCXzMEGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFCyR0MDU2OTA1ODU1Al80CQDOCAIJAM4IAgkAzggCCQERdXBkYXRlVXNlclJld2FyZHMDBQdfc3Rha2VyBQxzdGFrZXJFYXJuZWQFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQp1cGRhdGVUaW1lAgURbmV3TGFzdFVwZGF0ZVRpbWUJAQxwZXJpb2RGaW5pc2gACQENdXBkYXRlQmFsYW5jZQIFB19zdGFrZXIFB19hbW91bnQBaQEHdW5TdGFrZQEHX2Ftb3VudAQHX3N0YWtlcgkApQgBCAUBaQZjYWxsZXIDAwMJAGYCBQdfYW1vdW50CQEJYmFsYW5jZU9mAQUHX3N0YWtlcgYJAQIhPQIIBQFpCHBheW1lbnRzBQNuaWwGCQEBIQEJAQtpbml0aWFsaXplZAAJAAIBAhpJbnZhbGlkIHVuU3Rha2UgcGFyYW1ldGVycwQLJHQwNjM4NjY1NTEJAQx1cGRhdGVSZXdhcmQCBQdfc3Rha2VyAAAEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAULJHQwNjM4NjY1NTECXzEEEW5ld0xhc3RVcGRhdGVUaW1lCAULJHQwNjM4NjY1NTECXzIEDHN0YWtlckVhcm5lZAgFCyR0MDYzODY2NTUxAl8zBBhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQskdDA2Mzg2NjU1MQJfNAkAzggCCQDOCAIJAM4IAgkAzggCCQERdXBkYXRlVXNlclJld2FyZHMDBQdfc3Rha2VyBQxzdGFrZXJFYXJuZWQFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQp1cGRhdGVUaW1lAgURbmV3TGFzdFVwZGF0ZVRpbWUJAQxwZXJpb2RGaW5pc2gACQENdXBkYXRlQmFsYW5jZQIFB19zdGFrZXIJAQEtAQUHX2Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB19hbW91bnQJAQ9nb3Zlcm5hbmNlQXNzZXQABQNuaWwBaQEPd2l0aGRyYXdSZXdhcmRzAAQHX3N0YWtlcgkApQgBCAUBaQZjYWxsZXIECyR0MDcwMjc3MTcyCQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAABBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFCyR0MDcwMjc3MTcyAl8xBBFuZXdMYXN0VXBkYXRlVGltZQgFCyR0MDcwMjc3MTcyAl8yBAxzdGFrZXJFYXJuZWQIBQskdDA3MDI3NzE3MgJfMwQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAULJHQwNzAyNzcxNzICXzQDAwkAZwIAAAUMc3Rha2VyRWFybmVkBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIJTm8gcmV3YXJkCQDOCAIJAM4IAgkAzggCCQDOCAIJARF1cGRhdGVVc2VyUmV3YXJkcwMFB19zdGFrZXIAAAUYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCQEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBCnVwZGF0ZVRpbWUCBRFuZXdMYXN0VXBkYXRlVGltZQkBDHBlcmlvZEZpbmlzaAAJARN1cGRhdGVSZXdhcmRCYWxhbmNlAQkBAS0BBQxzdGFrZXJFYXJuZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEQdXNkbkZyb21EZWNpbWFscwEFDHN0YWtlckVhcm5lZAkBCnF1b3RlQXNzZXQABQNuaWwBaQEKYWRkUmV3YXJkcwADAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKcXVvdGVBc3NldAAGCQEBIQEJAQtpbml0aWFsaXplZAAJAAIBAhlJbnZhbGlkIGFkZFJld2FyZHMgcGFyYW1zBAdfcmV3YXJkCQEOdXNkblRvRGVjaW1hbHMBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEMdXBkYXRlUmV3YXJkAgUKTk9fQUREUkVTUwUJTk9fU1RBS0VSAl8xBAl0aW1lc3RhbXAJARNjdXJyZW50VGltZXN0YW1wU2VjAAQNbmV3UmV3YXJkUmF0ZQMJAGYCBQl0aW1lc3RhbXAJAQxwZXJpb2RGaW5pc2gACQBpAgUHX3Jld2FyZAUIRFVSQVRJT04EDXJlbWFpbmluZ1RpbWUJAGUCCQEMcGVyaW9kRmluaXNoAAUJdGltZXN0YW1wBAhsZWZ0b3ZlcgkAaAIJAQpyZXdhcmRSYXRlAAUNcmVtYWluaW5nVGltZQkAaQIJAGQCBQdfcmV3YXJkBQhsZWZ0b3ZlcgUIRFVSQVRJT04JAM4IAgkAzggCCQDOCAIJARB1cGRhdGVSZXdhcmRSYXRlAQUNbmV3UmV3YXJkUmF0ZQkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJARN1cGRhdGVSZXdhcmRCYWxhbmNlAQUHX3Jld2FyZAkBCnVwZGF0ZVRpbWUCBQl0aW1lc3RhbXAJAGQCBQl0aW1lc3RhbXAFCERVUkFUSU9OAWkBCmFja1Jld2FyZHMABA5jdXJyZW50QmFsYW5jZQkBDnVzZG5Ub0RlY2ltYWxzAQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAAEDl9yZXdhcmRCYWxhbmNlCQENcmV3YXJkQmFsYW5jZQAEC3Jld2FyZERlbHRhCQBlAgUOY3VycmVudEJhbGFuY2UFDl9yZXdhcmRCYWxhbmNlAwkAZwIAAAULcmV3YXJkRGVsdGEJAAIBAhlJbnZhbGlkIGFja1Jld2FyZHMgcGFyYW1zBAdfcmV3YXJkBQtyZXdhcmREZWx0YQQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQICQEMdXBkYXRlUmV3YXJkAgUKTk9fQUREUkVTUwUJTk9fU1RBS0VSAl8xBAl0aW1lc3RhbXAJARNjdXJyZW50VGltZXN0YW1wU2VjAAQNbmV3UmV3YXJkUmF0ZQMJAGYCBQl0aW1lc3RhbXAJAQxwZXJpb2RGaW5pc2gACQBpAgUHX3Jld2FyZAUIRFVSQVRJT04EDXJlbWFpbmluZ1RpbWUJAGUCCQEMcGVyaW9kRmluaXNoAAUJdGltZXN0YW1wBAhsZWZ0b3ZlcgkAaAIJAQpyZXdhcmRSYXRlAAUNcmVtYWluaW5nVGltZQkAaQIJAGQCBQdfcmV3YXJkBQhsZWZ0b3ZlcgUIRFVSQVRJT04JAM4IAgkAzggCCQDOCAIJARB1cGRhdGVSZXdhcmRSYXRlAQUNbmV3UmV3YXJkUmF0ZQkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJARN1cGRhdGVSZXdhcmRCYWxhbmNlAQUHX3Jld2FyZAkBCnVwZGF0ZVRpbWUCBQl0aW1lc3RhbXAJAGQCBQl0aW1lc3RhbXAFCERVUkFUSU9OAWkBC3ZpZXdfcmV3YXJkAQdfc3Rha2VyBAxzdGFrZXJFYXJuZWQICQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAAAl8zCQACAQkApAMBCQEQdXNkbkZyb21EZWNpbWFscwEFDHN0YWtlckVhcm5lZAFpAQ1jb21wdXRlUmV3YXJkAQdfc3Rha2VyBAxzdGFrZXJFYXJuZWQICQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAAAl8zCQCUCgIFA25pbAUMc3Rha2VyRWFybmVkAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkBDmFkbWluUHVibGljS2V5AL+CLio=", "height": 2227684, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8otep9FLY12CxpHZjxv8vV9mwiUA1r43gWWppzJ7t2RF Next: FZp5a9PRkYdVhgjhRfcvwv41SP13UBuFmCXvLzmkHT92 Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_totalSupply = "k_totalSupply"
141141 let actualTimeInterval = if ((0 > timeInterval))
142142 then 0
143143 else timeInterval
144- let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * actualTimeInterval)
144+ let diff = divd((rewardRate() * actualTimeInterval), (totalSupply() + _balanceDelta))
145145 (rewardPerTokenStored() + diff)
146146 }
147147
281281 }
282282
283283
284+
285+@Callable(i)
286+func computeReward (_staker) = {
287+ let stakerEarned = updateReward(_staker, 0)._3
288+ $Tuple2(nil, stakerEarned)
289+ }
290+
291+
284292 @Verifier(tx)
285293 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
286294
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# 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 func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set")
3333
3434
3535 func adminPublicKey () = fromBase58String(getStringValue(coordinator(), k_admin_public_key))
3636
3737
3838 func governanceAsset () = fromBase58String(getStringValue(coordinator(), k_governance_asset))
3939
4040
4141 func quoteAsset () = fromBase58String(getStringValue(coordinator(), k_quote_asset))
4242
4343
4444 let DECIMAL_UNIT = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
4545
4646 let DURATION = ((60 * 60) * 24)
4747
4848 let NO_ADDRESS = ""
4949
5050 let NO_STAKER = 0
5151
5252 func usdnFromDecimals (_amount) = (_amount / 100)
5353
5454
5555 func usdnToDecimals (_amount) = (_amount * 100)
5656
5757
5858 func divd (_x,_y) = fraction(_x, DECIMAL_UNIT, _y, HALFEVEN)
5959
6060
6161 func muld (_x,_y) = fraction(_x, _y, DECIMAL_UNIT, HALFEVEN)
6262
6363
6464 func abs (_x) = if ((_x > 0))
6565 then _x
6666 else -(_x)
6767
6868
6969 func minv (_x,_y) = if ((_x > _y))
7070 then _y
7171 else _x
7272
7373
7474 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
7575
7676
7777 func int (k) = valueOrErrorMessage(getInteger(this, k), ("no value for " + k))
7878
7979
8080 func int0 (k) = valueOrElse(getInteger(this, k), 0)
8181
8282
8383 func totalSupply () = int0(k_totalSupply)
8484
8585
8686 func rewardPerTokenStored () = int0(k_rewardPerTokenStored)
8787
8888
8989 func lastUpdateTime () = int0(k_lastUpdateTime)
9090
9191
9292 func rewardRate () = int0(k_rewardRate)
9393
9494
9595 func periodFinish () = int0(k_periodFinish)
9696
9797
9898 func rewardBalance () = int0(k_rewardBalance)
9999
100100
101101 func rewards (_staker) = int0(toCompositeKey(k_userReward, _staker))
102102
103103
104104 func userRewardPerTokenPaid (_staker) = int0(toCompositeKey(k_userRewardPerToken, _staker))
105105
106106
107107 func balanceOf (_staker) = int0(toCompositeKey(k_balance, _staker))
108108
109109
110110 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
111111
112112
113113 func updateRewardBalance (_delta) = [IntegerEntry(k_rewardBalance, (rewardBalance() + _delta))]
114114
115115
116116 func updateRewardRate (_rewardRate) = [IntegerEntry(k_rewardRate, _rewardRate)]
117117
118118
119119 func updateTime (_lastUpdateTime,_periodFinish) = [IntegerEntry(k_lastUpdateTime, _lastUpdateTime), IntegerEntry(k_periodFinish, _periodFinish)]
120120
121121
122122 func updateRewardPerTokenStored (_rewardPerTokenStored) = [IntegerEntry(k_rewardPerTokenStored, _rewardPerTokenStored)]
123123
124124
125125 func updateUserRewards (_staker,_reward,_userRewardPerToken) = [IntegerEntry(toCompositeKey(k_userReward, _staker), _reward), IntegerEntry(toCompositeKey(k_userRewardPerToken, _staker), _userRewardPerToken)]
126126
127127
128128 func updateBalance (_staker,_delta) = [IntegerEntry(toCompositeKey(k_balance, _staker), (balanceOf(_staker) + _delta)), IntegerEntry(k_totalSupply, (totalSupply() + _delta))]
129129
130130
131131 func currentTimestampSec () = (lastBlock.timestamp / 1000)
132132
133133
134134 func lastTimeRewardApplicable () = minv(currentTimestampSec(), periodFinish())
135135
136136
137137 func rewardPerToken (_balanceDelta) = if (((totalSupply() + _balanceDelta) == 0))
138138 then rewardPerTokenStored()
139139 else {
140140 let timeInterval = (lastTimeRewardApplicable() - lastUpdateTime())
141141 let actualTimeInterval = if ((0 > timeInterval))
142142 then 0
143143 else timeInterval
144- let diff = (divd(rewardRate(), (totalSupply() + _balanceDelta)) * actualTimeInterval)
144+ let diff = divd((rewardRate() * actualTimeInterval), (totalSupply() + _balanceDelta))
145145 (rewardPerTokenStored() + diff)
146146 }
147147
148148
149149 func earned (_staker,_balanceDelta) = {
150150 let rewardDelta = (rewardPerToken(_balanceDelta) - userRewardPerTokenPaid(_staker))
151151 (muld((balanceOf(_staker) + _balanceDelta), rewardDelta) + rewards(_staker))
152152 }
153153
154154
155155 func updateReward (_staker,_balanceDelta) = {
156156 let newRewardPerTokenStored = rewardPerToken(_balanceDelta)
157157 let newLastUpdateTime = currentTimestampSec()
158158 let $t048425034 = if ((_staker != ""))
159159 then $Tuple2(earned(_staker, _balanceDelta), newRewardPerTokenStored)
160160 else $Tuple2(0, 0)
161161 let stakerEarned = $t048425034._1
162162 let stakerRewardPerTokenPaid = $t048425034._2
163163 $Tuple4(newRewardPerTokenStored, newLastUpdateTime, stakerEarned, stakerRewardPerTokenPaid)
164164 }
165165
166166
167167 @Callable(i)
168168 func initialize (_coordinator) = if (initialized())
169169 then throw("Already initialized")
170170 else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
171171
172172
173173
174174 @Callable(i)
175175 func stake () = {
176176 let _staker = toString(i.caller)
177177 let _amount = i.payments[0].amount
178178 if (if ((i.payments[0].assetId != governanceAsset()))
179179 then true
180180 else !(initialized()))
181181 then throw("Invalid call to stake")
182182 else {
183183 let $t056905855 = updateReward(_staker, 0)
184184 let newRewardPerTokenStored = $t056905855._1
185185 let newLastUpdateTime = $t056905855._2
186186 let stakerEarned = $t056905855._3
187187 let stakerRewardPerTokenPaid = $t056905855._4
188188 (((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, _amount))
189189 }
190190 }
191191
192192
193193
194194 @Callable(i)
195195 func unStake (_amount) = {
196196 let _staker = toString(i.caller)
197197 if (if (if ((_amount > balanceOf(_staker)))
198198 then true
199199 else (i.payments != nil))
200200 then true
201201 else !(initialized()))
202202 then throw("Invalid unStake parameters")
203203 else {
204204 let $t063866551 = updateReward(_staker, 0)
205205 let newRewardPerTokenStored = $t063866551._1
206206 let newLastUpdateTime = $t063866551._2
207207 let stakerEarned = $t063866551._3
208208 let stakerRewardPerTokenPaid = $t063866551._4
209209 ((((updateUserRewards(_staker, stakerEarned, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateBalance(_staker, -(_amount))) ++ [ScriptTransfer(i.caller, _amount, governanceAsset())])
210210 }
211211 }
212212
213213
214214
215215 @Callable(i)
216216 func withdrawRewards () = {
217217 let _staker = toString(i.caller)
218218 let $t070277172 = updateReward(_staker, 0)
219219 let newRewardPerTokenStored = $t070277172._1
220220 let newLastUpdateTime = $t070277172._2
221221 let stakerEarned = $t070277172._3
222222 let stakerRewardPerTokenPaid = $t070277172._4
223223 if (if ((0 >= stakerEarned))
224224 then true
225225 else !(initialized()))
226226 then throw("No reward")
227227 else ((((updateUserRewards(_staker, 0, stakerRewardPerTokenPaid) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateTime(newLastUpdateTime, periodFinish())) ++ updateRewardBalance(-(stakerEarned))) ++ [ScriptTransfer(i.caller, usdnFromDecimals(stakerEarned), quoteAsset())])
228228 }
229229
230230
231231
232232 @Callable(i)
233233 func addRewards () = if (if ((i.payments[0].assetId != quoteAsset()))
234234 then true
235235 else !(initialized()))
236236 then throw("Invalid addRewards params")
237237 else {
238238 let _reward = usdnToDecimals(i.payments[0].amount)
239239 let newRewardPerTokenStored = updateReward(NO_ADDRESS, NO_STAKER)._1
240240 let timestamp = currentTimestampSec()
241241 let newRewardRate = if ((timestamp > periodFinish()))
242242 then (_reward / DURATION)
243243 else {
244244 let remainingTime = (periodFinish() - timestamp)
245245 let leftover = (rewardRate() * remainingTime)
246246 ((_reward + leftover) / DURATION)
247247 }
248248 (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
249249 }
250250
251251
252252
253253 @Callable(i)
254254 func ackRewards () = {
255255 let currentBalance = usdnToDecimals(assetBalance(this, quoteAsset()))
256256 let _rewardBalance = rewardBalance()
257257 let rewardDelta = (currentBalance - _rewardBalance)
258258 if ((0 >= rewardDelta))
259259 then throw("Invalid ackRewards params")
260260 else {
261261 let _reward = rewardDelta
262262 let newRewardPerTokenStored = updateReward(NO_ADDRESS, NO_STAKER)._1
263263 let timestamp = currentTimestampSec()
264264 let newRewardRate = if ((timestamp > periodFinish()))
265265 then (_reward / DURATION)
266266 else {
267267 let remainingTime = (periodFinish() - timestamp)
268268 let leftover = (rewardRate() * remainingTime)
269269 ((_reward + leftover) / DURATION)
270270 }
271271 (((updateRewardRate(newRewardRate) ++ updateRewardPerTokenStored(newRewardPerTokenStored)) ++ updateRewardBalance(_reward)) ++ updateTime(timestamp, (timestamp + DURATION)))
272272 }
273273 }
274274
275275
276276
277277 @Callable(i)
278278 func view_reward (_staker) = {
279279 let stakerEarned = updateReward(_staker, 0)._3
280280 throw(toString(usdnFromDecimals(stakerEarned)))
281281 }
282282
283283
284+
285+@Callable(i)
286+func computeReward (_staker) = {
287+ let stakerEarned = updateReward(_staker, 0)._3
288+ $Tuple2(nil, stakerEarned)
289+ }
290+
291+
284292 @Verifier(tx)
285293 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
286294

github/deemru/w8io/873ac7e 
49.63 ms