Cas d'usage
Explorer
Docs
Tarifs

Organigram JS

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.

Installation


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.

Comment ça marche

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.

ClasseRôle
OrganigramClientPoint d'entrée. Se connecte au protocole sur une chaîne, déploie des contrats et les charge.
OrganigramL'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.
OrganUn groupe : un registre d'entrées (membres, documents), une liste de permissions et un solde d'actifs.
ProcedureLes règles selon lesquelles les membres de certains organes peuvent modifier d'autres organes.
NominationProcedureUne procédure où n'importe quel membre de l'organe décideur adopte ou rejette seul une proposition.
VoteProcedureUne procédure où les membres d'un organe votent.
ERC20VoteProcedureUne procédure où les votes sont pondérés par un jeton ERC-20.
AssetUn jeton ERC-20, actif simple ou titres de capital d'une société.

Le client

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 }.

Organes et permissions

Un organe stocke trois choses :

  • entrées : chacune est une adresse Ethereum (un membre), une référence de contenu (un document), ou les deux ;
  • permissions : les adresses autorisées à agir sur l'organe, sous forme de champ de bits issu de PERMISSIONS (ADD_ENTRIES, WITHDRAW_ETHER, ADD_PERMISSIONS…). getPermissionsSet() retraduit une valeur en noms ;
  • actifs : de l'ether et des jetons ERC-20, que seules les adresses ayant la permission correspondante peuvent retirer.

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.

Propositions et décisions

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.

  1. propose() soumet la proposition.
  2. Avec modération, un modérateur l'accepte avec presentProposal() ou la rejette avec blockProposal().
  3. Les décideurs tranchent : nominate() ou reject() pour une nomination, vote() puis count() une fois le vote terminé pour les procédures de vote.
  4. L'adoption exécute les opérations sur les organes cibles. 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.

Déployer un organigramme

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.

Stockage off-chain

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.

Utilisation

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 NominationProcedure
const 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.

Contribuer

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.

Client

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.

OrganigramClient

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.

Definition

constructor(input: {
publicClient: PublicClient;
address?: string;
chainId?: string;
procedureTypes?: ProcedureType[];
contract?: OrganigramContract;
walletClient?: WalletClient;
});

PropriétéTypeDescription
addressstringAdresse du contrat OrganigramClient .
assetsAsset[]Actifs chargés jusqu'ici, gardés en cache.
chainIdstringChaîne à laquelle le client est connecté.
contractOrganigramContractInstance de contrat viem du contrat OrganigramClient .
organsOrgan[]Organes chargés jusqu'ici, gardés en cache.
proceduresProcedure[]Procédures chargées jusqu'ici, gardées en cache.
procedureTypesProcedureType[]Types de procédures enregistrés sur cette chaîne.
publicClientPublicClientClient utilisé pour toutes les lectures.
walletClientWalletClientClient qui signe les transactions. Sans lui, le client est en lecture seule.

OrganigramClient.deployAsset

Déployer un seul clone d'actif ERC-20.

Signature

deployAsset(input: {
name: string;
symbol: string;
initialSupply?: number;
salt?: string;
options?: TransactionOptions;
}): Promise<string>;

Paramètres

NomTypeDescription
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

TypeDescription
Promise<string>L'adresse du contrat d'actif déployé.

OrganigramClient.deployAssets

Déployer plusieurs actifs en une seule transaction de lot.

Signature

deployAssets(assets: AssetInput[], options?: TransactionOptions): Promise<string[]>;

Paramètres

NomTypeDescription
assetsAssetInput[]Actifs à déployer.
optionsTransactionOptionsContrôles transactionnels optionnels.

Retourne

TypeDescription
Promise<string[]>Les adresses des actifs déployés dans l'ordre de déploiement.

OrganigramClient.deployClient

Déployer un contrat client Organigram frais avec sa bibliothèque liée.

Signature

static deployClient(input: {
publicClient: PublicClient;
walletClient: WalletClient;
}): Promise<OrganigramClient>;

Paramètres

NomTypeDescription
input{ publicClient: PublicClient; walletClient: WalletClient; }Les clients sont utilisés pour diffuser les déploiements et attendre les reçus.

Retourne

TypeDescription
Promise<OrganigramClient>Une instance SDK prête à l'emploi pointant vers le nouveau client déployé.

OrganigramClient.deployOrgan

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.

Signature

deployOrgan(input?: DeployOrganInput): Promise<Organ>;

Paramètres

NomTypeDescription
inputDeployOrganInputMétadonnées de l'organe optionnelles, droits, entrées et options de transaction.

OrganigramClient.deployOrganigram

Déployer un organigramme complet, y compris ses organes, actifs et procédures.

Signature

deployOrganigram(input: DeployOrganigramInput): Promise<DeployOrganigramResult>;

Paramètres

NomTypeDescription
inputDeployOrganigramInputEntrée de déploiement par lots pour l'ensemble de l'organigramme.

Retourne

TypeDescription
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.

OrganigramClient.deployOrgans

Déployer plusieurs organes dans une seule transaction par lot.

Signature

deployOrgans(deployOrgansInput: DeployOrganInput[]): Promise<Organ[]>;

Paramètres

NomTypeDescription
deployOrgansInputDeployOrganInput[]Définitions d'organes à déployer.

OrganigramClient.deployProcedure

Déployer un clone de procédure unique à partir d'un type de procédure enregistré.

Signature

deployProcedure(input: DeployProcedureInput): Promise<Procedure>;

Paramètres

NomTypeDescription
inputDeployProcedureInputType de procédure, organes de rôle, métadonnées optionnelles et arguments d'initialisation.

OrganigramClient.deployProcedures

Déployer plusieurs procédures dans une seule transaction batch.

Signature

deployProcedures(deployProceduresInput: DeployProcedureInput[]): Promise<Procedure[]>;

Paramètres

NomTypeDescription
deployProceduresInputDeployProcedureInput[]Définitions des procédures à déployer.

OrganigramClient.estimateDeployOrganigramGas

Estimer le gas qu'utiliserait le déploiement complet d'un organigramme, sans portefeuille.

Signature

estimateDeployOrganigramGas(input: DeployOrganigramInput, account: string): Promise<bigint>;

Paramètres

NomTypeDescription
inputDeployOrganigramInputEntrée de déploiement par lots pour l'ensemble de l'organigramme.
accountstringAdresse depuis laquelle le déploiement serait envoyé.

Retourne

TypeDescription
Promise<bigint>Le gas estimé, ou 0n s'il ne reste rien à déployer.

OrganigramClient.getProcedureType

Inférer le type de procédure enregistré d'une copie de procédure déployée.

Signature

getProcedureType(procedureAddress: string): Promise<ProcedureType | null>;

Paramètres

NomTypeDescription
procedureAddressstringAdresse de l'instance de procédure déployée.

OrganigramClient.load

Connecter l'SDK à un contrat client Organigram déjà déployé.

Signature

static load(input: {
address?: string;
publicClient: PublicClient;
walletClient?: WalletClient;
}): Promise<OrganigramClient>;

Paramètres

NomTypeDescription
input{ address?: string; publicClient: PublicClient; walletClient?: WalletClient; }Surcharge d'adresse plus les clients viem utilisés pour les lectures et les écritures.

OrganigramClient.loadAsset

Charger un actif déployé et le garder dans le cache du client.

Signature

loadAsset(address: string, input?: {
fresh?: boolean;
initial?: Asset;
}): Promise<Asset>;

Paramètres

NomTypeDescription
addressstringAdresse 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é.

OrganigramClient.loadContract

Tenter de charger un contrat déployé comme un organe ou une procédure.

Signature

loadContract(address: string, input?: {
fresh?: boolean;
}): Promise<Organ | Procedure | null>;

Paramètres

NomTypeDescription
addressstringAdresse du contrat à inspecter.
input{ fresh?: boolean; }fresh lit la chaîne même si le contrat est en cache.

OrganigramClient.loadContracts

Charger une liste hétérogène d'adresses de contrats déployés dans un organigramme.

Signature

loadContracts(contractAddresses: string[]): Promise<Organigram>;

Paramètres

NomTypeDescription
contractAddressesstring[]Adresses à résoudre en tant qu'organes, procédures ou actifs.

OrganigramClient.loadOrgan

Charger un organe déployé et le garder dans le cache du client.

Signature

loadOrgan(address: string, input?: {
fresh?: boolean;
initial?: OrganInput;
}): Promise<Organ>;

Paramètres

NomTypeDescription
addressstringAdresse 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é.

OrganigramClient.loadOrganigram

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.

Signature

loadOrganigram(organigram: Organigram, input?: {
fresh?: boolean;
}): Promise<Organigram>;

Paramètres

NomTypeDescription
organigramOrganigramDé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.

OrganigramClient.loadProcedure

Charger une procédure déployée et la garder dans le cache du client.

