hyperledger fabric 智能合约开发(二)------合约接口介绍

hyperledger fabric 1.4 使用java开发智能合约 hyperledger fabric使用java开发智能合约,也较为简单,我们今天就来聊一聊如何使用java开发智能合约,如需完整的学习fabric,可以参考视频教程 首先需要在pom里面引入fabric的智能合约的jar包,如下图所示,需要注意的点如下,引入maven-shade-plugin包,设置mainclass,且finalname必须为chaincode。 <dependenci... 阅读详情

合约接口介绍

Chaincode 实现 shim.ChaincodeStubInterface 接口,有三个方法,分别是:Init、Query 和 Invoke。

链码结构:

链码包头:由于需要编译为可执行文件,所以需要 main 包。

package main

导入包:导入其他库的包,一般这里需要导入两个包 "github.com/hyperledger/fabric/core/chaincode/shim" 和 "github.com/hyperledger/fabric/protos/peer" 其他包,根据实际需要而定。

import (

"fmt"

"strconv"

 

"github.com/hyperledger/fabric/core/chaincode/shim"

pb "github.com/hyperledger/fabric/protos/peer"

)

定义类结构,一般不设置,自定义结构需要自己设置

type SimpleChaincode struct {

}

Init方法 ,默认调用方法,进行账本初始化。

func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response {

}

只要在区块链状态上执行任何读取/获取/查询操作,就需要调用 Query 方法。如果尝试在 Query 方法内修改区块链的状态,将会抛出异常。

func (t *SimpleChaincode) Query(stub shim.ChaincodeStubInterface) pb.Response {

}

此方法主要是对区块链做修改操作,但是很多例子中一些用户也在 Invoke 做查询。put, get, del 等操作都在可以在 Invoke 中运行,通过输入的参数,来调用具体的函数。

func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response {

}

例如如下代码片段:

func (s *SmartContract) Invoke(stub shim.ChaincodeStubInterface) sc.Response {

// Retrieve the requested Smart Contract function and arguments

function, args := stub.GetFunctionAndParameters()

// Route to the appropriate handler function to interact with the ledger appropriately

if function == "balanceToken" {

return s.balanceToken(stub, args)

} else if function == "initLedger" {

return s.initLedger(stub)

} else if function == "transferToken" {

return s.transferToken(stub, args)

}

 

return shim.Error("Invalid Smart Contract function name.")

}

在Invoke 函数中,首先使用 stub.GetFunctionAndParameters() 获取合约函数参数,然后通过不同参数名称,实现调用智能合约不同的函数。

if function == "balanceToken" {

return s.balanceToken(stub, args)

} else if function == "initLedger" {

return s.initLedger(stub)

} else if function == "transferToken" {

return s.transferToken(stub, args)

}

main函数,程序的入口,该函数被用于引导/启动链代码。当对peer节点部署chaincode并实例化时,就会执行 main 函数,一般不做修改,shim.Start(new(SampleChaincode)) 启动链代码并注册到peer 节点。

func main() {

err := shim.Start(new(SimpleChaincode))

if err != nil {

fmt.Printf("Error starting Simple chaincode: %s", err)

}

}

合约函数,用于智能合约具体的代码逻辑,一般首字母小写以作区分,例子如下:

func (s *SmartContract) queryCar(APIstub shim.ChaincodeStubInterface, args []string) sc.Response {

 

if len(args) != 1 {

return shim.Error("Incorrect number of arguments. Expecting 1")

}

 

carAsBytes, _ := APIstub.GetState(args[0])

return shim.Success(carAsBytes)

}

本例中实现通过args []string,获取输入参数作为键,获得值的操作。

下一篇将介绍合约接口数据操作方法。希望大家关注我的微信公众号,有疑问可以后台留言。

用Hyperledger Fabric和VSCode的IBM区块链扩展开发智能合约 了解使用IBM Blockchain Platform的VSCode扩展来简化开发,测试和部署智能合约的过程。完成本教程后,你将了解如何使用VSCode在本地Hyperledger Fabric网络上快速开发,演示和部署区块链应用程序。本教程假设你对Hyperledger Fabric有一些基本的了解。 学习目标 安装IBM Blockchain Platform VSCode扩展。 创建一个新... 阅读详情

相关推荐

超级账本HyperLedger:Fabric的Chaincode(智能合约、链码)开发、使用演示

作者: 李佶澳   转载请保留:原文地址   发布时间:2018/07/17 10:20:00 说明 Example-1:demo 合约安装&amp;单合约调用 获取合约代码 安装合约&amp;初始化 合约直接调用 并发或快速修改数据时需要注意的问题 合约链式调用 参考 说明 这是网易云课堂“IT技术快速入门学院”使用的素材。 这里演示合约的用法,合约...

IT技术快速入门学院的博客 6301

Hyperledger Fabric 智能合约实战 (6) 访问链码接口

