Cas d'usage
Explorer
Docs
Tarifs

Protocole Organigram

Le protocole Organigram est un framework Solidity pour construire des systèmes de gouvernance incorruptibles sur Ethereum.

En assemblant trois concepts simples, il permet l'exécution automatisée de n'importe quelle règle métier de manière décentralisée et auditable :

Pour une documentation complète, consultez notre site officiel.

Installation

Installez le paquet NPM avec :


# npm:
npm install @organigram/protocol
# pnpm:
pnpm add @organigram/protocol

Utilisation

Avec ce paquet, vous pouvez interagir directement avec les smart contracts du protocole Organigram dans votre code Solidity et JavaScript, ou utiliser nos clients officiels pour bâtir vos propres applications sur le protocole.

Développement

Installer Foundry

Ce paquet utilise Foundry (Forge/Anvil) pour le développement local. Installez la chaîne d'outils Foundry avec :


curl -L https://foundry.paradigm.xyz | bash
foundryup

Démarrer un nœud local

Démarrez un nœud local de développement avec Anvil :


pnpm anvil

Compiler les contrats

Compilez les contrats avec :


pnpm build

Déployer les contrats

Déployez les contrats du protocole sur une liste de réseaux :


pnpm deploy:protocol <comma-separated list of network names or chain ids>

Nécessite un fichier .env avec MNEMONIC et NEXT_PUBLIC_THIRDWEB_CLIENT_ID. Le compte de déploiement doit disposer de fonds suffisants sur chaque réseau cible pour couvrir les frais de déploiement.

Par exemple :


pnpm deploy:protocol mainnet,base,11155111

Pour déployer sur le nœud Anvil local :


pnpm deploy:protocol anvil

Par défaut, les URL RPC des réseaux sont construites à partir de Thirdweb. Vous pouvez remplacer celle d'un réseau donné avec RPC_URL_<chain id>, ou RPC_URL_<network name>, par exemple RPC_URL_11155111.

Le script de déploiement accepte aussi une option --resume facultative pour reprendre la dernière exécution si le déploiement a échoué.

Contribuer

Nous recherchons des développeurs et testeurs Solidity pour garder nos contrats sûrs et à jour. Ouvrez des tickets sur notre page GitHub, forkez et créez des pull requests, ou contactez-nous sur notre Discord ou à hello@organigram.ai.

Client

Le OrganigramClient est le point d'entrée du protocole sur chaque chaîne. Il tient le registre des types de procédures et déploie organes, actifs et procédures comme clones de leurs implémentations, un par un ou sous forme d'organigramme complet en une seule transaction. L'adresse d'un clone dépend de son sel et du compte qui le déploie, si bien que personne ne peut prendre une adresse prédite par quelqu'un d'autre.

OrganigramClient

Point d'entrée du protocole sur une chaîne : le registre des types de procédures, et la fabrique des organes, actifs et procédures, déployés comme clones de leurs implémentations.

Constructor

constructor(string cid, address trustedForwarder, bytes32 salt);

OrganigramClient.asset

Implémentation dont les actifs sont clonés.

Signature

function asset() view returns (address);

OrganigramClient.deployAsset

Déployer un clone d'actif unique et l'initialiser en tant que token ERC-20.

Signature

function deployAsset(string name, string symbol, uint256 initialSupply, bytes32 salt) returns (address clone);

Paramètres

NomTypeDescription
namestringNom du token.
symbolstringSymbole du token.
initialSupplyuint256Approvisionnement initial du token versé au destinataire.
saltbytes32Sel de clone déterministe.
Retourne
NomTypeDescription
cloneaddressAdresse de la copie de l'actif déployé.

OrganigramClient.deployAssets

Déployer plusieurs clones d'actifs en un seul appel.

Signature

function deployAssets((string, string, uint256, bytes32, bool, address)[] batch) returns (address[] clones);

Paramètres

NomTypeDescription
batch(string, string, uint256, bytes32, bool, address)[]Données de déploiement des actifs.
Retourne
NomTypeDescription
clonesaddress[]Adresses des clones d'actifs déployés.

OrganigramClient.deployOrgan

Déployer un clone d'organe unique et l'initialiser.

Signature

function deployOrgan(address[] _permissionAddresses, bytes2[] _permissionValues, string cid, (address, string)[] entries, bytes32 salt) returns (address clone);

Paramètres

NomTypeDescription
_permissionAddressesaddress[]Adresses recevant des permissions sur l'organe.
_permissionValuesbytes2[]Masques de permissions alignés sur _permissionAddresses.
cidstringCID de métadonnées attribué à l'organe déployé.
entries(address, string)[]Entrées initiales stockées dans l'organe.
saltbytes32Sel de clone déterministe.
Retourne
NomTypeDescription
cloneaddressAdresse du clone d'organe déployé.

OrganigramClient.deployOrganigram

Déployer un organigramme complet en une transaction.

Signature

function deployOrganigram((address[], bytes2[], string, (address, string)[], bytes32)[] organBatch, (string, string, uint256, bytes32, bool, address)[] assetBatch, (address, bytes, bytes32)[] procedureBatch) returns (address[] organsDeployed, address[] assetsDeployed, address[] proceduresDeployed);

Paramètres

NomTypeDescription
organBatch(address[], bytes2[], string, (address, string)[], bytes32)[]Données de déploiement des organes.
assetBatch(string, string, uint256, bytes32, bool, address)[]Données de déploiement des actifs.
procedureBatch(address, bytes, bytes32)[]Données de déploiement des procédures.
Retourne
NomTypeDescription
organsDeployedaddress[]Adresses des organes déployés.
assetsDeployedaddress[]Adresses des actifs déployés.
proceduresDeployedaddress[]Adresses des procédures déployées.

OrganigramClient.deployOrgans

Déployer plusieurs clones d'organes en un seul appel.

Signature

function deployOrgans((address[], bytes2[], string, (address, string)[], bytes32)[] batch) returns (address[] clones);

Paramètres

NomTypeDescription
batch(address[], bytes2[], string, (address, string)[], bytes32)[]Données de déploiement des organes.
Retourne
NomTypeDescription
clonesaddress[]Adresses des clones d'organes déployés.

OrganigramClient.deployProcedure

Déployer un clone de procédure à partir d'une implémentation de procédure enregistrée.

Signature

function deployProcedure(address procedureType, bytes data, bytes32 salt) returns (address procedure);

Paramètres

NomTypeDescription
procedureTypeaddressImplémentation de procédure enregistrée à cloner.
databytesCalldata d'initialisation optionnelle exécuté immédiatement après le déploiement.
saltbytes32Sel de clone déterministe.
Retourne
NomTypeDescription
procedureaddressAdresse du clone de procédure déployé.

OrganigramClient.deployProcedures

Déployer plusieurs clones de procédures en un seul appel.

