We’ve worked hard to make the adoption of protocol changes as smooth as possible. These changes can be divided into two groups: those implemented in the system smart contracts and those implemented in the client.

Changes implemented by the system smart contracts are the easiest and quickest to adopt. Such changes must first be approved by a majority of network governors (key-pairs used to control network changes and mint tokens). Initially, Kowala will control all of these governors, but we expect to add more governors and distribute them to a large group of owners over time in order to decentralize control of the network. Once approved by the governors, changes to the system smart contracts can be activated nearly instantly on the network.

Changes implemented by the client, on the other hand, involve a slightly more complex process since active miners holding two thirds or more of the mining tokens must adopt an updated client within a set time period for the associated protocol changes to take effect. To smooth the adoption of proposed client changes, we have created a blockchain-specific self-update feature inspired by the Go selfupdate package (see https://github.com/rhysd/go-github-selfupdate). We feel this feature strikes a good balance between the independence of network owners and network stability.

The self-update feature is turned on by default for those users running the docker version of our software–expected to be the majority–and will automatically update and restart the client without any user intervention. However, users who download our published binaries or build from source also have access to this feature through a command-line option. Updates are enforced by the fact that a main net client whose major version lags behind the latest published release will refuse to start until an update is performed. Note that the self-update feature is always optional and the default source (which is our release repository) can be overridden.

Basic usage via the CLI

The kcoin client provides a mechanism of self update using kcoin update command. By default this command uses Kowala binary repository, so if you want to use that you don’t need any arguments. You can just run:

$ kcoin update

To update using you another binary repository you can use the -repository (or --repository) flag:

$ kcoin -repository http://myserver.local update

To check current and latest version available against a repository:

$ kcoin -repository http://myserver.local version

Under the hood

Versions are maintained using Semantic Versioning, operating system version and computer architecture.

When you run a kcoin update command against any repository, the client checks the list of files to see if a newer version is available. If it is, then it’s automatically downloaded.

Note that major versions of the binary are not automatically downloaded. We expect to release these infrequently, and they would constitute a major change to the communications protocols or other external interfaces. As a result, any major version updates must be performed manually.

Hosting your own repository

You can host your own binary repository using any public-facing HTTP server.

You will need to host all binaries, following the filename conventions above, and include an index.txt file in root folder that has a list of all files in repository. That’s pretty much all there is to it!