tx · GNg83bYGYeVzNGCTkkY5pfv9w4gmXSSSj9hstpHakDgi

3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U:  -0.01300000 Waves

2022.07.19 18:33 [2146821] smart account 3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U > SELF 0.00000000 Waves

{ "type": 13, "id": "GNg83bYGYeVzNGCTkkY5pfv9w4gmXSSSj9hstpHakDgi", "fee": 1300000, "feeAssetId": null, "timestamp": 1658244845153, "version": 1, "sender": "3Mzj8MyE3E3G55SLVE6Dgd6ew2uERLxiE4U", "senderPublicKey": "8E1ZoUTJyyA7ybXtP2NxUZKdAwvR1ruiQUxZD2bYJJMF", "proofs": [ "464E5Fum1ypuJjczmNH9RdZUYMtQPYaWBKr9i6sMWfSAXaxcNvRxna1H9TT9iTduJ8ZQ3VCYenrxbDi1552rZU5k" ], "script": "base64:BgIZCAISBAoCCAgSABIAEgQKAgEBEgMKAQgSABYADXdpdGhkcmF3RGVsYXkAtAsAD2RlY2ltYWxQYXJ0VVNETgDAhD0AD2RlY2ltYWxQYXJ0VVNEVADAhD0AF21pbmltYWxBbW91bnRUb1N3YXBVU0RUCQBoAgCQTgUPZGVjaW1hbFBhcnRVU0ROABdtaW5pbWFsQW1vdW50VG9Td2FwVVNETgkAaAIAkE4FD2RlY2ltYWxQYXJ0VVNEVAETa2V5TWFuYWdlclB1YmxpY0tleQACFCVzX19tYW5hZ2VyUHVibGljS2V5ARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEOa2V5VXNkdEFzc2V0SWQAAgglc19fVVNEVAEOa2V5VXNkbkFzc2V0SWQAAgglc19fVVNETgEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAEByRtYXRjaDAJAKIIAQkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgEdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQABAckbWF0Y2gwCQCiCAEJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQpjb2xsZWN0S2V5AwdhZGRyZXNzEWFtb3VudFRvU3dhcEluS2V5FWFsbG93VG9XaXRoZHJhd0hlaWdodAkAuQkCCQDMCAIFB2FkZHJlc3MJAMwIAgIIV0lUSERSQVcJAMwIAgkApAMBBRFhbW91bnRUb1N3YXBJbktleQkAzAgCAgZIRUlHSFQJAMwIAgkApAMBBRVhbGxvd1RvV2l0aGRyYXdIZWlnaHQFA25pbAIBXwERY29sbGVjdEJhbGFuY2VLZXkBB2FkZHJlc3MJALkJAgkAzAgCBQdhZGRyZXNzCQDMCAICB2JhbGFuY2UFA25pbAIBXwEYY29sbGVjdEJhbGFuY2VLZXlXaXRoRmVlAQdhZGRyZXNzCQC5CQIJAMwIAgUHYWRkcmVzcwkAzAgCAhBiYWxhbmNlX3dpdGhfZmVlBQNuaWwCAV8BFHVzZHRUb1VzZG5Bc3NldEVycm9yAAkAAgECNFRvIHN3YXAgVVNEVCB0byBVU0ROIHlvdSBuZWVkIGF0dGFjaCBwYXltZW50IGluIFVTRFQBFHVzZG5Ub1VzZHRBc3NldEVycm9yAAkAAgECNFRvIHN3YXAgVVNETiB0byBVU0RUIHlvdSBuZWVkIGF0dGFjaCBwYXltZW50IGluIFVTRE4BF3VzZHRUb1VzZG5Mb3dMaW1pdEVycm9yAAkAAgEJAKwCAgkArAICAhZ5b3UgY2FuIHN3YXAgYXQgbGVhc3QgCQCkAwEJAGkCBRdtaW5pbWFsQW1vdW50VG9Td2FwVVNEVAUPZGVjaW1hbFBhcnRVU0RUAgcgdG9rZW5zAQNhYnMBAW4DCQBmAgAABQFuCQBoAgUBbgD///////////8BBQFuARVnZXRXaXRob3V0RmVlV2l0aGRyYXcCBmFtb3VudBFiYWxhbmNlV2l0aG91dEZlZQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCBRFiYWxhbmNlV2l0aG91dEZlZQUDbmlsARdnZXRMaXN0RWxlbWVudE9yRGVmYXVsdAMEbGlzdAVpbmRleAdkZWZhdWx0AwkAZgIJAJADAQUEbGlzdAUFaW5kZXgJAJEDAgUEbGlzdAUFaW5kZXgFB2RlZmF1bHQBEmN1cnJlbnRXaXRoZHJhd2FscwIHYWRkcmVzcwZhbW91bnQECmJhbGFuY2VLZXkJARFjb2xsZWN0QmFsYW5jZUtleQEFB2FkZHJlc3MEEWJhbGFuY2VXaXRoRmVlS2V5CQEYY29sbGVjdEJhbGFuY2VLZXlXaXRoRmVlAQUHYWRkcmVzcwQUY3VycmVudENsaWVudEJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUKYmFsYW5jZUtleQAABBtjdXJyZW50Q2xpZW50QmFsYW5jZVdpdGhGZWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwURYmFsYW5jZVdpdGhGZWVLZXkAAAQLdXNlckJhbGFuY2UJAGQCBRRjdXJyZW50Q2xpZW50QmFsYW5jZQUbY3VycmVudENsaWVudEJhbGFuY2VXaXRoRmVlAwMJAGYCBQZhbW91bnQFC3VzZXJCYWxhbmNlBgkAZgIFF21pbmltYWxBbW91bnRUb1N3YXBVU0ROBQZhbW91bnQJAAIBAi9Td2FwIGFtb3VudCBmYWlsLCBhbW91bnQgaXMgdG8gc21hbGwgb3IgdG8gYmlnLgQUdG9XaXRoZHJhd1dpdGhvdXRGZWUJARVnZXRXaXRob3V0RmVlV2l0aGRyYXcCBQZhbW91bnQFFGN1cnJlbnRDbGllbnRCYWxhbmNlBBF0b1dpdGhkcmF3V2l0aEZlZQkAZQIFBmFtb3VudAUUdG9XaXRoZHJhd1dpdGhvdXRGZWUEA2ZlZQkAaAIJAGkCBRF0b1dpdGhkcmF3V2l0aEZlZQBkAAIJAMwIAgUUdG9XaXRoZHJhd1dpdGhvdXRGZWUJAMwIAgURdG9XaXRoZHJhd1dpdGhGZWUJAMwIAgUDZmVlBQNuaWwBC211c3RNYW5hZ2VyAQFpBAJwZAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDADCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQJwawYFAnBkAwkAAQIFByRtYXRjaDACBFVuaXQDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgUCcGQJAAIBAgtNYXRjaCBlcnJvcgYBaQELY29uc3RydWN0b3ICC3VzZHRBc3NldElkC3VzZG5Bc3NldElkBAtjaGVja0NhbGxlcgkBC211c3RNYW5hZ2VyAQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZHRBc3NldElkAAULdXNkdEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVVzZG5Bc3NldElkAAULdXNkbkFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgZpbnZva2UBDnN3YXBVU0RUdG9VU0ROAAQKYmFsYW5jZUtleQkBGGNvbGxlY3RCYWxhbmNlS2V5V2l0aEZlZQEJAKUIAQgFBmludm9rZQZjYWxsZXIEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFBmludm9rZQhwYXltZW50cwAAAwkBAiE9AggFB3BheW1lbnQHYXNzZXRJZAkA2QQBCQEOa2V5VXNkdEFzc2V0SWQACQEUdXNkdFRvVXNkbkFzc2V0RXJyb3IABAZhbW91bnQIBQdwYXltZW50BmFtb3VudAQDZmVlCQBoAgkAaQIFBmFtb3VudABkAAIEGGN1cnJlbnRDbGllbnRCYWxhbmNlVVNEVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQpiYWxhbmNlS2V5AAADCQBmAgUXbWluaW1hbEFtb3VudFRvU3dhcFVTRFQFBmFtb3VudAkBF3VzZHRUb1VzZG5Mb3dMaW1pdEVycm9yAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKYmFsYW5jZUtleQkAZAIFGGN1cnJlbnRDbGllbnRCYWxhbmNlVVNEVAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQZpbnZva2UGY2FsbGVyCQBlAgUGYW1vdW50BQNmZWUJANkEAQkBDmtleVVzZG5Bc3NldElkAAUDbmlsBmludm9rZQEcaW5pdGlhbGl6YXRpb25VU0ROdG9VU0RUc3dhcAAEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFBmludm9rZQhwYXltZW50cwAABAdhZGRyZXNzCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBAiE9AggFB3BheW1lbnQHYXNzZXRJZAkA2QQBCQEOa2V5VXNkbkFzc2V0SWQACQEUdXNkblRvVXNkdEFzc2V0RXJyb3IABAZhbW91bnQIBQdwYXltZW50BmFtb3VudAQKYmFsYW5jZUtleQkBEWNvbGxlY3RCYWxhbmNlS2V5AQUHYWRkcmVzcwQRYmFsYW5jZVdpdGhGZWVLZXkJARhjb2xsZWN0QmFsYW5jZUtleVdpdGhGZWUBBQdhZGRyZXNzBBRjdXJyZW50Q2xpZW50QmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQpiYWxhbmNlS2V5AAAEG2N1cnJlbnRDbGllbnRCYWxhbmNlV2l0aEZlZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRFiYWxhbmNlV2l0aEZlZUtleQAABAt1c2VyQmFsYW5jZQkAZAIFFGN1cnJlbnRDbGllbnRCYWxhbmNlBRtjdXJyZW50Q2xpZW50QmFsYW5jZVdpdGhGZWUEBGRhdGEJARJjdXJyZW50V2l0aGRyYXdhbHMCCQClCAEIBQZpbnZva2UGY2FsbGVyBQZhbW91bnQEFHRvV2l0aGRyYXdXaXRob3V0RmVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJEDAgUEZGF0YQAAAiJXcm9uZyAnY3VycmVudFdpdGhkcmF3YWxzJyBtZXRob2QhBBF0b1dpdGhkcmF3V2l0aEZlZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCRAwIFBGRhdGEAAQIiV3JvbmcgJ2N1cnJlbnRXaXRoZHJhd2FscycgbWV0aG9kIQQDZmVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJEDAgUEZGF0YQACAiJXcm9uZyAnY3VycmVudFdpdGhkcmF3YWxzJyBtZXRob2QhBAV0b3RhbAkAZQIJAGQCBRF0b1dpdGhkcmF3V2l0aEZlZQUUdG9XaXRoZHJhd1dpdGhvdXRGZWUFA2ZlZQQVYWxsb3dUb1dpdGhEcmF3SGVpZ2h0CQBkAgUGaGVpZ2h0BQ13aXRoZHJhd0RlbGF5AwkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwkBCmNvbGxlY3RLZXkDCQClCAEIBQZpbnZva2UGY2FsbGVyBQZhbW91bnQFFWFsbG93VG9XaXRoRHJhd0hlaWdodAkAAgECPVlvdSBoYXZlIGFscmVhZHkgc3RhcnRlZCB3aXRoZHJhd2FsIHByb2Nlc3MsIHdhaXQgbmV4dCBibG9jay4JAMwIAgkBDEludGVnZXJFbnRyeQIFCmJhbGFuY2VLZXkJAGUCBRRjdXJyZW50Q2xpZW50QmFsYW5jZQUUdG9XaXRoZHJhd1dpdGhvdXRGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWJhbGFuY2VXaXRoRmVlS2V5CQBlAgUbY3VycmVudENsaWVudEJhbGFuY2VXaXRoRmVlBRF0b1dpdGhkcmF3V2l0aEZlZQkAzAgCCQELU3RyaW5nRW50cnkCCQEKY29sbGVjdEtleQMJAKUIAQgFBmludm9rZQZjYWxsZXIFBmFtb3VudAUVYWxsb3dUb1dpdGhEcmF3SGVpZ2h0CQC5CQIJAMwIAgINbm90X3dpdGhkcmF3bgkAzAgCCQCkAwEJAGUCBQZhbW91bnQFA2ZlZQUDbmlsAgFfBQNuaWwGaW52b2tlAQ5zd2FwVVNETnRvVVNEVAIGYW1vdW50C2hlaWdodEluS2V5BANrZXkJAQpjb2xsZWN0S2V5AwkApQgBCAUGaW52b2tlBmNhbGxlcgUGYW1vdW50BQtoZWlnaHRJbktleQQNd2l0aGRyYXduSW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFA2tleQkArAICCQCsAgIJAKwCAgIYVGhpcyBrZXkgZG9lc24ndCBleGlzdHMgBQNrZXkCDSBhdCBhZGRyZXNzICAJAKUIAQUEdGhpcwQKdG9XaXRoZHJhdwkBF2dldExpc3RFbGVtZW50T3JEZWZhdWx0AwkAtQkCBQ13aXRoZHJhd25JbmZvAgFfAAIJAKQDAQUGYW1vdW50AwMJAGcCBQZoZWlnaHQFC2hlaWdodEluS2V5CQEIY29udGFpbnMCBQ13aXRoZHJhd25JbmZvAg1ub3Rfd2l0aGRyYXduBwkAzAgCCQELRGVsZXRlRW50cnkBBQNrZXkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFBmludm9rZQZjYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQp0b1dpdGhkcmF3AhRXcm9uZyB3aXRoZHJhdyBkYXRhIQkA2QQBCQEOa2V5VXNkdEFzc2V0SWQABQNuaWwJAAIBCQCsAgIJAKwCAgIdV2l0aGRyYXdhbCBpcyBwb3NzaWJsZSBhZnRlciAJAKQDAQULaGVpZ2h0SW5LZXkCKyBoZWlnaHQgb3IgeW91IGhhdmUgYWxyZWFkeSB3aXRoZHJhd24gVVNEVC4BaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEC2NoZWNrQ2FsbGVyCQELbXVzdE1hbmFnZXIBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgQVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDZBAEFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAIFFWNoZWNrTWFuYWdlclB1YmxpY0tleQUVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAFF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY29uZmlybU1hbmFnZXIABAJwbQkBHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAQFaGFzUE0DCQEJaXNEZWZpbmVkAQUCcG0GCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFBWhhc1BNBQVoYXNQTQQHY2hlY2tQTQMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAnBtBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQdjaGVja1BNBQdjaGVja1BNCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlNYW5hZ2VyUHVibGljS2V5AAkA2AQBCQEFdmFsdWUBBQJwbQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA90YXJnZXRQdWJsaWNLZXkEByRtYXRjaDAJARZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAUCcGsDCQABAgUHJG1hdGNoMAIEVW5pdAgFAnR4D3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXn6PZop", "chainId": 84, "height": 2146821, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 4Sh1sWEgaRyo5KrvZiZhbGp6ri4p2j1sWLU9kjoYF89D Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let withdrawDelay = 1460
5+
6+let decimalPartUSDN = 1000000
7+
8+let decimalPartUSDT = 1000000
9+
10+let minimalAmountToSwapUSDT = (10000 * decimalPartUSDN)
11+
12+let minimalAmountToSwapUSDN = (10000 * decimalPartUSDT)
13+
14+func keyManagerPublicKey () = "%s__managerPublicKey"
15+
16+
17+func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
18+
19+
20+func keyUsdtAssetId () = "%s__USDT"
21+
22+
23+func keyUsdnAssetId () = "%s__USDN"
24+
25+
26+func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
27+ case s: String =>
28+ fromBase58String(s)
29+ case _: Unit =>
30+ unit
31+ case _ =>
32+ throw("Match error")
33+}
34+
35+
36+func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
37+ case s: String =>
38+ fromBase58String(s)
39+ case _: Unit =>
40+ unit
41+ case _ =>
42+ throw("Match error")
43+}
44+
45+
46+func collectKey (address,amountToSwapInKey,allowToWithdrawHeight) = makeString([address, "WITHDRAW", toString(amountToSwapInKey), "HEIGHT", toString(allowToWithdrawHeight)], "_")
47+
48+
49+func collectBalanceKey (address) = makeString([address, "balance"], "_")
50+
51+
52+func collectBalanceKeyWithFee (address) = makeString([address, "balance_with_fee"], "_")
53+
54+
55+func usdtToUsdnAssetError () = throw("To swap USDT to USDN you need attach payment in USDT")
56+
57+
58+func usdnToUsdtAssetError () = throw("To swap USDN to USDT you need attach payment in USDN")
59+
60+
61+func usdtToUsdnLowLimitError () = throw((("you can swap at least " + toString((minimalAmountToSwapUSDT / decimalPartUSDT))) + " tokens"))
62+
63+
64+func abs (n) = if ((0 > n))
65+ then (n * -1)
66+ else n
67+
68+
69+func getWithoutFeeWithdraw (amount,balanceWithoutFee) = min([amount, balanceWithoutFee])
70+
71+
72+func getListElementOrDefault (list,index,default) = if ((size(list) > index))
73+ then list[index]
74+ else default
75+
76+
77+func currentWithdrawals (address,amount) = {
78+ let balanceKey = collectBalanceKey(address)
79+ let balanceWithFeeKey = collectBalanceKeyWithFee(address)
80+ let currentClientBalance = valueOrElse(getInteger(this, balanceKey), 0)
81+ let currentClientBalanceWithFee = valueOrElse(getInteger(this, balanceWithFeeKey), 0)
82+ let userBalance = (currentClientBalance + currentClientBalanceWithFee)
83+ if (if ((amount > userBalance))
84+ then true
85+ else (minimalAmountToSwapUSDN > amount))
86+ then throw("Swap amount fail, amount is to small or to big.")
87+ else {
88+ let toWithdrawWithoutFee = getWithoutFeeWithdraw(amount, currentClientBalance)
89+ let toWithdrawWithFee = (amount - toWithdrawWithoutFee)
90+ let fee = ((toWithdrawWithFee / 100) * 2)
91+[toWithdrawWithoutFee, toWithdrawWithFee, fee]
92+ }
93+ }
94+
95+
96+func mustManager (i) = {
97+ let pd = throw("Permission denied")
98+ match managerPublicKeyOrUnit() {
99+ case pk: ByteVector =>
100+ if ((i.callerPublicKey == pk))
101+ then true
102+ else pd
103+ case _: Unit =>
104+ if ((i.caller == this))
105+ then true
106+ else pd
107+ case _ =>
108+ throw("Match error")
109+ }
110+ }
111+
112+
113+@Callable(i)
114+func constructor (usdtAssetId,usdnAssetId) = {
115+ let checkCaller = mustManager(i)
116+ if ((checkCaller == checkCaller))
117+ then [StringEntry(keyUsdtAssetId(), usdtAssetId), StringEntry(keyUsdnAssetId(), usdnAssetId)]
118+ else throw("Strict value is not equal to itself.")
119+ }
120+
121+
122+
123+@Callable(invoke)
124+func swapUSDTtoUSDN () = {
125+ let balanceKey = collectBalanceKeyWithFee(toString(invoke.caller))
126+ let payment = value(invoke.payments[0])
127+ if ((payment.assetId != fromBase58String(keyUsdtAssetId())))
128+ then usdtToUsdnAssetError()
129+ else {
130+ let amount = payment.amount
131+ let fee = ((amount / 100) * 2)
132+ let currentClientBalanceUSDT = valueOrElse(getInteger(this, balanceKey), 0)
133+ if ((minimalAmountToSwapUSDT > amount))
134+ then usdtToUsdnLowLimitError()
135+ else [IntegerEntry(balanceKey, (currentClientBalanceUSDT + amount)), ScriptTransfer(invoke.caller, (amount - fee), fromBase58String(keyUsdnAssetId()))]
136+ }
137+ }
138+
139+
140+
141+@Callable(invoke)
142+func initializationUSDNtoUSDTswap () = {
143+ let payment = value(invoke.payments[0])
144+ let address = toString(invoke.caller)
145+ if ((payment.assetId != fromBase58String(keyUsdnAssetId())))
146+ then usdnToUsdtAssetError()
147+ else {
148+ let amount = payment.amount
149+ let balanceKey = collectBalanceKey(address)
150+ let balanceWithFeeKey = collectBalanceKeyWithFee(address)
151+ let currentClientBalance = valueOrElse(getInteger(this, balanceKey), 0)
152+ let currentClientBalanceWithFee = valueOrElse(getInteger(this, balanceWithFeeKey), 0)
153+ let userBalance = (currentClientBalance + currentClientBalanceWithFee)
154+ let data = currentWithdrawals(toString(invoke.caller), amount)
155+ let toWithdrawWithoutFee = valueOrErrorMessage(data[0], "Wrong 'currentWithdrawals' method!")
156+ let toWithdrawWithFee = valueOrErrorMessage(data[1], "Wrong 'currentWithdrawals' method!")
157+ let fee = valueOrErrorMessage(data[2], "Wrong 'currentWithdrawals' method!")
158+ let total = ((toWithdrawWithFee + toWithdrawWithoutFee) - fee)
159+ let allowToWithDrawHeight = (height + withdrawDelay)
160+ if (isDefined(getString(this, collectKey(toString(invoke.caller), amount, allowToWithDrawHeight))))
161+ then throw("You have already started withdrawal process, wait next block.")
162+ else [IntegerEntry(balanceKey, (currentClientBalance - toWithdrawWithoutFee)), IntegerEntry(balanceWithFeeKey, (currentClientBalanceWithFee - toWithdrawWithFee)), StringEntry(collectKey(toString(invoke.caller), amount, allowToWithDrawHeight), makeString(["not_withdrawn", toString((amount - fee))], "_"))]
163+ }
164+ }
165+
166+
167+
168+@Callable(invoke)
169+func swapUSDNtoUSDT (amount,heightInKey) = {
170+ let key = collectKey(toString(invoke.caller), amount, heightInKey)
171+ let withdrawnInfo = valueOrErrorMessage(getString(this, key), ((("This key doesn't exists " + key) + " at address ") + toString(this)))
172+ let toWithdraw = getListElementOrDefault(split(withdrawnInfo, "_"), 2, toString(amount))
173+ if (if ((height >= heightInKey))
174+ then contains(withdrawnInfo, "not_withdrawn")
175+ else false)
176+ then [DeleteEntry(key), ScriptTransfer(invoke.caller, valueOrErrorMessage(parseInt(toWithdraw), "Wrong withdraw data!"), fromBase58String(keyUsdtAssetId()))]
177+ else throw((("Withdrawal is possible after " + toString(heightInKey)) + " height or you have already withdrawn USDT."))
178+ }
179+
180+
181+
182+@Callable(i)
183+func setManager (pendingManagerPublicKey) = {
184+ let checkCaller = mustManager(i)
185+ if ((checkCaller == checkCaller))
186+ then {
187+ let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
188+ if ((checkManagerPublicKey == checkManagerPublicKey))
189+ then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
190+ else throw("Strict value is not equal to itself.")
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+
197+@Callable(i)
198+func confirmManager () = {
199+ let pm = pendingManagerPublicKeyOrUnit()
200+ let hasPM = if (isDefined(pm))
201+ then true
202+ else throw("No pending manager")
203+ if ((hasPM == hasPM))
204+ then {
205+ let checkPM = if ((i.callerPublicKey == value(pm)))
206+ then true
207+ else throw("You are not pending manager")
208+ if ((checkPM == checkPM))
209+ then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
210+ else throw("Strict value is not equal to itself.")
211+ }
212+ else throw("Strict value is not equal to itself.")
213+ }
214+
215+
216+@Verifier(tx)
217+func verify () = {
218+ let targetPublicKey = match managerPublicKeyOrUnit() {
219+ case pk: ByteVector =>
220+ pk
221+ case _: Unit =>
222+ tx.senderPublicKey
223+ case _ =>
224+ throw("Match error")
225+ }
226+ sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
227+ }
228+

github/deemru/w8io/026f985 
24.84 ms