tx · G9A3gkA3wMSCCBEdF7Jf8qAvUZLXxetvdAcQfrr9gTw

3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG:  -0.00300000 Waves

2023.09.01 02:49 [2735540] smart account 3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG > SELF 0.00000000 Waves

{ "type": 13, "id": "G9A3gkA3wMSCCBEdF7Jf8qAvUZLXxetvdAcQfrr9gTw", "fee": 300000, "feeAssetId": null, "timestamp": 1693525792029, "version": 2, "chainId": 84, "sender": "3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG", "senderPublicKey": "3MV6QZNSjqH7Ctc3BGRQJJyZ3DJgCJ6Tqn7LXRgneZ5B", "proofs": [ "2cHfxDoD4XcZDL7fCzzjiEjqptD2E3otC88vA5gK3sK9rSa2MaZABMPzm7Mrv6n9TNiKazGv5qZYT4sLNKXefRN" ], "script": "base64:BgISCAISBAoCCAESABIGCgQIAQgICQAKbGltaXRSYXRpbwCgjQYAA2ZlZQBkAAZzY2FsZTUAoI0GAAxmZWVDb2xsZWN0b3ICIzNOMkZ1em9NMXg4aEpxU0RVVmlYdXZhdE5wOWlwN0dyS29CAQpnZXRBc3NldElkAQNhc3QEByRtYXRjaDAFA2FzdAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFwBQckbWF0Y2gwBQNhc3QFBHVuaXQBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEKZ2V0QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDwBwIFBHRoaXMFAWIICQDvBwEFBHRoaXMJYXZhaWxhYmxlAQ10cnlHZXRJbnRlZ2VyAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAADAWkBBmJvcnJvdwIHYXNzZXRJZAZhbW91bnQEDmN1cnJlbnRCYWxhbmNlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJZAMJAAACBQ5jdXJyZW50QmFsYW5jZQUOY3VycmVudEJhbGFuY2UEBWxpbWl0CQBrAwUOY3VycmVudEJhbGFuY2UFCmxpbWl0UmF0aW8FBnNjYWxlNQMJAGcCBQVsaW1pdAUGYW1vdW50BAhpbnRFbnRyeQkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICCWJvcnJvd2VkXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICAV8FB2Fzc2V0SWQFBmFtb3VudAQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgUGYW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIFCGludEVudHJ5BQNuaWwJAMwIAgUIaW50RW50cnkJAMwIAgUIdHJhbnNmZXIFA25pbAkAAgEJAKwCAgkArAICCQCsAgICEVJlcXVlc3RlZCBhbW91bnQgCQCkAwEFBmFtb3VudAIXIGlzIGJpZ2dlciB0aGFuIGxpbWl0OiAJAKQDAQUFbGltaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkABAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECGJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgIJAKwCAgkArAICCQCsAgICCWJvcnJvd2VkXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICAV8JAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQFBHRoaXMDCQBmAgUIYm9ycm93ZWQAAAQNdG9SZXBheUFtb3VudAkAlwMBCQDMCAIFBmFtb3VudAkAzAgCBQhib3Jyb3dlZAUDbmlsBA50b1JldHVybkFtb3VudAkAZQIFBmFtb3VudAUNdG9SZXBheUFtb3VudAQIaW50RW50cnkJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAglib3Jyb3dlZF8JAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgFfCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkCQBlAgUIYm9ycm93ZWQFDXRvUmVwYXlBbW91bnQECHRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIFDnRvUmV0dXJuQW1vdW50BQdhc3NldElkAwkAZgIFDnRvUmV0dXJuQW1vdW50AAAJAMwIAgUIaW50RW50cnkJAMwIAgUIdHJhbnNmZXIFA25pbAkAzAgCBQhpbnRFbnRyeQUDbmlsCQACAQITWW91IHNob3VsZG4ndCByZXBheQFpAQVmbGFzaAQHYXNzZXRJZAZhbW91bnQPY2FsbGJhY2tBZGRyZXNzEGNhbGxCYWNrRnVuY3Rpb24EC2NhbGxiYWNrQWRyCQEHQWRkcmVzcwEJANkEAQUPY2FsbGJhY2tBZGRyZXNzBA5jdXJyZW50QmFsYW5jZQkBCmdldEJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQDCQAAAgUOY3VycmVudEJhbGFuY2UFDmN1cnJlbnRCYWxhbmNlBAZib3Jyb3cJAPwHBAUEdGhpcwIGYm9ycm93CQDMCAIFB2Fzc2V0SWQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQZib3Jyb3cFBmJvcnJvdwQIY2FsbGJhY2sJAPwHBAkBB0FkZHJlc3MBCQDZBAEFD2NhbGxiYWNrQWRkcmVzcwUQY2FsbEJhY2tGdW5jdGlvbgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQFBmFtb3VudAUDbmlsAwkAAAIFCGNhbGxiYWNrBQhjYWxsYmFjawQJZmVlQW1vdW50CQBrAwUGYW1vdW50BQNmZWUFBnNjYWxlNQQNYW1vdW50VG9SZXBheQkAZAIFBmFtb3VudAUJZmVlQW1vdW50BApuZXdCYWxhbmNlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJZAMJAAACBQpuZXdCYWxhbmNlBQpuZXdCYWxhbmNlAwkAZwIFCm5ld0JhbGFuY2UFDmN1cnJlbnRCYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgIQY3VycmVudEJhbGFuY2U6IAkApAMBBQ5jdXJyZW50QmFsYW5jZQIOLCBuZXdCYWxhbmNlOiAJAKQDAQUKbmV3QmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICKFJlamVjdGVkIGR1ZSB0byBsb3cgcmVwYXkgYW1vdW50LiBOZWVkOiAJAKQDAQUNYW1vdW50VG9SZXBheQIMLCBwcm92aWRlZDogCQCkAwEJAGUCBQpuZXdCYWxhbmNlBQ5jdXJyZW50QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgDw41F1", "height": 2735540, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2LGqgBzdBPdaEPYXnUq5JEExyVHPNeSELsZfUcfw2jKH Next: CQFn5V94xYDrowXD5JErCRUD84EthGZiVt2JdYbEX7RF Diff:
OldNewDifferences
5353 then {
5454 let limit = fraction(currentBalance, limitRatio, scale5)
5555 if ((limit >= amount))
56- then [IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + assetId), amount), ScriptTransfer(i.originCaller, amount, getAssetBytes(assetId))]
56+ then {
57+ let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + assetId), amount)
58+ let transfer = ScriptTransfer(i.originCaller, amount, getAssetBytes(assetId))
59+ if ((i.caller == this))
60+ then [intEntry]
61+ else [intEntry, transfer]
62+ }
5763 else throw(((("Requested amount " + toString(amount)) + " is bigger than limit: ") + toString(limit)))
5864 }
5965 else throw("Strict value is not equal to itself.")
7076 then {
7177 let toRepayAmount = min([amount, borrowed])
7278 let toReturnAmount = (amount - toRepayAmount)
73- let returnTransfer = if ((toReturnAmount > 0))
74- then ScriptTransfer(i.originCaller, toReturnAmount, assetId)
75- else unit
76-[IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), (borrowed - toRepayAmount))]
79+ let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), (borrowed - toRepayAmount))
80+ let transfer = ScriptTransfer(i.originCaller, toReturnAmount, assetId)
81+ if ((toReturnAmount > 0))
82+ then [intEntry, transfer]
83+ else [intEntry]
7784 }
7885 else throw("You shouldn't repay")
7986 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let limitRatio = 100000
55
66 let fee = 100
77
88 let scale5 = 100000
99
1010 let feeCollector = "3N2FuzoM1x8hJqSDUViXuvatNp9ip7GrKoB"
1111
1212 func getAssetId (ast) = match ast {
1313 case p: ByteVector =>
1414 ast
1515 case _ =>
1616 unit
1717 }
1818
1919
2020 func getAssetString (assetId) = match assetId {
2121 case b: ByteVector =>
2222 toBase58String(b)
2323 case _ =>
2424 "WAVES"
2525 }
2626
2727
2828 func getAssetBytes (assetId) = if ((assetId == "WAVES"))
2929 then unit
3030 else fromBase58String(assetId)
3131
3232
3333 func getBalance (assetId) = match assetId {
3434 case b: ByteVector =>
3535 assetBalance(this, b)
3636 case _ =>
3737 wavesBalance(this).available
3838 }
3939
4040
4141 func tryGetInteger (key,address) = match getInteger(address, key) {
4242 case b: Int =>
4343 b
4444 case _ =>
4545 0
4646 }
4747
4848
4949 @Callable(i)
5050 func borrow (assetId,amount) = {
5151 let currentBalance = getBalance(getAssetBytes(assetId))
5252 if ((currentBalance == currentBalance))
5353 then {
5454 let limit = fraction(currentBalance, limitRatio, scale5)
5555 if ((limit >= amount))
56- then [IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + assetId), amount), ScriptTransfer(i.originCaller, amount, getAssetBytes(assetId))]
56+ then {
57+ let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + assetId), amount)
58+ let transfer = ScriptTransfer(i.originCaller, amount, getAssetBytes(assetId))
59+ if ((i.caller == this))
60+ then [intEntry]
61+ else [intEntry, transfer]
62+ }
5763 else throw(((("Requested amount " + toString(amount)) + " is bigger than limit: ") + toString(limit)))
5864 }
5965 else throw("Strict value is not equal to itself.")
6066 }
6167
6268
6369
6470 @Callable(i)
6571 func repay () = {
6672 let amount = value(i.payments[0].amount)
6773 let assetId = i.payments[0].assetId
6874 let borrowed = tryGetInteger(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), this)
6975 if ((borrowed > 0))
7076 then {
7177 let toRepayAmount = min([amount, borrowed])
7278 let toReturnAmount = (amount - toRepayAmount)
73- let returnTransfer = if ((toReturnAmount > 0))
74- then ScriptTransfer(i.originCaller, toReturnAmount, assetId)
75- else unit
76-[IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), (borrowed - toRepayAmount))]
79+ let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), (borrowed - toRepayAmount))
80+ let transfer = ScriptTransfer(i.originCaller, toReturnAmount, assetId)
81+ if ((toReturnAmount > 0))
82+ then [intEntry, transfer]
83+ else [intEntry]
7784 }
7885 else throw("You shouldn't repay")
7986 }
8087
8188
8289
8390 @Callable(i)
8491 func flash (assetId,amount,callbackAddress,callBackFunction) = {
8592 let callbackAdr = Address(fromBase58String(callbackAddress))
8693 let currentBalance = getBalance(getAssetBytes(assetId))
8794 if ((currentBalance == currentBalance))
8895 then {
8996 let borrow = invoke(this, "borrow", [assetId, amount], nil)
9097 if ((borrow == borrow))
9198 then {
9299 let callback = invoke(Address(fromBase58String(callbackAddress)), callBackFunction, nil, [AttachedPayment(getAssetBytes(assetId), amount)])
93100 if ((callback == callback))
94101 then {
95102 let feeAmount = fraction(amount, fee, scale5)
96103 let amountToRepay = (amount + feeAmount)
97104 let newBalance = getBalance(getAssetBytes(assetId))
98105 if ((newBalance == newBalance))
99106 then if ((newBalance >= currentBalance))
100107 then throw(((("currentBalance: " + toString(currentBalance)) + ", newBalance: ") + toString(newBalance)))
101108 else throw(((("Rejected due to low repay amount. Need: " + toString(amountToRepay)) + ", provided: ") + toString((newBalance - currentBalance))))
102109 else throw("Strict value is not equal to itself.")
103110 }
104111 else throw("Strict value is not equal to itself.")
105112 }
106113 else throw("Strict value is not equal to itself.")
107114 }
108115 else throw("Strict value is not equal to itself.")
109116 }
110117
111118

github/deemru/w8io/03bedc9 
43.18 ms