Full Cycle Explanation

As mentioned above, a complete cycle consists of 5 stages:

  • Join / Leave
  • Voting
  • Assign Capital
  • Cycle
  • Distribution

In this page we explain which functions should be called an in which order to move the Kona Protocol forward in order to complete a full cycle and start the next one.

We have designed the Protocol to be decentralized, ensuring that all crucial functions are publicly accessible, allowing anyone to call them. Although of course, that won't be necessary as our backend will be calling all the necessary functions to move from one cycle to the next one.

After deploying the smart contracts, the Protocol starts in the Join/Leave period and in the cycle number 1. These are the functions that will be called in order to move through the different states of the Protocol and reach again the Join/Leave period (at this point, everything will be repeated).

To start out and understand what is needed to move forward we need to understand what a valid pool is

Protocol States & Moving through them

Understanding a valid Pool

The term valid pool varies according to the states we are in.

To have a valid pool in join/leave and voting - it needs to just have capital inside of it

Join/Leave Period

We start in the Join/Period - people can now add and remove capital from the pools.
To move into the join/leave period after a successful cycle we will need to have the pools from the last cycle that were valid distributed.

To simplify the process you can simply call

konaPools.canStartJoinLeave();

Then if this returns true you can move into it by calling:

konaPools.startJoinLeave();

Voting Period

To enter the Voting Period we need at least one valid pool. In this period the users vote for the oracles in the pools they want to allocate money to.

To simplify the process you can simply call

konaPools.canStartVoting();

Then if this returns true you can move into it by calling:

konaPools.startVoting();

Assign Capital

To start the assign capital we need to have votes and the time allocated for this period needs to have passed.

To simplify the process you can simply call

konaPools.canStartAssignCapital();

Then if this returns true you can move into it by calling:

konaPools.startAssignCapital();

At this point capital will be assigned to the oracles by calling this function on the wanted pool to assign the capital:

pool.assignCapitalAfterVoting(address [] oracles);

Cycle

To move to the cycle we need to have at least one valid pool that has at least one Oracle that accepted capital.

The first two days of the cycle pool-managers can assign idle capital (for example of oracles that didn't accept capital).

Oracles can now start giving out loans.

To check if you can move to this state use:

konaPools.canStartNewCycle();

And to start:

konaPools.startNewCycle();

Distribution

To start the distribution the 90 day cycle needs to have passed & a pool that has capital has to exist.
We still have the same logic to move into this status by calling:

konaPools.canStartDistribution();

And to start:

konaPools.startDistribution();

To actually distribute we need to call each pool with:

konaPools.distributeFunds(address _pool);

After the distribution a new JoinLeave Period can be started if all the pools are distributed.