网络知识 娱乐 腾讯云区块链服务平台(TBaaS)长安链体验网络公测试用感受

腾讯云区块链服务平台(TBaaS)长安链体验网络公测试用感受

前阵InfoQ社区看到腾讯云腾讯云区块链服务平台(TBaaS)长安链体验活动,一顿操作猛如虎报了个名,体验完用一个字概括:强。 非要再加几个字的话,总体感受下来装配模式灵活高效,配套工具完整辩解。话不多说开始主题本文目录结构分为区块链分类TBaaS平台介绍TBaaS平台上链教程三个部分

一、区块链分类:

大体上来说,区块链可分为公链,联盟链,私有链三种:
公有链(Public Blockchain)公有链是指任何人都能参与的区块链。公有链是去中心化程度最高的区块链,不受机构控制,整个账本对所有人公开透明。任何人都能在公有链上查询交易、发送交易、参与记账。加入公有链不需要任何人授权,可以自由加入或者离开,所以公有链又称为非许可链。人人都能参与记账的公有链,是在陌生的、缺乏信任的竞争环境下记账的,所以公有链需要有一套共识机制来选出记账节点,也就是我们平常说的通过“挖矿”竞争记账权。因为需要挖矿,所以公有链记账有延时高,成本高、效率低的特点。我们接触到大多数区块链项目都是公有链,知名的公有链项目有:比特币、以太坊、EOS等。

私有链(Private Blockchain)和公有链的账本对所有人公开透明和人人皆可记账的情况相反,私有链是指区块链记账权限仅在一个人或者一个机构手里,并且参与记账的权限由机构内部制定,读取权限可以对方开放也可以任意程度地限制。比如一家公司的财务预算,参与记账的人可能只有财务部门的领导和公司的老板,而读取权限可以根据公司需要,选择只让公司决策层或者全员知道。私有链由于参与记账节点少,而且没有“挖矿”竞争这一过程,所以私有链有记账速度快,没有记账成本,隐私性高等优点。由于私有链都是内部的节点,记账环境是可信的;区块链技术能够防止机构内单节点篡改数据,即便发生错误,也能快速发现。私有链适用于公司或者组织内部,很多大型的金融机构倾向于使用私有链。

联盟链(ConsorTIum Blockchain)联盟链的账本的公开程度,介于公有链和私有链之间。联盟链是指多个机构共同管理维护的区块链,参与区块链的节点是事先选定的。联盟链也只对联盟内部成员开放全部或部分功能,链上信息的读取、写入以及记账规则都按照联盟共识来设定。比如有100所大学建立了某个区块链,共识规定,必须有67所以上的大学同意才算达成共识。和私有链一样,节点加入需要得到授权许可,所以联盟链和私有链都称为许可链。联盟链由于节点之间有很好的连接和可信的网络环境,所以联盟链有记账效率高、共识时间短、记账成本低还能兼顾隐私的特点。联盟链主要适用于行业协会,大型连锁企业对下属单位和分管机构的交易和监管。比如2015年成立的R3区块链联盟,是一个银行业的联盟链,至今已吸引了40多家巨头银行的参与,其中包括富国银行、美国银行、纽约梅隆银行、花旗银行等。

本次腾讯云区块链服务平台(TBaaS)公测体验活动中的主角长安链属于区块链架构,供区块链技术架构,用来搭建区块链网络。

同类产品还有蚂蚁链,至信链等,三者简单介绍:


蚂蚁链:阿里体系产品,蚂蚁区块链是由蚂蚁金服自主研发的金融级区块链服务项目平台,致力于打造一站式服务,用区块链技术解决金融、零售、生活等多场景区下应用问题。


至信链:腾讯体系产品,由腾讯公司、中国网安以及北明软件发起建立的基于数字文化内容场景的司法应用生态服务平台。对标的就是阿里蚂蚁链。


长安链:国家队,由北京微芯研究院、清华大学、北京航空航天大学、腾讯、百度和京东等知名高校、企业共同研发的一个开源底链平台。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。 具体项目背景和介绍、合约文档编写等参考,传送门:长安链底层技术平台介绍


二,腾讯云区块链服务平台(TBaaS)简介:
腾讯云区块链服务平台(TBaaS,Tencent Blockchain as a Service)依托腾讯云基础设施,为企业及开发者提供一站式、高安全性、简单易用的区块链服务。TBaaS 区块链服务平台集成开发、管理和运维等功能,支持客户在云上快速部署联盟区块链网络环境。基于 TBaaS 区块链服务平台,客户可以降低对区块链底层技术的获取成本,专注在区块链业务模式创新及业务应用的开发和运营之中。

