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
ENV USER root
ENV PATH /root/.local/bin/:$PATH
RUN mkdir /python-sdk
WORKDIR /python-sdk
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add --no-cache gcc g++ python python-dev py-pip openssl bash linux-headers libffi-dev openssl-dev curl wget
COPY requirements.txt /requirements.txt
RUN pip install -r /requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir
RUN curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/"$(curl -s https://api.github.com/repos/FISCO-BCOS/FISCO-BCOS/releases | grep "\"v2\.[0-9]\.[0-9]\"" | sort -u | tail -n 1 | cut -d \" -f 4)"/build_chain.sh && chmod u+x build_chain.sh && \
bash build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545
COPY . /python-sdk
RUN bash init_env.sh -i && \
cp /python-sdk/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 && \
echo "eval \"/python-sdk/nodes/127.0.0.1/start_all.sh\"" >> ~/.bashrc
EXPOSE 20200 30300 8545
CMD ["bash"]
项目地址: FISCO-BCOS/python-sdk
如何提交pr/进行贡献
-
fork一份到自己的库中
-
修改你觉得有必要优化的地方
-
创建一个新pr(这个过程会对比你库中的code和官方库中的code)
-
如果创建成功,那就开始等待审核了
-
审核通过之后,就可以合并code了
详细内容请查看: 如何为FISCO BCOS做贡献
提交pr的过程真的是即有趣又新奇
关于作者

如对这个"盒子"有更多的问题,请联系我1290017556@qq.com
你也可以通过 github | csdn | @新浪微博 关注我的动态
所有图片均来源于网络,如有侵权请及时联系小编