Signature

function deployProcedures((address, bytes, bytes32)[] batch) returns (address[] created);

Paramètres

NomTypeDescription
batch(address, bytes, bytes32)[]Données de déploiement des procédures.
Retourne
NomTypeDescription
createdaddress[]Adresses des clones de procédures déployés.

OrganigramClient.equityToken

Implémentation dont les jetons de capital sont clonés.

Signature

function equityToken() view returns (address);

OrganigramClient.isTrustedForwarder

Retourne si une adresse est le forwarder ERC-2771 de confiance.

Signature

function isTrustedForwarder(address forwarder) view returns (bool);

Paramètres

NomTypeDescription
forwarderaddressL'adresse du forwarder à tester.

OrganigramClient.organ

Implémentation dont les organes sont clonés.

Signature

function organ() view returns (address);

OrganigramClient.owner

Compte autorisé à enregistrer des types de procédures.

Signature

function owner() view returns (address);

OrganigramClient.proceduresRegistry

Organe listant les types de procédures enregistrés.

Signature

function proceduresRegistry() view returns (address);

OrganigramClient.registerProcedures

Enregistrer les implémentations de procédures prises en charge dans le registre des procédures.

Signature

function registerProcedures((address, string)[] entries);

Paramètres

NomTypeDescription
entries(address, string)[]Entrées du registre qui pointent vers des implémentations de procédures valides.

OrganigramClient.trustedForwarder

Retourne le forwarder ERC-2771 de confiance utilisé par ce contrat.

Signature

function trustedForwarder() view returns (address);

OrganigramClient.assetDeployed

Un actif a été déployé.

Event

event assetDeployed(address asset);

OrganigramClient.organDeployed

Un organe a été déployé.

Event

event organDeployed(address organ);

OrganigramClient.procedureDeployed

Une procédure a été déployée à partir d'un type de procédure enregistré.

Event

event procedureDeployed(address procedureType, address procedure);

Organes

Un organe est un groupe : un registre d'entrées, chacune une adresse, une référence de document ou les deux, une liste de permissions et un solde d'ether et de jetons. Chaque modification exige une permission détenue par l'appelant. Les organes peuvent aussi appeler des contrats extérieurs, mais uniquement les appels listés dans leur liste blanche d'exécution.

Organ

Un groupe d'une organisation : un registre d'entrées, chacune une adresse, une référence de document ou les deux, une liste de permissions et un solde d'ether et de jetons.

Chaque modification exige une permission détenue par l'appelant. Dans une organisation gouvernée, ce sont les procédures qui détiennent ces permissions, afin que tout changement passe par une décision.

Il possède toutes les fonctions et tous les événements de IOrgan, ainsi que ceux ci-dessous.

Constructor

constructor();

Organ.initialize

Initialiser un organe fraîchement cloné.

Signature

function initialize(address[] permissionAddresses, bytes2[] permissionValues, string cid, (address, string)[] entries, address forwarder);

Paramètres

NomTypeDescription
permissionAddressesaddress[]
permissionValuesbytes2[]
cidstringIdentifiant de contenu décrivant les métadonnées de l'organe.
entries(address, string)[]Entrées initiales stockées dans l'organe.
forwarderaddress

Organ.isTrustedForwarder

Retourne si une adresse est le forwarder ERC-2771 de confiance.

Signature

function isTrustedForwarder(address forwarder) view returns (bool);

Paramètres

NomTypeDescription
forwarderaddressL'adresse du forwarder à tester.

Organ.onERC1155BatchReceived

Hook ERC-1155 acceptant des jetons. Les jetons ERC-1155 ne sont pas enregistrés par l'organe.

Signature

function onERC1155BatchReceived(address arg0, address arg1, uint256[] arg2, uint256[] arg3, bytes arg4) returns (bytes4);

Organ.onERC1155Received

Hook ERC-1155 acceptant un jeton. Les jetons ERC-1155 ne sont pas enregistrés par l'organe.

Signature

function onERC1155Received(address arg0, address arg1, uint256 arg2, uint256 arg3, bytes arg4) returns (bytes4);

Organ.onERC721Received

ERC-721 hook recording a token sent to the organ.

Signature

function onERC721Received(address operator, address from, uint256 tokenId, bytes arg3) returns (bytes4);

Organ.supportsInterface

Indiquer si l'organe prend en charge une interface : ERC-165, IOrgan, et les récepteurs ERC-777, ERC-721 et ERC-1155.

Signature

function supportsInterface(bytes4 interfaceId) view returns (bool);

Organ.tokensReceived

ERC-777 hook recording tokens sent to the organ.

Signature

function tokensReceived(address operator, address from, address to, uint256 amount, bytes arg4, bytes arg5);

Organ.transferCoins

Envoyer des jetons ERC-20 détenus par l'organe. Nécessite la permission WITHDRAW_COINS .

Le second paramètre est ignoré.

Signature

function transferCoins(address token, address arg1, address to, uint256 amount);

Organ.transferCollectible

Envoyer un jeton ERC-721 détenu par l'organe. Nécessite la permission WITHDRAW_COLLECTIBLES .

Le second paramètre est ignoré.

Signature

function transferCollectible(address token, address arg1, address to, uint256 tokenId);

Organ.transferEther

Envoyer de l'ether détenu par l'organe. Nécessite la permission WITHDRAW_ETHER .

Signature

function transferEther(address to, uint256 value);

Organ.trustedForwarder

Retourne le forwarder ERC-2771 de confiance utilisé par ce contrat.

Signature

function trustedForwarder() view returns (address);

Organ.etherTransferred

L'organe a envoyé de l'ether.

Event

event etherTransferred(address from, address to, uint256 amount);

Organ.Initialized

Déclenché quand le contrat a été initialisé ou réinitialisé.

Event

event Initialized(uint64 version);

IOrgan

Les fonctions que les organes exposent aux procédures et aux applications : entrées, permissions, métadonnées et appels en liste blanche.

IOrgan.addEntries

Ajouter des entrées à l'annuaire de l'organe.

Signature

function addEntries((address, string)[] entries) returns (uint256[] indexes);

Paramètres

NomTypeDescription
entries(address, string)[]Entrées à ajouter.
Retourne
NomTypeDescription
indexesuint256[]Index attribués aux entrées nouvellement insérées.

IOrgan.addPermission

Accorder des permissions à une adresse ou à un procédé.

Signature

function addPermission(address permissionAddress, bytes2 permissionValue);

Paramètres

NomTypeDescription
permissionAddressaddressAdresse recevant le masque de bits de permission.
permissionValuebytes2Masque de bits de permission à accorder.

IOrgan.executeWhitelisted

Exécuter une appel externe qui a été approuvé par une politique de liste blanche.

