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),直接下水就可以了😄。
只需一行代碼你就能獲得這艘航空母艦,上手直接研究開發,不必過多關注環境配置的繁雜,能節省大量時間,解放雙手。
-
獲得速度快/上手簡單
-
安全可靠
-
整潔,純淨的環境(髒了就換)
-
自動化部署/運維
…
下面我們就介紹一下如何獲得這個"盒子/航空母艦"
運行這個"盒子"
說了那麼多那到底怎麼獲得這個盒子呢?你可以通過
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搭建出更多有趣好玩的開源項目。
有望優化
-
現在每次啓動一個容器都需要手動啓動容器。啓動節點的條件是–>機器暴露所需端口,默認是20200, 8045, 30300。後期可能會對默認啓動節點的功能進行優化😄
-
考慮數據卷的添加
-
優化容器大小,使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/進行貢獻
-
fork一份到自己的庫中
-
修改你覺得有必要優化的地方
-
創建一個新pr(這個過程會對比你庫中的code和官方庫中的code)
-
如果創建成功,那就開始等待審覈了
-
審覈通過之後,就可以合併code了
詳細內容請查看: 如何爲FISCO BCOS做貢獻
提交pr的過程真的是即有趣又新奇
關於作者
如對這個"盒子"有更多的問題,請聯繫我[email protected]
你也可以通過 github | csdn | @新浪微博 關注我的動態
所有圖片均來源於網絡,如有侵權請及時聯繫小編