swap

package
v0.12.1-beta Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 25, 2021 License: MIT Imports: 12 Imported by: 2

Documentation

Index

Constants

View Source
const (
	// FeeRateTotalParts defines the granularity of the fee rate.
	// Throughout the codebase, we'll use fix based arithmetic to compute
	// fees.
	FeeRateTotalParts = 1e6
)

Variables

View Source
var (

	// QuoteHtlc is a template script just used for fee estimation. It uses
	// the maximum value for cltv expiry to get the maximum (worst case)
	// script size.
	QuoteHtlc, _ = NewHtlc(
		HtlcV2,
		^int32(0), quoteKey, quoteKey, quoteHash, HtlcP2WSH,
		&chaincfg.MainNetParams,
	)

	ErrInvalidScriptVersion = fmt.Errorf("invalid script version")
)
View Source
var (
	// KeyFamily is the key family used to generate keys that allow
	// spending of the htlc.
	//
	// TODO(joost): decide on actual value
	KeyFamily = int32(99)
)

Functions

func CalcFee

func CalcFee(amount, feeBase btcutil.Amount, feeRate int64) btcutil.Amount

CalcFee returns the swap fee for a given swap amount.

func DecodeInvoice

func DecodeInvoice(params *chaincfg.Params,
	payReq string) (lntypes.Hash, btcutil.Amount, error)

DecodeInvoice gets the hash and the amount of an invoice. It requires an amount to be specified.

func FeeRateAsPercentage

func FeeRateAsPercentage(feeRate int64) float64

FeeRateAsPercentage converts a feerate to a percentage.

func GetScriptOutput

func GetScriptOutput(htlcTx *wire.MsgTx, scriptHash []byte) (
	*wire.OutPoint, btcutil.Amount, error)

GetScriptOutput locates the given script in the outputs of a transaction and returns its outpoint and value.

func GetTxInputByOutpoint

func GetTxInputByOutpoint(tx *wire.MsgTx, input *wire.OutPoint) (
	*wire.TxIn, error)

GetTxInputByOutpoint returns a tx input based on a given input outpoint.

func ShortHash

func ShortHash(hash *lntypes.Hash) string

ShortHash returns a shortened version of the hash suitable for use in logging.

Types

type Htlc

type Htlc struct {
	HtlcScript

	Version     ScriptVersion
	PkScript    []byte
	Hash        lntypes.Hash
	OutputType  HtlcOutputType
	ChainParams *chaincfg.Params
	Address     btcutil.Address
	SigScript   []byte
}

Htlc contains relevant htlc information from the receiver perspective.

func NewHtlc

func NewHtlc(version ScriptVersion, cltvExpiry int32,
	senderKey, receiverKey [33]byte,
	hash lntypes.Hash, outputType HtlcOutputType,
	chainParams *chaincfg.Params) (*Htlc, error)

NewHtlc returns a new instance.

func (*Htlc) AddSuccessToEstimator

func (h *Htlc) AddSuccessToEstimator(estimator *input.TxWeightEstimator)

AddSuccessToEstimator adds a successful spend to a weight estimator.

func (*Htlc) AddTimeoutToEstimator

func (h *Htlc) AddTimeoutToEstimator(estimator *input.TxWeightEstimator)

AddTimeoutToEstimator adds a timeout spend to a weight estimator.

func (*Htlc) GenSuccessWitness

func (h *Htlc) GenSuccessWitness(receiverSig []byte,
	preimage lntypes.Preimage) (wire.TxWitness, error)

GenSuccessWitness returns the success script to spend this htlc with the preimage.

type HtlcOutputType

type HtlcOutputType uint8

HtlcOutputType defines the output type of the htlc that is published.

const (
	// HtlcP2WSH is a pay-to-witness-script-hash output (segwit only)
	HtlcP2WSH HtlcOutputType = iota

	// HtlcNP2WSH is a nested pay-to-witness-script-hash output that can be
	// paid to be legacy wallets.
	HtlcNP2WSH
)

func (HtlcOutputType) String

func (h HtlcOutputType) String() string

String returns the string value of HtlcOutputType.

type HtlcScript

