您好,登錄后才能下訂單哦!
這篇文章主要介紹“Solidity智能合約怎么實(shí)現(xiàn)”,在日常操作中,相信很多人在Solidity智能合約怎么實(shí)現(xiàn)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Solidity智能合約怎么實(shí)現(xiàn)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
比特幣是第一個(gè)真正意義上的區(qū)塊鏈,不過(guò),從嚴(yán)格意義上來(lái)講,它對(duì)智能合約的開(kāi)發(fā)者是不友好的。
可以用一種低門檻的編程語(yǔ)言Bitcoin Script在比特幣系統(tǒng)上編寫(xiě)智能合約。每個(gè)比特幣地址都對(duì)應(yīng)著一個(gè)Bitcoin Script程序??雌饋?lái)是這樣:
IF 2 <Alices' pubkey> <Bob's pubkey> <Escrow's pubkey> 3 CHECKMULTISIG ELSE "30d" CHECKSEQUENCEVERIFY DROP <Alices' pubkey> CHECKSIG ENDIF
另一種較高級(jí)別的語(yǔ)言是Ivy,它可以編譯成Bitcoin Script。Ivy能夠幫助你編寫(xiě)自定義的比特幣地址,這種地址與隔離見(jiàn)證(SegWit)兼容,在比特幣協(xié)議(包括簽名檢查、hash特征值(commitment)和時(shí)間鎖)的支持下,可以執(zhí)行任意條件組合。例如:
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 } }
比特幣“虛擬機(jī)”——協(xié)議中負(fù)責(zé)執(zhí)行Bitcoin Script程序的一部分——與以太坊或者Chain Protocol等其它智能合約平臺(tái)的虛擬機(jī)相比(功能)更加有限,其指令系統(tǒng)甚至不是圖靈完備的。但Bitcoin Script的確提供了一組很有用的基礎(chǔ)原語(yǔ)(primitives)——簽名校驗(yàn)、哈希計(jì)算以及相對(duì)和絕對(duì)的時(shí)間鎖——另外還能對(duì)這些原語(yǔ)進(jìn)行自由組合。
fabric是超級(jí)賬本大家庭中最成熟的一個(gè)區(qū)塊鏈項(xiàng)目,主要用于行業(yè)鏈、聯(lián)盟聯(lián)或私有鏈,它不需要通過(guò)挖礦來(lái)形成共識(shí),因此可以達(dá)到很高的交易速度。
在fabric中,智能合約被稱為鏈碼(Chaincode),實(shí)質(zhì)上是控制區(qū)塊鏈網(wǎng)絡(luò)中的不同實(shí)體或相關(guān)方如何相互交互或交易的業(yè)務(wù)邏輯。簡(jiǎn)言之,鏈代碼將業(yè)務(wù)網(wǎng)絡(luò)交易封裝在代碼中??梢哉{(diào)用鏈代碼來(lái)設(shè)置和獲取賬本或 world state。
超級(jí)賬本可以使用go、java或者nodejs來(lái)開(kāi)發(fā)智能合約,不過(guò)支持最好的還是go語(yǔ)言。下面是使用go開(kāi)發(fā)的一個(gè)簡(jiǎn)單地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的智能合約可以使用一個(gè)go中的類實(shí)現(xiàn),它必須要實(shí)現(xiàn)約定的借口Init和Query。
Init 方法 在鏈代碼首次部署到區(qū)塊鏈網(wǎng)絡(luò)時(shí)調(diào)用,將由部署自己的鏈代碼實(shí)例的每個(gè)對(duì)等節(jié)點(diǎn)執(zhí)行。而只要在區(qū)塊鏈狀態(tài)上執(zhí)行任何讀取/獲取/查詢操作,就會(huì)調(diào)用 Query 方法。
訪問(wèn)這里了解更多關(guān)于fabric的智能合約開(kāi)發(fā)的相關(guān)信息:Fabric Chaincode
以太坊是第一個(gè)提供完善的智能合約開(kāi)發(fā)框架的區(qū)塊鏈,因此它也被稱為區(qū)塊鏈2.0的代表。事實(shí)上,目前絕大多數(shù)的區(qū)塊鏈應(yīng)用,包括ICO代幣發(fā)行,都是基于以太坊來(lái)實(shí)現(xiàn)的智能合約應(yīng)用。
以太坊有四種專用語(yǔ)言可以用來(lái)開(kāi)發(fā)智能合約:
Solidity ,受JavaScript 啟發(fā)
Serpent ,受Python啟發(fā)
Mutan,受Go 啟發(fā)
LLL 受Lisp 啟發(fā)
這四種語(yǔ)言都是為面向合約編程而從底層開(kāi)始設(shè)計(jì)的語(yǔ)言,但從目前的發(fā)展來(lái)看,Solidity已經(jīng)稱為以太坊智能合約開(kāi)發(fā)當(dāng)之無(wú)愧的首選語(yǔ)言。
Solidity的語(yǔ)法類似于JavaScript,這降低了學(xué)習(xí)門檻,易于被掌握和使用,因?yàn)镴avaScript是Web開(kāi)發(fā)者的常用語(yǔ)言。例如,下面是一個(gè)使用Solidity開(kāi)發(fā)的簡(jiǎn)單但完整的智能合約:
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關(guān)鍵字包含的代碼段即表示一個(gè)智能合約,它擁有一些成員變量和函數(shù),看起來(lái)非常類似于傳統(tǒng)的面向?qū)ο箝_(kāi)發(fā)中的類。
到此,關(guān)于“Solidity智能合約怎么實(shí)現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。