区块链服务网络BSN正式进入商用已过去半年了。随着BSN业务的深入开展,已被更多的开发者关注,并基于BSN环境部署自己的DApp。BSN官方客服在此期间收到来自广大开发者的各类咨询,现将存在共性的常见问题与大家分享。BSN团队将根据大家的反馈,不断进行产品服务优化和新功能迭代,并持续融入更多来自全球领先的区块链技术,为广大开发者提供更低成本、更便捷、全互通的一站式区块链服务。

问题1 BSN密钥托管模式和公钥上传模式的区别?

答:密钥托管模式是指应用接入密钥对和用户交易密钥对均由BSN生成并托管起来,参与方只需要从BSN门户下载使用即可。上传公钥模式是指应用接入密钥对和用户交易密钥对均由参与方在本地生成公私钥对,并在BSN门户上传应用接入公钥,和通过城市节点网关接口将用户交易公钥证书申请文件上传登记生成用户交易证书。

可以概括为上传公钥模式的私钥信息一直在用户手中保存,不会外传;密钥托管模式的私钥则是由BSN生成并且管理。 对于安全性比较高的系统建议使用公钥上传模式。
问题2 在BSN系统中如何做数据库交互?

答:开发者无需考虑和数据库交互的问题,存储数据由BSN系统底层框架实现的,开发者只需要开发自己的链下业务系统调用节点网关API即可。

问题3 数据上链成功后产生的交易ID和服务运行信息中的HashCode有关系吗?

答:两者有关系。交易ID是本次交易的唯一标识,运行信息中的HashCode是区块的唯一标识,一个区块里可含有多笔交易。

问题4 在BSN上买10个tps,3个记账节点的资源,能支持每分钟多少用户访问?假如我每天有1万个活跃用户,则要多少TPS?

答:10TPS是指每个记账节点最大每秒处理10个请求,每分钟最大处理600个请求,1天最大处理864000个请求。建议您根据您用户每秒请求量的峰值进行TPS购买,因为一万个活跃用户,不会在同一秒同时发起请求。如您的峰值超过2000TPS建议您在链下业务系统进行一定的控制,让连入区块链的TPS控制到2000。如您有大于500的TPS需求,可将您的公司信息和具体需求发送到BSN技术支持邮箱support@bsnbase.com,会有专人联系您进行报价。

问题5 用BSN服务的项目,可以去申请区块链信息服务备案吗?

答:在BSN上发布服务都是在后台运行。如果要申请区块链信息服务备案,要提供前台界面。所以建议自己建立前端门户/APP,其中使用到的区块链功能,可以调用在BSN上部署的服务。这样完全符合申请区块链信息服务备案的要求。

问题6 从BSN上下载的身份证书包是干什么用的?

答:证书下载压缩包含用户链下应用证书和网关证书两大部分:

  1.userAppCert目录:用于存放用户应用证书,具体文件如下:

  1. public_cert.pem:应用证书公钥文件,主要用于网关对接受的签名数据进行验证或公开给其它使用者。

  2. private_key.pem:应用证书私钥文件,主要用于请求网关时对数据进行签名。如果应用参与者证书模式为【上传公钥模式】,则该文件用户自己管理,该证书信息不存在;如果是【密钥托管模式】请用户妥善保管,以防泄露或丢失。

  2.gatewayCert目录:用于存放网关证书,具体文件如下:

  1. gateway_public_cert_secp256r1.pem:网关公钥secp256r1证书,如果您参与服务算法类型为secp256r1时,用该公钥证书对网关响应时的数据进行验签。

  2. gateway_public_cert_sm2.pem:网关公钥国密(sm2)证书,如果您参与服务算法类型为国密(sm2)时,用该公钥证书对网关响应时的数据进行验签。

  3. gateway_public_cert_secp256k1.pem:网关公钥secp256k1证书,如果您参与服务算法类型为secp256k1时,用该公钥证书对网关响应时的数据进行验签。

  3.此类证书文件,只限于与节点网关数据交互签名与验签使用,不用于任何应用业务处理!

