FISCO-BCOS也有一個Python"區塊鏈盒子"--即拆即用的區塊鏈框架

FISCO-BCOS也有一個Python"區塊鏈盒子"–即拆即用的區塊鏈框架

前言

爲什麼想做這樣一個工具?

一開始我是一個python開發者,看到區塊鏈那麼火熱,我也想通過python去了解區塊鏈。通過19年開源年會我參加了FISCO-BCOS社區,在課餘時間慢慢的琢磨FISCO-BCOS/python-sdk項目。在配置環境的時候,我耗費了蠻多的時間,我常想爲什麼不能把這個框架封裝成一個docker鏡像,這樣也方便搭建“工作臺” 就像Minecraft的工作臺一樣,有了這樣的想法,我利用課餘的時間着手去編寫Dockerfile

我還是一名flask開發者,由於初出茅廬,我很想通過review別人code實現快速上手,於是我把搭建好的docker鏡像分享給周圍的同學先讓他們去體驗,利用這種“即拆即用”的特性,使得我在分享的過程中,不會因爲環境配置難而勸退一些同學,反響很好👌。大家就像Minecraft裏的Steve一樣,放下工作臺就可以製造出一堆有用的工具出來。

### 這個工具是什麼,優化了什麼

相當於給python-sdk項目裝成了一個包裹。將一個大房子整理成一個旅遊房車,減少部署時間( 不用一分鐘就能獲得鏡像 ),方便快速上手使用( 無需關注環境配置問題,降低上手門檻 ),快速入門/開發,便於自動化運維。你可以嘗試將這個服務和JenKins結合,進一步優化你的運維過程。

那下面就由我來向大家介紹一下FISCO-BCOS和這個盒子的故事。

FISCO-BCOS

FISCO BCOS開源社區是國內活躍的開源社區,社區長期爲機構和個人開發者提供各類支持與幫助。已有來自各行業的數千名技術愛好者在研究和使用FISCO BCOS。如您對FISCO BCOS開源技術及應用感興趣,歡迎加入社區獲得更多支持與幫助。


Python-sdk是什麼

Python-sdk是由FISCO-BCOS開源用於python開發的區塊鏈框架

既然是通過python編寫開發,我相信它的活力肯定會越來越旺盛。python-sdk十分方便"小作坊"開發區塊鏈應用,因爲python的閱讀難度低,特別方便學生通過python-sdk這個項目瞭解區塊鏈的概念和構成。

環境要求

  • Python環境:python 3.6.3, 3.7.x
  • FISCO BCOS節點:請參考FISCO BCOS安裝搭建

Python"區塊鏈盒子"

這個盒子的"優點"

即拆即用

你可以把這個盒子當成你進行python區塊鏈開發的工作臺,一個現拆現用的工具箱,而且十分整潔的環境,重點是他很 ,所以我會把它理解爲Minecraft裏的工作臺 ---- “即拆即用”的工作臺

只要你有一臺計算機,那就可以隨時隨地的放下並打開這個工具箱,創造前安裝工具箱的過程也變成享受。

安全可靠

社區的朋友把FISCO BCOS區塊鏈框架形容成一架"一體兩翼多引擎"的飛機。

我們的”盒子“則可以被形容成這架飛機的航空母艦。

我們把航空母艦已經準備好了(fiscoorg/playground:python_sdk),直接下水就可以了😄。

只需一行代碼你就能獲得這艘航空母艦,上手直接研究開發,不必過多關注環境配置的繁雜,能節省大量時間,解放雙手。

  1. 獲得速度快/上手簡單

  2. 安全可靠

  3. 整潔,純淨的環境(髒了就換)

  4. 自動化部署/運維

    下面我們就介紹一下如何獲得這個"盒子/航空母艦"

運行這個"盒子"

說了那麼多那到底怎麼獲得這個盒子呢?你可以通過

docker run -it -p 20200:20200 --name python_sdk fiscoorg/playground:python_sdk

