正如我們在《Web3堆棧》一文中所強(qiáng)調(diào)的,Web3中相當(dāng)一部分的前端開發(fā)是用Web2.0開發(fā)者非常熟悉的JavaScript技術(shù)完成的。這意味著全球約有1600萬JavaScript開發(fā)者有很多機(jī)會參與到網(wǎng)絡(luò)下一階段的建設(shè)中。現(xiàn)在,Agoric,一個第一層堆棧證明區(qū)塊鏈,正在做一個大賭注,即JavaScript也可以用于智能合約,這是分散信任的基礎(chǔ),是Web3去中心化應(yīng)用開發(fā)的核心。到目前為止,智能合約主要是使用Solidity或Rust等語言進(jìn)行編程。
什么是智能合約?
智能合約比區(qū)塊鏈早了幾十年,盡管它們已經(jīng)成為區(qū)塊鏈和Web3技術(shù)的同義詞。正如Agoric的Dean Tribble在接受The New Stack采訪時所說:"核心是智能合約是執(zhí)行安排條款的軟件,就像第三方之間的法律合同"。
一些熟悉的例子可能是像Uber使用軟件把你和一個未知的司機(jī)聯(lián)系起來,這個司機(jī)同意把你帶到一個預(yù)先選擇的目的地,這是一種智能合約。該交易需要一個可信的中介,在這種情況下,一個集中的軟件公司有特權(quán)訪問信息,比如你的信用卡和支付位置,以及司機(jī)的可用性。該軟件連接雙方,給你搭車,替司機(jī)收費(fèi)。
"區(qū)塊鏈帶來了復(fù)制的執(zhí)行,"特里布爾說,"在這里,你有多個管轄區(qū)和行政領(lǐng)域的機(jī)器,投票同意下一步計劃。這種跨管轄區(qū)的共識意味著沒有任何組織或政府可以破壞執(zhí)行的完整性。"
這會導(dǎo)致像金融交易的發(fā)生,比起位于同一城鎮(zhèn)的司機(jī)和騎手,這是在更復(fù)雜的信任中跨越國界。Agoric的目標(biāo)是使商業(yè)世界的大部分都能在這種環(huán)境下工作,這意味著它需要由幾千名以上的開發(fā)人員來編程。因此,沒有什么比一門1600萬開發(fā)人員都能理解的語言更好的了,這可以讓開發(fā)者使用熟悉的開發(fā)環(huán)境。
現(xiàn)在,區(qū)塊鏈智能合約的編程僅限于知道如何使用Solidity(以太坊及其第二層側(cè)鏈的智能合約語言)或其他語言(如Solana上的Rust)編程的相對少數(shù)人。Agoric正在幫助JavaScript開發(fā)者快速越過實(shí)施智能合約的障礙,就像React讓人們更容易使用可重復(fù)使用的組件構(gòu)建JavaScript應(yīng)用程序一樣。
在智能合約中使用JavaScript的弊端
我向Tribble詢問了潛在的缺點(diǎn),他首先做了一個精辟的回答,說:“可能有缺點(diǎn),但這并不重要。Github做了一項分析,Github上的應(yīng)用程序中97%的代碼來自第三方庫。”
但他緊接著又聊了一些細(xì)節(jié)。
“具體的組件模型有很多缺點(diǎn),”他說,“你真的想要一種語言、框架和庫,將安全隱患降到最低,同時使其易于組合。React是一個很好的例子,因為該模型具有負(fù)擔(dān)能力,并解決了把東西插在一起的正確挑戰(zhàn)。在React之前有很多用戶體驗框架,但React把它做對了。我們的組件就像React組件,我們的框架支持使用我們的組件并與其他組件組成一個應(yīng)用程序。”
安全性探討
Agoric在他們的組件模型中使用加固的JavaScript來構(gòu)建可組合的智能合約,這限制了JavaScript運(yùn)行時可以做什么。
“加固的JavaScript允許你鎖定你的JavaScript,這樣它就不可能做你不希望它做的事情,”Tribble解釋說,“進(jìn)入一個程序的權(quán)限完全由該程序運(yùn)行的范圍控制。我們控制著范圍。你完全以我們提供的訪問和權(quán)限運(yùn)行,所以這樣我們得到了真正的限制執(zhí)行任意的JavaScript?!?/p>
Agoric對加固的JavaScript進(jìn)行了詳細(xì)的探討,其中包括這個圖片:
相比之下,Solidity編程模型有安全隱患,而且有重入性等問題。自從有了同步程序以來,重入性一直是同步編程模型的一個問題。當(dāng)一個程序在請求者得到初始請求完成的確認(rèn)之前,可以有效地多次向另一個程序重復(fù)同一請求時,就會出現(xiàn)這種情況。例如,這意味著你可以重復(fù)請求相同數(shù)量的ETH,并在你請求的程序有時間確認(rèn)你拿到錢之前不斷獲得更多ETH。Will Shahda在Medium上提供了一個很好的例子。
根據(jù)Tribble的說法,Agoric首席工程師Brian Warner在以太坊上線前的安全審查中指出了這些重入式攻擊的風(fēng)險。他也承認(rèn),這在當(dāng)時有可能是正確的權(quán)衡。轉(zhuǎn)向異步模式可以避免重入問題,但由于這是以太坊設(shè)計中的一個基本特征,這并不是可以解決的問題。
減少使用費(fèi)用
對以太坊最大的抱怨之一是與工作證明相關(guān)的碳排放費(fèi)用。這個問題的核心是希望增加以太坊網(wǎng)絡(luò)活動的人和希望增加費(fèi)用的礦工之間的根本錯位。正如Tribble所說:“礦工是貧民窟的房東,而以太坊是租戶。房東獲得更多錢的唯一方法是提高租金。”
除了作為第一層股權(quán)證明網(wǎng)絡(luò),Agoric正在研究解決這種經(jīng)濟(jì)上的不相容性,以使他們的區(qū)塊鏈網(wǎng)絡(luò)的優(yōu)先事項與經(jīng)濟(jì)運(yùn)作的動態(tài)相一致。因此,他們將他們的治理代幣BLD和他們的收費(fèi)代幣RUN分開,目的是讓RUN成為一個穩(wěn)定的代幣,不會波動。
Tribble這樣解釋其中的原因:“把汽油費(fèi)想象成你的房租或電費(fèi)。以太坊就像用蘋果公司的股票來支付你的租金。從商業(yè)規(guī)劃的角度來看,這不是很好。很難比較每個月的租金是上升還是下降。你想要的是用一個穩(wěn)定的代幣來支付汽油,這意味著它需要是鏈條的內(nèi)在因素,它不應(yīng)該進(jìn)入驗證者的口袋,所以沒有提高租金的動力?!?/p>
這就是RUN的作用?!霸趫?zhí)行中使用的RUN進(jìn)入貨幣儲備,為鏈提供穩(wěn)定性和執(zhí)行增長,”特里布說,“驗證人的所有費(fèi)用都來自于借入RUN的費(fèi)用,而不是支付執(zhí)行費(fèi)用。這意味著,隨著經(jīng)濟(jì)的增長,當(dāng)我給你發(fā)送更多的支票、當(dāng)我購買更多的NFT、當(dāng)我鎖定更多的代幣時,流通中的RUN數(shù)量會增加,一小部分會給BLD持有人用于抵押和委托。所以他們的回報隨著經(jīng)濟(jì)的增長而增長?!?/p>
JavaScript是智能合約的未來
Agoric是否能成功地為其可組合的JavaScript智能合約組件帶來大規(guī)模的采用,還有待觀察,但React無疑是建立一個基于組件的框架的成功模式。在一個可預(yù)測的成本控制結(jié)構(gòu)中分層,也將在幫助去中心化的應(yīng)用程序了解業(yè)務(wù)成本方面發(fā)揮作用。Agoric也在規(guī)劃互操作性,通過區(qū)塊鏈間通信協(xié)議和Chainlink甲骨文網(wǎng)絡(luò)的方式,使其能夠與以太坊和Cosmos連接。
看起來非常有意義的是,允許那些已經(jīng)有深厚經(jīng)驗的JavaScript開發(fā)人員,特別是在金融領(lǐng)域,利用這些知識和他們的背景來滿足金融合規(guī)準(zhǔn)則和安全標(biāo)準(zhǔn)。這部分開發(fā)者往往也有為數(shù)十萬用戶實(shí)施應(yīng)用程序的豐富經(jīng)驗,他們的技術(shù)水平參差不齊,因此將他們的用戶體驗知識與編寫智能合約的簡便方法相結(jié)合,可能是一個成功的組合。
關(guān)鍵詞: JavaScript是智能合約的未來嗎? javascript