天天看點

python開發eos智能合約通用平台

這篇文章主要介紹一個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智能合約通用平台