首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写Hyperledger Fabric链代码时应遵循的最佳实践

编写Hyperledger Fabric链代码时应遵循的最佳实践
EN

Stack Overflow用户
提问于 2018-07-24 16:06:23
回答 1查看 1.9K关注 0票数 5

为了避免bug和编写高效的Hyperledger Fabric链码,应该遵循哪些最佳实践?

EN

回答 1

Stack Overflow用户

发布于 2018-07-24 16:06:23

超分类器织物链码编写通用指南.

有关该链接的详细说明,请参阅下面的链接:

https://gist.github.com/arnabkaycee/d4c10a7f5c01f349632b42b67cee46db

以下简要介绍了一些步骤:

  1. 使用链码DevMode
  2. 使用链码日志记录

使用日志记录是简单和容易的。使用织物的内置记录器。Fabric提供了如下的日志机制:

For Golanghttps://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#ChaincodeLogger

For NodeJSanchor

For :您可以使用任何标准的日志记录框架,比如Log4J

  1. 避免在提交事务时使用全局密钥( Global )、超分类器结构( Hyperledger )使用乐观锁定模型。在两个阶段的背书和提交过程中,如果您在背书中读到的密钥的某些版本已经更改,直到您的事务达到提交阶段为止,您将得到一个MVCC_READ_CONFLICT错误。当一个或多个并发事务正在更新相同的键时,这通常是一种概率。
  2. 明智地使用Couch查询
代码语言:javascript
复制
- _Couch DB Queries DO NOT alter the READ SET of a transaction_ -  Mongo Queries are for querying the Key Value store aka StateDB only. It does not alter the read set of a transaction. This might lead to phantom reads in the transaction.
- _Only the DATA that you have stored in the couchDB is searchable_ - Do not be tempted to search for a key by its name using the MangoQuery. Although you can access the Fauxton console of the CouchDB, you cannot access a key by querying a key by which it is stored in the database. Example : Querying by _channelName\0000KeyName_ is not allowed. It is better to store your key as a property in your data itself.

  1. 编写确定性链码--永远不要写不确定的链码。这意味着,如果我在两个或更多个不同的环境中不同时间执行链码,结果应该总是相同的,就像将值设置为当前时间或设置一个随机数一样。例如:避免调用rand.New(...)t := time.Now()或甚至依赖未持久化到分类帐的全局变量(check )之类的语句。这是因为,如果生成的读写集不相同,验证系统链码可能会拒绝它并抛出一个ENDORSEMENT_POLICY_FAILURE。
  2. 当从你的链码中调用其他链码时要小心。当两个链码都在同一个通道上时,从另一个链码中调用一个链码是可以的。但是请注意,如果它位于另一个通道上,那么您只会得到链码函数返回的内容(只有在当前调用方有权访问该信道上的数据时)。即使尝试编写一些数据,也不会在另一个通道中提交任何数据。当前,跨通道链码链码调用不会改变另一个通道上的数据(更改写集)。因此,每个事务一次只能写入一个通道。
  3. 记住设置Chaincode执行超时--通常情况下,在高负载期间,链代码可能不会在30秒以下完成它的执行。根据您的需要自定义设置超时是一个很好的实践。这是由对等方的core.yaml中的参数来实现的。您可以通过在您的停靠器撰写文件中设置环境变量来覆盖它:示例:CORE_CHAINCODE_EXECUTETIMEOUT=60s
  4. 避免访问外部资源-访问外部资源(http)可能会向您的链码暴露漏洞和安全威胁。您不希望外部来源的恶意代码以任何方式影响您的链码逻辑。所以尽量远离外界的电话。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51503153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档