FISCO-BCOS也有一个Python"区块链盒子"–即拆即用的区块链框架

前言

为什么想做这样一个工具?

一开始我是一个python开发者,看到区块链那么火热,我也想通过python去了解区块链。通过19年开源年会我参加了FISCO-BCOS社区,在课余时间慢慢的琢磨FISCO-BCOS/python-sdk项目。在配置环境的时候,我耗费了蛮多的时间,我常想为什么不能把这个框架封装成一个docker镜像,这样也方便搭建“工作台” 就像Minecraft的工作台一样,有了这样的想法,我利用课余的时间着手去编写Dockerfile


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_python


我还是一名flask开发者,由于初出茅庐,我很想通过review别人code实现快速上手,于是我把搭建好的docker镜像分享给周围的同学先让他们去体验,利用这种“即拆即用”的特性,使得我在分享的过程中,不会因为环境配置难而劝退一些同学,反响很好????。大家就像Minecraft里的Steve一样,放下工作台就可以制造出一堆有用的工具出来。


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_Docker_02

### 这个工具是什么,优化了什么

相当于给python-sdk项目装成了一个包裹。将一个大房子整理成一个旅游房车,减少部署时间( 不用一分钟就能获得镜像 ),方便快速上手使用( 无需关注环境配置问题,降低上手门槛 ),快速入门/开发,便于自动化运维。你可以尝试将这个服务和JenKins结合,进一步优化你的运维过程。

那下面就由我来向大家介绍一下FISCO-BCOS和这个盒子的故事。

FISCO-BCOS

FISCO BCOS开源社区是国内活跃的开源社区,社区长期为机构和个人开发者提供各类支持与帮助。已有来自各行业的数千名技术爱好者在研究和使用FISCO BCOS。如您对FISCO BCOS开源技术及应用感兴趣,欢迎加入社区获得更多支持与帮助。


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_Solidity_03



Python-sdk是什么

Python-sdk是由FISCO-BCOS开源用于python开发的区块链框架


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_FISCO BCOS_04


既然是通过python编写开发,我相信它的活力肯定会越来越旺盛。python-sdk十分方便"小作坊"开发区块链应用,因为python的阅读难度低,特别方便学生通过python-sdk这个项目了解区块链的概念和构成。

环境要求


Python"区块链盒子"

这个盒子的"优点"

即拆即用

你可以把这个盒子当成你进行python区块链开发的工作台,一个现拆现用的工具箱,而且十分整洁的环境,重点是他很 ,所以我会把它理解为Minecraft里的工作台 ---- “即拆即用”的工作台


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_FISCO BCOS_05


只要你有一台计算机,那就可以随时随地的放下并打开这个工具箱,创造前安装工具箱的过程也变成享受。

安全可靠

社区的朋友把FISCO BCOS区块链框架形容成一架"一体两翼多引擎"的飞机。


FISCO-BCOS也有一个Python“区块链盒子“--即拆即用的区块链框架_Docker_06


我们的”盒子“则可以被形容成这架飞机的航空母舰。



我们把航空母舰已经准备好了(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

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/进行贡献


  1. fork一份到自己的库中
  2. 修改你觉得有必要优化的地方
  3. 创建一个新pr(这个过程会对比你库中的code和官方库中的code)
  4. 如果创建成功,那就开始等待审核了
  5. 审核通过之后,就可以合并code了
    详细内容请查看: 如何为FISCO BCOS做贡献提交pr的过程真的是即有趣又新奇

关于作者



所有图片均来源于网络,如有侵权请及时联系小编