tx · BcFoFeqAmKBqkoBQngZ9F3JcfU6att3KfbCX9zRTv3CH

3NCR8hU9D6y5fsC2A9JcgB6YMUov1ZirAv5:  -0.01000000 Waves

2020.09.11 14:30 [1172597] smart account 3NCR8hU9D6y5fsC2A9JcgB6YMUov1ZirAv5 > SELF 0.00000000 Waves

{ "type": 13, "id": "BcFoFeqAmKBqkoBQngZ9F3JcfU6att3KfbCX9zRTv3CH", "fee": 1000000, "feeAssetId": null, "timestamp": 1599823848171, "version": 1, "sender": "3NCR8hU9D6y5fsC2A9JcgB6YMUov1ZirAv5", "senderPublicKey": "BQoXUYVAQCLLRVRJKqzfgcodTF25sprvVdcS5EuoVhfF", "proofs": [ "2mGD1WMo6KY2mLhswaFdTM2UHHDyqZvjosyLba4tAkQwSA9SW1wzXRqU4GMv31ZfyzNmZxiNgNAyZhN67ve1vtHQ" ], "script": "base64:AAIEAAAAAAAAABIIAhIAEgASAwoBCBIFCgMIAQEAAABFAQAAAA5rZXlVY29sbGF0ZXJhbAAAAAACAAAADCR1Y29sbGF0ZXJhbAEAAAAbZ2VuZXJhdGVLZXlBc3NldExvY2tlZFRvdGFsAAAAAQAAAAdhc3NldElkCQABLAAAAAICAAAAFiRhc3NldF9sb2NrZWRfdG90YWxfXyQFAAAAB2Fzc2V0SWQBAAAAE2tleUFjY291bnRPcGVyYXRpb24AAAADAAAADHVubG9ja0hlaWdodAAAAAdhZGRyZXNzAAAABnN0YXR1cwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAFyRkZWZvQXNzZXRfb3BlcmF0aW9uX18kBQAAAAdhZGRyZXNzAgAAAANfXyMJAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAAANfXyQFAAAABnN0YXR1cwAAAAAUSWR4T3BlcmF0aW9uQW1vdW50SW4AAAAAAAAAAAAAAAAAE0lkeE9wZXJhdGlvbkFzc2V0SW4AAAAAAAAAAAEAAAAAEUlkeE9wZXJhdGlvblByaWNlAAAAAAAAAAACAAAAABVJZHhPcGVyYXRpb25BbW91bnRPdXQAAAAAAAAAAAMAAAAAFElkeE9wZXJhdGlvbkFzc2V0T3V0AAAAAAAAAAAEAQAAABRkYXRhQWNjb3VudE9wZXJhdGlvbgAAAAcAAAAIYW1vdW50SW4AAAAHYXNzZXRJbgAAAAVwcmljZQAAAAlhbW91bnRPdXQAAAAIYXNzZXRPdXQAAAAMYnJ1dHRvQW1vdW50AAAACWZlZUFtb3VudAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAhhbW91bnRJbgIAAAACX18FAAAAB2Fzc2V0SW4CAAAAAl9fCQABpAAAAAEFAAAACWFtb3VudE91dAIAAAACX18FAAAACGFzc2V0T3V0AgAAAAJfXwkAAaQAAAABBQAAAAVwcmljZQIAAAACX18JAAGkAAAAAQUAAAAMYnJ1dHRvQW1vdW50AgAAAAJfXwkAAaQAAAABBQAAAAlmZWVBbW91bnQBAAAAI3JlYWRBY2NvdW50T3BlcmF0aW9uRGF0YUFycmF5T3JGYWlsAAAAAQAAAA9hY2NPcGVyYXRpb25LZXkEAAAAE2FjY09wZXJhdGlvbkRhdGFTdHIJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAA9hY2NPcGVyYXRpb25LZXkJAAEsAAAAAgIAAAAqVGhlcmUgaXMgbm8gcmVxdWVzdCBmb3IgcGFzc2VkIGFyZ3VtZW50czogBQAAAA9hY2NPcGVyYXRpb25LZXkJAAS1AAAAAgUAAAATYWNjT3BlcmF0aW9uRGF0YVN0cgIAAAACX18AAAAAB251bGxJbnQA//////////8AAAAAB251bGxTdHICAAAABE5VTEwAAAAACmZhY3RvcnlBY2MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMCAAAAB2ZhY3RvcnkBAAAAGmdldEFzc2V0QWRkcmVzc0J5U3ltYm9sS2V5AAAAAQAAAAthc3NldFN5bWJvbAkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAALYXNzZXRTeW1ib2wCAAAACF9hZGRyZXNzAQAAABFnZXRBc3NldFN5bWJvbEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAAB19zeW1ib2wBAAAAD2dldEFzc2V0TWV0YUtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAABV9tZXRhAQAAABFnZXRBc3NldFN0YXR1c0tleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAAB19zdGF0dXMBAAAAFWdldEFzc2V0SW5pdEhlaWdodEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAADF9pbml0X2hlaWdodAEAAAAZZ2V0QXNzZXRBY3RpdmF0ZUhlaWdodEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAAEF9hY3RpdmF0ZV9oZWlnaHQBAAAAEmdldEFzc2V0QWRkcmVzc0tleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAACF9hZGRyZXNzAQAAACBnZXRBc3NldE1pblJlcXVpcmVkUG9vbEFtb3VudEtleQAAAAEAAAAMYXNzZXRBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAGYXNzZXRfBQAAAAxhc3NldEFkZHJlc3MCAAAACV9taW5fcG9vbAEAAAAdZ2V0QXNzZXRDdXJycmVudFBvb2xBbW91bnRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAAMYXNzZXRBZGRyZXNzAgAAAA1fY3VycmVudF9wb29sAQAAABhnZXRBc3NldE1heFBvb2xBbW91bnRLZXkAAAABAAAADGFzc2V0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAABmFzc2V0XwUAAAAMYXNzZXRBZGRyZXNzAgAAAAlfbWF4X3Bvb2wBAAAAImdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25BbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABXBvb2xfBQAAAAxhc3NldEFkZHJlc3MCAAAAAV8FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAAB19hbW91bnQBAAAAJWdldFBvb2xNYWtlclBhcnRpY2lwYXRpb25NYXhBbW91bnRLZXkAAAACAAAADGFzc2V0QWRkcmVzcwAAABBwb29sTWFrZXJBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABXBvb2xfBQAAAAxhc3NldEFkZHJlc3MCAAAAAV8FAAAAEHBvb2xNYWtlckFkZHJlc3MCAAAACm1heF9hbW91bnQAAAAAEElkeERlZm9Bc3NldENvZGUAAAAAAAAAAAAAAAAADklkeERlZm9Bc3NldElkAAAAAAAAAAABAAAAABJJZHhEZWZvQXNzZXRTdGF0dXMAAAAAAAAAAAIAAAAAEElkeFByaWNlRGVjaW1hbHMAAAAAAAAAAAMAAAAADklkeEJhc2VBc3NldElkAAAAAAAAAAAEAAAAABhJZHhPdmVyQ29sbGF0ZXJhbFBlcmNlbnQAAAAAAAAAAAUAAAAADklkeE1pbkluaXRQb29sAAAAAAAAAAAGAAAAABVJZHhQcmljZU9yYWNsZUFkZHJlc3MAAAAAAAAAAAcAAAAAEElkeE1pbkJ1eVBheW1lbnQAAAAAAAAAAAgAAAAAEUlkeE1pblNlbGxQYXltZW50AAAAAAAAAAAJAAAAABJJZHhCdXlMb2NrSW50ZXJ2YWwAAAAAAAAAAAoAAAAAE0lkeFNlbGxMb2NrSW50ZXJ2YWwAAAAAAAAAAAsAAAAAEElkeEJ1eUZlZVBlcmNlbnQAAAAAAAAAAAwAAAAAEUlkeFNlbGxGZWVQZXJjZW50AAAAAAAAAAANAAAAABFzdGFraW5nQWRkcmVzc1N0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAKZmFjdG9yeUFjYwIAAAAQbmV1dHJpbm9fc3Rha2luZwAAAAAOc3Rha2luZ0FkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAEXN0YWtpbmdBZGRyZXNzU3RyAAAAAANjZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAACmZhY3RvcnlBY2MJAAEsAAAAAgIAAAALJGRlZm9Bc3NldF8JAAQlAAAAAQUAAAAEdGhpcwAAAAAIY2ZnQXJyYXkJAAS1AAAAAgUAAAADY2ZnAgAAAAJfXwAAAAANZGVmb0Fzc2V0Q29kZQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAQSWR4RGVmb0Fzc2V0Q29kZQAAAAALZGVmb0Fzc2V0SWQJAAJZAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAOSWR4RGVmb0Fzc2V0SWQAAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAVSWR4UHJpY2VPcmFjbGVBZGRyZXNzAAAAABVvdmVyQ29sbGF0ZXJhbFBlcmNlbnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAYSWR4T3ZlckNvbGxhdGVyYWxQZXJjZW50AAAAAA5iYXNlQXNzZXRJZFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAOSWR4QmFzZUFzc2V0SWQAAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADmJhc2VBc3NldElkU3RyAAAAAA1wcmljZURlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeFByaWNlRGVjaW1hbHMAAAAAEW1pbkJhc2ljQnV5QW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeE1pbkJ1eVBheW1lbnQAAAAAEm1pblN5bnRoU2VsbEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABFJZHhNaW5TZWxsUGF5bWVudAAAAAAPYnV5TG9ja0ludGVydmFsCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEklkeEJ1eUxvY2tJbnRlcnZhbAAAAAAQc2VsbExvY2tJbnRlcnZhbAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABNJZHhTZWxsTG9ja0ludGVydmFsAAAAAA1idXlGZWVQZXJjZW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEElkeEJ1eUZlZVBlcmNlbnQBAAAAG2NvbnRyb2xBY2NSZWFkQ3VycklkeE9yRmFpbAAAAAAJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MCAAAAB2N1cnJJZHgJAAEsAAAAAgIAAAAZTm8gY3VycklkeCBhdCBjb250cm9sQWNjPQkABCUAAAABBQAAABJwcmljZU9yYWNsZUFkZHJlc3MBAAAAF2NvbnRyb2xBY2NSZWFkSWR4SGVpZ2h0AAAAAQAAAANpZHgEAAAADGlkeEhlaWdodEtleQkAASwAAAACAgAAAAppZHhIZWlnaHRfCQABpAAAAAEFAAAAA2lkeAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MFAAAADGlkeEhlaWdodEtleQAAAAAAAAAAAAEAAAAbY29udHJvbEFjY1JlYWRQcmljZUJ5SGVpZ2h0AAAAAQAAAAtwcmljZUhlaWdodAQAAAAQcHJpY2VCeUhlaWdodEtleQkAASwAAAACAgAAAAZwcmljZV8JAAGkAAAAAQUAAAALcHJpY2VIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAABJwcmljZU9yYWNsZUFkZHJlc3MFAAAAEHByaWNlQnlIZWlnaHRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAA05vIAUAAAAQcHJpY2VCeUhlaWdodEtleQIAAAAPIGF0IGNvbnRyb2xBY2M9CQAEJQAAAAEFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwEAAAARZ2V0U3Rha2luZ0JhbGFuY2UAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADHJwZF9iYWxhbmNlXwUAAAAOYmFzZUFzc2V0SWRTdHICAAAAAV8JAAQlAAAAAQUAAAAEdGhpcwAAAAAAAAAAAAAAAAALdWNvbGxhdGVyYWwJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwkBAAAADmtleVVjb2xsYXRlcmFsAAAAAAAAAAAAAAAAAAAAAAAOY3VyclBvb2xBbW91bnQJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAACmZhY3RvcnlBY2MJAAEsAAAAAgkAASwAAAACAgAAAAskZGVmb0Fzc2V0XwkABCUAAAABBQAAAAR0aGlzAgAAAAxfY3VycmVudFBvb2wAAAAAF2RvdWJsZUNoZWNrQmFzaWNCYWxhbmNlCQAAZAAAAAIJAAPwAAAAAgUAAAAEdGhpcwUAAAALYmFzZUFzc2V0SWQJAQAAABFnZXRTdGFraW5nQmFsYW5jZQAAAAAAAAAAFmRvdWJsZUNoZWNrVWNvbGxhdGVyYWwDCQAAZgAAAAIAAAAAAAAAAAAFAAAAC3Vjb2xsYXRlcmFsAAAAAAAAAAAABQAAAAt1Y29sbGF0ZXJhbAAAAAAZZG91YmxlQ2hlY2tDdXJyUG9vbEFtb3VudAkAAGUAAAACBQAAABdkb3VibGVDaGVja0Jhc2ljQmFsYW5jZQUAAAAWZG91YmxlQ2hlY2tVY29sbGF0ZXJhbAAAAAAFcHJpY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAEnByaWNlT3JhY2xlQWRkcmVzcwkAASwAAAACAgAAAAckcHJpY2VfBQAAAA1kZWZvQXNzZXRDb2RlAAAAAAlvdmVyUHJpY2UJAABpAAAAAgkAAGgAAAACCQAAZAAAAAIFAAAADXByaWNlRGVjaW1hbHMFAAAAFW92ZXJDb2xsYXRlcmFsUGVyY2VudAUAAAAFcHJpY2UFAAAADXByaWNlRGVjaW1hbHMAAAAACGVtaXNzaW9uCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtkZWZvQXNzZXRJZAAAAAhxdWFudGl0eQAAAAATYmFzaWNBc3NldExvY2tlZEFtdAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAbZ2VuZXJhdGVLZXlBc3NldExvY2tlZFRvdGFsAAAAAQUAAAAOYmFzZUFzc2V0SWRTdHIAAAAAAAAAAAAAAAAAFGF2YWlsYWJsZVBvb2xCYWxhbmNlCQAAZQAAAAIFAAAADmN1cnJQb29sQW1vdW50BQAAABNiYXNpY0Fzc2V0TG9ja2VkQW10AAAABAAAAAFpAQAAAAhidXlBc3NldAAAAAADCQEAAAACIT0AAAACBQAAAA5jdXJyUG9vbEFtb3VudAUAAAAZZG91YmxlQ2hlY2tDdXJyUG9vbEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADRJbnZhbGlkIGN1cnJQb29sQW1vdW50IGNhbGN1bGF0aW9uczogY3VyclBvb2xBbW91bnQ9CQABpAAAAAEFAAAADmN1cnJQb29sQW1vdW50AgAAABsgZG91YmxlQ2hlY2tDdXJyUG9vbEFtb3VudD0JAAGkAAAAAQUAAAAZZG91YmxlQ2hlY2tDdXJyUG9vbEFtb3VudAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhwbXRBc3NldAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAABhhdmFpbGFibGVEZWZvQXNzZXRJblBvb2wJAABlAAAAAgkAAGsAAAADBQAAABRhdmFpbGFibGVQb29sQmFsYW5jZQUAAAANcHJpY2VEZWNpbWFscwUAAAAJb3ZlclByaWNlBQAAAAhlbWlzc2lvbgQAAAAZZnVsbERlZm9Bc3NldEFtb3VudEJydXR0bwkAAGsAAAADCAUAAAADcG10AAAABmFtb3VudAUAAAANcHJpY2VEZWNpbWFscwUAAAAFcHJpY2UEAAAAE2Z1bGxEZWZvQXNzZXRBbW91bnQJAABrAAAAAwkAAGUAAAACBQAAAA1wcmljZURlY2ltYWxzBQAAAA1idXlGZWVQZXJjZW50BQAAABlmdWxsRGVmb0Fzc2V0QW1vdW50QnJ1dHRvBQAAAA1wcmljZURlY2ltYWxzBAAAAAlmZWVBbW91bnQJAABlAAAAAgUAAAAZZnVsbERlZm9Bc3NldEFtb3VudEJydXR0bwUAAAATZnVsbERlZm9Bc3NldEFtb3VudAQAAAAPZGVmb0Fzc2V0QW1vdW50AwkAAGYAAAACBQAAABNmdWxsRGVmb0Fzc2V0QW1vdW50BQAAABhhdmFpbGFibGVEZWZvQXNzZXRJblBvb2wJAABlAAAAAgUAAAATZnVsbERlZm9Bc3NldEFtb3VudAUAAAAYYXZhaWxhYmxlRGVmb0Fzc2V0SW5Qb29sBQAAABNmdWxsRGVmb0Fzc2V0QW1vdW50BAAAABhyZXF1aXJlZEJhc2ljQXNzZXRBbW91bnQJAABrAAAAAwUAAAAZZnVsbERlZm9Bc3NldEFtb3VudEJydXR0bwUAAAAFcHJpY2UFAAAADXByaWNlRGVjaW1hbHMEAAAABmNoYW5nZQkAAGUAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAAYcmVxdWlyZWRCYXNpY0Fzc2V0QW1vdW50AwkAAGcAAAACAAAAAAAAAAAABQAAABhhdmFpbGFibGVEZWZvQXNzZXRJblBvb2wJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAGEltcG9zc2libGUgdG8gaXNzdWUgbmV3IAUAAAANZGVmb0Fzc2V0Q29kZQIAAAAXOiBub3QgZW5vdWdoIGNvbGxhdGVyYWwDCQEAAAACIT0AAAACBQAAAAhwbXRBc3NldAUAAAALYmFzZUFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA1UGF5bWVudCBhc3NldCBpZCBkb2Vzbid0IG1hdGNoIGJhc2ljIGFzc2V0OiBleHBlY3RlZD0JAAJYAAAAAQUAAAALYmFzZUFzc2V0SWQCAAAACCBhY3R1YWw9CQACWAAAAAEFAAAACHBtdEFzc2V0AwkAAGYAAAACBQAAABFtaW5CYXNpY0J1eUFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAGEltcG9zc2libGUgdG8gaXNzdWUgbmV3IAUAAAANZGVmb0Fzc2V0Q29kZQIAAAAKOiBwYXltZW50PQkAAaQAAAABCAUAAAADcG10AAAABmFtb3VudAIAAAAYaXMgbGVzcyB0aGVuIG1pbiBhbW91bnQ9CQABpAAAAAEFAAAAEW1pbkJhc2ljQnV5QW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5VWNvbGxhdGVyYWwAAAAACQAAZAAAAAIFAAAAC3Vjb2xsYXRlcmFsBQAAABhyZXF1aXJlZEJhc2ljQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleUFjY291bnRPcGVyYXRpb24AAAADBQAAAAZoZWlnaHQJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAgAAAAhGSU5JU0hFRAkBAAAAFGRhdGFBY2NvdW50T3BlcmF0aW9uAAAABwgFAAAAA3BtdAAAAAZhbW91bnQJAAJYAAAAAQUAAAAIcG10QXNzZXQFAAAABXByaWNlBQAAABNmdWxsRGVmb0Fzc2V0QW1vdW50CQACWAAAAAEFAAAAC2RlZm9Bc3NldElkBQAAABlmdWxsRGVmb0Fzc2V0QW1vdW50QnJ1dHRvBQAAAAlmZWVBbW91bnQJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAtkZWZvQXNzZXRJZAUAAAAPZGVmb0Fzc2V0QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAD2RlZm9Bc3NldEFtb3VudAUAAAALZGVmb0Fzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAZjaGFuZ2UFAAAAC2Jhc2VBc3NldElkBQAAAANuaWwAAAABaQEAAAAJc2VsbEFzc2V0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAhwbXRBc3NldAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAATa2V5QXNzZXRMb2NrZWRUb3RhbAkBAAAAG2dlbmVyYXRlS2V5QXNzZXRMb2NrZWRUb3RhbAAAAAEJAAJYAAAAAQUAAAAIcG10QXNzZXQEAAAAFGN1cnJBc3NldFRvdGFsTG9ja2VkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAE2tleUFzc2V0TG9ja2VkVG90YWwAAAAAAAAAAAAEAAAADHVubG9ja0hlaWdodAkAAGQAAAACBQAAAAZoZWlnaHQFAAAAEHNlbGxMb2NrSW50ZXJ2YWwEAAAADmtleUFjY291bnRMb2NrCQEAAAATa2V5QWNjb3VudE9wZXJhdGlvbgAAAAMFAAAADHVubG9ja0hlaWdodAUAAAANY2FsbGVyQWRkcmVzcwIAAAAHUEVORElORwMJAQAAAAIhPQAAAAIFAAAACHBtdEFzc2V0BQAAAAtkZWZvQXNzZXRJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACNJbnZhbGlkIHBheW1lbnQgYXNzZXQgaWQ6IGV4cGVjdGVkPQkAAlgAAAABBQAAAAtkZWZvQXNzZXRJZAIAAAAIIGFjdHVhbD0JAAJYAAAAAQUAAAAIcG10QXNzZXQDCQAAZgAAAAIFAAAAEm1pblN5bnRoU2VsbEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA6UGF5bWVudCBhbW91bnQgbGVzcyB0aGVuIG1pbmluaW1hbCBhbGxvd2VkOiBwYXltZW50QW1vdW50PQkAAaQAAAABCAUAAAADcG10AAAABmFtb3VudAIAAAALIG1pbkFtb3VudD0JAAGkAAAAAQUAAAASbWluU3ludGhTZWxsQW1vdW50AwkBAAAACWlzRGVmaW5lZAAAAAEJAAQaAAAAAgUAAAAEdGhpcwUAAAAOa2V5QWNjb3VudExvY2sJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACpTZWxsIHJlcXVlc3QgaGFzIGJlZW4gYWxyZWFkeSBkZWZpbmVkIGZvciAFAAAADWNhbGxlckFkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAAB4gcGFpcjogbmVlZCB0byB3YWl0IG5leHQgYmxvY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleUFzc2V0TG9ja2VkVG90YWwJAABkAAAAAgUAAAAUY3VyckFzc2V0VG90YWxMb2NrZWQIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADmtleUFjY291bnRMb2NrCQEAAAAUZGF0YUFjY291bnRPcGVyYXRpb24AAAAHCAUAAAADcG10AAAABmFtb3VudAkAAlgAAAABBQAAAAtkZWZvQXNzZXRJZAUAAAAHbnVsbEludAUAAAAHbnVsbEludAkAAlgAAAABBQAAAAtiYXNlQXNzZXRJZAUAAAAHbnVsbEludAUAAAAHbnVsbEludAUAAAADbmlsAAAAAWkBAAAADWNyb3NzRXhjaGFuZ2UAAAABAAAAC2RlZm9Bc3NldElkCQAAAgAAAAECAAAAGVRlbXBvcmFyeSBub3QgaW1wbGVtZW50ZWQAAAABaQEAAAAId2l0aGRyYXcAAAADAAAADmFjY291bnRBZGRyZXNzAAAADHVubG9ja0hlaWdodAAAAANpZHgEAAAAD2FjY09wZXJhdGlvbktleQkBAAAAE2tleUFjY291bnRPcGVyYXRpb24AAAADBQAAAAx1bmxvY2tIZWlnaHQFAAAADmFjY291bnRBZGRyZXNzAgAAAAdQRU5ESU5HBAAAABVhY2NPcGVyYXRpb25EYXRhQXJyYXkJAQAAACNyZWFkQWNjb3VudE9wZXJhdGlvbkRhdGFBcnJheU9yRmFpbAAAAAEFAAAAD2FjY09wZXJhdGlvbktleQQAAAAIYW1vdW50SW4JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABVhY2NPcGVyYXRpb25EYXRhQXJyYXkFAAAAFElkeE9wZXJhdGlvbkFtb3VudEluBAAAAAdhc3NldEluCQABkQAAAAIFAAAAFWFjY09wZXJhdGlvbkRhdGFBcnJheQUAAAATSWR4T3BlcmF0aW9uQXNzZXRJbgQAAAAIYXNzZXRPdXQJAAGRAAAAAgUAAAAVYWNjT3BlcmF0aW9uRGF0YUFycmF5BQAAABRJZHhPcGVyYXRpb25Bc3NldE91dAMJAABmAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAAZoZWlnaHQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAADFBsZWFzZSB3YWl0IAkAAaQAAAABBQAAAAx1bmxvY2tIZWlnaHQCAAAAFyB0byB3aXRoZHJhdyB5b3VyIGZ1bmRzBAAAABBhY2NvdW50TG9ja2VkQW10BQAAAAhhbW91bnRJbgMJAABnAAAAAgAAAAAAAAAAAAUAAAAQYWNjb3VudExvY2tlZEFtdAkAAAIAAAABAgAAABFMb2NrZWRBbW91bnQgPD0gMAQAAAATa2V5QXNzZXRMb2NrZWRUb3RhbAkBAAAAG2dlbmVyYXRlS2V5QXNzZXRMb2NrZWRUb3RhbAAAAAEJAAGRAAAAAgUAAAAVYWNjT3BlcmF0aW9uRGF0YUFycmF5BQAAABNJZHhPcGVyYXRpb25Bc3NldEluBAAAABRjdXJyQXNzZXRMb2NrZWRUb3RhbAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAE2tleUFzc2V0TG9ja2VkVG90YWwJAAEsAAAAAgkAASwAAAACAgAAACBTdGF0ZSBjb250YWlucyBzZWxsQXNzZXRSZXF1ZXN0PQUAAAAPYWNjT3BlcmF0aW9uS2V5AgAAABMgQlVUIG5vIHRvdGFsTG9ja2VkBAAAAAlpZHhIZWlnaHQJAQAAABdjb250cm9sQWNjUmVhZElkeEhlaWdodAAAAAEFAAAAA2lkeAQAAAANcHJldklkeEhlaWdodAkBAAAAF2NvbnRyb2xBY2NSZWFkSWR4SGVpZ2h0AAAAAQkAAGUAAAACBQAAAANpZHgAAAAAAAAAAAEEAAAAB2N1cnJJZHgJAQAAABtjb250cm9sQWNjUmVhZEN1cnJJZHhPckZhaWwAAAAAAwMDCQAAZgAAAAIFAAAAA2lkeAUAAAAHY3VycklkeAYJAABmAAAAAgUAAAAMdW5sb2NrSGVpZ2h0BQAAAAlpZHhIZWlnaHQGAwkBAAAAAiE9AAAAAgUAAAANcHJldklkeEhlaWdodAAAAAAAAAAAAAkAAGcAAAACBQAAAA1wcmV2SWR4SGVpZ2h0BQAAAAx1bmxvY2tIZWlnaHQHCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAF2ludmFsaWQgcHJpY2UgaWR4OiBpZHg9CQABpAAAAAEFAAAAA2lkeAIAAAAJIGN1cnJJZHg9CQABpAAAAAEFAAAAB2N1cnJJZHgCAAAACyBpZHhIZWlnaHQ9CQABpAAAAAEFAAAACWlkeEhlaWdodAIAAAAOIHVubG9ja0hlaWdodD0JAAGkAAAAAQUAAAAMdW5sb2NrSGVpZ2h0AgAAAA8gcHJldklkeEhlaWdodD0JAAGkAAAAAQUAAAANcHJldklkeEhlaWdodAQAAAAQc3ludGgyYmFzaWNQcmljZQkBAAAAG2NvbnRyb2xBY2NSZWFkUHJpY2VCeUhlaWdodAAAAAEFAAAACWlkeEhlaWdodAQAAAAMYXNzZXRJbkJ5dGVzCQACWQAAAAEFAAAAB2Fzc2V0SW4EAAAADSR0MDExNjEzMTI0ODMDCQAAAAAAAAIFAAAADGFzc2V0SW5CeXRlcwUAAAALYmFzZUFzc2V0SWQEAAAACHN5bnRoQW10CQAAawAAAAMFAAAACGFtb3VudEluBQAAAA1wcmljZURlY2ltYWxzBQAAABBzeW50aDJiYXNpY1ByaWNlCQAFFgAAAAQFAAAACHN5bnRoQW10CQEAAAAHUmVpc3N1ZQAAAAMFAAAAC2RlZm9Bc3NldElkBQAAAAhzeW50aEFtdAYJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADmFjY291bnRBZGRyZXNzBQAAAAhzeW50aEFtdAUAAAALZGVmb0Fzc2V0SWQJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5VWNvbGxhdGVyYWwAAAAACQAAZAAAAAIFAAAAC3Vjb2xsYXRlcmFsBQAAAAhhbW91bnRJbgMJAAAAAAAAAgUAAAAMYXNzZXRJbkJ5dGVzBQAAAAtkZWZvQXNzZXRJZAQAAAAIYmFzaWNBbXQJAABrAAAAAwUAAAAIYW1vdW50SW4FAAAAEHN5bnRoMmJhc2ljUHJpY2UFAAAADXByaWNlRGVjaW1hbHMEAAAADm5ld1Vjb2xsYXRlcmFsCQAAZQAAAAIFAAAAC3Vjb2xsYXRlcmFsBQAAAAhiYXNpY0FtdAkABRYAAAAEBQAAAAhiYXNpY0FtdAkBAAAABEJ1cm4AAAACBQAAAAtiYXNlQXNzZXRJZAUAAAAIYmFzaWNBbXQJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADmFjY291bnRBZGRyZXNzBQAAAAhiYXNpY0FtdAUAAAALYmFzZUFzc2V0SWQJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAOa2V5VWNvbGxhdGVyYWwAAAAACQAAZQAAAAIFAAAAC3Vjb2xsYXRlcmFsBQAAAAhiYXNpY0FtdAkAAAIAAAABCQABLAAAAAICAAAAFFVuc3VwcG9ydGVkIGFzc2V0SW49BQAAAAdhc3NldEluBAAAAAlhbW91bnRPdXQIBQAAAA0kdDAxMTYxMzEyNDgzAAAAAl8xBAAAAAtidXJuT3JJc3N1ZQgFAAAADSR0MDExNjEzMTI0ODMAAAACXzIEAAAAFHRyYW5zZmVyU3ludGhPckJhc2ljCAUAAAANJHQwMTE2MTMxMjQ4MwAAAAJfMwQAAAAQdWNvbGxhdGVyYWxFbnRyeQgFAAAADSR0MDExNjEzMTI0ODMAAAACXzQDCQAAZgAAAAIAAAAAAAAAAAAJAABlAAAAAgUAAAAUY3VyckFzc2V0TG9ja2VkVG90YWwFAAAAEGFjY291bnRMb2NrZWRBbXQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAFEludmFsaWQgZGF0YSBzdGF0ZTogBQAAABNrZXlBc3NldExvY2tlZFRvdGFsAgAAAAwgbGVzcyB0aGVuIDAJAARNAAAAAgkABE0AAAACCQAETQAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleUFzc2V0TG9ja2VkVG90YWwJAABlAAAAAgUAAAAUY3VyckFzc2V0TG9ja2VkVG90YWwFAAAAEGFjY291bnRMb2NrZWRBbXQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQUAAAAPYWNjT3BlcmF0aW9uS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlBY2NvdW50T3BlcmF0aW9uAAAAAwUAAAAMdW5sb2NrSGVpZ2h0BQAAAA5hY2NvdW50QWRkcmVzcwIAAAAIRklOSVNIRUQJAQAAABRkYXRhQWNjb3VudE9wZXJhdGlvbgAAAAcFAAAACGFtb3VudEluBQAAAAdhc3NldEluBQAAABBzeW50aDJiYXNpY1ByaWNlBQAAAAlhbW91bnRPdXQFAAAACGFzc2V0T3V0AAAAAAAAAAAAAAAAAAAAAAAABQAAAANuaWwFAAAAC2J1cm5Pcklzc3VlBQAAABR0cmFuc2ZlclN5bnRoT3JCYXNpYwUAAAAQdWNvbGxhdGVyYWxFbnRyeQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V51UvnYw==", "chainId": 84, "height": 1172597, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 4 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func keyUcollateral () = "$ucollateral"
5+
6+
7+func generateKeyAssetLockedTotal (assetId) = ("$asset_locked_total__$" + assetId)
8+
9+
10+func keyAccountOperation (unlockHeight,address,status) = ((((("$defoAsset_operation__$" + address) + "__#") + toString(unlockHeight)) + "__$") + status)
11+
12+
13+let IdxOperationAmountIn = 0
14+
15+let IdxOperationAssetIn = 1
16+
17+let IdxOperationPrice = 2
18+
19+let IdxOperationAmountOut = 3
20+
21+let IdxOperationAssetOut = 4
22+
23+func dataAccountOperation (amountIn,assetIn,price,amountOut,assetOut,bruttoAmount,feeAmount) = ((((((((((((toString(amountIn) + "__") + assetIn) + "__") + toString(amountOut)) + "__") + assetOut) + "__") + toString(price)) + "__") + toString(bruttoAmount)) + "__") + toString(feeAmount))
24+
25+
26+func readAccountOperationDataArrayOrFail (accOperationKey) = {
27+ let accOperationDataStr = valueOrErrorMessage(getString(this, accOperationKey), ("There is no request for passed arguments: " + accOperationKey))
28+ split(accOperationDataStr, "__")
29+ }
30+
31+
32+let nullInt = -1
33+
34+let nullStr = "NULL"
35+
36+let factoryAcc = addressFromStringValue(getStringValue(this, "factory"))
37+
38+func getAssetAddressBySymbolKey (assetSymbol) = (("asset_" + assetSymbol) + "_address")
39+
40+
41+func getAssetSymbolKey (assetAddress) = (("asset_" + assetAddress) + "_symbol")
42+
43+
44+func getAssetMetaKey (assetAddress) = (("asset_" + assetAddress) + "_meta")
45+
46+
47+func getAssetStatusKey (assetAddress) = (("asset_" + assetAddress) + "_status")
48+
49+
50+func getAssetInitHeightKey (assetAddress) = (("asset_" + assetAddress) + "_init_height")
51+
52+
53+func getAssetActivateHeightKey (assetAddress) = (("asset_" + assetAddress) + "_activate_height")
54+
55+
56+func getAssetAddressKey (assetAddress) = (("asset_" + assetAddress) + "_address")
57+
58+
59+func getAssetMinRequiredPoolAmountKey (assetAddress) = (("asset_" + assetAddress) + "_min_pool")
60+
61+
62+func getAssetCurrrentPoolAmountKey (assetAddress) = (("asset_" + assetAddress) + "_current_pool")
63+
64+
65+func getAssetMaxPoolAmountKey (assetAddress) = (("asset_" + assetAddress) + "_max_pool")
66+
67+
68+func getPoolMakerParticipationAmountKey (assetAddress,poolMakerAddress) = (((("pool_" + assetAddress) + "_") + poolMakerAddress) + "_amount")
69+
70+
71+func getPoolMakerParticipationMaxAmountKey (assetAddress,poolMakerAddress) = (((("pool_" + assetAddress) + "_") + poolMakerAddress) + "max_amount")
72+
73+
74+let IdxDefoAssetCode = 0
75+
76+let IdxDefoAssetId = 1
77+
78+let IdxDefoAssetStatus = 2
79+
80+let IdxPriceDecimals = 3
81+
82+let IdxBaseAssetId = 4
83+
84+let IdxOverCollateralPercent = 5
85+
86+let IdxMinInitPool = 6
87+
88+let IdxPriceOracleAddress = 7
89+
90+let IdxMinBuyPayment = 8
91+
92+let IdxMinSellPayment = 9
93+
94+let IdxBuyLockInterval = 10
95+
96+let IdxSellLockInterval = 11
97+
98+let IdxBuyFeePercent = 12
99+
100+let IdxSellFeePercent = 13
101+
102+let stakingAddressStr = getStringValue(factoryAcc, "neutrino_staking")
103+
104+let stakingAddress = addressFromStringValue(stakingAddressStr)
105+
106+let cfg = getStringValue(factoryAcc, ("$defoAsset_" + toString(this)))
107+
108+let cfgArray = split(cfg, "__")
109+
110+let defoAssetCode = cfgArray[IdxDefoAssetCode]
111+
112+let defoAssetId = fromBase58String(cfgArray[IdxDefoAssetId])
113+
114+let priceOracleAddress = addressFromStringValue(cfgArray[IdxPriceOracleAddress])
115+
116+let overCollateralPercent = parseIntValue(cfgArray[IdxOverCollateralPercent])
117+
118+let baseAssetIdStr = cfgArray[IdxBaseAssetId]
119+
120+let baseAssetId = fromBase58String(baseAssetIdStr)
121+
122+let priceDecimals = parseIntValue(cfgArray[IdxPriceDecimals])
123+
124+let minBasicBuyAmount = parseIntValue(cfgArray[IdxMinBuyPayment])
125+
126+let minSynthSellAmount = parseIntValue(cfgArray[IdxMinSellPayment])
127+
128+let buyLockInterval = parseIntValue(cfgArray[IdxBuyLockInterval])
129+
130+let sellLockInterval = parseIntValue(cfgArray[IdxSellLockInterval])
131+
132+let buyFeePercent = parseIntValue(cfgArray[IdxBuyFeePercent])
133+
134+func controlAccReadCurrIdxOrFail () = valueOrErrorMessage(getInteger(priceOracleAddress, "currIdx"), ("No currIdx at controlAcc=" + toString(priceOracleAddress)))
135+
136+
137+func controlAccReadIdxHeight (idx) = {
138+ let idxHeightKey = ("idxHeight_" + toString(idx))
139+ valueOrElse(getInteger(priceOracleAddress, idxHeightKey), 0)
140+ }
141+
142+
143+func controlAccReadPriceByHeight (priceHeight) = {
144+ let priceByHeightKey = ("price_" + toString(priceHeight))
145+ valueOrErrorMessage(getInteger(priceOracleAddress, priceByHeightKey), ((("No " + priceByHeightKey) + " at controlAcc=") + toString(priceOracleAddress)))
146+ }
147+
148+
149+func getStakingBalance () = valueOrElse(getInteger(this, ((("rpd_balance_" + baseAssetIdStr) + "_") + toString(this))), 0)
150+
151+
152+let ucollateral = valueOrElse(getInteger(this, keyUcollateral()), 0)
153+
154+let currPoolAmount = getIntegerValue(factoryAcc, (("$defoAsset_" + toString(this)) + "_currentPool"))
155+
156+let doubleCheckBasicBalance = (assetBalance(this, baseAssetId) + getStakingBalance())
157+
158+let doubleCheckUcollateral = if ((0 > ucollateral))
159+ then 0
160+ else ucollateral
161+
162+let doubleCheckCurrPoolAmount = (doubleCheckBasicBalance - doubleCheckUcollateral)
163+
164+let price = getIntegerValue(priceOracleAddress, ("$price_" + defoAssetCode))
165+
166+let overPrice = (((priceDecimals + overCollateralPercent) * price) / priceDecimals)
167+
168+let emission = value(assetInfo(defoAssetId)).quantity
169+
170+let basicAssetLockedAmt = valueOrElse(getInteger(this, generateKeyAssetLockedTotal(baseAssetIdStr)), 0)
171+
172+let availablePoolBalance = (currPoolAmount - basicAssetLockedAmt)
173+
174+@Callable(i)
175+func buyAsset () = if ((currPoolAmount != doubleCheckCurrPoolAmount))
176+ then throw(((("Invalid currPoolAmount calculations: currPoolAmount=" + toString(currPoolAmount)) + " doubleCheckCurrPoolAmount=") + toString(doubleCheckCurrPoolAmount)))
177+ else {
178+ let pmt = value(i.payments[0])
179+ let pmtAsset = value(pmt.assetId)
180+ let availableDefoAssetInPool = (fraction(availablePoolBalance, priceDecimals, overPrice) - emission)
181+ let fullDefoAssetAmountBrutto = fraction(pmt.amount, priceDecimals, price)
182+ let fullDefoAssetAmount = fraction((priceDecimals - buyFeePercent), fullDefoAssetAmountBrutto, priceDecimals)
183+ let feeAmount = (fullDefoAssetAmountBrutto - fullDefoAssetAmount)
184+ let defoAssetAmount = if ((fullDefoAssetAmount > availableDefoAssetInPool))
185+ then (fullDefoAssetAmount - availableDefoAssetInPool)
186+ else fullDefoAssetAmount
187+ let requiredBasicAssetAmount = fraction(fullDefoAssetAmountBrutto, price, priceDecimals)
188+ let change = (pmt.amount - requiredBasicAssetAmount)
189+ if ((0 >= availableDefoAssetInPool))
190+ then throw((("Impossible to issue new " + defoAssetCode) + ": not enough collateral"))
191+ else if ((pmtAsset != baseAssetId))
192+ then throw(((("Payment asset id doesn't match basic asset: expected=" + toBase58String(baseAssetId)) + " actual=") + toBase58String(pmtAsset)))
193+ else if ((minBasicBuyAmount > pmt.amount))
194+ then throw(((((("Impossible to issue new " + defoAssetCode) + ": payment=") + toString(pmt.amount)) + "is less then min amount=") + toString(minBasicBuyAmount)))
195+ else [IntegerEntry(keyUcollateral(), (ucollateral + requiredBasicAssetAmount)), StringEntry(keyAccountOperation(height, toString(i.caller), "FINISHED"), dataAccountOperation(pmt.amount, toBase58String(pmtAsset), price, fullDefoAssetAmount, toBase58String(defoAssetId), fullDefoAssetAmountBrutto, feeAmount)), Reissue(defoAssetId, defoAssetAmount, true), ScriptTransfer(i.caller, defoAssetAmount, defoAssetId), ScriptTransfer(i.caller, change, baseAssetId)]
196+ }
197+
198+
199+
200+@Callable(i)
201+func sellAsset () = {
202+ let pmt = value(i.payments[0])
203+ let pmtAsset = value(pmt.assetId)
204+ let callerAddress = toString(i.caller)
205+ let keyAssetLockedTotal = generateKeyAssetLockedTotal(toBase58String(pmtAsset))
206+ let currAssetTotalLocked = valueOrElse(getInteger(this, keyAssetLockedTotal), 0)
207+ let unlockHeight = (height + sellLockInterval)
208+ let keyAccountLock = keyAccountOperation(unlockHeight, callerAddress, "PENDING")
209+ if ((pmtAsset != defoAssetId))
210+ then throw(((("Invalid payment asset id: expected=" + toBase58String(defoAssetId)) + " actual=") + toBase58String(pmtAsset)))
211+ else if ((minSynthSellAmount > pmt.amount))
212+ then throw(((("Payment amount less then mininimal allowed: paymentAmount=" + toString(pmt.amount)) + " minAmount=") + toString(minSynthSellAmount)))
213+ else if (isDefined(getInteger(this, keyAccountLock)))
214+ then throw((((("Sell request has been already defined for " + callerAddress) + "_") + toString(unlockHeight)) + " pair: need to wait next block"))
215+ else [IntegerEntry(keyAssetLockedTotal, (currAssetTotalLocked + pmt.amount)), StringEntry(keyAccountLock, dataAccountOperation(pmt.amount, toBase58String(defoAssetId), nullInt, nullInt, toBase58String(baseAssetId), nullInt, nullInt))]
216+ }
217+
218+
219+
220+@Callable(i)
221+func crossExchange (defoAssetId) = throw("Temporary not implemented")
222+
223+
224+
225+@Callable(i)
226+func withdraw (accountAddress,unlockHeight,idx) = {
227+ let accOperationKey = keyAccountOperation(unlockHeight, accountAddress, "PENDING")
228+ let accOperationDataArray = readAccountOperationDataArrayOrFail(accOperationKey)
229+ let amountIn = parseIntValue(accOperationDataArray[IdxOperationAmountIn])
230+ let assetIn = accOperationDataArray[IdxOperationAssetIn]
231+ let assetOut = accOperationDataArray[IdxOperationAssetOut]
232+ if ((unlockHeight > height))
233+ then throw((("Please wait " + toString(unlockHeight)) + " to withdraw your funds"))
234+ else {
235+ let accountLockedAmt = amountIn
236+ if ((0 >= accountLockedAmt))
237+ then throw("LockedAmount <= 0")
238+ else {
239+ let keyAssetLockedTotal = generateKeyAssetLockedTotal(accOperationDataArray[IdxOperationAssetIn])
240+ let currAssetLockedTotal = valueOrErrorMessage(getInteger(this, keyAssetLockedTotal), (("State contains sellAssetRequest=" + accOperationKey) + " BUT no totalLocked"))
241+ let idxHeight = controlAccReadIdxHeight(idx)
242+ let prevIdxHeight = controlAccReadIdxHeight((idx - 1))
243+ let currIdx = controlAccReadCurrIdxOrFail()
244+ if (if (if ((idx > currIdx))
245+ then true
246+ else (unlockHeight > idxHeight))
247+ then true
248+ else if ((prevIdxHeight != 0))
249+ then (prevIdxHeight >= unlockHeight)
250+ else false)
251+ then throw(((((((((("invalid price idx: idx=" + toString(idx)) + " currIdx=") + toString(currIdx)) + " idxHeight=") + toString(idxHeight)) + " unlockHeight=") + toString(unlockHeight)) + " prevIdxHeight=") + toString(prevIdxHeight)))
252+ else {
253+ let synth2basicPrice = controlAccReadPriceByHeight(idxHeight)
254+ let assetInBytes = fromBase58String(assetIn)
255+ let $t01161312483 = if ((assetInBytes == baseAssetId))
256+ then {
257+ let synthAmt = fraction(amountIn, priceDecimals, synth2basicPrice)
258+ $Tuple4(synthAmt, Reissue(defoAssetId, synthAmt, true), ScriptTransfer(addressFromStringValue(accountAddress), synthAmt, defoAssetId), IntegerEntry(keyUcollateral(), (ucollateral + amountIn)))
259+ }
260+ else if ((assetInBytes == defoAssetId))
261+ then {
262+ let basicAmt = fraction(amountIn, synth2basicPrice, priceDecimals)
263+ let newUcollateral = (ucollateral - basicAmt)
264+ $Tuple4(basicAmt, Burn(baseAssetId, basicAmt), ScriptTransfer(addressFromStringValue(accountAddress), basicAmt, baseAssetId), IntegerEntry(keyUcollateral(), (ucollateral - basicAmt)))
265+ }
266+ else throw(("Unsupported assetIn=" + assetIn))
267+ let amountOut = $t01161312483._1
268+ let burnOrIssue = $t01161312483._2
269+ let transferSynthOrBasic = $t01161312483._3
270+ let ucollateralEntry = $t01161312483._4
271+ if ((0 > (currAssetLockedTotal - accountLockedAmt)))
272+ then throw((("Invalid data state: " + keyAssetLockedTotal) + " less then 0"))
273+ else ((([IntegerEntry(keyAssetLockedTotal, (currAssetLockedTotal - accountLockedAmt)), DeleteEntry(accOperationKey), StringEntry(keyAccountOperation(unlockHeight, accountAddress, "FINISHED"), dataAccountOperation(amountIn, assetIn, synth2basicPrice, amountOut, assetOut, 0, 0))] :+ burnOrIssue) :+ transferSynthOrBasic) :+ ucollateralEntry)
274+ }
275+ }
276+ }
277+ }
278+
279+
280+@Verifier(tx)
281+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
282+

github/deemru/w8io/3ef1775 
54.62 ms