hyperledger fabric 测试(六)1.15链码API

Hyperledger Fabric 1.0 安装和使用 注意:代码路径已更新,可以直接参考 https://github.com/yeasy/docker-compose-files/tree/master/hyperledger_fabric/。Hyperledger Fabric 1.0 版本整体 重新设计了架构,预计将于今年 3 月份发布。目前已经进入了 alpha 阶段,可以进行功能性验证。本文将介绍如何快速启动一个 Fabric 1.0 的网... 阅读详情

1.新建并进入链码存储文件夹:mkdir -p $GOPATH/src/sacc && cd $GOPATH/src/sacc

编写智能合约vim saac.go:

package main                      //go语言主包开始

import (                          // 引入库

    "fmt"                        //第一个为自身的库,作为输出显示

 

    "github.com/hyperledger/fabric/core/chaincode/shim"   //引入shim接口库,fabric专有

    "github.com/hyperledger/fabric/protos/peer"     //引入节点数据流库,处理节点的数据

)

 

// SimpleAsset implements a simple chaincode to manage an asset 定义资产结构

type SimpleAsset struct {

}

 

// Init is called during chaincode instantiation to initialize any

// data. Note that chaincode upgrade also calls this function to reset

// or to migrate data. 实例化时初始化函数。必须有

func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response { //调用接口,获得参数

    // Get the args from the transaction proposal

    args := stub.GetStringArgs()                //获得API上传的参数

    if len(args) != 2 {                         //如果参数不为两个报错,通过接口显示错误

            return shim.Error("Incorrect arguments. Expecting a key and a value")

    }

 

    // Set up any variables or assets here by calling stub.PutState()

 

    // We store the key and the value on the ledger

    err := stub.PutState(args[0], []byte(args[1]))    //将获得的数据写入账本,同时如果发生错误,则收集发生错误

    if err != nil {                           //如果发生错误就显示错误和参数

            return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0]))

    }

    return shim.Success(nil)         //返回成功初始化

}

 

// Invoke is called per transaction on the chaincode. Each transaction is

// either a 'get' or a 'set' on the asset created by Init function. The Set

// method may create a new asset by specifying a new key-value pair.

func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response { //通过接口获取参数

    // Extract the function and args from the transaction proposal

    fn, args := stub.GetFunctionAndParameters()  //通过接口,调用getfunc获取参数函数名,具体参数

 

    var result string

    var err error

    if fn == "set" {               //如果函数名为set,调用set函数,上传参数

            result, err = set(stub, args)

    } else { // assume 'get' even if fn is nil  //否则,调用get函数

            result, err = get(stub, args)  

    }

    if err != nil {                            //如果有错误,则发出错误

            return shim.Error(err.Error())

    }

 

    // Return the result as success payload

    return shim.Success([]byte(result))      //返回调用成功

}

 

// Set stores the asset (both key and value) on the ledger. If the key exists,

// it will override the value with the new one

func set(stub shim.ChaincodeStubInterface, args []string) (string, error) { //将2个键值对上传至账本

    if len(args) != 2 {                          //如果参数个数不为2,则报错

            return "", fmt.Errorf("Incorrect arguments. Expecting a key and a value")

    }

 

    err := stub.PutState(args[0], []byte(args[1]))  //键值对上传至账本,如果报错收集错误

    if err != nil {

            return "", fmt.Errorf("Failed to set asset: %s", args[0])

    }

    return args[1], nil

}

 

// Get returns the value of the specified asset key

func get(stub shim.ChaincodeStubInterface, args []string) (string, error) {  //通过接口获得参数

    if len(args) != 1 {

            return "", fmt.Errorf("Incorrect arguments. Expecting a key")

    }

 

    value, err := stub.GetState(args[0])         //账本中寻找数据,同时收集错误

    if err != nil {

            return "", fmt.Errorf("Failed to get asset: %s with error: %s", args[0], err)

    }

    if value == nil {

            return "", fmt.Errorf("Asset not found: %s", args[0])

    }

    return string(value), nil

}

 

// main function starts up the chaincode in the container during instantiate

func main() {                                              //主函数,价值结构完整

    if err := shim.Start(new(SimpleAsset)); err != nil {

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

    }

}

