Python 的 Geth 封裝庫 PyGeth

PyGeth 是一個 Python 封裝庫,用來做爲子進程運行 gethpython

系統依賴

該庫須要 geth 可執行文件。linux

安裝

pip install py-geth複製代碼

快速啓動

運行鏈接到 mainnetgethbash

>>> from geth import LiveGethProcess
>>> geth = LiveGethProcess()
>>> geth.start()複製代碼

或者是用於測試的私人本地區塊鏈。這就要求你給他們一個名字。markdown

>>> from geth import DevGethProcess
>>> geth = DevGethProcess('testing')
>>> geth.start()複製代碼

默認狀況下,DevGethProcessgeth 使用的默認 datadir 設置測試鏈。若是要更改這些測試鏈的位置,能夠指定替代 base_dir網絡

>>> geth = DevGethProcess('testing', '/tmp/some-other-base-dir/')
>>> geth.start()複製代碼

每一個實例都有一些方便的屬性。函數

>>> geth.data_dir
"~/.ethereum"
>>> geth.rpc_port
8545
>>> geth.ipc_path
"~/.ethereum/geth.ipc"
>>> geth.accounts
['0xd3cda913deb6f67967b99d67acdfa1712c293601']
>>> geth.is_alive
False
>>> geth.is_running
False
>>> geth.is_stopped
False
>>> geth.start()
>>> geth.is_alive
True  # 表示子進程還沒有退出
>>> geth.is_running
True  # 表示調用了start(),可是沒有stop()
>>> geth.is_stopped
False
>>> geth.stop()
>>> geth.is_alive
False
>>> geth.is_running
False
>>> geth.is_stopped
True複製代碼

在測試時,能夠很好地查看 geth 進程生成的日誌記錄輸出。py-geth 提供了一個 mixin 類,可用於將 stdoutstderr 輸出記錄到日誌文件中。區塊鏈

>>> from geth import LoggingMixin, DevGethProcess
>>> class MyGeth(LoggingMixin, DevGethProcess):
...     pass
>>> geth = MyGeth()
>>> geth.start()複製代碼

全部日誌都將寫入當前目錄./logs/ 中的日誌文件。測試

底層 geth 進程可能須要額外的時間來打開 RPC 或 IPC 鏈接,以及在須要生成 DAG 時開始挖掘。你可使用如下接口來查詢這些接口是否已準備就緒。ui

>>> geth.is_rpc_ready
True
>>> geth.wait_for_rpc(timeout=30)  # 等待最多30秒,以便打開RPC鏈接。
>>> geth.is_ipc_ready
True
>>> geth.wait_for_ipc(timeout=30)  # 等待最多30秒,以便IPC套接字打開。
>>> geth.is_dag_generated
True
>>> geth.is_mining
True
>>> geth.wait_for_dag(timeout=600)  # 等待最多10分鐘,以便生成DAG。複製代碼

DAG 功能目前僅適用於 epoch 0。spa

安裝特定版本的 geth

此功能是實驗性的,可能會發生重大變化。

可使用 py-geth 在列出的平臺上安裝如下任何版本的 geth 。

  • v1.5.6 (linux/osx)
  • v1.5.7 (linux/osx)
  • v1.5.8 (linux/osx)
  • v1.5.9 (linux/osx)
  • v1.6.0 (linux/osx)
  • v1.6.1 (linux/osx)
  • v1.6.2 (linux/osx)
  • v1.6.3 (linux/osx)
  • v1.6.4 (linux/osx)
  • v1.6.5 (linux/osx)
  • v1.6.6 (linux/osx)
  • v1.6.7 (linux/osx)
  • v1.7.0 (linux/osx)
  • v1.7.2 (linux/osx)
  • v1.8.1 (linux/osx)

能夠經過命令行完成安裝:

$ python -m geth.install v0.4.12複製代碼

或者使用 install_geth 函數從 python 安裝。

>>> from geth import install_geth
>>> install_geth('v1.7.0')複製代碼

已安裝的二進制文件能夠在 $HOME/.py-geth 目錄下找到。v1.7.0 二進制文件位於 $HOME/.py-geth/geth-v1.7.0/bin/geth

python開發相關IT技術羣:887934385 複製代碼

關於 DevGethProcess

DevGethProcess 旨在促進測試。在這方面,它預先配置以下。

  • 建立一個賬戶並分配 10 億以太。
  • rpcipc 接口上都啓用了全部 API。
  • 賬戶 0 已解鎖。
  • 網絡配置爲不查找或鏈接到任何對等方。
  • 使用 1234networkid
  • 測試程度設爲 5(DEBUG)
  • 使用單個線程啓用挖掘。
  • RPC 接口嘗試綁定到 8545,但若是此端口不可用,則會找到一個開放端口。
  • DevP2P 接口嘗試綁定到 30303,但若是此端口不可用,將找到一個開放端口。

Gotchas

若是你在啓用 mining 狀況下運行(這是 DevGethProcess 默認設置,那麼你可能須要手動生成 DAG。若是不這樣作,那麼它將在你第一次運行該過程時自動生成,這須要一段時間。

要手動生成它:

$ geth makedag 0 ~/.ethash複製代碼

這在像 Travis-CI 這樣的 CI 環境中尤爲重要,在這種狀況下,你的流程可能會在生成期間超時。

開發

克隆存儲庫而後運行:

pip install -e . -r requirements-dev.txt複製代碼

運行測試

可使用如下命令運行測試:

py.test tests複製代碼

或者你能夠安裝 tox 來運行完整的測試套件。

發佈

須要 Pandoc 才能將 markdown README 轉換爲正確的格式,以便在 pypi 上正確呈現。

對於相似 Debian 的系統:

apt install pandoc複製代碼

或者在 OSX 上:

brew install pandoc複製代碼

要發佈新版本:

make release bump=$$VERSION_PART_TO_BUMP$$複製代碼

如何 bump 版本

此 repo 的版本格式爲 {major}.{minor}.{patch} 表示 stable,{major}.{minor}.{patch} {major}.{minor}.{patch}-{stage}.{devnum} 表示 unstable(stage 能夠是 alpha 或 beta)。

要在行中發佈下一個版本,請指定要 bump 的部分,例如 make release bump=minormake release bump=devnum

若是你處於測試版,則 make release bump=stage 將切換爲穩定版。

要在當前版本穩定時發出不穩定版本,請明確指定新版本,例如 make release bump="--new-version 4.0.0-alpha.1 devnum"

python開發相關IT技術羣: 887934385 
相關文章
相關標籤/搜索