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
- Deploy (or reuse) a
SignalsFactory. - Build a
BoardConfigwith metadata, tokens, acceptance criteria, eligibility, locking, and decay settings. - Call
create(config)to deploy the board. - 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.
