Tasks
Create task
Inputs
Outputs
Code
```solidity
function createTask(
string calldata _metadata,
uint64 _deadline,
ERC20Transfer[] calldata _budget,
address _manager,
PreapprovedApplication[] calldata _preapprove
) external returns (uint256 taskId) {
_ensureNotDisabled();
taskId = taskCounter++;
Task storage task = tasks[taskId];
task.metadata = _metadata;
task.deadline = _deadline;
task.budgetCount = uint8(_budget.length);
Escrow escrow = Escrow(Clones.clone(escrowImplementation));
escrow.__Escrow_init();
task.escrow = escrow;
for (uint8 i; i < uint8(_budget.length); ) {
_budget[i].tokenContract.transferFrom(
_msgSender(),
address(escrow),
_budget[i].amount
);
task.budget[i] = _budget[i];
unchecked {
++i;
}
}
task.manager = _manager;
task.creator = _msgSender();
// Default values are already correct (save gas)
// task.state = TaskState.Open;
unchecked {
// Impossible to overflow due to openTasks <= taskCounter
++openTasks;
}
// Gas optimization
if (_preapprove.length > 0) {
task.applicationCount = uint16(_preapprove.length);
for (uint16 i; i < uint16(_preapprove.length); ) {
Application storage application = task.applications[i];
application.applicant = _preapprove[i].applicant;
application.accepted = true;
_ensureRewardEndsWithNextToken(_preapprove[i].reward);
_setRewardBellowBudget(
task,
application,
_preapprove[i].reward
);
unchecked {
++i;
}
}
}
emit TaskCreated(
taskId,
_metadata,
_deadline,
_budget,
_msgSender(),
_manager,
_preapprove
);
}
```Apply for task
Inputs
Outputs
Code
Accept applications
Inputs
Code
Take task
Inputs
Code
Create submission
Inputs
Outputs
Code
Review submission
Inputs
Code
Cancel task
Inputs
Outputs
Code
Accept request
Inputs
Code
Execute request
Inputs
Code
Extend deadline
Inputs
Code
Increase budget
Inputs
Code
Edit metadata
Inputs
Code
Last updated
