tx · 4WfcWHydpHTkamJRcjFYqCuNnNnFwibADpjg9YRuzRc7

3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U:  -0.01300000 Waves

2022.07.22 10:50 [2150700] smart account 3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U > SELF 0.00000000 Waves

{ "type": 13, "id": "4WfcWHydpHTkamJRcjFYqCuNnNnFwibADpjg9YRuzRc7", "fee": 1300000, "feeAssetId": null, "timestamp": 1658476250268, "version": 1, "sender": "3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U", "senderPublicKey": "8E1ZoUTJyyA7ybXtP2NxUZKdAwvR1ruiQUxZD2bYJJMF", "proofs": [ "3Dem7JzF3PohyEx4HRo8u2DwmDnC8grwHCGL2iDWLARXdpiVawrfnB7wybcqdEp7wjnbMtSCzThMH9Cft4gnEggz" ], "script": "base64:BgIyCAISAwoBARIDCgEBEgMKAQESAwoBARIDCgEBEgQKAggIEgASABIECgIBARIDCgEIEgAdAA9kZWNpbWFsUGFydFVTRE4AwIQ9AA9kZWNpbWFsUGFydFVTRFQAwIQ9ARBrZXlXaXRoZHJhd0RlbGF5AAIRJXNfX3dpdGhkcmF3RGVsYXkBDXdpdGhkcmF3RGVsYXkACQEFdmFsdWUBCQCfCAEJARBrZXlXaXRoZHJhd0RlbGF5AAEaa2V5TWluaW1hbEFtb3VudFRvU3dhcFVzZHQAAhslc19fbWluaW1hbEFtb3VudFRvU3dhcFVzZHQBGmtleU1pbmltYWxBbW91bnRUb1N3YXBVc2RuAAIbJXNfX21pbmltYWxBbW91bnRUb1N3YXBVc2RuAQdtaW5Vc2R0AAkBBXZhbHVlAQkAnwgBCQEaa2V5TWluaW1hbEFtb3VudFRvU3dhcFVzZHQAAQdtaW5Vc2RuAAkBBXZhbHVlAQkAnwgBCQEaa2V5TWluaW1hbEFtb3VudFRvU3dhcFVzZG4AARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQ5rZXlVc2R0QXNzZXRJZAACDyVzX191c2R0QXNzZXRJZAEOa2V5VXNkbkFzc2V0SWQAAg8lc19fdXNkbkFzc2V0SWQBDWtleURlcG9zaXRGZWUAAg4lc19fZGVwb3NpdEZlZQEOa2V5V2l0aGRyYXdGZWUAAg8lc19fd2l0aGRyYXdGZWUBBHVzZHQACQDZBAEJAQV2YWx1ZQEJAKIIAQkBDmtleVVzZHRBc3NldElkAAEEdXNkbgAJANkEAQkBBXZhbHVlAQkAoggBCQEOa2V5VXNkbkFzc2V0SWQAARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAQHJG1hdGNoMAkAoggBCQETa2V5TWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAR1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJANkEAQUBcwMJAAECBQckbWF0Y2gwAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBCmNvbGxlY3RLZXkDB2FkZHJlc3MRYW1vdW50VG9Td2FwSW5LZXkVYWxsb3dUb1dpdGhkcmF3SGVpZ2h0CQC5CQIJAMwIAgUHYWRkcmVzcwkAzAgCAghXSVRIRFJBVwkAzAgCCQCkAwEFEWFtb3VudFRvU3dhcEluS2V5CQDMCAICBkhFSUdIVAkAzAgCCQCkAwEFFWFsbG93VG9XaXRoZHJhd0hlaWdodAUDbmlsAgFfARFjb2xsZWN0QmFsYW5jZUtleQEHYWRkcmVzcwkAuQkCCQDMCAIFB2FkZHJlc3MJAMwIAgIHYmFsYW5jZQUDbmlsAgFfARhjb2xsZWN0QmFsYW5jZUtleVdpdGhGZWUBB2FkZHJlc3MJALkJAgkAzAgCBQdhZGRyZXNzCQDMCAICEGJhbGFuY2Vfd2l0aF9mZWUFA25pbAIBXwEUdXNkdFRvVXNkbkFzc2V0RXJyb3IACQACAQI0VG8gc3dhcCBVU0RUIHRvIFVTRE4geW91IG5lZWQgYXR0YWNoIHBheW1lbnQgaW4gVVNEVAEUdXNkblRvVXNkdEFzc2V0RXJyb3IACQACAQI0VG8gc3dhcCBVU0ROIHRvIFVTRFQgeW91IG5lZWQgYXR0YWNoIHBheW1lbnQgaW4gVVNETgEXdXNkdFRvVXNkbkxvd0xpbWl0RXJyb3IACQACAQkArAICCQCsAgICFnlvdSBjYW4gc3dhcCBhdCBsZWFzdCAJAKQDAQkAaQIJAQdtaW5Vc2R0AAUPZGVjaW1hbFBhcnRVU0RUAgcgdG9rZW5zAQNhYnMBAW4DCQBmAgAABQFuCQBoAgUBbgD///////////8BBQFuARVnZXRXaXRob3V0RmVlV2l0aGRyYXcCBmFtb3VudBFiYWxhbmNlV2l0aG91dEZlZQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCBRFiYWxhbmNlV2l0aG91dEZlZQUDbmlsARdnZXRMaXN0RWxlbWVudE9yRGVmYXVsdAMEbGlzdAVpbmRleAdkZWZhdWx0AwkAZgIJAJADAQUEbGlzdAUFaW5kZXgJAJEDAgUEbGlzdAUFaW5kZXgFB2RlZmF1bHQBEmN1cnJlbnRXaXRoZHJhd2FscwIHYWRkcmVzcwZhbW91bnQECmJhbGFuY2VLZXkJARFjb2xsZWN0QmFsYW5jZUtleQEFB2FkZHJlc3MEEWJhbGFuY2VXaXRoRmVlS2V5CQEYY29sbGVjdEJhbGFuY2VLZXlXaXRoRmVlAQUHYWRkcmVzcwQUY3VycmVudENsaWVudEJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKYmFsYW5jZUtleQAABBtjdXJyZW50Q2xpZW50QmFsYW5jZVdpdGhGZWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURYmFsYW5jZVdpdGhGZWVLZXkAAAQLdXNlckJhbGFuY2UJAGQCBRRjdXJyZW50Q2xpZW50QmFsYW5jZQUbY3VycmVudENsaWVudEJhbGFuY2VXaXRoRmVlAwMJAGYCBQZhbW91bnQFC3VzZXJCYWxhbmNlBgkAZgIJAQdtaW5Vc2RuAAUGYW1vdW50CQACAQIvU3dhcCBhbW91bnQgZmFpbCwgYW1vdW50IGlzIHRvIHNtYWxsIG9yIHRvIGJpZy4EFHRvV2l0aGRyYXdXaXRob3V0RmVlCQEVZ2V0V2l0aG91dEZlZVdpdGhkcmF3AgUGYW1vdW50BRRjdXJyZW50Q2xpZW50QmFsYW5jZQQRdG9XaXRoZHJhd1dpdGhGZWUJAGUCBQZhbW91bnQFFHRvV2l0aGRyYXdXaXRob3V0RmVlBANmZWUJAGgCCQBpAgURdG9XaXRoZHJhd1dpdGhGZWUAZAkBBXZhbHVlAQkAnwgBCQEOa2V5V2l0aGRyYXdGZWUACQDMCAIFFHRvV2l0aGRyYXdXaXRob3V0RmVlCQDMCAIFEXRvV2l0aGRyYXdXaXRoRmVlCQDMCAIFA2ZlZQUDbmlsAQttdXN0TWFuYWdlcgEBaQQCcGQJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQHJG1hdGNoMAkBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQUCcGsGBQJwZAMJAAECBQckbWF0Y2gwAgRVbml0AwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYFAnBkCQACAQILTWF0Y2ggZXJyb3ILAWkBEHNldFdpdGhkcmF3RGVsYXkBEG5ld1dpdGhkcmF3RGVsYXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleVdpdGhkcmF3RGVsYXkABRBuZXdXaXRoZHJhd0RlbGF5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEac2V0TWluaW1hbEFtb3VudFRvU3dhcFVzZHQBEG5ld01pbmltYWxBbW91bnQEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleU1pbmltYWxBbW91bnRUb1N3YXBVc2R0AAUQbmV3TWluaW1hbEFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGnNldE1pbmltYWxBbW91bnRUb1N3YXBVc2RuARBuZXdNaW5pbWFsQW1vdW50BAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlNaW5pbWFsQW1vdW50VG9Td2FwVXNkbgAFEG5ld01pbmltYWxBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5zZXRXaXRoZHJhd0ZlZQEGbmV3RmVlBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlXaXRoZHJhd0ZlZQAFBm5ld0ZlZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDXNldERlcG9zaXRGZWUBBm5ld0ZlZQQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RGVwb3NpdEZlZQAFBm5ld0ZlZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2NvbnN0cnVjdG9yAgt1c2R0QXNzZXRJZAt1c2RuQXNzZXRJZAQLY2hlY2tDYWxsZXIJAQttdXN0TWFuYWdlcgEFAWkDCQAAAgULY2hlY2tDYWxsZXIFC2NoZWNrQ2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlVc2R0QXNzZXRJZAAFC3VzZHRBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlVc2RuQXNzZXRJZAAFC3VzZG5Bc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4GaW52b2tlAQ5zd2FwVVNEVHRvVVNETgAECmJhbGFuY2VLZXkJARhjb2xsZWN0QmFsYW5jZUtleVdpdGhGZWUBCQClCAEIBQZpbnZva2UGY2FsbGVyBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQZpbnZva2UIcGF5bWVudHMAAAMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQJAQR1c2R0AAkBFHVzZHRUb1VzZG5Bc3NldEVycm9yAAQGYW1vdW50CAUHcGF5bWVudAZhbW91bnQEA2ZlZQkAaAIJAGkCBQZhbW91bnQAZAkBBXZhbHVlAQkAnwgBCQENa2V5RGVwb3NpdEZlZQAEGGN1cnJlbnRDbGllbnRCYWxhbmNlVVNEVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQpiYWxhbmNlS2V5AAADCQBmAgkBB21pblVzZHQABQZhbW91bnQJARd1c2R0VG9Vc2RuTG93TGltaXRFcnJvcgAJAMwIAgkBDEludGVnZXJFbnRyeQIFCmJhbGFuY2VLZXkJAGQCBRhjdXJyZW50Q2xpZW50QmFsYW5jZVVTRFQFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUGaW52b2tlBmNhbGxlcgkAZQIFBmFtb3VudAUDZmVlCQEEdXNkbgAFA25pbAZpbnZva2UBHGluaXRpYWxpemF0aW9uVVNETnRvVVNEVHN3YXAABAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQZpbnZva2UIcGF5bWVudHMAAAQHYWRkcmVzcwkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQIhPQIIBQdwYXltZW50B2Fzc2V0SWQJAQR1c2RuAAkBFHVzZG5Ub1VzZHRBc3NldEVycm9yAAQGYW1vdW50CAUHcGF5bWVudAZhbW91bnQECmJhbGFuY2VLZXkJARFjb2xsZWN0QmFsYW5jZUtleQEFB2FkZHJlc3MEEWJhbGFuY2VXaXRoRmVlS2V5CQEYY29sbGVjdEJhbGFuY2VLZXlXaXRoRmVlAQUHYWRkcmVzcwQUY3VycmVudENsaWVudEJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKYmFsYW5jZUtleQAABBtjdXJyZW50Q2xpZW50QmFsYW5jZVdpdGhGZWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURYmFsYW5jZVdpdGhGZWVLZXkAAAQLdXNlckJhbGFuY2UJAGQCBRRjdXJyZW50Q2xpZW50QmFsYW5jZQUbY3VycmVudENsaWVudEJhbGFuY2VXaXRoRmVlBARkYXRhCQESY3VycmVudFdpdGhkcmF3YWxzAgkApQgBCAUGaW52b2tlBmNhbGxlcgUGYW1vdW50BBR0b1dpdGhkcmF3V2l0aG91dEZlZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCRAwIFBGRhdGEAAAIiV3JvbmcgJ2N1cnJlbnRXaXRoZHJhd2FscycgbWV0aG9kIQQRdG9XaXRoZHJhd1dpdGhGZWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAkQMCBQRkYXRhAAECIldyb25nICdjdXJyZW50V2l0aGRyYXdhbHMnIG1ldGhvZCEEA2ZlZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCRAwIFBGRhdGEAAgIiV3JvbmcgJ2N1cnJlbnRXaXRoZHJhd2FscycgbWV0aG9kIQQFdG90YWwJAGUCCQBkAgURdG9XaXRoZHJhd1dpdGhGZWUFFHRvV2l0aGRyYXdXaXRob3V0RmVlBQNmZWUEFWFsbG93VG9XaXRoRHJhd0hlaWdodAkAZAIFBmhlaWdodAkBDXdpdGhkcmF3RGVsYXkAAwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBCmNvbGxlY3RLZXkDCQClCAEIBQZpbnZva2UGY2FsbGVyBQZhbW91bnQFFWFsbG93VG9XaXRoRHJhd0hlaWdodAkAAgECPVlvdSBoYXZlIGFscmVhZHkgc3RhcnRlZCB3aXRoZHJhd2FsIHByb2Nlc3MsIHdhaXQgbmV4dCBibG9jay4JAMwIAgkBDEludGVnZXJFbnRyeQIFCmJhbGFuY2VLZXkJAGUCBRRjdXJyZW50Q2xpZW50QmFsYW5jZQUUdG9XaXRoZHJhd1dpdGhvdXRGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWJhbGFuY2VXaXRoRmVlS2V5CQBlAgUbY3VycmVudENsaWVudEJhbGFuY2VXaXRoRmVlBRF0b1dpdGhkcmF3V2l0aEZlZQkAzAgCCQELU3RyaW5nRW50cnkCCQEKY29sbGVjdEtleQMJAKUIAQgFBmludm9rZQZjYWxsZXIFBmFtb3VudAUVYWxsb3dUb1dpdGhEcmF3SGVpZ2h0CQC5CQIJAMwIAgINbm90X3dpdGhkcmF3bgkAzAgCCQCkAwEJAGUCBQZhbW91bnQFA2ZlZQUDbmlsAgFfBQNuaWwGaW52b2tlAQ5zd2FwVVNETnRvVVNEVAIGYW1vdW50C2hlaWdodEluS2V5BANrZXkJAQpjb2xsZWN0S2V5AwkApQgBCAUGaW52b2tlBmNhbGxlcgUGYW1vdW50BQtoZWlnaHRJbktleQQNd2l0aGRyYXduSW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICCQCsAgIJAKwCAgIYVGhpcyBrZXkgZG9lc24ndCBleGlzdHMgBQNrZXkCDSBhdCBhZGRyZXNzICAJAKUIAQUEdGhpcwQKdG9XaXRoZHJhdwkBF2dldExpc3RFbGVtZW50T3JEZWZhdWx0AwkAtQkCBQ13aXRoZHJhd25JbmZvAgFfAAIJAKQDAQUGYW1vdW50AwMJAGcCBQZoZWlnaHQFC2hlaWdodEluS2V5CQEIY29udGFpbnMCBQ13aXRoZHJhd25JbmZvAg1ub3Rfd2l0aGRyYXduBwkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFBmludm9rZQZjYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQp0b1dpdGhkcmF3AhRXcm9uZyB3aXRoZHJhdyBkYXRhIQkBBHVzZHQABQNuaWwJAAIBCQCsAgIJAKwCAgIdV2l0aGRyYXdhbCBpcyBwb3NzaWJsZSBhZnRlciAJAKQDAQULaGVpZ2h0SW5LZXkCKyBoZWlnaHQgb3IgeW91IGhhdmUgYWxyZWFkeSB3aXRoZHJhd24gVVNEVC4BaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFFWNoZWNrTWFuYWdlclB1YmxpY0tleQUVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAJwbQkBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQFaGFzUE0DCQEJaXNEZWZpbmVkAQUCcG0GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFBWhhc1BNBQVoYXNQTQQHY2hlY2tQTQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAnBtBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQdjaGVja1BNBQdjaGVja1BNCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlNYW5hZ2VyUHVibGljS2V5AAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXnjqRI8", "chainId": 84, "height": 2150700, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AKQ6cD67p5XycYGToaPcc77SuK4B8L6dX6Efz9CGJooP Next: BgAWhTVAB8txyCkXQynBZC4vz46AgD4QrHb5Pw4yU2kt Diff:
OldNewDifferences
8282 func usdnToUsdtAssetError () = throw("To swap USDN to USDT you need attach payment in USDN")
8383
8484
85-func usdtToUsdnLowLimitError () = throw((("you can swap at least " + toString((value(getInteger(keyMinimalAmountToSwapUsdt())) / decimalPartUSDT))) + " tokens"))
85+func usdtToUsdnLowLimitError () = throw((("you can swap at least " + toString((minUsdt() / decimalPartUSDT))) + " tokens"))
8686
8787
8888 func abs (n) = if ((0 > n))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let decimalPartUSDN = 1000000
55
66 let decimalPartUSDT = 1000000
77
88 func keyWithdrawDelay () = "%s__withdrawDelay"
99
1010
1111 func withdrawDelay () = value(getInteger(keyWithdrawDelay()))
1212
1313
1414 func keyMinimalAmountToSwapUsdt () = "%s__minimalAmountToSwapUsdt"
1515
1616
1717 func keyMinimalAmountToSwapUsdn () = "%s__minimalAmountToSwapUsdn"
1818
1919
2020 func minUsdt () = value(getInteger(keyMinimalAmountToSwapUsdt()))
2121
2222
2323 func minUsdn () = value(getInteger(keyMinimalAmountToSwapUsdn()))
2424
2525
2626 func keyManagerPublicKey () = "%s__managerPublicKey"
2727
2828
2929 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
3030
3131
3232 func keyUsdtAssetId () = "%s__usdtAssetId"
3333
3434
3535 func keyUsdnAssetId () = "%s__usdnAssetId"
3636
3737
3838 func keyDepositFee () = "%s__depositFee"
3939
4040
4141 func keyWithdrawFee () = "%s__withdrawFee"
4242
4343
4444 func usdt () = fromBase58String(value(getString(keyUsdtAssetId())))
4545
4646
4747 func usdn () = fromBase58String(value(getString(keyUsdnAssetId())))
4848
4949
5050 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
5151 case s: String =>
5252 fromBase58String(s)
5353 case _: Unit =>
5454 unit
5555 case _ =>
5656 throw("Match error")
5757 }
5858
5959
6060 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
6161 case s: String =>
6262 fromBase58String(s)
6363 case _: Unit =>
6464 unit
6565 case _ =>
6666 throw("Match error")
6767 }
6868
6969
7070 func collectKey (address,amountToSwapInKey,allowToWithdrawHeight) = makeString([address, "WITHDRAW", toString(amountToSwapInKey), "HEIGHT", toString(allowToWithdrawHeight)], "_")
7171
7272
7373 func collectBalanceKey (address) = makeString([address, "balance"], "_")
7474
7575
7676 func collectBalanceKeyWithFee (address) = makeString([address, "balance_with_fee"], "_")
7777
7878
7979 func usdtToUsdnAssetError () = throw("To swap USDT to USDN you need attach payment in USDT")
8080
8181
8282 func usdnToUsdtAssetError () = throw("To swap USDN to USDT you need attach payment in USDN")
8383
8484
85-func usdtToUsdnLowLimitError () = throw((("you can swap at least " + toString((value(getInteger(keyMinimalAmountToSwapUsdt())) / decimalPartUSDT))) + " tokens"))
85+func usdtToUsdnLowLimitError () = throw((("you can swap at least " + toString((minUsdt() / decimalPartUSDT))) + " tokens"))
8686
8787
8888 func abs (n) = if ((0 > n))
8989 then (n * -1)
9090 else n
9191
9292
9393 func getWithoutFeeWithdraw (amount,balanceWithoutFee) = min([amount, balanceWithoutFee])
9494
9595
9696 func getListElementOrDefault (list,index,default) = if ((size(list) > index))
9797 then list[index]
9898 else default
9999
100100
101101 func currentWithdrawals (address,amount) = {
102102 let balanceKey = collectBalanceKey(address)
103103 let balanceWithFeeKey = collectBalanceKeyWithFee(address)
104104 let currentClientBalance = valueOrElse(getInteger(this, balanceKey), 0)
105105 let currentClientBalanceWithFee = valueOrElse(getInteger(this, balanceWithFeeKey), 0)
106106 let userBalance = (currentClientBalance + currentClientBalanceWithFee)
107107 if (if ((amount > userBalance))
108108 then true
109109 else (minUsdn() > amount))
110110 then throw("Swap amount fail, amount is to small or to big.")
111111 else {
112112 let toWithdrawWithoutFee = getWithoutFeeWithdraw(amount, currentClientBalance)
113113 let toWithdrawWithFee = (amount - toWithdrawWithoutFee)
114114 let fee = ((toWithdrawWithFee / 100) * value(getInteger(keyWithdrawFee())))
115115 [toWithdrawWithoutFee, toWithdrawWithFee, fee]
116116 }
117117 }
118118
119119
120120 func mustManager (i) = {
121121 let pd = throw("Permission denied")
122122 match managerPublicKeyOrUnit() {
123123 case pk: ByteVector =>
124124 if ((i.callerPublicKey == pk))
125125 then true
126126 else pd
127127 case _: Unit =>
128128 if ((i.caller == this))
129129 then true
130130 else pd
131131 case _ =>
132132 throw("Match error")
133133 }
134134 }
135135
136136
137137 @Callable(i)
138138 func setWithdrawDelay (newWithdrawDelay) = {
139139 let checkCaller = mustManager(i)
140140 if ((checkCaller == checkCaller))
141141 then [IntegerEntry(keyWithdrawDelay(), newWithdrawDelay)]
142142 else throw("Strict value is not equal to itself.")
143143 }
144144
145145
146146
147147 @Callable(i)
148148 func setMinimalAmountToSwapUsdt (newMinimalAmount) = {
149149 let checkCaller = mustManager(i)
150150 if ((checkCaller == checkCaller))
151151 then [IntegerEntry(keyMinimalAmountToSwapUsdt(), newMinimalAmount)]
152152 else throw("Strict value is not equal to itself.")
153153 }
154154
155155
156156
157157 @Callable(i)
158158 func setMinimalAmountToSwapUsdn (newMinimalAmount) = {
159159 let checkCaller = mustManager(i)
160160 if ((checkCaller == checkCaller))
161161 then [IntegerEntry(keyMinimalAmountToSwapUsdn(), newMinimalAmount)]
162162 else throw("Strict value is not equal to itself.")
163163 }
164164
165165
166166
167167 @Callable(i)
168168 func setWithdrawFee (newFee) = {
169169 let checkCaller = mustManager(i)
170170 if ((checkCaller == checkCaller))
171171 then [IntegerEntry(keyWithdrawFee(), newFee)]
172172 else throw("Strict value is not equal to itself.")
173173 }
174174
175175
176176
177177 @Callable(i)
178178 func setDepositFee (newFee) = {
179179 let checkCaller = mustManager(i)
180180 if ((checkCaller == checkCaller))
181181 then [IntegerEntry(keyDepositFee(), newFee)]
182182 else throw("Strict value is not equal to itself.")
183183 }
184184
185185
186186
187187 @Callable(i)
188188 func constructor (usdtAssetId,usdnAssetId) = {
189189 let checkCaller = mustManager(i)
190190 if ((checkCaller == checkCaller))
191191 then [StringEntry(keyUsdtAssetId(), usdtAssetId), StringEntry(keyUsdnAssetId(), usdnAssetId)]
192192 else throw("Strict value is not equal to itself.")
193193 }
194194
195195
196196
197197 @Callable(invoke)
198198 func swapUSDTtoUSDN () = {
199199 let balanceKey = collectBalanceKeyWithFee(toString(invoke.caller))
200200 let payment = value(invoke.payments[0])
201201 if ((payment.assetId != usdt()))
202202 then usdtToUsdnAssetError()
203203 else {
204204 let amount = payment.amount
205205 let fee = ((amount / 100) * value(getInteger(keyDepositFee())))
206206 let currentClientBalanceUSDT = valueOrElse(getInteger(this, balanceKey), 0)
207207 if ((minUsdt() > amount))
208208 then usdtToUsdnLowLimitError()
209209 else [IntegerEntry(balanceKey, (currentClientBalanceUSDT + amount)), ScriptTransfer(invoke.caller, (amount - fee), usdn())]
210210 }
211211 }
212212
213213
214214
215215 @Callable(invoke)
216216 func initializationUSDNtoUSDTswap () = {
217217 let payment = value(invoke.payments[0])
218218 let address = toString(invoke.caller)
219219 if ((payment.assetId != usdn()))
220220 then usdnToUsdtAssetError()
221221 else {
222222 let amount = payment.amount
223223 let balanceKey = collectBalanceKey(address)
224224 let balanceWithFeeKey = collectBalanceKeyWithFee(address)
225225 let currentClientBalance = valueOrElse(getInteger(this, balanceKey), 0)
226226 let currentClientBalanceWithFee = valueOrElse(getInteger(this, balanceWithFeeKey), 0)
227227 let userBalance = (currentClientBalance + currentClientBalanceWithFee)
228228 let data = currentWithdrawals(toString(invoke.caller), amount)
229229 let toWithdrawWithoutFee = valueOrErrorMessage(data[0], "Wrong 'currentWithdrawals' method!")
230230 let toWithdrawWithFee = valueOrErrorMessage(data[1], "Wrong 'currentWithdrawals' method!")
231231 let fee = valueOrErrorMessage(data[2], "Wrong 'currentWithdrawals' method!")
232232 let total = ((toWithdrawWithFee + toWithdrawWithoutFee) - fee)
233233 let allowToWithDrawHeight = (height + withdrawDelay())
234234 if (isDefined(getString(this, collectKey(toString(invoke.caller), amount, allowToWithDrawHeight))))
235235 then throw("You have already started withdrawal process, wait next block.")
236236 else [IntegerEntry(balanceKey, (currentClientBalance - toWithdrawWithoutFee)), IntegerEntry(balanceWithFeeKey, (currentClientBalanceWithFee - toWithdrawWithFee)), StringEntry(collectKey(toString(invoke.caller), amount, allowToWithDrawHeight), makeString(["not_withdrawn", toString((amount - fee))], "_"))]
237237 }
238238 }
239239
240240
241241
242242 @Callable(invoke)
243243 func swapUSDNtoUSDT (amount,heightInKey) = {
244244 let key = collectKey(toString(invoke.caller), amount, heightInKey)
245245 let withdrawnInfo = valueOrErrorMessage(getString(this, key), ((("This key doesn't exists " + key) + " at address ") + toString(this)))
246246 let toWithdraw = getListElementOrDefault(split(withdrawnInfo, "_"), 2, toString(amount))
247247 if (if ((height >= heightInKey))
248248 then contains(withdrawnInfo, "not_withdrawn")
249249 else false)
250250 then [DeleteEntry(key), ScriptTransfer(invoke.caller, valueOrErrorMessage(parseInt(toWithdraw), "Wrong withdraw data!"), usdt())]
251251 else throw((("Withdrawal is possible after " + toString(heightInKey)) + " height or you have already withdrawn USDT."))
252252 }
253253
254254
255255
256256 @Callable(i)
257257 func setManager (pendingManagerPublicKey) = {
258258 let checkCaller = mustManager(i)
259259 if ((checkCaller == checkCaller))
260260 then {
261261 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
262262 if ((checkManagerPublicKey == checkManagerPublicKey))
263263 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
264264 else throw("Strict value is not equal to itself.")
265265 }
266266 else throw("Strict value is not equal to itself.")
267267 }
268268
269269
270270
271271 @Callable(i)
272272 func confirmManager () = {
273273 let pm = pendingManagerPublicKeyOrUnit()
274274 let hasPM = if (isDefined(pm))
275275 then true
276276 else throw("No pending manager")
277277 if ((hasPM == hasPM))
278278 then {
279279 let checkPM = if ((i.callerPublicKey == value(pm)))
280280 then true
281281 else throw("You are not pending manager")
282282 if ((checkPM == checkPM))
283283 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
284284 else throw("Strict value is not equal to itself.")
285285 }
286286 else throw("Strict value is not equal to itself.")
287287 }
288288
289289
290290 @Verifier(tx)
291291 func verify () = {
292292 let targetPublicKey = match managerPublicKeyOrUnit() {
293293 case pk: ByteVector =>
294294 pk
295295 case _: Unit =>
296296 tx.senderPublicKey
297297 case _ =>
298298 throw("Match error")
299299 }
300300 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
301301 }
302302

github/deemru/w8io/169f3d6 
37.13 ms