python SDK

  1. 基础网络部署

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/installation.html

  1. Window环境初始化
  1. 下载Window版本的solc,点击下载https://github.com/ethereum/solidity/releases/download/v0.4.25/solidity-windows.zip

solc编译器下载成功后,解压,将其中的 solc.exe 文件复制 ${python-sdk}bin 目录下。若 python-sdk 路为 D:open-sourcepython-sdk, 则 solc.exe 文件复制路径为D:open-sourcepython-sdkbinsolc.exe

  1. 拉取python-sdk源码

    git clone https://github.com/FISCO-BCOS/python-sdk
    
  2. 配置solc编译器的路径

    # 修改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文件
    
  3. 安装Python SDK依赖

    cd python-sdk 
    pip install -r requirements.txt
    #清华的pip源
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    
  4. 配置Channel通信协议

    SDK连接的节点已经在虚拟机以下目录中

    ~/fisco/nodes/127.0.0.1
    

    在nodes文件夹下的config.ini文件中获取channel_listen_port,这里是20200

    [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目录下

    国密支持

    • 支持国密版本的非对称加密、签名验签(SM2), HASH算法(SM3),对称加解密(SM4)
    • 国密版本在使用上和非国密版本基本一致,主要是配置差异。
    • 国密版本sdk同一套代码可以连接国密和非国密的节点,需要根据不同的节点配置相应的IP端口和证书
    • 因为当前版本的实现里,账户文件格式有差异,所以国密的账户文件和ECDSA的账户文件采用不同的配置

    连接国密节点时,有以下相关的配置项需要修改和确认,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请求。

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/mashell/p/13809817.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程