L'organe valide l'appel contre la politique configurée pour target + selector avant de faire passer l'appel. Chaque contrainte configurée doit passer.

Signature

function executeWhitelisted(address target, uint256 value, bytes data) returns (bytes result);

Paramètres

NomTypeDescription
targetaddressLe contrat externe à appeler.
valueuint256La quantité de jeton natif à transférer avec l'appel.
databytesLes données calldata encodées transférées à target.
Retourne
NomTypeDescription
resultbytesLes données brutes de retour produites par l'appel externe.

IOrgan.getCallPolicy

Retour d'informations synthétiques sur une politique de appel.

Signature

function getCallPolicy(address target, bytes4 selector) view returns (bool enabled, uint256 constraintsLength, uint256 whitelistedAddressesLength);

Paramètres

NomTypeDescription
targetaddressLe contrat externe clé par la politique.
selectorbytes4Le sélecteur de fonction clé par la politique.
Retourne
NomTypeDescription
enabledboolIndique si la politique existe et est active.
constraintsLengthuint256Le nombre de contraintes de paramètres configurées sur la politique.
whitelistedAddressesLengthuint256Le nombre d'adresses stockées dans la liste blanche de la politique.

IOrgan.getCallPolicyConstraint

Retourner une contrainte d'un paramètre d'une politique d'appel.

Signature

function getCallPolicyConstraint(address target, bytes4 selector, uint256 index) view returns (uint8 paramIndex, uint8 constraintType, bytes32 minValue, bytes32 maxValue, bytes32 exactValue);

Paramètres

NomTypeDescription
targetaddressLe contrat externe clé par la politique.
selectorbytes4Le sélecteur de fonction clé par la politique.
indexuint256La position de la contrainte à l'intérieur de la politique.
Retourne
NomTypeDescription
paramIndexuint8L'index zéro basé du paramètre calldata contraint par cette règle.
constraintTypeuint8Le type de validation appliqué à ce paramètre.
minValuebytes32La borne inférieure utilisée par les contraintes de plage.
maxValuebytes32La borne supérieure utilisée par les contraintes de plage.
exactValuebytes32La valeur exacte utilisée par les contraintes de correspondance exacte.

IOrgan.getEntry

Retournez un élément stocké.

Signature

function getEntry(uint256 index) view returns ((address, string) entry);

Paramètres

NomTypeDescription
indexuint256Index de l'élément à lire.
Retourne
NomTypeDescription
entry(address, string)Chargement de l'élément stocké index.

IOrgan.getEntryIndexForAddress

Trouvez l'index d'une adresse d'élément.

Signature

function getEntryIndexForAddress(address addr) view returns (uint256 index);

Paramètres

NomTypeDescription
addraddressL'adresse stockée dans l'entrée.
Retourne
NomTypeDescription
indexuint256Index de l'entrée associée à addr.

IOrgan.getOrgan

Retourner le résumé principal de l'organe.

Signature

function getOrgan() view returns (string cid, uint256 permissionsLength, uint256 entriesLength, uint256 entriesCount, bytes4 interfaceId);

Retourne

NomTypeDescription
cidstringCID des métadonnées actuellement attaché à l'organe.
permissionsLengthuint256Nombre d'entrées de permission configurées sur l'organe.
entriesLengthuint256Nombre de places d'entrée allouées.
entriesCountuint256Nombre d'entrées actives.
interfaceIdbytes4Identifiant de l'interface ERC-165 implémentée par l'organe.

IOrgan.getPermission

Retourner une entrée de permission par index.

Signature

function getPermission(uint256 index) view returns (address addr, bytes2 perms);

Paramètres

NomTypeDescription
indexuint256Index de l'entrée de permission à lire.
Retourne
NomTypeDescription
addraddressAdresse détenant la permission.
permsbytes2Masque de bits de permission détenue addr.

IOrgan.getPermissions

Retournez le masque de bits de permission assigné à une adresse.

Signature

function getPermissions(address addr) view returns (bytes2 perms);

Paramètres

NomTypeDescription
addraddressAdresse à inspecter.
Retourne
NomTypeDescription
permsbytes2Masque de bits de permission actuellement assigné à addr.

IOrgan.initialize

Initialiser un organe fraîchement cloné.

Signature

function initialize(address[] procedures, bytes2[] permissions, string cid, (address, string)[] entries, address trustedForwarder);

Paramètres

NomTypeDescription
proceduresaddress[]Adresses qui reçoivent des permissions sur l'organe.
permissionsbytes2[]Masques de permissions alignés sur procedures.
cidstringIdentifiant de contenu décrivant les métadonnées de l'organe.
entries(address, string)[]Entrées initiales stockées dans l'organe.
trustedForwarderaddressForwarder ERC-2771 de confiance de l'organe.

IOrgan.isCallPolicyWhitelistedAddress

Vérifiez si une adresse figure dans la liste blanche d'une politique d'appel.

Signature

function isCallPolicyWhitelistedAddress(address target, bytes4 selector, address candidate) view returns (bool);

Paramètres

NomTypeDescription
targetaddressLe contrat externe clé par la politique.
selectorbytes4Le sélecteur de fonction clé par la politique.
candidateaddressL'adresse à tester contre la liste blanche.

IOrgan.removeCallPolicy

Supprimez une politique d'appel externe précédemment configurée.

Signature

function removeCallPolicy(address target, bytes4 selector);

Paramètres

NomTypeDescription
targetaddressLe contrat externe dont la politique doit être retirée.
selectorbytes4Le sélecteur de fonction dont la politique doit être retirée.

IOrgan.removeEntries

Supprimer les entrées du répertoire organ.

Signature

function removeEntries(uint256[] indexes);

Paramètres

NomTypeDescription
indexesuint256[]Indices à supprimer.

IOrgan.removePermission

Retirer tous les bits de permission d'une adresse ou procédure.

Signature

function removePermission(address permissionAddress);

Paramètres

NomTypeDescription
permissionAddressaddressAdresse dont les permissions doivent être retirées.

IOrgan.replaceEntry

Remplacer une entrée à un index donné.

Signature

function replaceEntry(uint256 index, (address, string) entry);

Paramètres

NomTypeDescription
indexuint256Index de l'entrée à remplacer.
entry(address, string)Nouvelle entrée stockée à index.

IOrgan.replacePermission

Remplacer un détenteur de permission par un autre.

Signature

function replacePermission(address oldPermission, address newPermission, bytes2 newPermissionValue);

Paramètres

NomTypeDescription
oldPermissionaddressAdresse actuellement détentrice de la permission.
newPermissionaddressAdresse qui devrait recevoir la permission à la place.
newPermissionValuebytes2Masque de permission assigné à newPermission.

IOrgan.setCallPolicy

Configurer une politique de liste blanche pour un appel externe.

