tx · 88Q9PZWhruvsXjkn5kzxLGt7NHAMuhFccib1Tfr58XbS

3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5:  -0.01400000 Waves

2022.09.15 18:33 [2230413] smart account 3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5 > SELF 0.00000000 Waves

{ "type": 13, "id": "88Q9PZWhruvsXjkn5kzxLGt7NHAMuhFccib1Tfr58XbS", "fee": 1400000, "feeAssetId": null, "timestamp": 1663255977756, "version": 1, "sender": "3MvXnAcEtL9x3i499UcvTQZPufrT5ZZUEd5", "senderPublicKey": "GSAhb4fdky75LiCZ4p4DDK4rmWpmsgGBg1ZVdtPfmRES", "proofs": [ "3Ce1paouzspeP9Gq71pKDz78fCg4FhEymakELZaxWK2NHV6krNU1etZrPAt7ZRcQDbrjnKa4eshXubY4twE8bs5x" ], "script": "base64:BgIsCAISCgoICAgBAQEBAQESAwoBCBIDCgEIEgUKAwgIARIECgIICBIDCgEIEgAUAANTRVACAl9fARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5ARBrZXlXaXRoZHJhd0RlbGF5AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICDXdpdGhkcmF3RGVsYXkJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFWtleURlcG9zaXRGZWVQZXJtaWxsZQIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhJkZXBvc2l0RmVlUGVybWlsbGUJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFmtleVdpdGhkcmF3RmVlUGVybWlsbGUCBmFzc2V0QQZhc3NldEIJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgITd2l0aGRyYXdGZWVQZXJtaWxsZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCBQNuaWwFA1NFUAETa2V5TWluQW1vdW50RGVwb3NpdAIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAhBtaW5BbW91bnREZXBvc2l0CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQARNrZXlBc3NldHNQYWlyU3RhdHVzAgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEGFzc2V0c1BhaXJTdGF0dXMJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgUDbmlsBQNTRVABFGtleU1pbkFtb3VudFdpdGhkcmF3AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIGJXMlcyVzCQDMCAICEW1pbkFtb3VudFdpdGhkcmF3CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQAQprZXlCYWxhbmNlAwZhc3NldEEGYXNzZXRCC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIHYmFsYW5jZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgZhc3NldEEGYXNzZXRCCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIRdG90YWxGZWVDb2xsZWN0ZWQJAMwIAgIHZGVwb3NpdAkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCBQNuaWwFA1NFUAEca2V5VG90YWxGZWVDb2xsZWN0ZWRXaXRoZHJhdwIGYXNzZXRBBmFzc2V0QgkAuQkCCQDMCAICCCVzJXMlcyVzCQDMCAICEXRvdGFsRmVlQ29sbGVjdGVkCQDMCAICCHdpdGhkcmF3CQDMCAIFBmFzc2V0QQkAzAgCBQZhc3NldEIFA25pbAUDU0VQARBrZXlBc3NldExvY2tUaW1lAwZhc3NldEEGYXNzZXRCC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgINYXNzZXRMb2NrVGltZQkAzAgCBQZhc3NldEEJAMwIAgUGYXNzZXRCCQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEUa2V5UHJvY2Vzc0luUHJvZ3Jlc3MEC3VzZXJBZGRyZXNzBmFzc2V0QQZhc3NldEILaGVpZ2h0SW5LZXkJALkJAgkAzAgCAgwlcyVzJXMlcyVzJXMJAMwIAgIPd2l0aGRyYXdQcm9jZXNzCQDMCAICCmluUHJvZ3Jlc3MJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgkAzAgCCQCkAwEFC2hlaWdodEluS2V5BQNuaWwFA1NFUAEOa2V5UHJvY2Vzc0RvbmUEC3VzZXJBZGRyZXNzBmFzc2V0QQZhc3NldEILaGVpZ2h0SW5LZXkJALkJAgkAzAgCAgwlcyVzJXMlcyVzJXMJAMwIAgIPd2l0aGRyYXdQcm9jZXNzCQDMCAICBGRvbmUJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYXNzZXRBCQDMCAIFBmFzc2V0QgkAzAgCCQCkAwEFC2hlaWdodEluS2V5BQNuaWwFA1NFUAEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQttdXN0TWFuYWdlcgEBaQQCcGQJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQUCcGsGBQJwZAMJAAECBQckbWF0Y2gwAgRVbml0AwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFAnBkCQACAQILTWF0Y2ggZXJyb3IBBmZtdEVycgEDbXNnCQC5CQIJAMwIAgIUb3RjX211bHRpYXNzZXQucmlkZToJAMwIAgUDbXNnBQNuaWwCASABCHRocm93RXJyAQNtc2cJAAIBCQEGZm10RXJyAQUDbXNnBwFpAQ1yZWdpc3RlckFzc2V0CAZhc3NldEEGYXNzZXRCDXdpdGhkcmF3RGVsYXkKZGVwb3NpdEZlZQt3aXRoZHJhd0ZlZRBtaW5BbW91bnREZXBvc2l0EW1pbkFtb3VudFdpdGhkcmF3CnBhaXJTdGF0dXMEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQQd2l0aGRyYXdEZWxheUtleQkBEGtleVdpdGhkcmF3RGVsYXkCBQZhc3NldEEFBmFzc2V0QgQVZGVwb3NpdEZlZVBlcm1pbGxlS2V5CQEVa2V5RGVwb3NpdEZlZVBlcm1pbGxlAgUGYXNzZXRBBQZhc3NldEIEFndpdGhkcmF3RmVlUGVybWlsbGVLZXkJARZrZXlXaXRoZHJhd0ZlZVBlcm1pbGxlAgUGYXNzZXRBBQZhc3NldEIEE21pbkFtb3VudERlcG9zaXRLZXkJARNrZXlNaW5BbW91bnREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIEFG1pbkFtb3VudFdpdGhkcmF3S2V5CQEUa2V5TWluQW1vdW50V2l0aGRyYXcCBQZhc3NldEEFBmFzc2V0QgQNcGFpclN0YXR1c0tleQkBE2tleUFzc2V0c1BhaXJTdGF0dXMCBQZhc3NldEEFBmFzc2V0QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUQd2l0aGRyYXdEZWxheUtleQUNd2l0aGRyYXdEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgUVZGVwb3NpdEZlZVBlcm1pbGxlS2V5BQpkZXBvc2l0RmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZ3aXRoZHJhd0ZlZVBlcm1pbGxlS2V5BQt3aXRoZHJhd0ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUTbWluQW1vdW50RGVwb3NpdEtleQUQbWluQW1vdW50RGVwb3NpdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUbWluQW1vdW50V2l0aGRyYXdLZXkFEW1pbkFtb3VudFdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1wYWlyU3RhdHVzS2V5BQpwYWlyU3RhdHVzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOc3dhcEFzc2V0c0FUb0IBBmFzc2V0QgQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhc3NldEEJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAQFYXNzZXQJANkEAQkBBXZhbHVlAQUGYXNzZXRCBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEEG1pbkFtb3VudERlcG9zaXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQETa2V5TWluQW1vdW50RGVwb3NpdAIFBmFzc2V0QQUGYXNzZXRCCQEGZm10RXJyAQIfVGhpcyBhc3NldCBwYWlyIGRvZXMgbm90IGV4aXN0LgQJdG9EZXBvc2l0CAUHcGF5bWVudAZhbW91bnQECmRlcG9zaXRGZWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFWtleURlcG9zaXRGZWVQZXJtaWxsZQIFBmFzc2V0QQUGYXNzZXRCAAAEA2ZlZQkAaAIJAGkCBQl0b0RlcG9zaXQA6AcFCmRlcG9zaXRGZWUEEmN1cnJlbnRVc2VyQmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEKa2V5QmFsYW5jZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwAABBB0b3RhbENvbW1pc3Npb25zCQELdmFsdWVPckVsc2UCCQCfCAEJARtrZXlUb3RhbEZlZUNvbGxlY3RlZERlcG9zaXQCBQZhc3NldEEFBmFzc2V0QgAABAlwYWlyU3RhdXMJAQV2YWx1ZQEJAJ8IAQkBE2tleUFzc2V0c1BhaXJTdGF0dXMCBQZhc3NldEEFBmFzc2V0QgQPY2hlY2tQYWlyU3RhdHVzAwkAAAIFCXBhaXJTdGF1cwAABgkBCHRocm93RXJyAQIgVGhlIGNvdXBsZSdzIGRlcG9zaXQgaXMgYmxvY2tlZC4DCQAAAgUPY2hlY2tQYWlyU3RhdHVzBQ9jaGVja1BhaXJTdGF0dXMEDGNoZWNrUGF5bWVudAMJAGcCBQl0b0RlcG9zaXQFEG1pbkFtb3VudERlcG9zaXQGCQEIdGhyb3dFcnIBAixUaGUgZGVwb3NpdCBhbW91bnQgaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtLgMJAAACBQxjaGVja1BheW1lbnQFDGNoZWNrUGF5bWVudAQKbmV3QmFsYW5jZQkAZQIJAGQCBRJjdXJyZW50VXNlckJhbGFuY2UFCXRvRGVwb3NpdAUDZmVlBAxjaGVja0JhbGFuY2UDCQBmAgUKbmV3QmFsYW5jZQAABgkBCHRocm93RXJyAQItVGhlIGZpbmFsIGJhbGFuY2UgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAuAwkAAAIFDGNoZWNrQmFsYW5jZQUMY2hlY2tCYWxhbmNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5QmFsYW5jZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwUKbmV3QmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG2tleVRvdGFsRmVlQ29sbGVjdGVkRGVwb3NpdAIFBmFzc2V0QQUGYXNzZXRCCQBkAgUQdG90YWxDb21taXNzaW9ucwUDZmVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFCXRvRGVwb3NpdAUDZmVlBQVhc3NldAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBHGluaXRpYWxpemF0aW9uU3dhcEFzc2V0c0JUb0EBBmFzc2V0QQQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAp0b1dpdGhkcmF3CAUHcGF5bWVudAZhbW91bnQEBmFzc2V0QgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEEW1pbkFtb3VudFdpdGhkcmF3CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBFGtleU1pbkFtb3VudFdpdGhkcmF3AgUGYXNzZXRBBQZhc3NldEIJAQZmbXRFcnIBAkFUaGUgbWluaW11bSB3aXRoZHJhd2FsIGFtb3VudCBmb3IgdGhpcyBwYWlyIG9mIGFzc2V0cyBpcyBub3Qgc2V0LgQPYXNzZXRMb2NrSGVpZ2h0CQBkAgUGaGVpZ2h0CQELdmFsdWVPckVsc2UCCQCfCAEJARBrZXlXaXRoZHJhd0RlbGF5AgUGYXNzZXRBBQZhc3NldEIAAAQSY3VycmVudFVzZXJCYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBCmtleUJhbGFuY2UDBQZhc3NldEEFBmFzc2V0QgULdXNlckFkZHJlc3MJAQZmbXRFcnIBAiFUaGlzIHVzZXIgYmFsYW5jZSBkb2VzIG5vdCBleGlzdC4EEHRvdGFsQ29tbWlzc2lvbnMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBG2tleVRvdGFsRmVlQ29sbGVjdGVkRGVwb3NpdAIFBmFzc2V0QQUGYXNzZXRCAAAEFndpdGhkcmF3RmVlUGVybWlsbGVLZXkJARZrZXlXaXRoZHJhd0ZlZVBlcm1pbGxlAgUGYXNzZXRBBQZhc3NldEIEC3dpdGhkcmF3RmVlCQELdmFsdWVPckVsc2UCCQCfCAEFFndpdGhkcmF3RmVlUGVybWlsbGVLZXkAAAQDZmVlCQBoAgkAaQIFCnRvV2l0aGRyYXcA6AcFC3dpdGhkcmF3RmVlBApuZXdCYWxhbmNlCQBlAgUSY3VycmVudFVzZXJCYWxhbmNlCQBkAgUKdG9XaXRoZHJhdwUDZmVlBAxjaGVja0JhbGFuY2UDCQBnAgUKbmV3QmFsYW5jZQAABgkBCHRocm93RXJyAQIlU3dhcCBhbW91bnQgZmFpbCwgYW1vdW50IGlzIHRvIHNtYWxsLgMJAAACBQxjaGVja0JhbGFuY2UFDGNoZWNrQmFsYW5jZQQMY2hlY2tQYXltZW50AwkAZwIFCnRvV2l0aGRyYXcFEW1pbkFtb3VudFdpdGhkcmF3BgkBCHRocm93RXJyAQItVGhlIHdpdGhkcmF3IGFtb3VudCBpcyBsZXNzIHRoYW4gdGhlIG1pbmltdW0uAwkAAAIFDGNoZWNrUGF5bWVudAUMY2hlY2tQYXltZW50BAxjaGVja1Byb2Nlc3MDCQAAAgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEUa2V5UHJvY2Vzc0luUHJvZ3Jlc3MEBQt1c2VyQWRkcmVzcwUGYXNzZXRBBQZhc3NldEIFD2Fzc2V0TG9ja0hlaWdodAAAAAAGCQEIdGhyb3dFcnIBAjpBdCB0aGlzIGhlaWdodCwgdGhlcmUgaXMgYWxyZWFkeSBhbiBleGNoYW5nZSBvZiB0aGlzIHBhaXIuAwkAAAIFDGNoZWNrUHJvY2VzcwUMY2hlY2tQcm9jZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5QXNzZXRMb2NrVGltZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwUPYXNzZXRMb2NrSGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5QmFsYW5jZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwUKbmV3QmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVByb2Nlc3NJblByb2dyZXNzBAULdXNlckFkZHJlc3MFBmFzc2V0QQUGYXNzZXRCBQ9hc3NldExvY2tIZWlnaHQJAGUCBQp0b1dpdGhkcmF3BQNmZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJARxrZXlUb3RhbEZlZUNvbGxlY3RlZFdpdGhkcmF3AgUGYXNzZXRBBQZhc3NldEIJAGQCBRB0b3RhbENvbW1pc3Npb25zBQNmZWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ13aXRoZHJhd0Fzc2V0AwZhc3NldEEGYXNzZXRCC2hlaWdodEluS2V5BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIED2Fzc2V0TG9ja0hlaWdodAkBBXZhbHVlAQkAnwgBCQEQa2V5QXNzZXRMb2NrVGltZQMFBmFzc2V0QQUGYXNzZXRCBQt1c2VyQWRkcmVzcwQKdG9XaXRoZHJhdwkBBXZhbHVlAQkAnwgBCQEUa2V5UHJvY2Vzc0luUHJvZ3Jlc3MEBQt1c2VyQWRkcmVzcwUGYXNzZXRBBQZhc3NldEIFC2hlaWdodEluS2V5BAVhc3NldAkA2QQBCQEFdmFsdWUBBQZhc3NldEEEC2NoZWNrSGVpZ2h0AwkAZwIFBmhlaWdodAUPYXNzZXRMb2NrSGVpZ2h0BgkBCHRocm93RXJyAQkArAICCQCsAgICHVdpdGhkcmF3YWwgaXMgcG9zc2libGUgYWZ0ZXIgCQCkAwEFC2hlaWdodEluS2V5AiYgaGVpZ2h0IG9yIHlvdSBoYXZlIGFscmVhZHkgd2l0aGRyYXduLgMJAAACBQtjaGVja0hlaWdodAULY2hlY2tIZWlnaHQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVByb2Nlc3NJblByb2dyZXNzBAULdXNlckFkZHJlc3MFBmFzc2V0QQUGYXNzZXRCBQtoZWlnaHRJbktleQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVByb2Nlc3NEb25lBAULdXNlckFkZHJlc3MFBmFzc2V0QQUGYXNzZXRCBQtoZWlnaHRJbktleQUKdG9XaXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleUJhbGFuY2UDBQZhc3NldEEFBmFzc2V0QgULdXNlckFkZHJlc3MFCnRvV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp0b1dpdGhkcmF3BQVhc3NldAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC3dpdGhkcmF3RmVlAgZhc3NldEEGYXNzZXRCBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIEC3RvV2l0aGRyYXdBCQELdmFsdWVPckVsc2UCCQCfCAEJARtrZXlUb3RhbEZlZUNvbGxlY3RlZERlcG9zaXQCBQZhc3NldEEFBmFzc2V0QgAABA53aXRoZHJhd0Fzc2V0QQkA2QQBCQEFdmFsdWUBBQZhc3NldEEEC3RvV2l0aGRyYXdCCQELdmFsdWVPckVsc2UCCQCfCAEJARxrZXlUb3RhbEZlZUNvbGxlY3RlZFdpdGhkcmF3AgUGYXNzZXRBBQZhc3NldEIAAAQOd2l0aGRyYXdBc3NldEIJANkEAQkBBXZhbHVlAQUGYXNzZXRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5VG90YWxGZWVDb2xsZWN0ZWREZXBvc2l0AgUGYXNzZXRBBQZhc3NldEIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC3RvV2l0aGRyYXdBBQ53aXRoZHJhd0Fzc2V0QQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGtleVRvdGFsRmVlQ29sbGVjdGVkV2l0aGRyYXcCBQZhc3NldEEFBmFzc2V0QgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULdG9XaXRoZHJhd0IFDndpdGhkcmF3QXNzZXRCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFFWNoZWNrTWFuYWdlclB1YmxpY0tleQUVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAJwbQkBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQFaGFzUE0DCQEJaXNEZWZpbmVkAQUCcG0GCQEIdGhyb3dFcnIBAhJubyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUFaGFzUE0FBWhhc1BNBAdjaGVja1BNAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCcG0GCQEIdGhyb3dFcnIBAht5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUHY2hlY2tQTQUHY2hlY2tQTQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5TWFuYWdlclB1YmxpY0tleQAJANgEAQkBBXZhbHVlAQUCcG0JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5GttfWA==", "chainId": 84, "height": 2230413, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: zW2PW8MLZuACT52u9w7FsurykWxCiXKPVPGd8EJSTnC Next: 7bXPjVxo5UJkRzws11vR8Bc4rQNnx6Emo7JLHGRmnUK3 Diff:
OldNewDifferences
8282 }
8383
8484
85-func throwErr (msg) = throw(makeString(["otc_multiasset.ride:", msg], " "))
85+func fmtErr (msg) = makeString(["otc_multiasset.ride:", msg], " ")
86+
87+
88+func throwErr (msg) = throw(fmtErr(msg))
8689
8790
8891 @Callable(i)
109112 let assetA = toBase58String(value(payment.assetId))
110113 let asset = fromBase58String(value(assetB))
111114 let userAddress = toString(i.caller)
112- let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountDeposit(assetA, assetB)), "This asset pair does not exist.")
115+ let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountDeposit(assetA, assetB)), fmtErr("This asset pair does not exist."))
113116 let toDeposit = payment.amount
114117 let depositFee = valueOrElse(getInteger(keyDepositFeePermille(assetA, assetB)), 0)
115118 let fee = ((toDeposit / 1000) * depositFee)
121124 else throwErr("The couple's deposit is blocked.")
122125 if ((checkPairStatus == checkPairStatus))
123126 then {
124- let checkPayment = if ((toDeposit > minAmountDeposit))
127+ let checkPayment = if ((toDeposit >= minAmountDeposit))
125128 then true
126- else throwErr("Swap amount fail, amount is to small.")
129+ else throwErr("The deposit amount is less than the minimum.")
127130 if ((checkPayment == checkPayment))
128131 then {
129132 let newBalance = ((currentUserBalance + toDeposit) - fee)
130133 let checkBalance = if ((newBalance > 0))
131134 then true
132- else throwErr("Swap amount fail, amount is to small.")
135+ else throwErr("The final balance is less than or equal to 0.")
133136 if ((checkBalance == checkBalance))
134- then [IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), (totalCommissions + fee)), ScriptTransfer(i.caller, toDeposit, asset)]
137+ then [IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), (totalCommissions + fee)), ScriptTransfer(i.caller, (toDeposit - fee), asset)]
135138 else throw("Strict value is not equal to itself.")
136139 }
137140 else throw("Strict value is not equal to itself.")
144147 @Callable(i)
145148 func initializationSwapAssetsBToA (assetA) = {
146149 let payment = value(i.payments[0])
147- let amount = payment.amount
150+ let toWithdraw = payment.amount
148151 let assetB = toBase58String(value(payment.assetId))
149152 let userAddress = toString(i.caller)
150- let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountWithdraw(assetA, assetB)), "This asset pair does not exist.")
153+ let minAmountWithdraw = valueOrErrorMessage(getInteger(keyMinAmountWithdraw(assetA, assetB)), fmtErr("The minimum withdrawal amount for this pair of assets is not set."))
151154 let assetLockHeight = (height + valueOrElse(getInteger(keyWithdrawDelay(assetA, assetB)), 0))
152- let currentUserBalance = valueOrErrorMessage(getInteger(keyBalance(assetA, assetB, userAddress)), "This user balance does not exist.")
155+ let currentUserBalance = valueOrErrorMessage(getInteger(keyBalance(assetA, assetB, userAddress)), fmtErr("This user balance does not exist."))
153156 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
154157 let withdrawFeePermilleKey = keyWithdrawFeePermille(assetA, assetB)
155158 let withdrawFee = valueOrElse(getInteger(withdrawFeePermilleKey), 0)
156- let fee = ((amount / 1000) * withdrawFee)
157- let newBalance = ((currentUserBalance - amount) - fee)
158- let checkBalance = if ((newBalance > 0))
159+ let fee = ((toWithdraw / 1000) * withdrawFee)
160+ let newBalance = (currentUserBalance - (toWithdraw + fee))
161+ let checkBalance = if ((newBalance >= 0))
159162 then true
160163 else throwErr("Swap amount fail, amount is to small.")
161164 if ((checkBalance == checkBalance))
162165 then {
163- let checkProcess = if ((valueOrElse(getInteger(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight)), 0) == 0))
166+ let checkPayment = if ((toWithdraw >= minAmountWithdraw))
164167 then true
165- else throwErr("At this height, there is already an exchange of this pair.")
166- if ((checkProcess == checkProcess))
167- then [IntegerEntry(keyAssetLockTime(assetA, assetB, userAddress), assetLockHeight), IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight), (amount - fee)), IntegerEntry(keyTotalFeeCollectedWithdraw(assetA, assetB), (totalCommissions + fee))]
168+ else throwErr("The withdraw amount is less than the minimum.")
169+ if ((checkPayment == checkPayment))
170+ then {
171+ let checkProcess = if ((valueOrElse(getInteger(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight)), 0) == 0))
172+ then true
173+ else throwErr("At this height, there is already an exchange of this pair.")
174+ if ((checkProcess == checkProcess))
175+ 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))]
176+ else throw("Strict value is not equal to itself.")
177+ }
168178 else throw("Strict value is not equal to itself.")
169179 }
170180 else throw("Strict value is not equal to itself.")
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%s", "withdrawProcess", "inProgress", userAddress, assetA, assetB, toString(heightInKey)], SEP)
4343
4444
4545 func keyProcessDone (userAddress,assetA,assetB,heightInKey) = makeString(["%s%s%s%s%s%s", "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
85-func throwErr (msg) = throw(makeString(["otc_multiasset.ride:", msg], " "))
85+func fmtErr (msg) = makeString(["otc_multiasset.ride:", msg], " ")
86+
87+
88+func throwErr (msg) = throw(fmtErr(msg))
8689
8790
8891 @Callable(i)
8992 func registerAsset (assetA,assetB,withdrawDelay,depositFee,withdrawFee,minAmountDeposit,minAmountWithdraw,pairStatus) = {
9093 let checkCaller = mustManager(i)
9194 if ((checkCaller == checkCaller))
9295 then {
9396 let withdrawDelayKey = keyWithdrawDelay(assetA, assetB)
9497 let depositFeePermilleKey = keyDepositFeePermille(assetA, assetB)
9598 let withdrawFeePermilleKey = keyWithdrawFeePermille(assetA, assetB)
9699 let minAmountDepositKey = keyMinAmountDeposit(assetA, assetB)
97100 let minAmountWithdrawKey = keyMinAmountWithdraw(assetA, assetB)
98101 let pairStatusKey = keyAssetsPairStatus(assetA, assetB)
99102 [IntegerEntry(withdrawDelayKey, withdrawDelay), IntegerEntry(depositFeePermilleKey, depositFee), IntegerEntry(withdrawFeePermilleKey, withdrawFee), IntegerEntry(minAmountDepositKey, minAmountDeposit), IntegerEntry(minAmountWithdrawKey, minAmountWithdraw), IntegerEntry(pairStatusKey, pairStatus)]
100103 }
101104 else throw("Strict value is not equal to itself.")
102105 }
103106
104107
105108
106109 @Callable(i)
107110 func swapAssetsAToB (assetB) = {
108111 let payment = value(i.payments[0])
109112 let assetA = toBase58String(value(payment.assetId))
110113 let asset = fromBase58String(value(assetB))
111114 let userAddress = toString(i.caller)
112- let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountDeposit(assetA, assetB)), "This asset pair does not exist.")
115+ let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountDeposit(assetA, assetB)), fmtErr("This asset pair does not exist."))
113116 let toDeposit = payment.amount
114117 let depositFee = valueOrElse(getInteger(keyDepositFeePermille(assetA, assetB)), 0)
115118 let fee = ((toDeposit / 1000) * depositFee)
116119 let currentUserBalance = valueOrElse(getInteger(keyBalance(assetA, assetB, userAddress)), 0)
117120 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
118121 let pairStaus = value(getInteger(keyAssetsPairStatus(assetA, assetB)))
119122 let checkPairStatus = if ((pairStaus == 0))
120123 then true
121124 else throwErr("The couple's deposit is blocked.")
122125 if ((checkPairStatus == checkPairStatus))
123126 then {
124- let checkPayment = if ((toDeposit > minAmountDeposit))
127+ let checkPayment = if ((toDeposit >= minAmountDeposit))
125128 then true
126- else throwErr("Swap amount fail, amount is to small.")
129+ else throwErr("The deposit amount is less than the minimum.")
127130 if ((checkPayment == checkPayment))
128131 then {
129132 let newBalance = ((currentUserBalance + toDeposit) - fee)
130133 let checkBalance = if ((newBalance > 0))
131134 then true
132- else throwErr("Swap amount fail, amount is to small.")
135+ else throwErr("The final balance is less than or equal to 0.")
133136 if ((checkBalance == checkBalance))
134- then [IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), (totalCommissions + fee)), ScriptTransfer(i.caller, toDeposit, asset)]
137+ then [IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), (totalCommissions + fee)), ScriptTransfer(i.caller, (toDeposit - fee), asset)]
135138 else throw("Strict value is not equal to itself.")
136139 }
137140 else throw("Strict value is not equal to itself.")
138141 }
139142 else throw("Strict value is not equal to itself.")
140143 }
141144
142145
143146
144147 @Callable(i)
145148 func initializationSwapAssetsBToA (assetA) = {
146149 let payment = value(i.payments[0])
147- let amount = payment.amount
150+ let toWithdraw = payment.amount
148151 let assetB = toBase58String(value(payment.assetId))
149152 let userAddress = toString(i.caller)
150- let minAmountDeposit = valueOrErrorMessage(getInteger(keyMinAmountWithdraw(assetA, assetB)), "This asset pair does not exist.")
153+ let minAmountWithdraw = valueOrErrorMessage(getInteger(keyMinAmountWithdraw(assetA, assetB)), fmtErr("The minimum withdrawal amount for this pair of assets is not set."))
151154 let assetLockHeight = (height + valueOrElse(getInteger(keyWithdrawDelay(assetA, assetB)), 0))
152- let currentUserBalance = valueOrErrorMessage(getInteger(keyBalance(assetA, assetB, userAddress)), "This user balance does not exist.")
155+ let currentUserBalance = valueOrErrorMessage(getInteger(keyBalance(assetA, assetB, userAddress)), fmtErr("This user balance does not exist."))
153156 let totalCommissions = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
154157 let withdrawFeePermilleKey = keyWithdrawFeePermille(assetA, assetB)
155158 let withdrawFee = valueOrElse(getInteger(withdrawFeePermilleKey), 0)
156- let fee = ((amount / 1000) * withdrawFee)
157- let newBalance = ((currentUserBalance - amount) - fee)
158- let checkBalance = if ((newBalance > 0))
159+ let fee = ((toWithdraw / 1000) * withdrawFee)
160+ let newBalance = (currentUserBalance - (toWithdraw + fee))
161+ let checkBalance = if ((newBalance >= 0))
159162 then true
160163 else throwErr("Swap amount fail, amount is to small.")
161164 if ((checkBalance == checkBalance))
162165 then {
163- let checkProcess = if ((valueOrElse(getInteger(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight)), 0) == 0))
166+ let checkPayment = if ((toWithdraw >= minAmountWithdraw))
164167 then true
165- else throwErr("At this height, there is already an exchange of this pair.")
166- if ((checkProcess == checkProcess))
167- then [IntegerEntry(keyAssetLockTime(assetA, assetB, userAddress), assetLockHeight), IntegerEntry(keyBalance(assetA, assetB, userAddress), newBalance), IntegerEntry(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight), (amount - fee)), IntegerEntry(keyTotalFeeCollectedWithdraw(assetA, assetB), (totalCommissions + fee))]
168+ else throwErr("The withdraw amount is less than the minimum.")
169+ if ((checkPayment == checkPayment))
170+ then {
171+ let checkProcess = if ((valueOrElse(getInteger(keyProcessInProgress(userAddress, assetA, assetB, assetLockHeight)), 0) == 0))
172+ then true
173+ else throwErr("At this height, there is already an exchange of this pair.")
174+ if ((checkProcess == checkProcess))
175+ 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))]
176+ else throw("Strict value is not equal to itself.")
177+ }
168178 else throw("Strict value is not equal to itself.")
169179 }
170180 else throw("Strict value is not equal to itself.")
171181 }
172182
173183
174184
175185 @Callable(i)
176186 func withdrawAsset (assetA,assetB,heightInKey) = {
177187 let userAddress = toString(i.caller)
178188 let assetLockHeight = value(getInteger(keyAssetLockTime(assetA, assetB, userAddress)))
179189 let toWithdraw = value(getInteger(keyProcessInProgress(userAddress, assetA, assetB, heightInKey)))
180190 let asset = fromBase58String(value(assetA))
181191 let checkHeight = if ((height >= assetLockHeight))
182192 then true
183193 else throwErr((("Withdrawal is possible after " + toString(heightInKey)) + " height or you have already withdrawn."))
184194 if ((checkHeight == checkHeight))
185195 then [DeleteEntry(keyProcessInProgress(userAddress, assetA, assetB, heightInKey)), IntegerEntry(keyProcessDone(userAddress, assetA, assetB, heightInKey), toWithdraw), IntegerEntry(keyBalance(assetA, assetB, userAddress), toWithdraw), ScriptTransfer(i.caller, toWithdraw, asset)]
186196 else throw("Strict value is not equal to itself.")
187197 }
188198
189199
190200
191201 @Callable(i)
192202 func withdrawFee (assetA,assetB) = {
193203 let checkCaller = mustManager(i)
194204 if ((checkCaller == checkCaller))
195205 then {
196206 let toWithdrawA = valueOrElse(getInteger(keyTotalFeeCollectedDeposit(assetA, assetB)), 0)
197207 let withdrawAssetA = fromBase58String(value(assetA))
198208 let toWithdrawB = valueOrElse(getInteger(keyTotalFeeCollectedWithdraw(assetA, assetB)), 0)
199209 let withdrawAssetB = fromBase58String(value(assetB))
200210 [IntegerEntry(keyTotalFeeCollectedDeposit(assetA, assetB), 0), ScriptTransfer(i.caller, toWithdrawA, withdrawAssetA), IntegerEntry(keyTotalFeeCollectedWithdraw(assetA, assetB), 0), ScriptTransfer(i.caller, toWithdrawB, withdrawAssetB)]
201211 }
202212 else throw("Strict value is not equal to itself.")
203213 }
204214
205215
206216
207217 @Callable(i)
208218 func setManager (pendingManagerPublicKey) = {
209219 let checkCaller = mustManager(i)
210220 if ((checkCaller == checkCaller))
211221 then {
212222 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
213223 if ((checkManagerPublicKey == checkManagerPublicKey))
214224 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
215225 else throw("Strict value is not equal to itself.")
216226 }
217227 else throw("Strict value is not equal to itself.")
218228 }
219229
220230
221231
222232 @Callable(i)
223233 func confirmManager () = {
224234 let pm = pendingManagerPublicKeyOrUnit()
225235 let hasPM = if (isDefined(pm))
226236 then true
227237 else throwErr("no pending manager")
228238 if ((hasPM == hasPM))
229239 then {
230240 let checkPM = if ((i.callerPublicKey == value(pm)))
231241 then true
232242 else throwErr("you are not pending manager")
233243 if ((checkPM == checkPM))
234244 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
235245 else throw("Strict value is not equal to itself.")
236246 }
237247 else throw("Strict value is not equal to itself.")
238248 }
239249
240250
241251 @Verifier(tx)
242252 func verify () = {
243253 let targetPublicKey = match managerPublicKeyOrUnit() {
244254 case pk: ByteVector =>
245255 pk
246256 case _: Unit =>
247257 tx.senderPublicKey
248258 case _ =>
249259 throw("Match error")
250260 }
251261 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
252262 }
253263

github/deemru/w8io/873ac7e 
64.34 ms