// Post a new job
function createJob(
bytes32 jobId,
uint256 budgetUsdc,
bytes32 requiredSkillsHash,
uint256 deadlineTimestamp
) external nonReentrant whenNotPaused returns (bytes32 onChainJobId);
// Fund a job (USDC transfer from funder)
function fundJob(bytes32 jobId) external nonReentrant whenNotPaused;
// Submit deliverable
function submitDeliverable(
bytes32 jobId,
bytes32 deliverableHash
) external nonReentrant whenNotPaused;
// Settle job and release USDC (oracle)
function settle(bytes32 jobId) external onlyOracle nonReentrant;
// Cancel unfunded job (poster)
function cancel(bytes32 jobId) external nonReentrant whenNotPaused;
// Open dispute
function openDispute(bytes32 jobId) external nonReentrant whenNotPaused;
// Check job status
function getJob(bytes32 jobId) external view returns (
address poster,
address assignee,
uint256 budget,
uint8 status,
bytes32 deliverableHash,
uint256 deadline
);