🧭
区块链技术指南
  • 前言
  • 修订记录
  • 如何贡献
  • 区块链的诞生
    • 记账科技的千年演化
    • 分布式记账与区块链
    • 集大成者的比特币
    • 区块链的商业价值
    • 本章小结
  • 核心技术概览
    • 定义与原理
    • 技术的演化与分类
    • 关键问题和挑战
    • 趋势与展望
    • 认识上的误区
    • 本章小结
  • 典型应用场景
    • 应用场景概览
    • 金融服务
    • 征信管理
    • 权属管理与溯源
    • 资源共享
    • 物流与供应链
    • 物联网
    • 数字艺术品和 NFT
    • 其它场景
    • 本章小结
  • 分布式系统核心技术
    • 一致性问题
    • 共识算法
    • FLP 不可能原理
    • CAP 原理
    • ACID 原则与多阶段提交
    • Paxos 算法与 Raft 算法
    • 拜占庭问题与算法
    • 可靠性指标
    • 本章小结
  • 密码学与安全技术
    • 密码学简史
    • Hash 算法与数字摘要
    • 加解密算法
    • 消息认证码与数字签名
    • 数字证书
    • PKI 体系
    • Merkle 树结构
    • Bloom Filter 结构
    • 同态加密
    • 其它技术
    • 本章小结
  • 比特币 —— 初露锋芒的区块链
    • 比特币项目简介
    • 比特币诞生背景
    • 工作原理
    • 挖矿过程
    • 共识机制
    • 闪电网络
    • 侧链
    • 热门问题
    • 相关工具
    • 本章小结
  • 以太坊 —— 挣脱加密货币的枷锁
    • 以太坊项目简介
    • 核心概念
    • 主要设计
    • 相关工具
    • 安装客户端
    • 使用智能合约
    • 智能合约案例:投票
    • 本章小结
  • 超级账本 —— 面向企业的分布式账本
    • 超级账本项目简介
    • 社区组织结构
    • 顶级项目介绍
    • 开发必备工具
    • 贡献代码
    • 本章小结
  • Fabric 安装与部署
    • 简介
    • 本地编译组件
    • 容器方式获取
    • 本地方式启动 Fabric 网络
    • 容器方式启动 Fabric 网络
    • 本章小结
  • 管理 Fabric 网络
    • 简介
    • 使用通道
    • 管理节点
    • 管理链上代码
    • 监听网络事件
    • 自动发现网络信息
    • 使用运维服务
    • 如何升级网络版本
    • 使用 SDK
    • 注意事项与最佳实践
    • 本章小结
  • 智能合约开发
    • 简介
    • 链码概念与结构
    • 示例一:信息公证
    • 示例二:交易资产
    • 示例三:数字货币发行与管理
    • 示例四:学历认证
    • 示例五:社区能源共享
    • 小结
  • Fabric 架构与设计
    • 简介
    • 架构设计
    • 消息协议
    • 小结
  • 区块链服务平台设计
    • 简介
    • IBM Bluemix 云区块链服务
    • 微软 Azure 云区块链服务
    • 使用超级账本 Cello 搭建区块链服务
    • 本章小结
  • 性能与评测
    • 简介
    • Hyperledger Fabric v0.6
    • 小结
  • 附录
    • 术语
    • 常见问题
    • Go 语言开发相关
      • 安装与配置 Golang 环境
      • 编辑器与 IDE
      • 高效开发工具
      • 依赖管理
    • ProtoBuf 与 gRPC
    • 参考资源链接
由 GitBook 提供支持
在本页
  • 简介
  • 主要函数
  • 数据结构设计
  • 接口设计
  • init
  • createBank
  • createCompany
  • issueCoin
  • issueCoinToBank
  • issueCoinToCp
  • transfer
  • getBanks
  • getCompanys
  • getTransactions
  • getCenterBank
  • getBankById
  • getCompanyById
  • getTransactionById
  • writeCenterBank
  • writeBank
  • writeCompany
  • writeTransaction

这有帮助吗?

在GitHub上编辑
  1. 智能合约开发

示例三:数字货币发行与管理

简介

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

  • 初始化中央银行及其发行的货币数量

  • 新增商业银行,同时央行并向其发行一定数量的货币

  • 新增企业

  • 商业银行向企业转给一定数量的数字货币

  • 企业之间进行相互的转账

  • 查询企业、银行、交易信息

主要函数

  • 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 交易内容

    • FromType:发送方角色 //centerBank:0,Bank:1,Company:2

    • FromID:发送方 ID

    • ToType:接收方角色 //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 为成功
···

#### 其它
查询时为了兼顾读速率,将一些信息备份存放在非区块链数据库上也是一个较好的选择。
上一页示例二:交易资产下一页示例四:学历认证

最后更新于3年前

这有帮助吗?