Pi Network與智能合約
先說結論,如果你想的是跟以太坊一樣的DApp,Pi Network目前沒有這樣的功能。但目前沒有,不代表將來沒有。
智能合約
智能合約(Smart Contract)一詞是由學者Nick Szabo於1990年代初期提出,倡議可以將交易的條款透過電腦化來落實,只可惜當時沒有合適的環境來實現。
直到這幾年,智能合約才隨著區塊鏈(Blockchain)技術的興起,逐漸有了大展拳腳的舞台。2015年中推出的區塊鏈平台-以太坊 (Ethereum),其白皮書名為「新一代智能合約與分散式應用平台」(A Next-Generation Smart Contract and Decentralized Application Platform),強調智能合約為其平台特色,一舉將智能合約這個名詞推到一個新的層次,讓大家開始注意到智能合約的重要性,甚至視其為「區塊鏈 2.0」的主要技術與應用。
現今我們談論的智能合約跟區塊鏈是息息相關的,簡化一點甚至可以說,智能合約就是在區塊鏈平台上執行的程式。
智能合約是以應用程式的邏輯,來實現交易合約中的條款與條件;因此,不同的區塊鏈平台所提供的智能合約,多少會有些差異。但一般說來,智能合約的運作,多半是以「事件驅動」的方式進行;智能合約程式一旦部署到區塊鏈平台上後,當合約所設定的事件發生時,一些條件就會成立而觸發合約的指定功能,開始執行程式;執行的結果,通常就會引發資產的移轉。
另外,有些事件是發生在區塊鏈之外的,智能合約必須去跟這些外部系統要求相關資訊。例如我們可以開發一個防疫險的智能合約,只要通報確診,就能自動獲得理賠。這時智能合約就必須定期去跟衛福部的系統索取確診資料。我們稱這種具權威性的外部資料源為「神諭」(Oracle),安全又有效取得外部Oracle資料,是很多智能合約運行的一個重要依據。
DApp
DApp的全名是去中心化應用程式(Decentralized Application),相對於過往運行在中心化服務器的App,DApp的程式部署在分散式的網路上,所有的資料皆公開透明且不可篡改。
只要區塊鏈上開發的App都是DApp嗎?答案是否定的。2014年的一篇名為「去中心化應用程式的一般理論,DApps 」(The General Theory of Decentralized Applications, DApps) 的論文列出了DApp的主要標準。
https://github.com/DavidJohnstonCEO/DecentralizedApplications
根據該論文,去中心化應用程式必須滿足四個主要標準:
1. 它必須具有開源代碼,並且可以在不依賴集中式網路的情況下自主運行。用戶必須達成共識才能實現對應用程序代碼的更改。
2. 資料和操作記錄必須以加密方式存儲在公共、分散的區塊鏈中,而不是集中式服務器。
3. 使用應用程式必須花費加密代幣,並且質押者、礦工、農民的任何價值貢獻都應獲得代幣作為獎勵。
4. 依賴於工作量證明或權益證明等共識機制來生成代幣。
但是現在我們所知曉的DApp並不完全遵守這些標準,為了方便,我們可以簡化地說,以太坊上基於智能合約的應用程式就是DApp,也就是說智能合約可以用來串聯DApp與區塊鏈,當做它們兩者間的橋樑。
DApp和我們常使用的應用程式App類似,但App為中心化、DApp為去中心化程式。
l APP:前端介面 + 一個中心化的伺服器。
l Dapp:前端介面 + 去中心化的智能合約,因為放在區塊鏈上,不需要伺服器。
如何做到?
到目前為止的內容,在網路上都查的到,講得也大同小異,但卻省略了實作上的技術細節。大家是否想過,智能合約是怎麼存放在區塊鏈上的?沒有伺服器,又是在哪裡執行這些程式的?
細節可以參考這兩篇連結
https://medium.com/pelith/howethsmartcontractwork-328bd8b9bb62
https://medium.com/pelith/structure-of-ethereum-blockchain-35fd4849f609
我只提兩個重點:
1. 智慧合約的程式碼(嚴格來說是二進位碼)是放在交易的Input Data中,由節點(礦工)部署上鏈,生成「合約地址」。
2. 以太坊的節點可以運行EVM(Ethereum Virtual Machine,以太坊虛擬機器),當節點(礦工)執行交易時,就是由EVM執行合約程式碼。
所以如果拿這兩點來檢視Pi Network(或者Stellar),結果是什麼呢?
首先,Stellar不提供內建的智能合約語言或像以太坊這樣的虛擬機器來編寫智能合約代碼。但不表示Stellar沒有智能合約,讓我們回頭看看什麼是智能合約,它只是將彼此的交易條款與條件,表達成自動執行的程式碼,透過智能合約將兩造之間的資產移轉,變成可程式化的。
Stellar上的智能合約不是圖靈完備(Turing-complete),無法解決所有的可計算的問題,但它結合了交易和各種約束來提供預期的結果。
Stellar智能合約(Stellar Smart Contract, SSC)是通過不同的約束條件執行交易。這些約束條件包含:
l 多重簽名(Multisignature):授權特定操作需要哪些私鑰?多重簽名是需要各方賬戶來簽署交易的概念。
l 原子性/批次處理(Atomicity/Batching):所有操作必須同時發生或失敗?必須發生什麼才能迫使它失敗或通過?批次處理是在一個交易中涉及多個操作的概念。原子性確保給定的一系列操作在提交到網路後,如果一個操作失敗,則交易中的所有操作都會失敗。
l 順序(Sequence):應按什麼順序處理一系列交易?有哪些依賴和限制?比如有組二擇一的交易,利用序列號可以確保在提交其中一個交易時,不會執行另一個交易。
l 時間限制(Time Bounds):什麼時候可以執行交易?時間限制是對交易有效時間的限制。
舉例一種實作方法,我們需要三個帳戶,即來源帳戶(S)、目的帳戶(D)和託管帳戶(E),來執行兩方之間的時間鎖定託管合約。(S)建立(E),把適當數量的資產存入(E),並將(D)添加為(E)的簽名者,然後設定一些時間限制的約束條件。
更多關於以太坊智能合約與恆星智能合約的比較可參閱Espeo Blockchain blog
https://espeoblockchain.com/blog/ethereum-smart-contracts-vs-stellar-smart-contracts/
Soroban
SDF(Stellar Development Foundation)在2022年的規劃藍圖中,智能合約是一項重要的目標。名為「Jump Cannon」的專案在2022年8月發佈了預覽版的原生智能合約平台Soroban(台灣的Pi先鋒善逸也有參與)。同年10月,Soroban在Futurenet上線,提供開發人員測試環境,SDF還宣布了一項1億美元的基金,以支持在Soroban上進行開發的開發人員。預計在2023年上半年在Stellar主網上推出Soroban,正式將圖靈完備(Turing-complete)的智能合約引入Stellar網路。
Soroban是一個獨立的智能合約平台,根本不依賴也不需要Stellar,甚至可以被其他區塊鏈、L2s使用。Stellar通過提交InvokeContractOp操作來調用Soroban合約。雖然Soroban是發展中的新東西,但卻是建立在成熟的技術之上:WASM和Rust。
WASM(WebAssembly)是為在瀏覽器中運行沙盒應用程式而建立的程式碼規範。它被各種不同配置的鏈使用:Polkadot、Terra、Near、Elrond、Dfinity等。它最常使用Rust程式語言,但也支援其他語言,如C、C++。
從本質上講,WASM是一個運行在所有現代瀏覽器上的虛擬機器,由W3C建立與定義,專為網路而生。它具有EVM的所有功能,並且速度快、效率高、可移植。通過使用WASM,我們可以在瀏覽器中使用任何程式語言開發的應用程式,開發人員也不必直接編寫WASM代碼,而是把其他語言編寫的程式編譯成WASM。
有趣的是,以太坊社區早在2015年就一直在倡導在以太坊中使用WASM,以太坊基金會還開發了eWASM。
而Rust是由Mozilla主導開發的通用、編譯型程式語言。設計準則為「安全、並行、實用」,支援函數式、並行式、程序式以及物件導向的程式設計風格。它雖然由Mozilla資助,但其實是一個共有專案,有很大部分的程式碼是來自於社群的貢獻者。
Rust的設計目標之一,是要使設計大型的網際網路客戶端和伺服器的任務變得更容易。因此更加強調安全性、記憶體組態、以及並行處理等方面的特性。在效能上,具有額外安全保證的代碼會比C++慢一些,否則兩者效能上是相似的。
選擇Rust還意味著我們可以在智能合約及其宿主環境之間共享程式碼(在Stellar的情況下,這是指stellar-core),SDF正在這樣做!
至於將來的發展會怎麼走?Pi Network會不會也採用Soroban?還是另外發展自己的智能合約?就靠全體的先鋒一起努力了。
補充觀點
關於DApp也有人持不同的見解,定義廣義來說只要使用去中心化系統即為DApp。以下補充CT及先鋒善逸的見解:
CT:世界上沒有一個DApp是真正去中心化,目前認同的DApp都是有使用到去中心化系統的。
Kai:我這邊假設常常有的系統會擁有資料庫/儲存系統/雲端運算/網域/雲端託管…目前很多都是只有其中之一為去中心化系統。Soroban目前還有很多限制,很多開發者也在測試目前現有的功能,未來功能也會慢慢新增。Soroban的宗旨和Stellar一樣,必須是讓開發者容易使用並且保留快速的效率,這也是為什麼當初選擇WASM和Rust考慮重點之一。