Protocol

So how to improve the quality of NEO’s protocol? Let’s do a brainstorm first. What do you have in mind right now?

For me, I remember that once there was a very famous chemist, he said, “If you want to have a good idea, you need to have a lot of ideas”. It enlightens me a lot. I think, If you want to have a lot of ideas, you need to have a lot of smart souls. That’s why we released “How to Become A NEO Core Developer” in github last year. It shows people how to become NEO’s core developer. Erik even designed a tool by himself to calculate the incentives for core developers of NEO. It’s the first automatic incentives distribution tool that I have ever seen in crypto world. Especially, it’s written by co-founder of NEO, which I think can give community developers a great deal of encouragement to join the development of NEO’s protocol.

We have developers now and what is the next important thing? I think it’s security. No matter how many developers we have, security will always be the first thing we need to think about to build a software. That’s why we have this Bounty Program. After we released NEO Vulnerability Bounty Program, we’ve got at least 10 critical security reports from community. I really appreciate these reporters, they’re guardians of NEO ecosystem.

When we have enough developers, the next thing we need to think about is how to make them work together. It’s project management. When we push it forward, we found that there’re still 2 things missing. They’re version control and branching strategy.

One thing is version control and the other is about branching strategy. This is not a very hard topic, for the version control, there is a good material that we can refer to. It’s semantic versioning specification authored by Tom preston-Werner.

The second thing is about branching strategy. We have a very good material to refer to. Successful Git branching model written by Vincent Driessenn. I have used this model for years. It’s easy and convenient. Honestly, these 2 things I mentioned were discussed before, however, developers haven’t reach consensus yet. We need to get it done ASAP or developers still can’t work together easily.

After we have a good way to let developers work together. The next thing is setting our goal. So what’s our goal? Firstly, We need to define what our product is. Then we need to know how many functions it should have and what makes it a qualified product.

Currently Neo-cli is the most important product. It depends on these 3 projects, one of them is neo protocol, another one is neo-vm, the virtual machine of NEO, the other one is neo-plugins. These 3 parts makes neo-cli the most important project to guarantee the quality of neo protocol.

The main 2 functions are wallet and node. Wallet function makes it a sharp tool to help exchange deal with deposit and withdraw everyday. Node function makes it a basic infrastructure for us to build NEO network, which is the foundation of NEO smart economy.

How to find out the performance of neo-cli if it’s good enough to fulfill its goals? We need testings. In general, these 3 kinds of testings will be enough. They’re system tests, integration tests and unit tests.

We need to design a process to perform these tests systematically. Let me introduce the standard 29119. This Software Testing standard is an internationally agreed set of standards for software testing that can be used within any software development life cycle and by any organization. This is the basic structure of it. It has 3 parts, organization test process, test management process and dynamic test process. NGD is using this standard to organize our testings recently.

This is more detailed structure. I’ll give you 2 examples to explain test management process and dynamic test process for a little bit.

This is the test Planning Processes. For example, the improved consensus algorithm will be released soon. So the most urgent thing for us is to test PR#547 immediately. This process shows how we draw up the test plan.

This is dynamic test Processes. For example, Jeff Solinsky, one of our core developers, made a PR#579. It’s something different but helpful to the improved consensus algorithm. So we need to add this PR to our testing plans. We need to design a new test and prepare a new test environment for it. Then our developer can test it. If anything goes wrong, we also need to check the test incident reporting and find the issues. If no issues found, then it’s done.

These are 2 little examples that I want to show you how this standard works. Here is something bigger. We have unit tests in neo project now, however, we don’t have system testings for neo-cli yet which is the key of network’s stability. That’s why we designed a system tesing framework for neo-cli 3 months ago. For security reason, we haven’t made it open source yet. Currently we’re using it to test neo-cli.

The standard that I mentioned is more from theory level. We also need to think from the perspective of engineering practice. Here is CI/CD process. I think a lot of developers have already been familiar with it. We’ve received some advice about CI/CD from community. Some of them are quite perfect. I believe that if we implement these CI/CD plans can really improve the quality of neo-cli. Nevertheless, we don’t want to make things complicated at first, so we begin with simple things.

Travis CI and github. I think you have already known about it. What we’re doing is to integrate our system testing framework with travis and make system testing automatic.

I think this integration will improve the quality of neo-cli a lot.