1. 下载fabric-samples 示例。 2. cd fabric-samples/fabcar //使用 startFabric.sh 脚本启动网络。 ./startFabric.sh javascript 3. npm install 4. 登记管理员用户 4.1 登记一个 admin 用户: 一个管理员用户( admin)被证书授权服务器(CA)创建成了 注册员 。我们第一步要使用 enroll.js 程序为 admin 生成私钥、公钥和 x.509 证书。这个程序使用一个 证书签名请求

thefist的专栏 541

hyperledger fabric 1.4 智能合约api总结

智能合约开发以go语言为例,ChaincodeStubInterface为其智能合约的核心接口,本文主要讲解此接口的所有常用方法,如需视频学习,可以参考视频教程 stub.PutState(args[0],[]byte(args[1])) 用于将数据进行存储,采用K-V格式进行存储, stub.GetState(args[0]) 根据key获取value stub.DelState(k...

u013782473的博客 2405

【hyperledger-fabric】部署Java应用远程访问智能合约

首先是根据b站的视频这里进行操作,本文章主要讲述的是这节视频中我遇到的问题,以及相关知识点的总结。

小小的胡萝卜的博客 2769

hyperledger fabric 1.4 智能合约介绍

智能合约是一段代码程序可以部署在区块链平台中。 在fabric中的智能合约分为两大类,一种是系统智能合约,一种是用户自定义合约,同时fabric中的智能合约也叫chaincode,链码。 普通合约就是用户自己定义开发的合约,用于完成用户的业务需求。普通合约的生命周期满足install,instantiateandupgrade(安装,实例化,升级)的步骤。普通智能合约是运行在docker里面...

u013782473的博客 1781

Hyperledger Fabric使用Java自定义智能合约

文章目录Hyperledger Fabric使用Java自定义智能合约一、前提二、我的主要文件目录三、开始了1、启动测试网络2、创建通道3、配置环境变量4、合约代码5、打包合约源代码6、安装链码7、查看已安装的合约清单8、审批合约9、合约提交检查10、向通道提交合约11、测试拉四、最后 Hyperledger Fabric使用Java自定义智能合约

这里是Mae。 6182

hyperledger单机部署并执行智能合约

centos 7.4 阿里云香港服务器 peer create chaincode 时 -channelID  前有一个横杠 1、更新依赖源 sudo yum update 2、安装docker sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2 3、安装有关的依赖 sudo yum-config-man...

frankxixu的专栏 2103

Hyperledger Fabric是区块链中联盟链架构详细介绍

区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程。。 1、区块链解决方案的特性 1.1 分布式帐本 区块链核心概念是分布式帐本,就像下面的图1所示,同样的...

街角有人祝福,巷口有人哭~ 8664

fabric shim安装合约_Hyperledger Fabric(超级账本) Java 开发区块链 部署运行智能合约...

部署并运行 Java 链代码示例您已经定义并启动了本地区块链网络,而且已构建 Java shim 客户端 JAR 并安装到本地 Maven 存储库中,现在已准备好在之前下载的 Hyperledger Fabric 附带的一个 Java 链代码示例上构建、注册和调用交易。部署并运行链代码您将执行以下步骤:使用 Gradle 构建示例。通过运行 Gradle 构建软件为您创建的脚本,向验证对等网络注册...

weixin_39831242的博客 597

CA(载波聚合)

文章目录CA基本概念1. CA分类2. Pcell、Scell以及Serving CellPcell(Primary Cell)Scell(Secondary Cell)3. Pcell、Scell部署场景场景1场景2场景3场景44. CA的协议控制4.1 Camping/Connetion Establishment:4.2 CC Management/SCell Addition/Release:4.3 Handover/Measurements:4.4 SCell激活 CA基本概念 CA也就是我们中文

你又来看我了,一起学习吧 4万+

鼎捷T100——二次开发:维护作业添加非实体字段

非实体字段添加

weixin_52342654的博客 1156

一个小时带你用 Hyperledger Fabric开发一个Demo

先懂是什么,再懂怎么做,再懂为什么 本文作为系列开篇,力求通过一个简单fabric应用开发过程,让大家对fabric有个直观概括的了解。 前言 先放三张图: 第一张是Gartner 2017的技术成熟曲线图。对这张图的理解,大家仁者见仁智者见智,作为区块链从业者,既不想它被过度吹捧也不想被无脑黑。区块链不是万能的,但是在某些方向,尤其是对敏感信息加密共享有旺盛需求的领域,确实有其优势。 第二张是当前主要区块链项目的发展和应用状况。公共链领域,比特币依然一骑绝尘,以太坊紧跟...

建建的博客 4711

Hyper-V创建Ubuntu虚拟机设置固定IP

本文记录使用hyper-v创建ubuntu虚拟机,为虚拟设置固定IP且通过物理机可访问。

2622

使用Java开发Fabric智能合约Chaincode

场景:之前公司使用的是Fabric1.4,智能合约使用的是go语言开发的。现在为了方便接入到Bass平台,需要切换fabric的java SDK,并且智能合约也使用java开发。 1、pom文件 引入pom依赖: <dependency> <groupId>org.hyperledger.fabric-chaincode-java</groupId&g...

DamonREN的博客 8522

NFT图片批量合成及稀有度计算工具

一、制作背景 -当前NFT作品制作的大多方式都是使用部件拼接的形式,然后从大量的可能性结果取优; 二、解决问题 拼接合成的组合数量十分巨大,手工合成费时费力; 合成中对各个部件的使用次数不容易控制,部位出现的概率对作品的稀有度及评分影响较大; 对于生成的作品各个部位的信息(包括来源和使用率)统计繁琐,不利于对作品的介绍中体现; 三、程序功能介绍 1、功能自定义部位稀有度批量合成NFT作品 步骤一:创建各个合成部件文件夹,将图片放到文件夹内 步骤二:软件上设置各个部件对于的图片文件夹及出现的概率 步骤二

Keeping111的博客 4638

电机控制必看!SVPWM谐波优化:5段式与7段式全参数对比测试

本文通过实测数据,对比分析了电机控制中5段式与7段式SVPWM控制算法的谐波性能。实验表明,7段式SVPWM在电流波形质量(THD)和低速性能上更优,而5段式SVPWM则在开关损耗和效率方面表现突出。文章为工程师在不同应用场景(如对噪音、效率或动态响应的侧重)下的算法选型提供了清晰的依据和实用的工程指南。

weixin_28331555的博客 176

Hyperledger Fabric Chaincode智能合约

前言 之前Hyperledger Fabric 1.1区块链的环境搭建完成了,接下来要为项目开发智能合约。那么先编写一份简单的智能合约吧。 什么是chaincode chaincode代码通常处理由网络成员同意的业务逻辑,因此它相当于“智能合约”。可以调用chaincode代码来更新或查询提案交易中的分类帐。考虑到适当的许可,chaincode代码可以调用另一个chaincode代码,无论是...

卿酒酒丶的博客 5867

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3524

Hyperledger Fabric教程--部署Fabric智能合约

在HyperledgerFabric中,智能合约部署在称为链码的包中。想要验证交易或查询分类账的组织需要在其peer节点上安装链码。在加入通道的peer节点上安装链码后,通道成员可以将链码部署到通道,并使用链码中的智能合约在通道分类账上创建或更新资产。链码使用一个称为Fabric chaincode lifecycle的过程部署到通道。Fabric链码生命周期允许多个组织在链码可用之前就其操作方式达成一致。本教程学习如何使用peer lifecycle chaincode命令将链码部署到测试网络。

专注 AI、大数据、Python、爬虫、数据分析可视化、机器学习、推荐算法、知识图谱、大模型应用与全栈系统开发,长期沉淀真实项目案例、源码解析、系统设计、部署经验与工程化实践,分享可运行、可复用、可落地的技术方案。 5530

ubuntu系统禁止/开启内核自动更新

内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。

m0_50105717的博客 5288

Open3D点云数据处理(六):点云、mesh可视化(Visualizer类)

本文介绍了Open3D中Visualizer类可视化几何对象的方法,给出了常用参数解释和代码示例。

孙悟空 3022

Hyperledger Fabric 2.x 自定义智能合约

本文分享如何使用 Java 语言开发智能合约,以及合约的安装与使用。

zlt2000的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hyperledger Fabric 智能合约开发及 fabric-sdk-go/fabric-gateway 使用示例

在上个实验 Hyperledger Fabric 多组织多排序节点部署在多个主机上 中,我们已经实现了多组织多排序节点部署在多个主机上,但到目前为止,我们所有的实验都只是研究了联盟链的网络配置方法(尽管这确实是重难点),而没有考虑具体的应用开发。本文将在前面实验的基础上,首先尝试使用 Go 语言开发了一个工作室联盟链的项目信息智能合约,并成功将其部署至联盟链上;然后依据官方示例,使用 fabric-gateway 模块实现了一个能够管理项目信息智能合约的客户端;之后对比了 fabric-gateway 模块

风色幻想的博客 3万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何使用 Java 语言为 Hyperledger Fabric 编写区块链链代码智能合约

面向 Java 开发人员的链代码简介 您或许听说过区块链,但可能不确定它对 Java™ 开发人员有何用。本教程将帮助大家解惑。我将分步展示如何使用 Hyperledger Fabric v0.6 来构建、运行和执行使用 Java 语言编写的智能合约或链代码。您将安装一些工具,定义本地区块链网络,构建并运行一个链代码智能合约。 有关区块链的概述,请参阅 developerWorks 博客中的 “...

mongo_node的专栏 8082

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

1、Hyperledger Fabric介绍

简介 Hyperledger介绍 超级账本(Hyperledger)项目是首个面向企业应用场景的开源分布式账本平台。由linux基金会牵头,包括 IBM 等 30家初始企业成员共同成立的。 Hyperledger Fabric是什么 该项目定位是面向企业的分布式账本平台,引入权限管理,设计上支持可插拔、可扩展,是首个面向联盟链场景的开源项目。 Fabric 基于 Go 语言实现,...

BlockChainBoy 1万+
上一篇: hyperledger fabric(零)目录
下一篇: hyperledger fabric 智能合约开发(三)------合约接口的数据操作方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值