链下业务系统请求网关时使用用户应用接入证书中的私钥进行签名,网关接收到报文后,使用用户应用接入证书中的公钥进行验签;应用接入证书中的公钥在链下业务系统中没有用处。

网关响应结果会用网关私钥证书签名,链下业务系统接收到报文后用网关公钥证书进行验签。

问题7 在BSN上发布了应用后,是否可以使用RESTfulAPI进行测试?是否只能按照文档中提供的通过SDK方法进行测试?

答:BSN提供的节点网关API就是符合RESTful风格的基于HTTPS的接口,SDK是对节点网关API进行了封装,为用户提供一个方便调用的实例。开发者可以根据自己的需求选择对应方式开发链下业务系统。

问题8 BSN中有防止用户发起大量恶意交易攻击的安全机制吗?

答:当一个应用的交易量超出TPS队列长度(TPS*30)时,超出长度的交易请求将不能被执行成功,网关会返回错误码给链下业务系统,链下业务系统需重新向网关提交这些交易请求。

问题9 为什么调用获取块信息接口返回的交易数总是1?

答:BSN中Fabric的出块维度是1秒和10000条交易和10M,任意满足其中一个条件就会触发产生新的区块;FISCO BCOS是500ms出一个块,如果500ms内没有交易则出一个空块(空块不上链);Xuper Chain是5s和5M,任意满足其中一个条件就会触发产生新的区块,如果满足条件内没有交易会出一个空块(空块上链)。用户当前交易的频率达不到出块频率,所以一次生成的块内只有一个交易,当用户提高交易频率,每一个块内将包含多条交易。


问题10 从BSN下载的身份证书包中的公私钥颁发和生成的流程是否安全,私钥是否存在泄露的风险?

答:BSN中的公私钥都是由国家信息中心生成的根密钥颁发和认证的,是绝对安全可靠的,下载身份证书的这种方式是密钥托管模式,即用户的应用接入密钥对和用户交易密钥对均用BSN托管,用户参与服务后下载即可。如果密钥泄露,可在我的身份证书页面进行证书更新,更新成功后,老的密钥就失效了。如果要保证私钥绝对的安全可选择上传公钥模式,即用户的应用接入密钥对和用户交易密钥对都是用用户自行在本地生成的,上传公钥或公钥证书申请文件上传至BSN即可。

问题11 BSN支持部署多个链码吗,部署之后是有多个链码部署名称吗?

答:BSN支持部署多个链码/智能合约,在发布服务或服务升级时在上传链码包页面可上传多个zip格式的链码包/智能合约包;部署多链码之后会有多个链码部署名称/合约部署地址。

问题12 BSN中基于Fabric开发的应用调用链码getHistory方法时返回的交易时间是什么时间?

答:基于Fabric开发的应用调用链码getHistory方法时返回的交易时间为UTC时间,(UTC+8:00)=北京时间,如果用户要展示北京时间需自行在链下业务系统进行转换。

问题13 为什么我发布了应用后,还没做交易运行信息里就显示块数和交易数?

答:创建群组/通道时会产生一个不带交易的区块;

其他非交易型的交易(如部署合约、更改通道/群组配置,更新合约)都会被打包进区块。

问题14 在BSN上发布了应用后,是否可以使用RESTfulAPI进行测试?是否只能按照文档中提供的通过SDK方法进行测试?

答:BSN提供的节点网关API就是符合RESTful风格的基于HTTPS的接口,SDK是对节点网关API进行了封装,为用户提供一个方便调用的实例。开发者可以根据自己的需求选择对应方式开发链下业务系统。

问题15 在BSN开发者手册中,Fabric的接口为什么没有删除和修改功能?

答:删除和修改是链码内的功能,需要在链码中实现这些方法,链下业务系统通过网关API调用链码中相应的方法实现删除和修改功能。

问题16 BSN提供DApp的测试环境吗?

答:BSN在2020年10月31号发布的V1.3.0版本将提供相应功能服务。