dcrd/txscript
Dave Collins 4774fda89a
txscript: Optimize ExtractAtomicSwapDataPushes.
This converts the ExtractAtomicSwapDataPushes function to make use of
the new tokenizer instead of the far less efficient parseScript thereby
significantly optimizing the function.

The new implementation is designed such that it should be fairly easy to
move the function into the atomic swap tools where it more naturally
belongs now that the tokenizer makes it possible to analyze scripts
outside of the txscript module.  Consequently, this also deprecates the
function.

The following is a before and after comparison of attempting to extract
from both a typical atomic swap script and a very large non-atomic swap
script:

benchmark                                   old ns/op    new ns/op    delta
------------------------------------------------------------------------------
BenchmarkExtractAtomicSwapDataPushes        1330         410          -69.17%
BenchmarkExtractAtomicSwapDataPushesLarge   136819       69.3         -99.95%

benchmark                                   old allocs   new allocs   delta
------------------------------------------------------------------------------
BenchmarkExtractAtomicSwapDataPushes        2            1            -50.00%
BenchmarkExtractAtomicSwapDataPushesLarge   1            0            -100.00%

benchmark                                   old bytes    new bytes    delta
------------------------------------------------------------------------------
BenchmarkExtractAtomicSwapDataPushes        3168         96           -96.97%
BenchmarkExtractAtomicSwapDataPushesLarge   466944       0            -100.00%
2019-03-26 14:51:47 -05:00
..
data txscript: Add remove signature reference test. 2019-02-14 14:10:12 -06:00
bench_test.go txscript: Add ExtractAtomicSwapDataPushes benches. 2019-03-26 14:51:46 -05:00
consensus_test.go multi: Break coinbase dep on standardness rules. 2018-05-08 12:49:40 -05:00
consensus.go txscript: Optimize ExtractCoinbaseNullData. 2019-03-26 14:51:35 -05:00
doc.go txscript: Significantly improve errors. 2018-07-01 15:04:59 -05:00
engine_test.go txscript: Remove DER signature verification flag. 2018-07-02 12:02:28 -05:00
engine.go txscript: Check p2sh push before parsing scripts. 2019-03-26 14:51:10 -05:00
error_test.go txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05:00
error.go txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05:00
example_test.go txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05:00
go.mod multi: Add go 1.11 directive to all modules. 2019-03-18 02:02:35 -05:00
go.sum multi: Remove non-root module replacements. 2019-02-08 18:01:43 -06:00
log.go multi: deprecate DisableLog 2019-03-18 11:16:35 -05:00
opcode_test.go multi: cleanup linter warnings 2019-02-13 08:38:25 -05:00
opcode.go txscript: Optimize script disasm. 2019-03-26 14:50:57 -05:00
README.md txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05:00
reference_test.go txscript: Convert sighash calc tests. 2019-03-26 14:50:59 -05:00
script_test.go txscript: Make canonicalPush accept raw opcode. 2019-03-26 14:51:45 -05:00
script.go txscript: Make canonicalPush accept raw opcode. 2019-03-26 14:51:45 -05:00
scriptbuilder_test.go txscript: Significantly improve errors. 2018-07-01 15:04:59 -05:00
scriptbuilder.go txscript: code cleanup 2019-02-08 09:18:53 -05:00
scriptnum_test.go txscript: Remove script num require minimal flag. 2018-07-02 12:14:15 -05:00
scriptnum.go txscript: Introduce constant for max CSV bytes. 2019-03-12 10:26:04 -05:00
sigcache_test.go multi: Remove unused secp256k1 sig parse parameter. 2018-07-04 12:27:34 -05: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: Optimize CalcSignatureHash. 2019-03-26 14:50:58 -05:00
sign_test.go txscript: code cleanup 2019-02-08 09:18:53 -05:00
sign.go txscript: code cleanup 2019-02-08 09:18:53 -05:00
stack_test.go txscript: Make PeekInt consistent with PopInt. 2018-07-02 12:14:37 -05:00
stack.go txscript: code cleanup 2019-02-08 09:18:53 -05:00
standard_test.go txscript: Add tests for atomic swap extraction. 2019-03-26 14:51:45 -05:00
standard.go txscript: Optimize ExtractAtomicSwapDataPushes. 2019-03-26 14:51:47 -05:00
tokenizer_test.go txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05:00
tokenizer.go txscript: Introduce zero-alloc script tokenizer. 2019-03-26 14:50:56 -05: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.