tx · F3eWhWKdAnERFDGS4YKeFTZeVUiZr6aSAE3onXhXqV3N

3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua:  -0.01400000 Waves

2021.03.12 10:19 [1434339] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves

{ "type": 13, "id": "F3eWhWKdAnERFDGS4YKeFTZeVUiZr6aSAE3onXhXqV3N", "fee": 1400000, "feeAssetId": null, "timestamp": 1615544391321, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "7cDM8G27Ap7KUUgpkWL9XwN71rzFNNbk2RrzDfh2emrs4rUXFNHACS9AinUPcod1hQax3oTQsniG4T2JxvX1sQJ" ], "script": "base64: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CAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAE3JlcXVlc3RCb3Jyb3dBbW91bnQEAAAAE25ld0xlbmRpbmdQb29sU3RhY2sJAABkAAAAAgkBAAAAE2dldExlbmRpbmdQb29sU3RhY2sAAAAABQAAABNyZXF1ZXN0Qm9ycm93QW1vdW50BAAAAA9uZXdGZWVQb29sU3RhY2sJAABkAAAAAgkBAAAAD2dldEZlZVBvb2xTdGFjawAAAAAFAAAAGWFtb3VudFRvRGlzcGF0Y2hJbkZlZVBvb2wEAAAADGNvbnRyYWN0RGF0YQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAV8JAAJYAAAAAQUAAAALZEFwcEFzc2V0SWQCAAAAAV8JAAGkAAAAAQUAAAATcmVxdWVzdEJvcnJvd0Ftb3VudAIAAAABXwkAAaQAAAABBQAAABlhbW91bnRUb0Rpc3BhdGNoSW5GZWVQb29sBAAAAA1pc3N1ZUNvbnRyYWN0CQAEQgAAAAUJAAEsAAAAAgIAAAAKQ29udHJhY3RCXwUAAAANZEFwcEFzc2V0TmFtZQUAAAAMY29udHJhY3REYXRhAAAAAAAAAAABAAAAAAAAAAAABwQAAAAPaXNzdWVDb250cmFjdElkCQAEOAAAAAEFAAAADWlzc3VlQ29udHJhY3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEGxlbmRpbmdQb29sU3RhY2sFAAAAE25ld0xlbmRpbmdQb29sU3RhY2sJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADGZlZVBvb2xTdGFjawUAAAAPbmV3RmVlUG9vbFN0YWNrCQAETAAAAAIFAAAADWlzc3VlQ29udHJhY3QJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyCAUAAAANaXNzdWVDb250cmFjdAAAAAhxdWFudGl0eQUAAAAPaXNzdWVDb250cmFjdElkCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAATcmVxdWVzdEJvcnJvd0Ftb3VudAUAAAALZEFwcEFzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5hfYYow==", "height": 1434339, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BeMZZJC5wUkBuqv9s8S5XTxnLh8MmJ2vzfpiU9Pbswx6 Next: Fd53wDKu1Jsw8usMsK9pxtktSdzgHcAYUxq7PGnFKSjD Diff:
OldNewDifferences
55
66 let dAppAssetId = base58'CyRPSWqSzLmynv4W4REGjqhEefZVg2ZobVbvTLi71UzN'
77
8+let dAppMinAmountToLend = 500
9+
10+let dAppMinAmountToBorrow = 100
11+
12+let dAppMinBorrowFeePerc = 10
13+
814 func getLendingPoolStack () = match getInteger(this, "lendingPoolStack") {
15+ case a: Int =>
16+ a
17+ case _ =>
18+ 0
19+}
20+
21+
22+func getFeePoolStack () = match getInteger(this, "feePoolStack") {
923 case a: Int =>
1024 a
1125 case _ =>
1731 func addToLendingPool () = if ((size(i.payments) != 1))
1832 then throw("No payment attached")
1933 else if ((i.payments[0].assetId != dAppAssetId))
20- then throw("Wrong asset sent")
21- else if ((1 > i.payments[0].amount))
22- then throw("Insuffisent liquidity")
34+ then throw((("Wrong asset sent (must send '" + dAppAssetName) + "')"))
35+ else if ((dAppMinAmountToLend > i.payments[0].amount))
36+ then throw((((("Insuffisent liquidity (minimum: " + toString(dAppMinAmountToLend)) + " ") + dAppAssetName) + ")"))
2337 else if ((this == i.caller))
24- then throw("Self sending not allowed")
38+ then throw("dApp self sending is denied")
2539 else {
2640 let contractData = ((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(i.payments[0].amount))
2741 let newLendingPoolStack = (getLendingPoolStack() + i.payments[0].amount)
28- let issueContract = Issue(("Contract_" + dAppAssetName), contractData, 1, 0, false)
42+ let issueContract = Issue(("ContractL_" + dAppAssetName), contractData, 1, 0, false)
2943 let issueContractId = calculateAssetId(issueContract)
3044 [IntegerEntry("lendingPoolStack", newLendingPoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId)]
3145 }
46+
47+
48+
49+@Callable(i)
50+func borrow (requestBorrowAmount) = if ((size(i.payments) != 1))
51+ then throw("No payment attached")
52+ else if ((i.payments[0].assetId != dAppAssetId))
53+ then throw((("Wrong asset sent (must send '" + dAppAssetName) + "')"))
54+ else if ((this == i.caller))
55+ then throw("dApp self sending is denied")
56+ else if ((dAppMinAmountToBorrow > requestBorrowAmount))
57+ then throw(((("Minimum amount to borrow is " + toString(dAppMinAmountToBorrow)) + " ") + dAppAssetName))
58+ else if ((requestBorrowAmount > assetBalance(this, dAppAssetId)))
59+ then throw("Not enough liquidity available")
60+ else {
61+ let minToReceiveFromBorrower = (requestBorrowAmount * ((dAppMinBorrowFeePerc / 100) + 1))
62+ if ((minToReceiveFromBorrower > i.payments[0].amount))
63+ then throw((("Insuffisent collateral (must be " + toString(dAppMinBorrowFeePerc)) + "% higher than the request)"))
64+ else {
65+ let amountToDispatchInFeePool = (i.payments[0].amount - requestBorrowAmount)
66+ let newLendingPoolStack = (getLendingPoolStack() + requestBorrowAmount)
67+ let newFeePoolStack = (getFeePoolStack() + amountToDispatchInFeePool)
68+ let contractData = ((((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(requestBorrowAmount)) + "_") + toString(amountToDispatchInFeePool))
69+ let issueContract = Issue(("ContractB_" + dAppAssetName), contractData, 1, 0, false)
70+ let issueContractId = calculateAssetId(issueContract)
71+[IntegerEntry("lendingPoolStack", newLendingPoolStack), IntegerEntry("feePoolStack", newFeePoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId), ScriptTransfer(i.caller, requestBorrowAmount, dAppAssetId)]
72+ }
73+ }
3274
3375
3476 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppAssetName = "test1"
55
66 let dAppAssetId = base58'CyRPSWqSzLmynv4W4REGjqhEefZVg2ZobVbvTLi71UzN'
77
8+let dAppMinAmountToLend = 500
9+
10+let dAppMinAmountToBorrow = 100
11+
12+let dAppMinBorrowFeePerc = 10
13+
814 func getLendingPoolStack () = match getInteger(this, "lendingPoolStack") {
15+ case a: Int =>
16+ a
17+ case _ =>
18+ 0
19+}
20+
21+
22+func getFeePoolStack () = match getInteger(this, "feePoolStack") {
923 case a: Int =>
1024 a
1125 case _ =>
1226 0
1327 }
1428
1529
1630 @Callable(i)
1731 func addToLendingPool () = if ((size(i.payments) != 1))
1832 then throw("No payment attached")
1933 else if ((i.payments[0].assetId != dAppAssetId))
20- then throw("Wrong asset sent")
21- else if ((1 > i.payments[0].amount))
22- then throw("Insuffisent liquidity")
34+ then throw((("Wrong asset sent (must send '" + dAppAssetName) + "')"))
35+ else if ((dAppMinAmountToLend > i.payments[0].amount))
36+ then throw((((("Insuffisent liquidity (minimum: " + toString(dAppMinAmountToLend)) + " ") + dAppAssetName) + ")"))
2337 else if ((this == i.caller))
24- then throw("Self sending not allowed")
38+ then throw("dApp self sending is denied")
2539 else {
2640 let contractData = ((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(i.payments[0].amount))
2741 let newLendingPoolStack = (getLendingPoolStack() + i.payments[0].amount)
28- let issueContract = Issue(("Contract_" + dAppAssetName), contractData, 1, 0, false)
42+ let issueContract = Issue(("ContractL_" + dAppAssetName), contractData, 1, 0, false)
2943 let issueContractId = calculateAssetId(issueContract)
3044 [IntegerEntry("lendingPoolStack", newLendingPoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId)]
3145 }
46+
47+
48+
49+@Callable(i)
50+func borrow (requestBorrowAmount) = if ((size(i.payments) != 1))
51+ then throw("No payment attached")
52+ else if ((i.payments[0].assetId != dAppAssetId))
53+ then throw((("Wrong asset sent (must send '" + dAppAssetName) + "')"))
54+ else if ((this == i.caller))
55+ then throw("dApp self sending is denied")
56+ else if ((dAppMinAmountToBorrow > requestBorrowAmount))
57+ then throw(((("Minimum amount to borrow is " + toString(dAppMinAmountToBorrow)) + " ") + dAppAssetName))
58+ else if ((requestBorrowAmount > assetBalance(this, dAppAssetId)))
59+ then throw("Not enough liquidity available")
60+ else {
61+ let minToReceiveFromBorrower = (requestBorrowAmount * ((dAppMinBorrowFeePerc / 100) + 1))
62+ if ((minToReceiveFromBorrower > i.payments[0].amount))
63+ then throw((("Insuffisent collateral (must be " + toString(dAppMinBorrowFeePerc)) + "% higher than the request)"))
64+ else {
65+ let amountToDispatchInFeePool = (i.payments[0].amount - requestBorrowAmount)
66+ let newLendingPoolStack = (getLendingPoolStack() + requestBorrowAmount)
67+ let newFeePoolStack = (getFeePoolStack() + amountToDispatchInFeePool)
68+ let contractData = ((((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(requestBorrowAmount)) + "_") + toString(amountToDispatchInFeePool))
69+ let issueContract = Issue(("ContractB_" + dAppAssetName), contractData, 1, 0, false)
70+ let issueContractId = calculateAssetId(issueContract)
71+[IntegerEntry("lendingPoolStack", newLendingPoolStack), IntegerEntry("feePoolStack", newFeePoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId), ScriptTransfer(i.caller, requestBorrowAmount, dAppAssetId)]
72+ }
73+ }
3274
3375
3476 @Verifier(tx)
3577 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
3678

github/deemru/w8io/169f3d6 
38.24 ms