txsort

package
v4.0.2 Latest Latest
Warning

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

Go to latest
Published: May 16, 2024 License: ISC Imports: 4 Imported by: 6

README

txsort

Build Status ISC License Doc

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

This package is part of the github.com/decred/dcrd/dcrutil/v4 module. Use the standard go tooling for working with modules to incorporate it.

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