tx · 8FASBu54pwbPHFsKgRvX8o2rAz2Ua1cdcVZoY89TZE7j 3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV: -0.01400000 Waves 2022.06.01 14:57 [3142761] smart account 3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV > SELF 0.00000000 Waves
{ "type": 13, "id": "8FASBu54pwbPHFsKgRvX8o2rAz2Ua1cdcVZoY89TZE7j", "fee": 1400000, "feeAssetId": null, "timestamp": 1654084657425, "version": 2, "chainId": 87, "sender": "3P7aVqHv6fXkYuS4sRW2K17ENZMsbXi3sPV", "senderPublicKey": "5SevHzYFiymbFWe1GPt6nNYccPnfTbMft1DqZWfRH8GN", "proofs": [ "3KBEVPgsk7ZtjGJqAfbUBXTAGykwwW8dpVH6341XZmbRAc65YzUhg3rmo9Hszf3iQRWMdRRaqXe3gRUQX4mLXAf1" ], "script": "base64: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b25zCQAAZAAAAAIFAAAACmNvdXBvbnNPbGQFAAAABmFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAGa2V5T2xkBQAAAApjb3Vwb25zT2xkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAANrZXkFAAAAB2NvdXBvbnMFAAAAA25pbAAAAAFpAQAAAAp1c2VDb3Vwb25zAAAAAQAAABFhbW91bnRUcnlpbmdUb1BheQQAAAAKaW52b2tpbmdTYwgFAAAAAWkAAAAGY2FsbGVyAwkAAGYAAAACAAAAAAAAAAAABQAAABFhbW91bnRUcnlpbmdUb1BheQkAAAIAAAABAgAAACpPbmx5IHBvc2l0aXZlIGFtb3VudCBvZiBtb25leSBjYW4gYmUgcGFpZCEDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA9zY0NhblVzZUNvdXBvbnMFAAAACmludm9raW5nU2MJAAACAAAAAQIAAAA4T25seSBjZXJ0YWluIHNtYXJ0IGNvbnRyYWN0cyBjYW4gdXNlIHRoaXMgY291cG9uIG1vZHVsZSEEAAAABHVzZXIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAAlrZXlBY3RpdmUJAQAAABFjb3Vwb25zVXNlckFjdGl2ZQAAAAEFAAAABHVzZXIEAAAAEGF2YWlsYWJsZUNvdXBvbnMJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQUAAAAJa2V5QWN0aXZlBAAAAAlsZWZ0VG9QYXkDCQAAZgAAAAIFAAAAEWFtb3VudFRyeWluZ1RvUGF5BQAAABBhdmFpbGFibGVDb3Vwb25zCQAAZQAAAAIFAAAAEWFtb3VudFRyeWluZ1RvUGF5BQAAABBhdmFpbGFibGVDb3Vwb25zAAAAAAAAAAAABAAAAAphbW91bnRQYWlkCQAAZQAAAAIFAAAAEWFtb3VudFRyeWluZ1RvUGF5BQAAAAlsZWZ0VG9QYXkEAAAAFGF2YWlsYWJsZUNvdXBvbnNMZWZ0CQAAZQAAAAIFAAAAEGF2YWlsYWJsZUNvdXBvbnMFAAAACmFtb3VudFBhaWQEAAAACGtleVNwZW5kCQEAAAAQY291cG9uc1VzZXJTcGVuZAAAAAEFAAAABHVzZXIEAAAABmtleU9sZAkBAAAAFGNvdXBvbnNVc2VyQWN0aXZlT2xkAAAAAQUAAAAEdXNlcgQAAAAKdG90YWxTcGVuZAkAAGQAAAACCQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEFAAAACGtleVNwZW5kBQAAAAphbW91bnRQYWlkCQAFFAAAAAIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACGtleVNwZW5kBQAAAAp0b3RhbFNwZW5kCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAZrZXlPbGQFAAAAEGF2YWlsYWJsZUNvdXBvbnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtleUFjdGl2ZQUAAAAUYXZhaWxhYmxlQ291cG9uc0xlZnQFAAAAA25pbAUAAAAKYW1vdW50UGFpZAAAAADbBvXA", "height": 3142761, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BCWH39pcW8uE3rKvHMrvdV6vboVwaQmKiKWBhkrXmnSA Next: 4Mmqdffx7PsEp4zZGxbg8Xa1wKoVPHf63q82kTV25MNT Diff:
Old | New | Differences | |
---|---|---|---|
35 | 35 | func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress"))) | |
36 | 36 | ||
37 | 37 | ||
38 | - | let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress()] | |
38 | + | let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress()] | |
39 | 39 | ||
40 | 40 | func couponsUserSpend (user) = (user + "_spend") | |
41 | 41 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func tryGetStringExternal (address,key) = match getString(address, key) { | |
5 | 5 | case a: String => | |
6 | 6 | a | |
7 | 7 | case _ => | |
8 | 8 | "" | |
9 | 9 | } | |
10 | 10 | ||
11 | 11 | ||
12 | 12 | func tryGetString (key) = tryGetStringExternal(this, key) | |
13 | 13 | ||
14 | 14 | ||
15 | 15 | func tryGetInteger (key) = match getInteger(this, key) { | |
16 | 16 | case b: Int => | |
17 | 17 | b | |
18 | 18 | case _ => | |
19 | 19 | 0 | |
20 | 20 | } | |
21 | 21 | ||
22 | 22 | ||
23 | 23 | func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress"))) | |
24 | 24 | ||
25 | 25 | ||
26 | 26 | func getRebirthAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_rebirthAddress"))) | |
27 | 27 | ||
28 | 28 | ||
29 | 29 | func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress"))) | |
30 | 30 | ||
31 | 31 | ||
32 | 32 | func getFarmingAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_farmingAddress"))) | |
33 | 33 | ||
34 | 34 | ||
35 | 35 | func getGameDappAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_gameDappAddress"))) | |
36 | 36 | ||
37 | 37 | ||
38 | - | let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress()] | |
38 | + | let scCanUseCoupons = [getRebirthAddress(), getIncubatorAddress(), getFarmingAddress(), getGameDappAddress()] | |
39 | 39 | ||
40 | 40 | func couponsUserSpend (user) = (user + "_spend") | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func couponsUserActive (user) = (user + "_active") | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func couponsUserActiveOld (user) = (couponsUserActive(user) + "_old") | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | @Callable(i) | |
50 | 50 | func configureOracle (oracle) = if ((i.caller != this)) | |
51 | 51 | then throw("admin only") | |
52 | 52 | else [StringEntry("static_oracleAddress", oracle)] | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | ||
56 | 56 | @Callable(i) | |
57 | 57 | func addCoupons (user,amount) = if ((i.caller != this)) | |
58 | 58 | then throw("admin only") | |
59 | 59 | else { | |
60 | 60 | let keyOld = couponsUserActiveOld(user) | |
61 | 61 | let key = couponsUserActive(user) | |
62 | 62 | let couponsOld = tryGetInteger(key) | |
63 | 63 | let coupons = (couponsOld + amount) | |
64 | 64 | [IntegerEntry(keyOld, couponsOld), IntegerEntry(key, coupons)] | |
65 | 65 | } | |
66 | 66 | ||
67 | 67 | ||
68 | 68 | ||
69 | 69 | @Callable(i) | |
70 | 70 | func useCoupons (amountTryingToPay) = { | |
71 | 71 | let invokingSc = i.caller | |
72 | 72 | if ((0 > amountTryingToPay)) | |
73 | 73 | then throw("Only positive amount of money can be paid!") | |
74 | 74 | else if (!(containsElement(scCanUseCoupons, invokingSc))) | |
75 | 75 | then throw("Only certain smart contracts can use this coupon module!") | |
76 | 76 | else { | |
77 | 77 | let user = toString(i.originCaller) | |
78 | 78 | let keyActive = couponsUserActive(user) | |
79 | 79 | let availableCoupons = tryGetInteger(keyActive) | |
80 | 80 | let leftToPay = if ((amountTryingToPay > availableCoupons)) | |
81 | 81 | then (amountTryingToPay - availableCoupons) | |
82 | 82 | else 0 | |
83 | 83 | let amountPaid = (amountTryingToPay - leftToPay) | |
84 | 84 | let availableCouponsLeft = (availableCoupons - amountPaid) | |
85 | 85 | let keySpend = couponsUserSpend(user) | |
86 | 86 | let keyOld = couponsUserActiveOld(user) | |
87 | 87 | let totalSpend = (tryGetInteger(keySpend) + amountPaid) | |
88 | 88 | $Tuple2([IntegerEntry(keySpend, totalSpend), IntegerEntry(keyOld, availableCoupons), IntegerEntry(keyActive, availableCouponsLeft)], amountPaid) | |
89 | 89 | } | |
90 | 90 | } | |
91 | 91 | ||
92 | 92 |
github/deemru/w8io/3ef1775 37.32 ms ◑