MAP Protocol uses Proof of Stake (POS) consensus. Validators secure the network by:
- Staking at least 1,000,000 MAP tokens
- Running a validator node to produce and validate blocks
- Earning rewards based on votes received
| Component | Requirement |
|---|---|
| CPU | Quad core 2.5 GHz (64-bit) |
| RAM | 16 GB |
| Storage | 256 GB SSD + secondary HDD |
| Network | 100 Mb/s, fiber connection recommended |
- Go 1.14 or later
- Git
- C compiler
Your account needs at least 1,000,000 MAP for staking.
# Clone repository
git clone https://github.com/mapprotocol/atlas.git
cd atlas
# Build atlas and marker
make atlas
make markerYou need two accounts:
| Account | Purpose | File |
|---|---|---|
| Account | Staking, receives rewards | account.json |
| Signer | Signs blocks | signer.json |
./atlas account new --keystore ./datadir/keystoreOr import existing private key:
./atlas --dataDir "./data" console
> web3.personal.importRawKey("your_private_key", "your_password")./atlas --datadir ./node \
--syncmode "full" \
--port 30321 \
--v5disc \
--mine \
--miner.validator <SIGNER_ADDRESS> \
--unlock <SIGNER_ADDRESS>Wait for the node to sync with the network.
Register your account with the management contract:
./marker createAccount \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--name "validator"Authorize the signer address to sign blocks on behalf of your account:
./marker authorizeValidatorSigner \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--signerPriv <SIGNER_PRIVATE_KEY>Lock at least 1,000,000 MAP:
./marker lockedMAP \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--lockedNum 1000000./marker register \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--signerPriv <SIGNER_PRIVATE_KEY> \
--commission 150000Validators need votes to be elected. Vote for yourself:
./marker vote \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--target <YOUR_ACCOUNT_ADDRESS> \
--voteNum 1000000Check if you're registered as a validator:
./marker getTotalVotesForEligibleValidators --rpcaddr http://127.0.0.1:7445Check if you're in the active validator set (after next epoch):
curl -X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"istanbul_getValidators","params":[],"id":1}' \
http://127.0.0.1:7445For enhanced security, you can separate the signing process from registration. This keeps your signer's private key more secure.
./marker makeECDSASignatureFromSigner \
--target <ACCOUNT_ADDRESS> \
--signerPriv <SIGNER_PRIVATE_KEY>Save the output signature (e.g., 0x59dff185...32f0d700).
./marker authorizeValidatorSignerBySignature \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--signer <SIGNER_ADDRESS> \
--signature <SIGNATURE_FROM_ABOVE>./marker generateSignerProof \
--validator <ACCOUNT_ADDRESS> \
--signerPriv <SIGNER_PRIVATE_KEY>Save the output proof (e.g., 0xf90149b8...0e56f0ab1).
./marker registerByProof \
--rpcaddr http://127.0.0.1:7445 \
--keystore ./account.json \
--proof <PROOF_FROM_ABOVE> \
--commission 150000