Manage stakes in the Bitgold app¶
The Bitgold staking dApp is available in the Bitgold app and supports both mainnet and testnet. This guide walks through connecting a wallet, delegating, redelegating, undelegating, and claiming rewards.
- Mainnet: https://app.bitgold.network/staking
- Testnet: switch the app to Bitgold Testnet (chain ID
617)
Connect wallet¶
Connect an EVM wallet to the app. MetaMask and TrustWallet are supported, along with any wallet compatible with WalletConnect. Make sure the wallet is on the correct Bitgold network before staking.
Delegate stakes¶
- Open the validator list and select the validator you want to delegate to. Each validator page shows commission, total stake, and performance history.
- Click Delegate.
- Enter the amount of BTG you want to delegate.
- Confirm the transaction in your wallet. A successful delegation appears under My Staking with its transaction hash.
Redelegate stakes¶
Existing delegations are managed on the My Staking page.
Note: A redelegation fee of 0.002% applies, to discourage frequent switching between validators.
- Click Redelegate next to the delegation.
- Select the new validator and enter the amount to move. You can move the entire stake or only a portion.
Undelegate stakes¶
To withdraw your stake and rewards, undelegate:
- Click Undelegate next to the delegation.
- Choose the full amount or a portion. Undelegated stake is subject to an unbonding period (currently 7 days) before it returns to your account.
Claim stakes¶
After the unbonding period, claim the stake and rewards by clicking Claim on the delegation.
FAQs¶
Q1: Which wallets can be used to delegate to validators?¶
MetaMask and TrustWallet are supported, along with any wallet compatible with WalletConnect.
Q2: Can I delegate, undelegate, redelegate, or claim on the explorer?¶
Advanced users can interact with the StakeHub contract directly on the Bitgold Explorer:
Q3: What is staking credit (stBTG)?¶
When you delegate BTG to a validator, you receive staking credit tokens as proof of your stake. Each validator issues its own credit token:
Token naming:
- Name:
Stake{{validator moniker}}Credit - Symbol:
st{{validator moniker}} - Example: staking with validator
ExampleValidatorgives youstExampleValidator
Key properties:
- ✅ Represents your staked BTG plus accumulated rewards
- ✅ Auto-compounding: the credit value increases as the validator earns rewards
- ✅ Rewards are distributed automatically when you undelegate
- ❌ Non-transferable between addresses; each validator’s credit is unique
Q4: How is my staking balance calculated?¶
Your staking credit value in BTG is:
Your BTG value = (stCreditAmount × totalPooledBTG) ÷ totalSupply()
Where:
stCreditAmount: your staking credit balancetotalPooledBTG: total BTG in the validator’s pool (stake + rewards)totalSupply(): total supply of the validator’s staking credit
Example:
| Time | totalPooledBTG | totalSupply | Your stCredit | Your value | Profit |
|---|---|---|---|---|---|
| Day 1 | 10,000 BTG | 10,000 | 100 | 100 BTG | - |
| Day 30 | 11,000 BTG | 10,000 | 100 | 110 BTG | +10 BTG (10%) |
Q5: How do I query total pooled BTG programmatically?¶
Use this JavaScript example to query a validator’s total pooled BTG:
import { ethers } from 'ethers';
const provider = new ethers.JsonRpcProvider('https://rpc.bitgold.network');
const OPERATOR = '0x...'; // validator operator address
const hub = new ethers.Contract('0x0000000000000000000000000000000000002002',
['function getValidatorCreditContract(address) view returns (address)'], provider);
const creditAddr = await hub.getValidatorCreditContract(OPERATOR);
const credit = new ethers.Contract(creditAddr,
['function getPooledBTG(address) view returns (uint256)'], provider);
const btg = await credit.getPooledBTG(OPERATOR);
console.log('Pooled BTG:', ethers.formatEther(btg));