type HtlcScript interface {

	// GenTimeoutWitness returns the timeout script to spend this htlc after
	// timeout.
	GenTimeoutWitness(senderSig []byte) wire.TxWitness

	// IsSuccessWitness checks whether the given stack is valid for
	// redeeming the htlc.
	IsSuccessWitness(witness wire.TxWitness) bool

	// Script returns the htlc script.
	Script() []byte

	// MaxSuccessWitnessSize returns the maximum witness size for the
	// success case witness.
	MaxSuccessWitnessSize() int

	// MaxTimeoutWitnessSize returns the maximum witness size for the
	// timeout case witness.
	MaxTimeoutWitnessSize() int

	// SuccessSequence returns the sequence to spend this htlc in the
	// success case.
	SuccessSequence() uint32
	// contains filtered or unexported methods
}

htlcScript defines an interface for the different HTLC implementations.

type HtlcScriptV1

type HtlcScriptV1 struct {
	// contains filtered or unexported fields
}

HtlcScriptV1 encapsulates the htlc v1 script.

func (*HtlcScriptV1) GenTimeoutWitness

func (h *HtlcScriptV1) GenTimeoutWitness(senderSig []byte) wire.TxWitness

GenTimeoutWitness returns the timeout script to spend this htlc after timeout.

func (*HtlcScriptV1) IsSuccessWitness

func (h *HtlcScriptV1) IsSuccessWitness(witness wire.TxWitness) bool

IsSuccessWitness checks whether the given stack is valid for redeeming the htlc.

func (*HtlcScriptV1) MaxSuccessWitnessSize

func (h *HtlcScriptV1) MaxSuccessWitnessSize() int

MaxSuccessWitnessSize returns the maximum success witness size.

func (*HtlcScriptV1) MaxTimeoutWitnessSize

func (h *HtlcScriptV1) MaxTimeoutWitnessSize() int

MaxTimeoutWitnessSize return the maximum timeout witness size.

func (*HtlcScriptV1) Script

func (h *HtlcScriptV1) Script() []byte

Script returns the htlc script.

func (*HtlcScriptV1) SuccessSequence

func (h *HtlcScriptV1) SuccessSequence() uint32

SuccessSequence returns the sequence to spend this htlc in the success case.

type HtlcScriptV2

type HtlcScriptV2 struct {
	// contains filtered or unexported fields
}

HtlcScriptV2 encapsulates the htlc v2 script.

func (*HtlcScriptV2) GenTimeoutWitness

func (h *HtlcScriptV2) GenTimeoutWitness(senderSig []byte) wire.TxWitness

GenTimeoutWitness returns the timeout script to spend this htlc after timeout.

func (*HtlcScriptV2) IsSuccessWitness

func (h *HtlcScriptV2) IsSuccessWitness(witness wire.TxWitness) bool

IsSuccessWitness checks whether the given stack is valid for redeeming the htlc.

func (*HtlcScriptV2) MaxSuccessWitnessSize

func (h *HtlcScriptV2) MaxSuccessWitnessSize() int

MaxSuccessWitnessSize returns maximum success witness size.

func (*HtlcScriptV2) MaxTimeoutWitnessSize

func (h *HtlcScriptV2) MaxTimeoutWitnessSize() int

MaxTimeoutWitnessSize returns maximum timeout witness size.

func (*HtlcScriptV2) Script

func (h *HtlcScriptV2) Script() []byte

Script returns the htlc script.

func (*HtlcScriptV2) SuccessSequence

func (h *HtlcScriptV2) SuccessSequence() uint32

SuccessSequence returns the sequence to spend this htlc in the success case.

type PrefixLog

type PrefixLog struct {
	// Logger is the underlying based logger.
	Logger btclog.Logger

	// Hash is the hash the identifies the target swap.
	Hash lntypes.Hash
}

PrefixLog logs with a short swap hash prefix.

func (*PrefixLog) Errorf

func (s *PrefixLog) Errorf(format string, params ...interface{})

Errorf formats message according to format specifier and writes to to log with LevelError.

func (*PrefixLog) Infof

func (s *PrefixLog) Infof(format string, params ...interface{})

Infof formats message according to format specifier and writes to log with LevelInfo.

func (*PrefixLog) Warnf

func (s *PrefixLog) Warnf(format string, params ...interface{})

Warnf formats message according to format specifier and writes to to log with LevelError.

type ScriptVersion

type ScriptVersion uint8

ScriptVersion defines the HTLC script version.

const (
	// HtlcV1 refers to the original version of the HTLC script.
	HtlcV1 ScriptVersion = iota

	// HtlcV2 refers to the improved version of the HTLC script.
	HtlcV2
)

type Type

type Type uint8

Type indicates the type of swap.

const (
	// TypeIn is a loop in swap.
	TypeIn Type = iota

	// TypeOut is a loop out swap.
	TypeOut
)

func (Type) String

func (t Type) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL