For the complete documentation index, see llms.txt. This page is also available as Markdown.

Issue a cyberCERT

Create a security-class printer and issue certificates under it

This is how you mint a new register entry on a cyberCORP — stock, a SAFE, an option, or any supported security type.

Prerequisites

  • A cyberCORP and its issuanceManager address.

  • A cert printer (a LedgerEntryToken instance, formerly CyberCertPrinter) for the security class (create one with createCertPrinter if needed).

1. (If needed) create the certificate printer

import {SecurityClass, SecuritySeries} from "src/CyberCorpConstants.sol";

address printer = IIssuanceManager(issuanceManager).createCertPrinter(
    defaultLegend,                 // string[]
    "Acme Series A Preferred",     // name
    "ACME-A",                      // ticker
    "ipfs://acme-cert-art",        // certificate URI
    SecurityClass.PreferredStock,
    SecuritySeries.SeriesA,
    SHARE_EXTENSION_ADDR,          // certificate extension
    ""                             // seriesData — extension-encoded
                                   // series-scope payload; "" if none
);

2. Build the CertificateDetails

From ILedgerEntryToken.sol:

3. Mint

Function
Use when

createCert(certAddress, to, details)

Mint without setting a registered owner.

createCertAndAssign(certAddress, investor, details)

Mint and record the registered owner.

createCertAndAssignWithName(certAddress, investor, details, investorName, endorsementSignature, timestamp)

As above, plus a holder name, an endorsement signature, and its timestamp.

createCertSignAndAssign(certAddress, investor, details, endorsementSignature, registry, agreementId, investorName)

As above, plus a registry/agreement reference.

Other operations

Cert-level operations were moved off the IssuanceManager onto the cert printer itself (LedgerEntryToken), callable by the IssuanceManager or a BorgAuth admin:

  • Endorse: endorseCertificate(tokenId, endorser, signature, agreementId) on the printer (assembles the endorsement onchain); the registered owner can also call addEndorsement(tokenId, endorsement) directly.

  • Issuer signature: addIssuerSignature(tokenId, signature).

  • Void / unvoid: voidCert(tokenId) / unvoidCert(tokenId).

Last updated

Was this helpful?