tx · Bp5Yuxvbn25WXotYiA4aVECsXpPCo2Na21rbRjCsGrN4

3N1JYSyNP7mn7f1YTZ2aRdi6ThpKw23j9Sy:  -0.01000000 Waves

2022.11.05 21:06 [2304146] smart account 3N1JYSyNP7mn7f1YTZ2aRdi6ThpKw23j9Sy > SELF 0.00000000 Waves

{ "type": 13, "id": "Bp5Yuxvbn25WXotYiA4aVECsXpPCo2Na21rbRjCsGrN4", "fee": 1000000, "feeAssetId": null, "timestamp": 1667671616420, "version": 2, "chainId": 84, "sender": "3N1JYSyNP7mn7f1YTZ2aRdi6ThpKw23j9Sy", "senderPublicKey": "65hdh3BQVcB4NhB1URp1RBWMK7AWDhrCSVjwbFjS64jo", "proofs": [ "Vzvz3EA1F4TqtZEgAsYCeq8ekZ57DPvjNyzjDncCDwHBngEA2wcVh52n6RQYyAmtkvf7baSKNHdwEJfxasDwnoK" ], "script": "base64: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", "height": 2304146, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7GwfEHQ37WfsNB7QZi1QFpLFnvB4RrC7fekWsta2BZ6s Next: 8CGtS1eN6VMiteW9zYbbMLLW3KhpNzvHDYzFzmMSj2zv Diff:
OldNewDifferences
4343 case _ =>
4444 throw("Match error")
4545 }
46+
47+
48+@Callable(i)
49+func debug () = [IntegerEntry("leasedAmount", 0)]
50+
4651
4752
4853 @Callable(i)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let precision = 1000000000000000000
55
66 func keyManagerPublicKey () = getString("managerPublicKey")
77
88
99 func managerPublicKeyOrUnit () = match keyManagerPublicKey() {
1010 case s: String =>
1111 fromBase58String(s)
1212 case _: Unit =>
1313 unit
1414 case _ =>
1515 throw("Match error")
1616 }
1717
1818
1919 func mustManager (i) = {
2020 let pd = throw("permission denied")
2121 match managerPublicKeyOrUnit() {
2222 case pk: ByteVector =>
2323 if ((i.callerPublicKey == pk))
2424 then true
2525 else pd
2626 case _: Unit =>
2727 if ((i.caller == this))
2828 then true
2929 else pd
3030 case _ =>
3131 throw("Match error")
3232 }
3333 }
3434
3535
3636 func mustNotInited () = match getBoolean("inited") {
3737 case inited: Boolean =>
3838 if ((inited == false))
3939 then true
4040 else throw("Already inited")
4141 case _: Unit =>
4242 false
4343 case _ =>
4444 throw("Match error")
4545 }
46+
47+
48+@Callable(i)
49+func debug () = [IntegerEntry("leasedAmount", 0)]
50+
4651
4752
4853 @Callable(i)
4954 func init (leaserAddress) = {
5055 let checks = [mustManager(i), mustNotInited()]
5156 if ((checks == checks))
5257 then {
5358 let sWaves = Issue("sWaves", "", 0, 8, true, unit, 0)
5459 let sWavesAssetId = calculateAssetId(sWaves)
5560 [BooleanEntry("inited", true), StringEntry("sWavesAssetId", toBase58String(sWavesAssetId)), StringEntry("leaserAddress", leaserAddress), IntegerEntry("ratio", precision), IntegerEntry("leasedAmount", 0), sWaves]
5661 }
5762 else throw("Strict value is not equal to itself.")
5863 }
5964
6065
6166
6267 @Callable(i)
6368 func stake () = {
6469 let payment = i.payments[0]
6570 if ((payment.assetId != unit))
6671 then throw("Only WAVES supported")
6772 else if ((size(i.payments) != 1))
6873 then throw("Wrong payments amount")
6974 else {
7075 let ratio = getIntegerValue("ratio")
7176 let toReissue = fraction(payment.amount, precision, ratio)
7277 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
7378 let leasedAmount = getIntegerValue("leasedAmount")
7479 let newAmount = (leasedAmount + payment.amount)
7580 let leaserAddress = Address(fromBase58String(getStringValue("leaserAddress")))
7681 let lease = Lease(leaserAddress, newAmount)
7782 let newLeaseId = calculateLeaseId(lease)
7883 let results = [BinaryEntry("leaseId", newLeaseId), lease, IntegerEntry("leasedAmount", newAmount), Reissue(sWavesAssetId, toReissue, true), ScriptTransfer(i.caller, toReissue, sWavesAssetId)]
7984 match getBinary("leaseId") {
8085 case leaseId: ByteVector =>
8186 LeaseCancel(leaseId) :: results
8287 case _: Unit =>
8388 results
8489 case _ =>
8590 throw("Match error")
8691 }
8792 }
8893 }
8994
9095
9196
9297 @Callable(i)
9398 func unstake () = {
9499 let payment = i.payments[0]
95100 let sWavesAssetId = fromBase58String(getStringValue("sWavesAssetId"))
96101 if ((payment.assetId != sWavesAssetId))
97102 then throw("Only sWAVES supported")
98103 else if ((size(i.payments) != 1))
99104 then throw("Wrong payments amount")
100105 else {
101106 let ratio = getIntegerValue("ratio")
102107 let toTransfer = fraction(payment.amount, ratio, precision)
103108 let assetId = getStringValue("internalAssetId")
104109 let leasedAmount = getIntegerValue("leasedAmount")
105110 let newAmount = (leasedAmount - toTransfer)
106111 let leaseId = getBinaryValue("leaseId")
107112 let leaseResults = if ((newAmount > 0))
108113 then {
109114 let leaserAddress = Address(fromBase58String(getStringValue("leaserAddress")))
110115 let lease = Lease(leaserAddress, newAmount)
111116 let newLeaseId = calculateLeaseId(lease)
112117 [lease, BinaryEntry("leaseId", newLeaseId), IntegerEntry("leasedAmount", newAmount)]
113118 }
114119 else [DeleteEntry("leaseId"), IntegerEntry("leasedAmount", 0)]
115120 let results = [LeaseCancel(leaseId), Burn(sWavesAssetId, payment.amount), ScriptTransfer(i.caller, toTransfer, unit)]
116121 (results ++ leaseResults)
117122 }
118123 }
119124
120125
121126 @Verifier(tx)
122127 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
123128

github/deemru/w8io/03bedc9 
41.88 ms