tx · Hpd6zZjKjmfPjGaSMrX5MWwvSm7RTTMDwvMXjHgxFD4q

3MyytsRPxYr48we6CPWAQ1z4x6cmEbHWtFq:  -0.01400000 Waves

2021.03.29 17:10 [1459142] smart account 3MyytsRPxYr48we6CPWAQ1z4x6cmEbHWtFq > SELF 0.00000000 Waves

{ "type": 13, "id": "Hpd6zZjKjmfPjGaSMrX5MWwvSm7RTTMDwvMXjHgxFD4q", "fee": 1400000, "feeAssetId": null, "timestamp": 1617027083282, "version": 2, "chainId": 84, "sender": "3MyytsRPxYr48we6CPWAQ1z4x6cmEbHWtFq", "senderPublicKey": "551T51u5CXgqTybnycyVjFjM9tKkqVEenm7ZrxxC7gLe", "proofs": [ "fhCVukjzFuZfoVDZtZSUc4X2xupSchQ9k5YjoCMPGVbGZspfjGPueH7UrhKndKD3Pnmna7rBvENnMggT1XQC1ah" ], "script": "base64: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C3RvdGFsQW1vdW50BQAAAANmZWUEAAAADWR5enJhcHRBbW91bnQJAQAAAA11c2RuVG9EeXpyYXB0AAAAAQUAAAAGYW1vdW50BAAAAAhzYXZlZEZlZQkBAAAADmdldFRvdGFsRmVlVXNkAAAAAAQAAAAIdG90YWxGZWUJAABkAAAAAgUAAAAIc2F2ZWRGZWUFAAAAA2ZlZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAOdG90YWxGZWVVc2RLZXkFAAAACHRvdGFsRmVlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAANZHl6cmFwdEFtb3VudAUAAAAOZHl6cmFwdEFzc2V0SWQFAAAAA25pbAAAAAFpAQAAABBzd2FwRXRoVG9EeXpyYXB0AAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAdhc3NldElkCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAAC3RvdGFsQW1vdW50CAUAAAADcG10AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQFAAAACmV0aEFzc2V0SWQJAAACAAAAAQIAAAApT25seSBXRVRIIHRva2VucyBhcmUgYWxsb3dlZCBmb3Igc3dhcHBpbmcEAAAAA2ZlZQkBAAAADGdldEZlZUFtb3VudAAAAAEFAAAAC3RvdGFsQW1vdW50BAAAAAZhbW91bnQJAABlAAAAAgUAAAALdG90YWxBbW91bnQFAAAAA2ZlZQQAAAAIZXRoUHJpY2UJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA1vcmFjbGVBZGRyZXNzBQAAAA1wcmljZU9mRXRoS2V5AgAAABRVbmFibGUgdG8gbG9hZCBwcmljZQQAAAAKdXNkbkFtb3VudAkAAGsAAAADBQAAAAZhbW91bnQFAAAACGV0aFByaWNlAAAAAAAAACcQBAAAAA1keXpyYXB0QW1vdW50CQEAAAANdXNkblRvRHl6cmFwdAAAAAEFAAAACnVzZG5BbW91bnQEAAAACHNhdmVkRmVlCQEAAAAOZ2V0VG90YWxGZWVFdGgAAAAABAAAAAh0b3RhbEZlZQkAAGQAAAACBQAAAAhzYXZlZEZlZQUAAAADZmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA50b3RhbEZlZUV0aEtleQUAAAAIdG90YWxGZWUJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAA1keXpyYXB0QW1vdW50BQAAAA5keXpyYXB0QXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAEXN3YXBEeXpyYXB0VG9Vc2RuAAAAAAQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAdhc3NldElkCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAAC3RvdGFsQW1vdW50CAUAAAADcG10AAAABmFtb3VudAMJAQAAAAIhPQAAAAIFAAAAB2Fzc2V0SWQFAAAADmR5enJhcHRBc3NldElkCQAAAgAAAAECAAAALE9ubHkgRFlaUkFQVCB0b2tlbnMgYXJlIGFsbG93ZWQgZm9yIHN3YXBwaW5nBAAAAANmZWUJAQAAAAxnZXRGZWVBbW91bnQAAAABBQAAAAt0b3RhbEFtb3VudAQAAAAGYW1vdW50CQAAZQAAAAIFAAAAC3RvdGFsQW1vdW50BQAAAANmZWUEAAAACnVzZG5BbW91bnQJAQAAAA1keXpyYXB0VG9Vc2RuAAAAAQUAAAAGYW1vdW50BAAAAAhzYXZlZEZlZQkBAAAAEmdldFRvdGFsRmVlRHl6cmFwdAAAAAAEAAAACHRvdGFsRmVlCQAAZAAAAAIFAAAACHNhdmVkRmVlBQAAAANmZWUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEnRvdGFsRmVlRHl6cmFwdEtleQUAAAAIdG90YWxGZWUJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAp1c2RuQW1vdW50BQAAAAt1c2RuQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAAEHN3YXBEeXpyYXB0VG9FdGgAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAB2Fzc2V0SWQIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAALdG90YWxBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50AwkBAAAAAiE9AAAAAgUAAAAHYXNzZXRJZAUAAAAOZHl6cmFwdEFzc2V0SWQJAAACAAAAAQIAAAAsT25seSBEWVpSQVBUIHRva2VucyBhcmUgYWxsb3dlZCBmb3Igc3dhcHBpbmcEAAAAA2ZlZQkBAAAADGdldEZlZUFtb3VudAAAAAEFAAAAC3RvdGFsQW1vdW50BAAAAAZhbW91bnQJAABlAAAAAgUAAAALdG90YWxBbW91bnQFAAAAA2ZlZQQAAAAKdXNkbkFtb3VudAkBAAAADWR5enJhcHRUb1VzZG4AAAABBQAAAAZhbW91bnQEAAAACGV0aFByaWNlCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANb3JhY2xlQWRkcmVzcwUAAAANcHJpY2VPZkV0aEtleQIAAAAUVW5hYmxlIHRvIGxvYWQgcHJpY2UEAAAACWV0aEFtb3VudAkAAGsAAAADBQAAAAp1c2RuQW1vdW50AAAAAAAAACcQBQAAAAhldGhQcmljZQQAAAAIc2F2ZWRGZWUJAQAAABJnZXRUb3RhbEZlZUR5enJhcHQAAAAABAAAAAh0b3RhbEZlZQkAAGQAAAACBQAAAAhzYXZlZEZlZQUAAAADZmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABJ0b3RhbEZlZUR5enJhcHRLZXkFAAAACHRvdGFsRmVlCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJZXRoQW1vdW50BQAAAApldGhBc3NldElkBQAAAANuaWwAAAAAfP17AQ==", "height": 1459142, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 59w3uLukc4uy6nA1QYBxH9qikPhBvUEBccVktSbfqBxf Next: 3NhiWmAJP7zvHbwEXtfeBJd6t2xsEjRMGnEyKG71zweN Full:
OldNewDifferences
1-{-# STDLIB_VERSION 3 #-}
1+{-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let upVote = "upvote"
4+let totalFeeEthKey = "total_fee_eth"
55
6-let adminAddress1 = base58'3MyofeFJ29LLoVcHYtYgkLP7EUuYYGKBB4P'
6+let totalFeeUsdKey = "total_fee_usd"
77
8-let adminAddress2 = base58'3NAqtCScgFynCuRLUoXm2BHTdu8suatCe7b'
8+let totalFeeDyzraptKey = "total_fee_dyzrapt"
99
10-let adminAddress3 = base58'3Mucpi1K4FMVrZKnYEgjxQf5DkkBX7QrHoJ'
10+let priceOfDyzraptKey = "dyz"
1111
12-let dyzId = base58'2TLkgUERqF1y21ShjiFVVTVYtP1BL8wvc6BGLZvt4fND'
12+let priceOfEthKey = "eth"
1313
14-func getStakePoolKey () = "stake_pool"
14+let oracleAddress = Address(base58'3N7G2kVtBTh94aEnDHQ9dpi4EdsDxAiDXjB')
1515
16+let dyzraptAssetId = base58'2TLkgUERqF1y21ShjiFVVTVYtP1BL8wvc6BGLZvt4fND'
1617
17-func getStakePool () = match getInteger(this, getStakePoolKey()) {
18- case a: Int =>
19- a
20- case _ =>
21- 0
22-}
18+let ethAssetId = base58'3JJkzB4pFXcqdJvC9TcV8ys1FLgesr5SxbhmykkpceQp'
2319
20+let usdnAssetId = base58'9Nf5wpj6jds3VRZKDryp6Dtf3R9d8MdbjNhencLogCr5'
2421
25-func getVoteAmountKey (id,type) = if ((type == "upvote"))
26- then (((id + "_") + type) + "_amount")
27- else throw("Invalid vote type")
28-
29-
30-func getStakerKey (staker) = (staker + "_stake")
31-
32-
33-func getCurrentStake (staker) = match getInteger(this, getStakerKey(staker)) {
34- case a: Int =>
35- a
36- case _ =>
37- 0
38-}
39-
40-
41-func getProfileKey (id) = (id + "_entrepreneurProfile")
42-
43-
44-func getStatusKey (id) = (id + "_status")
45-
46-
47-func getVoteKey (id,type) = if ((type == "upvote"))
48- then (id + "_upvote")
49- else throw("Invalid vote type")
50-
51-
52-func profileExist (id) = match getString(this, getProfileKey(id)) {
53- case a: String =>
54- true
55- case _ =>
56- false
57-}
58-
59-
60-func getVoteStatus (voteId) = match getString(this, getStatusKey(voteId)) {
61- case a: String =>
62- a
63- case _ =>
64- false
65-}
66-
67-
68-func getVoterAmountKey (id,voteId) = (((id + "_") + voteId) + "_amount")
69-
70-
71-func getVoteAmountCount (voteId,vote) = match getInteger(this, getVoteAmountKey(voteId, vote)) {
72- case a: Int =>
73- a
74- case _ =>
75- 0
76-}
77-
78-
79-func getLastClaimHeight (pubKey) = match getInteger(this, ("last_claim_" + pubKey)) {
80- case a: Int =>
81- a
82- case _ =>
83- 0
84-}
85-
86-
87-func getVoteCount (voteId,vote) = match getInteger(this, getVoteKey(voteId, vote)) {
88- case a: Int =>
89- a
90- case _ =>
91- throw("Not a valid vote ID")
92-}
93-
94-
95-func getVoterKey (address,voteId) = ((((address + "_") + voteId) + "_") + "vote")
96-
97-
98-func getVoter (address,voteId) = match getString(this, getVoterKey(address, voteId)) {
99- case a: String =>
100- a
101- case _ =>
102- ""
103-}
104-
105-
106-func canVote (address,voteId) = {
107- let voter = getVoter(address, voteId)
108- if ((voter == ""))
109- then true
110- else false
22+func getFeeAmount (amount) = {
23+ let fee = fraction(amount, 3, 100)
24+ fee
11125 }
11226
11327
114-func getClaimedTotal () = match getInteger(this, "claimed_total") {
115- case a: Int =>
116- a
117- case _ =>
118- 0
119-}
28+func getIntKeyData (key) = {
29+ let v = valueOrElse(getInteger(this, key), 0)
30+ v
31+ }
12032
12133
122-func getClaimedByStaker (address) = match getInteger(this, ("claimed_total_" + address)) {
123- case a: Int =>
124- a
125- case _ =>
126- 0
127-}
34+func getTotalFeeEth () = getIntKeyData(totalFeeEthKey)
35+
36+
37+func getTotalFeeUsd () = getIntKeyData(totalFeeUsdKey)
38+
39+
40+func getTotalFeeDyzrapt () = getIntKeyData(totalFeeDyzraptKey)
41+
42+
43+func usdnToDyzrapt (amount) = {
44+ let dyzraptPrice = valueOrErrorMessage(getInteger(oracleAddress, priceOfDyzraptKey), "Unable to load price")
45+ fraction(amount, 10000, dyzraptPrice)
46+ }
47+
48+
49+func dyzraptToUsdn (amount) = {
50+ let dyzraptPrice = valueOrErrorMessage(getInteger(oracleAddress, priceOfDyzraptKey), "Unable to load price")
51+ fraction(amount, dyzraptPrice, 10000)
52+ }
12853
12954
13055 @Callable(i)
131-func addEntrepreneurProfile (name,avatar,bio,gender,location) = if (if (if ((i.caller.bytes == adminAddress1))
132- then true
133- else (i.caller.bytes == adminAddress2))
134- then true
135- else (i.caller.bytes == adminAddress3))
136- then {
137- let transactionId = toBase58String(i.transactionId)
138- WriteSet([DataEntry(getProfileKey(transactionId), ((((((((name + "_") + avatar) + "_") + bio) + "_") + gender) + "_") + location)), DataEntry(getVoteKey(transactionId, "upvote"), 0), DataEntry(getVoteAmountKey(transactionId, "upvote"), 0), DataEntry(getStatusKey(transactionId), "open")])
139- }
140- else throw("Only Dyzrupt Admin can call this dApp function")
141-
142-
143-
144-@Callable(i)
145-func vote (voteId,vote) = {
146- let pmt = extract(i.payment)
147- let voter = toBase58String(i.caller.bytes)
148- if ((pmt.amount == 0))
149- then throw("You cannot vote without paying voting fee")
150- else if ((pmt.assetId != dyzId))
151- then throw("You can only vote with DYZRUPT token")
152- else if (canVote(toBase58String(i.caller.bytes), voteId))
153- then if (profileExist(voteId))
154- then if ((getVoteStatus(voteId) == "open"))
155- then if ((vote == upVote))
156- then {
157- let voteCount = getVoteCount(voteId, vote)
158- let voteAmountCount = getVoteAmountCount(voteId, vote)
159- let newVoteCount = (voteCount + 1)
160- let newVoteAmountCount = (voteAmountCount + pmt.amount)
161- ScriptResult(WriteSet([DataEntry(getVoteKey(voteId, vote), newVoteCount), DataEntry(getVoterKey(voter, voteId), voteId), DataEntry(getVoterAmountKey(voter, voteId), pmt.amount), DataEntry(getVoteAmountKey(voteId, vote), newVoteAmountCount)]), TransferSet([ScriptTransfer(this, pmt.amount, dyzId)]))
162- }
163- else throw("Not a valid vote value")
164- else throw("This profile is not open for voting")
165- else throw("Invalid Profile")
166- else throw("You can't vote twice")
56+func test () = {
57+ let pmt = value(i.payments[0])
58+ let assetId = pmt.assetId
59+ let amount = pmt.amount
60+ if ((assetId == dyzraptAssetId))
61+ then throw(("its a dyzrapt. Amount=" + toString(amount)))
62+ else throw("its not a dyzrapt")
16763 }
16864
16965
17066
17167 @Callable(i)
172-func openVote (voteId) = if (if (if ((i.caller.bytes == adminAddress1))
173- then true
174- else (i.caller.bytes == adminAddress2))
175- then true
176- else (i.caller.bytes == adminAddress3))
177- then if (profileExist(voteId))
178- then WriteSet([DataEntry(getStatusKey(voteId), "open")])
179- else throw("Invalid ID")
180- else throw("Only Dyzrupt Admin can call this dApp function")
181-
182-
183-
184-@Callable(i)
185-func closeVote (voteId) = if (if (if ((i.caller.bytes == adminAddress1))
186- then true
187- else (i.caller.bytes == adminAddress2))
188- then true
189- else (i.caller.bytes == adminAddress3))
190- then if (profileExist(voteId))
191- then WriteSet([DataEntry(getStatusKey(voteId), "closed")])
192- else throw("Invalid ID")
193- else throw("Only Dyzrupt Admin can call this dApp function")
194-
195-
196-
197-@Callable(i)
198-func withdraw (voteId) = {
199- let voter = toBase58String(i.caller.bytes)
200- if ((getVoter(voter, voteId) != ""))
201- then if ((getVoteStatus(voteId) == "closed"))
202- then {
203- let currentKey = getVoterAmountKey(voter, voteId)
204- let currentAmount = match getInteger(this, currentKey) {
205- case a: Int =>
206- a
207- case _ =>
208- throw("You didn't vote for this entrepreneur")
209- }
210- if ((currentAmount == 0))
211- then throw("Seems you have previously withdrawn.")
212- else ScriptResult(WriteSet([DataEntry(currentKey, 0)]), TransferSet([ScriptTransfer(i.caller, currentAmount, dyzId)]))
213- }
214- else throw("Can't withdraw vote amount while voting is still open.")
215- else throw("You didn't vote for this entrepreneur")
68+func swapUsdnToDyzrapt () = {
69+ let pmt = value(i.payments[0])
70+ let assetId = pmt.assetId
71+ let totalAmount = pmt.amount
72+ if ((assetId != usdnAssetId))
73+ then throw("Only USDN tokens are allowed for swapping")
74+ else {
75+ let fee = getFeeAmount(totalAmount)
76+ let amount = (totalAmount - fee)
77+ let dyzraptAmount = usdnToDyzrapt(amount)
78+ let savedFee = getTotalFeeUsd()
79+ let totalFee = (savedFee + fee)
80+[IntegerEntry(totalFeeUsdKey, totalFee), ScriptTransfer(i.caller, dyzraptAmount, dyzraptAssetId)]
81+ }
21682 }
21783
21884
21985
22086 @Callable(i)
221-func stake () = {
222- let staker = toBase58String(i.caller.bytes)
223- let pmt = extract(i.payment)
224- if ((pmt.amount == 0))
225- then throw("Stake amount too low")
226- else if ((pmt.assetId != dyzId))
227- then throw("You can only stake with DYZRUPT token")
228- else {
229- let currentStake = getCurrentStake(staker)
230- let stakeableAmount = fraction(pmt.amount, 5, 100)
231- let amountToStake = (pmt.amount - stakeableAmount)
232- let newStakedAmount = (currentStake + amountToStake)
233- let stakePool = getStakePool()
234- let newStakePool = (stakePool + stakeableAmount)
235- ScriptResult(WriteSet([DataEntry(getStakerKey(staker), newStakedAmount), DataEntry(getStakePoolKey(), newStakePool)]), TransferSet(nil))
236- }
87+func swapEthToDyzrapt () = {
88+ let pmt = value(i.payments[0])
89+ let assetId = pmt.assetId
90+ let totalAmount = pmt.amount
91+ if ((assetId != ethAssetId))
92+ then throw("Only WETH tokens are allowed for swapping")
93+ else {
94+ let fee = getFeeAmount(totalAmount)
95+ let amount = (totalAmount - fee)
96+ let ethPrice = valueOrErrorMessage(getInteger(oracleAddress, priceOfEthKey), "Unable to load price")
97+ let usdnAmount = fraction(amount, ethPrice, 10000)
98+ let dyzraptAmount = usdnToDyzrapt(usdnAmount)
99+ let savedFee = getTotalFeeEth()
100+ let totalFee = (savedFee + fee)
101+[IntegerEntry(totalFeeEthKey, totalFee), ScriptTransfer(i.caller, dyzraptAmount, dyzraptAssetId)]
102+ }
237103 }
238104
239105
240106
241107 @Callable(i)
242-func unstake (amount) = {
243- let staker = toBase58String(i.caller.bytes)
244- let currentStake = getCurrentStake(staker)
245- if ((currentStake == 0))
246- then throw("You don't have any stakes")
247- else if ((amount > currentStake))
248- then throw("You can't withdraw an amount higher than you staked")
249- else {
250- let unstakeableAmount = fraction(amount, 10, 100)
251- let amountToUnstake = (amount - unstakeableAmount)
252- let newUnstakedAmount = (currentStake - amount)
253- let stakePool = getStakePool()
254- let newStakePool = (stakePool + unstakeableAmount)
255- ScriptResult(WriteSet([DataEntry(getStakerKey(staker), newUnstakedAmount), DataEntry(getStakePoolKey(), newStakePool)]), TransferSet([ScriptTransfer(i.caller, amountToUnstake, dyzId)]))
256- }
108+func swapDyzraptToUsdn () = {
109+ let pmt = value(i.payments[0])
110+ let assetId = pmt.assetId
111+ let totalAmount = pmt.amount
112+ if ((assetId != dyzraptAssetId))
113+ then throw("Only DYZRAPT tokens are allowed for swapping")
114+ else {
115+ let fee = getFeeAmount(totalAmount)
116+ let amount = (totalAmount - fee)
117+ let usdnAmount = dyzraptToUsdn(amount)
118+ let savedFee = getTotalFeeDyzrapt()
119+ let totalFee = (savedFee + fee)
120+[IntegerEntry(totalFeeDyzraptKey, totalFee), ScriptTransfer(i.caller, usdnAmount, usdnAssetId)]
121+ }
257122 }
258123
259124
260125
261126 @Callable(i)
262-func claimDailyStakeReward (reward) = {
263- let staker = toBase58String(i.caller.bytes)
264- let currentStake = getCurrentStake(staker)
265- let stakePool = getStakePool()
266- let currentHeight = height
267- let lastClaimHeight = getLastClaimHeight(staker)
268- let claimedTotalSoFar = getClaimedTotal()
269- let claimedByStaker = getClaimedByStaker(staker)
270- if ((currentStake == 0))
271- then throw("You don't have any stakes")
272- else if ((stakePool == 0))
273- then throw("Nothing in Stake pool at this time. Try again later")
274- else if ((reward > stakePool))
275- then throw("No rewards at this time")
276- else if (((lastClaimHeight + 1440) > currentHeight))
277- then throw("You can only claim once a day")
278- else {
279- let newStakePool = (stakePool - reward)
280- let newStakeAmount = currentStake
281- ScriptResult(WriteSet([DataEntry(("claimed_total_" + staker), (claimedByStaker + reward)), DataEntry("claimed_total", (claimedTotalSoFar + reward)), DataEntry(("last_claim_" + staker), currentHeight), DataEntry(getStakerKey(staker), newStakeAmount), DataEntry(getStakePoolKey(), newStakePool)]), TransferSet([ScriptTransfer(i.caller, reward, dyzId)]))
282- }
127+func swapDyzraptToEth () = {
128+ let pmt = value(i.payments[0])
129+ let assetId = pmt.assetId
130+ let totalAmount = pmt.amount
131+ if ((assetId != dyzraptAssetId))
132+ then throw("Only DYZRAPT tokens are allowed for swapping")
133+ else {
134+ let fee = getFeeAmount(totalAmount)
135+ let amount = (totalAmount - fee)
136+ let usdnAmount = dyzraptToUsdn(amount)
137+ let ethPrice = valueOrErrorMessage(getInteger(oracleAddress, priceOfEthKey), "Unable to load price")
138+ let ethAmount = fraction(usdnAmount, 10000, ethPrice)
139+ let savedFee = getTotalFeeDyzrapt()
140+ let totalFee = (savedFee + fee)
141+[IntegerEntry(totalFeeDyzraptKey, totalFee), ScriptTransfer(i.caller, ethAmount, ethAssetId)]
142+ }
283143 }
284144
285145

github/deemru/w8io/3ef1775 
60.93 ms