tx · ADwUwZt46GXqmNFm6aB8tigsE1zvVdWLtWCCpEgB9N4i 3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9: -0.01000000 Waves 2022.05.06 15:13 [2039824] smart account 3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9 > SELF 0.00000000 Waves
{ "type": 13, "id": "ADwUwZt46GXqmNFm6aB8tigsE1zvVdWLtWCCpEgB9N4i", "fee": 1000000, "feeAssetId": null, "timestamp": 1651839256670, "version": 2, "chainId": 84, "sender": "3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9", "senderPublicKey": "HwnFy5MZJ9eyVKF9GSXN8nuA5uT2rcvnVqHw9vCv3DNn", "proofs": [ "4c7nR5bH64biNjQWW24FN2Z6WexoWDt8ahtmtiHA6a6pUUEuyybTFcR2NCunGs9Gqqmc8CqzZRPbebJz48RzUtyZ" ], "script": "base64:AAIFAAAAAAAAAB0IAhIDCgEIEgASBAoCCAESAwoBARIFCgMICAESAAAAAAkAAAAACnNoaW55d2dnaWQBAAAAIIlpzwL/trq51HGW13m4mXYmsHTQd3n0c26G8PRznwYmAAAAAAxhZG1pbkFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAECAAAAIzNNcE50aVBTUlNxNk5uYVFZazM4QmZXU3paY2dBWVR5clE5AQAAAAx0cnlHZXRTdHJpbmcAAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgIAAAAAAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIAAAAAAAAAAAABAAAADXRyeUdldEJvb2xlYW4AAAABAAAAA2tleQQAAAAHJG1hdGNoMAkABBsAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAB0Jvb2xlYW4EAAAAAWIFAAAAByRtYXRjaDAFAAAAAWIHAQAAAA9pbnRlcm5hbERlcG9zaXQAAAACAAAACmFkZHJlc3NTdHIAAAAIYW1vdW50SW4EAAAABmFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAACF9EZXBvc2l0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAACF9EZXBvc2l0CQAAZAAAAAIFAAAABmFtb3VudAUAAAAIYW1vdW50SW4FAAAAA25pbAEAAAALaW50ZXJuYWxQYXkAAAACAAAACmFkZHJlc3NTdHIAAAAGYW1vdW50BAAAAAlkZXBvc2l0ZWQJAQAAAA10cnlHZXRJbnRlZ2VyAAAAAQkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAhfRGVwb3NpdAMJAABmAAAAAgAAAAAAAAAAAAkAAGUAAAACBQAAAAlkZXBvc2l0ZWQFAAAABmFtb3VudAkAAAIAAAABAgAAABxOb3QgZW5vdWdoIGRlcG9zaXQgdG8gYnVpbGQuAwkAAAAAAAACCQAAZQAAAAIFAAAACWRlcG9zaXRlZAUAAAAGYW1vdW50AAAAAAAAAAAACQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAIX0RlcG9zaXQFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAhfRGVwb3NpdAkAAGUAAAACBQAAAAlkZXBvc2l0ZWQFAAAABmFtb3VudAUAAAADbmlsAQAAAA9pbnRlcm5hbFJlc2VydmUAAAACAAAACmFkZHJlc3NTdHIAAAAGYW1vdW50BAAAAA5yZXNlcnZlZEFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAACV9SZXNlcnZlZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAphZGRyZXNzU3RyAgAAAAlfUmVzZXJ2ZWQJAABkAAAAAgUAAAAOcmVzZXJ2ZWRBbW91bnQFAAAABmFtb3VudAUAAAADbmlsAQAAABBpbnRlcm5hbFRyYW5zZmVyAAAAAwAAAAtmcm9tQWRkcmVzcwAAAAl0b0FkZHJlc3MAAAAGYW1vdW50CQAETgAAAAIJAQAAAAtpbnRlcm5hbFBheQAAAAIFAAAAC2Zyb21BZGRyZXNzBQAAAAZhbW91bnQJAQAAAA9pbnRlcm5hbERlcG9zaXQAAAACBQAAAAl0b0FkZHJlc3MFAAAABmFtb3VudAAAAAYAAAABaQEAAAAPc2V0QXNzZXRBZGRyZXNzAAAAAQAAAAlhc3NldEFkZHIDAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADGFkbWluQWRkcmVzcwcJAAACAAAAAQIAAAAweW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADEFzc2V0QWRkcmVzcwUAAAAJYXNzZXRBZGRyBQAAAANuaWwAAAABaQEAAAAHRGVwb3NpdAAAAAAEAAAACmFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAANwbXQJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAADCQAAAAAAAAIFAAAAA3BtdAUAAAADcG10BAAAAAhhbW91bnRJbgkBAAAABXZhbHVlAAAAAQgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50AwkAAAAAAAACBQAAAAhhbW91bnRJbgUAAAAIYW1vdW50SW4EAAAAB2Fzc2V0SW4IBQAAAANwbXQAAAAHYXNzZXRJZAMJAAAAAAAAAgUAAAAHYXNzZXRJbgUAAAAHYXNzZXRJbgMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SW4FAAAACnNoaW55d2dnaWQJAAACAAAAAQIAAAAaT25seSAkSEVHIHBheW1lbnRzIGFsbG93ZWQEAAAABmFtb3VudAkBAAAADXRyeUdldEludGVnZXIAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAACF9EZXBvc2l0CQEAAAAPaW50ZXJuYWxEZXBvc2l0AAAAAgUAAAAKYWRkcmVzc1N0cgkAAGQAAAACBQAAAAZhbW91bnQFAAAACGFtb3VudEluCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAA1BheQAAAAIAAAAKYWRkcmVzc1N0cgAAAAZhbW91bnQEAAAADWFzc2V0c0FkZHJlc3MJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAAAxBc3NldEFkZHJlc3MDAwMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAxhZG1pbkFkZHJlc3MHCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAANYXNzZXRzQWRkcmVzcwcJAAACAAAAAQIAAAAweW91IGFyZSBub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uCQEAAAALaW50ZXJuYWxQYXkAAAACBQAAAAphZGRyZXNzU3RyBQAAAAZhbW91bnQAAAABaQEAAAAJQ2FsbGVyUGF5AAAAAQAAAAZhbW91bnQEAAAACmNhbGxlckFkZHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQEAAAALaW50ZXJuYWxQYXkAAAACBQAAAApjYWxsZXJBZGRyBQAAAAZhbW91bnQAAAABaQEAAAANdHJhbnNmZXJDb2lucwAAAAMAAAALZnJvbUFkZHJlc3MAAAAJdG9BZGRyZXNzAAAABmFtb3VudAQAAAANYXNzZXRzQWRkcmVzcwkBAAAADHRyeUdldFN0cmluZwAAAAECAAAADEFzc2V0QWRkcmVzcwMDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADGFkbWluQWRkcmVzcwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAADWFzc2V0c0FkZHJlc3MHCQAAAgAAAAECAAAAMHlvdSBhcmUgbm90IGF1dGhvcml6ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbgkBAAAAEGludGVybmFsVHJhbnNmZXIAAAADBQAAAAtmcm9tQWRkcmVzcwUAAAAJdG9BZGRyZXNzBQAAAAZhbW91bnQAAAABaQEAAAAGUmVkZWVtAAAAAAQAAAAKYWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAADnJlc2VydmVkQW1vdW50CQEAAAANdHJ5R2V0SW50ZWdlcgAAAAEJAAEsAAAAAgUAAAAKYWRkcmVzc1N0cgIAAAAJX1Jlc2VydmVkAwkAAAAAAAACBQAAAA5yZXNlcnZlZEFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAABFOb3RoaW5nIHRvIHJlZGVlbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAACmFkZHJlc3NTdHICAAAACV9SZXNlcnZlZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADnJlc2VydmVkQW1vdW50BQAAAApzaGlueXdnZ2lkBQAAAANuaWwAAAAApWnwGA==", "height": 2039824, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: awNDGK57pcQw1xv6whzkv2TLUQKijGrHNaKKDf7ZXp4 Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let shinywggid = base58'AFQS5E4ELtxex3iANtWtUU2V2oWJZSo8VVnK8z3VFmqf' | |
5 | + | ||
6 | + | let adminAddress = addressFromStringValue("3MpNtiPSRSq6NnaQYk38BfWSzZcgAYTyrQ9") | |
7 | + | ||
8 | + | func tryGetString (key) = match getString(this, key) { | |
9 | + | case b: String => | |
10 | + | b | |
11 | + | case _ => | |
12 | + | "" | |
13 | + | } | |
14 | + | ||
15 | + | ||
16 | + | func tryGetInteger (key) = match getInteger(this, key) { | |
17 | + | case b: Int => | |
18 | + | b | |
19 | + | case _ => | |
20 | + | 0 | |
21 | + | } | |
22 | + | ||
23 | + | ||
24 | + | func tryGetBoolean (key) = match getBoolean(this, key) { | |
25 | + | case b: Boolean => | |
26 | + | b | |
27 | + | case _ => | |
28 | + | false | |
29 | + | } | |
30 | + | ||
31 | + | ||
32 | + | func internalDeposit (addressStr,amountIn) = { | |
33 | + | let amount = tryGetInteger((addressStr + "_Deposit")) | |
34 | + | [IntegerEntry((addressStr + "_Deposit"), (amount + amountIn))] | |
35 | + | } | |
36 | + | ||
37 | + | ||
38 | + | func internalPay (addressStr,amount) = { | |
39 | + | let deposited = tryGetInteger((addressStr + "_Deposit")) | |
40 | + | if ((0 > (deposited - amount))) | |
41 | + | then throw("Not enough deposit to build.") | |
42 | + | else if (((deposited - amount) == 0)) | |
43 | + | then [DeleteEntry((addressStr + "_Deposit"))] | |
44 | + | else [IntegerEntry((addressStr + "_Deposit"), (deposited - amount))] | |
45 | + | } | |
46 | + | ||
47 | + | ||
48 | + | func internalReserve (addressStr,amount) = { | |
49 | + | let reservedAmount = tryGetInteger((addressStr + "_Reserved")) | |
50 | + | [IntegerEntry((addressStr + "_Reserved"), (reservedAmount + amount))] | |
51 | + | } | |
52 | + | ||
53 | + | ||
54 | + | func internalTransfer (fromAddress,toAddress,amount) = (internalPay(fromAddress, amount) ++ internalDeposit(toAddress, amount)) | |
4 | 55 | ||
5 | 56 | ||
6 | 57 | @Callable(i) | |
7 | - | func calc (amountIn) = { | |
8 | - | let mult = fraction(100000000, (43712474710 / 15), (9277155342 / 10)) | |
9 | - | let reservedAmount = amountIn | |
10 | - | if ((reservedAmount == reservedAmount)) | |
58 | + | func setAssetAddress (assetAddr) = if (if ((i.caller != this)) | |
59 | + | then (i.caller != adminAddress) | |
60 | + | else false) | |
61 | + | then throw("you are not authorized to perform this operation") | |
62 | + | else [StringEntry("AssetAddress", assetAddr)] | |
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | @Callable(i) | |
67 | + | func Deposit () = { | |
68 | + | let addressStr = toString(i.originCaller) | |
69 | + | let pmt = i.payments[0] | |
70 | + | if ((pmt == pmt)) | |
11 | 71 | then { | |
12 | - | let convertedAmount = fraction(reservedAmount, mult, 1000000) | |
13 | - | if ((convertedAmount == convertedAmount)) | |
14 | - | then [IntegerEntry("result", convertedAmount)] | |
72 | + | let amountIn = value(i.payments[0].amount) | |
73 | + | if ((amountIn == amountIn)) | |
74 | + | then { | |
75 | + | let assetIn = pmt.assetId | |
76 | + | if ((assetIn == assetIn)) | |
77 | + | then if ((assetIn != shinywggid)) | |
78 | + | then throw("Only $HEG payments allowed") | |
79 | + | else { | |
80 | + | let amount = tryGetInteger((addressStr + "_Deposit")) | |
81 | + | internalDeposit(addressStr, (amount + amountIn)) | |
82 | + | } | |
83 | + | else throw("Strict value is not equal to itself.") | |
84 | + | } | |
15 | 85 | else throw("Strict value is not equal to itself.") | |
16 | 86 | } | |
17 | 87 | else throw("Strict value is not equal to itself.") | |
88 | + | } | |
89 | + | ||
90 | + | ||
91 | + | ||
92 | + | @Callable(i) | |
93 | + | func Pay (addressStr,amount) = { | |
94 | + | let assetsAddress = tryGetString("AssetAddress") | |
95 | + | if (if (if ((i.caller != this)) | |
96 | + | then (i.caller != adminAddress) | |
97 | + | else false) | |
98 | + | then (toString(i.caller) != assetsAddress) | |
99 | + | else false) | |
100 | + | then throw("you are not authorized to perform this operation") | |
101 | + | else internalPay(addressStr, amount) | |
102 | + | } | |
103 | + | ||
104 | + | ||
105 | + | ||
106 | + | @Callable(i) | |
107 | + | func CallerPay (amount) = { | |
108 | + | let callerAddr = toString(i.caller) | |
109 | + | internalPay(callerAddr, amount) | |
110 | + | } | |
111 | + | ||
112 | + | ||
113 | + | ||
114 | + | @Callable(i) | |
115 | + | func transferCoins (fromAddress,toAddress,amount) = { | |
116 | + | let assetsAddress = tryGetString("AssetAddress") | |
117 | + | if (if ((i.caller != adminAddress)) | |
118 | + | then (toString(i.caller) != assetsAddress) | |
119 | + | else false) | |
120 | + | then throw("you are not authorized to perform this operation") | |
121 | + | else internalTransfer(fromAddress, toAddress, amount) | |
122 | + | } | |
123 | + | ||
124 | + | ||
125 | + | ||
126 | + | @Callable(i) | |
127 | + | func Redeem () = { | |
128 | + | let addressStr = toString(i.caller) | |
129 | + | let reservedAmount = tryGetInteger((addressStr + "_Reserved")) | |
130 | + | if ((reservedAmount == 0)) | |
131 | + | then throw("Nothing to redeem") | |
132 | + | else [DeleteEntry((addressStr + "_Reserved")), ScriptTransfer(i.caller, reservedAmount, shinywggid)] | |
18 | 133 | } | |
19 | 134 | ||
20 | 135 |
github/deemru/w8io/169f3d6 24.76 ms ◑![]()