Previous Topic: Connect to Ganache using golang
In the pervious topic, we showed how to connect with ganache and retrieving balance for the account using Golang. Now, we are going to transfer some ethers from one account to another account using Golang.
Transfer Fund:
Here we are going to transfer 5 ethers,
From Address : 0x532205E897418D09F2C0253E5A31e666eE87cb1A
To Address : 0x3fCf008C3d40C0af410CD122F00eFA77288A2E13
Each account has balance of 100 eth.
First, we need to find the nonce of the From Address and generate the unsigned raw transaction and using the private key of the From Address sign the unsigned raw transaction.
To get the Private Key follow the steps:
1. Click the show keys.
2. We will able to see the private key details of the respective address.
After Signing the transaction, we need to broadcast that signed transaction in the network.
package main import ( "context" "fmt" "log" "math/big" "strings" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethclient" ) func main() { client, err := ethclient.Dial("http://127.0.0.1:7545") if err != nil { log.Fatal(err) } fmt.Println("Connection with ganache successful") fromAddress := common.HexToAddress("0x532205E897418D09F2C0253E5A31e666eE87cb1A") toAddress := common.HexToAddress("0x3fCf008C3d40C0af410CD122F00eFA77288A2E13") chainId, err := client.ChainID(context.Background()) if err != nil { log.Fatal(err) } nonce, err := client.PendingNonceAt(context.Background(), fromAddress) if err != nil { log.Fatal(err) } // amount of the ethers needs to be transfer in wei value := big.NewInt(5000000000000000000) var gasLimit = uint64(21000) gasPrice, err := client.SuggestGasPrice(context.Background()) if err != nil { log.Fatal(err) } // Generating unsinged Raw tx var data []byte var rawTxObject types.LegacyTx rawTxObject.Nonce = nonce rawTxObject.Data = data rawTxObject.To = &toAddress rawTxObject.Gas = gasLimit rawTxObject.GasPrice = gasPrice rawTxObject.Value = value rawTx := types.NewTx(&rawTxObject) fmt.Println("Raw Unsigned transaction generated successfully") // Signing the Tx fromAddressPrivKey := "0x90f4d50d7e43a0c6312bc55754b5c8b888090df72f3407cfb69c0d3965864f90" fromAddressPrivKey = strings.TrimPrefix(fromAddressPrivKey, "0x") prvKey, err := crypto.HexToECDSA(fromAddressPrivKey) if err != nil { log.Fatal(err) } signedTx, err := types.SignTx(rawTx, types.LatestSignerForChainID(chainId), prvKey) if err != nil { log.Fatal(err) } fmt.Println("signing the transaction successfully done") // Broadcasting Tx err = client.SendTransaction(context.Background(), signedTx) if err != nil { log.Fatal(err) } fmt.Println("broadcasting the transaction successfully done") fmt.Println("Tx hash :", signedTx.Hash().Hex()) }
Output:
Connection with ganache successful Raw Unsigned transaction generated successfully signing the transaction successfully done broadcasting the transaction successfully done Tx hash : 0xdb09d87c8f99368b7dc88e3973499e1728bc77558beefbe2ebe845e6a5474aa3
Now, The transferring funds from one account to another account is done in Ganache using Golang. You can able to see the block details and transaction details in the Ganache.
Comments
Post a Comment