区块链100讲:Hyperledger Fabric 中的链码(智能合约)

2023-11-15

1

链码概念

网络运行环境我们已经启动完成,现在我们从开发者的角度来认识一下完成交易所必须的智能合约(在 Hyperledger Fabric 中被称之为 Chaincode,也就是链上代码)的相关知识,以便于理解账本中的数据到底是通过什么方式进行操作。

Chaincode:链上代码,简称链码,一般是指由开发人员使用Go语言(也支持Java等语言)编写的应用程序代码,提供分布式账本的状态处理逻辑。链码被部署在Fabric的网络节点中,能够独立运行在具有安全特性的受保护的 Docker 容器中,以 gRPC 协议与相应的 peer 节点进行通信,以操作(初始化或管理)分布式账本中的数据。可以根据不同的需求开发出不同的复杂的应用。

链码分类

在 Hyperledger Fabric 中,链码一般分为:

  • 系统链码

  • 用户链码

2

Fabric提供了什么-系统链码

负责 Fabric 节点自身的处理逻辑, 包括系统配置、背书、校验等工作

系统链码仅支持 Go 语言, 在 Peer 节点启动时会自动完成注册和部署

系统链码共有五种类型:

配置系统链码(CSCC)

CSCC:Configuration System Chaincode,负责处理 Peer 端的 Channel 配置。

生命周期系统链码(LSCC)

LSCC:Lifecycle System Chaincode,负责对用户链码的生命周期进行管理。

查询系统链码(QSCC)

QSCC:Query System Chaincode,提供账本查询 API。如获取区块和交易等信息。

背书管理系统链码(ESCC)

ESCC:Endorsement System Chaincode,负责背书(签名)过程, 并可以支持对背书策略进行管理

对提交的交易提案的模拟运行结果进行签名,,之后创建响应消息返回给客户端

验证系统链码(VSCC)

VSCC:Validation System Chaincode,处理交易的验证,包括检查背书策略以及多版本并发控制

3

什么是用户链码

由应用程序开发人员根据不同场景需求及成员制定的相关规则,使用 Golang(或Java等)语言编写的基于操作区块链分布式账本的状态的业务处理逻辑代码,运行在链码容器中,通过 Fabric 提供的接口与账本状态进行交互。

用户链码在整个应用程序中处于重要地位。因为它下可对账本数据进行操作,上可以给企业级应用程序提供调用接口。所以一个没有链码的企业级应用程序,不能称之为是基于区块链的企业级应用程序。

4

链码的生命周期管理

链码开发编写完成后,并不能立刻使用,而是必须经过一系列的操作之后才能应用在 Hyperledger Fabric 网络中进而处理客户端提交的交易。这一系列的操作是由链码的生命周期来负责管理。

管理 Chaincode 的生命周期共有五个命令:

  • install:将已编写完成的链码安装在网络节点中。

  • instantiate:对已安装的链码进行实例化。

  • upgrade:对已有链码进行升级。链代码可以在安装后根据具体需求的变化进行升级。

  • package:对指定的链码进行打包的操作。

  • singnpackage:签名。

安装、实例化、升级这三项操作不适用于系统链码

链码的生命周期管理命令现阶段只有这五个,但未来还会支持 stop 和 start 命令, 用来停止和启动链码。

链代码成功安装和实例化后,则处于活动状态(正在运行),时刻准备执行处理提交的交易提案。

下一节开始我们会使用这些生命周期管理命令来实现对链码的相关操作。

5

FAQ

文中所说的状态与账本数据是什么关系?

状态其实指的就是账本中的数据。没有其它另外的含义。

链码可以访问所有账本中的状态吗?

一个链码对应一个账本,所以一般情况下链码是不可以访问其它账本中的数据的。

内容来源:区块链兄弟

作者:韩小东

课程推荐

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链100讲:Hyperledger Fabric 中的链码(智能合约) 的相关文章

  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • 如何在 Java 中禁用 System.out 以提高速度

    我正在用 Java 编写一个模拟重力的程序 其中有一堆日志语句 到 System out 我的程序运行速度非常慢 我认为日志记录可能是部分原因 有什么方法可以禁用 System out 以便我的程序在打印时不会变慢 或者我是否必须手动检查并
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • ubuntu20.04 NVIDIA显卡驱动安装

    前情介绍 大概就是自己手动装的NVIDIA 显卡突然寄掉了 就是输入 nvidia smi 显示驱动找不到类似的 NVIDIA SMI has failed because it couldn t communicate with the
  • fortify代码扫描使用教程

    配置信息 HP Fortify SCA and Applications 4 10 WIN7 64位家庭版 打开fortify的工作台 选择Advanced Scan 如果你知道源代码是java的可以选择Scan Java C 可以选择Sc
  • 用while语句输出100以内的素数

    include
  • 【Node.js实战】一文带你开发博客项目之登录(对接完毕,cookie、session、redis各司其职)

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力n年 推荐学习 前端面试宝典 Vue2 Vue3 Vue2 Vue3项目实
  • 22年美赛c题-交易策略

    目录 题目 前言 数据预处理 模型假设 第一问 总体思路 预测模型 评价指标 MACD 评价指标 RSI 评价指标3 预测模型 层次分析法 AHP 交易模型 第二问 第三问 模型的不足 题目 开发一个模型 该模型仅基于当天的价格数据提供最佳
  • 2022护网日记,护网工作内容、护网事件、告警流量分析

    作者主页 士别三日wyx 作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 2022护网日记 一 监控设备 二 工作内容 三 安全事件 1 失陷主机排查 2 后门网站修复 四 告警流量分析 1 信息泄露
  • 7-4 快速排序

    7 4 快速排序 20 分 注 由于是用map计数暴力实现的 所以当数据量大的时候就会WA 众所周知 Keven是一个ACMer 他今天刚刚学会了快速排序 他非常开心 因为他可以快速的找到区间第K小的数字了 但是同为ACMer的JOJO看不
  • Linux系统下查看被杀死进程的信息

    通过dmesg 命令分析原因 软件在运行时显示 进程被杀死 首先通过命令查看被杀死的进程的情况 dmesg egrep i B100 killed process 显示 在被杀死的时候该进程占用的内存 22588 717326 Killed
  • string的length()与size()方法有什么区别

    正如文档http en cppreference com w cpp string basic string中所述 string的length 和size 方法只是同义词而已 size 方法与其他的STL容器一致 比如vector map等
  • 数据库和缓存双写一致性

    文章目录 前言 1 常见方案 2 先写缓存 再写数据库 3 先写数据库 再写缓存 3 1 写缓存失败了 3 2 高并发下的问题 3 3 浪费系统资源 4 先删缓存 再写数据库 4 1 高并发下的问题 4 2 缓存双删 5 先写数据库 再删缓
  • 锐捷交换机生成树

    生成树 Ruijie config spanning tree 打开Spanning Tree协议 锐捷设备默认起开了STP Ruijie config spanning tree mode mstp rstp stp 切换Spanning
  • Java学习之Struts 2.x

    与传统的Struts1 x相比 Struts2 x允许使用更普通的 传统的Java对象作为Action Action的execute方法不再与Servlet API耦合 因而更易测试 支持更多的视图技术 基于AOP思想的拦截器机制 提供了极
  • Downloading C/C++ language components (Linux / x86_64)

    Problem The report from vscode as shown in the title cannot be canceled and keep showing there This happens when I am tr
  • Linux 安装gcc和运行代码(Ubuntu为例)

    目录 一 安装gcc 二 gcc编译 运行代码 首先检测网络连通性 一 安装gcc 1 打开虚拟机终端 安装gcc 输入 sudo apt install gcc 2 安装完成后检查 输入 gcc version 如果出现以下内容 则说明安
  • 基于沙猫群优化算法的线性规划求解matlab程序

    基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫 俗名沙漠猫 与荒漠猫名字相似 但却是两种不同的猫科动物 沙猫生活在茫茫沙漠里 主要分布在分布于非洲北部 阿拉伯半岛中部和西南亚 沙猫的家园 是贫瘠
  • Node.js 从零开发 web server博客项目[koa2重构博客项目]

    web server博客项目 Node js 从零开发 web server博客项目 项目介绍 Node js 从零开发 web server博客项目 接口 Node js 从零开发 web server博客项目 数据存储 Node js
  • 【Python脚本抢红包】用Python写了一个自动抢红包工具,今年过年准备大干一场

    话说又要过年了 现在过年可没有小时候的味道了 小时候只顾着放鞭炮 现在只顾着各个群里蹲红包 但是手动抢肯定没戏 毕竟手can谁也没办法 那就只能试试能不能通过编程的方式实现自动化抢红包了 跟小编一样财迷的铁汁们 可以往下滑了 代码文末可取
  • 基于计算机视觉的智能制造:实现对智能制造的实时监控和调度

    作者 禅与计算机程序设计艺术 1 简介 智能制造 Intelligent Manufacturing 是在不断进步的科技和技术领域里 将智能技术应用到制造领域中去 实现机器 设备 材料的自动化和精准化过程 提升生产效率 降低成本 节约能源和
  • ESX虚拟机克隆后提示设备"0"的配置无效

    一般是克隆后mac地址与原网卡mac地址不符导致的 解决办法 下载虚拟机 vmx文件 修改其中的跟网卡eth0相关的mac地址跟实际mac相符 实在不行就删除网卡0 再添加一块网卡 有时候网卡驱动类型不符也不会报类似的错误 虚拟网卡一般有三
  • 区块链100讲:Hyperledger Fabric 中的链码(智能合约)

    1 链码概念 网络运行环境我们已经启动完成 现在我们从开发者的角度来认识一下完成交易所必须的智能合约 在 Hyperledger Fabric 中被称之为 Chaincode 也就是链上代码 的相关知识 以便于理解账本中的数据到底是通过什么