dcrd/txscript
Dave Collins 5717411882
txscript: Decouple and optimize sighash calc.
This modifies the signature hash calculation logic to completely
decouple it from the wire transaction serialization and significantly
optimizes it in the process.  It also significantly improves the
comments to specifically call out the semantics.

This change is highly desirable because it has several beneficial
properties:

- The signature hash semantics are much clearer and specific
- There is no longer a need to copy the entire transaction and modify
  the relevant portions since the necessary substitutions are made on
  the fly
- Allows much faster calculation by serializing directly into byte
  slices and avoiding all of the additional error handling logic
  dedicated to handling network streams
- Provides the possibility of changing the wire format without breaking
  signature hash calculation
  - Note that the caching portion still relies on the wire format, but
    that can be addressed in future commits since it is merely an
    optimization that can also be decoupled

The following is a before and after comparison of signature hash
calculation for both speed and memory allocations for a transaction with
many inputs:

benchmark                old ns/op     new ns/op     delta
------------------------------------------------------------
BenchmarkCalcSigHash     6299714       1551740       -75.37%

benchmark                old allocs    new allocs    delta
------------------------------------------------------------
BenchmarkCalcSigHash     18601         1691          -90.91%
2018-05-01 08:51:41 -05:00
..
data txscript: Add benchmark for sighash calculation. 2018-05-01 08:51:38 -05:00
bench_test.go txscript: Add benchmark for sighash calculation. 2018-05-01 08:51:38 -05:00
consensus.go txscript: Implement CheckSequenceVerify 2017-09-21 15:58:48 -05:00
doc.go multi: Properly capitalize Decred. 2018-03-01 17:41:35 -06:00
engine_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
engine.go multi: fix some maligned linter warnings 2018-02-13 14:50:33 -06:00
error.go blockchain: Rework to use new db interface. 2016-08-18 15:42:18 -04:00
example_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
log.go all: Remove seelog logger. 2017-06-20 10:58:10 -04:00
opcode_test.go txscript: Remove OP_SMALLDATA 2017-12-29 19:57:26 +00:00
opcode.go txscript: Remove OP_SMALLDATA 2017-12-29 19:57:26 +00:00
README.md multi: Properly capitalize Decred. 2018-03-01 17:41:35 -06:00
reference_test.go txscript: Add JSON-based signature hash tests. 2018-04-30 12:14:14 -05:00
script_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
script.go txscript: Move sig hash logic to separate file. 2018-04-30 08:54:07 -05:00
scriptbuilder_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
scriptbuilder.go travis: enable gometalinter (#603) 2017-03-08 15:44:15 -05:00
scriptnum_test.go txscript: Sync upstream makeScriptNum tests. 2016-05-17 16:34:03 -05:00
scriptnum.go Initial Decred Commit. 2016-02-07 14:00:12 -05:00
sigcache_test.go multi: Upstream chainhash abstraction sync 2016-11-16 12:48:40 -06:00
sigcache.go multi: release the mutex earlier 2018-02-13 13:55:02 -06:00
sighash_test.go txscript: Decouple and optimize sighash calc. 2018-05-01 08:51:41 -05:00
sighash.go txscript: Decouple and optimize sighash calc. 2018-05-01 08:51:41 -05:00
sign_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
sign.go travis: add ineffassign linter 2017-12-01 09:14:04 -05:00
stack_test.go multi: Error descriptions are in lower case. 2017-09-08 18:03:59 +02:00
stack.go travis: add gosimple linter 2017-11-20 18:49:55 -06:00
standard_test.go txscript: Consolidate tests into txscript package. 2018-04-30 10:34:59 -05:00
standard.go Require atomic swap contracts to specify the secret size. 2018-02-16 15:14:27 -06:00

txscript

Build Status ISC License GoDoc

Package txscript implements the Decred transaction script language. There is a comprehensive test suite.

This package has intentionally been designed so it can be used as a standalone package for any projects needing to use or validate Decred transaction scripts.

Decred Scripts

Decred provides a stack-based, FORTH-like language for the scripts in the Decred transactions. This language is not turing complete although it is still fairly powerful.

Installation and Updating

$ go get -u github.com/decred/dcrd/txscript

Examples

License

Package txscript is licensed under the copyfree ISC License.