GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

ethereum

web3.py – Ethereumブロックチェーンとエコシステムと対話するためのPythonインターフェイス

投稿日:

Ethereumブロックチェーンとエコシステムと対話するためのPythonインターフェイス。 http://web3py.readthedocs.io

Web3.py

Pythonのweb3.js実装

  • Python 3.5以降のサポート

ReadTheDocsドキュメントを参照してください Githubの変更ログを表示します

クイックスタート

import json
import web3

from web3 import Web3, HTTPProvider, TestRPCProvider
from solc import compile_source
from web3.contract import ConciseContract

# Solidity source code
contract_source_code = '''
pragma solidity ^0.4.0;

contract Greeter {
    string public greeting;

    function Greeter() {
        greeting = 'Hello';
    }

    function setGreeting(string _greeting) public {
        greeting = _greeting;
    }

    function greet() constant returns (string) {
        return greeting;
    }
}
'''

compiled_sol = compile_source(contract_source_code) # Compiled source code
contract_interface = compiled_sol['<stdin>:Greeter']

# web3.py instance
w3 = Web3(TestRPCProvider())

# Instantiate and deploy contract
contract = w3.eth.contract(abi=contract_interface['abi'], bytecode=contract_interface['bin'])

# Get transaction hash from deployed contract
tx_hash = contract.deploy(transaction={'from': w3.eth.accounts[0], 'gas': 410000})

# Get tx receipt to get contract address
tx_receipt = w3.eth.getTransactionReceipt(tx_hash)
contract_address = tx_receipt['contractAddress']

# Contract instance in concise mode
abi = contract_interface['abi']
contract_instance = w3.eth.contract(address=contract_address, abi=abi,ContractFactoryClass=ConciseContract)

# Getters + Setters for web3.eth.contract object
print('Contract value: {}'.format(contract_instance.greet()))
contract_instance.setGreeting('Nihao', transact={'from': w3.eth.accounts[0]})
print('Setting value to: Nihao')
print('Contract value: {}'.format(contract_instance.greet()))

開発者のセットアップ

git clone git@github.com:ethereum/web3.py.git
cd web3.py

次のOS固有の手順をご覧ください。

次に、これらのインストールコマンドを実行します。

virtualenv venv
. venv/bin/activate
pip install -e .[tester] -r requirements-dev.txt

異なる環境では、複数のvirtualenv設定できます。 たとえば、 venvdocsを作成する場合は、次の操作を行います。

virtualenv venvdocs
. venvdocs/bin/activate
pip install -r requirements-docs.txt
pip install -e .

ドッカーを使用する

Docker環境内で開発してテストしたい場合は、 docker-compose.ymlファイルに用意されているサンドボックスコンテナを使用してください。

テスト環境を起動するには、次のコマンドを実行します。

docker-compose up -d

これは、Pythonテストコードを実行する環境を設定したDockerコンテナを構築します。

注意:このコンテナにはgo-ethereumインストールされていないため、go-ethereumテストスイートを実行することはできません。

ローカルマシンからPythonテストを実行するには:

docker-compose exec sandbox bash -c 'pytest -n 4 -f -k "not goethereum"'

dockerコンテナ内で任意のコマンドを実行するには、 bash -c接頭辞を使用します。

docker-compose exec sandbox bash -c ''

または、コンテナへのセッションを開く場合は、次のコマンドを実行します。

docker-compose exec sandbox bash

セットアップのテスト

開発時には、すべてのファイル保存時にテストを実行することができます。

ファイルの変更時にflake8エラーを表示する:

# Test flake8
when-changed -v -s -r -1 web3/ tests/ ens/ -c "clear; flake8 web3 tests ens && echo 'flake8 success' || echo 'error'"

すべてのPython環境でpytest-watchを使用することができます:

pip install pytest-watch

cd venv
ptw --onfail "notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on web3.py failed'" ../tests ../web3

または、1つのコマンドでマルチプロセステストを実行できますが、カラーは使用できません。

# in the project root:
pytest --numprocesses=4 --looponfail --maxfail=1
# the same thing, succinctly:
pytest -n 4 -f --maxfail=1

テストを実行するには?

  1. 開発環境をセットアップします

  2. テストのためにtoxを実行する

テストには複数のコンポーネントがあります。 特定のコンポーネントに対してテストを実行できます。 例えば:

# Run Tests for the Core component (for Python 3.5):
tox -e py35-core

# Run Tests for the Core component (for Python 3.6):
tox -e py36-core

なんらかの理由で動作しない場合は、– --recreate paramsを追加して--recreate

toxはビルドターゲットの完全なセットに対してテストするのに適しています。 しかし、個別にテストを実行したい場合は、 py.testが開発ワークフローに適しています。 たとえば、1つのファイルでテストのみを実行するには、次のようにします。

py.test tests/core/gas-strategies/test_time_based_gas_price_strategy.py

リリース設定

Debianのようなシステムの場合:

apt install pandoc

新しいバージョンをリリースするには:

make release bump=$$VERSION_PART_TO_BUMP$$

バンプバージョンへの方法

このレポのバージョンフォーマットは、 {major}.{minor}.{patch}{major}.{minor}.{patch}-{stage}.{devnum} )。

次のバージョンをインラインで発行するには、 make release bump=minorまたはmake release bump=devnumように、バンプするパートを指定します。

あなたがベータ版であれば、 make release bump=stageは安定版に切り替わります。

現在のバージョンが安定しているときに不安定なバージョンを発行するには、 make release bump="--new-version 4.0.0-alpha.1 devnum"ように明示的に新しいバージョンを指定しますmake release bump="--new-version 4.0.0-alpha.1 devnum"







-ethereum

執筆者: