Rockchain has implemented the ERC20 standard and the related crowdsale contract with the following elements in its open source repository.

  1. ROK token buyers are guaranteed not to be tradeable in any second market during the ICO

We do that easily by checking if the crowdsale is complete or not before allowing any transfer of the ICO tokens.

In the function claim:

function claim() public{ require(isComplete()); // check if the crowdsale is completed

However, it is always possible for a new smart contract to buy N ROK tokens and to emit its own tokens, whose main property would be to give the attribution right for its owner of an exact equivalent ROK token. This design creates a proxy parallel market of ROK-equivalent tokens, that could be exchanged  without any knowledge of the ROK crowdsale contract.

A way to counter that would be to prevent any smart contract to buy ROK tokens. However, as Rockchain  designed a multisig contract interacting with the crowdsale smart contract, it would have thus limited considerably the ability for the multisig smart contract to interact with the crowdsale contract.

  1. KYC practices are directly implemented in our ROK ICO smart contract

For that purpose, we implemented a KYC list in our Crowdsale smart contract.

mapping (address => bool) KYClist;

At the end of the crowdsale, the contract owner is injecting the ethereum addresses who completed the KYC process using the following method:

function updateKYClist(address[] allowed) onlyOwner

       for (uint i = 0; i < allowed.length; i++) 
             if (KYClist[allowed[i]] == false) 
                     KYClist[allowed[i]] = true;

When the user will claim its ROK token, the contract can validate that the user correctly performed his KYC process:

require(KYClist[msg.sender] == true);

For ROK token buyers who purchased less than 3 ETH of ROK tokens, the KYC process is not mandatory. They can claim their tokens without having been registered in the KYC list through this code:

if(checkEthBalance(msg.sender) <= (3 ether))
 {            rok.transfer(msg.sender,balancesRokToken[msg.sender]);


Although enforcing KYC seems a good legal practice, we must recognize that token buyers are not really embracing KYC procedures in our case.

  1. Tokens are distributed whatever the results of the ICO are

We deliver the Rockchain infrastructure ROK tokens whatever the results of the ICO are. In case the ICO min cap was not reached, token buyers, getting their tokens anyway at the end of the crowdsale in our process, enter a volunteer support mode instead of a mere token purchaser mode. They might want in that case to support the effort to create value out of their tokens, and can choose to claim the totality of their invested ETH, or only part of it.

For those two possibilities, we either have the

function refund() public // Total refund, in case the crowdsale min cap was not reached


function partialRefund(uint256 value) public // Partial refund, let the contributer decide how much he lets to the project
  1. Crowdsale process: layering the infrastructure project

In the ROK token sale, the raised ICO amount is defining what version of the infrastructure is developed. The community chooses the features it wants to be developed by their investment. This could be improved using voting, with a vote weighted using the amount of token value purchased in ETH. The user would then vote for the features he you would like to have implemented, using a smart contract list of options previously defined in the White Paper.

5. The multisig Wallet

Rockchain multiSig wallet smart contract is used to protect the raised funds from malicious attacks during the crowdsale, and is also managing the later funds allocation using the multiple signatures of escrows.

Sébastien Jehan