tx · Az4WNCxRGVEcEAzp8X1pbMroYSRd1BKkTDLKS1N71Z6C

3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua:  -0.01400000 Waves

2021.03.15 12:50 [1438668] smart account 3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua > SELF 0.00000000 Waves

{ "type": 13, "id": "Az4WNCxRGVEcEAzp8X1pbMroYSRd1BKkTDLKS1N71Z6C", "fee": 1400000, "feeAssetId": null, "timestamp": 1615801836677, "version": 2, "chainId": 84, "sender": "3Mz29fiz3zgY9JDbiHKANvHsFgQutdfu4Ua", "senderPublicKey": "CTyHhnVTxf16Z4CmGGneAK8WB5g2QyT4MB8kUn8vPPcu", "proofs": [ "2vindUN8hcoR7LDnfEYmdAbcS8kCQG6NyaCdPwjeuHb7PYXrvL6wRH6hEQxWK2twJtbJGCaU243pNG8ttQSBjnr8" ], "script": "base64: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", "height": 1438668, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 13dSrx6iSpxQjaa9ownZP6Nb8rECNHAABVvpLs866Dkx Next: 7ekduY5P1SXuB5rnKSKY8XV92dgcHZVUQ3ReUoEDppJ3 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let dAppAssetName = "test1"
5-
6-let dAppAssetId = base58'CyRPSWqSzLmynv4W4REGjqhEefZVg2ZobVbvTLi71UzN'
7-
8-let dAppMinAmountToLend = 500
9-
10-let dAppMinAmountToBorrow = 100
11-
12-let dAppMinBorrowFeePerc = 10
13-
14-func getLendingPoolStack () = match getInteger(this, "lendingPoolStack") {
15- case a: Int =>
16- a
4+func isWavesAsset (assetId) = match assetId {
5+ case asset: ByteVector =>
6+ false
7+ case waves: Unit =>
8+ true
179 case _ =>
18- 0
10+ throw("Match error")
1911 }
2012
2113
22-func getFeePoolStack () = match getInteger(this, "feePoolStack") {
23- case a: Int =>
24- a
25- case _ =>
26- 0
27-}
14+func getTreasury (assetId) = {
15+ let treasuryName = match assetId {
16+ case asset: ByteVector =>
17+ ("Treasury-" + toBase58String(asset))
18+ case waves: Unit =>
19+ "Treasury-WAVES"
20+ case _ =>
21+ throw("Match error")
22+ }
23+ match getInteger(this, treasuryName) {
24+ case val: Int =>
25+ val
26+ case null =>
27+ 0
28+ }
29+ }
2830
2931
3032 @Callable(i)
31-func addToLendingPool () = if ((size(i.payments) != 1))
33+func createGovernor () = if ((size(i.payments) != 1))
3234 then throw("No payment attached")
33- else if ((i.payments[0].assetId != dAppAssetId))
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) + ")"))
37- else if ((this == i.caller))
38- then throw("dApp self sending is denied")
39- else {
40- let contractData = ((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(i.payments[0].amount))
41- let newLendingPoolStack = (getLendingPoolStack() + i.payments[0].amount)
42- let issueContract = Issue(("ContractL_" + dAppAssetName), contractData, 1, 0, false)
43- let issueContractId = calculateAssetId(issueContract)
44-[IntegerEntry("lendingPoolStack", newLendingPoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId)]
45- }
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")
35+ else if ((this == i.caller))
36+ then throw("dApp self sending is denied")
37+ else if ((isWavesAsset(i.payments[0].assetId) == false))
38+ then throw("Payment should be in WAVES")
39+ else {
40+ let governorCreationPrice = match getInteger(this, "governorCreationPrice") {
41+ case val: Int =>
42+ val
43+ case null =>
44+ 0
45+ }
46+ if ((i.payments[0].amount != governorCreationPrice))
47+ then throw((((("Not a valid amount sent (you sent " + toString((i.payments[0].amount / 100000000))) + " WAVES instead of ") + toString((governorCreationPrice / 10000000))) + " WAVES)"))
6048 else {
61- let minToReceiveFromBorrower = (requestBorrowAmount + ((requestBorrowAmount * dAppMinBorrowFeePerc) / 100))
62- if ((minToReceiveFromBorrower > i.payments[0].amount))
63- then throw((("Insuffisent collateral (must be " + toString(minToReceiveFromBorrower)) + "% 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- }
49+ let govContract = Issue("GovernorContract", toString(height), 1, 0, false)
50+ let govContractId = calculateAssetId(govContract)
51+[StringEntry("Treasury-WAVES", toString((getTreasury(unit) + i.payments[0].amount))), govContract, ScriptTransfer(i.caller, govContract.quantity, govContractId)]
7352 }
53+ }
7454
7555
7656 @Verifier(tx)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let dAppAssetName = "test1"
5-
6-let dAppAssetId = base58'CyRPSWqSzLmynv4W4REGjqhEefZVg2ZobVbvTLi71UzN'
7-
8-let dAppMinAmountToLend = 500
9-
10-let dAppMinAmountToBorrow = 100
11-
12-let dAppMinBorrowFeePerc = 10
13-
14-func getLendingPoolStack () = match getInteger(this, "lendingPoolStack") {
15- case a: Int =>
16- a
4+func isWavesAsset (assetId) = match assetId {
5+ case asset: ByteVector =>
6+ false
7+ case waves: Unit =>
8+ true
179 case _ =>
18- 0
10+ throw("Match error")
1911 }
2012
2113
22-func getFeePoolStack () = match getInteger(this, "feePoolStack") {
23- case a: Int =>
24- a
25- case _ =>
26- 0
27-}
14+func getTreasury (assetId) = {
15+ let treasuryName = match assetId {
16+ case asset: ByteVector =>
17+ ("Treasury-" + toBase58String(asset))
18+ case waves: Unit =>
19+ "Treasury-WAVES"
20+ case _ =>
21+ throw("Match error")
22+ }
23+ match getInteger(this, treasuryName) {
24+ case val: Int =>
25+ val
26+ case null =>
27+ 0
28+ }
29+ }
2830
2931
3032 @Callable(i)
31-func addToLendingPool () = if ((size(i.payments) != 1))
33+func createGovernor () = if ((size(i.payments) != 1))
3234 then throw("No payment attached")
33- else if ((i.payments[0].assetId != dAppAssetId))
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) + ")"))
37- else if ((this == i.caller))
38- then throw("dApp self sending is denied")
39- else {
40- let contractData = ((((toString(height) + "_") + toBase58String(dAppAssetId)) + "_") + toString(i.payments[0].amount))
41- let newLendingPoolStack = (getLendingPoolStack() + i.payments[0].amount)
42- let issueContract = Issue(("ContractL_" + dAppAssetName), contractData, 1, 0, false)
43- let issueContractId = calculateAssetId(issueContract)
44-[IntegerEntry("lendingPoolStack", newLendingPoolStack), issueContract, ScriptTransfer(i.caller, issueContract.quantity, issueContractId)]
45- }
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")
35+ else if ((this == i.caller))
36+ then throw("dApp self sending is denied")
37+ else if ((isWavesAsset(i.payments[0].assetId) == false))
38+ then throw("Payment should be in WAVES")
39+ else {
40+ let governorCreationPrice = match getInteger(this, "governorCreationPrice") {
41+ case val: Int =>
42+ val
43+ case null =>
44+ 0
45+ }
46+ if ((i.payments[0].amount != governorCreationPrice))
47+ then throw((((("Not a valid amount sent (you sent " + toString((i.payments[0].amount / 100000000))) + " WAVES instead of ") + toString((governorCreationPrice / 10000000))) + " WAVES)"))
6048 else {
61- let minToReceiveFromBorrower = (requestBorrowAmount + ((requestBorrowAmount * dAppMinBorrowFeePerc) / 100))
62- if ((minToReceiveFromBorrower > i.payments[0].amount))
63- then throw((("Insuffisent collateral (must be " + toString(minToReceiveFromBorrower)) + "% 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- }
49+ let govContract = Issue("GovernorContract", toString(height), 1, 0, false)
50+ let govContractId = calculateAssetId(govContract)
51+[StringEntry("Treasury-WAVES", toString((getTreasury(unit) + i.payments[0].amount))), govContract, ScriptTransfer(i.caller, govContract.quantity, govContractId)]
7352 }
53+ }
7454
7555
7656 @Verifier(tx)
7757 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
7858

github/deemru/w8io/169f3d6 
29.33 ms