• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 1738
    • 0
    • 分享到

    不同的區塊鏈技術,涉及那些編程語言?

    2018-9-25 11:12

    來源: blockchainbrother

    區塊鏈技術入門,涉及那些編程語言?在本文中,將介紹比特幣、超級賬本Fabric和以太坊這三種區塊鏈中,分別使用什么開發語言來進行智能合約編程,并提供你進一步學習的資源鏈接。


    比特幣


    比特幣是第一個真正意義上的區塊鏈,不過,從嚴格意義上來講,它對智能合約的開發者是不友好的。


    可以用一種低門檻的編程語言Bitcoin Script在比特幣系統上編寫智能合約。每個比特幣地址都對應著一個Bitcoin Script程序。看起來是這樣:

    IF 
    2
    3 CHECKMULTISIG ELSE    "30d" CHECKSEQUENCEVERIFY DROP    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 方法。


    以太坊


    以太坊是第一個提供完善的智能合約開發框架的區塊鏈,因此它也被稱為區塊鏈2.0的代表。事實上,目前絕大多數的區塊鏈應用,包括ICO代幣發行,都是基于以太坊來實現的智能合約應用。


    以太坊有四種專用語言可以用來開發智能合約:

    • Solidity ,受JavaScript 啟發

    • Serpent ,受Python啟發

    • Mutan,受Go 啟發

    • LLL 受Lisp 啟發


    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關鍵字包含的代碼段即表示一個智能合約,它擁有一些成員變量和函數,看起來非常類似于傳統的面向對象開發中的類。


    來源:極客編程

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频