Les politiques sont indexées par target + selector. Chaque politique peut contraindre les arguments de calldata avec NONE, EXACT, RANGE, SELF, ou WHITELISTED_ADDRESS. La liste blanche n'est consultée que par les contraintes qui utilisent WHITELISTED_ADDRESS.

Signature

function setCallPolicy(address target, bytes4 selector, (uint8, uint8, bytes32, bytes32, bytes32)[] constraints, address[] whitelistedAddresses);

Paramètres

NomTypeDescription
targetaddressLe contrat externe que l'organe peut appeler.
selectorbytes4Le sélecteur de fonction autorisé sur target.
constraints(uint8, uint8, bytes32, bytes32, bytes32)[]Les contraintes de calldata à satisfaire pour exécuter l'appel.
whitelistedAddressesaddress[]Les adresses acceptées par les contraintes fondées sur la liste blanche.

IOrgan.updateCid

Mettre à jour le CID des métadonnées de l'organe.

Signature

function updateCid(string cid);

Paramètres

NomTypeDescription
cidstringNouvel identifiant de contenu décrivant l'organe.

OrganLibrary

Organisation du stockage et règles des organes, liées dans le contrat Organ .

OrganLibrary.PERMISSION_ADD_ENTRIES

Permission d'ajouter des entrées.

Signature

function PERMISSION_ADD_ENTRIES() view returns (bytes2);

OrganLibrary.PERMISSION_ADD_PERMISSIONS

Permission d'accorder des permissions.

Signature

function PERMISSION_ADD_PERMISSIONS() view returns (bytes2);

OrganLibrary.PERMISSION_EXECUTE_WHITELISTED

Permission de faire appeler par l'organe un contrat extérieur en liste blanche.

Signature

function PERMISSION_EXECUTE_WHITELISTED() view returns (bytes2);

OrganLibrary.PERMISSION_MANAGE_EXECUTION_WHITELIST

Permission de modifier les appels que l'organe peut faire à des contrats extérieurs.

Signature

function PERMISSION_MANAGE_EXECUTION_WHITELIST() view returns (bytes2);

OrganLibrary.PERMISSION_REMOVE_ENTRIES

Permission de retirer des entrées.

Signature

function PERMISSION_REMOVE_ENTRIES() view returns (bytes2);

OrganLibrary.PERMISSION_REMOVE_PERMISSIONS

Permission de révoquer des permissions.

Signature

function PERMISSION_REMOVE_PERMISSIONS() view returns (bytes2);

OrganLibrary.PERMISSION_UPDATE_METADATA

Permission de remplacer la référence de métadonnées.

Signature

function PERMISSION_UPDATE_METADATA() view returns (bytes2);

OrganLibrary.PERMISSION_WITHDRAW_COINS

Permission d'envoyer des jetons détenus par l'organe.

Signature

function PERMISSION_WITHDRAW_COINS() view returns (bytes2);

OrganLibrary.PERMISSION_WITHDRAW_COLLECTIBLES

Permission d'envoyer des jetons ERC-721 détenus par l'organe.

Signature

function PERMISSION_WITHDRAW_COLLECTIBLES() view returns (bytes2);

OrganLibrary.PERMISSION_WITHDRAW_ETHER

Permission d'envoyer de l'ether détenu par l'organe.

Signature

function PERMISSION_WITHDRAW_ETHER() view returns (bytes2);

OrganLibrary.callPolicyRemoved

L'organe ne peut plus appeler une fonction d'un contrat extérieur.

Event

event callPolicyRemoved(address indexed caller, address indexed target, bytes4 indexed selector);

OrganLibrary.callPolicySet

L'organe peut désormais appeler une fonction d'un contrat extérieur.

Event

event callPolicySet(address indexed caller, address indexed target, bytes4 indexed selector);

OrganLibrary.callPolicyWhitelistedAddressAdded

Une adresse a été autorisée comme argument d'un appel en liste blanche.

Event

event callPolicyWhitelistedAddressAdded(bytes32 indexed policyKey, address indexed candidate);

OrganLibrary.callPolicyWhitelistedAddressRemoved

Une adresse n'est plus autorisée comme argument d'un appel en liste blanche.

Event

event callPolicyWhitelistedAddressRemoved(bytes32 indexed policyKey, address indexed candidate);

OrganLibrary.cidUpdated

La référence de métadonnées de l'organe a changé.

Event

event cidUpdated(address from, string cid);

OrganLibrary.coinsReceived

L'organe a reçu des jetons.

Event

event coinsReceived(address operator, address from, address to, uint256 amount);

OrganLibrary.coinsTransferred

L'organe a envoyé des jetons.

Event

event coinsTransferred(address operator, address from, address to, uint256 amount);

OrganLibrary.collectibleReceived

L'organe a reçu un jeton ERC-721.

Event

event collectibleReceived(address operator, address from, uint256 tokenId);

OrganLibrary.collectibleTransferred

L'organe a envoyé un jeton ERC-721.

Event

event collectibleTransferred(address operator, address to, uint256 tokenId);

OrganLibrary.entryAdded

Une entrée a été ajoutée à l'organe.

Event

event entryAdded(address from, uint256 index, address addr, string cid);

OrganLibrary.entryRemoved

Une entrée a été retirée de l'organe.

Event

event entryRemoved(address from, uint256 index);

OrganLibrary.etherReceived

L'organe a reçu de l'ether.

Event

event etherReceived(address from, uint256 amount);

OrganLibrary.etherTransferred

L'organe a envoyé de l'ether.

Event

event etherTransferred(address from, address to, uint256 amount);

OrganLibrary.permissionAdded

Une adresse a reçu des permissions sur l'organe.

Event

event permissionAdded(address from, address permissionAddress, bytes2 permissionValue);

OrganLibrary.permissionRemoved

Une adresse a perdu ses permissions sur l'organe.

Event

event permissionRemoved(address from, address permissionAddress);

OrganLibrary.whitelistedExecution

L'organe a effectué un appel en liste blanche vers un contrat extérieur.

Event

event whitelistedExecution(address indexed caller, address indexed target, bytes4 indexed selector, uint256 value);

Procédures

Une procédure permet aux membres de certains organes de modifier d'autres organes par des propositions. Les proposants soumettent une liste d'opérations ; avec modération, les modérateurs la présentent ou la bloquent ; les décideurs l'adoptent ou la rejettent, et l'adoption exécute les opérations. Chaque action a une variante …BySig qui vérifie une signature EIP-712, afin qu'un relais puisse la soumettre au nom du signataire.

Procedure

Permet aux membres de certains organes de modifier d'autres organes par des propositions : des listes d'opérations que les proposants soumettent, que les modérateurs peuvent présenter ou bloquer, et que les décideurs adoptent ou rejettent.

