Skip to content

Latest commit

 

History

History
198 lines (152 loc) · 6.73 KB

File metadata and controls

198 lines (152 loc) · 6.73 KB

Client Migration Implementation

Overview

This implementation adds secure client account migration functionality to the Talenttrust escrow contract. The migration follows a two-step proposal + confirmation flow to ensure no unauthorized takeover of contract authority.

Features

Core Functionality

  • Proposal Phase: Current client can propose migration to a new address
  • Confirmation Phase: Proposed client must confirm the migration
  • Finalization: Atomic update of contract client address
  • Cancellation: Current client can cancel pending migration
  • Expiration: Migrations expire after TTL to prevent stale proposals

Security Features

  • Authorization: Only current client can propose/cancel migration
  • Confirmation: Only proposed client can confirm migration
  • Status Restrictions: Migration only allowed in Created and Funded states
  • Duplicate Prevention: No concurrent migrations allowed
  • Same Address Protection: Cannot migrate to same address
  • Atomic Operations: Migration finalization is atomic
  • Audit Trail: Full event emissions for all migration steps

Implementation Details

Data Structures

#[contracttype]
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct PendingClientMigration {
    pub current_client: Address,
    pub proposed_client: Address,
    pub proposed_client_confirmed: bool,
    pub requested_at_ledger: u32,
    pub expires_at_ledger: u32,
}

Storage Keys

enum DataKey {
    // ... existing keys
    PendingClientMigration(u32),
}

Public Methods

  1. request_client_migration(env, contract_id, proposed_client) -> bool

    • Propose migration to new address
    • Requires current client authorization
    • Emits client_migration_proposed event
  2. confirm_client_migration(env, contract_id) -> bool

    • Confirm migration by proposed client
    • Requires proposed client authorization
    • Emits client_migration_confirmed event
  3. finalize_client_migration(env, contract_id) -> bool

    • Finalize migration (atomic update)
    • Updates contract client address
    • Emits client_migration_finalized event
  4. cancel_client_migration(env, contract_id) -> bool

    • Cancel pending migration
    • Requires current client authorization
    • Emits client_migration_cancelled event
  5. get_pending_client_migration(env, contract_id) -> PendingClientMigration

    • Get pending migration information
  6. has_pending_client_migration(env, contract_id) -> bool

    • Check if migration is pending

Status Restrictions

Migration is only allowed in these contract statuses:

  • Created - Contract not yet funded
  • Funded - Contract funded but not completed

Migration is NOT allowed in:

  • Completed - Contract finished
  • Cancelled - Contract cancelled
  • Disputed - Contract under dispute
  • Refunded - Contract refunded

TTL Configuration

Migration proposals expire after PENDING_MIGRATION_TTL_LEDGERS (defined in ttl module).

Event Emissions

All migration operations emit events with the following structure:

  • client_migration_proposed: (contract_id, current_client, proposed_client, timestamp)
  • client_migration_confirmed: (contract_id, current_client, proposed_client, timestamp)
  • client_migration_finalized: (contract_id, current_client, proposed_client, timestamp)
  • client_migration_cancelled: (contract_id, current_client, proposed_client, timestamp)

Security Considerations

Authorization Model

  • Proposal: Only current client can initiate migration
  • Confirmation: Only proposed client can accept migration
  • Cancellation: Only current client can cancel migration
  • Finalization: No authorization required (public but requires confirmation)

Attack Vectors Mitigated

  1. Unauthorized Takeover: Requires both current and proposed client authorization
  2. Stale Proposals: TTL-based expiration prevents indefinite pending migrations
  3. Race Conditions: Atomic finalization prevents partial state updates
  4. Status Abuse: Migration restricted to appropriate contract states
  5. Duplicate Migrations: Only one pending migration allowed per contract

Audit Trail

All migration operations emit events providing:

  • Complete migration timeline
  • Participant addresses
  • Operation timestamps
  • Contract state changes

Testing

The implementation includes comprehensive tests covering:

Basic Functionality

  • Migration proposal, confirmation, and finalization flow
  • Authorization transfer verification
  • Pending state management

Security Tests

  • Unauthorized proposal attempts
  • Unauthorized confirmation attempts
  • Same address migration prevention
  • Double proposal prevention
  • Status restriction enforcement

Edge Cases

  • Migration expiration (TTL)
  • Contract integrity preservation
  • Event emission verification
  • Cancellation scenarios

Integration Tests

  • Migration with funded contracts
  • Migration with milestone releases
  • Authority transfer validation

Usage Example

// 1. Current client proposes migration
client.request_client_migration(contract_id, new_client_address);

// 2. Check pending migration
let pending = client.get_pending_client_migration(contract_id);
assert!(!pending.proposed_client_confirmed);

// 3. Proposed client confirms migration
client.confirm_client_migration(contract_id);

// 4. Finalize migration (atomic update)
client.finalize_client_migration(contract_id);

// 5. Verify migration completed
let contract = client.get_contract(contract_id);
assert_eq!(contract.client, new_client_address);

Error Handling

The implementation uses existing error codes where appropriate:

  • InvalidStatusTransition - Migration not allowed in current state
  • UnauthorizedRole - Authorization failures
  • InvalidParticipant - Same address migration
  • AlreadyCancelled - Duplicate migration proposal
  • ContractNotFound - Missing contract or pending migration

Future Enhancements

Potential future improvements:

  1. Migration Delays: Add configurable delay between confirmation and finalization
  2. Multi-signature: Support for multi-signature client accounts
  3. Migration Limits: Rate limiting on migration frequency
  4. Emergency Controls: Admin override capabilities for disputed cases

Compliance

This implementation addresses all requirements from issue #250: ✅ Secure two-step proposal + confirmation flow ✅ No unauthorized takeover protection ✅ Atomic confirmation with audit trail ✅ Status-based migration restrictions ✅ Comprehensive test coverage ✅ Event emissions for all operations ✅ Documentation and security considerations