dcrd/txscript
Dave Collins f2839da8d1
txscript: Optimize trace logging.
After recent optimizations, the current next biggest offender of more
allocations than would be expected revealed by profiling is due to the
trace logging closures for the scripting engine execution.

Once upon a time, there was no way to check the current logging level
with the logging infrastructure at the time and thus a logging closure
was used to defer the fairly expensive construction of the trace logging
information until it was actually invoked (meaning tracing is enabled).

However, those closures come at the cost of allocations, and since
script execution is something that happens non-stop during normal
operation, those allocations really add up, as the profiling shows.

As some point, the logging infrastructure was changed out, and it is now
possible to determine the logging level, so this updates the code to
take advantage of that and avoid the closures while still only
performing the fairly expensive construction of trace logging
information when tracing is enabled. In other words, with this change
there is zero cost (other than the conditional check, of course) when
tracing is not enabled.

Finally, this also removes the no longer necessary code related to
creating the logging closures.
2020-07-28 16:48:20 -05:00
..
data multi: Correct typos. 2019-08-16 17:37:58 -05:00
bench_test.go txscript: Add benchmark for CheckSignatureEncoding. 2020-07-12 00:58:06 -05:00
consensus_test.go txscript: Rework check pubkey encoding test. 2020-07-08 22:23:14 -05:00
consensus.go txscript: Optimize sig enc check with mod n scalar. 2020-07-12 00:58:09 -05:00
doc.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
engine_test.go txscript: Export several useful funcs for treasury. 2020-07-07 12:52:27 -05:00
engine.go txscript: Optimize trace logging. 2020-07-28 16:48:20 -05:00
error_test.go txscript: Remove deprecated code. 2020-07-08 20:05:22 -05:00
error.go txscript: Remove deprecated code. 2020-07-08 20:05:22 -05:00
example_test.go secp256k1: Make private key independent type. 2020-02-10 22:40:34 -06:00
go.mod txscript: use errors api; require go 1.13+ 2020-04-04 07:12:01 -05:00
go.sum multi: go mod tidy cleanup and run in CI. 2020-06-15 08:49:38 -05:00
log.go txscript: Optimize trace logging. 2020-07-28 16:48:20 -05:00
opcode_test.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
opcode.go txscript: Remove deprecated code. 2020-07-08 20:05:22 -05:00
README.md multi: replace godoc.org with pkg.go.dev 2020-02-18 19:35:19 -06:00
reference_test.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
script_test.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
script.go txscript: Export ExtractScriptHash. 2020-07-08 19:59:54 -05:00
scriptbuilder_test.go txscript: use errors api; require go 1.13+ 2020-04-04 07:12:01 -05:00
scriptbuilder.go txscript: Export script num type and constructor. 2020-07-08 19:59:49 -05:00
scriptnum_test.go txscript: Export MathOpCodeMaxScriptNumLen. 2020-07-08 19:59:52 -05:00
scriptnum.go txscript: Export CsvMaxScriptNumLen. 2020-07-08 19:59:53 -05:00
sigcache_test.go secp256k1/ecdsa: Decouple ECDSA from secp256k1. 2020-03-28 13:32:04 -05:00
sigcache.go txscript: Check equality via secp256k1 methods. 2020-07-27 21:30:54 -05:00
sighash_test.go txscript: Decouple and optimize sighash calc. 2018-05-01 08:51:41 -05:00
sighash.go multi: Correct typos. 2019-08-16 17:37:58 -05:00
sign_test.go schnorr: Remove unused GenerateKey. 2020-03-20 14:01:08 -05:00
sign.go schnorr: Use specialized types when signing. 2020-04-06 16:37:39 -05:00
stack_test.go txscript: Optimize alt stack drop. 2020-07-28 16:44:34 -05:00
stack.go txscript: Optimize alt stack drop. 2020-07-28 16:44:34 -05:00
standard_test.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
standard.go txscript: Export ExtractScriptHash. 2020-07-08 19:59:54 -05:00
tokenizer_test.go txscript: Add support for errors.Is/As. 2020-05-26 21:50:17 -05:00
tokenizer.go multi: remove whitespace 2019-11-21 18:31:30 -06:00

txscript

Build Status ISC License Doc

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.