Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

EOS智能合约(SmartContract)

是鹅好甜
57 0 0
虽然智能合约(SmartContract)这个词现在已经很流行了,但如果你问我到底什么是智能合约?我还真不能马上给出准确的答案,为此,我查看了wikipedia上关于SmartContract的词条:Asmartcontractisacomputerprotocolintendedtodigitallyfacilitate,verify,orenforcethenegotiationorperformanceofacontract.Smartcontractsallowtheperformanceofcredibletransactionswithoutthirdparties.Thesetransactionsaretrackableandirreversible.Proponentsofsmartcontractsclaimthatmanykindsofcontractualclausesmaybemadepartiallyorfullyself-executing,self-enforcing,orboth.Theaimofsmartcontractsistoprovidesecuritythatissuperiortotraditionalcontractlawandtoreduceothertransactioncostsassociatedwithcontracting.可以看到,所谓智能合约中的智能,其实和人工智能中的智能(Intelligence)还是有很大的区别,之所以称之为智能合约,也许是因为它比传统的合约要先进,主要体现在以下几个方面4 v2 `: }' @& I' V) g$ N6 v) C6 C
# C; ?3 [1 u! R) V( j( r; q4 {
    你相信合约就行了,不需要第三方参与
+ A$ Y9 |7 Q% ~& i0 b7 M4 y9 }4 w. n2 r( I" z6 d% n; N" K
    它是可追踪的,不可逆的- S+ c% r$ [* B$ z
7 m( [5 {1 s! X3 o' t9 a" Z
    它是可以自动执行的
/ }! z2 ?* d: x; e+ `; g+ F& W, ~8 g& b+ ~8 S  G* o! r! m
    不要小看这几点特性,智能合约的普及,可以让人们在交易过程中更为透明,你和一个陌生人交易,不会再是一次博弈的关系,而是多次博弈,因为所有的交易记录都是可追踪的,试想以下,如果你在和别人交易时,事先就知道今后还会和这个人交易,你会选择合作还是背叛?当然是合作。
