比特幣被稱為區(qū)塊鏈1.0钧嘶,以太坊被稱為區(qū)塊鏈2.0,那么作為區(qū)塊鏈2.0時(shí)代的代表以太坊最引人注目的創(chuàng)新就在于它的“智能合約”琳疏,本文為大家講解智能合約有决。
智能合約是什么?
我們都知道傳統(tǒng)的合約或合同是當(dāng)事人之間設(shè)立空盼、變更书幕、終止民事權(quán)利義務(wù)關(guān)系的協(xié)議,那么智能合約有什么區(qū)別呢揽趾?它是一種以信息化方式傳播台汇、驗(yàn)證或執(zhí)行合同的計(jì)算機(jī)協(xié)議。其次它允許在沒(méi)有第三方的情況下進(jìn)行可信交易篱瞎,這些交易可追蹤不可逆轉(zhuǎn)苟呐。智能合約的概念最早是是由密碼學(xué)家和計(jì)算科學(xué)家Nick Szabo在1995年提出。(他當(dāng)初在自己發(fā)表的文章中提到了智能合約的理念:一個(gè)智能合約是一套數(shù)字形式定義的承諾俐筋,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議)
智能合約的初衷是提供優(yōu)于傳統(tǒng)合約的安全方法牵素,并減少與合約相關(guān)的交易成本。但是智能合約現(xiàn)在還不算太智能澄者,目前來(lái)說(shuō)和現(xiàn)實(shí)生活中的法律協(xié)議也不一樣笆呆,它只是運(yùn)行在區(qū)塊鏈頂部的計(jì)算機(jī)代碼,或者說(shuō)是程序員編寫(xiě)的一個(gè)軟件程序粱挡,程序里面包含了一些規(guī)則赠幕,只要滿足了預(yù)先制定的規(guī)則,協(xié)議就會(huì)自動(dòng)執(zhí)行抱怔。
智能合約如何執(zhí)行劣坊?
相信大家經(jīng)常面臨著被朋友借錢猶豫到底借不借的問(wèn)題嘀倒,不借怕傷害了朋友的面子屈留,借了呢,又不知道對(duì)方什么時(shí)候能還测蘑。那么用智能合約來(lái)執(zhí)行的話就簡(jiǎn)單多了灌危,比如你借給你朋友王二10000元,并在沒(méi)有第三方在場(chǎng)的情況下與他約好一個(gè)月后還款碳胳,雙方設(shè)置好條款勇蝙,一個(gè)月后合約會(huì)自動(dòng)將10000元從王二的賬戶上劃轉(zhuǎn)至你的賬戶中。
所有的智能合約大多都遵循類似的原則挨约,對(duì)程序進(jìn)行預(yù)先編碼味混,設(shè)置好規(guī)則产雹,根據(jù)規(guī)則自動(dòng)執(zhí)行讲岁。那么智能合約的參與者相比傳統(tǒng)合約的優(yōu)點(diǎn)在于它比手動(dòng)結(jié)算效率高教翩,解決了信任問(wèn)題,執(zhí)行時(shí)減少了交易成本等埠戳。
智能合約的工作流程是怎樣的馆衔?
竟然是一種數(shù)字形式定義的承諾瘟判,那意味著需要寫(xiě)入計(jì)算機(jī)的可讀代碼中。當(dāng)參與方達(dá)成協(xié)定角溃,智能合約建立好權(quán)利和義務(wù)后拷获,剩下的就由計(jì)算機(jī)或其網(wǎng)絡(luò)執(zhí)行。
1.達(dá)成協(xié)定:參與方制定相關(guān)的合約條款减细,比如執(zhí)行條件匆瓜,執(zhí)行日期,相關(guān)的法幣要求等未蝌。
2.事件:指觸發(fā)合約執(zhí)行的事件陕壹,可以是接收到的信息也可以是交易的發(fā)起。如借錢例子中的到期還款树埠。
3.合約執(zhí)行以及價(jià)值轉(zhuǎn)移:合約執(zhí)行滿足條件的價(jià)值轉(zhuǎn)移糠馆。以上面的例子來(lái)說(shuō),從王二的賬戶里轉(zhuǎn)10000元給我怎憋,就是一次價(jià)值轉(zhuǎn)移又碌。
4.結(jié)算:通過(guò)兩種方式實(shí)現(xiàn):一是鏈上資產(chǎn)(數(shù)字),適用于虛擬資產(chǎn)绊袋,賬戶自動(dòng)結(jié)算毕匀。鏈下資產(chǎn),適用于如股票癌别、法幣等現(xiàn)實(shí)中的資產(chǎn)皂岔,賬戶更改將與鏈下結(jié)算指令相匹配。
智能合約的優(yōu)點(diǎn)與缺點(diǎn)有哪些展姐?
優(yōu)點(diǎn):透明躁垛,精確,安全圾笨,快速教馆,效率高,永遠(yuǎn)存儲(chǔ)和備份擂达,信任土铺,降低成本。
由于智能合約是部署在區(qū)塊鏈上,所以合約規(guī)定上的相關(guān)條款對(duì)所有參與者都是可見(jiàn)的悲敷,因?yàn)楹霞s一旦建立就不可隨意篡改究恤,也保證了參與方的利益;智能合約作為一個(gè)數(shù)字形式的承諾后德,其結(jié)果相對(duì)來(lái)說(shuō)是很精確的丁溅;智能合約采用了數(shù)據(jù)加密,它的保護(hù)級(jí)別算是目前互聯(lián)網(wǎng)上最安全的探遵;運(yùn)行在區(qū)塊鏈上的智能合約窟赏,同樣被區(qū)塊鏈上網(wǎng)絡(luò)節(jié)點(diǎn)共同維護(hù),只要區(qū)塊鏈在箱季,智能合約就能永久的運(yùn)行下去涯穷。同樣的,智能合約記錄的資料也將永久保存藏雏,以備將來(lái)參考拷况。此外,如果有數(shù)據(jù)丟失掘殴,也可以很容易地被檢索到赚瘦。
缺點(diǎn):安全問(wèn)題
智能合約是“執(zhí)行合約條款的計(jì)算機(jī)交易協(xié)議”。區(qū)塊鏈上的所有用戶都可以看到基于區(qū)塊鏈的智能合約奏寨。但是起意,這也會(huì)導(dǎo)致包括安全漏洞在內(nèi)的所有漏洞都可見(jiàn),并且可能無(wú)法迅速恢復(fù)病瞳。
智能合約所遵循的ERC標(biāo)準(zhǔn)有哪些揽咕?
你可能會(huì)經(jīng)常聽(tīng)到有人說(shuō)ERC-20代幣,但自己卻聽(tīng)得云里霧里不知如何接話套菜,那么接下來(lái)就帶大家了解一下亲善。ERC標(biāo)準(zhǔn)是由以太坊開(kāi)發(fā)人員編寫(xiě)的,開(kāi)發(fā)人員基于這些標(biāo)準(zhǔn)構(gòu)建智能合約逗柴,目前最流行的被大家討論最多的就是ERC-20標(biāo)準(zhǔn)蛹头。除了ERC-20標(biāo)準(zhǔn)外,還有些ERC標(biāo)準(zhǔn)戏溺,如:ERC-223渣蜗、ERC-621、ERC-721于购、ERC-827袍睡。
什么是ERC知染?
ERC(Ethereum Request for Comment)即以太坊通用意見(jiàn)征求意見(jiàn)協(xié)議肋僧,每一個(gè)開(kāi)源的社區(qū)都需要一個(gè)系統(tǒng)來(lái)處理成員提出的請(qǐng)求和對(duì)請(qǐng)求的采納。ERC就在以太坊網(wǎng)絡(luò)中行使這樣的一個(gè)職能,ERC為開(kāi)發(fā)者提供了技術(shù)指導(dǎo)嫌吠,也對(duì)以太坊網(wǎng)絡(luò)的發(fā)展提供了建議止潘。
ERC是誰(shuí)編寫(xiě)的?
ERC標(biāo)準(zhǔn)是由以太坊開(kāi)發(fā)人員為以太坊社區(qū)編寫(xiě)的辫诅。他們?yōu)榱私o以太坊平臺(tái)創(chuàng)建標(biāo)準(zhǔn)凭戴,提交了以太坊改進(jìn)建議( EIP )——包括協(xié)議規(guī)范和合同標(biāo)準(zhǔn)。如果EIP被委員會(huì)批準(zhǔn)并最終確定炕矮,它就成為了一個(gè)ERC么夫。
EIP的完整列表請(qǐng)參閱:
https://github.com/ethereum/EIPs
ERC有什么作用?
這些被委員會(huì)批準(zhǔn)確定的EIP肤视,為以太坊開(kāi)發(fā)人員提供了一套可行的ERC標(biāo)準(zhǔn)档痪。由于EIP的接口是開(kāi)放的,所以開(kāi)發(fā)人員可以基于這些標(biāo)準(zhǔn)之上構(gòu)建智能合約邢滑。其中ERC-20是整個(gè)加密社區(qū)中最流行的標(biāo)準(zhǔn)腐螟,以太坊平臺(tái)上的所有通證都使用這一標(biāo)準(zhǔn)。
1困后、ERC-20
ERC-20是整個(gè)加密社區(qū)中的所有標(biāo)準(zhǔn)中名氣最大的乐纸,而且大多數(shù)基于以太坊平臺(tái)發(fā)布的token都基于ERC-20協(xié)議。ERC-20協(xié)議清晰的定義了基于其標(biāo)準(zhǔn)發(fā)布的代幣將在以太坊網(wǎng)絡(luò)中怎樣運(yùn)作摇予。
因此汽绢,ERC-20對(duì)開(kāi)發(fā)者的影響是巨大的,因?yàn)樗鼈冊(cè)僖膊挥脼榱税l(fā)行一個(gè)新token而重做整個(gè)項(xiàng)目了侧戴。如果這些token是符合ERC-20標(biāo)準(zhǔn)的庶喜,那么它們就會(huì)與新token兼容。ERC-20規(guī)則被開(kāi)發(fā)者大規(guī)模采用救鲤,這意味著基于以太坊的ICO發(fā)布的大多數(shù)token都符合ERC-20標(biāo)準(zhǔn)久窟。
ERC-20標(biāo)準(zhǔn)包括以下方法:
totalSupply():返回通證的總供應(yīng)量。
balanceOf(address _owner):_owner賬戶的賬戶余額本缠。
transfer(address _to, uint256 _value):發(fā)送數(shù)量為_(kāi)value的通證到地址_to斥扛,觸發(fā)Transfer事件。
transferFrom(address _from, address _to, uint256 _value):從地址_from發(fā)送數(shù)量為_(kāi)value的通證到地址_to丹锹,觸發(fā)Transfer事件稀颁。
approve(address _spender, uint256 _value):允許_spender提取一定數(shù)量的金額。
allowance(address _owner, address _spender):返回允許_spender從_owner提取的金額楣黍。
以上這些方法將會(huì)觸發(fā)以下事件:
transfer(address indexed _from, address indexed _to, uint256 _value):當(dāng)token被轉(zhuǎn)移時(shí)則會(huì)觸發(fā)匾灶。
approval(address indexed _owner, addressindexed _spender, uint256 _value):成功調(diào)用approve方法后則會(huì)觸發(fā)。
ERC-20標(biāo)準(zhǔn)于2015年被提出租漂,并于2017年9月正式確定阶女,這是通證標(biāo)準(zhǔn)化的一個(gè)很好的開(kāi)始颊糜。但是,社區(qū)中的一些開(kāi)發(fā)人員指出秃踩,這個(gè)標(biāo)準(zhǔn)存在缺陷和漏洞衬鱼。另外,有些用例的確需要使用不同的標(biāo)準(zhǔn)憔杨,下面介紹一些其他的ERC標(biāo)準(zhǔn)鸟赫。
2、ERC-223
狀態(tài):打開(kāi)
提出日期:2017年5月3日
開(kāi)發(fā)人員Dexaran詳細(xì)描述了ERC-223標(biāo)準(zhǔn)適用的兩種場(chǎng)景:
在ERC20通證標(biāo)準(zhǔn)中執(zhí)行交易有兩種方式:
1.transfer方法消别。
2.approve + transferFrom 機(jī)制抛蚤。
通證余額只是通證合約中的一個(gè)變量。
通證的交易在合同中的表現(xiàn)是變量的變化:轉(zhuǎn)出賬戶的余額將減少寻狂,接收賬戶的余額將增多霉颠。
交易發(fā)生時(shí), transfer方法不會(huì)通知接收賬戶荆虱,接受賬戶也將無(wú)法識(shí)別傳入交易蒿偎!下面是我寫(xiě)的一個(gè)例子,來(lái)展示導(dǎo)致交易未處理和資金損失的過(guò)程 怀读。
如果接收賬戶接受到的是合約诉位,用戶必須使用approve +transferFrom 機(jī)制來(lái)轉(zhuǎn)移通證;如果接收賬戶是外部帳戶地址菜枷,用戶必須通過(guò) transfer方法轉(zhuǎn)移通證苍糠;如果選擇了錯(cuò)誤的方法,通證將被卡在合約中(合約將不會(huì)識(shí)別交易)啤誊,那么岳瞭,我們將無(wú)法提取這些被卡住的通證。
Dexaran提出的ERC-223標(biāo)準(zhǔn)就解決了這一問(wèn)題蚊锹,而且瞳筏,它與ERC-20標(biāo)準(zhǔn)非常相似。當(dāng)通證轉(zhuǎn)移到智能合約時(shí)牡昆,該合約的一個(gè)特殊方法tokenFallback將允許接收合約姚炕、拒絕通證或觸發(fā)進(jìn)一步的操作。在大多數(shù)情況下丢烘,tokenFallback方法可以用來(lái)代替approve方法柱宦。
3、ERC-621
狀態(tài):打開(kāi)
提出日期:2017年5月1日
ERC-621標(biāo)準(zhǔn)是ERC-20通證標(biāo)準(zhǔn)的擴(kuò)展播瞳。該標(biāo)準(zhǔn)增加了兩個(gè)額外的方法:increaseSupply?和decreaseSupply掸刊,能夠增加和降低流通中的代幣供應(yīng)量。而ERC-20標(biāo)準(zhǔn)僅允許單個(gè)通證發(fā)放事件赢乓,這就限制了一個(gè)固定的不可更改的供應(yīng)量忧侧。而ERC-621標(biāo)準(zhǔn)則建議totalSupply是可以修改的石窑。
4、ERC-721
狀態(tài):打開(kāi)
提出日期:?2017年9月22日
ERC-721標(biāo)準(zhǔn)與ERC-20標(biāo)準(zhǔn)苍柏、ERC-23標(biāo)準(zhǔn)非常不同尼斧,它描述了一種不可互換的通證姜贡。這就意味著每個(gè)通證各不相同试吁,并且每個(gè)通證對(duì)不同的用戶具有不同的值。比如以太貓(CryptoKittes):每個(gè)數(shù)字貓都是一個(gè)獨(dú)立存在的商品楼咳,其價(jià)值取決于該種類的稀有性和用戶的喜好熄捍。
ERC-721通證標(biāo)準(zhǔn)可以在任何一個(gè)交易中使用,但通證的價(jià)值則是“與每個(gè)通證相關(guān)聯(lián)的唯一性和稀缺性的結(jié)果”母怜。該標(biāo)準(zhǔn)的函數(shù)包括name, symbol, totalSupply, balanceOf, ownerOf ,approve , takeOwnership , transfer , tokenOfOwnerByIndex, tokenMetadata余耽。
ERC-721標(biāo)準(zhǔn)還定義了兩個(gè)事件:Transfer和Approval。Gerald Nash(杰拉爾德·納什)的文章就很好地解釋了可互換性這一概念苹熏。
GeraldNash文章:剖析ERC721
鏈接:https://medium.com/crypto-currently/the-anatomy-of-erc721-e9db77abfc24
5碟贾、ERC-827
狀態(tài):打開(kāi)
建議日期:2018年12月1日
ERC-20標(biāo)準(zhǔn)的另一個(gè)擴(kuò)展是ERC-827標(biāo)準(zhǔn),它允許用戶轉(zhuǎn)移通證轨域,持有者也能允許第三方使用通證袱耽。以太坊上的通證可以被其他應(yīng)用程序重用,這其中也包括錢包和交換機(jī)干发。在需要支持第三方動(dòng)態(tài)消費(fèi)限額調(diào)整時(shí)朱巨,這一點(diǎn)非常有用。另外枉长,最重要的一點(diǎn)是冀续,由于它是ERC-20標(biāo)準(zhǔn)的擴(kuò)展,所以它也跟ERC-20標(biāo)準(zhǔn)兼容必峰。
該標(biāo)準(zhǔn)中的一些方法如下所示:
transferFrom(address_from, address _to, uint256 _value, bytes _data) returns (bool success)
function approve(address_spender, uint256 _value, bytes _data) returns (bool success)
?以上便是幾個(gè)比較知名ERC標(biāo)準(zhǔn)的介紹洪唐。