tx · 8A2L7GHpAbsyTw9EkDq5Ed2s5bCTPBNuc7nyiRxkDxZg

3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn:  -0.01400000 Waves

2020.03.27 17:06 [927939] smart account 3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn > SELF 0.00000000 Waves

{ "type": 13, "id": "8A2L7GHpAbsyTw9EkDq5Ed2s5bCTPBNuc7nyiRxkDxZg", "fee": 1400000, "feeAssetId": null, "timestamp": 1585317991605, "version": 1, "sender": "3MwMR1ZFfy712trHVLisizYmvRQwsg8z9Bn", "senderPublicKey": "97T1f7qUWzkowGZkQrhKdK7mb6NMiCypcdgw9AJkb7Lx", "proofs": [ "5MRVV5KHSvMMdm6bZxG4HS9LJjyi8znSYUoqJHo4i9MuvZNAxUyftbAbKtF2hxDNhnC5pnDMh5t2h5H6BYTbJgyM" ], "script": "base64:AAIDAAAAAAAAABUIARIAEgASBAoCCAESABIDCgEIEgAAAABTAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FkZHJlc3MFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAAFmdldEJvb2xCeUFkZHJlc3NBbmRLZXkAAAACAAAAB2FkZHJlc3MAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAdCb29sZWFuBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBwEAAAAVZ2V0TnVtYmVyRnJvbU9wdGlvbmFsAAAAAQAAAAV2YWx1ZQQAAAAHJG1hdGNoMAUAAAAFdmFsdWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAAAAAAMU0VORFRYRVhQSVJFAAAAAAAAAAAeAAAAAA9MSVNUU1BMSVRTWU1CT0wCAAAAAV8AAAAADkxJU1REQVRBU1lNQk9MAgAAAAErAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAAVQQVVMSQAAAAAAAA9CQAAAAAANREVGSUNJVE9GRlNFVAAAAAAAAAAABQAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAOQm9uZEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEkF1Y3Rpb25Db250cmFjdEtleQIAAAAQYXVjdGlvbl9jb250cmFjdAAAAAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIAAAAUbGlxdWlkYXRpb25fY29udHJhY3QAAAAADlJQRENvbnRyYWN0S2V5AgAAAAxycGRfY29udHJhY3QAAAAAEUNvbnRvbENvbnRyYWN0S2V5AgAAABBjb250cm9sX2NvbnRyYWN0AAAAABtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkCAAAAG2JhbGFuY2Vfd2F2ZXNfbG9ja19pbnRlcnZhbAAAAAAeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5AgAAAB5iYWxhbmNlX25ldXRyaW5vX2xvY2tfaW50ZXJ2YWwAAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQIAAAAVbWluX3dhdmVzX3N3YXBfYW1vdW50AAAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAAAAAbTm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5S2V5AgAAABRub2RlX29yYWNsZV9wcm92aWRlcgAAAAAWU3BvbnNvcmVkRmVlTG93ZXJCb3VuZAAAAAAAAAAAMgAAAAAWU3BvbnNvcmVkRmVlVXBwZXJCb3VuZAAAAAAAAAAAZAAAAAAOTUlOVFJBTlNGRVJGRUUAAAAAAAABhqAAAAAAD2N1cnJlbnRDb25maWdJZAIAAAARY3VycmVudF9jb25maWdfaWQBAAAADmdldEZlZVByaWNlS2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAApwcmljZV9mZWVfBQAAAAJpZAEAAAAMZ2V0TWluRmVlS2V5AAAAAQAAAAJpZAkAASwAAAACAgAAAAttaW5mZWVfZmVlXwUAAAACaWQBAAAAEmdldENvbmZpZ1N0YXR1c0tleQAAAAEAAAACaWQJAAEsAAAAAgIAAAASZmVlX2NvbmZpZ19zdGF0dXNfBQAAAAJpZAAAAAANUlBEQmFsYW5jZUtleQIAAAALcnBkX2JhbGFuY2UBAAAAGGdldFJQRENvbnRyYWN0QmFsYW5jZUtleQAAAAEAAAAHYXNzZXRJZAkAASwAAAACCQABLAAAAAIFAAAADVJQREJhbGFuY2VLZXkCAAAAAV8JAAJYAAAAAQUAAAAHYXNzZXRJZAAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAAA1QcmljZUluZGV4S2V5AgAAAAtwcmljZV9pbmRleAAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEAAAAFaW5kZXgJAAEsAAAAAgkAASwAAAACBQAAAA1QcmljZUluZGV4S2V5AgAAAAFfCQABpAAAAAEFAAAABWluZGV4AAAAABFCYWxhbmNlTG9ja2Vka0tleQIAAAANYmFsYW5jZV9sb2NrXwAAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAV3YXZlcwAAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQABLAAAAAIFAAAAEUJhbGFuY2VMb2NrZWRrS2V5AgAAAAhuZXV0cmlubwEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACAAAABWNvdW50AAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANUlBEQmFsYW5jZUtleQIAAAABXwkAAlgAAAABBQAAAAdhc3NldElkAgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAAB1nZXRDYW5jZWxMZWFzZVR4UmVzZXJ2ZUZlZUtleQAAAAEAAAAEaGFzaAkAASwAAAACCQABLAAAAAICAAAAG2NhbmNlbF9sZWFzZV90eF9yZXNlcnZlX2ZlZQIAAAABXwUAAAAEaGFzaAEAAAAYZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACCQABLAAAAAIFAAAAFVdhdmVzTG9ja2VkQmFsYW5jZUtleQIAAAABXwUAAAAFb3duZXIBAAAAG2dldE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgkAASwAAAACBQAAABhOZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkCAAAAAV8FAAAABW93bmVyAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABAAAABW93bmVyCQABLAAAAAICAAAAFWJhbGFuY2VfdW5sb2NrX2Jsb2NrXwUAAAAFb3duZXIBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEAAAAFY291bnQJAAEsAAAAAgkAASwAAAACAgAAAApycGRfcHJvZml0AgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgAAAAZhbW91bnQAAAAFcHJpY2UJAABrAAAAAwkAAGsAAAADBQAAAAZhbW91bnQAAAAAAAAAAGQFAAAABXByaWNlBQAAAAdXQVZFTEVUBQAAAAVQQVVMSQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIAAAAGYW1vdW50AAAABXByaWNlCQAAawAAAAMJAABrAAAAAwUAAAAGYW1vdW50BQAAAAVwcmljZQAAAAAAAAAAZAUAAAAFUEFVTEkFAAAAB1dBVkVMRVQBAAAAEmNvbnZlcnRXYXZlc1RvQm9uZAAAAAIAAAAGYW1vdW50AAAABXByaWNlCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UBAAAAFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QAAAABAAAACWpzb25BcnJheQkABLUAAAACBQAAAAlqc29uQXJyYXkCAAAAASwAAAAAE2xpcXVpZGF0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkAAAAAFW5ldXRyaW5vQXNzZXRJZFN0cmluZwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASTmV1dHJpbm9Bc3NldElkS2V5AAAAAA9uZXV0cmlub0Fzc2V0SWQJAAJZAAAAAQUAAAAVbmV1dHJpbm9Bc3NldElkU3RyaW5nAAAAAA9hdWN0aW9uQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEkF1Y3Rpb25Db250cmFjdEtleQAAAAALcnBkQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADlJQRENvbnRyYWN0S2V5AAAAAA9jb250cm9sQ29udHJhY3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEUNvbnRvbENvbnRyYWN0S2V5AAAAAApwcmljZUluZGV4CQEAAAAYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAA1QcmljZUluZGV4S2V5AAAAAAlpc0Jsb2NrZWQJAQAAABZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AAAAAgUAAAAPY29udHJvbENvbnRyYWN0BQAAAAxJc0Jsb2NrZWRLZXkAAAAAGG5vZGVPcmFjbGVQcm92aWRlclB1YktleQkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkAAAAAGGJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5AAAAABtiYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQAAAAASbWluV2F2ZXNTd2FwQW1vdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVNaW5XYXZlc1N3YXBBbW91bnRLZXkAAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAYTWluTmV1dHJpbm9Td2FwQW1vdW50S2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABAgAAACw2blNwVnlOSDd5TTY5ZWc0NDZ3clFSOTRpcGJiY21aTVUxRU5Qd2FuQzk3ZwAAAAAVZGVwcmVjYXRlZEJvbmRBc3NldElkCQACWQAAAAECAAAALDk3NWFrWkJmbk1qNTEzVTdNWmFIS3pRcm1zRXg1YUUzd2RXS1RySEJoYmpGAAAAABBuZXV0cmlub0NvbnRyYWN0BQAAAAR0aGlzAAAAAAxjdXJyZW50UHJpY2UJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QFAAAACFByaWNlS2V5AAAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQAAAAASd2F2ZXNMb2NrZWRCYWxhbmNlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABVXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAAAB3Jlc2VydmUJAABlAAAAAgkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAAEG5ldXRyaW5vQ29udHJhY3QFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQAAAAAObmV1dHJpbm9TdXBwbHkJAABlAAAAAgkAAGUAAAACCQAAZAAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAIcXVhbnRpdHkJAAPrAAAAAgUAAAAQbmV1dHJpbm9Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkCQAD6wAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAHcmVzZXJ2ZQUAAAAMY3VycmVudFByaWNlBQAAAA5uZXV0cmlub1N1cHBseQAAAAAHZGVmaWNpdAkAAGUAAAACBQAAAA5uZXV0cmlub1N1cHBseQkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAACBQAAAAdyZXNlcnZlBQAAAAxjdXJyZW50UHJpY2UBAAAAG2NoZWNrSXNWYWxpZE1pblNwb25zb3JlZEZlZQAAAAEAAAACdHgEAAAAAmNwAAAAAAAAAABaBAAAAA9yZWFsTmV1dHJpbm9GZWUJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAgUAAAAOTUlOVFJBTlNGRVJGRUUFAAAAAmNwBAAAAA1tZWRpdW1QZXJjZW50CQAAZAAAAAIFAAAAFlNwb25zb3JlZEZlZUxvd2VyQm91bmQJAABrAAAAAwkAAGUAAAACBQAAABZTcG9uc29yZWRGZWVVcHBlckJvdW5kBQAAABZTcG9uc29yZWRGZWVMb3dlckJvdW5kAAAAAAAAAAABAAAAAAAAAAACBAAAAAhleGFjdEZlZQkAAGQAAAACBQAAAA9yZWFsTmV1dHJpbm9GZWUJAABrAAAAAwUAAAAPcmVhbE5ldXRyaW5vRmVlBQAAAA1tZWRpdW1QZXJjZW50AAAAAAAAAABkBAAAAAhpbnB1dEZlZQkAAaQAAAABCQEAAAAVZ2V0TnVtYmVyRnJvbU9wdGlvbmFsAAAAAQgFAAAAAnR4AAAAFG1pblNwb25zb3JlZEFzc2V0RmVlBAAAAAVleGFjdAkAAaQAAAABBQAAAAhleGFjdEZlZQMJAAAAAAAAAgkBAAAAFWdldE51bWJlckZyb21PcHRpb25hbAAAAAEIBQAAAAJ0eAAAABRtaW5TcG9uc29yZWRBc3NldEZlZQUAAAAIZXhhY3RGZWUGCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALSW5wdXQgZmVlOiAFAAAACGlucHV0RmVlAgAAAAk7IEV4YWN0OiAFAAAABWV4YWN0AgAAABE7IFJlYWwgVVNETiBmZWU6IAkAAaQAAAABBQAAAA9yZWFsTmV1dHJpbm9GZWUCAAAAEjsgTWVkaXVtIHBlcmNlbnQ6IAkAAaQAAAABBQAAAA1tZWRpdW1QZXJjZW50AQAAABVnZXRSUERDb250cmFjdEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAAtycGRDb250cmFjdAkBAAAAGGdldFJQRENvbnRyYWN0QmFsYW5jZUtleQAAAAEFAAAAB2Fzc2V0SWQBAAAAD2dldFByaWNlSGlzdG9yeQAAAAEAAAAFYmxvY2sJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAA9jb250cm9sQ29udHJhY3QJAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABBQAAAAVibG9jawEAAAAVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AAAAAQAAAAVpbmRleAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAD2NvbnRyb2xDb250cmFjdAkBAAAAGGdldEhlaWdodFByaWNlQnlJbmRleEtleQAAAAEFAAAABWluZGV4AQAAABpnZXRDYW5jZWxMZWFzZVR4UmVzZXJ2ZUZlZQAAAAEAAAAEaGFzaAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAHWdldENhbmNlbExlYXNlVHhSZXNlcnZlRmVlS2V5AAAAAQUAAAAEaGFzaAEAAAAVZ2V0V2F2ZXNMb2NrZWRCYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAGGdldFdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAEFAAAABW93bmVyAQAAABhnZXROZXV0cmlub0xvY2tlZEJhbGFuY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAbZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAFb3duZXIBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAAVvd25lcgEAAAAMZ2V0UlBEUHJvZml0AAAAAQAAAAVjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEFAAAABWNvdW50AAAABgAAAAFpAQAAABNzd2FwV2F2ZXNUb05ldXRyaW5vAAAAAAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAABJtaW5XYXZlc1N3YXBBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAEBUaGUgc3BlY2lmaWVkIFdhdmVzIGFtb3VudCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIG1pbmltdW0gb2YgCQABpAAAAAEFAAAAEm1pbldhdmVzU3dhcEFtb3VudAIAAAAKIHdhdmVsZXRzLgMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAApT25seSBXYXZlcyB0b2tlbiBpcyBhbGxvd2VkIGZvciBzd2FwcGluZy4DBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAABaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkAAGYAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZhd2FpdCAJAAGkAAAAAQkAAGUAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0AgAAAAcgYmxvY2tzAwMJAQAAAAIhPQAAAAIJAQAAABhnZXROZXV0cmlub0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAABgkBAAAAAiE9AAAAAgkBAAAAFWdldFdhdmVzTG9ja2VkQmFsYW5jZQAAAAEFAAAAB2FjY291bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAicGxlYXNlIHdpdGhkcmF3IGxvY2tlZCBmdW5kcyBmaXJzdAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldFdhdmVzTG9ja2VkQmFsYW5jZUtleQAAAAEFAAAAB2FjY291bnQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAHYWNjb3VudAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAGGJhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQAAZAAAAAIFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAABNzd2FwTmV1dHJpbm9Ub1dhdmVzAAAAAAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACBQAAABVtaW5OZXV0cmlub1N3YXBBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAENUaGUgc3BlY2lmaWVkIE5ldXRyaW5vIGFtb3VudCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVpcmVkIG1pbmltdW0gb2YgCQABpAAAAAEFAAAAFW1pbk5ldXRyaW5vU3dhcEFtb3VudAIAAAAQIE5ldXRyaW5vIGNlbnRzLgMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAAGFUaGUgY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04uIFBsZWFzZSB3YWl0IGZvciByZWFjdGl2YXRpb24gYnkgZW1lcmdlbmN5IG9yYWNsZXMuAwkBAAAAAiE9AAAAAggFAAAAA3BtdAAAAAdhc3NldElkBQAAAA9uZXV0cmlub0Fzc2V0SWQJAAACAAAAAQIAAAA6T25seSBhcHByb3ByaWF0ZSBOZXV0cmlubyB0b2tlbnMgYXJlIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgMJAABmAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGYXdhaXQgCQABpAAAAAEJAABlAAAAAgkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQFAAAABmhlaWdodAIAAAAHIGJsb2NrcwMDCQEAAAACIT0AAAACCQEAAAAYZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAYJAQAAAAIhPQAAAAIJAQAAABVnZXRXYXZlc0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAAAgAAAAECAAAAInBsZWFzZSB3aXRoZHJhdyBsb2NrZWQgZnVuZHMgZmlyc3QJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABtnZXROZXV0cmlub0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50CAUAAAADcG10AAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQAAAAEFAAAAB2FjY291bnQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABtiYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWwJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAGE5ldXRyaW5vTG9ja2VkQmFsYW5jZUtleQkAAGQAAAACBQAAABVuZXV0cmlub0xvY2tlZEJhbGFuY2UIBQAAAANwbXQAAAAGYW1vdW50BQAAAANuaWwAAAABaQEAAAAId2l0aGRyYXcAAAACAAAAB2FjY291bnQAAAAFaW5kZXgEAAAADHVubG9ja0hlaWdodAkBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEFAAAAB2FjY291bnQEAAAAFnVzZXJXYXZlc0xvY2tlZEJhbGFuY2UJAQAAABVnZXRXYXZlc0xvY2tlZEJhbGFuY2UAAAABBQAAAAdhY2NvdW50BAAAABl1c2VyTmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQEAAAAYZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlAAAAAQUAAAAHYWNjb3VudAQAAAALaW5kZXhIZWlnaHQJAQAAABVnZXRIZWlnaHRQcmljZUJ5SW5kZXgAAAABBQAAAAVpbmRleAQAAAAPcHJldkluZGV4SGVpZ2h0CQEAAAAVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AAAAAQkAAGUAAAACBQAAAAVpbmRleAAAAAAAAAAAAQQAAAAMcHJpY2VCeUluZGV4CQEAAAAPZ2V0UHJpY2VIaXN0b3J5AAAAAQUAAAALaW5kZXhIZWlnaHQEAAAADm5ldXRyaW5vQW1vdW50CQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAIFAAAAFnVzZXJXYXZlc0xvY2tlZEJhbGFuY2UFAAAADHByaWNlQnlJbmRleAQAAAALd2F2ZXNBbW91bnQJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAgUAAAAZdXNlck5ldXRyaW5vTG9ja2VkQmFsYW5jZQUAAAAMcHJpY2VCeUluZGV4AwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50aWxsIHJlYWN0aXZhdGlvbiBieSBlbWVyZ2VuY3kgb3JhY2xlcwMJAABmAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEXBsZWFzZSB3YWl0IGZvcjogCQABpAAAAAEFAAAADHVubG9ja0hlaWdodAIAAAAlIGJsb2NrIGhlaWdodCB0byB3aXRoZHJhdyBXQVZFUyBmdW5kcwMDAwkAAGYAAAACBQAAAAVpbmRleAUAAAAKcHJpY2VJbmRleAYJAABmAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAAtpbmRleEhlaWdodAYDCQEAAAACIT0AAAACBQAAAA9wcmV2SW5kZXhIZWlnaHQAAAAAAAAAAAAJAABnAAAAAgUAAAAPcHJldkluZGV4SGVpZ2h0BQAAAAx1bmxvY2tIZWlnaHQHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI2ludmFsaWQgcHJpY2UgaGlzdG9yeSBpbmRleDogaW5kZXg9CQABpAAAAAEFAAAABWluZGV4AgAAAAwgcHJpY2VJbmRleD0JAAGkAAAAAQUAAAAKcHJpY2VJbmRleAIAAAANIGluZGV4SGVpZ2h0PQkAAaQAAAABBQAAAAtpbmRleEhlaWdodAIAAAAOIHVubG9ja0hlaWdodD0JAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAABEgcHJldkluZGV4SGVpZ2h0PQkAAaQAAAABBQAAAA9wcmV2SW5kZXhIZWlnaHQDAwkAAGcAAAACAAAAAAAAAAAABQAAAA5uZXV0cmlub0Ftb3VudAkAAGcAAAACAAAAAAAAAAAABQAAAAt3YXZlc0Ftb3VudAcJAAACAAAAAQIAAAATYmFsYW5jZSBlcXVhbHMgemVybwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRXYXZlc0xvY2tlZEJhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAbZ2V0TmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5AAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAVV2F2ZXNMb2NrZWRCYWxhbmNlS2V5CQAAZQAAAAIFAAAAEndhdmVzTG9ja2VkQmFsYW5jZQUAAAAWdXNlcldhdmVzTG9ja2VkQmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAYTmV1dHJpbm9Mb2NrZWRCYWxhbmNlS2V5CQAAZQAAAAIFAAAAFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQUAAAAZdXNlck5ldXRyaW5vTG9ja2VkQmFsYW5jZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAUAAAALd2F2ZXNBbW91bnQFAAAABHVuaXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhY2NvdW50BQAAAA5uZXV0cmlub0Ftb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAARdHJhbnNmZXJUb0F1Y3Rpb24AAAAABAAAABFkZWZpY2l0Qm9uZEFtb3VudAkAAGUAAAACBQAAAAdkZWZpY2l0CQAD6wAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAPYXVjdGlvbkNvbnRyYWN0BQAAAAtib25kQXNzZXRJZAQAAAAKbWluRGVmaWNpdAkAAGsAAAADBQAAAA5uZXV0cmlub1N1cHBseQUAAAANREVGSUNJVE9GRlNFVAAAAAAAAAAAZAQAAAAWc3VycGx1c1dpdGhMaXF1aWRhdGlvbgkAAGUAAAACBQAAAAdzdXJwbHVzCQAD6wAAAAIJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAATbGlxdWlkYXRpb25Db250cmFjdAUAAAAPbmV1dHJpbm9Bc3NldElkAwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAWmNvbnRyYWN0IGlzIGJsb2NrZWQgYnkgRU1FUkdFTkNZIFNIVVRET1dOIGFjdGlvbnMgdW50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", "chainId": 84, "height": 927939, "spentComplexity": 0 } View: original | compacted Prev: FRFWgxkNd5mPvEhWRkRjAdmrjSGmZ7ZNU4yW7gvsNHSt Next: 7spLeWW8fEZi1UQyyZuZmgKo4NB7SFzQtrKHyetjxEcY Diff:
OldNewDifferences
212212 let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, cp)
213213 let mediumPercent = (SponsoredFeeLowerBound + fraction((SponsoredFeeUpperBound - SponsoredFeeLowerBound), 1, 2))
214214 let exactFee = (realNeutrinoFee + fraction(realNeutrinoFee, mediumPercent, 100))
215- let correct = toString(getNumberFromOptional(tx.minSponsoredAssetFee))
215+ let inputFee = toString(getNumberFromOptional(tx.minSponsoredAssetFee))
216216 let exact = toString(exactFee)
217- throw(((((((("Correct fee: " + correct) + "; Exact: ") + exact) + "; Real USDN fee: ") + toString(realNeutrinoFee)) + "; Medium percent: ") + toString(mediumPercent)))
217+ if ((getNumberFromOptional(tx.minSponsoredAssetFee) == exactFee))
218+ then true
219+ else throw(((((((("Input fee: " + inputFee) + "; Exact: ") + exact) + "; Real USDN fee: ") + toString(realNeutrinoFee)) + "; Medium percent: ") + toString(mediumPercent)))
218220 }
219221
220222
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
5252 func getNumberFromOptional (value) = match value {
5353 case a: Int =>
5454 a
5555 case _ =>
5656 0
5757 }
5858
5959
6060 let SENDTXEXPIRE = 30
6161
6262 let LISTSPLITSYMBOL = "_"
6363
6464 let LISTDATASYMBOL = "+"
6565
6666 let WAVELET = 100000000
6767
6868 let PAULI = 1000000
6969
7070 let DEFICITOFFSET = 5
7171
7272 let NeutrinoAssetIdKey = "neutrino_asset_id"
7373
7474 let BondAssetIdKey = "bond_asset_id"
7575
7676 let AuctionContractKey = "auction_contract"
7777
7878 let LiquidationContractKey = "liquidation_contract"
7979
8080 let RPDContractKey = "rpd_contract"
8181
8282 let ContolContractKey = "control_contract"
8383
8484 let BalanceWavesLockIntervalKey = "balance_waves_lock_interval"
8585
8686 let BalanceNeutrinoLockIntervalKey = "balance_neutrino_lock_interval"
8787
8888 let MinWavesSwapAmountKey = "min_waves_swap_amount"
8989
9090 let MinNeutrinoSwapAmountKey = "min_neutrino_swap_amount"
9191
9292 let NodeOracleProviderPubKeyKey = "node_oracle_provider"
9393
9494 let SponsoredFeeLowerBound = 50
9595
9696 let SponsoredFeeUpperBound = 100
9797
9898 let MINTRANSFERFEE = 100000
9999
100100 let currentConfigId = "current_config_id"
101101
102102 func getFeePriceKey (id) = ("price_fee_" + id)
103103
104104
105105 func getMinFeeKey (id) = ("minfee_fee_" + id)
106106
107107
108108 func getConfigStatusKey (id) = ("fee_config_status_" + id)
109109
110110
111111 let RPDBalanceKey = "rpd_balance"
112112
113113 func getRPDContractBalanceKey (assetId) = ((RPDBalanceKey + "_") + toBase58String(assetId))
114114
115115
116116 let PriceKey = "price"
117117
118118 let PriceIndexKey = "price_index"
119119
120120 let IsBlockedKey = "is_blocked"
121121
122122 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
123123
124124
125125 func getHeightPriceByIndexKey (index) = ((PriceIndexKey + "_") + toString(index))
126126
127127
128128 let BalanceLockedkKey = "balance_lock_"
129129
130130 let WavesLockedBalanceKey = (BalanceLockedkKey + "waves")
131131
132132 let NeutrinoLockedBalanceKey = (BalanceLockedkKey + "neutrino")
133133
134134 func getRPDSnapshotContractBalanceKey (count,assetId) = ((((RPDBalanceKey + "_") + toBase58String(assetId)) + "_") + toString(count))
135135
136136
137137 func getCancelLeaseTxReserveFeeKey (hash) = (("cancel_lease_tx_reserve_fee" + "_") + hash)
138138
139139
140140 func getWavesLockedBalanceKey (owner) = ((WavesLockedBalanceKey + "_") + owner)
141141
142142
143143 func getNeutrinoLockedBalanceKey (owner) = ((NeutrinoLockedBalanceKey + "_") + owner)
144144
145145
146146 func getBalanceUnlockBlockKey (owner) = ("balance_unlock_block_" + owner)
147147
148148
149149 func getRPDProfitKey (count) = (("rpd_profit" + "_") + toString(count))
150150
151151
152152 func convertNeutrinoToWaves (amount,price) = fraction(fraction(amount, 100, price), WAVELET, PAULI)
153153
154154
155155 func convertWavesToNeutrino (amount,price) = fraction(fraction(amount, price, 100), PAULI, WAVELET)
156156
157157
158158 func convertWavesToBond (amount,price) = convertWavesToNeutrino(amount, price)
159159
160160
161161 func convertJsonArrayToList (jsonArray) = split(jsonArray, ",")
162162
163163
164164 let liquidationContract = getStringByKey(LiquidationContractKey)
165165
166166 let neutrinoAssetIdString = getStringByKey(NeutrinoAssetIdKey)
167167
168168 let neutrinoAssetId = fromBase58String(neutrinoAssetIdString)
169169
170170 let auctionContract = getStringByKey(AuctionContractKey)
171171
172172 let rpdContract = getStringByKey(RPDContractKey)
173173
174174 let controlContract = getStringByKey(ContolContractKey)
175175
176176 let priceIndex = getNumberByAddressAndKey(controlContract, PriceIndexKey)
177177
178178 let isBlocked = getBoolByAddressAndKey(controlContract, IsBlockedKey)
179179
180180 let nodeOracleProviderPubKey = fromBase58String(getStringByKey(NodeOracleProviderPubKeyKey))
181181
182182 let balanceWavesLockInterval = getNumberByKey(BalanceWavesLockIntervalKey)
183183
184184 let balanceNeutrinoLockInterval = getNumberByKey(BalanceNeutrinoLockIntervalKey)
185185
186186 let minWavesSwapAmount = getNumberByKey(MinWavesSwapAmountKey)
187187
188188 let minNeutrinoSwapAmount = getNumberByKey(MinNeutrinoSwapAmountKey)
189189
190190 let bondAssetId = fromBase58String("6nSpVyNH7yM69eg446wrQR94ipbbcmZMU1ENPwanC97g")
191191
192192 let deprecatedBondAssetId = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
193193
194194 let neutrinoContract = this
195195
196196 let currentPrice = getNumberByAddressAndKey(controlContract, PriceKey)
197197
198198 let neutrinoLockedBalance = getNumberByKey(NeutrinoLockedBalanceKey)
199199
200200 let wavesLockedBalance = getNumberByKey(WavesLockedBalanceKey)
201201
202202 let reserve = (wavesBalance(neutrinoContract) - wavesLockedBalance)
203203
204204 let neutrinoSupply = (((neutrinoLockedBalance + extract(assetInfo(neutrinoAssetId)).quantity) - assetBalance(neutrinoContract, neutrinoAssetId)) - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
205205
206206 let surplus = (convertWavesToNeutrino(reserve, currentPrice) - neutrinoSupply)
207207
208208 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve, currentPrice))
209209
210210 func checkIsValidMinSponsoredFee (tx) = {
211211 let cp = 90
212212 let realNeutrinoFee = convertWavesToNeutrino(MINTRANSFERFEE, cp)
213213 let mediumPercent = (SponsoredFeeLowerBound + fraction((SponsoredFeeUpperBound - SponsoredFeeLowerBound), 1, 2))
214214 let exactFee = (realNeutrinoFee + fraction(realNeutrinoFee, mediumPercent, 100))
215- let correct = toString(getNumberFromOptional(tx.minSponsoredAssetFee))
215+ let inputFee = toString(getNumberFromOptional(tx.minSponsoredAssetFee))
216216 let exact = toString(exactFee)
217- throw(((((((("Correct fee: " + correct) + "; Exact: ") + exact) + "; Real USDN fee: ") + toString(realNeutrinoFee)) + "; Medium percent: ") + toString(mediumPercent)))
217+ if ((getNumberFromOptional(tx.minSponsoredAssetFee) == exactFee))
218+ then true
219+ else throw(((((((("Input fee: " + inputFee) + "; Exact: ") + exact) + "; Real USDN fee: ") + toString(realNeutrinoFee)) + "; Medium percent: ") + toString(mediumPercent)))
218220 }
219221
220222
221223 func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId))
222224
223225
224226 func getPriceHistory (block) = getNumberByAddressAndKey(controlContract, getPriceHistoryKey(block))
225227
226228
227229 func getHeightPriceByIndex (index) = getNumberByAddressAndKey(controlContract, getHeightPriceByIndexKey(index))
228230
229231
230232 func getCancelLeaseTxReserveFee (hash) = getNumberByKey(getCancelLeaseTxReserveFeeKey(hash))
231233
232234
233235 func getWavesLockedBalance (owner) = getNumberByKey(getWavesLockedBalanceKey(owner))
234236
235237
236238 func getNeutrinoLockedBalance (owner) = getNumberByKey(getNeutrinoLockedBalanceKey(owner))
237239
238240
239241 func getUnlockBalanceBlock (owner) = getNumberByKey(getBalanceUnlockBlockKey(owner))
240242
241243
242244 func getRPDProfit (count) = getNumberByKey(getRPDProfitKey(count))
243245
244246
245247 @Callable(i)
246248 func swapWavesToNeutrino () = {
247249 let pmt = extract(i.payment)
248250 let account = toString(i.caller)
249251 if ((minWavesSwapAmount > pmt.amount))
250252 then throw((("The specified Waves amount is less than the required minimum of " + toString(minWavesSwapAmount)) + " wavelets."))
251253 else if (isDefined(pmt.assetId))
252254 then throw("Only Waves token is allowed for swapping.")
253255 else if (isBlocked)
254256 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
255257 else if ((getUnlockBalanceBlock(account) > height))
256258 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
257259 else if (if ((getNeutrinoLockedBalance(account) != 0))
258260 then true
259261 else (getWavesLockedBalance(account) != 0))
260262 then throw("please withdraw locked funds first")
261263 else WriteSet([DataEntry(getWavesLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceWavesLockInterval)), DataEntry(WavesLockedBalanceKey, (wavesLockedBalance + pmt.amount))])
262264 }
263265
264266
265267
266268 @Callable(i)
267269 func swapNeutrinoToWaves () = {
268270 let pmt = extract(i.payment)
269271 let account = toString(i.caller)
270272 if ((minNeutrinoSwapAmount > pmt.amount))
271273 then throw((("The specified Neutrino amount is less than the required minimum of " + toString(minNeutrinoSwapAmount)) + " Neutrino cents."))
272274 else if (isBlocked)
273275 then throw("The contract is blocked by EMERGENCY SHUTDOWN. Please wait for reactivation by emergency oracles.")
274276 else if ((pmt.assetId != neutrinoAssetId))
275277 then throw("Only appropriate Neutrino tokens are allowed for swapping.")
276278 else if ((getUnlockBalanceBlock(account) > height))
277279 then throw((("await " + toString((getUnlockBalanceBlock(account) - height))) + " blocks"))
278280 else if (if ((getNeutrinoLockedBalance(account) != 0))
279281 then true
280282 else (getWavesLockedBalance(account) != 0))
281283 then throw("please withdraw locked funds first")
282284 else WriteSet([DataEntry(getNeutrinoLockedBalanceKey(account), pmt.amount), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceNeutrinoLockInterval)), DataEntry(NeutrinoLockedBalanceKey, (neutrinoLockedBalance + pmt.amount))])
283285 }
284286
285287
286288
287289 @Callable(i)
288290 func withdraw (account,index) = {
289291 let unlockHeight = getUnlockBalanceBlock(account)
290292 let userWavesLockedBalance = getWavesLockedBalance(account)
291293 let userNeutrinoLockedBalance = getNeutrinoLockedBalance(account)
292294 let indexHeight = getHeightPriceByIndex(index)
293295 let prevIndexHeight = getHeightPriceByIndex((index - 1))
294296 let priceByIndex = getPriceHistory(indexHeight)
295297 let neutrinoAmount = convertWavesToNeutrino(userWavesLockedBalance, priceByIndex)
296298 let wavesAmount = convertNeutrinoToWaves(userNeutrinoLockedBalance, priceByIndex)
297299 if (isBlocked)
298300 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
299301 else if ((unlockHeight > height))
300302 then throw((("please wait for: " + toString(unlockHeight)) + " block height to withdraw WAVES funds"))
301303 else if (if (if ((index > priceIndex))
302304 then true
303305 else (unlockHeight > indexHeight))
304306 then true
305307 else if ((prevIndexHeight != 0))
306308 then (prevIndexHeight >= unlockHeight)
307309 else false)
308310 then throw(((((((((("invalid price history index: index=" + toString(index)) + " priceIndex=") + toString(priceIndex)) + " indexHeight=") + toString(indexHeight)) + " unlockHeight=") + toString(unlockHeight)) + " prevIndexHeight=") + toString(prevIndexHeight)))
309311 else if (if ((0 >= neutrinoAmount))
310312 then (0 >= wavesAmount)
311313 else false)
312314 then throw("balance equals zero")
313315 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)]))
314316 }
315317
316318
317319
318320 @Callable(i)
319321 func transferToAuction () = {
320322 let deficitBondAmount = (deficit - assetBalance(addressFromStringValue(auctionContract), bondAssetId))
321323 let minDeficit = fraction(neutrinoSupply, DEFICITOFFSET, 100)
322324 let surplusWithLiquidation = (surplus - assetBalance(addressFromStringValue(liquidationContract), neutrinoAssetId))
323325 if (isBlocked)
324326 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
325327 else if (if ((deficitBondAmount > minDeficit))
326328 then (deficitBondAmount > 0)
327329 else false)
328330 then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), deficitBondAmount, bondAssetId)])
329331 else if ((surplusWithLiquidation >= (1 * PAULI)))
330332 then TransferSet([ScriptTransfer(addressFromStringValue(liquidationContract), surplusWithLiquidation, neutrinoAssetId)])
331333 else throw(((((((("bond were generated or do not need it. Deficit:" + toString(deficitBondAmount)) + "|") + toString(minDeficit)) + ". Surplus:") + toString(surplusWithLiquidation)) + "|") + toString(surplus)))
332334 }
333335
334336
335337
336338 @Callable(i)
337339 func transfer (account) = {
338340 let pmt = extract(i.payment)
339341 TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, pmt.assetId)])
340342 }
341343
342344
343345
344346 @Callable(i)
345347 func migrationUSDNB2NSBTSwap () = {
346348 let pmt = extract(i.payment)
347349 let account = i.caller
348350 if ((deprecatedBondAssetId != pmt.assetId))
349351 then throw("error: attempt to swap not USDNB tokens")
350352 else TransferSet([ScriptTransfer(account, (pmt.amount * PAULI), bondAssetId)])
351353 }
352354
353355
354356 @Verifier(tx)
355357 func verify () = {
356358 let id = toBase58String(tx.id)
357359 match tx {
358360 case leasingTx: LeaseCancelTransaction|LeaseTransaction =>
359361 sigVerify(tx.bodyBytes, tx.proofs[0], nodeOracleProviderPubKey)
360362 case sponsorTx: SponsorFeeTransaction =>
361363 checkIsValidMinSponsoredFee(sponsorTx)
362364 case _ =>
363365 true
364366 }
365367 }
366368

github/deemru/w8io/3ef1775 
72.55 ms