Saltar al contenido principal

Go

Go es ampliamente utilizado en infraestructura Bitcoin — especialmente para implementaciones alternativas de nodos, nodos Lightning (LND) y servicios backend. Su simplicidad, modelo de concurrencia robusto y compilación rápida lo hacen ideal para servicios de red.

btcd / btcutil

btcd es una implementación alternativa de nodo completo escrita en Go. Incluso si no ejecutas btcd, sus librerías son excelentes para construir aplicaciones Bitcoin.

go get github.com/btcsuite/btcd
go get github.com/btcsuite/btcutil

Generar un Par de Claves y Dirección

package main

import (
"fmt"
"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/chaincfg"
)

func main() {
// Generate a new private key
privKey, err := btcec.NewPrivateKey()
if err != nil {
panic(err)
}

// Get the public key
pubKey := privKey.PubKey()

// Create a P2WPKH address (native SegWit)
witnessProg := btcutil.Hash160(pubKey.SerializeCompressed())
address, err := btcutil.NewAddressWitnessPubKeyHash(
witnessProg, &chaincfg.RegressionNetParams,
)
if err != nil {
panic(err)
}

fmt.Printf("Address: %s\n", address.EncodeAddress())

// WIF-encode the private key
wif, _ := btcutil.NewWIF(privKey, &chaincfg.RegressionNetParams, true)
fmt.Printf("WIF: %s\n", wif.String())
}

Conectar a Bitcoin Core vía RPC

package main

import (
"fmt"
"github.com/btcsuite/btcd/rpcclient"
)

func main() {
// Connect to bitcoind
connCfg := &rpcclient.ConnConfig{
Host: "localhost:18443",
User: "rpcuser",
Pass: "rpcpassword",
HTTPPostMode: true,
DisableTLS: true,
}

client, err := rpcclient.New(connCfg, nil)
if err != nil {
panic(err)
}
defer client.Shutdown()

// Get blockchain info
info, err := client.GetBlockChainInfo()
if err != nil {
panic(err)
}
fmt.Printf("Chain: %s, Blocks: %d\n", info.Chain, info.Blocks)

// Get best block hash
hash, _ := client.GetBestBlockHash()
fmt.Printf("Best block: %s\n", hash.String())
}

LND (Lightning Network Daemon)

LND es la implementación más popular de Lightning Network, escrita en Go. Expone una API gRPC para construir aplicaciones Lightning:

// LND gRPC client example
import "github.com/lightningnetwork/lnd/lnrpc"

// Create an invoice
invoice, err := client.AddInvoice(ctx, &lnrpc.Invoice{
Value: 1000, // satoshis
Memo: "Test payment",
})

// Pay an invoice
payment, err := client.SendPaymentSync(ctx, &lnrpc.SendRequest{
PaymentRequest: "lnbc...",
})

Ecosistema Bitcoin en Go

PaquetePropósito
btcdImplementación de nodo completo
btcutilCodificación de direcciones, WIF, montos
btcecOperaciones de curva elíptica (secp256k1)
btcwalletImplementación completa de wallet
rpcclientCliente RPC de Bitcoin Core
lndNodo Lightning Network
neutrinoCliente ligero (BIP-157/158)

Lectura Recomendada