🧭
区块链技术指南
  • 前言
  • 修订记录
  • 如何贡献
  • 区块链的诞生
    • 记账科技的千年演化
    • 分布式记账与区块链
    • 集大成者的比特币
    • 区块链的商业价值
    • 本章小结
  • 核心技术概览
    • 定义与原理
    • 技术的演化与分类
    • 关键问题和挑战
    • 趋势与展望
    • 认识上的误区
    • 本章小结
  • 典型应用场景
    • 应用场景概览
    • 金融服务
    • 征信管理
    • 权属管理与溯源
    • 资源共享
    • 物流与供应链
    • 物联网
    • 数字艺术品和 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 提供支持
在本页
  • 功能描述
  • 数据结构设计
  • function及各自实现的功能
  • 接口设计
  • 测试

这有帮助吗?

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

示例五:社区能源共享

上一页示例四:学历认证下一页小结

最后更新于3年前

这有帮助吗?

功能描述

本 以纽约实验性的能源微电网为例,作为一个简单的案例进行实现。

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

布鲁克林微电网开发商 LO3 创始人 Lawrence Orsini 说:

“我们正在这条街道上建立一个可再生电力市场,来测试人们对于购买彼此手中的电力是否感兴趣。如果你在很远的地方生产能源,运输途中会有很多损耗,你也得不到这电力价值。但是如果你就在街对面,你就能高效的利用能源。”

在某一块区域内存在一个能源微电网,每一户家庭可能为生产者也可能为消费者。部分家庭拥有太阳能电池板,太阳能电池板的剩余电量为可以售出的电力的值,为了简化,单位为1.需要电力的家庭可以向有足够余额的电力的家庭购买电力。

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

数据结构设计

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

  • 家庭用户

    • 账户地址

    • 剩余能量 //部分家庭没有太阳能电池板,值为0

    • 账户余额(电子货币)

    • 编号

    • 状态 //0:不可购买, 1:可以购买

    • 账户公钥

    • 账户私钥

  • 交易(一笔交易必须同时具有卖方和买方的公钥签名,方能承认这笔交易。公钥签名生成规则,公钥+待创建交易的ID号,在本交易类型中,只要买家有足够的货币,卖家自动会对交易进行签名)

    • 购买方地址

    • 销售方地址

    • 电量销售量

    • 电量交易金额

    • 编号

    • 交易时间

function及各自实现的功能

  • init 初始化操作

  • invoke 调用合约内部的函数

  • query 查询相关的信息

  • createUser 创建新用户,并加入到能源微网中 invoke

  • 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表示

测试

合约