【区块链技术与应用】(六)

这篇具有很好参考价值的文章主要介绍了【区块链技术与应用】(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

引言

本次任务相对顺利,因为是已经打包的案例。不过二三案例中不像案例一中有go的chaincode,执行需要花时间debug
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

案例链接:

https://pkg.go.dev/github.com/hyperledger/fabric-gateway/pkg/client#section-readme

案例一:资产转移基本示例

代码分析

资产转移基本示例演示:

  • 将客户端应用程序连接到 Fabric 区块链网络。
  • 提交智能合约交易以更新账本状态。
  • 评估智能合约交易以查询账本状态。
  • 处理事务调用中的错误。

https://blog.csdn.net/ling1998/article/details/127202209

链码启动

项目地址:

https://github.com/hyperledger/fabric-samples/blob/main/asset-transfer-basic/chaincode-go/assetTransfer.go

/*
SPDX-License-Identifier: Apache-2.0
*/

package main

import (
	"log"

	"github.com/hyperledger/fabric-contract-api-go/contractapi"
	"github.com/hyperledger/fabric-samples/asset-transfer-basic/chaincode-go/chaincode"
)

func main() {
	assetChaincode, err := contractapi.NewChaincode(&chaincode.SmartContract{})
	if err != nil {
		log.Panicf("Error creating asset-transfer-basic chaincode: %v", err)
	}

	if err := assetChaincode.Start(); err != nil {
		log.Panicf("Error starting asset-transfer-basic chaincode: %v", err)
	}
}
链码结构

asset-transfer-basic/chaincode-go/chaincode/smartcontract.go

type SmartContract struct {
	contractapi.Contract
}

完整代码

package chaincode

import (
	"encoding/json"
	"fmt"

	"github.com/hyperledger/fabric-contract-api-go/contractapi"
)

// SmartContract provides functions for managing an Asset
type SmartContract struct {
	contractapi.Contract
}

// Asset describes basic details of what makes up a simple asset
//Insert struct field in alphabetic order => to achieve determinism across languages
// golang keeps the order when marshal to json but doesn't order automatically
type Asset struct {
	AppraisedValue int    `json:"AppraisedValue"`
	Color          string `json:"Color"`
	ID             string `json:"ID"`
	Owner          string `json:"Owner"`
	Size           int    `json:"Size"`
}

// InitLedger adds a base set of assets to the ledger
func (s *SmartContract) InitLedger(ctx contractapi.TransactionContextInterface) error {
	assets := []Asset{
		{ID: "asset1", Color: "blue", Size: 5, Owner: "Tomoko", AppraisedValue: 300},
		{ID: "asset2", Color: "red", Size: 5, Owner: "Brad", AppraisedValue: 400},
		{ID: "asset3", Color: "green", Size: 10, Owner: "Jin Soo", AppraisedValue: 500},
		{ID: "asset4", Color: "yellow", Size: 10, Owner: "Max", AppraisedValue: 600},
		{ID: "asset5", Color: "black", Size: 15, Owner: "Adriana", AppraisedValue: 700},
		{ID: "asset6", Color: "white", Size: 15, Owner: "Michel", AppraisedValue: 800},
	}

	for _, asset := range assets {
		assetJSON, err := json.Marshal(asset)
		if err != nil {
			return err
		}

		err = ctx.GetStub().PutState(asset.ID, assetJSON)
		if err != nil {
			return fmt.Errorf("failed to put to world state. %v", err)
		}
	}

	return nil
}

// CreateAsset issues a new asset to the world state with given details.
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error {
	exists, err := s.AssetExists(ctx, id)
	if err != nil {
		return err
	}
	if exists {
		return fmt.Errorf("the asset %s already exists", id)
	}

	asset := Asset{
		ID:             id,
		Color:          color,
		Size:           size,
		Owner:          owner,
		AppraisedValue: appraisedValue,
	}
	assetJSON, err := json.Marshal(asset)
	if err != nil {
		return err
	}

	return ctx.GetStub().PutState(id, assetJSON)
}

// ReadAsset returns the asset stored in the world state with given id.
func (s *SmartContract) ReadAsset(ctx contractapi.TransactionContextInterface, id string) (*Asset, error) {
	assetJSON, err := ctx.GetStub().GetState(id)
	if err != nil {
		return nil, fmt.Errorf("failed to read from world state: %v", err)
	}
	if assetJSON == nil {
		return nil, fmt.Errorf("the asset %s does not exist", id)
	}

	var asset Asset
	err = json.Unmarshal(assetJSON, &asset)
	if err != nil {
		return nil, err
	}

	return &asset, nil
}

// UpdateAsset updates an existing asset in the world state with provided parameters.
func (s *SmartContract) UpdateAsset(ctx contractapi.TransactionContextInterface, id string, color string, size int, owner string, appraisedValue int) error {
	exists, err := s.AssetExists(ctx, id)
	if err != nil {
		return err
	}
	if !exists {
		return fmt.Errorf("the asset %s does not exist", id)
	}

	// overwriting original asset with new asset
	asset := Asset{
		ID:             id,
		Color:          color,
		Size:           size,
		Owner:          owner,
		AppraisedValue: appraisedValue,
	}
	assetJSON, err := json.Marshal(asset)
	if err != nil {
		return err
	}

	return ctx.GetStub().PutState(id, assetJSON)
}

// DeleteAsset deletes an given asset from the world state.
func (s *SmartContract) DeleteAsset(ctx contractapi.TransactionContextInterface, id string) error {
	exists, err := s.AssetExists(ctx, id)
	if err != nil {
		return err
	}
	if !exists {
		return fmt.Errorf("the asset %s does not exist", id)
	}

	return ctx.GetStub().DelState(id)
}

// AssetExists returns true when asset with given ID exists in world state
func (s *SmartContract) AssetExists(ctx contractapi.TransactionContextInterface, id string) (bool, error) {
	assetJSON, err := ctx.GetStub().GetState(id)
	if err != nil {
		return false, fmt.Errorf("failed to read from world state: %v", err)
	}

	return assetJSON != nil, nil
}

// TransferAsset updates the owner field of asset with given id in world state, and returns the old owner.
func (s *SmartContract) TransferAsset(ctx contractapi.TransactionContextInterface, id string, newOwner string) (string, error) {
	asset, err := s.ReadAsset(ctx, id)
	if err != nil {
		return "", err
	}

	oldOwner := asset.Owner
	asset.Owner = newOwner

	assetJSON, err := json.Marshal(asset)
	if err != nil {
		return "", err
	}

	err = ctx.GetStub().PutState(id, assetJSON)
	if err != nil {
		return "", err
	}

	return oldOwner, nil
}

// GetAllAssets returns all assets found in world state
func (s *SmartContract) GetAllAssets(ctx contractapi.TransactionContextInterface) ([]*Asset, error) {
	// range query with empty string for startKey and endKey does an
	// open-ended query of all assets in the chaincode namespace.
	resultsIterator, err := ctx.GetStub().GetStateByRange("", "")
	if err != nil {
		return nil, err
	}
	defer resultsIterator.Close()

	var assets []*Asset
	for resultsIterator.HasNext() {
		queryResponse, err := resultsIterator.Next()
		if err != nil {
			return nil, err
		}

		var asset Asset
		err = json.Unmarshal(queryResponse.Value, &asset)
		if err != nil {
			return nil, err
		}
		assets = append(assets, &asset)
	}

	return assets, nil
}

运行

创建测试网络和通道
./network.sh up createChannel -c mychannel -ca

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

部署实现其中一个智能合约
# To deploy the TypeScript chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-typescript/ -ccl typescript

# To deploy the Go chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go/ -ccl go

# To deploy the Java chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java/ -ccl java

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascripterror starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

运行应用程序
# To run the Typescript sample application
cd application-gateway-typescript
npm install
npm start

# To run the Go sample application
cd application-gateway-go
go run .

# To run the Java sample application
cd application-gateway-java
./gradlew run

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

结束

./network.sh down

案例二:资产转移事件示例

资产转移事件示例演示:

从智能合约交易函数发出链码事件。
在客户端应用程序中接收链码事件。
在客户端应用程序中重放以前的链码事件。

运行

创建测试网络和通道
./network.sh up createChannel -c mychannel -ca

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

部署实现其中一个智能合约
# To deploy the JavaScript chaincode implementation
./network.sh deployCC -ccn events -ccp ../asset-transfer-events/chaincode-javascript/ -ccl javascript -ccep "OR('Org1MSP.peer','Org2MSP.peer')"

# To deploy the Java chaincode implementation
./network.sh deployCC -ccn events -ccp ../asset-transfer-events/chaincode-java/ -ccl java -ccep "OR('Org1MSP.peer','Org2MSP.peer')"

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

运行应用程序

(从文件夹)asset-transfer-events

# To run the Go sample application
cd application-gateway-go
go run .

# To run the Typescript sample application
cd application-gateway-typescript
npm install
npm start

# To run the Java sample application
cd application-gateway-java
./gradlew run

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

结束

回到test-network

./network.sh down

案例三:链下数据存储示例

链下数据存储示例演示:

  • 在客户端应用程序中接收块事件。
  • 使用检查指针在发生故障或应用程序重新启动后恢复事件侦听。
  • 从区块事件中提取账本更新,以构建链下数据存储。

运行

创建测试网络和通道
./network.sh up createChannel -c mychannel -ca

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

部署资产转移基本智能合约实现之一
# To deploy the TypeScript chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-typescript/ -ccl typescript

# To deploy the Go chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go/ -ccl go

# To deploy the Java chaincode implementation
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java/ -ccl java

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

用一些资产填充账本,并使用事件来捕获账本更新

从文件夹)。off_chain_data

