tx · 8xuFNJNJAnHK7jSef61Jhwopp5b8sRfRXnrVHBmNakgz

3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn:  -0.01400000 Waves

2020.03.27 13:06 [927693] smart account 3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn > SELF 0.00000000 Waves

{ "type": 13, "id": "8xuFNJNJAnHK7jSef61Jhwopp5b8sRfRXnrVHBmNakgz", "fee": 1400000, "feeAssetId": null, "timestamp": 1585302881161, "version": 1, "sender": "3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn", "senderPublicKey": "97T1f7qUWzkowGZkQrhKdK7mb6NMiCypcdgw9AJkb7Lx", "proofs": [ "5rNfWhkrC2kX8k1rAxRjtPrvTNZEzHoHYRKs5PMDh2axr2F5wbYi66R2NPhxw42sCixKnAw6GEbDcbJoddE5UBgy" ], "script": "base64:AAIDAAAAAAAAABUIARIAEgASBAoCCAESABIDCgEIEgAAAABVAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAVZ2V0TnVtYmVyRnJvbU9wdGlvbmFsAAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAAAAAAMU0VORFRYRVhQSVJFAAAAAAAAAAAeAAAAAA9MSVNUU1BMSVRTWU1CT0wCAAAAAV8AAAAADkxJU1REQVRBU1lNQk9MAgAAAAErAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAAVQQVVMSQAAAAAAAA9CQAAAAAANREVGSUNJVE9GRlNFVAAAAAAAAAAABQAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAOQm9uZEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEkF1Y3Rpb25Db250cmFjdEtleQIAAAAQYXVjdGlvbl9jb250cmFjdAAAAAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QAAAAADlJQRENvbnRyYWN0S2V5AgAAAAxycGRfY29udHJhY3QAAAAAEUNvbnRvbENvbnRyYWN0S2V5AgAAABBjb250cm9sX2NvbnRyYWN0AAAAABtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkCAAAAG2JhbGFuY2Vfd2F2ZXNfbG9ja19pbnRlcnZhbAAAAAAeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5AgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwAAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQIAAAAVbWluX3dhdmVzX3N3YXBfYW1vdW50AAAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAAAAAbTm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5S2V5AgAAABRub2RlX29yYWNsZV9wcm92aWRlcgAAAAAKTG93ZXJCb3VuZAAAAAAAAAAAMgAAAAAKVXBwZXJCb3VuZAAAAAAAAAAAZAAAAAAOTUlOVFJBTlNGRVJGRUUAAAAAAAABhqAAAAAAA05FVwIAAAADbmV3AAAAAAJPSwIAAAACb2sAAAAAD2N1cnJlbnRDb25maWdJZAIAAAARY3VycmVudF9jb25maWdfaWQBAAAADmdldEZlZVByaWNlS2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAApwcmljZV9mZWVfBQAAAAJpZAEAAAAMZ2V0TWluRmVlS2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAAttaW5mZWVfZmVlXwUAAAACaWQBAAAAEmdldENvbmZpZ1N0YXR1c0tleQAAAAEAAAACaWQJAAEsAAAAAgIAAAASZmVlX2NvbmZpZ19zdGF0dXNfBQAAAAJpZAAAAAANUlBEQmFsYW5jZUtleQIAAAALcnBkX2JhbGFuY2UBAAAAGGdldFJQRENvbnRyYWN0QmFsYW5jZUtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAADVJQREJhbGFuY2VLZXkCAAAAAV8JAAJYAAAAAQUAAAAHYXNzZXRJZAAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAA1QcmljZUluZGV4S2V5AgAAAAtwcmljZV9pbmRleAAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEAAAAFaW5kZXgJAAEsAAAAAgkAASwAAAACBQAAAA1QcmljZUluZGV4S2V5AgAAAAFfCQABpAAAAAEFAAAABWluZGV4AAAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAANYmFsYW5jZV9sb2NrXwAAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAV3YXZlcwAAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAhuZXV0cmlubwEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACAAAABWNvdW50AAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANUlBEQmFsYW5jZUtleQIAAAABXwkAAlgAAAABBQAAAAdhc3NldElkAgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAAB1nZXRDYW5jZWxMZWFzZVR4UmVzZXJ2ZUZlZUtleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAAG2NhbmNlbF9sZWFzZV90eF9yZXNlcnZlX2ZlZQIAAAABXwUAAAAEaGFzaAEAAAAYZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIFAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQIAAAABXwUAAAAFb3duZXIBAAAAG2dldE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACBQAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkCAAAAAV8FAAAABW93bmVyAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABAAAABW93bmVyCQABLAAAAAICAAAAFWJhbGFuY2VfdW5sb2NrX2Jsb2NrXwUAAAAFb3duZXIBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEAAAAFY291bnQJAAEsAAAAAgkAASwAAAACAgAAAApycGRfcHJvZml0AgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQAAAAAAAAAAGQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAawAAAAMJAABrAAAAAwUAAAAGYW1vdW50BQAAAAVwcmljZQAAAAAAAAAAZAUAAAAFUEFVTEkFAAAAB1dBVkVMRVQBAAAAEmNvbnZlcnRXYXZlc1RvQm9uZAAAAAIAAAAGYW1vdW50AAAABXByaWNlCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAALcnBkQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADlJQRENvbnRyYWN0S2V5AAAAAA9jb250cm9sQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEUNvbnRvbENvbnRyYWN0S2V5AAAAAApwcmljZUluZGV4CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAA1QcmljZUluZGV4S2V5AAAAAAlpc0Jsb2NrZWQJAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAAxJc0Jsb2NrZWRLZXkAAAAAGG5vZGVPcmFjbGVQcm92aWRlclB1YktleQkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkAAAAAGGJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5AAAAABtiYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQAAAAASbWluV2F2ZXNTd2FwQW1vdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVNaW5XYXZlc1N3YXBBbW91bnRLZXkAAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAYTWluTmV1dHJpbm9Td2FwQW1vdW50S2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABAgAAACw2blNwVnlOSDd5TTY5ZWc0NDZ3clFSOTRpcGJiY21aTVUxRU5Qd2FuQzk3ZwAAAAAVZGVwcmVjYXRlZEJvbmRBc3NldElkCQACWQAAAAECAAAALDk3NWFrWkJmbk1qNTEzVTdNWmFIS3pRcm1zRXg1YUUzd2RXS1RySEJoYmpGAAAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAR0aGlzAAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAACFByaWNlS2V5AAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAAB3Jlc2VydmUJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAIcXVhbnRpdHkJAAPrAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkCQAD6wAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQAAAAAHZGVmaWNpdAkAAGUAAAACBQAAAA5uZXV0cmlub1N1cHBseQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UBAAAADHNldEZlZUNvbmZpZwAAAAEAAAACdHgEAAAAD3JlYWxOZXV0cmlub0ZlZQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAA5NSU5UUkFOU0ZFUkZFRQUAAAAMY3VycmVudFByaWNlBAAAABJjdXJyZW50RmVlU0NQcm9maXQJAABrAAAAAwkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAA5NSU5UUkFOU0ZFUkZFRQkAAGUAAAACCQEAAAAVZ2V0TnVtYmVyRnJvbU9wdGlvbmFsAAAAAQgFAAAAAnR4AAAAFG1pblNwb25zb3JlZEFzc2V0RmVlBQAAAA9yZWFsTmV1dHJpbm9GZWUAAAAAAAAAAGQFAAAAD3JlYWxOZXV0cmlub0ZlZQMJAABnAAAAAgUAAAASY3VycmVudEZlZVNDUHJvZml0BQAAAApVcHBlckJvdW5kCQAAZwAAAAIFAAAACkxvd2VyQm91bmQFAAAAEmN1cnJlbnRGZWVTQ1Byb2ZpdAcBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAC3JwZENvbnRyYWN0CQEAAAAYZ2V0UlBEQ29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAEAAAAPZ2V0UHJpY2VIaXN0b3J5AAAAAQAAAAVibG9jawkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAEmdldFByaWNlSGlzdG9yeUtleQAAAAEFAAAABWJsb2NrAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABAAAABWluZGV4CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0CQEAAAAYZ2V0SGVpZ2h0UHJpY2VCeUluZGV4S2V5AAAAAQUAAAAFaW5kZXgBAAAAGmdldENhbmNlbExlYXNlVHhSZXNlcnZlRmVlAAAAAQAAAARoYXNoCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAdZ2V0Q2FuY2VsTGVhc2VUeFJlc2VydmVGZWVLZXkAAAABBQAAAARoYXNoAQAAABVnZXRXYXZlc0xvY2tlZEJhbGFuY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAFb3duZXIBAAAAGGdldE5ldXRyaW5vTG9ja2VkQmFsYW5jZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABtnZXROZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAVvd25lcgEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQAAAAEFAAAABW93bmVyAQAAAAxnZXRSUERQcm9maXQAAAABAAAABWNvdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQUAAAAFY291bnQAAAAGAAAAAWkBAAAAE3N3YXBXYXZlc1RvTmV1dHJpbm8AAAAABAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAAEm1pbldhdmVzU3dhcEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAQFRoZSBzcGVjaWZpZWQgV2F2ZXMgYW1vdW50IGlzIGxlc3MgdGhhbiB0aGUgcmVxdWlyZWQgbWluaW11bSBvZiAJAAGkAAAAAQUAAAASbWluV2F2ZXNTd2FwQW1vdW50AgAAAAogd2F2ZWxldHMuAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAAClPbmx5IFdhdmVzIHRva2VuIGlzIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAFpjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTiBhY3Rpb25zIHVudGlsbCByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMDCQAAZgAAAAIJAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAABmF3YWl0IAkAAaQAAAABCQAAZQAAAAIJAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABBQAAAAdhY2NvdW50BQAAAAZoZWlnaHQCAAAAByBibG9ja3MDAwkBAAAAAiE9AAAAAgkBAAAAGGdldE5ldXRyaW5vTG9ja2VkQmFsYW5jZQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAAGCQEAAAACIT0AAAACCQEAAAAVZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAACJwbGVhc2Ugd2l0aGRyYXcgbG9ja2VkIGZ1bmRzIGZpcnN0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAHYWNjb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAAdhY2NvdW50CQAAZAAAAAIFAAAABmhlaWdodAUAAAAYYmFsYW5jZVdhdmVzTG9ja0ludGVydmFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAABkAAAAAgUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCAUAAAADcG10AAAABmFtb3VudAUAAAADbmlsAAAAAWkBAAAAE3N3YXBOZXV0cmlub1RvV2F2ZXMAAAAABAAAAANwbXQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIDCQAAZgAAAAIFAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAQ1RoZSBzcGVjaWZpZWQgTmV1dHJpbm8gYW1vdW50IGlzIGxlc3MgdGhhbiB0aGUgcmVxdWlyZWQgbWluaW11bSBvZiAJAAGkAAAAAQUAAAAVbWluTmV1dHJpbm9Td2FwQW1vdW50AgAAABAgTmV1dHJpbm8gY2VudHMuAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAYVRoZSBjb250cmFjdCBpcyBibG9ja2VkIGJ5IEVNRVJHRU5DWSBTSFVURE9XTi4gUGxlYXNlIHdhaXQgZm9yIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcy4DCQEAAAACIT0AAAACCAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAD25ldXRyaW5vQXNzZXRJZAkAAAIAAAABAgAAADpPbmx5IGFwcHJvcHJpYXRlIE5ldXRyaW5vIHRva2VucyBhcmUgYWxsb3dlZCBmb3Igc3dhcHBpbmcuAwkAAGYAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZhd2FpdCAJAAGkAAAAAQkAAGUAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0AgAAAAcgYmxvY2tzAwMJAQAAAAIhPQAAAAIJAQAAABhnZXROZXV0cmlub0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAABgkBAAAAAiE9AAAAAgkBAAAAFWdldFdhdmVzTG9ja2VkQmFsYW5jZQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAicGxlYXNlIHdpdGhkcmF3IGxvY2tlZCBmdW5kcyBmaXJzdAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAG2dldE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAEFAAAAB2FjY291bnQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAHYWNjb3VudAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAG2JhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAh3aXRoZHJhdwAAAAIAAAAHYWNjb3VudAAAAAVpbmRleAQAAAAMdW5sb2NrSGVpZ2h0CQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAQAAAAWdXNlcldhdmVzTG9ja2VkQmFsYW5jZQkBAAAAFWdldFdhdmVzTG9ja2VkQmFsYW5jZQAAAAEFAAAAB2FjY291bnQEAAAAGXVzZXJOZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAABhnZXROZXV0cmlub0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50BAAAAAtpbmRleEhlaWdodAkBAAAAFWdldEhlaWdodFByaWNlQnlJbmRleAAAAAEFAAAABWluZGV4BAAAAA9wcmV2SW5kZXhIZWlnaHQJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABCQAAZQAAAAIFAAAABWluZGV4AAAAAAAAAAABBAAAAAxwcmljZUJ5SW5kZXgJAQAAAA9nZXRQcmljZUhpc3RvcnkAAAABBQAAAAtpbmRleEhlaWdodAQAAAAObmV1dHJpbm9BbW91bnQJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAWdXNlcldhdmVzTG9ja2VkQmFsYW5jZQUAAAAMcHJpY2VCeUluZGV4BAAAAAt3YXZlc0Ftb3VudAkBAAAAFmNvbnZlcnROZXV0cmlub1RvV2F2ZXMAAAACBQAAABl1c2VyTmV1dHJpbm9Mb2NrZWRCYWxhbmNlBQAAAAxwcmljZUJ5SW5kZXgDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkAAGYAAAACBQAAAAx1bmxvY2tIZWlnaHQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARcGxlYXNlIHdhaXQgZm9yOiAJAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAACUgYmxvY2sgaGVpZ2h0IHRvIHdpdGhkcmF3IFdBVkVTIGZ1bmRzAwMDCQAAZgAAAAIFAAAABWluZGV4BQAAAApwcmljZUluZGV4BgkAAGYAAAACBQAAAAx1bmxvY2tIZWlnaHQFAAAAC2luZGV4SGVpZ2h0BgMJAQAAAAIhPQAAAAIFAAAAD3ByZXZJbmRleEhlaWdodAAAAAAAAAAAAAkAAGcAAAACBQAAAA9wcmV2SW5kZXhIZWlnaHQFAAAADHVubG9ja0hlaWdodAcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAjaW52YWxpZCBwcmljZSBoaXN0b3J5IGluZGV4OiBpbmRleD0JAAGkAAAAAQUAAAAFaW5kZXgCAAAADCBwcmljZUluZGV4PQkAAaQAAAABBQAAAApwcmljZUluZGV4AgAAAA0gaW5kZXhIZWlnaHQ9CQABpAAAAAEFAAAAC2luZGV4SGVpZ2h0AgAAAA4gdW5sb2NrSGVpZ2h0PQkAAaQAAAABBQAAAAx1bmxvY2tIZWlnaHQCAAAAESBwcmV2SW5kZXhIZWlnaHQ9CQABpAAAAAEFAAAAD3ByZXZJbmRleEhlaWdodAMDCQAAZwAAAAIAAAAAAAAAAAAFAAAADm5ldXRyaW5vQW1vdW50CQAAZwAAAAIAAAAAAAAAAAAFAAAAC3dhdmVzQW1vdW50BwkAAAIAAAABAgAAABNiYWxhbmNlIGVxdWFscyB6ZXJvCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldFdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABtnZXROZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkJAABlAAAAAgUAAAASd2F2ZXNMb2NrZWRCYWxhbmNlBQAAABZ1c2VyV2F2ZXNMb2NrZWRCYWxhbmNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkJAABlAAAAAgUAAAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlBQAAABl1c2VyTmV1dHJpbm9Mb2NrZWRCYWxhbmNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50BQAAAAt3YXZlc0Ftb3VudAUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQFAAAADm5ldXRyaW5vQW1vdW50BQAAAA9uZXV0cmlub0Fzc2V0SWQFAAAAA25pbAAAAAFpAQAAABF0cmFuc2ZlclRvQXVjdGlvbgAAAAAEAAAAEWRlZmljaXRCb25kQW1vdW50CQAAZQAAAAIFAAAAB2RlZmljaXQJAAPrAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAA9hdWN0aW9uQ29udHJhY3QFAAAAC2JvbmRBc3NldElkBAAAAAptaW5EZWZpY2l0CQAAawAAAAMFAAAADm5ldXRyaW5vU3VwcGx5BQAAAA1ERUZJQ0lUT0ZGU0VUAAAAAAAAAABkBAAAABZzdXJwbHVzV2l0aExpcXVpZGF0aW9uCQAAZQAAAAIFAAAAB3N1cnBsdXMJAAPrAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAABNsaXF1aWRhdGlvbkNvbnRyYWN0BQAAAA9uZXV0cmlub0Fzc2V0SWQDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwMJAABmAAAAAgUAAAARZGVmaWNpdEJvbmRBbW91bnQFAAAACm1pbkRlZmljaXQJAABmAAAAAgUAAAARZGVmaWNpdEJvbmRBbW91bnQAAAAAAAAAAAAHCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAABFkZWZpY2l0Qm9uZEFtb3VudAUAAAALYm9uZEFzc2V0SWQFAAAAA25pbAMJAABnAAAAAgUAAAAWc3VycGx1c1dpdGhMaXF1aWRhdGlvbgkAAGgAAAACAAAAAAAAAAABBQAAAAVQQVVMSQkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QFAAAAFnN1cnBsdXNXaXRoTGlxdWlkYXRpb24FAAAAD25ldXRyaW5vQXNzZXRJZAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAvYm9uZCB3ZXJlIGdlbmVyYXRlZCBvciBkbyBub3QgbmVlZCBpdC4gRGVmaWNpdDoJAAGkAAAAAQUAAAARZGVmaWNpdEJvbmRBbW91bnQCAAAAAXwJAAGkAAAAAQUAAAAKbWluRGVmaWNpdAIAAAAKLiBTdXJwbHVzOgkAAaQAAAABBQAAABZzdXJwbHVzV2l0aExpcXVpZGF0aW9uAgAAAAF8CQABpAAAAAEFAAAAB3N1cnBsdXMAAAABaQEAAAAIdHJhbnNmZXIAAAABAAAAB2FjY291bnQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50CQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAgFAAAAA3BtdAAAAAZhbW91bnQIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAF21pZ3JhdGlvblVTRE5CMk5TQlRTd2FwAAAAAAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2FjY291bnQIBQAAAAFpAAAABmNhbGxlcgMJAQAAAAIhPQAAAAIFAAAAFWRlcHJlY2F0ZWRCb25kQXNzZXRJZAgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAJ2Vycm9yOiBhdHRlbXB0IHRvIHN3YXAgbm90IFVTRE5CIHRva2VucwkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAdhY2NvdW50CQAAaAAAAAIIBQAAAANwbXQAAAAGYW1vdW50BQAAAAVQQVVMSQUAAAALYm9uZEFzc2V0SWQFAAAAA25pbAAAAAAMGZO8", "chainId": 84, "height": 927693, "spentComplexity": 0 } View: original | compacted Prev: 6kjW9xgi4kRVurpw9gy1Q9X5zSYGvXxWn9rkGz9XRhwY Next: 3xGRpNi79qZFMKjysXhtreHHa7rCK2iLnaA4bjVcM94L Diff:
OldNewDifferences
4949 }
5050
5151
52+func getNumberFromOptional (value) = match value {
53+ case a: Int =>
54+ a
55+ case _ =>
56+ 0
57+}
58+
59+
5260 let SENDTXEXPIRE = 30
5361
5462 let LISTSPLITSYMBOL = "_"
8290 let MinNeutrinoSwapAmountKey = "min_neutrino_swap_amount"
8391
8492 let NodeOracleProviderPubKeyKey = "node_oracle_provider"
93+
94+let LowerBound = 50
95+
96+let UpperBound = 100
97+
98+let MINTRANSFERFEE = 100000
99+
100+let NEW = "new"
101+
102+let OK = "ok"
103+
104+let currentConfigId = "current_config_id"
105+
106+func getFeePriceKey (id) = ("price_fee_" + id)
107+
108+
109+func getMinFeeKey (id) = ("minfee_fee_" + id)
110+
111+
112+func getConfigStatusKey (id) = ("fee_config_status_" + id)
113+
85114
86115 let RPDBalanceKey = "rpd_balance"
87116
181210 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
182211
183212 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
213+
214+func setFeeConfig (tx) = {
215+ let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, currentPrice)
216+ let currentFeeSCProfit = fraction(convertWavesToNeutrino(MINTRANSFERFEE, (getNumberFromOptional(tx.minSponsoredAssetFee) - realNeutrinoFee)), 100, realNeutrinoFee)
217+ if ((currentFeeSCProfit >= UpperBound))
218+ then (LowerBound >= currentFeeSCProfit)
219+ else false
220+ }
221+
184222
185223 func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId))
186224
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getNumberByKey (key) = match getInteger(this, key) {
55 case a: Int =>
66 a
77 case _ =>
88 0
99 }
1010
1111
1212 func getStringByKey (key) = match getString(this, key) {
1313 case a: String =>
1414 a
1515 case _ =>
1616 ""
1717 }
1818
1919
2020 func getBoolByKey (key) = match getBoolean(this, key) {
2121 case a: Boolean =>
2222 a
2323 case _ =>
2424 false
2525 }
2626
2727
2828 func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) {
2929 case a: Int =>
3030 a
3131 case _ =>
3232 0
3333 }
3434
3535
3636 func getStringByAddressAndKey (address,key) = match getString(addressFromStringValue(address), key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 func getBoolByAddressAndKey (address,key) = match getBoolean(addressFromStringValue(address), key) {
4545 case a: Boolean =>
4646 a
4747 case _ =>
4848 false
4949 }
5050
5151
52+func getNumberFromOptional (value) = match value {
53+ case a: Int =>
54+ a
55+ case _ =>
56+ 0
57+}
58+
59+
5260 let SENDTXEXPIRE = 30
5361
5462 let LISTSPLITSYMBOL = "_"
5563
5664 let LISTDATASYMBOL = "+"
5765
5866 let WAVELET = 100000000
5967
6068 let PAULI = 1000000
6169
6270 let DEFICITOFFSET = 5
6371
6472 let NeutrinoAssetIdKey = "neutrino_asset_id"
6573
6674 let BondAssetIdKey = "bond_asset_id"
6775
6876 let AuctionContractKey = "auction_contract"
6977
7078 let LiquidationContractKey = "liquidation_contract"
7179
7280 let RPDContractKey = "rpd_contract"
7381
7482 let ContolContractKey = "control_contract"
7583
7684 let BalanceWavesLockIntervalKey = "balance_waves_lock_interval"
7785
7886 let BalanceNeutrinoLockIntervalKey = "balance_neutrino_lock_interval"
7987
8088 let MinWavesSwapAmountKey = "min_waves_swap_amount"
8189
8290 let MinNeutrinoSwapAmountKey = "min_neutrino_swap_amount"
8391
8492 let NodeOracleProviderPubKeyKey = "node_oracle_provider"
93+
94+let LowerBound = 50
95+
96+let UpperBound = 100
97+
98+let MINTRANSFERFEE = 100000
99+
100+let NEW = "new"
101+
102+let OK = "ok"
103+
104+let currentConfigId = "current_config_id"
105+
106+func getFeePriceKey (id) = ("price_fee_" + id)
107+
108+
109+func getMinFeeKey (id) = ("minfee_fee_" + id)
110+
111+
112+func getConfigStatusKey (id) = ("fee_config_status_" + id)
113+
85114
86115 let RPDBalanceKey = "rpd_balance"
87116
88117 func getRPDContractBalanceKey (assetId) = ((RPDBalanceKey + "_") + toBase58String(assetId))
89118
90119
91120 let PriceKey = "price"
92121
93122 let PriceIndexKey = "price_index"
94123
95124 let IsBlockedKey = "is_blocked"
96125
97126 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
98127
99128
100129 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
101130
102131
103132 let BalanceLockedkKey = "balance_lock_"
104133
105134 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
106135
107136 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
108137
109138 func getRPDSnapshotContractBalanceKey (count,assetId) = ((((RPDBalanceKey + "_") + toBase58String(assetId)) + "_") + toString(count))
110139
111140
112141 func getCancelLeaseTxReserveFeeKey (hash) = (("cancel_lease_tx_reserve_fee" + "_") + hash)
113142
114143
115144 func getWavesLockedBalanceKey (owner) = ((WavesLockedBalanceKey + "_") + owner)
116145
117146
118147 func getNeutrinoLockedBalanceKey (owner) = ((NeutrinoLockedBalanceKey + "_") + owner)
119148
120149
121150 func getBalanceUnlockBlockKey (owner) = ("balance_unlock_block_" + owner)
122151
123152
124153 func getRPDProfitKey (count) = (("rpd_profit" + "_") + toString(count))
125154
126155
127156 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, 100, price), WAVELET, PAULI)
128157
129158
130159 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 100), PAULI, WAVELET)
131160
132161
133162 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
134163
135164
136165 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
137166
138167
139168 let liquidationContract = getStringByKey(LiquidationContractKey)
140169
141170 let neutrinoAssetIdString = getStringByKey(NeutrinoAssetIdKey)
142171
143172 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
144173
145174 let auctionContract = getStringByKey(AuctionContractKey)
146175
147176 let rpdContract = getStringByKey(RPDContractKey)
148177
149178 let controlContract = getStringByKey(ContolContractKey)
150179
151180 let priceIndex = getNumberByAddressAndKey(controlContract, PriceIndexKey)
152181
153182 let isBlocked = getBoolByAddressAndKey(controlContract, IsBlockedKey)
154183
155184 let nodeOracleProviderPubKey = fromBase58String(getStringByKey(NodeOracleProviderPubKeyKey))
156185
157186 let balanceWavesLockInterval = getNumberByKey(BalanceWavesLockIntervalKey)
158187
159188 let balanceNeutrinoLockInterval = getNumberByKey(BalanceNeutrinoLockIntervalKey)
160189
161190 let minWavesSwapAmount = getNumberByKey(MinWavesSwapAmountKey)
162191
163192 let minNeutrinoSwapAmount = getNumberByKey(MinNeutrinoSwapAmountKey)
164193
165194 let bondAssetId = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g")
166195
167196 let deprecatedBondAssetId = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
168197
169198 let neutrinoContract = this
170199
171200 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
172201
173202 let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
174203
175204 let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
176205
177206 let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
178207
179208 let neutrinoSupply = (((neutrinoLockedBalance + extract(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
180209
181210 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
182211
183212 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
213+
214+func setFeeConfig (tx) = {
215+ let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, currentPrice)
216+ let currentFeeSCProfit = fraction(convertWavesToNeutrino(MINTRANSFERFEE, (getNumberFromOptional(tx.minSponsoredAssetFee) - realNeutrinoFee)), 100, realNeutrinoFee)
217+ if ((currentFeeSCProfit >= UpperBound))
218+ then (LowerBound >= currentFeeSCProfit)
219+ else false
220+ }
221+
184222
185223 func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId))
186224
187225
188226 func getPriceHistory (block) = getNumberByAddressAndKey(controlContract, getPriceHistoryKey(block))
189227
190228
191229 func getHeightPriceByIndex (index) = getNumberByAddressAndKey(controlContract, getHeightPriceByIndexKey(index))
192230
193231
194232 func getCancelLeaseTxReserveFee (hash) = getNumberByKey(getCancelLeaseTxReserveFeeKey(hash))
195233
196234
197235 func getWavesLockedBalance (owner) = getNumberByKey(getWavesLockedBalanceKey(owner))
198236
199237
200238 func getNeutrinoLockedBalance (owner) = getNumberByKey(getNeutrinoLockedBalanceKey(owner))
201239
202240
203241 func getUnlockBalanceBlock (owner) = getNumberByKey(getBalanceUnlockBlockKey(owner))
204242
205243
206244 func getRPDProfit (count) = getNumberByKey(getRPDProfitKey(count))
207245
208246
209247 @Callable(i)
210248 func swapWavesToNeutrino () = {
211249 let pmt = extract(i.payment)
212250 let account = toString(i.caller)
213251 if ((minWavesSwapAmount > pmt.amount))
214252 then throw((("The specified Waves amount is less than the required minimum of " + toString(minWavesSwapAmount)) + " wavelets."))
215253 else if (isDefined(pmt.assetId))
216254 then throw("Only Waves token is allowed for swapping.")
217255 else if (isBlocked)
218256 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
219257 else if ((getUnlockBalanceBlock(account) > height))
220258 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
221259 else if (if ((getNeutrinoLockedBalance(account) != 0))
222260 then true
223261 else (getWavesLockedBalance(account) != 0))
224262 then throw("please withdraw locked funds first")
225263 else WriteSet([DataEntry(getWavesLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))])
226264 }
227265
228266
229267
230268 @Callable(i)
231269 func swapNeutrinoToWaves () = {
232270 let pmt = extract(i.payment)
233271 let account = toString(i.caller)
234272 if ((minNeutrinoSwapAmount > pmt.amount))
235273 then throw((("The specified Neutrino amount is less than the required minimum of " + toString(minNeutrinoSwapAmount)) + " Neutrino cents."))
236274 else if (isBlocked)
237275 then throw("The contract is blocked by EMERGENCY SHUTDOWN. Please wait for reactivation by emergency oracles.")
238276 else if ((pmt.assetId != neutrinoAssetId))
239277 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
240278 else if ((getUnlockBalanceBlock(account) > height))
241279 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
242280 else if (if ((getNeutrinoLockedBalance(account) != 0))
243281 then true
244282 else (getWavesLockedBalance(account) != 0))
245283 then throw("please withdraw locked funds first")
246284 else WriteSet([DataEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))])
247285 }
248286
249287
250288
251289 @Callable(i)
252290 func withdraw (account,index) = {
253291 let unlockHeight = getUnlockBalanceBlock(account)
254292 let userWavesLockedBalance = getWavesLockedBalance(account)
255293 let userNeutrinoLockedBalance = getNeutrinoLockedBalance(account)
256294 let indexHeight = getHeightPriceByIndex(index)
257295 let prevIndexHeight = getHeightPriceByIndex((index - 1))
258296 let priceByIndex = getPriceHistory(indexHeight)
259297 let neutrinoAmount = convertWavesToNeutrino(userWavesLockedBalance, priceByIndex)
260298 let wavesAmount = convertNeutrinoToWaves(userNeutrinoLockedBalance, priceByIndex)
261299 if (isBlocked)
262300 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
263301 else if ((unlockHeight > height))
264302 then throw((("please wait for: " + toString(unlockHeight)) + " block height to withdraw WAVES funds"))
265303 else if (if (if ((index > priceIndex))
266304 then true
267305 else (unlockHeight > indexHeight))
268306 then true
269307 else if ((prevIndexHeight != 0))
270308 then (prevIndexHeight >= unlockHeight)
271309 else false)
272310 then throw(((((((((("invalid price history index: index=" + toString(index)) + " priceIndex=") + toString(priceIndex)) + " indexHeight=") + toString(indexHeight)) + " unlockHeight=") + toString(unlockHeight)) + " prevIndexHeight=") + toString(prevIndexHeight)))
273311 else if (if ((0 >= neutrinoAmount))
274312 then (0 >= wavesAmount)
275313 else false)
276314 then throw("balance equals zero")
277315 else ScriptResult(WriteSet([DataEntry(getWavesLockedBalanceKey(account), 0), DataEntry(getNeutrinoLockedBalanceKey(account), 0), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance - userWavesLockedBalance)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance - userNeutrinoLockedBalance))]), TransferSet([ScriptTransfer(addressFromStringValue(account), wavesAmount, unit), ScriptTransfer(addressFromStringValue(account), neutrinoAmount, neutrinoAssetId)]))
278316 }
279317
280318
281319
282320 @Callable(i)
283321 func transferToAuction () = {
284322 let deficitBondAmount = (deficit - assetBalance(addressFromStringValue(auctionContract), bondAssetId))
285323 let minDeficit = fraction(neutrinoSupply, DEFICITOFFSET, 100)
286324 let surplusWithLiquidation = (surplus - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
287325 if (isBlocked)
288326 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
289327 else if (if ((deficitBondAmount > minDeficit))
290328 then (deficitBondAmount > 0)
291329 else false)
292330 then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), deficitBondAmount, bondAssetId)])
293331 else if ((surplusWithLiquidation >= (1 * PAULI)))
294332 then TransferSet([ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)])
295333 else throw(((((((("bond were generated or do not need it. Deficit:" + toString(deficitBondAmount)) + "|") + toString(minDeficit)) + ". Surplus:") + toString(surplusWithLiquidation)) + "|") + toString(surplus)))
296334 }
297335
298336
299337
300338 @Callable(i)
301339 func transfer (account) = {
302340 let pmt = extract(i.payment)
303341 TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)])
304342 }
305343
306344
307345
308346 @Callable(i)
309347 func migrationUSDNB2NSBTSwap () = {
310348 let pmt = extract(i.payment)
311349 let account = i.caller
312350 if ((deprecatedBondAssetId != pmt.assetId))
313351 then throw("error: attempt to swap not USDNB tokens")
314352 else TransferSet([ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)])
315353 }
316354
317355

github/deemru/w8io/3ef1775 
70.77 ms