Token-gate Discord and Telegram on Arbitrum
Gate a Discord or Telegram group on Arbitrum One for token or NFT holders, ARB delegates, DeFi depositors and protocol users.
To token-gate a Discord server or Telegram group for holders of a token or NFT on Arbitrum, create a role in Guild, add a Token balance or NFT Balance requirement with Arbitrum One as the chain, and give the role a Discord or Telegram reward. Members connect their wallets, Guild gives the Discord role or the group invite to everyone who holds enough, and takes it away when they sell. On Arbitrum you can also gate on ARB voting power, DeFi positions and protocol usage, because Guild can call any read function of an Arbitrum contract. Discord and Telegram gating are on the Free plan.
On Guild, 15.1% of active guilds with a chain requirement check Arbitrum, and those guilds hold 1.26 million memberships. See State of token-gated communities 2026.
Arbitrum One, not Nova
Guild supports Arbitrum One, chain ID 42161, where ETH pays for gas. Arbitrum Nova (chain ID 42170) is a separate chain and isn't in Guild's chain list, so tokens that live only on Nova can't be gated. When a project quotes an "Arbitrum" address, check on Arbiscan that it is the Arbitrum One contract.
What Guild can check on Arbitrum One
| You want members who | Requirement | On Arbitrum One |
|---|---|---|
| Hold ETH | Token balance, Native currency balance | Yes |
| Hold an ERC-20 token | Token balance, ERC20 balance | Yes |
| Hold an NFT | NFT Balance | Yes |
| Pass a check your contract answers | Contract query | Yes |
| Have an old or active wallet, or use a protocol | Onchain activity | Yes |
| Have an EAS attestation | Be attested by | Yes |
| Held a token at a snapshot, or for N days | Held at a past block, Held continuously for | No: Ethereum and Base only |
You can also mint an NFT reward on Arbitrum One. Supported chains has the full table.
Set up the gate
- On your guild, choose Manage guild, open Spaces & roles, and create a role with New role, then Empty role.
- Under Who gets it, press Requirement, pick Token balance or NFT Balance, choose Arbitrum One, paste the contract address and set the amount.
- Under Unlocks, press Add reward and pick Discord or Telegram.
The full walkthrough, including the bot's role order in Discord and making a Telegram group private, is in Token-gate a Discord server and Token-gate a Telegram group.
ARB holders and delegates
ARB, the Arbitrum DAO's governance token, is minted on Arbitrum One. The Arbitrum Foundation lists its contract there as 0x912CE59144191C1204E64559FE8253a0e49E6548.
- ARB holders: Token balance, ERC20 balance, that address, at least the amount you choose, entered as a wallet shows it.
- Delegates with voting power: ARB voting power comes from delegation, and the token answers
getVotes(address)with an address's current votes. Add a Contract query on Arbitrum One with the ARB address, the methodgetVotes(address),USER_ADDRESSin Input parameters, and under Output to check a bigint at least your threshold. A Contract query returns raw units, and ARB has 18 decimals, so 1,000 votes is1000000000000000000000.
A holder who has never delegated, even to themselves, has zero votes, so use the balance check for "holders" and getVotes for "people who take part in governance".
USDC or USDC.e
Arbitrum One has two USDC tokens at different addresses. Arbitrum's docs list:
| Token | Address |
|---|---|
| USDC, issued natively by Circle | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
| USDC.e, bridged from Ethereum | 0xff970a61a04b1ca14834a43f5de4533ebddb5cc8 |
A Token balance requirement checks one contract. To accept either, add both and set Members should meet to Any one.
DeFi positions and protocol users
Much of what Arbitrum users hold sits in protocols rather than in their wallets: deposits, staked tokens, vault shares. A Contract query reads them:
- Stakers:
balanceOf(address)on your staking contract withUSER_ADDRESS, bigint greater than 0. - Pool depositors:
userInfo(uint256,address)with[0, "USER_ADDRESS"], output index 0, greater than 0. - Registered users: a function such as
isRegistered(address), boolean equals true.
If the vault issues an ERC-20 share token, a plain Token balance on the share token works too. To reward use rather than deposits, add Onchain activity, Contract call on your contract and method, at least 5 in a Relative period of 30 days. See Wallet activity.
No holding history on Arbitrum
Held at a past block and Held continuously for read past chain state, which only a full archive of the chain can answer. Guild runs its own archive nodes for Ethereum and Base only, so it doesn't offer them on Arbitrum One. Two ways to get close:
- For a one-off snapshot, export the holders at your block with your own tooling and upload the wallets as an Allowlist.
- To favour people who aren't fresh, add Onchain activity, First transaction on Arbitrum One before a date.
Worked example: Arbitrum delegates
A DAO-adjacent project wants a Telegram group for ARB delegates who are active on Arbitrum, and a Discord role for holders of its own token.
Role 1, "Delegates", for the Telegram group:
- Contract query, Arbitrum One, the ARB address,
getVotes(address),["USER_ADDRESS"], bigint at least1000000000000000000000(1,000 ARB). - Onchain activity, Transaction count, Arbitrum One, at least 20 in a Relative period of 90 days.
- Members should meet: All.
- Reward: Telegram, with the bot added to the private group.
Role 2, "Holders", for a Discord role:
- Token balance, ERC20 balance, Arbitrum One, the project's token, at least 500.
- Reward: Discord, New role named "Holders", Keep role once earned off.
A delegate whose delegators move their votes away drops below 1,000 and is removed from the group when Guild next checks.
FAQ
Is token-gating on Arbitrum free?
Yes. Token, NFT, contract query, onchain activity and attestation requirements, and Discord and Telegram rewards, are on the Free plan. See Plans.
Can holding ARB on Ethereum count?
Only if you add it. Each requirement checks one contract on one chain. The Arbitrum Foundation lists a bridged ARB on Ethereum at 0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1: add a Token balance on Ethereum with that address and set Members should meet to Any one. Bridged ARB isn't counted by the getVotes query on Arbitrum One.
Why can't I pick Arbitrum for "held for 90 days"?
Guild offers holding history only on chains it runs a full archive node for, today Ethereum and Base. It doesn't answer those checks from a provider that may have pruned the history.
My contract isn't verified on Arbiscan. Can I still query it?
Yes. If Guild can't load its read functions, type the function's signature by hand, for example userInfo(uint256,address)(uint256,uint256).