Ich möchte mit golang eine einfache "getinfo"-Anfrage an lnd senden. Ich habe derzeit
package main
import (
"fmt"
"log"
"net/rpc"
)
func main() {
client, err := rpc.Dial("tcp", "localhost:10009")
if err != nil {
log.Fatal("dialing:", err)
}
type Rep struct {
identity_pubkey string
alias string
num_pending_channels uint32
num_active_channels uint32
num_peers uint32
block_height uint32
block_hash string
synced_to_chain bool
testnet bool
chains string
uris string
best_header_timestamp int64
}
var reply Rep
args := ""
err = client.Call("getinfo", args, &reply)
if err != nil {
log.Fatal(err)
}
fmt.Println(reply)
}
aber ich bekomme2018/04/12 23:41:09 unexpected EOF
Lnd verwendet
Hier ist ein Beispielcode zum Herstellen einer Verbindung mit lnd und zum Ausführen einer getinfo-Anfrage. Es wird davon ausgegangen, dass Sie Makronen verwenden. Möglicherweise müssen Sie die richtigen Pfade für das tls-Zertifikat und die Makronendatei einfügen.
package main
import (
"context"
"fmt"
"github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/lnrpc"
"github.com/lightningnetwork/lnd/macaroons"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"gopkg.in/macaroon.v2"
"io/ioutil"
"os/user"
"path"
)
func main() {
usr, err := user.Current()
if err != nil {
fmt.Println("Cannot get current user:", err)
return
}
fmt.Println("The user home directory: " + usr.HomeDir)
tlsCertPath := path.Join(usr.HomeDir, ".lnd/tls.cert")
macaroonPath := path.Join(usr.HomeDir, ".lnd/admin.macaroon")
tlsCreds, err := credentials.NewClientTLSFromFile(tlsCertPath, "")
if err != nil {
fmt.Println("Cannot get node tls credentials", err)
return
}
macaroonBytes, err := ioutil.ReadFile(macaroonPath)
if err != nil {
fmt.Println("Cannot read macaroon file", err)
return
}
mac := &macaroon.Macaroon{}
if err = mac.UnmarshalBinary(macaroonBytes); err != nil {
fmt.Println("Cannot unmarshal macaroon", err)
return
}
opts := []grpc.DialOption{
grpc.WithTransportCredentials(tlsCreds),
grpc.WithBlock(),
grpc.WithPerRPCCredentials(macaroons.NewMacaroonCredential(mac)),
}
conn, err := grpc.Dial("localhost:10009", opts...)
if err != nil {
fmt.Println("cannot dial to lnd", err)
return
}
client := lnrpc.NewLightningClient(conn)
ctx := context.Background()
getInfoResp, err := client.GetInfo(ctx, &lnrpc.GetInfoRequest{})
if err != nil {
fmt.Println("Cannot get info from node:", err)
return
}
spew.Dump(getInfoResp)
}
Es gibt eine großartige Ressource über lnd https://dev.lightning.community/
Hoffe das hilft.
k76u4vkweek547v7
./client.go:49:61: cannot use mac (type *"gopkg.in/macaroon.v2".Macaroon) as type *"github.com/lightningnetwork/lnd/vendor/gopkg.in/macaroon.v2".Macaroon in argument to macaroons.NewMacaroonCredential ./client.go:57:36: cannot use conn (type *"google.golang.org/grpc".ClientConn) as type *"github.com/lightningnetwork/lnd/vendor/google.golang.org/grpc".ClientConn in argument to lnrpc.NewLightningClient
Fehler. Ich werde es für den Moment als beantwortet markieren :)mkl
k76u4vkweek547v7