L'adoption exécute les opérations. Chaque action a une variante …BySig vérifiant une signature EIP-712, afin qu'un relais puisse la soumettre au nom du signataire.

Constructor

constructor();

Procedure.applyProposal

Appliquer la proposition.

Signature

function applyProposal(uint256 proposalKey);

Procedure.applyProposalBySig

Régler une proposition avec une application signée par un compte et relayée par un autre.

Signature

function applyProposalBySig(uint256 proposalKey, uint256 nonce, uint256 deadline, bytes signature);

Procedure.blockProposal

Bloquer une proposition en tant que modérateur, avec un motif.

Signature

function blockProposal(uint256 proposalKey, string reason);

Procedure.blockProposalBySig

Bloquer une proposition avec un blocage signé par un modérateur, relayé par n'importe quel compte.

Signature

function blockProposalBySig(uint256 proposalKey, string reason, uint256 nonce, uint256 deadline, bytes signature);

Procedure.eip712Domain

retourne les champs et valeurs qui décrivent le séparateur de domaine utilisé par ce contrat pour la signature EIP-712.

Signature

function eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions);

Procedure.getExecutionContext

Permet à la cible d'une opération d'identifier de façon sûre la proposition en cours d'application.

Signature

function getExecutionContext() view returns (bool isApplying, uint256 proposalKey, address proposalCreator);

Procedure.getNonce

Lire le prochain nonce de signature d'un compte.

Signature

function getNonce(address account) view returns (uint256);

Procedure.getProcedure

Lire la référence de métadonnées, les rôles et le nombre de propositions de la procédure.

Signature

function getProcedure() view returns (string cid, address proposers, address moderators, address deciders, bool withModeration, uint256 proposalsLength, bytes4 interfaceId);

Procedure.getProposal

Lire une proposition.

Signature

function getProposal(uint256 proposalKey) view returns ((address, string, string, bool, bool, bool, bool, (uint256, address, bytes, uint256, bool)[]));

Procedure.initialize

Initialiser un clone de procédure avec ses rôles.

Signature

function initialize(string _cid, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder);

Paramètres

NomTypeDescription
_cidstringRéférence aux métadonnées de la procédure.
_proposersaddressOrgane dont les membres peuvent soumettre des propositions, ou une adresse unique.
_moderatorsaddressOrgane dont les membres peuvent présenter ou bloquer les propositions.
_decidersaddressOrgane dont les membres adoptent ou rejettent les propositions, ou une adresse unique.
_withModerationboolIndique si les propositions doivent être présentées par un modérateur avant la décision.
_trustedForwarderaddressForwarder relayant les transactions sans gas.

Procedure.INTERFACE_ID

Identifiant d'interface ERC-165 des procédures.

Signature

function INTERFACE_ID() view returns (bytes4);

Procedure.isOwnerBoundProposalOperation

Indiquer si une opération ne peut être proposée que par le compte qu'elle concerne.

Signature

function isOwnerBoundProposalOperation(bytes operationData) pure returns (bool);

Procedure.isTrustedForwarder

Retourne si une adresse est le forwarder ERC-2771 de confiance.

Signature

function isTrustedForwarder(address forwarder) view returns (bool);

Paramètres

NomTypeDescription
forwarderaddressL'adresse du forwarder à tester.

Procedure.presentProposal

Lorsque la modération est activée, les modérateurs doivent accepter la proposition.

Signature

function presentProposal(uint256 proposalKey);

Procedure.presentProposalBySig

Présenter une proposition avec une présentation signée par un modérateur, relayée par n'importe quel compte.

Signature

function presentProposalBySig(uint256 proposalKey, uint256 nonce, uint256 deadline, bytes signature);

Procedure.propose

API publique : création et mise à jour des propositions.

Signature

function propose(string cid, (uint256, address, bytes, uint256, bool)[] operations) returns (uint256 proposalKey);

Procedure.proposeBySig

Soumettre une proposition signée par un proposant, relayée par n'importe quel compte.

Signature

function proposeBySig(string cid, (uint256, address, bytes, uint256, bool)[] operations, uint256 nonce, uint256 deadline, bytes signature) returns (uint256 proposalKey);

Procedure.supportsInterface

Retourne true si ce contrat implémente l'interface définie par interfaceId. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.

Signature

function supportsInterface(bytes4 interfaceId) view returns (bool);

Procedure.transferEquity

Transfère le capital du créateur de la proposition ; le jeton émet l'enregistrement du mouvement.

Signature

function transferEquity(address asset, address recipient, uint256 amount, string movementCid);

Procedure.trustedForwarder

Retourne le forwarder ERC-2771 de confiance utilisé par ce contrat.

Signature

function trustedForwarder() view returns (address);

Procedure.validateProposalCreator

Échouer sauf si le créateur d'une proposition peut proposer cette opération.

Signature

function validateProposalCreator(address creator, bytes operationData) view;

Procedure.EIP712DomainChanged

PEUT être émis pour signaler que le domaine a pu changer.

Event

event EIP712DomainChanged();

Procedure.Initialized

Déclenché quand le contrat a été initialisé ou réinitialisé.

Event

event Initialized(uint64 version);

NominationProcedure

Une procédure dans laquelle n'importe quel membre de l'organe décideur adopte ou rejette seul une proposition.

Il possède toutes les fonctions et tous les événements de Procédure, ainsi que ceux ci-dessous.

NominationProcedure.initialize

Initialiser un clone de procédure avec ses rôles.

Signature

function initialize(string _cid, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder);

Paramètres

NomTypeDescription
_cidstringRéférence aux métadonnées de la procédure.
_proposersaddressOrgane dont les membres peuvent soumettre des propositions, ou une adresse unique.
_moderatorsaddressOrgane dont les membres peuvent présenter ou bloquer les propositions.
_decidersaddressOrgane dont les membres adoptent ou rejettent les propositions, ou une adresse unique.
_withModerationboolIndique si les propositions doivent être présentées par un modérateur avant la décision.
_trustedForwarderaddressForwarder relayant les transactions sans gas.

NominationProcedure.nominate

Appliquer la nomination.

Signature

function nominate(uint256 proposalKey);

Paramètres

NomTypeDescription
proposalKeyuint256La clé utilisée pour identifier la proposition.

NominationProcedure.nominateBySig

Adopter une proposition avec une adoption signée par un décideur, relayée par n'importe quel compte.

Signature

function nominateBySig(uint256 proposalKey, uint256 nonce, uint256 deadline, bytes signature);

NominationProcedure.reject

Rejeter une nomination sans appliquer les opérations de sa proposition.

Signature

function reject(uint256 proposalKey);

Paramètres

NomTypeDescription
proposalKeyuint256La proposition à rejeter.

NominationProcedure.ProposalApplied

Une proposition a été réglée.

Event

event ProposalApplied(uint256 indexed proposalKey);

VoteProcedure

