首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

fabric-sdk-go执行并不总是更新账本

fabric-sdk-go是一个用于与Hyperledger Fabric区块链网络进行交互的Go语言软件开发工具包。它提供了一组API和工具,使开发人员能够构建和管理与Fabric网络的连接,并执行各种操作,如创建通道、安装链码、查询账本状态等。

在Fabric中,账本是用于存储和管理交易记录的核心组件。fabric-sdk-go执行并不总是更新账本是指在使用该SDK执行交易时,并不总是会将交易结果及时更新到账本中。这是因为在Fabric中,交易的提交是一个异步的过程,需要经过一系列的验证和排序步骤,然后才能被提交到账本中。因此,在执行交易后,即使SDK返回了成功的响应,账本中的更新可能需要一些时间才能完成。

这种设计有助于提高Fabric网络的性能和可扩展性。通过将交易的验证和排序过程与账本的更新过程分离,可以并行处理多个交易,提高整体吞吐量。同时,这也确保了账本的一致性,因为所有的交易都会按照相同的顺序被应用到账本中。

然而,对于应用程序开发者来说,需要注意的是,在使用fabric-sdk-go执行交易后,如果需要立即获取最新的账本状态,可能需要等待一段时间。可以通过监听区块事件或者定期查询账本状态来实现。此外,还可以使用Fabric提供的查询API来主动获取最新的账本状态。

总结起来,fabric-sdk-go执行交易并不总是立即更新账本,这是由于Fabric网络的异步交易提交机制所导致的。开发人员可以通过监听区块事件或查询API来获取最新的账本状态。在实际应用中,可以根据具体需求来选择合适的方式来处理账本更新的延迟。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

万字长文,教你用go开发区块链应用

5、什么是智能合约 Smart contract,为了支持以同样的方式更新信息,并实现一整套账本功能(交易,查询等),区块链使用智能合约来提供对账本的受控访问。...6、什么是共识 保持账本在整个网络中同步的过程称为共识。该过程确保账本仅在交易被相应参与者批准时才会更新,并且当账本更新时,它们以相同的顺序更新相同的交易。...这是世界状态的更新历史。它只记录区块链网络使用账本数据库前后的值。 总结:Hyperledger Fabric 是一种账本技术,其账本包括世界状态数据库和交易日志历史记录。...Go 语言可以使用官方的 github.com/hyperledger/fabric-sdk-go 库。 这个 SDK 使用起来也很简单。.../channel" "github.com/hyperledger/fabric-sdk-go/pkg/core/config" "github.com/hyperledger/fabric-sdk-go

3.4K20

Fabric的简单国密改造实验方案

然后我们再执行: make ccenv 即可构建支持国密的ChainCode编译执行镜像环境。 我已经将所有代码和镜像按前面的步骤准备完毕,大家也可以直接使用。...其次我们不能再使用hyperledger/fabric-sdk-go这个包名,而是使用我们自己的包名,这里就全部改成studyzy/fabric-sdk-go。...然后进入first-network,执行以下命令构建一个测试网络。 ....文件夹,然后我们就可以到cli中执行这个程序,看看执行的效果了。.../cmd  【提醒:这里提出的这种改造方案只是一种实验性质的改造,并不是正宗的国密改造方法,正宗的国密标准关于TLS部分比较复杂,只是我这里提到的简单替换是不符合国密TLS部分的规范的,所以如果别人有另外的正宗的国密改造的节点

3.2K20

BitXHub 跨链插件(Fabric)源码解读

合约将调用跨链合约并抛出跨链事件 子链相应适配器将会轮询或订阅跨链合约抛出的跨链事件并发送到跨链网关的监听模块 跨链网关将从跨链事件中提取的响应方法和参数转换为目标子链可识别的交易 跨链网关将转换后的交易提交到目标子链并执行...fmt.Errorf("failed to register chaincode event, error: %v", err) } c.registration = registration 订阅事件的方法是调用了 fabric-sdk-go...Consumer) Shutdown() error { c.eventClient.Unregister(c.registration) return nil } 再深一层看,取消订阅事件是调用了 fabric-sdk-go...将输出事件消息格式化 key := broker.outMsgKey(outServicePair, strconv.FormatUint(tx.Index, 10)) // 将消息与交易信息写入账本...= nil { return shim.Error(fmt.Errorf("set event: %w", err).Error()) } // 将元数据状态写入账本 if err := broker.putMap

44030

Libra教程之:数据结构和存储

