前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了。...总之结果就是我们现在已经成功运行了e2e_cli这个网络,也就是说Example02这个ChainCode已经安装部署,并且测试通过了,我们接下来只是换用Node SDK的方式进行查询和调用。..."Application" ] } 最主要的就是dependencies,这里我们放了Fabric CA Client和Fabric Node SDK的Client,虽然本示例中没用到...从打印出的结果看,我们的转账已经成功了,我们可以重新调用之前写的query.js重新查询,可以看到a账户的余额已经变少了10元。...4.总结 我们以上的query和Invoke都是参照了官方的fabcar示例,该示例在https://github.com/hyperledger/fabric-samples/tree/release
而HyperLedger Fabric在1.0对系统架构进行了升级,使得事务的处理更加复杂。...Transaction成功,而第二条失败。...因为在Committer节点进行读写集版本验证的时候,第二条Transaction会验证失败。这是我完全无法接受的一点!...Fabric是异步的系统,在Endorser的时候a->b 10元,b->a 10元都会返回给SDK成功,而第二条Transaction在Committer验证失败后不进行State Database的写入...,但是并不会通知Client SDK,所以必须使用EventHub通知Client或者Client重新查询才能知道是否写入成功。
登录虚拟机 (2020-04-14 12:44:40) [jason@RUAN:~/Vagrant/js-fabric]$ vagrant ssh Welcome to Ubuntu 18.04.4 LTS.../byfn.sh down 3 开发测试 以下将使用VSCode远程开发模式,连接我们前面启动的Fabric网络进行远程开发。...= nil { return shim.Error("积分管理员初始化失败") } return shim.Success(nil) } // Invoke => 链码调用接口 func (...= nil { fmt.Printf("转出接口测试失败, %s\n", err.Error()) t.FailNow() } fmt.Println("a给b转账10元执行成功!")...导入客户端连接fabric所需证书 [vagrant@RUAN:/opt/gopath/src/github.com/hyperledger/fabric-sdk-go/test/fixtures/fabric
一直使用的都是 Fabric v1.4.8,所以智能合约也一直使用的都是 github.com/hyperledger/fabric/core/chaincode/shim 包。...byte, error)在开发 Fabric v2.2 的智能合约时, 使用 github.com/hyperledger/fabric-contract-api-go/contractapi 替换 github.com...float32float64time.Time任何允许类型的数组/切片结构体(其公共字段全部属于允许类型或另一个结构体)指向结构体的指针具有键类型为 string 和值为任何允许类型的映射interface{}(仅当直接传入时才允许,在通过事务调用时将接收一个...合同的函数只能返回零、一个或两个值:如果函数被定义为返回零值,那么对该合同函数的所有调用将返回成功响应如果函数被定义为返回一个值,那么该值可以是参数列表中列出的任何允许类型之一(除了 interface...如果函数被定义为返回两个值,那么第一个值可以是参数列表中列出的任何允许类型之一(除了 interface{}),第二个值必须是错误。
因为调用调用的是peer query,在代码中,只有invoke的时候才会执行Transaction步骤中的4、5、6、7.但是如果我们使用peer invoke,那么会怎么样呢?...Fabric不支持对同一个数据的并发事务处理,也就是说,如果我们同时运行了a->b 10元,b->a 10元,那么只会第一条Transaction成功,而第二条失败。...因为在Committer节点进行读写集版本验证的时候,第二条Transaction会验证失败。这是我完全无法接受的一点!...Fabric是异步的系统,在Endorser的时候a->b 10元,b->a 10元都会返回给SDK成功,而第二条Transaction在Committer验证失败后不进行State Database的写入...,但是并不会通知Client SDK,所以必须使用EventHub通知Client或者Client重新查询才能知道是否写入成功。
byfn.sh down会调用networkdDown去销毁整个网络和已生成的配置。byfn.sh restart则不会清理。...我们也可以参考例子fabric-samples/fabcar, 它会重用fabric-samples/basic-network中的start.sh, stop.sh允许停止和重启。.../msp/orderer/msp working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer command:...everyOther; } Fabric-SDK在设计的时候,无论是查询,更新,大多操作都是基于org.hyperledger.fabric.sdk.Channel作为入口, 例如...暂时先参考官方文档 https://hyperledger-fabric.readthedocs.io/en/release-1.2/kafka.html?highlight=kafka
", "11111"); 三,分析对比成功和失败日志 1.http请求通过sdk调用 ReadWine成功 //第一条日志记录了一个调用事务的评估操作。...在本例中,协议是TLSv1.3,密码套件是TLS_AES_128_GCM_SHA256。..., Size, Owner and AppraisedValue arguments //建立连接,SSL握手过程,成功,省略 //注意,从这里开始不一样了,之前成功的调用是/gateway.Gateway...wine with ID, Color, Size, Owner and AppraisedValue arguments //建立连接,SSL握手过程,成功,省略 //注意,从这里开始不一样了,之前成功的调用是...14988161u] streamDependency=0 weight=16 exclusive=false padding=0 endStream=false //客户端给服务端请求详细内容,之后的连接信息和成功调用时也一样
以下是在Ubuntu中安装并测试Fabric 1.0 Beta的步骤: 一、环境准备 1.1 安装VirtualBox并在其中安装好Ubuntu 这一步其实没啥好说的,下载好最新版的VirtualBox...然后安装ssh,这样接下来就可以用putty或者SecureCRT之类的客户端远程连接Ubuntu了。...在前面下载的官方提供的自动化部署脚本中,已经包含了启动Fabric实例的脚本。...3.1在CLI中测试Example02 首先我们需要登录到CLI这个容器中,才能执行Fabric的CLI命令。.../hyperledger/fabric/peer# 与0.6Fabric不同的是,在1.0中,链上代码是需要经过Install和Instantiate两步的。
, 按理说extra_hosts是要配置的, 不然peer0无法识别peer1和orderer节点。...配置CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052是不行的, 依旧域名命中转为31.86:7052端口绑定失败。...一个比较重要的配置项是CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE, 这里注意到的${COMPOSE_PROJECT_NAME}是在.env文件中配置了值为net, 漏了会出问题...这个配置项从注释上来看好像是让chaincode实例化时新起的容器与所在的peer节点在同一个桥接网络中。...笔者的环境不这样配就无法实例化链码,也需要设置peer, orderer,cli在同一个byfn网络内。 也有可能peer节点和orderer节点单独在不同机器就不需要这样配置, 请大家尝试。
string) (int, error)如果函数执行成功,则返回第一个参数 int;如果发生错误,则返回 error,如果没有对函数返回值进行检测,那么当读取发生错误时,则可能因为忽略异常和错误情况导致允许攻击者引入意料之外的行为...在很多平台上,解引用空指针可能会导致程序异常终止或拒绝服务。如:在 Linux 系统中访问空指针会产生 Segmentation fault 的错误。...•异常处理问题 通常每个函数调用结束后会返回相应的返回参数,错误码,如果未认真检查错误码值而直接使用其返回参数,可能导致越界访问,空指针引用等安全隐患。...•外部合约调用引入安全隐患 在某些业务场景中,智能合约代码可能引入其他智能合约,这些未经安全检查的合约代码可能存在一些未预期的安全隐患,进而影响链码业务本身的逻辑。...://github.com/hyperledger/fabric
如果你还没装这个,或者在本文中使用curl命令出现了错误,可以考虑下载最新的版本。...1.4版本的fabric要求go版本在1.11.x以上。...$ cd ~ $ mkdir hyperledger-fabric $ cd hyperledger-fabric $ curl -sSL https://raw.githubusercontent.com.../hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.4.0 1.4.0 0.4.14 $ # 这一步耐心很重要,最好是在晚上睡觉的时候.../byfn.sh restart 错误记录 这里会放一些我在启动过程中遇到的,或者别人遇到的错误问题,和一些解决方案,不过目前我有点忘了,下次遇见的时候再记录下来。
中创建init.sh image.png https://raw.githubusercontent.com/hyperledger/fabric/v1.0.5/scripts/bootstrap.sh.../crypto-config.yaml 在first-network目录下设置变量: export FABRIC_CFG_PATH=$PWD 设置变量并创建初始区块 执行 .....目录中安装客户端 npm install npm install 中1 npm install 中2 启动网络 ....应用程序中预先加载了一个queryAllCars函数,用于查询所有车辆,因此我们可以简单地运行程序: node query.js node query.js运行成功 如果想返回某个车辆信息,编辑query.js.../byfn.sh -m down出现错误的解决方法: https://segmentfault.com/a/1190000014221967 执行node registerUser.js出现错误:Failed
按区块查询 在Hyperledger Fabric中,要按区块进行查询,可以使用GetBlockByNumber函数来检索指定区块的详细信息。.../fabric/protos/peer" "github.com/hyperledger/fabric/protos/common" "github.com/golang/protobuf...在Invoke函数中,我们调用了GetBlockByNumber函数来查询指定区块号为1的区块数据。 GetBlockByNumber函数返回一个*common.Block对象,表示查询到的区块数据。...我们使用proto.Marshal函数将该对象序列化为字节流,以便在链码中返回。 最后,我们将查询结果作为成功的响应返回。 请注意,此示例是一个简化版本,并未包含完整的链码实现和必要的错误处理。...在实际开发中,应该根据具体需求进行适当的修改和错误处理。
$HOME/.profile 或者 /etc/profile 中添加: export PATH=$PATH:/usr/local/go/bin 输入 go version ,检查是否安装成功。...同时,在控制台可以看到下面相似的代码: ===> Pulling fabric Images ====> hyperledger/fabric-peer:2.3.0 ... ====> hyperledger...在启动完成,会列出启动的容器。 同样,我们自己可以通过 docker ps 查看容器运行情况,只有看到下面的情况,才表示运行成功。尤其是 STATUS(状态)一栏。 ?...(别问为什么,问就是刷新后就成功了,不刷新就不成功) ?...A : 因为之前的测试在使用阿里云的源时,在部署链码时总是遇见错误,原因未知。 Q : sudo ./network.sh deployCC 缺省参数为什么不行?
在与 VirtualBox 结合使用时,虚拟化环境对计算环境进行了不同程度的控制,这一点备受一些开发人员的青睐(使其成为 fabric 开发人员的理想选择)。...完成本节后,您就可以运行一个 Hyperledger Java 链代码示例了,在该示例中,您将在真实链代码上部署和调用交易。然后,我将展示如何(几乎)从头编写一个新链代码程序。...在本节中,您将: 设置网络环境 — 用于运行您的本地区块链网络。 安装构建软件 — 用于构建您的链代码。 安装一个 HTTP 客户端 — 用于在您的链代码上调用交易。 启动区块链网络。...使用其他版本的 Gradle 可能会导致项目搭建失败。 可以在 Gradle 主页 上进一步了解 Gradle(和它的一些知名度高的用户)。...请注意,由于 Fabric 版本升级,如果省略掉冒号及之后的字符,会导致构建错误。此处指定使用 Fabric 0.6 版本。
服务器 生成调用 REST API 的 Angular 应用程序 1、Hyperledger Fabric及相关应用程序简介 ?...要创建 Angular Web 应用程序,在终端中输入 yo hyperledger-composer,选择 Angular,选择使用卡 admin @ cards-trading-network ,连接到当前业务网络和...你使用 Hyperledger Fabric 和 Hyperledger Composer 成功创建了一个附带客户端程序的区块链业务网络。...保存文件,打开浏览器,尝试按下调用(invoke)按钮。成功,可用了! ? 2)删除不必要的字段 仅仅打开模态是不够的。...你已经在 Hyperledger Fabric上成功构建并部署了区块链业务网络。你还为该网络生成了一个 REST API 服务器,并学习了如何创建与 REST API 交互的 Web 应用程序。
智能合约比较成功的就是以太坊了。...部署 2.1 下载Fabric镜像 Fabric的Docker镜像是在https://hub.docker.com/r/hyperledger/ 我们要做实验主要用到peer,baseimage,membersrvc...三、测试Fabric 3.1 在CLI中测试Example02 我们前面创建了4个容器,开启另外一个命令行窗口,输入docker ps命令,可以看到当前容器的状态: CONTAINER ID ...3.2 在REST API中测试Example02 前面我们已经说到,容器的7050端口会映射成Ubuntu的7050端口,我们在Ubuntu下,运行ifconfig,可以看到Ubuntu的IP,然后我们回到...Fabric的源代码中也提供了Java示例,这里我们就用SimpleSample这个示例: https://github.com/hyperledger/fabric/tree/master/examples
题外话:以上这些技能除了在 fabric 区块链体系中需掌握,在如今火热的云原生技术下也一样是基础。.../fabric command: peer node start networks: - fabric_network 注意观察,在 volumes 配置项中,我们将 config...Invoke(stub ChaincodeStubInterface) pb.Response } 然后在启动入口 main 函数中调用 shim.Start(new(MyChaincode)) 就完成了链码的启动...链码的功能定义在 Invoke 方法中。...编写应用程序 在部署链码之后,我们是使用 cli 服务去调用的,但这种方式一般只是作为验证使用,更多情况下,应该是我们自己编写应用程序集成 fabric 提供的 SDK 去调用。
MobileIMSDK框架中,本字段为保留字段,不参与框架的核心算法,专留作应用层自行定义和使用。返回值:0表示数据发出成功,否则返回的是错误码,see ErrorCode。...返回值:0表示数据发出成功,否则返回的是错误码,see ErrorCode。...该消息只有在客户端连接服务器成功之后网络异常中断之时触发。...建议用途:应用层可通过回调中的指纹特征码找到原消息并可以UI上将其标记为“发送失败”以便即时告之用户。参数1:{Array}:由框架的QoS算法判定出来的未送达消息列表。...建议用途:应用层可通过回调中的指纹特征码找到原消息并可以UI上将其标记为“发送成功”以便即时告之用户。
在Hyperledger Fabric中,读写集冲突(Read-Write Set Conflict) 是指在多个事务试图同时修改或读取相同的账本状态时,由于版本号不一致导致的事务提交失败。...例如,两个不同的事务尝试更新同一个账户余额,这时只有第一个成功提交的事务能够成功,后续事务会因为版本号不一致而失败。...读写集冲突的解决在Fabric中,发生冲突的事务会被标记为无效,并不会应用到账本中。通常有以下几种方法来应对读写集冲突:重试机制:客户端可以捕获事务失败的错误信息,并选择重新发起提案。...读写集冲突的影响降低系统并发性能:频繁的读写集冲突会导致许多事务无法提交,影响系统的吞吐量。提高事务延迟:当需要多次重试才能成功提交事务时,事务的平均处理时间会显著增加。...增加客户端复杂性:客户端需要具备处理冲突的能力,并设计适当的重试和错误处理逻辑。总结读写集冲突是Hyperledger Fabric中保障账本数据一致性的关键机制。
领取专属 10元无门槛券
手把手带您无忧上云