這篇文章主要介紹一個python開發eos智能合約的通用平台pyeos。pyeos是基于EOSIO發展的自主式通用智能合約平台。目前github上116個star。
建構PyEos
下載下傳源代碼
git clone https://www.github.com/learnforpractice/pyeos
cd pyeos
git submodule update --init --recursive
安裝依賴(Ubuntu)
sudo apt-get install libleveldb-dev
sudo apt-get install libreadline-dev
安裝依賴(Centos)
sudo yum install leveldb-devel
sudo yum install readline-devel
sudo yum install libffi-devel
安裝依賴(macOS)
brew install leveldb
brew install readline
安裝JDK 10或更高版本(可選)
對于想要嘗試
Java Smart Contract
的使用者,請将JDK更新到10或更高版本,然後将
JAVA_HOME
導出到JDK安裝目錄的根目錄。
export JAVA_HOME = <jdk目錄>
如果你安裝了較早的JDK并且JAVA_HOME不為空并且你不想嘗試Java智能合約,請在建構之前使用以下指令清空
JAVA_HOME
:
export JAVA_HOME =
Building
./eosio_build.sh
智能合約開發
Python智能合約開發
運作PyEos
打開終端,cd到
[PROJECT_DIR]/build/program
目錄,運作以下指令:
./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
如果這是你第一次啟動PyEos,PyEos會為你建立一個測試錢包,放在
data-dir/mywallet.wallet
中,然後console将列印錢包密碼,如下所示:
wallet password:PW5JWE5g6RZ7Fyr2kmCphDqZo4uivdeGpUpndgFZ52rsduhtf9PRJ
由于它僅用于測試,是以密碼将儲存到
data-dir/data.pkl
,是以下次啟動pyeos進行測試時,pyeos将為你解鎖錢包。
另外PyEos會将三個私鑰導入錢包,這對測試非常有用。
‘5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3’,
‘5JEcwbckBCdmji5j8ZoMHLEUS8TqQiqBG1DRx1X9DN124GUok9s’,
‘5JbDP55GXN7MLcNYKCnJtfKi9aD2HvHAdY7g8m67zFTAFkY1uBB’
請記住,永遠不應在真實帳戶中使用這些私鑰,否則你可能會丢失帳戶中的所有加密屬性。
除此之外,PyEos将為你建立四個重要帳戶:
eosio.bios,eosio.msig,eosio.system,eosio.token
并在testnet上釋出他們的智能合約。
雖然上述步驟在現實世界中永遠不會發生,但它确實為測試智能合約提供了極大的便利。進而節省了大量寶貴的時間,提高了開發效率。
使用sketch工具生成源代碼
在PyEos控制台中運作以下指令,
sketch.create('hello','helloworld','py')
這将在你目前目錄下建立一個helloworld目錄,其中hello作為測試帳戶名稱。目錄中生成了三個檔案:
helloworld.py
helloworld.abi
t.py
哪個helloworld.py是Python智能合約源代碼,helloworld.abi是用于智能合約的ABI(應用程式二進制接口)檔案,t.py包含用于測試智能合約的代碼。
此外,sketch還可以為你建立一個wasm智能合約項目,隻需在PyEos控制台中鍵入以下代碼,測試過程與Python智能合約沒有差別。
sketch.create('helloworld','helloworld','cpp')
測試
現在是時候運作你的helloworld智能合約程式了。在PyEos控制台中鍵入或複制以下指令:
from helloworld import t
t.test()
你将在控制台上以綠色字顯示以下輸出:
3289633ms thread-1 mpeoslib.cpp:63 print ] hello,world
恭喜,你已經成功運作了第一個Python智能合約。
現在你可以打開helloworld.py進行編碼。完成後,再次運作
t.test()
,不需要運作其他指令來釋出測試智能合約,如果在
t.test
運作期間更改了智能合約,智能合約将自動重新釋出到
testnet()
。你還可以在t.py中編輯測試代碼以測試智能合約。一旦完成,隻需再次運作
t.test()
,就不需要運作`reload(t),PyEos會為你magic。這也适用于在測試中添加新功能的情況。
以太坊智能合約開發
請參閱pyeos/programs/pyeos/tests/evm/evm中的示例。
Lua智能合約開發
請參閱pyeos/programs/pyeos/tests/lua/hello中的示例。
Java智能合約開發
請參閱pyeos/programs/pyeos/tests/java/hello中的示例。
提醒:對于想要嘗試Java Smart Contract的使用者,請将JDK更新到10或更高版本,然後将JAVA_HOME設定為相應的JDK根目錄。
使用C++智能合約進行調試
在Eos上,C++ Smart Contract代碼被編譯為WebAssembly位元組碼,這使得調試C++ Smart Contract受到影響。幸運的是,現在它能夠将C++ Smart Contract編譯為共享庫,這使得調試C++ Smart Contract就像調試普通的C++項目一樣簡單。
有一個簡短的視訊,可以用梯子看看。
簡而言之,以下是有關調試C++智能合約的步驟:
- 1.在Visual Studio Code中打開pyeos項目
- 2.在eosio_build.sh中編輯CMAKE_BUILD_TYPE和BUILD_DIR
BUILD_DIR="${PWD}/build-debug"
CMAKE_BUILD_TYPE=Debug
- 3.在VSC終端中建構pyeos
./eosio_build.sh
- 4.在Visual Studio代碼中配置調試
{
"name": "(lldb) Attach pyeos",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/build-debug/programs/pyeos/pyeos",
"processId": "${command:pickProcess}",
"MIMode": "lldb"
}
- 5.啟動pyeos
./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
- 6.連接配接到pyeos
- 7.建立C++ Smart Contract測試代碼。
sketch.create('hello', 'helloworld', 'cpp')
- 8.在測試代碼中設定斷點。
- 9.測試
from helloworld import t
t.debug()
Python智能合約調試
有一個關于Python Smart Contract的簡短視訊,可以快速入門(需要梯子)。
以下步驟說明如何在programs/pyeos/contracts/hello下調試智能合約
- 1.啟動PyEos
./pyeos/pyeos --manual-gen-block --debug -i --contracts-console
- 2.設定調試合約
debug.set_debug_contract('hello','../../program/pyeos/contratcts/hello/hello.py')
- 3.啟動ptvsd調試器
import ptvsd
ptvsd.enable_attach("12345",address =('127.0.0.1',3000))
ptvsd.wait_for_attach()
-
4.在Visual Studio代碼中附加到ptvsd調試器
這是調試設定:
{
"name": "python Attach (Remote Debug)",
"type": "python",
"request": "attach",
"localRoot": "${workspaceFolder}",
"remoteRoot": "${workspaceFolder}",
"port": 3000,
"secret": "12345",
"host": "localhost"
},
- 5.在hello.py中設定斷點
- 6.調試
from hello import t
t.test()
好好享受!
======================================================================
分享一些比特币、以太坊、EOS等區塊鍊相關的互動式線上程式設計實戰教程:
- EOS入門教程,本課程幫助你快速入門EOS區塊鍊去中心化應用的開發,内容涵蓋EOS工具鍊、賬戶與錢包、發行代币、智能合約開發與部署、使用代碼與智能合約互動等核心知識點,最後綜合運用各知識點完成一個便簽DApp的開發。
- 深入淺出玩轉EOS錢包開發,本課程以手機EOS錢包的完整開發過程為主線,深入學習EOS區塊鍊應用開發,課程内容即涵蓋賬戶、計算資源、智能合約、動作與交易等EOS區塊鍊的核心概念,同時也講解如何使用eosjs和eosjs-ecc開發包通路EOS區塊鍊,以及如何在React前端應用中內建對EOS區塊鍊的支援。課程内容深入淺出,非常适合前端工程師深入學習EOS區塊鍊應用開發。
- java比特币開發教程,本課程面向初學者,内容即涵蓋比特币的核心概念,例如區塊鍊存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Java代碼中內建比特币支援功能,例如建立位址、管理錢包、構造裸交易等,是Java工程師不可多得的比特币開發學習課程。
- php比特币開發教程,本課程面向初學者,内容即涵蓋比特币的核心概念,例如區塊鍊存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在Php代碼中內建比特币支援功能,例如建立位址、管理錢包、構造裸交易等,是Php工程師不可多得的比特币開發學習課程。
- c#比特币開發教程,本課程面向初學者,内容即涵蓋比特币的核心概念,例如區塊鍊存儲、去中心化共識機制、密鑰與腳本、交易與UTXO等,同時也詳細講解如何在C#代碼中內建比特币支援功能,例如建立位址、管理錢包、構造裸交易等,是C#工程師不可多得的比特币開發學習課程。
- java以太坊開發教程,主要是針對java和android程式員進行區塊鍊以太坊開發的web3j詳解。
- python以太坊,主要是針對python工程師使用web3.py進行區塊鍊以太坊開發的詳解。
- php以太坊,主要是介紹使用php進行智能合約開發互動,進行賬号建立、交易、轉賬、代币開發以及過濾器和交易等内容。
- 以太坊入門教程,主要介紹智能合約與dapp應用開發,适合入門。
- 以太坊開發進階教程,主要是介紹使用node.js、mongodb、區塊鍊、ipfs實作去中心化電商DApp實戰,适合進階。
- ERC721以太坊通證明戰,課程以一個數字藝術品創作與分享DApp的實戰開發為主線,深入講解以太坊非同質化通證的概念、标準與開發方案。内容包含ERC-721标準的自主實作,講解OpenZeppelin合約代碼庫二次開發,實戰項目采用Truffle,IPFS,實作了通證以及去中心化的通證交易所。
- C#以太坊,主要講解如何使用C#開發基于.Net的以太坊應用,包括賬戶管理、狀态與交易、智能合約開發與互動、過濾器和交易等。
- Hyperledger Fabric 區塊鍊開發詳解,本課程面向初學者,内容即包含Hyperledger Fabric的身份證書與MSP服務、權限政策、通道配置與啟動、鍊碼通信接口等核心概念,也包含Fabric網絡設計、nodejs鍊碼與應用開發的操作實踐,是Nodejs工程師學習Fabric區塊鍊開發的最佳選擇。
- Hyperledger Fabric java 區塊鍊開發詳解,課程面向初學者,内容即包含Hyperledger Fabric的身份證書與MSP服務、權限政策、頻道配置與啟動、鍊碼通信接口等核心概念,也包含Fabric網絡設計、java鍊碼與應用開發的操作實踐,是java工程師學習Fabric區塊鍊開發的最佳選擇。
- tendermint區塊鍊開發詳解,本課程适合希望使用tendermint進行區塊鍊開發的工程師,課程内容即包括tendermint應用開發模型中的核心概念,例如ABCI接口、默克爾樹、多版本狀态庫等,也包括代币發行等豐富的實操代碼,是go語言工程師快速入門區塊鍊開發的最佳選擇。
彙智網原創翻譯,轉載請标明出處。這裡是python開發eos智能合約通用平台