文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中。...还有交易i执行过后的账本状态(6),是用Sparse Merkle树来表示的,其中它的叶子节点是账户信息。...对于验证节点来说,新的交易只跟上一个账本状态相关,那么验证节点其实可以删除掉不需要的账本状态版本来节省空间和效率。 账本状态 账本状态Si表示了所有在版本i中的账户的信息。...这样会导致树的不平衡,因为叶子节点总是树的最低一层。那么我们可以做适当的优化如(3)所示。...当状态树进行更新的时候,可以重用之前未更新的账户数据,这样可以在验证者中存储状态树的多个版本,也可以加快验证节点的验证速度。

74420

Fabric基础架构原理(2):共识与交易 | 赠书活动

需要指出的是,链码在背书节点中是模拟执行,即对数据库的写操作并不会对账本作改变,所有的写操作将归总到一个写入的集合( Write Set )中记录下来。...在链码执行完成之后,将返回链码读取过的数据集( Read Set )和链码写入的数据集( Write Set )。读集和写集将在确认节点中用于确定交易是否最终写入账本。...如果预案是查询账本的请求,则应用端无需提交交易给排序节点。如果是更新账本的请求,应用端在收集到满足背书策略的背书响应数量之后,把背书预案中得到的读写集、所有背书节点的签名和通道号发给排序节点。...5)排序节点在收到各个节点发来的交易后,并不检查交易的全部内容,而是按照交易中的通道号对交易分类排序,然后把相同通道的交易打包成数据块( blob )。...(更多文章请查看哈希1024社区:hash1024.org ) 如果当前账本的数据和读集版本不一致,则该交易被标注为无效,不更新状态数据库。

62630

MySQL实战 | MySQL日志模块—redo log和 binlog

一个更新语句执行的时候整个过程跟查询的步骤是类似的,具体可以看之前的文章:MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的,在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句就会把表上所有缓存结果都清空...根据id更新某条数据,分析器会通过词法和语法解析知道这是一条更新语句。优化器决定要使用 ID 这个索引。然后,执行器负责具体执行,找到这一行,然后更新。...这个时候掌柜只好放下手中的活儿,把粉板中的一部分赊账记录更新账本中,然后把这些记录从粉板上擦掉,为记新账腾出空间。...“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。...引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行执行完成了,随时可以提交事务。

43320

Hyperledger Fabric 超级账本的硬伤

,超级账本无法并发操作一个 key,stub.PutState 是异步执行,我们无法确认它是否执行完成,在没有执行完成之前再发起操作,就会产生覆盖。...这个问题限制了超级账本的很多场景应用,这是超级账本的硬伤。...你会发现最终 count 并不等于 100。学习过多线程的朋友一定很清楚出了什么问题。...很多场景需要更新区块中的数据,如果频繁操作,就会产生覆盖,目前Hyperledger Fabirc 并没有提供解决方案。 1....我们不知道 stub.PutState是否执行完成,因为存储过程需要共识排序。 2. 超级账本没有提供事物处理或者互斥锁。 我的应用场景是实现代币功能,需要从总账号给注册用户转账,操作频繁。

2K290

一条 SQL 语句是如何执行

因为当有 update、或者 delete 语句执行时,这张的表查询缓存就会失效,下次查询还是需要从数据库中查询,所以通常来说查询缓存并不能提高性能。 3、分析器 分析器作用是进行词法分析,语法分析。...如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。...“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。...执行器拿到引擎给的行数据,把这个值修改成张三 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。...执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

64020

MySQL的两个日志系统

如果有人又要赊账的时候,掌柜就有两种做法: 一种是直接翻开账本找到这个顾客的记录,把这次赊的帐加上去或者划掉。 另一种就是先在黑板上记录,等打烊或者不忙的时候再把账本翻出来记录在账本上。...具体的情况就是,当有一条记录需要更新的时候,InnoDB引擎就会先把记录写到redo log里面,并更新内存,这个时候更新就算完成了,InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往在系统比较空闲的时候做...同时,将赊账记录在小黑板上,如果赊账的不多,可以等打烊了以后再记录账本,如果赊账的特别多,小黑板写满了,这个时候掌柜就要放下手上的活,先把黑板上的部分赊账记录更新账本上,然后将记录好的信息从小黑板上擦掉...write pos和checkpoint之间的是“小黑板”上还空着的部分,可以用来记录更新的操作,如果write pos追上了checkpoint,表示“黑板“写满了,这个时候不能再执行新的更新,得停下先擦掉一些记录...“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

