超级账本hyperledger fabric第七集:智能合约

本文详细介绍了Hyperledger Fabric的智能合约,包括执行环境、链码生命周期、链码交互流程、系统链码作用及链码编程接口。同时,讲解了网络搭建配置的实现步骤,从创建工程、配置文件编写到启动网络的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

智能合约

  • 执行环境:以太坊虚拟智能合约执行环境EVM,fabric执行环境是docker
  • 链码
    1. 是应用层和区块链底层的中间点
    2. 每一个链码执行环境是一个独立的docker
    3. 使用GRPC协议与背书节点通信,只有背书节点才能运行智能合约
  • 链码的生命周期
    1. 打包,智能合约的编写和编译
    2. 安装,将打包好的文件,上传到背书节点
    3. 实例化,实际的安装了,执行Init方法,只执行一次,构造函数
    4. 升级,升级和修复链码
    5. 交互,自己定义的方法的调用
  • 链码的交互流程

  • 系统链码(了解)
    1. LSCC:管理链码的生命周期
    2. CSCC:配置管理链码,管理链的配置
    3. QSCC:查询账本存储,是一个区块索引的外部服务
    4. ESCC:交易背书的链码,交易执行后的链码进行封装签名,给客户端返回背书交易结果
    5. VSCC:交易验证的链码
  • 链码编程的接口
    1. Init():链码初始化,只执行一次
    2. Invoke():链码的业务逻辑的编写
    3. 上面2个方法参数一样,参数是SDK的接口
  • 链码SDK的接口:写代码再看
  • 一些注意点:
    1. 分布式多机多节点执行,链码会执行很多次
    2. 不写随机函数,交易会无效,多次执行不一样
    3. 系统时间不写,多机时间不一定一样

网络搭建配置的实现

  • 创建fabric_asset工程,在里面创建chaincode文件夹。

  • 在badexample.go中
package main

import (
	"github.com/hyperledger/fabric/core/chaincode/shim"
	pb "github.com/hyperledger/fabric/protos/peer"
	"bytes"
	"strconv"
	"math/rand"
	"time"
	"fmt"
)

type BadExampleCC struct {
}

//每一个链码必须实现2个方法

//链码的初始化
func (c *BadExampleCC) Init(stub shim.ChaincodeStubInterface) pb.Response {
	//直接返回成功
	return shim.Success(nil)
}

//链码交互的入口
func (c *BadExampleCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response {
	//直接返回一个随机数结果
	return shim.Success(bytes.NewBufferString(strconv.Itoa(int(rand.Int63n(time.Now().Unix())))).Bytes())
}

func main() {
	err := shim.Start(new(BadExampleCC))
	if err != nil {
		fmt.Printf("Error starting Simple chaincode: %s", err)
	}
}
  • crypto-config.yaml:用于配置组织节点的个数,参考first-network去编写

  • 编写好后,传到linux对应目录

  • 进入deploy目录,设置工作目录为当前目录

  • 指定按照yaml文件生成配置

  • configtx.yaml:用于区块联盟中的组织信息,配置名字和证书等的位置,参考firs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值