群内分享
1.比特币以太币钱包原理及钱包推荐
2.教程 | 只用5步,教你从零用Truffle打造第一个以太坊Dapp!
3.引介 | 预言机:让智能合约起飞
4.HiBlock社区翻译小组-深入理解Solidity之源文件及合约结构——Solidity中文文档
Fabric学习笔记-智能合约
作者-趣链科技-清源
原文链接:https://zhuanlan.zhihu.com/p/33750599
本文介绍了什么是智能合约,以及如何在Fabric下编写一个简单的智能合约Demo。
什么是智能合约?
智能合约是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转,Fabric为智能合约提供了一个可信的执行环境。
Fabric下的智能合约
Chaincode是Fabric下智能合约的代码实现,是一段在区块链上验证,存储和执行的代码,只有通过Chaincode才能与Fabric网络进行交互。
在Fabric下又分为系统Chaincode和普通Chaincode。
系统Chaincode运行于peer节点内而非一个隔离的容器中,没有生命周期的概念,用于实现一些系统行为。
普通Chaincode运行在一个单独的容器中,对外提供操作Fabric网络的接口,有打包、安装、实例化和升级四个生命周期并且有相应的函数提供调用,操作更加的灵活也是我们通常所指Chaincode。
Chaincode的运行过程
Channel负责连接不同的Peer,同步连接到的Peer对Chaincode的执行结果,相当于将一些节点划分为一个子集同时同步Chaincode的执行结果。
Endorser负责执行Chaincode。
Orderer负责对Chaincode的执行结果进行共识,目前支持solo/kafka/sBFT三种共识方式。
Committer负责将Chaincode经过共识后的结果写入Ledger。
编写Chaincode
Chaincode必须实现两个接口。
type Chaincode interface {
// 初始化⼯作,⼀般情况下仅被调⽤⼀次,升级时也会调用该函数
Init(stub ChaincodeStubInterface) pb.Response
// 查询或更新world state,可多次被调⽤
Invoke(stub ChaincodeStubInterface) pb.Response
}
下面是一个最小智能合约所需要的结构。
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
)
type SimpleAsset struct {}
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {}
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {}
func main() {
if err := shim.Start(new(SimpleAsset)); err != nil {
fmt.Printf("Error starting SimpleAsset chaincode: %s", err)
}
}
具体的业务逻辑都在Invoke这个函数里面进行编写。
首先,我们完善一下Init函数
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {
args := stub.GetStringArgs()
if len(args) != 2 {
return shim.Error("Incorrect arguments. Expecting a key and a value")
}
// 实例化的时候初始化一下状态
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里编写业务逻辑
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
fn, args := stub.GetFunctionAndParameters()
var result string
var err error
if fn == "set" {
result, err = set(stub, args)
} else {
result, err = get(stub, args)
}
if err != nil {
return shim.Error(err.Error())
}
return shim.Success([]byte(result))
}
Invoke根据不同的参数决定调用查询或者是设置状态。
编写set和get函数
func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
if len(args) != 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
}
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
}
github上有完整代码,代码非常简单就是根据命令查询或者设置世界状态。
执行效果如下图:
这样就在Fabric上实现了一个简单的智能合约。
群内工作
《磨链入门区块链》共同参与写一些东西,目录大纲完善中,一个长期项目。
招募条件:
1.需要一定的区块链基础。
2.对上述任何一方面有较为深入理解。
3.每周能保证一定的空余时间来折腾。
4.了解github相关
5.人员进行筛选,时间周期比较长。
有意向联系我。
磨链在线课程
对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联,有偿工作。
磨链(mochain)社区招募相关人员
PS:想加入磨链的,或者具体参与到磨链的建设中的,请加磨链组织者微信(jackyjin09)。并且注明自己的能参与的编号(1.2.3.4),欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术。
磨链招聘合作相关信息
【深圳小鱼区块链技术有限公司】本司隶属工信部电子商务监管沙盒技术部;在相关部门审批合规前提下,目前在组建三个区块链实验室
【招聘岗位】:区块链开发工程师(3人)
【工作职责】:
1、负责区块链(Blockchain)技术架构设计与应用开发;
2、研究区块链的协议,运行机制和底层实现等,设计安全协议和架构;
3、编写测试用例,编写测试脚本,搭建测试环境;
4、根据业务场景,定义,设计并实现PoC,如编写智能合约,提供区块链应用接口等
5、根据产品需求及总体设计,编写系统模块的详细设计文档;
【任职要求】:
1、软件工程或计算机相关专业本科及以上,3年以上开发工作经验;
2、精通linux,有区块链项目的开发经验;
3、熟悉c++/python/java中的两种以上,熟悉solidity更佳;
4、熟悉Ethereum、Bitcoin、Hyperledger .fabric等主流区块链开源项目的实现机制及运行原理;
5、熟练掌握以太坊/比特币/区块链的原理、机制和相关加密算法者优先;
6、熟悉各种数据结构和算法,对密码学,安全协议和加密算法有研究;
7、熟悉TCP、IP、HTTP、P2P等网络协议;
8、理解各类主流的共识算法,包括不限于PoW、PoS、DPoS、PBFT、Paxos、Raft等;
9、熟悉分布式、多线程及高性能的设计与编码及性能调优
10、良好的团队协作精神和执行力,较强的分析问题和解决问题能力
【薪资】面议
若招聘过程中以担保或者其他任何名义向求职者收取财物(如办卡费、押金、培训费),扣押或以保管为名索要身份证、毕业证及其他证件等行为,均涉嫌违法,请您提高警惕并注意保护个人信息!
关于磨链和相关合作
磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。
磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。
你可以在这里找到我们:
磨链社区公众号:
1. 磨链社区:http://mochain.info
2. Github : https://github.com/mochain
3. Gitter 聊天: https://gitter.im/mochain
4. 知识星球: https://t.zsxq.com/M3BMVZN
5. 知乎:https://www.zhihu.com/people/mochain
(持续更新中)
合作社区
趣链科技技术团队
HiBlock区块链社区
HiBlock-4.22杭州活动: