Wrapper for blocksec2go allowing easy hardware-based signing of Ethereum transactions
Project description
Blocksec2Go-Ethereum
This repository contains the source code of blocksec2go-ethereum Python package which wraps the blocksec2go package to allow easier interaction with Ethereum blockchain.
Read more about rationale behind this package on our blog post
If you're unsure what Blockchain Security 2 Go is, you can find more info here.
Installation
pip install blocksec2go-ethereum
Usage
After creating an instance of Blocksec2Go you can use it to generate signatures for transaction dicts. When passed raw tx, sign_transaction() will return a hex string of RLP-encoded signed transaction that can be directly consumed by web3.eth.sendRawTransaction().
The replay attack protection introduced with EIP-155 is used by default. Set chain_id=None to force the legacy behaviour for backward compatibility.
Transfer Ether
Below you will find an example of signing a simple Ether transfer:
from blocksec2go_ethereum import Blocksec2GoSigner
from web3 import Web3
WEB3_ENDPOINT = 'YOUR_ENDPOINT_HERE'
web3 = Web3(Web3.HTTPProvider(WEB3_ENDPOINT))
chain_id = web3.eth.chainId
signer = Blocksec2GoSigner(chain_id=chain_id, key_id=1)
address = signer.get_address()
nonce = web3.eth.getTransactionCount(address)
raw_tx = {
'to': '0xBaBC446aee039E99d624058b0875E519190C6758',
'nonce': nonce,
'value': Web3.toWei(0.00005, 'ether'),
'gas': 21000,
'gasPrice': Web3.toWei(5, 'gwei'),
}
signed_tx = signer.sign_transaction(raw_tx)
tx_hash = web3.eth.sendRawTransaction(signed_tx)
print(f'Sent transaction with hash: {tx_hash.hex()}')
Call a contract function
You can also sign any contract calls/creation transactions by leveraging buildTransaction().
Please note that for some contracts buildTransaction() may require explicitly setting from field to properly estimate gas.
import json
from blocksec2go_ethereum import Blocksec2GoSigner
from web3 import Web3
WEB3_ENDPOINT = 'YOUR_ENDPOINT_HERE'
web3 = Web3(Web3.HTTPProvider(WEB3_ENDPOINT))
chain_id = web3.eth.chainId
signer = Blocksec2GoSigner(chain_id=chain_id, key_id=1)
address = signer.get_address()
with open('artifact.json', 'r') as artifact_file:
artifact = json.loads(artifact_file.read())
contract = web3.eth.contract(address=artifact['address'], abi=artifact['abi'])
nonce = web3.eth.getTransactionCount(address)
raw_tx = contract.functions.setValue(42).buildTransaction({'nonce': nonce, 'from': address})
signed_tx = signer.sign_transaction(raw_tx)
tx_hash = web3.eth.sendRawTransaction(signed_tx)
print(f'Sent transaction with hash: {tx_hash.hex()}')
License
ISC © 2020 rexs.io
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blocksec2go-ethereum-0.2.0.tar.gz.
File metadata
- Download URL: blocksec2go-ethereum-0.2.0.tar.gz
- Upload date:
- Size: 5.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.23.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c383af182a53771192428414f85ee8877adb8a80b2adcad5eadf0eb8619c32a1
|
|
| MD5 |
cf2e001afdf824d163ace44bdd0d1823
|
|
| BLAKE2b-256 |
497f4d5c1c940f5bc77c81d585f78ca78a41841e7e2412404e435290ae44ac39
|
File details
Details for the file blocksec2go_ethereum-0.2.0-py3-none-any.whl.
File metadata
- Download URL: blocksec2go_ethereum-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.23.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.56.2 CPython/3.9.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a7bb388d4c4dda7a920e5f9f45aa11e64e857948f75f5c8acc499c146c01296
|
|
| MD5 |
25913b3b9caf6d1385c015396e8e47a0
|
|
| BLAKE2b-256 |
981f62e9f34f75d5f04a8d84a6b49d62a8994023b6626deccaa2de243d670745
|