Получите geth для управления своим блокчейн-узлом
Geth (Go Ethereum) - это реализация Ethereum клиента на языке программирования Go. Он предоставляет все необходимые инструменты и возможности для работы с блокчейном Ethereum: создание и управление кошельками, развертывание и управление смарт-контрактами, отправка и получение транзакций, майнинг и т. д.
Geth может быть установлен и запущен на компьютере или сервере. Работа с Geth доступна через CLI (command line interface) или JSON-RPC API, что позволяет проектировать пользовательские интерфейсы или взаимодействовать с Geth с помощью других языков программирования.
Примеры кода на языке Go для работы с Geth:
1. Установка и запуск Geth:
go
package main
import (
"github.com/ethereum/go-ethereum/ethclient"
"log"
)
func main() {
client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID")
if err != nil {
log.Fatal(err)
}
// Получаем информацию о последнем блоке
block, err := client.BlockByNumber(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
log.Println(block.Number().Uint64()) // номер последнего блока
log.Println(block.Time()) // время создания блока
}
2. Создание нового кошелька и отправка транзакции:
go
package main
import (
"context"
"fmt"
"log"
"math/big"
"strings"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/rpc"
)
func main() {
client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID")
if err != nil {
log.Fatal(err)
}
// Создаем новый приватный ключ и публичный адрес
privateKey, err := crypto.GenerateKey()
if err != nil {
log.Fatal(err)
}
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
if !ok {
log.Fatal("Ошибка приведения типов")
}
address := crypto.PubkeyToAddress(*publicKeyECDSA)
// Отправка небольшой транзакции на указанный адрес
nonce, err := client.PendingNonceAt(context.Background(), address)
if err != nil {
log.Fatal(err)
}
value := big.NewInt(1000000000000000000) // 1 ETH в wei
gasLimit := uint64(21000) // лимит газа для отправки транзакции
gasPrice, err := client.SuggestGasPrice(context.Background())
if err != nil {
log.Fatal(err)
}
toAddress := common.HexToAddress("0xYourDestinationAddress")
var data []byte
tx := types.NewTransaction(nonce, toAddress, value, gasLimit, gasPrice, data)
chainID, err := client.NetworkID(context.Background())
if err != nil {
log.Fatal(err)
}
signedTx, err := types.SignTx(tx, types.NewEIP155Signer(chainID), privateKey)
if err != nil {
log.Fatal(err)
}
err = client.SendTransaction(context.Background(), signedTx)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Транзакция успешно отправлена! Хэш: %s\n", signedTx.Hash().Hex())
}
Эти примеры показывают базовую функциональность Geth, но Geth также предоставляет расширенные возможности для работы с блокчейном Ethereum, такие как подписывание и проверка сообщений, развертывание и вызов смарт-контрактов, работа со событиями и др. Вы можете ознакомиться с документацией их API для получения более подробной информации.