Une procédure dans laquelle les membres de l'organe décideur votent sur chaque proposition.

Le vote s'ouvre lorsqu'une proposition est présentée. Une fois le vote terminé, n'importe qui appelle applyProposal pour compter les bulletins et régler la proposition.

Il possède toutes les fonctions et tous les événements de Procédure, ainsi que ceux ci-dessous.

VoteProcedure.count

Compter les votes à la fin de l'élection.

@todo Gérer la délégation des votes.

Signature

function count(uint256 proposalKey) view returns (bool approved);

Retourne

NomTypeDescription
approvedboolVrai si la proposition est adoptée.

VoteProcedure.getElection

Obtenir des informations sur une élection en cours

Signature

function getElection(uint256 _proposalKey) view returns (uint256 start, bool hasVoted, uint256 votesCount);

Retourne

NomTypeDescription
startuint256Le temps UNIX lors de l'ouverture de l'élection.
hasVotedboolVrai si le votant a déjà voté.
votesCountuint256Le nombre de votes enregistrés jusqu'à présent.

VoteProcedure.getElectionResults

Obtenir la répartition actuelle des votes et la base de votants éligibles.

ERC20VoteProcedure redéfinit cette fonction pour utiliser le pouvoir de vote à l'instantané.

Signature

function getElectionResults(uint256 proposalKey) view returns (uint256 approvals, uint256 objections, uint256 eligibleVotes);

Retourne

NomTypeDescription
approvalsuint256Le nombre de votes favorables.
objectionsuint256Le nombre de votes défavorables.
eligibleVotesuint256Le nombre de votes éligibles.

VoteProcedure.initialize

Initialiser la procédure.

Signature

function initialize(string _cid, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder, uint32 _quorumSize, uint32 _voteDuration, uint32 _majoritySize);

VoteProcedure.majoritySize

Part des bulletins qui doivent approuver, en millièmes de pour cent.

Signature

function majoritySize() view returns (uint32);

VoteProcedure.quorumSize

Part des votants qui doivent voter, en millièmes de pour cent.

Signature

function quorumSize() view returns (uint32);

VoteProcedure.vote

Créer une élection.

Signature

function vote(uint256 proposalKey, bool approval);

VoteProcedure.voteBySig

Émettre un vote signé par un décideur, relayé par n'importe quel compte.

Signature

function voteBySig(uint256 proposalKey, bool approval, uint256 nonce, uint256 deadline, bytes signature);

VoteProcedure.voteDuration

Durée d'un vote, en secondes.

Signature

function voteDuration() view returns (uint32);

VoteProcedure.ProposalApplied

Une proposition a été réglée.

Event

event ProposalApplied(uint256 indexed proposalKey);

VoteProcedure.ProposalBlocked

Un modérateur a bloqué une proposition.

Event

event ProposalBlocked(address indexed moderator, uint256 indexed proposalKey, string reason);

VoteProcedure.ProposalCreated

Une proposition a été soumise.

Event

event ProposalCreated(address indexed creator, uint256 indexed proposalKey);

VoteProcedure.ProposalPresented

Un modérateur a présenté une proposition aux décideurs.

Event

event ProposalPresented(address indexed presenter, uint256 indexed proposalKey);

ERC20VoteProcedure

Une procédure de vote dans laquelle chaque bulletin pèse le solde de jetons du votant.

Les bulletins pèsent les soldes détenus juste avant l'ouverture du vote, si bien que les jetons déplacés pendant le vote ne comptent pas deux fois.

Il possède toutes les fonctions et tous les événements de Procédure de vote, ainsi que ceux ci-dessous.

ERC20VoteProcedure.initialize

Initialiser un vote ERC-20 dont les rôles sont tenus par les membres d'un organe, les détenteurs du jeton ou personne.

Signature

function initialize(string _metadata, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder, uint32 _quorumSize, uint32 _voteDuration, uint32 _majoritySize, address _tokenContract, uint8[3] _roleModes);

Paramètres

NomTypeDescription
_metadatastring
_proposersaddress
_moderatorsaddress
_decidersaddress
_withModerationbool
_trustedForwarderaddress
_quorumSizeuint32
_voteDurationuint32
_majoritySizeuint32
_tokenContractaddress
_roleModesuint8[3]Modes des rôles des proposants, des modérateurs et des votants.

ERC20VoteProcedure.initialize

Initialiser la procédure.

Signature

function initialize(string _metadata, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder, uint32 _quorumSize, uint32 _voteDuration, uint32 _majoritySize, address _tokenContract);

Paramètres

NomTypeDescription
_metadatastringMétadonnées de la procédure.
_proposersaddressL'organe dont les entrées pourront proposer des propositions.
_moderatorsaddressL'organe dont les entrées pourront modérer des propositions.
_decidersaddressL'organe dont les entrées seront autorisées à adopter ou refuser des propositions.
_withModerationboolSi la procédure nécessite ou non la modération.
_trustedForwarderaddressLe contrat du forwarder de confiance.
_quorumSizeuint32Le pourcentage minimum de votes requis pour valider une élection.
_voteDurationuint32Durée du vote en seconds.
_majoritySizeuint32Le pourcentage minimum de votes requis pour valider une élection.
_tokenContractaddressLe contrat du token ERC20 représentant les droits de vote.

ERC20VoteProcedure.initialize

Initialiser un vote ERC-20 avec validation facultative par une majorité des membres.

Signature

function initialize(string _metadata, address _proposers, address _moderators, address _deciders, bool _withModeration, address _trustedForwarder, uint32 _quorumSize, uint32 _voteDuration, uint32 _majoritySize, address _tokenContract, uint8[3] _roleModes, bool _requireMemberMajority);

ERC20VoteProcedure.moderatorMode

Indique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne.

Signature

function moderatorMode() view returns (uint8);

ERC20VoteProcedure.proposerMode

Indique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne.

Signature

function proposerMode() view returns (uint8);

ERC20VoteProcedure.requireMemberMajority

Quand les votants viennent d'un organe, exiger une majorité de ses membres en plus du quorum et de la majorité habituels pondérés par le jeton.

Signature

function requireMemberMajority() view returns (bool);

ERC20VoteProcedure.tokenContract

tokenContract est un contrat ERC20Votes-compatible représentant les droits de vote.

Signature

function tokenContract() view returns (address);

ERC20VoteProcedure.voterMode

Indique si les votants sont les membres d'un organe ou les détenteurs du jeton.

Signature

function voterMode() view returns (uint8);

ProcedureLibrary

Organisation du stockage et règles des propositions, liées dans les contrats de procédure.

ProcedureLibrary.isInOrgan

Utils.

Signature

function isInOrgan(address organ, address caller) view returns (bool);

ProcedureLibrary.ProposalApplied

Une proposition a été réglée.