67220

聊一聊金融合约与智能合约

由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区块链和智能合约的契合,发布了白皮书《以太坊...如果每个人拥有的账本的副本是相同的,那么人们就不再需要一个中心化的机构记录谁拥有什么。当你的账本更新,记录一笔新的资产所有权变动时,其他人的账本也会发生相同的变动。...智能合约 智能合约程序不只是一个可以自动执行的计算机程序:它自己就是一个系统参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。...这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。...最简单的方法是 通过由某特定机构(例如纳斯达克)维护的“数据提供“合约进行,该合约的设计使得该机构能够根据需要更新合约,并提供一个接口使得其它合约能够通过发送一 个消息给该合约以获取包含价格信息的回复。

59640

update语句到 redo log深入理解

上一篇查询语句的执行流程我们说过,在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句会把整个 T 表的缓存结果都清空。这也是为何我们不建议使用查询缓存的原因。...如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。...“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。...InnoDB 引擎将这行数据更新到内存中,同时将这个更新操作所影响的页日志记录到 redo log 中,此时日志处于 prepare 状态,然后会告知 执行器完成了,随时可以提交事务。...执行器生成这个操作的 binlog ,并把 binlog 写入磁盘。 执行器继续调用引擎的的提交事务接口,引擎收到请求就把刚刚写入的 redo log 的状态改成提交(commit),更新完成。

60920

一文看懂MySQL执行update更新语句的流程

执行语句前要先通过连接器连接数据库 表上有更新时,此表有关查询缓存就会失效,所以这条语句就会把表man上所有缓存置空 分析器会通过词法和语法解析知道这是一条更新语句 优化器决定使用id索引 执行器负责具体执行...如果掌柜没有粉板,每次记账都翻账本,效率是不是低死啦? MySQL也有这个问题,若每次更新操作都写进磁盘,然后磁盘也要找到对应记录,然后再更新,整个过程IO成本、搜索成本都很高。 何解?...粉板和账本的配合过程,就是MySQL里的WAL(Write-Ahead Logging)关键就是 先写日志(先写粉板) 再写磁盘(不忙时写账本) 当一条记录需要更新,InnoDB先把记录写到redo log...放下手中活儿,把粉板一部分赊账记录更新账本,然后把这些记录从粉板上擦掉,为记新账腾出空间。...“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 看执行器和InnoDB引擎在执行这个简单的update语句时的内部流程。 执行器先找引擎取id=2这行。

3.3K10

认识区块链

区块链的直接用途:查账 本质:全网同步防篡改的分布式账本 比较一般的账本 一般的账本:中心化管理,单人记账,随时可改,有顺序的交易数据库。...如银行内部管理所有用户的交易明细,通常情况下,管理者拥有对账本的最终解释权。 区块链:分布式账本,多人记账,去中心化,并没有存在唯一的管理者,而是存在一个网络,可以下载到所有人公共的账本。...只要通过执行区块链内部的某些协议,就能保证手头上的账本会定期更新,跟所有人的账本一模一样。另外,区块链的账户是匿名的,也支持用户随意开户。...点对点:每个节点都是等价的,这就与去中心化不同了,去中心化并不等于等价,有可能有些节点分担的多,有些少一点,也就是有些节点承担的功能不太一样。...而交易有效性就是说,假设余额有100,我要执行一个转账200的交易,就是一个无效的交易。 3 区块链:按照一定规则拍起来的长链 数据结构:链表 + Meckle树 ?

93730

深度丨解读比特币背后的奥秘丨附中字视频

区别在于其背后并不是某家银行来验证交易,而是基于密码学中某些数学方法的分散式的信任列表验证体系。 账本和电子签名 首先,我希望你暂时不管加密货币。先从更基本的概念入手:账本和电子签名。...总是用现金很不方便,所以可能会用到公共账本,记录了之后将会发生的交易信息。比如Alice支付Bob 20美元,Bob支付Charlie 40美元等。 这个账本将是公开的,每个人都能查阅。...这实际上就是一个账本,历史交易总和就是当下的货币(currency)。 当然就比特币而言,比特币并不会因为人们用现金购买就进入到账本上,之后我会细说新的资金如今进入账本。...基本的思路如下:如果将计算资源的消耗作为信任的基础,那么伪造的交易记录和不一致的账本,则需要不可能达到的计算能力。 提醒大家一下,这里涉及的内容是一般比特币的用户并不需要了解的。...输出值成为这个信息的哈希值或摘要,目的是看似为随机的,但并不是随机的,对应信息总是输出相同内容。但如果你稍微修改输入,也许只是修改了其中一个字母最终的哈希值将面目全非。