Signature

loadProcedure(address: string, input?: {
fresh?: boolean;
initial?: ProcedureInput;
}): Promise<Procedure>;

Paramètres

NomTypeDescription
addressstringAdresse 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.

OrganigramClient.loadProcedureType

Charger les métadonnées pour une implémentation déployée d'une procédure.

Signature

static loadProcedureType(input: {
addr: string;
cid?: string;
}, publicClient: PublicClient): Promise<ProcedureType>;

Paramètres

NomTypeDescription
input{ addr: string; cid?: string; }Adresse et CID optionnel utilisés pour identifier le type de procédure.
publicClientPublicClientClient en lecture seule utilisé pour les vérifications d'interface.

OrganigramClient.loadProcedureTypes

Lisez le registre des procédures et résolvez chaque type de procédure pris en charge.

Signature

static loadProcedureTypes(input: {
publicClient: PublicClient;
address?: string;
}): Promise<ProcedureType[]>;

Paramètres

NomTypeDescription
input{ publicClient: PublicClient; address?: string; }Adresse du contrat client optionnelle et le client public utilisé pour l'interroger.

DeployOrganigramInput

Entrée d'implantation par lots pour un organigramme complet.

PropriétéTypeDescription
assetsAssetInput[]Actifs à déployer.
organsDeployOrganInput[]Organes à déployer.
proceduresDeployProcedureInput[]Procédures à déployer.

TransactionOptions

Options communes à toutes les écritures.

PropriétéTypeDescription
noncenumberNonce de transaction, pour envoyer plusieurs transactions à la fois.

TransactionOptions.onTransaction

Appelé avec la transaction dès son envoi, avant qu'elle soit minée.

Signature

onTransaction?: (tx: OrganigramTransaction, description: string) => void;

DeployOrganInput

Un organe à déployer : la même forme que partout ailleurs, plus des options de transaction.

Definition

export type DeployOrganInput = OrganInput & {
options?: TransactionOptions;
};

DeployProcedureInput

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.

Definition

export type DeployProcedureInput = ProcedureInput & {
typeName: ProcedureTypeName;
options?: TransactionOptions;
args?: unknown[];
};

DeployOrganigramResult

L'entrée est copiée avec ses nouvelles adresses : les instances de classes reviennent sous forme d'objets simples.

Definition

export type DeployOrganigramResult = readonly [
organs: string[],
assets: string[],
procedures: string[]
] & {
organigram: DeployOrganigramInput;
};

ContractClients

Les clients viem avec lesquels le SDK lit et écrit.

Definition

export type ContractClients = {
publicClient: PublicClient;
walletClient?: WalletClient | null;
};

OrganigramContract

Une instance de contrat viem liée aux clients du SDK.

Definition

export type OrganigramContract = GetContractReturnType<Abi, PublicClient | {
public: PublicClient;
wallet: WalletClient;
}>;

OrganigramTransaction

Une transaction envoyée, avec un wait() qui se résout une fois la transaction minée.

Definition

export type OrganigramTransaction = {
hash: Hex;
wait: () => Promise<OrganigramTransactionReceipt>;
};

OrganigramTransactionReceipt

Le reçu d'une transaction minée.

Definition

export type OrganigramTransactionReceipt = TransactionReceipt & {
gasPrice?: bigint | null;
};

bufferEstimatedGas

Ajouter une marge de 20 % plus 25 000 gas à une estimation de gas.

Signature

bufferEstimatedGas: (estimatedGas: bigint) => bigint

createContractWriteTransaction

Envoyer un appel de contrat avec une estimation de gas majorée, et le renvoyer sous forme d' OrganigramTransaction.

Signature

createContractWriteTransaction: <TAbi extends Abi | readonly unknown[]>(input: {
address: string;
abi: TAbi;
functionName: string;
args?: unknown[];
clients: ContractClients;
nonce?: number;
value?: bigint;
}) => Promise<OrganigramTransaction>

getWalletAddress

Renvoyer l'adresse du compte avec lequel signe un client de portefeuille.

Signature

getWalletAddress: (walletClient: WalletClient) => Promise<Address>

Organigrammes et modèles

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.

Organigram

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()

Definition

constructor(input?: OrganigramInput | keyof typeof templates | string[]);

PropriétéTypeDescription
assetsAsset[]Actifs de l'organisation.
chainIdstringChaîne sur laquelle l'organigramme est déployé.
descriptionstringDescription libre.
edgeTypeOrganigramEdgeTypeStyle de trait des liens du diagramme.
idstringIdentifiant de l'organigramme.
namestringNom affiché.
nodePositionsOrganigramNodePositionsPositions des nœuds du diagramme.
organigramClientOrganigramClient | nullClient utilisé pour déployer et charger l'organigramme.
organsOrgan[]Organes de l'organisation.
proceduresProcedure[]Procédures reliant les organes.
publicClientPublicClient | nullClient utilisé pour les lectures, quand aucun organigramClient n'est attaché.
slugstringNom adapté aux URL.
walletClientWalletClient | nullClient qui signe les transactions, quand aucun organigramClient n'est attaché.
workspaceIdstring | nullEspace de travail auquel appartient l'organigramme dans l'application Organigram.

Organigram.deploy

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.

Signature

deploy(): Promise<Organigram>;

Organigram.editDetails

Modifier le nom, la description ou la disposition du diagramme.

Signature

editDetails(input: {
name?: string;
description?: string;
edgeType?: OrganigramEdgeType;
nodePositions?: OrganigramNodePositions;
contractAddresses?: string[];
}): void;

Organigram.load

Lire depuis la chaîne chaque organe, procédure et actif déployé de l'organigramme.

Signature

load: (input?: {
walletClient?: WalletClient | null;
publicClient?: PublicClient | null;
}) => Promise<Organigram>;

Organigram.setAssets

Remplacer les actifs.

Signature

setAssets(assets: Asset[]): void;

Organigram.setOrgans

Remplacer les organes.

Signature

setOrgans(organs: Organ[]): void;

Organigram.setProcedures

Remplacer les procédures.

Signature

setProcedures(procedures: Procedure[]): void;

Organigram.toJson

Convertir l'organigramme en JSON simple.

Signature

toJson: () => OrganigramJson;

OrganigramEdgeType

Style de trait des liens d'un organigramme.

Definition

export type OrganigramEdgeType = (typeof organigramEdgeTypes)[number];

OrganigramInput

Les données d'un organigramme, comme un modèle issu de getTemplate().

Definition

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;
};

OrganigramJson

Un organigramme en JSON simple, pour le stocker ou l'envoyer.

Definition

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;
};

OrganigramNodePosition

Position d'un nœud dans le diagramme de l'organigramme.

Definition

export type OrganigramNodePosition = {
x: number;
y: number;
};

OrganigramNodePositions

Positions des nœuds dans le diagramme de l'organigramme, par adresse de contrat.

Definition

export type OrganigramNodePositions = Record<string, OrganigramNodePosition>;

ProcedureRoleTypeName

Les trois rôles d'une procédure : qui propose, qui modère, qui décide.

Definition

export type ProcedureRoleTypeName = 'proposers' | 'moderators' | 'deciders';

defaultChainId

Chaîne utilisée par les modèles quand aucune n'est indiquée.

Definition

const defaultChainId: string

defaultOrganigramEdgeType

Style de trait utilisé quand aucun n'est défini.

Definition

const defaultOrganigramEdgeType: OrganigramEdgeType

organigramEdgeTypes

Styles de trait disponibles pour dessiner les liens d'un organigramme.

Definition

const organigramEdgeTypes: readonly ["default", "straight", "step", "smoothstep"]

TemplateName

Nom d'un modèle.

Definition

export type TemplateName = keyof typeof templates;

getTemplate

Renvoyer une copie d'un modèle, avec de nouveaux sels et adresses pour la chaîne donnée.

Signature

getTemplate: (templateName: TemplateName, chainId: string) => OrganigramInput

isTemplateSupportedOnChain

Indiquer si une chaîne dispose de tous les contrats du protocole dont un modèle a besoin.

Signature

isTemplateSupportedOnChain: (templateName: TemplateName, chainId: string) => boolean

renewSaltsAndAddresses

Donner à chaque contrat d'un organigramme un nouveau sel et une nouvelle adresse, et mettre à jour les références entre eux.

Signature

renewSaltsAndAddresses: (organigram: OrganigramInput, chainId: string) => OrganigramInput

templates

Organigrammes prêts à l'emploi, des formes de sociétés (sas, sarl…) aux registres.

Organes

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.

Organ

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.

Definition

constructor(input: OrganInput);