Event

event ProposalApplied(uint256 indexed proposalKey);

ProcedureLibrary.ProposalBlocked

Un modérateur a bloqué une proposition.

Event

event ProposalBlocked(address indexed moderator, uint256 indexed proposalKey, string reason);

ProcedureLibrary.ProposalCreated

Une proposition a été soumise.

Event

event ProposalCreated(address indexed creator, uint256 indexed proposalKey);

ProcedureLibrary.ProposalPresented

Un modérateur a présenté une proposition aux décideurs.

Event

event ProposalPresented(address indexed presenter, uint256 indexed proposalKey);

Actifs

Les actifs sont des jetons ERC-20 avec des points de contrôle de vote, afin qu'un vote puisse peser les soldes à un moment passé. Un EquityToken représente des parts de société : ses transferts doivent être approuvés par une procédure.

Asset

Un jeton ERC-20 avec points de contrôle de vote, détenu par des organes.

Constructor

constructor();

Asset.allowance

Renvoie le nombre restant de jetons que spender sera autorisé à dépenser au nom de owner via {transferFrom}. Vaut zéro par défaut. Cette valeur change quand {approve} ou {transferFrom} sont appelées.

Signature

function allowance(address owner, address spender) view returns (uint256);

Asset.approve

See {IERC20-approve}. NOTE: If value est le maximum uint256, l'autorisation n'est pas mise à jour sur transferFrom. C'est sémantiquement équivalent à une approbation infinie. Exigences : - spender ne peut pas être l'adresse zéro.

Signature

function approve(address spender, uint256 value) returns (bool);

Asset.balanceOf

Renvoie la quantité de jetons détenue par account.

Signature

function balanceOf(address account) view returns (uint256);

Asset.checkpoints

Obtenir le pos-ième point de contrôle de account.

Signature

function checkpoints(address account, uint32 pos) view returns ((uint48, uint208));

Asset.clock

Horloge utilisée pour marquer les points de contrôle. Peut être redéfinie pour implémenter des points de contrôle (et des votes) fondés sur l'horodatage, auquel cas {CLOCK_MODE} doit aussi être redéfinie pour correspondre.

Signature

function clock() view returns (uint48);

Asset.CLOCK_MODE

Description de l'horloge lisible par une machine, telle que spécifiée dans l'ERC-6372.

Signature

function CLOCK_MODE() view returns (string);

Asset.decimals

Renvoie le nombre de décimales utilisées pour obtenir sa représentation pour l'utilisateur. Par exemple, si decimals vaut 2, un solde de 505 jetons doit être affiché à l'utilisateur comme 5.05 (505 / 10 ** 2). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for display purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.

Signature

function decimals() view returns (uint8);

Asset.delegate

Délègue les votes de l'expéditeur à delegatee.

Signature

function delegate(address delegatee);

Asset.delegateBySig

Délègue les votes du signataire à delegatee.

Signature

function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s);

Asset.delegates

Renvoie le délégué que account a choisi.

Signature

function delegates(address account) view returns (address);

Asset.eip712Domain

retourne les champs et valeurs qui décrivent le séparateur de domaine utilisé par ce contrat pour la signature EIP-712.

Signature

function eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions);

Asset.getPastTotalSupply

Renvoie l'offre totale de votes disponible à un moment donné du passé. Si l' clock() est configurée pour utiliser des numéros de bloc, renvoie la valeur à la fin du bloc correspondant. NOTE : cette valeur est la somme de tous les votes disponibles, qui n'est pas nécessairement la somme de tous les votes délégués. Les votes non délégués font toujours partie de l'offre totale, même s'ils ne participeraient pas à un vote. Exigences : - timepoint doit être dans le passé. En fonctionnement par numéros de bloc, le bloc doit déjà être miné.

Signature

function getPastTotalSupply(uint256 timepoint) view returns (uint256);

Asset.getPastVotes

Renvoie le nombre de votes que account avait à un moment donné du passé. Si l' clock() est configurée pour utiliser des numéros de bloc, renvoie la valeur à la fin du bloc correspondant. Exigences : - timepoint doit être dans le passé. En fonctionnement par numéros de bloc, le bloc doit déjà être miné.

Signature

function getPastVotes(address account, uint256 timepoint) view returns (uint256);

Asset.getVotes

Renvoie le nombre actuel de votes que account détient.

Signature

function getVotes(address account) view returns (uint256);

Asset.initialize

Initialiser un clone d'actif et émettre son offre.

Signature

function initialize(string name_, string symbol_, address initialReceiver_, uint256 initialSupply_);

Paramètres

NomTypeDescription
name_stringNom du token.
symbol_stringSymbole du token.
initialReceiver_addressCompte recevant l'offre initiale.
initialSupply_uint256Offre émise à l'initialisation.

Asset.name

Renvoie le nom du jeton.

Signature

function name() view returns (string);

Asset.nonces

Renvoie le prochain nonce inutilisé d'une adresse.

Signature

function nonces(address owner) view returns (uint256);

Asset.numCheckpoints

Obtenir le nombre de points de contrôle de account.

Signature

function numCheckpoints(address account) view returns (uint32);

Asset.symbol

Renvoie le symbole du jeton, généralement une version abrégée du nom.

Signature

function symbol() view returns (string);

Asset.totalSupply

Renvoie la quantité de jetons en circulation.

Signature

function totalSupply() view returns (uint256);

Asset.transfer

Voir {IERC20-transfer}. Exigences : - to ne peut pas être l'adresse zéro. - l'appelant doit avoir un solde d'au moins value.

Signature

function transfer(address to, uint256 value) returns (bool);

Asset.transferFrom

Voir {IERC20-transferFrom}. N'émet pas d'événement {Approval} signalant une mise à jour de l'autorisation. Ce n'est pas exigé par l'ERC. Voir {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE : ne met pas à jour l'autorisation si l'autorisation actuelle est le maximum uint256. Exigences : - from et to ne peut pas être l'adresse zéro. - from doit avoir un solde d'au moins value. - l'appelant doit avoir une autorisation sur les jetons de fromd'au moins value.

Signature

function transferFrom(address from, address to, uint256 value) returns (bool);

Asset.Approval

Émis quand l'autorisation d'un spender pour un owner est définie par un appel à {approve}. value est la nouvelle autorisation.

Event

event Approval(address indexed owner, address indexed spender, uint256 value);

Asset.DelegateChanged

Émis quand un compte change de délégué.

Event

event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

Asset.DelegateVotesChanged

Émis quand un transfert de jetons ou un changement de délégué modifie le nombre d'unités de vote d'un délégué.

Event

event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes);

Asset.EIP712DomainChanged

PEUT être émis pour signaler que le domaine a pu changer.

Event

event EIP712DomainChanged();

Asset.Initialized

