編者按:本文來自頭等倉,Odaily星球日報經授權轉載。
盡管以太坊是第一個擁有圖靈完備智能合約的平臺,但已經有可能使用一種稱為「比特幣腳本」的語言在比特幣上創建基本合約。而比特幣現金最近一直在改善其智能合約功能。盡管不如以太坊先進,但它們都以自己獨特的方式和優勢支持鏈上智能合約的存在。本文重點介紹這三個平臺上智能合約之間的突出區別。由于關注的重點是智能合約和腳本功能,因此在此不會討論平臺或區塊鏈的基礎知識。本文還特此介紹了鏈上智能合約,以及存在幾種第二層智能合約解決方案,例如RSK。這些解決方案絕對值得討論,礙于篇幅不做非常深入的研究。以太坊:自有狀態且圖靈完備
以太坊是迄今為止最大的智能合約平臺,其智能合約使用以太坊虛擬機實現,這是一個圖靈完備的虛擬機。這意味著只要有足夠的資源,EVM就可以計算任何東西。從概念上講,這與許多其他通用平臺相似,該平臺用于執行Java程序。解釋EVM不過那些通用平臺與以太坊的EVM之間的最大區別在于,以太坊的智能合約代碼由所有以太坊節點執行,以驗證交易的有效性。為了獎勵節點執行此代碼,所有EVM操作碼均具有相關的燃氣成本,如下圖所示。
圖:EVM費用結構每筆交易都會花費大量的Gas,具體取決于所使用的操作碼。用以太坊的原生加密貨幣ETH支付Gas費用。為了限制這些節點每個區塊必須執行的計算量,單個區塊中可以使用的Gas量有一個限制,稱為「區塊Gas限制」。在執行智能合約功能期間,合約可以存儲和訪問必要的數據。根據其用途,這些數據可以存儲于不同的位置,即位于不同的數據位置。首先是「堆棧」,其中包含計算中使用的值。只能輕松訪問堆棧中的前16個項目,因此不適合長期存儲。下面顯示了使用堆棧進行計算。
圖:基于堆棧的計算其次,為了補充堆棧,「contractmemory」可用于在當前合約執行過程中存儲、檢索和傳遞數據。可以從內存中檢索這些值,以將其用于堆棧上進行計算,并將結果存儲回內存中。這些值僅在當前執行期間持續存在。在合約執行結束時,將擦除contractmemory內存和堆棧。最終,數據所在的位置是「contractstorage」,用于在合同執行期間持久保存數據。持久性變量存儲在合約存儲中。為了實現數據持久性,contractmemory存儲在每個以太坊節點上。因此,其內存類似于RAM,而存儲類似于硬盤驅動器或持久數據庫。更多以太坊虛擬機如何工作的細節可參見MyCrypto的文章。編寫智能合約盡管所有智能合約都使用EVM,但大多數智能合約不是使用EVM字節碼手工編寫的,就像大多數JVM字節碼不是手工編寫的一樣。相反,有幾種高級語言可用于在以太坊中編寫智能合約,最受歡迎的語言是Solidity,除此之外還出現了Vyper,也是一種面向EVM的編程語言。下圖包含一個非常簡單的Solidity智能合約的示例。
安全團隊:FTX交易所遭到gas竊取攻擊事件技術分析:10月13日消息,據Beosin EagleEye Web3安全預警與監控平臺的輿情消息,FTX交易所遭到gas竊取攻擊,黑客利用FTX支付的gas費用鑄造了大量XEN TOKEN。Beosin安全團隊第一時間對事件進行了分析,結果如下:
1.以其中一筆攻擊交易為例
(0x8eb73bd5c08318a4cfd233940c3a58744830cda999e59ecbc56f094618a91d69),攻擊者先在鏈上部署攻擊合約(0xCba9b1Fd69626932c704DAc4CB58c29244A47FD3)
2.FTX熱錢包地址會向攻擊合約地址轉入小額的資金,利用攻擊合約(0xCba9...7FD3)進行批量創建子合約。由于整個攻擊中創建了大量合約,并且每次執行完子合約之后,子合約都會自毀。
3.接下來子合約fallback()函數去向Xen合約發起鑄幣請求,如下函數,claimRank()函數傳入一個時間期限(最小1天)進行鑄幣,鑄幣條件是只用支付調用gas費,并無其他成本,并且claimMintReward()函數為提取函數,該函數只判斷是否達到時間期限(本次黑客設置的時間期限為最小值1天),便可無條件提取。但在此次調用過程中,交易發起者為FTX熱錢包地址,所以整個調用過程的gas都是由FTX熱錢包地址所支付,而Xen鑄幣地址為攻擊者地址。
4. 1-3中的步驟,重復多次,并且每次重復過程中都會將已到期的代幣提取出來,并且同時發起新的鑄幣請求。
截止發文時,通過Beosin Trace追蹤發現,FTX交易所損失81ETH,黑客通過DODO,Uniswap將XEN Token換成ETH轉移。[2022/10/13 14:26:15]
與智能合約互動以太坊中的智能合約作為字節碼存在于以太坊網絡上。這意味著將Solidity代碼編譯為字節碼,然后通過發送部署交易將其部署到網絡。這是一種特殊的交易,沒有任何接收者,但以字節碼作為交易數據。這些部署的合約僅以EVM字節碼的「碎片」形式存在于網絡中,幾乎無法單獨使用。為了與它們進行「接頭」,需要提供一個應用程序二進制接口,其中包括所有公共功能及其參數的列表。為了使用戶對這些合約有更多了解,Etherscan之類的服務幫助可以驗證合約源代碼,以便用戶可以在使用合同之前檢查代碼。通過連接到以太坊節點并使用其JSON-RPC接口,可以直接訪問所有智能合約。但是,許多智能合約卻是通過連接到節點并管理ABI的前端應用程序訪問的。這可以通過眾多不同的以太坊SDK之一來完成,它們可以在后臺調用JSON-RPC。這為合約用戶提供了更好的體驗,相當于最困難的部分被形象化了。可以通過兩種不同的方式與智能合約進行交互:調用和交易。調用是合約功能的本地調用,它不會向區塊鏈廣播任何內容。因此,調用過程是「只讀」的,不能對合約狀態進行任何更改,也不會產生任何費用。而交易是實打實的「寫入操作」,確實會廣播到網絡,并包含在區塊鏈中,并且會產生礦工費用。以ERC20令牌為例,通過調用檢索token余額,同時通過發動交易轉移令牌。智能合約間互操作以太坊的這些屬性允許創建在鏈上運行的任何類型的去中心化應用程序。一個很好的例子就是DeFi生態系統,其中包括Maker,Uniswap和Compound等應用程序,以及ERC20和ERC721令牌標準。這些應用程序允許具有無限數量的動態參與者的復雜功能。
麥子錢包陸遙遠:在創新幣種面前,技術分析會失效:7月7日20:00,麥子錢包陸遙遠做客MXC抹茶社區,就《加密閣重啟現貨時代》發表觀點。陸遙遠表示:“主流幣之外的其它創新幣種,通過買、賣盤,其技術分析會失效。我的策略是押注熱點龍頭、次龍頭幣種,瞄準低市值有落地應用的代幣,調研項目的完成度和團隊的狀態。對于創新幣種,一方面需要對項目消息極速捕捉和對團隊態度的揣摩,之后才是根據交易環境進行交易,參與二級市場。這是和主流幣操作不一樣的地方。“[2020/7/7]
圖:rDai中的DeFi互操作性最重要的是,智能合約本身可以成為其他智能合約的「參與者」,從而實現這些合約之間的強大集成和組合。比如,持有代幣余額并將其借給Compound或與Uniswap交易所的智能合約,或者是使用rDai自動投資DAI并將應計利息貢獻給慈善機構。盡管智能合約可以彼此交互,但是鏈上的每個交易都必須來自外部帳戶。因此,以太坊智能合約間的交互仍然必須由用戶通過初始交易來觸發。在此初始觸發之后,合約間的交互類似于直接訪問。換句話說,某個智能合約可以調用其他智能合約的「只讀功能」或觸發「寫入操作」。由于只有外部帳戶才能觸發交易,因此智能合約之間的交易稱為內部交易或消息調用,以與用戶啟動的交易區分開。比特幣:無狀態且簡單
所有比特幣交易均由基于堆棧的、被稱為「比特幣腳本」的編程語言支持。上文提到以太坊的EVM是為圖靈完備且可互操作的智能合約而設計的,而比特幣腳本卻有意添加各種限制,并且以根本不同的方式工作。解釋比特幣腳本就想EVM,比特幣腳本使用堆棧來保存值并在這些值上執行計算。但與EVM不同的是,堆棧是比特幣腳本中唯一可用的數據位置。這意味著,很難存儲多個值以便在以后的合約執行中使用。更重要的是,這意味著不可能存儲或修改那些在合約執行期間仍存在的值。這是以太坊的智能合約和比特幣的最大區別。以太坊的模型是有狀態的,而比特幣是無狀態的。通俗理解就是,以太坊可以被認為類似于普通的命令式可變數據編程范例,而比特幣則類似于功能不變的數據范例。比特幣的模型允許獨立且高效得多地驗證交易,這使得并行化和分片交易更加容易。但是,如果沒有任何可變的數據存儲,在比特幣上創建像以太坊那樣的復雜智能合約就更加困難,比如,ERC20合約必須跟蹤代幣余額并進行更改。除了這些狀態差異之外,還有其他一些因素限制了比特幣智能合約的復雜性。值得注意的是,比特幣腳本缺乏對某些算術函數以及任何形式的循環或遞歸的支持。其合約還具有520個字節的有效大小限制,并且最多只能包含201個操作碼。比特幣上的大多數智能合約都屬于幾類簡單合約。例如,可以由多個參與者使用的多重簽名合約,或哈希時間鎖定合約。頭等倉小知識:關于哈希鎖定,可以舉一個簡單的例子,比如你從我這兒買一段視頻,這個視頻通過密碼訪問,那么在交易合約中,我把視頻的訪問密碼也變成其中的一個key,如果要達成交易,這個key必須讓你知道;而一旦你知道,錢就支付給我了,并且整個交易過程一定要在設定好的時間內完成,超出時間則合約也將自動觸發。而且由于比特幣上的這些合約非常簡單,大多數價值是通過將不同的合約與其他脫鏈應用程序邏輯相結合而捕獲的。這樣,可以將簡單的合同組合起來以創建復雜的解決方案,例如閃電網絡或跨鏈拍賣等等。解釋比特幣交易比特幣每一筆交易都是通過所謂的「交易輸出」實現的。當這些交易輸出在某個賬戶中可用,它們就被稱為未用交易輸出。這些UTXOs被鎖定腳本鎖定,并被指定好了使用條件。嘗試使用UTXOs時,會提供一個解鎖腳本,然后這些腳本一起執行計算。僅當腳本執行無錯誤且結果值為正確時,交易才生效。與EVM一樣,所有比特幣節點都執行這些腳本來驗證交易,但是比特幣區塊鏈并沒有Gas成本的概念,因此,按交易數據的每個字節向礦工支付費用。為了限制節點必須完成的工作量,在一些更密集的腳本操作上也加入了一些限制。與智能合約互動比特幣中的智能合約的編寫使用P2SH模式。P2SH模式中的鎖定腳本包含腳本哈希,并且需要提供完整腳本以及該贖回腳本的解鎖腳本的解鎖腳本。下圖顯示了這種模式。
動態 | 盧旺達在下年預算中為區塊鏈技術分配研發資金:據Coinidol消息,盧旺達共和國已將下一財政年度的部分預算分配給信息產業部,以開發和支持區塊鏈項目。該部部長Paula Ingabire透露,政府愿意支持區塊鏈和其他大量第四次工業革命技術。她堅信在不久的將來,區塊鏈將改變許多重要領域,包括醫療保健、旅游業、土地登記、運輸和物流、金融以及其他領域。[2019/12/15]
圖:P2SH模式頭等倉小知識:P2SH模式是為了簡化復雜腳本的運用而被引入的,將復雜的鎖定腳本編譯成一個含有20個字節哈希的簡單腳本,就想比特幣地址是基于Base58編碼的一個含有20個字節的公鑰。P2SH跟傳統P2PKH方式的最大區別是把設置轉出條件的人從發送者變成接收者。通過在贖回腳本中添加各種轉出條件可以來實現形式多樣的交易,例如多重簽名交易。比特幣節點分兩個階段驗證這些智能合約交易。首先,對「贖回腳本」進行哈希處理,并對照「鎖定腳本」中的哈希值進行檢查。如果它們匹配,則用「鎖定腳本」去解鎖「贖回腳本」,就好像「贖回腳本」才是初始的鎖定腳本一樣。因為只有字節碼的哈希值存儲在比特幣鏈上,所以完整的字節碼必須存儲在鏈外,并包含在任何合同執行的解鎖腳本中。因此,比特幣智能合約的「部署」是免費的,但以后執行合約的成本更高。相反,以太坊的初始部署相對昂貴,而后來的合約執行則便宜。這些部署上的差異鼓勵綜合使用這兩種智能合約。一個很好的例子是LocalCryptos,它支持以太坊和比特幣的非托管本地交易。對于以太坊,它使用一個大的智能合約來跟蹤所有交易,而對于比特幣,它為每筆交易創建單獨的合約。編寫智能合約雖然以太坊有多種高級語言可以編譯為EVM字節碼,但比特幣對此的關注較少。盡管可以用比特幣腳本構建的系統很復雜,但是合約本身通常很簡單。因此,幾乎沒有必要抽象出底層系統。而且由于比特幣合約有大小限制且每增加一個字節的高昂成本,因此保證合約「盡可能小」很重要。盡管這些高級語言在比特幣中不太重要,但它們確實存在。Ivy是比特幣中「最精致」的高級語言,該語言由DanRobinson于2017年創建。下圖給出了一個用Ivy編寫的智能合約示例。如果接收者未及時使用該合同,則該合約可用于發送可以由發送者收回的款項。
Evercore ISI技術分析負責人:加密貨幣可能成為新型避險資產:在整個4月份,全球最大的加密貨幣比特幣累計上漲36%,創出去年12月份以來的最大月度漲幅,Evercore ISI駐紐約的技術分析負責人Rich Ross表示:“修復過程已經慢慢開始了,但還是相當脆弱。”需要提醒的是:一是需要防止比特幣出現泡沫。二是虛擬貨幣中,最穩健的還是比特幣,因為比特幣已經獲得了廣泛認可,其他加密貨幣具有很大不確定性。一些專業人士認為,當前避險資產多元化也在削弱黃金在避險資產當中的地位,加密貨幣或成新避險選擇,因此,居民財富配置過程中,尤其是海外資產配置,須關注虛擬貨幣以及其他避險資產的訴求。[2018/5/2]
最近,Blockstream的幾位研究人員發布了Miniscript,該語言專注于智能合約的分析和可組合性,而不是抽象底層系統。考慮到比特幣合約往往缺乏抽象的復雜性,這似乎是正確的道路。比特幣現金:可組合功能
上文一方面是以太坊,它能夠創建許多功能強大且有用的智能合約,這些合約完全存在于以太坊鏈上,同時,由于其有狀態的性質,它還提出了擴展性問題。另一方面,比特幣的智能合約無狀態模型允許對智能合約交易進行獨立,簡單的驗證,但是其腳本系統限制了合同的實用性。在分叉之前,比特幣現金和比特幣擁有相同的歷史,因此它們的底層腳本系統在功能上是相同的,比特幣現金也受益于這些相同的方面。從那時起,比特幣現金社區的很大一部分就認識到了對「更有用的智能合約」的需求。比特幣現金啟用了新功能,使其智能合約更有用,同時保留了允許比特幣進行無狀態驗證的基本屬性。BCH的功能升級要了解比特幣現金智能合約的可能性,我們需要查看其半年兩次的網絡升級。自2017年最初的硬分叉以來,每年5月和11月都將執行這些網絡升級。我們特別討論了對比特幣腳本引擎的更改,盡管已進行了其他一些改進,例如Schnorr簽名。在比特幣的早期,由于一些操作碼不安全使用而被禁用。在比特幣現金分叉之后的第一年內,比特幣-ABC節點的開發人員解決了這些問題,并重新引入了經過稍微修改的功能的操作碼,如下圖所示。最重要的是,該升級使在比特幣腳本中對結構化數據進行編碼和解碼成為可能。
圖:2018年5月BCH啟用了新的操作碼此后半年,在2018年11月的比特幣現金網絡升級中發布了另一個新的操作碼。其中包括該更新OP_CHECKDATASIG,它使用戶可以驗證比特幣腳本中任何消息的簽名。如果我們結合2018年推出的腳本更新,這些更新可用于將新穎有用的智能合約功能引入比特幣現金。編寫智能合約相對于原始比特幣腳本,比特幣現金的新功能為其智能合約增加了很多額外的復雜性。這使得擁有一個通過高級語言、SDK和工具提供更高級別抽象層的生態系統變得更加重要。目前正在處理此問題的兩個大項目是Spedn和CashScript。盡管它們仍在積極開發中,但這些工具使處理比特幣現金中的智能合約變得更加容易。下文將使用CashScript代碼片段來闡述一些功能。預言機當過去的比特幣腳本更新組合在一起時,它們使您可以通過受信任的預言機將外部數據帶入比特幣現金的智能合約中。可以將結構化數據編碼為字節數組,并由oracle提供程序簽名。然后,智能合約可以驗證簽名并解碼結構化數據。
Kitco高級技術分析師J:比特幣在短期內還會下跌:Kitco高級技術分析師Jim Wyckoff預測比特幣在短期內還會下跌。“近來的下行價格壓力和停頓在日線圖上走出了偏空的旗子形態,表明近期有更多拋壓。”[2018/3/16]
可以在下面的HODLVault示例合同中查看此示例。該合同強制執行HODLing,直到達到一定的BCH/USD價格為止。所需的BCH/USD價格供稿由oracle提供程序發布,并由用戶傳遞到合同中。為了增加分散性,可以將智能合約設置為使用多個數據源,而不是信任單個集中式服務。保證合同第二個大用例是稱為「保證合同」的技術,該技術的名稱來自物權法中用來限制對象使用的術語。就比特幣現金而言,它限制了智能合約中貨幣的使用。因此,盡管比特幣中的智能合約只能授權一般的貨幣支出,但比特幣現金合約能夠對可支出的金額或收款人的身份施加限制。轉讓比特幣時,發送者必須提供簽名以授權交易。為了生成此簽名,發送方對交易的哈希表示進行簽名。此哈希稱為Sighash,而實際的交易數據包含在Sighash原像中。通過使用_OP_CHECKSIG_和_OP_CHECKDATASIG_具有相同的簽名,我們可以訪問Sighash數據。數據格式可以在規范中進行檢查,并包含在下面的圖像中。一個重要字段是scriptCode,其中包含智能合約本身的字節碼。另一個是hashOutputs允許用戶強制執行交易的輸出。
圖:比特幣現金Sighash數據格式知道保證合同在技術層面上是如何工作的,這很不錯,但是CashScript已經抽象出了與契約有關的大多數復雜性。使用CashScript編寫智能合約時,這些字段很容易獲得,而無需執行手動驗證和解碼Sighash原圖的步驟。第一個使用保證合同技術的智能合約是Licho的LastWill,這是一個智能合約,可讓用戶將死者的財產轉移到自己的財產上。合同定義了三個不同的功能。第一種允許繼承者在180天后索取資金。第二個允許所有者的冷密鑰以任何方式花錢。第三個允許所有者的熱密鑰通過強制將全部合約余額發送回合約來刷新180天的期限。下面包含CashScript版本的LastWill,但是原始版本是由Spedn編寫的,可以在此處進行查看。
這是有用的保證合同的簡單示例之一,但是保證合同可實現甚至更復雜的功能。在《LastWill》合約簽訂后,其創建者KarolTrzeszczkowski繼續創建了Mecenas,該公司可強制執行Patreon等定期付款。保證合同最初是在題為《BitcoinCovenants》的論文中提出的,該論文需要一個新的操作碼_OP_CHECKOUTPUTVERIFY_。隨后提出了其他建議,例如_OP_CHECKTEMPLATEVERIFY_或_OP_CHECKSIGFROMSTACK_。后者與比特幣現金的盟約實施非常相似。可在TendoPein的文章中學習到保證合同的更多信息。模擬狀態查看「最后的遺囑」合約,當合同到位時更改繼承者可能很有價值。由于我們可以通過查看當前合約的字節碼來強制發送到當前合約,因此我們可以通過稍微更改此字節碼來強制發送到稍微不同的合約。可以創建了一個函數,該函數將整個合同的余額發送到具有完全相同的字節碼但具有不同的繼承者的合約。我們只能使用已知大小的構造函數參數來執行此操作。構造函數參數始終是合同字節碼的第一個數據,這就是我們能夠輕松地用新數據替換舊數據的方式。該inheritor是第一個構造函數的參數,它的大小為20個字節,因此我們能夠應用該技術,如可以看到下面。
通過使用該技術,可以在保留合約相同規則的同時更改合約中的某些變量。我們將其稱為「模擬狀態」,因為它提供了合約狀態的某些好處,并且不存在像以太坊那樣有狀態的系統的可拓展性問題。由于必須在某處進行權衡,因此此方法還有其他缺點。主要問題是我們實際上并未更改原始合同中的任何變量,因為由于比特幣現金的無狀態性,這是不可能的。而是創建一個新合同,并將全部余額轉移到該新合約中。由于新地址,這會導致UX問題,但是可以通過在這些智能合約上具有良好的應用程序層抽象來緩解這些問題。在字節碼內部替換這些變量可能會感到很麻煩,尤其是在嘗試替換字節碼內部更深的變量時。應該以高級語言抽象該功能,以便通過提供新參數自動生成新的字節碼。這種抽象可能看起來像這樣:
許多抽象性是以更大的合約為代價的,從而導致更高的費用。但比特幣現金的交易費用通常很低,因此可謂集二者之大成。但是比特幣現金具有與比特幣相同的大小限制,因此這些抽象確實使保持在限制內變得更加困難。這導致許多開發人員不得不手動優化已編譯的字節碼。結論
每種加密貨幣都在其智能合約系統中進行權衡。以太坊是功能最廣泛的最常用的智能合約平臺。比特幣通過其無狀態腳本系統提供了更基本的智能合約版本,此無狀態系統驗證效率更高,但功能較少。比特幣現金與比特幣具有相同的基礎,但是增加了新功能,試圖在有效驗證和有用的智能合約之間折衷。最后,所有人都朝著相似的目標邁進。展望未來
本文寫于2019年第四季度,反映了平臺的當前狀態。加密貨幣是一個快節奏的領域,因此涉及這些平臺的人們始終在努力進行改進,這可能會改變生態系統的前景。以太坊正在開發主要的以太坊2.0版本,其第0階段計劃于2020年第一季度上線。以太坊2.0旨在通過轉移到權益證明,實施分片和其他改進來解決以太坊1.x的性能問題。ETH2.0的完整路線圖尚未確定,可能要花費數年時間才能推出。但是,如果此重大更新能夠實現其目標,則可以為以太坊提供強有力的支持。比特幣中的智能合約研究致力于進一步提高智能合約的效率和隱私性,這包括Taproot和無腳本腳本之類的解決方案。而比特幣現金則繼續致力于啟用其他智能合約功能,并致力于使這些更改更易于訪問。
文|冰棒編輯|小湃出品|PANews這個春節,我們沒有太多的歡快場景,更多的是源起武漢的新型冠狀病疫情對我們的考驗,前線的“戰疫”情況時刻牽動著全國14億同胞的內心.
1900/1/1 0:00:00本周大事記 上周,有關Voice是否將在EOS主網上運行一事再度引起爭議。外媒Coindesk報道稱,社交網絡Voice將不會在EOS上啟動.
1900/1/1 0:00:00Odaily星球日報出品作者|王也編輯|郝方舟 明星項目進展 Zcash社區決定打破210萬ZEC獎勵規定,將繼續資助ZEC的開發根據Zcash基金會近日宣布最新的投票結果.
1900/1/1 0:00:00V神回應ETH將從PoW轉PoS:ETC是希望繼續使用PoW區塊鏈的開發人員的自然選擇:對于ETH將從PoW轉向PoS共識算法,V神(Vitalik Buterin)在采訪中表示.
1900/1/1 0:00:00Animoca首席商務官:Open Campus沒有以TinyTap的名義發幣是希望以全年齡段教育服務的形象問世:4月26日消息.
1900/1/1 0:00:002月6號開始,全國范圍內將開始了一場大范圍降雪,天降祥瑞,但愿這場瘟疫能夠快快褪去,瘟疫過后希望一切憂傷都能得到安慰,所有逝去都能得到紀念.
1900/1/1 0:00:00