來獲得這個區塊鏈盒子。

當你進入容器後,首先需要啓動結點,啓動結點後就可以“食用”了

ps: 請不要使用sh

bash /root/fisco/nodes/127.0.0.1/start_all.sh

/python_sdk中進行調試

tips: console.py 添加了 tab自動補全

# 查看SDK使用方法
./console.py usage

# 獲取節點版本
./console.py getNodeVersion

bash-5.0# ./console.py getNodeVersion

INFO >> user input : [‘getNodeVersion’]

INFO >> getNodeVersion
​ >> {
​ “Build Time”: “20190923 13:22:09”,
​ “Build Type”: “Linux/clang/Release”,
​ “Chain Id”: “1”,
​ “FISCO-BCOS Version”: “2.1.0”,
​ “Git Branch”: “HEAD”,
​ “Git Commit Hash”: “cb68124d4fbf3df563a57dfff5f0c6eedc1419cc”,
​ “Supported Version”: “2.1.0”
}

這就成功了,前前後後,也就是相當於在幾秒內我們就搭建裏一個開源的區塊鏈框架

你可以把自己的合約放到**/python-sdk/contracts **中

更多關於python-sdk的使用方法可以參考python-sdk的開源地址 FISCO-BCOS/python-sdk

Python開發示例

我認爲這種即拆即食的Python"區塊鏈盒子"對於要使用python來開發區塊鏈應用或者學習區塊鏈的同學十分有幫助。你可以通過調用/python-sdk/client中的函數復現 ./console.py命令行功能。

我會用Python-Flask開發作爲例子,實現調用HelloWorld合約的功能。

step1 進入容器

docker run -it -p 20200:20200 -p 80:80 --name flask_web fiscoorg/playground:python_sdk

step2 啓動節點

bash /root/fisco/nodes/127.0.0.1/start_all.sh

step3 部署HelloWorld合約

/python-sdk/contract 下存放了HelloWorld.sol,可以直接使用這個合約進行測試

首先查看HelloWorld.sol合約的內容

pragma solidity ^0.4.24;

contract HelloWorld{
    string name;

    constructor() public{
       name = "Hello, World!";
    }

    function get() constant public returns(string){
        return name;
    }

    function set(string n) public{
        name = n;
    }
}

我們就知道可以通過get接口返回字符串name的值,通過set更新name的值。如果你有Solidity編程基礎你可以自己定製合約內容。

部署HelloWorld合約

$ ./console.py deploy HelloWorld save 

INFO >> user input : ['deploy', 'HelloWorld', 'save']

backup [contracts/HelloWorld.abi] to [contracts/HelloWorld.abi.20190807102912]
backup [contracts/HelloWorld.bin] to [contracts/HelloWorld.bin.20190807102912]
INFO >> compile with solc compiler
deploy result  for [HelloWorld] is:
 {
    "blockHash": "0x3912605dde5f7358fee40a85a8b97ba6493848eae7766a8c317beecafb2e279d",
    "blockNumber": "0x1",
    "contractAddress": "0x2d1c577e41809453c50e7e5c3f57d06f3cdd90ce",
    "from": "0x95198b93705e394a916579e048c8a32ddfb900f7",
    "gasUsed": "0x44ab3",
    "input": "0x6080604052...省略若干行...c6f2c20576f726c642100000000000000000000000000",
    "logs": [],
    "logsBloom": "0x000...省略若干行...0000",
    "output": "0x",
    "status": "0x0",
    "to": "0x0000000000000000000000000000000000000000",
    "transactionHash": "0xb291e9ca38b53c897340256b851764fa68a86f2a53cb14b2ecdcc332e850bb91",
    "transactionIndex": "0x0"
}
on block : 1,address: 0x2d1c577e41809453c50e7e5c3f57d06f3cdd90ce 
address save to file:  bin/contract.ini

