ATP (Account Transfer Protocol) is a protocol designed for transferring entire accounts across different blockchains or within the same blockchain. Unlike traditional methods that transfer individual assets, ATP treats an account as a unified object that can contain multiple assets (tokens, NFTs, DeFi positions, etc.).
- Entire Account Transfer: Transfer all assets in an account at once rather than individual tokens
- Cross-Chain Flexibility: Move accounts across different blockchain ecosystems
- Secure Key Management: Uses Internet Computer's threshold ECDSA and Schnorr signing capabilities
- State-Based Security Model: Accounts transition through different states (Locked, Unlocked, Active) to ensure secure transfers
For detailed documentation, see the following:
- Overview - Concept and key features
- Architecture - Implementation details and state transitions
- API Reference - Endpoint documentation
- Getting Started - Setup and testing guide
- Integration Guide - How to integrate with other canisters
- Contribution Guide - How to contribute to ATP
ATP provides pre-built binaries for different environments:
- Local:
ic-atp-local.wasm
(usesdfx_test_key
) - Test:
ic-atp-test.wasm
(usestest_key_1
) - Production:
ic-atp-production.wasm
(useskey_1
)
Download the appropriate binaries from the latest GitHub release and update your dfx.json accordingly.
See the Getting Started guide for more details on network configuration.
Create a new project and configure it to use ATP from GitHub releases:
# Initialize dfx project
dfx new my_project
cd my_project
Update dfx.json to use ATP binary
{
"canisters": {
"ic-atp": {
"type": "custom",
"candid": "https://github.com/mycel-labs/atp/releases/latest/download/ic-atp-local.did",
"wasm": "https://github.com/mycel-labs/atp/releases/latest/download/ic-atp-local.wasm"
}
}
}
Replace atp-local
with atp-test
or atp-production
as needed for your target environment.
Accounts in ATP go through various state transitions:
stateDiagram-v2
[*] --> Locked: create_account()
Locked --> Unlocked: transfer_account() by approved address
Locked --> Unlocked: unlock() by owner
Unlocked --> Locked: lock() by owner or approved address
Unlocked --> Active: activate() by owner
Active --> Active: sign() by owner
Active --> [*]
create_account
: Create a new account with specified algorithm and curvetransfer_account
: Transfer account ownership to another principalactivate_account
: Activate an unlocked accountsign
: Sign a message with the account's private keysign_eip1559_transaction
: Sign an Ethereum transaction
For more details, see the API Reference.