WIKI: 区块链应用系统开发TIPS

作者:fisco-dev

  • 各种私钥需保存在安全的区域,包括离线硬件设备,防火墙后的机房区域等。在区块链节点上使用keystore保存私钥上是不够安全的。
  • 用于交易签名的私钥由业务模块负责安全加载(从加密文件,配置文件,数据库等),FISCO BCOS采用sdk封装掉这个过程的细节(参见开发手册)。
  • 建议每个业务模块采用不同的私钥和公钥帐号,易于分辨是来自哪个业务模块的交易,方便进行权限控制
  • 根据业务需要,对各交易帐号是否能部署合约,能调用哪个合约,能调用哪个合约的哪个接口进行权限控制。
  • 业务采用sdk/api封装的接口和区块链节点通信。采用sendrawtransaction发送交易,,交易数据由业务层签名。构建交易时,注意设置(或由sdk设置)blocklimit和randid。
  • 应用开发者设计sdk是可以有两个层次,一个是面向底层接口的通用sdk,封装了jsonrpc和协议编解码(大部分可以直接采用web3j等开源库并进行定制),提供可配置化的基础通信能力,指向特定的区块链节点,完成多活轮询等功能。另一个是,面向业务接口的sdk,呈现业务层容易理解的、基于业务字段的接口,业务sdk调用底层sdk,发送交易和获得消息回调。
  • 可以采用业务数据库存储业务数据或从链上定时导出数据入库的方式,解决关联查询,批量计算(如对账和文件导出)的场景。
  • 设计智能合约时,应进行逻辑和数据分离,保持数据结构的稳定性,如需要修改数据结构,原则上只增加字段,不减少字段或修改字段含义,部分非关键的字段,可以设计为字符串,由业务自行解析,以提供一定的扩展性。
  • 进一步的,如果能在交易参数和receipt log里解决数据状态存储和业务流程的,则不用state存储,因为state状态读写过程较繁琐且因维护状态树会占用较大磁盘空间。
  • 尽可能的把每个处理环节的处理次数,处理时间(平均时间,最大时间)打印到统计和监控日志里,采用监控检测工具进行监测和评估,预测和检测瓶颈。平台已经对关键处理环节埋点输出到日志,更细和更丰富的业务数据埋点需要开发者自行开发。
  • 根据业务场景的交易频度估算带宽,建议至少保证5M以上带宽,且注意网络延时,断连等QoS指标。如果您觉得本文不错,欢迎戳这里给FISCO BCOS打star:star:。