虛擬機(jī)GearSV將為比特幣提供無(wú)限的CPU和內(nèi)存
多虧了unwriter的Neon Planaria和Bitbus庫(kù),比特幣開發(fā)者現(xiàn)在有了一種簡(jiǎn)單的方法來(lái)將離線應(yīng)用狀態(tài)和挖掘節(jié)點(diǎn)同步。我們不僅可以根據(jù)塊的高度進(jìn)行排序,而且還可以對(duì)交易進(jìn)行塊內(nèi)索引! 這就是我們?cè)诒忍貛胖辖⑼耆珗D靈完整應(yīng)用所需要的。
Planaria安全模型
1. 一致性/可用性:所有運(yùn)行應(yīng)用程序代碼的服務(wù)器都可能在一段任意的時(shí)間內(nèi)停止運(yùn)行,但稍后仍然可以通過從最后看到的塊中進(jìn)行抓取來(lái)恢復(fù)。這意味著應(yīng)用程序提供者可以優(yōu)雅地退出并重新聯(lián)機(jī),而不存在一致性風(fēng)險(xiǎn)??捎眯匀Q于為用戶提供應(yīng)用程序的經(jīng)濟(jì)動(dòng)機(jī)。
2. 驗(yàn)證:任何人都可以啟動(dòng)應(yīng)用服務(wù)器并驗(yàn)證當(dāng)前狀態(tài)。驗(yàn)證器首先獲取應(yīng)用程序代碼,然后從第一個(gè)塊中抓取應(yīng)用程序,直到當(dāng)前塊的高度。這是一個(gè)線性時(shí)間驗(yàn)證方案,等價(jià)于在核心網(wǎng)絡(luò)上挖掘節(jié)點(diǎn),但是只有一個(gè)應(yīng)用程序子集處于區(qū)塊鏈狀態(tài)。
3.法律:如果API提供者使用錯(cuò)誤的合約狀態(tài)進(jìn)行欺騙,那么捕獲它們并在必要時(shí)在法庭上提供證據(jù)就變得非常簡(jiǎn)單。因?yàn)樗械臇|西都來(lái)自于鏈上的磁帶,所以沒有辦法“做假賬”而不受懲罰。
CPU /內(nèi)存插件
目前基于Planaria的應(yīng)用程序,如twetch和bicomedia,本質(zhì)上是比特幣的硬盤擴(kuò)展。這類應(yīng)用程序能夠從op return事件中刮取數(shù)據(jù)庫(kù)或文件系統(tǒng)上的靜態(tài)內(nèi)容并為其提供服務(wù)。
如果可以使用與存儲(chǔ)應(yīng)用程序相同的屬性對(duì)數(shù)據(jù)進(jìn)行復(fù)雜的驗(yàn)證和任意操作,情況會(huì)怎樣?
虛擬機(jī)
虛擬機(jī)抽象在底層硬件上,允許計(jì)算在各種CPU架構(gòu)上統(tǒng)一運(yùn)行。這對(duì)于需要在許多不同機(jī)器上長(zhǎng)時(shí)間運(yùn)行的智能合約非常有用。你永遠(yuǎn)不會(huì)知道,ARM服務(wù)器可能會(huì)在5年內(nèi)成為必備品!
使用Web匯編虛擬機(jī),我們可以將c++或Rust代碼編譯為WASM字節(jié)碼。然后為底層方法生成ABI和Javascript接口。
合約
您可以編寫基于狀態(tài)類的程序,就像可靠合約的對(duì)應(yīng)程序一樣。這是一個(gè)ERC20ish端口的頭文件:
1. 編譯合約以生成字節(jié)碼和ABI。
我們可以利用諸如Emscripten之類的Web組裝工具來(lái)自動(dòng)編譯和生成c++契約代碼的Javascript接口。類似的工具也可用于Rust.。
2. 在on chain op_return中部署合約字節(jié)碼。
與其他智能契合約平臺(tái)類似,通過將字節(jié)碼存儲(chǔ)在op_return輸出的鏈上部署合約。合約標(biāo)識(shí)符由使用b://協(xié)議的交易哈希值確定。
OP_RETURN
19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut
[wasm_bytecode]
wasm
Binary
Token.cpp
寫入
所有寫入操作都是使用更高級(jí)的語(yǔ)義(指定op return中的約定、方法和輸入?yún)?shù))對(duì)鏈?zhǔn)浇灰走M(jìn)行的。Planaria節(jié)點(diǎn)會(huì)刮掉事件日志,并在方法調(diào)用鏈上出現(xiàn)時(shí)簡(jiǎn)單地按順序運(yùn)行它們。
OP_RETURN
[deploy_transaction_hash]
[method_id]
[params_array]
json
UTF-8
可擴(kuò)展性
開發(fā)人員可以很容易地使用云平臺(tái)上可用的普通硬件或虛擬cpu。
對(duì)于純粹基于WASM的合約,限制因素是內(nèi)存。對(duì)于使用帶有34字節(jié)地址的c++ std::map到32字節(jié)無(wú)符號(hào)整型的代幣合約,我們可以在16gb的機(jī)器上實(shí)現(xiàn)大約2億的余額。為了克服內(nèi)存限制,我們可以將Web Assembly MemFS掛載到底層操作系統(tǒng),并開始使用硬盤驅(qū)動(dòng)器!
不像以太坊這樣的平臺(tái),所有的合約都由一個(gè)VM運(yùn)行,比特幣智能合約已經(jīng)完全分割為每個(gè)合約一個(gè)VM。實(shí)際上,您可以在每個(gè)合約上運(yùn)行無(wú)限數(shù)量的VM,從而繼續(xù)提高最終用戶的可用性。
結(jié)論
你不僅可以為比特幣編寫智能合約,因?yàn)檫@樣做更容易擴(kuò)展。
已證明的用于合約的第一個(gè)用例是代幣。嚴(yán)格的op_return框架(比如代幣化的op_return框架)似乎過于死板,不適合代幣提供的各種用例。通過程序的靈活性,您可以指定歸屬時(shí)間表、荷蘭式拍賣、檢查批準(zhǔn)等等。