tx · CvivofLhQFgcznVf29sSdoyoARZKnMwHkZF49WjFa8xG

3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7:  -0.01400000 Waves

2020.11.19 14:31 [2335937] smart account 3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7 > SELF 0.00000000 Waves

{ "type": 13, "id": "CvivofLhQFgcznVf29sSdoyoARZKnMwHkZF49WjFa8xG", "fee": 1400000, "feeAssetId": null, "timestamp": 1605785422419, "version": 2, "chainId": 87, "sender": "3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7", "senderPublicKey": "7S371VYZXa9KW7x4AJBpEjaBU2BcrhPYVgAs5nCvbbtj", "proofs": [ "3BvkP4AxTn84Ri1DYtkgv89ua9NrDQbpqxxkbPTydU3EPCRpTNrbhcQzgWaEkDoUjFXuKmLMQrHYqSsFXhpLGuu1", "5aR1jsHBRgczMcdHy1HZgXmDa1eT3igBuaHTBaCcWDPCNEmZVQUFo8AucaNvwiC82vtWeNDBFFBt28EFf4rTt97S" ], "script": "base64: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AAVmdGVhbQUAAAAGYW1vdW50BQAAAAlmbW10QXNzZXQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADnBheW91dHNEYXRhS2V5BQAAAAt0ZWFtUGF5b3V0cwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9sb2dFbnRyeURhdGFLZXkFAAAAEWxvZ0VudHJ5RGF0YVZhbHVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABB0aW1lc3RhbXBEYXRhS2V5CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAADbmlsAAAAAWkBAAAADWF1dG9SZWJhbGFuY2UAAAAABAAAABZ3YXZlc1JlYmFsYW5jaW5nQW1vdW50CQEAAAAKZGlmZmVyZW5jZQAAAAIICQAD7wAAAAEFAAAABWZkYXBwAAAAB3JlZ3VsYXIICQAD7wAAAAEFAAAABHRoaXMAAAAHcmVndWxhcgMDAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5hZG1pblB1YmxpY0tleQkBAAAAAiE9AAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA5tbWJvdFB1YmxpY0tleQcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACmd1YXJhbnRvcnMIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQcJAAACAAAAAQIAAABDVGhpcyBhY3Rpb24gY2FuIG9ubHkgYmUgcGVyZm9ybWVkIGJ5IGFuIGFkbWluaXN0cmF0b3Igb3IgZ3VhcmFudG9yIQMJAABmAAAAAgUAAAAWd2F2ZXNSZWJhbGFuY2luZ0Ftb3VudAgJAAPvAAAAAQUAAAAEdGhpcwAAAAlhdmFpbGFibGUJAAACAAAAAQIAAABJSW5zdWZmaWNpZW50IGJhbGFuY2UhIFNlbmQgYSBQTSB0byB0aGUgYWRtaW5pc3RyYXRvciBvciBjYW5jZWwgdGhlIGxlYXNlLgMJAABmAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAADNEb24ndCBhdHRhY2ggcGF5bWVudCB3aGVu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", "height": 2335937, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5gagHq8KWXDwWWqp8kfTt7aD1Y9L2EJmq168HpAmu4E6 Next: 7vPrxTjMv6DcRuV2inkPfrwyX4ryGHMQDGuUFaMymfg1 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v6.03-final_20201105"
4+let scriptVersion = "v6.04-final_20201119"
55
66 let percent = 100000
77
5757
5858 let tradeSupply = max([0, (circSupply - fteamFunds)])
5959
60-let wavesRegular = wavesBalance(this).regular
61-
62-let wavesAvailable = wavesBalance(this).available
63-
6460 let logEntryDataKey = "logEntry"
6561
6662 let timestampDataKey = "timestamp"
7066 let versionDataKey = "scriptVersion"
7167
7268 func validate (posValue) = max([0, posValue])
69+
70+
71+func valueOrMaximum (intValue,maxValue) = min([intValue, maxValue])
7372
7473
7574 func toDataKey (assetId) = toBase58String(valueOrElse(assetId, base58'WAVES'))
9493 }
9594
9695
97-func rebalancingAmount (assetId) = match assetId {
98- case id: ByteVector =>
99- difference(assetBalance(fdapp, id), assetBalance(this, id))
100- case _ =>
101- difference(wavesBalance(fdapp).regular, wavesBalance(this).regular)
102-}
96+func rebalancingAmount (assetId) = difference(assetBalance(fdapp, assetId), assetBalance(this, assetId))
97+
98+
99+func airdropBalance (assetId) = if (if ((32 > size(assetId)))
100+ then true
101+ else containsElement(portfolio, assetId))
102+ then 0
103+ else assetBalance(this, assetId)
103104
104105
105106 func getScriptTransfer (address,amount,assetId) = if ((0 >= amount))
128129
129130 @Callable(i)
130131 func autoRebalance () = {
131- let wavesDifference = rebalancingAmount(portfolio[2])
132+ let wavesRebalancingAmount = difference(wavesBalance(fdapp).regular, wavesBalance(this).regular)
132133 if (if (if ((i.callerPublicKey != adminPublicKey))
133134 then (i.callerPublicKey != mmbotPublicKey)
134135 else false)
135136 then !(containsElement(guarantors, i.callerPublicKey))
136137 else false)
137138 then throw("This action can only be performed by an administrator or guarantor!")
138- else if ((wavesDifference > wavesAvailable))
139+ else if ((wavesRebalancingAmount > wavesBalance(this).available))
139140 then throw("Insufficient balance! Send a PM to the administrator or cancel the lease.")
140141 else if ((size(i.payments) > 0))
141142 then throw("Don't attach payment when calling this function ...")
142143 else {
143- let fmmtDifference = if (isAssetDisabled(fmmtAsset))
144+ let fmmtRebalancingAmount = if (isAssetDisabled(fmmtAsset))
144145 then 0
145146 else (saleSupply - assetBalance(fdapp, fmmtAsset))
146- let sponsorship = min([txFee, assetBalance(this, xfeeAsset)])
147- let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fdapp, wavesDifference, unit)) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtDifference, fmmtAsset))
147+ let sponsorship = valueOrMaximum(txFee, assetBalance(this, xfeeAsset))
148+ let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[0])), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[1])), portfolio[1])) ++ getScriptTransfer(fdapp, wavesRebalancingAmount, portfolio[2])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[3])), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[4])), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[5])), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[6])), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[7])), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[8])), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtRebalancingAmount, portfolio[9]))
148149 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
149150 if ((size(scriptTransfers) == 0))
150151 then throw("There are currently no transfers available.")
151152 else (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
152153 }
153154 }
155+
156+
157+
158+@Callable(i)
159+func airdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((i.callerPublicKey != adminPublicKey))
160+ then throw("This action can only be performed by an administrator!")
161+ else if ((size(i.payments) > 0))
162+ then throw("Don't attach payment when calling this function ...")
163+ else {
164+ let scriptTransfers = (((((((((getScriptTransfer(admin, airdropBalance(id0), id0) ++ getScriptTransfer(admin, airdropBalance(id1), id1)) ++ getScriptTransfer(admin, airdropBalance(id2), id2)) ++ getScriptTransfer(admin, airdropBalance(id3), id3)) ++ getScriptTransfer(admin, airdropBalance(id4), id4)) ++ getScriptTransfer(admin, airdropBalance(id5), id5)) ++ getScriptTransfer(admin, airdropBalance(id6), id6)) ++ getScriptTransfer(admin, airdropBalance(id7), id7)) ++ getScriptTransfer(admin, airdropBalance(id8), id8)) ++ getScriptTransfer(admin, airdropBalance(id9), id9))
165+ let logEntryDataValue = ("DeFi Franklin (FMMT): airdropWasher () => tx: " + toBase58String(i.transactionId))
166+ if ((size(scriptTransfers) == 0))
167+ then throw("There are currently no transfers available.")
168+ else ((scriptTransfers :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
169+ }
154170
155171
156172
191207 else 0))
192208 let anyValidGuarantor = (validGuarantors > 0)
193209 let isValidGuarantors = (validGuarantors >= minSignatures)
194- let wavesLease = (wavesRegular - wavesAvailable)
195- let wavesFunds = validate(((wavesRegular + wavesBalance(fdapp).regular) - txFee))
210+ let balance = wavesBalance(this).regular
211+ let wavesLease = validate((balance - wavesBalance(this).available))
212+ let wavesFunds = validate(((balance + wavesBalance(fdapp).regular) - txFee))
196213 let maxSaleAmount = validate((saleSupply - assetBalance(fsale, fmmtAsset)))
197214 let maxLeaseAmount = validate((fraction(wavesFunds, leasePercent, percent) - wavesLease))
198215 match tx {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v6.03-final_20201105"
4+let scriptVersion = "v6.04-final_20201119"
55
66 let percent = 100000
77
88 let decimal = 100000000
99
1010 let txFee = 500000
1111
1212 let fteamPercent = 10000
1313
1414 let leasePercent = 72000
1515
1616 let fdappPercent = 20000
1717
1818 let adminPublicKey = base58'JDYJq5RKnSXKLYUQfL89zWPdM3QH5hW8JUTpjnTYV95k'
1919
2020 let mmbotPublicKey = base58'62KBavoHK4TtCYmURFVeNC8j3gL8Jo7WwcrweoBLWofc'
2121
2222 let wxchgPublicKey = base58'9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5'
2323
2424 let guarantors = ([valueOrElse(getBinary(this, "guarantor1"), base58''), valueOrElse(getBinary(this, "guarantor2"), base58''), valueOrElse(getBinary(this, "guarantor3"), base58''), valueOrElse(getBinary(this, "guarantor4"), base58''), valueOrElse(getBinary(this, "guarantor5"), base58'')] :+ base58'')
2525
2626 let actualSize = value(indexOf(guarantors, base58''))
2727
2828 let minSignatures = ((actualSize / 2) + (actualSize % 2))
2929
3030 let btcAsset = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
3131
3232 let ethAsset = base58'474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu'
3333
3434 let usdtAsset = base58'34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ'
3535
3636 let fmmtAsset = base58'7sqT7HvCVtcrCTQV72FM5so65wjzM164rzoqDZRsRXg7'
3737
3838 let xfeeAsset = base58'5EMfVQiB8NF4HuhaXrZzDM637whWuVBsduq59ZaCSNqk'
3939
4040 let portfolio = ([usdtAsset, btcAsset, unit, ethAsset, base58'zMFqXuoyrn5w17PFurTqxB7GsS71fp9dfk6XFwxbPCy', base58'HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk', base58'B3uGHFRpSUuGEDWjqB9LWWxafQj8VTvpMucEyoxzws5H', base58'5WvPKSJXzVE2orvbkJ8wsQmmQKqTv9sGBPksV4adViw3', base58'BrjUWjndUanm5VsJkbUip8VRYy6LWJePtxya3FNv4TQa'] :+ fmmtAsset)
4141
4242 let fsale = Address(base58'3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2')
4343
4444 let fdapp = Address(base58'3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL')
4545
4646 let fcold = Address(base58'3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7')
4747
4848 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
4949
5050 let fteam = Address(base58'3P3TMgAUVtJKWHxQMdt8Ao6A1qnRyVmCSr2')
5151
5252 let saleSupply = (10000 * 100000)
5353
5454 let circSupply = ((value(assetInfo(fmmtAsset)).quantity - (assetBalance(fdapp, fmmtAsset) + assetBalance(this, fmmtAsset))) - saleSupply)
5555
5656 let fteamFunds = assetBalance(fteam, fmmtAsset)
5757
5858 let tradeSupply = max([0, (circSupply - fteamFunds)])
5959
60-let wavesRegular = wavesBalance(this).regular
61-
62-let wavesAvailable = wavesBalance(this).available
63-
6460 let logEntryDataKey = "logEntry"
6561
6662 let timestampDataKey = "timestamp"
6763
6864 let payoutsDataKey = "teamPayouts"
6965
7066 let versionDataKey = "scriptVersion"
7167
7268 func validate (posValue) = max([0, posValue])
69+
70+
71+func valueOrMaximum (intValue,maxValue) = min([intValue, maxValue])
7372
7473
7574 func toDataKey (assetId) = toBase58String(valueOrElse(assetId, base58'WAVES'))
7675
7776
7877 func isAssetDisabled (assetId) = valueOrElse(getBoolean(admin, toDataKey(assetId)), false)
7978
8079
8180 func toFloatString (num,dec) = if ((num == 0))
8281 then "0"
8382 else if ((num > 0))
8483 then toUtf8String(((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1)))
8584 else throw("Negative amounts are not allowed!")
8685
8786
8887 func difference (fdappFunds,fcoldFunds) = {
8988 let total = (fdappFunds + fcoldFunds)
9089 let amount = (fraction(total, fdappPercent, percent) - fdappFunds)
9190 if (((total / 100) > amount))
9291 then 0
9392 else amount
9493 }
9594
9695
97-func rebalancingAmount (assetId) = match assetId {
98- case id: ByteVector =>
99- difference(assetBalance(fdapp, id), assetBalance(this, id))
100- case _ =>
101- difference(wavesBalance(fdapp).regular, wavesBalance(this).regular)
102-}
96+func rebalancingAmount (assetId) = difference(assetBalance(fdapp, assetId), assetBalance(this, assetId))
97+
98+
99+func airdropBalance (assetId) = if (if ((32 > size(assetId)))
100+ then true
101+ else containsElement(portfolio, assetId))
102+ then 0
103+ else assetBalance(this, assetId)
103104
104105
105106 func getScriptTransfer (address,amount,assetId) = if ((0 >= amount))
106107 then nil
107108 else [ScriptTransfer(address, amount, assetId)]
108109
109110
110111 @Callable(i)
111112 func teamPayouts () = if (if ((i.callerPublicKey != adminPublicKey))
112113 then (i.callerPublicKey != mmbotPublicKey)
113114 else false)
114115 then throw("This action can only be performed by an administrator!")
115116 else if ((size(i.payments) > 0))
116117 then throw("Don't attach payment when calling this function ...")
117118 else {
118119 let oldPayouts = valueOrElse(getInteger(this, payoutsDataKey), 0)
119120 let teamPayouts = fraction(tradeSupply, fteamPercent, (percent - fteamPercent))
120121 let amount = validate((teamPayouts - oldPayouts))
121122 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): teamPayouts () =>", "amount:", toFloatString(amount, 100000), "FMMT"], " ")
122123 if ((0 >= amount))
123124 then throw("There are currently no payments available.")
124125 else [ScriptTransfer(fteam, amount, fmmtAsset), IntegerEntry(payoutsDataKey, teamPayouts), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
125126 }
126127
127128
128129
129130 @Callable(i)
130131 func autoRebalance () = {
131- let wavesDifference = rebalancingAmount(portfolio[2])
132+ let wavesRebalancingAmount = difference(wavesBalance(fdapp).regular, wavesBalance(this).regular)
132133 if (if (if ((i.callerPublicKey != adminPublicKey))
133134 then (i.callerPublicKey != mmbotPublicKey)
134135 else false)
135136 then !(containsElement(guarantors, i.callerPublicKey))
136137 else false)
137138 then throw("This action can only be performed by an administrator or guarantor!")
138- else if ((wavesDifference > wavesAvailable))
139+ else if ((wavesRebalancingAmount > wavesBalance(this).available))
139140 then throw("Insufficient balance! Send a PM to the administrator or cancel the lease.")
140141 else if ((size(i.payments) > 0))
141142 then throw("Don't attach payment when calling this function ...")
142143 else {
143- let fmmtDifference = if (isAssetDisabled(fmmtAsset))
144+ let fmmtRebalancingAmount = if (isAssetDisabled(fmmtAsset))
144145 then 0
145146 else (saleSupply - assetBalance(fdapp, fmmtAsset))
146- let sponsorship = min([txFee, assetBalance(this, xfeeAsset)])
147- let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fdapp, wavesDifference, unit)) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtDifference, fmmtAsset))
147+ let sponsorship = valueOrMaximum(txFee, assetBalance(this, xfeeAsset))
148+ let scriptTransfers = (((((((((getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[0])), portfolio[0]) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[1])), portfolio[1])) ++ getScriptTransfer(fdapp, wavesRebalancingAmount, portfolio[2])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[3])), portfolio[3])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[4])), portfolio[4])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[5])), portfolio[5])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[6])), portfolio[6])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[7])), portfolio[7])) ++ getScriptTransfer(fdapp, rebalancingAmount(value(portfolio[8])), portfolio[8])) ++ getScriptTransfer(fdapp, fmmtRebalancingAmount, portfolio[9]))
148149 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
149150 if ((size(scriptTransfers) == 0))
150151 then throw("There are currently no transfers available.")
151152 else (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
152153 }
153154 }
155+
156+
157+
158+@Callable(i)
159+func airdropWasher (id0,id1,id2,id3,id4,id5,id6,id7,id8,id9) = if ((i.callerPublicKey != adminPublicKey))
160+ then throw("This action can only be performed by an administrator!")
161+ else if ((size(i.payments) > 0))
162+ then throw("Don't attach payment when calling this function ...")
163+ else {
164+ let scriptTransfers = (((((((((getScriptTransfer(admin, airdropBalance(id0), id0) ++ getScriptTransfer(admin, airdropBalance(id1), id1)) ++ getScriptTransfer(admin, airdropBalance(id2), id2)) ++ getScriptTransfer(admin, airdropBalance(id3), id3)) ++ getScriptTransfer(admin, airdropBalance(id4), id4)) ++ getScriptTransfer(admin, airdropBalance(id5), id5)) ++ getScriptTransfer(admin, airdropBalance(id6), id6)) ++ getScriptTransfer(admin, airdropBalance(id7), id7)) ++ getScriptTransfer(admin, airdropBalance(id8), id8)) ++ getScriptTransfer(admin, airdropBalance(id9), id9))
165+ let logEntryDataValue = ("DeFi Franklin (FMMT): airdropWasher () => tx: " + toBase58String(i.transactionId))
166+ if ((size(scriptTransfers) == 0))
167+ then throw("There are currently no transfers available.")
168+ else ((scriptTransfers :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
169+ }
154170
155171
156172
157173 @Callable(i)
158174 func setScriptVersion () = if ((i.callerPublicKey != adminPublicKey))
159175 then throw("This action can only be performed by an administrator!")
160176 else if ((size(i.payments) > 0))
161177 then throw("Don't attach payment when calling this function ...")
162178 else {
163179 let oldVersion = valueOrElse(getString(this, versionDataKey), "")
164180 let versionList = split(drop(scriptVersion, 1), "_")
165181 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): setScriptVersion () =>", "version:", (versionList[0] + ";"), "updated:", makeString([take(versionList[1], 4), take(drop(versionList[1], 4), 2), drop(versionList[1], 6)], "-")], " ")
166182 if ((oldVersion == scriptVersion))
167183 then throw(("The script version has already been updated: " + scriptVersion))
168184 else [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
169185 }
170186
171187
172188 @Verifier(tx)
173189 func verify () = {
174190 let isValidOwner = sigVerify_16Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
175191 let isValidMMBot = if (isValidOwner)
176192 then true
177193 else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], mmbotPublicKey)
178194 let isValidAdmin = if (isValidOwner)
179195 then true
180196 else sigVerify_16Kb(tx.bodyBytes, tx.proofs[1], adminPublicKey)
181197 let validGuarantors = (((((if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
182198 then 1
183199 else 0) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
184200 then 1
185201 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
186202 then 1
187203 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[4], guarantors[3]))
188204 then 1
189205 else 0)) + (if (sigVerify_16Kb(tx.bodyBytes, tx.proofs[5], guarantors[4]))
190206 then 1
191207 else 0))
192208 let anyValidGuarantor = (validGuarantors > 0)
193209 let isValidGuarantors = (validGuarantors >= minSignatures)
194- let wavesLease = (wavesRegular - wavesAvailable)
195- let wavesFunds = validate(((wavesRegular + wavesBalance(fdapp).regular) - txFee))
210+ let balance = wavesBalance(this).regular
211+ let wavesLease = validate((balance - wavesBalance(this).available))
212+ let wavesFunds = validate(((balance + wavesBalance(fdapp).regular) - txFee))
196213 let maxSaleAmount = validate((saleSupply - assetBalance(fsale, fmmtAsset)))
197214 let maxLeaseAmount = validate((fraction(wavesFunds, leasePercent, percent) - wavesLease))
198215 match tx {
199216 case o: Order =>
200217 if (if (if (isValidMMBot)
201218 then if (if (if ((o.orderType == Buy))
202219 then (o.assetPair.priceAsset != xfeeAsset)
203220 else false)
204221 then !(containsElement(portfolio, o.assetPair.priceAsset))
205222 else false)
206223 then true
207224 else if (if ((o.orderType == Sell))
208225 then (o.assetPair.amountAsset != xfeeAsset)
209226 else false)
210227 then !(containsElement(portfolio, o.assetPair.amountAsset))
211228 else false
212229 else false)
213230 then !(isDefined(o.matcherFeeAssetId))
214231 else false)
215232 then (o.matcherPublicKey == wxchgPublicKey)
216233 else false
217234 case t: TransferTransaction =>
218235 if (if (if (if (isValidOwner)
219236 then !(containsElement(portfolio, t.assetId))
220237 else false)
221238 then !(containsElement(portfolio, t.feeAssetId))
222239 else false)
223240 then true
224241 else if (if (if (isValidAdmin)
225242 then (t.assetId == fmmtAsset)
226243 else false)
227244 then (maxSaleAmount >= t.amount)
228245 else false)
229246 then (addressFromRecipient(t.recipient) == fsale)
230247 else false)
231248 then true
232249 else if (if (if (isValidGuarantors)
233250 then (t.assetId != fmmtAsset)
234251 else false)
235252 then containsElement(portfolio, t.assetId)
236253 else false)
237254 then (addressFromRecipient(t.recipient) == fdapp)
238255 else false
239256 case l: LeaseTransaction =>
240257 if (isValidMMBot)
241258 then (maxLeaseAmount >= l.amount)
242259 else false
243260 case _: LeaseCancelTransaction =>
244261 if (isValidMMBot)
245262 then true
246263 else anyValidGuarantor
247264 case _: SetScriptTransaction|DataTransaction =>
248265 if (isValidAdmin)
249266 then isValidGuarantors
250267 else false
251268 case _ =>
252269 false
253270 }
254271 }
255272

github/deemru/w8io/0e76f2f 
58.59 ms