From 48c773ec873cb22af2c9abe1d6b3fd901992efe7 Mon Sep 17 00:00:00 2001 From: Bjarne Magnussen Date: Mon, 12 Jul 2021 11:47:42 +0200 Subject: [PATCH] lnrpc: add DestOutput information to RPC GetTransactions --- lnrpc/marshall_utils.go | 28 ++++++++++++++++++++++++++++ lnrpc/rpc_utils.go | 27 +++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/lnrpc/marshall_utils.go b/lnrpc/marshall_utils.go index 0af5b43f0..f2567c8f8 100644 --- a/lnrpc/marshall_utils.go +++ b/lnrpc/marshall_utils.go @@ -141,3 +141,31 @@ func MarshalUtxos(utxos []*lnwallet.Utxo, activeNetParams *chaincfg.Params) ( return res, nil } + +// MarshallOutputType translates a txscript.ScriptClass into a +// lnrpc.OutputScriptType. +func MarshallOutputType(o txscript.ScriptClass) (ret OutputScriptType) { + // Translate txscript ScriptClass type to the proper gRPC proto + // output script type. + switch o { + case txscript.PubKeyHashTy: + ret = OutputScriptType_SCRIPT_TYPE_PUBKEY_HASH + case txscript.ScriptHashTy: + ret = OutputScriptType_SCRIPT_TYPE_SCRIPT_HASH + case txscript.WitnessV0PubKeyHashTy: + ret = OutputScriptType_SCRIPT_TYPE_WITNESS_V0_PUBKEY_HASH + case txscript.WitnessV0ScriptHashTy: + ret = OutputScriptType_SCRIPT_TYPE_WITNESS_V0_SCRIPT_HASH + case txscript.PubKeyTy: + ret = OutputScriptType_SCRIPT_TYPE_PUBKEY + case txscript.MultiSigTy: + ret = OutputScriptType_SCRIPT_TYPE_MULTISIG + case txscript.NullDataTy: + ret = OutputScriptType_SCRIPT_TYPE_NULLDATA + case txscript.NonStandardTy: + ret = OutputScriptType_SCRIPT_TYPE_NON_STANDARD + case txscript.WitnessUnknownTy: + ret = OutputScriptType_SCRIPT_TYPE_WITNESS_UNKNOWN + } + return +} diff --git a/lnrpc/rpc_utils.go b/lnrpc/rpc_utils.go index 94b034bcc..26182838d 100644 --- a/lnrpc/rpc_utils.go +++ b/lnrpc/rpc_utils.go @@ -19,8 +19,30 @@ const ( // RPCTransaction returns a rpc transaction. func RPCTransaction(tx *lnwallet.TransactionDetail) *Transaction { var destAddresses []string - for _, destAddress := range tx.DestAddresses { - destAddresses = append(destAddresses, destAddress.EncodeAddress()) + // Re-package destination output information. + var outputDetails []*OutputDetail + for _, o := range tx.OutputDetails { + // Note: DestAddresses is deprecated but we keep + // populating it with addresses for backwards + // compatibility. + for _, a := range o.Addresses { + destAddresses = append(destAddresses, + a.EncodeAddress()) + } + + var address string + if len(o.Addresses) == 1 { + address = o.Addresses[0].EncodeAddress() + } + + outputDetails = append(outputDetails, &OutputDetail{ + OutputType: MarshallOutputType(o.OutputType), + Address: address, + PkScript: hex.EncodeToString(o.PkScript), + OutputIndex: int64(o.OutputIndex), + Amount: int64(o.Value), + IsOurAddress: o.IsOurAddress, + }) } // We also get unconfirmed transactions, so BlockHash can be nil. @@ -38,6 +60,7 @@ func RPCTransaction(tx *lnwallet.TransactionDetail) *Transaction { TimeStamp: tx.Timestamp, TotalFees: tx.TotalFees, DestAddresses: destAddresses, + OutputDetails: outputDetails, RawTxHex: hex.EncodeToString(tx.RawTx), Label: tx.Label, }