2.编译智能合约准备:go get -u --tags nopkcs11 github.com/hyperledger/fabric/core/chaincode/shim

go build --tags nopkcs11

进入编译和测试demo: cd chaincode-docker-devmode

在此目录下新建三个终端

同时T1下载镜像:docker-compose -f docker-compose-simple.yaml up

T2进入测试程序容器:docker exec -it chaincode bash

进入合约文件夹:cd sacc

编译智能合约:go build

对等节点运行链码:CORE_PEER_ADDRESS=peer:7052 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc

进入cli容器:docker exec -it cli bash

安装程序:peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0

实例化在通道程序:peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc

3.测试程序

初始化程序:peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc

查询函数peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc //query时默认的不进行账本改变的查询

Hyperledger Fabric 链码开发避坑指南:从环境搭建到 Endorsement 策略配置(附实战解决方案) 版本兼容性优先:搭环境前先查 Fabric、Go、Docker 的版本对应关系,别盲目用最新版;数据存账本不存内存:链码是无状态的,所有状态数据必须用PutStateGetState操作账本;背书策略按业务设计:关键操作多组织背书,查询操作宽松,避免“一刀切”策略。阶段检查项环境搭建1. Go 版本是否匹配 Fabric 版本;2. 非 root 用户操作;3. Go 代理配置正确链码开发1. 结构体字段首字母大写;2. 不用全局变量存状态;3. 处理错误(不忽略 err)链码部署。 阅读详情

相关推荐

Hyperledger Fabric基础

Hyperledger Fabric基础

笔记|思路|总结 380

Hyperledger Fabric 入门笔记(八)Fabric V2.5 测试网络进阶之可视化

本节介绍如何在测试网络中使用Fabric官方提供的区块链浏览器以及使用Portainer来管理容器。

sbsy123456的博客 2100

基于Hyperledger Fabric的农产品溯源平台:从架构设计到性能调优实战

区块链技术通过分布式账本、共识机制和智能合约,构建了多方协作下的可信数据交换基础。其核心原理在于利用密码学保障数据不可篡改,并通过去中心化架构消除单点信任依赖。这一技术为供应链管理、金融结算等需要高可信环境的场景提供了革新方案。尤其在联盟链模式下,如Hyperledger Fabric,它在权限可控、性能可扩展与隐私保护之间取得了平衡,非常适合企业级应用。本文以农产品溯源为具体场景,深入探讨如何利用Fabric的通道机制实现数据隔离,并借助Tape工具进行性能压测与调优,解决从链码设计到生产部署中的实际工程

weixin_34297704的博客 388

Fabric测试与基础

peer与orderer属于系统模块,其它三个属于工具模块。peer:主节点模块,负责存储区块链数据,运行维护链码。configtxlator:区块和交易解析模块。./network.sh down #关闭。configtxgen:区块和交易生成模块。./network.sh up #启动。cryptogen:组织和证书生成模块。orderer:交易打包、排序模块。

weixin_64443786的博客 951

基于Hyperledger Fabric的物联网设备身份管理与访问控制实战

在物联网安全领域,设备身份认证与数据访问控制是保障系统可信的基石。传统中心化方案存在单点故障和审计困难等痛点。区块链技术以其去中心化、不可篡改的特性,为构建可信身份体系提供了新思路。其核心原理是通过分布式账本和共识机制,确保身份信息与访问策略的透明与可靠。技术价值在于实现了设备身份的自主权与全生命周期可追溯,并通过智能合约将访问控制策略代码化、自动化。应用场景广泛覆盖智能家居、工业物联网等需要对海量设备进行精细化权限管理的领域。本文以Hyperledger Fabric联盟链为例,结合**智能合约**和**

weixin_34037515的博客 331

安卓-折叠屏平行视界适配(多厂商兼容与优先级实战)

本文详细解析了安卓折叠屏平行视界适配的现状与挑战,重点探讨了多厂商兼容性策略和优先级冲突的实战解决方案。通过对比Google的Embedding方案和国内厂商的EasyGo标准,提供了检测设备支持方案、处理优先级冲突及双方案共存的最佳实践,帮助开发者高效完成折叠屏适配。

