txvm

module
v0.0.0-...-ff6bfbe Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2019 License: Apache-2.0

README

TxVM

This repository contains the source code for TxVM and related components of the Chain Protocol. It also contains command line tools for creating, manipulating, and evaluating TxVM programs, transactions, blocks, and blockchains.

TxVM is a new model for blockchain transactions. TxVM seeks to achieve the expressiveness and flexibility of an imperative contract model such as Ethereum's while maintaining the efficiency, safety, and scalability of a declarative transaction model such as Bitcoin's.

Installation

You’ll need Go version 1.11 or later. Depending on the version of Go you’re using, and where you choose to put your copy of the TxVM code, you may need to set the environment variable GO111MODULE to on. Details here.

Run the following command:

go get github.com/chain/txvm/...

Testing

go test -race -cover github.com/chain/txvm/...

Usage

In TxVM, each transaction is a single program, whose execution produces a log of desired (and authorized) effects to be applied to the blockchain state.

Here's the bytecode for an example transaction:

> BIGTXPROGRAM=90025f2e7fda5ddf057de3cf8db186e619915b88f37f797a9be1a5a79195533741f8bec4a201542e012e5f2e0f2e7f00000000000000000000000000000000000000000000000000000000000000002e5f2e65c4e3bda5a42c202eb3012d512709412d522d012a30010241522d2d2d2d51042b2d51052b035458332d3c37012a2e8c01012a552d51025303212a5900032a51005013410253052a2d003b022a21012a0122210118224152032a5040524244484348432d2d00325f2e5f2e012a0a322e7fc9a0c09b8c39ce445a7225e4f8c418392a9a0e94fa8eb6a911afcad13c4b26b501542e012e9f012d2d2d2d3c2d3c95012d3c37012a2e8c01012a552d51025303212a5900032a51005013410253052a2d003b022a21012a0122210118224152032a50405242444748435f2e5f2e2e7f84efd963fd680e38c8255f0c00542aa6a9d791b5fbb4fe2b9d6829bedef0e2b001542e022e9f012d2d2d2d3c2d3c95012d3c37012a2e8c01012a552d51025303212a5900032a51005013410253052a2d003b022a21012a0122210118224152032a50405242444748430065c4e3bda5a42c204d5f3c3f9f01981af94a30116a08c0d26c10ec545f8eddb0cee5a6d78f31da0a73cf0c80c3b7d3cdda88b7eb022c341277dd54dd96cfd04fcf0bcea2d16dd0f2d62b37b814092e83013e7f26ff39366e4a29b97c604f757e0783e652686cb6053e51961aba2f61e07b14a750402e43

To inspect the assembly language for this transaction, you can pass it to the disassembler, asm -d:

> echo $BIGTXPROGRAM | hex -d | asm -d

To compute its transaction log:

> echo $BIGTXPROGRAM | hex -d | tx log

For more on the commands txvm makes available, you can check out the documentation.

Contributing

Chain has adopted the code of conduct defined by the Contributor Covenant. It can be read in full here.

Contributors must have signed the Contributor License Agreement.

License

The code in this repository is licensed under version 2.0 of the Apache License.

Directories

Path Synopsis
cmd
asm
Command asm assembles and disassembles Usage: asm [-d] <program By default, asm assembles a binary code from a TxVM assembly language.
Command asm assembles and disassembles Usage: asm [-d] <program By default, asm assembles a binary code from a TxVM assembly language.
assetid
Command assetid produces an asset ID from an initial contract program and an optional asset tag (default empty).
Command assetid produces an asset ID from an initial contract program and an optional asset tag (default empty).
bcstate
Command bcstate reads and writes blockchain state, optionally applying a block.
Command bcstate reads and writes blockchain state, optionally applying a block.
block
Command block parses Chain protocol blocks and performs various operations on them.
Command block parses Chain protocol blocks and performs various operations on them.
ed25519
Command ed25519 creates and manipulates ed25519 public and private keys.
Command ed25519 creates and manipulates ed25519 public and private keys.
hex
Command hex encodes to or from hexadecimal.
Command hex encodes to or from hexadecimal.
tx
Command tx parses and operates on Chain protocol transactions and performs various operations on them.
Command tx parses and operates on Chain protocol transactions and performs various operations on them.
vmhash
Command vmhash computes the vmhash of some input and a given "function name." Usage: vmhash funcname <input Example: $ echo "" | vmhash 'tag' | hex 5eb2259cfc1552b797f4cf5dc1e7cb5c6891fe5255e314c2041697bca25b14a5
Command vmhash computes the vmhash of some input and a given "function name." Usage: vmhash funcname <input Example: $ echo "" | vmhash 'tag' | hex 5eb2259cfc1552b797f4cf5dc1e7cb5c6891fe5255e314c2041697bca25b14a5
crypto
ed25519
Package ed25519 implements the Ed25519 signature algorithm.
Package ed25519 implements the Ed25519 signature algorithm.
sha3
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202.
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202.
sha3pool
Package sha3pool is a freelist for SHA3-256 hash objects.
Package sha3pool is a freelist for SHA3-256 hash objects.
encoding
Package errors implements a basic error wrapping pattern, so that errors can be annotated with additional information without losing the original error.
Package errors implements a basic error wrapping pattern, so that errors can be annotated with additional information without losing the original error.
log
Package log implements a standard convention for structured logging.
Package log implements a standard convention for structured logging.
rotation
Package rotation writes and rotates log files.
Package rotation writes and rotates log files.
splunk
Package splunk sends log data to a splunk server.
Package splunk sends log data to a splunk server.
math
checked
Package checked implements basic arithmetic operations with underflow and overflow checks.
Package checked implements basic arithmetic operations with underflow and overflow checks.
Package protocol provides the logic to tie together storage and validation for a Chain Protocol blockchain.
Package protocol provides the logic to tie together storage and validation for a Chain Protocol blockchain.
bc
Package bc is a generated protocol buffer package.
Package bc is a generated protocol buffer package.
merkle
Package merkle implements merkle binary trees.
Package merkle implements merkle binary trees.
patricia
Package patricia computes the Merkle Patricia Tree Hash of a set of bit strings, as described in the Chain Protocol spec.
Package patricia computes the Merkle Patricia Tree Hash of a set of bit strings, as described in the Chain Protocol spec.
prottest
Package prottest provides utilities for Chain Protocol testing.
Package prottest provides utilities for Chain Protocol testing.
prottest/memstore
Package memstore is a protocol.Store implementation that keeps all blockchain state in memory.
Package memstore is a protocol.Store implementation that keeps all blockchain state in memory.
state
Package state is a generated protocol buffer package.
Package state is a generated protocol buffer package.
txbuilder/standard
Package standard implements standard txvm contracts for Sequence transactions.
Package standard implements standard txvm contracts for Sequence transactions.
txvm
Package txvm implements Chain Protocol transactions.
Package txvm implements Chain Protocol transactions.
txvm/asm
Package asm provides an assembler and disassembler for txvm bytecode.
Package asm provides an assembler and disassembler for txvm bytecode.
txvm/op
Package op assigns human-readable names to numeric opcodes.
Package op assigns human-readable names to numeric opcodes.
txvm/txvmutil
Package txvmutil defines a "fluent" builder type for constructing TxVM programs.
Package txvmutil defines a "fluent" builder type for constructing TxVM programs.
validation
Package validation implements the block-validation algorithms from the Chain Protocol spec.
Package validation implements the block-validation algorithms from the Chain Protocol spec.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL