Ethereum Transactions with Go Ethereum: A Practical Guide to Sending ETH

·

Ethereum remains one of the most widely used blockchain platforms for decentralized applications and smart contracts. For developers and enthusiasts looking to interact directly with the Ethereum network, Go Ethereum (geth) offers a powerful command-line interface to manage accounts, mine blocks, and transfer Ether. In this guide, we'll walk through how to check account balances, send transactions, and verify their confirmation on the blockchain using geth.

Whether you're setting up a private testnet or learning core blockchain mechanics, understanding Ethereum transactions is essential. We’ll build on previous steps—like account creation and mining—and focus on the practical aspects of sending ETH between accounts.


Checking Account Balances in Wei and Ether

Before sending any funds, it’s crucial to verify your account balance. In Go Ethereum, balances are returned in Wei, the smallest denomination of Ether.

To check the balance of your first account:

> eth.getBalance(eth.accounts[0])
80000000000000000000

This value is in Wei. Since 1 Ether equals 10¹⁸ Wei, you can convert it using web3.fromWei():

> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
80

You now see the balance in a human-readable format: 80 ETH.

👉 Learn how to interact with Ethereum using developer tools

The web3.fromWei() function supports multiple units:

Conversely, use web3.toWei() to convert from Ether to Wei when preparing transaction values.


Preparing for an Ethereum Transaction

You currently have two accounts:

> eth.accounts
["0xae9abfc6eca2b25d579be8649d4f232f80d3bd46", "0x46c001f57b55abbe9086d595e15cbf7dc3a9b5b2"]

Let’s send 10 ETH from the first account (accounts[0]) to the second (accounts[1]). This requires using eth.sendTransaction():

> eth.sendTransaction({
    from: eth.accounts[0],
    to: eth.accounts[1],
    value: web3.toWei(10, "ether")
})

However, if you run this now, you’ll encounter an error:

Error: authentication needed: password or unlock

Unlocking Your Account

Ethereum accounts are locked by default for security. Use personal.unlockAccount() to unlock the sender account:

> personal.unlockAccount(eth.accounts[0])
Unlock account 0xae9abfc6eca2b25d579be8649d4f232f80d3bd46
Passphrase: ******
true

Once unlocked, retry the transaction:

> eth.sendTransaction({
    from: eth.accounts[0],
    to: eth.accounts[1],
    value: web3.toWei(10, "ether")
})
"0x29a48a49a140c0774b6876d343dda6df4af71b00bd515e22f6c9c08d1f4a7a00"

The returned string is the transaction hash, confirming that the transaction was broadcast to the network.


Understanding Transaction Lifecycle

After sending a transaction, it doesn’t take effect immediately. It must be included in a block through mining.

Check the transaction status:

> eth.getTransaction("0x29a48a49a140c0774b6876d343dda6df4af71b00bd515e22f6c9c08d1f4a7a00")

Initially, you’ll see:

blockNumber: null

This means the transaction is pending—it hasn’t been mined yet. If you stopped mining earlier (as in previous tutorials), no new blocks are being created, so transactions remain unconfirmed.

Start Mining to Confirm the Transaction

Restart mining to include your transaction in a block:

> miner.start(1)
> eth.mining
true

Wait a few seconds, then stop mining:

> miner.stop()
> eth.mining
false

Now recheck the transaction:

> eth.getTransaction("...")

You should see:

blockNumber: 17,
blockHash: "0x74dfcccd..."

The transaction has been confirmed in block 17.


Verifying Balance Updates

Now check the recipient’s balance:

> web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
10

Perfect—the second account now holds 10 ETH.

But what about the sender?

> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
85

It increased to 85 ETH, even though they sent 10 ETH. Why?

Because during mining, the account received block rewards—additional Ether for successfully mining a block. This explains the increase beyond the original 80 ETH minus 10 ETH sent.


Analyzing Transaction Receipts

For deeper insights into a confirmed transaction, use eth.getTransactionReceipt():

> eth.getTransactionReceipt("0x29a48a49a140c0774b6876d343dda6df4af71b00bd515e22f6c9c08d1f4a7a00")

Key fields include:

This receipt confirms not only that the transfer succeeded but also how much gas was used—helpful for cost analysis and debugging.

👉 Explore Ethereum development tools and APIs


Frequently Asked Questions

How do I convert between Wei and Ether?

Use web3.fromWei(value, "ether") to convert Wei to Ether, and web3.toWei(value, "ether") to convert Ether to Wei. These functions support various units like "gwei" or "finney" for fine-grained control.

Why does my transaction show "authentication needed"?

Your account must be unlocked before sending funds. Use personal.unlockAccount(address) and enter the correct passphrase set during account creation.

Why didn’t my balance change immediately after sending ETH?

Transactions require confirmation via mining. Until a block includes your transaction, balances won’t update. Use eth.getTransaction() to monitor its status.

What is gas, and why does it matter?

Gas is the fee paid for executing transactions on Ethereum. Simple transfers use 21,000 units of gas. You pay gas in Ether, based on the current gasPrice. Miners prioritize higher gas prices.

Can I send ETH without mining?

Yes—in live networks like Mainnet or testnets (e.g., Sepolia), miners or validators process transactions automatically. On private chains, you must run a miner to confirm transactions.

What happens if I lose my passphrase?

You lose access to your account. Unlike traditional systems, there’s no password recovery in Ethereum. Always back up your keystore files and store passphrases securely.

👉 Secure your crypto assets with best practices


Core Keywords for SEO

By mastering these fundamental operations—checking balances, unlocking accounts, sending transactions, and verifying confirmations—you gain full control over Ethereum interactions at the protocol level. Whether building dApps or managing private networks, this knowledge forms the foundation of blockchain development.

Continue experimenting with different values, multiple accounts, and custom gas settings to deepen your understanding of Ethereum’s inner workings.