Bitguai.com

区块链技术丨改变世界
做高价值的区块链资讯媒体

区块链开发用什么语言

上周去听了一场分享,关于区块链应用开发平台的选择上有一个疑问。以以太坊和阿/希作比较,他们在编程语言上,以太坊使用了Solidity其通用性并不高,而阿/希采用的JavaScript的语言,更容易上手,在大会上以太坊的核心研发成员针对这一问题作出说明solidity更具有安全性,对于区块链技术来说,应当选择安全的语言而不仅仅只考虑简单语言。

作为开发者来说,在已有的基础平台上进行应用层的开发,是该选择号称具有更安全语言的平台,还是具有更容易掌握和上手的语言的平台?基于比特币等老一代区块链改造的,用C++。新一代区块链的采用Golang的更多(参考下图)

个人觉得区块链只是一套方案实现的机制,并不局限于编程语言。

你可以使用:Solidity,Go,Java,c++,python,PHP,自定义语言来开发它。

当然,如果你是基于现有的开源项目开发的话,就有一定的限制了。

比特币

比特币是第一个真正意义上的区块链,不过,从严格意义上来讲,它对智能合约的开发者是不友好的。

可以用一种低门槛的编程语言Bitcoin Script在比特币系统上编写智能合约。每个比特币地址都对应着一个Bitcoin Script程序。看起来是这样:

 
IF 
    2 <Alices' pubkey> <Bob's pubkey> <Escrow's pubkey> 3 CHECKMULTISIG
ELSE
    "30d" CHECKSEQUENCEVERIFY DROP
    <Alices' pubkey> CHECKSIG
ENDIF

另一种较高级别的语言是Ivy,它可以编译成Bitcoin Script。Ivy能够帮助你编写自定义的比特币地址,这种地址与隔离见证(SegWit)兼容,在比特币协议(包括签名检查、hash特征值(commitment)和时间锁)的支持下,可以执行任意条件组合。例如:

contract EscrowWithDeplay{
    sender: PublicKey
    recipient: PublicKey,
    escrow: PublicKey,
    delay: Duration,
    val: Value
}{
    clause transfer(sig1: Signature, sig2: Signature){
        verify checkMultiSig([sender, recipient, escrow],[sig1, sig2])
        unlock val
    }
    clause timeout(sig: Signature){
        verify checkSig(sender, sig)
        verify older(delay)
        unlock val
    }
}

Ivy的github地址:https://github.com/ivy-lang/ivy-bitcoin

比特币“虚拟机”——协议中负责执行Bitcoin Script程序的一部分——与以太坊或者Chain Protocol等其它智能合约平台的虚拟机相比(功能)更加有限,其指令系统甚至不是图灵完备的。但Bitcoin Script的确提供了一组很有用的基础原语(primitives)——签名校验、哈希计算以及相对和绝对的时间锁——另外还能对这些原语进行自由组合。

超级账本fabric

fabric是超级账本大家庭中最成熟的一个区块链项目,主要用于行业链、联盟联或私有链,它不需要通过挖矿来形成共识,因此可以达到很高的交易速度。

在fabric中,智能合约被称为链码(Chaincode),实质上是控制区块链网络中的不同实体或相关方如何相互交互或交易的业务逻辑。简言之,链代码将业务网络交易封装在代码中。可以调用链代码来设置和获取账本或 world state。

超级账本可以使用go、java或者nodejs来开发智能合约,不过支持最好的还是go语言。下面是使用go开发的一个简单地fabric智能合约:

package main
 
import "fmt"
import "github.com/hyperledger/fabric/core/chaincode/shim"
 
type SampleChaincode struct {
}
 
func (t *SampleChaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
    return nil, nil
}
 
func (t *SampleChaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
    return nil, nil
}
 
func (t *SampleChaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {
    return nil, nil
}
 
func main() {
    err := shim.Start(new(SampleChaincode))
    if err != nil {
        fmt.Println("Could not start SampleChaincode")
    } else {
        fmt.Println("SampleChaincode successfully started")
    }
 
}

frabric的智能合约可以使用一个go中的类实现,它必须要实现约定的借口Init和Query。

Init 方法 在链代码首次部署到区块链网络时调用,将由部署自己的链代码实例的每个对等节点执行。而只要在区块链状态上执行任何读取/获取/查询操作,就会调用 Query 方法。

访问这里了解更多关于fabric的智能合约开发的相关信息:Fabric Chaincode

以太坊

以太坊是第一个提供完善的智能合约开发框架的区块链,因此它也被称为区块链2.0的代表。事实上,目前绝大多数的区块链应用,包括ICO代币发行,都是基于以太坊来实现的智能合约应用。

以太坊有四种专用语言可以用来开发智能合约:

  • Solidity ,受JavaScript 启发
  • Serpent ,受Python启发
  • Mutan,受Go 启发
  • LLL 受Lisp 启发

这四种语言都是为面向合约编程而从底层开始设计的语言,但从目前的发展来看,Solidity已经称为以太坊智能合约开发当之无愧的首选语言。

Solidity的语法类似于JavaScript,这降低了学习门槛,易于被掌握和使用,因为JavaScript是Web开发者的常用语言。例如,下面是一个使用Solidity开发的简单但完整的智能合约:

pragma solidity ^0.4.21;

contract HelloWorld {
    string hello = "Hello World!!!";
    event say(string _value);
    
    function sayHello() public {
        emit say(hello);
    }   
}

合约代码第一行指定该合约使用的Solidity版本为0.4.21,不支持高于0.4.21版本的Solidity特性。

在Solidity中,contract关键字包含的代码段即表示一个智能合约,它拥有一些成员变量和函数,看起来非常类似于传统的面向对象开发中的类。

如果你希望马上开始学习以太坊智能合约和应用开发,可以访问汇智网提供的出色的在线互动教程:


本文由比特怪小编整理编辑发布,文章地址:https://www.bitguai.com/block/kaifa/13648.html,转载请注明出处!

免责声明:转载此文为传递更多市场信息,不代表比特怪的观点和立场,请自行参考。



商务合作(QQ):755847138
媒体合作:Market@bitguai.com
底部导航

本站除标明"本站原创"外所有信息均整理转载自互联网,版权归原作者所有。如有不妥,请联系我们修改或删除。

CopyRight 2017-2018 Bitguai.com All Rights Reserved丨苏ICP备18049263号-1 百度地图 谷歌地图 RSS订阅


比特怪成立于2017年,秉承做高价值的区块链技术和应用为核心的区块链资讯媒体。网站内容主要涵盖区块链技术、游戏、应用场景和区块链项目落地等。让区块链技术应用服务于各个行业。