tx · E7WRfQZWwMZ3Y1WUrxiKSs3daS5qCZJPQpeH3rYqTUt3

3Mvk6eiSiQG4P9rXgAJox6bq1ksfq38AFFw:  -0.01400000 Waves

2019.08.24 00:53 [644341] smart account 3Mvk6eiSiQG4P9rXgAJox6bq1ksfq38AFFw > SELF 0.00000000 Waves

{ "type": 13, "id": "E7WRfQZWwMZ3Y1WUrxiKSs3daS5qCZJPQpeH3rYqTUt3", "fee": 1400000, "feeAssetId": null, "timestamp": 1566597153606, "version": 1, "sender": "3Mvk6eiSiQG4P9rXgAJox6bq1ksfq38AFFw", "senderPublicKey": "38u9g317hD4KVpfAdk2Rfv5V1WnMXL5mXnkGAtVYndYu", "proofs": [ "5JWVR8SnXKNBVAzcYoDiNo8EGudzDd6fqdNP2MjrZc4ZYNrsC4HjwnZL5oVaqSTcio1KXcWtDKT5BETckrW4vtoU" ], "script": "base64:AAIDAAAAAAAAAAAAAAAAAAAABAAAAAFpAQAAAA1hcHByb3ZlQ3JlZGl0AAAABAAAAAZjbGllbnQAAAAGYW1vdW50AAAABnRhcmdldAAAAAhsb2NrSGFzaAMDCQAAAAAAAAIFAAAABHRoaXMIBQAAAAFpAAAABmNhbGxlcgkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQkABBsAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAABmNsaWVudAIAAAAHX3N0YXR1cwcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAGY2xpZW50AgAAAAdfc3RhdHVzAgAAAAhhcHByb3ZlZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAAB19hbW91bnQFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAAB190YXJnZXQFAAAABnRhcmdldAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAZjbGllbnQCAAAADV9sb2NrU2NyaXB0SWQFAAAACGxvY2tIYXNoBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAC0NyZWRpdCBmb3IgBQAAAAZjbGllbnQCAAAANiBoYXMgYWxyZWFkeSBiZWVuIGFwcHJvdmVkIG9yIGNhbGxlciBpcyBub3QgZEFwcCBvd25lcgAAAAFpAQAAAAhnZXRNb25leQAAAAAEAAAACWNhbGxlclN0cgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAljYWxsZXJTdHICAAAAB19zdGF0dXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXgFAAAAByRtYXRjaDACAAAABXVuc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgJAQAAAAV0aHJvdwAAAAAEAAAACGxvY2tUeElkCQEAAAAHZXh0cmFjdAAAAAEJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAljYWxsZXJTdHICAAAADV9sb2NrU2NyaXB0SWQEAAAABmxvY2tUeAkAA+kAAAABCQACWQAAAAEFAAAACGxvY2tUeElkBAAAAAlpc0xvY2tTZXQEAAAAByRtYXRjaDAFAAAABmxvY2tUeAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAF0BQAAAAckbWF0Y2gwBgkAAAIAAAABAgAAABVMb2NrIGhhcyBub3QgYmVlbiBzZXQEAAAABmFtb3VudAkBAAAAB2V4dHJhY3QAAAABCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJY2FsbGVyU3RyAgAAAAdfYW1vdW50AwMJAAAAAAAAAgUAAAAGc3RhdHVzAgAAAAhhcHByb3ZlZAUAAAAJaXNMb2NrU2V0BwkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJY2FsbGVyU3RyAgAAAAdfc3RhdHVzAgAAAAhib3Jyb3dlZAUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAGYW1vdW50BQAAAAR1bml0BQAAAANuaWwJAAACAAAAAQIAAAA3Q3JlZGl0IHdhcyBub3QgYXBwcm92ZWQgb3IgbW9uZXkgaGFzIGFscmVhZHkgYmVlbiB0YWtlbgAAAAFpAQAAAAtyZXR1cm5Nb25leQAAAAAEAAAACWNhbGxlclN0cgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAljYWxsZXJTdHICAAAAB19zdGF0dXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXgFAAAAByRtYXRjaDACAAAABXVuc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgJAQAAAAV0aHJvdwAAAAAEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAA5hbW91bnRUb1JldHVybgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWNhbGxlclN0cgIAAAAHX2Ftb3VudAMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwIAAAAIYm9ycm93ZWQJAAACAAAAAQIAAAAjQ2Fubm90IHJldHVybiwgbm90aGluZyB3YXMgYm9ycm93ZWQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAAI0NhbiByZXR1cm4gb25seSBXQVZFUyBhdCB0aGUgbW9tZW50AwkBAAAAAiE9AAAAAgUAAAAOYW1vdW50VG9SZXR1cm4IBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAAHVNob3VsZCByZXR1cm4gYm9ycm93ZWQgYW1vdW50CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWNhbGxlclN0cgIAAAAHX3N0YXR1cwIAAAAIcmV0dXJuZWQFAAAAA25pbAAAAAFpAQAAAA5jYW5jZWxDb250cmFjdAAAAAAEAAAACWNhbGxlclN0cgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAljYWxsZXJTdHICAAAAB19zdGF0dXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAAAXgFAAAAByRtYXRjaDACAAAABXVuc2V0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXgFAAAAByRtYXRjaDAFAAAAAXgJAQAAAAV0aHJvdwAAAAADAwkAAAAAAAACBQAAAAZzdGF0dXMCAAAACGFwcHJvdmVkBgkAAAAAAAACBQAAAAZzdGF0dXMCAAAABXVuc2V0CQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWNhbGxlclN0cgIAAAAHX3N0YXR1cwIAAAAIY2FuY2VsZWQFAAAAA25pbAkAAAIAAAABAgAAADJDYW5ub3QgY2FuY2VsIGNyZWRpdC4gTW9uZXkgaGFzIGFscmVhZHkgYmVlbiB0YWtlbgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24EAAAAAXQFAAAAByRtYXRjaDAHAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAcJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5vFl39w==", "chainId": 84, "height": 644341, "spentComplexity": 0 } View: original | compacted Prev: 9y7QW6M2S6naJuJuCzkPNyngkauwJUja9YQzFFyJ4Uz4 Next: none Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let lpKey = "lastPayment"
54
6-let liKey = "bestFomoer"
7-
8-let lhKey = "height"
9-
10-let day = 1440
115
126 @Callable(i)
13-func fearmissing () = {
14- let payment = match i.payment {
15- case p: AttachedPayment =>
16- match p.assetId {
17- case assetId: ByteVector =>
18- throw("fomo waves only")
19- case _ =>
20- p.amount
21- }
7+func approveCredit (client,amount,target,lockHash) = if (if ((this == i.caller))
8+ then !(isDefined(getBoolean(this, (client + "_status"))))
9+ else false)
10+ then WriteSet([DataEntry((client + "_status"), "approved"), DataEntry((client + "_amount"), amount), DataEntry((client + "_target"), target), DataEntry((client + "_lockScriptId"), lockHash)])
11+ else throw((("Credit for " + client) + " has already been approved or caller is not dApp owner"))
12+
13+
14+
15+@Callable(i)
16+func getMoney () = {
17+ let callerStr = toBase58String(i.caller.bytes)
18+ let status = match getString(this, (callerStr + "_status")) {
19+ case x: Unit =>
20+ "unset"
21+ case x: String =>
22+ x
2223 case _ =>
23- throw("payment must be attached")
24+ throw()
2425 }
25- let lastPayment = match getInteger(this, "lastPayment") {
26- case p: Int =>
27- p
26+ let lockTxId = extract(getString(this, (callerStr + "_lockScriptId")))
27+ let lockTx = transactionHeightById(fromBase58String(lockTxId))
28+ let isLockSet = match lockTx {
29+ case t: Int =>
30+ true
2831 case _ =>
29- 0
32+ throw("Lock has not been set")
3033 }
31- if ((lastPayment >= payment))
32- then throw(("min payment is " + toString(payment)))
33- else WriteSet([DataEntry(lpKey, payment), DataEntry(liKey, i.caller.bytes), DataEntry(lhKey, height)])
34+ let amount = extract(getInteger(this, (callerStr + "_amount")))
35+ if (if ((status == "approved"))
36+ then isLockSet
37+ else false)
38+ then ScriptResult(WriteSet([DataEntry((callerStr + "_status"), "borrowed")]), TransferSet([ScriptTransfer(i.caller, amount, unit)]))
39+ else throw("Credit was not approved or money has already been taken")
3440 }
3541
3642
3743
3844 @Callable(i)
39-func withdraw () = {
40- let callerCorrect = (i.caller.bytes == extract(getBinary(this, liKey)))
41- let heightCorrect = ((extract(getInteger(this, lhKey)) - height) >= day)
42- let canWithdraw = if (heightCorrect)
43- then callerCorrect
44- else false
45- if (canWithdraw)
46- then TransferSet([ScriptTransfer(i.caller, wavesBalance(this), unit)])
47- else throw("behold")
45+func returnMoney () = {
46+ let callerStr = toBase58String(i.caller.bytes)
47+ let status = match getString(this, (callerStr + "_status")) {
48+ case x: Unit =>
49+ "unset"
50+ case x: String =>
51+ x
52+ case _ =>
53+ throw()
54+ }
55+ let pmt = extract(i.payment)
56+ let amountToReturn = getInteger(this, (callerStr + "_amount"))
57+ if ((status != "borrowed"))
58+ then throw("Cannot return, nothing was borrowed")
59+ else if (isDefined(pmt.assetId))
60+ then throw("Can return only WAVES at the moment")
61+ else if ((amountToReturn != pmt.amount))
62+ then throw("Should return borrowed amount")
63+ else WriteSet([DataEntry((callerStr + "_status"), "returned")])
4864 }
4965
66+
67+
68+@Callable(i)
69+func cancelContract () = {
70+ let callerStr = toBase58String(i.caller.bytes)
71+ let status = match getString(this, (callerStr + "_status")) {
72+ case x: Unit =>
73+ "unset"
74+ case x: String =>
75+ x
76+ case _ =>
77+ throw()
78+ }
79+ if (if ((status == "approved"))
80+ then true
81+ else (status == "unset"))
82+ then WriteSet([DataEntry((callerStr + "_status"), "canceled")])
83+ else throw("Cannot cancel credit. Money has already been taken")
84+ }
85+
86+
87+@Verifier(tx)
88+func verify () = match tx {
89+ case t: DataTransaction =>
90+ false
91+ case t: SetScriptTransaction =>
92+ false
93+ case _ =>
94+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
95+}
5096

github/deemru/w8io/169f3d6 
22.78 ms