tx · Cj9mX8GNYrRL37t4dM8L5FN2aREt1jUrkZNcH175r91A 3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3: -0.01000000 Waves 2024.01.29 00:14 [4017673] smart account 3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3 > SELF 0.00000000 Waves
{ "type": 13, "id": "Cj9mX8GNYrRL37t4dM8L5FN2aREt1jUrkZNcH175r91A", "fee": 1000000, "feeAssetId": null, "timestamp": 1706476485286, "version": 2, "chainId": 87, "sender": "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3", "senderPublicKey": "4XuPpm7Pz97L5yDuLYiKbCSuXvtGjxCPsUBUUzmgokhP", "proofs": [ "2NtwuNDg1L9nFTCzwiDtu5ZLLukNwVZgnBEkDJmL68oXiLyP5HFsE8qkGvNJCzkBLngBW2BKqUcRu6ebrexBiePo" ], "script": "base64:BgIuCAISBwoFCAgICAESCAoGCAgICAEIEgQKAggIEgQKAggIEgQKAggBEgUKAwQICAwAB1ZFUlNJT04CC1BMTGlxLTEuMC4yAAZTY2FsZTgAgMLXLwAHU2NhbGUxNgCAgIT+pt7hEQENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyARZ2ZXJpZnlMaXF1aWRhdG9yQWNjZXNzAQdhZGRyZXNzCQECIT0CCQCzCQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwIRc2V0dXBfbGlxdWlkYXRvcnMCAAkApQgBBQdhZGRyZXNzBQR1bml0ABNNYXhTaGFyZVRvTGlxdWlkYXRlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCGXNldHVwX21heFNoYXJlVG9MaXF1aWRhdGUAZAAQTGlxdWlkYXRpb25EZWxheQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAhZzZXR1cF9saXF1aWRhdGlvbkRlbGF5AAoAEExpcXVpZGF0b3JSZXdhcmQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIWc2V0dXBfbGlxdWlkYXRvclJld2FyZAAKABFCYWREZWJ0TGlxQWxsb3dlZAkAZgIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIXc2V0dXBfYmFkRGVidExpcUFsbG93ZWQAAAAAAA1PcmFjbGVBZGRyZXNzCQELdmFsdWVPckVsc2UCCQCmCAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwIUc2V0dXBfYWRkcmVzc19vcmFjbGUCAAkBB0FkZHJlc3MBARoBV0lm0MvzivVXeq38IW9xxVuJiCvQgbOxfwAHbWFya2V0cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAg1zZXR1cF9tYXJrZXRzCQC5CQIJAMwIAgIjM1BIcHVRVVBWVW9SM0FZekZlSnplV0pmWUxzTFRtV3NzVkgFA25pbAIBLAEWZ2V0VXNlckJhbGFuY2VJTlRFUk5BTAMGbWFya2V0B2FkZHJlc3MNbWludXNCb3Jyb3dlZAoBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBm1hcmtldAUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIACgENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBm1hcmtldAUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAACgENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMDCQAAAgUKYXNzZXRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kGCQAAAgUKYXNzZXRJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cJAJQKAgDAhD0AwIQ9BAVwcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUNT3JhY2xlQWRkcmVzcwkArAICBQphc3NldElkU3RyAgdfdHdhcDVCCQCUCgIFBXByaWNlBQVwcmljZQoBDmNhbGNBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAZhc3NldHMJALUJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwIBLAQEbHR2cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIKc2V0dXBfbHR2cwIBLAQDbHRzCQC1CQIJAQx0cnlHZXRTdHJpbmcBAglzZXR1cF9sdHMCASwKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQMdXNlclN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAQMdXNlckJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAQTbmVlZFRva2VuQWNjb3VudGluZwMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABgcDBRNuZWVkVG9rZW5BY2NvdW50aW5nBAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBCQCRAwIFBmFzc2V0cwUEbmV4dAQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkAZQIJAGQCBQVhY2N1bQkAawMJAGsDBQx1c2VyU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCRAwIFBmFzc2V0cwUEbmV4dAIGX3NSYXRlBQdTY2FsZTE2CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMFDW1pbnVzQm9ycm93ZWQJAGsDCQBrAwUMdXNlckJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkAkQMCBQZhc3NldHMFBG5leHQCBl9iUmF0ZQUHU2NhbGUxNggFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUAAAUFYWNjdW0EBnJlc3VsdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBQZyZXN1bHQGAWkBEHByb3h5TGlxdWlkYXRlVjIFBm1hcmtldAt1c2VyQWRkcmVzcw5kZWJ0QXNzZXRJZFN0chJzdXBwbGllZEFzc2V0SWRTdHIGYW1vdW50AwkAAAIJALMJAgUHbWFya2V0cwUGbWFya2V0BQR1bml0CQACAQIgZ2l2ZW4gcG9vbCBhZGRyZXNzIGlzIG5vdCBhIHBvb2wDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yQWNjZXNzAQgFAWkGY2FsbGVyCQACAQIkbm8gcGVybWlzc2lvbiB0byBwZXJmb3JtIGxpcXVpZGF0aW9uBANpbnYJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUGbWFya2V0AgtsaXF1aWRhdGVWMgkAzAgCBwkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCBRJzdXBwbGllZEFzc2V0SWRTdHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQ5kZWJ0QXNzZXRJZFN0cgUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYEEnVzZXJCb3Jyb3dlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCCQERQGV4dHJOYXRpdmUoMTA2MikBBQZtYXJrZXQJAKwCAgkArAICBQt1c2VyQWRkcmVzcwIKX2JvcnJvd2VkXwUOZGVidEFzc2V0SWRTdHIAAAMJAGYCAAAFEnVzZXJCb3Jyb3dlZEFtb3VudAkAAgECL3RyYW5zYWN0aW9uIGxlYWRzIHRvIGEgbmVnYXRpdmUgYm9ycm93ZWQgYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQcHJveHlMaXF1aWRhdGVWMwYGbWFya2V0C3VzZXJBZGRyZXNzDmRlYnRBc3NldElkU3RyEnN1cHBsaWVkQXNzZXRJZFN0cgZhbW91bnQIcm91dGVTdHIDCQAAAgkAswkCBQdtYXJrZXRzBQZtYXJrZXQFBHVuaXQJAAIBAiRnaXZlbiBtYXJrZXQgYWRkcmVzcyBpcyBub3QgYSBtYXJrZXQDCQEBIQEJARZ2ZXJpZnlMaXF1aWRhdG9yQWNjZXNzAQgFAWkGY2FsbGVyCQACAQIkbm8gcGVybWlzc2lvbiB0byBwZXJmb3JtIGxpcXVpZGF0aW9uBA1tYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQZtYXJrZXQEBXNSYXRlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFEnN1cHBsaWVkQXNzZXRJZFN0cgIGX3NSYXRlBAdzQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgULdXNlckFkZHJlc3MCCl9zdXBwbGllZF8FEnN1cHBsaWVkQXNzZXRJZFN0cgQOc3VwcGxpZWRBbW91bnQJAGsDBQdzQW1vdW50BQVzUmF0ZQUHU2NhbGUxNgQWbGFzdExpcUZvck1hcmtldEtleVN0cgkArAICCQCsAgICD2hpc3RvcnlfbWFya2V0XwUGbWFya2V0AhBfbGFzdExpcXVpZGF0aW9uBBVsYXN0TGlxdWlkYXRpb25LZXlTdHIJAKwCAgkArAICAg1oaXN0b3J5X3VzZXJfBQt1c2VyQWRkcmVzcwIQX2xhc3RMaXF1aWRhdGlvbgQPbGFzdExpcXVpZGF0aW9uCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWxhc3RMaXF1aWRhdGlvbktleVN0cgAAAwkAZgIFBmFtb3VudAkAawMFE01heFNoYXJlVG9MaXF1aWRhdGUFDnN1cHBsaWVkQW1vdW50AJBOCQACAQImc2hvdWxkIGxpcXVpZGF0ZSBzbWFsbGVyIHBhcnQgcGVyIHRpbWUDCQBmAgkAZAIFD2xhc3RMaXF1aWRhdGlvbgUQTGlxdWlkYXRpb25EZWxheQUGaGVpZ2h0CQACAQIUY2Fubm90IGxpcXVpZGF0ZSB5ZXQEA2ludgkA/AcEBQ1tYXJrZXRBZGRyZXNzAglsaXF1aWRhdGUJAMwIAgcJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUGYW1vdW50CQDMCAIFEnN1cHBsaWVkQXNzZXRJZFN0cgkAzAgCBQ5kZWJ0QXNzZXRJZFN0cgkAzAgCBQhyb3V0ZVN0cgUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYEEnVzZXJCb3Jyb3dlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgULdXNlckFkZHJlc3MCCl9ib3Jyb3dlZF8FDmRlYnRBc3NldElkU3RyAAAEDnVzZXJVc2RCYWxhbmNlCQEWZ2V0VXNlckJhbGFuY2VJTlRFUk5BTAMFDW1hcmtldEFkZHJlc3MFC3VzZXJBZGRyZXNzBgMJAGYCAAAFEnVzZXJCb3Jyb3dlZEFtb3VudAkAAgECL3RyYW5zYWN0aW9uIGxlYWRzIHRvIGEgbmVnYXRpdmUgYm9ycm93ZWQgYW1vdW50AwMJAQEhAQURQmFkRGVidExpcUFsbG93ZWQJAGcCAAAFDnVzZXJVc2RCYWxhbmNlBwkAAgECH3RyYW5zYWN0aW9uIGxlYWRzIHRvIGEgYmFkIGRlYnQEEGxpcXVpZGF0b3JSZXdhcmQJAGsDBQZhbW91bnQFEExpcXVpZGF0b3JSZXdhcmQAkE4EC3N0YXRzS2V5U3RyCQCsAgIJAKwCAgkArAICAgdyZXdhcmRfCQClCAEIBQFpBmNhbGxlcgIBXwUSc3VwcGxpZWRBc3NldElkU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtzdGF0c0tleVN0cgkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwULc3RhdHNLZXlTdHIAAAUQbGlxdWlkYXRvclJld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVbGFzdExpcXVpZGF0aW9uS2V5U3RyBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFFmxhc3RMaXFGb3JNYXJrZXRLZXlTdHIFBmhlaWdodAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHBheW91dFJld2FyZAIKYWRkcmVzc1N0cgphc3NldElkU3RyAwkBAiE9AgkApQgBCAUBaQZjYWxsZXICIzNQTWNNaU1FczZ3NTZOUkdhY2tzWHRGRzV6Uzdkb0U5ZnBMCQACAQIYbm8gYWNjZXNzIHRvIHRoaXMgbWV0aG9kBAtzdGF0c0tleVN0cgkArAICCQCsAgIJAKwCAgIHcmV3YXJkXwUKYWRkcmVzc1N0cgIBXwUKYXNzZXRJZFN0cgQPcmV3YXJkQXZhaWxhYmxlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC3N0YXRzS2V5U3RyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKYWRkcmVzc1N0cgUPcmV3YXJkQXZhaWxhYmxlCQENZ2V0QXNzZXRCeXRlcwEFCmFzc2V0SWRTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIFC3N0YXRzS2V5U3RyAAAFA25pbAFpAQx1cGRhdGVTdHJpbmcCA2tleQN2YWwDAwkBAiE9AgkApQgBCAUBaQZjYWxsZXICIzNQTWNNaU1FczZ3NTZOUkdhY2tzWHRGRzV6Uzdkb0U5ZnBMCQECIT0CCQClCAEIBQFpBmNhbGxlcgIjM1BIYmRwYUt6ejhFaUFuZ0dIYUZ1MmhWdU5DZHNDNjdxaDMHCQACAQIYbm8gYWNjZXNzIHRvIHRoaXMgbWV0aG9kCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQENdXBkYXRlSW50ZWdlcgIDa2V5A3ZhbAMDCQECIT0CCQClCAEIBQFpBmNhbGxlcgIjM1BNY01pTUVzNnc1Nk5SR2Fja3NYdEZHNXpTN2RvRTlmcEwJAQIhPQIJAKUIAQgFAWkGY2FsbGVyAiMzUEhiZHBhS3p6OEVpQW5nR0hhRnUyaFZ1TkNkc0M2N3FoMwcJAAIBAhhubyBhY2Nlc3MgdG8gdGhpcyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUDdmFsBQNuaWwBaQEWZ2V0VXNlckJhbGFuY2VSRUFET05MWQMFZGVidWcJbWFya2V0U3RyB2FkZHJlc3MEA3JlcwkBFmdldFVzZXJCYWxhbmNlSU5URVJOQUwDCQERQGV4dHJOYXRpdmUoMTA2MikBBQltYXJrZXRTdHIFB2FkZHJlc3MGAwkAAAIFBWRlYnVnBgkAAgEJAKQDAQUDcmVzCQCUCgIFA25pbAUDcmVzAD/2Xns=", "height": 4017673, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ASKfjah4pEGv9MGWBx68zK7EqtcSbmjekuLmQWWU76ew Next: tJfYezoWRQHALRdTQT13jZTRZwirE2SgxdFSXsKPgoR Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let a = | |
4 | + | let a = "PLLiq-1.0.2" | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = 100000000 | |
7 | 7 | ||
8 | - | func c (d) = if ((d == "WAVES")) | |
8 | + | let c = 10000000000000000 | |
9 | + | ||
10 | + | func d (e) = if ((e == "WAVES")) | |
9 | 11 | then unit | |
10 | - | else fromBase58String( | |
12 | + | else fromBase58String(e) | |
11 | 13 | ||
12 | 14 | ||
13 | - | func | |
15 | + | func f (g) = (indexOf(valueOrElse(getString(this, "setup_liquidators"), ""), toString(g)) != unit) | |
14 | 16 | ||
15 | 17 | ||
16 | - | let | |
18 | + | let h = valueOrElse(getInteger(this, "setup_maxShareToLiquidate"), 100) | |
17 | 19 | ||
18 | - | let | |
20 | + | let i = valueOrElse(getInteger(this, "setup_liquidationDelay"), 10) | |
19 | 21 | ||
20 | - | let | |
22 | + | let j = valueOrElse(getInteger(this, "setup_liquidatorReward"), 10) | |
21 | 23 | ||
22 | - | let | |
24 | + | let k = (valueOrElse(getInteger(this, "setup_badDebtLiqAllowed"), 0) > 0) | |
23 | 25 | ||
24 | - | let | |
26 | + | let l = valueOrElse(addressFromString(valueOrElse(getString(this, "setup_address_oracle"), "")), Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')) | |
25 | 27 | ||
26 | - | let | |
28 | + | let m = valueOrElse(getString(this, "setup_markets"), makeString(["3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH"], ",")) | |
27 | 29 | ||
28 | - | func | |
29 | - | func | |
30 | - | let | |
31 | - | if ($isInstanceOf( | |
30 | + | func n (o,g,p) = { | |
31 | + | func q (r) = { | |
32 | + | let s = getString(o, r) | |
33 | + | if ($isInstanceOf(s, "String")) | |
32 | 34 | then { | |
33 | - | let | |
34 | - | | |
35 | + | let t = s | |
36 | + | t | |
35 | 37 | } | |
36 | 38 | else "" | |
37 | 39 | } | |
38 | 40 | ||
39 | - | func | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
41 | + | func u (r) = { | |
42 | + | let s = getInteger(o, r) | |
43 | + | if ($isInstanceOf(s, "Int")) | |
42 | 44 | then { | |
43 | - | let | |
44 | - | | |
45 | + | let t = s | |
46 | + | t | |
45 | 47 | } | |
46 | 48 | else 0 | |
47 | 49 | } | |
48 | 50 | ||
49 | - | func | |
51 | + | func v (e) = if (if ((e == "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi")) | |
50 | 52 | then true | |
51 | - | else ( | |
53 | + | else (e == "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW")) | |
52 | 54 | then $Tuple2(1000000, 1000000) | |
53 | 55 | else { | |
54 | - | let | |
55 | - | $Tuple2( | |
56 | + | let w = getIntegerValue(l, (e + "_twap5B")) | |
57 | + | $Tuple2(w, w) | |
56 | 58 | } | |
57 | 59 | ||
58 | - | func | |
59 | - | let | |
60 | + | func x (e) = { | |
61 | + | let y = if ((e == "WAVES")) | |
60 | 62 | then 8 | |
61 | - | else value(assetInfo(fromBase58String( | |
62 | - | pow(10, 0, | |
63 | + | else value(assetInfo(fromBase58String(e))).decimals | |
64 | + | pow(10, 0, y, 0, 0, DOWN) | |
63 | 65 | } | |
64 | 66 | ||
65 | - | let | |
66 | - | let | |
67 | - | let | |
68 | - | func | |
69 | - | then | |
67 | + | let z = split(q("setup_tokens"), ",") | |
68 | + | let A = split(q("setup_ltvs"), ",") | |
69 | + | let B = split(q("setup_lts"), ",") | |
70 | + | func C (D,E) = if ((E >= size(z))) | |
71 | + | then D | |
70 | 72 | else { | |
71 | - | let | |
72 | - | let | |
73 | - | let | |
73 | + | let F = u(((g + "_supplied_") + z[E])) | |
74 | + | let G = u(((g + "_borrowed_") + z[E])) | |
75 | + | let H = if (if ((G != 0)) | |
74 | 76 | then true | |
75 | - | else ( | |
77 | + | else (F != 0)) | |
76 | 78 | then true | |
77 | 79 | else false | |
78 | - | if ( | |
80 | + | if (H) | |
79 | 81 | then { | |
80 | - | let | |
81 | - | let | |
82 | - | (( | |
83 | - | then fraction(fraction( | |
82 | + | let I = x(z[E]) | |
83 | + | let J = v(z[E]) | |
84 | + | ((D + fraction(fraction(F, u((z[E] + "_sRate")), c), J._1, I)) - (if (p) | |
85 | + | then fraction(fraction(G, u((z[E] + "_bRate")), c), J._1, I) | |
84 | 86 | else 0)) | |
85 | 87 | } | |
86 | - | else | |
88 | + | else D | |
87 | 89 | } | |
88 | 90 | ||
89 | - | let | |
90 | - | let | |
91 | - | let | |
92 | - | let | |
93 | - | func | |
94 | - | then | |
95 | - | else | |
91 | + | let K = { | |
92 | + | let L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] | |
93 | + | let M = size(L) | |
94 | + | let N = 0 | |
95 | + | func O (P,Q) = if ((Q >= M)) | |
96 | + | then P | |
97 | + | else C(P, L[Q]) | |
96 | 98 | ||
97 | - | func | |
98 | - | then | |
99 | + | func R (P,Q) = if ((Q >= M)) | |
100 | + | then P | |
99 | 101 | else throw("List size exceeds 12") | |
100 | 102 | ||
101 | - | | |
103 | + | R(O(O(O(O(O(O(O(O(O(O(O(O(N, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12) | |
102 | 104 | } | |
103 | - | | |
105 | + | K | |
104 | 106 | } | |
105 | 107 | ||
106 | 108 | ||
107 | - | @Callable( | |
108 | - | func proxyLiquidateV2 ( | |
109 | + | @Callable(S) | |
110 | + | func proxyLiquidateV2 (o,T,U,V,W) = if ((indexOf(m, o) == unit)) | |
109 | 111 | then throw("given pool address is not a pool") | |
110 | - | else { | |
111 | - | let W = invoke(addressFromStringValue(n), "liquidateV2", [false, S, U], [AttachedPayment(c(T), V)]) | |
112 | - | if ((W == W)) | |
113 | - | then nil | |
114 | - | else throw("Strict value is not equal to itself.") | |
115 | - | } | |
112 | + | else if (!(f(S.caller))) | |
113 | + | then throw("no permission to perform liquidation") | |
114 | + | else { | |
115 | + | let X = invoke(addressFromStringValue(o), "liquidateV2", [false, T, V], [AttachedPayment(d(U), W)]) | |
116 | + | if ((X == X)) | |
117 | + | then { | |
118 | + | let Y = valueOrElse(getInteger(addressFromStringValue(o), ((T + "_borrowed_") + U)), 0) | |
119 | + | if ((0 > Y)) | |
120 | + | then throw("transaction leads to a negative borrowed amount") | |
121 | + | else nil | |
122 | + | } | |
123 | + | else throw("Strict value is not equal to itself.") | |
124 | + | } | |
116 | 125 | ||
117 | 126 | ||
118 | 127 | ||
119 | - | @Callable( | |
120 | - | func proxyLiquidateV3 ( | |
128 | + | @Callable(S) | |
129 | + | func proxyLiquidateV3 (o,T,U,V,W,Z) = if ((indexOf(m, o) == unit)) | |
121 | 130 | then throw("given market address is not a market") | |
122 | - | else if (!( | |
131 | + | else if (!(f(S.caller))) | |
123 | 132 | then throw("no permission to perform liquidation") | |
124 | 133 | else { | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | if (( | |
134 | + | let aa = addressFromStringValue(o) | |
135 | + | let ab = getIntegerValue(aa, (V + "_sRate")) | |
136 | + | let ac = getIntegerValue(aa, ((T + "_supplied_") + V)) | |
137 | + | let ad = fraction(ac, ab, c) | |
138 | + | let ae = (("history_market_" + o) + "_lastLiquidation") | |
139 | + | let af = (("history_user_" + T) + "_lastLiquidation") | |
140 | + | let ag = valueOrElse(getInteger(this, af), 0) | |
141 | + | if ((W > fraction(h, ad, 10000))) | |
133 | 142 | then throw("should liquidate smaller part per time") | |
134 | - | else if ((( | |
143 | + | else if (((ag + i) > height)) | |
135 | 144 | then throw("cannot liquidate yet") | |
136 | 145 | else { | |
137 | - | let | |
138 | - | if (( | |
146 | + | let X = invoke(aa, "liquidate", [false, T, W, V, U, Z], nil) | |
147 | + | if ((X == X)) | |
139 | 148 | then { | |
140 | - | let | |
141 | - | let | |
142 | - | if ((0 > | |
149 | + | let Y = valueOrElse(getInteger(aa, ((T + "_borrowed_") + U)), 0) | |
150 | + | let ah = n(aa, T, true) | |
151 | + | if ((0 > Y)) | |
143 | 152 | then throw("transaction leads to a negative borrowed amount") | |
144 | - | else if (if (!( | |
145 | - | then (0 >= | |
153 | + | else if (if (!(k)) | |
154 | + | then (0 >= ah) | |
146 | 155 | else false) | |
147 | 156 | then throw("transaction leads to a bad debt") | |
148 | 157 | else { | |
149 | - | let | |
150 | - | let | |
151 | - | [IntegerEntry( | |
158 | + | let ai = fraction(W, j, 10000) | |
159 | + | let aj = ((("reward_" + toString(S.caller)) + "_") + V) | |
160 | + | [IntegerEntry(aj, (valueOrElse(getInteger(this, aj), 0) + ai)), IntegerEntry(af, height), IntegerEntry(ae, height)] | |
152 | 161 | } | |
153 | 162 | } | |
154 | 163 | else throw("Strict value is not equal to itself.") | |
157 | 166 | ||
158 | 167 | ||
159 | 168 | ||
160 | - | @Callable( | |
161 | - | func payoutReward ( | |
169 | + | @Callable(S) | |
170 | + | func payoutReward (ak,e) = if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
162 | 171 | then throw("no access to this method") | |
163 | 172 | else { | |
164 | - | let | |
165 | - | let | |
166 | - | [ScriptTransfer(addressFromStringValue( | |
173 | + | let aj = ((("reward_" + ak) + "_") + e) | |
174 | + | let al = valueOrElse(getInteger(this, aj), 0) | |
175 | + | [ScriptTransfer(addressFromStringValue(ak), al, d(e)), IntegerEntry(aj, 0)] | |
167 | 176 | } | |
168 | 177 | ||
169 | 178 | ||
170 | 179 | ||
171 | - | @Callable( | |
172 | - | func updateString ( | |
173 | - | then (toString( | |
180 | + | @Callable(S) | |
181 | + | func updateString (r,am) = if (if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
182 | + | then (toString(S.caller) != "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3") | |
174 | 183 | else false) | |
175 | 184 | then throw("no access to this method") | |
176 | - | else [StringEntry( | |
185 | + | else [StringEntry(r, am)] | |
177 | 186 | ||
178 | 187 | ||
179 | 188 | ||
180 | - | @Callable( | |
181 | - | func updateInteger ( | |
182 | - | then (toString( | |
189 | + | @Callable(S) | |
190 | + | func updateInteger (r,am) = if (if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
191 | + | then (toString(S.caller) != "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3") | |
183 | 192 | else false) | |
184 | 193 | then throw("no access to this method") | |
185 | - | else [IntegerEntry( | |
194 | + | else [IntegerEntry(r, am)] | |
186 | 195 | ||
187 | 196 | ||
188 | 197 | ||
189 | - | @Callable( | |
190 | - | func getUserBalanceREADONLY ( | |
191 | - | let | |
192 | - | if (( | |
193 | - | then throw(toString( | |
194 | - | else $Tuple2(nil, | |
198 | + | @Callable(S) | |
199 | + | func getUserBalanceREADONLY (an,ao,g) = { | |
200 | + | let ap = n(addressFromStringValue(ao), g, true) | |
201 | + | if ((an == true)) | |
202 | + | then throw(toString(ap)) | |
203 | + | else $Tuple2(nil, ap) | |
195 | 204 | } | |
196 | 205 | ||
197 | 206 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | let a = | |
4 | + | let a = "PLLiq-1.0.2" | |
5 | 5 | ||
6 | - | let b = | |
6 | + | let b = 100000000 | |
7 | 7 | ||
8 | - | func c (d) = if ((d == "WAVES")) | |
8 | + | let c = 10000000000000000 | |
9 | + | ||
10 | + | func d (e) = if ((e == "WAVES")) | |
9 | 11 | then unit | |
10 | - | else fromBase58String( | |
12 | + | else fromBase58String(e) | |
11 | 13 | ||
12 | 14 | ||
13 | - | func | |
15 | + | func f (g) = (indexOf(valueOrElse(getString(this, "setup_liquidators"), ""), toString(g)) != unit) | |
14 | 16 | ||
15 | 17 | ||
16 | - | let | |
18 | + | let h = valueOrElse(getInteger(this, "setup_maxShareToLiquidate"), 100) | |
17 | 19 | ||
18 | - | let | |
20 | + | let i = valueOrElse(getInteger(this, "setup_liquidationDelay"), 10) | |
19 | 21 | ||
20 | - | let | |
22 | + | let j = valueOrElse(getInteger(this, "setup_liquidatorReward"), 10) | |
21 | 23 | ||
22 | - | let | |
24 | + | let k = (valueOrElse(getInteger(this, "setup_badDebtLiqAllowed"), 0) > 0) | |
23 | 25 | ||
24 | - | let | |
26 | + | let l = valueOrElse(addressFromString(valueOrElse(getString(this, "setup_address_oracle"), "")), Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')) | |
25 | 27 | ||
26 | - | let | |
28 | + | let m = valueOrElse(getString(this, "setup_markets"), makeString(["3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH"], ",")) | |
27 | 29 | ||
28 | - | func | |
29 | - | func | |
30 | - | let | |
31 | - | if ($isInstanceOf( | |
30 | + | func n (o,g,p) = { | |
31 | + | func q (r) = { | |
32 | + | let s = getString(o, r) | |
33 | + | if ($isInstanceOf(s, "String")) | |
32 | 34 | then { | |
33 | - | let | |
34 | - | | |
35 | + | let t = s | |
36 | + | t | |
35 | 37 | } | |
36 | 38 | else "" | |
37 | 39 | } | |
38 | 40 | ||
39 | - | func | |
40 | - | let | |
41 | - | if ($isInstanceOf( | |
41 | + | func u (r) = { | |
42 | + | let s = getInteger(o, r) | |
43 | + | if ($isInstanceOf(s, "Int")) | |
42 | 44 | then { | |
43 | - | let | |
44 | - | | |
45 | + | let t = s | |
46 | + | t | |
45 | 47 | } | |
46 | 48 | else 0 | |
47 | 49 | } | |
48 | 50 | ||
49 | - | func | |
51 | + | func v (e) = if (if ((e == "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi")) | |
50 | 52 | then true | |
51 | - | else ( | |
53 | + | else (e == "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW")) | |
52 | 54 | then $Tuple2(1000000, 1000000) | |
53 | 55 | else { | |
54 | - | let | |
55 | - | $Tuple2( | |
56 | + | let w = getIntegerValue(l, (e + "_twap5B")) | |
57 | + | $Tuple2(w, w) | |
56 | 58 | } | |
57 | 59 | ||
58 | - | func | |
59 | - | let | |
60 | + | func x (e) = { | |
61 | + | let y = if ((e == "WAVES")) | |
60 | 62 | then 8 | |
61 | - | else value(assetInfo(fromBase58String( | |
62 | - | pow(10, 0, | |
63 | + | else value(assetInfo(fromBase58String(e))).decimals | |
64 | + | pow(10, 0, y, 0, 0, DOWN) | |
63 | 65 | } | |
64 | 66 | ||
65 | - | let | |
66 | - | let | |
67 | - | let | |
68 | - | func | |
69 | - | then | |
67 | + | let z = split(q("setup_tokens"), ",") | |
68 | + | let A = split(q("setup_ltvs"), ",") | |
69 | + | let B = split(q("setup_lts"), ",") | |
70 | + | func C (D,E) = if ((E >= size(z))) | |
71 | + | then D | |
70 | 72 | else { | |
71 | - | let | |
72 | - | let | |
73 | - | let | |
73 | + | let F = u(((g + "_supplied_") + z[E])) | |
74 | + | let G = u(((g + "_borrowed_") + z[E])) | |
75 | + | let H = if (if ((G != 0)) | |
74 | 76 | then true | |
75 | - | else ( | |
77 | + | else (F != 0)) | |
76 | 78 | then true | |
77 | 79 | else false | |
78 | - | if ( | |
80 | + | if (H) | |
79 | 81 | then { | |
80 | - | let | |
81 | - | let | |
82 | - | (( | |
83 | - | then fraction(fraction( | |
82 | + | let I = x(z[E]) | |
83 | + | let J = v(z[E]) | |
84 | + | ((D + fraction(fraction(F, u((z[E] + "_sRate")), c), J._1, I)) - (if (p) | |
85 | + | then fraction(fraction(G, u((z[E] + "_bRate")), c), J._1, I) | |
84 | 86 | else 0)) | |
85 | 87 | } | |
86 | - | else | |
88 | + | else D | |
87 | 89 | } | |
88 | 90 | ||
89 | - | let | |
90 | - | let | |
91 | - | let | |
92 | - | let | |
93 | - | func | |
94 | - | then | |
95 | - | else | |
91 | + | let K = { | |
92 | + | let L = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] | |
93 | + | let M = size(L) | |
94 | + | let N = 0 | |
95 | + | func O (P,Q) = if ((Q >= M)) | |
96 | + | then P | |
97 | + | else C(P, L[Q]) | |
96 | 98 | ||
97 | - | func | |
98 | - | then | |
99 | + | func R (P,Q) = if ((Q >= M)) | |
100 | + | then P | |
99 | 101 | else throw("List size exceeds 12") | |
100 | 102 | ||
101 | - | | |
103 | + | R(O(O(O(O(O(O(O(O(O(O(O(O(N, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12) | |
102 | 104 | } | |
103 | - | | |
105 | + | K | |
104 | 106 | } | |
105 | 107 | ||
106 | 108 | ||
107 | - | @Callable( | |
108 | - | func proxyLiquidateV2 ( | |
109 | + | @Callable(S) | |
110 | + | func proxyLiquidateV2 (o,T,U,V,W) = if ((indexOf(m, o) == unit)) | |
109 | 111 | then throw("given pool address is not a pool") | |
110 | - | else { | |
111 | - | let W = invoke(addressFromStringValue(n), "liquidateV2", [false, S, U], [AttachedPayment(c(T), V)]) | |
112 | - | if ((W == W)) | |
113 | - | then nil | |
114 | - | else throw("Strict value is not equal to itself.") | |
115 | - | } | |
112 | + | else if (!(f(S.caller))) | |
113 | + | then throw("no permission to perform liquidation") | |
114 | + | else { | |
115 | + | let X = invoke(addressFromStringValue(o), "liquidateV2", [false, T, V], [AttachedPayment(d(U), W)]) | |
116 | + | if ((X == X)) | |
117 | + | then { | |
118 | + | let Y = valueOrElse(getInteger(addressFromStringValue(o), ((T + "_borrowed_") + U)), 0) | |
119 | + | if ((0 > Y)) | |
120 | + | then throw("transaction leads to a negative borrowed amount") | |
121 | + | else nil | |
122 | + | } | |
123 | + | else throw("Strict value is not equal to itself.") | |
124 | + | } | |
116 | 125 | ||
117 | 126 | ||
118 | 127 | ||
119 | - | @Callable( | |
120 | - | func proxyLiquidateV3 ( | |
128 | + | @Callable(S) | |
129 | + | func proxyLiquidateV3 (o,T,U,V,W,Z) = if ((indexOf(m, o) == unit)) | |
121 | 130 | then throw("given market address is not a market") | |
122 | - | else if (!( | |
131 | + | else if (!(f(S.caller))) | |
123 | 132 | then throw("no permission to perform liquidation") | |
124 | 133 | else { | |
125 | - | let | |
126 | - | let | |
127 | - | let | |
128 | - | let | |
129 | - | let | |
130 | - | let | |
131 | - | let | |
132 | - | if (( | |
134 | + | let aa = addressFromStringValue(o) | |
135 | + | let ab = getIntegerValue(aa, (V + "_sRate")) | |
136 | + | let ac = getIntegerValue(aa, ((T + "_supplied_") + V)) | |
137 | + | let ad = fraction(ac, ab, c) | |
138 | + | let ae = (("history_market_" + o) + "_lastLiquidation") | |
139 | + | let af = (("history_user_" + T) + "_lastLiquidation") | |
140 | + | let ag = valueOrElse(getInteger(this, af), 0) | |
141 | + | if ((W > fraction(h, ad, 10000))) | |
133 | 142 | then throw("should liquidate smaller part per time") | |
134 | - | else if ((( | |
143 | + | else if (((ag + i) > height)) | |
135 | 144 | then throw("cannot liquidate yet") | |
136 | 145 | else { | |
137 | - | let | |
138 | - | if (( | |
146 | + | let X = invoke(aa, "liquidate", [false, T, W, V, U, Z], nil) | |
147 | + | if ((X == X)) | |
139 | 148 | then { | |
140 | - | let | |
141 | - | let | |
142 | - | if ((0 > | |
149 | + | let Y = valueOrElse(getInteger(aa, ((T + "_borrowed_") + U)), 0) | |
150 | + | let ah = n(aa, T, true) | |
151 | + | if ((0 > Y)) | |
143 | 152 | then throw("transaction leads to a negative borrowed amount") | |
144 | - | else if (if (!( | |
145 | - | then (0 >= | |
153 | + | else if (if (!(k)) | |
154 | + | then (0 >= ah) | |
146 | 155 | else false) | |
147 | 156 | then throw("transaction leads to a bad debt") | |
148 | 157 | else { | |
149 | - | let | |
150 | - | let | |
151 | - | [IntegerEntry( | |
158 | + | let ai = fraction(W, j, 10000) | |
159 | + | let aj = ((("reward_" + toString(S.caller)) + "_") + V) | |
160 | + | [IntegerEntry(aj, (valueOrElse(getInteger(this, aj), 0) + ai)), IntegerEntry(af, height), IntegerEntry(ae, height)] | |
152 | 161 | } | |
153 | 162 | } | |
154 | 163 | else throw("Strict value is not equal to itself.") | |
155 | 164 | } | |
156 | 165 | } | |
157 | 166 | ||
158 | 167 | ||
159 | 168 | ||
160 | - | @Callable( | |
161 | - | func payoutReward ( | |
169 | + | @Callable(S) | |
170 | + | func payoutReward (ak,e) = if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
162 | 171 | then throw("no access to this method") | |
163 | 172 | else { | |
164 | - | let | |
165 | - | let | |
166 | - | [ScriptTransfer(addressFromStringValue( | |
173 | + | let aj = ((("reward_" + ak) + "_") + e) | |
174 | + | let al = valueOrElse(getInteger(this, aj), 0) | |
175 | + | [ScriptTransfer(addressFromStringValue(ak), al, d(e)), IntegerEntry(aj, 0)] | |
167 | 176 | } | |
168 | 177 | ||
169 | 178 | ||
170 | 179 | ||
171 | - | @Callable( | |
172 | - | func updateString ( | |
173 | - | then (toString( | |
180 | + | @Callable(S) | |
181 | + | func updateString (r,am) = if (if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
182 | + | then (toString(S.caller) != "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3") | |
174 | 183 | else false) | |
175 | 184 | then throw("no access to this method") | |
176 | - | else [StringEntry( | |
185 | + | else [StringEntry(r, am)] | |
177 | 186 | ||
178 | 187 | ||
179 | 188 | ||
180 | - | @Callable( | |
181 | - | func updateInteger ( | |
182 | - | then (toString( | |
189 | + | @Callable(S) | |
190 | + | func updateInteger (r,am) = if (if ((toString(S.caller) != "3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL")) | |
191 | + | then (toString(S.caller) != "3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3") | |
183 | 192 | else false) | |
184 | 193 | then throw("no access to this method") | |
185 | - | else [IntegerEntry( | |
194 | + | else [IntegerEntry(r, am)] | |
186 | 195 | ||
187 | 196 | ||
188 | 197 | ||
189 | - | @Callable( | |
190 | - | func getUserBalanceREADONLY ( | |
191 | - | let | |
192 | - | if (( | |
193 | - | then throw(toString( | |
194 | - | else $Tuple2(nil, | |
198 | + | @Callable(S) | |
199 | + | func getUserBalanceREADONLY (an,ao,g) = { | |
200 | + | let ap = n(addressFromStringValue(ao), g, true) | |
201 | + | if ((an == true)) | |
202 | + | then throw(toString(ap)) | |
203 | + | else $Tuple2(nil, ap) | |
195 | 204 | } | |
196 | 205 | ||
197 | 206 |
github/deemru/w8io/873ac7e 76.49 ms ◑