Aller au contenu
Splitflow

La vie d'un paiement

Ce qui se passe entre l'arrivée de l'argent et le paiement de chacun.

D'un paiement à plusieurs

PayeurContrat de partageApprobations · gelDestinataires
  1. 1

    Quelqu'un paie le partage

    Des jetons arrivent à son adresse, comme pour tout portefeuille.

  2. 2

    La règle le divise

    Le contrat calcule chaque part ; personne ne saisit de montant.

  3. 3

    Les vérifications s'appliquent

    Les gros versements attendent des signatures ; un partage gelé attend aussi.

  4. 4

    Chacun est payé

    Une transaction paie tout le monde et inscrit un reçu.

Les trois règles, calculs à l'appui

Disons que 2 500 tUSDC arrivent.

Pourcentages fixes

Les parts totalisent exactement 100 %.

DestinatairePartReçoit
Événements et salles40 %1 000 tUSDC
Formateurs des ateliers30 %750 tUSDC
Bourse du hackathon20 %500 tUSDC
Trésorerie du club10 %250 tUSDC

Points de contribution

Chaque part = points ÷ total des points.

DestinatairePartReçoit
Léa Tremblay34 / 97876,288661 tUSDC
Omar Haddad28 / 97721,649484 tUSDC
Priya Nair22 / 97567,010309 tUSDC
Jonas Weber13 / 97335,051546 tUSDC

Couvrir un coût d'abord

Un montant fixe d'abord, puis la règle.

DestinatairePartReçoit
Loyer commun—350 tUSDC
Collectif de maraîchers45 %967,5 tUSDC
Boulangerie Levain & Mie25 %537,5 tUSDC
Torréfacteur du Nord20 %430 tUSDC
Fonds communautaire10 %215 tUSDC

Poussières d'arrondi

Les parts sont arrondies vers le bas ; le reste va à la plus grande part, indiqué sur le reçu.

Approbations et gel

Des approbations pour les gros versements

Au-delà d'un seuil, un versement attend assez de signataires, p. ex. 2 sur 3 dès 2 000 tUSDC.

Gel d'urgence

Le propriétaire ou un approbateur peut bloquer les versements. Les paiements sont retenus jusqu'au dégel.

La piste d'audit

Chaque événement, avec heure, auteur, montant et hash de transaction. Exportable en CSV.

Pour les développeurs

La démo tourne dans votre navigateur ; sa couche de données reflète le contrat, prête pour wagmi et viem.

Voir l'interface du contrat

Interface du contrat (esquisse)

interface ISplit {
  // Rule: fixed basis points (sum 10_000) or points
  function recipients() external view returns (address[] memory, uint256[] memory);
  function coverFirst() external view returns (address, uint256);

  // Anyone can pay the split like any wallet
  receive() external payable;

  // Pays every recipient their share of what is waiting.
  // Rounds down; the dust goes to the largest share.
  function distribute(uint256 amount) external;

  // Payouts >= threshold need `required` approvals
  function propose(uint256 amount) external returns (uint256 id);
  function approve(uint256 id) external; // executes on the last approval

  function freeze() external;   // owner or approver
  function unfreeze() external;

  event PaymentReceived(address indexed from, uint256 amount);
  event Distributed(uint256 amount, address[] to, uint256[] amounts);
  event Frozen(address by);
}

La couche de données de la démo

  • src/lib/demo/types.tspartages, règles et journal, en unités de base
  • src/lib/demo/allocate.tsla division exacte, poussières comprises
  • src/lib/demo/ops.tspaiement, versement, approbation, gel
  • src/lib/demo/chain.tsportefeuille, blocs et échecs simulés
Lire le code sur GitHub

Voyez-le en mouvement

Lancer la démo