https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.htmlhtml
安装[Python-3.7.X][ http://www.javashuo.com/article/p-yvzvbahy-ch.html ]和git软件node
Visual C++ 14.0库 https://pan.baidu.com/s/1ZmDUGZjZNgFJ8D14zBu9og 提取码: zrbypython
solc编译器下载成功后,解压,将其中的 solc.exe 文件复制 ${python-sdk}\bin 目录下。若 python-sdk 路为 D:\open-source\python-sdk, 则 solc.exe 文件复制路径为D:\open-source\python-sdk\bin\solc.exenginx
拉取python-sdk源码git
git clone https://github.com/FISCO-BCOS/python-sdk
配置solc编译器的路径github
# 修改client_config.py.template: # 配置solc编译器路径,若solc存放路径为D:\\open-source\\python-sdk\\bin\\solc.exe,则solc_path配置以下: solc_path = "D:\\open-source\\python-sdk\\bin\\solc.exe" # 将client_config.py.template拷贝到client_config.py,即新建一个client_config.py文件
安装Python SDK依赖web
cd python-sdk pip install -r requirements.txt #清华的pip源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
配置Channel通讯协议算法
SDK链接的节点已经在虚拟机如下目录中json
~/fisco/nodes/127.0.0.1
在nodes文件夹下的config.ini文件中获取channel_listen_port,这里是20200windows
[rpc] listen_ip=0.0.0.0 channel_listen_port=20200 jsonrpc_listen_port=8545
切换到python-sdk目录,修改client_config.py文件的相关配置信息以下:
channel_host = "192.168.14.134" channel_port = 20200
先前链已经搭好了,证书已经发到如下虚拟机下的目录中:
fisco/nodes/127.0.0.1/sdk/*
将虚拟机里面生成的证书文件所有copy到window下的python-sdk文件下的bin目录下
国密支持
链接国密节点时,有如下相关的配置项须要修改和确认,IP端口也须要确认是指向国密版本节点
crypto_type = "GM" #密码算法选择: 大小写不敏感:"GM" 标识国密, "ECDSA" 或其余是椭圆曲线默认实现。 gm_account_keyfile = "gm_account.json" #国密帐号的存储文件,能够加密存储,若是留空则不加载 gm_account_password = "123456" #若是不设密码,置为None或""则不加密 gm_solc_path = "./bin/solc/v0.4.25/solc-gm" #合约编译器配置,经过执行bash init_env.sh -i命令下载
使用Channel协议访问节点
# 获取FISCO BCOS节点版本号 $ python ./console.py getNodeVersion INFO >> user input : ['getNodeVersion'] INFO : getNodeVersion : { "Build Time": "20200814 08:45:06", "Build Type": "Linux/clang/Release", "Chain Id": "1", "FISCO-BCOS Version": "2.6.0", "Git Branch": "HEAD", "Git Commit Hash": "e4a5ef2ef64d1943fccc4ebc61467a91779fb1c0", "Supported Version": "2.6.0" } #获取区块号 $ python ./console.py getBlockNumber INFO >> user input : ['getBlockNumber'] INFO : getBlockNumber : 1
至此,Python-SDK已跑通。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
下载https://gitee.com/medical-alliance/medical-blockchain
主操做文件 medical-blockchain,该文件中已经包括了Python-SDK,步骤同上:
利用SDK部署链码
$ python ./console.py deploy evidence save INFO >> user input : ['deploy', 'evidence', 'save'] backup [contracts/evidence.abi] to [contracts/evidence.abi.20201013165207] backup [contracts/evidence.bin] to [contracts/evidence.bin.20201013165207] INFO >> compile with solc compiler deploy result for [evidence] is: { "blockHash": "0xf74c3bc86adad85e610e4d7a13991155a73042cfe845e25fcf7185eb9f58 a537", "blockNumber": "0x5", "contractAddress": "0x83592a3cf1af302612756b8687c8dc7935c0ad1d", "from": "0x95198b93705e394a916579e048c8a32ddfb900f7", "gasUsed": "0x113fd8", "input": "0x6080604052610bba600055610bb960015534801561001c57600080fd5b50610f......", "logs": [], "logsBloom": "0x000000.......................................................00000", "output": "0x", "root": "0x8d96f0afc9f75fe254314fd8308266a8a34cdface6a05b42690b762ac13a4fbe" , "status": "0x0", "to": "0x0000000000000000000000000000000000000000", "transactionHash": "0x14b633920f7c589e520f5c6c67bb3c2a62f146753da5f653ebd7d5 fbb828e326", "transactionIndex": "0x0" } on block : 5,address: 0x83592a3cf1af302612756b8687c8dc7935c0ad1d address save to file: bin/contract.ini
运行下面的命令
$ python app.py * Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:5081/ (Press CTRL+C to quit)
在medical-blockchain文件夹中新建一个post.py文件,文件内容以下:
import requests import json def server(url, data): result = requests.post(url, data=json.dumps(data, ensure_ascii=False).encode( 'utf8').decode('latin-1')) return result.json() # 生成公私钥 print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/crate", {"key": "mx"}), ensure_ascii=False, indent=2)) # 文件hash print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/hash", {"text": "病人姓名:甲,年龄:29,有无慢性病史:无,体检结果:指标正常"}), ensure_ascii=False, indent=2)) # 私钥签名 print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/sign", {"prvkey":"0xec4c341369061b7e3ce5f69561e8d461a64344a43a19e33acba6f2c801cb2918", "text":"病人姓名:甲,年龄:29,有无慢性病史:无,体检结果:指标正常" }), ensure_ascii=False,indent=2)) # 验证签名 print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/verify", { "sign":"0xd1639bdfc81c89e5c4afecaaf471f7409ea9e906dc2f3504cd743817657ce27507c90a60c64ccf4acdea20101e9060bcddea294e6561c3326cc080771163d1691b", "text":"病人姓名:甲,年龄:29,有无慢性病史:无,体检结果:指标正常", "address":"0x8Cb7a51eF56BE8170d17eA138c2ec58b4Aed5858" }), ensure_ascii=False, indent=2)) # 上链 print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/upload", {"file_hash": "fdf13b54ec5bc73ff743ce2bdf716be5e23d00d1516a37c800c6a13c5c95f6f4", "file_data": "病人姓名:甲,年龄:29,有无慢性病史:无,体检结果:指标正常", "file_pubkey": "0x8Cb7a51eF56BE8170d17eA138c2ec58b4Aed5858", "file_sign": "0xd1639bdfc81c89e5c4afecaaf471f7409ea9e906dc2f3504cd743817657ce27507c90a60c64ccf4acdea20101e9060bcddea294e6561c3326cc080771163d1691b", "file_time": "2020.10.9" }), ensure_ascii=False, indent=2)) # 查询 print(json.dumps(server("http://127.0.0.1:5081/api/p/medical/blockchain/download", {"file_hash": "fdf13b54ec5bc73ff743ce2bdf716be5e23d00d1516a37c800c6a13c5c95f6f4"}), ensure_ascii=False, indent=2))
在medical-blockchain下打开另一个终端
第一次post请求,生成公私钥,post.py文件中只包含生成公私钥的post请求代码,在执行下一个生成文件hash的post请求时,将生成公私钥的请求代码注释掉。按照上述思路,为每一个功能执行一次post请求。
window下安装nginx
http://www.javashuo.com/article/p-rreplidj-nu.html
将medical-blockchain项目下的html_web文件所有copy到nginx安装包下的html目录下:
每一个请求页面中post地址都须要按照上面进行修改