Déclenché quand le contrat a été initialisé ou réinitialisé.

Event

event Initialized(uint64 version);

Asset.Transfer

Émis quand value jetons sont déplacés d'un compte (from) vers un autre (to). Notez que value peut valoir zéro.

Event

event Transfer(address indexed from, address indexed to, uint256 value);

EquityToken

Représentation ERC-20 de titres de capital dont les mouvements sont réglés par une procédure approuvée.

Il possède toutes les fonctions et tous les événements de Actif, ainsi que ceux ci-dessous.

Constructor

constructor();

EquityToken.ADMIN_PROCEDURE_ROLE

Rôle des procédures qui modifient quelles procédures détiennent un rôle.

Signature

function ADMIN_PROCEDURE_ROLE() view returns (bytes32);

EquityToken.initialize

Initialiser un clone de jeton de capital et émettre son offre.

Signature

function initialize(string name_, string symbol_, address initialHolder_, uint256 initialSupply_, address transferProcedure_);

Paramètres

NomTypeDescription
name_stringNom du token.
symbol_stringSymbole du token.
initialHolder_addressCompte recevant l'offre initiale.
initialSupply_uint256Offre émise à l'initialisation.
transferProcedure_addressProcédure réglant les transferts, qui reçoit aussi le rôle d'administration.

EquityToken.isProcedureAuthorized

Indiquer si une procédure détient un rôle.

Signature

function isProcedureAuthorized(bytes32 role, address procedure) view returns (bool);

EquityToken.isTransferProcedure

Indiquer si une procédure peut régler des transferts.

Signature

function isTransferProcedure(address procedure) view returns (bool);

EquityToken.setProcedureAuthorization

Accorder ou révoquer une procédure de transfert ou d'administration par la gouvernance.

Signature

function setProcedureAuthorization(bytes32 role, address procedure, bool authorized);

EquityToken.settleTransfer

Règle un transfert du créateur de la proposition appliquée et enregistre le mouvement.

Signature

function settleTransfer(address recipient, uint256 amount, string movementCid);

EquityToken.TRANSFER_PROCEDURE_ROLE

Rôle des procédures qui règlent les transferts.

Signature

function TRANSFER_PROCEDURE_ROLE() view returns (bytes32);

EquityToken.validateTransfer

Vérifie les conditions du transfert lors de la création de la proposition.

Signature

function validateTransfer(address creator, address recipient, uint256 amount, string movementCid) view;

EquityToken.MovementSettled

Enregistrement du mouvement d'un transfert réglé, à partir duquel est construit le registre des mouvements de titres.

Event

event MovementSettled(address indexed procedure, uint256 indexed proposalKey, address indexed seller, address recipient, uint256 amount, string movementCid);

EquityToken.ProcedureAuthorizationUpdated

Une procédure a reçu ou perdu un rôle.

Event

event ProcedureAuthorizationUpdated(bytes32 indexed role, address indexed procedure, bool authorized);

Transactions sans gas

Le MetaGasStation est le forwarder de confiance des contrats du protocole : il relaie les transactions signées par des utilisateurs qui ne détiennent pas d'ether, et les contrats lisent le signataire d'origine plutôt que le relais.

MetaGasStation

Forwarder de confiance des contrats du protocole : il relaie les requêtes signées par des comptes qui ne détiennent pas d'ether, et les contrats lisent le signataire plutôt que le relais.

Constructor

constructor(string name);

MetaGasStation.eip712Domain

retourne les champs et valeurs qui décrivent le séparateur de domaine utilisé par ce contrat pour la signature EIP-712.

Signature

function eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions);

MetaGasStation.execute

Exécute une request au nom du signataire de signature via le protocole ERC-2771. Le gas fourni à l'appel demandé peut ne pas être exactement le montant demandé, mais l'appel ne manquera pas de gas. Échoue si la requête est invalide ou si l'appel échoue ; dans ce cas, le nonce n'est pas consommé. Exigences : - la valeur de la requête doit être égale à la msg.value. - The request should be valid according to {verify}.

Signature

function execute((address, address, uint256, uint256, uint48, bytes, bytes) request) payable;

MetaGasStation.executeBatch

Version par lots de {execute} avec remboursement facultatif et exécution atomique. Si un lot contient au moins une requête invalide (voir {verify}), la requête est ignorée et le paramètre refundReceiver reçoit en retour la valeur demandée inutilisée à la fin de l'exécution. Cela évite de faire échouer tout le lot quand une requête est invalide ou a déjà été soumise. Si le refundReceiver est l' address(0), cette fonction échoue dès qu'au moins une des requêtes est invalide, au lieu de l'ignorer. Cela peut être utile si un lot doit être exécuté de façon atomique (au moins au premier niveau). Par exemple, le remboursement (et donc l'atomicité) peut être désactivé si le relais utilise un service qui évite d'inclure les transactions échouées. Exigences : - la somme des valeurs des requêtes doit être égale à la msg.value. - Toutes les requêtes doivent être valides (voir {verify}) quand refundReceiver est l'adresse zéro. NOTE : un refundReceiver nul ne garantit une exécution tout-ou-rien que pour les appels relayés de premier niveau. Si une requête relayée appelle un contrat qui fait lui-même un sous-appel, l'appel de second niveau peut échouer sans que l'appel de premier niveau échoue.

Signature

function executeBatch((address, address, uint256, uint256, uint48, bytes, bytes)[] requests, address refundReceiver) payable;

MetaGasStation.nonces

Renvoie le prochain nonce inutilisé d'une adresse.

Signature

function nonces(address owner) view returns (uint256);

MetaGasStation.verify

Retourne true si une requête est valide pour une signature fournie à l'horodatage du bloc courant. Une transaction est considérée comme valide quand la cible fait confiance à ce forwarder, que la requête n'a pas expiré (l'échéance n'est pas atteinte) et que le signataire correspond au paramètre from parameter of the signed request. NOTE: A request may return false here but it won't cause {executeBatch} to revert if a refund receiver is provided.

Signature

function verify((address, address, uint256, uint256, uint48, bytes, bytes) request) view returns (bool);

MetaGasStation.EIP712DomainChanged

PEUT être émis pour signaler que le domaine a pu changer.

Event

event EIP712DomainChanged();

MetaGasStation.ExecutedForwardRequest

Émis quand une ForwardRequest est exécutée. NOTE : l'échec d'une requête relayée peut être dû à une signature invalide, à une échéance dépassée ou simplement à l'échec de l'appel demandé. Le contrat garantit que le relais ne peut pas forcer l'appel demandé à manquer de gas.

Event

event ExecutedForwardRequest(address indexed signer, uint256 nonce, bool success);

Modifier cette page

Sur cette page:

Installation
Installer Foundry

Suivez-nous :

© 2026 Organigram SAS

Tous droits réservés.