如果Fabric的智能合约函数陷入死循环会怎么样

这篇具有很好参考价值的文章主要介绍了如果Fabric的智能合约函数陷入死循环会怎么样。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是powervip!今天和大家一起探讨一下:如果Fabric的智能合约函数陷入死循环会怎么样

先看一段合约函数代码:

func (t *SimpleChaincode) Test(stub shim.ChaincodeStubInterface, args []string) pb.Response {

// 选择商品价格在1元到100元之间的商品名称和数量

s := "{\"fields\": [\"GoodsName\", \"GoodsCount\"], \"selector\":{ \"$and\": [{\"GoodPrice\":{\"$gte\": 1}}, {\"GoodPrice\":{\"$lte\": 100}}] }}"

resultsIterator, err := stub.GetQueryResult(q)

defer resultsIterator.Close()

if err != nil {

return shim.Error(err.Error())

}

var count uint64

for resultsIterator.HasNext() {

count++

// resultsIterator.Next() // 注释掉该语句,函数将陷入死循环

fmt.Println("count=", count)

}

msg := fmt.Sprintf("count: %d", count)

return shim.Success([]byte(msg))

}

上面的代码由于把 resultsIterator.Next() 这行代码注释掉,返回的数据集如果包含有1条记录或以上,游标就会一直停留在第一条数据记录上,导致 resultsIterator.HasNext() 永远为true,从而陷入死循环。

合约函数陷入死循环后,由于Fabric一般默认的智能合约函数调用时长最长为30秒,超过30秒后,Fabric会返回类似于下面的超时提示:

Error: endorsement failure during invoke. response: status:500 message:"failed to execute transaction 81f3c7715ae5f6678c711238571bb1c778c274bc505287da3f857465835832d6: error sending: timeout expired while executing transaction"

你以为合约函数调用就这样结束了?No!如果你attach上peer节点(具体命令是:docker attach c5841e55155a,c5841e55155a为该节点的CONTAINER ID),你会发现,peer节点的log会不断地打印出类似下面的信息:

count= 10000

count= 10001

count= 10002

count= 10003

count= 10004

count= 10005

count= 10006

count= 10007

count= 10008

count= 10009

...

表明合约函数还在不断地执行死循环代码。

如果这时候,你想在客户端执行其它的合约函数,得到的结果都是超时,因为智能合约在上次调用中陷入死循环后,没办法执行新的函数调用了。后果真的很严重,需要认真注意合约函数会引起死循环的代码!

要如何结束死循环,目前来看只有重启peer节点了。如果你有更好的方法,欢迎提出来讨论。

------------------------------------------------------------------------------

我是powervip

我的公众号:区块链战斗机

我的知乎:powervip - 知乎

我的学习笔记:www.study.win

原创作品,版权所有,侵权必究!商业转载请联系作者获得授权;非商业转载需保留作者署名信息,注明出处并保留原文链接。

如果你觉得这篇文章写得还可以,请帮忙点个赞,谢谢!

你的鼓励,我的动力! 文章来源地址https://www.toymoban.com/news/detail-419834.html

到了这里,关于如果Fabric的智能合约函数陷入死循环会怎么样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Fabric 搭建测试网络并部署智能合约

    1. 搭建网络: 详见博客 2. 对Test Network的创建和关闭 3. Starting a chaincode on the channel: 智能合约(Smart Contract): 包含管理区块链账本上assets的逻辑。 在Fabric上智能合约就是链码的形式存在. 当网络运行后,链码会被部署到网络中节点和通道上. 应用(Application): 由区块链系统的成员执行

    2024年02月03日
    浏览(34)
  • fabric 2.3 手动搭建网络&安装chaincode智能合约

    搭建好fabric之后,要在test-network下手动启动一个fabric网络。将下载过来的order和peer1两个文件夹放到~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network目录下。 生成证书文件: 生成创世块: 之后便可以去启动order和peer,分别进入order和peer1文件夹下,打开终端输入 orde

    2024年01月24日
    浏览(36)
  • Hyperledger Fabric 使用 CouchDB 和复杂智能合约开发

    在上个实验中,我们已经实现了简单智能合约实现及客户端开发,但该实验中智能合约只有基础的增删改查功能,且其中的数据管理功能与传统 MySQL 比相差甚远。本文将在前面实验的基础上,将 Hyperledger Fabric 的默认数据库支持 LevelDB 改为 CouchDB 模式,以实现更复杂的数据检

    2023年04月15日
    浏览(37)
  • Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例

    在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方法(尽管这确实是重难点),而没有考虑具体的应用开发。本文将在前面实验的基础上

    2024年01月20日
    浏览(43)
  • 8. Fabric2.2 区块链农产品溯源系统 - 智能合约设计

    根据上小节的需求分析与方案设计来进行智能合约的设计。 智能合约设计最核心的是存储字段的设计、也就是索引设计,Fabric 常见的时间状态存储引擎是LevelDB 或 CouchDB,这两个数据库是KV存储,KV存储不像SQL类型存储,一张表创建多个字段,多个字段索引可以进行各种复查询

    2023年04月08日
    浏览(31)
  • 11. Fabric2.2 区块链农产品溯源系统 - 智能合约开发-1

    智能合约与业务逻辑关联度高,承载大量业务逻辑,本小节教大家搭建智能合约开发环境GoLand,并编写合约打包脚本。 作者在windows电脑安装ubuntu18.04版本虚拟机(vmware),Linux环境也有Goland版本,可用性丝毫不差,所有的区块链开发在Linux环境进行。 官方可以下载,要么评估

    2023年04月20日
    浏览(71)
  • 人工智能写文章软件-人工智能写作的文章效果怎么样

    人工智能写文章具有极高的效率和一定的文本质量,但仍面临一些挑战和限制。首先,人工智能写文章需要大量的文本语料库和训练数据,才能获取足够的语言知识和语言模型,才能保证文章的语言表达质量和文本连贯性。其次,人工智能写文章的应用范围和实际效果与文本

    2024年02月12日
    浏览(40)
  • 魅族智能路由器怎么样?魅族智能路由器参数配置如何

    魅族智能路由器配置如何呢?相信还有很多朋友对于魅族新产品魅族智能路由器的参数配置还不太清楚,下文小编就为大家带来魅族智能路由器参数方面的内容,一起去了解下吧。 据最新曝光的消息,魅族智能路由器已经在研发中了。看来,除了魅族MX4 Pro之外,魅友们又有一

    2024年02月07日
    浏览(45)
  • gpt人工智能写论文怎么样-chatGTP如何写论文

    使用 GPT 写论文具体的操作方法因人而异,但可以提供一些建议: 充分理解论文的题目、主题和结构,并确定论文所需的内容和方向。 针对论文的不同部分,使用 GPT 模型进行自动化生成或补充,例如摘要、介绍、正文、结论、参考文献等。 对 GPT 生成的文本进行筛选和修改

    2024年02月08日
    浏览(44)
  • 联想路由器怎么样?双频AC智能路由器联想云路由开箱图赏

    前不久小米推出了一款129元的小米路由器mini,号称最便宜的双频AC智能路由器。其实联想也正推出了一款与小米路由器mini相似的产品,只是相对低调,目前联想云路由器也已经低调开启公测,其配置与小米路由器mini相当,不过售价目前还未知。废话不多说,以下笔者为大家

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包