Aller au contenu
TimeVault

Une promesse, avec l'horloge incluse

Ce qui se passe dans un coffre, du verrouillage à la réclamation.

La vie d'un coffre

  1. 1. Verrouiller

    Le financeur dépose le montant complet dans le coffre.

  2. 2. Attendre

    Rien à faire. Tout le monde voit quoi se débloque quand.

  3. 3. Débloquer

    Les dates passent, les fonds se débloquent. Sans transaction.

  4. 4. Réclamer

    La personne bénéficiaire retire le débloqué, quand elle veut.

Les réviseurs approuvent (facultatif)Révoquer (facultatif)

Trois calendriers, un exemple

Une bourse de 12 000 tUSDC, libérée de trois façons.

  • À une date

    débloqué(t) = t ≥ date ? total : 0

    12 000 au jour 365

  • Paliers mensuels

    Tranches égales ; les restes d'arrondi vont à la dernière.

    1 000 le même jour chaque mois

  • En continu, après une attente

    Après l'attente : total × (t − début) ÷ (fin − début).

    3 000 au mois 3, puis environ 33 par jour

Attente, révocation et réviseurs

Période d'attente
Un délai avant tout déblocage.
Révocation
Le débloqué reste réclamable ; seule la part verrouillée revient au financeur.
Approbation des réviseurs
N réviseurs nommés sur M approuvent avant toute réclamation.
Reste à la personne bénéficiaire · 4 964 tUSDCRevient au financeur · 7 035 tUSDC

Schéma : révocation au mois 5 d'une bourse de 12 mois. Le débloqué reste à la personne bénéficiaire, le reste revient au financeur.

Pourquoi réclamer plutôt qu'être payé

Un contrat ne déplace pas l'argent de lui-même. Réclamer laisse choisir le moment ; un mois oublié attend, tout simplement.

Le temps sur une blockchain

Un contrat lit l'horodatage du bloc, précis à la seconde. L'horloge de la démo avance ; « Réinitialiser » la ramène à aujourd'hui.

Pour les développeurs

La couche de données de la démo a la forme du contrat : de vrais appels ne toucheraient pas l'interface.

Voir l'interface du contrat

Interface du contrat (esquisse)

interface ITimeVault {
    struct Schedule { uint8 kind; uint64 start; uint64 cliff; uint64 end; uint16 steps; }

    /// Deploys a vault and pulls `total` of `token` from the funder.
    function lock(address recipient, IERC20 token, uint256 total,
                  Schedule calldata schedule, bool revocable,
                  address[] calldata reviewers, uint8 required)
        external returns (address vault);

    function unlocked(uint64 at) external view returns (uint256);
    function claimable() external view returns (uint256);

    function claim() external;   // recipient only
    function approve() external; // named reviewers only
    function revoke() external;  // funder only, if revocable

    event Locked(address indexed funder, address indexed recipient, uint256 total);
    event Claimed(address indexed recipient, uint256 amount);
    event Approved(address indexed reviewer, uint8 count);
    event Revoked(uint256 kept, uint256 returned);
}

Comment la démo la reproduit

src/lib/demo/vesting.ts
unlocked() et claimable(), en fonctions pures.
src/lib/demo/ops.ts
Les changements d'état de lock, claim, approve, revoke.
src/lib/demo/chain.ts
Portefeuille simulé, attente, confirmation ou annulation.
src/lib/demo/store.ts
L'état sauvegardé et l'horloge de démo.

Voyez-le se débloquer

Lancer la démo