Merge pull request #4303 from wpaulino/persistent-output-leases
walletrpc: add basic coin selection RPCs
This commit is contained in:
commit
7f258d0213
8
go.mod
8
go.mod
@ -9,11 +9,11 @@ require (
|
|||||||
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f
|
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f
|
||||||
github.com/btcsuite/btcutil v1.0.2
|
github.com/btcsuite/btcutil v1.0.2
|
||||||
github.com/btcsuite/btcutil/psbt v1.0.2
|
github.com/btcsuite/btcutil/psbt v1.0.2
|
||||||
github.com/btcsuite/btcwallet v0.11.1-0.20200515224913-e0e62245ecbe
|
github.com/btcsuite/btcwallet v0.11.1-0.20200604005347-6390f167e5f8
|
||||||
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0
|
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0
|
||||||
github.com/btcsuite/btcwallet/wallet/txrules v1.0.0
|
github.com/btcsuite/btcwallet/wallet/txrules v1.0.0
|
||||||
github.com/btcsuite/btcwallet/walletdb v1.3.1
|
github.com/btcsuite/btcwallet/walletdb v1.3.1
|
||||||
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200515224913-e0e62245ecbe
|
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200604005347-6390f167e5f8
|
||||||
github.com/coreos/etcd v3.3.22+incompatible
|
github.com/coreos/etcd v3.3.22+incompatible
|
||||||
github.com/coreos/go-semver v0.3.0 // indirect
|
github.com/coreos/go-semver v0.3.0 // indirect
|
||||||
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
|
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect
|
||||||
@ -49,7 +49,7 @@ require (
|
|||||||
github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d
|
github.com/lightninglabs/protobuf-hex-display v1.3.3-0.20191212020323-b444784ce75d
|
||||||
github.com/lightningnetwork/lightning-onion v1.0.2-0.20200501022730-3c8c8d0b89ea
|
github.com/lightningnetwork/lightning-onion v1.0.2-0.20200501022730-3c8c8d0b89ea
|
||||||
github.com/lightningnetwork/lnd/cert v1.0.2
|
github.com/lightningnetwork/lnd/cert v1.0.2
|
||||||
github.com/lightningnetwork/lnd/clock v1.0.0
|
github.com/lightningnetwork/lnd/clock v1.0.1
|
||||||
github.com/lightningnetwork/lnd/queue v1.0.4
|
github.com/lightningnetwork/lnd/queue v1.0.4
|
||||||
github.com/lightningnetwork/lnd/ticker v1.0.0
|
github.com/lightningnetwork/lnd/ticker v1.0.0
|
||||||
github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796
|
github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796
|
||||||
@ -59,7 +59,7 @@ require (
|
|||||||
github.com/prometheus/client_golang v0.9.3
|
github.com/prometheus/client_golang v0.9.3
|
||||||
github.com/rogpeppe/fastuuid v1.2.0 // indirect
|
github.com/rogpeppe/fastuuid v1.2.0 // indirect
|
||||||
github.com/soheilhy/cmux v0.1.4 // indirect
|
github.com/soheilhy/cmux v0.1.4 // indirect
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.5.1
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect
|
||||||
github.com/tv42/zbase32 v0.0.0-20160707012821-501572607d02
|
github.com/tv42/zbase32 v0.0.0-20160707012821-501572607d02
|
||||||
github.com/urfave/cli v1.18.0
|
github.com/urfave/cli v1.18.0
|
||||||
|
11
go.sum
11
go.sum
@ -36,8 +36,8 @@ github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2ut
|
|||||||
github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts=
|
github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts=
|
||||||
github.com/btcsuite/btcutil/psbt v1.0.2 h1:gCVY3KxdoEVU7Q6TjusPO+GANIwVgr9yTLqM+a6CZr8=
|
github.com/btcsuite/btcutil/psbt v1.0.2 h1:gCVY3KxdoEVU7Q6TjusPO+GANIwVgr9yTLqM+a6CZr8=
|
||||||
github.com/btcsuite/btcutil/psbt v1.0.2/go.mod h1:LVveMu4VaNSkIRTZu2+ut0HDBRuYjqGocxDMNS1KuGQ=
|
github.com/btcsuite/btcutil/psbt v1.0.2/go.mod h1:LVveMu4VaNSkIRTZu2+ut0HDBRuYjqGocxDMNS1KuGQ=
|
||||||
github.com/btcsuite/btcwallet v0.11.1-0.20200515224913-e0e62245ecbe h1:0m9uXDcnUc3Fv72635O/MfLbhbW+0hfSVgRiWezpkHU=
|
github.com/btcsuite/btcwallet v0.11.1-0.20200604005347-6390f167e5f8 h1:wyooGuOeqcpJDK9+KgO5/yfb3nmEhakbdKHERhEylNE=
|
||||||
github.com/btcsuite/btcwallet v0.11.1-0.20200515224913-e0e62245ecbe/go.mod h1:9+AH3V5mcTtNXTKe+fe63fDLKGOwQbZqmvOVUef+JFE=
|
github.com/btcsuite/btcwallet v0.11.1-0.20200604005347-6390f167e5f8/go.mod h1:9+AH3V5mcTtNXTKe+fe63fDLKGOwQbZqmvOVUef+JFE=
|
||||||
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0 h1:KGHMW5sd7yDdDMkCZ/JpP0KltolFsQcB973brBnfj4c=
|
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0 h1:KGHMW5sd7yDdDMkCZ/JpP0KltolFsQcB973brBnfj4c=
|
||||||
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0/go.mod h1:VufDts7bd/zs3GV13f/lXc/0lXrPnvxD/NvmpG/FEKU=
|
github.com/btcsuite/btcwallet/wallet/txauthor v1.0.0/go.mod h1:VufDts7bd/zs3GV13f/lXc/0lXrPnvxD/NvmpG/FEKU=
|
||||||
github.com/btcsuite/btcwallet/wallet/txrules v1.0.0 h1:2VsfS0sBedcM5KmDzRMT3+b6xobqWveZGvjb+jFez5w=
|
github.com/btcsuite/btcwallet/wallet/txrules v1.0.0 h1:2VsfS0sBedcM5KmDzRMT3+b6xobqWveZGvjb+jFez5w=
|
||||||
@ -48,10 +48,9 @@ github.com/btcsuite/btcwallet/walletdb v1.0.0/go.mod h1:bZTy9RyYZh9fLnSua+/CD48T
|
|||||||
github.com/btcsuite/btcwallet/walletdb v1.2.0/go.mod h1:9cwc1Yyg4uvd4ZdfdoMnALji+V9gfWSMfxEdLdR5Vwc=
|
github.com/btcsuite/btcwallet/walletdb v1.2.0/go.mod h1:9cwc1Yyg4uvd4ZdfdoMnALji+V9gfWSMfxEdLdR5Vwc=
|
||||||
github.com/btcsuite/btcwallet/walletdb v1.3.1 h1:lW1Ac3F1jJY4K11P+YQtRNcP5jFk27ASfrV7C6mvRU0=
|
github.com/btcsuite/btcwallet/walletdb v1.3.1 h1:lW1Ac3F1jJY4K11P+YQtRNcP5jFk27ASfrV7C6mvRU0=
|
||||||
github.com/btcsuite/btcwallet/walletdb v1.3.1/go.mod h1:9cwc1Yyg4uvd4ZdfdoMnALji+V9gfWSMfxEdLdR5Vwc=
|
github.com/btcsuite/btcwallet/walletdb v1.3.1/go.mod h1:9cwc1Yyg4uvd4ZdfdoMnALji+V9gfWSMfxEdLdR5Vwc=
|
||||||
github.com/btcsuite/btcwallet/wtxmgr v1.0.0 h1:aIHgViEmZmZfe0tQQqF1xyd2qBqFWxX5vZXkkbjtbeA=
|
|
||||||
github.com/btcsuite/btcwallet/wtxmgr v1.0.0/go.mod h1:vc4gBprll6BP0UJ+AIGDaySoc7MdAmZf8kelfNb8CFY=
|
github.com/btcsuite/btcwallet/wtxmgr v1.0.0/go.mod h1:vc4gBprll6BP0UJ+AIGDaySoc7MdAmZf8kelfNb8CFY=
|
||||||
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200515224913-e0e62245ecbe h1:yQbJVYfsKbdqDQNLxd4hhiLSiMkIygefW5mSHMsdKpc=
|
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200604005347-6390f167e5f8 h1:tfeGHvGrm5nYE92eaO8PChBvMinpcq566dG1xPO08GI=
|
||||||
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200515224913-e0e62245ecbe/go.mod h1:OwC0W0HhUszbWdvJvH6xvgabKSJ0lXl11YbmmqF9YXQ=
|
github.com/btcsuite/btcwallet/wtxmgr v1.1.1-0.20200604005347-6390f167e5f8/go.mod h1:cJGqxXtqQbmXuL7RlXjIM18x0bGHy1407/85mQCLca4=
|
||||||
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw=
|
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw=
|
||||||
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
|
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
|
||||||
github.com/btcsuite/golangcrypto v0.0.0-20150304025918-53f62d9b43e8 h1:nOsAWScwueMVk/VLm/dvQQD7DuanyvAUb6B3P3eT274=
|
github.com/btcsuite/golangcrypto v0.0.0-20150304025918-53f62d9b43e8 h1:nOsAWScwueMVk/VLm/dvQQD7DuanyvAUb6B3P3eT274=
|
||||||
@ -246,6 +245,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
|
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
|
||||||
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
package lnrpc
|
package lnrpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
|
fmt "fmt"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
"github.com/lightningnetwork/lnd/lnwire"
|
"github.com/lightningnetwork/lnd/lnwire"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -54,3 +59,88 @@ func UnmarshallAmt(amtSat, amtMsat int64) (lnwire.MilliSatoshi, error) {
|
|||||||
|
|
||||||
return lnwire.MilliSatoshi(amtMsat), nil
|
return lnwire.MilliSatoshi(amtMsat), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ParseConfs validates the minimum and maximum confirmation arguments of a
|
||||||
|
// ListUnspent request.
|
||||||
|
func ParseConfs(min, max int32) (int32, int32, error) {
|
||||||
|
switch {
|
||||||
|
// Ensure that the user didn't attempt to specify a negative number of
|
||||||
|
// confirmations, as that isn't possible.
|
||||||
|
case min < 0:
|
||||||
|
return 0, 0, fmt.Errorf("min confirmations must be >= 0")
|
||||||
|
|
||||||
|
// We'll also ensure that the min number of confs is strictly less than
|
||||||
|
// or equal to the max number of confs for sanity.
|
||||||
|
case min > max:
|
||||||
|
return 0, 0, fmt.Errorf("max confirmations must be >= min " +
|
||||||
|
"confirmations")
|
||||||
|
|
||||||
|
default:
|
||||||
|
return min, max, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalUtxos translates a []*lnwallet.Utxo into a []*lnrpc.Utxo.
|
||||||
|
func MarshalUtxos(utxos []*lnwallet.Utxo, activeNetParams *chaincfg.Params) (
|
||||||
|
[]*Utxo, error) {
|
||||||
|
|
||||||
|
res := make([]*Utxo, 0, len(utxos))
|
||||||
|
for _, utxo := range utxos {
|
||||||
|
// Translate lnwallet address type to the proper gRPC proto
|
||||||
|
// address type.
|
||||||
|
var addrType AddressType
|
||||||
|
switch utxo.AddressType {
|
||||||
|
|
||||||
|
case lnwallet.WitnessPubKey:
|
||||||
|
addrType = AddressType_WITNESS_PUBKEY_HASH
|
||||||
|
|
||||||
|
case lnwallet.NestedWitnessPubKey:
|
||||||
|
addrType = AddressType_NESTED_PUBKEY_HASH
|
||||||
|
|
||||||
|
case lnwallet.UnknownAddressType:
|
||||||
|
continue
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("invalid utxo address type")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now that we know we have a proper mapping to an address,
|
||||||
|
// we'll convert the regular outpoint to an lnrpc variant.
|
||||||
|
outpoint := &OutPoint{
|
||||||
|
TxidBytes: utxo.OutPoint.Hash[:],
|
||||||
|
TxidStr: utxo.OutPoint.Hash.String(),
|
||||||
|
OutputIndex: utxo.OutPoint.Index,
|
||||||
|
}
|
||||||
|
|
||||||
|
utxoResp := Utxo{
|
||||||
|
AddressType: addrType,
|
||||||
|
AmountSat: int64(utxo.Value),
|
||||||
|
PkScript: hex.EncodeToString(utxo.PkScript),
|
||||||
|
Outpoint: outpoint,
|
||||||
|
Confirmations: utxo.Confirmations,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, we'll attempt to extract the raw address from the
|
||||||
|
// script so we can display a human friendly address to the end
|
||||||
|
// user.
|
||||||
|
_, outAddresses, _, err := txscript.ExtractPkScriptAddrs(
|
||||||
|
utxo.PkScript, activeNetParams,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we can't properly locate a single address, then this was
|
||||||
|
// an error in our mapping, and we'll return an error back to
|
||||||
|
// the user.
|
||||||
|
if len(outAddresses) != 1 {
|
||||||
|
return nil, fmt.Errorf("an output was unexpectedly " +
|
||||||
|
"multisig")
|
||||||
|
}
|
||||||
|
utxoResp.Address = outAddresses[0].String()
|
||||||
|
|
||||||
|
res = append(res, &utxoResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
@ -12407,6 +12407,8 @@ type LightningClient interface {
|
|||||||
//target.
|
//target.
|
||||||
SendCoins(ctx context.Context, in *SendCoinsRequest, opts ...grpc.CallOption) (*SendCoinsResponse, error)
|
SendCoins(ctx context.Context, in *SendCoinsRequest, opts ...grpc.CallOption) (*SendCoinsResponse, error)
|
||||||
// lncli: `listunspent`
|
// lncli: `listunspent`
|
||||||
|
//Deprecated, use walletrpc.ListUnspent instead.
|
||||||
|
//
|
||||||
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
//number of confirmations between the specified minimum and maximum.
|
//number of confirmations between the specified minimum and maximum.
|
||||||
ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error)
|
ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error)
|
||||||
@ -13486,6 +13488,8 @@ type LightningServer interface {
|
|||||||
//target.
|
//target.
|
||||||
SendCoins(context.Context, *SendCoinsRequest) (*SendCoinsResponse, error)
|
SendCoins(context.Context, *SendCoinsRequest) (*SendCoinsResponse, error)
|
||||||
// lncli: `listunspent`
|
// lncli: `listunspent`
|
||||||
|
//Deprecated, use walletrpc.ListUnspent instead.
|
||||||
|
//
|
||||||
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
//number of confirmations between the specified minimum and maximum.
|
//number of confirmations between the specified minimum and maximum.
|
||||||
ListUnspent(context.Context, *ListUnspentRequest) (*ListUnspentResponse, error)
|
ListUnspent(context.Context, *ListUnspentRequest) (*ListUnspentResponse, error)
|
||||||
|
@ -83,8 +83,10 @@ service Lightning {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* lncli: `listunspent`
|
/* lncli: `listunspent`
|
||||||
|
Deprecated, use walletrpc.ListUnspent instead.
|
||||||
|
|
||||||
ListUnspent returns a list of all utxos spendable by the wallet with a
|
ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
number of confirmations between the specified minimum and maximum.
|
number of confirmations between the specified minimum and maximum.
|
||||||
*/
|
*/
|
||||||
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse) {
|
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse) {
|
||||||
option (google.api.http) = {
|
option (google.api.http) = {
|
||||||
|
@ -1363,7 +1363,8 @@
|
|||||||
},
|
},
|
||||||
"/v1/utxos": {
|
"/v1/utxos": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "lncli: `listunspent`\nListUnspent returns a list of all utxos spendable by the wallet with a\nnumber of confirmations between the specified minimum and maximum.",
|
"summary": "lncli: `listunspent`\nDeprecated, use walletrpc.ListUnspent instead.",
|
||||||
|
"description": "ListUnspent returns a list of all utxos spendable by the wallet with a\nnumber of confirmations between the specified minimum and maximum.",
|
||||||
"operationId": "ListUnspent",
|
"operationId": "ListUnspent",
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
package walletrpc
|
package walletrpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||||
@ -48,4 +49,7 @@ type Config struct {
|
|||||||
// Chain is an interface that the WalletKit will use to determine state
|
// Chain is an interface that the WalletKit will use to determine state
|
||||||
// about the backing chain of the wallet.
|
// about the backing chain of the wallet.
|
||||||
Chain lnwallet.BlockChainIO
|
Chain lnwallet.BlockChainIO
|
||||||
|
|
||||||
|
// ChainParams are the parameters of the wallet's backing chain.
|
||||||
|
ChainParams *chaincfg.Params
|
||||||
}
|
}
|
||||||
|
@ -132,6 +132,267 @@ func (WitnessType) EnumDescriptor() ([]byte, []int) {
|
|||||||
return fileDescriptor_6cc6942ac78249e5, []int{0}
|
return fileDescriptor_6cc6942ac78249e5, []int{0}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ListUnspentRequest struct {
|
||||||
|
// The minimum number of confirmations to be included.
|
||||||
|
MinConfs int32 `protobuf:"varint,1,opt,name=min_confs,json=minConfs,proto3" json:"min_confs,omitempty"`
|
||||||
|
// The maximum number of confirmations to be included.
|
||||||
|
MaxConfs int32 `protobuf:"varint,2,opt,name=max_confs,json=maxConfs,proto3" json:"max_confs,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListUnspentRequest) Reset() { *m = ListUnspentRequest{} }
|
||||||
|
func (m *ListUnspentRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*ListUnspentRequest) ProtoMessage() {}
|
||||||
|
func (*ListUnspentRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListUnspentRequest) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_ListUnspentRequest.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ListUnspentRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ListUnspentRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ListUnspentRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ListUnspentRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ListUnspentRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *ListUnspentRequest) GetMinConfs() int32 {
|
||||||
|
if m != nil {
|
||||||
|
return m.MinConfs
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListUnspentRequest) GetMaxConfs() int32 {
|
||||||
|
if m != nil {
|
||||||
|
return m.MaxConfs
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListUnspentResponse struct {
|
||||||
|
// A list of utxos satisfying the specified number of confirmations.
|
||||||
|
Utxos []*lnrpc.Utxo `protobuf:"bytes,1,rep,name=utxos,proto3" json:"utxos,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListUnspentResponse) Reset() { *m = ListUnspentResponse{} }
|
||||||
|
func (m *ListUnspentResponse) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*ListUnspentResponse) ProtoMessage() {}
|
||||||
|
func (*ListUnspentResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ListUnspentResponse) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_ListUnspentResponse.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ListUnspentResponse.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentResponse) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ListUnspentResponse.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentResponse) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ListUnspentResponse.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ListUnspentResponse) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ListUnspentResponse.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ListUnspentResponse proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *ListUnspentResponse) GetUtxos() []*lnrpc.Utxo {
|
||||||
|
if m != nil {
|
||||||
|
return m.Utxos
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type LeaseOutputRequest struct {
|
||||||
|
//
|
||||||
|
//An ID of 32 random bytes that must be unique for each distinct application
|
||||||
|
//using this RPC which will be used to bound the output lease to.
|
||||||
|
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
|
// The identifying outpoint of the output being leased.
|
||||||
|
Outpoint *lnrpc.OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LeaseOutputRequest) Reset() { *m = LeaseOutputRequest{} }
|
||||||
|
func (m *LeaseOutputRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*LeaseOutputRequest) ProtoMessage() {}
|
||||||
|
func (*LeaseOutputRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LeaseOutputRequest) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_LeaseOutputRequest.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_LeaseOutputRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_LeaseOutputRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_LeaseOutputRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_LeaseOutputRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_LeaseOutputRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *LeaseOutputRequest) GetId() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Id
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LeaseOutputRequest) GetOutpoint() *lnrpc.OutPoint {
|
||||||
|
if m != nil {
|
||||||
|
return m.Outpoint
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type LeaseOutputResponse struct {
|
||||||
|
//
|
||||||
|
//The absolute expiration of the output lease represented as a unix timestamp.
|
||||||
|
Expiration uint64 `protobuf:"varint,1,opt,name=expiration,proto3" json:"expiration,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LeaseOutputResponse) Reset() { *m = LeaseOutputResponse{} }
|
||||||
|
func (m *LeaseOutputResponse) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*LeaseOutputResponse) ProtoMessage() {}
|
||||||
|
func (*LeaseOutputResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{3}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *LeaseOutputResponse) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_LeaseOutputResponse.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_LeaseOutputResponse.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputResponse) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_LeaseOutputResponse.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputResponse) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_LeaseOutputResponse.Size(m)
|
||||||
|
}
|
||||||
|
func (m *LeaseOutputResponse) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_LeaseOutputResponse.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_LeaseOutputResponse proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *LeaseOutputResponse) GetExpiration() uint64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.Expiration
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReleaseOutputRequest struct {
|
||||||
|
// The unique ID that was used to lock the output.
|
||||||
|
Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
|
// The identifying outpoint of the output being released.
|
||||||
|
Outpoint *lnrpc.OutPoint `protobuf:"bytes,2,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ReleaseOutputRequest) Reset() { *m = ReleaseOutputRequest{} }
|
||||||
|
func (m *ReleaseOutputRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*ReleaseOutputRequest) ProtoMessage() {}
|
||||||
|
func (*ReleaseOutputRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{4}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ReleaseOutputRequest) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_ReleaseOutputRequest.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ReleaseOutputRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ReleaseOutputRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ReleaseOutputRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ReleaseOutputRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ReleaseOutputRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *ReleaseOutputRequest) GetId() []byte {
|
||||||
|
if m != nil {
|
||||||
|
return m.Id
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ReleaseOutputRequest) GetOutpoint() *lnrpc.OutPoint {
|
||||||
|
if m != nil {
|
||||||
|
return m.Outpoint
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReleaseOutputResponse struct {
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ReleaseOutputResponse) Reset() { *m = ReleaseOutputResponse{} }
|
||||||
|
func (m *ReleaseOutputResponse) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*ReleaseOutputResponse) ProtoMessage() {}
|
||||||
|
func (*ReleaseOutputResponse) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_6cc6942ac78249e5, []int{5}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *ReleaseOutputResponse) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_ReleaseOutputResponse.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_ReleaseOutputResponse.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputResponse) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_ReleaseOutputResponse.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputResponse) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_ReleaseOutputResponse.Size(m)
|
||||||
|
}
|
||||||
|
func (m *ReleaseOutputResponse) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_ReleaseOutputResponse.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_ReleaseOutputResponse proto.InternalMessageInfo
|
||||||
|
|
||||||
type KeyReq struct {
|
type KeyReq struct {
|
||||||
//
|
//
|
||||||
//Is the key finger print of the root pubkey that this request is targeting.
|
//Is the key finger print of the root pubkey that this request is targeting.
|
||||||
@ -151,7 +412,7 @@ func (m *KeyReq) Reset() { *m = KeyReq{} }
|
|||||||
func (m *KeyReq) String() string { return proto.CompactTextString(m) }
|
func (m *KeyReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*KeyReq) ProtoMessage() {}
|
func (*KeyReq) ProtoMessage() {}
|
||||||
func (*KeyReq) Descriptor() ([]byte, []int) {
|
func (*KeyReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{0}
|
return fileDescriptor_6cc6942ac78249e5, []int{6}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *KeyReq) XXX_Unmarshal(b []byte) error {
|
func (m *KeyReq) XXX_Unmarshal(b []byte) error {
|
||||||
@ -196,7 +457,7 @@ func (m *AddrRequest) Reset() { *m = AddrRequest{} }
|
|||||||
func (m *AddrRequest) String() string { return proto.CompactTextString(m) }
|
func (m *AddrRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*AddrRequest) ProtoMessage() {}
|
func (*AddrRequest) ProtoMessage() {}
|
||||||
func (*AddrRequest) Descriptor() ([]byte, []int) {
|
func (*AddrRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{1}
|
return fileDescriptor_6cc6942ac78249e5, []int{7}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *AddrRequest) XXX_Unmarshal(b []byte) error {
|
func (m *AddrRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -230,7 +491,7 @@ func (m *AddrResponse) Reset() { *m = AddrResponse{} }
|
|||||||
func (m *AddrResponse) String() string { return proto.CompactTextString(m) }
|
func (m *AddrResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*AddrResponse) ProtoMessage() {}
|
func (*AddrResponse) ProtoMessage() {}
|
||||||
func (*AddrResponse) Descriptor() ([]byte, []int) {
|
func (*AddrResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{2}
|
return fileDescriptor_6cc6942ac78249e5, []int{8}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *AddrResponse) XXX_Unmarshal(b []byte) error {
|
func (m *AddrResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -274,7 +535,7 @@ func (m *Transaction) Reset() { *m = Transaction{} }
|
|||||||
func (m *Transaction) String() string { return proto.CompactTextString(m) }
|
func (m *Transaction) String() string { return proto.CompactTextString(m) }
|
||||||
func (*Transaction) ProtoMessage() {}
|
func (*Transaction) ProtoMessage() {}
|
||||||
func (*Transaction) Descriptor() ([]byte, []int) {
|
func (*Transaction) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{3}
|
return fileDescriptor_6cc6942ac78249e5, []int{9}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Transaction) XXX_Unmarshal(b []byte) error {
|
func (m *Transaction) XXX_Unmarshal(b []byte) error {
|
||||||
@ -326,7 +587,7 @@ func (m *PublishResponse) Reset() { *m = PublishResponse{} }
|
|||||||
func (m *PublishResponse) String() string { return proto.CompactTextString(m) }
|
func (m *PublishResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*PublishResponse) ProtoMessage() {}
|
func (*PublishResponse) ProtoMessage() {}
|
||||||
func (*PublishResponse) Descriptor() ([]byte, []int) {
|
func (*PublishResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{4}
|
return fileDescriptor_6cc6942ac78249e5, []int{10}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PublishResponse) XXX_Unmarshal(b []byte) error {
|
func (m *PublishResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -373,7 +634,7 @@ func (m *SendOutputsRequest) Reset() { *m = SendOutputsRequest{} }
|
|||||||
func (m *SendOutputsRequest) String() string { return proto.CompactTextString(m) }
|
func (m *SendOutputsRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SendOutputsRequest) ProtoMessage() {}
|
func (*SendOutputsRequest) ProtoMessage() {}
|
||||||
func (*SendOutputsRequest) Descriptor() ([]byte, []int) {
|
func (*SendOutputsRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{5}
|
return fileDescriptor_6cc6942ac78249e5, []int{11}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *SendOutputsRequest) XXX_Unmarshal(b []byte) error {
|
func (m *SendOutputsRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -428,7 +689,7 @@ func (m *SendOutputsResponse) Reset() { *m = SendOutputsResponse{} }
|
|||||||
func (m *SendOutputsResponse) String() string { return proto.CompactTextString(m) }
|
func (m *SendOutputsResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SendOutputsResponse) ProtoMessage() {}
|
func (*SendOutputsResponse) ProtoMessage() {}
|
||||||
func (*SendOutputsResponse) Descriptor() ([]byte, []int) {
|
func (*SendOutputsResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{6}
|
return fileDescriptor_6cc6942ac78249e5, []int{12}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *SendOutputsResponse) XXX_Unmarshal(b []byte) error {
|
func (m *SendOutputsResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -469,7 +730,7 @@ func (m *EstimateFeeRequest) Reset() { *m = EstimateFeeRequest{} }
|
|||||||
func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) }
|
func (m *EstimateFeeRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*EstimateFeeRequest) ProtoMessage() {}
|
func (*EstimateFeeRequest) ProtoMessage() {}
|
||||||
func (*EstimateFeeRequest) Descriptor() ([]byte, []int) {
|
func (*EstimateFeeRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{7}
|
return fileDescriptor_6cc6942ac78249e5, []int{13}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
|
func (m *EstimateFeeRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -511,7 +772,7 @@ func (m *EstimateFeeResponse) Reset() { *m = EstimateFeeResponse{} }
|
|||||||
func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) }
|
func (m *EstimateFeeResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*EstimateFeeResponse) ProtoMessage() {}
|
func (*EstimateFeeResponse) ProtoMessage() {}
|
||||||
func (*EstimateFeeResponse) Descriptor() ([]byte, []int) {
|
func (*EstimateFeeResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{8}
|
return fileDescriptor_6cc6942ac78249e5, []int{14}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
|
func (m *EstimateFeeResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -574,7 +835,7 @@ func (m *PendingSweep) Reset() { *m = PendingSweep{} }
|
|||||||
func (m *PendingSweep) String() string { return proto.CompactTextString(m) }
|
func (m *PendingSweep) String() string { return proto.CompactTextString(m) }
|
||||||
func (*PendingSweep) ProtoMessage() {}
|
func (*PendingSweep) ProtoMessage() {}
|
||||||
func (*PendingSweep) Descriptor() ([]byte, []int) {
|
func (*PendingSweep) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{9}
|
return fileDescriptor_6cc6942ac78249e5, []int{15}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PendingSweep) XXX_Unmarshal(b []byte) error {
|
func (m *PendingSweep) XXX_Unmarshal(b []byte) error {
|
||||||
@ -668,7 +929,7 @@ func (m *PendingSweepsRequest) Reset() { *m = PendingSweepsRequest{} }
|
|||||||
func (m *PendingSweepsRequest) String() string { return proto.CompactTextString(m) }
|
func (m *PendingSweepsRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*PendingSweepsRequest) ProtoMessage() {}
|
func (*PendingSweepsRequest) ProtoMessage() {}
|
||||||
func (*PendingSweepsRequest) Descriptor() ([]byte, []int) {
|
func (*PendingSweepsRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{10}
|
return fileDescriptor_6cc6942ac78249e5, []int{16}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PendingSweepsRequest) XXX_Unmarshal(b []byte) error {
|
func (m *PendingSweepsRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -702,7 +963,7 @@ func (m *PendingSweepsResponse) Reset() { *m = PendingSweepsResponse{} }
|
|||||||
func (m *PendingSweepsResponse) String() string { return proto.CompactTextString(m) }
|
func (m *PendingSweepsResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*PendingSweepsResponse) ProtoMessage() {}
|
func (*PendingSweepsResponse) ProtoMessage() {}
|
||||||
func (*PendingSweepsResponse) Descriptor() ([]byte, []int) {
|
func (*PendingSweepsResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{11}
|
return fileDescriptor_6cc6942ac78249e5, []int{17}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *PendingSweepsResponse) XXX_Unmarshal(b []byte) error {
|
func (m *PendingSweepsResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -752,7 +1013,7 @@ func (m *BumpFeeRequest) Reset() { *m = BumpFeeRequest{} }
|
|||||||
func (m *BumpFeeRequest) String() string { return proto.CompactTextString(m) }
|
func (m *BumpFeeRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*BumpFeeRequest) ProtoMessage() {}
|
func (*BumpFeeRequest) ProtoMessage() {}
|
||||||
func (*BumpFeeRequest) Descriptor() ([]byte, []int) {
|
func (*BumpFeeRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{12}
|
return fileDescriptor_6cc6942ac78249e5, []int{18}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *BumpFeeRequest) XXX_Unmarshal(b []byte) error {
|
func (m *BumpFeeRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -811,7 +1072,7 @@ func (m *BumpFeeResponse) Reset() { *m = BumpFeeResponse{} }
|
|||||||
func (m *BumpFeeResponse) String() string { return proto.CompactTextString(m) }
|
func (m *BumpFeeResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*BumpFeeResponse) ProtoMessage() {}
|
func (*BumpFeeResponse) ProtoMessage() {}
|
||||||
func (*BumpFeeResponse) Descriptor() ([]byte, []int) {
|
func (*BumpFeeResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{13}
|
return fileDescriptor_6cc6942ac78249e5, []int{19}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *BumpFeeResponse) XXX_Unmarshal(b []byte) error {
|
func (m *BumpFeeResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -846,7 +1107,7 @@ func (m *ListSweepsRequest) Reset() { *m = ListSweepsRequest{} }
|
|||||||
func (m *ListSweepsRequest) String() string { return proto.CompactTextString(m) }
|
func (m *ListSweepsRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ListSweepsRequest) ProtoMessage() {}
|
func (*ListSweepsRequest) ProtoMessage() {}
|
||||||
func (*ListSweepsRequest) Descriptor() ([]byte, []int) {
|
func (*ListSweepsRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{14}
|
return fileDescriptor_6cc6942ac78249e5, []int{20}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error {
|
func (m *ListSweepsRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -888,7 +1149,7 @@ func (m *ListSweepsResponse) Reset() { *m = ListSweepsResponse{} }
|
|||||||
func (m *ListSweepsResponse) String() string { return proto.CompactTextString(m) }
|
func (m *ListSweepsResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ListSweepsResponse) ProtoMessage() {}
|
func (*ListSweepsResponse) ProtoMessage() {}
|
||||||
func (*ListSweepsResponse) Descriptor() ([]byte, []int) {
|
func (*ListSweepsResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{15}
|
return fileDescriptor_6cc6942ac78249e5, []int{21}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error {
|
func (m *ListSweepsResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -969,7 +1230,7 @@ func (m *ListSweepsResponse_TransactionIDs) Reset() { *m = ListSweepsRes
|
|||||||
func (m *ListSweepsResponse_TransactionIDs) String() string { return proto.CompactTextString(m) }
|
func (m *ListSweepsResponse_TransactionIDs) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ListSweepsResponse_TransactionIDs) ProtoMessage() {}
|
func (*ListSweepsResponse_TransactionIDs) ProtoMessage() {}
|
||||||
func (*ListSweepsResponse_TransactionIDs) Descriptor() ([]byte, []int) {
|
func (*ListSweepsResponse_TransactionIDs) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{15, 0}
|
return fileDescriptor_6cc6942ac78249e5, []int{21, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error {
|
func (m *ListSweepsResponse_TransactionIDs) XXX_Unmarshal(b []byte) error {
|
||||||
@ -1013,7 +1274,7 @@ func (m *LabelTransactionRequest) Reset() { *m = LabelTransactionRequest
|
|||||||
func (m *LabelTransactionRequest) String() string { return proto.CompactTextString(m) }
|
func (m *LabelTransactionRequest) String() string { return proto.CompactTextString(m) }
|
||||||
func (*LabelTransactionRequest) ProtoMessage() {}
|
func (*LabelTransactionRequest) ProtoMessage() {}
|
||||||
func (*LabelTransactionRequest) Descriptor() ([]byte, []int) {
|
func (*LabelTransactionRequest) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{16}
|
return fileDescriptor_6cc6942ac78249e5, []int{22}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *LabelTransactionRequest) XXX_Unmarshal(b []byte) error {
|
func (m *LabelTransactionRequest) XXX_Unmarshal(b []byte) error {
|
||||||
@ -1065,7 +1326,7 @@ func (m *LabelTransactionResponse) Reset() { *m = LabelTransactionRespon
|
|||||||
func (m *LabelTransactionResponse) String() string { return proto.CompactTextString(m) }
|
func (m *LabelTransactionResponse) String() string { return proto.CompactTextString(m) }
|
||||||
func (*LabelTransactionResponse) ProtoMessage() {}
|
func (*LabelTransactionResponse) ProtoMessage() {}
|
||||||
func (*LabelTransactionResponse) Descriptor() ([]byte, []int) {
|
func (*LabelTransactionResponse) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_6cc6942ac78249e5, []int{17}
|
return fileDescriptor_6cc6942ac78249e5, []int{23}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *LabelTransactionResponse) XXX_Unmarshal(b []byte) error {
|
func (m *LabelTransactionResponse) XXX_Unmarshal(b []byte) error {
|
||||||
@ -1088,6 +1349,12 @@ var xxx_messageInfo_LabelTransactionResponse proto.InternalMessageInfo
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
|
proto.RegisterEnum("walletrpc.WitnessType", WitnessType_name, WitnessType_value)
|
||||||
|
proto.RegisterType((*ListUnspentRequest)(nil), "walletrpc.ListUnspentRequest")
|
||||||
|
proto.RegisterType((*ListUnspentResponse)(nil), "walletrpc.ListUnspentResponse")
|
||||||
|
proto.RegisterType((*LeaseOutputRequest)(nil), "walletrpc.LeaseOutputRequest")
|
||||||
|
proto.RegisterType((*LeaseOutputResponse)(nil), "walletrpc.LeaseOutputResponse")
|
||||||
|
proto.RegisterType((*ReleaseOutputRequest)(nil), "walletrpc.ReleaseOutputRequest")
|
||||||
|
proto.RegisterType((*ReleaseOutputResponse)(nil), "walletrpc.ReleaseOutputResponse")
|
||||||
proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq")
|
proto.RegisterType((*KeyReq)(nil), "walletrpc.KeyReq")
|
||||||
proto.RegisterType((*AddrRequest)(nil), "walletrpc.AddrRequest")
|
proto.RegisterType((*AddrRequest)(nil), "walletrpc.AddrRequest")
|
||||||
proto.RegisterType((*AddrResponse)(nil), "walletrpc.AddrResponse")
|
proto.RegisterType((*AddrResponse)(nil), "walletrpc.AddrResponse")
|
||||||
@ -1112,86 +1379,97 @@ func init() {
|
|||||||
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
|
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
|
||||||
|
|
||||||
var fileDescriptor_6cc6942ac78249e5 = []byte{
|
var fileDescriptor_6cc6942ac78249e5 = []byte{
|
||||||
// 1255 bytes of a gzipped FileDescriptorProto
|
// 1428 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6d, 0x6f, 0xda, 0x56,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xff, 0x6f, 0xda, 0xc8,
|
||||||
0x14, 0x6e, 0x42, 0x20, 0x70, 0x78, 0x09, 0x39, 0xe4, 0x85, 0xd2, 0x74, 0xc9, 0x5c, 0x6d, 0x8b,
|
0x12, 0x6f, 0xbe, 0x40, 0x60, 0x0c, 0x84, 0x2c, 0x24, 0xa1, 0x34, 0x6d, 0x52, 0x57, 0xef, 0xbd,
|
||||||
0xb6, 0x96, 0x68, 0xa9, 0x36, 0xad, 0x9d, 0x34, 0x2d, 0x01, 0x47, 0x44, 0x10, 0x9c, 0xd9, 0x6e,
|
0xe8, 0xbd, 0x96, 0xe8, 0xa5, 0xea, 0xa9, 0xed, 0x49, 0xa7, 0x4b, 0xc0, 0x11, 0x11, 0x04, 0x52,
|
||||||
0xa3, 0x6e, 0x1f, 0x2c, 0x83, 0x6f, 0x89, 0x15, 0x62, 0xbb, 0xd7, 0x97, 0x02, 0xdf, 0xf6, 0x2b,
|
0x43, 0x1a, 0xf5, 0xee, 0x07, 0xcb, 0xe0, 0x2d, 0xb1, 0x02, 0xb6, 0xbb, 0x5e, 0x8a, 0xf9, 0xed,
|
||||||
0x26, 0xf5, 0xef, 0xed, 0x97, 0x4c, 0xbe, 0x7e, 0xe1, 0x1a, 0x9a, 0x4a, 0xfb, 0x84, 0xef, 0x39,
|
0xfe, 0x8a, 0x93, 0xfa, 0x6f, 0xdd, 0x5f, 0x74, 0xda, 0x5d, 0x63, 0xd6, 0x40, 0x7a, 0x3a, 0xe9,
|
||||||
0xcf, 0x79, 0xce, 0x2b, 0xe7, 0x5e, 0x78, 0x3c, 0x35, 0xc7, 0x63, 0xc2, 0xa8, 0x37, 0x3c, 0x09,
|
0x7e, 0x8a, 0x77, 0x3e, 0x33, 0x9f, 0x99, 0x9d, 0x99, 0xcc, 0x0e, 0xf0, 0x78, 0x62, 0x0e, 0x87,
|
||||||
0xbf, 0xee, 0x6c, 0xd6, 0xf4, 0xa8, 0xcb, 0x5c, 0x2c, 0x24, 0xaa, 0x46, 0x81, 0x7a, 0xc3, 0x50,
|
0x98, 0x12, 0xaf, 0x7f, 0x22, 0xbe, 0xee, 0x6d, 0x5a, 0xf1, 0x88, 0x4b, 0x5d, 0x94, 0x8e, 0xa0,
|
||||||
0xda, 0xd8, 0xf1, 0xed, 0x91, 0x13, 0xc0, 0x83, 0x5f, 0x42, 0x43, 0xa9, 0xf4, 0x07, 0xe4, 0xba,
|
0x72, 0x9a, 0x78, 0x7d, 0x21, 0x2d, 0x17, 0x7d, 0x7b, 0xe0, 0x30, 0x75, 0xf6, 0x17, 0x13, 0x21,
|
||||||
0x64, 0xae, 0x92, 0x0f, 0x78, 0x0c, 0xd5, 0x3b, 0x32, 0x37, 0xde, 0xdb, 0xce, 0x88, 0x50, 0xc3,
|
0x55, 0x5b, 0x80, 0x9a, 0xb6, 0x4f, 0x6f, 0x1c, 0xdf, 0xc3, 0x0e, 0xd5, 0xf1, 0x97, 0x31, 0xf6,
|
||||||
0xa3, 0xb6, 0xc3, 0xea, 0x6b, 0x47, 0x6b, 0xc7, 0x59, 0xb5, 0x72, 0x47, 0xe6, 0x17, 0x5c, 0x7c,
|
0x29, 0x7a, 0x02, 0xe9, 0x91, 0xed, 0x18, 0x7d, 0xd7, 0xf9, 0xec, 0x97, 0xd6, 0x8e, 0xd6, 0x8e,
|
||||||
0x1d, 0x48, 0xf1, 0x29, 0x00, 0x47, 0x9a, 0xf7, 0xf6, 0x78, 0x5e, 0x5f, 0xe7, 0x98, 0x42, 0x80,
|
0x13, 0x7a, 0x6a, 0x64, 0x3b, 0x55, 0x76, 0xe6, 0xa0, 0x19, 0x84, 0xe0, 0x7a, 0x08, 0x9a, 0x01,
|
||||||
0xe1, 0x02, 0xa9, 0x0c, 0xc5, 0x33, 0xcb, 0xa2, 0x2a, 0xf9, 0x30, 0x21, 0x3e, 0x93, 0x24, 0x28,
|
0x07, 0xd5, 0xb7, 0x50, 0x88, 0xf1, 0xf9, 0x9e, 0xeb, 0xf8, 0x18, 0x3d, 0x87, 0xc4, 0x98, 0x06,
|
||||||
0x85, 0x47, 0xdf, 0x73, 0x1d, 0x9f, 0x20, 0xc2, 0x86, 0x69, 0x59, 0x94, 0x73, 0x17, 0x54, 0xfe,
|
0x2e, 0x23, 0xdb, 0x38, 0x56, 0x4e, 0x95, 0xca, 0x90, 0x85, 0x52, 0xb9, 0xa1, 0x81, 0xab, 0x0b,
|
||||||
0x2d, 0xbd, 0x86, 0xa2, 0x4e, 0x4d, 0xc7, 0x37, 0x87, 0xcc, 0x76, 0x1d, 0xdc, 0x85, 0x1c, 0x9b,
|
0x44, 0xfd, 0x00, 0xa8, 0x89, 0x4d, 0x1f, 0xb7, 0xc7, 0xd4, 0x1b, 0x47, 0x91, 0xe4, 0x60, 0xdd,
|
||||||
0x19, 0xb7, 0x64, 0xc6, 0x41, 0x25, 0x35, 0xcb, 0x66, 0x1d, 0x32, 0xc3, 0x1d, 0xc8, 0x8e, 0xcd,
|
0xb6, 0x78, 0x08, 0x19, 0x7d, 0xdd, 0xb6, 0xd0, 0xff, 0x20, 0xe5, 0x8e, 0xa9, 0xe7, 0xda, 0x0e,
|
||||||
0x01, 0x19, 0x73, 0x97, 0x05, 0x35, 0x3c, 0x48, 0x3f, 0xc3, 0xd6, 0xf5, 0x64, 0x30, 0xb6, 0xfd,
|
0xe5, 0xbe, 0x95, 0xd3, 0xed, 0x90, 0xab, 0x3d, 0xa6, 0xd7, 0x4c, 0xac, 0x47, 0x0a, 0xea, 0x1b,
|
||||||
0xdb, 0xc4, 0xc5, 0x33, 0x28, 0x7b, 0xa1, 0xc8, 0x20, 0x94, 0xba, 0xb1, 0xaf, 0x52, 0x24, 0x94,
|
0x28, 0xc4, 0x28, 0xc3, 0x60, 0x9e, 0x01, 0xe0, 0xc0, 0xb3, 0x89, 0x49, 0x6d, 0xd7, 0xe1, 0xdc,
|
||||||
0x03, 0x99, 0x44, 0x01, 0x35, 0xe2, 0x58, 0xca, 0x84, 0x79, 0x13, 0xe6, 0x47, 0xd1, 0xe2, 0x01,
|
0x9b, 0xba, 0x24, 0x51, 0x3b, 0x50, 0xd4, 0xf1, 0xf0, 0x1f, 0x8e, 0x65, 0x1f, 0x76, 0x17, 0x48,
|
||||||
0x80, 0x6f, 0x32, 0xc3, 0x23, 0xd4, 0xb8, 0x9b, 0x72, 0xbb, 0x8c, 0x9a, 0xf7, 0x4d, 0x76, 0x4d,
|
0x45, 0x34, 0xea, 0x07, 0x48, 0x36, 0xf0, 0x54, 0xc7, 0x5f, 0xd0, 0x31, 0xe4, 0xef, 0xf1, 0xd4,
|
||||||
0x68, 0x77, 0x8a, 0xc7, 0xb0, 0xe9, 0x86, 0xf8, 0xfa, 0xfa, 0x51, 0xe6, 0xb8, 0x78, 0x5a, 0x69,
|
0xf8, 0x6c, 0x3b, 0x03, 0x4c, 0x0c, 0x8f, 0x30, 0x5e, 0x91, 0xfc, 0xdc, 0x3d, 0x9e, 0x5e, 0x70,
|
||||||
0x46, 0x55, 0x6d, 0xea, 0x33, 0x65, 0xc2, 0xd4, 0x58, 0xbd, 0x88, 0x35, 0x23, 0xc6, 0xfa, 0x1c,
|
0xf1, 0x35, 0x93, 0xa2, 0xa7, 0x00, 0x5c, 0xd3, 0x1c, 0xd9, 0xc3, 0x69, 0x58, 0x83, 0x34, 0xd3,
|
||||||
0x6a, 0x29, 0x9f, 0x51, 0xbc, 0xbb, 0x90, 0xa3, 0xe6, 0xd4, 0x60, 0x49, 0xbe, 0xd4, 0x9c, 0xea,
|
0xe1, 0x02, 0x35, 0x0b, 0xca, 0x99, 0x65, 0x91, 0x30, 0x6e, 0x55, 0x85, 0x8c, 0x38, 0x86, 0xf7,
|
||||||
0x33, 0xe9, 0x27, 0x40, 0xd9, 0x67, 0xf6, 0xbd, 0xc9, 0xc8, 0x05, 0x21, 0x71, 0x84, 0x87, 0x50,
|
0x47, 0xb0, 0x69, 0x5a, 0x16, 0xe1, 0xdc, 0x69, 0x9d, 0x7f, 0xab, 0xef, 0x41, 0xe9, 0x12, 0xd3,
|
||||||
0x1c, 0xba, 0xce, 0x7b, 0x83, 0x99, 0x74, 0x44, 0xe2, 0x16, 0x41, 0x20, 0xd2, 0xb9, 0x44, 0x7a,
|
0xf1, 0xcd, 0x3e, 0x4b, 0x01, 0xda, 0x85, 0x24, 0x0d, 0x8c, 0x3b, 0x1c, 0x84, 0xd7, 0x4d, 0xd0,
|
||||||
0x09, 0xb5, 0x94, 0x59, 0xe4, 0xe4, 0x8b, 0x99, 0x49, 0x9f, 0x32, 0x50, 0xba, 0x26, 0x8e, 0x65,
|
0xa0, 0x8e, 0x03, 0x54, 0x84, 0xc4, 0xd0, 0xec, 0xe1, 0x21, 0x77, 0x99, 0xd6, 0xc5, 0x41, 0xfd,
|
||||||
0x3b, 0x23, 0x6d, 0x4a, 0x88, 0x87, 0x3f, 0x40, 0x3e, 0xc8, 0xc5, 0x8d, 0xc7, 0xa0, 0x78, 0xba,
|
0x01, 0xb6, 0xaf, 0xc7, 0xbd, 0xa1, 0xed, 0xdf, 0x45, 0x2e, 0x5e, 0x40, 0xd6, 0x13, 0x22, 0x03,
|
||||||
0xd5, 0x1c, 0xf3, 0x4c, 0x95, 0x09, 0xbb, 0x0e, 0xc4, 0x6a, 0x02, 0xc0, 0x57, 0x50, 0x9a, 0xda,
|
0x13, 0xe2, 0xce, 0x7c, 0x65, 0x42, 0xa1, 0xc6, 0x64, 0x2a, 0x01, 0xd4, 0xc1, 0x8e, 0x25, 0xf2,
|
||||||
0xcc, 0x21, 0xbe, 0x6f, 0xb0, 0xb9, 0x47, 0x78, 0x83, 0x2a, 0xa7, 0x7b, 0xcd, 0x64, 0x10, 0x9b,
|
0xe1, 0xcf, 0xb2, 0x7c, 0x00, 0xe0, 0x9b, 0xd4, 0xf0, 0x30, 0x31, 0xee, 0x27, 0xdc, 0x6e, 0x43,
|
||||||
0x37, 0xa1, 0x5a, 0x9f, 0x7b, 0x44, 0x2d, 0x4e, 0x17, 0x87, 0x60, 0x98, 0xcc, 0x7b, 0x77, 0xe2,
|
0x4f, 0xf9, 0x26, 0xbd, 0xc6, 0xa4, 0x31, 0x41, 0xc7, 0xb0, 0xe5, 0x0a, 0xfd, 0xd2, 0x3a, 0x6f,
|
||||||
0x30, 0xc3, 0x37, 0x19, 0xaf, 0x56, 0x59, 0x2d, 0x84, 0x12, 0xcd, 0x64, 0x78, 0x04, 0xa5, 0x38,
|
0xa5, 0x5c, 0x25, 0xec, 0xeb, 0x4a, 0x37, 0x68, 0x8f, 0xa9, 0x3e, 0x83, 0xe7, 0xb1, 0x6e, 0xc8,
|
||||||
0xea, 0xc1, 0x9c, 0x91, 0xfa, 0x06, 0x07, 0x40, 0x18, 0xf7, 0xf9, 0x9c, 0x11, 0x7c, 0x01, 0x38,
|
0xb1, 0xbe, 0x84, 0x42, 0xcc, 0x67, 0x18, 0xef, 0x2e, 0x24, 0x89, 0x39, 0x31, 0x68, 0x74, 0x5f,
|
||||||
0xa0, 0xae, 0x69, 0x0d, 0x4d, 0x9f, 0x19, 0x26, 0x63, 0xe4, 0xde, 0x63, 0x7e, 0x3d, 0xcb, 0x71,
|
0x62, 0x4e, 0xba, 0x81, 0xfa, 0x06, 0x90, 0xe6, 0x53, 0x7b, 0x64, 0x52, 0x7c, 0x81, 0xf1, 0x2c,
|
||||||
0xdb, 0x89, 0xe6, 0x2c, 0x52, 0xe0, 0x29, 0xec, 0x3a, 0x64, 0xc6, 0x8c, 0x85, 0xcd, 0x2d, 0xb1,
|
0xc2, 0x43, 0x50, 0x58, 0xf3, 0x1b, 0xd4, 0x24, 0x03, 0x3c, 0x2b, 0x11, 0x30, 0x51, 0x97, 0x4b,
|
||||||
0x47, 0xb7, 0xac, 0x9e, 0xe3, 0x16, 0xb5, 0x40, 0x79, 0x1e, 0xeb, 0x3a, 0x5c, 0x15, 0xd8, 0xd0,
|
0xd4, 0xd7, 0x50, 0x88, 0x99, 0x85, 0x4e, 0xbe, 0x7b, 0x33, 0xf5, 0xdb, 0x06, 0x64, 0xae, 0xb1,
|
||||||
0xb0, 0xfa, 0xc4, 0x32, 0xc4, 0xe2, 0xe7, 0x43, 0x9b, 0x44, 0xd9, 0x4a, 0xba, 0x80, 0x2f, 0x61,
|
0x63, 0xd9, 0xce, 0xa0, 0x33, 0xc1, 0xd8, 0x8b, 0xb5, 0xd7, 0xda, 0x5f, 0xb4, 0x17, 0x7a, 0x07,
|
||||||
0x6f, 0x61, 0x93, 0x4a, 0xa1, 0xb0, 0x64, 0xa4, 0x2d, 0x72, 0xd9, 0x81, 0xec, 0x7b, 0x97, 0x0e,
|
0x99, 0x89, 0x4d, 0x1d, 0xec, 0xfb, 0x06, 0x9d, 0x7a, 0x98, 0x17, 0x28, 0x77, 0xba, 0x57, 0x89,
|
||||||
0x49, 0x7d, 0xf3, 0x68, 0xed, 0x38, 0xaf, 0x86, 0x07, 0x69, 0x0f, 0x76, 0xc4, 0xd6, 0xc4, 0xb3,
|
0x46, 0x41, 0xe5, 0x56, 0xc0, 0xdd, 0xa9, 0x87, 0x75, 0x65, 0x32, 0x3f, 0xb0, 0x66, 0x32, 0x47,
|
||||||
0x2a, 0xdd, 0xc0, 0xee, 0x92, 0x3c, 0x6a, 0xf5, 0x6f, 0x50, 0xf1, 0x42, 0x85, 0xe1, 0x73, 0x4d,
|
0xee, 0xd8, 0xa1, 0x86, 0x6f, 0x52, 0x9e, 0xad, 0xac, 0x9e, 0x16, 0x92, 0x8e, 0x49, 0xd1, 0x11,
|
||||||
0x7d, 0x8d, 0x4f, 0xeb, 0xbe, 0xd0, 0x10, 0xd1, 0x52, 0x2d, 0x7b, 0x22, 0x8f, 0xf4, 0xcf, 0x1a,
|
0x64, 0x66, 0x51, 0xf7, 0xa6, 0x14, 0x97, 0x36, 0xb9, 0x02, 0x88, 0xb8, 0xcf, 0xa7, 0x14, 0xa3,
|
||||||
0x54, 0xce, 0x27, 0xf7, 0x9e, 0x30, 0x75, 0xff, 0x6b, 0x1c, 0x0e, 0xa1, 0x18, 0x16, 0x88, 0x17,
|
0x57, 0x80, 0x7a, 0xc4, 0x35, 0xad, 0xbe, 0xe9, 0x53, 0xc3, 0xa4, 0x14, 0x8f, 0x3c, 0xea, 0x97,
|
||||||
0x8b, 0x4f, 0x43, 0x59, 0x85, 0x50, 0x14, 0x94, 0x68, 0xa5, 0xab, 0x99, 0x95, 0xae, 0x26, 0x95,
|
0x12, 0x5c, 0x6f, 0x27, 0x42, 0xce, 0x42, 0x00, 0x9d, 0xc2, 0xae, 0x83, 0x03, 0x6a, 0xcc, 0x6d,
|
||||||
0xd8, 0x10, 0x2b, 0xb1, 0x0d, 0x5b, 0x49, 0x5c, 0x61, 0xae, 0xd2, 0x0b, 0xd8, 0xee, 0xd9, 0x3e,
|
0xee, 0xb0, 0x3d, 0xb8, 0xa3, 0xa5, 0x24, 0xb7, 0x28, 0x30, 0xf0, 0x7c, 0x86, 0xd5, 0x39, 0xc4,
|
||||||
0x4b, 0x55, 0x06, 0xeb, 0xb0, 0xf9, 0x91, 0xd0, 0x81, 0xeb, 0x13, 0x1e, 0x6c, 0x5e, 0x8d, 0x8f,
|
0x6c, 0x88, 0xc8, 0x3e, 0xb6, 0x0c, 0x39, 0xf9, 0x29, 0x61, 0x13, 0x81, 0xd5, 0xa8, 0x0a, 0xe8,
|
||||||
0xd2, 0xdf, 0xeb, 0x80, 0x22, 0x3e, 0xaa, 0x58, 0x0f, 0x6a, 0x6c, 0xb1, 0x80, 0x0c, 0x8b, 0x30,
|
0x35, 0xec, 0xcd, 0x6d, 0x62, 0x57, 0x48, 0x2f, 0x18, 0x75, 0xe6, 0x77, 0x29, 0x42, 0xe2, 0xb3,
|
||||||
0xd3, 0x1e, 0xfb, 0x51, 0xa6, 0x8f, 0xa3, 0x4c, 0x85, 0x15, 0xd5, 0x0e, 0x01, 0x9d, 0x47, 0x2a,
|
0x4b, 0xfa, 0xb8, 0xb4, 0x75, 0xb4, 0x76, 0x9c, 0xd2, 0xc5, 0x41, 0xdd, 0x83, 0xa2, 0x5c, 0x9a,
|
||||||
0xb2, 0x15, 0x29, 0xde, 0xc0, 0x96, 0xc8, 0x66, 0x5b, 0x3e, 0xaf, 0x41, 0xf1, 0xf4, 0xb9, 0xd0,
|
0x59, 0xaf, 0xaa, 0xb7, 0xb0, 0xbb, 0x20, 0x0f, 0x4b, 0xfd, 0x13, 0xe4, 0x3c, 0x01, 0x18, 0x3e,
|
||||||
0x80, 0xd5, 0x28, 0x44, 0x07, 0x97, 0xed, 0x80, 0xbc, 0x22, 0xd0, 0x5c, 0x5a, 0x7e, 0xe3, 0x15,
|
0x47, 0xc2, 0xc1, 0xb7, 0x2f, 0x15, 0x44, 0xb6, 0xd4, 0xb3, 0x9e, 0xcc, 0xa3, 0xfe, 0xbe, 0x06,
|
||||||
0x54, 0xd2, 0x18, 0xfc, 0x6e, 0xd5, 0x55, 0xd0, 0xeb, 0xc2, 0xb2, 0xe9, 0x79, 0x1e, 0x72, 0xe1,
|
0xb9, 0xf3, 0xf1, 0xc8, 0x93, 0xba, 0xee, 0x6f, 0xb5, 0xc3, 0x21, 0x28, 0x22, 0x41, 0x3c, 0x59,
|
||||||
0x2c, 0x48, 0x26, 0xec, 0xf7, 0x82, 0x6d, 0x24, 0x30, 0xc5, 0x75, 0x43, 0xd8, 0x60, 0x33, 0xdb,
|
0xbc, 0x1b, 0xb2, 0x3a, 0x08, 0x11, 0x4b, 0xd1, 0x52, 0x55, 0x37, 0x96, 0xaa, 0x1a, 0x65, 0x62,
|
||||||
0x8a, 0xd6, 0x10, 0xff, 0xfe, 0xfc, 0xd6, 0xc5, 0x03, 0x28, 0xb8, 0x1f, 0x09, 0x9d, 0x52, 0x3b,
|
0x53, 0xce, 0xc4, 0x0e, 0x6c, 0x47, 0x71, 0x85, 0x03, 0xec, 0x15, 0xec, 0xb0, 0x91, 0x1f, 0xcb,
|
||||||
0x6a, 0x5f, 0x5e, 0x5d, 0x08, 0xa4, 0x06, 0xd4, 0x57, 0x5d, 0x84, 0x49, 0x7e, 0xff, 0x29, 0x03,
|
0x0c, 0x2a, 0xc1, 0xd6, 0x57, 0x4c, 0x7a, 0xae, 0x8f, 0x79, 0xb0, 0x29, 0x7d, 0x76, 0x54, 0x7f,
|
||||||
0x45, 0x61, 0x1b, 0x60, 0x0d, 0xb6, 0xde, 0xf4, 0xbb, 0x7d, 0xe5, 0xa6, 0x6f, 0xdc, 0x5c, 0xea,
|
0x5b, 0x17, 0x4f, 0xce, 0x42, 0xc6, 0x9a, 0x50, 0xa0, 0xf3, 0x01, 0x64, 0x58, 0x98, 0x9a, 0xf6,
|
||||||
0x7d, 0x59, 0xd3, 0xaa, 0x8f, 0xb0, 0x0e, 0x3b, 0x2d, 0xe5, 0xea, 0xea, 0x52, 0xbf, 0x92, 0xfb,
|
0xd0, 0x0f, 0x6f, 0xfa, 0x38, 0xbc, 0xa9, 0x34, 0xa2, 0x6a, 0x42, 0xa1, 0xfe, 0x48, 0x47, 0x74,
|
||||||
0xba, 0xa1, 0x5f, 0x5e, 0xc9, 0x46, 0x4f, 0x69, 0x75, 0xab, 0x6b, 0xb8, 0x0f, 0x35, 0x41, 0xd3,
|
0x49, 0x8a, 0x6e, 0x61, 0x5b, 0x66, 0xb3, 0x2d, 0x3f, 0x9c, 0xd0, 0x2f, 0xa5, 0x02, 0x2c, 0x47,
|
||||||
0x57, 0x8c, 0xb6, 0xdc, 0x3b, 0x7b, 0x57, 0x5d, 0xc7, 0x5d, 0xd8, 0x16, 0x14, 0xaa, 0xfc, 0x56,
|
0x21, 0x3b, 0xb8, 0xac, 0x31, 0xf2, 0x9c, 0x44, 0x73, 0x69, 0xf9, 0xe5, 0x77, 0x90, 0x8b, 0xeb,
|
||||||
0xe9, 0xca, 0xd5, 0x4c, 0x80, 0xef, 0xe8, 0xbd, 0x96, 0xa1, 0x5c, 0x5c, 0xc8, 0xaa, 0xdc, 0x8e,
|
0xa0, 0xff, 0x2c, 0xbb, 0x62, 0xb5, 0x4e, 0x2f, 0x9a, 0x9e, 0xa7, 0x20, 0x29, 0x7a, 0x41, 0x35,
|
||||||
0x15, 0x1b, 0x81, 0x0b, 0xae, 0x38, 0x6b, 0xb5, 0xe4, 0x6b, 0x7d, 0xa1, 0xc9, 0xe2, 0x37, 0xf0,
|
0x61, 0xbf, 0xc9, 0xa6, 0x91, 0xc4, 0x34, 0xcb, 0x1b, 0x82, 0x4d, 0x1a, 0x44, 0xaf, 0x0c, 0xff,
|
||||||
0x75, 0xca, 0x24, 0x70, 0xaf, 0xbc, 0xd1, 0x0d, 0x4d, 0x6e, 0x29, 0xfd, 0xb6, 0xd1, 0x93, 0xdf,
|
0x5e, 0x3d, 0x75, 0xd1, 0x01, 0xa4, 0xdd, 0xaf, 0x98, 0x4c, 0x88, 0x1d, 0x96, 0x2f, 0xa5, 0xcf,
|
||||||
0xca, 0xbd, 0x6a, 0x0e, 0xbf, 0x05, 0x29, 0x4d, 0xa0, 0xbd, 0x69, 0xb5, 0x64, 0x4d, 0x4b, 0xe3,
|
0x05, 0x6a, 0x19, 0x4a, 0xcb, 0x2e, 0xc4, 0x25, 0xff, 0xfb, 0x6d, 0x03, 0x14, 0x69, 0x1a, 0xa0,
|
||||||
0x36, 0xf1, 0x10, 0x9e, 0x2c, 0x45, 0x70, 0xa5, 0xe8, 0x72, 0xcc, 0x5a, 0xcd, 0xe3, 0x11, 0x1c,
|
0x02, 0x6c, 0xdf, 0xb4, 0x1a, 0xad, 0xf6, 0x6d, 0xcb, 0xb8, 0xbd, 0xec, 0xb6, 0xb4, 0x4e, 0x27,
|
||||||
0x2c, 0x47, 0xc2, 0x11, 0x11, 0x5f, 0xb5, 0x80, 0x07, 0x50, 0xe7, 0x08, 0x91, 0x39, 0x8e, 0x17,
|
0xff, 0x08, 0x95, 0xa0, 0x58, 0x6d, 0x5f, 0x5d, 0x5d, 0x76, 0xaf, 0xb4, 0x56, 0xd7, 0xe8, 0x5e,
|
||||||
0x70, 0x07, 0xaa, 0x51, 0xe5, 0x8c, 0xae, 0xfc, 0xce, 0xe8, 0x9c, 0x69, 0x9d, 0x6a, 0x11, 0x9f,
|
0x5e, 0x69, 0x46, 0xb3, 0x5d, 0x6d, 0xe4, 0xd7, 0xd0, 0x3e, 0x14, 0x24, 0xa4, 0xd5, 0x36, 0x6a,
|
||||||
0xc0, 0x7e, 0x5f, 0xd6, 0x02, 0xba, 0x15, 0x65, 0x69, 0xa9, 0x58, 0x67, 0xfd, 0x56, 0x47, 0x51,
|
0x5a, 0xf3, 0xec, 0x53, 0x7e, 0x1d, 0xed, 0xc2, 0x8e, 0x04, 0xe8, 0xda, 0xc7, 0x76, 0x43, 0xcb,
|
||||||
0xab, 0xe5, 0xd3, 0x7f, 0xb3, 0x50, 0xb8, 0xe1, 0x13, 0xda, 0xb5, 0x19, 0xbe, 0x86, 0x72, 0x9b,
|
0x6f, 0x30, 0xfd, 0x7a, 0xb7, 0x59, 0x35, 0xda, 0x17, 0x17, 0x9a, 0xae, 0xd5, 0x66, 0xc0, 0x26,
|
||||||
0x50, 0xfb, 0x23, 0xe9, 0x93, 0x19, 0xeb, 0x92, 0x39, 0x6e, 0x0b, 0xe3, 0x1b, 0xbe, 0x1a, 0x1a,
|
0x73, 0xc1, 0x81, 0xb3, 0x6a, 0x55, 0xbb, 0xee, 0xce, 0x91, 0x04, 0xfa, 0x17, 0x3c, 0x8f, 0x99,
|
||||||
0x7b, 0xc9, 0x05, 0xd8, 0x25, 0xf3, 0x36, 0xf1, 0x87, 0xd4, 0xf6, 0x98, 0x4b, 0xf1, 0x17, 0x28,
|
0x30, 0xf7, 0xed, 0x9b, 0xae, 0xd1, 0xd1, 0xaa, 0xed, 0x56, 0xcd, 0x68, 0x6a, 0x1f, 0xb5, 0x66,
|
||||||
0x84, 0xb6, 0x81, 0x5d, 0x4d, 0x04, 0xf5, 0xdc, 0xa1, 0xc9, 0x5c, 0xfa, 0xa0, 0xe5, 0xaf, 0x90,
|
0x3e, 0x89, 0xfe, 0x0d, 0x6a, 0x9c, 0xa0, 0x73, 0x53, 0xad, 0x6a, 0x9d, 0x4e, 0x5c, 0x6f, 0x0b,
|
||||||
0x0f, 0xfc, 0x05, 0x6f, 0x06, 0x14, 0x6f, 0x10, 0xe1, 0x4d, 0xd1, 0xd8, 0x5f, 0x91, 0x47, 0xff,
|
0x1d, 0xc2, 0x93, 0x85, 0x08, 0xae, 0xda, 0x5d, 0x6d, 0xc6, 0x9a, 0x4f, 0xa1, 0x23, 0x38, 0x58,
|
||||||
0xe3, 0x0e, 0x60, 0xf4, 0x18, 0x10, 0xdf, 0x13, 0x22, 0x8d, 0x20, 0x6f, 0x34, 0xc4, 0x7d, 0xb8,
|
0x8c, 0x84, 0x6b, 0x84, 0x7c, 0xf9, 0x34, 0x3a, 0x80, 0x12, 0xd7, 0x90, 0x99, 0x67, 0xf1, 0x02,
|
||||||
0xf4, 0x86, 0xe8, 0x41, 0x51, 0xb8, 0xaa, 0xf1, 0xa9, 0x00, 0x5d, 0x7d, 0x36, 0x34, 0xbe, 0x7a,
|
0x2a, 0x42, 0x3e, 0xcc, 0x9c, 0xd1, 0xd0, 0x3e, 0x19, 0xf5, 0xb3, 0x4e, 0x3d, 0xaf, 0xa0, 0x27,
|
||||||
0x48, 0xbd, 0x60, 0x13, 0xee, 0xe4, 0x14, 0xdb, 0xea, 0x15, 0x9f, 0x62, 0xfb, 0xdc, 0x55, 0xae,
|
0xb0, 0xdf, 0xd2, 0x3a, 0x8c, 0x6e, 0x09, 0xcc, 0x2c, 0x24, 0xeb, 0xac, 0x55, 0xad, 0xb7, 0xf5,
|
||||||
0x42, 0x39, 0xb5, 0xf8, 0xf1, 0xf0, 0x81, 0xc5, 0x9e, 0xc4, 0x77, 0xf4, 0x30, 0x20, 0xe2, 0xfc,
|
0x7c, 0xf6, 0xf4, 0x8f, 0x2d, 0x48, 0xdf, 0xf2, 0x0e, 0x6d, 0xd8, 0x14, 0x35, 0x41, 0x91, 0xb6,
|
||||||
0x1d, 0x36, 0xa3, 0xd5, 0x8a, 0x8f, 0x05, 0x70, 0xfa, 0x1a, 0x48, 0x55, 0x6c, 0x69, 0x13, 0xe3,
|
0x29, 0xf4, 0x74, 0xa1, 0x79, 0xe3, 0x5b, 0x5b, 0xf9, 0xd9, 0x43, 0x70, 0xf4, 0x2f, 0xa6, 0x48,
|
||||||
0x25, 0xc0, 0x62, 0xa7, 0xe1, 0xc1, 0x03, 0xab, 0x2e, 0xe4, 0x79, 0xfa, 0xc5, 0x45, 0x88, 0x7f,
|
0xeb, 0x50, 0x9c, 0x6d, 0x69, 0xdb, 0x89, 0xb3, 0xad, 0xd8, 0xa2, 0x74, 0xc8, 0xc6, 0x16, 0x1a,
|
||||||
0x41, 0x75, 0x79, 0x7f, 0xa0, 0x24, 0x9a, 0x7c, 0x7e, 0x7f, 0x35, 0x9e, 0x7d, 0x11, 0x13, 0x92,
|
0x74, 0x28, 0x19, 0xac, 0xda, 0x9f, 0xca, 0x47, 0x0f, 0x2b, 0x84, 0x9c, 0xef, 0x21, 0x5b, 0xc3,
|
||||||
0x9f, 0xff, 0xf8, 0xe7, 0xc9, 0xc8, 0x66, 0xb7, 0x93, 0x41, 0x73, 0xe8, 0xde, 0x9f, 0x8c, 0x83,
|
0xc4, 0xfe, 0x8a, 0x5b, 0x38, 0xa0, 0x0d, 0x3c, 0x45, 0x3b, 0x92, 0x89, 0xd8, 0x92, 0xca, 0x7b,
|
||||||
0x1b, 0xde, 0xb1, 0x9d, 0x91, 0x43, 0xd8, 0xd4, 0xa5, 0x77, 0x27, 0x63, 0xc7, 0x3a, 0xe1, 0xfb,
|
0xd1, 0x83, 0xdf, 0xc0, 0xd3, 0x1a, 0xf6, 0xfb, 0xc4, 0xf6, 0xa8, 0x4b, 0xd0, 0x5b, 0x48, 0x0b,
|
||||||
0xfe, 0x24, 0xe1, 0x1a, 0xe4, 0xf8, 0x63, 0xf9, 0xe5, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb5,
|
0x5b, 0x66, 0x57, 0x90, 0x95, 0x9a, 0x6e, 0xdf, 0xa4, 0x2e, 0x79, 0xd0, 0xf2, 0x47, 0x48, 0x31,
|
||||||
0xeb, 0x99, 0xb8, 0x75, 0x0b, 0x00, 0x00,
|
0x7f, 0x6c, 0x47, 0x42, 0xf2, 0x8b, 0x29, 0xed, 0x50, 0xe5, 0xfd, 0x25, 0x79, 0x18, 0x72, 0x1d,
|
||||||
|
0x50, 0xb8, 0xfc, 0xc8, 0xfb, 0x93, 0x4c, 0x23, 0xc9, 0xcb, 0x65, 0x79, 0xfe, 0x2f, 0xec, 0x4c,
|
||||||
|
0x4d, 0x50, 0xa4, 0xd5, 0x24, 0x56, 0x9e, 0xe5, 0x35, 0x29, 0x56, 0x9e, 0x55, 0x1b, 0x4d, 0x13,
|
||||||
|
0x14, 0x69, 0x07, 0x89, 0xb1, 0x2d, 0xaf, 0x34, 0x31, 0xb6, 0x55, 0xab, 0x8b, 0x0e, 0xd9, 0xd8,
|
||||||
|
0x43, 0x17, 0x2b, 0xf6, 0xaa, 0xa7, 0x31, 0x56, 0xec, 0xd5, 0x6f, 0xe4, 0xcf, 0xb0, 0x15, 0x3e,
|
||||||
|
0x25, 0xe8, 0xb1, 0xa4, 0x1c, 0x7f, 0xf6, 0x62, 0x19, 0x5b, 0x78, 0x79, 0xd0, 0x25, 0xc0, 0x7c,
|
||||||
|
0x86, 0xa3, 0x83, 0x07, 0x46, 0xbb, 0xe0, 0x79, 0xfa, 0xdd, 0xc1, 0x8f, 0x7e, 0x85, 0xfc, 0xe2,
|
||||||
|
0xbc, 0x44, 0xaa, 0x6c, 0xb2, 0x7a, 0x5e, 0x97, 0x5f, 0x7c, 0x57, 0x47, 0x90, 0x9f, 0xff, 0xff,
|
||||||
|
0x97, 0x93, 0x81, 0x4d, 0xef, 0xc6, 0xbd, 0x4a, 0xdf, 0x1d, 0x9d, 0x0c, 0xd9, 0x46, 0xe3, 0xd8,
|
||||||
|
0xce, 0xc0, 0xc1, 0x74, 0xe2, 0x92, 0xfb, 0x93, 0xa1, 0x63, 0x9d, 0xf0, 0xf7, 0xed, 0x24, 0xe2,
|
||||||
|
0xea, 0x25, 0xf9, 0xcf, 0xb3, 0xd7, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0x01, 0xb2, 0xa4, 0x25,
|
||||||
|
0xe7, 0x0d, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
@ -1206,6 +1484,22 @@ const _ = grpc.SupportPackageIsVersion4
|
|||||||
//
|
//
|
||||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||||
type WalletKitClient interface {
|
type WalletKitClient interface {
|
||||||
|
//
|
||||||
|
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
|
//number of confirmations between the specified minimum and maximum.
|
||||||
|
ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error)
|
||||||
|
//
|
||||||
|
//LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
//available for any future coin selection attempts. The absolute time of the
|
||||||
|
//lock's expiration is returned. The expiration of the lock can be extended by
|
||||||
|
//successive invocations of this RPC. Outputs can be unlocked before their
|
||||||
|
//expiration through `ReleaseOutput`.
|
||||||
|
LeaseOutput(ctx context.Context, in *LeaseOutputRequest, opts ...grpc.CallOption) (*LeaseOutputResponse, error)
|
||||||
|
//
|
||||||
|
//ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
//selection if it remains unspent. The ID should match the one used to
|
||||||
|
//originally lock the output.
|
||||||
|
ReleaseOutput(ctx context.Context, in *ReleaseOutputRequest, opts ...grpc.CallOption) (*ReleaseOutputResponse, error)
|
||||||
//
|
//
|
||||||
//DeriveNextKey attempts to derive the *next* key within the key family
|
//DeriveNextKey attempts to derive the *next* key within the key family
|
||||||
//(account in BIP43) specified. This method should return the next external
|
//(account in BIP43) specified. This method should return the next external
|
||||||
@ -1292,6 +1586,33 @@ func NewWalletKitClient(cc *grpc.ClientConn) WalletKitClient {
|
|||||||
return &walletKitClient{cc}
|
return &walletKitClient{cc}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *walletKitClient) ListUnspent(ctx context.Context, in *ListUnspentRequest, opts ...grpc.CallOption) (*ListUnspentResponse, error) {
|
||||||
|
out := new(ListUnspentResponse)
|
||||||
|
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ListUnspent", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *walletKitClient) LeaseOutput(ctx context.Context, in *LeaseOutputRequest, opts ...grpc.CallOption) (*LeaseOutputResponse, error) {
|
||||||
|
out := new(LeaseOutputResponse)
|
||||||
|
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/LeaseOutput", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *walletKitClient) ReleaseOutput(ctx context.Context, in *ReleaseOutputRequest, opts ...grpc.CallOption) (*ReleaseOutputResponse, error) {
|
||||||
|
out := new(ReleaseOutputResponse)
|
||||||
|
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/ReleaseOutput", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *walletKitClient) DeriveNextKey(ctx context.Context, in *KeyReq, opts ...grpc.CallOption) (*signrpc.KeyDescriptor, error) {
|
func (c *walletKitClient) DeriveNextKey(ctx context.Context, in *KeyReq, opts ...grpc.CallOption) (*signrpc.KeyDescriptor, error) {
|
||||||
out := new(signrpc.KeyDescriptor)
|
out := new(signrpc.KeyDescriptor)
|
||||||
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/DeriveNextKey", in, out, opts...)
|
err := c.cc.Invoke(ctx, "/walletrpc.WalletKit/DeriveNextKey", in, out, opts...)
|
||||||
@ -1384,6 +1705,22 @@ func (c *walletKitClient) LabelTransaction(ctx context.Context, in *LabelTransac
|
|||||||
|
|
||||||
// WalletKitServer is the server API for WalletKit service.
|
// WalletKitServer is the server API for WalletKit service.
|
||||||
type WalletKitServer interface {
|
type WalletKitServer interface {
|
||||||
|
//
|
||||||
|
//ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
|
//number of confirmations between the specified minimum and maximum.
|
||||||
|
ListUnspent(context.Context, *ListUnspentRequest) (*ListUnspentResponse, error)
|
||||||
|
//
|
||||||
|
//LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
//available for any future coin selection attempts. The absolute time of the
|
||||||
|
//lock's expiration is returned. The expiration of the lock can be extended by
|
||||||
|
//successive invocations of this RPC. Outputs can be unlocked before their
|
||||||
|
//expiration through `ReleaseOutput`.
|
||||||
|
LeaseOutput(context.Context, *LeaseOutputRequest) (*LeaseOutputResponse, error)
|
||||||
|
//
|
||||||
|
//ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
//selection if it remains unspent. The ID should match the one used to
|
||||||
|
//originally lock the output.
|
||||||
|
ReleaseOutput(context.Context, *ReleaseOutputRequest) (*ReleaseOutputResponse, error)
|
||||||
//
|
//
|
||||||
//DeriveNextKey attempts to derive the *next* key within the key family
|
//DeriveNextKey attempts to derive the *next* key within the key family
|
||||||
//(account in BIP43) specified. This method should return the next external
|
//(account in BIP43) specified. This method should return the next external
|
||||||
@ -1466,6 +1803,60 @@ func RegisterWalletKitServer(s *grpc.Server, srv WalletKitServer) {
|
|||||||
s.RegisterService(&_WalletKit_serviceDesc, srv)
|
s.RegisterService(&_WalletKit_serviceDesc, srv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _WalletKit_ListUnspent_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(ListUnspentRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(WalletKitServer).ListUnspent(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/walletrpc.WalletKit/ListUnspent",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(WalletKitServer).ListUnspent(ctx, req.(*ListUnspentRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _WalletKit_LeaseOutput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(LeaseOutputRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(WalletKitServer).LeaseOutput(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/walletrpc.WalletKit/LeaseOutput",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(WalletKitServer).LeaseOutput(ctx, req.(*LeaseOutputRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _WalletKit_ReleaseOutput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(ReleaseOutputRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(WalletKitServer).ReleaseOutput(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/walletrpc.WalletKit/ReleaseOutput",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(WalletKitServer).ReleaseOutput(ctx, req.(*ReleaseOutputRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
func _WalletKit_DeriveNextKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _WalletKit_DeriveNextKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(KeyReq)
|
in := new(KeyReq)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
@ -1650,6 +2041,18 @@ var _WalletKit_serviceDesc = grpc.ServiceDesc{
|
|||||||
ServiceName: "walletrpc.WalletKit",
|
ServiceName: "walletrpc.WalletKit",
|
||||||
HandlerType: (*WalletKitServer)(nil),
|
HandlerType: (*WalletKitServer)(nil),
|
||||||
Methods: []grpc.MethodDesc{
|
Methods: []grpc.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "ListUnspent",
|
||||||
|
Handler: _WalletKit_ListUnspent_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "LeaseOutput",
|
||||||
|
Handler: _WalletKit_LeaseOutput_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "ReleaseOutput",
|
||||||
|
Handler: _WalletKit_ReleaseOutput_Handler,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
MethodName: "DeriveNextKey",
|
MethodName: "DeriveNextKey",
|
||||||
Handler: _WalletKit_DeriveNextKey_Handler,
|
Handler: _WalletKit_DeriveNextKey_Handler,
|
||||||
|
@ -10,6 +10,28 @@ option go_package = "github.com/lightningnetwork/lnd/lnrpc/walletrpc";
|
|||||||
// WalletKit is a service that gives access to the core functionalities of the
|
// WalletKit is a service that gives access to the core functionalities of the
|
||||||
// daemon's wallet.
|
// daemon's wallet.
|
||||||
service WalletKit {
|
service WalletKit {
|
||||||
|
/*
|
||||||
|
ListUnspent returns a list of all utxos spendable by the wallet with a
|
||||||
|
number of confirmations between the specified minimum and maximum.
|
||||||
|
*/
|
||||||
|
rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse);
|
||||||
|
|
||||||
|
/*
|
||||||
|
LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
available for any future coin selection attempts. The absolute time of the
|
||||||
|
lock's expiration is returned. The expiration of the lock can be extended by
|
||||||
|
successive invocations of this RPC. Outputs can be unlocked before their
|
||||||
|
expiration through `ReleaseOutput`.
|
||||||
|
*/
|
||||||
|
rpc LeaseOutput (LeaseOutputRequest) returns (LeaseOutputResponse);
|
||||||
|
|
||||||
|
/*
|
||||||
|
ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
selection if it remains unspent. The ID should match the one used to
|
||||||
|
originally lock the output.
|
||||||
|
*/
|
||||||
|
rpc ReleaseOutput (ReleaseOutputRequest) returns (ReleaseOutputResponse);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
DeriveNextKey attempts to derive the *next* key within the key family
|
DeriveNextKey attempts to derive the *next* key within the key family
|
||||||
(account in BIP43) specified. This method should return the next external
|
(account in BIP43) specified. This method should return the next external
|
||||||
@ -108,6 +130,48 @@ service WalletKit {
|
|||||||
returns (LabelTransactionResponse);
|
returns (LabelTransactionResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ListUnspentRequest {
|
||||||
|
// The minimum number of confirmations to be included.
|
||||||
|
int32 min_confs = 1;
|
||||||
|
|
||||||
|
// The maximum number of confirmations to be included.
|
||||||
|
int32 max_confs = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ListUnspentResponse {
|
||||||
|
// A list of utxos satisfying the specified number of confirmations.
|
||||||
|
repeated lnrpc.Utxo utxos = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LeaseOutputRequest {
|
||||||
|
/*
|
||||||
|
An ID of 32 random bytes that must be unique for each distinct application
|
||||||
|
using this RPC which will be used to bound the output lease to.
|
||||||
|
*/
|
||||||
|
bytes id = 1;
|
||||||
|
|
||||||
|
// The identifying outpoint of the output being leased.
|
||||||
|
lnrpc.OutPoint outpoint = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LeaseOutputResponse {
|
||||||
|
/*
|
||||||
|
The absolute expiration of the output lease represented as a unix timestamp.
|
||||||
|
*/
|
||||||
|
uint64 expiration = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReleaseOutputRequest {
|
||||||
|
// The unique ID that was used to lock the output.
|
||||||
|
bytes id = 1;
|
||||||
|
|
||||||
|
// The identifying outpoint of the output being released.
|
||||||
|
lnrpc.OutPoint outpoint = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ReleaseOutputResponse {
|
||||||
|
}
|
||||||
|
|
||||||
message KeyReq {
|
message KeyReq {
|
||||||
/*
|
/*
|
||||||
Is the key finger print of the root pubkey that this request is targeting.
|
Is the key finger print of the root pubkey that this request is targeting.
|
||||||
|
@ -28,6 +28,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lnrpcAddressType": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"WITNESS_PUBKEY_HASH",
|
||||||
|
"NESTED_PUBKEY_HASH",
|
||||||
|
"UNUSED_WITNESS_PUBKEY_HASH",
|
||||||
|
"UNUSED_NESTED_PUBKEY_HASH"
|
||||||
|
],
|
||||||
|
"default": "WITNESS_PUBKEY_HASH",
|
||||||
|
"description": "- `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)\n- `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)",
|
||||||
|
"title": "`AddressType` has to be one of:"
|
||||||
|
},
|
||||||
"lnrpcOutPoint": {
|
"lnrpcOutPoint": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -112,6 +124,37 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lnrpcUtxo": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"address_type": {
|
||||||
|
"$ref": "#/definitions/lnrpcAddressType",
|
||||||
|
"title": "The type of address"
|
||||||
|
},
|
||||||
|
"address": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "The address"
|
||||||
|
},
|
||||||
|
"amount_sat": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "int64",
|
||||||
|
"title": "The value of the unspent coin in satoshis"
|
||||||
|
},
|
||||||
|
"pk_script": {
|
||||||
|
"type": "string",
|
||||||
|
"title": "The pkscript in hex"
|
||||||
|
},
|
||||||
|
"outpoint": {
|
||||||
|
"$ref": "#/definitions/lnrpcOutPoint",
|
||||||
|
"title": "The outpoint in format txid:n"
|
||||||
|
},
|
||||||
|
"confirmations": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "int64",
|
||||||
|
"title": "The number of confirmations for the Utxo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"signrpcKeyDescriptor": {
|
"signrpcKeyDescriptor": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -181,6 +224,16 @@
|
|||||||
"walletrpcLabelTransactionResponse": {
|
"walletrpcLabelTransactionResponse": {
|
||||||
"type": "object"
|
"type": "object"
|
||||||
},
|
},
|
||||||
|
"walletrpcLeaseOutputResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"expiration": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uint64",
|
||||||
|
"description": "The absolute expiration of the output lease represented as a unix timestamp."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"walletrpcListSweepsResponse": {
|
"walletrpcListSweepsResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -192,6 +245,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"walletrpcListUnspentResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"utxos": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/lnrpcUtxo"
|
||||||
|
},
|
||||||
|
"description": "A list of utxos satisfying the specified number of confirmations."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"walletrpcPendingSweep": {
|
"walletrpcPendingSweep": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@ -261,6 +326,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"walletrpcReleaseOutputResponse": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
"walletrpcSendOutputsResponse": {
|
"walletrpcSendOutputsResponse": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/txscript"
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/labels"
|
"github.com/lightningnetwork/lnd/labels"
|
||||||
@ -98,6 +99,18 @@ var (
|
|||||||
Entity: "onchain",
|
Entity: "onchain",
|
||||||
Action: "write",
|
Action: "write",
|
||||||
}},
|
}},
|
||||||
|
"/walletrpc.WalletKit/LeaseOutput": {{
|
||||||
|
Entity: "onchain",
|
||||||
|
Action: "write",
|
||||||
|
}},
|
||||||
|
"/walletrpc.WalletKit/ReleaseOutput": {{
|
||||||
|
Entity: "onchain",
|
||||||
|
Action: "write",
|
||||||
|
}},
|
||||||
|
"/walletrpc.WalletKit/ListUnspent": {{
|
||||||
|
Entity: "onchain",
|
||||||
|
Action: "read",
|
||||||
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultWalletKitMacFilename is the default name of the wallet kit
|
// DefaultWalletKitMacFilename is the default name of the wallet kit
|
||||||
@ -204,6 +217,101 @@ func (w *WalletKit) RegisterWithRootServer(grpcServer *grpc.Server) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListUnspent returns useful information about each unspent output owned by the
|
||||||
|
// wallet, as reported by the underlying `ListUnspentWitness`; the information
|
||||||
|
// returned is: outpoint, amount in satoshis, address, address type,
|
||||||
|
// scriptPubKey in hex and number of confirmations. The result is filtered to
|
||||||
|
// contain outputs whose number of confirmations is between a
|
||||||
|
// minimum and maximum number of confirmations specified by the user, with 0
|
||||||
|
// meaning unconfirmed.
|
||||||
|
func (w *WalletKit) ListUnspent(ctx context.Context,
|
||||||
|
req *ListUnspentRequest) (*ListUnspentResponse, error) {
|
||||||
|
|
||||||
|
// Validate the confirmation arguments.
|
||||||
|
minConfs, maxConfs, err := lnrpc.ParseConfs(req.MinConfs, req.MaxConfs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// With our arguments validated, we'll query the internal wallet for
|
||||||
|
// the set of UTXOs that match our query.
|
||||||
|
utxos, err := w.cfg.Wallet.ListUnspentWitness(minConfs, maxConfs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
rpcUtxos, err := lnrpc.MarshalUtxos(utxos, w.cfg.ChainParams)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &ListUnspentResponse{
|
||||||
|
Utxos: rpcUtxos,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
// available for any future coin selection attempts. The absolute time of the
|
||||||
|
// lock's expiration is returned. The expiration of the lock can be extended by
|
||||||
|
// successive invocations of this call. Outputs can be unlocked before their
|
||||||
|
// expiration through `ReleaseOutput`.
|
||||||
|
//
|
||||||
|
// If the output is not known, wtxmgr.ErrUnknownOutput is returned. If the
|
||||||
|
// output has already been locked to a different ID, then
|
||||||
|
// wtxmgr.ErrOutputAlreadyLocked is returned.
|
||||||
|
func (w *WalletKit) LeaseOutput(ctx context.Context,
|
||||||
|
req *LeaseOutputRequest) (*LeaseOutputResponse, error) {
|
||||||
|
|
||||||
|
if len(req.Id) != 32 {
|
||||||
|
return nil, errors.New("id must be 32 random bytes")
|
||||||
|
}
|
||||||
|
var lockID wtxmgr.LockID
|
||||||
|
copy(lockID[:], req.Id)
|
||||||
|
|
||||||
|
// Don't allow ID's of 32 bytes, but all zeros.
|
||||||
|
if lockID == (wtxmgr.LockID{}) {
|
||||||
|
return nil, errors.New("id must be 32 random bytes")
|
||||||
|
}
|
||||||
|
|
||||||
|
op, err := unmarshallOutPoint(req.Outpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
expiration, err := w.cfg.Wallet.LeaseOutput(lockID, *op)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &LeaseOutputResponse{
|
||||||
|
Expiration: uint64(expiration.Unix()),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
// selection if it remains unspent. The ID should match the one used to
|
||||||
|
// originally lock the output.
|
||||||
|
func (w *WalletKit) ReleaseOutput(ctx context.Context,
|
||||||
|
req *ReleaseOutputRequest) (*ReleaseOutputResponse, error) {
|
||||||
|
|
||||||
|
if len(req.Id) != 32 {
|
||||||
|
return nil, errors.New("id must be 32 random bytes")
|
||||||
|
}
|
||||||
|
var lockID wtxmgr.LockID
|
||||||
|
copy(lockID[:], req.Id)
|
||||||
|
|
||||||
|
op, err := unmarshallOutPoint(req.Outpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := w.cfg.Wallet.ReleaseOutput(lockID, *op); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &ReleaseOutputResponse{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
// DeriveNextKey attempts to derive the *next* key within the key family
|
// DeriveNextKey attempts to derive the *next* key within the key family
|
||||||
// (account in BIP43) specified. This method should return the next external
|
// (account in BIP43) specified. This method should return the next external
|
||||||
// child within this branch.
|
// child within this branch.
|
||||||
|
@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
||||||
"github.com/btcsuite/btcwallet/wallet/txrules"
|
"github.com/btcsuite/btcwallet/wallet/txrules"
|
||||||
"github.com/btcsuite/btcwallet/walletdb"
|
"github.com/btcsuite/btcwallet/walletdb"
|
||||||
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
"github.com/lightningnetwork/lnd/keychain"
|
"github.com/lightningnetwork/lnd/keychain"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||||
@ -367,6 +368,27 @@ func (b *BtcWallet) UnlockOutpoint(o wire.OutPoint) {
|
|||||||
b.wallet.UnlockOutpoint(o)
|
b.wallet.UnlockOutpoint(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
// available for any future coin selection attempts. The absolute time of the
|
||||||
|
// lock's expiration is returned. The expiration of the lock can be extended by
|
||||||
|
// successive invocations of this call. Outputs can be unlocked before their
|
||||||
|
// expiration through `ReleaseOutput`.
|
||||||
|
//
|
||||||
|
// If the output is not known, wtxmgr.ErrUnknownOutput is returned. If the
|
||||||
|
// output has already been locked to a different ID, then
|
||||||
|
// wtxmgr.ErrOutputAlreadyLocked is returned.
|
||||||
|
func (b *BtcWallet) LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time,
|
||||||
|
error) {
|
||||||
|
return b.wallet.LeaseOutput(id, op)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
// selection if it remains unspent. The ID should match the one used to
|
||||||
|
// originally lock the output.
|
||||||
|
func (b *BtcWallet) ReleaseOutput(id wtxmgr.LockID, op wire.OutPoint) error {
|
||||||
|
return b.wallet.ReleaseOutput(id, op)
|
||||||
|
}
|
||||||
|
|
||||||
// ListUnspentWitness returns a slice of all the unspent outputs the wallet
|
// ListUnspentWitness returns a slice of all the unspent outputs the wallet
|
||||||
// controls which pay to witness programs either directly or indirectly.
|
// controls which pay to witness programs either directly or indirectly.
|
||||||
//
|
//
|
||||||
|
@ -4,12 +4,14 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcec"
|
"github.com/btcsuite/btcd/btcec"
|
||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
||||||
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||||
)
|
)
|
||||||
@ -221,6 +223,22 @@ type WalletController interface {
|
|||||||
// eligible for coin selection.
|
// eligible for coin selection.
|
||||||
UnlockOutpoint(o wire.OutPoint)
|
UnlockOutpoint(o wire.OutPoint)
|
||||||
|
|
||||||
|
// LeaseOutput locks an output to the given ID, preventing it from being
|
||||||
|
// available for any future coin selection attempts. The absolute time
|
||||||
|
// of the lock's expiration is returned. The expiration of the lock can
|
||||||
|
// be extended by successive invocations of this call. Outputs can be
|
||||||
|
// unlocked before their expiration through `ReleaseOutput`.
|
||||||
|
//
|
||||||
|
// If the output is not known, wtxmgr.ErrUnknownOutput is returned. If
|
||||||
|
// the output has already been locked to a different ID, then
|
||||||
|
// wtxmgr.ErrOutputAlreadyLocked is returned.
|
||||||
|
LeaseOutput(id wtxmgr.LockID, op wire.OutPoint) (time.Time, error)
|
||||||
|
|
||||||
|
// ReleaseOutput unlocks an output, allowing it to be available for coin
|
||||||
|
// selection if it remains unspent. The ID should match the one used to
|
||||||
|
// originally lock the output.
|
||||||
|
ReleaseOutput(id wtxmgr.LockID, op wire.OutPoint) error
|
||||||
|
|
||||||
// PublishTransaction performs cursory validation (dust checks, etc),
|
// PublishTransaction performs cursory validation (dust checks, etc),
|
||||||
// then finally broadcasts the passed transaction to the Bitcoin network.
|
// then finally broadcasts the passed transaction to the Bitcoin network.
|
||||||
// If the transaction is rejected because it is conflicting with an
|
// If the transaction is rejected because it is conflicting with an
|
||||||
|
10
mock.go
10
mock.go
@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/btcsuite/btcd/btcec"
|
"github.com/btcsuite/btcd/btcec"
|
||||||
"github.com/btcsuite/btcd/chaincfg"
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
@ -13,6 +14,7 @@ import (
|
|||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
"github.com/btcsuite/btcwallet/wallet/txauthor"
|
||||||
|
"github.com/btcsuite/btcwallet/wtxmgr"
|
||||||
|
|
||||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
@ -322,6 +324,14 @@ func (*mockWalletController) ListTransactionDetails(_, _ int32) ([]*lnwallet.Tra
|
|||||||
}
|
}
|
||||||
func (*mockWalletController) LockOutpoint(o wire.OutPoint) {}
|
func (*mockWalletController) LockOutpoint(o wire.OutPoint) {}
|
||||||
func (*mockWalletController) UnlockOutpoint(o wire.OutPoint) {}
|
func (*mockWalletController) UnlockOutpoint(o wire.OutPoint) {}
|
||||||
|
|
||||||
|
func (*mockWalletController) LeaseOutput(wtxmgr.LockID, wire.OutPoint) (time.Time, error) {
|
||||||
|
return time.Now(), nil
|
||||||
|
}
|
||||||
|
func (*mockWalletController) ReleaseOutput(wtxmgr.LockID, wire.OutPoint) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *mockWalletController) PublishTransaction(tx *wire.MsgTx, _ string) error {
|
func (m *mockWalletController) PublishTransaction(tx *wire.MsgTx, _ string) error {
|
||||||
m.publishedTransactions <- tx
|
m.publishedTransactions <- tx
|
||||||
return nil
|
return nil
|
||||||
|
102
rpcserver.go
102
rpcserver.go
@ -924,30 +924,20 @@ func (r *rpcServer) sendCoinsOnChain(paymentMap map[string]int64,
|
|||||||
return &txHash, nil
|
return &txHash, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListUnspent returns useful information about each unspent output owned by
|
// ListUnspent returns useful information about each unspent output owned by the
|
||||||
// the wallet, as reported by the underlying `ListUnspentWitness`; the
|
// wallet, as reported by the underlying `ListUnspentWitness`; the information
|
||||||
// information returned is: outpoint, amount in satoshis, address, address
|
// returned is: outpoint, amount in satoshis, address, address type,
|
||||||
// type, scriptPubKey in hex and number of confirmations. The result is
|
// scriptPubKey in hex and number of confirmations. The result is filtered to
|
||||||
// filtered to contain outputs whose number of confirmations is between a
|
// contain outputs whose number of confirmations is between a minimum and
|
||||||
// minimum and maximum number of confirmations specified by the user, with 0
|
// maximum number of confirmations specified by the user, with 0 meaning
|
||||||
// meaning unconfirmed.
|
// unconfirmed.
|
||||||
func (r *rpcServer) ListUnspent(ctx context.Context,
|
func (r *rpcServer) ListUnspent(ctx context.Context,
|
||||||
in *lnrpc.ListUnspentRequest) (*lnrpc.ListUnspentResponse, error) {
|
in *lnrpc.ListUnspentRequest) (*lnrpc.ListUnspentResponse, error) {
|
||||||
|
|
||||||
minConfs := in.MinConfs
|
// Validate the confirmation arguments.
|
||||||
maxConfs := in.MaxConfs
|
minConfs, maxConfs, err := lnrpc.ParseConfs(in.MinConfs, in.MaxConfs)
|
||||||
|
if err != nil {
|
||||||
switch {
|
return nil, err
|
||||||
// Ensure that the user didn't attempt to specify a negative number of
|
|
||||||
// confirmations, as that isn't possible.
|
|
||||||
case minConfs < 0:
|
|
||||||
return nil, fmt.Errorf("min confirmations must be >= 0")
|
|
||||||
|
|
||||||
// We'll also ensure that the min number of confs is strictly less than
|
|
||||||
// or equal to the max number of confs for sanity.
|
|
||||||
case minConfs > maxConfs:
|
|
||||||
return nil, fmt.Errorf("max confirmations must be >= min " +
|
|
||||||
"confirmations")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// With our arguments validated, we'll query the internal wallet for
|
// With our arguments validated, we'll query the internal wallet for
|
||||||
@ -957,69 +947,9 @@ func (r *rpcServer) ListUnspent(ctx context.Context,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &lnrpc.ListUnspentResponse{
|
rpcUtxos, err := lnrpc.MarshalUtxos(utxos, activeNetParams.Params)
|
||||||
Utxos: make([]*lnrpc.Utxo, 0, len(utxos)),
|
if err != nil {
|
||||||
}
|
return nil, err
|
||||||
|
|
||||||
for _, utxo := range utxos {
|
|
||||||
// Translate lnwallet address type to the proper gRPC proto
|
|
||||||
// address type.
|
|
||||||
var addrType lnrpc.AddressType
|
|
||||||
switch utxo.AddressType {
|
|
||||||
|
|
||||||
case lnwallet.WitnessPubKey:
|
|
||||||
addrType = lnrpc.AddressType_WITNESS_PUBKEY_HASH
|
|
||||||
|
|
||||||
case lnwallet.NestedWitnessPubKey:
|
|
||||||
addrType = lnrpc.AddressType_NESTED_PUBKEY_HASH
|
|
||||||
|
|
||||||
case lnwallet.UnknownAddressType:
|
|
||||||
rpcsLog.Warnf("[listunspent] utxo with address of "+
|
|
||||||
"unknown type ignored: %v",
|
|
||||||
utxo.OutPoint.String())
|
|
||||||
continue
|
|
||||||
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("invalid utxo address type")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now that we know we have a proper mapping to an address,
|
|
||||||
// we'll convert the regular outpoint to an lnrpc variant.
|
|
||||||
outpoint := &lnrpc.OutPoint{
|
|
||||||
TxidBytes: utxo.OutPoint.Hash[:],
|
|
||||||
TxidStr: utxo.OutPoint.Hash.String(),
|
|
||||||
OutputIndex: utxo.OutPoint.Index,
|
|
||||||
}
|
|
||||||
|
|
||||||
utxoResp := lnrpc.Utxo{
|
|
||||||
AddressType: addrType,
|
|
||||||
AmountSat: int64(utxo.Value),
|
|
||||||
PkScript: hex.EncodeToString(utxo.PkScript),
|
|
||||||
Outpoint: outpoint,
|
|
||||||
Confirmations: utxo.Confirmations,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Finally, we'll attempt to extract the raw address from the
|
|
||||||
// script so we can display a human friendly address to the end
|
|
||||||
// user.
|
|
||||||
_, outAddresses, _, err := txscript.ExtractPkScriptAddrs(
|
|
||||||
utxo.PkScript, activeNetParams.Params,
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we can't properly locate a single address, then this was
|
|
||||||
// an error in our mapping, and we'll return an error back to
|
|
||||||
// the user.
|
|
||||||
if len(outAddresses) != 1 {
|
|
||||||
return nil, fmt.Errorf("an output was unexpectedly " +
|
|
||||||
"multisig")
|
|
||||||
}
|
|
||||||
|
|
||||||
utxoResp.Address = outAddresses[0].String()
|
|
||||||
|
|
||||||
resp.Utxos = append(resp.Utxos, &utxoResp)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
maxStr := ""
|
maxStr := ""
|
||||||
@ -1030,7 +960,9 @@ func (r *rpcServer) ListUnspent(ctx context.Context,
|
|||||||
rpcsLog.Debugf("[listunspent] min=%v%v, generated utxos: %v", minConfs,
|
rpcsLog.Debugf("[listunspent] min=%v%v, generated utxos: %v", minConfs,
|
||||||
maxStr, utxos)
|
maxStr, utxos)
|
||||||
|
|
||||||
return resp, nil
|
return &lnrpc.ListUnspentResponse{
|
||||||
|
Utxos: rpcUtxos,
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// EstimateFee handles a request for estimating the fee for sending a
|
// EstimateFee handles a request for estimating the fee for sending a
|
||||||
|
@ -162,6 +162,9 @@ func (s *subRPCServerConfigs) PopulateDependencies(cfg *Config, cc *chainControl
|
|||||||
subCfgValue.FieldByName("Chain").Set(
|
subCfgValue.FieldByName("Chain").Set(
|
||||||
reflect.ValueOf(cc.chainIO),
|
reflect.ValueOf(cc.chainIO),
|
||||||
)
|
)
|
||||||
|
subCfgValue.FieldByName("ChainParams").Set(
|
||||||
|
reflect.ValueOf(activeNetParams),
|
||||||
|
)
|
||||||
|
|
||||||
case *autopilotrpc.Config:
|
case *autopilotrpc.Config:
|
||||||
subCfgValue := extractReflectValue(subCfg)
|
subCfgValue := extractReflectValue(subCfg)
|
||||||
|
Loading…
Reference in New Issue
Block a user