Go Ethereum : Using geth and creating account
Thanks: I prepare this lesson thanks to newline course. Most of the written materials belongs to newline course.
START
Firstly we need to download go ethereum from official web site
I choose Linux version and download it.
I extract this folder and save “geth” file. We will use it.
I write the following commands in terminal.
mkdir go
cd go
mkdir bin
home/go/bin
This is our physical position in the our computer.
I put “geth” file to the this location
This is the private node
We are not joining the production Ethereum network.
We’re not going to download the history of everything that has happened in Ethereum thus far.
Instead, we’re going to start our own private network.
We’re going to configure our local test blockchain by using this configuration file, genesis.json
.
You can save genesis.json file to the go folder.
Our node is starting
./bin/geth --datadir=./datadir init genesis.json
We create datadir folder. Would you like to see more detail?
You need to install tree with the following code
sudo snap install tree
It is time to see!
tree datadir
datadir has geth
and keystore
.
1-The geth
directory holds our blockchain data.
2-The keystore
directory, will hold our accounts keys.
I create one account.
./bin/geth --datadir=./datadir account new
It is the result.
Dont forget your password because you will use it again.
My password is 123456
You can control your public address in etherscan
We check out our datadir folder structure.
tree datadir
¡Orale Cabron! We have a new file in keystore.
Please focus on KEYSTORE.
KEYSTORE has our public address.
UTC--2022-03-13T15-06-39.931303932Z--5921a6ee66bb12b4c27592e3d6452b2226dbaa7f
0x5921A6Ee66Bb12B4C27592e3D6452B2226Dbaa7
For more readability
sudo snap install jq
Then the formula
cat datadir/keystore/ + YOUR KEYSTORE + | jq '.'
cat datadir/keystore/UTC--2022-03-13T15-06-39.931303932Z--5921a6ee66bb12b4c27592e3d6452b2226dbaa7f | jq '.'
This is geth javascript console
./bin/geth --datadir=./datadir console
We are in the console
Ether is created as a reward for mining new blocks.
We want to send ether to someone else:
- we create a transaction
- these transactions are grouped into blocks
- miners verify that these blocks are valid and then
- they are rewarded ether for doing this
We can get ether by being a miner ourselves.
miner.start(1)
When you call this, you might need to wait a few seconds before you see “Commit new sealing work” then “Successfully sealed a new block”
If you dont see new block, you can see this link
Let it run for a bit and then stop the miner:
miner.stop()
You can find out the number of blocks we mined by calling eth.blockNumber
:
eth.blockNumber
I have 38 blocks
I have 190 ether. Wav!
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
I create the new account
personal.newAccount(“123456”)
123456 is my password
This is new account
New address is 0x2A1a50f37F6514DCD4500CFC50D880AB0130721f
I check my accounts
eth.accounts
eth.accounts[0]: 0x5921A6Ee66Bb12B4C27592e3D6452B2226Dbaa7F
eth.accounts[1]: 0x2A1a50f37F6514DCD4500CFC50D880AB0130721
To send ether we need to specify:
- the from address
- the to address and
- the value of the transaction
We’ll do this with the sendTransaction
method:
But fistly you unlock the account
personal.unlockAccount(eth.accounts[0], "123456")
Now you can sent
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(10, "ether")})
We want to see more detail. We take hash value and analysis it
eth.getTransaction(“0xc51c384428335331761f089618a714ca23c1850a27a6f33e819f6b1e2925c1f1”)
Since we submitted a transaction, sending 3 ether from one account to another, our balances should have changed, right? Let’s check:
eth.getBalance(eth.accounts[1])
What is the problem ?
Well, it’s because even though we submitted a transaction, that block hasn’t been processed by any miners.
Take look at the information returned by getTransaction
again.
Notice that the blockNumber
says "null" and the blockHash
is just zero.
This transaction hasn't been included in any block, so our account balances haven't changed.
In order to process this transaction, we need our miners to include it in a block. We can do that by starting our miner again:
miner.start(1)
miner.stop()
Now check it
eth.getBalance(eth.accounts[1])
or ether amount
web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
Let’s take a look at our transaction hash again:
eth.getTransaction(“0xc51c384428335331761f089618a714ca23c1850a27a6f33e819f6b1e2925c1f1”)
Notice that we now have a blockNumber
as 39 and as well as a blockHash
. We can take a closer look at the block this transaction was included in by using eth.getBlock
:
eth.getBlock(“0x30076086baf5bfae7ed0326bb24d75a473955bfd96e1829e6e1a091e8f2ce671”)
There’s a lot of data in here that will make more sense as we get further along, but take a look at the array of transactions
, notice that it contains our transaction's hash.
Each block stores a reference to it’s parent block. This is block number N, but it’s parent is block number N-1. We could look up the parent block by using parentHash
. If we looked at parentHash
we would see a list of transactions there, and then we could look at it's parent, and so on, all the way back to the original genesis block.
This idea of a block being parented by another block is the “chain” part of a blockchain. Every transaction that has ever happened in Ethereum can be found in this way.
Dr. Engin YILMAZ
2022
Ankara