First things first, the Melon team wishes you all the best for 2018.

Now, hello from the Melon dev team 👩🏽‍💻👨🏼‍💻👨🏻‍💻👨‍💻👨🏻‍💻! The live deployment of the protocol on the Ethereum main net is approaching, so the protocol is undergoing several security audits. Also, we hope to start the Melon Fund Managers competitions asap. We are working full-steam ahead to meet those goals.

PROTOCOL

The first two weeks of December have mostly been about fixing bugs that were revealed during the first security audit . You can see more details on the first security audit here.

. You can see more details on the first security audit here. We shifted from Jasmine tests to ava.js for increased speed.

We worked on a new test files structure with separate unit tests for most major contracts and integration tests.

We added compatibility for multiples exchanges and multiple type of exchanges through exchange adapters . We shifted from libraries to using plain delegatecalls.

and multiple type of exchanges through . We shifted from libraries to using plain delegatecalls. We made fund shares comply with the new ERC233 standard .

We switched to newer solidity syntax and began enforcing linter rules at build time.

and began at build time. Towards the end of December, we started working on the second audit issues.

OYENTE

We optimized contracts not containing the MSIZE opcode.

We ran Oyente on the mainnet (the result will be available next month).

(the result will be available next month). We added the option to run Oyente in parallel .

. We performed some refactoring of the codebase and added more tests for Oyente.

and added more tests for Oyente. We analyzed remote contracts on the web version.

MELON CHAIN

We are continuing our research and experimentation phase of the Melon chain (see progress here ) , including a first version of the Melon protocol deployed to it .

, including a . Next we will be working on a more stable network, some visualisation of the network state, on researching custom consensus algorithms and chain economics to make Melon chain the ideal place for any Melon related interactions. Stay tuned!

MELON.JS

December has been a bug fixing month for Melon.js; no major change happened there, but we fixed a few issues following the shift to Parity.js/Ethers-wallet.

We also tailored some functions more to what the frontend needs; for instance we decided to pass the wallet instance as the first argument to each function performing a transaction. We also added some new conveniency functions for the frontend such as getHoldingsAndPrices or onBlock.

such as getHoldingsAndPrices or onBlock. We added a wallet related suite of functions , which are simple wrappers around ethers-wallet functions: encryptWallet, decryptWallet, importWalletFromMnemonic.

, which are simple wrappers around ethers-wallet functions: encryptWallet, decryptWallet, importWalletFromMnemonic. We integrated the version 0.5.2-alpha.1 of the protocol.

LIQUIDITY PROVIDER / FAUCET

We wrote a new liquidity provider from scratch , using the latest version of Melon.js. The new liquidity provider places orders at current market price for each asset pair, and cancels/replaces them approximately every 10min. Also, when an order is taken from the orderbook, the liquidity provider replaces it.

, using the latest version of Melon.js. The new liquidity provider places orders at current market price for each asset pair, and cancels/replaces them approximately every 10min. Also, when an order is taken from the orderbook, the liquidity provider replaces it. We modified our existing faucet to remove the dependency on Metamask; the new faucet now works independently from Metamask, and the faucet will fund the account address provided in the URL or in the box shown in the UI.

FRONTEND

We pursued the full refactoring of the frontend with Redux sagas , bringing then all the logic and calls to Melon.js in the said sagas.

, bringing then all the logic and calls to Melon.js in the said sagas. We worked many hours on what we call the onBoardingState of the application; it might seem simple but it is actually quite complex since many factors must be taken into account: Is the application connected to an Ethereum node? Is the node synced? Does the user have an account? Is the account funded with k-eth and k-mln? Does this account already created a fund? If so, has the user already invested in his fund? Is the user browsing as a visitor, an investor or a fund manager? So many questions and different possible states which we tried to solve in a user-friendly and efficient manner.

of the application; it might seem simple but it is actually quite complex since many factors must be taken into account: Is the application connected to an Ethereum node? Is the node synced? Does the user have an account? Is the account funded with k-eth and k-mln? Does this account already created a fund? If so, has the user already invested in his fund? Is the user browsing as a visitor, an investor or a fund manager? So many questions and different possible states which we tried to solve in a user-friendly and efficient manner. We worked on the visitor mode and ranking page ; users are now able to consult the ranking page of all the funds, and to visit each of them, regardless of if the user has an account or a fund.

; users are now able to consult the ranking page of all the funds, and to visit each of them, regardless of if the user has an account or a fund. We moved away from Metamask, in favor for a custom signer solution . We worked on a new part of the frontend application for account management , which allows the user to create a wallet, to encrypt it with its password, and also the option to import a wallet from a mnemonic.

. We worked on a , which allows the user to create a wallet, to encrypt it with its password, and also the option to import a wallet from a mnemonic. We worked on the various forms we have in the application: fund setup, invest/redeem and trade. We introduced Redux Form to fully leverage the power of Redux in the way we handle forms.

to fully leverage the power of Redux in the way we handle forms. We introduced modals and worked on the transaction confirmation and signing modal . This modal will be shown to user for each transaction they try to perform; the user will be prompted to enter his password and to confirm the arguments that will be passed to the function. If anything went wrong during the transaction, the modal will show the error message to the user, indicating the transaction was not successful. In a first form, the error message shown are the error messages coming from Melon.js.

. This modal will be shown to user for each transaction they try to perform; the user will be prompted to enter his password and to confirm the arguments that will be passed to the function. If anything went wrong during the transaction, the modal will show the error message to the user, indicating the transaction was not successful. In a first form, the error message shown are the error messages coming from Melon.js. We started adding end-to-end tests using Cypress framework, which allows us to run series of super cool tests checking that the functionality works as expected.

DESIGN

We pursued the work on the Melon products brand . We now have the brand structured for Melon; however, this will be subject to further iteration.

. We now have the brand structured for Melon; however, this will be subject to further iteration. We continued working on the hackathon website .

. We worked on some document design for Melonport.

Next steps include fixing second audit issues, preparing for the third audit and launching the Melon Managers Competitions on the testnet. Stay tuned as January promises to be full of surprises.

If you have any feedback/suggestions for us -or just want to chat with us, please join our Gitter channel or Telegram channel.

[Check out: melon.fund | melon.email | Oyente | Melon Project Github]

-Melon Dev Team ❤

This blog post is subject to change as the research & development phase is ongoing. Melonport will aim to update blog-posts regularly to represent our latest thinking on a best-efforts basis but there may occasionally be time-lags between latest thinking and updated documentation. With this in mind, the author of this blog assumes no responsibility or liability for any errors or omissions in the content of this blog.