tx · 4Pj2jT1uWv4L1WFQXYHk9cpRj5L2fWMfEELhid9nfr34 3PH3qqM1ZvErwwNxHbRbL29VvTATk6jgJZX: -0.01000000 Waves 2020.04.27 04:46 [2035740] smart account 3PH3qqM1ZvErwwNxHbRbL29VvTATk6jgJZX > SELF 0.00000000 Waves
{ "type": 13, "id": "4Pj2jT1uWv4L1WFQXYHk9cpRj5L2fWMfEELhid9nfr34", "fee": 1000000, "feeAssetId": null, "timestamp": 1587951731329, "version": 1, "sender": "3PH3qqM1ZvErwwNxHbRbL29VvTATk6jgJZX", "senderPublicKey": "G77fMNRJBHRhJH93MKDGyFsTLMt6AqFsR5oQPu9BhX1u", "proofs": [ "5JVqpLb7Xu8WgVe9WwL99CLdbtnBkVCRxqEBF79hS1hNnCy4Q4PQQYmtbw7yjTUEGdiDKCLxtwivqi2n1YzwC7jp" ], "script": "base64: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YXN0VXBkYXRlAwkAAGcAAAACBQAAAApsYXN0VXBkYXRlBQAAAA1tb250aE9wZW5UaW1lCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABpQcm9maXQgbXVzdCBiZSBzZW50IGFmdGVyIAkBAAAACWRyb3BSaWdodAAAAAIJAAGkAAAAAQkAAGQAAAACBQAAAA1tb250aE9wZW5UaW1lBQAAAAVtb250aAAAAAAAAAAAAwIAAAAQIFVuaXggdGltZXN0YW1wLgMJAQAAAAIhPQAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAQbWFuYWdlclB1YmxpY0tleQkAAAIAAAABAgAAAChPbmx5IHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBzZW5kIHByb2ZpdHMhAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFpAAAAB3BheW1lbnQJAAACAAAAAQIAAAAzUGxlYXNlIGRvIG5vdCBhdHRhY2ggcGF5bWVudCB3aGVuIHNlbmRpbmcgcHJvZml0Li4uBAAAAA5vbGRCYXNlQmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAOb2xkQmFzZUJhbGFuY2UEAAAAD29sZFF1b3RlQmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAPb2xkUXVvdGVCYWxhbmNlBAAAAA9vbGRUb3RhbEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMCAAAAD29sZFRvdGFsQmFsYW5jZQQAAAAPYXZnUXVvdGVCYWxhbmNlCQEAAAAPZnJhY3Rpb25DZWlsaW5nAAAAAwUAAAAPb2xkUXVvdGVCYWxhbmNlBQAAAA5vbGRCYXNlQmFsYW5jZQUAAAALYmFzZUJhbGFuY2UEAAAACnN0YWtQcm9maXQDCQAAAAAAAAIFAAAAD2F2Z1F1b3RlQmFsYW5jZQAAAAAAAAAAAAAAAAAAAAAAAAkAAGUAAAACBQAAAAxxdW90ZUJhbGFuY2UFAAAAD2F2Z1F1b3RlQmFsYW5jZQQAAAAKc3Rha0Ftb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAKc3Rha1Byb2ZpdAAAAAAA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AAEFAAAABGRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAACXRyYW5zZmVycwAAAAFpAQAAAApzZXRCYWxhbmNlAAAAAAQAAAAIaXNBY3RpdmUJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMCAAAACGlzQWN0aXZlBAAAAApsYXN0VXBkYXRlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAAApsYXN0VXBkYXRlBAAAAA1kYXBwVGltZUZyYW1lCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAtob2xkQWRkcmVzcwIAAAANZGFwcFRpbWVGcmFtZQQAAAAMbWluU3RhcnRUaW1lCQAAaAAAAAIJAABkAAAAAgkAAGkAAAACBQAAAApsYXN0VXBkYXRlBQAAAA1kYXBwVGltZUZyYW1lAAAAAAAAAAABBQAAAA1kYXBwVGltZUZyYW1lAwMFAAAACGlzQWN0aXZlCQAAZgAAAAIFAAAADW1vbnRoT3BlblRpbWUFAAAACmxhc3RVcGRhdGUHCQAAAgAAAAECAAAAJUZpcnN0IHlvdSBuZWVkIHRvIHdpdGhkcmF3IHJld2FyZHMuLi4DAwUAAAAIaXNBY3RpdmUJAABmAAAAAgUAAAAMbWluU3RhcnRUaW1lBQAAAApsYXN0VXBkYXRlBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAiVGhlIGJhbGFuY2Ugc2hvdWxkIGJlIGZpeGVkIGFmdGVyIAkBAAAACWRyb3BSaWdodAAAAAIJAAGkAAAAAQUAAAAMbWluU3RhcnRUaW1lAAAAAAAAAAADAgAAABAgVW5peCB0aW1lc3RhbXAuAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAABBtYW5hZ2VyUHVibGljS2V5CQAAAgAAAAECAAAAL09ubHkgdGhlIGFkbWluaXN0cmF0b3IgY2FuIGFkanVzdCB0aGUgYmFsYW5jZXMhAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFpAAAAB3BheW1lbnQJAAACAAAAAQIAAAA1UGxlYXNlIGRvIG5vdCBhdHRhY2ggcGF5bWVudCB3aGVuIHNldHRpbmcgYmFsYW5jZXMuLi4EAAAADm9sZEJhc2VCYWxhbmNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAAA5vbGRCYXNlQmFsYW5jZQQAAAAPb2xkUXVvdGVCYWxhbmNlCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzAgAAAA9vbGRRdW90ZUJhbGFuY2UEAAAAD29sZFRvdGFsQmFsYW5jZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwIAAAAPb2xkVG90YWxCYWxhbmNlBAAAAA1kYXBwUHVibGljS2V5CQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzAgAAAA1kYXBwUHVibGljS2V5BAAAAAx0b3RhbEJhbGFuY2UJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAAC2RlcG9BZGRyZXNzCQABLAAAAAIFAAAADWRhcHBQdWJsaWNLZXkCAAAADV90b3RhbEJhbGFuY2UEAAAAB2RlcG9zaXQDCQAAAAAAAAIFAAAAD29sZFRvdGFsQmFsYW5jZQAAAAAAAAAAAAAAAAAAAAAAAAkAAGUAAAACBQAAAAx0b3RhbEJhbGFuY2UFAAAAD29sZFRvdGFsQmFsYW5jZQQAAAAKYmFzZUFtb3VudAkAAGkAAAACCQEAAAAPZnJhY3Rpb25DZWlsaW5nAAAAAwUAAAAHZGVwb3NpdAUAAAAOb2xkQmFzZUJhbGFuY2UFAAAAD29sZFF1b3RlQmFsYW5jZQAAAAAAAAAAAgQAAAALcXVvdGVBbW91bnQJAABlAAAAAgUAAAAHZGVwb3NpdAkAAGsAAAADBQAAAApiYXNlQW1vdW50BQAAAA9vbGRRdW90ZUJhbGFuY2UFAAAADm9sZEJhc2VCYWxhbmNlBAAAAANkczAJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAACGlzQWN0aXZlBgUAAAADbmlsBAAAAANkczEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAACmxhc3RVcGRhdGUFAAAADWxhc3RCbG9ja1RpbWUFAAAAA2RzMAQAAAADZHMyAwkAAAAAAAACBQAAAApiYXNlQW1vdW50AAAAAAAAAAAABQAAAANkczEJAARM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AAAJYXNzZXRQYWlyAAAAC2Ftb3VudEFzc2V0BwkAAAAAAAACCAgFAAAAAW8AAAAJYXNzZXRQYWlyAAAACnByaWNlQXNzZXQFAAAADmJpdGNvaW5Bc3NldElkBwcDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAMFAAAADHJpZ2h0TWFuYWdlcgkBAAAAASEAAAABCQEAAAAMaXNGaXhlZEFzc2V0AAAAAQgFAAAAAXQAAAAHYXNzZXRJZAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAD0RhdGFUcmFuc2FjdGlvbgQAAAABZAUAAAAHJG1hdGNoMAMFAAAADHJpZ2h0TWFuYWdlcgUAAAAPcmlnaHRHdWFyYW50b3JzBwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAXMFAAAAByRtYXRjaDADBQAAAAxyaWdodE1hbmFnZXIFAAAAD3JpZ2h0R3VhcmFudG9ycwcH5/nGUA==", "chainId": 87, "height": 2035740, "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 3 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | let baseAssetId = base58'HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk' | |
5 | + | ||
6 | + | let quoteAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
7 | + | ||
8 | + | let bitcoinAssetId = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS' | |
9 | + | ||
10 | + | let franklinAssetId = base58'9SjLgBBKXt95VKYNv8xnC2GWQBRsJLowcgCrTLGFMW8z' | |
11 | + | ||
12 | + | let traderPublicKey = base58'5dQbzkYkh2UWtcR1cDwxZVzkduK1SVEeVa1TyLmD6eVU' | |
13 | + | ||
14 | + | let managerPublicKey = base58'66BGZcJJ9yAWcHKZZeiuA71wAvC5GWTmdQWArjt1g6jC' | |
15 | + | ||
16 | + | let guarantorPublicKeys = nil | |
17 | + | ||
18 | + | let headAddress = addressFromPublicKey(managerPublicKey) | |
19 | + | ||
20 | + | let depoAddress = Address(base58'3PKMb3aP6n6ht6ZipuuxNJ6sBpLgM94t4xk') | |
21 | + | ||
22 | + | let stakAddress = Address(base58'3PLe1EGXcx2yNrNH7KvtmKW2B9uKvxm148A') | |
23 | + | ||
24 | + | let holdAddress = Address(base58'3PNyTtHEnQkVUhRy6YuTa2bGLHL2ccaqjBG') | |
25 | + | ||
26 | + | let exitAddress = Address(base58'3PBhghtLS7DDELxmv11k13S1cCGZyFvhx4k') | |
27 | + | ||
28 | + | let minBalance = (1000 * 1000) | |
29 | + | ||
30 | + | let baseBalance = assetBalance(this, baseAssetId) | |
31 | + | ||
32 | + | let quoteBalance = assetBalance(this, quoteAssetId) | |
33 | + | ||
34 | + | let month = (2629746 * 1000) | |
35 | + | ||
36 | + | let timeout = (month / 10) | |
37 | + | ||
38 | + | let lastBlockTime = lastBlock.timestamp | |
39 | + | ||
40 | + | let monthOpenTime = ((lastBlockTime / month) * month) | |
41 | + | ||
42 | + | func fractionCeiling (a,b,c) = ((fraction((2 * a), b, c) + 1) / 2) | |
43 | + | ||
44 | + | ||
45 | + | func isValidAsset (assetId) = match assetInfo(assetId) { | |
46 | + | case a: Asset => | |
47 | + | !(a.scripted) | |
48 | + | case _ => | |
49 | + | false | |
50 | + | } | |
51 | + | ||
52 | + | ||
53 | + | func isFixedAsset (assetId) = if (if (if (!(isDefined(assetId))) | |
54 | + | then true | |
55 | + | else (assetId == bitcoinAssetId)) | |
56 | + | then true | |
57 | + | else (assetId == baseAssetId)) | |
58 | + | then true | |
59 | + | else (assetId == quoteAssetId) | |
60 | + | ||
61 | + | ||
62 | + | func isValidProof (msg,sig,keys) = { | |
63 | + | func keyVerify (acc,key) = if (acc) | |
64 | + | then true | |
65 | + | else sigVerify(msg, sig, key) | |
66 | + | ||
67 | + | let $list29282959 = keys | |
68 | + | let $size29282959 = size($list29282959) | |
69 | + | let $acc029282959 = false | |
70 | + | if (($size29282959 == 0)) | |
71 | + | then $acc029282959 | |
72 | + | else { | |
73 | + | let $acc129282959 = keyVerify($acc029282959, $list29282959[0]) | |
74 | + | if (($size29282959 == 1)) | |
75 | + | then $acc129282959 | |
76 | + | else { | |
77 | + | let $acc229282959 = keyVerify($acc129282959, $list29282959[1]) | |
78 | + | if (($size29282959 == 2)) | |
79 | + | then $acc229282959 | |
80 | + | else { | |
81 | + | let $acc329282959 = keyVerify($acc229282959, $list29282959[2]) | |
82 | + | if (($size29282959 == 3)) | |
83 | + | then $acc329282959 | |
84 | + | else { | |
85 | + | let $acc429282959 = keyVerify($acc329282959, $list29282959[3]) | |
86 | + | if (($size29282959 == 4)) | |
87 | + | then $acc429282959 | |
88 | + | else { | |
89 | + | let $acc529282959 = keyVerify($acc429282959, $list29282959[4]) | |
90 | + | if (($size29282959 == 5)) | |
91 | + | then $acc529282959 | |
92 | + | else { | |
93 | + | let $acc629282959 = keyVerify($acc529282959, $list29282959[5]) | |
94 | + | throw("List size exceed 5") | |
95 | + | } | |
96 | + | } | |
97 | + | } | |
98 | + | } | |
99 | + | } | |
100 | + | } | |
101 | + | } | |
102 | + | ||
103 | + | ||
104 | + | @Callable(i) | |
105 | + | func getProfit () = { | |
106 | + | let lastUpdate = getIntegerValue(this, "lastUpdate") | |
107 | + | if ((lastUpdate >= monthOpenTime)) | |
108 | + | then throw((("Profit must be sent after " + dropRight(toString((monthOpenTime + month)), 3)) + " Unix timestamp.")) | |
109 | + | else if ((i.callerPublicKey != managerPublicKey)) | |
110 | + | then throw("Only the administrator can send profits!") | |
111 | + | else if (isDefined(i.payment)) | |
112 | + | then throw("Please do not attach payment when sending profit...") | |
113 | + | else { | |
114 | + | let oldBaseBalance = getIntegerValue(this, "oldBaseBalance") | |
115 | + | let oldQuoteBalance = getIntegerValue(this, "oldQuoteBalance") | |
116 | + | let oldTotalBalance = getIntegerValue(this, "oldTotalBalance") | |
117 | + | let avgQuoteBalance = fractionCeiling(oldQuoteBalance, oldBaseBalance, baseBalance) | |
118 | + | let stakProfit = if ((avgQuoteBalance == 0)) | |
119 | + | then 0 | |
120 | + | else (quoteBalance - avgQuoteBalance) | |
121 | + | let stakAmount = if ((0 > stakProfit)) | |
122 | + | then 0 | |
123 | + | else if ((stakProfit > (quoteBalance / 2))) | |
124 | + | then (quoteBalance / 2) | |
125 | + | else stakProfit | |
126 | + | let stakFee = fraction(stakAmount, 20, 100) | |
127 | + | let netQuoteBalance = (quoteBalance - stakAmount) | |
128 | + | let holdProfit = ((netQuoteBalance + quoteBalance) - oldTotalBalance) | |
129 | + | let holdAmount = if ((0 > holdProfit)) | |
130 | + | then 0 | |
131 | + | else if ((holdProfit > (netQuoteBalance / 2))) | |
132 | + | then (netQuoteBalance / 2) | |
133 | + | else holdProfit | |
134 | + | let holdFee = fraction(holdAmount, 20, 100) | |
135 | + | let baseAmount = (fractionCeiling(holdAmount, baseBalance, netQuoteBalance) / 2) | |
136 | + | let quoteAmount = (holdAmount - fraction(baseAmount, netQuoteBalance, baseBalance)) | |
137 | + | let ds0 = [DataEntry("isActive", false)] | |
138 | + | let ds1 = DataEntry("lastUpdate", lastBlockTime) :: ds0 | |
139 | + | let ds2 = if (((baseBalance - baseAmount) == oldBaseBalance)) | |
140 | + | then ds1 | |
141 | + | else DataEntry("oldBaseBalance", (baseBalance - baseAmount)) :: ds1 | |
142 | + | let ds3 = if (((netQuoteBalance - quoteAmount) == oldQuoteBalance)) | |
143 | + | then ds2 | |
144 | + | else DataEntry("oldQuoteBalance", (netQuoteBalance - quoteAmount)) :: ds2 | |
145 | + | let data = ds3 | |
146 | + | let ts0 = if (((stakFee + holdFee) == 0)) | |
147 | + | then nil | |
148 | + | else [ScriptTransfer(headAddress, (stakFee + holdFee), quoteAssetId)] | |
149 | + | let ts1 = if ((stakAmount == 0)) | |
150 | + | then ts0 | |
151 | + | else ScriptTransfer(stakAddress, (stakAmount - stakFee), quoteAssetId) :: ts0 | |
152 | + | let ts2 = if ((holdAmount == 0)) | |
153 | + | then ts1 | |
154 | + | else ScriptTransfer(holdAddress, (holdAmount - holdFee), quoteAssetId) :: ts1 | |
155 | + | let transfers = ts2 | |
156 | + | ScriptResult(WriteSet(data), TransferSet(transfers)) | |
157 | + | } | |
158 | + | } | |
159 | + | ||
160 | + | ||
161 | + | ||
162 | + | @Callable(i) | |
163 | + | func setBalance () = { | |
164 | + | let isActive = getBooleanValue(this, "isActive") | |
165 | + | let lastUpdate = getIntegerValue(this, "lastUpdate") | |
166 | + | let dappTimeFrame = getIntegerValue(holdAddress, "dappTimeFrame") | |
167 | + | let minStartTime = (((lastUpdate / dappTimeFrame) + 1) * dappTimeFrame) | |
168 | + | if (if (isActive) | |
169 | + | then (monthOpenTime > lastUpdate) | |
170 | + | else false) | |
171 | + | then throw("First you need to withdraw rewards...") | |
172 | + | else if (if (isActive) | |
173 | + | then (minStartTime > lastUpdate) | |
174 | + | else false) | |
175 | + | then throw((("The balance should be fixed after " + dropRight(toString(minStartTime), 3)) + " Unix timestamp.")) | |
176 | + | else if ((i.callerPublicKey != managerPublicKey)) | |
177 | + | then throw("Only the administrator can adjust the balances!") | |
178 | + | else if (isDefined(i.payment)) | |
179 | + | then throw("Please do not attach payment when setting balances...") | |
180 | + | else { | |
181 | + | let oldBaseBalance = getIntegerValue(this, "oldBaseBalance") | |
182 | + | let oldQuoteBalance = getIntegerValue(this, "oldQuoteBalance") | |
183 | + | let oldTotalBalance = getIntegerValue(this, "oldTotalBalance") | |
184 | + | let dappPublicKey = getStringValue(this, "dappPublicKey") | |
185 | + | let totalBalance = getIntegerValue(depoAddress, (dappPublicKey + "_totalBalance")) | |
186 | + | let deposit = if ((oldTotalBalance == 0)) | |
187 | + | then 0 | |
188 | + | else (totalBalance - oldTotalBalance) | |
189 | + | let baseAmount = (fractionCeiling(deposit, oldBaseBalance, oldQuoteBalance) / 2) | |
190 | + | let quoteAmount = (deposit - fraction(baseAmount, oldQuoteBalance, oldBaseBalance)) | |
191 | + | let ds0 = [DataEntry("isActive", true)] | |
192 | + | let ds1 = DataEntry("lastUpdate", lastBlockTime) :: ds0 | |
193 | + | let ds2 = if ((baseAmount == 0)) | |
194 | + | then ds1 | |
195 | + | else DataEntry("oldBaseBalance", (oldBaseBalance + baseAmount)) :: ds1 | |
196 | + | let ds3 = if ((quoteAmount == 0)) | |
197 | + | then ds2 | |
198 | + | else DataEntry("oldQuoteBalance", (oldQuoteBalance + quoteAmount)) :: ds2 | |
199 | + | let ds4 = if ((totalBalance == oldTotalBalance)) | |
200 | + | then ds3 | |
201 | + | else DataEntry("oldTotalBalance", totalBalance) :: ds3 | |
202 | + | let data = ds4 | |
203 | + | WriteSet(data) | |
204 | + | } | |
205 | + | } | |
206 | + | ||
207 | + | ||
208 | + | ||
209 | + | @Callable(i) | |
210 | + | func getDonations (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((i.callerPublicKey != managerPublicKey)) | |
211 | + | then throw("Only the administrator can send donations!") | |
212 | + | else if (isDefined(i.payment)) | |
213 | + | then throw("Please do not attach payment when sending donations...") | |
214 | + | else { | |
215 | + | let ts0 = if (if (!(isValidAsset(id0))) | |
216 | + | then true | |
217 | + | else isFixedAsset(id0)) | |
218 | + | then nil | |
219 | + | else [ScriptTransfer(headAddress, assetBalance(this, id0), id0)] | |
220 | + | let ts1 = if (if (!(isValidAsset(id1))) | |
221 | + | then true | |
222 | + | else isFixedAsset(id1)) | |
223 | + | then ts0 | |
224 | + | else ScriptTransfer(headAddress, assetBalance(this, id1), id1) :: ts0 | |
225 | + | let ts2 = if (if (!(isValidAsset(id2))) | |
226 | + | then true | |
227 | + | else isFixedAsset(id2)) | |
228 | + | then ts1 | |
229 | + | else ScriptTransfer(headAddress, assetBalance(this, id2), id2) :: ts1 | |
230 | + | let ts3 = if (if (!(isValidAsset(id3))) | |
231 | + | then true | |
232 | + | else isFixedAsset(id3)) | |
233 | + | then ts2 | |
234 | + | else ScriptTransfer(headAddress, assetBalance(this, id3), id3) :: ts2 | |
235 | + | let ts4 = if (if (!(isValidAsset(id4))) | |
236 | + | then true | |
237 | + | else isFixedAsset(id4)) | |
238 | + | then ts3 | |
239 | + | else ScriptTransfer(headAddress, assetBalance(this, id4), id4) :: ts3 | |
240 | + | let ts5 = if (if (!(isValidAsset(id5))) | |
241 | + | then true | |
242 | + | else isFixedAsset(id5)) | |
243 | + | then ts4 | |
244 | + | else ScriptTransfer(headAddress, assetBalance(this, id5), id5) :: ts4 | |
245 | + | let ts6 = if (if (!(isValidAsset(id6))) | |
246 | + | then true | |
247 | + | else isFixedAsset(id6)) | |
248 | + | then ts5 | |
249 | + | else ScriptTransfer(headAddress, assetBalance(this, id6), id6) :: ts5 | |
250 | + | let ts7 = if (if (!(isValidAsset(id7))) | |
251 | + | then true | |
252 | + | else isFixedAsset(id7)) | |
253 | + | then ts6 | |
254 | + | else ScriptTransfer(headAddress, assetBalance(this, id7), id7) :: ts6 | |
255 | + | let ts8 = if (if (!(isValidAsset(id8))) | |
256 | + | then true | |
257 | + | else isFixedAsset(id8)) | |
258 | + | then ts7 | |
259 | + | else ScriptTransfer(headAddress, assetBalance(this, id8), id8) :: ts7 | |
260 | + | let ts9 = if (if (!(isValidAsset(id9))) | |
261 | + | then true | |
262 | + | else isFixedAsset(id9)) | |
263 | + | then ts8 | |
264 | + | else ScriptTransfer(headAddress, assetBalance(this, id9), id9) :: ts8 | |
265 | + | let transfers = ts9 | |
266 | + | if ((size(transfers) == 0)) | |
267 | + | then throw("There are no valid asset identifiers!") | |
268 | + | else TransferSet(transfers) | |
269 | + | } | |
270 | + | ||
271 | + | ||
272 | + | ||
273 | + | @Callable(i) | |
274 | + | func emergencyExit () = { | |
275 | + | let lastUpdate = getIntegerValue(this, "last_update") | |
276 | + | let minStartTime = ((((lastUpdate / month) + 1) * month) + timeout) | |
277 | + | let callerBalance = assetBalance(i.caller, franklinAssetId) | |
278 | + | if (if ((i.callerPublicKey != managerPublicKey)) | |
279 | + | then (minStartTime > lastBlockTime) | |
280 | + | else false) | |
281 | + | then throw((("Time for emergencies will be after " + dropRight(toString(minStartTime), 3)) + " Unix timestamp.")) | |
282 | + | else if (if ((i.callerPublicKey != managerPublicKey)) | |
283 | + | then ((100 * minBalance) > callerBalance) | |
284 | + | else false) | |
285 | + | then throw("With only 1 Franklin on your balance, you can trigger an emergency exit!") | |
286 | + | else if (isDefined(i.payment)) | |
287 | + | then throw("Please do not attach payment in an emergency exit...") | |
288 | + | else { | |
289 | + | let ds0 = [DataEntry("isActive", false)] | |
290 | + | let ds1 = DataEntry("lastUpdate", lastBlockTime) :: ds0 | |
291 | + | let ds2 = DataEntry("oldTotalBalance", 0) :: ds1 | |
292 | + | let data = ds2 | |
293 | + | let ts0 = if ((baseBalance == 0)) | |
294 | + | then nil | |
295 | + | else [ScriptTransfer(exitAddress, baseBalance, baseAssetId)] | |
296 | + | let ts1 = if ((quoteBalance == 0)) | |
297 | + | then ts0 | |
298 | + | else ScriptTransfer(exitAddress, quoteBalance, quoteAssetId) :: ts0 | |
299 | + | let transfers = ts1 | |
300 | + | if ((size(transfers) == 0)) | |
301 | + | then throw("There is nothing else on both balances!") | |
302 | + | else ScriptResult(WriteSet(data), TransferSet(transfers)) | |
303 | + | } | |
304 | + | } | |
305 | + | ||
306 | + | ||
307 | + | @Verifier(tx) | |
308 | + | func verify () = { | |
309 | + | let rightTrader = sigVerify(tx.bodyBytes, tx.proofs[0], traderPublicKey) | |
310 | + | let rightManager = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
311 | + | let rightGuarantors = ((((if (isValidProof(tx.bodyBytes, tx.proofs[1], guarantorPublicKeys)) | |
312 | + | then 1 | |
313 | + | else 0) + (if (isValidProof(tx.bodyBytes, tx.proofs[2], guarantorPublicKeys)) | |
314 | + | then 1 | |
315 | + | else 0)) + (if (isValidProof(tx.bodyBytes, tx.proofs[3], guarantorPublicKeys)) | |
316 | + | then 1 | |
317 | + | else 0)) >= fractionCeiling(size(guarantorPublicKeys), 1, 2)) | |
318 | + | match tx { | |
319 | + | case o: Order => | |
320 | + | if (if (rightTrader) | |
321 | + | then true | |
322 | + | else rightManager) | |
323 | + | then if (if ((o.matcherFeeAssetId == quoteAssetId)) | |
324 | + | then if (if ((o.assetPair.amountAsset == baseAssetId)) | |
325 | + | then (o.assetPair.priceAsset == quoteAssetId) | |
326 | + | else false) | |
327 | + | then true | |
328 | + | else if ((o.assetPair.amountAsset == quoteAssetId)) | |
329 | + | then (o.assetPair.priceAsset == baseAssetId) | |
330 | + | else false | |
331 | + | else false) | |
332 | + | then true | |
333 | + | else if (if ((o.matcherFeeAssetId == quoteAssetId)) | |
334 | + | then !(isDefined(o.assetPair.amountAsset)) | |
335 | + | else false) | |
336 | + | then (o.assetPair.priceAsset == bitcoinAssetId) | |
337 | + | else false | |
338 | + | else false | |
339 | + | case t: MassTransferTransaction|TransferTransaction => | |
340 | + | if (rightManager) | |
341 | + | then !(isFixedAsset(t.assetId)) | |
342 | + | else false | |
343 | + | case d: DataTransaction => | |
344 | + | if (rightManager) | |
345 | + | then rightGuarantors | |
346 | + | else false | |
347 | + | case s: SetScriptTransaction => | |
348 | + | if (rightManager) | |
349 | + | then rightGuarantors | |
350 | + | else false | |
351 | + | case _ => | |
352 | + | false | |
353 | + | } | |
354 | + | } | |
355 | + |
github/deemru/w8io/0e76f2f 47.91 ms ◑