dot.dot.dot.exampol
This commit is contained in:
commit
a0bc2d79de
406 changed files with 34577 additions and 0 deletions
37
node_modules/lnsocket/go/go.mod
generated
vendored
Normal file
37
node_modules/lnsocket/go/go.mod
generated
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
module github.com/jb55/lnsocket/go
|
||||
|
||||
require (
|
||||
github.com/btcsuite/btcd v0.22.0-beta.0.20211005184431-e3449998be39
|
||||
github.com/lightningnetwork/lnd v0.14.1-beta
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/aead/siphash v1.0.1 // indirect
|
||||
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect
|
||||
github.com/btcsuite/btcutil v1.0.3-0.20210527170813-e2ba6805a890 // indirect
|
||||
github.com/btcsuite/btcutil/psbt v1.0.3-0.20210527170813-e2ba6805a890 // indirect
|
||||
github.com/btcsuite/btcwallet v0.13.0 // indirect
|
||||
github.com/btcsuite/btcwallet/wallet/txauthor v1.1.0 // indirect
|
||||
github.com/btcsuite/btcwallet/wallet/txrules v1.1.0 // indirect
|
||||
github.com/btcsuite/btcwallet/wallet/txsizes v1.1.0 // indirect
|
||||
github.com/btcsuite/btcwallet/walletdb v1.3.6-0.20210803004036-eebed51155ec // indirect
|
||||
github.com/btcsuite/btcwallet/wtxmgr v1.3.1-0.20210822222949-9b5a201c344c // indirect
|
||||
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd // indirect
|
||||
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/decred/dcrd/lru v1.0.0 // indirect
|
||||
github.com/go-errors/errors v1.0.1 // indirect
|
||||
github.com/kkdai/bstream v1.0.0 // indirect
|
||||
github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf // indirect
|
||||
github.com/lightninglabs/neutrino v0.13.0 // indirect
|
||||
github.com/lightningnetwork/lnd/clock v1.1.0 // indirect
|
||||
github.com/lightningnetwork/lnd/queue v1.1.0 // indirect
|
||||
github.com/lightningnetwork/lnd/ticker v1.1.0 // indirect
|
||||
github.com/miekg/dns v1.1.43 // indirect
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
|
||||
golang.org/x/net v0.0.0-20210913180222-943fd674d43e // indirect
|
||||
golang.org/x/sys v0.0.0-20210915083310-ed5796bab164 // indirect
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 // indirect
|
||||
)
|
||||
|
||||
go 1.17
|
1009
node_modules/lnsocket/go/go.sum
generated
vendored
Normal file
1009
node_modules/lnsocket/go/go.sum
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
190
node_modules/lnsocket/go/lnsocket.go
generated
vendored
Normal file
190
node_modules/lnsocket/go/lnsocket.go
generated
vendored
Normal file
|
@ -0,0 +1,190 @@
|
|||
package lnsocket
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/lightningnetwork/lnd/brontide"
|
||||
"github.com/lightningnetwork/lnd/keychain"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/tor"
|
||||
)
|
||||
|
||||
const (
|
||||
COMMANDO_CMD = 0x4c4f
|
||||
COMMANDO_REPLY_CONTINUES = 0x594b
|
||||
COMMANDO_REPLY_TERM = 0x594d
|
||||
)
|
||||
|
||||
type CommandoMsg struct {
|
||||
Rune string
|
||||
Method string
|
||||
Params string
|
||||
RequestId uint64
|
||||
}
|
||||
|
||||
func NewCommandoMsg(token string, method string, params string) CommandoMsg {
|
||||
return CommandoMsg{
|
||||
Rune: token,
|
||||
Method: method,
|
||||
Params: params,
|
||||
}
|
||||
}
|
||||
|
||||
// A compile time check to ensure Init implements the lnwire.Message
|
||||
// interface.
|
||||
|
||||
func (msg *CommandoMsg) MsgType() lnwire.MessageType {
|
||||
return COMMANDO_CMD
|
||||
}
|
||||
|
||||
func (msg *CommandoMsg) Decode(reader io.Reader, size uint32) error {
|
||||
return fmt.Errorf("implememt commando decode?")
|
||||
}
|
||||
|
||||
func (msg *CommandoMsg) Encode(buf *bytes.Buffer, pver uint32) error {
|
||||
if err := lnwire.WriteUint64(buf, msg.RequestId); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
buf.WriteString("{\"method\": \"")
|
||||
buf.WriteString(msg.Method)
|
||||
buf.WriteString("\",\"params\":")
|
||||
buf.WriteString(msg.Params)
|
||||
buf.WriteString(",\"rune\":\"")
|
||||
buf.WriteString(msg.Rune)
|
||||
buf.WriteString("\"}")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type LNSocket struct {
|
||||
Conn net.Conn
|
||||
PrivKeyECDH *keychain.PrivKeyECDH
|
||||
}
|
||||
|
||||
func (ln *LNSocket) GenKey() {
|
||||
remotePriv, _ := btcec.NewPrivateKey(btcec.S256())
|
||||
ln.PrivKeyECDH = &keychain.PrivKeyECDH{PrivKey: remotePriv}
|
||||
}
|
||||
|
||||
func (ln *LNSocket) ConnectWith(netAddr *lnwire.NetAddress) error {
|
||||
conn, err := brontide.Dial(ln.PrivKeyECDH, netAddr, tor.DefaultConnTimeout, net.DialTimeout)
|
||||
ln.Conn = conn
|
||||
return err
|
||||
}
|
||||
|
||||
func (ln *LNSocket) Connect(hostname string, pubkey string) error {
|
||||
addr, err := net.ResolveTCPAddr("tcp", hostname)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
bytes, err := hex.DecodeString(pubkey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
key, err := btcec.ParsePubKey(bytes, btcec.S256())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
netAddr := &lnwire.NetAddress{
|
||||
IdentityKey: key,
|
||||
Address: addr,
|
||||
}
|
||||
|
||||
return ln.ConnectWith(netAddr)
|
||||
}
|
||||
|
||||
func (ln *LNSocket) PerformInit() error {
|
||||
no_features := lnwire.NewRawFeatureVector()
|
||||
init_reply_msg := lnwire.NewInitMessage(no_features, no_features)
|
||||
|
||||
var b bytes.Buffer
|
||||
_, err := lnwire.WriteMessage(&b, init_reply_msg, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = ln.Conn.Write(b.Bytes())
|
||||
|
||||
// receive the first init msg
|
||||
_, _, err = ln.Recv()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ln *LNSocket) Rpc(token string, method string, params string) (string, error) {
|
||||
commando_msg := NewCommandoMsg(token, method, params)
|
||||
|
||||
var b bytes.Buffer
|
||||
_, err := lnwire.WriteMessage(&b, &commando_msg, 0)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
bs := b.Bytes()
|
||||
_, err = ln.Conn.Write(bs)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return ln.rpcReadAll()
|
||||
}
|
||||
|
||||
func ParseMsgType(bytes []byte) uint16 {
|
||||
return uint16(bytes[0])<<8 | uint16(bytes[1])
|
||||
}
|
||||
|
||||
func (ln *LNSocket) Recv() (uint16, []byte, error) {
|
||||
res := make([]byte, 65535)
|
||||
n, err := ln.Conn.Read(res)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
if n < 2 {
|
||||
return 0, nil, fmt.Errorf("read too small")
|
||||
}
|
||||
res = res[:n]
|
||||
msgtype := ParseMsgType(res)
|
||||
return msgtype, res[2:], nil
|
||||
}
|
||||
|
||||
func (ln *LNSocket) rpcReadAll() (string, error) {
|
||||
all := []byte{}
|
||||
for {
|
||||
msgtype, res, err := ln.Recv()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
switch msgtype {
|
||||
case COMMANDO_REPLY_CONTINUES:
|
||||
all = append(all, res[8:]...)
|
||||
continue
|
||||
case COMMANDO_REPLY_TERM:
|
||||
all = append(all, res[8:]...)
|
||||
return string(all), nil
|
||||
default:
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ln *LNSocket) Disconnect() {
|
||||
ln.Conn.Close()
|
||||
}
|
||||
|
||||
func (ln *LNSocket) ConnectAndInit(hostname string, pubkey string) error {
|
||||
err := ln.Connect(hostname, pubkey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return ln.PerformInit()
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue