溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何利用Python在本地開發(fā)Neo智能合約?

發(fā)布時間:2022-01-06 20:19:09 來源:億速云 閱讀:168 作者:柒染 欄目:互聯(lián)網(wǎng)科技

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)如何利用Python在本地開發(fā)Neo智能合約?,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們將使用neo-local項目為本地開發(fā)和測試Neo智能合約設(shè)置私有鏈。 使用私有鏈可以使我們能夠完全控制我們的環(huán)境,使我們能夠獨立工作而不用與外部測試網(wǎng)絡(luò)打交道。

為了更好地理解文檔的內(nèi)容,你需要使用類Unix的終端和某種文本編輯器。我將在虛擬機中操作,并使用nano進行文本編輯:

  • Ubuntu 18.04(最小安裝)

  • 4GB RAM

  • 50GB磁盤

請注意,你可能需要至少20GB的磁盤空間來存儲你的私有鏈。

Docker,Docker Compose和neo-local

Neo-local項目需要運行在Docker上,因此首先要做的事情就是安裝好Docker。 Docker是一個容器引擎,可以運行預(yù)先配置的設(shè)置,這正是neo-local使用它的原因。我們將使用Docker 社區(qū)版(Docker CE)。

安裝Docker

你可以在Docker文檔中找到所選操作系統(tǒng)的詳細安裝說明。以下是幾種常見操作系統(tǒng)的安裝文檔鏈接:

  • Windows

  • MacOS

  • Ubuntu (Linux的安裝后步驟-也看看這些內(nèi)容遵循這些)

安裝Docker 組件

我們還需要Docker 組件。對于Windows和MacOS系統(tǒng),它應(yīng)該已經(jīng)包含在上一步安裝的軟件包中了。 Linux用戶需要按照文檔的組件安裝部分進行操作。確保已經(jīng)按照指南中的說明查看了GitHub版本頁面,保證下載的是最新的版本- 不要只是復(fù)制/粘貼命令而不檢查。

測試Docker

就像快速測試一樣,你現(xiàn)在應(yīng)該能夠運行下面的這些命令(以’$’開頭的行)并查看相應(yīng)的輸出:

$ docker --version
Docker version 18.06.0-ce, build 0ffa825
$ docker-compose --version
docker-compose version 1.22.0, build f46880fe

你的版本號可能與我的版本號不完全匹配,只要保證運行的是最新版本,就可以了。

如果安裝后的步驟有效,Linux用戶也應(yīng)該能夠在沒有sudo權(quán)限的情況下運行’hello-world’ docker容器。 請注意,如果你收到某種“拒絕權(quán)限”錯誤,則可能需要重新啟動計算機:

$ docker run hello-world
設(shè)置neo-local

最后,我們需要通過克隆倉庫代碼并安裝預(yù)配置的錢包文件來設(shè)置neo-local,以便我們可以在我們的私人網(wǎng)絡(luò)上使用GAS。

在終端中,導(dǎo)航到與NEO存儲相關(guān)的文件目錄下,然后克隆倉庫。 對于那些不熟悉git的人來說,這個操作將創(chuàng)建一個名為“neo-local”的目錄,里面包含有我們需要的文件。 導(dǎo)航到neo-local目錄。

$ git clone https://github.com/CityOfZion/neo-local.git
$ cd neo-local

這里的大多數(shù)文件都與neo-local項目本身有關(guān),我們不用對它們進行任何修改。 我們只會在設(shè)置過程中處理wallets/目錄。 一旦我們啟動并運行,我們的大多數(shù)文件都將保存在smart-contracts /目錄中。

我們將使用的錢包文件不太容易找到。 你可以在Docker NEO私有鏈中心頁面上找到它,或者只是點擊這個鏈接中獲取它。 將下載好的錢包文件放在neo-local項目倉庫的wallets /目錄中。 作為參考,這個錢包的密碼是coz。

啟用neo-local堆棧

在不同的操作系統(tǒng)之間啟動堆棧的方法略有不同。 這兩組命令都會讓你進入neo-python命令行界面(CLI)。

