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.5.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.5-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.5-cp314-cp314-win_amd64.whl (834.8 kB view details)

Uploaded CPython 3.14Windows x86-64

tx_engine-0.7.5-cp314-cp314-win32.whl (756.7 kB view details)

Uploaded CPython 3.14Windows x86

tx_engine-0.7.5-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.5-cp314-cp314-macosx_11_0_arm64.whl (907.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tx_engine-0.7.5-cp314-cp314-macosx_10_12_x86_64.whl (970.0 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

tx_engine-0.7.5-cp313-cp313-win_amd64.whl (837.9 kB view details)

Uploaded CPython 3.13Windows x86-64

tx_engine-0.7.5-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.5-cp313-cp313-macosx_11_0_arm64.whl (910.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tx_engine-0.7.5-cp313-cp313-macosx_10_12_x86_64.whl (973.1 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

tx_engine-0.7.5-cp312-cp312-win_amd64.whl (837.6 kB view details)

Uploaded CPython 3.12Windows x86-64

tx_engine-0.7.5-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.5-cp312-cp312-macosx_11_0_arm64.whl (909.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tx_engine-0.7.5-cp312-cp312-macosx_10_12_x86_64.whl (973.0 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

tx_engine-0.7.5-cp311-cp311-win_amd64.whl (839.3 kB view details)

Uploaded CPython 3.11Windows x86-64

tx_engine-0.7.5-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.5-cp311-cp311-macosx_11_0_arm64.whl (912.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tx_engine-0.7.5-cp311-cp311-macosx_10_12_x86_64.whl (976.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: tx_engine-0.7.5.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.5.tar.gz
Algorithm Hash digest
SHA256 82a6e2e6a115f09661bcbb1598dd02ae159ac74b7e268a725755ea9999075f7f
MD5 0eb8f78560111a71c6d086bbd1bb6933
BLAKE2b-256 c4a98a411378e387adc8d91fd51eb426f96eb2d4ba1186ec2afcfc5835c664c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e04c4776df6dc4d8839d34fe588471f0384b16aebdc3c2f602a2327853117cf3
MD5 accf7dd3e65f0973642d0addd6d419ff
BLAKE2b-256 e512446a4fe98cd5f997b8fab6e432065f8e57bf9eb449ffaf5bb497f010e232

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 74e060e93fc3816f2fe0cdfbea9a4f153e618da87f6f77015d7e138c56beaa8d
MD5 2b59e2884ecdaa0054839580f077b953
BLAKE2b-256 505bbcf4616f646cde94df15644ab017a772693f87e7e228a099e6531a793761

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tx_engine-0.7.5-cp314-cp314-win32.whl
  • Upload date:
  • Size: 756.7 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.5-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 f0ab02697c40c882b9ebff46cda4fd860c086493bf5f4d355e806260922f74fc
MD5 21d0608dd28f9a314a5f674885868962
BLAKE2b-256 da53b598a41e6080bfe00120ef58b1f02ca2bdfe406e63447cb3b29bec055229

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c61fa1478cab8d89bad6a41aab589236103bc310be6977154c71f70403090809
MD5 f5cc5863fb3fb100e182e618aea1bfc8
BLAKE2b-256 942c28469369fec9531de880a9392f439b0de9ae700c55d774e486e4a343144f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 40e383bb43e55deb81b209bdc72cb8fe095331385f151168bf3417696ef61d65
MD5 ab0d26e41e2ff965f267279beee138bf
BLAKE2b-256 780587031d369b75ff973199f6947db4c5ba7a3128f7ce778f309379fb8f9d30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 96c7408a1f9b306d4b3a9ee593daec02903c06130e7a91cdfa8c639557a05a0f
MD5 283916f817df0ec889aadeedee53c800
BLAKE2b-256 327701d827c8dddc45492cef1e3391bf066a48baa9f9d8ce6e0a41c470757af5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 24308a96c006202b4bcdcae7968e0cfd2a6ddfd96ee7ab998d1525a67aa783f9
MD5 675e947ae9c277fb4f57843be3eadfac
BLAKE2b-256 4a8ecfeac08ff70a9919da4762c67708cead3defe002df0291a83d454af7ecdc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2293b1c4b489dd4dc4ee2fb237b11b7ed363f466352e792ff1156308d60b1585
MD5 d0234a421f8e4dae2b4e2d12e238ce45
BLAKE2b-256 dfef6489c21e549cf86cf99e244fd7ce2e4322b2dd261f2f2c5894471e80604a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b33ee892e2567cda9177ea14dc266bbf2e066d5dbb13404c88bce1031e44052
MD5 0968174b27c229af9144862d95031bbd
BLAKE2b-256 6b30125166e1373ab388f73292589bb951c729eedb733565dd741490b4ac61e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 71466b8e6b73b1c10539ac24f54e6571411f814600503902db8691a469d8c22c
MD5 a56a77df2a446fdc1624522e69d69abd
BLAKE2b-256 71651fd92abd98f326b384800dde92a35f069a1c3d65979e05bd410aafbd20bf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 78a0c75194ed816eb475f8a833c0d8c6b89b1447b1a8571dd7e5784ee9d20c6a
MD5 58aa5b65427132b7cc9f690528e597b3
BLAKE2b-256 772e3b359121723eb3712df4d3a842c5a8f291d6d60d31e669cb43279f4b4e8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f51b43ab39b7b9a2665d6df2f750dd10b51884de7ef4f7a02b59d347fe7bd0d
MD5 9868ae94522fd414e6f825d83196e17a
BLAKE2b-256 0be2e912716fbaa46fc175933f4bdd2dea5b59ba63e7d622e5bc92a8b45ef83c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 670c0d1c5581f523cb3ab0f04e5f42b37a7c536e1d955d2b9e748a70f33be6b1
MD5 d3cbf655fa85aabda073bf0ddfea147b
BLAKE2b-256 f94a54da4f5581c1efa860adae8db55c4b7a80007c26d6f77b9c02c47ab661ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bd4275bd2b91e848bfa792556e72336573526347033378dfb8a138b1cf020b93
MD5 e2b2b1c1a919e2df90b738a083839374
BLAKE2b-256 f3f4e02da47007cd98ed6d5780bed6a57cd9d21f2707228f9cba630dff01c1dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cd605cbfba885d52aaa8cbcf5567624257c6a7068998c8c0c20134e4ceddb344
MD5 435816d079f2b73d788ddd15558bb3b4
BLAKE2b-256 2cb3fc14d13a78e1ad8102bc1b3709ef3493e3a321e28858c327e7e4263b9e19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 94387666e5e250646d84bfd149d1e64818c77149b4b3b87b63867c10ff954e2b
MD5 aac5fd15433b3b77aa00a7e4b7fdb461
BLAKE2b-256 08bb60bbf069e5ce971819320b9fa336bab6ab667d90a7c9754d3c8ae1cdb9f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 322a8ef6a2e0490e9e3b3562a9ed03f7c0bcfbd173dd5860f5c3f7470ec03ce9
MD5 55404b2c00c0c8fa265cce624a38f3dc
BLAKE2b-256 75266697bf5c97bb65ca7923a2cbb833a2fb568bef08356aa70cbf6c7ca2fcf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tx_engine-0.7.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 03a353faffb16885573c319f6e9ab15228b2e384814a6e9b7c86a83f4ec44ec4
MD5 4b342af0f4eb9b061a82b4965beec859
BLAKE2b-256 3054a51ba480f5f3748d65b254f75915d3e750a4d7c48b7ac6b91b3440a700f1

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