& L, L9 G: m" @7 ~% W6 r
3 m2 H7 N( G) |; m5 g7 I所以,相比于传统的合约,智能合约可以减少交易成本(Transactioncost),从而整体的提升社会效率。什么是EOS智能合约在EOSIO开发者文档中,有这么一段描述Areal-worldcontract,simplystated,isanagreementgoverningoutcomesforactions,givenasetofinputs.Acontractcanrangefromformallegalcontracts(e.g.,afinancialtransaction)tosomethingassimpleasthe“rules”ofagame.Typicalactionscanbethingssuchasfundtransfers(inthecaseofafinancialcontract)orgamemoves(inthecaseofagamecontract).真实世界的合约,简单来说,是一组协议,给予其输入一定的行为,它会产生相应的结果。
! Y- R# |& m; z  O$ n4 m( D  x
. u' c2 O, k' R5 Y3 z) _+ |从正规的法律合同(如金融交易)到简单的游戏「规则」都属于合约的范畴。典型的行为可以是转账(金融合约)或玩家的移动(游戏合约)。AnEOSIOSmartContractissoftwareregisteredontheblockchainandexecutedonEOSIOnodes,thatimplementsthesemanticsofa“contract”whoseledgerofactionrequestsarebeingstoredontheblockchain.EOSIO智能合约软件注册在区块链上,并在EOSIO节点上执行,它实现了「合约」的语义,并将合约的请求行为存储在区块链上,即请求账本。EOS定义的智能合约包含两个要素:代表合约的程序和执行合约时的行为。+ S. S5 p# _- m* ^: U0 b

  v/ [! C  |" a, ]9 \6 \同时,阅读上面这段文字时,你很可能会把它和比特币系统对应起来,其实比特币是智能合约的一个特例:它只定义了转账合约,即接收UTXO(UnspentTransactionOutput)、验证签名及创建新的UTXO;而该合约也只有一个行为——转账(发送UTXO)。: n$ `4 o+ h' S9 t
5 J" G! Z0 E+ k7 w# w6 n
和比特币把UTXO记录在区块链上一样,EOS也把所有的行为数据记录在了区块链上,唯一不同的是,EOS是一个智能合约平台,它不仅支持转账合约,现在你能看到的CPU、Bandwidth抵押、RAM人机交易市场、投票等都在其范畴之内,可以看到智能合约平台是非常具有想象力的,它提供了多样性,即便如此,它仍然由最基本的因素组成:代表合约的程序和执行合约的行为。# Z2 B. J# b; K- s

  p8 H9 d1 y  b: {+ c/ s从这个角度来看,EOS仍然只是比特币的扩展,所以在学习中,牢记这两个要素,有助于在学习的过程中不至于迷失。; h# X$ }) N2 M* G$ N! L! b" Q

* E# M1 e# B1 q# a0 w$ m如何开发EOS智能合约开发EOS智能合约,你需要完成该合约对应的程序,并将其上传到EOS平台上,计算机语言方面,目前智能合约只能用C++开发,并将其编译成WebAssembly兼容的可执行程序,因为Go语言将支持WebAssembly,所以未来你也可以使用Golang来写智能合约。$ {. w- J: t% U! z
  K7 B: {& |2 K' a% @
除此之外,也有开发者正在将EOS接入JavaScript虚拟机和Python虚拟机,所以在不久的将来,开发智能合约将不再受C++这座大山的限制。即便现在只能使用C++语言开发,要实现一个EOS智能合约也并不复杂,实际上你只需要开发该合约所提供的行为即可,从这个角度来讲,合约和行为的关系,就好比WebService和其提供的Interface之间的关系。假设目前eosio.token这个合约不存在,需要你来实现它,你会怎么做?eosio.token这个合约主要完成了EOSIO平台中各种token的创建、发行和转账功能,所以你应该首先定义其具备的3个行为:0 b5 B# S: W6 o6 X9 i1 F
3 C8 ?( a! X5 f4 c5 p2 F/ Z2 ]
    create:用于创建新的token
4 l6 {- {9 Q( Q- g  {/ E! C' q! g6 o. K& y+ O' P9 n" f1 ^/ J
    issue:用于发行token,有点像银行印钞的功能
, Z: F% I& e: h4 q1 M: B
7 G: I0 T& H8 P% {7 s- v    transfer:让用户之间可以进行转账# A8 G- l8 L# v" O6 A7 z2 N8 o; L' ?
/ D: }& O% B, \; k" P" l
    同时,和应用程序提供的接口(interface)一样,你需要将所有的行为暴露出去,这样使用者才可以进行调用。EOSIO为每个合约提供了统一的行为入口——apply函数,你可以把它理解为WebService中的路由(routing),同时,为了方便开发,EOSIO提供了一个宏,你只需要添加一行代码,就可以实现apply功能,如下:EOSIO_ABI(eosio::token,(create)(issue)(transfer))
+ L( C) b* E, K9 N6 D; d6 K. g2 H9 ]! b/ c0 h/ U
    以上代码将create、issue和transfer三个行为都暴露到了外部。也就是说,使用者要执行该合约,首先进入的是apply函数,然后根据具体的行为,再进入到不同的create、issue或transfer中运行。为了完成eosio.token智能合约,我们已经实现了其所具备的行为,以及将这些行为通过apply函数暴露到外部,根据EOSIO对智能合约的定义,这里似乎少了点什么。. I0 x% Q5 u7 g: q. P. E0 o2 R' {* b

' O* u" i- B6 P+ }. n的确,在实现的过程中,我们遗漏了最为关键的步骤:将用户请求智能合约的行为存储到区块链上。大家都知道区块链是一种时间序列的链表式数据库,即它是一种以交易为单位、按照时间的顺序、以链表形式存储的数据结构,链表的特点是检索困难,所以通常区块链系统都会配备一个KV数据库来加速检索,EOSIO也不例外,它提供一个仿boost::multi_index(Boost是扩展C++的强大的功能库)的数据结构,也叫multi_index数据库,这种数据库相比传统的KV数据库来说,优势在于它可以对同一份数据建多级索引,检索效率更高。% Q7 T0 n8 X2 M9 V% o8 E

) i. B4 Y0 A8 m) Q# e. E) Y" o; L在EOSIO中,multi_index数据库除了帮助加速检索外,它还是智能合约写区块链的桥梁,所以要写好智能合约,对multi_index的学习是必不可少的,相信你也猜到了,multi_index使用的资源就是EOSIO系统中最重要的——RAM,更加说明了它的重要性。下面这张图很好的说明了EOS处理智能合约的流程,从上至下,系统会依次执行每个合约,从左至右,对每个合约,系统会为其分配一个apply上下文,不同合约之间的上下文是隔离的,不会互相影响。
: ]; ^* G. w6 ?& X7 b; `9 c
# P* p8 z  u7 n# g, Z  b7 Q    以上,是你写一个EOS智能合约的要点,如果你读了这些内容后,觉得写一个智能合约不是什么难事儿,那么这篇文章的目的就达到了,下一步,你应该就可以阅读contracts/eosio.token下的代码了。总结一下,这篇文章主要讲述了什么是智能合约,EOS智能合约具体又指什么,以及写一个EOS智能合约的关键
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

是鹅好甜 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    25