tx · CVFMBPHpHq7EKc42mvwfBkpTzfQVgh4mWZ9j9KeyuRgS 3NAXNEjQCDj9ivPGcdjkRhVMBkkvyGRUWKm: -0.01400000 Waves 2019.10.04 14:40 [704928] smart account 3NAXNEjQCDj9ivPGcdjkRhVMBkkvyGRUWKm > SELF 0.00000000 Waves
{ "type": 13, "id": "CVFMBPHpHq7EKc42mvwfBkpTzfQVgh4mWZ9j9KeyuRgS", "fee": 1400000, "feeAssetId": null, "timestamp": 1570189238769, "version": 1, "sender": "3NAXNEjQCDj9ivPGcdjkRhVMBkkvyGRUWKm", "senderPublicKey": "B7ab1qddakY8Uv6npUT42W5YCwJakGU9XpLGBQyEYNJo", "proofs": [ "5714bSrLjvJTXDuuCrdkVmKA9XDQKJNrK5v4udBLZpwHF9TJMcgniQVnwDVAjoTwN4ch2XjEV91TWaVjpY8DPbeF" ], "script": "base64:AAIDAAAAAAAAAAAAAABtAQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAAAAAAPTElTVFNQTElUU1lNQk9MAgAAAAFfAAAAAA5MSVNUREFUQVNZTUJPTAIAAAABKwAAAAAHV0FWRUxFVAAAAAAABfXhAAAAAAAIQ0FOQ0VMRUQCAAAACGNhbmNlbGVkAAAAAANORVcCAAAAA25ldwAAAAAGRklMTEVEAgAAAAZmaWxsZWQAAAAAEk5ldXRyaW5vQXNzZXRJZEtleQIAAAARbmV1dHJpbm9fYXNzZXRfaWQAAAAADkJvbmRBc3NldElkS2V5AgAAAA1ib25kX2Fzc2V0X2lkAAAAABJBdWN0aW9uQ29udHJhY3RLZXkCAAAAEGF1Y3Rpb25fY29udHJhY3QAAAAADlJQRENvbnRyYWN0S2V5AgAAAAxycGRfY29udHJhY3QAAAAAFkJhbGFuY2VMb2NrSW50ZXJ2YWxLZXkCAAAAFWJhbGFuY2VfbG9ja19pbnRlcnZhbAAAAAAPVm90ZUludGVydmFsS2V5AgAAAA12b3RlX2ludGVydmFsAAAAABBNaW5Td2FwQW1vdW50S2V5AgAAAA9taW5fc3dhcF9hbW91bnQAAAAADlByaWNlT2Zmc2V0S2V5AgAAAAxwcmljZV9vZmZzZXQAAAAAFFByb3ZpZGluZ0ludGVydmFsS2V5AgAAABJwcm92aWRpbmdfaW50ZXJ2YWwAAAAACFByaWNlS2V5AgAAAAVwcmljZQAAAAASTmV1dHJpbm9CYWxhbmNlS2V5AgAAAAluZXV0cmlub18AAAAAD1dhdmVzQmFsYW5jZUtleQIAAAAGd2F2ZXNfAAAAABVCYWxhbmNlVW5sb2NrQmxvY2tLZXkCAAAADmJhbGFuY2VfYmxvY2tfAAAAAAxPcmRlcmJvb2tLZXkCAAAACW9yZGVyYm9vawAAAAANT3JkZXJUb3RhbEtleQIAAAAMb3JkZXJfdG90YWxfAAAAAA1PcmRlck93bmVyS2V5AgAAAAxvcmRlcl9vd25lcl8AAAAADk9yZGVySGVpZ2h0S2V5AgAAAA1vcmRlcl9oZWlnaHRfAAAAABNPcmRlckZpbGxlZFRvdGFsS2V5AgAAABNvcmRlcl9maWxsZWRfdG90YWxfAAAAAA5PcmRlclN0YXR1c0tleQIAAAANb3JkZXJfc3RhdHVzXwAAAAAPUlBEU3luY0luZGV4S2V5AgAAAA5ycGRfc3luY19pbmRleAAAAAAMUlBEUHJvZml0S2V5AgAAAApycGRfcHJvZml0AAAAAA1SUERCYWxhbmNlS2V5AgAAAAtycGRfYmFsYW5jZQAAAAAMSXNCbG9ja2VkS2V5AgAAAAppc19ibG9ja2VkAAAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAEWJsYWNrX3N3YXJtX3ByaWNlAAAAAAxBZG1pblZvdGVLZXkCAAAAC2FkbWluX3ZvdGVfAAAAABFBZG1pblZvdGVQcmljZUtleQIAAAARYWRtaW5fdm90ZV9wcmljZV8AAAAAEkJsb2NrRXhwaXJlVm90ZUtleQIAAAARdm90ZV9leHBpcmVfYmxvY2sAAAAACEFkbWluS2V5AgAAAAZhZG1pbl8AAAAAEUlzUHJpY2VQZW5kaW5nS2V5AgAAABBpc19wZW5kaW5nX3ByaWNlAAAAAAlPcmFjbGVLZXkCAAAAB29yYWNsZV8AAAAAEk9yYWNsZUlzUHJvdmlkZUtleQIAAAASb3JhY2xlX2lzX3Byb3ZpZGVfAAAAABVPcmFjbGVQcm92aWRlUHJpY2VLZXkCAAAAFW9yYWNsZV9wcmljZV9wcm92aWRlXwAAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkCAAAAFnByb3ZpZGluZ19leHBpcmVfYmxvY2sBAAAAC2dldEFkbWluS2V5AAAAAQAAAAVjb3VudAkAASwAAAACBQAAAAhBZG1pbktleQkAAaQAAAABBQAAAAVjb3VudAEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAAAxBZG1pblZvdGVLZXkFAAAABW93bmVyAQAAABRnZXRBZG1pblZvdGVQcmljZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAARQWRtaW5Wb3RlUHJpY2VLZXkFAAAABW93bmVyAQAAAAxnZXRPcmFjbGVLZXkAAAABAAAABWNvdW50CQABLAAAAAIFAAAACU9yYWNsZUtleQkAAaQAAAABBQAAAAVjb3VudAEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABJPcmFjbGVJc1Byb3ZpZGVLZXkFAAAABW93bmVyAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAFU9yYWNsZVByb3ZpZGVQcmljZUtleQUAAAAFb3duZXIBAAAAIGdldFJQRFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgAAAAVjb3VudAAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADVJQREJhbGFuY2VLZXkCAAAAAV8JAAJYAAAAAQUAAAAHYXNzZXRJZAIAAAABXwkAAaQAAAABBQAAAAVjb3VudAEAAAAYZ2V0UlBEQ29udHJhY3RCYWxhbmNlS2V5AAAAAQAAAAdhc3NldElkCQABLAAAAAIJAAEsAAAAAgUAAAANUlBEQmFsYW5jZUtleQIAAAABXwkAAlgAAAABBQAAAAdhc3NldElkAQAAAA9nZXRSUERQcm9maXRLZXkAAAABAAAABWNvdW50CQABLAAAAAIJAAEsAAAAAgUAAAAMUlBEUHJvZml0S2V5AgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAABVnZXROZXV0cmlub0JhbGFuY2VLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAEk5ldXRyaW5vQmFsYW5jZUtleQUAAAAFb3duZXIBAAAAEmdldFdhdmVzQmFsYW5jZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAPV2F2ZXNCYWxhbmNlS2V5BQAAAAVvd25lcgEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABVCYWxhbmNlVW5sb2NrQmxvY2tLZXkFAAAABW93bmVyAQAAABVnZXRCbGFja1N3YXJtUHJpY2VLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAASQmxhY2tTd2FybVByaWNlS2V5AgAAAAFfCQABpAAAAAEFAAAABWJsb2NrAQAAABJnZXRQcmljZUhpc3RvcnlLZXkAAAABAAAABWJsb2NrCQABLAAAAAIJAAEsAAAAAgUAAAAIUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAANT3JkZXJUb3RhbEtleQUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACBQAAAA1PcmRlck93bmVyS2V5BQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACBQAAAA5PcmRlckhlaWdodEtleQUAAAAHb3JkZXJJZAEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAAOT3JkZXJTdGF0dXNLZXkFAAAAB29yZGVySWQBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAATT3JkZXJGaWxsZWRUb3RhbEtleQUAAAAHb3JkZXJJZAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAQAAAAZhbW91bnQJAABpAAAAAgkAAGgAAAACBQAAAAZhbW91bnQAAAAAAAAAAGQFAAAABXByaWNlAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQAAAAZhbW91bnQJAABpAAAAAgkAAGgAAAACBQAAAAZhbW91bnQFAAAABXByaWNlAAAAAAAAAABkAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABAAAABmFtb3VudAkAAGkAAAACBQAAAAZhbW91bnQFAAAAB1dBVkVMRVQBAAAAFWNvbnZlcnRCb25kVG9OZXV0cmlubwAAAAEAAAAGYW1vdW50CQAAaAAAAAIFAAAABmFtb3VudAUAAAAHV0FWRUxFVAEAAAASY29udmVydFdhdmVzVG9Cb25kAAAAAQAAAAZhbW91bnQJAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABCQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAEFAAAABmFtb3VudAAAAAARcHJvdmlkaW5nSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFFByb3ZpZGluZ0ludGVydmFsS2V5AAAAABRibG9ja0V4cGlyZVByb3ZpZGluZwkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAXQmxvY2tFeHBpcmVQcm92aWRpbmdLZXkAAAAADmlzUHJpY2VQZW5kaW5nCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAARSXNQcmljZVBlbmRpbmdLZXkAAAAAEnBlcmNlbnRQcmljZU9mZnNldAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAOUHJpY2VPZmZzZXRLZXkAAAAADHJwZFN5bmNJbmRleAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPUlBEU3luY0luZGV4S2V5AAAAAAx2b3RlSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAD1ZvdGVJbnRlcnZhbEtleQAAAAAPYmxvY2tFeHBpcmVWb3RlCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABJCbG9ja0V4cGlyZVZvdGVLZXkAAAAAE2JhbGFuY2VMb2NrSW50ZXJ2YWwJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFkJhbGFuY2VMb2NrSW50ZXJ2YWxLZXkAAAAACWlzQmxvY2tlZAkBAAAADGdldEJvb2xCeUtleQAAAAEFAAAADElzQmxvY2tlZEtleQAAAAANbWluU3dhcEFtb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAQTWluU3dhcEFtb3VudEtleQAAAAAPbmV1dHJpbm9Bc3NldElkCQACWQAAAAEJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAAEk5ldXRyaW5vQXNzZXRJZEtleQAAAAAPYXVjdGlvbkNvbnRyYWN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABJBdWN0aW9uQ29udHJhY3RLZXkAAAAAC3JwZENvbnRyYWN0CQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA5SUERDb250cmFjdEtleQAAAAAHcmVzZXJ2ZQkBAAAADHdhdmVzQmFsYW5jZQAAAAEFAAAABHRoaXMAAAAACW9yZGVyYm9vawkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAMT3JkZXJib29rS2V5AAAAAAtib25kQXNzZXRJZAkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAAA5Cb25kQXNzZXRJZEtleQAAAAAKYm9uZFN1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAC2JvbmRBc3NldElkCQAAZQAAAAIIBQAAAARpbmZvAAAACHF1YW50aXR5CQAD6wAAAAIFAAAABHRoaXMFAAAAC2JvbmRBc3NldElkAAAAAA5uZXV0cmlub1N1cHBseQQAAAAEaW5mbwkBAAAAB2V4dHJhY3QAAAABCQAD7AAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkAAGUAAAACCAUAAAAEaW5mbwAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAA9uZXV0cmlub0Fzc2V0SWQAAAAAB3N1cnBsdXMJAABoAAAAAgAAAAAAAAAAZAUAAAAHV0FWRUxFVAAAAAAJb3JhY2xlT25lCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0T3JhY2xlS2V5AAAAAQAAAAAAAAAAAAAAAAAJb3JhY2xlVHdvCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0T3JhY2xlS2V5AAAAAQAAAAAAAAAAAQAAAAALb3JhY2xlVGhyZWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAxnZXRPcmFjbGVLZXkAAAABAAAAAAAAAAACAAAAAAhhZG1pbk9uZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAC2dldEFkbWluS2V5AAAAAQAAAAAAAAAAAAAAAAAIYWRtaW5Ud28JAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAtnZXRBZG1pbktleQAAAAEAAAAAAAAAAAEAAAAACmFkbWluVGhyZWUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAtnZXRBZG1pbktleQAAAAEAAAAAAAAAAAIBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIFAAAAC3JwZENvbnRyYWN0CQEAAAAYZ2V0UlBEQ29udHJhY3RCYWxhbmNlS2V5AAAAAQUAAAAHYXNzZXRJZAEAAAAPZ2V0QWRtaW5Wb3RlSW50AAAAAQAAAAVvd25lcgMJAQAAAAxnZXRCb29sQnlLZXkAAAABCQEAAAAPZ2V0QWRtaW5Wb3RlS2V5AAAAAQUAAAAFb3duZXIAAAAAAAAAAAEAAAAAAAAAAAABAAAAEWdldEFkbWluVm90ZVByaWNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFGdldEFkbWluVm90ZVByaWNlS2V5AAAAAQUAAAAFb3duZXIBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEAAAAFb3duZXIJAQAAAAxnZXRCb29sQnlLZXkAAAABCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQUAAAAFb3duZXIBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEAAAAFb3duZXIDCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQUAAAAFb3duZXIAAAAAAAAAAAEAAAAAAAAAAAABAAAAFWdldE9yYWNsZVByb3ZpZGVQcmljZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRPcmFjbGVQcm92aWRlUHJpY2VLZXkAAAABBQAAAAVvd25lcgEAAAAPZ2V0V2F2ZXNCYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldFdhdmVzQmFsYW5jZUtleQAAAAEFAAAABW93bmVyAQAAABJnZXROZXV0cmlub0JhbGFuY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAVZ2V0TmV1dHJpbm9CYWxhbmNlS2V5AAAAAQUAAAAFb3duZXIBAAAAFWdldFVubG9ja0JhbGFuY2VCbG9jawAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAAVvd25lcgEAAAANZ2V0T3JkZXJUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABBnZXRPcmRlclRvdGFsS2V5AAAAAQUAAAACaWQBAAAADWdldE9yZGVyT3duZXIAAAABAAAAAmlkCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEFAAAAAmlkAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQAAAAJpZAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABBQAAAAJpZAEAAAAMZ2V0UlBEUHJvZml0AAAAAQAAAAVjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEFAAAABWNvdW50AQAAABNnZXRPcmRlckVsZW1lbnRCeUlkAAAAAQAAAAJpZAkAASwAAAACBQAAAAJpZAUAAAAPTElTVFNQTElUU1lNQk9MAQAAAAhhZGRPcmRlcgAAAAEAAAAHb3JkZXJJZAkAASwAAAACBQAAAAlvcmRlcmJvb2sJAQAAABNnZXRPcmRlckVsZW1lbnRCeUlkAAAAAQUAAAAHb3JkZXJJZAEAAAAJZHJvcE9yZGVyAAAAAQAAAAdvcmRlcklkBAAAAAVwYXJ0cwkABLUAAAACBQAAAAlvcmRlcmJvb2sJAQAAABNnZXRPcmRlckVsZW1lbnRCeUlkAAAAAQUAAAAHb3JkZXJJZAkAASwAAAACCQABkQAAAAIFAAAABXBhcnRzAAAAAAAAAAAACQABkQAAAAIFAAAABXBhcnRzAAAAAAAAAAABAAAAAwAAAAFpAQAAABNzd2FwV2F2ZXNUb05ldXRyaW5vAAAAAAQAAAADcG10CQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAB3BheW1lbnQDCQAAZgAAAAIFAAAADW1pblN3YXBBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAAD2Ftb3VudCBsZXNzIG1pbgMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAASY2FuIHVzZSB3YXZlcyBvbmx5AwUAAAAJaXNCbG9ja2VkCQAAAgAAAAECAAAAE2NvbnRyYWN0IGlzIGJsb2NrZWQEAAAABmFtb3VudAkBAAAAFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8AAAABCAUAAAADcG10AAAABmFtb3VudAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAATc3dhcE5ldXRyaW5vVG9XYXZlcwAAAAAEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50AwkAAGYAAAACBQAAAA1taW5Td2FwQW1vdW50CAUAAAADcG10AAAABmFtb3VudAkAAAIAAAABAgAAAA9hbW91bnQgbGVzcyBtaW4DBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAAATY29udHJhY3QgaXMgYmxvY2tlZAMJAQAAAAIhPQAAAAIIBQAAAANwbXQAAAAHYXNzZXRJZAUAAAAPbmV1dHJpbm9Bc3NldElkCQAAAgAAAAECAAAAFWNhbiB1c2UgbmV1dHJpbm8gb25seQQAAAAGYW1vdW50CQEAAAAWY29udmVydE5ldXRyaW5vVG9XYXZlcwAAAAEIBQAAAANwbXQAAAAGYW1vdW50CQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAMZXhlY3V0ZU9yZGVyAAAAAAQAAAAPbmV3UnBkU3luY0luZGV4CQAAZAAAAAIFAAAADHJwZFN5bmNJbmRleAAAAAAAAAAAAQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD1JQRFN5bmNJbmRleEtleQUAAAAPbmV3UnBkU3luY0luZGV4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQUAAAAMcnBkU3luY0luZGV4BQAAAAdzdXJwbHVzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACBQAAAAxycGRTeW5jSW5kZXgFAAAAD25ldXRyaW5vQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAIGdldFJQRFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgUAAAAMcnBkU3luY0luZGV4BQAAAAtib25kQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAC2JvbmRBc3NldElkBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAtycGRDb250cmFjdAUAAAAHc3VycGx1cwUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAAASOS4Iw==", "chainId": 84, "height": 704928, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func getNumberByKey (key) = match getInteger(this, key) { | |
5 | + | case a: Int => | |
6 | + | a | |
7 | + | case _ => | |
8 | + | 0 | |
9 | + | } | |
10 | + | ||
11 | + | ||
12 | + | func getStringByKey (key) = match getString(this, key) { | |
13 | + | case a: String => | |
14 | + | a | |
15 | + | case _ => | |
16 | + | "" | |
17 | + | } | |
18 | + | ||
19 | + | ||
20 | + | func getBoolByKey (key) = match getBoolean(this, key) { | |
21 | + | case a: Boolean => | |
22 | + | a | |
23 | + | case _ => | |
24 | + | false | |
25 | + | } | |
26 | + | ||
27 | + | ||
28 | + | func getNumberByAddressAndKey (address,key) = match getInteger(addressFromStringValue(address), key) { | |
29 | + | case a: Int => | |
30 | + | a | |
31 | + | case _ => | |
32 | + | 0 | |
33 | + | } | |
34 | + | ||
35 | + | ||
36 | + | let LISTSPLITSYMBOL = "_" | |
37 | + | ||
38 | + | let LISTDATASYMBOL = "+" | |
39 | + | ||
40 | + | let WAVELET = 100000000 | |
41 | + | ||
42 | + | let CANCELED = "canceled" | |
43 | + | ||
44 | + | let NEW = "new" | |
45 | + | ||
46 | + | let FILLED = "filled" | |
47 | + | ||
48 | + | let NeutrinoAssetIdKey = "neutrino_asset_id" | |
49 | + | ||
50 | + | let BondAssetIdKey = "bond_asset_id" | |
51 | + | ||
52 | + | let AuctionContractKey = "auction_contract" | |
53 | + | ||
54 | + | let RPDContractKey = "rpd_contract" | |
55 | + | ||
56 | + | let BalanceLockIntervalKey = "balance_lock_interval" | |
57 | + | ||
58 | + | let VoteIntervalKey = "vote_interval" | |
59 | + | ||
60 | + | let MinSwapAmountKey = "min_swap_amount" | |
61 | + | ||
62 | + | let PriceOffsetKey = "price_offset" | |
63 | + | ||
64 | + | let ProvidingIntervalKey = "providing_interval" | |
65 | + | ||
66 | + | let PriceKey = "price" | |
67 | + | ||
68 | + | let NeutrinoBalanceKey = "neutrino_" | |
69 | + | ||
70 | + | let WavesBalanceKey = "waves_" | |
71 | + | ||
72 | + | let BalanceUnlockBlockKey = "balance_block_" | |
73 | + | ||
74 | + | let OrderbookKey = "orderbook" | |
75 | + | ||
76 | + | let OrderTotalKey = "order_total_" | |
77 | + | ||
78 | + | let OrderOwnerKey = "order_owner_" | |
79 | + | ||
80 | + | let OrderHeightKey = "order_height_" | |
81 | + | ||
82 | + | let OrderFilledTotalKey = "order_filled_total_" | |
83 | + | ||
84 | + | let OrderStatusKey = "order_status_" | |
85 | + | ||
86 | + | let RPDSyncIndexKey = "rpd_sync_index" | |
87 | + | ||
88 | + | let RPDProfitKey = "rpd_profit" | |
89 | + | ||
90 | + | let RPDBalanceKey = "rpd_balance" | |
91 | + | ||
92 | + | let IsBlockedKey = "is_blocked" | |
93 | + | ||
94 | + | let BlackSwarmPriceKey = "black_swarm_price" | |
95 | + | ||
96 | + | let AdminVoteKey = "admin_vote_" | |
97 | + | ||
98 | + | let AdminVotePriceKey = "admin_vote_price_" | |
99 | + | ||
100 | + | let BlockExpireVoteKey = "vote_expire_block" | |
101 | + | ||
102 | + | let AdminKey = "admin_" | |
103 | + | ||
104 | + | let IsPricePendingKey = "is_pending_price" | |
105 | + | ||
106 | + | let OracleKey = "oracle_" | |
107 | + | ||
108 | + | let OracleIsProvideKey = "oracle_is_provide_" | |
109 | + | ||
110 | + | let OracleProvidePriceKey = "oracle_price_provide_" | |
111 | + | ||
112 | + | let BlockExpireProvidingKey = "providing_expire_block" | |
113 | + | ||
114 | + | func getAdminKey (count) = (AdminKey + toString(count)) | |
115 | + | ||
116 | + | ||
117 | + | func getAdminVoteKey (owner) = (AdminVoteKey + owner) | |
118 | + | ||
119 | + | ||
120 | + | func getAdminVotePriceKey (owner) = (AdminVotePriceKey + owner) | |
121 | + | ||
122 | + | ||
123 | + | func getOracleKey (count) = (OracleKey + toString(count)) | |
124 | + | ||
125 | + | ||
126 | + | func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner) | |
127 | + | ||
128 | + | ||
129 | + | func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner) | |
130 | + | ||
131 | + | ||
132 | + | func getRPDSnapshotContractBalanceKey (count,assetId) = ((((RPDBalanceKey + "_") + toBase58String(assetId)) + "_") + toString(count)) | |
133 | + | ||
134 | + | ||
135 | + | func getRPDContractBalanceKey (assetId) = ((RPDBalanceKey + "_") + toBase58String(assetId)) | |
136 | + | ||
137 | + | ||
138 | + | func getRPDProfitKey (count) = ((RPDProfitKey + "_") + toString(count)) | |
139 | + | ||
140 | + | ||
141 | + | func getNeutrinoBalanceKey (owner) = (NeutrinoBalanceKey + owner) | |
142 | + | ||
143 | + | ||
144 | + | func getWavesBalanceKey (owner) = (WavesBalanceKey + owner) | |
145 | + | ||
146 | + | ||
147 | + | func getBalanceUnlockBlockKey (owner) = (BalanceUnlockBlockKey + owner) | |
148 | + | ||
149 | + | ||
150 | + | func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block)) | |
151 | + | ||
152 | + | ||
153 | + | func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block)) | |
154 | + | ||
155 | + | ||
156 | + | func getOrderTotalKey (orderId) = (OrderTotalKey + orderId) | |
157 | + | ||
158 | + | ||
159 | + | func getOrderOwnerKey (orderId) = (OrderOwnerKey + orderId) | |
160 | + | ||
161 | + | ||
162 | + | func getOrderHeightKey (orderId) = (OrderHeightKey + orderId) | |
163 | + | ||
164 | + | ||
165 | + | func getOrderStatusKey (orderId) = (OrderStatusKey + orderId) | |
166 | + | ||
167 | + | ||
168 | + | func getOrderFilledTotalKey (orderId) = (OrderFilledTotalKey + orderId) | |
169 | + | ||
170 | + | ||
171 | + | let price = getNumberByKey(PriceKey) | |
172 | + | ||
173 | + | func convertNeutrinoToWaves (amount) = ((amount * 100) / price) | |
174 | + | ||
175 | + | ||
176 | + | func convertWavesToNeutrino (amount) = ((amount * price) / 100) | |
177 | + | ||
178 | + | ||
179 | + | func convertNeutrinoToBond (amount) = (amount / WAVELET) | |
180 | + | ||
181 | + | ||
182 | + | func convertBondToNeutrino (amount) = (amount * WAVELET) | |
183 | + | ||
184 | + | ||
185 | + | func convertWavesToBond (amount) = convertNeutrinoToBond(convertWavesToNeutrino(amount)) | |
186 | + | ||
187 | + | ||
188 | + | let providingInterval = getNumberByKey(ProvidingIntervalKey) | |
189 | + | ||
190 | + | let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey) | |
191 | + | ||
192 | + | let isPricePending = getBoolByKey(IsPricePendingKey) | |
193 | + | ||
194 | + | let percentPriceOffset = getNumberByKey(PriceOffsetKey) | |
195 | + | ||
196 | + | let rpdSyncIndex = getNumberByKey(RPDSyncIndexKey) | |
197 | + | ||
198 | + | let voteInterval = getNumberByKey(VoteIntervalKey) | |
199 | + | ||
200 | + | let blockExpireVote = getNumberByKey(BlockExpireVoteKey) | |
201 | + | ||
202 | + | let balanceLockInterval = getNumberByKey(BalanceLockIntervalKey) | |
203 | + | ||
204 | + | let isBlocked = getBoolByKey(IsBlockedKey) | |
205 | + | ||
206 | + | let minSwapAmount = getNumberByKey(MinSwapAmountKey) | |
207 | + | ||
208 | + | let neutrinoAssetId = fromBase58String(getStringByKey(NeutrinoAssetIdKey)) | |
209 | + | ||
210 | + | let auctionContract = getStringByKey(AuctionContractKey) | |
211 | + | ||
212 | + | let rpdContract = getStringByKey(RPDContractKey) | |
213 | + | ||
214 | + | let reserve = wavesBalance(this) | |
215 | + | ||
216 | + | let orderbook = getStringByKey(OrderbookKey) | |
217 | + | ||
218 | + | let bondAssetId = fromBase58String(getStringByKey(BondAssetIdKey)) | |
219 | + | ||
220 | + | let bondSupply = { | |
221 | + | let info = extract(assetInfo(bondAssetId)) | |
222 | + | (info.quantity - assetBalance(this, bondAssetId)) | |
223 | + | } | |
224 | + | ||
225 | + | let neutrinoSupply = { | |
226 | + | let info = extract(assetInfo(neutrinoAssetId)) | |
227 | + | (info.quantity - assetBalance(this, neutrinoAssetId)) | |
228 | + | } | |
229 | + | ||
230 | + | let surplus = (100 * WAVELET) | |
231 | + | ||
232 | + | let oracleOne = getStringByKey(getOracleKey(0)) | |
233 | + | ||
234 | + | let oracleTwo = getStringByKey(getOracleKey(1)) | |
235 | + | ||
236 | + | let oracleThree = getStringByKey(getOracleKey(2)) | |
237 | + | ||
238 | + | let adminOne = getStringByKey(getAdminKey(0)) | |
239 | + | ||
240 | + | let adminTwo = getStringByKey(getAdminKey(1)) | |
241 | + | ||
242 | + | let adminThree = getStringByKey(getAdminKey(2)) | |
243 | + | ||
244 | + | func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId)) | |
245 | + | ||
246 | + | ||
247 | + | func getAdminVoteInt (owner) = if (getBoolByKey(getAdminVoteKey(owner))) | |
248 | + | then 1 | |
249 | + | else 0 | |
250 | + | ||
251 | + | ||
252 | + | func getAdminVotePrice (owner) = getNumberByKey(getAdminVotePriceKey(owner)) | |
253 | + | ||
254 | + | ||
255 | + | func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner)) | |
256 | + | ||
257 | + | ||
258 | + | func isOracleProvideInt (owner) = if (isOracleProvide(owner)) | |
259 | + | then 1 | |
260 | + | else 0 | |
261 | + | ||
262 | + | ||
263 | + | func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner)) | |
264 | + | ||
265 | + | ||
266 | + | func getWavesBalance (owner) = getNumberByKey(getWavesBalanceKey(owner)) | |
267 | + | ||
268 | + | ||
269 | + | func getNeutrinoBalance (owner) = getNumberByKey(getNeutrinoBalanceKey(owner)) | |
270 | + | ||
271 | + | ||
272 | + | func getUnlockBalanceBlock (owner) = getNumberByKey(getBalanceUnlockBlockKey(owner)) | |
273 | + | ||
274 | + | ||
275 | + | func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id)) | |
276 | + | ||
277 | + | ||
278 | + | func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id)) | |
279 | + | ||
280 | + | ||
281 | + | func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id)) | |
282 | + | ||
283 | + | ||
284 | + | func getRPDProfit (count) = getNumberByKey(getRPDProfitKey(count)) | |
285 | + | ||
286 | + | ||
287 | + | func getOrderElementById (id) = (id + LISTSPLITSYMBOL) | |
288 | + | ||
289 | + | ||
290 | + | func addOrder (orderId) = (orderbook + getOrderElementById(orderId)) | |
291 | + | ||
292 | + | ||
293 | + | func dropOrder (orderId) = { | |
294 | + | let parts = split(orderbook, getOrderElementById(orderId)) | |
295 | + | (parts[0] + parts[1]) | |
296 | + | } | |
297 | + | ||
298 | + | ||
299 | + | @Callable(i) | |
300 | + | func swapWavesToNeutrino () = { | |
301 | + | let pmt = extract(i.payment) | |
302 | + | if ((minSwapAmount > pmt.amount)) | |
303 | + | then throw("amount less min") | |
304 | + | else if (isDefined(pmt.assetId)) | |
305 | + | then throw("can use waves only") | |
306 | + | else if (isBlocked) | |
307 | + | then throw("contract is blocked") | |
308 | + | else { | |
309 | + | let amount = convertWavesToNeutrino(pmt.amount) | |
310 | + | TransferSet([ScriptTransfer(i.caller, amount, neutrinoAssetId)]) | |
311 | + | } | |
312 | + | } | |
313 | + | ||
314 | + | ||
315 | + | ||
316 | + | @Callable(i) | |
317 | + | func swapNeutrinoToWaves () = { | |
318 | + | let pmt = extract(i.payment) | |
319 | + | if ((minSwapAmount > pmt.amount)) | |
320 | + | then throw("amount less min") | |
321 | + | else if (isBlocked) | |
322 | + | then throw("contract is blocked") | |
323 | + | else if ((pmt.assetId != neutrinoAssetId)) | |
324 | + | then throw("can use neutrino only") | |
325 | + | else { | |
326 | + | let amount = convertNeutrinoToWaves(pmt.amount) | |
327 | + | TransferSet([ScriptTransfer(i.caller, amount, unit)]) | |
328 | + | } | |
329 | + | } | |
330 | + | ||
331 | + | ||
332 | + | ||
333 | + | @Callable(i) | |
334 | + | func executeOrder () = { | |
335 | + | let newRpdSyncIndex = (rpdSyncIndex + 1) | |
336 | + | ScriptResult(WriteSet([DataEntry(RPDSyncIndexKey, newRpdSyncIndex), DataEntry(getRPDProfitKey(rpdSyncIndex), surplus), DataEntry(getRPDSnapshotContractBalanceKey(rpdSyncIndex, neutrinoAssetId), getRPDContractBalance(neutrinoAssetId)), DataEntry(getRPDSnapshotContractBalanceKey(rpdSyncIndex, bondAssetId), getRPDContractBalance(bondAssetId))]), TransferSet([ScriptTransfer(addressFromStringValue(rpdContract), surplus, neutrinoAssetId)])) | |
337 | + | } | |
338 | + | ||
339 | + |
github/deemru/w8io/169f3d6 28.48 ms ◑![]()