# To run the TypeScript sample application
cd application-typescript
npm install
npm start transact listen

# To run the Java sample application
cd application-java
./gradlew run --quiet --args='transact listen'
使用Control-C 中断侦听器进程
查看区块链的当前世界状态

off_chain_datastore.log

# To run the TypeScript sample application
cd application-typescript
npm --silent start getAllAssets

# To run the Java sample application
cd application-java
./gradlew run --quiet --args=getAllAssets

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

进行更多账本更新,然后观察侦听器恢复功能
# To run the TypeScript sample application
cd application-typescript
npm start transact
SIMULATED_FAILURE_COUNT=5 npm start listen
npm start listen

# To run the Java sample application
cd application-java
./gradlew run --quiet --args=transact
SIMULATED_FAILURE_COUNT=5 ./gradlew run --quiet --args=listen
./gradlew run --quiet --args=listen

error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript

总结

本周主要进行了三个案例的实战,跑代码很顺利所以心情也很好。
需要注意的一点是,案例中同时给出了java和go的代码,第一次把两个都跑了,事实上只需要选择一个就可。
建议还是用go。
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript
第一部分的资产转移案例还有拓展内容,可以作为参考

https://blog.csdn.net/ling1998/article/details/127202209
error starting asset-transfer-basic chaincode: 'core_chaincode_id_name' must,信息管理与信息系统,区块链,typescript,javascript文章来源地址https://www.toymoban.com/news/detail-788653.html

