你好,我是不羈,一名程序員,帶你玩轉(zhuǎn)EOS智能合約開發(fā)。如果你對(duì)EOS智能合約感興趣,歡迎關(guān)注我的專欄。
簡(jiǎn)介:這幾天Fibos火了,于是我忍不住了看了下這個(gè)項(xiàng)目,于是就有了本文,跟大家分享一下我對(duì)這個(gè)項(xiàng)目的一些小看法。
Fibos想解決什么問題
其實(shí)Fibos的解決的痛點(diǎn)是針對(duì)于EOS開發(fā)智能合約難的問題而提出來的。EOS智能合約采用C++開發(fā),C++語言相對(duì)來說是一門比較難掌握的語言。
于是Fibos想給EOS加上javascript的支持,希望能讓javascript的開發(fā)者也能開發(fā)智能合約。
初看的時(shí)候,我以為fibos給EOS提供了一個(gè)可以把javascript轉(zhuǎn)化為wasm的支持工具,能讓開發(fā)者使用javascript開發(fā)出可以部署在EOS上面的智能合約。然而,細(xì)看之后,發(fā)現(xiàn)Fibos自己是一個(gè)獨(dú)立的鏈。
Fibos提供的解決方案
為了能實(shí)現(xiàn)開發(fā)者能用javascript開發(fā)智能合約,同時(shí)擁有EOS的能力,F(xiàn)ibos選擇對(duì)EOS進(jìn)行代碼分叉(荊凱有篇文章介紹了什么是代碼分叉),就是說,F(xiàn)ibos在EOS的代碼基礎(chǔ)上,引入了javascript的一個(gè)運(yùn)行時(shí)環(huán)境(具體采用的是fibjs,類似于node),然后它在EOS和fibjs之間,做了一個(gè)javascript調(diào)用C接口的中間層。這部分正是Fibos所做的主要工作,上層的EOS和上層的fibjs都是別的項(xiàng)目。
Fibos的壁壘
Fibos項(xiàng)目,在技術(shù)上,主要是實(shí)現(xiàn)一個(gè)javascript和C互操作的中間層,這部分確實(shí)有一定的技術(shù)壁壘,需要一定的技術(shù)功底,但并沒有太大的難度。
我很好奇Fibos為什么為使用不出名的fibjs作為javascript的runtime,于是我翻了下github,這才發(fā)現(xiàn),原來Fibos的創(chuàng)始人響馬是fibjs的主力開發(fā)。這就難怪會(huì)使用fibjs了。
另外一個(gè)壁壘,可能是文檔了和營(yíng)銷了;是的,你沒看錯(cuò),文檔和營(yíng)銷,這兩點(diǎn)Fibos確實(shí)做的不錯(cuò),雖然說這個(gè)壁壘也不搞,很多人都會(huì),但很少有項(xiàng)目把文檔和營(yíng)銷都做的好不錯(cuò)的。那些空氣項(xiàng)目,經(jīng)常是只有營(yíng)銷沒有文檔的。
Fibos上的bancor算法
其實(shí)我挺納悶的,為什么好多宣傳Fibos的文案都重點(diǎn)提這個(gè)bancor算法,這就是根據(jù)余額調(diào)整兌換比例的算法嗎?如此簡(jiǎn)單的一個(gè)東西,值得大肆渲染嗎?
細(xì)想一下,其實(shí)也不難理解,大部分人都是不懂技術(shù)的。EOS的RAM大漲大跌讓bancor
算法出了名,雖然很多人不知道這是個(gè)什么東東,但一想到bancor
就很容易和EOS Ram的市場(chǎng)行情聯(lián)系在一起了,就很容易把散戶們引來了。也就是說,大肆渲染 bancor是Fibos營(yíng)銷的手段。
為什么不渲染 javascript的運(yùn)行時(shí)環(huán)境和EOS的結(jié)合呢?其實(shí),這個(gè)真沒什么好宣傳的,不懂技術(shù)的人看不懂這是個(gè)什么鬼;而技術(shù)大牛又很可能會(huì)嗤之以鼻。所以,與其宣揚(yáng)技術(shù)本身,不如宣揚(yáng)它可以讓javascript開發(fā)者開發(fā)智能合約這個(gè)點(diǎn);也確實(shí),如果不是很資深的開發(fā)者,可能會(huì)覺得javascript運(yùn)行時(shí)很神秘,這個(gè)點(diǎn)說不定可以吸引一部分javascript開發(fā)者。
為了讓javascript和EOS結(jié)合,F(xiàn)ibos是最佳方案嗎
我個(gè)人比較反感為了一點(diǎn)小功能就搞代碼分叉的行為。所以我對(duì)Fibos的方案是有一點(diǎn)抵觸的,當(dāng)然我仍希望它能活的好。
Fibos的方案,雖然可以用javascript寫智能合約了,但卻只能部署在Fibos上,不能給EOS社區(qū)帶來任何益處。
其實(shí),如果目標(biāo)只是單純想用javascript寫EOS上的智能合約,沒有必要搞一個(gè)代碼分叉出來,只需要提供一套工具鏈,實(shí)現(xiàn)javascript到wasm的轉(zhuǎn)換就可以了。其實(shí)這部分工作國(guó)外已經(jīng)有解決方案了,正在實(shí)驗(yàn)階段了,比如assemblyscript,這是個(gè)可以把TypeScript
代碼轉(zhuǎn)換為wasm的工具,而TypeScript正是javascript的超集。
BM當(dāng)初選擇webassemly而沒有選擇javascript,其實(shí)是有諸多好處的,比如:
- 性能
- 通用性,可以把其他的語言轉(zhuǎn)換為wasm,只要能轉(zhuǎn)換為wasm的語言都可以寫智能合約
- 安全性,webassembly提供一個(gè)智能合約的安全運(yùn)行時(shí)環(huán)境,即便某個(gè)智能合約有內(nèi)存泄漏的問題,也不會(huì)影響到其他智能合約。
當(dāng)然第3條,javascript也能滿足;第1條,javascript勉強(qiáng)滿足,但比wasm還是差不少;第二條,javascript就很難勝任了,其實(shí)也是有工具可以把C轉(zhuǎn)化為javascript的了,但其運(yùn)行的性能真的是比wasm差了太多。
Fibos的未來
綜合上面的分析,我個(gè)人對(duì)Fibos持謹(jǐn)慎觀望態(tài)度,未來幾個(gè)月內(nèi)不會(huì)參與,看后期開發(fā)者的情況。
不管怎么說,畢竟是中國(guó)人,而且是程序員發(fā)起的項(xiàng)目,希望Fibos能好。