tx · ENCiWiwWHwCuz3ZP59Ety2FowdweZZp8xLyQkqDQWBTn

3MpVunRPnNPuBCtAb95NPY1Q1aNf43a6Gyh:  -0.01400000 Waves

2019.12.24 14:53 [823052] smart account 3MpVunRPnNPuBCtAb95NPY1Q1aNf43a6Gyh > SELF 0.00000000 Waves

{ "type": 13, "id": "ENCiWiwWHwCuz3ZP59Ety2FowdweZZp8xLyQkqDQWBTn", "fee": 1400000, "feeAssetId": null, "timestamp": 1577188466332, "version": 1, "sender": "3MpVunRPnNPuBCtAb95NPY1Q1aNf43a6Gyh", "senderPublicKey": "HMJMUXBatArd2SDvjv3YbtdrY2BAsxDEfWhqv8kYH4Kj", "proofs": [ "5wpEbyrakKneeqPmiuFWKX3zB9jnGFVwB4nRMAo6fGiA6NxCFGN1m7aCzJaXgLLtSTnYaUXJKczyhGV5HBrVoY3g" ], "script": "base64:AAIDAAAAAAAAABIIARIHCgUIAQEBARIAEgMKAQgAAAAZAAAAAAd3YXZlbGV0AAAAAAAF9eEAAAAAAA93YXZlc0RlcG9zaXRBbXQJAABoAAAAAgAAAAAAAAAKKAUAAAAHd2F2ZWxldAAAAAANYnRjRGVwb3NpdEFtdAkAAGkAAAACCQAAaAAAAAIAAAAAAAAACigFAAAAB3dhdmVsZXQAAAAAAAAAJxAAAAAADWV0aERlcG9zaXRBbXQJAABoAAAAAgAAAAAAAAAADQUAAAAHd2F2ZWxldAAAAAANbHRjRGVwb3NpdEFtdAkAAGgAAAACAAAAAAAAAAAnBQAAAAd3YXZlbGV0AAAAAA53ZXN0RGVwb3NpdEFtdAkAAGgAAAACAAAAAAAAAGWQBQAAAAd3YXZlbGV0AAAAAA13Y3REZXBvc2l0QW10CQAAaAAAAAIAAAAAAAAAZZAFAAAAB3dhdmVsZXQAAAAAEkRyYWdvbkZydWl0QWRkcmVzcwIAAAAjM01xcDQ1MzYxd0N1dGFLRXFNMmtDYkZabXJrb2RRR3ZwVUUAAAAADWRpdlByb2dyYW1QdWIJAAJZAAAAAQIAAAAsSE1KTVVYQmF0QXJkMlNEdmp2M1lidGRyWTJCQXN4REVmV2hxdjhrWUg0S2oAAAAACGFkbWluUHViCQACWQAAAAECAAAAATEAAAAADHdhdmVzQXNzZXRJZAUAAAAEdW5pdAAAAAAKYnRjQXNzZXRJZAEAAAABAAAAAAAKZXRoQXNzZXRJZAEAAAABAAAAAAAKbHRjQXNzZXRJZAEAAAABAAAAAAALd2VzdEFzc2V0SWQBAAAAAQAAAAAACndjdEFzc2V0SWQBAAAAAQABAAAADWNhbGxlcklzQWRtaW4AAAABAAAAD2NhbGxlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAPY2FsbGVyUHVibGljS2V5BQAAAAhhZG1pblB1YgUAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAGllvdSBjYW5ub3QgY3JlYXRlIGRlcG9zaXRzAQAAABRjYWxsZXJJc0RlcG9zaXRPd25lcgAAAAIAAAAJYXNzZXROYW1lAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMZGVwb3NpdE93bmVyCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUA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SW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAAAQAAABJnZXREaXZpZGVuZEJhbGFuY2UAAAADAAAAB2Fzc2V0SWQAAAASZGl2aWRlbmRzV2l0aGRyYXduAAAAEGRpdmlkZW5kc1BlcmNlbnQEAAAAFWRpdmlkZW5kc1RvdGFsQmFsYW5jZQkAAGQAAAACCQAD6wAAAAIFAAAABHRoaXMFAAAAB2Fzc2V0SWQFAAAAEmRpdmlkZW5kc1dpdGhkcmF3bgQAAAAJdXNlclN0YWtlCQAAaQAAAAIJAABoAAAAAgUAAAAVZGl2aWRlbmRzVG90YWxCYWxhbmNlBQAAABBkaXZpZGVuZHNQZXJjZW50AAAAAAAAAABkCQAAZQAAAAIFAAAACXVzZXJTdGFrZQUAAAASZGl2aWRlbmRzV2l0aGRyYXduAAAAAwAAAAFpAQAAAA1jcmVhdGVEZXBvc2l0AAAABQAAAAlhc3NldE5hbWUAAAAGYW1vdW50AAAAEGRlaXZpZGVuZFBlcmNlbnQAAAALaGVpZ2h0U3RhcnQAAAAIZHVyYXRpb24EAAAACWNhbGxlclB1YgkBAAAADWNhbGxlcklzQWRtaW4AAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAFWRlcG9zaXRBbHJlYWR5Q3JlYXRlZAkBAAAAE2RlcG9zaXRDcmVhdGVkQ2hlY2sAAAABBQAAAAlhc3NldE5hbWUDBQAAABVkZXBvc2l0QWxyZWFkeUNyZWF0ZWQJAAACAAAAAQIAAAAaRGVwb3NpdCBpcyBhbHJlYWR5IGNyZWF0ZWQJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAA1fRGVwb3NpdFN0YXRlAgAAAAdDcmVhdGVkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWFzc2V0TmFtZQIAAAAOX0RlcG9zaXRBbW91bnQFAAAABmFtb3VudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhc3NldE5hbWUCAAAAEF9EaXZpZGVuZFBlcmNlbnQFAAAAEGRlaXZpZGVuZFBlcmNlbnQJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAA1fRGVwb3NpdFN0YXJ0BQAAAAtoZWlnaHRTdGFydAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhc3NldE5hbWUCAAAAEF9EZXBvc2l0RHVyYXRpb24FAAAACGR1cmF0aW9uBQAAAANuaWwAAAABaQEAAAAHZGVwb3NpdAAAAAAEAAAACWNhbGxlclB1YgkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAA3BtdAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAlhc3NldE5hbWUJAQAAABFhc3NldEJhc2U1OFRvTmFtZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAGYW1vdW50CQEAAAALYW1vdW50Q2hlY2sAAAACBQAAAAlhc3NldE5hbWUIBQAAAANwbXQAAAAGYW1vdW50BAAAAAxkZXBvc2l0U3RhdGUJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhc3NldE5hbWUCAAAADV9EZXBvc2l0U3RhdGUDCQAAAAAAAAIFAAAADGRlcG9zaXRTdGF0ZQIAAAAHQ3JlYXRlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAA1fRGVwb3NpdE93bmVyBQAAAAljYWxsZXJQdWIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXNzZXROYW1lAgAAAA1fRGVwb3NpdFN0YXRlAgAAAAZBY3RpdmUFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAAEkRyYWdvbkZydWl0QWRkcmVzcwUAAAAGYW1vdW50CAUAAAADcG10AAAAB2Fzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAABZEZXBvc2l0IGlzIHVuYXZhaWxhYmxlAAAAAWkBAAAAEXdpdGhkcmF3RGl2aWRlbmRzAAAAAQAAAAlhc3NldE5hbWUEAAAAB2Fzc2V0SWQJAQAAABFhc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAACWFzc2V0TmFtZQQAAAAMZGVwb3NpdE93bmVyCQEAAAAUY2FsbGVySXNEZXBvc2l0T3duZXIAAAACBQAAAAlhc3NldE5hbWUJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAABBkaXZpZGVuZHNQZXJjZW50CQEAAAATZ2V0RGl2aWRlbmRzUGVyY2VudAAAAAEFAAAACWFzc2V0TmFtZQQAAAASZGl2aWRlbmRzV2l0aGRyYXduCQEAAAAbZ2V0RGl2aWRlbmRzV2l0aGRyYXduQW1vdW50AAAAAQUAAAAJYXNzZXROYW1lBAAAABJkaXZpZGVuZHNBdmFsaWFibGUJAQAAABJnZXREaXZpZGVuZEJhbGFuY2UAAAADBQAAAAdhc3NldElkBQAAABJkaXZpZGVuZHNXaXRoZHJhd24FAAAAEGRpdmlkZW5kc1BlcmNlbnQJAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAADGRlcG9zaXRPd25lcgIAAAATX0RpdmlkZW5kc1dpdGhkcmF3bgkAAGQAAAACBQAAABJkaXZpZGVuZHNXaXRoZHJhd24FAAAAEmRpdmlkZW5kc0F2YWxpYWJsZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAMZGVwb3NpdE93bmVyBQAAABJkaXZpZGVuZHNBdmFsaWFibGUFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAANZGl2UHJvZ3JhbVB1YgQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBAAAAARzc3R4BQAAAAckbWF0Y2gwBgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAADdHR4BQAAAAckbWF0Y2gwBAAAAAlhc3NldE5hbWUJAQAAABFhc3NldEJhc2U1OFRvTmFtZQAAAAEIBQAAAAN0dHgAAAAHYXNzZXRJZAQAAAAQZGl2aWRlbmRzUGVyY2VudAkBAAAAE2dldERpdmlkZW5kc1BlcmNlbnQAAAABBQAAAAlhc3NldE5hbWUEAAAAEmRpdmlkZW5kc1dpdGhkcmF3bgkBAAAAG2dldERpdmlkZW5kc1dpdGhkcmF3bkFtb3VudAAAAAEFAAAACWFzc2V0TmFtZQQAAAAJZGl2aWRlbmRzCQEAAAASZ2V0RGl2aWRlbmRCYWxhbmNlAAAAAwgFAAAAA3R0eAAAAAdhc3NldElkBQAAABJkaXZpZGVuZHNXaXRoZHJhd24FAAAAEGRpdmlkZW5kc1BlcmNlbnQEAAAADmFjY291bnRCYWxhbmNlCQAD6wAAAAIFAAAABHRoaXMIBQAAAAN0dHgAAAAHYXNzZXRJZAkAAGcAAAACCQAAZQAAAAIFAAAADmFjY291bnRCYWxhbmNlCAUAAAADdHR4AAAABmFtb3VudAUAAAAJZGl2aWRlbmRzBwdU93A3", "chainId": 84, "height": 823052, "spentComplexity": 0 } View: original | compacted Prev: GNhFL44CgAcuVgymGrDxheB5adkPs1nZBTF845nS8dUx Next: NK7BLF68xY9EVjB5tjn37Hf72nsbjCSYYdE9Yci3gRB Diff:
OldNewDifferences
1515
1616 let wctDepositAmt = (26000 * wavelet)
1717
18-let dividendsPercent = 30
19-
20-let depositStartHeight = 1
21-
2218 let DragonFruitAddress = "3Mqp45361wCutaKEqM2kCbFZmrkodQGvpUE"
2319
2420 let divProgramPub = fromBase58String("HMJMUXBatArd2SDvjv3YbtdrY2BAsxDEfWhqv8kYH4Kj")
2521
2622 let adminPub = fromBase58String("1")
27-
28-let depositTimeFrame = ((1440 * 30) * 6)
2923
3024 let wavesAssetId = unit
3125
109103 else throw("Asset name is incorrect")
110104
111105
106+func getDividendsPercent (assetName) = {
107+ let key = (assetName + "_DividendPercent")
108+ let val = getInteger(this, key)
109+ match val {
110+ case a: Int =>
111+ a
112+ case _ =>
113+ throw("Couldn't Find dividend percent")
114+ }
115+ }
116+
117+
112118 func getDividendsWithdrawnAmount (assetName) = {
113119 let val = getInteger(this, (assetName + "_DividendsWithdrawn"))
114120 match val {
120126 }
121127
122128
123-func getDividendBalance (assetId,dividendsWithdrawn) = {
129+func getDividendBalance (assetId,dividendsWithdrawn,dividendsPercent) = {
124130 let dividendsTotalBalance = (assetBalance(this, assetId) + dividendsWithdrawn)
125131 let userStake = ((dividendsTotalBalance * dividendsPercent) / 100)
126132 (userStake - dividendsWithdrawn)
156162 func withdrawDividends (assetName) = {
157163 let assetId = assetNameToBase58(assetName)
158164 let depositOwner = callerIsDepositOwner(assetName, toBase58String(i.callerPublicKey))
165+ let dividendsPercent = getDividendsPercent(assetName)
159166 let dividendsWithdrawn = getDividendsWithdrawnAmount(assetName)
160- let dividendsAvaliable = getDividendBalance(assetId, dividendsWithdrawn)
167+ let dividendsAvaliable = getDividendBalance(assetId, dividendsWithdrawn, dividendsPercent)
161168 ScriptResult(WriteSet([DataEntry((depositOwner + "_DividendsWithdrawn"), (dividendsWithdrawn + dividendsAvaliable))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(depositOwner)), dividendsAvaliable, assetId)]))
162169 }
163170
169176 true
170177 case ttx: TransferTransaction =>
171178 let assetName = assetBase58ToName(ttx.assetId)
179+ let dividendsPercent = getDividendsPercent(assetName)
172180 let dividendsWithdrawn = getDividendsWithdrawnAmount(assetName)
173- let dividends = getDividendBalance(ttx.assetId, dividendsWithdrawn)
181+ let dividends = getDividendBalance(ttx.assetId, dividendsWithdrawn, dividendsPercent)
174182 let accountBalance = assetBalance(this, ttx.assetId)
175183 ((accountBalance - ttx.amount) >= dividends)
176184 case _ =>
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let wavelet = 100000000
55
66 let wavesDepositAmt = (2600 * wavelet)
77
88 let btcDepositAmt = ((2600 * wavelet) / 10000)
99
1010 let ethDepositAmt = (13 * wavelet)
1111
1212 let ltcDepositAmt = (39 * wavelet)
1313
1414 let westDepositAmt = (26000 * wavelet)
1515
1616 let wctDepositAmt = (26000 * wavelet)
1717
18-let dividendsPercent = 30
19-
20-let depositStartHeight = 1
21-
2218 let DragonFruitAddress = "3Mqp45361wCutaKEqM2kCbFZmrkodQGvpUE"
2319
2420 let divProgramPub = fromBase58String("HMJMUXBatArd2SDvjv3YbtdrY2BAsxDEfWhqv8kYH4Kj")
2521
2622 let adminPub = fromBase58String("1")
27-
28-let depositTimeFrame = ((1440 * 30) * 6)
2923
3024 let wavesAssetId = unit
3125
3226 let btcAssetId = base58'1'
3327
3428 let ethAssetId = base58'1'
3529
3630 let ltcAssetId = base58'1'
3731
3832 let westAssetId = base58'1'
3933
4034 let wctAssetId = base58'1'
4135
4236 func callerIsAdmin (callerPublicKey) = if ((callerPublicKey == adminPub))
4337 then callerPublicKey
4438 else throw("You cannot create deposits")
4539
4640
4741 func callerIsDepositOwner (assetName,callerPublicKey) = {
4842 let depositOwner = getString(this, (assetName + "_DepositOwner"))
4943 if ((callerPublicKey == depositOwner))
5044 then callerPublicKey
5145 else throw("Only deposit owner can withdrawal dividends")
5246 }
5347
5448
5549 func depositCreatedCheck (assetName) = {
5650 let key = (assetName + "_DepositOwner")
5751 let val = getString(this, key)
5852 match val {
5953 case a: String =>
6054 true
6155 case _ =>
6256 false
6357 }
6458 }
6559
6660
6761 func amountCheck (assetName,pmtAmount) = {
6862 let key = (assetName + "_DepositAmount")
6963 let val = getInteger(this, key)
7064 let depositAmount = match val {
7165 case a: Int =>
7266 a
7367 case _ =>
7468 throw("Couldn't find deposit amount")
7569 }
7670 if ((pmtAmount == depositAmount))
7771 then pmtAmount
7872 else throw("Amount is incorrect")
7973 }
8074
8175
8276 func assetBase58ToName (assetId) = if (!(isDefined(assetId)))
8377 then "WAVES"
8478 else if ((assetId == btcAssetId))
8579 then "BTC"
8680 else if ((assetId == ethAssetId))
8781 then "ETH"
8882 else if ((assetId == ltcAssetId))
8983 then "LTC"
9084 else if ((assetId == westAssetId))
9185 then "VST"
9286 else if ((assetId == wctAssetId))
9387 then "WCT"
9488 else throw("AssetId is incorrect")
9589
9690
9791 func assetNameToBase58 (assetName) = if ((assetName == "WAVES"))
9892 then wavesAssetId
9993 else if ((assetName == "BTC"))
10094 then btcAssetId
10195 else if ((assetName == "ETH"))
10296 then ethAssetId
10397 else if ((assetName == "LTC"))
10498 then ltcAssetId
10599 else if ((assetName == "VST"))
106100 then westAssetId
107101 else if ((assetName == "WCT"))
108102 then wctAssetId
109103 else throw("Asset name is incorrect")
110104
111105
106+func getDividendsPercent (assetName) = {
107+ let key = (assetName + "_DividendPercent")
108+ let val = getInteger(this, key)
109+ match val {
110+ case a: Int =>
111+ a
112+ case _ =>
113+ throw("Couldn't Find dividend percent")
114+ }
115+ }
116+
117+
112118 func getDividendsWithdrawnAmount (assetName) = {
113119 let val = getInteger(this, (assetName + "_DividendsWithdrawn"))
114120 match val {
115121 case a: Int =>
116122 a
117123 case _ =>
118124 0
119125 }
120126 }
121127
122128
123-func getDividendBalance (assetId,dividendsWithdrawn) = {
129+func getDividendBalance (assetId,dividendsWithdrawn,dividendsPercent) = {
124130 let dividendsTotalBalance = (assetBalance(this, assetId) + dividendsWithdrawn)
125131 let userStake = ((dividendsTotalBalance * dividendsPercent) / 100)
126132 (userStake - dividendsWithdrawn)
127133 }
128134
129135
130136 @Callable(i)
131137 func createDeposit (assetName,amount,deividendPercent,heightStart,duration) = {
132138 let callerPub = callerIsAdmin(i.callerPublicKey)
133139 let depositAlreadyCreated = depositCreatedCheck(assetName)
134140 if (depositAlreadyCreated)
135141 then throw("Deposit is already created")
136142 else WriteSet([DataEntry((assetName + "_DepositState"), "Created"), DataEntry((assetName + "_DepositAmount"), amount), DataEntry((assetName + "_DividendPercent"), deividendPercent), DataEntry((assetName + "_DepositStart"), heightStart), DataEntry((assetName + "_DepositDuration"), duration)])
137143 }
138144
139145
140146
141147 @Callable(i)
142148 func deposit () = {
143149 let callerPub = toBase58String(i.callerPublicKey)
144150 let pmt = extract(i.payment)
145151 let assetName = assetBase58ToName(pmt.assetId)
146152 let amount = amountCheck(assetName, pmt.amount)
147153 let depositState = getString(this, (assetName + "_DepositState"))
148154 if ((depositState == "Created"))
149155 then ScriptResult(WriteSet([DataEntry((assetName + "_DepositOwner"), callerPub), DataEntry((assetName + "_DepositState"), "Active")]), TransferSet([ScriptTransfer(addressFromStringValue(DragonFruitAddress), amount, pmt.assetId)]))
150156 else throw("Deposit is unavailable")
151157 }
152158
153159
154160
155161 @Callable(i)
156162 func withdrawDividends (assetName) = {
157163 let assetId = assetNameToBase58(assetName)
158164 let depositOwner = callerIsDepositOwner(assetName, toBase58String(i.callerPublicKey))
165+ let dividendsPercent = getDividendsPercent(assetName)
159166 let dividendsWithdrawn = getDividendsWithdrawnAmount(assetName)
160- let dividendsAvaliable = getDividendBalance(assetId, dividendsWithdrawn)
167+ let dividendsAvaliable = getDividendBalance(assetId, dividendsWithdrawn, dividendsPercent)
161168 ScriptResult(WriteSet([DataEntry((depositOwner + "_DividendsWithdrawn"), (dividendsWithdrawn + dividendsAvaliable))]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(depositOwner)), dividendsAvaliable, assetId)]))
162169 }
163170
164171
165172 @Verifier(tx)
166173 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], divProgramPub))
167174 then match tx {
168175 case sstx: SetScriptTransaction =>
169176 true
170177 case ttx: TransferTransaction =>
171178 let assetName = assetBase58ToName(ttx.assetId)
179+ let dividendsPercent = getDividendsPercent(assetName)
172180 let dividendsWithdrawn = getDividendsWithdrawnAmount(assetName)
173- let dividends = getDividendBalance(ttx.assetId, dividendsWithdrawn)
181+ let dividends = getDividendBalance(ttx.assetId, dividendsWithdrawn, dividendsPercent)
174182 let accountBalance = assetBalance(this, ttx.assetId)
175183 ((accountBalance - ttx.amount) >= dividends)
176184 case _ =>
177185 false
178186 }
179187 else false
180188

github/deemru/w8io/169f3d6 
34.95 ms