txsort

package
v2.0.2 Latest Latest
Warning

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

Go to latest
Published: Jun 10, 2023 License: ISC Imports: 4 Imported by: 0

README

txsort

Build Status ISC License GoDoc

Package txsort provides stable transaction sorting.

This package implements a standard lexicographical sort order of transaction inputs and outputs. This is useful to standardize transactions for faster multi-party agreement as well as preventing information leaks in a single-party use case. It is a modified form of BIP69 which has been updated to account for differences with Decred-specific transactions.

The sort order for transaction inputs is defined as follows:

  • Previous transaction tree in ascending order
  • Previous transaction hash (treated as a big-endian uint256) lexicographically in ascending order
  • Previous output index in ascending order

The sort order for transaction outputs is defined as follows:

  • Amount in ascending order
  • Public key script version in ascending order
  • Raw public key script bytes lexicographically in ascending order

A comprehensive suite of tests is provided to ensure proper functionality.

Installation and Updating

$ go get -u github.com/decred/dcrd/dcrutil/txsort

License

Package txsort is licensed under the copyfree ISC License.

Documentation

Overview

Package txsort provides stable transaction sorting.

Overview

This package implements a standard lexicographical sort order of transaction inputs and outputs. This is useful to standardize transactions for faster multi-party agreement as well as preventing information leaks in a single-party use case. It is a modified form of BIP69 which has been updated to account for differences with Decred-specific transactions.

The sort order for transaction inputs is defined as follows:

  • Previous transaction tree in ascending order
  • Previous transaction hash (treated as a big-endian uint256) lexicographically in ascending order
  • Previous output index in ascending order

The sort order for transaction outputs is defined as follows: - Amount in ascending order - Public key script version in ascending order - Raw public key script bytes lexicographically in ascending order

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func InPlaceSort

func InPlaceSort(tx *wire.MsgTx)

InPlaceSort modifies the passed transaction inputs and outputs to be sorted according to the description in the package documentation.

WARNING: This function must NOT be called with published transactions since it will mutate the transaction if it's not already sorted. This can cause issues if you mutate a tx in a block, for example, which would invalidate the block. It could also cause cached hashes, such as in a dcrutil.Tx to become invalidated.

The function should only be used if the caller is creating the transaction or is otherwise 100% positive mutating will not cause adverse affects due to other dependencies.

func IsSorted

func IsSorted(tx *wire.MsgTx) bool

IsSorted checks whether tx has inputs and outputs sorted according to the description in the package documentation.

func Sort

func Sort(tx *wire.MsgTx) *wire.MsgTx

Sort returns a new transaction with the inputs and outputs sorted according to the description in the package documentation. The passed transaction is not modified and the new transaction might have a different hash if any sorting was done.

Types

This section is empty.

Jump to

Keyboard shortcuts

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