通過部署HelloWorld合約,我們即得到了HelloWord合約部署的地址。我們需要通過這個地址調用函數接口

step4 在/python-sdk文件夾下編輯app.py

vi app.py
# -*- coding:utf-8 -*-
from client.common import transaction_common
from flask import Flask, request 
from jinja2 import escape

app = Flask(__name__)

tx_client = transaction_common.TransactionCommon("0x2d1c577e41809453c50e7e5c3f57d06f3cdd90ce","contracts","HelloWorld")
# tx_client = transaction_common.Transaction_Common("地址","合約路徑","合約名稱")

@app.route('/')
def index():
    '''
    調用get接口,獲得HelloWorld的字符串
    '''
    new_str = request.args.get('new_str')
    # 通過new_str的值更新HelloWorld的字符串
    if new_str:
        tx_client.send_transaction_getReceipt("set",(new_str,))
        # 若new_str不爲空則更新字符串
    return escape(str(tx_client.call_and_decode("get")))

if __name__  == '__main__':            
    app.run(host="0.0.0.0", port=80) 

step5 安裝app.py依賴/運行程序

pip install flask
python app.py

這樣就通過python-flask框架實現了調用HelloWorld合約–通過調用get接口查看字符串,調用set接口更新字符串。

而且我認爲FISCO-BCOS/python_sdk項目十分適合我們學生黨去研究和了解區塊鏈技術。所以我十分期待有更多的同學參與其中,藉助FISCO-BCOS/python-sdk搭建出更多有趣好玩的開源項目。

有望優化

  1. 現在每次啓動一個容器都需要手動啓動容器。啓動節點的條件是–>機器暴露所需端口,默認是20200, 8045, 30300。後期可能會對默認啓動節點的功能進行優化😄

  2. 考慮數據卷的添加

  3. 優化容器大小,使fiscoorg/playground:python_sdk更精緻

或許你也有非常不錯的idea和優化的見解,十分歡迎來提交pr


Dockerfile

FROM python:3.7-alpine

LABEL 99kies [email protected] https://github.com/99kies

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
    apk update && \
    apk add --no-cache git gcc g++ python python-dev py-pip mysql-dev openssl bash linux-headers libffi-dev openssl-dev curl wget && \
    bash && \
    export PATH=/root/.local/bin/:$PATH && \
    cd ~ && mkdir -p fisco && cd fisco && \
    curl -Ls https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master/tools/get_buildchain.sh > get_buildchain.sh && chmod u+x get_buildchain.sh && \
    bash get_buildchain.sh && chmod u+x build_chain.sh && \
    bash build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545 && \
    cd / && \
    git clone https://github.com/FISCO-BCOS/python-sdk && \
    cd python-sdk && \
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --user && \
    bash init_env.sh -i && \
    cp ~/fisco/nodes/127.0.0.1/sdk/* bin/ && \
    ln -s /root/.local/bin/register-python-argcomplete /bin/register-python-argcomplete && \
    echo "eval \"\$(register-python-argcomplete ./console.py)\"" >> ~/.bashrc && \
    rm /var/cache/apk/*

WORKDIR /python-sdk

EXPOSE 20200 30300 8545

CMD ["bash"]

項目地址: FISCO-BCOS/python-sdk

如何提交pr/進行貢獻

  1. fork一份到自己的庫中

  2. 修改你覺得有必要優化的地方

  3. 創建一個新pr(這個過程會對比你庫中的code和官方庫中的code)

  4. 如果創建成功,那就開始等待審覈了

  5. 審覈通過之後,就可以合併code了

    詳細內容請查看: 如何爲FISCO BCOS做貢獻

    提交pr的過程真的是即有趣又新奇

關於作者

如對這個"盒子"有更多的問題,請聯繫我[email protected]

你也可以通過 github | csdn | @新浪微博 關注我的動態

所有圖片均來源於網絡,如有侵權請及時聯繫小編

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章