weixin_29190169的博客 162

Fabric使用自己的链码进行测试-go语言

在编写并部署好自己的链码之后,接下来就是在测试网络上部署自己的链码

ThePythonFucker的博客 2079

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

(Fabric 学习二)测试fabric2.0 test-network使用basic链码

首先在~/go/src/github.com/hyperledger/fabric下进行orderer和peer的编译 编译Orderer $ cd $GOPATH/src/github.com/hyperledger/fabric/ $ make orderer 命令执行后终端输出如下: 编译peer $ make peer 命令执行后终端输出如下: 编译生成相关工具 Hyperledger Fabric除了Orderer和Peer之外,还为我们提供了在搭建...

Wannabe_hacker的博客 9519

STM32+CubeMX实战:5步搞定LWIP HTTP服务器搭建(附常见编译错误解决)

本文详细介绍了基于STM32和CubeMX平台,快速搭建LWIP HTTP服务器的5步实战指南。内容涵盖从项目初始化、LWIP深度配置到解决经典的`HTTPD_FSDATA_FILE`编译错误,并分享了使用VSCode进行高效开发的工作流,旨在帮助嵌入式开发者快速实现网络功能并规避常见陷阱。

weixin_29192365的博客 572

1. 基于STM32的1.28寸圆形IPS屏(GC9A01)驱动移植实战:软件SPI与硬件SPI双方案详解

本文详细介绍了如何在STM32平台上为1.28寸圆形IPS屏(GC9A01驱动芯片)移植驱动程序,涵盖软件SPI与硬件SPI两种实现方案。内容从引脚定义、工程搭建、GPIO配置到SPI外设初始化逐步详解,并提供了完整的测试代码,帮助开发者根据项目需求(灵活性或性能)选择合适的通信方式,快速点亮屏幕并集成到智能手表等嵌入式项目中。

weixin_42300144的博客 203

Expecting "jsp:param" standard action with "name" and "value" attributes错误

<br />错误信息如下:<br />org.apache.jasper.JasperException: /index.jsp(14,0) Expecting "jsp:param" standard action with "name" and "value" attributes<br />     org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)<br />     org.a

JeamKing的专栏 2万+

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

2023年12月机器人技术等级考试试卷(三级理论) 试题解析

http://www.cierobot.com 4095

Ubuntu环境下搭建hyperledger fabric测试网络详细教程

Ubuntu环境下搭建hyperledger fabric超级无敌详细教程 一、搭建前提条件 1.1 如果尚未安装最新版本的git,请安装它 $ sudo apt-get install git 1.2 如果尚未安装最新版本的curl,请安装它 $ sudo apt-get install curl 1.3 如果尚未安装最新版本的Docker,请安装它 1.3.1 如果安装了docker旧版本,卸载旧版本docker(可选) $ sudo apt-get remove docker docker-en

qq_41831136的博客 8220

电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?

DGND是数字地,是数字电路部分的公共基准端,用于连接数字电路的接地。

XU157303764的博客 2338

单片机:实现FFT快速傅里叶变换算法(附完整源码)

单片机:实现FFT快速傅里叶变换算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1099

Fabric 2.4.9 链码自定义、打包和测试

