How to Participate

Stake ATMS, create independent staking lots, claim rewards, submit signals, create proposals, and support proposals through the ATMS Participation Vault.

This page does not connect to your wallet. It explains how users can interact directly with the official ATMS contracts through Etherscan if available, or through another trusted ABI-based Ethereum transaction tool.

Always verify the official contract addresses before signing any transaction.

If Etherscan does not show usable Write Contract fields for the vault, users must interact through a trusted wallet, Safe Transaction Builder, Remix, Hardhat, or another ABI-based Ethereum transaction tool using the official ABI from the release files.

Official contract references

Use only these official Ethereum Mainnet contract addresses when interacting with ATMS staking and participation.

ATMS Token Proxy

Address 0x38604c42c16e29BbFbc5479668453f18cB6cf335
Purpose ATMS balance, allowance, and approval transactions.

Participation Vault

Address 0x01273Ef57CE09C4Aa615E3bd95eF2b9DD54fd0E4
Purpose Staking, unstaking, rewards, signals, and proposal support.

Vault rules

Lot-based staking

Each stake creates a separate staking lot. New lots do not reset the age of older lots.

Maximum active lots

Each wallet can have a maximum of 5 active staking lots.

Participation rights

Participation rights require at least 50,000 ATMS in active stake that has matured for 30 days or more.

How to stake ATMS

Staking requires two transactions: first approve the vault to transfer ATMS, then call the vault staking function.

Step 1: Approve ATMS

Open the ATMS Token Proxy on Etherscan and use:

approve(address spender, uint256 value)
spender 0x01273Ef57CE09C4Aa615E3bd95eF2b9DD54fd0E4
value Amount of ATMS to approve, entered in token base units.

For safety, approve only the exact amount you plan to stake.

Step 2: Stake ATMS

Open the Participation Vault on Etherscan. If Etherscan displays Write Contract functions, use:

stake(uint256 amount)
amount Same or lower amount than your approved ATMS allowance.

A successful stake creates a new independent staking lot.

How to request unstake and withdraw

Unstaking is lot-based. First request an unstake from one or more lots, then withdraw after the cooldown unlock time.

Request unstake

If Etherscan displays Write Contract functions for the vault, use:

requestUnstakeFromLots(uint256[] lotIds, uint256[] amounts)

Use the lot ID and amount for each lot you want to unstake from. The two arrays must match by position.

lotIds:  [0, 1]
amounts: [1000000000000000000000, 500000000000000000000]

Penalties, if any, are calculated per lot based on that lot’s age.

Withdraw after cooldown

If Etherscan displays Write Contract functions for the vault, use:

withdraw(uint256[] requestIds)

After the withdrawal request unlock time has passed, call withdraw with the matured request IDs.

requestIds: [0, 1]

Rewards and checkpointing

Claim rewards

Rewards are funded by penalties paid by early exiters. If Etherscan displays Write Contract functions for the vault, call:

claimRewards()

Checkpoint account

Checkpointing updates accounting for a wallet address when needed. If Etherscan displays Write Contract functions for the vault, call:

checkpoint(address account)

Proposals and support

Proposal creation and support are registered on-chain through the Participation Vault.

Create proposal

If Etherscan displays Write Contract functions for the vault, use:

createProposal(
  uint8 category,
  bytes32 metadataHash,
  string metadataURI,
  string title,
  uint64 supportWindow,
  uint256 customThreshold,
  uint256 nonce
)

The metadata URI should be permanent, such as IPFS or Arweave. The title should match the proposal metadata.

Support proposal

If Etherscan displays Write Contract functions for the vault, use:

submitOrRefreshProposalSupport(uint256 proposalId)

Use the proposal ID from the vault’s on-chain proposal records. Support weight is based on eligible matured stake.

Generic signals

A generic signal is an on-chain participation record that is separate from structured proposal support.

If Etherscan displays Write Contract functions for the vault, use:

submitSignal(bytes32 signalHash, bytes32 metadataHash, string metadataURI)

Use permanent metadata storage and keep a public copy of the signal text so users can independently verify what was submitted.

If Etherscan write functions are unavailable

Some proxy contracts or similar-match verified contracts may not display a complete Write Contract interface on Etherscan. In that case, users should not guess transaction data.

  • Use the official ABI from the ATAMO release files.
  • Use a trusted ABI-based transaction tool such as Safe Transaction Builder, Remix, Hardhat, or a trusted wallet interface.
  • Verify the target address is the Participation Vault before signing.
  • Verify the network is Ethereum Mainnet before signing.
  • Use a small test transaction first when possible.

Useful read functions

These functions help users check their staking status before submitting transactions. If Etherscan does not display them, use the official ABI through a trusted read tool.

Function Purpose
activeStake(address)Shows active staked ATMS for a wallet.
matureActiveStake(address)Shows active stake matured for participation rights.
hasParticipationRights(address)Checks whether a wallet has participation rights.
activeLotCount(address)Shows active lot count. Maximum is 5.
lotCount(address)Shows total lots created by a wallet.
stakeLots(address,uint256)Shows information for a specific staking lot.
pendingRequestCount(address)Shows how many withdrawal requests a wallet has.
pendingRequests(address,uint256)Shows a specific pending withdrawal request.
previewClaimableRewards(address)Shows estimated claimable rewards.
getProposalSummary(uint256)Shows proposal status, support weight, threshold, and support window.
supportOf(uint256,address)Shows a wallet’s support record for a proposal.

Safety checklist before signing

  • Use Ethereum Mainnet only.
  • Verify the ATMS Token Proxy and Participation Vault addresses before signing.
  • Use exact approvals instead of unlimited approvals.
  • Review the spender address when approving ATMS.
  • Review the target contract address when staking, unstaking, withdrawing, claiming, signaling, or supporting proposals.
  • Use permanent metadata URIs such as ipfs:// or ar:// for proposals and signals.
  • Use a small test amount first if this is your first vault interaction.
  • Never trust private messages, fake support agents, or unofficial links.

Release verification

ATAMO release verification is based on signed release files, official contract addresses, and published deployment records.

  • releases/v1.0.0/deployment-manifest.mainnet.json
  • releases/v1.0.0/deployment-records-full.mainnet.json
  • releases/v1.0.0/ATAMO_DEPLOYMENT_STATEMENT_mainnet_2026-05-16.txt
  • releases/v1.0.0/SHA256SUMS
  • releases/v1.0.0/SHA256SUMS.asc
  • releases/v1.0.0/ATAMO_RELEASE_PGP_PUBLIC_KEY.asc