TBaaS 区块链服务平台不仅符合金融级别的安全合规性要求,同时还具备了腾讯云完备的能力,用户在弹性、开放的云平台上能够快速构建自己的 IT 基础设施和区块链服务。TBaaS 区块链服务平台集合众多区块链底层技术,目前已支持长安链·ChainMaker、Hyperledger Fabric 与 FISCO-BCOS 区块链底层引擎,为用户构建自己的区块链解决方案提供灵活选择。

老惯例,传送门:TBaaS 产品简介

三,TBaaS平台上链体验

腾讯云区块链服务平台(TBaaS)提供了一个体验入口,只需要编写智能合约上传就可以快速上链,传送门:https://cloud.tencent.com/product/tbaas

点击免费体验长安链后进入区块链网络管理模块,如下图所示:

这里已经有体验网络,不需要新建网络,直接点击红色区域进入明细管理页面

这时就要准备上传合约了,合约可以选择Docker Go、Solidity、C++、Rust,因为开发环境问题这里我选择了Go,但在使用Docker费力编写合约的过程中我发现了长安链提供了个IDE,在线编写,编译合约下载好后直接上传就可以使用了,IDE传送门:https://ide.chainmaker.org.cn/

首先我们在WorkSpace下右键--创建合约工程,输入合约工程名,如chinamakerDemo

接下来在合约工程上右键--创建合约文件,命名为main.go

 

 

 在右侧编辑区域输入合约代码后ctrl + s保存,如:

package main

import (
    "strconv"

    "chainmaker/pb/protogo"
    "chainmaker/shim"
)

// AgeContract save and get age
type AgeContract struct {
}

// InitContract 合约初始化方法,会在合约部署到链上时执行
func (ac *AgeContract) InitContract(stub shim.CMStubInterface) protogo.Response {
    return shim.Success([]byte("Init Success"))
}

// InvokeContract 调用合约,在链上执行合约时,实际调用的是这个方法
func (ac *AgeContract) InvokeContract(stub shim.CMStubInterface) protogo.Response {
    //获取要调用的合约方法
    method := string(stub.GetArgs()["method"])

    //case "saveAge" 关联方法名 "saveAge" 到 ac.saveAge()
    //case "getAge"  关联方法名 "getAge"  到 ac.getAge()
    switch method {
    case "saveAge":
        return ac.saveAge(stub)
    case "getAge":
        return ac.getAge(stub)
    default:
        return shim.Error("no contarct method")
    }
}

// saveAge 保存用户年龄信息
func (ac *AgeContract) saveAge(stub shim.CMStubInterface) protogo.Response {
    //获取所有的合约参数
    args := stub.GetArgs()

    name := string(args["name"])
    ageStr := string(args["age"])
    if name == "" || ageStr == "" {
        message := "name or age is empty"
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error(message)
    }

    _, err := strconv.Atoi(ageStr)
    if err != nil {
        message := "convert age to int fail. err: " + err.Error()
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error(message)
    }

    //保存用户年龄信息到链上
    err = stub.PutStateFromKey(name, ageStr)
    if err != nil {
        message := "put state from key fail. err: " + err.Error()
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error(message)
    }

    //返回合约执行成功信息
    return shim.Success([]byte("success"))
}

// getAge 获取用户年龄信息
func (ac *AgeContract) getAge(stub shim.CMStubInterface) protogo.Response {
    //获取所有的合约参数
    args := stub.GetArgs()

    name := string(args["name"])
    if name == "" {
        message := "name is empty"
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error("-1")
    }

    ageStr, err := stub.GetStateFromKey(name)
    if err != nil {
        message := "get state from key fail. err: " + err.Error()
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error("-1")
    }

    if ageStr == "" {
        message := "age not found"
        //打印日志,调试合约时,日志会在控制台输出中展示
        stub.Log(message)
        //返回合约执行错误信息
        return shim.Error("-1")
    }

    //返回用户年龄
    return shim.Success([]byte(ageStr))
}

func main() {
    //运行合约
    err := shim.Start(new(AgeContract))
    if err != nil {
        panic(err)
    }
}

 合约编写完后一定要ctrl + s保存,接下来可以在线构建调试合约

调试无误后可以在线编译合约并下载,如

有了合约文件后就可以在TBaaS平台上传合约文件了

注意踩坑,合约名称和合约文件不一致会遇到奇奇怪怪的问题 ,这里非常感谢TBaaS团队的小伙伴,协助解决问题很及时,手动点赞~  

上传好合约后就可以快速上链了

点击快速上链按钮,选择好合约,调用方式,输入参数等点击确定就完成了,是不是很方便快捷~

接下来我们在区块链浏览器中可以查看这条区块链的信息,如高度,交易数等

好了,体验教程到此结束,感兴趣的小伙伴也快去体验下吧!