Smart-contract Solidity

Objectif

Présenter les connaissances de base pour la programmation de Smart-contract en Solidity

Documentation Solidity

Vous trouverez sur ReadTheDocs.io une documentation complète de Solidity (EN).

Outils

Un compilateur en ligne : Browser Solidity d'Ethereum

Un smart-contract Solidity est un code compilé, diffusé à l'ensemble des Virtual Machines (VM) du réseau d'une blockchain. Un Smart-contract peut être appelé pour toutes les adresses du réseau, et est executé sur toutes les VM du réseau.
L'allocation mémoire et les traitements sont facturés à l'appelant par les mineurs du réseau.

En déduire :
Un smart-contract étant public, il est nécessaire de gérer les droits d'accès aux fonctions.
L'execution d'un smart-contract étant facturé par le réseau, il est important d'optimiser les fonctions et les allocations mémoires.

Solidity est un language de programmation, à la syntaxe proche de JavaScript, permettant la rédaction de Smart-contract.
Solidity est actuellement le language le plus populaire de Smart-contract. Vous trouverez donc plus facilement d'informations et conseils en utilisant ce language.
L'utilisation de Solidity est également un gage de portabilité. En effet, des VM sur Bitcoin (Rootstock) et d'autres crypto-monnaies sont en cours de développement.

Un Smart-contract Solidity se rédige sous la même forme qu'une Class est C++ ou Java.

pragma solidity ^0.4.0;
contract NomDuSmartContract {

public type variables;
public type variables;
type variables;

Struct{
public type variables;
public type variables;
type variables;
}


// Modifiers
modifier nomDuModifier(){
if( test ) throw;
_;
}


// Events
event nomDeLEvent();


// Constructeurs
function NomDuSmartContract(type _argument, type _argument, ...) {

}


// Functions
function nomDeLaFunction(type _argument, type _argument, ...) nomDuModifier() returns (type argument) {


}




// Getter et Setter


L'ajout de commentaires se fait donc avec // (jusqu'à fin de ligne) soit avec /* ... */

Voici une liste non exhaustive des types disponibles :

Listes

Il est également possible de faire des listes.
uint[]

Structures

Enfin, il est possible de générer des structures.
Struct Member{
address memberAddress;
bool active;
}
Toutes les données d'un smart-contract sont enregistrées dans la blockchain (Ethereum, Bitcoin, ...).
Les données peuvent donc être lues par l'ensemble des noeuds du réseau.
Solidity gère la notion de public/private par rapport aux autres smart-contracts.
Les données ne sont appelables par d'autres smart-contracts que si elles sont tagguées "public" lors de leurs déclarations.

Enumérations

Documentation concernant les unités de mesures + les variables globales

Ethereum n'est pas une poubelle... aussi, il est important de libérer l'espace occupé par le Smart-contract. Ce nettoyage doit être prévu dès la conception du Smart-contract.
Pour faire un peu d'écolonomie, un intérêt simple peut-être de récupérer les fonds restants disponible sur l'adresse du smart-contract...