Quickstart
On this page
Three steps: add the network, get some test ETH, deploy. Test ETH is free and has no value.
#1. Add the network
The quickest way is the Add to wallet button on the testnet page. It adds the network to MetaMask, Rabby and other browser wallets in one click.
To add it by hand, use these values:
| Field | Value |
|---|---|
| Network name | Gully Chain Testnet |
| RPC URL | https://testnet-rpc.gullychain.xyz |
| Chain ID | 485590 |
| Currency symbol | ETH |
| Block explorer | https://testnet-explorer.gullychain.xyz |
From a dapp, ask the wallet to add it with wallet_addEthereumChain:
await window.ethereum.request({
method: "wallet_addEthereumChain",
params: [{
chainId: "0x768d6", // 485590
chainName: "Gully Chain Testnet",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: ["https://testnet-rpc.gullychain.xyz"],
blockExplorerUrls: ["https://testnet-explorer.gullychain.xyz"],
}],
});#2. Get test ETH
Gully Chain uses ETH for gas. There are two ways to get it.
#Option A: the faucet
The Gully faucet sends 0.001 ETH per address per day straight to your address on Gully Chain. That is enough for a few contract deploys, and it is the fastest way to start.
#Option B: bridge from Arbitrum Sepolia
For more ETH, bring it over from Arbitrum Sepolia:
- Get Sepolia ETH from a public Sepolia faucet, for example the Google Cloud Web3 faucet or a proof-of-work faucet. Some faucets pay on Arbitrum Sepolia directly, so you can skip step 2.
- On bridge.arbitrum.io, bridge from Sepolia to Arbitrum Sepolia. This takes about 10 to 15 minutes.
- Open the Gully Bridge, connect your wallet and deposit. ETH arrives on Gully Chain in about a minute.
The Bridging page explains what happens under the hood and how to deposit from code.
#3. Deploy a contract
Point your tools at the RPC. Any EVM contract works.
#Foundry
# check the connection: prints 485590
cast chain-id --rpc-url https://testnet-rpc.gullychain.xyz
# deploy with a keystore account
# (create one first with: cast wallet import dev --interactive)
forge create src/Counter.sol:Counter \
--rpc-url https://testnet-rpc.gullychain.xyz \
--account dev --broadcastYou can name the endpoint in foundry.toml and pass --rpc-url gully_testnet instead:
[rpc_endpoints]
gully_testnet = "https://testnet-rpc.gullychain.xyz"The explorer supports contract verification. You can upload the source in its UI after deploying.
#Hardhat
// hardhat.config.ts
import type { HardhatUserConfig } from "hardhat/config";
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
gullyTestnet: {
url: "https://testnet-rpc.gullychain.xyz",
chainId: 485590,
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
},
},
};
export default config;Deploy with your usual script or Ignition module and add --network gullyTestnet. Keep keys in environment variables or a secrets manager, never in the repo.
#viem
import { defineChain, createPublicClient, createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
export const gullyTestnet = defineChain({
id: 485590,
name: "Gully Chain Testnet",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: { default: { http: ["https://testnet-rpc.gullychain.xyz"] } },
blockExplorers: {
default: { name: "Gully Explorer", url: "https://testnet-explorer.gullychain.xyz" },
},
testnet: true,
});
const publicClient = createPublicClient({ chain: gullyTestnet, transport: http() });
console.log(await publicClient.getBlockNumber());
// deploy: abi and bytecode come from your compiler output
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const wallet = createWalletClient({ account, chain: gullyTestnet, transport: http() });
const hash = await wallet.deployContract({ abi, bytecode, args: [] });
const receipt = await publicClient.waitForTransactionReceipt({ hash });
console.log("deployed at", receipt.contractAddress);Heads up
Multicall3 is not deployed yet. viem's multicall action and wagmi's useReadContracts call Multicall3 at 0xcA11…CA11, which does not exist on Gully Chain today. Make reads one at a time until it is deployed. See Contract addresses.
#curl
curl -s https://testnet-rpc.gullychain.xyz \
-H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'#Next steps
- Look up WETH, Permit2 and bridge addresses on Contract addresses.
- Read the Network reference for what behaves differently from Ethereum, such as
block.numberand when blocks are produced. - Watch your transactions land on the live stats page.