Windows (wiki)
$ docker-compose up -d --build --remove-orphans
$ docker exec -it neo-python np-prompt -p -v
MacOs (wiki和 Linux (wiki)

安裝make命令,如果你還沒安裝的話:

$ sudo apt install make

啟用堆棧

$ make start
打開錢包

使用智能合約之前的最后一個設(shè)置步驟是打開我們之前復(fù)制的錢包。 Docker設(shè)置在根目錄下掛載wallets /目錄,因此我們的錢包位于/wallets/neo-privnet.wallet路徑下。 neo-python中的help命令將顯示所有可能的命令列表。 我們正在查找的命令是open wallet {path},輸入這個命令后會提示你輸入錢包的密碼(coz)。 整個過程應(yīng)該如下所示:

neo> open wallet /wallets/neo-privnet.wallet
[password]> ***
Opened wallet at /wallets/neo-privnet.wallet
neo>

基本的智能合約

由于neo-local堆棧使用neo-python,我們將使用Python語言編寫一個基本的智能合約。 在smart-contracts /目錄中創(chuàng)建文件plus_one.py并添加以下代碼:

def Main(num):
  return num + 1;

如你所見,合約接受一個數(shù)字作為輸入并返回該數(shù)字加1后的值。 就像wallets /目錄一樣,smart-contracts /也掛載在根目錄上,因此合約的路徑是/smart-contracts/plus_one.py。

Neo智能合約在NeoVM(Neo虛擬機)上運行,而且必須首先轉(zhuǎn)換為字節(jié)碼,這類似于Java,轉(zhuǎn)為字節(jié)碼后才能部署它們。 neo-python中的build {path}命令可以為我們執(zhí)行此操作,提供.py文件作為輸入?yún)?shù),然后輸出生成的.avm文件。 但是,這個文件本身并沒有給我們帶來太多好處。 我們將要從這個命令的變形build..test命令開始:

neo> build /smart-contracts/plus_one.py test 02 02 False False False 5

在我們獲取輸出文件之前將這個命令拆開來看看。 命令的完整簽名是:

neo> build {path/to/file.py} test {param_types} {return_type} {needs_storage} {needs_dynamic_invoke} {is_payable} [params]

文件的路徑是相當不言自明的。 但是,類型是按照 ContractParameterType頁面中的形式提供的,其中參數(shù)和返回類型均表示為單個字節(jié):

TypeByte
Signature00
Signature01
Integer02
Hash26003
Hash35604
ByteArray05
PublicKey06
String07
Array10
InteropInterfaceF0
Voidff

在我們的例子中,合約采用integer (整數(shù))(02)并返回一個integer(02)。 接下來的三個參數(shù)是在合約上設(shè)置的屬性,我們現(xiàn)在不會考慮這些。 最后一個參數(shù)是填寫實際調(diào)用合同的時使用的數(shù)據(jù)。 在neo-python提示符下運行此命令應(yīng)輸出如下內(nèi)容:

neo> build /smart-contracts/plus_one.py test 02 02 False False False 5
[I 180909 22:53:38 BuildNRun:50] Saved output to /smart-contracts/plus_one.avm
[I 180909 22:53:38 Invoke:586] Used 0.021 Gas

-----------------------------------------------------------
Calling /smart-contracts/plus_one.py with arguments ['5']
Test deploy invoke successful
Used total of 19 operations
Result [{'type': 'Integer', 'value': 6}]
Invoke TX gas cost: 0.0001
-------------------------------------------------------------

neo>

第一個輸出行是確認字節(jié)碼是否已構(gòu)建完成以及它所保存的位置。 輸出的其余部分描述了合約的設(shè)置和結(jié)果。 我們用值“5”調(diào)用它,調(diào)用成功了,我們收到返回結(jié)果是整數(shù)’6’。 看起來我們的合約生效了!

部署智能合約

最后,一旦我們構(gòu)建并測試了我們的智能合約,我們就需要將其部署到網(wǎng)絡(luò)中。 這實際上是一個相當簡單的過程,我們只需要使用import contract命令。

neo> import contract /smart-contracts/plus_one.avm 02 02 False False False

系統(tǒng)將提示你填寫一些字段,例如合同名稱和版本,作者姓名和電子郵件等。填寫完成后,將打印輸出一些有關(guān)合同的元數(shù)據(jù)信息,同時系統(tǒng)將提示你輸入錢包密碼。 輸入密碼后將開始部署合同并向你收取必要數(shù)量的GAS。 由于這是一個私人網(wǎng)絡(luò),你應(yīng)該可以繼續(xù)部署 – 測試錢包種有很多可以使用的GAS。

部署完成后,從打印的元數(shù)據(jù)中獲取“哈?!辈⑦\行testinvoke命令(替換為你自己的合約哈希):

testinvoke 0x2b46bfe08185fbda2cb8121d6a2fd1a1d228c586 8

你應(yīng)該看到預(yù)期結(jié)果的輸出:

----------------------------------------------------------------
Test invoke successful
Total operations: 19
Results [{'type': 'Integer', 'value': '9'}]
Invoke TX GAS cost: 0.0
Invoke TX fee: 0.0001
----------------------------------------------------------------

如果你收到消息提示說找不到合約,那么你可能需要等待一兩分鐘,等你的合約能被一個區(qū)塊挖礦后才能調(diào)用它。 再次提醒,這將是一個本地調(diào)用,并且輸入你的密碼可以在網(wǎng)絡(luò)上運行真實的合約,這個過程中向你收取GAS費用。

上述就是小編為大家分享的如何利用Python在本地開發(fā)Neo智能合約?了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI