tx · E5jGM2LsFXY3fFWX2bFLqRmjQ1ESx9KFuLrD9FVXkb3F

3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL:  -0.01400000 Waves

2020.10.26 10:24 [2300997] smart account 3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL > SELF 0.00000000 Waves

{ "type": 13, "id": "E5jGM2LsFXY3fFWX2bFLqRmjQ1ESx9KFuLrD9FVXkb3F", "fee": 1400000, "feeAssetId": null, "timestamp": 1603696804664, "version": 2, "chainId": 87, "sender": "3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL", "senderPublicKey": "Df9CNxLc26KjvgeE9TYkcT1ooBayf5PUfxNdgmFzD2WK", "proofs": [ "5R1p5WWPr7zzFLxEgiMoMAeToC3LZporRpqm1tiRHuuE8BdjHGtXBwP63PKcesFd7VuBEKfAamcggnPdVviW3AD8", "2UbgM3HfSxSyQbRaAoDK5TqjerWLy3giUZQQ5opTYV9kQrExfFMBmQiYTm8ZFVK1fo1bZsCTbzcUzTXc19mVKqb9" ], "script": "base64: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TAAAAAIFAAAAC3F1b3RlVGlja2VyCQAETAAAAAICAAAAJiBtYXJrZXQgcGFpciBpcyB0ZW1wb3JhcmlseSBzdXNwZW5kZWQuBQAAAANuaWwCAAAAASAEAAAAC2Jhc2VEZWNpbWFsCQEAAAAMYXNzZXREZWNpbWFsAAAAAQUAAAAGYmFzZUlkBAAAAAxxdW90ZURlY2ltYWwJAQAAAAxhc3NldERlY2ltYWwAAAABBQAAAAdxdW90ZUlkBAAAAAxwcmljZURlY2ltYWwJAABrAAAAAwUAAAAMcXVvdGVEZWNpbWFsBQAAAAdkZWNpbWFsBQAAAAtiYXNlRGVjaW1hbAQAAAALJHQwOTg1ODk5MDgJAQAAAA1nZXRBdHRhY2htZW50AAAAAQgFAAAAAWkAAAAIcGF5bWVudHMEAAAAB2RlcG9zaXQIBQAAAAskdDA5ODU4OTkwOAAAAAJfMQQAAAAHYXNzZXRJZAgFAAAACyR0MDk4NTg5OTA4AAAAAl8yBAAAAAskdDA5OTEzOTk5NgkBAAAADmdldE1hcmtldEZ1bmRzAAAAAgUAAAAGYmFzZUlkBQAAAAdxdW90ZUlkBAAAAAliYXNlRnVuZHMIBQAAAAskdDA5OTEzOTk5NgAAAAJfMQQAAAAKcXVvdGVGdW5kcwgFAAAACyR0MDk5MTM5OTk2AAAAAl8yAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAAdxdW90ZUlkBAAAAAhpbkFtb3VudAkBAAAADnZhbHVlT3JNYXhpbXVtAAAAAgUAAAAHZGVwb3NpdAkAAGsAAAADBQAAAApxdW90ZUZ1bmRzBQAAAA1zcHJlYWRQZXJjZW50BQAAAAdwZXJjZW50BAAAAAlmZWVBbW91bnQJAABrAAAAAwUAAAAIaW5BbW91bnQFAAAACmZlZVBlcmNlbnQFAAAAB3BlcmNlbnQEAAAACnRlYW1SZXdhcmQJAABrAAAAAwUAAAAIaW5BbW91bnQFAAAACmZlZVBlcmNlbnQJAABoAAAAAgAAAAAAAAAACgUAAAAHcGVyY2VudAQAAAALcXVvdGVBbW91bnQJAABlAAAAAgUAAAAIaW5BbW91bnQFAAAACWZlZUFtb3VudAQAAAAKYmFzZUFtb3VudAkAAGsAAAADBQAAAAliYXNlRnVuZHMFAAAAC3F1b3RlQW1vdW50CQAAZAAAAAIFAAAACnF1b3RlRnVuZHMFAAAAC3F1b3RlQW1vdW50BAAAAAlvdXRBbW91bnQFAAAACmJhc2VBbW91bnQEAAAABnJlZnVuZAkBAAAACHZhbGlkYXRlAAAAAQkAAGUAAAACBQAAAAdkZXBvc2l0BQAAAAhpbkFtb3VudAQAAAAMcHJpY2VQZXJVbml0CQAAawAAAAMFAAAAC3F1b3RlQW1vdW50BQAAAAdkZWNpbWFsBQAAAApiYXNlQW1vdW50BAAAABFsb2dFbnRyeURhdGFWYWx1ZQkABLkAAAACCQAETAAAAAICAAAALURlRmkgRnJhbmtsaW4gKEZNTVQpOiBvdGNFeGNoYW5nZSAoQnV5IE9yZGVyOgkABEwAAAACBQAAAApiYXNlVGlja2VyCQAETAAAAAICAAAAAS8JAARMAAAAAgkAASwAAAACBQAAAAtxdW90ZVRpY2tlcgIAAAAEKSA9PgkABEwAAAACAgAAAAZib3VnaHQJAARMAAAAAgkBAAAADXRvRmxvYXRTdHJpbmcAAAACBQAAAAlvdXRBbW91bnQFAAAAC2Jhc2VEZWNpbWFsCQAETAAAAAIFAAAACmJhc2VUaWNrZXIJAARMAAAAAgIAAAACw5cJAARMAAAAAgIAAAAJYXNrIHByaWNlCQAETAAAAAIJAQAAAA10b0Zsb2F0U3RyaW5nAAAAAgUAAAAMcHJpY2VQZXJVbml0BQAAAAxwcmljZURlY2ltYWwJAARMAAAAAgIAAAABPQkABEwAAAACAgAAAApjb3N0IHByaWNlCQAETAAAAAIJAQAAAA10b0Zsb2F0U3RyaW5nAAAAAgUAAAAIaW5BbW91bnQFAAAADHF1b3RlRGVjaW1hbAkABEwAAAACBQAAAAtxdW90ZVRpY2tlcgkABEwAAAACAgAAAAPiiJIJAARMAAAAAgIAAAAJdHJhZGUgZmVlCQAETAAAAAIJAQAAAA10b0Zsb2F0U3RyaW5nAAAAAgUAAAAJZmVlQW1vdW50BQAAAAxxdW90ZURlY2ltYWwJAARMAAAAAgUAAAALcXVvdGVUaWNrZXIFAAAAA25pbAIAAAABIAMDCQEAAAABIQAAAAEFAAAABHRlc3QJAABmAAAAAgUAAAAJb3V0QW1vdW50AAAAAAAAAAAABwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACW91dEFtb3VudAUAAAAGYmFzZUlkCQAETQAAAAIJAARNAAAAAgkABE4AAAACCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABnJlZnVuZAUAAAAHcXVvdGVJZAkBAAAAEWdldFNjcmlwdFRyYW5zZmVyAAAAAwUAAAAFZnRlYW0FAAAACnRlYW1SZXdhcmQFAAAAB3F1b3RlSWQJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2xvZ0VudHJ5RGF0YUtleQUAAAARbG9nRW50cnlEYXRhVmFsdWUJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABB0aW1lc3RhbXBEYXRhS2V5CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABBQAAABFsb2dFbnRyeURhdGFWYWx1ZQMJAAAAAAAAAgUAAAAHYXNzZXRJZAUAAAAGYmFzZUlkBAAAAAhpbkFtb3VudAkBAAAADnZhbHVlT3JNYXhpbXVtAAAAAgUAAAAHZGVwb3NpdAkAAGsAAAADBQAAAAliYXNlRnVuZHMFAAAADXNwcmVhZFBlcmNlbnQJAABlAAAAAgUAAAAHcGVyY2VudAUAAAANc3ByZWFkUGVyY2VudAQAAAAKYmFzZUFtb3VudAUAAAAIaW5BbW91bnQEAAAAC3F1b3RlQW1vdW50CQAAawAAAAMFAAAACnF1b3RlRnVuZHMFAAAACmJhc2VBbW91bnQJAABkAAAAAgUAAAAJYmFzZUZ1bmRzBQAAAApiYXNlQW1vdW50BAAAAAlmZWVBbW91bnQJAABrAAAAAwUAAAALcXVvdGVBbW91bnQFAAAACmZlZVBlcmNlbnQFAAAAB3BlcmNlbnQEAAAACnRlYW1SZXdhcmQJAABrAAAAAwUAAAALcXVvdGVBbW91bnQFAAAACmZlZVBlcmNlbnQJAABoAAAAAgAAAAAAAAAACgUAAAAHcGVyY2VudAQAAAAJb3V0QW1vdW50CQAAZQAAAAIFAAAAC3F1b3RlQW1vdW50BQAAAAlmZWVBbW91bnQEAAAABnJlZnVuZAkBAAAACHZhbGlkYXRlAAAAAQkAAGUAAAACBQAAAAdkZXBvc2l0BQAAAAhpbkFtb3VudAQAAAAMcHJpY2VQZXJVbml0CQAAawAAAAMFAAAAC3F1b3RlQW1vdW50BQAAAAdkZWNpbWFsBQAAAApiYXNlQW1vdW50BAAAABFsb2dFbnRyeURhdGFWYWx1ZQkABLkAAAACCQAETAAAAAICAAAALkRlRmkgRnJhbmtsaW4gKEZNTVQpOiBvdGNFeGNoYW5nZSAoU2VsbCBPcmRlcjoJAARMAAAAAgUAAAAKYmFzZVRpY2tlcgkABEwAAAACAgAAAAEvCQAETAAAAAIJAAEsAAAAAgUAAAALcXVvdGVUaWNrZXICAAAABCkgPT4JAARMAAAAAgIAAAAEc29sZAkABEwAAAACCQEAAAANdG9GbG9hdFN0cmluZwAAAAIFAAAACGluQW1vdW50BQAAAAtiYXNlRGVjaW1hbAkABEwAAAACBQAAAApiYXNlVGlja2VyCQAETAAAAAICAAAAAsOXCQAETAAAAAICAAAACWJpZCBwcmljZQkABEwAAAACCQEAAAANdG9GbG9hdFN0cmluZwAAAAIFAAAADHByaWNlUGVyVW5pdAUAAAAMcHJpY2VEZWNpbWFsCQAETAAAAAICAAAAAT0JAARMAAAAAgIAAAAMbmV0IHByb2NlZWRzCQAETAAAAAIJAQAAAA10b0Zsb2F0U3RyaW5nAAAAAgUAAAAJb3V0QW1vdW50BQAAAAxxdW90ZURlY2ltYWwJAARMAAAAAgUAAAALcXVvdGVUaWNrZXIJAARMAAAAAgIAAAABKwkABEwAAAACAgAAAAl0cmFkZSBmZWUJAARMAAAAAgkBAAAADXRvRmxvYXRTdHJpbmcAAAACBQAAAAlmZWVBbW91bnQFAAAADHF1b3RlRGVjaW1hbAkABEwAAAACBQAAAAtxdW90ZVRpY2tlcgUAAAADbmlsAgAAAAEgAwMJAQAAAAEhAAAAAQUAAAAEdGVzdAkAAGYAAAACBQAAAAlvdXRBbW91bnQAAAAAAAAAAAAHCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJb3V0QW1vdW50BQAAAAdxdW90ZUlkCQAETQAAAAIJAARNAAAAAgkABE4AAAACCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABnJlZnVuZAUAAAAGYmFzZUlkCQEAAAARZ2V0U2NyaXB0VHJhbnNmZXIAAAADBQAAAAVmdGVhbQUAAAAKdGVhbVJld2FyZAUAAAAHcXVvdGVJZAkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPbG9nRW50cnlEYXRhS2V5BQAAABFsb2dFbnRyeURhdGFWYWx1ZQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEHRpbWVzdGFtcERhdGFLZXkIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAAgAAAAEFAAAAEWxvZ0VudHJ5RGF0YVZhbHVlCQAAAgAAAAEJAAS5AAAAAgkABEwAAAACAgAAABhQbGVhc2UgYXR0YWNoIG9uZSBvZiB0aGUJAARMAAAAAgUAAAAKYmFzZVRpY2tlcgkABEwAAAACAgAAAAJvcgkABEwAAAACBQAAAAtxdW90ZVRpY2tlcgkABEwAAAACAgAAAAdhc3NldHMuBQAAAANuaWwCAAAAASAAAAABaQEAAAANZ2V0TWFya2V0RGF0YQAAAAIAAAAHYlRpY2tlcgAAAAdxVGlja2VyBAAAAAliYXNlSW5kZXgJAQAAAAphc3NldEluZGV4AAAAAQUAAAAHYlRpY2tlcgQAAAAKcXVvdGVJbmRleAkBAAAACmFzc2V0SW5kZXgAAAABBQAAAAdxVGlja2VyBAAAAAZiYXNlSWQJAAGRAAAAAgUAAAAJcG9ydGZvbGlvBQAAAAliYXNlSW5kZXgEAAAACmJhc2VUaWNrZXIJAAGRAAAAAgUAAAAJaGlUaWNrZXJzBQAAAAliYXNlSW5kZXgEAAAAB3F1b3RlSWQJAAGRAAAAAgUAAAAJcG9ydGZvbGlvBQAAAApxdW90ZUluZGV4BAAAAAtxdW90ZVRpY2tlcgkAAZEAAAACBQAAAAloaVRpY2tlcnMFAAAACnF1b3RlSW5kZXgDAwMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAZiYXNlSWQJAQAAAA9pc0Fzc2V0RGlzYWJsZWQAAAABBQAAAAZiYXNlSWQHBgMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAdxdW90ZUlkCQEAAAAPaXNBc3NldERpc2FibGVkAAAAAQUAAAAHcXVvdGVJZAcJAAAC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b2xpbwgFAAAAAXQAAAAHYXNzZXRJZAcJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAACXBvcnRmb2xpbwgFAAAAAXQAAAAKZmVlQXNzZXRJZAcGAwMDBQAAAAxpc1ZhbGlkQWRtaW4JAAAAAAAAAggFAAAAAXQAAAAHYXNzZXRJZAUAAAAJZm1tdEFzc2V0BwkAAGcAAAACBQAAAA1tYXhTYWxlQW1vdW50CAUAAAABdAAAAAZhbW91bnQHCQAAAAAAAAIJAAQkAAAAAQgFAAAAAXQAAAAJcmVjaXBpZW50BQAAAAVmc2FsZQcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAEExlYXNlVHJhbnNhY3Rpb24EAAAAAWwFAAAAByRtYXRjaDADBQAAAAxpc1ZhbGlkTU1Cb3QJAABnAAAAAgUAAAAObWF4TGVhc2VBbW91bnQIBQAAAAFsAAAABmFtb3VudAcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFkxlYXNlQ2FuY2VsVHJhbnNhY3Rpb24DBQAAAAxpc1ZhbGlkTU1Cb3QGBQAAABFhbnlWYWxpZEd1YXJhbnRvcgMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAFFNldFNjcmlwdFRyYW5zYWN0aW9uBgkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAA9EYXRhVHJhbnNhY3Rpb24DBQAAAAxpc1ZhbGlkQWRtaW4FAAAAEWlzVmFsaWRHdWFyYW50b3JzBweYpODJ", "height": 2300997, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8zWmqFZYswmEhCyeo38JjGnZXEoQMtPiHyEBt2TFmA8S Next: 3J3j11RtQRGfJ4WuQS2Kwpox36tknTWJ5JNNGXYabr6c Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v4.03-final_20201025"
4+let scriptVersion = "v4.04-final_20201026"
55
66 let percent = 100000
77
311311 else if ((size(i.payments) > 0))
312312 then throw("Don't attach payment when calling this function ...")
313313 else {
314+ let sponsorship = min([500000, assetBalance(this, xfeeAsset)])
314315 let fmmtDifference = (assetBalance(this, fmmtAsset) - saleSupply)
315316 let scriptTransfers = (((((((((getScriptTransfer(fcold, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fcold, wavesDifference, unit)) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fcold, fmmtDifference, fmmtAsset))
316317 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
317318 if ((size(scriptTransfers) > 0))
318- then ((scriptTransfers :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
319+ then (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
319320 else throw("There are currently no transfers available.")
320321 }
321322 }
332333 let versionList = split(drop(scriptVersion, 1), "_")
333334 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)], "-") + ")")], " ")
334335 if ((oldVersion != scriptVersion))
335- then [ScriptTransfer(i.caller, 500000, unit), StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
336+ then [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
336337 else throw(("The script version has already been updated: " + scriptVersion))
337338 }
338339
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let scriptVersion = "v4.03-final_20201025"
4+let scriptVersion = "v4.04-final_20201026"
55
66 let percent = 100000
77
88 let decimal = 100000000
99
1010 let feePercent = 50
1111
1212 let leasePercent = 8000
1313
1414 let fdappPercent = 20000
1515
1616 let spreadPercent = valueOrElse(getInteger(this, "halfSpread"), 500)
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 loTickers = ["usdt", "btc", "waves", "eth", "bch", "ltc", "dash", "xmr", "zec", "fmmt"]
4343
4444 let hiTickers = ["USDT", "BTC", "WAVES", "ETH", "BCH", "LTC", "DASH", "XMR", "ZEC", "FMMT"]
4545
4646 let fixedAssets = [btcAsset, fmmtAsset]
4747
4848 let fixedAssetsSize = size(fixedAssets)
4949
5050 let otherAssetsSize = (size(portfolio) - fixedAssetsSize)
5151
5252 let fsale = Address(base58'3P6VEUyoBE1qdNuhUzbnFRLThuoe1pzS4B2')
5353
5454 let fdapp = Address(base58'3PFRxT9CXG81Evr8MeVJGnQSjFP6cq1SHWL')
5555
5656 let fcold = Address(base58'3PDUqa5qmnhPJfKPnBzUd5PisA42iawV6W7')
5757
5858 let admin = Address(base58'3PLRw83NCgHKKFfeJi8XWZ4fypqJJxm2x2x')
5959
6060 let fteam = Address(base58'3P3TMgAUVtJKWHxQMdt8Ao6A1qnRyVmCSr2')
6161
6262 let saleSupply = (10000 * 100000)
6363
6464 let circSupply = ((value(assetInfo(fmmtAsset)).quantity - (assetBalance(this, fmmtAsset) + assetBalance(fcold, fmmtAsset))) - saleSupply)
6565
6666 let fteamFunds = assetBalance(fteam, fmmtAsset)
6767
6868 let tradeSupply = max([0, (circSupply - fteamFunds)])
6969
7070 let wavesRegular = wavesBalance(this).regular
7171
7272 let wavesAvailable = wavesBalance(this).available
7373
7474 let logEntryDataKey = "logEntry"
7575
7676 let timestampDataKey = "timestamp"
7777
7878 let versionDataKey = "scriptVersion"
7979
8080 func validate (posValue) = max([0, posValue])
8181
8282
8383 func valueOrMaximum (intValue,maxValue) = min([intValue, maxValue])
8484
8585
8686 func toFloatString (num,dec) = toUtf8String(if ((num == 0))
8787 then base58'q'
8888 else if ((num > 0))
8989 then ((toBytes(toString((num / dec))) + base58'o') + drop(toBytes(toString(((num % dec) + dec))), 1))
9090 else throw("Negative amounts are not allowed! Send a PM to the administrator ..."))
9191
9292
9393 func difference (fdappFunds,fcoldFunds) = {
9494 let minAmount = fraction(fcoldFunds, (percent / 100), (percent - fdappPercent))
9595 let diffAmount = (fdappFunds - fraction((fdappFunds + fcoldFunds), fdappPercent, percent))
9696 if ((minAmount > diffAmount))
9797 then 0
9898 else diffAmount
9999 }
100100
101101
102102 func rebalancingAmount (assetId) = match assetId {
103103 case id: ByteVector =>
104104 difference(assetBalance(this, id), assetBalance(fcold, id))
105105 case _ =>
106106 difference(wavesBalance(this).regular, wavesBalance(fcold).regular)
107107 }
108108
109109
110110 func getScriptTransfer (address,amount,assetId) = if ((amount > 0))
111111 then [ScriptTransfer(address, amount, assetId)]
112112 else nil
113113
114114
115115 func toDataKey (assetId) = toBase58String(valueOrElse(assetId, base58'WAVES'))
116116
117117
118118 func isAssetDisabled (assetId) = if (!(containsElement(fixedAssets, assetId)))
119119 then !(valueOrElse(getBoolean(admin, toDataKey(assetId)), false))
120120 else false
121121
122122
123123 func assetMult (assetId) = if ((assetId == fmmtAsset))
124124 then 1
125125 else if (containsElement(fixedAssets, assetId))
126126 then fixedAssetsSize
127127 else (fixedAssetsSize * otherAssetsSize)
128128
129129
130130 func assetIndex (ticker) = valueOrErrorMessage(if ((size(ticker) > 16))
131131 then indexOf(portfolio, fromBase58String(ticker))
132132 else valueOrElse(indexOf(loTickers, ticker), indexOf(hiTickers, ticker)), makeString(["The ", ticker, " asset is not supported!"], "\""))
133133
134134
135135 func assetDecimal (assetId) = match assetId {
136136 case id: ByteVector =>
137137 if ((id == fmmtAsset))
138138 then 100000
139139 else if ((id == usdtAsset))
140140 then 1000000
141141 else decimal
142142 case _ =>
143143 decimal
144144 }
145145
146146
147147 func assetFunds (assetId) = match assetId {
148148 case id: ByteVector =>
149149 if ((id == fmmtAsset))
150150 then tradeSupply
151151 else (assetBalance(this, id) + assetBalance(fcold, id))
152152 case _ =>
153153 (wavesBalance(this).regular + wavesBalance(fcold).regular)
154154 }
155155
156156
157157 func getAttachment (payments) = if ((size(payments) != 1))
158158 then $Tuple2(0, base58'')
159159 else $Tuple2(payments[0].amount, payments[0].assetId)
160160
161161
162162 func getMarketFunds (baseId,quoteId) = {
163163 let baseMult = assetMult(baseId)
164164 let quoteMult = assetMult(quoteId)
165165 let marketMult = max([baseMult, quoteMult])
166166 $Tuple2(fraction(assetFunds(baseId), baseMult, marketMult), fraction(assetFunds(quoteId), quoteMult, marketMult))
167167 }
168168
169169
170170 func withdrawalAmount (assetId,fmmtAmount) = match assetId {
171171 case id: ByteVector =>
172172 let total = (assetBalance(this, id) + assetBalance(fcold, id))
173173 let amount = fraction(total, fmmtAmount, tradeSupply)
174174 if ((assetBalance(this, id) >= amount))
175175 then amount
176176 else throw("Not enough balance! Send a PM to the administrator or guarantor ...")
177177 case _ =>
178178 let total = (wavesBalance(this).regular + wavesBalance(fcold).regular)
179179 let amount = fraction(total, fmmtAmount, tradeSupply)
180180 if ((wavesBalance(this).available >= amount))
181181 then amount
182182 else throw("Not enough balance! Send a PM to the administrator or guarantor ...")
183183 }
184184
185185
186186 @Callable(i)
187187 func otcExchange (test,bTicker,qTicker) = {
188188 let baseIndex = assetIndex(bTicker)
189189 let quoteIndex = assetIndex(qTicker)
190190 let baseId = portfolio[baseIndex]
191191 let baseTicker = hiTickers[baseIndex]
192192 let quoteId = portfolio[quoteIndex]
193193 let quoteTicker = hiTickers[quoteIndex]
194194 if (if (isAssetDisabled(baseId))
195195 then true
196196 else isAssetDisabled(quoteId))
197197 then throw(makeString(["The", baseTicker, "/", quoteTicker, " market pair is temporarily suspended."], " "))
198198 else {
199199 let baseDecimal = assetDecimal(baseId)
200200 let quoteDecimal = assetDecimal(quoteId)
201201 let priceDecimal = fraction(quoteDecimal, decimal, baseDecimal)
202202 let $t098589908 = getAttachment(i.payments)
203203 let deposit = $t098589908._1
204204 let assetId = $t098589908._2
205205 let $t099139996 = getMarketFunds(baseId, quoteId)
206206 let baseFunds = $t099139996._1
207207 let quoteFunds = $t099139996._2
208208 if ((assetId == quoteId))
209209 then {
210210 let inAmount = valueOrMaximum(deposit, fraction(quoteFunds, spreadPercent, percent))
211211 let feeAmount = fraction(inAmount, feePercent, percent)
212212 let teamReward = fraction(inAmount, feePercent, (10 * percent))
213213 let quoteAmount = (inAmount - feeAmount)
214214 let baseAmount = fraction(baseFunds, quoteAmount, (quoteFunds + quoteAmount))
215215 let outAmount = baseAmount
216216 let refund = validate((deposit - inAmount))
217217 let pricePerUnit = fraction(quoteAmount, decimal, baseAmount)
218218 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): otcExchange (Buy Order:", baseTicker, "/", (quoteTicker + ") =>"), "bought", toFloatString(outAmount, baseDecimal), baseTicker, "×", "ask price", toFloatString(pricePerUnit, priceDecimal), "=", "cost price", toFloatString(inAmount, quoteDecimal), quoteTicker, "−", "trade fee", toFloatString(feeAmount, quoteDecimal), quoteTicker], " ")
219219 if (if (!(test))
220220 then (outAmount > 0)
221221 else false)
222222 then [ScriptTransfer(i.caller, outAmount, baseId), (((getScriptTransfer(i.caller, refund, quoteId) ++ getScriptTransfer(fteam, teamReward, quoteId)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))]
223223 else throw(logEntryDataValue)
224224 }
225225 else if ((assetId == baseId))
226226 then {
227227 let inAmount = valueOrMaximum(deposit, fraction(baseFunds, spreadPercent, (percent - spreadPercent)))
228228 let baseAmount = inAmount
229229 let quoteAmount = fraction(quoteFunds, baseAmount, (baseFunds + baseAmount))
230230 let feeAmount = fraction(quoteAmount, feePercent, percent)
231231 let teamReward = fraction(quoteAmount, feePercent, (10 * percent))
232232 let outAmount = (quoteAmount - feeAmount)
233233 let refund = validate((deposit - inAmount))
234234 let pricePerUnit = fraction(quoteAmount, decimal, baseAmount)
235235 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): otcExchange (Sell Order:", baseTicker, "/", (quoteTicker + ") =>"), "sold", toFloatString(inAmount, baseDecimal), baseTicker, "×", "bid price", toFloatString(pricePerUnit, priceDecimal), "=", "net proceeds", toFloatString(outAmount, quoteDecimal), quoteTicker, "+", "trade fee", toFloatString(feeAmount, quoteDecimal), quoteTicker], " ")
236236 if (if (!(test))
237237 then (outAmount > 0)
238238 else false)
239239 then [ScriptTransfer(i.caller, outAmount, quoteId), (((getScriptTransfer(i.caller, refund, baseId) ++ getScriptTransfer(fteam, teamReward, quoteId)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))]
240240 else throw(logEntryDataValue)
241241 }
242242 else throw(makeString(["Please attach one of the", baseTicker, "or", quoteTicker, "assets."], " "))
243243 }
244244 }
245245
246246
247247
248248 @Callable(i)
249249 func getMarketData (bTicker,qTicker) = {
250250 let baseIndex = assetIndex(bTicker)
251251 let quoteIndex = assetIndex(qTicker)
252252 let baseId = portfolio[baseIndex]
253253 let baseTicker = hiTickers[baseIndex]
254254 let quoteId = portfolio[quoteIndex]
255255 let quoteTicker = hiTickers[quoteIndex]
256256 if (if (if (isDefined(baseId))
257257 then isAssetDisabled(baseId)
258258 else false)
259259 then true
260260 else if (isDefined(quoteId))
261261 then isAssetDisabled(quoteId)
262262 else false)
263263 then throw(makeString(["The", baseTicker, "/", quoteTicker, "market pair is temporarily suspended."], " "))
264264 else {
265265 let spreadDecimal = fraction(decimal, spreadPercent, percent)
266266 let $t01392913990 = getMarketFunds(baseId, quoteId)
267267 let baseFunds = $t01392913990._1
268268 let quoteFunds = $t01392913990._2
269269 let minBidPrice = fraction(quoteFunds, (decimal - spreadDecimal), baseFunds)
270270 let maxAskPrice = -(fraction(quoteFunds, -((decimal + spreadDecimal)), baseFunds))
271271 let avgPrice = (((minBidPrice + 1) / 2) + (maxAskPrice / 2))
272272 let priceDecimal = fraction(assetDecimal(quoteId), decimal, assetDecimal(baseId))
273273 let maxBidAmount = fraction(baseFunds, spreadPercent, (percent - spreadPercent))
274274 let maxAskAmount = fraction(quoteFunds, spreadPercent, percent)
275275 throw(makeString(["DeFi Franklin (FMMT): getMarketData (Trade Pair:", baseTicker, "/", (quoteTicker + ") =>"), "avg price:", toFloatString(avgPrice, priceDecimal), "±", (toFloatString((spreadPercent / 10), (percent / 1000)) + "%;"), "bid amount:", toFloatString(maxBidAmount, assetDecimal(baseId)), (baseTicker + ";"), "ask amount:", toFloatString(maxAskAmount, assetDecimal(quoteId)), (quoteTicker + ";"), "trade fee: 0.05% in", quoteTicker], " "))
276276 }
277277 }
278278
279279
280280
281281 @Callable(i)
282282 func quickWithdrawal () = {
283283 let $t01506615116 = getAttachment(i.payments)
284284 let deposit = $t01506615116._1
285285 let assetId = $t01506615116._2
286286 let halfFunds = fraction(tradeSupply, (fdappPercent / 2), percent)
287287 if ((assetId == fmmtAsset))
288288 then {
289289 let inAmount = valueOrMaximum(deposit, halfFunds)
290290 let refund = validate((deposit - inAmount))
291291 let scriptTransfers = [ScriptTransfer(i.caller, withdrawalAmount(portfolio[0], inAmount), portfolio[0]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[1], inAmount), portfolio[1]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[2], inAmount), portfolio[2]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[3], inAmount), portfolio[3]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[4], inAmount), portfolio[4]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[5], inAmount), portfolio[5]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[6], inAmount), portfolio[6]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[7], inAmount), portfolio[7]), ScriptTransfer(i.caller, withdrawalAmount(portfolio[8], inAmount), portfolio[8])]
292292 let logEntryDataValue = makeString(["DeFi Franklin (FMMT): quickWithdrawal (Paid Amount:", toFloatString(inAmount, 100000), "FMMT) => tx:", toBase58String(i.transactionId)], " ")
293293 (((scriptTransfers ++ getScriptTransfer(i.caller, refund, fmmtAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
294294 }
295295 else throw(makeString(["Please attach a payment (max amount:", toFloatString(halfFunds, 100000), "FMMT)."], " "))
296296 }
297297
298298
299299
300300 @Callable(i)
301301 func autoRebalance () = {
302302 let wavesDifference = rebalancingAmount(portfolio[2])
303303 if (if (if ((i.callerPublicKey != adminPublicKey))
304304 then (i.callerPublicKey != mmbotPublicKey)
305305 else false)
306306 then !(containsElement(guarantors, i.callerPublicKey))
307307 else false)
308308 then throw("This action can only be performed by an administrator or guarantor!")
309309 else if ((wavesDifference > wavesAvailable))
310310 then throw("Not enough Waves balance! Send a PM to the administrator or cancel the lease.")
311311 else if ((size(i.payments) > 0))
312312 then throw("Don't attach payment when calling this function ...")
313313 else {
314+ let sponsorship = min([500000, assetBalance(this, xfeeAsset)])
314315 let fmmtDifference = (assetBalance(this, fmmtAsset) - saleSupply)
315316 let scriptTransfers = (((((((((getScriptTransfer(fcold, rebalancingAmount(portfolio[0]), portfolio[0]) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[1]), portfolio[1])) ++ getScriptTransfer(fcold, wavesDifference, unit)) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[3]), portfolio[3])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[4]), portfolio[4])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[5]), portfolio[5])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[6]), portfolio[6])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[7]), portfolio[7])) ++ getScriptTransfer(fcold, rebalancingAmount(portfolio[8]), portfolio[8])) ++ getScriptTransfer(fcold, fmmtDifference, fmmtAsset))
316317 let logEntryDataValue = ("DeFi Franklin (FMMT): autoRebalance () => tx: " + toBase58String(i.transactionId))
317318 if ((size(scriptTransfers) > 0))
318- then ((scriptTransfers :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
319+ then (((scriptTransfers ++ getScriptTransfer(i.caller, sponsorship, xfeeAsset)) :+ StringEntry(logEntryDataKey, logEntryDataValue)) :+ IntegerEntry(timestampDataKey, lastBlock.timestamp))
319320 else throw("There are currently no transfers available.")
320321 }
321322 }
322323
323324
324325
325326 @Callable(i)
326327 func setScriptVersion () = if ((i.callerPublicKey != adminPublicKey))
327328 then throw("This action can only be performed by an administrator!")
328329 else if ((size(i.payments) > 0))
329330 then throw("Don't attach payment when calling this function ...")
330331 else {
331332 let oldVersion = valueOrElse(getString(this, versionDataKey), "")
332333 let versionList = split(drop(scriptVersion, 1), "_")
333334 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)], "-") + ")")], " ")
334335 if ((oldVersion != scriptVersion))
335- then [ScriptTransfer(i.caller, 500000, unit), StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
336+ then [StringEntry(versionDataKey, scriptVersion), StringEntry(logEntryDataKey, logEntryDataValue), IntegerEntry(timestampDataKey, lastBlock.timestamp)]
336337 else throw(("The script version has already been updated: " + scriptVersion))
337338 }
338339
339340
340341 @Verifier(tx)
341342 func verify () = {
342343 let isValidOwner = sigVerify_32Kb(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
343344 let isValidMMBot = if (isValidOwner)
344345 then true
345346 else sigVerify_8Kb(tx.bodyBytes, tx.proofs[1], mmbotPublicKey)
346347 let isValidAdmin = if (isValidOwner)
347348 then true
348349 else sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], adminPublicKey)
349350 let validGuarantors = (((((if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[1], guarantors[0]))
350351 then 1
351352 else 0) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[2], guarantors[1]))
352353 then 1
353354 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[3], guarantors[2]))
354355 then 1
355356 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[4], guarantors[3]))
356357 then 1
357358 else 0)) + (if (sigVerify_32Kb(tx.bodyBytes, tx.proofs[5], guarantors[4]))
358359 then 1
359360 else 0))
360361 let anyValidGuarantor = (validGuarantors > 0)
361362 let isValidGuarantors = (validGuarantors >= minSignatures)
362363 let wavesLease = (wavesRegular - wavesAvailable)
363364 let wavesFunds = (wavesRegular + wavesBalance(fcold).regular)
364365 let maxSaleAmount = validate((saleSupply - assetBalance(this, fmmtAsset)))
365366 let maxLeaseAmount = validate((fraction(wavesFunds, leasePercent, percent) - wavesLease))
366367 match tx {
367368 case o: Order =>
368369 if (if (if (isValidMMBot)
369370 then if (if (if ((o.orderType == Buy))
370371 then (o.assetPair.priceAsset != xfeeAsset)
371372 else false)
372373 then containsElement(portfolio, o.assetPair.amountAsset)
373374 else false)
374375 then true
375376 else if (if ((o.orderType == Sell))
376377 then (o.assetPair.amountAsset != xfeeAsset)
377378 else false)
378379 then containsElement(portfolio, o.assetPair.priceAsset)
379380 else false
380381 else false)
381382 then !(isDefined(o.matcherFeeAssetId))
382383 else false)
383384 then (o.matcherPublicKey == wxchgPublicKey)
384385 else false
385386 case t: TransferTransaction =>
386387 if (if (if (isValidOwner)
387388 then !(containsElement(portfolio, t.assetId))
388389 else false)
389390 then !(containsElement(portfolio, t.feeAssetId))
390391 else false)
391392 then true
392393 else if (if (if (isValidAdmin)
393394 then (t.assetId == fmmtAsset)
394395 else false)
395396 then (maxSaleAmount >= t.amount)
396397 else false)
397398 then (addressFromRecipient(t.recipient) == fsale)
398399 else false
399400 case l: LeaseTransaction =>
400401 if (isValidMMBot)
401402 then (maxLeaseAmount >= l.amount)
402403 else false
403404 case _: LeaseCancelTransaction =>
404405 if (isValidMMBot)
405406 then true
406407 else anyValidGuarantor
407408 case _: SetScriptTransaction|DataTransaction =>
408409 if (isValidAdmin)
409410 then isValidGuarantors
410411 else false
411412 case _ =>
412413 false
413414 }
414415 }
415416

github/deemru/w8io/6500d08 
79.85 ms