Organigram JS est le client JavaScript/TypeScript du Protocole Organigram, une suite de smart contracts pour faire fonctionner des organisations sur les blockchains compatibles Ethereum. Il déploie, lit et opère ces contrats depuis n'importe quel environnement JavaScript, navigateur ou Node.js, et c'est la bibliothèque utilisée en interne par Organigram.ai et par @organigram/react.
pnpm add @organigram/js viem
viem est une dépendance pair : Organigram JS ne détient jamais de clés lui-même, il utilise les clients viem que vous lui fournissez.
Une organisation est modélisée comme un organigramme : des organes reliés par des procédures, détenant éventuellement des actifs. Chacun d'eux est un smart contract, et chacun a dans cette bibliothèque une classe qui charge son état on-chain, y écrit et le sérialise en JSON.
| Classe | Rôle |
|---|---|
OrganigramClient | Point d'entrée. Se connecte au protocole sur une chaîne, déploie des contrats et les charge. |
Organigram | L'organisation entière : ses organes, actifs et procédures, sous forme de brouillon ou de contrats déployés. Elle n'a pas de contrat propre. |
Organ | Un groupe : un registre d'entrées (membres, documents), une liste de permissions et un solde d'actifs. |
Procedure | Les règles selon lesquelles les membres de certains organes peuvent modifier d'autres organes. |
NominationProcedure | Une procédure où n'importe quel membre de l'organe décideur adopte ou rejette seul une proposition. |
VoteProcedure | Une procédure où les membres d'un organe votent. |
ERC20VoteProcedure | Une procédure où les votes sont pondérés par un jeton ERC-20. |
Asset | Un jeton ERC-20, actif simple ou titres de capital d'une société. |
OrganigramClient.load() se connecte au contrat OrganigramClient déployé sur la chaîne de votre client public viem, et lit les types de procédures qui y sont enregistrés. Le client public sert à toutes les lectures ; le client de portefeuille, s'il est fourni, signe les transactions. Sans client de portefeuille, la bibliothèque est en lecture seule.
Le client garde en mémoire les organes, procédures et actifs chargés : loadOrgan(), loadProcedure() et loadAsset() renvoient l'objet en cache, sauf si vous passez { fresh: true }.
Un organe stocke trois choses :
PERMISSIONS (ADD_ENTRIES, WITHDRAW_ETHER, ADD_PERMISSIONS…). getPermissionsSet() retraduit une valeur en noms ;Dans une organisation gouvernée, les permissions sont accordées aux procédures plutôt qu'aux personnes, afin que tout changement passe par une décision.
Une procédure définit trois rôles, chacun tenu par les membres d'un organe (ou, pour un vote ERC-20, par les détenteurs du jeton) : les proposants qui peuvent soumettre des propositions, les modérateurs qui peuvent les filtrer lorsque la modération est activée, et les décideurs qui les adoptent ou les rejettent. Une proposition est une liste d'opérations, des appels aux organes que la procédure a la permission d'effectuer, accompagnée d'une référence à ses métadonnées off-chain.
propose() soumet la proposition.presentProposal() ou la rejette avec blockProposal().nominate() ou reject() pour une nomination, vote() puis count() une fois le vote terminé pour les procédures de vote.applyProposal() relance les opérations qui n'ont pas encore été traitées.Chaque écriture existe aussi en variante …BySig : l'utilisateur signe un message EIP-712 et n'importe quel relais le soumet, si bien que les utilisateurs n'ont pas besoin de gas.
organigram.deploy() déploie organes, actifs et procédures en une seule transaction, puis les recharge depuis la chaîne. En interne, elle appelle client.deployOrganigram(), que vous pouvez appeler directement si vous n'avez besoin que des nouvelles adresses. Les contrats sont déployés comme des clones à des adresses prédites à partir d'un sel, ce qui permet à un brouillon de référencer des contrats qui n'existent pas encore, par exemple une procédure décidant d'un organe déployé dans le même lot. templates fournit des organigrammes prêts à l'emploi (sas, sarl, nonProfit, openSource…), et isTemplateSupportedOnChain() indique si une chaîne dispose des contrats dont un modèle a besoin.
Les contrats ne stockent que des références. Les métadonnées et les documents vivent off-chain et sont référencés par des références CID de la forme og://workspace/<workspace>/<key>, construites avec formatCidRef() et lues avec parseCidRef(). Les propositions doivent porter une telle référence.
Les fonctions de chiffrement (generateUserEncryptionKeyPair, wrapGroupKeyForRecipient, encryptBytes…) implémentent le chiffrement de bout en bout des documents utilisé par Organigram.ai : les clés de contenu chiffrent les documents, les clés de groupe enveloppent les clés de contenu, et la paire de clés de chaque membre désenveloppe les clés de groupe. Elles s'exécutent sur la Web Crypto API de l'appareil de l'utilisateur. Gardez-y les clés privées : ne les envoyez jamais à un serveur, ne les journalisez jamais, et ne les exportez que vers un stockage que vous chiffrez vous-même.
Se connecter au protocole avec un portefeuille de navigateur :
import { OrganigramClient } from '@organigram/js'import { createPublicClient, createWalletClient, custom, http } from 'viem'import { sepolia } from 'viem/chains'const [account] = await window.ethereum.request({ method: 'eth_requestAccounts' })const publicClient = createPublicClient({ chain: sepolia, transport: http() })const walletClient = createWalletClient({ account, chain: sepolia, transport: custom(window.ethereum)})const client = await OrganigramClient.load({ publicClient, walletClient })
Déployer une organisation à partir d'un modèle :
import { Organigram, getTemplate } from '@organigram/js'const organigram = await new Organigram({ ...getTemplate('nonProfit', client.chainId), organigramClient: client}).deploy()
Proposer d'ajouter un membre à un organe, puis adopter la proposition via une procédure de nomination :
import { NominationProcedure, Organ, Procedure, formatCidRef } from '@organigram/js'const procedure = (await client.loadProcedure( procedureAddress)) as NominationProcedureconst call = await Organ.populateTransaction(organAddress, walletClient, 'addEntries', [ { address: newMemberAddress }])const proposal = await procedure.propose({ cid: formatCidRef({ scopeType: 'workspace', scopeId: workspaceId }, 'add-member'), operations: [Procedure.createOperation(call)]})await procedure.nominate(proposal.key)
La procédure doit détenir la permission ADD_ENTRIES sur l'organe, et le compte connecté doit faire partie de ses proposants et de ses décideurs.
Nous recherchons des développeurs et testeurs TypeScript pour garder ce projet sûr et à jour. Ouvrez des tickets sur GitHub, forkez le dépôt et envoyez des pull requests.
Tout commence par un OrganigramClient, connecté au protocole sur une chaîne via deux clients viem : un client public pour lire, et un client de portefeuille pour signer. Sans client de portefeuille, la bibliothèque est en lecture seule. Le client déploie des contrats, les charge et garde en cache ce qu'il a chargé, jusqu'à ce que vous demandiez une lecture fresh . Chaque écriture accepte des TransactionOptions, pour suivre une transaction dès son envoi.
Point d'entrée principal de l'SDK utilisé pour déployer et hydrater les objets du protocole Organigram.
Il conserve un client public, un client de portefeuille optionnel, les types de procédures enregistrés pour la chaîne actuelle, et des petites caches en mémoire pour les organes, procédures et actifs chargés.
constructor(input: { publicClient: PublicClient; address?: string; chainId?: string; procedureTypes?: ProcedureType[]; contract?: OrganigramContract; walletClient?: WalletClient; });
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat OrganigramClient . |
assets | Asset[] | Actifs chargés jusqu'ici, gardés en cache. |
chainId | string | Chaîne à laquelle le client est connecté. |
contract | OrganigramContract | Instance de contrat viem du contrat OrganigramClient . |
organs | Organ[] | Organes chargés jusqu'ici, gardés en cache. |
procedures | Procedure[] | Procédures chargées jusqu'ici, gardées en cache. |
procedureTypes | ProcedureType[] | Types de procédures enregistrés sur cette chaîne. |
publicClient | PublicClient | Client utilisé pour toutes les lectures. |
walletClient | WalletClient | Client qui signe les transactions. Sans lui, le client est en lecture seule. |
Déployer un seul clone d'actif ERC-20.
deployAsset(input: { name: string; symbol: string; initialSupply?: number; salt?: string; options?: TransactionOptions; }): Promise<string>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { name: string; symbol: string; initialSupply?: number; salt?: string; options?: TransactionOptions; } | Nom et symbole du jeton, offre en jetons entiers avant conversion en wei, sel de clone déterministe facultatif et options de transaction. |
Retourne
| Type | Description |
|---|---|
Promise<string> | L'adresse du contrat d'actif déployé. |
Déployer plusieurs actifs en une seule transaction de lot.
deployAssets(assets: AssetInput[], options?: TransactionOptions): Promise<string[]>;
Paramètres
| Nom | Type | Description |
|---|---|---|
assets | AssetInput[] | Actifs à déployer. |
options | TransactionOptions | Contrôles transactionnels optionnels. |
Retourne
| Type | Description |
|---|---|
Promise<string[]> | Les adresses des actifs déployés dans l'ordre de déploiement. |
Déployer un contrat client Organigram frais avec sa bibliothèque liée.
static deployClient(input: { publicClient: PublicClient; walletClient: WalletClient; }): Promise<OrganigramClient>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { publicClient: PublicClient; walletClient: WalletClient; } | Les clients sont utilisés pour diffuser les déploiements et attendre les reçus. |
Retourne
| Type | Description |
|---|---|
Promise<OrganigramClient> | Une instance SDK prête à l'emploi pointant vers le nouveau client déployé. |
Déployer un seul clone d'organe et hydrater l'objet SDK résultant.
Lorsque aucun droit n'est fourni, le portefeuille connecté est octroyé le masque d'administrateur complet par défaut, de sorte que l'organe reste opérationnel après le déploiement.
deployOrgan(input?: DeployOrganInput): Promise<Organ>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | DeployOrganInput | Métadonnées de l'organe optionnelles, droits, entrées et options de transaction. |
Déployer un organigramme complet, y compris ses organes, actifs et procédures.
deployOrganigram(input: DeployOrganigramInput): Promise<DeployOrganigramResult>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | DeployOrganigramInput | Entrée de déploiement par lots pour l'ensemble de l'organigramme. |
Retourne
| Type | Description |
|---|---|
Promise<DeployOrganigramResult> | Les adresses des organes, actifs et procédures déployés, et l'entrée mise à jour avec celles-ci. Utilisez Organigram.deploy() pour obtenir un Organigram. |
Déployer plusieurs organes dans une seule transaction par lot.
deployOrgans(deployOrgansInput: DeployOrganInput[]): Promise<Organ[]>;
Paramètres
| Nom | Type | Description |
|---|---|---|
deployOrgansInput | DeployOrganInput[] | Définitions d'organes à déployer. |
Déployer un clone de procédure unique à partir d'un type de procédure enregistré.
deployProcedure(input: DeployProcedureInput): Promise<Procedure>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | DeployProcedureInput | Type de procédure, organes de rôle, métadonnées optionnelles et arguments d'initialisation. |
Déployer plusieurs procédures dans une seule transaction batch.
deployProcedures(deployProceduresInput: DeployProcedureInput[]): Promise<Procedure[]>;
Paramètres
| Nom | Type | Description |
|---|---|---|
deployProceduresInput | DeployProcedureInput[] | Définitions des procédures à déployer. |
Estimer le gas qu'utiliserait le déploiement complet d'un organigramme, sans portefeuille.
estimateDeployOrganigramGas(input: DeployOrganigramInput, account: string): Promise<bigint>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | DeployOrganigramInput | Entrée de déploiement par lots pour l'ensemble de l'organigramme. |
account | string | Adresse depuis laquelle le déploiement serait envoyé. |
Retourne
| Type | Description |
|---|---|
Promise<bigint> | Le gas estimé, ou 0n s'il ne reste rien à déployer. |
Inférer le type de procédure enregistré d'une copie de procédure déployée.
getProcedureType(procedureAddress: string): Promise<ProcedureType | null>;
Paramètres
| Nom | Type | Description |
|---|---|---|
procedureAddress | string | Adresse de l'instance de procédure déployée. |
Connecter l'SDK à un contrat client Organigram déjà déployé.
static load(input: { address?: string; publicClient: PublicClient; walletClient?: WalletClient; }): Promise<OrganigramClient>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { address?: string; publicClient: PublicClient; walletClient?: WalletClient; } | Surcharge d'adresse plus les clients viem utilisés pour les lectures et les écritures. |
Charger un actif déployé et le garder dans le cache du client.
loadAsset(address: string, input?: { fresh?: boolean; initial?: Asset; }): Promise<Asset>;
Paramètres
| Nom | Type | Description |
|---|---|---|
address | string | Adresse du contrat de l'actif. |
input | { fresh?: boolean; initial?: Asset; } | fresh lit la chaîne même si l'actif est en cache ; initial contient des métadonnées de repli fusionnées dans l'actif chargé. |
Tenter de charger un contrat déployé comme un organe ou une procédure.
loadContract(address: string, input?: { fresh?: boolean; }): Promise<Organ | Procedure | null>;
Paramètres
| Nom | Type | Description |
|---|---|---|
address | string | Adresse du contrat à inspecter. |
input | { fresh?: boolean; } | fresh lit la chaîne même si le contrat est en cache. |
Charger une liste hétérogène d'adresses de contrats déployés dans un organigramme.
loadContracts(contractAddresses: string[]): Promise<Organigram>;
Paramètres
| Nom | Type | Description |
|---|---|---|
contractAddresses | string[] | Adresses à résoudre en tant qu'organes, procédures ou actifs. |
Charger un organe déployé et le garder dans le cache du client.
loadOrgan(address: string, input?: { fresh?: boolean; initial?: OrganInput; }): Promise<Organ>;
Paramètres
| Nom | Type | Description |
|---|---|---|
address | string | Adresse du contrat d'organe. |
input | { fresh?: boolean; initial?: OrganInput; } | fresh lit la chaîne même si l'organe est en cache ; initial contient des métadonnées de repli fusionnées dans l'organe chargé. |
Hydrater chaque objet déployé référencé par une définition d'organigramme.
Les placeholders non déployés sont conservés tels quels, tandis que les organes, procédures et actifs déployés sont rafraîchis à partir de l'état de la chaîne.
loadOrganigram(organigram: Organigram, input?: { fresh?: boolean; }): Promise<Organigram>;
Paramètres
| Nom | Type | Description |
|---|---|---|
organigram | Organigram | Définition de l'organigramme à hydrater. |
input | { fresh?: boolean; } | fresh: false réutilise les organes, procédures et actifs déjà dans le cache du client au lieu de les relire. |
Charger une procédure déployée et la garder dans le cache du client.
loadProcedure(address: string, input?: { fresh?: boolean; initial?: ProcedureInput; }): Promise<Procedure>;
Paramètres
| Nom | Type | Description |
|---|---|---|
address | string | Adresse du contrat de procédure. |
input | { fresh?: boolean; initial?: ProcedureInput; } | fresh lit la chaîne même si la procédure est en cache ; initial contient des métadonnées de repli fusionnées dans la procédure chargée. |
Charger les métadonnées pour une implémentation déployée d'une procédure.
static loadProcedureType(input: { addr: string; cid?: string; }, publicClient: PublicClient): Promise<ProcedureType>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { addr: string; cid?: string; } | Adresse et CID optionnel utilisés pour identifier le type de procédure. |
publicClient | PublicClient | Client en lecture seule utilisé pour les vérifications d'interface. |
Lisez le registre des procédures et résolvez chaque type de procédure pris en charge.
static loadProcedureTypes(input: { publicClient: PublicClient; address?: string; }): Promise<ProcedureType[]>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { publicClient: PublicClient; address?: string; } | Adresse du contrat client optionnelle et le client public utilisé pour l'interroger. |
Entrée d'implantation par lots pour un organigramme complet.
| Propriété | Type | Description |
|---|---|---|
assets | AssetInput[] | Actifs à déployer. |
organs | DeployOrganInput[] | Organes à déployer. |
procedures | DeployProcedureInput[] | Procédures à déployer. |
Options communes à toutes les écritures.
| Propriété | Type | Description |
|---|---|---|
nonce | number | Nonce de transaction, pour envoyer plusieurs transactions à la fois. |
Appelé avec la transaction dès son envoi, avant qu'elle soit minée.
onTransaction?: (tx: OrganigramTransaction, description: string) => void;
Un organe à déployer : la même forme que partout ailleurs, plus des options de transaction.
export type DeployOrganInput = OrganInput & { options?: TransactionOptions;};
Une procédure à déployer, plus des options de transaction et des arguments d'initialisation bruts. Son typeName doit être un type de procédure connu.
export type DeployProcedureInput = ProcedureInput & { typeName: ProcedureTypeName; options?: TransactionOptions; args?: unknown[];};
L'entrée est copiée avec ses nouvelles adresses : les instances de classes reviennent sous forme d'objets simples.
export type DeployOrganigramResult = readonly [ organs: string[], assets: string[], procedures: string[]] & { organigram: DeployOrganigramInput;};
Les clients viem avec lesquels le SDK lit et écrit.
export type ContractClients = { publicClient: PublicClient; walletClient?: WalletClient | null;};
Une instance de contrat viem liée aux clients du SDK.
export type OrganigramContract = GetContractReturnType<Abi, PublicClient | { public: PublicClient; wallet: WalletClient;}>;
Une transaction envoyée, avec un wait() qui se résout une fois la transaction minée.
export type OrganigramTransaction = { hash: Hex; wait: () => Promise<OrganigramTransactionReceipt>;};
Le reçu d'une transaction minée.
export type OrganigramTransactionReceipt = TransactionReceipt & { gasPrice?: bigint | null;};
Ajouter une marge de 20 % plus 25 000 gas à une estimation de gas.
bufferEstimatedGas: (estimatedGas: bigint) => bigint
Envoyer un appel de contrat avec une estimation de gas majorée, et le renvoyer sous forme d' OrganigramTransaction.
createContractWriteTransaction: <TAbi extends Abi | readonly unknown[]>(input: { address: string; abi: TAbi; functionName: string; args?: unknown[]; clients: ContractClients; nonce?: number; value?: bigint;}) => Promise<OrganigramTransaction>
Renvoyer l'adresse du compte avec lequel signe un client de portefeuille.
getWalletAddress: (walletClient: WalletClient) => Promise<Address>
Un Organigram rassemble les organes, procédures et actifs d'une organisation. Partez d'un modèle avec getTemplate(), ou de vos propres données, attachez un client, et déployez le tout en une transaction avec organigram.deploy(). Les contrats sont des clones à des adresses prédites à partir d'un sel, si bien qu'un brouillon peut référencer des contrats qui n'existent pas encore.
Une organisation entière : ses organes, procédures et actifs, sous forme de brouillon ou de contrats déployés.
L'organigramme lui-même n'a pas de contrat. Créez-en un à partir d'un modèle ou de données, attachez un OrganigramClient, puis appelez deploy().
const organigram = await new Organigram({ ...getTemplate('nonProfit', client.chainId), organigramClient: client}).deploy()
constructor(input?: OrganigramInput | keyof typeof templates | string[]);
| Propriété | Type | Description |
|---|---|---|
assets | Asset[] | Actifs de l'organisation. |
chainId | string | Chaîne sur laquelle l'organigramme est déployé. |
description | string | Description libre. |
edgeType | OrganigramEdgeType | Style de trait des liens du diagramme. |
id | string | Identifiant de l'organigramme. |
name | string | Nom affiché. |
nodePositions | OrganigramNodePositions | Positions des nœuds du diagramme. |
organigramClient | OrganigramClient | null | Client utilisé pour déployer et charger l'organigramme. |
organs | Organ[] | Organes de l'organisation. |
procedures | Procedure[] | Procédures reliant les organes. |
publicClient | PublicClient | null | Client utilisé pour les lectures, quand aucun organigramClient n'est attaché. |
slug | string | Nom adapté aux URL. |
walletClient | WalletClient | null | Client qui signe les transactions, quand aucun organigramClient n'est attaché. |
workspaceId | string | null | Espace de travail auquel appartient l'organigramme dans l'application Organigram. |
Déployer tous les contrats de l'organigramme en une transaction, puis les relire depuis la chaîne.
Nécessite un organigramClient attaché avec un client de portefeuille.
deploy(): Promise<Organigram>;
Modifier le nom, la description ou la disposition du diagramme.
editDetails(input: { name?: string; description?: string; edgeType?: OrganigramEdgeType; nodePositions?: OrganigramNodePositions; contractAddresses?: string[]; }): void;
Lire depuis la chaîne chaque organe, procédure et actif déployé de l'organigramme.
load: (input?: { walletClient?: WalletClient | null; publicClient?: PublicClient | null; }) => Promise<Organigram>;
Remplacer les actifs.
setAssets(assets: Asset[]): void;
Remplacer les organes.
setOrgans(organs: Organ[]): void;
Remplacer les procédures.
setProcedures(procedures: Procedure[]): void;
Convertir l'organigramme en JSON simple.
toJson: () => OrganigramJson;
Style de trait des liens d'un organigramme.
export type OrganigramEdgeType = (typeof organigramEdgeTypes)[number];
Les données d'un organigramme, comme un modèle issu de getTemplate().
export type OrganigramInput = { id?: string | null; slug?: string | null; name?: string | null; description?: string | null; edgeType?: string | null; nodePositions?: unknown; chainId?: string | null; organs: OrganInput[]; procedures: ProcedureInput[]; assets: AssetInput[]; organigramClient?: OrganigramClient | null; walletClient?: WalletClient | null; publicClient?: PublicClient | null; contractAddresses?: string[] | null; workspaceId?: string | null;};
Un organigramme en JSON simple, pour le stocker ou l'envoyer.
export type OrganigramJson = { id: string; slug: string; name: string; description: string; edgeType: OrganigramEdgeType; nodePositions: OrganigramNodePositions; chainId: string; organs: OrganJson[]; procedures: ProcedureJson[]; assets: AssetJson[]; workspaceId?: string | null;};
Position d'un nœud dans le diagramme de l'organigramme.
export type OrganigramNodePosition = { x: number; y: number;};
Positions des nœuds dans le diagramme de l'organigramme, par adresse de contrat.
export type OrganigramNodePositions = Record<string, OrganigramNodePosition>;
Les trois rôles d'une procédure : qui propose, qui modère, qui décide.
export type ProcedureRoleTypeName = 'proposers' | 'moderators' | 'deciders';
Chaîne utilisée par les modèles quand aucune n'est indiquée.
const defaultChainId: string
Style de trait utilisé quand aucun n'est défini.
const defaultOrganigramEdgeType: OrganigramEdgeType
Styles de trait disponibles pour dessiner les liens d'un organigramme.
const organigramEdgeTypes: readonly ["default", "straight", "step", "smoothstep"]
Nom d'un modèle.
export type TemplateName = keyof typeof templates;
Renvoyer une copie d'un modèle, avec de nouveaux sels et adresses pour la chaîne donnée.
getTemplate: (templateName: TemplateName, chainId: string) => OrganigramInput
Indiquer si une chaîne dispose de tous les contrats du protocole dont un modèle a besoin.
isTemplateSupportedOnChain: (templateName: TemplateName, chainId: string) => boolean
Donner à chaque contrat d'un organigramme un nouveau sel et une nouvelle adresse, et mettre à jour les références entre eux.
renewSaltsAndAddresses: (organigram: OrganigramInput, chainId: string) => OrganigramInput
Organigrammes prêts à l'emploi, des formes de sociétés (sas, sarl…) aux registres.
Un organe est un groupe : un registre d'entrées, chacune un membre, un document ou les deux, une liste de permissions et un solde d'actifs. Chaque modification exige une permission issue de PERMISSIONS. Dans une organisation gouvernée, ces permissions appartiennent aux procédures plutôt qu'aux personnes, afin que tout changement passe par une décision.
Un groupe de l'organisation : un registre de membres et de documents, une liste de permissions et un solde d'actifs.
Toute modification d'un organe doit venir d'une adresse détenant la permission correspondante. Dans une organisation gouvernée, cette adresse est une procédure, afin que chaque changement passe par une décision.
constructor(input: OrganInput);
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
balance | string | Solde en ether, en wei. |
chainId | string | Chaîne sur laquelle vit l'organe. |
cid | string | Référence aux métadonnées off-chain de l'organe. |
contract | OrganigramContract | Instance de contrat viem, une fois chargé. |
description | string | Description libre. |
entries | OrganEntry[] | Membres et documents enregistrés dans l'organe. |
forwarder | string | Forwarder de confiance relayant les transactions sans gas. |
INTERFACE | string | Identifiant d'interface ERC-165 des contrats d'organe. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
name | string | Nom affiché. |
organigramId | string | Organigramme auquel appartient l'organe. |
permissions | OrganPermission[] | Adresses autorisées à agir sur l'organe, avec leurs drapeaux de permission. |
publicClient | PublicClient | Client utilisé pour les lectures. |
salt | string | undefined | Sel qui détermine l'adresse du clone. |
walletClient | WalletClient | Client qui signe les transactions. |
Ajouter des membres ou des documents au registre.
addEntries: (entries: OrganEntryInput[], options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Accorder des permissions à une adresse.
addPermission: (permission: OrganPermission, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Lire les drapeaux de permission qu'une adresse détient sur un organe.
static checkAddressPermissions(organAddress: string, addressToCheck: string, clients: ContractClients): Promise<number>;
Lire le solde en ether d'un organe, en wei.
static getBalance(address: string, clients: ContractClients): Promise<bigint>;
Indiquer si un contrat est un organe.
static isOrgan(address: string, clients: ContractClients): Promise<boolean>;
Lire un organe depuis la chaîne : ses entrées, permissions et métadonnées.
static load(address: string, clients: ContractClients, initialOrgan?: OrganInput): Promise<Organ>;
Lire la référence de métadonnées et la taille des registres d'un organe.
static loadData(address: string, clients: ContractClients): Promise<OrganContractData>;
Lire toutes les entrées d'un organe.
static loadEntries(address: string, clients: ContractClients, data?: OrganContractData): Promise<OrganEntry[]>;
Lire une entrée d'un organe, par index.
static loadEntry(address: string, index: string, clients: ContractClients): Promise<OrganEntry>;
Trouver l'entrée d'une adresse dans un organe, si elle en est membre.
static loadEntryForAccount(address: string, account: string, clients: ContractClients): Promise<OrganEntry | undefined>;
Lire une permission d'un organe, par index.
static loadPermission(address: string, index: string, clients: ContractClients): Promise<OrganPermission>;
Lire toutes les permissions d'un organe.
static loadPermissions(address: string, clients: ContractClients, data?: OrganContractData): Promise<OrganPermission[]>;
Encoder un appel à une fonction d'organe, pour l'utiliser comme opération de proposition avec Procedure.createOperation().
const call = await Organ.populateTransaction(organAddress, walletClient, 'addEntries', [ { address: memberAddress }])const operation = Procedure.createOperation(call)
static populateTransaction(address: string, walletClient: WalletClient, functionName: OrganFunctionName | string, ...args: unknown[]): Promise<{ to: string; data: string; functionName: string; }>;
Relire tout l'organe depuis la chaîne.
reload(): Promise<Organ>;
Relire la référence de métadonnées depuis la chaîne.
reloadData(): Promise<Organ>;
Relire les entrées depuis la chaîne.
reloadEntries(): Promise<Organ>;
Relire les permissions depuis la chaîne.
reloadPermissions(): Promise<Organ>;
Retirer des entrées du registre, par index.
removeEntries: (indexes: string[], options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Révoquer toutes les permissions d'une adresse.
removePermission: (permission: string, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Remplacer une entrée du registre.
replaceEntry: (index: number, entry: OrganEntryInput, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Transférer des permissions d'une adresse à une autre.
replacePermission: (oldPermissionAddress: string, newOrganPermission: OrganPermission, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Convertir l'organe en JSON simple.
toJson: () => OrganJson;
Remplacer la référence aux métadonnées off-chain de l'organe.
updateCid: (cid: string, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Envoyer des jetons ERC-20 détenus par l'organe.
withdrawERC20: (token: string, to: string, amount: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Envoyer un jeton ERC-721 détenu par l'organe.
withdrawERC721: (token: string, to: string, tokenId: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Envoyer de l'ether détenu par l'organe.
withdrawEther: (to: string, value: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;
Une entrée du registre d'un organe : un membre, un document, ou les deux.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse Ethereum du membre, ou l'adresse zéro. |
cid | string | Référence à un document, ou une chaîne vide. |
index | string | Position dans le registre, à partir de 1. |
name | string | null | Nom affiché. |
Une entrée à ajouter à un organe : une adresse, une référence de document, ou les deux.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse Ethereum du membre. |
cid | string | Référence à un document. |
Les données d'un organe, déployé ou encore à l'état de brouillon.
| Propriété | Type | Description |
|---|---|---|
address | string | null | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
balance | string | null | Solde en ether, en wei. |
chainId | string | null | Chaîne sur laquelle vit l'organe. |
cid | string | null | Référence aux métadonnées off-chain de l'organe. |
description | string | null | Description libre. |
entries | Array<{ index: string; address: string; cid: string; name?: string | null; }> | null | Membres et documents enregistrés dans l'organe. |
forwarder | string | null | Forwarder de confiance relayant les transactions sans gas. |
isDeployed | boolean | null | Indique si le contrat existe on-chain. |
name | string | null | Nom affiché. |
organigramId | string | null | Organigramme auquel appartient l'organe. |
permissions | OrganPermission[] | null | Adresses autorisées à agir sur l'organe, avec leurs drapeaux de permission. |
publicClient | PublicClient | null | Client utilisé pour les lectures. |
salt | string | null | Sel qui détermine l'adresse du clone. |
walletClient | WalletClient | null | Client qui signe les transactions. |
Un organe en JSON simple, pour le stocker ou l'envoyer.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
balance | string | Solde en ether, en wei. |
chainId | string | Chaîne sur laquelle vit l'organe. |
cid | string | Référence aux métadonnées off-chain de l'organe. |
description | string | Description libre. |
entries | OrganEntry[] | Membres et documents enregistrés dans l'organe. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
name | string | Nom affiché. |
organigramId | string | Organigramme auquel appartient l'organe. |
permissions | OrganPermission[] | Adresses autorisées à agir sur l'organe, avec leurs drapeaux de permission. |
salt | string | null | Sel qui détermine l'adresse du clone. |
Les permissions qu'une adresse détient sur un organe.
| Propriété | Type | Description |
|---|---|---|
permissionAddress | string | Adresse qui reçoit les permissions, généralement une procédure. |
permissionValue | number | Champ de bits de PERMISSIONS . |
Les fonctions d'organe qu'une opération de proposition peut appeler.
| Nom | Valeur | Description |
|---|---|---|
addEntries | "addEntries" | Ajouter des entrées. |
addPermission | "addPermission" | Accorder des permissions à une adresse. |
removeEntries | "removeEntries" | Retirer des entrées. |
removePermission | "removePermission" | Révoquer les permissions d'une adresse. |
replaceEntry | "replaceEntry" | Remplacer une entrée. |
replacePermission | "replacePermission" | Transférer des permissions à une autre adresse. |
withdrawERC20 | "withdrawERC20" | Envoyer des jetons ERC-20. |
withdrawERC721 | "withdrawERC721" | Envoyer un jeton ERC-721. |
withdrawEther | "withdrawEther" | Envoyer de l'ether. |
Lister les noms des permissions contenues dans une valeur de permission.
getPermissionsSet: (permissions: number) => string[]
Drapeaux binaires des permissions qu'une adresse peut détenir sur un organe. Combinez-les avec |.
PERMISSIONS.ADD_ENTRIES | PERMISSIONS.REMOVE_ENTRIES
Une procédure permet aux membres de certains organes de modifier d'autres organes. Les proposants soumettent une proposition, une liste d'opérations construite avec Procedure.createOperation(). Avec modération, un modérateur la présente ou la bloque. Les décideurs l'adoptent ou la rejettent ensuite, seuls dans une NominationProcedure, par vote dans une VoteProcedure, ou par vote pondéré par un jeton dans une ERC20VoteProcedure, et l'adoption exécute les opérations. Chaque action existe aussi en variante signée : l'utilisateur signe avec une méthode sign… , et n'importe quel compte soumet la signature avec la méthode …BySig correspondante, si bien que les utilisateurs n'ont pas besoin de gas.
Les règles selon lesquelles les membres de certains organes peuvent modifier d'autres organes.
Une proposition est une liste d'opérations. Les proposants la soumettent avec propose(). Avec modération, un modérateur la présente avec presentProposal() ou la bloque avec blockProposal(). Les décideurs l'adoptent ou la rejettent ensuite, selon le type de procédure, et l'adoption exécute ses opérations. Chaque action a aussi une variante signée (sign… puis …BySig), afin qu'un relais la soumette et que les utilisateurs n'aient pas besoin de gas.
constructor(input: ProcedureInput);
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
chainId | string | Chaîne sur laquelle vit la procédure. |
cid | string | Référence aux métadonnées off-chain de la procédure. |
contract | OrganigramContract | Instance de contrat viem, une fois chargé. |
data | string | Paramètres propres au type de procédure, sous forme de chaîne JSON, comme la durée du vote. |
deciders | string | Organe dont les membres adoptent ou rejettent les propositions, ou une adresse unique. |
description | string | Description libre. |
forwarder | string | Forwarder de confiance relayant les transactions sans gas. |
INTERFACE | string | Identifiant d'interface ERC-165 des contrats de procédure. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
metadata | string | Métadonnées off-chain, sous forme de chaîne JSON. |
moderators | string | Organe dont les membres peuvent présenter ou bloquer les propositions, lorsque la modération est activée. |
name | string | Nom affiché. |
OPERATIONS_FUNCTIONS | ProcedureProposalOperationFunction[] | Fonctions qu'une opération de proposition peut appeler, avec ce dont un formulaire a besoin pour les construire. |
organigramId | string | Organigramme auquel appartient la procédure. |
proposals | ProcedureProposal[] | Propositions soumises jusqu'ici. |
proposers | string | Organe dont les membres peuvent soumettre des propositions, ou une adresse unique. |
publicClient | PublicClient | Client utilisé pour les lectures. |
salt | string | Sel qui détermine l'adresse du clone. |
type | ProcedureType | Type de procédure enregistré dont cette procédure est un clone. |
typeName | ProcedureTypeName | Type de procédure : nomination, vote ou erc20Vote. |
walletClient | WalletClient | Client qui signe les transactions. |
withModeration | boolean | Indique si les propositions doivent être présentées par un modérateur avant la décision. |
Régler une proposition : pour un vote, compter les bulletins une fois le vote terminé, puis l'exécuter ou la clore.
applyProposal(proposalKey: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Régler une proposition, avec une application signée par un autre compte.
applyProposalBySig(input: SignedProposalActionInput & { signature: string; }, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Bloquer une proposition en tant que modérateur, avant sa décision.
blockProposal(proposalKey: string, reason: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Bloquer une proposition signée par un modérateur.
blockProposalBySig(input: SignedBlockProposalInput & { signature: string; }, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Construire une opération qui fait appeler par un organe un contrat extérieur à l'organisation.
static createExternalCallOperation(input: ExternalCallOperationInput): ProcedureProposalOperation;
Transformer un appel de contrat, comme le résultat de Organ.populateTransaction(), en opération de proposition.
static createOperation(input: { to: string; data: string; value?: number | string | bigint; index?: number | string; }): ProcedureProposalOperation;
Les clients viem de la procédure.
protected getClients(): ContractClients;
Lire le prochain nonce de signature d'un compte.
getNonce(account: string): Promise<bigint>;
Domaine EIP-712 des signatures de cette procédure.
getTypedDataDomain(): { name: string; version: string; chainId: bigint; verifyingContract: `0x${string}`; };
Indiquer si un contrat est une procédure.
static isProcedure(address: string, clients: ContractClients): Promise<boolean>;
Lire une procédure depuis la chaîne, avec ses propositions.
static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<Procedure>;
Lire les rôles, la référence de métadonnées et le nombre de propositions d'une procédure.
static loadData(address: string, clients: ContractClients): Promise<ProcedureContractData>;
Lire une proposition d'une procédure.
static loadProposal(address: string, proposalKey: string, clients: ContractClients): Promise<ProcedureProposal>;
Lire toutes les propositions d'une procédure.
static loadProposals(address: string, clients: ContractClients, data?: ProcedureContractData): Promise<ProcedureProposal[]>;
Normaliser une opération lue depuis la chaîne.
static parseOperation(rawOperation: unknown): ProcedureProposalOperation;
Présenter une proposition aux décideurs, en tant que modérateur.
presentProposal(proposalKey: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Présenter une proposition signée par un modérateur.
presentProposalBySig(input: SignedProposalActionInput & { signature: string; }, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;
Soumettre une proposition.
propose(input: { cid: string; operations: ProcedureProposalOperation[]; options?: TransactionOptions; }): Promise<ProcedureProposal>;
Paramètres
| Nom | Type | Description |
|---|---|---|
input | { cid: string; operations: ProcedureProposalOperation[]; options?: TransactionOptions; } | Référence aux métadonnées de la proposition, qui doit être une référence CID, et ses opérations. |
Soumettre une proposition signée par un autre compte.
proposeBySig(input: SignedProposalInput & { signature: string; }): Promise<OrganigramTransaction>;
Relire les rôles et la référence de métadonnées depuis la chaîne.
reloadData(): Promise<Procedure>;
Relire une proposition depuis la chaîne.
reloadProposal(proposalKey: string): Promise<Procedure>;
Relire toutes les propositions depuis la chaîne.
reloadProposals(): Promise<Procedure>;
Signer l'application d'une proposition, pour applyProposalBySig().
signApplyProposal(input: SignedProposalActionInput): Promise<string>;
Signer le blocage d'une proposition, pour blockProposalBySig().
signBlockProposal(input: SignedBlockProposalInput): Promise<string>;
Signer la présentation d'une proposition, pour presentProposalBySig().
signPresentProposal(input: SignedProposalActionInput): Promise<string>;
Signer une proposition, afin qu'un autre compte la soumette avec proposeBySig().
Le signataire ne paie pas de gas : n'importe quel compte peut soumettre la signature avec la méthode correspondante …BySig .
signProposal(input: SignedProposalInput): Promise<string>;
Convertir la procédure en JSON simple.
toJson: () => ProcedureJson;
Un appel à un contrat extérieur à l'organisation, effectué par un organe.
| Propriété | Type | Description |
|---|---|---|
data | string | Appel encodé. |
index | string | number | Position de l'opération dans la proposition. |
organAddress | string | Organe qui effectue l'appel. Il doit autoriser cet appel dans sa liste blanche d'exécution. |
target | string | Contrat appelé. |
value | string | bigint | number | Ether envoyé avec l'appel, en wei. |
Un paramètre décodé d'une opération, pour l'afficher ou le modifier.
| Propriété | Type | Description |
|---|---|---|
action | OperationParamAction | À quoi sert le paramètre. |
parser | unknown | Fonction qui transforme la valeur du formulaire en argument de l'appel. |
type | OperationParamType | Nature du paramètre. |
value | unknown | Valeur décodée. |
Les données d'une procédure, déployée ou encore à l'état de brouillon.
| Propriété | Type | Description |
|---|---|---|
address | string | null | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
chainId | string | null | Chaîne sur laquelle vit la procédure. |
cid | string | null | Référence aux métadonnées off-chain de la procédure. |
data | string | null | Paramètres propres au type de procédure, sous forme de chaîne JSON, comme la durée du vote. |
deciders | string | Organe dont les membres adoptent ou rejettent les propositions, ou une adresse unique. |
description | string | null | Description libre. |
forwarder | string | null | Forwarder de confiance relayant les transactions sans gas. |
isDeployed | boolean | null | Indique si le contrat existe on-chain. |
metadata | string | null | Métadonnées off-chain, sous forme de chaîne JSON. |
moderatorMode | ERC20VoteRoleMode | null | Indique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne. |
moderators | string | null | Organe dont les membres peuvent présenter ou bloquer les propositions, lorsque la modération est activée. |
name | string | null | Nom affiché. |
organigramId | string | null | Organigramme auquel appartient la procédure. |
proposals | ProcedureProposal[] | null | Propositions soumises jusqu'ici. |
proposerMode | ERC20VoteRoleMode | null | Indique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne. |
proposers | string | null | Organe dont les membres peuvent soumettre des propositions, ou une adresse unique. |
publicClient | PublicClient | null | Client utilisé pour les lectures. |
requireMemberMajority | boolean | null | Indique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton. |
salt | string | null | Sel qui détermine l'adresse du clone. |
type | ProcedureType | Type de procédure enregistré dont cette procédure est un clone. |
typeName | string | Type de procédure : nomination, vote ou erc20Vote. |
voterMode | ERC20VoteRoleMode | null | Indique si les votants sont les membres d'un organe ou les détenteurs du jeton. |
walletClient | WalletClient | null | Client qui signe les transactions. |
withModeration | boolean | null | Indique si les propositions doivent être présentées par un modérateur avant la décision. |
Une proposition soumise à une procédure, et où elle en est.
| Propriété | Type | Description |
|---|---|---|
adopted | boolean | Indique si les décideurs l'ont adoptée. |
applied | boolean | Indique si elle est réglée : opérations exécutées si elle est adoptée, close si elle est rejetée. |
blocked | boolean | Indique si un modérateur l'a bloquée. |
blockReason | string | Pourquoi un modérateur l'a bloquée. |
cid | string | Référence à ses métadonnées off-chain. |
creator | string | Adresse qui l'a soumise. |
key | string | Identifiant de la proposition dans sa procédure. |
metadata | ProposalMetadata | Métadonnées off-chain, une fois chargées. |
operations | ProcedureProposalOperation[] | Appels effectués une fois adoptée. |
presented | boolean | Indique si elle est parvenue aux décideurs, après modération si celle-ci est activée. |
transactionHash | string | Hash de la transaction qui l'a soumise. |
Un appel qu'une proposition effectue une fois adoptée.
Construisez-le avec Procedure.createOperation() plutôt qu'à la main.
| Propriété | Type | Description |
|---|---|---|
data | string | Appel encodé. |
description | string | Explication montrée à l'utilisateur. |
function | ProcedureProposalOperationFunction | La fonction appelée, quand elle est connue. |
functionSelector | string | Sélecteur sur quatre octets de la fonction appelée. |
index | string | Position dans la proposition. |
params | OperationParam[] | Paramètres décodés, pour les afficher. |
processed | boolean | Indique si l'appel a été exécuté. |
target | string | Contrat appelé. L'adresse zéro appelle la procédure elle-même. |
value | string | Ether envoyé avec l'appel, en wei. |
Une fonction qu'une opération de proposition peut appeler, avec ce dont un formulaire a besoin pour construire l'appel.
| Propriété | Type | Description |
|---|---|---|
abi | unknown | Fragment d'ABI, pour les fonctions extérieures au contrat d'organe. |
funcSig | string | Sélecteur de fonction sur quatre octets. |
key | OperationKey | Nom de la fonction. |
label | string | Libellé affiché. |
params | OperationParamType[] | Natures de ses paramètres, dans l'ordre. |
signature | string | Signature Solidity. |
tags | OperationTag[] | Mots-clés décrivant la fonction. |
target | 'organ' | 'self' | Indique si l'appel vise un organe ou la procédure elle-même. |
Une implémentation de procédure enregistrée sur une chaîne, dont les procédures sont clonées.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat d'implémentation. |
fields | { [key: string]: ProcedureTypeField; } | Paramètres propres au type, par nom. |
key | string | Nom du type de procédure. |
metadata | { cid?: string; label?: string; description?: string; } | Libellé, description et référence de métadonnées du type. |
Un paramètre d'un type de procédure, tel qu'affiché dans un formulaire, comme la durée du vote.
| Propriété | Type | Description |
|---|---|---|
defaultValue | string | Valeur utilisée quand aucune n'est fournie. |
description | string | Explication montrée à l'utilisateur. |
label | string | Libellé affiché. |
name | string | Clé du paramètre dans la procédure data. |
type | 'string' | 'number' | 'boolean' | 'roleMode' | 'moderatorRoleMode' | Nature du champ. |
Ce que dit une proposition, stocké off-chain : titre, description et pièces jointes.
| Propriété | Type | Description |
|---|---|---|
cid | string | Référence à un fichier joint. |
description | string | Description. |
discussion | string | Lien vers une discussion. |
file | string | Nom du fichier joint. |
subtitle | string | Sous-titre. |
title | string | Titre. |
Un blocage de proposition à signer, afin qu'un autre compte le soumette.
Extends SignedProposalActionInput.
| Propriété | Type | Description |
|---|---|---|
reason | string | Pourquoi la proposition est bloquée. |
Une action sur une proposition à signer, afin qu'un autre compte la soumette.
| Propriété | Type | Description |
|---|---|---|
deadline | bigint | number | Heure Unix, en secondes, après laquelle la signature est refusée. |
nonce | bigint | Nonce de signature actuel du signataire, issu de getNonce(). |
proposalKey | string | Proposition à laquelle s'applique l'action. |
Une proposition à signer, afin qu'un autre compte la soumette.
| Propriété | Type | Description |
|---|---|---|
cid | string | Référence aux métadonnées de la proposition. |
deadline | bigint | number | Heure Unix, en secondes, après laquelle la signature est refusée. |
nonce | bigint | Nonce de signature actuel du signataire, issu de getNonce(). |
operations | ProcedureProposalOperation[] | Opérations de la proposition. |
Les rôles qu'un compte détient dans une procédure.
export type AccountInOrgans = { moderators?: boolean; proposers?: boolean; deciders?: boolean;};
L'état du vote sur une proposition.
export type Election = { proposalKey: string; start: string; votesCount: string; hasVoted: boolean; approvals?: string; objections?: string; eligibleVotes?: string; approved?: boolean;};
La fonction qu'appelle une opération, telle que listée dans Procedure.OPERATIONS_FUNCTIONS.
export type OperationKey = 'addEntries' | 'removeEntries' | 'replaceEntry' | 'addPermission' | 'removePermission' | 'replacePermission' | 'updateMetadata' | 'withdrawEther' | 'withdrawERC20' | 'withdrawERC721' | 'externalCall' | string;
À quoi sert un paramètre d'opération dans un formulaire.
export type OperationParamAction = 'select' | 'create' | 'update' | 'delete' | 'withdraw' | 'deposit' | 'transfer' | 'block';
Nature d'un paramètre d'opération, utilisée pour construire son formulaire.
export type OperationParamType = 'cid' | 'entry' | 'entries' | 'address' | 'bytes' | 'addresses' | 'index' | 'indexes' | 'organ' | 'oldPermissionAddress' | 'newPermissionAddress' | 'permissionAddress' | 'permissionValue' | 'proposal' | 'proposals' | 'amount' | 'tokenId';
Mot-clé décrivant ce que fait une opération, utilisé pour la filtrer et l'étiqueter.
export type OperationTag = 'cid' | 'entries' | 'permissions' | 'coins' | 'collectibles' | 'erc721' | 'erc20' | 'erc1155' | 'ether' | 'add' | 'replace' | 'remove' | 'deposit' | 'withdraw' | 'transfer';
Une procédure en JSON simple, pour la stocker ou l'envoyer.
export type ProcedureJson = { isDeployed: boolean; address: string; deciders: string; typeName: ProcedureTypeName; name: string; description: string; cid: string; salt?: string | null; chainId: string; data: string; metadata?: string; proposers: string; moderators: string; withModeration: boolean; proposerMode?: ERC20VoteRoleMode; moderatorMode?: ERC20VoteRoleMode; voterMode?: ERC20VoteRoleMode; requireMemberMajority?: boolean; forwarder: string; proposals?: ProcedureProposal[]; args?: unknown[]; type: ProcedureType; organigramId?: string | null;};
Une procédure dans laquelle n'importe quel décideur adopte ou rejette seul une proposition.
constructor(procedureInput: ProcedureInput);
| Propriété | Type | Description |
|---|---|---|
contract | OrganigramContract | Instance de contrat viem, une fois chargé. |
INTERFACE | string | Identifiant d'interface ERC-165 des procédures de nomination. |
typeName | ProcedureTypeName | Toujours nomination. |
Lire une procédure de nomination depuis la chaîne, avec ses propositions.
static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<NominationProcedure>;
Adopter une proposition en tant que décideur, ce qui exécute ses opérations.
nominate(proposalKey: string, options?: TransactionOptions): Promise<void>;
Adopter une proposition avec une adoption signée par un décideur.
nominateBySig(input: { proposalKey: string; nonce: bigint; deadline: bigint | number; signature: string; }): Promise<void>;
Rejeter une proposition en tant que décideur.
reject(proposalKey: string, options?: TransactionOptions): Promise<void>;
Signer l'adoption d'une proposition, pour nominateBySig().
Le signataire ne paie pas de gas : n'importe quel compte peut soumettre la signature avec la méthode correspondante …BySig .
signNomination(input: { proposalKey: string; nonce: bigint; deadline: bigint | number; }): Promise<string>;
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.
constructor(input: VoteProcedureInput);
| Propriété | Type | Description |
|---|---|---|
contract | OrganigramContract | Instance de contrat viem, une fois chargé. |
elections | Election[] | État du vote sur chaque proposition. |
INTERFACE | string | Identifiant d'interface ERC-165 des procédures de vote. |
majoritySize | string | Part des bulletins qui doivent approuver, en millièmes de pour cent. |
quorumSize | string | Part des votants qui doivent voter, en millièmes de pour cent. |
typeName | ProcedureTypeName | Toujours vote. |
voteDuration | string | Durée du vote, en secondes. |
Indiquer si une proposition est adoptée, une fois son vote terminé.
count(proposalKey: string): Promise<boolean>;
Lire une procédure de vote depuis la chaîne, avec ses propositions et ses scrutins.
static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<VoteProcedure>;
Lire l'état du vote sur une proposition.
static loadElection(address: string, proposalKey: string, clients: ContractClients, voteDuration?: bigint, contract?: OrganigramContract, blockTimestamp?: bigint): Promise<Election>;
Lire l'état du vote sur chaque proposition.
static loadElections(address: string, clients: ContractClients, proposalsLength?: number): Promise<Election[]>;
Signer un vote, pour voteBySig().
Le signataire ne paie pas de gas : n'importe quel compte peut soumettre la signature avec la méthode correspondante …BySig .
signVote(input: { proposalKey: string; approval: boolean; nonce: bigint; deadline: bigint | number; }): Promise<string>;
Convertir la procédure en JSON simple.
toJson: () => ProcedureJson;
Voter pour ou contre une proposition, en tant que décideur.
vote(proposalKey: string, choice: 'for' | 'against', options?: TransactionOptions): Promise<void>;
Émettre un vote signé par un décideur.
voteBySig(input: { proposalKey: string; approval: boolean; nonce: bigint; deadline: bigint | number; signature: string; }): Promise<void>;
Les données d'une procédure de vote.
export type VoteProcedureInput = ProcedureInput & { quorumSize: string; voteDuration: string; majoritySize: string; elections: Election[];};
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.
constructor(input: ERC20VoteProcedureInput);
| Propriété | Type | Description |
|---|---|---|
contract | OrganigramContract | Instance de contrat viem, une fois chargé. |
erc20 | string | Jeton dont les soldes pondèrent les votes. |
INTERFACE | string | Identifiant d'interface ERC-165 des procédures de vote ERC-20. |
moderatorMode | ERC20VoteRoleMode | Indique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne. |
proposerMode | ERC20VoteRoleMode | Indique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne. |
requireMemberMajority | boolean | Indique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton. |
typeName | ProcedureTypeName | Toujours erc20Vote. |
voterMode | ERC20VoteRoleMode | Indique si les votants sont les membres d'un organe ou les détenteurs du jeton. |
Lire le solde de jetons d'un compte, ou du portefeuille connecté.
erc20Balance(account?: string): Promise<bigint>;
Lire une procédure de vote ERC-20 depuis la chaîne, avec ses propositions et ses scrutins.
static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<ERC20VoteProcedure>;
Convertir la procédure en JSON simple.
toJson: () => ProcedureJson;
Voter pour ou contre une proposition, avec le poids de vos jetons.
vote(proposalKey: string, choice: 'for' | 'against', options?: TransactionOptions): Promise<void>;
Les données d'une procédure de vote ERC-20.
export type ERC20VoteProcedureInput = Omit<VoteProcedureInput, 'type' | 'typeName'> & { erc20: string; proposerMode?: ERC20VoteRoleMode; moderatorMode?: ERC20VoteRoleMode; voterMode?: ERC20VoteRoleMode; requireMemberMajority?: boolean;};
Tout ce qu'il faut pour encoder l'initialisation d'un clone de procédure.
| Propriété | Type | Description |
|---|---|---|
args | unknown[] | Paramètres propres au type de procédure, sous forme de chaînes hexadécimales. |
cid | string | Référence aux métadonnées de la procédure. |
deciders | string | Organe ou adresse des décideurs. |
forwarder | string | Forwarder de confiance relayant les transactions sans gas. |
moderatorMode | ERC20VoteRoleMode | Indique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne. |
moderators | string | Organe ou adresse des modérateurs. |
options | TransactionOptions | Options de transaction. |
proposerMode | ERC20VoteRoleMode | Indique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne. |
proposers | string | Organe ou adresse des proposants. |
requireMemberMajority | boolean | Indique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton. |
typeName | ProcedureTypeName | Type de procédure. |
voterMode | ERC20VoteRoleMode | Indique si les votants sont les membres d'un organe ou les détenteurs du jeton. |
withModeration | boolean | Indique si la modération est activée. |
Qui détient un rôle dans un vote ERC-20 : les membres d'un organe, les détenteurs du jeton, ou personne.
export type ERC20VoteRoleMode = 'organ' | 'token' | 'disabled';
Données d'appel encodées.
export type PopulatedTransactionData = { data: string;};
Nom d'un type de procédure.
export type ProcedureTypeName = 'erc20Vote' | 'nomination' | 'vote';
Renvoyer la classe du SDK d'un type de procédure.
getProcedureClass: (typeName: string) => Promise<typeof import("./erc20Vote").ERC20VoteProcedure | typeof import("./vote").VoteProcedure | typeof import("./nomination").NominationProcedure>
Renvoyer les types de procédures enregistrés sur une chaîne.
getProcedureTypes: (chainId?: string) => Partial<Record<ProcedureTypeName, ProcedureType>>
Les actifs sont des jetons ERC-20 détenus par des organes : des actifs simples, ou des titres de capital dont une procédure approuve les transferts.
Un jeton ERC-20 détenu par des organes : un actif simple ou des titres de capital.
constructor(input: AssetInput);
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
chainId | string | Chaîne sur laquelle vit l'actif. |
decisionProcedure | string | null | Procédure qui approuve les transferts de ce jeton de capital. |
description | string | Description libre. |
image | string | null | URL du logo. |
initialSupply | number | Offre émise au déploiement, en jetons entiers. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
kind | 'asset' | 'equity' | asset pour un jeton simple, equity pour des parts de société dont une procédure approuve les transferts. |
name | string | Nom du token. |
organigramId | string | null | Organigramme auquel appartient l'actif. |
salt | string | null | Sel qui détermine l'adresse du clone. |
symbol | string | Symbole du token. |
userBalance | string | Solde du portefeuille connecté, dans la plus petite unité. |
Hydrater un actif à partir de l'état de la chaîne.
static load: (address: string, clients: ContractClients, initialAsset?: AssetInput) => Promise<(Asset & { userBalance: string; }) | undefined>;
Convertir l'actif en une structure sécurisée pour JSON.
toJson(): AssetJson;
Les données d'un actif, déployé ou encore à l'état de brouillon.
| Propriété | Type | Description |
|---|---|---|
address | string | null | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
chainId | string | null | Chaîne sur laquelle vit l'actif. |
decisionProcedure | string | null | Procédure autorisée à régler les transferts de ce jeton de capital. |
description | string | null | Description libre. |
image | string | null | URL du logo. |
initialSupply | number | null | Offre émise au déploiement, en jetons entiers. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
kind | 'asset' | 'equity' | null | asset pour un jeton simple, equity pour des parts de société dont une procédure approuve les transferts. |
name | string | null | Nom du token. |
organigramId | string | null | Organigramme auquel appartient l'actif. |
salt | string | null | Sel qui détermine l'adresse du clone. |
symbol | string | null | Symbole du token. |
userBalance | string | null | Solde du portefeuille connecté, dans la plus petite unité. |
Un actif en JSON simple, pour le stocker ou l'envoyer.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon. |
chainId | string | Chaîne sur laquelle vit l'actif. |
decisionProcedure | string | null | Procédure autorisée à régler les transferts de ce jeton de capital. |
image | string | null | URL du logo. |
initialSupply | number | Offre émise au déploiement, en jetons entiers. |
isDeployed | boolean | Indique si le contrat existe on-chain. |
kind | 'asset' | 'equity' | asset pour un jeton simple, equity pour des parts de société dont une procédure approuve les transferts. |
name | string | Nom du token. |
organigramId | string | null | Organigramme auquel appartient l'actif. |
salt | string | null | Sel qui détermine l'adresse du clone. |
symbol | string | Symbole du token. |
userBalance | string | Solde du portefeuille connecté, dans la plus petite unité. |
Offre émise par défaut pour un nouvel actif, en jetons entiers.
const ERC20_INITIAL_SUPPLY = 10000000
Les contrats ne stockent que des références. Les métadonnées et les documents vivent off-chain, et sont référencés par des références CID de la forme og://workspace/<workspace>/<key>. Chaque version d'un fichier est décrite par un manifeste. Les fichiers chiffrés utilisent trois niveaux de clés : une clé de contenu chiffre un fichier, une clé de groupe partagée par les membres d'un groupe d'accès enveloppe les clés de contenu, et la paire de clés de chaque membre désenveloppe les clés de groupe. Ces fonctions s'exécutent sur la Web Crypto API de l'appareil de l'utilisateur : gardez-y les clés privées, ne les envoyez jamais à un serveur et ne les journalisez jamais.
Le groupe dont les membres peuvent déchiffrer un fichier.
| Propriété | Type | Description |
|---|---|---|
epoch | number | Génération de la clé de groupe, incrémentée quand la composition change. |
scopeId | string | Identifiant de cet espace de travail, de cette organisation, de cet organe ou de cette procédure. |
scopeType | AccessGroupScopeType | Ce à quoi le groupe est rattaché. |
Décrit une version d'un fichier chiffré : où se trouve son texte chiffré et comment obtenir sa clé.
| Propriété | Type | Description |
|---|---|---|
accessGroup | EncryptedCidAccessGroup | Groupe dont la clé désenveloppe la clé de contenu. |
contentType | ScopeEnvelopeContentType | Ce que contient le fichier. |
createdAt | string | Date de création ISO. |
encryptedContent | { cid: string; algorithm: typeof ENCRYPTION_ALGORITHM; iv: string; size: number; mime?: string; name?: string; } | CID, algorithme, vecteur d'initialisation, taille, type et nom du texte chiffré. |
kind | typeof ENCRYPTED_CID_KIND | typeof FILE_VERSION_MANIFEST_KIND | Format du manifeste. |
logicalKey | string | Nom stable du fichier. |
previousManifestCid | string | CID du manifeste de la version précédente. |
retentionState | ScopeEnvelopeRetentionState | État du cycle de vie de cette version. |
scopeEnvelope | ScopeEnvelopeCheckpoint | Point de contrôle de l'espace de travail auquel appartient cette version. |
scopeRef | ScopeEnvelopeReference | Espace de travail auquel appartient le fichier. |
signature | string | Signature de l'auteur sur le manifeste. |
signedByAddress | string | Adresse de l'auteur. |
version | 1 | Version du format de manifeste. |
wrappedContentKey | WrappedContentKey | Clé de contenu, chiffrée avec la clé de groupe. |
Une clé publique de chiffrement lue dans un message Sign-In with Ethereum.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse qui s'est connectée. |
keyVersion | number | Version de la paire de clés. |
kind | typeof ENCRYPTION_PUBLIC_KEY_SIWE_RESOURCE_KIND | Format de la ressource. |
publicKey | JsonWebKey | Clé publique, au format JSON Web Key. |
Une référence CID découpée en ses parties par parseCidRef().
| Propriété | Type | Description |
|---|---|---|
logicalKey | string | Nom stable du fichier dans son espace de travail, quelle que soit sa version. |
manifestCid | string | Lorsqu'il est présent, épingle la référence à un manifeste de version de fichier immuable. |
scopeRef | ScopeEnvelopeReference | Espace de travail auquel appartient le fichier. |
Décrit une version d'un fichier stocké en clair sur IPFS.
| Propriété | Type | Description |
|---|---|---|
accessGroup | EncryptedCidAccessGroup | Groupe avec lequel le fichier est partagé, le cas échéant. |
contentType | ScopeEnvelopeContentType | Ce que contient le fichier. |
createdAt | string | Date de création ISO. |
kind | typeof FILE_VERSION_MANIFEST_KIND | Format du manifeste. |
logicalKey | string | Nom stable du fichier. |
previousManifestCid | string | CID du manifeste de la version précédente. |
publicContent | { cid: string; size: number; mime?: string; name?: string; } | CID, taille, type et nom du contenu. |
retentionState | ScopeEnvelopeRetentionState | État du cycle de vie de cette version. |
scopeEnvelope | ScopeEnvelopeCheckpoint | Point de contrôle de l'espace de travail auquel appartient cette version. |
scopeRef | ScopeEnvelopeReference | Espace de travail auquel appartient le fichier. |
signature | string | Signature de l'auteur sur le manifeste. |
signedByAddress | string | Adresse de l'auteur. |
version | 1 | Version du format de manifeste. |
La clé publique de chiffrement d'un membre, utilisée pour envelopper une clé de groupe à son intention.
| Propriété | Type | Description |
|---|---|---|
address | string | Adresse Ethereum du membre. |
keyVersion | number | Version de la paire de clés. |
publicKey | JsonWebKey | Clé publique, au format JSON Web Key. |
Un résumé signé de tous les fichiers d'un espace de travail à un instant donné.
| Propriété | Type | Description |
|---|---|---|
epoch | number | Génération du groupe d'accès à ce moment-là. |
membershipHash | string | Hash des membres qui avaient accès. |
rootHash | string | Hash de chaque entrée de fichier, issu de computeScopeEnvelopeRoot(). |
La version actuelle d'un fichier dans un point de contrôle d'espace de travail.
| Propriété | Type | Description |
|---|---|---|
contentType | ScopeEnvelopeContentType | Ce que contient le fichier. |
currentManifestCid | string | CID du manifeste de sa version actuelle. |
logicalKey | string | Nom stable du fichier. |
previousManifestCid | string | CID du manifeste de la version précédente. |
retentionState | ScopeEnvelopeRetentionState | État du cycle de vie de cette version. |
updatedAt | string | Date ISO de la dernière modification. |
version | number | Numéro de version, à partir de 1. |
L'espace de travail auquel appartient une référence CID.
| Propriété | Type | Description |
|---|---|---|
scopeId | string | Identifiant de l'espace de travail. |
scopeType | ScopeEnvelopeScopeType | Type de périmètre, toujours workspace. |
La paire de clés de chiffrement de l'utilisateur courant, telle que conservée sur son appareil.
| Propriété | Type | Description |
|---|---|---|
keyPair | CryptoKeyPair | Paire de clés Web Crypto. |
keyVersion | number | Version de la paire de clés. |
publicKey | JsonWebKey | Clé publique, au format JSON Web Key. |
Une clé de contenu chiffrée avec une clé de groupe.
| Propriété | Type | Description |
|---|---|---|
algorithm | typeof ENCRYPTION_ALGORITHM | Algorithme d'enveloppement. |
ciphertext | string | Clé de contenu chiffrée, en base64. |
iv | string | Vecteur d'initialisation, en base64. |
Une clé de groupe chiffrée pour un membre, que seule sa clé privée peut désenvelopper.
| Propriété | Type | Description |
|---|---|---|
algorithm | typeof GROUP_KEY_ALGORITHM | Algorithme d'enveloppement. |
ciphertext | string | Clé de groupe chiffrée, en base64. |
ephemeralPublicKey | JsonWebKey | Clé publique à usage unique utilisée pour l'accord de clés. |
iv | string | Vecteur d'initialisation, en base64. |
recipientAddress | string | Adresse Ethereum du membre. |
recipientKeyVersion | number | Version de la paire de clés du membre utilisée. |
Ce à quoi un groupe d'accès est rattaché : ses membres partagent une clé de groupe.
export type AccessGroupScopeType = 'workspace' | 'organization' | 'organ' | 'procedure' | 'certifiedProof';
Ce que contient un fichier stocké, comme une entrée d'organe ou une proposition.
export type EncryptedCidContentType = 'entry' | 'proposal' | 'organMetadata' | 'procedureMetadata' | 'certifiedProof' | 'file' | string;
Une version d'un fichier stocké, public ou chiffré.
export type FileVersionManifest = PublicFileVersionManifest | EncryptedCidManifest;
Ce que contient le fichier derrière une référence CID.
export type ScopeEnvelopeContentType = EncryptedCidContentType;
Cycle de vie d'une version de fichier : actuelle, remplacée par une plus récente, révoquée ou archivée.
export type ScopeEnvelopeRetentionState = 'current' | 'superseded' | 'revoked' | 'archived';
Périmètre d'une référence CID. Seuls les espaces de travail sont pris en charge.
export type ScopeEnvelopeScopeType = 'workspace';
Copier des octets dans un ArrayBuffer.
bytesToArrayBuffer: (value: ArrayBuffer | Uint8Array) => ArrayBuffer
Décoder des octets UTF-8 en chaîne.
bytesToText: (value: ArrayBuffer | Uint8Array) => string
Hacher chaque entrée de fichier d'un espace de travail pour obtenir le hash racine d'un point de contrôle.
computeScopeEnvelopeRoot: (items: Record<string, ScopeEnvelopeItem>) => Promise<string>
Créer une version de clé à partir d'une date, sous forme d'horodatage Unix en secondes.
createEncryptionKeyVersion: (timestamp?: number) => number
Construire le message qu'un utilisateur signe pour enregistrer une clé publique de chiffrement.
createEncryptionPublicKeyMessage: (address: string, publicKey: JsonWebKey, keyVersion: number) => string
Encoder une clé publique de chiffrement comme ressource Sign-In with Ethereum.
createEncryptionPublicKeySiweResource: (address: string, publicKey: JsonWebKey, keyVersion: number) => string
Décrire une nouvelle version d'un fichier chiffré.
createFileVersionManifest: (input: { contentType: ScopeEnvelopeContentType; scopeRef: ScopeEnvelopeReference; logicalKey: string; encryptedCid: string; encryptedContentIv: string; encryptedContentSize: number; wrappedContentKey: WrappedContentKey; previousManifestCid?: string | null; retentionState?: ScopeEnvelopeRetentionState; scopeEnvelope?: ScopeEnvelopeCheckpoint; mime?: string; name?: string; signature?: string | null; signedByAddress?: string | null; createdAt?: Date | string;}) => FileVersionManifest
Décrire une nouvelle version d'un fichier stocké en clair.
createPublicFileVersionManifest: (input: { contentType: ScopeEnvelopeContentType; scopeRef: ScopeEnvelopeReference; logicalKey: string; publicCid: string; publicContentSize: number; previousManifestCid?: string | null; retentionState?: ScopeEnvelopeRetentionState; scopeEnvelope?: ScopeEnvelopeCheckpoint; mime?: string; name?: string; signature?: string | null; signedByAddress?: string | null; createdAt?: Date | string;}) => PublicFileVersionManifest
Créer un point de contrôle d'espace de travail.
createScopeEnvelopeCheckpoint: (input: { epoch: number; membershipHash: string; rootHash: string;}) => ScopeEnvelopeCheckpoint
Décrire la version actuelle d'un fichier pour un point de contrôle d'espace de travail.
createScopeEnvelopeItem: (input: { logicalKey: string; currentManifestCid: string; contentType: ScopeEnvelopeContentType; version?: number; retentionState?: ScopeEnvelopeRetentionState; previousManifestCid?: string; updatedAt?: Date | string;}) => ScopeEnvelopeItem
Construire le message qu'un membre signe pour se porter garant d'un point de contrôle d'espace de travail.
createScopeEnvelopeSignatureMessage: (input: { scopeRef: ScopeEnvelopeReference; checkpoint: ScopeEnvelopeCheckpoint; items: Record<string, ScopeEnvelopeItem>; previousEnvelopeCid?: string | null;}) => string
Déchiffrer des octets chiffrés par encryptBytes().
decryptBytes: (encryptedBytes: ArrayBuffer | Uint8Array, key: CryptoKey, iv: string) => Promise<Uint8Array>
Chiffrer des octets avec AES-GCM, et renvoyer le texte chiffré avec son vecteur d'initialisation.
encryptBytes: (bytes: ArrayBuffer | Uint8Array, key: CryptoKey) => Promise<{ encryptedBytes: Uint8Array; iv: string;}>
Exporter la moitié privée d'une paire de clés utilisateur au format JSON Web Key.
Ne stockez le résultat que chiffré, par exemple dans un coffre à passkeys.
exportUserPrivateKey: (keyPair: CryptoKeyPair) => Promise<JsonWebKey>
Exporter la moitié publique d'une paire de clés utilisateur au format JSON Web Key, pour la publier.
exportUserPublicKey: (keyPair: CryptoKeyPair) => Promise<JsonWebKey>
Construire une référence CID, og://workspace/<workspace>/<key>, éventuellement épinglée à une version.
formatCidRef({ scopeType: 'workspace', scopeId: workspaceId }, 'bylaws')
formatCidRef: (scopeRef: ScopeEnvelopeReference, logicalKey: string, manifestCid?: string) => string
Générer la clé AES qui chiffre un fichier.
generateContentKey: () => Promise<CryptoKey>
Générer la clé AES partagée par les membres d'un groupe d'accès.
generateGroupKey: () => Promise<CryptoKey>
Générer la paire de clés ECDH P-256 avec laquelle un utilisateur déchiffre ses clés de groupe.
Gardez la clé privée sur l'appareil de l'utilisateur : ne l'envoyez jamais à un serveur et ne la journalisez jamais.
generateUserEncryptionKeyPair: () => Promise<CryptoKeyPair>
Renvoyer la Web Crypto API, et lever une erreur là où elle n'est pas disponible.
getCrypto: () => Crypto
Générer un vecteur d'initialisation aléatoire de 12 octets pour AES-GCM.
getRandomIv: () => Uint8Array
Importer une clé publique utilisateur depuis un JSON Web Key, en la gardant exportable.
importExtractableUserPublicKey: (publicKey: JsonWebKey) => Promise<CryptoKey>
Importer une clé privée utilisateur depuis un JSON Web Key.
importUserPrivateKey: (privateKey: JsonWebKey) => Promise<CryptoKey>
Indiquer si une chaîne est une référence CID.
isCidRef: (value?: string | null) => boolean
Indiquer si une valeur est le manifeste d'un fichier chiffré.
isEncryptedCidManifest: (value: unknown) => value is EncryptedCidManifest
Indiquer si une valeur est un manifeste de version de fichier, public ou chiffré.
isFileVersionManifest: (value: unknown) => value is FileVersionManifest
Indiquer si une version de clé est déjà un horodatage Unix valide en secondes.
isValidEncryptionKeyVersion: (keyVersion: number) => boolean
Convertir une version de clé en secondes Unix, en acceptant les millisecondes, ou renvoyer null si elle est invalide.
normalizeEncryptionKeyVersion: (keyVersion: number) => number | null
Découper une référence CID en ses parties, ou renvoyer null si ce n'en est pas une.
parseCidRef: (value?: string | null) => ParsedCidRef | null
Trouver la clé publique de chiffrement d'une adresse parmi les ressources Sign-In with Ethereum.
parseEncryptionPublicKeySiweResource: (resources: string[] | undefined, address: string) => EncryptionPublicKeySiweResource | null
Déchiffrer une clé de contenu avec une clé de groupe.
unwrapContentKey: (wrappedContentKey: WrappedContentKey, groupKey: CryptoKey) => Promise<CryptoKey>
Déchiffrer une clé de groupe avec la clé privée de son destinataire.
unwrapGroupKey: (wrappedGroupKey: WrappedGroupKey, recipientPrivateKey: CryptoKey) => Promise<CryptoKey>
Chiffrer une clé de contenu avec une clé de groupe.
wrapContentKey: (contentKey: CryptoKey, groupKey: CryptoKey) => Promise<WrappedContentKey>
Chiffrer une clé de groupe pour un membre, avec sa clé publique.
wrapGroupKeyForRecipient: (groupKey: CryptoKey, recipient: RecipientEncryptionKey) => Promise<WrappedGroupKey>
kind des manifestes écrits avant le versionnage des fichiers, toujours lu par compatibilité.
const ENCRYPTED_CID_KIND: "organigram.encrypted-cid.v1"
Algorithme symétrique utilisé pour le contenu et les clés de contenu : AES-256-GCM.
const ENCRYPTION_ALGORITHM: "A256GCM"
kind de la clé publique de chiffrement qu'un utilisateur publie dans un message Sign-In with Ethereum.
const ENCRYPTION_PUBLIC_KEY_SIWE_RESOURCE_KIND: "organigram.encryption-public-key.v1"
kind d'un manifeste de version de fichier, public ou chiffré.
const FILE_VERSION_MANIFEST_KIND: "organigram.file-version-manifest.v1"
Algorithme utilisé pour envelopper une clé de groupe pour un membre : ECDH sur P-256, puis AES-256-GCM.
const GROUP_KEY_ALGORITHM: "ECDH-P256+A256GCM"
Les contrats du protocole sont déployés une fois par chaîne. Ces fonctions indiquent quelles chaînes sont prises en charge, où se trouvent les contrats, et à quelle adresse un nouveau clone sera déployé.
Renvoyer l'URL de l'explorateur de blocs d'une chaîne.
getChainExplorerBaseUrl: (chainId: string) => string | undefined
Renvoyer la définition de chaîne viem d'un identifiant de chaîne.
getConfiguredChain: (chainId: string) => Chain | undefined
Réseau par défaut : Anvil quand des déploiements locaux sont chargés, Ethereum mainnet sinon. Passez explicitement un identifiant de chaîne pour utiliser tout autre réseau.
getDefaultChainId: () => string
Retourne
| Type | Description |
|---|---|
string | L'identifiant de chaîne par défaut. |
Renvoyer l'adresse d'un contrat du protocole sur une chaîne, et lever une erreur s'il n'y est pas déployé.
getDeployment: (chainId: string | number | bigint | null | undefined, deploymentName: ProtocolDeploymentName) => string
URL de l'application Organigram : NEXT_PUBLIC_HOST_URL, ou l'origine de la page courante dans un navigateur.
getHostUrl: (hostUrl?: string | undefined) => URL | null
Lister les chaînes sur lesquelles le protocole est déployé.
getSupportedChainIds: () => string[]
Indiquer si l'application tourne sur un nom d'hôte local.
isLocalHost: (hostUrl?: string) => boolean
Indiquer si le protocole est déployé sur une chaîne.
isSupportedChainId: (chainId: string | number | bigint | null | undefined) => boolean
Adresses des contrats du protocole sur chaque chaîne prise en charge, par identifiant de chaîne.
const deployedAddresses: ProtocolDeployments
Nom d'un contrat du protocole.
export type ContractName = 'Organ' | 'Asset' | 'EquityToken' | 'ERC20VoteProcedure' | 'VoteProcedure' | 'NominationProcedure' | 'OrganigramClient';
Prédire l'adresse d'un clone déployé par l'OrganigramClient.
Le client lie chaque sel au compte qui déploie le clone : seule une adresse prédite avec deployer est l'adresse qu'aura le clone. Sans lui, le résultat n'est qu'un identifiant unique provisoire pour un brouillon.
predictContractAddress: (input: { type: Omit<ContractName, "OrganigramClient">; chainId: string; salt: string; deployer?: string;}) => string
Petites fonctions utilitaires utilisées dans la bibliothèque et l'application Organigram.
Mettre en majuscule la première lettre d'une chaîne.
capitalize: (s: string) => string
Générer une chaîne hexadécimale aléatoire de 32 octets, par exemple un sel.
createRandom32BytesHexId: () => `0x${string}`
Une JSON.stringify de remplacement qui écrit les bigints sous forme de chaînes terminées par n.
handleJsonBigInt: (_key: string, value: unknown) => unknown
Analyser un nombre, ou renvoyer la valeur de repli si le résultat n'est pas fini.
parseFiniteNumber: (value: number | string | null | undefined, fallback: number) => number
Modifier cette page
Sur cette page:
© 2026 Organigram SAS
Tous droits réservés.