Skip to main content

This library provides a Python interface for building BitcoinSV scripts and transactions.

Project description

TX Engine

This library provides a Python interface for building BitcoinSV scripts and transactions.

For documentation of the Python Classes see below.

Python Installation

As this library is hosted on PyPi (https://pypi.org/project/tx-engine/) and is installed using:

pip install tx-engine

Example Tx class usage

So to parse a hex string to Tx:

from tx_engine import Tx

src_tx = "0100000001c7151ebaf14dbfe922bd90700a7580f6db7d5a1b898ce79cb9ce459e17f12909000000006b4830450221008b001e8d8110804ac66e467cd2452f468cba4a2a1d90d59679fe5075d24e5f5302206eb04e79214c09913fad1e3c0c2498be7f457ed63323ac6f2d9a38d53586a58d41210395deb00349c0ae73412a55bec70a7793fc6860a193d29dd61d73c6271ffcbd4cffffffff0103000000000000001976a91496795fb99fd6c0f214f7a0e96019f642225f52d288ac00000000"

tx = tx.parse_hexstr(src_tx)
print(tx)

> PyTx { version: 1, tx_ins: [PyTxIn { prev_tx: "0929f1179e45ceb99ce78c891b5a7ddbf680750a7090bd22e9bf4df1ba1e15c7", prev_index: 0, sequence: 4294967295, script_sig: [0x48 0x30450221008b001e8d8110804ac66e467cd2452f468cba4a2a1d90d59679fe5075d24e5f5302206eb04e79214c09913fad1e3c0c2498be7f457ed63323ac6f2d9a38d53586a58d41 0x21 0x0395deb00349c0ae73412a55bec70a7793fc6860a193d29dd61d73c6271ffcbd4c] }], tx_outs: [PyTxOut { amount: 3, script_pubkey: [OP_DUP OP_HASH160 0x14 0x96795fb99fd6c0f214f7a0e96019f642225f52d2 OP_EQUALVERIFY OP_CHECKSIG] }], locktime: 0 }

Overview of the tx-engine Classes

The tx-engine provides the following classes:

tx-engine classes

Python Classes

This provides an overview of the Python Classes their properties and methods, including:

Script

The Script class represents bitcoin script. For more details about bitcoin script see https://wiki.bitcoinsv.io/index.php/Script.

Script has the following property:

  • cmds - byte arrary of bitcoin operations

Script has the following methods:

  • __init__(self, cmds: bytes=[]) -> Script - Constructor that takes an array of bytes
  • append_byte(self, byte: byte) - Appends a single opcode or data byte
  • append_data(self, data: bytes) - Appends data (without OP_PUSHDATA)
  • append_pushdata(self, data: bytes) - Appends the opcodes and provided data that push it onto the stack
  • raw_serialize(self) -> bytes - Return the serialised script without the length prepended
  • serialize(self) -> bytes - Return the serialised script with the length prepended
  • get_commands(self) -> bytes - Return a copy of the commands in this script
  • __add__(self, other: Script) -> Script - Enable script addition e.g. c_script = a_script + b_script
  • to_string(self) -> String - return the script as a string, that can be parsed by parse_string(). Note also that you can just print the script (print(script))
  • is_p2pkh(self) -> bool - returns True if script is a Pay to Public Key Hash script
  • append_integer(self, i64) - adds an integer to the stack (assumes base 10)
  • append_big_integer(self, arbitrary_sized_integer) - adds an arbitrary sized integer to the stack (assumes base 10)

Script has the following class methods:

  • Script.parse_string(in_string: str) -> Script - Converts a string of OP_CODES into a Script
  • Script.parse(in_bytes: bytes) -> Script - Converts an array of bytes into a Script

Stack

The 'Stack' python class provides the python user direct access to the Stack structures used by the intepreter

Stack has the following methods:

  • __init__(self, items: List[List[bytes]]) -> Stack - Constructor that takes a List of List of bytes
  • push_bytes_integer(self, List[bytes]) - push a arbitrary number in bytes onto the stack
  • decode_element(self, index: option<Int>) - returns the item at stack location index. Assumption is its an arbitrary sized number
  • size(self) - returns the size of the stack
  • __getitem__(self, index: int) - allows array subscript syntax e.g. stack[i]
  • __eq__(&self, other: Stack) - allows an equality test on Stack objects

Context

The context is the environment in which bitcoin scripts are executed.

Context has the following properties:

  • cmds - the commands to execute
  • ip_start - the byte offset of where to start executing the script from (optional)
  • ip_limit - the number of commands to execute before stopping (optional)
  • z - the hash of the transaction
  • stack - main data stack
  • alt_stack - seconary stack

Context has the following methods:

  • __init__(self, script: Script, cmds: Commands = None, ip_limit: int , z: bytes) - constructor
  • evaluate_core(self, quiet: bool = False) -> bool - evaluates the script/cmds using the the interpreter and returns the stacks (tack, alt_stack). if quiet is true, dont print exceptions
  • evaluate(self, quiet: bool = False) -> bool - executes the script and decode stack elements to numbers (stack, alt_stack). Checks stack is true on return. if quiet is true, dont print exceptions.
  • get_stack(self) -> Stack - Return the stack as human readable
  • get_altstack(self) -> Stack- Return the alt_stack as human readable
  • set_ip_start(self, start: int) - sets the start location for the intepreter.
  • set_ip_limit(self, limit: int) - sets the end location for the intepreter

Example from unit tests of using evaluate_core and raw_stack:

script = Script([OP_PUSHDATA1, 0x01, b"\x85", OP_4, OP_NUM2BIN])
context_py_stack = Context_PyStack(script=script)
self.assertTrue(context_py_stack.evaluate_core())
self.assertEqual(context_py_stack.get_stack(), Stack([[0x85, 0x00, 0x00, 0x00]]))

script1 = Script.parse_string('19 1 0 0 1 OP_DEPTH OP_1SUB OP_PICK 0x13 OP_EQUALVERIFY OP_ROT OP_ADD OP_TOALTSTACK OP_ADD OP_DEPTH OP_1SUB OP_ROLL OP_TUCK OP_MOD OP_OVER OP_ADD OP_OVER OP_MOD OP_FROMALTSTACK OP_ROT OP_TUCK OP_MOD OP_OVER OP_ADD OP_SWAP OP_MOD 1 OP_EQUALVERIFY 1 OP_EQUAL')
context_py_stack = Context_PyStack(script=script1)
self.assertTrue(context_py_stack.evaluate_core())
self.assertEqual(context_py_stack.get_stack(), Stack([[1]])

script = Script([OP_1, OP_2, OP_3, OP_4, OP_5, OP_6, OP_2ROT])
context_py_stack = Context_PyStack(script=script)
self.assertTrue(context_py_stack.evaluate())
self.assertEqual(context_py_stack.get_stack(), Stack([[3], [4], [5], [6], [1], [2]]))

Quiet Evalutation

Both evaluate and evaluate_core have a parameter quiet. If the quiet parameter is set to True the evaluate function does not print out exceptions when executing code. This quiet parameter is currently only used in unit tests.

Tx

Tx represents a bitcoin transaction.

Tx has the following properties:

  • version - unsigned integer
  • tx_ins - array of TxIn classes,
  • tx_outs - array of TxOut classes
  • locktime - unsigned integer

Tx has the following methods:

  • __init__(version: int, tx_ins: [TxIn], tx_outs: [TxOut], locktime: int=0) -> Tx - Constructor that takes the fields
  • id(self) -> str - Return human-readable hexadecimal of the transaction hash
  • hash(self) -> bytes - Return transaction hash as bytes
  • is_coinbase(self) -> bool - Returns true if it is a coinbase transaction
  • serialize(self) -> bytes - Returns Tx as bytes
  • to_hexstr(self) -> str - Returns Tx as hex string
  • copy(self) -> Tx - Returns a copy of the Tx
  • to_string(self) -> String - return the Tx as a string. Note also that you can just print the tx (print(tx)).
  • validate(self, [Tx]) -> Result - provide the input txs, returns None on success and throws a RuntimeError exception on failure. Note can not validate coinbase or pre-genesis transactions.

Tx has the following class methods:

  • Tx.parse(in_bytes: bytes) -> Tx - Parse bytes to produce Tx
  • Tx.parse_hexstr(in_hexstr: String) -> Tx - Parse hex string to produce Tx

So to parse a hex string to Tx:

from tx_engine import Tx

src_tx = "0100000001c7151ebaf14dbfe922bd90700a7580f6db7d5a1b898ce79cb9ce459e17f12909000000006b4830450221008b001e8d8110804ac66e467cd2452f468cba4a2a1d90d59679fe5075d24e5f5302206eb04e79214c09913fad1e3c0c2498be7f457ed63323ac6f2d9a38d53586a58d41210395deb00349c0ae73412a55bec70a7793fc6860a193d29dd61d73c6271ffcbd4cffffffff0103000000000000001976a91496795fb99fd6c0f214f7a0e96019f642225f52d288ac00000000"

tx = tx.parse_hexstr(src_tx)
print(tx)

PyTx { version: 1, tx_ins: [PyTxIn { prev_tx: "0929f1179e45ceb99ce78c891b5a7ddbf680750a7090bd22e9bf4df1ba1e15c7", prev_index: 0, sequence: 4294967295, script_sig: [0x48 0x30450221008b001e8d8110804ac66e467cd2452f468cba4a2a1d90d59679fe5075d24e5f5302206eb04e79214c09913fad1e3c0c2498be7f457ed63323ac6f2d9a38d53586a58d41 0x21 0x0395deb00349c0ae73412a55bec70a7793fc6860a193d29dd61d73c6271ffcbd4c] }], tx_outs: [PyTxOut { amount: 3, script_pubkey: [OP_DUP OP_HASH160 0x14 0x96795fb99fd6c0f214f7a0e96019f642225f52d2 OP_EQUALVERIFY OP_CHECKSIG] }], locktime: 0 }

TxIn

TxIn represents is a bitcoin transaction input.

TxIn has the following properties:

  • prev_tx - Transaction Id as hex string
  • prev_index - unsigned int
  • script_sig - Script
  • sequence - int

TxIn has the following constructor method:

  • __init__(prev_tx: String, prev_index: int, script_sig: Script=[], sequence: int=0xFFFFFFFF) -> TxIn - Constructor that takes the fields

Note txin can be printed using the standard print, for example:

print(txin)
PyTxIn { prev_tx: "5c866b70189008586a4951d144df93dcca4d3a1b701e3786566f819450eca9ba", prev_index: 0, sequence: 4294967295, script_sig: [] }

TxOut

TxOut represents a bitcoin transaction output.

TxOut has the following properties:

  • amount - int
  • script_pubkey - Script

TxOut has the following constructor method:

  • __init__(amount: int, script_pubkey: Script) -> TxOut - Constructor that takes the fields

Note txin can be printed using the standard print, for example:

print(txout)
PyTxOut { amount: 100, script_pubkey: [OP_DUP OP_HASH160 0x14 0x10375cfe32b917cd24ca1038f824cd00f7391859 OP_EQUALVERIFY OP_CHECKSIG] }

Wallet

This class represents the Wallet functionality, including handling of private and public keys and signing transactions.

Wallet class has the following methods:

  • __init__(wif_key: str) -> Wallet - Constructor that takes a private key in WIF format

  • sign_tx(self, index: int, input_tx: Tx, tx: Tx) -> Tx - Sign a transaction input with the provided previous tx and sighash flags, Returns new signed tx

  • sign_tx_sighash(self, index: int, input_tx: Tx, tx: Tx, sighash_type: int) -> Tx - Sign a transaction input with the provided previous tx and sighash flags, Returns new signed tx

  • sign_tx_sighash_flags_checksig_index(self, index: int, input_tx: Tx, tx: Tx, sighash_type: int, checksig_index: int) -> Tx - as sign_tx_sighash with checksig_index

  • get_locking_script(self) -> Script - Returns a locking script based on the public key

  • get_public_key_as_hexstr(self) -> String - Return the public key as a hex string

  • get_address(self) -> String - Return the address based on the public key

  • to_wif(self) -> String - Return the private key in WIF format

  • get_network(self) -> String - Returns the current network associated with this keypair

  • to_int(self) -> Integer - Returns the scaler value of the private key as a python integer

  • to_hex(self) -> String - Returns the scaler value of the private key as a string in hex format

  • Wallet.generate_keypair(network) -> Wallet - Given network (BSV_Testnet) return a keypair in Wallet format

  • Wallet.from_hexstr(network, hexstr) -> Wallet - Given a network identifier and scalar value as a hex string, return a keypair in Wallet format

  • Wallet.from_bytes(network, bytes) -> Wallet - Given a network identifier and a scalar value as a byte array, return a keypair in Wallet format

  • Wallet.from_int(network, integer) -> Wallet - Given a network identifier and a scaler value as an integer, return a keypair in Wallet format

The library provides some additional helper functions to handle keys in different formats.

  • wif_to_bytes(wif: string) -> bytes - Given a key in WIF format, it returns a byte array of the scalar value of the private key
  • bytes_to_wif(key_bytes, network) -> String - Given a byte array and a network identifier, returns the WIF format for the private key
  • wif_from_pw_nonce(password, nonce, optional<network>) -> WIF - Given a password, nonce (strings) return a WIF format for the private key. The default for the network is BSV_Mainnet. For a testnet format, please use BSv_Testnet
  • create_wallet_from_pem_file -> Wallet - Given a path to PEM format file, return a keypair in Wallet format
  • create_pem_from_wallet -> String - Given a Wallet, returns a PEM (pkcs8) formatted string of the private key

Bitcoin Keys

Interface Factory

The InterfaceFactory is class for creating interfaces to the BSV blockchain (BlockchainInterface).

The InterfaceFactory class one method:

  • set_config(self, config: ConfigType) -> BlockchainInterface - This reads the configuration interface_type field and returns the configured BlockchainInterface

Blockchain Interface

The BlockchainInterface class provides an interface to the BSV network.

BlockchainInterface class has the following methods:

  • __init__(self) - Constructor that takes no parameters
  • set_config(self, config) - configures the interface based on the provide config
  • get_addr_history(self, address) - Return the transaction history with this address
  • is_testnet(self) -> bool - Return true if this interface is connected to BSV Testnet
  • get_utxo(self, address) - Return the utxo associated with this address
  • get_balance(self, address) - Return the balance associated with this address
  • get_block_count(self) - Return the height of the chain
  • get_best_block_hash(self) - Return the hash of the latest block
  • get_merkle_proof(self, block_hash: str, tx_id: str) -> str - Given the block hash and tx_id return the merkle proof
  • get_transaction(self, txid: str) - Return the transaction (as Dictionary) associated with this txid
  • get_raw_transaction(self, txid: str) -> Optional[str] - Return the transaction (as kexstring) associated with this txid, use cached copy if available.
  • broadcast_tx(self, transaction: str) - broadcast this tx to the network
  • get_block(self, blockhash: str) -> Dict - Return the block given the block hash
  • get_block_header(self, blockhash: str) -> Dict - Returns te block_header for a given block hash

WoC Interface

The WoCInterface is a BlockchainInterface that communicates with the WhatsOnChain API. Note that if you are using this you will need to install the python library requests.

Mock Interface

The Mock Interface is a BlockchainInterface that is used for unit testing.

RPC Interface

The RPC Interface is a BlockchainInterface that is used for connecting to the RPC interface of mining nodes.

SIGHASH Functions

  • sig_hash(tx: Tx, index: int, script_pubkey: Script, satoshi: int, sighash_flags: int) - Return the transaction digest/hash
  • sig_hash_preimage(tx: Tx, index: int, script_pubkey: Script, satoshi: int, sighash_flags: int) - Return the transaction data prior to the hash function

For multiple OP_CHECKSIG in script:

  • sig_hash_checksig_index(tx: Tx, index: int, script_pubkey: Script, checksig_index:int, satoshi: int, sighash_flags: int) - Return the transaction digest/hash
  • sig_hash_preimage_checksig_index(tx: Tx, index: int, script_pubkey: Script, checksig_index: int, satoshi: int, sighash_flags: int) - Return the transaction data prior to the hash function

Given:

  • tx - Spending transaction
  • index - Spending input index
  • script_pubkey - The lock_script of the output being spent
  • checksig_index - The index of the OP_CHECKSIG to be used for the hash (if more than one)
  • satoshis - The satoshi amount in the output being spent
  • sighash_flags - Sighash flags

Note the sighash flags can be obtained from the SIGHASH class which supports the following flags:

    ALL
    NONE
    SINGLE
    ANYONECANPAY
    FORKID
    ALL_FORKID = ALL | FORKID
    NONE_FORKID = NONE | FORKID
    SINGLE_FORKID = SINGLE | FORKID
    ALL_ANYONECANPAY_FORKID = ALL_FORKID | ANYONECANPAY
    NONE_ANYONECANPAY_FORKID = NONE_FORKID | ANYONECANPAY
    SINGLE_ANYONECANPAY_FORKID = SINGLE_FORKID | ANYONECANPAY

For further details see https://wiki.bitcoinsv.io/index.php/SIGHASH_flags

Example usage:

sig_hash_value = sig_hash(own_tx, 0, script_pubkey, 99904, SIGHASH.ALL_FORKID)

Other Functions

These are public key and address functions that are likely to be used if you don't have the private key and are not using the Wallet class.

  • address_to_public_key_hash(address: str) -> bytes - Given the address return the hash160 of the public key
  • hash160(data: bytes) -> bytes - Returns the hash160 of the provided data (usually the public key)
  • p2pkh_script(h160: bytes) -> Script - Takes the hash160 of the public key and returns the locking script
  • public_key_to_address(public_key: bytes, network: str) -> String - Given the public key and the network (either BSV_Mainnet or BSV_Testnet) return the address

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tx_engine-0.7.4.tar.gz (443.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tx_engine-0.7.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

tx_engine-0.7.4-cp314-cp314-win_amd64.whl (835.5 kB view details)

Uploaded CPython 3.14Windows x86-64

tx_engine-0.7.4-cp314-cp314-win32.whl (757.2 kB view details)

Uploaded CPython 3.14Windows x86

tx_engine-0.7.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

tx_engine-0.7.4-cp314-cp314-macosx_11_0_arm64.whl (918.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tx_engine-0.7.4-cp314-cp314-macosx_10_12_x86_64.whl (970.4 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

tx_engine-0.7.4-cp313-cp313-win_amd64.whl (838.3 kB view details)

Uploaded CPython 3.13Windows x86-64

tx_engine-0.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

tx_engine-0.7.4-cp313-cp313-macosx_11_0_arm64.whl (920.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tx_engine-0.7.4-cp313-cp313-macosx_10_12_x86_64.whl (973.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

tx_engine-0.7.4-cp312-cp312-win_amd64.whl (838.2 kB view details)

Uploaded CPython 3.12Windows x86-64

tx_engine-0.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

tx_engine-0.7.4-cp312-cp312-macosx_11_0_arm64.whl (920.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tx_engine-0.7.4-cp312-cp312-macosx_10_12_x86_64.whl (973.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

tx_engine-0.7.4-cp311-cp311-win_amd64.whl (840.0 kB view details)

Uploaded CPython 3.11Windows x86-64

tx_engine-0.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

tx_engine-0.7.4-cp311-cp311-macosx_11_0_arm64.whl (922.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tx_engine-0.7.4-cp311-cp311-macosx_10_12_x86_64.whl (976.8 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

Details for the file tx_engine-0.7.4.tar.gz.

File metadata

  • Download URL: tx_engine-0.7.4.tar.gz
  • Upload date:
  • Size: 443.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for tx_engine-0.7.4.tar.gz
Algorithm Hash digest
SHA256 338420973b86650c7f06845a96c4149ee875b38e0aa0444d964a1fb748a3bfee
MD5 74be67a1dd08cee4b2937fde98b72f46
BLAKE2b-256 9452739eacc417c07a3b67464dc58891a31079ac481acff5bf85f8abe6569ebd

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3678ee48e840615f1f1066c18fa6b3f3d24e99689f6a47cb7368dc225808514e
MD5 b89083492e459dd549b8746ca881d0f3
BLAKE2b-256 4577e35e1f673c7aac5bd3505364eaa767f75d500afee318514f64b1f999ecee

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5c172e045e30857b07fef32746a5b9a72873701324ecfa2b2b66a777fa0cc012
MD5 81c5a885be2ca34721c6b1181d6d82e9
BLAKE2b-256 636469410fdccb4caf49e0b2506491d8e1f13ae739f33747e4b6f4cc24aefa56

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp314-cp314-win32.whl.

File metadata

  • Download URL: tx_engine-0.7.4-cp314-cp314-win32.whl
  • Upload date:
  • Size: 757.2 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.9.6

File hashes

Hashes for tx_engine-0.7.4-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 6f9ad61bd3c9b8f6385355bbf3755af7521ec9e81cb721024accaf006154e576
MD5 ffaba4b3576282ac4a53b080ee23b69a
BLAKE2b-256 bfa90e60ae5034b6736909a220aa46c3f7b92911e193401ad51c2696df74cc17

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 785ec3f9250b995d0ad5d6d13da37964c57ffa98bd55ea0428e7124b9a9572f3
MD5 aaf6cf061c52a438e4f7528a7ab8eeb4
BLAKE2b-256 2e72f33e450d5be320cd6bc485d0abc5fc7bef22221ec9898814110500f0165b

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87d7072eae25a8ed232ea556b17431efdac4782d3ef1b20f5d9767f8a3f60428
MD5 7e3a8ddee3dfe48110ccf0569b114454
BLAKE2b-256 f46a6f814065794ca6cb6d3ec7c5d93f5bfcf1a107d9bdc75a0651dbe626b9e5

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3906a9c31a17463521104d8cb9036feb88869329e5a4493639759ec83a81f953
MD5 2a3f8f0372680b175df601264464ea78
BLAKE2b-256 a765b87ab9bd89dae847d5f16adb9031d627ecd8b021280342ba2b4457f01dfb

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 24d7184627292c328a5ee90c6732bca642659027b4f6caae998777a2aab768a6
MD5 7c22e102bb177046a49551c521b36c6f
BLAKE2b-256 38db8ed0dd92563005e5c5a6cb026199e3693e5038c38cd517956a4fe1dc2f37

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 23fcaff71c8dac93425cde92c196c2a4eca77f74b7043950614698631a11004c
MD5 2d77390f2044257c12caba75e4801ade
BLAKE2b-256 1bcfaa524b2c51fd460ff0756b43a378461a83359caaee599736eb312cadacad

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cc550c31546cc3abf26eacbd92a1e663f2772c821361bc98abcdd292d0ed60d
MD5 c5e4c5814afb6feb376fbb29ed2aac30
BLAKE2b-256 d6b83a489e9bbaa7a82f6a9e0b48796e50588cf8008a53a494196ec30c6985d2

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 be25d8cd302d7c9a9563928103e98b910cf78fbe3d2b06105a7fd83a2928dd85
MD5 18198700500fd7ab09d9c578767b26b9
BLAKE2b-256 9cafea896f616d494b798dac3102fbe25f6efea7d8845820206df9d6f7aa4b84

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9370a8b49378f5c6fc5129ca11dc2367597e85ec06901caf0cd9ecc9b5fc9271
MD5 a3ee094af8e0cc78970d8c8b272b9585
BLAKE2b-256 0e6c2130be4890642f57af01fe3eb9e945063462accc89a3fbdefc117ce64b34

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e354d95a72c80c5526a852980082264569ed48da67452eba600d35228156f371
MD5 edea4712c74f33cc3415ccf20dfd075e
BLAKE2b-256 028301197b532d301179172d305f9ef7509c093d1f03b3ab5a559709ed2b152a

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4da293c99d347fbc5f588661d603a9fcfb2beaf3a3c4f2904b49cf30dea2d52
MD5 fd34961f4755d070f8da293e4c4082c3
BLAKE2b-256 6e0ca8f3aed2ffb11049f10b7783fce2f4ca35e5b02cb0f86fb896b375dc0059

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8f603517a46db52a4d511e852d25f6f8f51467d4504c57d730361252c850ffa0
MD5 417d503c68f7b8c430389096ae52eb14
BLAKE2b-256 36d4ee8c367e161732e2f45073bfe557f103094ae93e0de0c51aaebaf7eb2fe9

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0dabca2740d57c764034d4415148a756e97e2c267dee8d7d7da8170dc8053009
MD5 2b49f419ee9157a3ce0fa02cdee62d71
BLAKE2b-256 971e0ada042e9ec210d97796449ad4eb7f790654ff8867bbdd9e2be0e2a8f79d

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e128358e6d7f328ad5b0525573c618c55e88d48de21a8628f89e34ceba08a157
MD5 23ccc247f64a3f75c9c4ac4c195aab75
BLAKE2b-256 a2cb03cd5c0fe0a0d439cfe71436c43eae99c9ab0219955c3dd20739534ecf69

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ea9fed5e2e95dc21ac26ab6523de6416f812eb826283f19a67c13748af03dc14
MD5 7e6d5da24ada81af4ba5bc175e9ac489
BLAKE2b-256 5f3dba25ede73fc0ebeed2edab6e61e5db923c8e9750b23bb852eaa7153ccdc5

See more details on using hashes here.

File details

Details for the file tx_engine-0.7.4-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tx_engine-0.7.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c6baf28a766612d29300174d0e539b9d0513e0d7d81740b9bd018a6fb3c993d2
MD5 412742d2f7a0678b40b9057676b492bd
BLAKE2b-256 50a40fddd25c7e5cf147ab7bbbb2b1b9801ee212e1e8600495522bd6bc53e961

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page