PropriétéTypeDescription
addressstringAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
balancestringSolde en ether, en wei.
chainIdstringChaîne sur laquelle vit l'organe.
cidstringRéférence aux métadonnées off-chain de l'organe.
contractOrganigramContractInstance de contrat viem, une fois chargé.
descriptionstringDescription libre.
entriesOrganEntry[]Membres et documents enregistrés dans l'organe.
forwarderstringForwarder de confiance relayant les transactions sans gas.
INTERFACEstringIdentifiant d'interface ERC-165 des contrats d'organe.
isDeployedbooleanIndique si le contrat existe on-chain.
namestringNom affiché.
organigramIdstringOrganigramme auquel appartient l'organe.
permissionsOrganPermission[]Adresses autorisées à agir sur l'organe, avec leurs drapeaux de permission.
publicClientPublicClientClient utilisé pour les lectures.
saltstring | undefinedSel qui détermine l'adresse du clone.
walletClientWalletClientClient qui signe les transactions.

Organ.addEntries

Ajouter des membres ou des documents au registre.

Signature

addEntries: (entries: OrganEntryInput[], options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.addPermission

Accorder des permissions à une adresse.

Signature

addPermission: (permission: OrganPermission, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.checkAddressPermissions

Lire les drapeaux de permission qu'une adresse détient sur un organe.

Signature

static checkAddressPermissions(organAddress: string, addressToCheck: string, clients: ContractClients): Promise<number>;

Organ.getBalance

Lire le solde en ether d'un organe, en wei.

Signature

static getBalance(address: string, clients: ContractClients): Promise<bigint>;

Organ.isOrgan

Indiquer si un contrat est un organe.

Signature

static isOrgan(address: string, clients: ContractClients): Promise<boolean>;

Organ.load

Lire un organe depuis la chaîne : ses entrées, permissions et métadonnées.

Signature

static load(address: string, clients: ContractClients, initialOrgan?: OrganInput): Promise<Organ>;

Organ.loadData

Lire la référence de métadonnées et la taille des registres d'un organe.

Signature

static loadData(address: string, clients: ContractClients): Promise<OrganContractData>;

Organ.loadEntries

Lire toutes les entrées d'un organe.

Signature

static loadEntries(address: string, clients: ContractClients, data?: OrganContractData): Promise<OrganEntry[]>;

Organ.loadEntry

Lire une entrée d'un organe, par index.

Signature

static loadEntry(address: string, index: string, clients: ContractClients): Promise<OrganEntry>;

Organ.loadEntryForAccount

Trouver l'entrée d'une adresse dans un organe, si elle en est membre.

Signature

static loadEntryForAccount(address: string, account: string, clients: ContractClients): Promise<OrganEntry | undefined>;

Organ.loadPermission

Lire une permission d'un organe, par index.

Signature

static loadPermission(address: string, index: string, clients: ContractClients): Promise<OrganPermission>;

Organ.loadPermissions

Lire toutes les permissions d'un organe.

Signature

static loadPermissions(address: string, clients: ContractClients, data?: OrganContractData): Promise<OrganPermission[]>;

Organ.populateTransaction

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)

Signature

static populateTransaction(address: string, walletClient: WalletClient, functionName: OrganFunctionName | string, ...args: unknown[]): Promise<{
to: string;
data: string;
functionName: string;
}>;

Organ.reload

Relire tout l'organe depuis la chaîne.

Signature

reload(): Promise<Organ>;

Organ.reloadData

Relire la référence de métadonnées depuis la chaîne.

Signature

reloadData(): Promise<Organ>;

Organ.reloadEntries

Relire les entrées depuis la chaîne.

Signature

reloadEntries(): Promise<Organ>;

Organ.reloadPermissions

Relire les permissions depuis la chaîne.

Signature

reloadPermissions(): Promise<Organ>;

Organ.removeEntries

Retirer des entrées du registre, par index.

Signature

removeEntries: (indexes: string[], options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.removePermission

Révoquer toutes les permissions d'une adresse.

Signature

removePermission: (permission: string, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.replaceEntry

Remplacer une entrée du registre.

Signature

replaceEntry: (index: number, entry: OrganEntryInput, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.replacePermission

Transférer des permissions d'une adresse à une autre.

Signature

replacePermission: (oldPermissionAddress: string, newOrganPermission: OrganPermission, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.toJson

Convertir l'organe en JSON simple.

Signature

toJson: () => OrganJson;

Organ.updateCid

Remplacer la référence aux métadonnées off-chain de l'organe.

Signature

updateCid: (cid: string, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.withdrawERC20

Envoyer des jetons ERC-20 détenus par l'organe.

Signature

withdrawERC20: (token: string, to: string, amount: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.withdrawERC721

Envoyer un jeton ERC-721 détenu par l'organe.

Signature

withdrawERC721: (token: string, to: string, tokenId: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

Organ.withdrawEther

Envoyer de l'ether détenu par l'organe.

Signature

withdrawEther: (to: string, value: string | number | bigint, options?: TransactionOptions) => Promise<OrganigramTransactionReceipt>;

OrganEntry

Une entrée du registre d'un organe : un membre, un document, ou les deux.

PropriétéTypeDescription
addressstringAdresse Ethereum du membre, ou l'adresse zéro.
cidstringRéférence à un document, ou une chaîne vide.
indexstringPosition dans le registre, à partir de 1.
namestring | nullNom affiché.

OrganEntryInput

Une entrée à ajouter à un organe : une adresse, une référence de document, ou les deux.

PropriétéTypeDescription
addressstringAdresse Ethereum du membre.
cidstringRéférence à un document.

OrganInput

Les données d'un organe, déployé ou encore à l'état de brouillon.

PropriétéTypeDescription
addressstring | nullAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
balancestring | nullSolde en ether, en wei.
chainIdstring | nullChaîne sur laquelle vit l'organe.
cidstring | nullRéférence aux métadonnées off-chain de l'organe.
descriptionstring | nullDescription libre.
entriesArray<{ index: string; address: string; cid: string; name?: string | null; }> | nullMembres et documents enregistrés dans l'organe.
forwarderstring | nullForwarder de confiance relayant les transactions sans gas.
isDeployedboolean | nullIndique si le contrat existe on-chain.
namestring | nullNom affiché.
organigramIdstring | nullOrganigramme auquel appartient l'organe.
permissionsOrganPermission[] | nullAdresses autorisées à agir sur l'organe, avec leurs drapeaux de permission.
publicClientPublicClient | nullClient utilisé pour les lectures.
saltstring | nullSel qui détermine l'adresse du clone.
walletClientWalletClient | nullClient qui signe les transactions.

OrganJson

Un organe en JSON simple, pour le stocker ou l'envoyer.

PropriétéTypeDescription
addressstringAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
balancestringSolde en ether, en wei.
chainIdstringChaîne sur laquelle vit l'organe.
cidstringRéférence aux métadonnées off-chain de l'organe.
descriptionstringDescription libre.
entriesOrganEntry[]Membres et documents enregistrés dans l'organe.
isDeployedbooleanIndique si le contrat existe on-chain.
namestringNom affiché.
organigramIdstringOrganigramme auquel appartient l'organe.
permissionsOrganPermission[]Adresses autorisées à agir sur l'organe, avec leurs drapeaux de permission.
saltstring | nullSel qui détermine l'adresse du clone.

OrganPermission

Les permissions qu'une adresse détient sur un organe.

PropriétéTypeDescription
permissionAddressstringAdresse qui reçoit les permissions, généralement une procédure.
permissionValuenumberChamp de bits de PERMISSIONS .

OrganFunctionName

Les fonctions d'organe qu'une opération de proposition peut appeler.

NomValeurDescription
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.

getPermissionsSet

Lister les noms des permissions contenues dans une valeur de permission.

Signature

getPermissionsSet: (permissions: number) => string[]

PERMISSIONS

Drapeaux binaires des permissions qu'une adresse peut détenir sur un organe. Combinez-les avec |.


PERMISSIONS.ADD_ENTRIES | PERMISSIONS.REMOVE_ENTRIES

Procédures et propositions

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.

Procedure

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.

Definition

constructor(input: ProcedureInput);

PropriétéTypeDescription
addressstringAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
chainIdstringChaîne sur laquelle vit la procédure.
cidstringRéférence aux métadonnées off-chain de la procédure.
contractOrganigramContractInstance de contrat viem, une fois chargé.
datastringParamètres propres au type de procédure, sous forme de chaîne JSON, comme la durée du vote.
decidersstringOrgane dont les membres adoptent ou rejettent les propositions, ou une adresse unique.
descriptionstringDescription libre.
forwarderstringForwarder de confiance relayant les transactions sans gas.
INTERFACEstringIdentifiant d'interface ERC-165 des contrats de procédure.
isDeployedbooleanIndique si le contrat existe on-chain.
metadatastringMétadonnées off-chain, sous forme de chaîne JSON.
moderatorsstringOrgane dont les membres peuvent présenter ou bloquer les propositions, lorsque la modération est activée.
namestringNom affiché.
OPERATIONS_FUNCTIONSProcedureProposalOperationFunction[]Fonctions qu'une opération de proposition peut appeler, avec ce dont un formulaire a besoin pour les construire.
organigramIdstringOrganigramme auquel appartient la procédure.
proposalsProcedureProposal[]Propositions soumises jusqu'ici.
proposersstringOrgane dont les membres peuvent soumettre des propositions, ou une adresse unique.
publicClientPublicClientClient utilisé pour les lectures.
saltstringSel qui détermine l'adresse du clone.
typeProcedureTypeType de procédure enregistré dont cette procédure est un clone.
typeNameProcedureTypeNameType de procédure : nomination, vote ou erc20Vote.
walletClientWalletClientClient qui signe les transactions.
withModerationbooleanIndique si les propositions doivent être présentées par un modérateur avant la décision.

Procedure.applyProposal

Régler une proposition : pour un vote, compter les bulletins une fois le vote terminé, puis l'exécuter ou la clore.

Signature

applyProposal(proposalKey: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.applyProposalBySig

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

Signature

applyProposalBySig(input: SignedProposalActionInput & {
signature: string;
}, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.blockProposal

Bloquer une proposition en tant que modérateur, avant sa décision.

Signature

blockProposal(proposalKey: string, reason: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.blockProposalBySig

Bloquer une proposition signée par un modérateur.

Signature

blockProposalBySig(input: SignedBlockProposalInput & {
signature: string;
}, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.createExternalCallOperation

Construire une opération qui fait appeler par un organe un contrat extérieur à l'organisation.

Signature

static createExternalCallOperation(input: ExternalCallOperationInput): ProcedureProposalOperation;

Procedure.createOperation

Transformer un appel de contrat, comme le résultat de Organ.populateTransaction(), en opération de proposition.

Signature

static createOperation(input: {
to: string;
data: string;
value?: number | string | bigint;
index?: number | string;
}): ProcedureProposalOperation;

Procedure.getClients

Les clients viem de la procédure.

Signature

protected getClients(): ContractClients;

Procedure.getNonce

Lire le prochain nonce de signature d'un compte.

Signature

getNonce(account: string): Promise<bigint>;

Procedure.getTypedDataDomain

Domaine EIP-712 des signatures de cette procédure.

Signature

getTypedDataDomain(): {
name: string;
version: string;
chainId: bigint;
verifyingContract: `0x${string}`;
};

Procedure.isProcedure

Indiquer si un contrat est une procédure.

Signature

static isProcedure(address: string, clients: ContractClients): Promise<boolean>;

Procedure.load

Lire une procédure depuis la chaîne, avec ses propositions.

Signature

static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<Procedure>;

Procedure.loadData

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

Signature

static loadData(address: string, clients: ContractClients): Promise<ProcedureContractData>;

Procedure.loadProposal

Lire une proposition d'une procédure.

Signature

static loadProposal(address: string, proposalKey: string, clients: ContractClients): Promise<ProcedureProposal>;

Procedure.loadProposals

Lire toutes les propositions d'une procédure.

Signature

static loadProposals(address: string, clients: ContractClients, data?: ProcedureContractData): Promise<ProcedureProposal[]>;

Procedure.parseOperation

Normaliser une opération lue depuis la chaîne.

Signature

static parseOperation(rawOperation: unknown): ProcedureProposalOperation;

Procedure.presentProposal

Présenter une proposition aux décideurs, en tant que modérateur.

Signature

presentProposal(proposalKey: string, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.presentProposalBySig

Présenter une proposition signée par un modérateur.

Signature

presentProposalBySig(input: SignedProposalActionInput & {
signature: string;
}, options?: TransactionOptions): Promise<OrganigramTransactionReceipt>;

Procedure.propose

Soumettre une proposition.

Signature

propose(input: {
cid: string;
operations: ProcedureProposalOperation[];
options?: TransactionOptions;
}): Promise<ProcedureProposal>;

Paramètres

NomTypeDescription
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.

Procedure.proposeBySig

Soumettre une proposition signée par un autre compte.

Signature

proposeBySig(input: SignedProposalInput & {
signature: string;
}): Promise<OrganigramTransaction>;

Procedure.reloadData

Relire les rôles et la référence de métadonnées depuis la chaîne.

Signature

reloadData(): Promise<Procedure>;

Procedure.reloadProposal

Relire une proposition depuis la chaîne.

Signature

reloadProposal(proposalKey: string): Promise<Procedure>;

Procedure.reloadProposals

Relire toutes les propositions depuis la chaîne.

Signature

reloadProposals(): Promise<Procedure>;

Procedure.signApplyProposal

Signer l'application d'une proposition, pour applyProposalBySig().

Signature

signApplyProposal(input: SignedProposalActionInput): Promise<string>;

Procedure.signBlockProposal

Signer le blocage d'une proposition, pour blockProposalBySig().

Signature

signBlockProposal(input: SignedBlockProposalInput): Promise<string>;

Procedure.signPresentProposal

Signer la présentation d'une proposition, pour presentProposalBySig().

Signature

signPresentProposal(input: SignedProposalActionInput): Promise<string>;

Procedure.signProposal

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 .

Signature

signProposal(input: SignedProposalInput): Promise<string>;

Procedure.toJson

Convertir la procédure en JSON simple.

Signature

toJson: () => ProcedureJson;

ExternalCallOperationInput

Un appel à un contrat extérieur à l'organisation, effectué par un organe.

PropriétéTypeDescription
datastringAppel encodé.
indexstring | numberPosition de l'opération dans la proposition.
organAddressstringOrgane qui effectue l'appel. Il doit autoriser cet appel dans sa liste blanche d'exécution.
targetstringContrat appelé.
valuestring | bigint | numberEther envoyé avec l'appel, en wei.

OperationParam

Un paramètre décodé d'une opération, pour l'afficher ou le modifier.

PropriétéTypeDescription
actionOperationParamActionÀ quoi sert le paramètre.
parserunknownFonction qui transforme la valeur du formulaire en argument de l'appel.
typeOperationParamTypeNature du paramètre.
valueunknownValeur décodée.

ProcedureInput

Les données d'une procédure, déployée ou encore à l'état de brouillon.

PropriétéTypeDescription
addressstring | nullAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
chainIdstring | nullChaîne sur laquelle vit la procédure.
cidstring | nullRéférence aux métadonnées off-chain de la procédure.
datastring | nullParamètres propres au type de procédure, sous forme de chaîne JSON, comme la durée du vote.
decidersstringOrgane dont les membres adoptent ou rejettent les propositions, ou une adresse unique.
descriptionstring | nullDescription libre.
forwarderstring | nullForwarder de confiance relayant les transactions sans gas.
isDeployedboolean | nullIndique si le contrat existe on-chain.
metadatastring | nullMétadonnées off-chain, sous forme de chaîne JSON.
moderatorModeERC20VoteRoleMode | nullIndique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne.
moderatorsstring | nullOrgane dont les membres peuvent présenter ou bloquer les propositions, lorsque la modération est activée.
namestring | nullNom affiché.
organigramIdstring | nullOrganigramme auquel appartient la procédure.
proposalsProcedureProposal[] | nullPropositions soumises jusqu'ici.
proposerModeERC20VoteRoleMode | nullIndique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne.
proposersstring | nullOrgane dont les membres peuvent soumettre des propositions, ou une adresse unique.
publicClientPublicClient | nullClient utilisé pour les lectures.
requireMemberMajorityboolean | nullIndique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton.
saltstring | nullSel qui détermine l'adresse du clone.
typeProcedureTypeType de procédure enregistré dont cette procédure est un clone.
typeNamestringType de procédure : nomination, vote ou erc20Vote.
voterModeERC20VoteRoleMode | nullIndique si les votants sont les membres d'un organe ou les détenteurs du jeton.
walletClientWalletClient | nullClient qui signe les transactions.
withModerationboolean | nullIndique si les propositions doivent être présentées par un modérateur avant la décision.

ProcedureProposal

Une proposition soumise à une procédure, et où elle en est.

PropriétéTypeDescription
adoptedbooleanIndique si les décideurs l'ont adoptée.
appliedbooleanIndique si elle est réglée : opérations exécutées si elle est adoptée, close si elle est rejetée.
blockedbooleanIndique si un modérateur l'a bloquée.
blockReasonstringPourquoi un modérateur l'a bloquée.
cidstringRéférence à ses métadonnées off-chain.
creatorstringAdresse qui l'a soumise.
keystringIdentifiant de la proposition dans sa procédure.
metadataProposalMetadataMétadonnées off-chain, une fois chargées.
operationsProcedureProposalOperation[]Appels effectués une fois adoptée.
presentedbooleanIndique si elle est parvenue aux décideurs, après modération si celle-ci est activée.
transactionHashstringHash de la transaction qui l'a soumise.

ProcedureProposalOperation

Un appel qu'une proposition effectue une fois adoptée.

Construisez-le avec Procedure.createOperation() plutôt qu'à la main.

PropriétéTypeDescription
datastringAppel encodé.
descriptionstringExplication montrée à l'utilisateur.
functionProcedureProposalOperationFunctionLa fonction appelée, quand elle est connue.
functionSelectorstringSélecteur sur quatre octets de la fonction appelée.
indexstringPosition dans la proposition.
paramsOperationParam[]Paramètres décodés, pour les afficher.
processedbooleanIndique si l'appel a été exécuté.
targetstringContrat appelé. L'adresse zéro appelle la procédure elle-même.
valuestringEther envoyé avec l'appel, en wei.

ProcedureProposalOperationFunction

Une fonction qu'une opération de proposition peut appeler, avec ce dont un formulaire a besoin pour construire l'appel.

PropriétéTypeDescription
abiunknownFragment d'ABI, pour les fonctions extérieures au contrat d'organe.
funcSigstringSélecteur de fonction sur quatre octets.
keyOperationKeyNom de la fonction.
labelstringLibellé affiché.
paramsOperationParamType[]Natures de ses paramètres, dans l'ordre.
signaturestringSignature Solidity.
tagsOperationTag[]Mots-clés décrivant la fonction.
target'organ' | 'self'Indique si l'appel vise un organe ou la procédure elle-même.

ProcedureType

Une implémentation de procédure enregistrée sur une chaîne, dont les procédures sont clonées.

PropriétéTypeDescription
addressstringAdresse du contrat d'implémentation.
fields{ [key: string]: ProcedureTypeField; }Paramètres propres au type, par nom.
keystringNom du type de procédure.
metadata{ cid?: string; label?: string; description?: string; }Libellé, description et référence de métadonnées du type.

ProcedureTypeField

Un paramètre d'un type de procédure, tel qu'affiché dans un formulaire, comme la durée du vote.

PropriétéTypeDescription
defaultValuestringValeur utilisée quand aucune n'est fournie.
descriptionstringExplication montrée à l'utilisateur.
labelstringLibellé affiché.
namestringClé du paramètre dans la procédure data.
type'string' | 'number' | 'boolean' | 'roleMode' | 'moderatorRoleMode'Nature du champ.

ProposalMetadata

Ce que dit une proposition, stocké off-chain : titre, description et pièces jointes.

PropriétéTypeDescription
cidstringRéférence à un fichier joint.
descriptionstringDescription.
discussionstringLien vers une discussion.
filestringNom du fichier joint.
subtitlestringSous-titre.
titlestringTitre.

SignedBlockProposalInput

Un blocage de proposition à signer, afin qu'un autre compte le soumette.

Extends SignedProposalActionInput.

PropriétéTypeDescription
reasonstringPourquoi la proposition est bloquée.

SignedProposalActionInput

Une action sur une proposition à signer, afin qu'un autre compte la soumette.

PropriétéTypeDescription
deadlinebigint | numberHeure Unix, en secondes, après laquelle la signature est refusée.
noncebigintNonce de signature actuel du signataire, issu de getNonce().
proposalKeystringProposition à laquelle s'applique l'action.

SignedProposalInput

Une proposition à signer, afin qu'un autre compte la soumette.

PropriétéTypeDescription
cidstringRéférence aux métadonnées de la proposition.
deadlinebigint | numberHeure Unix, en secondes, après laquelle la signature est refusée.
noncebigintNonce de signature actuel du signataire, issu de getNonce().
operationsProcedureProposalOperation[]Opérations de la proposition.

AccountInOrgans

Les rôles qu'un compte détient dans une procédure.

Definition

export type AccountInOrgans = {
moderators?: boolean;
proposers?: boolean;
deciders?: boolean;
};

Election

L'état du vote sur une proposition.

Definition

export type Election = {
proposalKey: string;
start: string;
votesCount: string;
hasVoted: boolean;
approvals?: string;
objections?: string;
eligibleVotes?: string;
approved?: boolean;
};

OperationKey

La fonction qu'appelle une opération, telle que listée dans Procedure.OPERATIONS_FUNCTIONS.

Definition

export type OperationKey = 'addEntries' | 'removeEntries' | 'replaceEntry' | 'addPermission' | 'removePermission' | 'replacePermission' | 'updateMetadata' | 'withdrawEther' | 'withdrawERC20' | 'withdrawERC721' | 'externalCall' | string;

OperationParamAction

À quoi sert un paramètre d'opération dans un formulaire.

Definition

export type OperationParamAction = 'select' | 'create' | 'update' | 'delete' | 'withdraw' | 'deposit' | 'transfer' | 'block';

OperationParamType

Nature d'un paramètre d'opération, utilisée pour construire son formulaire.

Definition

export type OperationParamType = 'cid' | 'entry' | 'entries' | 'address' | 'bytes' | 'addresses' | 'index' | 'indexes' | 'organ' | 'oldPermissionAddress' | 'newPermissionAddress' | 'permissionAddress' | 'permissionValue' | 'proposal' | 'proposals' | 'amount' | 'tokenId';

OperationTag

Mot-clé décrivant ce que fait une opération, utilisé pour la filtrer et l'étiqueter.

Definition

export type OperationTag = 'cid' | 'entries' | 'permissions' | 'coins' | 'collectibles' | 'erc721' | 'erc20' | 'erc1155' | 'ether' | 'add' | 'replace' | 'remove' | 'deposit' | 'withdraw' | 'transfer';

ProcedureJson

Une procédure en JSON simple, pour la stocker ou l'envoyer.

Definition

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;
};

NominationProcedure

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

Definition

constructor(procedureInput: ProcedureInput);

PropriétéTypeDescription
contractOrganigramContractInstance de contrat viem, une fois chargé.
INTERFACEstringIdentifiant d'interface ERC-165 des procédures de nomination.
typeNameProcedureTypeNameToujours nomination.

NominationProcedure.load

Lire une procédure de nomination depuis la chaîne, avec ses propositions.

Signature

static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<NominationProcedure>;

NominationProcedure.nominate

Adopter une proposition en tant que décideur, ce qui exécute ses opérations.

Signature

nominate(proposalKey: string, options?: TransactionOptions): Promise<void>;

NominationProcedure.nominateBySig

Adopter une proposition avec une adoption signée par un décideur.

Signature

nominateBySig(input: {
proposalKey: string;
nonce: bigint;
deadline: bigint | number;
signature: string;
}): Promise<void>;

NominationProcedure.reject

Rejeter une proposition en tant que décideur.

Signature

reject(proposalKey: string, options?: TransactionOptions): Promise<void>;

NominationProcedure.signNomination

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 .

Signature

signNomination(input: {
proposalKey: string;
nonce: bigint;
deadline: bigint | number;
}): Promise<string>;

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.

Definition

constructor(input: VoteProcedureInput);

PropriétéTypeDescription
contractOrganigramContractInstance de contrat viem, une fois chargé.
electionsElection[]État du vote sur chaque proposition.
INTERFACEstringIdentifiant d'interface ERC-165 des procédures de vote.
majoritySizestringPart des bulletins qui doivent approuver, en millièmes de pour cent.
quorumSizestringPart des votants qui doivent voter, en millièmes de pour cent.
typeNameProcedureTypeNameToujours vote.
voteDurationstringDurée du vote, en secondes.

VoteProcedure.count

Indiquer si une proposition est adoptée, une fois son vote terminé.

Signature

count(proposalKey: string): Promise<boolean>;

VoteProcedure.load

Lire une procédure de vote depuis la chaîne, avec ses propositions et ses scrutins.

Signature

static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<VoteProcedure>;

VoteProcedure.loadElection

Lire l'état du vote sur une proposition.

Signature

static loadElection(address: string, proposalKey: string, clients: ContractClients, voteDuration?: bigint, contract?: OrganigramContract, blockTimestamp?: bigint): Promise<Election>;

VoteProcedure.loadElections

Lire l'état du vote sur chaque proposition.

Signature

static loadElections(address: string, clients: ContractClients, proposalsLength?: number): Promise<Election[]>;

VoteProcedure.signVote

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 .

Signature

signVote(input: {
proposalKey: string;
approval: boolean;
nonce: bigint;
deadline: bigint | number;
}): Promise<string>;

VoteProcedure.toJson

Convertir la procédure en JSON simple.

Signature

toJson: () => ProcedureJson;

VoteProcedure.vote

Voter pour ou contre une proposition, en tant que décideur.

Signature

vote(proposalKey: string, choice: 'for' | 'against', options?: TransactionOptions): Promise<void>;

VoteProcedure.voteBySig

Émettre un vote signé par un décideur.

Signature

voteBySig(input: {
proposalKey: string;
approval: boolean;
nonce: bigint;
deadline: bigint | number;
signature: string;
}): Promise<void>;

VoteProcedureInput

Les données d'une procédure de vote.

Definition

export type VoteProcedureInput = ProcedureInput & {
quorumSize: string;
voteDuration: string;
majoritySize: string;
elections: Election[];
};

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.

Definition

constructor(input: ERC20VoteProcedureInput);

PropriétéTypeDescription
contractOrganigramContractInstance de contrat viem, une fois chargé.
erc20stringJeton dont les soldes pondèrent les votes.
INTERFACEstringIdentifiant d'interface ERC-165 des procédures de vote ERC-20.
moderatorModeERC20VoteRoleModeIndique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne.
proposerModeERC20VoteRoleModeIndique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne.
requireMemberMajoritybooleanIndique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton.
typeNameProcedureTypeNameToujours erc20Vote.
voterModeERC20VoteRoleModeIndique si les votants sont les membres d'un organe ou les détenteurs du jeton.

ERC20VoteProcedure.erc20Balance

Lire le solde de jetons d'un compte, ou du portefeuille connecté.

Signature

erc20Balance(account?: string): Promise<bigint>;

ERC20VoteProcedure.load

Lire une procédure de vote ERC-20 depuis la chaîne, avec ses propositions et ses scrutins.

Signature

static load(address: string, clients: ContractClients, initialProcedure?: ProcedureInput): Promise<ERC20VoteProcedure>;

ERC20VoteProcedure.toJson

Convertir la procédure en JSON simple.

Signature

toJson: () => ProcedureJson;

ERC20VoteProcedure.vote

Voter pour ou contre une proposition, avec le poids de vos jetons.

Signature

vote(proposalKey: string, choice: 'for' | 'against', options?: TransactionOptions): Promise<void>;

ERC20VoteProcedureInput

Les données d'une procédure de vote ERC-20.

Definition

export type ERC20VoteProcedureInput = Omit<VoteProcedureInput, 'type' | 'typeName'> & {
erc20: string;
proposerMode?: ERC20VoteRoleMode;
moderatorMode?: ERC20VoteRoleMode;
voterMode?: ERC20VoteRoleMode;
requireMemberMajority?: boolean;
};

PopulateInitializeInput

Tout ce qu'il faut pour encoder l'initialisation d'un clone de procédure.

PropriétéTypeDescription
argsunknown[]Paramètres propres au type de procédure, sous forme de chaînes hexadécimales.
cidstringRéférence aux métadonnées de la procédure.
decidersstringOrgane ou adresse des décideurs.
forwarderstringForwarder de confiance relayant les transactions sans gas.
moderatorModeERC20VoteRoleModeIndique si les modérateurs sont les membres d'un organe, les détenteurs du jeton, ou personne.
moderatorsstringOrgane ou adresse des modérateurs.
optionsTransactionOptionsOptions de transaction.
proposerModeERC20VoteRoleModeIndique si les proposants sont les membres d'un organe, les détenteurs du jeton, ou personne.
proposersstringOrgane ou adresse des proposants.
requireMemberMajoritybooleanIndique si une majorité de l'organe décideur doit aussi approuver, en plus du vote pondéré par le jeton.
typeNameProcedureTypeNameType de procédure.
voterModeERC20VoteRoleModeIndique si les votants sont les membres d'un organe ou les détenteurs du jeton.
withModerationbooleanIndique si la modération est activée.

ERC20VoteRoleMode

Qui détient un rôle dans un vote ERC-20 : les membres d'un organe, les détenteurs du jeton, ou personne.

Definition

export type ERC20VoteRoleMode = 'organ' | 'token' | 'disabled';

PopulatedTransactionData

Données d'appel encodées.

Definition

export type PopulatedTransactionData = {
data: string;
};

ProcedureTypeName

Nom d'un type de procédure.

Definition

export type ProcedureTypeName = 'erc20Vote' | 'nomination' | 'vote';

getProcedureClass

Renvoyer la classe du SDK d'un type de procédure.

Signature

getProcedureClass: (typeName: string) => Promise<typeof import("./erc20Vote").ERC20VoteProcedure | typeof import("./vote").VoteProcedure | typeof import("./nomination").NominationProcedure>

getProcedureTypes

Renvoyer les types de procédures enregistrés sur une chaîne.

Signature

getProcedureTypes: (chainId?: string) => Partial<Record<ProcedureTypeName, ProcedureType>>

Actifs

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.

Asset

Un jeton ERC-20 détenu par des organes : un actif simple ou des titres de capital.

Definition

constructor(input: AssetInput);

PropriétéTypeDescription
addressstringAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
chainIdstringChaîne sur laquelle vit l'actif.
decisionProcedurestring | nullProcédure qui approuve les transferts de ce jeton de capital.
descriptionstringDescription libre.
imagestring | nullURL du logo.
initialSupplynumberOffre émise au déploiement, en jetons entiers.
isDeployedbooleanIndique 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.
namestringNom du token.
organigramIdstring | nullOrganigramme auquel appartient l'actif.
saltstring | nullSel qui détermine l'adresse du clone.
symbolstringSymbole du token.
userBalancestringSolde du portefeuille connecté, dans la plus petite unité.

Asset.load

Hydrater un actif à partir de l'état de la chaîne.

Signature

static load: (address: string, clients: ContractClients, initialAsset?: AssetInput) => Promise<(Asset & {
userBalance: string;
}) | undefined>;

Asset.toJson

Convertir l'actif en une structure sécurisée pour JSON.

Signature

toJson(): AssetJson;

AssetInput

Les données d'un actif, déployé ou encore à l'état de brouillon.

PropriétéTypeDescription
addressstring | nullAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
chainIdstring | nullChaîne sur laquelle vit l'actif.
decisionProcedurestring | nullProcédure autorisée à régler les transferts de ce jeton de capital.
descriptionstring | nullDescription libre.
imagestring | nullURL du logo.
initialSupplynumber | nullOffre émise au déploiement, en jetons entiers.
isDeployedbooleanIndique si le contrat existe on-chain.
kind'asset' | 'equity' | nullasset pour un jeton simple, equity pour des parts de société dont une procédure approuve les transferts.
namestring | nullNom du token.
organigramIdstring | nullOrganigramme auquel appartient l'actif.
saltstring | nullSel qui détermine l'adresse du clone.
symbolstring | nullSymbole du token.
userBalancestring | nullSolde du portefeuille connecté, dans la plus petite unité.

AssetJson

Un actif en JSON simple, pour le stocker ou l'envoyer.

PropriétéTypeDescription
addressstringAdresse du contrat, ou adresse prédite tant qu'il s'agit d'un brouillon.
chainIdstringChaîne sur laquelle vit l'actif.
decisionProcedurestring | nullProcédure autorisée à régler les transferts de ce jeton de capital.
imagestring | nullURL du logo.
initialSupplynumberOffre émise au déploiement, en jetons entiers.
isDeployedbooleanIndique 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.
namestringNom du token.
organigramIdstring | nullOrganigramme auquel appartient l'actif.
saltstring | nullSel qui détermine l'adresse du clone.
symbolstringSymbole du token.
userBalancestringSolde du portefeuille connecté, dans la plus petite unité.

ERC20_INITIAL_SUPPLY

Offre émise par défaut pour un nouvel actif, en jetons entiers.

Definition

const ERC20_INITIAL_SUPPLY = 10000000

Contenu off-chain et chiffrement

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.

EncryptedCidAccessGroup

Le groupe dont les membres peuvent déchiffrer un fichier.

PropriétéTypeDescription
epochnumberGénération de la clé de groupe, incrémentée quand la composition change.
scopeIdstringIdentifiant de cet espace de travail, de cette organisation, de cet organe ou de cette procédure.
scopeTypeAccessGroupScopeTypeCe à quoi le groupe est rattaché.

EncryptedCidManifest

Décrit une version d'un fichier chiffré : où se trouve son texte chiffré et comment obtenir sa clé.

PropriétéTypeDescription
accessGroupEncryptedCidAccessGroupGroupe dont la clé désenveloppe la clé de contenu.
contentTypeScopeEnvelopeContentTypeCe que contient le fichier.
createdAtstringDate 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é.
kindtypeof ENCRYPTED_CID_KIND | typeof FILE_VERSION_MANIFEST_KINDFormat du manifeste.
logicalKeystringNom stable du fichier.
previousManifestCidstringCID du manifeste de la version précédente.
retentionStateScopeEnvelopeRetentionStateÉtat du cycle de vie de cette version.
scopeEnvelopeScopeEnvelopeCheckpointPoint de contrôle de l'espace de travail auquel appartient cette version.
scopeRefScopeEnvelopeReferenceEspace de travail auquel appartient le fichier.
signaturestringSignature de l'auteur sur le manifeste.
signedByAddressstringAdresse de l'auteur.
version1Version du format de manifeste.
wrappedContentKeyWrappedContentKeyClé de contenu, chiffrée avec la clé de groupe.

EncryptionPublicKeySiweResource

Une clé publique de chiffrement lue dans un message Sign-In with Ethereum.

PropriétéTypeDescription
addressstringAdresse qui s'est connectée.
keyVersionnumberVersion de la paire de clés.
kindtypeof ENCRYPTION_PUBLIC_KEY_SIWE_RESOURCE_KINDFormat de la ressource.
publicKeyJsonWebKeyClé publique, au format JSON Web Key.

ParsedCidRef

Une référence CID découpée en ses parties par parseCidRef().

PropriétéTypeDescription
logicalKeystringNom stable du fichier dans son espace de travail, quelle que soit sa version.
manifestCidstringLorsqu'il est présent, épingle la référence à un manifeste de version de fichier immuable.
scopeRefScopeEnvelopeReferenceEspace de travail auquel appartient le fichier.

PublicFileVersionManifest

Décrit une version d'un fichier stocké en clair sur IPFS.

PropriétéTypeDescription
accessGroupEncryptedCidAccessGroupGroupe avec lequel le fichier est partagé, le cas échéant.
contentTypeScopeEnvelopeContentTypeCe que contient le fichier.
createdAtstringDate de création ISO.
kindtypeof FILE_VERSION_MANIFEST_KINDFormat du manifeste.
logicalKeystringNom stable du fichier.
previousManifestCidstringCID du manifeste de la version précédente.
publicContent{ cid: string; size: number; mime?: string; name?: string; }CID, taille, type et nom du contenu.
retentionStateScopeEnvelopeRetentionStateÉtat du cycle de vie de cette version.
scopeEnvelopeScopeEnvelopeCheckpointPoint de contrôle de l'espace de travail auquel appartient cette version.
scopeRefScopeEnvelopeReferenceEspace de travail auquel appartient le fichier.
signaturestringSignature de l'auteur sur le manifeste.
signedByAddressstringAdresse de l'auteur.
version1Version du format de manifeste.

RecipientEncryptionKey

La clé publique de chiffrement d'un membre, utilisée pour envelopper une clé de groupe à son intention.

PropriétéTypeDescription
addressstringAdresse Ethereum du membre.
keyVersionnumberVersion de la paire de clés.
publicKeyJsonWebKeyClé publique, au format JSON Web Key.

ScopeEnvelopeCheckpoint

Un résumé signé de tous les fichiers d'un espace de travail à un instant donné.

PropriétéTypeDescription
epochnumberGénération du groupe d'accès à ce moment-là.
membershipHashstringHash des membres qui avaient accès.
rootHashstringHash de chaque entrée de fichier, issu de computeScopeEnvelopeRoot().

ScopeEnvelopeItem

La version actuelle d'un fichier dans un point de contrôle d'espace de travail.

PropriétéTypeDescription
contentTypeScopeEnvelopeContentTypeCe que contient le fichier.
currentManifestCidstringCID du manifeste de sa version actuelle.
logicalKeystringNom stable du fichier.
previousManifestCidstringCID du manifeste de la version précédente.
retentionStateScopeEnvelopeRetentionStateÉtat du cycle de vie de cette version.
updatedAtstringDate ISO de la dernière modification.
versionnumberNuméro de version, à partir de 1.

ScopeEnvelopeReference

L'espace de travail auquel appartient une référence CID.

PropriétéTypeDescription
scopeIdstringIdentifiant de l'espace de travail.
scopeTypeScopeEnvelopeScopeTypeType de périmètre, toujours workspace.

StoredUserEncryptionKeyPair

La paire de clés de chiffrement de l'utilisateur courant, telle que conservée sur son appareil.

PropriétéTypeDescription
keyPairCryptoKeyPairPaire de clés Web Crypto.
keyVersionnumberVersion de la paire de clés.
publicKeyJsonWebKeyClé publique, au format JSON Web Key.

WrappedContentKey

Une clé de contenu chiffrée avec une clé de groupe.

PropriétéTypeDescription
algorithmtypeof ENCRYPTION_ALGORITHMAlgorithme d'enveloppement.
ciphertextstringClé de contenu chiffrée, en base64.
ivstringVecteur d'initialisation, en base64.

WrappedGroupKey

Une clé de groupe chiffrée pour un membre, que seule sa clé privée peut désenvelopper.

PropriétéTypeDescription
algorithmtypeof GROUP_KEY_ALGORITHMAlgorithme d'enveloppement.
ciphertextstringClé de groupe chiffrée, en base64.
ephemeralPublicKeyJsonWebKeyClé publique à usage unique utilisée pour l'accord de clés.
ivstringVecteur d'initialisation, en base64.
recipientAddressstringAdresse Ethereum du membre.
recipientKeyVersionnumberVersion de la paire de clés du membre utilisée.

AccessGroupScopeType

Ce à quoi un groupe d'accès est rattaché : ses membres partagent une clé de groupe.

Definition

export type AccessGroupScopeType = 'workspace' | 'organization' | 'organ' | 'procedure' | 'certifiedProof';

EncryptedCidContentType

Ce que contient un fichier stocké, comme une entrée d'organe ou une proposition.

Definition

export type EncryptedCidContentType = 'entry' | 'proposal' | 'organMetadata' | 'procedureMetadata' | 'certifiedProof' | 'file' | string;

FileVersionManifest

Une version d'un fichier stocké, public ou chiffré.

Definition

export type FileVersionManifest = PublicFileVersionManifest | EncryptedCidManifest;

ScopeEnvelopeContentType

Ce que contient le fichier derrière une référence CID.

Definition

export type ScopeEnvelopeContentType = EncryptedCidContentType;

ScopeEnvelopeRetentionState

Cycle de vie d'une version de fichier : actuelle, remplacée par une plus récente, révoquée ou archivée.

Definition

export type ScopeEnvelopeRetentionState = 'current' | 'superseded' | 'revoked' | 'archived';

ScopeEnvelopeScopeType

Périmètre d'une référence CID. Seuls les espaces de travail sont pris en charge.

Definition

export type ScopeEnvelopeScopeType = 'workspace';

bytesToArrayBuffer

Copier des octets dans un ArrayBuffer.

Signature

bytesToArrayBuffer: (value: ArrayBuffer | Uint8Array) => ArrayBuffer

bytesToText

Décoder des octets UTF-8 en chaîne.

Signature

bytesToText: (value: ArrayBuffer | Uint8Array) => string

computeScopeEnvelopeRoot

Hacher chaque entrée de fichier d'un espace de travail pour obtenir le hash racine d'un point de contrôle.

Signature

computeScopeEnvelopeRoot: (items: Record<string, ScopeEnvelopeItem>) => Promise<string>

createEncryptionKeyVersion

Créer une version de clé à partir d'une date, sous forme d'horodatage Unix en secondes.

Signature

createEncryptionKeyVersion: (timestamp?: number) => number

createEncryptionPublicKeyMessage

Construire le message qu'un utilisateur signe pour enregistrer une clé publique de chiffrement.

Signature

createEncryptionPublicKeyMessage: (address: string, publicKey: JsonWebKey, keyVersion: number) => string

createEncryptionPublicKeySiweResource

Encoder une clé publique de chiffrement comme ressource Sign-In with Ethereum.

Signature

createEncryptionPublicKeySiweResource: (address: string, publicKey: JsonWebKey, keyVersion: number) => string

createFileVersionManifest

Décrire une nouvelle version d'un fichier chiffré.

Signature

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

createPublicFileVersionManifest

Décrire une nouvelle version d'un fichier stocké en clair.

Signature

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

createScopeEnvelopeCheckpoint

Créer un point de contrôle d'espace de travail.

Signature

createScopeEnvelopeCheckpoint: (input: {
epoch: number;
membershipHash: string;
rootHash: string;
}) => ScopeEnvelopeCheckpoint

createScopeEnvelopeItem

Décrire la version actuelle d'un fichier pour un point de contrôle d'espace de travail.

Signature

createScopeEnvelopeItem: (input: {
logicalKey: string;
currentManifestCid: string;
contentType: ScopeEnvelopeContentType;
version?: number;
retentionState?: ScopeEnvelopeRetentionState;
previousManifestCid?: string;
updatedAt?: Date | string;
}) => ScopeEnvelopeItem

createScopeEnvelopeSignatureMessage

Construire le message qu'un membre signe pour se porter garant d'un point de contrôle d'espace de travail.

Signature

createScopeEnvelopeSignatureMessage: (input: {
scopeRef: ScopeEnvelopeReference;
checkpoint: ScopeEnvelopeCheckpoint;
items: Record<string, ScopeEnvelopeItem>;
previousEnvelopeCid?: string | null;
}) => string

decryptBytes

Déchiffrer des octets chiffrés par encryptBytes().

Signature

decryptBytes: (encryptedBytes: ArrayBuffer | Uint8Array, key: CryptoKey, iv: string) => Promise<Uint8Array>

encryptBytes

Chiffrer des octets avec AES-GCM, et renvoyer le texte chiffré avec son vecteur d'initialisation.

Signature

encryptBytes: (bytes: ArrayBuffer | Uint8Array, key: CryptoKey) => Promise<{
encryptedBytes: Uint8Array;
iv: string;
}>

exportUserPrivateKey

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.

Signature

exportUserPrivateKey: (keyPair: CryptoKeyPair) => Promise<JsonWebKey>

exportUserPublicKey

Exporter la moitié publique d'une paire de clés utilisateur au format JSON Web Key, pour la publier.

Signature

exportUserPublicKey: (keyPair: CryptoKeyPair) => Promise<JsonWebKey>

formatCidRef

Construire une référence CID, og://workspace/<workspace>/<key>, éventuellement épinglée à une version.


formatCidRef({ scopeType: 'workspace', scopeId: workspaceId }, 'bylaws')

Signature

formatCidRef: (scopeRef: ScopeEnvelopeReference, logicalKey: string, manifestCid?: string) => string

generateContentKey

Générer la clé AES qui chiffre un fichier.

Signature

generateContentKey: () => Promise<CryptoKey>

generateGroupKey

Générer la clé AES partagée par les membres d'un groupe d'accès.

Signature

generateGroupKey: () => Promise<CryptoKey>

generateUserEncryptionKeyPair

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.

Signature

generateUserEncryptionKeyPair: () => Promise<CryptoKeyPair>

getCrypto

Renvoyer la Web Crypto API, et lever une erreur là où elle n'est pas disponible.

Signature

getCrypto: () => Crypto

getRandomIv

Générer un vecteur d'initialisation aléatoire de 12 octets pour AES-GCM.

Signature

getRandomIv: () => Uint8Array

importExtractableUserPublicKey

Importer une clé publique utilisateur depuis un JSON Web Key, en la gardant exportable.

Signature

importExtractableUserPublicKey: (publicKey: JsonWebKey) => Promise<CryptoKey>

importUserPrivateKey

Importer une clé privée utilisateur depuis un JSON Web Key.

Signature

importUserPrivateKey: (privateKey: JsonWebKey) => Promise<CryptoKey>

isCidRef

Indiquer si une chaîne est une référence CID.

Signature

isCidRef: (value?: string | null) => boolean

isEncryptedCidManifest

Indiquer si une valeur est le manifeste d'un fichier chiffré.

Signature

isEncryptedCidManifest: (value: unknown) => value is EncryptedCidManifest

isFileVersionManifest

Indiquer si une valeur est un manifeste de version de fichier, public ou chiffré.

Signature

isFileVersionManifest: (value: unknown) => value is FileVersionManifest

isValidEncryptionKeyVersion

Indiquer si une version de clé est déjà un horodatage Unix valide en secondes.

Signature

isValidEncryptionKeyVersion: (keyVersion: number) => boolean

normalizeEncryptionKeyVersion

Convertir une version de clé en secondes Unix, en acceptant les millisecondes, ou renvoyer null si elle est invalide.

Signature

normalizeEncryptionKeyVersion: (keyVersion: number) => number | null

parseCidRef

Découper une référence CID en ses parties, ou renvoyer null si ce n'en est pas une.

Signature

parseCidRef: (value?: string | null) => ParsedCidRef | null

parseEncryptionPublicKeySiweResource

Trouver la clé publique de chiffrement d'une adresse parmi les ressources Sign-In with Ethereum.

Signature

parseEncryptionPublicKeySiweResource: (resources: string[] | undefined, address: string) => EncryptionPublicKeySiweResource | null

unwrapContentKey

Déchiffrer une clé de contenu avec une clé de groupe.

Signature

unwrapContentKey: (wrappedContentKey: WrappedContentKey, groupKey: CryptoKey) => Promise<CryptoKey>

unwrapGroupKey

Déchiffrer une clé de groupe avec la clé privée de son destinataire.

Signature

unwrapGroupKey: (wrappedGroupKey: WrappedGroupKey, recipientPrivateKey: CryptoKey) => Promise<CryptoKey>

wrapContentKey

Chiffrer une clé de contenu avec une clé de groupe.

Signature

wrapContentKey: (contentKey: CryptoKey, groupKey: CryptoKey) => Promise<WrappedContentKey>

wrapGroupKeyForRecipient

Chiffrer une clé de groupe pour un membre, avec sa clé publique.

Signature

wrapGroupKeyForRecipient: (groupKey: CryptoKey, recipient: RecipientEncryptionKey) => Promise<WrappedGroupKey>

ENCRYPTED_CID_KIND

kind des manifestes écrits avant le versionnage des fichiers, toujours lu par compatibilité.

Definition

const ENCRYPTED_CID_KIND: "organigram.encrypted-cid.v1"

ENCRYPTION_ALGORITHM

Algorithme symétrique utilisé pour le contenu et les clés de contenu : AES-256-GCM.

Definition

const ENCRYPTION_ALGORITHM: "A256GCM"

ENCRYPTION_PUBLIC_KEY_SIWE_RESOURCE_KIND

kind de la clé publique de chiffrement qu'un utilisateur publie dans un message Sign-In with Ethereum.

Definition

const ENCRYPTION_PUBLIC_KEY_SIWE_RESOURCE_KIND: "organigram.encryption-public-key.v1"

FILE_VERSION_MANIFEST_KIND

kind d'un manifeste de version de fichier, public ou chiffré.

Definition

const FILE_VERSION_MANIFEST_KIND: "organigram.file-version-manifest.v1"

GROUP_KEY_ALGORITHM

Algorithme utilisé pour envelopper une clé de groupe pour un membre : ECDH sur P-256, puis AES-256-GCM.

Definition

const GROUP_KEY_ALGORITHM: "ECDH-P256+A256GCM"

Réseaux et déploiements

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é.

getChainExplorerBaseUrl

Renvoyer l'URL de l'explorateur de blocs d'une chaîne.

Signature

getChainExplorerBaseUrl: (chainId: string) => string | undefined

getConfiguredChain

Renvoyer la définition de chaîne viem d'un identifiant de chaîne.

Signature

getConfiguredChain: (chainId: string) => Chain | undefined

getDefaultChainId

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.

Signature

getDefaultChainId: () => string

Retourne

TypeDescription
stringL'identifiant de chaîne par défaut.

getDeployment

Renvoyer l'adresse d'un contrat du protocole sur une chaîne, et lever une erreur s'il n'y est pas déployé.

Signature

getDeployment: (chainId: string | number | bigint | null | undefined, deploymentName: ProtocolDeploymentName) => string

getHostUrl

URL de l'application Organigram : NEXT_PUBLIC_HOST_URL, ou l'origine de la page courante dans un navigateur.

Signature

getHostUrl: (hostUrl?: string | undefined) => URL | null

getSupportedChainIds

Lister les chaînes sur lesquelles le protocole est déployé.

Signature

getSupportedChainIds: () => string[]

isLocalHost

Indiquer si l'application tourne sur un nom d'hôte local.

Signature

isLocalHost: (hostUrl?: string) => boolean

isSupportedChainId

Indiquer si le protocole est déployé sur une chaîne.

Signature

isSupportedChainId: (chainId: string | number | bigint | null | undefined) => boolean

deployedAddresses

Adresses des contrats du protocole sur chaque chaîne prise en charge, par identifiant de chaîne.

Definition

const deployedAddresses: ProtocolDeployments

ContractName

Nom d'un contrat du protocole.

Definition

export type ContractName = 'Organ' | 'Asset' | 'EquityToken' | 'ERC20VoteProcedure' | 'VoteProcedure' | 'NominationProcedure' | 'OrganigramClient';

predictContractAddress

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.

Signature

predictContractAddress: (input: {
type: Omit<ContractName, "OrganigramClient">;
chainId: string;
salt: string;
deployer?: string;
}) => string

Utilitaires

Petites fonctions utilitaires utilisées dans la bibliothèque et l'application Organigram.

capitalize

Mettre en majuscule la première lettre d'une chaîne.

Signature

capitalize: (s: string) => string

createRandom32BytesHexId

Générer une chaîne hexadécimale aléatoire de 32 octets, par exemple un sel.

Signature

createRandom32BytesHexId: () => `0x${string}`

handleJsonBigInt

Une JSON.stringify de remplacement qui écrit les bigints sous forme de chaînes terminées par n.

Signature

handleJsonBigInt: (_key: string, value: unknown) => unknown

parseFiniteNumber

Analyser un nombre, ou renvoyer la valeur de repli si le résultat n'est pas fini.

Signature

parseFiniteNumber: (value: number | string | null | undefined, fallback: number) => number

Modifier cette page

Sur cette page:

Installation
Le client

Suivez-nous :

© 2026 Organigram SAS

Tous droits réservés.