Skip to main content

Overview

After deploying contracts and creating an agreement, request attack mode to enable Safe Harbor protection and allow whitehats to test your contracts.

Prerequisites

Before requesting:
  1. Contracts deployed (via BattleChainDeployer or any other method)
  2. Agreement created via AgreementFactory
  3. Agreement adopted via adoptSafeHarbor()
  4. Commitment window extends at least 7 days

Request Attack Mode

attackRegistry.requestUnderAttack(agreementAddress);
This validates:
  • Agreement was created by official factory
  • You’re the agreement owner
  • All contracts were deployed via BattleChainDeployer
  • Commitment window meets minimum requirements

For Non-BattleChainDeployer Contracts

If contracts weren’t deployed via BattleChainDeployer:
attackRegistry.requestUnderAttackByNonAuthorized(agreementAddress);
This path requires extra DAO scrutiny since there’s no on-chain proof of deployment.

Skip Attack Mode Entirely

To go directly to production without attack testing:
attackRegistry.goToProduction(agreementAddress);
This immediately sets state to PRODUCTION with no Safe Harbor protection.

Check Request Status

IAttackRegistry.ContractState state = attackRegistry.getAgreementState(agreementAddress);

// 2 = ATTACK_REQUESTED (waiting for DAO)
// 3 = UNDER_ATTACK (approved!)
// 0 = NOT_DEPLOYED (rejected or not requested)

What Happens Next

OutcomeTimeline
DAO ApprovesImmediate → UNDER_ATTACK
DAO RejectsImmediate → NOT_DEPLOYED
DAO Takes No Action14 days → PRODUCTION (auto-promote)

Troubleshooting

ErrorSolution
InvalidAgreementAgreement not from official factory
NotAgreementOwnerOnly agreement owner can request
AgreementOwnerNotAuthorizedCall authorizeAgreementOwner() for each contract
InsufficientCommitmentExtend commitment window to 7+ days
EmptyContractArrayAdd contracts to agreement’s BattleChain scope

How to Promote to Production

Next: Promote after stress testing