tx · 35RmjPnFsTychHmYmaGk5YCGMrzjkpCNtM4YzZ36WihX

3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5:  -0.01400000 Waves

2022.09.19 18:37 [2236194] smart account 3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5 > SELF 0.00000000 Waves

{ "type": 13, "id": "35RmjPnFsTychHmYmaGk5YCGMrzjkpCNtM4YzZ36WihX", "fee": 1400000, "feeAssetId": null, "timestamp": 1663601883292, "version": 1, "sender": "3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5", "senderPublicKey": "GSAhb4fdky75LiCZ4p4DDK4rmWpmsgGBg1ZVdtPfmRES", "proofs": [ "3i7y3kuyfSUgxq7uRvQo8gRrMowV3t9K1oW9gtmgjkzdEshmPwzKDBgQbTe91cEn44ymctDvemU7zUu41D9vnZF7" ], "script": "base64:BgIsCAISCgoICAgBAQEBAQESAwoBCBIDCgEIEgUKAwgIARIECgIICBIDCgEIEgAUAANTRVACAl9fARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5ARBrZXlXaXRoZHJhd0RlbGF5AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDXdpdGhkcmF3RGVsYXkJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFWtleURlcG9zaXRGZWVQZXJtaWxsZQIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhJkZXBvc2l0RmVlUGVybWlsbGUJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFmtleVdpdGhkcmF3RmVlUGVybWlsbGUCBmFzc2V0QQZhc3NldEIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgITd2l0aGRyYXdGZWVQZXJtaWxsZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCBQNuaWwFA1NFUAETa2V5TWluQW1vdW50RGVwb3NpdAIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhBtaW5BbW91bnREZXBvc2l0CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQARNrZXlBc3NldHNQYWlyU3RhdHVzAgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEGFzc2V0c1BhaXJTdGF0dXMJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFGtleU1pbkFtb3VudFdpdGhkcmF3AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEW1pbkFtb3VudFdpdGhkcmF3CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQAQprZXlCYWxhbmNlAwZhc3NldEEGYXNzZXRCC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIHYmFsYW5jZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIRdG90YWxGZWVDb2xsZWN0ZWQJAMwIAgIHZGVwb3NpdAkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCBQNuaWwFA1NFUAEca2V5VG90YWxGZWVDb2xsZWN0ZWRXaXRoZHJhdwIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAICEXRvdGFsRmVlQ29sbGVjdGVkCQDMCAICCHdpdGhkcmF3CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQARBrZXlBc3NldExvY2tUaW1lAwZhc3NldEEGYXNzZXRCC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgINYXNzZXRMb2NrVGltZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEUa2V5UHJvY2Vzc0luUHJvZ3Jlc3MEC3VzZXJBZGRyZXNzBmFzc2V0QQZhc3NldEILaGVpZ2h0SW5LZXkJALkJAgkAzAgCAgwlcyVzJXMlcyVzJWQJAMwIAgIPd2l0aGRyYXdQcm9jZXNzCQDMCAICCmluUHJvZ3Jlc3MJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgkAzAgCCQCkAwEFC2hlaWdodEluS2V5BQNuaWwFA1NFUAEOa2V5UHJvY2Vzc0RvbmUEC3VzZXJBZGRyZXNzBmFzc2V0QQZhc3NldEILaGVpZ2h0SW5LZXkJALkJAgkAzAgCAgwlcyVzJXMlcyVzJWQJAMwIAgIPd2l0aGRyYXdQcm9jZXNzCQDMCAICBGRvbmUJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgkAzAgCCQCkAwEFC2hlaWdodEluS2V5BQNuaWwFA1NFUAEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQttdXN0TWFuYWdlcgEBaQQCcGQJAAIBAhJQZXJtaXNzaW9uIGRlbmllZC4EByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yAQZmbXRFcnIBA21zZwkAuQkCCQDMCAICFG90Y19tdWx0aWFzc2V0LnJpZGU6CQDMCAIFA21zZwUDbmlsAgEgAQh0aHJvd0VycgEDbXNnCQACAQkBBmZtdEVycgEFA21zZwcBaQENcmVnaXN0ZXJBc3NldAgGYXNzZXRBBmFzc2V0Qg13aXRoZHJhd0RlbGF5CmRlcG9zaXRGZWULd2l0aGRyYXdGZWUQbWluQW1vdW50RGVwb3NpdBFtaW5BbW91bnRXaXRoZHJhdwpwYWlyU3RhdHVzBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEEHdpdGhkcmF3RGVsYXlLZXkJARBrZXlXaXRoZHJhd0RlbGF5AgUGYXNzZXRBBQZhc3NldEIEFWRlcG9zaXRGZWVQZXJtaWxsZUtleQkBFWtleURlcG9zaXRGZWVQZXJtaWxsZQIFBmFzc2V0QQUGYXNzZXRCBBZ3aXRoZHJhd0ZlZVBlcm1pbGxlS2V5CQEWa2V5V2l0aGRyYXdGZWVQZXJtaWxsZQIFBmFzc2V0QQUGYXNzZXRCBBNtaW5BbW91bnREZXBvc2l0S2V5CQETa2V5TWluQW1vdW50RGVwb3NpdAIFBmFzc2V0QQUGYXNzZXRCBBRtaW5BbW91bnRXaXRoZHJhd0tleQkBFGtleU1pbkFtb3VudFdpdGhkcmF3AgUGYXNzZXRBBQZhc3NldEIEDXBhaXJTdGF0dXNLZXkJARNrZXlBc3NldHNQYWlyU3RhdHVzAgUGYXNzZXRBBQZhc3NldEIJAMwIAgkBDEludGVnZXJFbnRyeQIFEHdpdGhkcmF3RGVsYXlLZXkFDXdpdGhkcmF3RGVsYXkJAMwIAgkBDEludGVnZXJFbnRyeQIFFWRlcG9zaXRGZWVQZXJtaWxsZUtleQUKZGVwb3NpdEZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUWd2l0aGRyYXdGZWVQZXJtaWxsZUtleQULd2l0aGRyYXdGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFE21pbkFtb3VudERlcG9zaXRLZXkFEG1pbkFtb3VudERlcG9zaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFFG1pbkFtb3VudFdpdGhkcmF3S2V5BRFtaW5BbW91bnRXaXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUNcGFpclN0YXR1c0tleQUKcGFpclN0YXR1cwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDnN3YXBBc3NldHNBVG9CAQZhc3NldEIEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYXNzZXRBCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQEBWFzc2V0CQDZBAEJAQV2YWx1ZQEFBmFzc2V0QgQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBBBtaW5BbW91bnREZXBvc2l0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBE2tleU1pbkFtb3VudERlcG9zaXQCBQZhc3NldEEFBmFzc2V0QgkBBmZtdEVycgECH1RoaXMgYXNzZXQgcGFpciBkb2VzIG5vdCBleGlzdC4ECXRvRGVwb3NpdAgFB3BheW1lbnQGYW1vdW50BApkZXBvc2l0RmVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBFWtleURlcG9zaXRGZWVQZXJtaWxsZQIFBmFzc2V0QQUGYXNzZXRCCQEGZm10RXJyAQIzVGhlIGRlcG9zaXQgZmVlIGZvciB0aGlzIHBhaXIgb2YgYXNzZXRzIGlzIG5vdCBzZXQuBANmZWUJAGgCCQBpAgUJdG9EZXBvc2l0AOgHBQpkZXBvc2l0RmVlBBJjdXJyZW50VXNlckJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBCmtleUJhbGFuY2UDBQZhc3NldEEFBmFzc2V0QgULdXNlckFkZHJlc3MAAAQQdG90YWxDb21taXNzaW9ucwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIAAAQKcGFpclN0YXR1cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARNrZXlBc3NldHNQYWlyU3RhdHVzAgUGYXNzZXRBBQZhc3NldEIJAQZmbXRFcnIBAjlUaGUgYXNzZXQgcGFpciBzdGF0dXMgZm9yIHRoaXMgcGFpciBvZiBhc3NldHMgaXMgbm90IHNldC4ED2NoZWNrUGFpclN0YXR1cwMJAAACBQpwYWlyU3RhdHVzAAAGCQEIdGhyb3dFcnIBAiBUaGUgY291cGxlJ3MgZGVwb3NpdCBpcyBibG9ja2VkLgMJAAACBQ9jaGVja1BhaXJTdGF0dXMFD2NoZWNrUGFpclN0YXR1cwQMY2hlY2tQYXltZW50AwkAZwIFCXRvRGVwb3NpdAUQbWluQW1vdW50RGVwb3NpdAYJAQh0aHJvd0VycgECLFRoZSBkZXBvc2l0IGFtb3VudCBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0uAwkAAAIFDGNoZWNrUGF5bWVudAUMY2hlY2tQYXltZW50BApuZXdCYWxhbmNlCQBlAgkAZAIFEmN1cnJlbnRVc2VyQmFsYW5jZQUJdG9EZXBvc2l0BQNmZWUEDGNoZWNrQmFsYW5jZQMJAGYCBQpuZXdCYWxhbmNlAAAGCQEIdGhyb3dFcnIBAi1UaGUgZmluYWwgYmFsYW5jZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMC4DCQAAAgUMY2hlY2tCYWxhbmNlBQxjaGVja0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlCYWxhbmNlAwUGYXNzZXRBBQZhc3NldEIFC3VzZXJBZGRyZXNzBQpuZXdCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIJAGQCBRB0b3RhbENvbW1pc3Npb25zBQNmZWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUJdG9EZXBvc2l0BQNmZWUFBWFzc2V0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcaW5pdGlhbGl6YXRpb25Td2FwQXNzZXRzQlRvQQEGYXNzZXRBBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECnRvV2l0aGRyYXcIBQdwYXltZW50BmFtb3VudAQGYXNzZXRCCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQRbWluQW1vdW50V2l0aGRyYXcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEUa2V5TWluQW1vdW50V2l0aGRyYXcCBQZhc3NldEEFBmFzc2V0QgkBBmZtdEVycgECQVRoZSBtaW5pbXVtIHdpdGhkcmF3YWwgYW1vdW50IGZvciB0aGlzIHBhaXIgb2YgYXNzZXRzIGlzIG5vdCBzZXQuBA9hc3NldExvY2tIZWlnaHQJAGQCBQZoZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEQa2V5V2l0aGRyYXdEZWxheQIFBmFzc2V0QQUGYXNzZXRCCQEGZm10RXJyAQIzV2l0aGRyYXdhbCBkZWxheSBpcyBub3Qgc2V0IGZvciB0aGUgc3BlY2lmaWVkIHBhaXIuBBJjdXJyZW50VXNlckJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEKa2V5QmFsYW5jZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwkBBmZtdEVycgECIVRoaXMgdXNlciBiYWxhbmNlIGRvZXMgbm90IGV4aXN0LgQQdG90YWxDb21taXNzaW9ucwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIAAAQWd2l0aGRyYXdGZWVQZXJtaWxsZUtleQkBFmtleVdpdGhkcmF3RmVlUGVybWlsbGUCBQZhc3NldEEFBmFzc2V0QgQLd2l0aGRyYXdGZWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRZ3aXRoZHJhd0ZlZVBlcm1pbGxlS2V5CQEGZm10RXJyAQI2VGhlIHdpdGhkcmF3YWwgZmVlIGZvciB0aGlzIHBhaXIgb2YgYXNzZXRzIGlzIG5vdCBzZXQuBANmZWUJAGgCCQBpAgUKdG9XaXRoZHJhdwDoBwULd2l0aGRyYXdGZWUECm5ld0JhbGFuY2UJAGUCBRJjdXJyZW50VXNlckJhbGFuY2UFCnRvV2l0aGRyYXcEDGNoZWNrQmFsYW5jZQMJAGcCBQpuZXdCYWxhbmNlAAAGCQEIdGhyb3dFcnIBAiVTd2FwIGFtb3VudCBmYWlsLCBhbW91bnQgaXMgdG8gc21hbGwuAwkAAAIFDGNoZWNrQmFsYW5jZQUMY2hlY2tCYWxhbmNlBAxjaGVja1BheW1lbnQDCQBnAgUKdG9XaXRoZHJhdwURbWluQW1vdW50V2l0aGRyYXcGCQEIdGhyb3dFcnIBAi1UaGUgd2l0aGRyYXcgYW1vdW50IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bS4DCQAAAgUMY2hlY2tQYXltZW50BQxjaGVja1BheW1lbnQEFGNoZWNrQXNzZXRMb2NrSGVpZ2h0AwkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEQa2V5QXNzZXRMb2NrVGltZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwAABQ9hc3NldExvY2tIZWlnaHQGCQEIdGhyb3dFcnIBAjpBdCB0aGlzIGhlaWdodCwgdGhlcmUgaXMgYWxyZWFkeSBhbiBleGNoYW5nZSBvZiB0aGlzIHBhaXIuAwkAAAIFFGNoZWNrQXNzZXRMb2NrSGVpZ2h0BRRjaGVja0Fzc2V0TG9ja0hlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleUFzc2V0TG9ja1RpbWUDBQZhc3NldEEFBmFzc2V0QgULdXNlckFkZHJlc3MFD2Fzc2V0TG9ja0hlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUJhbGFuY2UDBQZhc3NldEEFBmFzc2V0QgULdXNlckFkZHJlc3MFCm5ld0JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlQcm9jZXNzSW5Qcm9ncmVzcwQFC3VzZXJBZGRyZXNzBQZhc3NldEEFBmFzc2V0QgUPYXNzZXRMb2NrSGVpZ2h0CQBlAgUKdG9XaXRoZHJhdwUDZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEca2V5VG90YWxGZWVDb2xsZWN0ZWRXaXRoZHJhdwIFBmFzc2V0QQUGYXNzZXRCCQBkAgUQdG90YWxDb21taXNzaW9ucwUDZmVlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENd2l0aGRyYXdBc3NldAMGYXNzZXRBBmFzc2V0QgtoZWlnaHRJbktleQQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA9hc3NldExvY2tIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEQa2V5QXNzZXRMb2NrVGltZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwkBBmZtdEVycgECMUFuIGFzc2V0IHBhaXIgb3IgaGVpZ2h0IGlzIHNwZWNpZmllZCBpbmNvcnJlY3RseS4ECnRvV2l0aGRyYXcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQEUa2V5UHJvY2Vzc0luUHJvZ3Jlc3MEBQt1c2VyQWRkcmVzcwUGYXNzZXRBBQZhc3NldEIFC2hlaWdodEluS2V5CQEGZm10RXJyAQJGQXQgdGhpcyBoZWlnaHQsIHdpdGhkcmF3IHdhcyBub3QgaW5pdGlhbGl6ZWQgd2l0aCB0aGlzIHBhaXIgb2YgYXNzZXRzLgQFYXNzZXQJANkEAQkBBXZhbHVlAQUGYXNzZXRBBAtjaGVja0hlaWdodAMJAGcCBQZoZWlnaHQFD2Fzc2V0TG9ja0hlaWdodAYJAQh0aHJvd0VycgEJAKwCAgkArAICAh1XaXRoZHJhd2FsIGlzIHBvc3NpYmxlIGFmdGVyIAkApAMBBQtoZWlnaHRJbktleQImIGhlaWdodCBvciB5b3UgaGF2ZSBhbHJlYWR5IHdpdGhkcmF3bi4DCQAAAgULY2hlY2tIZWlnaHQFC2NoZWNrSGVpZ2h0CQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlQcm9jZXNzSW5Qcm9ncmVzcwQFC3VzZXJBZGRyZXNzBQZhc3NldEEFBmFzc2V0QgULaGVpZ2h0SW5LZXkJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlQcm9jZXNzRG9uZQQFC3VzZXJBZGRyZXNzBQZhc3NldEEFBmFzc2V0QgULaGVpZ2h0SW5LZXkFCnRvV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp0b1dpdGhkcmF3BQVhc3NldAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3dpdGhkcmF3RmVlAgZhc3NldEEGYXNzZXRCBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3RvV2l0aGRyYXdBCQELdmFsdWVPckVsc2UCCQCfCAEJARtrZXlUb3RhbEZlZUNvbGxlY3RlZERlcG9zaXQCBQZhc3NldEEFBmFzc2V0QgAABA53aXRoZHJhd0Fzc2V0QQkA2QQBCQEFdmFsdWUBBQZhc3NldEEEC3RvV2l0aGRyYXdCCQELdmFsdWVPckVsc2UCCQCfCAEJARxrZXlUb3RhbEZlZUNvbGxlY3RlZFdpdGhkcmF3AgUGYXNzZXRBBQZhc3NldEIAAAQOd2l0aGRyYXdBc3NldEIJANkEAQkBBXZhbHVlAQUGYXNzZXRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC3RvV2l0aGRyYXdBBQ53aXRoZHJhd0Fzc2V0QQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVRvdGFsRmVlQ29sbGVjdGVkV2l0aGRyYXcCBQZhc3NldEEFBmFzc2V0QgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULdG9XaXRoZHJhd0IFDndpdGhkcmF3QXNzZXRCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFFWNoZWNrTWFuYWdlclB1YmxpY0tleQUVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAJwbQkBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQFaGFzUE0DCQEJaXNEZWZpbmVkAQUCcG0GCQEIdGhyb3dFcnIBAhNObyBwZW5kaW5nIG1hbmFnZXIuAwkAAAIFBWhhc1BNBQVoYXNQTQQHY2hlY2tQTQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAnBtBgkBCHRocm93RXJyAQIcWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyLgMJAAACBQdjaGVja1BNBQdjaGVja1BNCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlNYW5hZ2VyUHVibGljS2V5AAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXlwzD2B", "chainId": 84, "height": 2236194, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 663UfavYENmNrk38YSPcYHgJ7qctRZJYztRuhWYN2b1N Next: 14Ss988skoTZAbjK2pcvn3AbZGF76mhAfgJoZN7HEjYM Diff:
OldNewDifferences
118118 let fee = ((toDeposit / 1000) * depositFee)
119119 let currentUserBalance = valueOrElse(getInteger(keyBalance(assetA, assetB, userAddress)), 0)
120120 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
121- let pairStaus = value(getInteger(keyAssetsPairStatus(assetA, assetB)))
122- let checkPairStatus = if ((pairStaus == 0))
121+ let pairStatus = valueOrErrorMessage(getInteger(keyAssetsPairStatus(assetA, assetB)), fmtErr("The asset pair status for this pair of assets is not set."))
122+ let checkPairStatus = if ((pairStatus == 0))
123123 then true
124124 else throwErr("The couple's deposit is blocked.")
125125 if ((checkPairStatus == checkPairStatus))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 func keyManagerPublicKey () = "%s__managerPublicKey"
77
88
99 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
1010
1111
1212 func keyWithdrawDelay (assetA,assetB) = makeString(["%s%s%s", "withdrawDelay", assetA, assetB], SEP)
1313
1414
1515 func keyDepositFeePermille (assetA,assetB) = makeString(["%s%s%s", "depositFeePermille", assetA, assetB], SEP)
1616
1717
1818 func keyWithdrawFeePermille (assetA,assetB) = makeString(["%s%s%s", "withdrawFeePermille", assetA, assetB], SEP)
1919
2020
2121 func keyMinAmountDeposit (assetA,assetB) = makeString(["%s%s%s", "minAmountDeposit", assetA, assetB], SEP)
2222
2323
2424 func keyAssetsPairStatus (assetA,assetB) = makeString(["%s%s%s", "assetsPairStatus", assetA, assetB], SEP)
2525
2626
2727 func keyMinAmountWithdraw (assetA,assetB) = makeString(["%s%s%s", "minAmountWithdraw", assetA, assetB], SEP)
2828
2929
3030 func keyBalance (assetA,assetB,userAddress) = makeString(["%s%s%s%s", "balance", assetA, assetB, userAddress], SEP)
3131
3232
3333 func keyTotalFeeCollectedDeposit (assetA,assetB) = makeString(["%s%s%s%s", "totalFeeCollected", "deposit", assetA, assetB], SEP)
3434
3535
3636 func keyTotalFeeCollectedWithdraw (assetA,assetB) = makeString(["%s%s%s%s", "totalFeeCollected", "withdraw", assetA, assetB], SEP)
3737
3838
3939 func keyAssetLockTime (assetA,assetB,userAddress) = makeString(["%s%s%s%s", "assetLockTime", assetA, assetB, userAddress], SEP)
4040
4141
4242 func keyProcessInProgress (userAddress,assetA,assetB,heightInKey) = makeString(["%s%s%s%s%s%d", "withdrawProcess", "inProgress", userAddress, assetA, assetB, toString(heightInKey)], SEP)
4343
4444
4545 func keyProcessDone (userAddress,assetA,assetB,heightInKey) = makeString(["%s%s%s%s%s%d", "withdrawProcess", "done", userAddress, assetA, assetB, toString(heightInKey)], SEP)
4646
4747
4848 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
4949 case s: String =>
5050 fromBase58String(s)
5151 case _: Unit =>
5252 unit
5353 case _ =>
5454 throw("Match error")
5555 }
5656
5757
5858 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
5959 case s: String =>
6060 fromBase58String(s)
6161 case _: Unit =>
6262 unit
6363 case _ =>
6464 throw("Match error")
6565 }
6666
6767
6868 func mustManager (i) = {
6969 let pd = throw("Permission denied.")
7070 match managerPublicKeyOrUnit() {
7171 case pk: ByteVector =>
7272 if ((i.callerPublicKey == pk))
7373 then true
7474 else pd
7575 case _: Unit =>
7676 if ((i.caller == this))
7777 then true
7878 else pd
7979 case _ =>
8080 throw("Match error")
8181 }
8282 }
8383
8484
8585 func fmtErr (msg) = makeString(["otc_multiasset.ride:", msg], " ")
8686
8787
8888 func throwErr (msg) = throw(fmtErr(msg))
8989
9090
9191 @Callable(i)
9292 func registerAsset (assetA,assetB,withdrawDelay,depositFee,withdrawFee,minAmountDeposit,minAmountWithdraw,pairStatus) = {
9393 let checkCaller = mustManager(i)
9494 if ((checkCaller == checkCaller))
9595 then {
9696 let withdrawDelayKey = keyWithdrawDelay(assetA, assetB)
9797 let depositFeePermilleKey = keyDepositFeePermille(assetA, assetB)
9898 let withdrawFeePermilleKey = keyWithdrawFeePermille(assetA, assetB)
9999 let minAmountDepositKey = keyMinAmountDeposit(assetA, assetB)
100100 let minAmountWithdrawKey = keyMinAmountWithdraw(assetA, assetB)
101101 let pairStatusKey = keyAssetsPairStatus(assetA, assetB)
102102 [IntegerEntry(withdrawDelayKey, withdrawDelay), IntegerEntry(depositFeePermilleKey, depositFee), IntegerEntry(withdrawFeePermilleKey, withdrawFee), IntegerEntry(minAmountDepositKey, minAmountDeposit), IntegerEntry(minAmountWithdrawKey, minAmountWithdraw), IntegerEntry(pairStatusKey, pairStatus)]
103103 }
104104 else throw("Strict value is not equal to itself.")
105105 }
106106
107107
108108
109109 @Callable(i)
110110 func swapAssetsAToB (assetB) = {
111111 let payment = value(i.payments[0])
112112 let assetA = toBase58String(value(payment.assetId))
113113 let asset = fromBase58String(value(assetB))
114114 let userAddress = toString(i.caller)
115115 let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountDeposit(assetA, assetB)), fmtErr("This asset pair does not exist."))
116116 let toDeposit = payment.amount
117117 let depositFee = valueOrErrorMessage(getInteger(keyDepositFeePermille(assetA, assetB)), fmtErr("The deposit fee for this pair of assets is not set."))
118118 let fee = ((toDeposit / 1000) * depositFee)
119119 let currentUserBalance = valueOrElse(getInteger(keyBalance(assetA, assetB, userAddress)), 0)
120120 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
121- let pairStaus = value(getInteger(keyAssetsPairStatus(assetA, assetB)))
122- let checkPairStatus = if ((pairStaus == 0))
121+ let pairStatus = valueOrErrorMessage(getInteger(keyAssetsPairStatus(assetA, assetB)), fmtErr("The asset pair status for this pair of assets is not set."))
122+ let checkPairStatus = if ((pairStatus == 0))
123123 then true
124124 else throwErr("The couple's deposit is blocked.")
125125 if ((checkPairStatus == checkPairStatus))
126126 then {
127127 let checkPayment = if ((toDeposit >= minAmountDeposit))
128128 then true
129129 else throwErr("The deposit amount is less than the minimum.")
130130 if ((checkPayment == checkPayment))
131131 then {
132132 let newBalance = ((currentUserBalance + toDeposit) - fee)
133133 let checkBalance = if ((newBalance > 0))
134134 then true
135135 else throwErr("The final balance is less than or equal to 0.")
136136 if ((checkBalance == checkBalance))
137137 then [IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), (totalCommissions + fee)), ScriptTransfer(i.caller, (toDeposit - fee), asset)]
138138 else throw("Strict value is not equal to itself.")
139139 }
140140 else throw("Strict value is not equal to itself.")
141141 }
142142 else throw("Strict value is not equal to itself.")
143143 }
144144
145145
146146
147147 @Callable(i)
148148 func initializationSwapAssetsBToA (assetA) = {
149149 let payment = value(i.payments[0])
150150 let toWithdraw = payment.amount
151151 let assetB = toBase58String(value(payment.assetId))
152152 let userAddress = toString(i.caller)
153153 let minAmountWithdraw = valueOrErrorMessage(getInteger(keyMinAmountWithdraw(assetA, assetB)), fmtErr("The minimum withdrawal amount for this pair of assets is not set."))
154154 let assetLockHeight = (height + valueOrErrorMessage(getInteger(keyWithdrawDelay(assetA, assetB)), fmtErr("Withdrawal delay is not set for the specified pair.")))
155155 let currentUserBalance = valueOrErrorMessage(getInteger(keyBalance(assetA, assetB, userAddress)), fmtErr("This user balance does not exist."))
156156 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
157157 let withdrawFeePermilleKey = keyWithdrawFeePermille(assetA, assetB)
158158 let withdrawFee = valueOrErrorMessage(getInteger(withdrawFeePermilleKey), fmtErr("The withdrawal fee for this pair of assets is not set."))
159159 let fee = ((toWithdraw / 1000) * withdrawFee)
160160 let newBalance = (currentUserBalance - toWithdraw)
161161 let checkBalance = if ((newBalance >= 0))
162162 then true
163163 else throwErr("Swap amount fail, amount is to small.")
164164 if ((checkBalance == checkBalance))
165165 then {
166166 let checkPayment = if ((toWithdraw >= minAmountWithdraw))
167167 then true
168168 else throwErr("The withdraw amount is less than the minimum.")
169169 if ((checkPayment == checkPayment))
170170 then {
171171 let checkAssetLockHeight = if ((valueOrElse(getInteger(keyAssetLockTime(assetA, assetB, userAddress)), 0) != assetLockHeight))
172172 then true
173173 else throwErr("At this height, there is already an exchange of this pair.")
174174 if ((checkAssetLockHeight == checkAssetLockHeight))
175175 then [IntegerEntry(keyAssetLockTime(assetA, assetB, userAddress), assetLockHeight), IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight), (toWithdraw - fee)), IntegerEntry(keyTotalFeeCollectedWithdraw(assetA, assetB), (totalCommissions + fee))]
176176 else throw("Strict value is not equal to itself.")
177177 }
178178 else throw("Strict value is not equal to itself.")
179179 }
180180 else throw("Strict value is not equal to itself.")
181181 }
182182
183183
184184
185185 @Callable(i)
186186 func withdrawAsset (assetA,assetB,heightInKey) = {
187187 let userAddress = toString(i.caller)
188188 let assetLockHeight = valueOrErrorMessage(getInteger(keyAssetLockTime(assetA, assetB, userAddress)), fmtErr("An asset pair or height is specified incorrectly."))
189189 let toWithdraw = valueOrErrorMessage(getInteger(keyProcessInProgress(userAddress, assetA, assetB, heightInKey)), fmtErr("At this height, withdraw was not initialized with this pair of assets."))
190190 let asset = fromBase58String(value(assetA))
191191 let checkHeight = if ((height >= assetLockHeight))
192192 then true
193193 else throwErr((("Withdrawal is possible after " + toString(heightInKey)) + " height or you have already withdrawn."))
194194 if ((checkHeight == checkHeight))
195195 then [DeleteEntry(keyProcessInProgress(userAddress, assetA, assetB, heightInKey)), IntegerEntry(keyProcessDone(userAddress, assetA, assetB, heightInKey), toWithdraw), ScriptTransfer(i.caller, toWithdraw, asset)]
196196 else throw("Strict value is not equal to itself.")
197197 }
198198
199199
200200
201201 @Callable(i)
202202 func withdrawFee (assetA,assetB) = {
203203 let checkCaller = mustManager(i)
204204 if ((checkCaller == checkCaller))
205205 then {
206206 let toWithdrawA = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
207207 let withdrawAssetA = fromBase58String(value(assetA))
208208 let toWithdrawB = valueOrElse(getInteger(keyTotalFeeCollectedWithdraw(assetA, assetB)), 0)
209209 let withdrawAssetB = fromBase58String(value(assetB))
210210 [IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), 0), ScriptTransfer(i.caller, toWithdrawA, withdrawAssetA), IntegerEntry(keyTotalFeeCollectedWithdraw(assetA, assetB), 0), ScriptTransfer(i.caller, toWithdrawB, withdrawAssetB)]
211211 }
212212 else throw("Strict value is not equal to itself.")
213213 }
214214
215215
216216
217217 @Callable(i)
218218 func setManager (pendingManagerPublicKey) = {
219219 let checkCaller = mustManager(i)
220220 if ((checkCaller == checkCaller))
221221 then {
222222 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
223223 if ((checkManagerPublicKey == checkManagerPublicKey))
224224 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
225225 else throw("Strict value is not equal to itself.")
226226 }
227227 else throw("Strict value is not equal to itself.")
228228 }
229229
230230
231231
232232 @Callable(i)
233233 func confirmManager () = {
234234 let pm = pendingManagerPublicKeyOrUnit()
235235 let hasPM = if (isDefined(pm))
236236 then true
237237 else throwErr("No pending manager.")
238238 if ((hasPM == hasPM))
239239 then {
240240 let checkPM = if ((i.callerPublicKey == value(pm)))
241241 then true
242242 else throwErr("You are not pending manager.")
243243 if ((checkPM == checkPM))
244244 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
245245 else throw("Strict value is not equal to itself.")
246246 }
247247 else throw("Strict value is not equal to itself.")
248248 }
249249
250250
251251 @Verifier(tx)
252252 func verify () = {
253253 let targetPublicKey = match managerPublicKeyOrUnit() {
254254 case pk: ByteVector =>
255255 pk
256256 case _: Unit =>
257257 tx.senderPublicKey
258258 case _ =>
259259 throw("Match error")
260260 }
261261 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
262262 }
263263

github/deemru/w8io/026f985 
44.65 ms