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

Run a cyberRAISE round

Create a SAFE round, take an investor EOI, allocate it, and close the round

In this tutorial you create a SAFE round on a cyberCORP's RoundManager, take an investor's Expression of Interest, allocate it, and close the round.

Code here is illustrative of the flow, using the real signatures and structs from cybercorps-contracts (develop). The Round and EOI structs are large — check the source for every field.

The flow at a glance:

Prerequisites

A cyberCORP from Tutorial 1. You need its roundManager address and an officer key.

1. Build the round

A round is a Round struct (RoundLib.sol). Build it with the RoundLib builder — draft(), then setTickets, then setAgreement:

RoundType.FCFS accepts EOIs first-come; RoundType.FounderApproved requires the officer to allocate each one.

The escrowedSignature is the authorityOfficer's EIP-712 signature over the round's economic parameters (the EscrowedSignatureData struct in RoundManagerStorage.sol). createRound recomputes the hash from the draft and reverts InvalidEscrowedSignature if it does not verify.

2. Create the round

createRound also creates a cert printer (LedgerEntryToken) for each CyberCertData entry you pass.

3. Investor submits an EOI

The investor signs the round's agreement (EIP-712) offchain and submits an EOI struct (RoundManagerStorage.sol):

4. Allocate the EOI

The officer allocates an accepted EOI. allocate prices the ticket, mints a SAFE cyberCERT per printer, attaches the officer's escrowed signature and an endorsement, and refunds any rounding dust.

5. Close the round

What you just did

  • Built and created a SAFE round, which also created its cert printer.

  • Took a signed EOI, allocated it, and minted the investor's SAFE cyberCERT.

  • Closed the round.

Next

Last updated

Was this helpful?