磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约

磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第1张图片

群内分享

1.比特币以太币钱包原理及钱包推荐 

2.教程 | 只用5步,教你从零用Truffle打造第一个以太坊Dapp! 

3.引介 | 预言机:让智能合约起飞 

4.HiBlock社区翻译小组-深入理解Solidity之源文件及合约结构——Solidity中文文档

Fabric学习笔记-智能合约


磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第2张图片

作者-趣链科技-清源 

原文链接: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上有完整代码,代码非常简单就是根据命令查询或者设置世界状态。 

执行效果如下图: 

磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第3张图片

这样就在Fabric上实现了一个简单的智能合约。

群内工作

《磨链入门区块链》共同参与写一些东西,目录大纲完善中,一个长期项目。 

招募条件: 

1.需要一定的区块链基础。 

2.对上述任何一方面有较为深入理解。 

3.每周能保证一定的空余时间来折腾。 

4.了解github相关 

5.人员进行筛选,时间周期比较长。 

有意向联系我。

磨链在线课程 

对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联,有偿工作。

磨链(mochain)社区招募相关人员

磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第4张图片

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)。 

磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。 

你可以在这里找到我们: 

磨链社区公众号: 


磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第5张图片

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 

(持续更新中)

合作社区

趣链科技技术团队 


磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第6张图片

HiBlock区块链社区 


磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第7张图片

HiBlock-4.22杭州活动: 

磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约_第8张图片

你可能感兴趣的:(磨链(mochain)社区-4.12分享-Fabric学习笔记-智能合约)