Smart contract d’un nantissement de titres sociaux

Abdoulaye Diallo
4 min readJun 20, 2019

--

Crédits : https://coingids.nl/smart-contracts/smart-contract-uitleg-bedrijven/

L’ordonnance n°2017–1674 du 8 décembre 2017 suivi de son décret d’application du 24 décembre 2018 permettent de représenter et transmettre des titres non cotés par des jetons (couramment appelés “token”) dans un dispositif électronique partagé (qui est l’expression choisie par le législateur pour désigner une blockchain).

Ils ouvrent également la possibilité de nantir ( = d’affecter en garantie d’une obligation) ces titres “tokenisés”, mettant ainsi en lumière un excellent cas d’usage des smart contract avec des tokens.

Voyons, par un exemple fictif (et volontairement simpliste), comment mettre en oeuvre le smart contract d’une telle opération.

Le contexte

Imaginons Alice, dirigeante d’une SAS, souhaitant emprunter une importante somme d’argent à Bob. En sus d’un taux d’intérêt attrayant, elle lui propose d’affecter en garantie du prêt une partie de ses actions : si elle n’arrive pas à rembourser la somme et payer les intérêts à l’échéance, Bob deviendra l’attributaire des titres d’Alice dont la valeur est égale au montant emprunté.

Mais ce dernier est réticent; il sait que la réalisation d’un nantissement est un processus long pouvant nécessiter l’intervention de différents tiers (avocats, huissiers, organismes de recouvrement…). La perspective éventuelle de devoir supporter tant d’efforts afin d’être remboursé le décourage à consentir au prêt.

Pour le convaincre néanmoins, Alice, qui est bien au fait des opportunités ouvertes par la récente législation, lui soumet le plan suivant :

  • d’abord, elle compte représenter ses titres sous la forme de tokens dans la blockchain publique Ethereum (par commodité, nous considérerons que celle-ci satisfait aux conditions énoncées à l’article R211–9–7 du code monétaire et financier);
  • ensuite, elle projette de conclure avec Bob un contrat de nantissement sur ces titres “tokenisés” et réaliser sa déclaration de nantissement conformément au formalisme disposé à l’article D211–10 du code monétaire et financier;
  • enfin, plutôt que de subordonner l’exécution du nantissement aux instruments traditionnels de notre système légal, qui décourage tant Bob, elle compte coder sa logique opérationnelle dans un smart contract qu’elle aura déployé sur la blockchain Ethereum. Ainsi, la force exécutoire de l’engagement reposera pour partie sur la blockchain.

Comment fonctionnerait un tel smart contract ?

Fonctionnement du contrat de nantissement intelligent

Paiement en stablecoin

Afin de tirer pleinement profit du smart contract, Alice et Bob auront convenu que le prêt et le remboursement s’effectueront en stablecoins, qui correspondent généralement à de la monnaie ordinaire (dollar, euro…) “tokenisée”.

Le paiement en token permet de circonscrire l’opération dans la blockchain, et ainsi de ne pas dépendre de l’intervention d’un tiers pour attester de la réalisation du transfert (avec tous les risques de faillibilité associés).

Affectation des titres tokenisés

Une fois le contrat signé, Alice transférera ses titres “tokenisés” à un smart contract qui jouera alors un rôle de tiers séquestre :

function affectationTitres (address Bob, uint256 nombreTitres) public onlyAlice {depots[Bob] = depots[Bob].add(nombreTitres);
tokenTitres.transferFrom(msg.sender, address(this), nombreTitres);
emit titresAffectes(Bob, nombreTitres);}
  • Ici, la fonction affectationTitres n’est utilisable que par Alice et prend notamment en “input” (pour paramètres) le nombre de titres affectés en garantie;
  • l’affectation des titres a lieu en quatrième ligne du programme (token.Titres…); en substance, la ligne de code dit “transfère le nombre de titres indiqué de l’utilisateur de cette fonction à l’adresse de ce smart contract”;
  • la dernière ligne est un “événement” diffusé dans la blockchain, indiquant que le transfert a bien eu lieu.

Remboursement du prêt

Avant que n’arrive la date d’échéance, Alice remboursera le prêt de la manière suivante:

function rembourserPret (uint 256 montantAPayer, address Bob) public onlyAlice {require(now <= dateEcheance || now < = dateMiseenDemeure + 8 days );
uint256 nombreTitres= depots[Bob];
tokenDai.transferFrom(msg.sender, address bob, montantAPayer);
tokenTitres.transfer(Alice, nombreTitres);
emit pretRemboursé();}
  • la fonction rembourserPret commence par vérifier qu’elle procède au remboursement dans le délai imparti: soit avant la date d’échéance convenue ou avant les 8 jours suivant la réception de la lettre de mise en demeure de payer (5° de l’article L211- 20 du CMF). Ce sera à Bob de renseigner cette date au smart contract une fois qu’il aura reçu son accusé de réception;
  • si ces conditions sont remplies, les stablecoins de Alice (ici des dai) seront transférés à l’adresse de Bob ;
  • puis Alice récupérera automatiquement les titres qu’elle avait affecté en garantie;
  • enfin, un événement sera diffusé informant que le remboursement a bien eu lieu.

Réalisation du nantissement

Si l’échéance est dépassée et qu’Alice n’a toujours pas remboursé Bob, même après les 8 jours suivant la réception de la lettre de mise en demeure, celui-ci pourra réaliser le nantissement:

function realisationNantissement (address Bob) public onlyBob {require( now > dateMiseenDemeure + 8 days );
uint256 nombreTitres= depots[Bob];
depots[Bob] = 0;
tokenTitres.Transfer(Bob, nombreTitres);
emit nantissementRealise (Bob);}
  • la fonction realisationNantissement commence donc par vérifier la date à laquelle Bob active le nantissement (après 8 jours suivant la réception de la LRAR);
  • le transfert a lieu en cinquième ligne : les titres séquestrés par le smart contract sont envoyés à Bob;
  • en dernière ligne, un événement est diffusé indiquant que le nantissement a bien eu lieu.

Automaticité relative des smart contract

On peut apercevoir à travers cet exemple une caractéristique méconnue des smart contract : ils ne s’exécutent pas de façon totalement automatique.

Les fonctions les composant doivent nécessairement être déclenchées par un compte privé : Alice doit activer la fonction affectationTitres et RembourserPret et Bob la fonction realisationNantissement.

Ensuite, les opérations codées à l’intérieur des fonctions (transfert des titres, transfert des stablecoins, etc), se réalisent automatiquement.

Le déclenchement peut néanmoins être automatisé en dehors de la blockchain (off-chain). Dans notre exemple, Bob pourrait coder un programme dans son propre ordinateur qui appellerait la fonction realisationNantissement du smart contract dès que le délai de 8 jours serait passé.

--

--