前面的教程中使用的链码都是由 Fabric 提供的一个非常简单的链码示例(sacc),本教程将记录如何自定义链码、打包链码和测试链码的详细过程。(这里提到的链码都是。中文白皮书和英文白皮书中的部分内容存在小小的区别,不像是按照英文翻译过来的,而且中文白皮书没有 Fabric 2.4 版本的。的基础上二次开发出来的新版本,但是在 Fabric 2.4.9 中仅支持旧版本。的 Go 合约 API 来开发的,我们需要将其转换为旧版本的链码。库的 Go 合约 API 来开发的。所以在本教程中编写的链码都是基于。

qq_46380363的博客 1018

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【DEBUG】Hyperledger Fabric链码安装失败:深入解析Go版本兼容性问题与解决方案

本文深入解析了Hyperledger Fabric链码安装失败并报错“status: 500”的常见原因——Go版本兼容性问题。文章通过真实案例,详细阐述了从宿主机Go版本、peer二进制文件到fabric-ccenv构建镜像的完整兼容性链条,并提供了四步诊断法和四种根治方案,帮助开发者系统性地解决链码构建失败难题。

milk5的博客 683

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hyperledger fabric部署链码(一)打包链码

Hyperledger Fabric 是 Hyperledger (超级账本)中的区块链项目之一,也是经典的联盟链之一。它有一个账本,使用智能合约,由参与者管理交易的系统,但它又不完全去中心化,即想要加入联盟的成员们需要从可信赖的成员服务提供者(MSP)注册,以下是一些相关概念的介绍。

wangzelong046的博客 730

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

区块链项目实战HyperLedger(超级账本)Fabric教程

目录 ├─1.Fabric │ ├─1什么是区块链.mp4 │ ├─2以太坊公有链合约部署 .mp4 │ ├─3Hyperledger 架构.mp4 │ ├─4超级账本术语表.mp4 │ ├─5Hyperledger 学习社区.mp4 │ ├─6Hyperledger fabric mac 环境搭建.mp4 │ ├─7Hyperledger Fabric 镜像安装.mp4 │ ├─8创建第一个Fabric网络、合约部署、调用(1).mp4 │ ├─9创建第一个Fabric网络、合约部署、调用(2).mp4

weixin_46240949的博客 1502

基于hyperledger fabric 联盟链 + vue cli的项目搭建完整教程(六)

基于hyperledger fabric 联盟链 + vue cli的项目搭建完整教程六、区块链后端部署上线1. 安装docker环境2. 上传后端项目3. 部署上云环境准备4. 部署上云5. API调用测试 六、区块链后端部署上线 在完成了基于koa的区块链后端搭建,我们尝试将它部署上线,这里用阿里云服务器 1. 安装docker环境 此操作在我的专栏docker项目部署的第一节 2. 上传后端项目 3. 部署上云环境准备 安装nvm wget -qO- https://raw.githubuserco

weixin_44062177的博客 2264

超级账本(Hyperledger Fabric):基本架构及运作机制

区块链大致可分为公有链(典型代表为比特币和以太坊)和联盟链(私有链)。联盟链是现有中心化商业团体联盟之间(或团体内部)进行商业活动的手段和渠道。 HyperledgerFabric是由IBM 牵头发起的一个代表性的联盟链项目,于 15 年底移交给Linux 基金会维护,成为开源项目。Hyperledger 基金会的成员包括IBM,Intel,思科等。 Fabric 架构演变 Fabric 的...

phymat.nico的专栏 7737

Clawdbot区块链应用:Hyperledger Fabric智能合约

本文介绍了如何在星图GPU平台上自动化部署Clawdbot整合qwen3:32b代理网关与管理平台镜像,实现Hyperledger Fabric智能合约开发。该解决方案结合区块链的安全性与大语言模型的自然语言处理能力,适用于金融合规审查、医疗数据共享等需要审计追踪的场景。

weixin_34725745的博客 424

1.Hyperledger Fabric1.4在Ubuntu18.04中的基础环境搭建及first-network运行

参考链接: https://hyperledger-fabric.readthedocs.io/en/release-1.4/prereqs.html https://blog.csdn.net/smallone233/article/details/86569536 https://www.cnblogs.com/llongst/p/9482038.html 部署环境 虚拟机:VMware-wo...

FieryCookies的博客 4068

HyperLedger FabricV2.3 Raft单机集群部署

目录 云主机配置 依赖环境配置 部署步骤 0.更新yum 1.安装golang 2.安装docker 3.安装docker-compose 4.安装git 5.安装java 6.防火墙配置 7.网络配置 fabric资源规划 0.修改hosts文件 1.部署节点端口分配 2.官方测试网络demo测试 创建工作目录 3.fabricraft集群环境搭建 3.1编写配置文件 3.2生成证书以及通道信息 3.3编写docker-compose.yaml...

qq_36807862的博客 1522
上一篇: hyperledger fabric 测试(五)1.15私有数据
下一篇: hyperledger fabric 测试(七)1.17链码包生成
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值