tx · 3z1v5LtRkNZpftPpgWANmAEStmqdNx3YZ1AjTUCtgWfX 3N8Cko4wa6ewdnPRXybzTMDpnhuYREfkps7: -0.00200000 Waves 2023.08.19 19:28 [2717725] smart account 3N8Cko4wa6ewdnPRXybzTMDpnhuYREfkps7 > SELF 0.00000000 Waves
{ "type": 13, "id": "3z1v5LtRkNZpftPpgWANmAEStmqdNx3YZ1AjTUCtgWfX", "fee": 200000, "feeAssetId": null, "timestamp": 1692462594617, "version": 2, "chainId": 84, "sender": "3N8Cko4wa6ewdnPRXybzTMDpnhuYREfkps7", "senderPublicKey": "4oVxBvsmoAhMaT1WhgSLcKFKX1NzwYxDaR89cAdGRGky", "proofs": [ "3MPL4p6bwUxSZ4zQzH5SYRkBkcDABJ5SBUHkKrvDTjEvsS2QJK5EYxorUjjwPEqYprj5ZgX3EwH9ZSBUufMFe9Wr" ], "script": "base64:BgIOCAISABIECgIIARIAEgAGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQAD3piaWxsQXNzZXRJZEtleQINemJpbGxfYXNzZXRJZAAMemJpbGxBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUEdGhpcwUPemJpbGxBc3NldElkS2V5AhNOb3QgaW5pdGlhbGl6ZWQgeWV0ABR6YmlsbElzc3VlZEFtb3VudEtleQISemJpbGxfaXNzdWVkQW1vdW50BAFpAQ1jb25zdHJ1Y3RvclYxAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkAwkBCWlzRGVmaW5lZAEJAKEIAQUPemJpbGxBc3NldElkS2V5CQACAQITQWxyZWFkeSBpbml0aWFsaXplZAQMaXNzdWVkQW1vdW50AAAEBWlzc3VlCQDDCAcCBVpCSUxMAhtVU0RUIEJpbGwgb2YgRXhjaGFuZ2UgdG9rZW4FDGlzc3VlZEFtb3VudAAGBgUEdW5pdAAABAdhc3NldElkCQC4CAEFBWlzc3VlCQDMCAIFBWlzc3VlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRR6YmlsbElzc3VlZEFtb3VudEtleQUMaXNzdWVkQW1vdW50CQDMCAIJAQtCaW5hcnlFbnRyeQIFD3piaWxsQXNzZXRJZEtleQUHYXNzZXRJZAUDbmlsAWkBCHRha2VVc2R0AghkZXN0QWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnRzIGFsbG93ZWQEDGlzc3VlZEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQUUemJpbGxJc3N1ZWRBbW91bnRLZXkJAMwIAgkBB1JlaXNzdWUDBQx6YmlsbEFzc2V0SWQFBmFtb3VudAYJAMwIAgkBDEludGVnZXJFbnRyeQIFFHpiaWxsSXNzdWVkQW1vdW50S2V5CQBkAgUMaXNzdWVkQW1vdW50BQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIZGVzdEFkZHIFBmFtb3VudAULdXNkdEFzc2V0SWQFA25pbAFpAQpyZXR1cm5Vc2R0AAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQMaXNzdWVkQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBBRR6YmlsbElzc3VlZEFtb3VudEtleQMJAGYCBQNhbXQFDGlzc3VlZEFtb3VudAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIYQ2FuJ3QgcmV0dXJuIG1vcmUgVVNEVCAoCQEKZml4ZWRQb2ludAIFA2FtdAAGAhYpLCB0aGFuIGlzc3VlZCBaQklMTCAoCQEKZml4ZWRQb2ludAIFDGlzc3VlZEFtb3VudAAGAgEpCQDMCAIJAQRCdXJuAgUMemJpbGxBc3NldElkBQNhbXQJAMwIAgkBDEludGVnZXJFbnRyeQIFFHpiaWxsSXNzdWVkQW1vdW50S2V5CQBlAgUMaXNzdWVkQW1vdW50BQNhbXQFA25pbAFpARBnZXRGdW5kc1JFQURPTkxZAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnRzIGFsbG93ZWQEB2Z1bmRTdW0JAGQCCQDwBwIFBHRoaXMFC3VzZHRBc3NldElkCQDwBwIFBHRoaXMFDHpiaWxsQXNzZXRJZAkAlAoCBQNuaWwFB2Z1bmRTdW0AmTQtRQ==", "height": 2717725, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ehsc7HL5umkMKkM4FH3DM1VW1BYwDgCjXbndH7UMMMtY Next: GcvBRrUTjnLiYHkiPeMEyaCS57bPXLYYPa6bzfgW2Es4 Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | + | ||
15 | + | func fixedPoint (val,decimals) = { | |
16 | + | let tenPow = pow(10, 0, decimals, 0, 0, DOWN) | |
17 | + | let lowPart = toString((val % tenPow)) | |
18 | + | let zeroes = drop(toString(tenPow), (1 + size(lowPart))) | |
19 | + | (((toString((val / tenPow)) + ".") + zeroes) + lowPart) | |
20 | + | } | |
21 | + | ||
14 | 22 | ||
15 | 23 | let zbillAssetIdKey = "zbill_assetId" | |
16 | 24 | ||
55 | 63 | then throw("USDT payments only!") | |
56 | 64 | else { | |
57 | 65 | let issuedAmount = getIntegerValue(zbillIssuedAmountKey) | |
58 | - | [Burn(zbillAssetId, amt), IntegerEntry(zbillIssuedAmountKey, (issuedAmount - amt))] | |
66 | + | if ((amt > issuedAmount)) | |
67 | + | then throw((((("Can't return more USDT (" + fixedPoint(amt, 6)) + "), than issued ZBILL (") + fixedPoint(issuedAmount, 6)) + ")")) | |
68 | + | else [Burn(zbillAssetId, amt), IntegerEntry(zbillIssuedAmountKey, (issuedAmount - amt))] | |
59 | 69 | } | |
60 | 70 | } | |
61 | 71 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let chain = take(drop(this.bytes, 1), 1) | |
5 | 5 | ||
6 | 6 | let usdtAssetId = match chain { | |
7 | 7 | case _ => | |
8 | 8 | if ((base58'2W' == $match0)) | |
9 | 9 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
10 | 10 | else if ((base58'2T' == $match0)) | |
11 | 11 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | + | ||
15 | + | func fixedPoint (val,decimals) = { | |
16 | + | let tenPow = pow(10, 0, decimals, 0, 0, DOWN) | |
17 | + | let lowPart = toString((val % tenPow)) | |
18 | + | let zeroes = drop(toString(tenPow), (1 + size(lowPart))) | |
19 | + | (((toString((val / tenPow)) + ".") + zeroes) + lowPart) | |
20 | + | } | |
21 | + | ||
14 | 22 | ||
15 | 23 | let zbillAssetIdKey = "zbill_assetId" | |
16 | 24 | ||
17 | 25 | let zbillAssetId = valueOrErrorMessage(getBinary(this, zbillAssetIdKey), "Not initialized yet") | |
18 | 26 | ||
19 | 27 | let zbillIssuedAmountKey = "zbill_issuedAmount" | |
20 | 28 | ||
21 | 29 | @Callable(i) | |
22 | 30 | func constructorV1 () = if ((i.caller != this)) | |
23 | 31 | then throw("Permission denied") | |
24 | 32 | else if (isDefined(getBinary(zbillAssetIdKey))) | |
25 | 33 | then throw("Already initialized") | |
26 | 34 | else { | |
27 | 35 | let issuedAmount = 0 | |
28 | 36 | let issue = Issue("ZBILL", "USDT Bill of Exchange token", issuedAmount, 6, true, unit, 0) | |
29 | 37 | let assetId = calculateAssetId(issue) | |
30 | 38 | [issue, IntegerEntry(zbillIssuedAmountKey, issuedAmount), BinaryEntry(zbillAssetIdKey, assetId)] | |
31 | 39 | } | |
32 | 40 | ||
33 | 41 | ||
34 | 42 | ||
35 | 43 | @Callable(i) | |
36 | 44 | func takeUsdt (destAddr,amount) = if ((i.caller != this)) | |
37 | 45 | then throw("permission denied") | |
38 | 46 | else if ((size(i.payments) != 0)) | |
39 | 47 | then throw("No payments allowed") | |
40 | 48 | else { | |
41 | 49 | let issuedAmount = getIntegerValue(zbillIssuedAmountKey) | |
42 | 50 | [Reissue(zbillAssetId, amount, true), IntegerEntry(zbillIssuedAmountKey, (issuedAmount + amount)), ScriptTransfer(addressFromStringValue(destAddr), amount, usdtAssetId)] | |
43 | 51 | } | |
44 | 52 | ||
45 | 53 | ||
46 | 54 | ||
47 | 55 | @Callable(i) | |
48 | 56 | func returnUsdt () = if ((size(i.payments) != 1)) | |
49 | 57 | then throw("exactly 1 payment must be attached") | |
50 | 58 | else { | |
51 | 59 | let pmt = i.payments[0] | |
52 | 60 | let amt = pmt.amount | |
53 | 61 | let pmtAssetId = valueOrErrorMessage(pmt.assetId, "USDT payments only!") | |
54 | 62 | if ((pmtAssetId != usdtAssetId)) | |
55 | 63 | then throw("USDT payments only!") | |
56 | 64 | else { | |
57 | 65 | let issuedAmount = getIntegerValue(zbillIssuedAmountKey) | |
58 | - | [Burn(zbillAssetId, amt), IntegerEntry(zbillIssuedAmountKey, (issuedAmount - amt))] | |
66 | + | if ((amt > issuedAmount)) | |
67 | + | then throw((((("Can't return more USDT (" + fixedPoint(amt, 6)) + "), than issued ZBILL (") + fixedPoint(issuedAmount, 6)) + ")")) | |
68 | + | else [Burn(zbillAssetId, amt), IntegerEntry(zbillIssuedAmountKey, (issuedAmount - amt))] | |
59 | 69 | } | |
60 | 70 | } | |
61 | 71 | ||
62 | 72 | ||
63 | 73 | ||
64 | 74 | @Callable(i) | |
65 | 75 | func getFundsREADONLY () = if ((size(i.payments) != 0)) | |
66 | 76 | then throw("No payments allowed") | |
67 | 77 | else { | |
68 | 78 | let fundSum = (assetBalance(this, usdtAssetId) + assetBalance(this, zbillAssetId)) | |
69 | 79 | $Tuple2(nil, fundSum) | |
70 | 80 | } | |
71 | 81 | ||
72 | 82 |
github/deemru/w8io/026f985 21.30 ms ◑