2021.07.26 15:44 [2695397] smart account 3PMHsJn1G4ngd6A4dyZpaSMiQmr4XJiDuym > SELF 0.00000000 Waves
{ "type": 13, "id": "8dLB96b49gc1jV89zV5VXrcQFTikPhKoH3RTFYjxWMLR", "fee": 1000000, "feeAssetId": null, "timestamp": 1627302528900, "version": 1, "sender": "3PMHsJn1G4ngd6A4dyZpaSMiQmr4XJiDuym", "senderPublicKey": "B2eSMU79NZBWi8B1Su7fqZhJtcvZScjxpK5ZJqRVgqmR", "proofs": [ "4Bvat2uyxz72S7UzgjHcFAVPzGNCWjNyrj7dt2AGcmSATRVBF6z89GWTNvhGVFzpHF2SH2GR6cngDxakjbwZR977" ], "script": "base64:AAIFAAAAAAAAABcIAhIFCgMICAgSAwoBCBIAEgASAwoBAQAAAAcBAAAAEHdyaXRlQ29uc3RTdHJpbmcAAAACAAAAA2tleQAAAAV2YWx1ZQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkFAAAABXZhbHVlCQAAAgAAAAEJAAEsAAAAAgIAAAAVYWxyZWFkeSBpbml0aWFsaXplZDogBQAAAANrZXkAAAAABWFkbWluCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwIAAAAFYWRtaW4CAAAACG5vIGFkbWluAAAAAAdyZXNlcnZlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwIAAAAHcmVzZXJ2ZQIAAAAKbm8gcmVzZXJ2ZQAAAAAEbm9kZQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMCAAAABG5vZGUCAAAAB25vIG5vZGUAAAAAEWFjdGl2ZUxlYXNlQW1vdW50CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMCAAAAEWFjdGl2ZUxlYXNlQW1vdW50AAAAAAAAAAAAAAAAAA1hY3RpdmVMZWFzZUlkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMCAAAADWFjdGl2ZUxlYXNlSWQCAAAAAAEAAAALdXBkYXRlTGVhc2UAAAABAAAABm5ld0FtdAQAAAAIbmV3TGVhc2UJAAREAAAAAgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAEbm9kZQUAAAAGbmV3QW10BAAAAApuZXdMZWFzZUlkCQAEOQAAAAEFAAAACG5ld0xlYXNlCQAETgAAAAIDCQEAAAACIT0AAAACBQAAAA1hY3RpdmVMZWFzZUlkAgAAAAAJAARMAAAAAgkBAAAAC0xlYXNlQ2FuY2VsAAAAAQkAAlkAAAABBQAAAA1hY3RpdmVMZWFzZUlkBQAAAANuaWwFAAAAA25pbAMJAABmAAAAAgUAAAAGbmV3QW10AAAAAAAAAAAACQAETAAAAAIFAAAACG5ld0xlYXNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADWFjdGl2ZUxlYXNlSWQJAAJYAAAAAQUAAAAKbmV3TGVhc2VJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARYWN0aXZlTGVhc2VBbW91bnQFAAAABm5ld0FtdAUAAAADbmlsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADWFjdGl2ZUxlYXNlSWQCAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARYWN0aXZlTGVhc2VBbW91bnQAAAAAAAAAAAAFAAAAA25pbAAAAAUAAAABaQEAAAAKaW5pdGlhbGl6ZQAAAAMAAAAFYWRtaW4AAAAHcmVzZXJ2ZQAAAARub2RlCQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgIAAAAFYWRtaW4FAAAABWFkbWluCQAETAAAAAIJAQAAABB3cml0ZUNvbnN0U3RyaW5nAAAAAgIAAAAHcmVzZXJ2ZQUAAAAHcmVzZXJ2ZQkABEwAAAACCQEAAAAQd3JpdGVDb25zdFN0cmluZwAAAAICAAAABG5vZGUFAAAABG5vZGUFAAAAA25pbAAAAAFpAQAAAApzZXRBZGRyZXNzAAAAAQAAAAFhAwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABWFkbWluCQAAAgAAAAECAAAAEG9ubHkgc2VsZiBjYW4gZG8JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAEbm9kZQUAAAABYQUAAAADbmlsAAAAAWkBAAAAA3B1dAAAAAADCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAHcmVzZXJ2ZQkAAAIAAAABAgAAAAxyZXNlcnZlIG9ubHkDCQEAAAACIT0AAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBQAAAAR1bml0CQAAAgAAAAECAAAACndhdmVzIG9ubHkEAAAAC2FkZGVkQW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQJAQAAAAt1cGRhdGVMZWFzZQAAAAEJAABkAAAAAgUAAAARYWN0aXZlTGVhc2VBbW91bnQFAAAAC2FkZGVkQW1vdW50AAAAAWkBAAAAB3Vuc3Rha2UAAAAAAwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABWFkbWluCQAAAgAAAAECAAAACmFkbWluIG9ubHkDCQEAAAACIT0AAAACBQAAAA1hY3RpdmVMZWFzZUlkAgAAAAAJAARMAAAAAgkBAAAAC0xlYXNlQ2FuY2VsAAAAAQkAAlkAAAABBQAAAA1hY3RpdmVMZWFzZUlkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADWFjdGl2ZUxlYXNlSWQCAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARYWN0aXZlTGVhc2VBbW91bnQAAAAAAAAAAAAFAAAAA25pbAUAAAADbmlsAAAAAWkBAAAAA2dldAAAAAEAAAANcmVtb3ZlZEFtb3VudAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAdyZXNlcnZlCQAAAgAAAAECAAAADHJlc2VydmUgb25seQkABE4AAAACCQEAAAALdXBkYXRlTGVhc2UAAAABCQAAZQAAAAIFAAAAEWFjdGl2ZUxlYXNlQW1vdW50BQAAAA1yZW1vdmVkQW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANcmVtb3ZlZEFtb3VudAUAAAAEdW5pdAUAAAADbmlsAAAAAG54JLs=", "chainId": 87, "height": 2695397, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 2cKtdyGZHekJ8pFWKYR7CYXFdnCeCR9aEG8q1CCD7GzL Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 5 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func writeConstString (key,value) = if (!(isDefined(getString(this, key)))) | |
5 | + | then StringEntry(key, value) | |
6 | + | else throw(("already initialized: " + key)) | |
7 | + | ||
8 | + | ||
9 | + | let admin = valueOrErrorMessage(getString(this, "admin"), "no admin") | |
10 | + | ||
11 | + | let reserve = valueOrErrorMessage(getString(this, "reserve"), "no reserve") | |
12 | + | ||
13 | + | let node = valueOrErrorMessage(getString(this, "node"), "no node") | |
14 | + | ||
15 | + | let activeLeaseAmount = valueOrElse(getInteger(this, "activeLeaseAmount"), 0) | |
16 | + | ||
17 | + | let activeLeaseId = valueOrElse(getString(this, "activeLeaseId"), "") | |
18 | + | ||
19 | + | func updateLease (newAmt) = { | |
20 | + | let newLease = Lease(addressFromStringValue(node), newAmt) | |
21 | + | let newLeaseId = calculateLeaseId(newLease) | |
22 | + | ((if ((activeLeaseId != "")) | |
23 | + | then [LeaseCancel(fromBase58String(activeLeaseId))] | |
24 | + | else nil) ++ (if ((newAmt > 0)) | |
25 | + | then [newLease, StringEntry("activeLeaseId", toBase58String(newLeaseId)), IntegerEntry("activeLeaseAmount", newAmt)] | |
26 | + | else [StringEntry("activeLeaseId", ""), IntegerEntry("activeLeaseAmount", 0)])) | |
27 | + | } | |
28 | + | ||
29 | + | ||
30 | + | @Callable(i) | |
31 | + | func initialize (admin,reserve,node) = [writeConstString("admin", admin), writeConstString("reserve", reserve), writeConstString("node", node)] | |
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | @Callable(i) | |
36 | + | func setAddress (a) = if ((toString(i.caller) != admin)) | |
37 | + | then throw("only self can do") | |
38 | + | else [StringEntry("node", a)] | |
39 | + | ||
40 | + | ||
41 | + | ||
42 | + | @Callable(i) | |
43 | + | func put () = if ((toString(i.caller) != reserve)) | |
44 | + | then throw("reserve only") | |
45 | + | else if ((i.payments[0].assetId != unit)) | |
46 | + | then throw("waves only") | |
47 | + | else { | |
48 | + | let addedAmount = i.payments[0].amount | |
49 | + | updateLease((activeLeaseAmount + addedAmount)) | |
50 | + | } | |
51 | + | ||
52 | + | ||
53 | + | ||
54 | + | @Callable(i) | |
55 | + | func unstake () = if ((toString(i.caller) != admin)) | |
56 | + | then throw("admin only") | |
57 | + | else if ((activeLeaseId != "")) | |
58 | + | then [LeaseCancel(fromBase58String(activeLeaseId)), StringEntry("activeLeaseId", ""), IntegerEntry("activeLeaseAmount", 0)] | |
59 | + | else nil | |
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | @Callable(i) | |
64 | + | func get (removedAmount) = if ((toString(i.caller) != reserve)) | |
65 | + | then throw("reserve only") | |
66 | + | else (updateLease((activeLeaseAmount - removedAmount)) ++ [ScriptTransfer(i.caller, removedAmount, unit)]) | |
67 | + | ||
68 | + |
github/deemru/w8io/786bc32 24.74 ms ◑