tx · Dddv4HuQGZRk2ktVNGR78JxMMv2beTajJsdzmFJRPkG

3Mz5Ya4WEXatCfa2JKqqCe4g3deCrFaBxiL:  -0.01400000 Waves

2019.10.10 13:58 [713661] smart account 3Mz5Ya4WEXatCfa2JKqqCe4g3deCrFaBxiL > SELF 0.00000000 Waves

{ "type": 13, "id": "Dddv4HuQGZRk2ktVNGR78JxMMv2beTajJsdzmFJRPkG", "fee": 1400000, "feeAssetId": null, "timestamp": 1570705142654, "version": 1, "sender": "3Mz5Ya4WEXatCfa2JKqqCe4g3deCrFaBxiL", "senderPublicKey": "CmDpND6JVW2kuJjY4zyXaTHga2fTuCGbo3G9aySpdybJ", "proofs": [ "3QBdk1Zkfg7yr2W5mUmi94MrbadFNqmx8gM9katCLzire5a8VLpRaQS3jCw3xszJr9n6HTP8sXFMuXBhnEAmDHhu" ], "script": "base64:AAIDAAAAAAAAAAAAAAB3AQAAAA5nZXROdW1iZXJCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAgAAAAABAAAADGdldEJvb2xCeUtleQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAHQm9vbGVhbgQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQcBAAAAGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQIAAAAAAAAAAA9MSVNUU1BMSVRTWU1CT0wCAAAAAV8AAAAADkxJU1REQVRBU1lNQk9MAgAAAAErAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAA1DRU5UU0lORE9MTEFSAAAAAAAAAABkAAAAAAhDQU5DRUxFRAIAAAAIY2FuY2VsZWQAAAAAA05FVwIAAAADbmV3AAAAAAZGSUxMRUQCAAAABmZpbGxlZAAAAAASTmV1dHJpbm9Bc3NldElkS2V5AgAAABFuZXV0cmlub19hc3NldF9pZAAAAAAOQm9uZEFzc2V0SWRLZXkCAAAADWJvbmRfYXNzZXRfaWQAAAAAEkF1Y3Rpb25Db250cmFjdEtleQIAAAAQYXVjdGlvbl9jb250cmFjdAAAAAAOUlBEQ29udHJhY3RLZXkCAAAADHJwZF9jb250cmFjdAAAAAAWQmFsYW5jZUxvY2tJbnRlcnZhbEtleQIAAAAVYmFsYW5jZV9sb2NrX2ludGVydmFsAAAAAA9Wb3RlSW50ZXJ2YWxLZXkCAAAADXZvdGVfaW50ZXJ2YWwAAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQIAAAAVbWluX3dhdmVzX3N3YXBfYW1vdW50AAAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCAAAAGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAAAAAOUHJpY2VPZmZzZXRLZXkCAAAADHByaWNlX29mZnNldAAAAAAUUHJvdmlkaW5nSW50ZXJ2YWxLZXkCAAAAEnByb3ZpZGluZ19pbnRlcnZhbAAAAAAIUHJpY2VLZXkCAAAABXByaWNlAAAAABJOZXV0cmlub0JhbGFuY2VLZXkCAAAACW5ldXRyaW5vXwAAAAAPV2F2ZXNCYWxhbmNlS2V5AgAAAAZ3YXZlc18AAAAAFUJhbGFuY2VVbmxvY2tCbG9ja0tleQIAAAAOYmFsYW5jZV9ibG9ja18AAAAADE9yZGVyYm9va0tleQIAAAAJb3JkZXJib29rAAAAAA1PcmRlclRvdGFsS2V5AgAAAAxvcmRlcl90b3RhbF8AAAAADU9yZGVyT3duZXJLZXkCAAAADG9yZGVyX293bmVyXwAAAAAOT3JkZXJIZWlnaHRLZXkCAAAADW9yZGVyX2hlaWdodF8AAAAAE09yZGVyRmlsbGVkVG90YWxLZXkCAAAAE29yZGVyX2ZpbGxlZF90b3RhbF8AAAAADk9yZGVyU3RhdHVzS2V5AgAAAA1vcmRlcl9zdGF0dXNfAAAAAA9SUERTeW5jSW5kZXhLZXkCAAAADnJwZF9zeW5jX2luZGV4AAAAAAxSUERQcm9maXRLZXkCAAAACnJwZF9wcm9maXQAAAAADVJQREJhbGFuY2VLZXkCAAAAC3JwZF9iYWxhbmNlAAAAAAxJc0Jsb2NrZWRLZXkCAAAACmlzX2Jsb2NrZWQAAAAAEkJsYWNrU3dhcm1QcmljZUtleQIAAAARYmxhY2tfc3dhcm1fcHJpY2UAAAAADEFkbWluVm90ZUtleQIAAAALYWRtaW5fdm90ZV8AAAAAEUFkbWluVm90ZVByaWNlS2V5AgAAABFhZG1pbl92b3RlX3ByaWNlXwAAAAASQmxvY2tFeHBpcmVWb3RlS2V5AgAAABF2b3RlX2V4cGlyZV9ibG9jawAAAAAIQWRtaW5LZXkCAAAABmFkbWluXwAAAAARSXNQcmljZVBlbmRpbmdLZXkCAAAAEGlzX3BlbmRpbmdfcHJpY2UAAAAACU9yYWNsZUtleQIAAAAHb3JhY2xlXwAAAAAST3JhY2xlSXNQcm92aWRlS2V5AgAAABJvcmFjbGVfaXNfcHJvdmlkZV8AAAAAFU9yYWNsZVByb3ZpZGVQcmljZUtleQIAAAAVb3JhY2xlX3ByaWNlX3Byb3ZpZGVfAAAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQIAAAAWcHJvdmlkaW5nX2V4cGlyZV9ibG9jawAAAAASQXBwcm92ZWRMZWFzZVR4S2V5AgAAAAdsZWFzZXR4AAAAABlJc0xlYXNpbmdQcm9maXRUeEV4aXN0S2V5AgAAABFpc19sZWFzaW5nX3Byb2ZpdAEAAAALZ2V0QWRtaW5LZXkAAAABAAAABWNvdW50CQABLAAAAAIFAAAACEFkbWluS2V5CQABpAAAAAEFAAAABWNvdW50AQAAAA9nZXRBZG1pblZvdGVLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAADEFkbWluVm90ZUtleQUAAAAFb3duZXIBAAAAFGdldEFkbWluVm90ZVByaWNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAABFBZG1pblZvdGVQcmljZUtleQUAAAAFb3duZXIBAAAADGdldE9yYWNsZUtleQAAAAEAAAAFY291bnQJAAEsAAAAAgUAAAAJT3JhY2xlS2V5CQABpAAAAAEFAAAABWNvdW50AQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAEk9yYWNsZUlzUHJvdmlkZUtleQUAAAAFb3duZXIBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAAVT3JhY2xlUHJvdmlkZVByaWNlS2V5BQAAAAVvd25lcgEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACAAAABWNvdW50AAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANUlBEQmFsYW5jZUtleQIAAAABXwkAAlgAAAABBQAAAAdhc3NldElkAgAAAAFfCQABpAAAAAEFAAAABWNvdW50AQAAABhnZXRSUERDb250cmFjdEJhbGFuY2VLZXkAAAABAAAAB2Fzc2V0SWQJAAEsAAAAAgkAASwAAAACBQAAAA1SUERCYWxhbmNlS2V5AgAAAAFfCQACWAAAAAEFAAAAB2Fzc2V0SWQBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEAAAAFY291bnQJAAEsAAAAAgkAASwAAAACBQAAAAxSUERQcm9maXRLZXkCAAAAAV8JAAGkAAAAAQUAAAAFY291bnQBAAAAFWdldE5ldXRyaW5vQmFsYW5jZUtleQAAAAEAAAAFb3duZXIJAAEsAAAAAgUAAAASTmV1dHJpbm9CYWxhbmNlS2V5BQAAAAVvd25lcgEAAAASZ2V0V2F2ZXNCYWxhbmNlS2V5AAAAAQAAAAVvd25lcgkAASwAAAACBQAAAA9XYXZlc0JhbGFuY2VLZXkFAAAABW93bmVyAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABAAAABW93bmVyCQABLAAAAAIFAAAAFUJhbGFuY2VVbmxvY2tCbG9ja0tleQUAAAAFb3duZXIBAAAAFWdldEJsYWNrU3dhcm1QcmljZUtleQAAAAEAAAAFYmxvY2sJAAEsAAAAAgkAASwAAAACBQAAABJCbGFja1N3YXJtUHJpY2VLZXkCAAAAAV8JAAGkAAAAAQUAAAAFYmxvY2sBAAAAEmdldFByaWNlSGlzdG9yeUtleQAAAAEAAAAFYmxvY2sJAAEsAAAAAgkAASwAAAACBQAAAAhQcmljZUtleQIAAAABXwkAAaQAAAABBQAAAAVibG9jawEAAAAcZ2V0T3duZXJQdWJLZXlCeUxlYXNlVHhJZEtleQAAAAEAAAAEdHhJZAkAASwAAAACCQABLAAAAAIFAAAAEkFwcHJvdmVkTGVhc2VUeEtleQIAAAABXwUAAAAEdHhJZAEAAAAcZ2V0SXNMZWFzaW5nUHJvZml0VHhFeGlzdEtleQAAAAEAAAAEdHhJZAkAASwAAAACCQABLAAAAAIFAAAAGUlzTGVhc2luZ1Byb2ZpdFR4RXhpc3RLZXkCAAAAAV8FAAAABHR4SWQBAAAAEGdldE9yZGVyVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAANT3JkZXJUb3RhbEtleQUAAAAHb3JkZXJJZAEAAAAQZ2V0T3JkZXJPd25lcktleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACBQAAAA1PcmRlck93bmVyS2V5BQAAAAdvcmRlcklkAQAAABFnZXRPcmRlckhlaWdodEtleQAAAAEAAAAHb3JkZXJJZAkAASwAAAACBQAAAA5PcmRlckhlaWdodEtleQUAAAAHb3JkZXJJZAEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAAOT3JkZXJTdGF0dXNLZXkFAAAAB29yZGVySWQBAAAAFmdldE9yZGVyRmlsbGVkVG90YWxLZXkAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAATT3JkZXJGaWxsZWRUb3RhbEtleQUAAAAHb3JkZXJJZAAAAAAFcHJpY2UJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAACFByaWNlS2V5AQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAQAAAAZhbW91bnQJAABpAAAAAgkAAGgAAAACCQAAaQAAAAIJAABoAAAAAgUAAAAGYW1vdW50AAAAAAAAAABkBQAAAAVwcmljZQUAAAAHV0FWRUxFVAUAAAANQ0VOVFNJTkRPTExBUgEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAEAAAAGYW1vdW50CQAAaQAAAAIJAABoAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAABmFtb3VudAUAAAAFcHJpY2UAAAAAAAAAAGQFAAAADUNFTlRTSU5ET0xMQVIFAAAAB1dBVkVMRVQBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEAAAAGYW1vdW50CQAAaQAAAAIFAAAABmFtb3VudAUAAAANQ0VOVFNJTkRPTExBUgEAAAAVY29udmVydEJvbmRUb05ldXRyaW5vAAAAAQAAAAZhbW91bnQJAABoAAAAAgUAAAAGYW1vdW50BQAAAA1DRU5UU0lORE9MTEFSAQAAABJjb252ZXJ0V2F2ZXNUb0JvbmQAAAABAAAABmFtb3VudAkBAAAAFWNvbnZlcnROZXV0cmlub1RvQm9uZAAAAAEJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAGYW1vdW50AAAAABFwcm92aWRpbmdJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAUUHJvdmlkaW5nSW50ZXJ2YWxLZXkAAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQAAAAAOaXNQcmljZVBlbmRpbmcJAQAAAAxnZXRCb29sQnlLZXkAAAABBQAAABFJc1ByaWNlUGVuZGluZ0tleQAAAAAScGVyY2VudFByaWNlT2Zmc2V0CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA5QcmljZU9mZnNldEtleQAAAAAMcnBkU3luY0luZGV4CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAAA9SUERTeW5jSW5kZXhLZXkAAAAADHZvdGVJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAPVm90ZUludGVydmFsS2V5AAAAAA9ibG9ja0V4cGlyZVZvdGUJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAEkJsb2NrRXhwaXJlVm90ZUtleQAAAAATYmFsYW5jZUxvY2tJbnRlcnZhbAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQUAAAAWQmFsYW5jZUxvY2tJbnRlcnZhbEtleQAAAAAJaXNCbG9ja2VkCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQUAAAAMSXNCbG9ja2VkS2V5AAAAABJtaW5XYXZlc1N3YXBBbW91bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEFAAAAFU1pbldhdmVzU3dhcEFtb3VudEtleQAAAAAVbWluTmV1dHJpbm9Td2FwQW1vdW50CQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABBQAAABhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkAAAAAD25ldXRyaW5vQXNzZXRJZAkAAlkAAAABCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABBQAAABJOZXV0cmlub0Fzc2V0SWRLZXkAAAAAD2F1Y3Rpb25Db250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAASQXVjdGlvbkNvbnRyYWN0S2V5AAAAAAtycGRDb250cmFjdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAOUlBEQ29udHJhY3RLZXkAAAAAB3Jlc2VydmUJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzAAAAAAlvcmRlcmJvb2sJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEFAAAADE9yZGVyYm9va0tleQAAAAALYm9uZEFzc2V0SWQJAAJZAAAAAQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQUAAAAOQm9uZEFzc2V0SWRLZXkAAAAACmJvbmRTdXBwbHkEAAAABGluZm8JAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAAtib25kQXNzZXRJZAkAAGUAAAACCAUAAAAEaW5mbwAAAAhxdWFudGl0eQkAA+sAAAACBQAAAAR0aGlzBQAAAAtib25kQXNzZXRJZAAAAAAObmV1dHJpbm9TdXBwbHkEAAAABGluZm8JAQAAAAdleHRyYWN0AAAAAQkAA+wAAAABBQAAAA9uZXV0cmlub0Fzc2V0SWQJAABlAAAAAggFAAAABGluZm8AAAAIcXVhbnRpdHkJAAPrAAAAAgUAAAAEdGhpcwUAAAAPbmV1dHJpbm9Bc3NldElkAAAAAAdzdXJwbHVzCQAAZQAAAAIJAQAAABZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAAAAAQUAAAAHcmVzZXJ2ZQUAAAAObmV1dHJpbm9TdXBwbHkAAAAACW9yYWNsZU9uZQkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADGdldE9yYWNsZUtleQAAAAEAAAAAAAAAAAAAAAAACW9yYWNsZVR3bwkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADGdldE9yYWNsZUtleQAAAAEAAAAAAAAAAAEAAAAAC29yYWNsZVRocmVlCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMZ2V0T3JhY2xlS2V5AAAAAQAAAAAAAAAAAgAAAAAIYWRtaW5PbmUJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAtnZXRBZG1pbktleQAAAAEAAAAAAAAAAAAAAAAACGFkbWluVHdvCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAALZ2V0QWRtaW5LZXkAAAABAAAAAAAAAAABAAAAAAphZG1pblRocmVlCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAALZ2V0QWRtaW5LZXkAAAABAAAAAAAAAAACAQAAABlnZXRPd25lclB1YktleUJ5TGVhc2VUeElkAAAAAQAAAAVvd25lcgkBAAAAGGdldFN0cmluZ0J5QWRkcmVzc0FuZEtleQAAAAIFAAAAC3JwZENvbnRyYWN0CQEAAAAcZ2V0T3duZXJQdWJLZXlCeUxlYXNlVHhJZEtleQAAAAEFAAAABW93bmVyAQAAABVnZXRSUERDb250cmFjdEJhbGFuY2UAAAABAAAAB2Fzc2V0SWQJAQAAABhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkAAAACBQAAAAtycGRDb250cmFjdAkBAAAAGGdldFJQRENvbnRyYWN0QmFsYW5jZUtleQAAAAEFAAAAB2Fzc2V0SWQBAAAAFmlzTGVhc2luZ1Byb2ZpdFR4RXhpc3QAAAABAAAABHR4SWQJAQAAAAxnZXRCb29sQnlLZXkAAAABCQEAAAAcZ2V0SXNMZWFzaW5nUHJvZml0VHhFeGlzdEtleQAAAAEFAAAABHR4SWQBAAAAD2dldEFkbWluVm90ZUludAAAAAEAAAAFb3duZXIDCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAD2dldEFkbWluVm90ZUtleQAAAAEFAAAABW93bmVyAAAAAAAAAAABAAAAAAAAAAAAAQAAABFnZXRBZG1pblZvdGVQcmljZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABRnZXRBZG1pblZvdGVQcmljZUtleQAAAAEFAAAABW93bmVyAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABAAAABW93bmVyCQEAAAAMZ2V0Qm9vbEJ5S2V5AAAAAQkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAABW93bmVyAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABAAAABW93bmVyAwkBAAAAD2lzT3JhY2xlUHJvdmlkZQAAAAEFAAAABW93bmVyAAAAAAAAAAABAAAAAAAAAAAAAQAAABVnZXRPcmFjbGVQcm92aWRlUHJpY2UAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0T3JhY2xlUHJvdmlkZVByaWNlS2V5AAAAAQUAAAAFb3duZXIBAAAAD2dldFdhdmVzQmFsYW5jZQAAAAEAAAAFb3duZXIJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABJnZXRXYXZlc0JhbGFuY2VLZXkAAAABBQAAAAVvd25lcgEAAAASZ2V0TmV1dHJpbm9CYWxhbmNlAAAAAQAAAAVvd25lcgkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldE5ldXRyaW5vQmFsYW5jZUtleQAAAAEFAAAABW93bmVyAQAAABVnZXRVbmxvY2tCYWxhbmNlQmxvY2sAAAABAAAABW93bmVyCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAYZ2V0QmFsYW5jZVVubG9ja0Jsb2NrS2V5AAAAAQUAAAAFb3duZXIBAAAADWdldE9yZGVyVG90YWwAAAABAAAAAmlkCQEAAAAOZ2V0TnVtYmVyQnlLZXkAAAABCQEAAAAQZ2V0T3JkZXJUb3RhbEtleQAAAAEFAAAAAmlkAQAAAA1nZXRPcmRlck93bmVyAAAAAQAAAAJpZAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGdldE9yZGVyT3duZXJLZXkAAAABBQAAAAJpZAEAAAATZ2V0T3JkZXJGaWxsZWRUb3RhbAAAAAEAAAACaWQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAABZnZXRPcmRlckZpbGxlZFRvdGFsS2V5AAAAAQUAAAACaWQBAAAADGdldFJQRFByb2ZpdAAAAAEAAAAFY291bnQJAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRSUERQcm9maXRLZXkAAAABBQAAAAVjb3VudAEAAAATZ2V0T3JkZXJFbGVtZW50QnlJZAAAAAEAAAACaWQJAAEsAAAAAgUAAAACaWQFAAAAD0xJU1RTUExJVFNZTUJPTAEAAAAIYWRkT3JkZXIAAAABAAAAB29yZGVySWQJAAEsAAAAAgUAAAAJb3JkZXJib29rCQEAAAATZ2V0T3JkZXJFbGVtZW50QnlJZAAAAAEFAAAAB29yZGVySWQBAAAACWRyb3BPcmRlcgAAAAEAAAAHb3JkZXJJZAQAAAAFcGFydHMJAAS1AAAAAgUAAAAJb3JkZXJib29rCQEAAAATZ2V0T3JkZXJFbGVtZW50QnlJZAAAAAEFAAAAB29yZGVySWQJAAEsAAAAAgkAAZEAAAACBQAAAAVwYXJ0cwAAAAAAAAAAAAkAAZEAAAACBQAAAAVwYXJ0cwAAAAAAAAAAAQAAAA0AAAABaQEAAAAPc2V0Q3VycmVudFByaWNlAAAAAQAAAAhuZXdQcmljZQQAAAAHYWNjb3VudAkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQJAABkAAAAAgkAAGQAAAACCQAAZAAAAAIJAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAlvcmFjbGVPbmUJAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAlvcmFjbGVUd28JAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAtvcmFjbGVUaHJlZQAAAAAAAAAAAQMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAABNjb250cmFjdCBpcyBibG9ja2VkAwMDCQEAAAACIT0AAAACBQAAAAdhY2NvdW50BQAAAAlvcmFjbGVPbmUJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAACW9yYWNsZVR3bwcJAQAAAAIhPQAAAAIFAAAAB2FjY291bnQFAAAAC29yYWNsZVRocmVlBwkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAMDCQAAZwAAAAIFAAAAFGJsb2NrRXhwaXJlUHJvdmlkaW5nBQAAAAZoZWlnaHQJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABBQAAAAdhY2NvdW50BwkAAAIAAAABAgAAABlwcmljZSBpcyBhbHJlYWR5IHByb3ZpZGVkAwMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwUAAAAOaXNQcmljZVBlbmRpbmcHCQAAAgAAAAECAAAAGHVzZSBmaW5pbGl6ZUN1cnJlbnRQcmljZQkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAGGdldE9yYWNsZVByb3ZpZGVQcmljZUtleQAAAAEFAAAAB2FjY291bnQFAAAACG5ld1ByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAABdCbG9ja0V4cGlyZVByb3ZpZGluZ0tleQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEXByb3ZpZGluZ0ludGVydmFsBQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldE9yYWNsZUlzUHJvdmlkZUtleQAAAAEFAAAACW9yYWNsZU9uZQMJAABmAAAAAgUAAAAGaGVpZ2h0BQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwcJAQAAAA9pc09yYWNsZVByb3ZpZGUAAAABBQAAAAlvcmFjbGVPbmUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABBQAAAAlvcmFjbGVUd28DCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQUAAAAJb3JhY2xlVHdvCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0T3JhY2xlSXNQcm92aWRlS2V5AAAAAQUAAAALb3JhY2xlVGhyZWUDCQAAZgAAAAIFAAAABmhlaWdodAUAAAAUYmxvY2tFeHBpcmVQcm92aWRpbmcHCQEAAAAPaXNPcmFjbGVQcm92aWRlAAAAAQUAAAALb3JhY2xlVGhyZWUJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRPcmFjbGVJc1Byb3ZpZGVLZXkAAAABBQAAAAdhY2NvdW50BgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAARSXNQcmljZVBlbmRpbmdLZXkDAwkAAGcAAAACBQAAABRibG9ja0V4cGlyZVByb3ZpZGluZwUAAAAGaGVpZ2h0CQAAZwAAAAIFAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQAAAAAAAAAAAIHBgUAAAAOaXNQcmljZVBlbmRpbmcFAAAAA25pbAAAAAFpAQAAABRmaW5pbGl6ZUN1cnJlbnRQcmljZQAAAAAEAAAAB2FjY291bnQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAABNwcmljZVByb3ZpZGluZ0NvdW50CQAAZAAAAAIJAABkAAAAAgkBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEFAAAACW9yYWNsZU9uZQkBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEFAAAACW9yYWNsZVR3bwkBAAAAEmlzT3JhY2xlUHJvdmlkZUludAAAAAEFAAAAC29yYWNsZVRocmVlBAAAAAhuZXdQcmljZQkAAGkAAAACCQAAZAAAAAIJAABkAAAAAgkAAGgAAAACCQEAAAAVZ2V0T3JhY2xlUHJvdmlkZVByaWNlAAAAAQUAAAAJb3JhY2xlT25lCQEAAAASaXNPcmFjbGVQcm92aWRlSW50AAAAAQUAAAAJb3JhY2xlT25lCQAAaAAAAAIJAQAAABVnZXRPcmFjbGVQcm92aWRlUHJpY2UAAAABBQAAAAlvcmFjbGVUd28JAQAAABJpc09yYWNsZVByb3ZpZGVJbnQAAAABBQAAAAlvcmFjbGVUd28JAABoAAAAAgkBAAAAFWdldE9yYWNsZVByb3ZpZGVQcmljZQAAAAEFAAAAC29yYWNsZVRocmVlCQEAAAASaXNPcmFjbGVQcm92aWRlSW50AAAAAQUAAAALb3JhY2xlVGhyZWUFAAAAE3ByaWNlUHJvdmlkaW5nQ291bnQDBQAAAAlpc0Jsb2NrZWQJAAACAAAAAQIAAAATY29udHJhY3QgaXMgYmxvY2tlZAMD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CAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZhbW91bnQJAQAAABZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAAAAAQgFAAAAA3BtdAAAAAZhbW91bnQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRXYXZlc0JhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50CQAAZAAAAAIJAQAAAA9nZXRXYXZlc0JhbGFuY2UAAAABBQAAAAdhY2NvdW50BQAAAAZhbW91bnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABhnZXRCYWxhbmNlVW5sb2NrQmxvY2tLZXkAAAABBQAAAAdhY2NvdW50CQAAZAAAAAIFAAAABmhlaWdodAUAAAATYmFsYW5jZUxvY2tJbnRlcnZhbAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAQAAAAdhY2NvdW50AwkAAGYAAAACCQEAAAAVZ2V0VW5sb2NrQmFsYW5jZUJsb2NrAAAAAQUAAAAHYWNjb3VudAUAAAAGaGVpZ2h0CQAAAgAAAAECAAAAJHdhaXQgYSBjb3VwbGUgb2YgYmxvY2tzIGZvciB3aXRoZHJhdwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABJnZXRXYXZlc0JhbGFuY2VLZXkAAAABBQAAAAdhY2NvdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0TmV1dHJpbm9CYWxhbmNlS2V5AAAAAQUAAAAHYWNjb3VudAAAAAAAAAAAAAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAAHYWNjb3VudAkBAAAAEmdldE5ldXRyaW5vQmFsYW5jZQAAAAEFAAAAB2FjY291bnQFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEA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ZXIAAAABBQAAAAdvcmRlcklkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAhDQU5DRUxFRAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAAtib25kQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAD2FkZExlYXNpbmdDaGVjawAAAAEAAAACaWQEAAAAAnR4CQEAAAAFdmFsdWUAAAABCQAD7gAAAAEJAAJZAAAAAQUAAAACaWQDAwkBAAAAAiE9AAAAAggFAAAAAnR4AAAACXJlY2lwaWVudAkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAtycGRDb250cmFjdAYJAQAAABZpc0xlYXNpbmdQcm9maXRUeEV4aXN0AAAAAQUAAAACaWQJAAACAAAAAQIAAAAWaW52YWxpZCB0cmFuc2FjdGlvbiBpZAQAAAAGYW1vdW50CQEAAAAWY29udmVydFdhdmVzVG9OZXV0cmlubwAAAAEIBQAAAAJ0eAAAAAZhbW91bnQEAAAAD25ld1JwZFN5bmNJbmRleAkAAGQAAAACBQAAAAxycGRTeW5jSW5kZXgAAAAAAAAAAAEJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAA9SUERTeW5jSW5kZXhLZXkFAAAAD25ld1JwZFN5bmNJbmRleAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAD2dldFJQRFByb2ZpdEtleQAAAAEFAAAADHJwZFN5bmNJbmRleAUAAAAGYW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACBQAAAAxycGRTeW5jSW5kZXgFAAAAD25ldXRyaW5vQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAIGdldFJQRFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgUAAAAMcnBkU3luY0luZGV4BQAAAAtib25kQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAC2JvbmRBc3NldElkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAcZ2V0SXNMZWFzaW5nUHJvZml0VHhFeGlzdEtleQAAAAEFAAAAAmlkBgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABxAZXh0clVzZXIoYWRkcmVzc0Zyb21TdHJpbmcpAAAAAQUAAAALcnBkQ29udHJhY3QFAAAABmFtb3VudAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAAMZXhlY3V0ZU9yZGVyAAAAAAQAAAAHb3JkZXJJZAkAAZEAAAACCQAEtQAAAAIFAAAACW9yZGVyYm9vawUAAAAPTElTVFNQTElUU1lNQk9MAAAAAAAAAAAABAAAAApvcmRlclRvdGFsCQEAAAANZ2V0T3JkZXJUb3RhbAAAAAEFAAAAB29yZGVySWQEAAAACm9yZGVyT3duZXIJAQAAAA1nZXRPcmRlck93bmVyAAAAAQUAAAAHb3JkZXJJZAQAAAALZmlsbGVkVG90YWwJAQAAABNnZXRPcmRlckZpbGxlZFRvdGFsAAAAAQUAAAAHb3JkZXJJZAMFAAAACWlzQmxvY2tlZAkAAAIAAAABAgAAABNjb250cmFjdCBpcyBibG9ja2VkAwkAAGcAAAACAAAAAAAAAAAABQAAAAdzdXJwbHVzCQAAAgAAAAECAAAAGXN1cnBsdXMgaXMgbGVzcyB0aGFuIHplcm8DCQAAAAAAAAIFAAAACm9yZGVyT3duZXICAAAAAAQAAAAPbmV3UnBkU3luY0luZGV4CQAAZAAAAAIFAAAADHJwZFN5bmNJbmRleAAAAAAAAAAAAQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAAD1JQRFN5bmNJbmRleEtleQUAAAAPbmV3UnBkU3luY0luZGV4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAPZ2V0UlBEUHJvZml0S2V5AAAAAQUAAAAMcnBkU3luY0luZGV4BQAAAAdzdXJwbHVzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAgZ2V0UlBEU25hcHNob3RDb250cmFjdEJhbGFuY2VLZXkAAAACBQAAAAxycGRTeW5jSW5kZXgFAAAAD25ldXRyaW5vQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAD25ldXRyaW5vQXNzZXRJZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAIGdldFJQRFNuYXBzaG90Q29udHJhY3RCYWxhbmNlS2V5AAAAAgUAAAAMcnBkU3luY0luZGV4BQAAAAtib25kQXNzZXRJZAkBAAAAFWdldFJQRENvbnRyYWN0QmFsYW5jZQAAAAEFAAAAC2JvbmRBc3NldElkBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAAtycGRDb250cmFjdAUAAAAHc3VycGx1cwUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwEAAAABmFtb3VudAkAAGUAAAACBQAAAApvcmRlclRvdGFsBQAAAAtmaWxsZWRUb3RhbAQAAAALc3VycGx1c0JvbmQJAQAAABVjb252ZXJ0TmV1dHJpbm9Ub0JvbmQAAAABBQAAAAdzdXJwbHVzBAAAAAZzdGF0dXMDCQAAZwAAAAIFAAAAC3N1cnBsdXNCb25kBQAAAAZhbW91bnQFAAAABkZJTExFRAUAAAADTkVXBAAAAA5uZXdGaWxsZWRUb3RhbAMJAABnAAAAAgUAAAALc3VycGx1c0JvbmQFAAAABmFtb3VudAUAAAAKb3JkZXJUb3RhbAUAAAALc3VycGx1c0JvbmQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxPcmRlcmJvb2tLZXkJAQAAAAlkcm9wT3JkZXIAAAABBQAAAAdvcmRlcklkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAWZ2V0T3JkZXJGaWxsZWRUb3RhbEtleQAAAAEFAAAAB29yZGVySWQJAABkAAAAAgUAAAALZmlsbGVkVG90YWwFAAAADm5ld0ZpbGxlZFRvdGFsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAARZ2V0T3JkZXJTdGF0dXNLZXkAAAABBQAAAAdvcmRlcklkBQAAAAZzdGF0dXMFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAACm9yZGVyT3duZXIJAQAAABVjb252ZXJ0Qm9uZFRvTmV1dHJpbm8AAAABBQAAAA5uZXdGaWxsZWRUb3RhbAUAAAAPbmV1dHJpbm9Bc3NldElkBQAAAANuaWwAAAABaQEAAAAIdHJhbnNmZXIAAAABAAAAB2FjY291bnQEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAACBjYW4gdXNlIHdhdmVzIG9ubHkgYXQgdGhlIG1vbWVudAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAB2FjY291bnQIBQAAAANwbXQAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQTGVhc2VUcmFuc2FjdGlvbgQAAAAHbGVhc2VUeAUAAAAHJG1hdGNoMAkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAJAAJZAAAAAQkBAAAAGWdldE93bmVyUHViS2V5QnlMZWFzZVR4SWQAAAABCQACWAAAAAEIBQAAAAdsZWFzZVR4AAAAAmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABZMZWFzZUNhbmNlbFRyYW5zYWN0aW9uBAAAAAl1bmxlYXNlVHgFAAAAByRtYXRjaDAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACQACWQAAAAEJAQAAABlnZXRPd25lclB1YktleUJ5TGVhc2VUeElkAAAAAQkAAlgAAAABCAUAAAAJdW5sZWFzZVR4AAAAB2xlYXNlSWQJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5F4Gytw==", "chainId": 84, "height": 713661, "spentComplexity": 0 } View: original | compacted Prev: ChYm6ZTopG9MEWTBH5WWeNisef9bx1L4Md8rhheZYSMu Next: none 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(this, key) {
3737 case a: String =>
3838 a
3939 case _ =>
4040 ""
4141 }
4242
4343
4444 let LISTSPLITSYMBOL = "_"
4545
4646 let LISTDATASYMBOL = "+"
4747
4848 let WAVELET = 100000000
4949
5050 let CENTSINDOLLAR = 100
5151
5252 let CANCELED = "canceled"
5353
5454 let NEW = "new"
5555
5656 let FILLED = "filled"
5757
5858 let NeutrinoAssetIdKey = "neutrino_asset_id"
5959
6060 let BondAssetIdKey = "bond_asset_id"
6161
6262 let AuctionContractKey = "auction_contract"
6363
6464 let RPDContractKey = "rpd_contract"
6565
6666 let BalanceLockIntervalKey = "balance_lock_interval"
6767
6868 let VoteIntervalKey = "vote_interval"
6969
7070 let MinWavesSwapAmountKey = "min_waves_swap_amount"
7171
7272 let MinNeutrinoSwapAmountKey = "min_neutrino_swap_amount"
7373
7474 let PriceOffsetKey = "price_offset"
7575
7676 let ProvidingIntervalKey = "providing_interval"
7777
7878 let PriceKey = "price"
7979
8080 let NeutrinoBalanceKey = "neutrino_"
8181
8282 let WavesBalanceKey = "waves_"
8383
8484 let BalanceUnlockBlockKey = "balance_block_"
8585
8686 let OrderbookKey = "orderbook"
8787
8888 let OrderTotalKey = "order_total_"
8989
9090 let OrderOwnerKey = "order_owner_"
9191
9292 let OrderHeightKey = "order_height_"
9393
9494 let OrderFilledTotalKey = "order_filled_total_"
9595
9696 let OrderStatusKey = "order_status_"
9797
9898 let RPDSyncIndexKey = "rpd_sync_index"
9999
100100 let RPDProfitKey = "rpd_profit"
101101
102102 let RPDBalanceKey = "rpd_balance"
103103
104104 let IsBlockedKey = "is_blocked"
105105
106106 let BlackSwarmPriceKey = "black_swarm_price"
107107
108108 let AdminVoteKey = "admin_vote_"
109109
110110 let AdminVotePriceKey = "admin_vote_price_"
111111
112112 let BlockExpireVoteKey = "vote_expire_block"
113113
114114 let AdminKey = "admin_"
115115
116116 let IsPricePendingKey = "is_pending_price"
117117
118118 let OracleKey = "oracle_"
119119
120120 let OracleIsProvideKey = "oracle_is_provide_"
121121
122122 let OracleProvidePriceKey = "oracle_price_provide_"
123123
124124 let BlockExpireProvidingKey = "providing_expire_block"
125125
126126 let ApprovedLeaseTxKey = "leasetx"
127127
128128 let IsLeasingProfitTxExistKey = "is_leasing_profit"
129129
130130 func getAdminKey (count) = (AdminKey + toString(count))
131131
132132
133133 func getAdminVoteKey (owner) = (AdminVoteKey + owner)
134134
135135
136136 func getAdminVotePriceKey (owner) = (AdminVotePriceKey + owner)
137137
138138
139139 func getOracleKey (count) = (OracleKey + toString(count))
140140
141141
142142 func getOracleIsProvideKey (owner) = (OracleIsProvideKey + owner)
143143
144144
145145 func getOracleProvidePriceKey (owner) = (OracleProvidePriceKey + owner)
146146
147147
148148 func getRPDSnapshotContractBalanceKey (count,assetId) = ((((RPDBalanceKey + "_") + toBase58String(assetId)) + "_") + toString(count))
149149
150150
151151 func getRPDContractBalanceKey (assetId) = ((RPDBalanceKey + "_") + toBase58String(assetId))
152152
153153
154154 func getRPDProfitKey (count) = ((RPDProfitKey + "_") + toString(count))
155155
156156
157157 func getNeutrinoBalanceKey (owner) = (NeutrinoBalanceKey + owner)
158158
159159
160160 func getWavesBalanceKey (owner) = (WavesBalanceKey + owner)
161161
162162
163163 func getBalanceUnlockBlockKey (owner) = (BalanceUnlockBlockKey + owner)
164164
165165
166166 func getBlackSwarmPriceKey (block) = ((BlackSwarmPriceKey + "_") + toString(block))
167167
168168
169169 func getPriceHistoryKey (block) = ((PriceKey + "_") + toString(block))
170170
171171
172172 func getOwnerPubKeyByLeaseTxIdKey (txId) = ((ApprovedLeaseTxKey + "_") + txId)
173173
174174
175175 func getIsLeasingProfitTxExistKey (txId) = ((IsLeasingProfitTxExistKey + "_") + txId)
176176
177177
178178 func getOrderTotalKey (orderId) = (OrderTotalKey + orderId)
179179
180180
181181 func getOrderOwnerKey (orderId) = (OrderOwnerKey + orderId)
182182
183183
184184 func getOrderHeightKey (orderId) = (OrderHeightKey + orderId)
185185
186186
187187 func getOrderStatusKey (orderId) = (OrderStatusKey + orderId)
188188
189189
190190 func getOrderFilledTotalKey (orderId) = (OrderFilledTotalKey + orderId)
191191
192192
193193 let price = getNumberByKey(PriceKey)
194194
195195 func convertNeutrinoToWaves (amount) = ((((amount * 100) / price) * WAVELET) / CENTSINDOLLAR)
196196
197197
198198 func convertWavesToNeutrino (amount) = ((((amount * price) / 100) * CENTSINDOLLAR) / WAVELET)
199199
200200
201201 func convertNeutrinoToBond (amount) = (amount / CENTSINDOLLAR)
202202
203203
204204 func convertBondToNeutrino (amount) = (amount * CENTSINDOLLAR)
205205
206206
207207 func convertWavesToBond (amount) = convertNeutrinoToBond(convertWavesToNeutrino(amount))
208208
209209
210210 let providingInterval = getNumberByKey(ProvidingIntervalKey)
211211
212212 let blockExpireProviding = getNumberByKey(BlockExpireProvidingKey)
213213
214214 let isPricePending = getBoolByKey(IsPricePendingKey)
215215
216216 let percentPriceOffset = getNumberByKey(PriceOffsetKey)
217217
218218 let rpdSyncIndex = getNumberByKey(RPDSyncIndexKey)
219219
220220 let voteInterval = getNumberByKey(VoteIntervalKey)
221221
222222 let blockExpireVote = getNumberByKey(BlockExpireVoteKey)
223223
224224 let balanceLockInterval = getNumberByKey(BalanceLockIntervalKey)
225225
226226 let isBlocked = getBoolByKey(IsBlockedKey)
227227
228228 let minWavesSwapAmount = getNumberByKey(MinWavesSwapAmountKey)
229229
230230 let minNeutrinoSwapAmount = getNumberByKey(MinNeutrinoSwapAmountKey)
231231
232232 let neutrinoAssetId = fromBase58String(getStringByKey(NeutrinoAssetIdKey))
233233
234234 let auctionContract = getStringByKey(AuctionContractKey)
235235
236236 let rpdContract = getStringByKey(RPDContractKey)
237237
238238 let reserve = wavesBalance(this)
239239
240240 let orderbook = getStringByKey(OrderbookKey)
241241
242242 let bondAssetId = fromBase58String(getStringByKey(BondAssetIdKey))
243243
244244 let bondSupply = {
245245 let info = extract(assetInfo(bondAssetId))
246246 (info.quantity - assetBalance(this, bondAssetId))
247247 }
248248
249249 let neutrinoSupply = {
250250 let info = extract(assetInfo(neutrinoAssetId))
251251 (info.quantity - assetBalance(this, neutrinoAssetId))
252252 }
253253
254254 let surplus = (convertWavesToNeutrino(reserve) - neutrinoSupply)
255255
256256 let oracleOne = getStringByKey(getOracleKey(0))
257257
258258 let oracleTwo = getStringByKey(getOracleKey(1))
259259
260260 let oracleThree = getStringByKey(getOracleKey(2))
261261
262262 let adminOne = getStringByKey(getAdminKey(0))
263263
264264 let adminTwo = getStringByKey(getAdminKey(1))
265265
266266 let adminThree = getStringByKey(getAdminKey(2))
267267
268268 func getOwnerPubKeyByLeaseTxId (owner) = getStringByAddressAndKey(rpdContract, getOwnerPubKeyByLeaseTxIdKey(owner))
269269
270270
271271 func getRPDContractBalance (assetId) = getNumberByAddressAndKey(rpdContract, getRPDContractBalanceKey(assetId))
272272
273273
274274 func isLeasingProfitTxExist (txId) = getBoolByKey(getIsLeasingProfitTxExistKey(txId))
275275
276276
277277 func getAdminVoteInt (owner) = if (getBoolByKey(getAdminVoteKey(owner)))
278278 then 1
279279 else 0
280280
281281
282282 func getAdminVotePrice (owner) = getNumberByKey(getAdminVotePriceKey(owner))
283283
284284
285285 func isOracleProvide (owner) = getBoolByKey(getOracleIsProvideKey(owner))
286286
287287
288288 func isOracleProvideInt (owner) = if (isOracleProvide(owner))
289289 then 1
290290 else 0
291291
292292
293293 func getOracleProvidePrice (owner) = getNumberByKey(getOracleProvidePriceKey(owner))
294294
295295
296296 func getWavesBalance (owner) = getNumberByKey(getWavesBalanceKey(owner))
297297
298298
299299 func getNeutrinoBalance (owner) = getNumberByKey(getNeutrinoBalanceKey(owner))
300300
301301
302302 func getUnlockBalanceBlock (owner) = getNumberByKey(getBalanceUnlockBlockKey(owner))
303303
304304
305305 func getOrderTotal (id) = getNumberByKey(getOrderTotalKey(id))
306306
307307
308308 func getOrderOwner (id) = getStringByKey(getOrderOwnerKey(id))
309309
310310
311311 func getOrderFilledTotal (id) = getNumberByKey(getOrderFilledTotalKey(id))
312312
313313
314314 func getRPDProfit (count) = getNumberByKey(getRPDProfitKey(count))
315315
316316
317317 func getOrderElementById (id) = (id + LISTSPLITSYMBOL)
318318
319319
320320 func addOrder (orderId) = (orderbook + getOrderElementById(orderId))
321321
322322
323323 func dropOrder (orderId) = {
324324 let parts = split(orderbook, getOrderElementById(orderId))
325325 (parts[0] + parts[1])
326326 }
327327
328328
329329 @Callable(i)
330330 func setCurrentPrice (newPrice) = {
331331 let account = toString(i.caller)
332332 let priceProvidingCount = (((isOracleProvideInt(oracleOne) + isOracleProvideInt(oracleTwo)) + isOracleProvideInt(oracleThree)) + 1)
333333 if (isBlocked)
334334 then throw("contract is blocked")
335335 else if (if (if ((account != oracleOne))
336336 then (account != oracleTwo)
337337 else false)
338338 then (account != oracleThree)
339339 else false)
340340 then throw("permission denied")
341341 else if (if ((blockExpireProviding >= height))
342342 then isOracleProvide(account)
343343 else false)
344344 then throw("price is already provided")
345345 else if (if ((height > blockExpireProviding))
346346 then isPricePending
347347 else false)
348348 then throw("use finilizeCurrentPrice")
349349 else WriteSet([DataEntry(getOracleProvidePriceKey(account), newPrice), DataEntry(BlockExpireProvidingKey, if ((height > blockExpireProviding))
350350 then (height + providingInterval)
351351 else blockExpireProviding), DataEntry(getOracleIsProvideKey(oracleOne), if ((height > blockExpireProviding))
352352 then false
353353 else isOracleProvide(oracleOne)), DataEntry(getOracleIsProvideKey(oracleTwo), if ((height > blockExpireProviding))
354354 then false
355355 else isOracleProvide(oracleTwo)), DataEntry(getOracleIsProvideKey(oracleThree), if ((height > blockExpireProviding))
356356 then false
357357 else isOracleProvide(oracleThree)), DataEntry(getOracleIsProvideKey(account), true), DataEntry(IsPricePendingKey, if (if ((blockExpireProviding >= height))
358358 then (priceProvidingCount >= 2)
359359 else false)
360360 then true
361361 else isPricePending)])
362362 }
363363
364364
365365
366366 @Callable(i)
367367 func finilizeCurrentPrice () = {
368368 let account = toString(i.caller)
369369 let priceProvidingCount = ((isOracleProvideInt(oracleOne) + isOracleProvideInt(oracleTwo)) + isOracleProvideInt(oracleThree))
370370 let newPrice = ((((getOracleProvidePrice(oracleOne) * isOracleProvideInt(oracleOne)) + (getOracleProvidePrice(oracleTwo) * isOracleProvideInt(oracleTwo))) + (getOracleProvidePrice(oracleThree) * isOracleProvideInt(oracleThree))) / priceProvidingCount)
371371 if (isBlocked)
372372 then throw("contract is blocked")
373373 else if (if (if ((account != oracleOne))
374374 then (account != oracleTwo)
375375 else false)
376376 then (account != oracleThree)
377377 else false)
378378 then throw("permission denied")
379379 else if (if (!(isPricePending))
380380 then true
381381 else (blockExpireProviding >= height))
382382 then throw("wait for the end of the price providing")
383383 else if ((2 > priceProvidingCount))
384384 then throw("2/3 oracles need to set a price")
385385 else if (if ((newPrice >= (price + ((price * percentPriceOffset) / 100))))
386386 then true
387387 else ((price - ((price * percentPriceOffset) / 100)) >= newPrice))
388388 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getBlackSwarmPriceKey(height), newPrice)])
389389 else WriteSet([DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(IsPricePendingKey, false)])
390390 }
391391
392392
393393
394394 @Callable(i)
395395 func adminUnlock (newPrice) = {
396396 let account = toString(i.caller)
397397 let adminOneVote = if ((account != adminOne))
398398 then getAdminVoteInt(adminOne)
399399 else 0
400400 let adminTwoVote = if ((account != adminTwo))
401401 then getAdminVoteInt(adminTwo)
402402 else 0
403403 let adminThreeVote = if ((account != adminThree))
404404 then getAdminVoteInt(adminThree)
405405 else 0
406406 let adminOnePrice = if (((getAdminVotePrice(adminOne) * adminOneVote) == newPrice))
407407 then 1
408408 else 0
409409 let adminTwoPrice = if (((getAdminVotePrice(adminTwo) * adminTwoVote) == newPrice))
410410 then 1
411411 else 0
412412 let adminThreePrice = if (((getAdminVotePrice(adminThree) * adminThreeVote) == newPrice))
413413 then 1
414414 else 0
415415 if (!(isBlocked))
416416 then throw("Contract is not blocked")
417417 else if (if (((((adminOnePrice + adminTwoPrice) + adminThreePrice) + 1) >= 2))
418418 then (blockExpireVote >= height)
419419 else false)
420420 then WriteSet([DataEntry(IsBlockedKey, false), DataEntry(PriceKey, newPrice), DataEntry(getPriceHistoryKey(height), newPrice), DataEntry(getAdminVoteKey(adminOne), false), DataEntry(getAdminVoteKey(adminTwo), false), DataEntry(getAdminVoteKey(adminThree), false), DataEntry(BlockExpireVoteKey, 0), DataEntry(BlockExpireProvidingKey, 0), DataEntry(IsPricePendingKey, false)])
421421 else WriteSet([DataEntry(getAdminVotePriceKey(account), newPrice), DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
422422 then (height + voteInterval)
423423 else blockExpireVote), DataEntry(getAdminVoteKey(adminOne), if ((height > blockExpireVote))
424424 then false
425425 else (adminOneVote == 1)), DataEntry(getAdminVoteKey(adminTwo), if ((height > blockExpireVote))
426426 then false
427427 else (adminTwoVote == 1)), DataEntry(getAdminVoteKey(adminThree), if ((height > blockExpireVote))
428428 then false
429429 else (adminThreeVote == 1)), DataEntry(getAdminVoteKey(account), true)])
430430 }
431431
432432
433433
434434 @Callable(i)
435435 func adminLock () = {
436436 let account = toString(i.caller)
437437 let adminOneVote = if ((account != adminOne))
438438 then getAdminVoteInt(adminOne)
439439 else 1
440440 let adminTwoVote = if ((account != adminTwo))
441441 then getAdminVoteInt(adminTwo)
442442 else 1
443443 let adminThreeVote = if ((account != adminThree))
444444 then getAdminVoteInt(adminThree)
445445 else 1
446446 if (isBlocked)
447447 then throw("Contract is blocked")
448448 else if ((((adminOneVote + adminTwoVote) + adminThreeVote) >= 2))
449449 then WriteSet([DataEntry(IsBlockedKey, true), DataEntry(getAdminVoteKey(adminOne), false), DataEntry(getAdminVoteKey(adminTwo), false), DataEntry(getAdminVoteKey(adminThree), false), DataEntry(BlockExpireVoteKey, 0)])
450450 else WriteSet([DataEntry(BlockExpireVoteKey, if ((height > blockExpireVote))
451451 then (height + voteInterval)
452452 else blockExpireVote), DataEntry(getAdminVoteKey(adminOne), if ((height > blockExpireVote))
453453 then false
454454 else (adminOneVote == 1)), DataEntry(getAdminVoteKey(adminTwo), if ((height > blockExpireVote))
455455 then false
456456 else (adminTwoVote == 1)), DataEntry(getAdminVoteKey(adminThree), if ((height > blockExpireVote))
457457 then false
458458 else (adminThreeVote == 1))])
459459 }
460460
461461
462462
463463 @Callable(i)
464464 func swapWavesToNeutrino () = {
465465 let pmt = extract(i.payment)
466466 if ((minWavesSwapAmount > pmt.amount))
467467 then throw("amount less min")
468468 else if (isDefined(pmt.assetId))
469469 then throw("can use waves only")
470470 else if (isBlocked)
471471 then throw("contract is blocked")
472472 else {
473473 let amount = convertWavesToNeutrino(pmt.amount)
474474 TransferSet([ScriptTransfer(i.caller, amount, neutrinoAssetId)])
475475 }
476476 }
477477
478478
479479
480480 @Callable(i)
481481 func swapNeutrinoToWaves () = {
482482 let pmt = extract(i.payment)
483483 if ((minNeutrinoSwapAmount > pmt.amount))
484484 then throw("amount less min")
485485 else if (isBlocked)
486486 then throw("contract is blocked")
487487 else if ((pmt.assetId != neutrinoAssetId))
488488 then throw("can use neutrino only")
489489 else {
490490 let account = toBase58String(i.caller.bytes)
491491 let amount = convertNeutrinoToWaves(pmt.amount)
492492 WriteSet([DataEntry(getWavesBalanceKey(account), (getWavesBalance(account) + amount)), DataEntry(getBalanceUnlockBlockKey(account), (height + balanceLockInterval))])
493493 }
494494 }
495495
496496
497497
498498 @Callable(i)
499499 func withdraw (account) = if ((getUnlockBalanceBlock(account) > height))
500500 then throw("wait a couple of blocks for withdraw")
501501 else ScriptResult(WriteSet([DataEntry(getWavesBalanceKey(account), 0), DataEntry(getNeutrinoBalanceKey(account), 0)]), TransferSet([ScriptTransfer(addressFromStringValue(account), getNeutrinoBalance(account), neutrinoAssetId), ScriptTransfer(addressFromStringValue(account), getWavesBalance(account), unit)]))
502502
503503
504504
505505 @Callable(i)
506506 func generateBond () = {
507507 let deficit = (neutrinoSupply - convertWavesToNeutrino(reserve))
508508 let balanceAuction = assetBalance(addressFromStringValue(auctionContract), bondAssetId)
509509 let amount = (convertNeutrinoToBond(deficit) - balanceAuction)
510510 if (isBlocked)
511511 then throw("contract is blocked")
512512 else if ((amount > 0))
513513 then TransferSet([ScriptTransfer(addressFromStringValue(auctionContract), amount, bondAssetId)])
514514 else throw("bond were generated or do not need it")
515515 }
516516
517517
518518
519519 @Callable(i)
520520 func setOrder () = {
521521 let pmt = extract(i.payment)
522522 let newOrderId = toBase58String(keccak256(((toBytes(pmt.amount) + i.caller.bytes) + toBytes(height))))
523523 if ((pmt.assetId != bondAssetId))
524524 then throw("can use bond only")
525525 else if ((getOrderOwner(newOrderId) != ""))
526526 then throw("order exists")
527527 else WriteSet([DataEntry(OrderbookKey, addOrder(newOrderId)), DataEntry(getOrderTotalKey(newOrderId), pmt.amount), DataEntry(getOrderOwnerKey(newOrderId), toString(i.caller)), DataEntry(getOrderHeightKey(newOrderId), height), DataEntry(getOrderStatusKey(newOrderId), NEW)])
528528 }
529529
530530
531531
532532 @Callable(i)
533533 func cancelOrder (orderId) = {
534534 let owner = getOrderOwner(orderId)
535535 let amount = (getOrderTotal(orderId) - getOrderFilledTotal(orderId))
536536 if ((owner != toString(i.caller)))
537537 then throw("permission denied")
538538 else ScriptResult(WriteSet([DataEntry(OrderbookKey, dropOrder(orderId)), DataEntry(getOrderStatusKey(orderId), CANCELED)]), TransferSet([ScriptTransfer(i.caller, amount, bondAssetId)]))
539539 }
540540
541541
542542
543543 @Callable(i)
544544 func addLeasingCheck (id) = {
545545 let tx = value(transferTransactionById(fromBase58String(id)))
546546 if (if ((tx.recipient != addressFromStringValue(rpdContract)))
547547 then true
548548 else isLeasingProfitTxExist(id))
549549 then throw("invalid transaction id")
550550 else {
551551 let amount = convertWavesToNeutrino(tx.amount)
552552 let newRpdSyncIndex = (rpdSyncIndex + 1)
553553 ScriptResult(WriteSet([DataEntry(RPDSyncIndexKey, newRpdSyncIndex), DataEntry(getRPDProfitKey(rpdSyncIndex), amount), DataEntry(getRPDSnapshotContractBalanceKey(rpdSyncIndex, neutrinoAssetId), getRPDContractBalance(neutrinoAssetId)), DataEntry(getRPDSnapshotContractBalanceKey(rpdSyncIndex, bondAssetId), getRPDContractBalance(bondAssetId)), DataEntry(getIsLeasingProfitTxExistKey(id), true)]), TransferSet([ScriptTransfer(addressFromStringValue(rpdContract), amount, neutrinoAssetId)]))
554554 }
555555 }
556556
557557
558558
559559 @Callable(i)
560560 func executeOrder () = {
561561 let orderId = split(orderbook, LISTSPLITSYMBOL)[0]
562562 let orderTotal = getOrderTotal(orderId)
563563 let orderOwner = getOrderOwner(orderId)
564564 let filledTotal = getOrderFilledTotal(orderId)
565565 if (isBlocked)
566566 then throw("contract is blocked")
567567 else if ((0 >= surplus))
568568 then throw("surplus is less than zero")
569569 else if ((orderOwner == ""))
570570 then {
571571 let newRpdSyncIndex = (rpdSyncIndex + 1)
572572 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)]))
573573 }
574574 else {
575575 let amount = (orderTotal - filledTotal)
576576 let surplusBond = convertNeutrinoToBond(surplus)
577577 let status = if ((surplusBond >= amount))
578578 then FILLED
579579 else NEW
580580 let newFilledTotal = if ((surplusBond >= amount))
581581 then orderTotal
582582 else surplusBond
583583 ScriptResult(WriteSet([DataEntry(OrderbookKey, dropOrder(orderId)), DataEntry(getOrderFilledTotalKey(orderId), (filledTotal + newFilledTotal)), DataEntry(getOrderStatusKey(orderId), status)]), TransferSet([ScriptTransfer(addressFromStringValue(orderOwner), convertBondToNeutrino(newFilledTotal), neutrinoAssetId)]))
584584 }
585585 }
586586
587587
588588
589589 @Callable(i)
590590 func transfer (account) = {
591591 let pmt = extract(i.payment)
592592 if (isDefined(pmt.assetId))
593593 then throw("can use waves only at the moment")
594594 else TransferSet([ScriptTransfer(addressFromStringValue(account), pmt.amount, unit)])
595595 }
596596
597597
598598 @Verifier(tx)
599599 func verify () = match tx {
600600 case leaseTx: LeaseTransaction =>
601601 sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(getOwnerPubKeyByLeaseTxId(toBase58String(leaseTx.id))))
602602 case unleaseTx: LeaseCancelTransaction =>
603603 sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(getOwnerPubKeyByLeaseTxId(toBase58String(unleaseTx.leaseId))))
604604 case _ =>
605605 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
606606 }
607607

github/deemru/w8io/169f3d6 
52.55 ms