当前位置: 迅达文档网 > 党团工作 >

区块链应用开发x

| 来源:网友投稿

 区块链应用开发 链码示例一:信息公证 简介 chaincode_example01.go 主要实现如下的功能:

 初始化,以键值形式存放信息; • 允许读取和修改键值。

 代码中,首先初始化了 hello_world

 的值,并根据请求中的参数创建修改查询链上 key

 中的值,本质上实现了一个简单的可修改的键值数据库。

 主要函数 read :读取 key args[0]

 的 value; write :创建或修改 key args[0]

 的 value; init :初始化 key hello_world

 的 value; invoke :根据传递参数类型调用执行相应的 init

 和 write

 函数; • query :调用 read

 函数查询 args[0]

 的 value。

 代码运行分析 main

 函数作为程序的入口,调用 shim 包的 start 函数,启动 chaincode 引导程序的入口节点。如果报错,则返回。

 func main() {

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

 if err != nil {

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

 }

 }

 当智能合约部署在区块链上,可以通过 rest api 进行交互。

 三个主要的函数是 init , invoke , query 。在三个函数中,通过 stub.PutState与 stub.GetState 存储访问 ledger 上的键值对。

 通过 REST API 操作智能合约 假设以 jim 身份登录 pbft 集群,请求部署该 chaincode 的 json 请求格式为:

 {

 "jsonrpc": "2.0",

 "method": "deploy",

 "params": {

 "type": 1,

 "chaincodeID": {

 "path": "https://github.com/ibm-blockchain/learn-chaincode/finished"

 },

 "ctorMsg": {

 "function": "init",

 "args": [

 "hi there"

 ]

 },

 "secureContext": "jim"

 },

 "id": 1

 }

 目前 path 仅支持 github 上的目录,ctorMsg 中为函数 init

 的传参。

 调用 invoke 函数的 json 格式为:

 {

 "jsonrpc": "2.0",

 "method": "invoke",

 "params": {

 "type": 1,

 "chaincodeID": {

 "name": "4251b5512bad70bcd0947809b163bbc8398924b29d4a37554f2dc2b033617c19cc0611365eb4322cf309b9a5a78a5dba8a5a09baa110ed2d8aeee186c6e94431"

 },

 "ctorMsg": {

 "function": "init",

 "args": [

 "swb"

 ]

 },

 "secureContext": "jim"

 },

 "id": 2

 }

 其中 name 字段为 deploy

 后返回的 message 字段中的字符串。

 query

 的接口也是类似的。

 链码示例二:交易资产 简介 chaincode_example02.go 主要实现如下的功能:

 初始化 A、B 两个账户,并为两个账户赋初始资产值; 在 A、B 两个账户之间进行资产交易; 分别查询 A、B 两个账户上的余额,确认交易成功; • 删除账户。

 主要函数 init :初始化 两个账户; invoke :实现 A、B 账户间的转账; query :查询 A、B 账户上的余额; • delete :删除账户。

 依赖的包 import (

 "errors"

 "fmt"

 "strconv"

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

 )

 strconv

 实现 int 与 string 类型之间的转换。

 在 invoke 函数中,存在:

 X, err = strconv.Atoi(args[2])

 Aval = Aval - X

 Bval = Bval + X

 当 args[2]<0

 时,A 账户余额增加,否则 B 账户余额减少。

 可扩展功能 实例中未包含新增账户并初始化的功能。开发者可以根据自己的业务模型进行添加。

 数字货币发行与管理 简介 该智能合约实现一个简单的商业应用案例,即数字货币的发行与转账。在这之中一共分为三种角色:中央银行,商业银行,企业。其中中央银行可以发行一定数量的货币,企业之间可以进行相互的转账。主要实现如下的功能:

 初始化中央银行及其发行的货币数量 商业银行,同时央行并向其发行一定数量的货币 新增企业 商业银行向企业转给一定数量的数字货币 企业之间进行相互的转账 • 查询企业、银行、交易信息 主要函数 init :初始化中央银行,并发行一定数量的货币; invoke :调用合约内部的函数; query :查询相关的信息; createBank :新增商业银行,同时央行向其发行一定数量的货币; createCompany :新增企业; issueCoin :央行再次发行一定数量的货币(归于交易); issueCoinToBank :央行向商业银行转一定数量的数字货币(归于交易); issueCoinToCp :商业银行向企业转一定数量的数字货币(归于交易行为); transfer :企业之间进行相互转账(归于交易行为); getCompanys :获取所有的公司信息,如果企业个数大于 10,先访问前 10 个; • getBanks :获取所有的商业银行信息,如果商业银行个数大于 10,先访问前 10 个 • getTransactions :获取所有的交易记录 如果交易个数大于 10,先访问前 10 个; getCompanyById :获取某家公司信息; getBankById :获取某家银行信息; getTransactionBy :获取某笔交易记录; writeCenterBank :修改央行信息; writeBank :修改商业银行信息; writeCompany :修改企业信息; • writeTransaction :写入交易信息。

 数据结构设计 • centerBank 中央银行 Name:名称 TotalNumber:发行货币总数额 RestNumber:账户余额 – ID:ID 固定为 0 • bank 商业银行 Name:名称 TotalNumber:收到货币总数额 RestNumber:账户余额 – ID:银行 ID • company 企业 Name:名称 Number:账户余额 – ID:企业 ID • transaction 交易内容 Type:发送方角色 //centerBank:0,Bank:1,Company:2 FromID:发送方 ID Type:接收方角色 //Bank:1,Company:2 ToID:接收方 ID Time:交易时间 Number:交易数额 – ID:交易 ID 接口设计 init

 request 参数: args[0] 银行名称

 args[1] 初始化发布金额

 response 参数: {"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}

 createBank

 request 参数: args[0] 银行名称

 response 参数: {"Name":"XXX","TotalNumber":"0","RestNumber":"0","ID":"XX"}

 createCompany

 request 参数: args[0] 公司名称

 response 参数: {"Name":"XXX","Number":"0","ID":"XX"}

 issueCoin

 request 参数: args[0] 再次发行货币数额

 response 参数: {"FromType":"0","FromID":"0","ToType":"0","ToID":"0","Time":"XX","Number":"XX","ID":"XX"}

 issueCoinToBank

 request 参数: args[0] 商业银行 ID

 args[1] 转账数额

 response 参数: {"FromType":"0","FromID":"0","ToType":"1","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}

 issueCoinToCp

 request 参数: args[0] 商业银行 ID

 args[1] 企业 ID

 args[2] 转账数额

 response 参数: {"FromType":"1","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}

 transfer

 request 参数:

 args[0] 转账用户 ID

 args[1] 被转账用户 ID

 args[2] 转账余额

 response 参数: {"FromType":"2","FromID":"XX","ToType":"2","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}

 getBanks

 response 参数 [{"Name":"XXX","Number":"XX","ID":"XX"},{"Name":"XXX","Number":"XX","ID":"XX"},...]

 getCompanys

 response 参数 [{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},{"Name":"XXX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"},...]

 getTransactions

 response 参数 [{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"},{"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"},...]

 getCenterBank

 response 参数 [{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]

 getBankById

 request 参数 args[0] 商业银行 ID

 response 参数 [{"Name":"XX","TotalNumber":"XX","RestNumber":"XX","ID":"XX"}]

 getCompanyById

 request 参数 args[0] 企业 ID

 response 参数

 [{"Name":"XXX","Number":"XX","ID":"XX"}]

 getTransactionById

 request 参数 args[0] 交易 ID

 response 参数 {"FromType":"XX","FromID":"XX","ToType":"XX","ToID":"XX","Time":"XX","Number":"XX","ID":"XX"}

 writeCenterBank

 request 参数 CenterBank

 response 参数 err

 nil 为成功

 writeBank

 request 参数 Bank

 response 参数 err

 nil 为成功

 writeCompany

 request 参数 Company

 response 参数 err

 nil 为成功

 writeTransaction

 request 参数 Transaction

 response 参数 ``` err nil 为成功 ··· 其它

 查询时为了兼顾读速率,将一些信息备份存放在非区块链数据库上也是一个较好的选择。

 学历认证 功能描述 该 智能合约 实现了一个简单的征信管理的案例。针对于学历认证领域,由于条约公开,在条约外无法随意篡改的特性,天然具备稳定性和中立性。

 该智能合约中三种角色如下:

 学校 个人 • 需要学历认证的机构或公司 学校可以根据相关信息在区块链上为某位个人授予学历,相关机构可以查询某人的学历信息,由于使用私钥签名,确保了信息的真实有效。

 为了简单,尽量简化相关的业务,另未完成学业的学生因违纪或外出创业退学,学校可以修改其相应的学历信息。

 账户私钥应该由安装在本地的客户端生成,本例中为了简便,使用模拟私钥和公钥。

 数据结构设计 • 学校 名称 所在位置 地址 账号公 账户私钥 – 学校学生 • 个人 姓名 账号地址 – 过往学历 • 学历信息 学历信息编号 学校 就读年份 完成就读年份 – 就读状态 // 0:毕业 1:退学 • 修改记录(入学也相当于一种修改记录)

 编号 – 学校账户地址(一般根据账户地址可以算出公钥地址,然后可以进行校验)

 学校签名 账户个人公钥地址(个人不需要公钥地址)

 时间 – 修改操作// 0:正常毕业 1:退学 2:入学 对学历操作信息所有的操作都归为记录。

 function 及各自实现的功能 init

 初始化函数 • invoke

 调用合约内部的函数 • updateDiploma

 由学校更新学生学历信息,并签名(返回记录信息)

 enrollStudent

 学校招生(返回学校信息)

 createSchool

 添加一名新学校 createStudent

 添加一名新getStudentByAddress

 通过学生的账号地址访问学生的学历信息 getRecordById

 通过 Id 获取记录 getRecords

 获取全部记录(如果记录数大于 10,返回前 10 个)

 getSchoolByAddress

 通过学校账号地址获取学校的信息 • getBackgroundById

 通过学历 Id 获取所存储的学历信息 • writeRecord

 写入记录 writeSchool

 写入新创建的学校 • writeStudent

 写入新创建的学生 接口设计 createSchool

 request 参数: args[0] 学校名称

 args[1] 学校所在位置

 response 参数: 学校信息的字节数组,当创建一所新学校时,该学校学生账户地址列表为空

 createStudent

 request 参数:

 args[0] 学生的姓名

 response 参数:

 学生信息的字节数组表示,刚创建过往学历信息列表为空

 updateDiploma

 request 参数 args[0] 学校账户地址

 args[1] 学校签名

 args[2] 待修改学生的账户地址

 args[3] //对该学生的学历进行怎样的修改,0:正常毕业

 1:退学

 response 参数 返回修改记录的字节数组表示

 enrollStudent

 request 参数: args[0] 学校账户地址

 args[1] 学校签名

 args[2] 学生账户地址

 response 参数 返回修改记录的字节数组表示

 getStudentByAddress

 request 参数 args[0] address

 response 参数 学生信息的字节数组表示

 getRecordById

 request 参数 args[0] 修改记录的 ID

 response 参数 修改记录的字节数组表示

 getRecords

 response 参数 获取修改记录数组(如果个数大于 10,返回前 10 个)

 getSchoolByAddress

 request 参数 args[0] address

 response 参数 学校信息的字节数组表示

 getBackgroundById

 request 参数 args[0] ID

 response 参数 学历信息的字节数组表示

 测试 社区能源共享 功能描述 本 合约 以纽约实验性的能源微电网为例,作为一个简单的案例进行实现。

 “在总统大道的一边,五户家庭通过太阳能板发电;在街道的另一边的五户家庭可以购买对面家庭不需要的电力。而连接这项交易的就是区块链网络,几乎不需要人员参与就可以管理记录交易。”但是这个想法是非常有潜力的,能够代表未来社区管理能源系统。” 布鲁克林微电网开发商 LO3 创始人 Lawrence Orsini 说:

 “我们正在这条街道上建立一个可再生电力市场,来测试人们对于购买彼此手中的电力是否感兴趣。如果你在很远的地方生产能源,运输途中会有很多损耗,你也得不到这电力价值。但是如果你就在街对面,你就能高效的利用能源。” 在某一块区域内存在一个能源微电网,每一户家庭可能为生产者也可能为消费者。部分家庭拥有太阳能电池板,太阳能电池板的剩余电量为可以售出的电力的值,为了简化,单位为 1.需要电力的家庭可以向有足够余额的电力的家庭购买电力。

 账户私钥应该由安装在本地的客户端生成,本例中为了简便,使用模拟私钥和公钥。每位用户的私钥为 guid+“1”,公钥为 guid+“2”。签名方式简化为私钥+"1" 数据结构设计

 在该智能合约中暂时只有一种角色,为每一户家庭用户。

 • 家庭用户 账户地址 剩余能量 //部分家庭没有太阳能电池板,值为 0 账户余额(电子货币)

 编号 状态 //0:不可购买, 1:可以购买 公 – 账户私钥 • 交易(一笔交易必须同时具有卖方和买方的公钥签名,方能承认这笔交易。公钥签名生成规则,公钥+待创建交易的 ID 号,在本交易类型中,只要买家有足够的货币,卖家自动会对交易进行签名) 购买 销售方地址 销售量 电量交易金额 编号 – 交易时间 function 及各自实现的功能 init

 初始化操作 invoke

 调用合约内部的函数 query

 查询相关的信息 createUser

 创建新用户,并加入到能源微网中 buyByAddress

 向某一位用户购买一定量的电力 invoke getTransactionById

 通过 id 获取交易内容 query getTransactions

 获取交易(如果交易数大于 10,获取前 10 个)

 query getHomes

 获取用户(如果用户数大于 10,获取前 10 个)

 query getHomeByAddress

 通过地址获取用户 query • changeStatus

 某一位用户修改自身的状态 invoke • writeUser

 将新用户写入到键值对中 • writeTransaction

 记录交易

  接口设计

  createUser

 request 参数:

 args[0] 剩余能量值

 args[1] 剩余金额

 response 参数: 新建家庭用户的 json 表示

 buyByAddress

 request 参数: args[0] 卖家的账户地址

 args[1] 买家签名

 args[2] 买家的账户地址

 args[3] 想要购买的电量数值

 response 参数: 购买成功的话返回该 transaction 的 json 串。

 购买失败返回 error

 getTransactionById

 request 参数: args[0] 交易编号

 response 参数: 查询结果的 transaction 交易表示

 getTransactions

 request 参数: none

 response 参数: 获取所有的交易列表(如果交易大于 10,则返回前 10 个)

 getHomeByAddress

 request 参数 args[0] address

 response 参数 用户信息的 json 表示

 getHomes

 response 参数 获取所有的用户列表(如果用户个数大于 10,则返回前 10 个)

 changeStatus

 request 参数: args[0] 账户地址

 args[1] 账户签名

 args[2] 对自己的账户进行的操作,0:设置为不可购买

 1:设置状态为可购买

 response 参数: 修改后的用户信息 json 表示

 测试

推荐访问:区块 开发

热门排行

党委党组落实全面从严治党主体责任规定指出本地区本单位发生重大违纪违法案件14篇

党委党组落实全面从严治党主体责任规定指出本地区本单位发生重大违纪违法案件14篇党委党组落实全面从严治党主体责任规定指出本地区本单位发生重大违纪违法案件篇1我

2022年五星支部创建实施方案5篇

2022年五星支部创建实施方案5篇2022年五星支部创建实施方案篇1为切实提高支部党建工作科学化水平、不断夯实党建基础,挖掘支部党建特色,创新支部党建工作做

七言绝句古诗精选【十首】

【 能力训练 导语】七言绝句是中国传统诗歌的一种体裁,简称七绝,属于近体诗范畴。此体全诗四句,每句七

2022年支部党员大会记录内容14篇

2022年支部党员大会记录内容14篇2022年支部党员大会记录内容篇120xx年度我校新党员发展工作已经开始。根据学校党委3月21日会议精神,今年新党员发展

统计工作如何为企业管理服务

作为企业管理重要组成部分的统计工作,在企业的经济运行中发挥着信息、咨询和监督三大作用,它为企业的经营

乡镇创建无毒社区工作方案

一、指导思想以“三个代表”重要思想为指导,认真贯彻落实上级精神,以禁吸戒毒为中心,全面落实禁毒工作责

四年级我家菜园日记500字

菜园子,就是种菜的地方。种菜的时候为了防止家禽进入菜地,于是农夫用篱笆或者栅栏将菜地围起来形成的一个

哈尔移动城堡电影观后有感范本

在观看完一部作品以后,相信你会有不少感想吧,这时我们很有必要写一篇观后感了。可能你现在毫无头绪吧,下

党支部2022年学习计划14篇

党支部2022年学习计划14篇党支部2022年学习计划篇1认真坚持“三会一课”制度,对于加强支部建设,提高党的战斗力、健全党的生活,严格党员管理,充分发挥党