到了这里,关于【区块链技术与应用】(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习区块链经典教程:区块链技术与应用

    我的新书 《Android App开发入门与实战》 已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 本课程主要讲解区块链的基本概念和实现原理,面向具有计算机相关的基础知识,对区块链技术和应用感兴趣的同学。通过这门课的学习,能够掌握比特币、以太坊等区块链

    2024年02月12日
    浏览(35)
  • 《区块链技术与应用》(六)——BTC分叉篇 北京大学肖臻老师《区块链技术与应用》公开课笔记

    BTC分叉篇 https://download.csdn.net/download/djklsajdklsajdlk/87177757 BTC分叉篇 GitHub链接

    2024年02月11日
    浏览(46)
  • 【区块链技术与应用】(六)

    本次任务相对顺利,因为是已经打包的案例。不过二三案例中不像案例一中有go的chaincode,执行需要花时间debug 案例链接: https://pkg.go.dev/github.com/hyperledger/fabric-gateway/pkg/client#section-readme 代码分析 资产转移基本示例演示: 将客户端应用程序连接到 Fabric 区块链网络。 提交智能

    2024年02月01日
    浏览(43)
  • 【区块链技术与应用】(八)

    https://blog.csdn.net/lakersssss24/article/details/125762826?spm=1001.2014.3001.5501 https://blog.csdn.net/lakersssss24/article/details/126434147 https://blog.csdn.net/lakersssss24/article/details/126671408?spm=1001.2101.3001.6650.3utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-126671408-blog-126434147.pc_relevan

    2024年02月02日
    浏览(34)
  • 【区块链技术与应用】(五)

    这周恰逢期中,时间仓促,代码上有许多地方可以优化,但也只能留到之后的几次作业上了。 阅读建议:参考和链码样例为写链码前用样例试手内容,与作业相关的内容是“资产管理”之后的代码。 代码参考及学习资料在“参考”一栏中。 https://blog.csdn.net/zekdot/article/detai

    2024年01月16日
    浏览(41)
  • 区块链技术原理与应用

    1 . 区块链技术简介 1.1什么是区块链技术 区块链技术又称为“分布式记账”(distributed ledger)技术,被认为是确保数据储存和移动安全的最新方式——它不是将数据存放在一个中心化的地方,而是将其“化整为零”后分别存放在全球互联网络中的数以千计的节点上,并同时使用

    2024年02月06日
    浏览(31)
  • 【区块链技术与应用】(四)

    https://pkg.go.dev/github.com/hyperledger/fabric-chaincode-go/shim#section-sourcefiles 我们的应用程序是一个基本的示例链码,用来在账本上创建资产(键-值对)。 选择一个位置存放代码 如果你没有写过 Go 的程序,你可能需要确认一下你是否安装了 Go 以及你的系统是否配置正确。我们假设你

    2024年02月12日
    浏览(45)
  • 区块链技术应用展望

    区块链作为一个\\\"去中心化\\\"的分布式账本数据库,能够让数据的产生、运行和应用更加公开与透明。区块链被认为是互联网之后又一大创新之举,是第二个互联网时代——价值互联网时代的来临,区块链将从基础设施层面为各行各业带来巨大的变革机会。 在区块链的研究与应

    2024年02月02日
    浏览(37)
  • 推动区块链技术应用创新河南开展区块链应用场景需求和典型应用案例征集工作

    大河网讯(记者 杨露露)为推动区块链技术应用创新,深度赋能数字化转型升级。近日,河南省工信厅先后下发通知,开展河南省区块链典型应用案例征集工作和区块链应用场景需求征集工作。 区块链应用场景需求征集 据了解,应用场景需求征集工作主要面向我省各级政府

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包