tx · CQFn5V94xYDrowXD5JErCRUD84EthGZiVt2JdYbEX7RF

3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG:  -0.00300000 Waves

2023.09.01 02:50 [2735541] smart account 3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG > SELF 0.00000000 Waves

{ "type": 13, "id": "CQFn5V94xYDrowXD5JErCRUD84EthGZiVt2JdYbEX7RF", "fee": 300000, "feeAssetId": null, "timestamp": 1693525875800, "version": 2, "chainId": 84, "sender": "3N93XuDT7GvzMZdp8WGTbqYxiGY9JQmiWAG", "senderPublicKey": "3MV6QZNSjqH7Ctc3BGRQJJyZ3DJgCJ6Tqn7LXRgneZ5B", "proofs": [ "5sD9d6zfSCVbHfLV9hsRempoMt6D5XRThmrpnpuRA93Qr9MyctGpGWGKBKM22iUhFyEME2JmBncDND6MX2v8pNG2" ], "script": "base64:BgISCAISBAoCCAESABIGCgQIAQgICQAKbGltaXRSYXRpbwCgjQYAA2ZlZQBkAAZzY2FsZTUAoI0GAAxmZWVDb2xsZWN0b3ICIzNOMkZ1em9NMXg4aEpxU0RVVmlYdXZhdE5wOWlwN0dyS29CAQpnZXRBc3NldElkAQNhc3QEByRtYXRjaDAFA2FzdAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFwBQckbWF0Y2gwBQNhc3QFBHVuaXQBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEKZ2V0QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDwBwIFBHRoaXMFAWIICQDvBwEFBHRoaXMJYXZhaWxhYmxlAQ10cnlHZXRJbnRlZ2VyAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAADAWkBBmJvcnJvdwIHYXNzZXRJZAZhbW91bnQEDmN1cnJlbnRCYWxhbmNlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJZAMJAAACBQ5jdXJyZW50QmFsYW5jZQUOY3VycmVudEJhbGFuY2UEBWxpbWl0CQBrAwUOY3VycmVudEJhbGFuY2UFCmxpbWl0UmF0aW8FBnNjYWxlNQMJAGcCBQVsaW1pdAUGYW1vdW50BAhpbnRFbnRyeQkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICCWJvcnJvd2VkXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICAV8FB2Fzc2V0SWQFBmFtb3VudAQIdHJhbnNmZXIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpDG9yaWdpbkNhbGxlcgUGYW1vdW50CQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQDMCAIFCGludEVudHJ5BQNuaWwJAMwIAgUIaW50RW50cnkJAMwIAgUIdHJhbnNmZXIFA25pbAkAAgEJAKwCAgkArAICCQCsAgICEVJlcXVlc3RlZCBhbW91bnQgCQCkAwEFBmFtb3VudAIXIGlzIGJpZ2dlciB0aGFuIGxpbWl0OiAJAKQDAQUFbGltaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFcmVwYXkABAZhbW91bnQJAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdhc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECGJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgIJAKwCAgkArAICCQCsAgICCWJvcnJvd2VkXwkApQgBCAUBaQxvcmlnaW5DYWxsZXICAV8JAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQFBHRoaXMDCQBmAgUIYm9ycm93ZWQAAAQNdG9SZXBheUFtb3VudAkAlwMBCQDMCAIFBmFtb3VudAkAzAgCBQhib3Jyb3dlZAUDbmlsBA50b1JldHVybkFtb3VudAkAZQIFBmFtb3VudAUNdG9SZXBheUFtb3VudAQIaW50RW50cnkJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAglib3Jyb3dlZF8JAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAgFfCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkCQBlAgUIYm9ycm93ZWQFDXRvUmVwYXlBbW91bnQECHRyYW5zZmVyCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIFDnRvUmV0dXJuQW1vdW50BQdhc3NldElkAwkAZgIFDnRvUmV0dXJuQW1vdW50AAAJAMwIAgUIaW50RW50cnkJAMwIAgUIdHJhbnNmZXIFA25pbAkAzAgCBQhpbnRFbnRyeQUDbmlsCQACAQITWW91IHNob3VsZG4ndCByZXBheQFpAQVmbGFzaAQHYXNzZXRJZAZhbW91bnQPY2FsbGJhY2tBZGRyZXNzEGNhbGxCYWNrRnVuY3Rpb24EC2NhbGxiYWNrQWRyCQEHQWRkcmVzcwEJANkEAQUPY2FsbGJhY2tBZGRyZXNzBA5jdXJyZW50QmFsYW5jZQkBCmdldEJhbGFuY2UBCQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQDCQAAAgUOY3VycmVudEJhbGFuY2UFDmN1cnJlbnRCYWxhbmNlBAZib3Jyb3cJAPwHBAUEdGhpcwIGYm9ycm93CQDMCAIFB2Fzc2V0SWQJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQZib3Jyb3cFBmJvcnJvdwQIY2FsbGJhY2sJAPwHBAkBB0FkZHJlc3MBCQDZBAEFD2NhbGxiYWNrQWRkcmVzcwUQY2FsbEJhY2tGdW5jdGlvbgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQENZ2V0QXNzZXRCeXRlcwEFB2Fzc2V0SWQFBmFtb3VudAUDbmlsAwkAAAIFCGNhbGxiYWNrBQhjYWxsYmFjawQJZmVlQW1vdW50CQBrAwUGYW1vdW50BQNmZWUFBnNjYWxlNQQNYW1vdW50VG9SZXBheQkAZAIFBmFtb3VudAUJZmVlQW1vdW50BApuZXdCYWxhbmNlCQEKZ2V0QmFsYW5jZQEJAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJZAMJAAACBQpuZXdCYWxhbmNlBQpuZXdCYWxhbmNlAwkAZwIFCm5ld0JhbGFuY2UFDmN1cnJlbnRCYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQxmZWVDb2xsZWN0b3IFCWZlZUFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQdhc3NldElkBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICAihSZWplY3RlZCBkdWUgdG8gbG93IHJlcGF5IGFtb3VudC4gTmVlZDogCQCkAwEFDWFtb3VudFRvUmVwYXkCDCwgcHJvdmlkZWQ6IAkApAMBCQBlAgUKbmV3QmFsYW5jZQUOY3VycmVudEJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AweeM5g==", "height": 2735541, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G9A3gkA3wMSCCBEdF7Jf8qAvUZLXxetvdAcQfrr9gTw Next: 13UsKqtm9NVMPFi6PZV15xmBWqiXupAZvP8RN6zxYkm6 Diff:
OldNewDifferences
104104 let newBalance = getBalance(getAssetBytes(assetId))
105105 if ((newBalance == newBalance))
106106 then if ((newBalance >= currentBalance))
107- then throw(((("currentBalance: " + toString(currentBalance)) + ", newBalance: ") + toString(newBalance)))
107+ then [ScriptTransfer(Address(fromBase58String(feeCollector)), feeAmount, getAssetBytes(assetId))]
108108 else throw(((("Rejected due to low repay amount. Need: " + toString(amountToRepay)) + ", provided: ") + toString((newBalance - currentBalance))))
109109 else throw("Strict value is not equal to itself.")
110110 }
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))
5656 then {
5757 let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + assetId), amount)
5858 let transfer = ScriptTransfer(i.originCaller, amount, getAssetBytes(assetId))
5959 if ((i.caller == this))
6060 then [intEntry]
6161 else [intEntry, transfer]
6262 }
6363 else throw(((("Requested amount " + toString(amount)) + " is bigger than limit: ") + toString(limit)))
6464 }
6565 else throw("Strict value is not equal to itself.")
6666 }
6767
6868
6969
7070 @Callable(i)
7171 func repay () = {
7272 let amount = value(i.payments[0].amount)
7373 let assetId = i.payments[0].assetId
7474 let borrowed = tryGetInteger(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), this)
7575 if ((borrowed > 0))
7676 then {
7777 let toRepayAmount = min([amount, borrowed])
7878 let toReturnAmount = (amount - toRepayAmount)
7979 let intEntry = IntegerEntry(((("borrowed_" + toString(i.originCaller)) + "_") + getAssetString(assetId)), (borrowed - toRepayAmount))
8080 let transfer = ScriptTransfer(i.originCaller, toReturnAmount, assetId)
8181 if ((toReturnAmount > 0))
8282 then [intEntry, transfer]
8383 else [intEntry]
8484 }
8585 else throw("You shouldn't repay")
8686 }
8787
8888
8989
9090 @Callable(i)
9191 func flash (assetId,amount,callbackAddress,callBackFunction) = {
9292 let callbackAdr = Address(fromBase58String(callbackAddress))
9393 let currentBalance = getBalance(getAssetBytes(assetId))
9494 if ((currentBalance == currentBalance))
9595 then {
9696 let borrow = invoke(this, "borrow", [assetId, amount], nil)
9797 if ((borrow == borrow))
9898 then {
9999 let callback = invoke(Address(fromBase58String(callbackAddress)), callBackFunction, nil, [AttachedPayment(getAssetBytes(assetId), amount)])
100100 if ((callback == callback))
101101 then {
102102 let feeAmount = fraction(amount, fee, scale5)
103103 let amountToRepay = (amount + feeAmount)
104104 let newBalance = getBalance(getAssetBytes(assetId))
105105 if ((newBalance == newBalance))
106106 then if ((newBalance >= currentBalance))
107- then throw(((("currentBalance: " + toString(currentBalance)) + ", newBalance: ") + toString(newBalance)))
107+ then [ScriptTransfer(Address(fromBase58String(feeCollector)), feeAmount, getAssetBytes(assetId))]
108108 else throw(((("Rejected due to low repay amount. Need: " + toString(amountToRepay)) + ", provided: ") + toString((newBalance - currentBalance))))
109109 else throw("Strict value is not equal to itself.")
110110 }
111111 else throw("Strict value is not equal to itself.")
112112 }
113113 else throw("Strict value is not equal to itself.")
114114 }
115115 else throw("Strict value is not equal to itself.")
116116 }
117117
118118

github/deemru/w8io/03bedc9 
43.27 ms