tx · 7JkRh4BxyUtKDaNMntX52dqiLngGev9stbkgRZ4NciKx

3PLoX5yufZz9jRahL1CVVRAXq8VpUmXBKLK:  -0.00400000 Waves

2023.06.29 23:20 [3710070] smart account 3PLoX5yufZz9jRahL1CVVRAXq8VpUmXBKLK > SELF 0.00000000 Waves

{ "type": 13, "id": "7JkRh4BxyUtKDaNMntX52dqiLngGev9stbkgRZ4NciKx", "fee": 400000, "feeAssetId": null, "timestamp": 1688070093193, "version": 1, "sender": "3PLoX5yufZz9jRahL1CVVRAXq8VpUmXBKLK", "senderPublicKey": "BWWhbKtEdrxx3J5qEs2cTkcHEGNpNqQjMzGigaM99SMu", "proofs": [ "5hEPrrzHsgzu8EfBb6KnTFbqRRt2S6qV3gnvBFyyKHDhvq21f5a2zHkCdaEMQCtszBonE1JBfEC3ideZnepYLtuE" ], "script": "base64:BgIPCAISAwoBCBIECgIIARIACAAIT25lV2F2ZXMAgMLXLwAKbGVhc2VJZEtleQIHbGVhc2VJZAANc3Rha2VXYXZlc0tleQILc3Rha2VfV0FWRVMADGFkZHJlc3Nlc0tleQIJYWRkcmVzc2VzAAh3YXZlc0tleQIFV0FWRVMACHNwbGl0S2V5AgFfAAxjb25maWd1cmF0b3IJAQdBZGRyZXNzAQEaAVdAGjmX0A7iCW1nlAljsT8Vluif3UstvuQABG5vZGUJAQdBZGRyZXNzAQEaAVfL1CR9DMpUVBBNkVS4LS6643QX2Rgh08MDAWkBBXNldHVwAQlhZGRyZXNzZXMDCQECIT0CCAUBaQZjYWxsZXIFDGNvbmZpZ3VyYXRvcgkAAgECC05vIHRvdWNoaW5nAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm90IGVtcHR5IHBheW1lbnRzBARsaXN0CQC8CQIFCWFkZHJlc3NlcwUIc3BsaXRLZXkECGxpc3RTaXplCQCQAwEFBGxpc3QKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZgIIBQVhY2N1bQJfMQUIbGlzdFNpemUFBWFjY3VtCQCUCgIJAGQCCAUFYWNjdW0CXzEAAQkAzQgCCAUFYWNjdW0CXzIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBG5leHQECHZhbGlkYXRlCgACJGwFBGxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAMJAAACBQh2YWxpZGF0ZQUIdmFsaWRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgUMYWRkcmVzc2VzS2V5BQlhZGRyZXNzZXMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCCGFzc2V0U3RyBmFtb3VudAMJAQEhAQkBCGNvbnRhaW5zAgkBEUBleHRyTmF0aXZlKDEwNTgpAQUMYWRkcmVzc2VzS2V5CQClCAEIBQFpBmNhbGxlcgkAAgECC05vIHRvdWNoaW5nAwkAAAIFCGFzc2V0U3RyBQh3YXZlc0tleQQLbGVhc2VBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNc3Rha2VXYXZlc0tleQAABA1iYWxhbmNlQW1vdW50CQBlAggJAO8HAQUEdGhpcwdyZWd1bGFyBQhPbmVXYXZlcwQQYm9ycm93YWJsZUFzc2V0cwMDCQAAAgUGYW1vdW50AAAGCQBnAgUGYW1vdW50BQ1iYWxhbmNlQW1vdW50CQCUCgIAAAUNYmFsYW5jZUFtb3VudAkAlAoCCQBlAgUNYmFsYW5jZUFtb3VudAUGYW1vdW50BQZhbW91bnQEDGxlYXNlQWN0aW9ucwMJAGYCCAUQYm9ycm93YWJsZUFzc2V0cwJfMQAABAVsZWFzZQkAxAgCBQRub2RlCAUQYm9ycm93YWJsZUFzc2V0cwJfMQkAzAgCBQVsZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQpsZWFzZUlkS2V5CQC5CAEFBWxlYXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1zdGFrZVdhdmVzS2V5CAUQYm9ycm93YWJsZUFzc2V0cwJfMQUDbmlsCQDMCAIJAQtEZWxldGVFbnRyeQEFCmxlYXNlSWRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFDXN0YWtlV2F2ZXNLZXkAAAUDbmlsBAdsZWFzZUlkCQELdmFsdWVPckVsc2UCCQChCAEFCmxlYXNlSWRLZXkBAAQVY2FuY2VsQW5kTGVhc2VBY3Rpb25zAwkAAAIFB2xlYXNlSWQBAAUMbGVhc2VBY3Rpb25zCQDMCAIJAQtMZWFzZUNhbmNlbAEFB2xlYXNlSWQFDGxlYXNlQWN0aW9ucwQNcmVzdWx0QWN0aW9ucwkAzQgCBRVjYW5jZWxBbmRMZWFzZUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFEGJvcnJvd2FibGVBc3NldHMCXzIFBHVuaXQJAJQKAgUNcmVzdWx0QWN0aW9ucwgFEGJvcnJvd2FibGVBc3NldHMCXzIEB2Fzc2V0SWQJANkEAQUIYXNzZXRTdHIEDWJhbGFuY2VBbW91bnQJAPAHAgUEdGhpcwkBBXZhbHVlAQUHYXNzZXRJZAQQYm9ycm93YWJsZUFzc2V0cwMDCQAAAgUGYW1vdW50AAAGCQBnAgUGYW1vdW50BQ1iYWxhbmNlQW1vdW50BQ1iYWxhbmNlQW1vdW50BQZhbW91bnQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEGJvcnJvd2FibGVBc3NldHMFB2Fzc2V0SWQFA25pbAUQYm9ycm93YWJsZUFzc2V0cwFpAQVyZXBheQAEB3BheW1lbnQJAJEDAggFAWkIcGF5bWVudHMAAAMJAAACCAUHcGF5bWVudAdhc3NldElkBQR1bml0BA1iYWxhbmNlQW1vdW50CQBlAggJAO8HAQUEdGhpcwdyZWd1bGFyBQhPbmVXYXZlcwQFbGVhc2UJAMQIAgUEbm9kZQUNYmFsYW5jZUFtb3VudAQMbGVhc2VBY3Rpb25zCQDMCAIFBWxlYXNlCQDMCAIJAQtCaW5hcnlFbnRyeQIFCmxlYXNlSWRLZXkJALkIAQUFbGVhc2UJAMwIAgkBDEludGVnZXJFbnRyeQIFDXN0YWtlV2F2ZXNLZXkFDWJhbGFuY2VBbW91bnQFA25pbAQHbGVhc2VJZAkBC3ZhbHVlT3JFbHNlAgkAoQgBBQpsZWFzZUlkS2V5AQADCQAAAgUHbGVhc2VJZAEABQxsZWFzZUFjdGlvbnMJAMwIAgkBC0xlYXNlQ2FuY2VsAQUHbGVhc2VJZAUMbGVhc2VBY3Rpb25zBQNuaWwApoQgvA==", "chainId": 87, "height": 3710070, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 4NfodfaEU2vC6S5JfQDX8YW8zEWZdk1x5xeu6zrhmF1G Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let OneWaves = 100000000
5+
6+let leaseIdKey = "leaseId"
7+
8+let stakeWavesKey = "stake_WAVES"
9+
10+let addressesKey = "addresses"
11+
12+let wavesKey = "WAVES"
13+
14+let splitKey = "_"
15+
16+let configurator = Address(base58'3P7mqPfcMt4GeBE1U8gF9jgpCT9T85fSK4f')
17+
18+let node = Address(base58'3PLWe37Ja5HJbsVZUqRCSKH5H5uB7N6MA2v')
19+
20+@Callable(i)
21+func setup (addresses) = if ((i.caller != configurator))
22+ then throw("No touching")
23+ else if ((size(i.payments) != 0))
24+ then throw("Not empty payments")
25+ else {
26+ let list = split_4C(addresses, splitKey)
27+ let listSize = size(list)
28+ func fold (accum,next) = if ((accum._1 > listSize))
29+ then accum
30+ else $Tuple2((accum._1 + 1), (accum._2 :+ addressFromStringValue(next)))
31+
32+ let validate = {
33+ let $l = list
34+ let $s = size($l)
35+ let $acc0 = $Tuple2(0, nil)
36+ func $f0_1 ($a,$i) = if (($i >= $s))
37+ then $a
38+ else fold($a, $l[$i])
39+
40+ func $f0_2 ($a,$i) = if (($i >= $s))
41+ then $a
42+ else throw("List size exceeds 100")
43+
44+ $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
45+ }
46+ if ((validate == validate))
47+ then [StringEntry(addressesKey, addresses)]
48+ else throw("Strict value is not equal to itself.")
49+ }
50+
51+
52+
53+@Callable(i)
54+func borrow (assetStr,amount) = if (!(contains(getStringValue(addressesKey), toString(i.caller))))
55+ then throw("No touching")
56+ else if ((assetStr == wavesKey))
57+ then {
58+ let leaseAmount = valueOrElse(getInteger(stakeWavesKey), 0)
59+ let balanceAmount = (wavesBalance(this).regular - OneWaves)
60+ let borrowableAssets = if (if ((amount == 0))
61+ then true
62+ else (amount >= balanceAmount))
63+ then $Tuple2(0, balanceAmount)
64+ else $Tuple2((balanceAmount - amount), amount)
65+ let leaseActions = if ((borrowableAssets._1 > 0))
66+ then {
67+ let lease = Lease(node, borrowableAssets._1)
68+[lease, BinaryEntry(leaseIdKey, calculateLeaseId(lease)), IntegerEntry(stakeWavesKey, borrowableAssets._1)]
69+ }
70+ else [DeleteEntry(leaseIdKey), IntegerEntry(stakeWavesKey, 0)]
71+ let leaseId = valueOrElse(getBinary(leaseIdKey), base58'')
72+ let cancelAndLeaseActions = if ((leaseId == base58''))
73+ then leaseActions
74+ else LeaseCancel(leaseId) :: leaseActions
75+ let resultActions = (cancelAndLeaseActions :+ ScriptTransfer(i.caller, borrowableAssets._2, unit))
76+ $Tuple2(resultActions, borrowableAssets._2)
77+ }
78+ else {
79+ let assetId = fromBase58String(assetStr)
80+ let balanceAmount = assetBalance(this, value(assetId))
81+ let borrowableAssets = if (if ((amount == 0))
82+ then true
83+ else (amount >= balanceAmount))
84+ then balanceAmount
85+ else amount
86+ $Tuple2([ScriptTransfer(i.caller, borrowableAssets, assetId)], borrowableAssets)
87+ }
88+
89+
90+
91+@Callable(i)
92+func repay () = {
93+ let payment = i.payments[0]
94+ if ((payment.assetId == unit))
95+ then {
96+ let balanceAmount = (wavesBalance(this).regular - OneWaves)
97+ let lease = Lease(node, balanceAmount)
98+ let leaseActions = [lease, BinaryEntry(leaseIdKey, calculateLeaseId(lease)), IntegerEntry(stakeWavesKey, balanceAmount)]
99+ let leaseId = valueOrElse(getBinary(leaseIdKey), base58'')
100+ if ((leaseId == base58''))
101+ then leaseActions
102+ else LeaseCancel(leaseId) :: leaseActions
103+ }
104+ else nil
105+ }
106+
107+

github/deemru/w8io/3ef1775 
21.37 ms