642100

Hyperledger Fabric 系统架构详解

企业级应用有较复杂的业务逻辑和参与者角色划分,对于业务执行效率、安全性要求很高,并且针对常见的如支付、数据/信息交易等场景,隐私保护也是重中之重,因此,常见的比特币、以太坊等公链并不符合大部分企业应用需求...如比特币区块链中,如果有一个新交易,会先采用 PoW 机制对 Block 进行排序,然后比特币网络中的每个节点逐个进行验证,最后更新状态。因为需要依序进行验证,这种方式决定了其执行效率相对较低。...收到一笔新的交易后,首先提交至背书节点本地模拟交易执行(并背书),再将已背书交易排序并广播,各个节点对交易进行验证后更新状态。...链码主要分成系统链码和用户链码两种,系统链码嵌入在系统内,提供对系统进行配置、管理的支持;而用户链码则是运行在单独的 Docker 容器中,提供对上层应用的支持,用户通过链码相关的 API 编写用户链码,即可对账本中状态进行更新操作...分布式账本主要记录世界状态(最新的分布式账本状态,一般使用CouchDB以方便查询)和事务日志(世界状态的更新历史,记录区块链结构,使用LevelDB),对账本的每个操作都会记录在日志中,不可篡改。

1.7K10

CPMI:支付、清算与结算体系中DLT技术应用的分析框架

DLT系统一般可实现以下一种或多种与账本维护相关的核心功能:(1)交易记录的保存;(2)资产的转移或账户余额的更新;(3)自动化工具的应用。...(二)交易处理成本 需在维护和更新分布式账本的总体成本,与目前市场实践和其他替代性解决方案的成本之间进行比较。为降低产业链特定环节的成本,行业主体正在探索各类DLT方案的应用。...有的DLT系统仅涉及对账本中的资产余额进行记录和更新,即通过借记、贷记方式记录头寸变动情况;有的DLT系统涉及账本中数字资产的转移,即记录仅存在于账本中的特定数字资产的所有权转移情况;而另一些DLT系统则涉及账本外的实物资产转移...在部分DLT系统中,通过账本更新和同步所有权变化需花费一些时间,比如,更新数据可能不代表进行结算,因为在同步账本中跨节点实现共识仍需要时间。...有的DLT系统允许所有节点获得账本副本,允许节点读取全部历史交易记录。但在金融行业中,DLT系统参与者本身可能并不希望,或不被允许提供完整数据。

1.3K50

MySQL 持久化保障机制-redo 日志

同样,在 MySQL 里也有这个问题,磁盘就相对于账本,如果每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。...在事务提交时将所有修改过的内存中的页面刷新到磁盘中相比,只将该事务执行过程中产生的 redo 日志刷新到磁盘的好处如下: redo日志占用的空间非常小:存储表空间ID、页号、偏移量以及需要更新的值所需的存储空间是很小的...redo日志是顺序写入磁盘的:在执行事务的过程中,每执行一条语句,就可能产生若干条redo日志,这些日志是按照产生的顺序写入磁盘的,也就是使用顺序IO。...如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。...redo日志缓冲区 redo 日志并不是直接写入磁盘的,而是先写入到缓存区,我们把这个缓冲区叫做 redo日志缓冲区。

1.1K10

MySQL 日志系统

目录 日志系统 日志模块 redo log binlog 一条更新 SQL 语句执行过程 两阶段提交 日志系统 上一篇学习了 SQL 的执行过程,这一篇主要的学习内容就在其基础上新增了一个重要的知识点,...如果 write pos 追上 checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把 checkpoint 推进一下。...这个能力成为 crash-safe crash-safe : 赊账记录记在了粉板上或写在了账本上,之后即使掌柜忘记了,比如突然停业几天,恢复生意后依然可以通过账本和粉板上的数据明确赊账账目。...“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 一条更新 SQL 语句执行过程 通过一条更新 SQL 来了解学习 MySQL 的日志系统。...引擎更新结果到内存,记录 redo log ,此时 redo log 处于 prepare 状态,反馈给执行器自己随时可以提交事务。 d. 执行器生成 binlog ,记录到磁盘。 e.

61130
领券