{"address":"9yoX9Tsv9MaQ6TXqzDYwSCBrYgqY58X3eBVwF8mNGxDC","metadata":{"name":"baozi_tasks","version":"0.1.0","spec":"0.1.0","description":"Task Wrapper for Baozi Markets"},"instructions":[{"name":"accept_task","docs":["Accept a task by staking bond into vault"],"discriminator":[222,196,79,165,120,30,38,120],"accounts":[{"name":"executor","writable":true,"signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"bond_amount","type":"u64"}]},{"name":"approve_resolution","docs":["Approve a resolution proposal (admin multisig)"],"discriminator":[239,215,26,98,160,130,11,221],"accounts":[{"name":"admin","signer":true},{"name":"admin_config","pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}},{"name":"resolution_proposal","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,115,111,108,117,116,105,111,110]},{"kind":"account","path":"resolution_proposal.task","account":"ResolutionProposal"}]}}],"args":[]},{"name":"cancel_task","docs":["Cancel task (sponsor only, before acceptance)","Returns bounty to sponsor"],"discriminator":[69,228,134,187,134,105,238,48],"accounts":[{"name":"sponsor","writable":true,"signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"challenge_proof","docs":["Challenge submitted proof (sponsor only, within window)"],"discriminator":[82,131,53,171,117,56,43,235],"accounts":[{"name":"sponsor","writable":true,"signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}}],"args":[]},{"name":"close_resolution","docs":["Close resolution proposal after execution"],"discriminator":[55,199,54,160,230,86,194,107],"accounts":[{"name":"payer","writable":true,"signer":true},{"name":"resolution_proposal","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,115,111,108,117,116,105,111,110]},{"kind":"account","path":"resolution_proposal.task","account":"ResolutionProposal"}]}}],"args":[]},{"name":"close_task","docs":["Close task account and recover rent (after resolution/cancellation)"],"discriminator":[55,234,77,69,245,208,54,167],"accounts":[{"name":"sponsor","writable":true,"signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}}],"args":[]},{"name":"close_vault","docs":["Close vault after task is finalized (recover rent)"],"discriminator":[141,103,17,126,72,75,29,29],"accounts":[{"name":"sponsor","writable":true,"signer":true},{"name":"task_meta","pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}}],"args":[]},{"name":"create_task","docs":["Create a new task with bounty locked in vault"],"discriminator":[194,80,6,180,232,127,48,171],"accounts":[{"name":"sponsor","writable":true,"signer":true},{"name":"admin_config","pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"sponsor"},{"kind":"arg","path":"task_id"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"_question","type":"string"},{"name":"task_id","type":"u64"},{"name":"bounty_amount","type":"u64"},{"name":"required_bond","type":"u64"},{"name":"requirements_hash","type":{"array":["u8",32]}},{"name":"deadline","type":"i64"},{"name":"challenge_window_seconds","type":"i64"}]},{"name":"execute_resolution","docs":["Execute resolution after threshold is met","outcome: 0 = sponsor wins, 1 = executor wins"],"discriminator":[1,21,239,205,18,197,46,72],"accounts":[{"name":"caller","signer":true},{"name":"admin_config","pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}},{"name":"resolution_proposal","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,115,111,108,117,116,105,111,110]},{"kind":"account","path":"task_meta"}]}},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"sponsor","writable":true},{"name":"executor","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"expire_task","docs":["Expire task (anyone, after deadline)","- Open tasks: return bounty to sponsor","- Accepted tasks (no proof): slash full bond + return bounty to sponsor"],"discriminator":[116,94,206,205,170,51,156,98],"accounts":[{"name":"payer","signer":true},{"name":"sponsor","writable":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"initialize_admin_config","docs":["Initialize admin config (one-time setup by deployer)"],"discriminator":[133,214,35,2,50,232,95,164],"accounts":[{"name":"payer","writable":true,"signer":true},{"name":"admin_config","writable":true,"pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"admins","type":{"vec":"pubkey"}},{"name":"required_approvals","type":"u8"}]},{"name":"mark_resolved","docs":["Mark task as resolved after challenge window passes without dispute","Executor wins by default"],"discriminator":[127,161,161,97,6,116,35,239],"accounts":[{"name":"caller","signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"executor","writable":true},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]},{"name":"propose_resolution","docs":["Propose resolution for a challenged task (any admin can propose)"],"discriminator":[19,68,181,23,194,146,152,252],"accounts":[{"name":"admin","writable":true,"signer":true},{"name":"admin_config","pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}},{"name":"task_meta","pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"resolution_proposal","writable":true,"pda":{"seeds":[{"kind":"const","value":[114,101,115,111,108,117,116,105,111,110]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[{"name":"outcome","type":"u8"}]},{"name":"submit_proof","docs":["Submit proof for a task"],"discriminator":[54,241,46,84,4,212,46,94],"accounts":[{"name":"executor","writable":true,"signer":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}}],"args":[{"name":"proof_hash","type":{"array":["u8",32]}}]},{"name":"update_admins","docs":["Update admin squad (requires existing admin approval - simplified for MVP)"],"discriminator":[179,114,235,27,31,235,125,107],"accounts":[{"name":"admin","signer":true},{"name":"admin_config","writable":true,"pda":{"seeds":[{"kind":"const","value":[97,100,109,105,110,95,99,111,110,102,105,103]}]}}],"args":[{"name":"new_admins","type":{"vec":"pubkey"}},{"name":"new_required_approvals","type":"u8"}]},{"name":"withdraw_task","docs":["Withdraw from accepted task (executor only)","Penalty: 5% during grace period (30 min), 20% after"],"discriminator":[230,45,218,142,188,87,72,160],"accounts":[{"name":"executor","writable":true,"signer":true},{"name":"sponsor","writable":true},{"name":"task_meta","writable":true,"pda":{"seeds":[{"kind":"const","value":[116,97,115,107]},{"kind":"account","path":"task_meta.sponsor","account":"TaskMeta"},{"kind":"account","path":"task_meta.task_id","account":"TaskMeta"}]}},{"name":"vault","writable":true,"pda":{"seeds":[{"kind":"const","value":[118,97,117,108,116]},{"kind":"account","path":"task_meta"}]}},{"name":"system_program","address":"11111111111111111111111111111111"}],"args":[]}],"accounts":[{"name":"AdminConfig","discriminator":[156,10,79,161,71,9,62,77]},{"name":"ResolutionProposal","discriminator":[188,203,94,223,208,121,225,38]},{"name":"TaskMeta","discriminator":[126,181,254,146,179,173,8,5]}],"events":[{"name":"AdminConfigInitialized","discriminator":[252,30,2,255,109,95,212,162]},{"name":"AdminConfigUpdated","discriminator":[18,41,213,66,26,214,54,76]},{"name":"ExecutorSlashed","discriminator":[174,61,235,85,143,150,133,115]},{"name":"ProofSubmitted","discriminator":[160,51,85,70,249,89,5,139]},{"name":"ResolutionApproved","discriminator":[60,94,27,16,32,192,160,84]},{"name":"ResolutionProposed","discriminator":[209,21,193,193,218,234,131,108]},{"name":"TaskAccepted","discriminator":[125,164,36,103,193,116,66,27]},{"name":"TaskCanceled","discriminator":[122,42,29,192,139,122,150,177]},{"name":"TaskChallenged","discriminator":[234,236,40,66,145,229,205,242]},{"name":"TaskCreated","discriminator":[49,174,6,7,71,159,69,175]},{"name":"TaskResolved","discriminator":[124,29,208,226,46,166,188,14]},{"name":"TaskWithdrawn","discriminator":[121,128,148,100,178,235,204,134]}],"errors":[{"code":6000,"name":"TaskNotOpen","msg":"Task is not in Open status"},{"code":6001,"name":"TaskNotAccepted","msg":"Task is not in Accepted status"},{"code":6002,"name":"TaskNotProofSubmitted","msg":"Task is not in ProofSubmitted status"},{"code":6003,"name":"TaskNotChallenged","msg":"Task is not in Challenged status"},{"code":6004,"name":"TaskNotFinalized","msg":"Task is not finalized (Resolved or Canceled)"},{"code":6005,"name":"InvalidStateTransition","msg":"Invalid state transition"},{"code":6006,"name":"BondTooLow","msg":"Bond amount is less than required"},{"code":6007,"name":"InvalidAmount","msg":"Invalid amount (must be > 0)"},{"code":6008,"name":"InvalidOutcome","msg":"Invalid outcome (must be 0 or 1)"},{"code":6009,"name":"InvalidProofHash","msg":"Invalid proof hash (cannot be zero)"},{"code":6010,"name":"DeadlinePassed","msg":"Deadline has passed"},{"code":6011,"name":"DeadlineNotPassed","msg":"Deadline has not passed yet"},{"code":6012,"name":"DeadlineInPast","msg":"Deadline must be in the future"},{"code":6013,"name":"DeadlineTooFar","msg":"Deadline too far in future (max 90 days)"},{"code":6014,"name":"ChallengeWindowClosed","msg":"Challenge window has closed"},{"code":6015,"name":"ChallengeWindowOpen","msg":"Challenge window still open"},{"code":6016,"name":"ChallengeWindowTooShort","msg":"Challenge window too short (min 1 hour)"},{"code":6017,"name":"NotSponsor","msg":"Only sponsor can perform this action"},{"code":6018,"name":"NotExecutor","msg":"Only executor can perform this action"},{"code":6019,"name":"NotAdmin","msg":"Only admin can perform this action"},{"code":6020,"name":"QuestionTooLong","msg":"Question too long (max 200 chars)"},{"code":6021,"name":"Overflow","msg":"Arithmetic overflow"},{"code":6022,"name":"InvalidAdminCount","msg":"Invalid admin count (1-5)"},{"code":6023,"name":"InvalidApprovalThreshold","msg":"Invalid approval threshold"},{"code":6024,"name":"AlreadyApproved","msg":"Already approved by this admin"},{"code":6025,"name":"AlreadyExecuted","msg":"Resolution already executed"},{"code":6026,"name":"NotExecuted","msg":"Resolution not yet executed"},{"code":6027,"name":"InsufficientApprovals","msg":"Insufficient approvals for execution"},{"code":6028,"name":"AdminConfigNotInitialized","msg":"Admin config not initialized"}],"types":[{"name":"AdminConfig","type":{"kind":"struct","fields":[{"name":"admins","type":{"vec":"pubkey"}},{"name":"required_approvals","type":"u8"},{"name":"initialized","type":"bool"},{"name":"bump","type":"u8"}]}},{"name":"AdminConfigInitialized","type":{"kind":"struct","fields":[{"name":"admin_count","type":"u8"},{"name":"required_approvals","type":"u8"}]}},{"name":"AdminConfigUpdated","type":{"kind":"struct","fields":[{"name":"admin_count","type":"u8"},{"name":"required_approvals","type":"u8"}]}},{"name":"CancelReason","type":{"kind":"enum","variants":[{"name":"SponsorCanceled"},{"name":"Expired"}]}},{"name":"ExecutorSlashed","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"executor","type":"pubkey"},{"name":"amount","type":"u64"},{"name":"reason","type":{"defined":{"name":"SlashReason"}}}]}},{"name":"ProofSubmitted","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"executor","type":"pubkey"},{"name":"proof_hash","type":{"array":["u8",32]}},{"name":"submitted_at","type":"i64"}]}},{"name":"ResolutionApproved","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"admin","type":"pubkey"},{"name":"approvals","type":"u8"},{"name":"required","type":"u8"}]}},{"name":"ResolutionProposal","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"outcome","type":"u8"},{"name":"proposer","type":"pubkey"},{"name":"approvals","type":{"vec":"pubkey"}},{"name":"created_at","type":"i64"},{"name":"executed","type":"bool"},{"name":"bump","type":"u8"}]}},{"name":"ResolutionProposed","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"outcome","type":"u8"},{"name":"proposer","type":"pubkey"},{"name":"approvals","type":"u8"},{"name":"required","type":"u8"}]}},{"name":"SlashReason","type":{"kind":"enum","variants":[{"name":"DeadlineExpired"},{"name":"DisputeLost"}]}},{"name":"TaskAccepted","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"executor","type":"pubkey"},{"name":"bond","type":"u64"},{"name":"accepted_at","type":"i64"}]}},{"name":"TaskCanceled","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"reason","type":{"defined":{"name":"CancelReason"}}}]}},{"name":"TaskChallenged","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"sponsor","type":"pubkey"},{"name":"challenged_at","type":"i64"}]}},{"name":"TaskCreated","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"sponsor","type":"pubkey"},{"name":"bounty","type":"u64"},{"name":"required_bond","type":"u64"},{"name":"deadline","type":"i64"}]}},{"name":"TaskMeta","type":{"kind":"struct","fields":[{"name":"sponsor","type":"pubkey"},{"name":"task_id","type":"u64"},{"name":"bounty_amount","type":"u64"},{"name":"required_bond","type":"u64"},{"name":"accepted_bond","type":"u64"},{"name":"accepted_by","type":"pubkey"},{"name":"accepted_at","type":"i64"},{"name":"proof_hash","type":{"array":["u8",32]}},{"name":"proof_submitted_at","type":"i64"},{"name":"requirements_hash","type":{"array":["u8",32]}},{"name":"challenged_at","type":"i64"},{"name":"challenge_window_seconds","type":"i64"},{"name":"deadline","type":"i64"},{"name":"created_at","type":"i64"},{"name":"status","type":{"defined":{"name":"TaskStatus"}}},{"name":"bump","type":"u8"},{"name":"vault_bump","type":"u8"}]}},{"name":"TaskResolved","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"outcome","type":"u8"},{"name":"winner","type":"pubkey"}]}},{"name":"TaskStatus","repr":{"kind":"rust"},"type":{"kind":"enum","variants":[{"name":"Open"},{"name":"Accepted"},{"name":"ProofSubmitted"},{"name":"Challenged"},{"name":"Resolved"},{"name":"Canceled"}]}},{"name":"TaskWithdrawn","type":{"kind":"struct","fields":[{"name":"task","type":"pubkey"},{"name":"executor","type":"pubkey"},{"name":"penalty_amount","type":"u64"},{"name":"return_amount","type":"u64"},{"name":"grace_period","type":"bool"}]}}]}