Skip to main content

Overview

Every agreement on BattleChain follows a defined lifecycle. Understanding this helps you know what’s possible at each stage.

The State Machine

                              ┌─────────────────┐
                              │  NOT_DEPLOYED   │
                              └────────┬────────┘
                                       │ Deploy via BattleChainDeployer

                              ┌─────────────────┐
                              │ NEW_DEPLOYMENT  │
                              └────────┬────────┘
                                       │ requestUnderAttack()

                              ┌─────────────────┐
                              │ATTACK_REQUESTED │◄──── DAO reviews here
                              └────────┬────────┘

              ┌────────────────────────┼────────────────────────┐
              │                        │                        │
              ▼                        ▼                        ▼
     ┌────────────────┐      ┌────────────────┐       ┌────────────────┐
     │    REJECTED    │      │  UNDER_ATTACK  │       │   PRODUCTION   │
     │ (NOT_DEPLOYED) │      │   Attackable!  │       │ (instantPromote)
     └────────────────┘      └────────┬───────┘       └────────────────┘
                                      │ promote()

                              ┌─────────────────┐
                              │   PROMOTION_    │
                              │   REQUESTED     │ Still attackable!
                              └────────┬────────┘

              ┌────────────────────────┼────────────────────────┐
              │                        │                        │
              ▼                        ▼                        ▼
     ┌────────────────┐      ┌────────────────┐       ┌────────────────┐
     │  UNDER_ATTACK  │      │   PRODUCTION   │       │   CORRUPTED    │
     │(cancelPromotion)│     │  (after 3 days)│       │ (markCorrupted)│
     └────────────────┘      └────────────────┘       └────────────────┘

State Descriptions

NOT_DEPLOYED

Default state for unregistered contracts or rejected requests.
  • Attackable: No
  • Next states: NEW_DEPLOYMENT (via BattleChainDeployer)

NEW_DEPLOYMENT

Contracts deployed via BattleChainDeployer start here.
  • Attackable: No
  • Next states: ATTACK_REQUESTED or PRODUCTION (goToProduction)

ATTACK_REQUESTED

Waiting for DAO approval.
  • Attackable: No
  • Next states: UNDER_ATTACK (approved), NOT_DEPLOYED (rejected), PRODUCTION (instant or auto after 14 days)

UNDER_ATTACK

Open for whitehats. Safe Harbor protection applies.
  • Attackable: Yes
  • Next states: PROMOTION_REQUESTED, CORRUPTED, PRODUCTION (instant)

PROMOTION_REQUESTED

3-day countdown to production. Still attackable!
  • Attackable: Yes
  • Next states: PRODUCTION (after 3 days), UNDER_ATTACK (cancel), CORRUPTED

PRODUCTION

Terminal. Protected like mainnet.
  • Attackable: No
  • Next states: None

CORRUPTED

Terminal. Successfully exploited.
  • Attackable: No
  • Next states: None

Key Timeframes

ConstantDurationPurpose
PROMOTION_WINDOW14 daysAuto-promote if DAO doesn’t act
PROMOTION_DELAY3 daysDelay after promote()
MIN_COMMITMENT7 daysMinimum agreement commitment

Who Controls What

ActionWho Can Do It
requestUnderAttack()Agreement owner
promote()Attack moderator
cancelPromotion()Attack moderator
markCorrupted()Attack moderator
approveAttack()Registry moderator (DAO)
rejectAttackRequest()Registry moderator (DAO)
instantPromote()Registry moderator (DAO)