Skip to content

Creating a Signals Board

A Signals board can be created around a specific theme or purpose, allowing participants to submit initiatives in line with the chosen objective. The board will have an owner who has additional rights and responsibilities to administer the board. It is possible for a DAO to enact ownership functions as the result of a DAO vote, enabling decentralized and permissionless operation of the board.

The board is first deployed via the SignalsFactory contract, and additional timing/incentives configuration can be applied later.

Factory Deployment

Boards are created through the SignalsFactory contract:

function create(BoardConfig calldata config)
    external
    payable
    returns (address)

Returns

  • address - The deployed Signals board contract address

Event Emitted

event BoardCreated(
    address indexed board,
    address indexed owner,
    Metadata boardMetadata
)

Configuration Structure

struct BoardConfig {
    string version;
    address owner;
    address underlyingToken;
    uint256 opensAt;
    uint256 closesAt;
    Metadata boardMetadata;
    AcceptanceCriteria acceptanceCriteria;
    ParticipantRequirements proposerRequirements;
    ParticipantRequirements supporterRequirements;
    LockingConfig lockingConfig;
    DecayConfig decayConfig;
}

Supporting structs:

struct ParticipantRequirements {
    address token;            // Token used for eligibility checks
    uint256 minBalance;
    uint256 minHoldingDuration;
    uint256 minLockAmount;
}
 
struct LockingConfig {
    uint256 lockInterval;         // Time unit for locks (seconds)
    uint256 maxLockIntervals;     // Max lock duration in intervals
    uint256 releaseLockDuration;  // Timelock after acceptance
    uint256 inactivityTimeout;    // Seconds before initiative can expire
}
 
struct DecayConfig {
    DecayCurveType curveType; // 0=linear, 1=exponential
    uint256[] params;         // Curve params
}

Acceptance criteria follow the same structure described in Board Deployment Parameters.

Deployment Process

  1. Deploy (or reuse) a SignalsFactory.
  2. Build a BoardConfig with metadata, tokens, acceptance criteria, eligibility, locking, and decay settings.
  3. Call create(config) to deploy the board.
  4. Optionally link an incentives pool before opening the board.

Post-Deployment Controls

After deployment, the board owner can:

// Timing controls
board.setOpensAt(newOpenTime)
board.setClosesAt(newCloseTime)
 
// Incentives (only while the board is closed)
board.setIncentivesPool(poolAddress, config)
 
// Emergency actions
board.closeBoard()   // Close board normally
board.cancelBoard()  // Cancel board (immediate redemption for all)

Acceptance criteria, eligibility tokens, locking, and decay parameters are fixed at deployment.