# FISCO BCOS SDK : Rust Gears

Rust SDK for FISCO-BCOS ,like some rusted but solid gears , help to build blockchain application with FISCO-BCOS

FISCO BCOS的轻量级版本Rust SDK, 基础网络、国密非国密算法支持、合约解析能力较为完备,附带命令行交互控制台。

rustc环境

已经验证的rust版本

rustc 1.54.0-nightly (ed597e7e1 2021-06-08)

rustc 1.55.0-nightly (67b03007c 2021-07-23)

rust版本的本身更新较快,请按rust官网指引安装配置。

关键特性

概要:

全面支持RPC/Channel协议,国密和非国密算法,友好解析交易(Transaction)、回执(Receipt)、事件(Event)

有命令行控制台,支持创建和查询账户,以及合约类(部署调用),查询类的操作。

目录结构:

配置文件

主要配置文件是 conf/config.toml,项目提供了conf/config.toml.sample,将其复制或去掉sample后缀即可。配置项解释: ``` [chain] #链基础配置 chainid=1 #默认链id groupid=1 #默认组id crypto="ECDSA" #链采用的密码学算法,ECDSA或GM accountpem="conf/client.pem" #客户端的默认账户私钥文件 protocol="RPC" # 客户端和节点的连接方式 CHANNEL或RPC

[contract] contractpath="./contracts" #合约的abi,bin,sol以及历史记录文件都在这个目录

[rpc] url="http://127.0.0.1:8545" #rpc通信url,改为实际的服务器ip和端口 timeout = 3

[channel] ip = "127.0.0.1" #channel协议连接的节点ip地址 port = 20200 #节点channel端口 tlskind = "ECDSA" # channel协议采用的密码算法,ECDSA或GM timeout=10
nativelibechomode = 0 #native库是否打印调试信息的配置 cacert= "sdk/ca.crt" #非国密的ca证书,共3个,从节点的node[x]/sdk目录下获取 sdkcert = "sdk/sdk.crt" sdkkey = "sdk/sdk.key" gmcacert= "sdk/gmca.crt" #从这里开始是国密的证书,5个,从节点的node[x]/sdk/gm目录下获取 gmsdkcert = "sdk/gmsdk.crt" gmsdkkey = "sdk/gmsdk.key" gmensdkcert = "sdk/gmensdk.crt" gmensdkkey = "sdk/gmensdk.key" ```

控制台使用帮助:

``` cargo run -- --help 控制台本身的help(采用StructOpt库默认格式)

典型命令如

cargo run -- deploy HelloWorld

命令行选项:

-v
        -v -vv -vvv...打开详细的打印

-c, --config <configfile>
        -c 配置文件,全路径如-c conf/config.toml

-n, --contractname <contractname>
        -n 显式的指定合约名,主要是供解析交易和回执时使用,不用带后缀,如"HelloWorld"

cargo run -- usage bcossdk的操作命令字帮助,建议查看包括 usage account,usage contract,usage get或usage all

当前配置文件路径:conf/config.toml --所有命令-- 1)

--Account:账户相关的命令--

account new [名字],创建新的账户,名字可选,用于保存时的文件名,如未指定,则用地址(address)作为文件名

account show [名字],显示指定名字的账户信息,如未指定名字,则展示配置文件指定目录下所有的账户(.pem)信息

写入和寻找账户文件的路径与配置文件同级。当前账户文件目录:conf

2)

--Contract:合约相关的命令--

deploy [合约名] [合约构造的初始化参数...], 如 deploy HelloWorld [参数1] [参数2]

sendtx [合约名] [地址或latest/last] [方法名] [方法对应的参数...], 如 sendtx HelloWorld latest  set "hello"

call   [合约名] [地址或latest/last] [方法名] [方法对应的参数...], 如 call HelloWorld latest  get

合约成功部署后,新地址会写入合约目录的contracthistory.toml文件,后续就可以用lastest/last代替地址调用了

写入历史和寻找合约ABI文件的路径以配置文件里的[contract]contractpath=项为准。

合约当前的路径:./contracts

3)

--Get:查询类命令-- --查询类指令包含在全部RPC接口指令里,常用的指令如下--

节点类-->
getBlockNumber,getClientVersion,getNodeInfo
getPeers,getPbtView,getSealList,getObserverList, getSyncStatus
getNodeIDList,getGroupList,getGroupPeers(groupid)
getSystemConfigByKey(key)

区块类-->
getBlockByHash(hash,bool),getBlockByNumber(number,bool),
getBlockHeaderByHash(hash,bool),getBlockHashByNumber(number)

交易类-->
getTransactionByHash(hash), getTransactionReceipt(hash)
getTransactionByBlockHashAndIndex(blockhash,index)
getTransactionByBlockNumberAndIndex(blocknumber,index)
getPendingTransactions,getTotalTransactionCount
getBatchReceiptsByBlockNumberAndRange(blocknumber,from,count,compressflag)
getBatchReceiptsByBlockHashAndRange(blockhash,from,count,compressflag)

群组操作类(:todo)->
generateGroup,startGroup,stopGroup,removeGroup,recoverGroup,queryGroupStatus

全部指令参见url:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/api.html ```

channel协议中的SSL库使用说明

channel协议,要求在客户端和节点之间TLS长连接,使用证书握手和加密,详细参见:Channel协议

TLS实现分为国密和非国密两种,国密的证书私钥文件会比非国密多两个(sdk加密证书和key)。

对非国密TLS,本项目直接使用了ssl库,在系统上要求安装了ssl。在linux上要设置OPENSSL_DIR=[如:/usr/local/ssl],否则编译时rust的openssl-sys库会报错。

对国密版本,采用了TASSL开源库以及简单的C LIB封装对接,需要在不同平台上手动编译出动态库(dll或so),并确保这些动态库和相关的依赖库,都部署在项目目录或系统目录下,可加载。

如果想使用国密版本channel协议,请仔细阅读nativessocklib下的README

要将c语言项目编译出来的动态库,全部复制到和可执行程序相同的目录或系统目录下下,才可以加载成功

在linux上,可以配置LDLIBRARYPATH=[so库所在目录]并生效

加载动态库的rust实现参见src/bcossdk/bcostlsnative.rs,如有兴趣建议仔细走读,并进行优化,目前的实现在生命周期和稳定性方面有优化空间

todo list:

贡献代码

加入社区

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

License

Rust SDK的开源协议为MIT License. 详情参考LICENSE