poolscript

package
v0.5.6-alpha-lnd-14 Latest Latest
Warning

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

Go to latest
Published: Apr 19, 2022 License: MIT Imports: 8 Imported by: 1

Documentation

Index

Constants

View Source
const (
	// AccountKeyFamily is the key family used to derive keys which will be
	// used in the 2 of 2 multi-sig construction of a CLM account.
	//
	// TODO(wilmer): decide on actual value.
	AccountKeyFamily keychain.KeyFamily = 220

	// AccountWitnessScriptSize: 79 bytes
	//	- OP_DATA: 1 byte (trader_key length)
	//	- <trader_key>: 33 bytes
	//	- OP_CHECKSIGVERIFY: 1 byte
	//	- OP_DATA: 1 byte (auctioneer_key length)
	//	- <auctioneer_key>: 33 bytes
	//	- OP_CHECKSIG: 1 byte
	//	- OP_IFDUP: 1 byte
	//	- OP_NOTIF: 1 byte
	//	- OP_DATA: 1 byte (account_expiry length)
	//	- <account_expiry>: 4 bytes
	//	- OP_CHECKLOCKTIMEVERIFY: 1 byte
	//	- OP_ENDIF: 1 byte
	AccountWitnessScriptSize = 1 + 33 + 1 + 1 + 33 + 1 + 1 + 1 + 1 + 4 + 1 + 1

	// MultiSigWitnessSize: 227 bytes
	//      - num_witness_elements: 1 byte
	//	- trader_sig_varint_len: 1 byte
	//	- <trader_sig>: 73 bytes
	//	- auctioneer_sig_varint_len: 1 byte
	//	- <auctioneer_sig>: 73 bytes
	//	- witness_script_varint_len: 1 byte
	//	- <witness_script>: 79 bytes
	MultiSigWitnessSize = 1 + 1 + 73 + 1 + 73 + 1 + AccountWitnessScriptSize

	// ExpiryWitnessSize: 154 bytes
	//      - num_witness_elements: 1 byte
	//	- trader_sig_varint_len: 1 byte (trader_sig length)
	//	- <trader_sig>: 73 bytes
	//	- witness_script_varint_len: 1 byte (nil length)
	//	- <witness_script>: 79 bytes
	ExpiryWitnessSize = 1 + 1 + 73 + 1 + AccountWitnessScriptSize
)

Variables

This section is empty.

Functions

func AccountScript

func AccountScript(expiry uint32, traderKey, auctioneerKey,
	batchKey *btcec.PublicKey, secret [32]byte) ([]byte, error)

AccountScript returns the output script of an account on-chain.

<trader_key> OP_CHECKSIGVERIFY <auctioneer_key> OP_CHECKSIG OP_IFDUP OP_NOTIF

<account_expiry> OP_CHECKLOCKTIMEVERIFY

OP_ENDIF

func AccountWitnessScript

func AccountWitnessScript(expiry uint32, traderKey, auctioneerKey,
	batchKey *btcec.PublicKey, secret [32]byte) ([]byte, error)

AccountWitnessScript returns the witness script of an account.

func AuctioneerKeyTweak

func AuctioneerKeyTweak(traderKey, auctioneerKey, batchKey *btcec.PublicKey,
	secret [32]byte) []byte

AuctioneerKeyTweak computes the tweak based on the tweaked trader's key that should be applied to an account's auctioneer base key. The tweak is computed as the following:

traderKeyTweak = sha256(batchKey || secret || traderKey)
tweakedTraderKey = (traderKey + traderKeyTweak) * G
auctioneerKeyTweak = sha256(tweakedTraderKey || auctioneerKey)

func DecrementKey

func DecrementKey(key *btcec.PublicKey) *btcec.PublicKey

DecrementKey is the opposite of IncrementKey, it "subtracts one" from the current key to arrive at the key used before the IncrementKey operation.

func IncludesPreviousOutPoint

func IncludesPreviousOutPoint(tx *wire.MsgTx, output wire.OutPoint) bool

IncludesPreviousOutPoint determines whether a transaction includes a given OutPoint as a txIn PreviousOutpoint.

func IncrementKey

func IncrementKey(key *btcec.PublicKey) *btcec.PublicKey

IncrementKey increments the given key by the backing curve's base point.

func IsExpirySpend

func IsExpirySpend(witness wire.TxWitness) bool

IsExpirySpend determines whether the provided witness corresponds to the expiration script path of an account.

func IsMultiSigSpend

func IsMultiSigSpend(witness wire.TxWitness) bool

IsMultiSigSpend determines whether the provided witness corresponds to the multi-sig script path of an account.

func LocateOutputScript

func LocateOutputScript(tx *wire.MsgTx, script []byte) (uint32, bool)

LocateOutputScript determines whether a transaction includes an output with a specific script. If it does, the output index is returned.

func MatchPreviousOutPoint

func MatchPreviousOutPoint(op wire.OutPoint, txs []*wire.MsgTx) (*wire.MsgTx,
	bool)

MatchPreviousOutPoint determines whether or not a PreviousOutPoint appears in any of the provided transactions.

func SpendExpiry

func SpendExpiry(witnessScript, traderSig []byte) wire.TxWitness

SpendExpiry returns the witness required to spend an account through the expiration script path.

func SpendMultiSig

func SpendMultiSig(witnessScript, traderSig, auctioneerSig []byte) wire.TxWitness

SpendMultiSig returns the witness required to spend an account through the multi-sig script path.

func TraderKeyTweak

func TraderKeyTweak(batchKey *btcec.PublicKey, secret [32]byte,
	traderKey *btcec.PublicKey) []byte

TraderKeyTweak computes the tweak based on the current per-batch key and shared secret that should be applied to an account's base trader key. The tweak is computed as the following:

tweak = sha256(batchKey || secret || traderKey)

Types

type RecoveryHelper

type RecoveryHelper struct {
	// TraderKey is the trader's public key.
	TraderKey *btcec.PublicKey

	// AuctioneerKey is the auctioneer's public key.
	AuctioneerKey *btcec.PublicKey

	// BatchKey is the current batch key.
	BatchKey *btcec.PublicKey

	// Secret is the shared secret between trader and auctioneer.
	Secret [32]byte
	// contains filtered or unexported fields
}

RecoveryHelper is a type that helps speed up account recovery by caching the tweaked trader and auctioneer keys for faster script lookups.

func (*RecoveryHelper) LocateAnyOutput

func (r *RecoveryHelper) LocateAnyOutput(expiry uint32,
	txns []*wire.MsgTx) (*wire.MsgTx, uint32, bool, error)

LocateAnyOutput looks for an account output in and of the given transactions that corresponds to a script derived with the current settings of the helper and the given account expiry.

func (*RecoveryHelper) LocateOutput

func (r *RecoveryHelper) LocateOutput(expiry uint32, tx *wire.MsgTx) (uint32,
	bool, error)

LocateOutput looks for an account output in the given transaction that corresponds to a script derived with the current settings of the helper and the given account expiry.

func (*RecoveryHelper) NextAccount

func (r *RecoveryHelper) NextAccount(traderKey *btcec.PublicKey,
	secret [32]byte)

NextAccount sets a fresh trader key and secret, then re-calculates the tweaked keys.

func (*RecoveryHelper) NextBatchKey

func (r *RecoveryHelper) NextBatchKey()

NextBatchKey increments the currently used batch key and re-calculates the tweaked keys.

Jump to

Keyboard shortcuts

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