dcrd/txscript
Dave Collins a598838fb7
txscript: Optimize isAnyKindOfScriptHash.
This converts the isAnyKindOfScriptHash function to analyze the raw
script instead of requiring far less efficient parsed opcodes thereby
significantly optimizing the function.

Since the function relies on isStakeScriptHash to identify a stake
tagged pay-to-script-hash, and is the only consumer of it, this also
converts that function to analyze the raw script and renames it to
isStakeScriptHashScript for more consistent naming.

Finally, the tests are updated accordingly.

The following is a before and after comparison of analyzing a large
script:

benchmark                        old ns/op    new ns/op    delta
-------------------------------------------------------------------
BenchmarkIsAnyKindOfScriptHash   101249       3.83         -100.00%

benchmark                        old allocs   new allocs   delta
-------------------------------------------------------------------
BenchmarkIsAnyKindOfScriptHash   1            0            -100.00%

benchmark                        old bytes    new bytes    delta
-------------------------------------------------------------------
BenchmarkIsAnyKindOfScriptHash   466944       0            -100.00%
2019-03-26 14:51:08 -05:00
..
data txscript: Add remove signature reference test. 2019-02-14 14:10:12 -06:00
bench_test.go txscript: Optimize isAnyKindOfScriptHash. 2019-03-26 14:51:08 -05:00
consensus_test.go multi: Break coinbase dep on standardness rules. 2018-05-08 12:49:40 -05:00
consensus.go txscript: Significantly improve errors. 2018-07-01 15:04:59 -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: Optimize isAnyKindOfScriptHash. 2019-03-26 14:51:08 -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: Optimize isAnyKindOfScriptHash. 2019-03-26 14:51:08 -05:00
script.go txscript: Optimize isAnyKindOfScriptHash. 2019-03-26 14:51:08 -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 stake-tagged script hash. 2019-03-26 14:51:06 -05:00
standard.go txscript: Optimize IsMultisigSigScript. 2019-03-26 14:51:04 -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.