比特股交易所bitshares-ui簡(jiǎn)析

比特股交易所纲熏,一個(gè)開源的去中心化的交易所尘吗,聽起來(lái)就給人感覺很有前景,這幾天我查看了bitshares-ui里面的部分代碼兢孝,有一些收獲窿凤。在GitHub上面下載下來(lái)這個(gè)項(xiàng)目,然后安裝到自己的本地或者安裝到虛擬機(jī)上面跨蟹,安裝方法可以參考編譯比特股網(wǎng)頁(yè)錢包這篇文章雳殊,安裝之后,項(xiàng)目就會(huì)自動(dòng)的把一些依賴和中間件下載下來(lái)安裝好窗轩,這樣就方便自己閱讀代碼夯秃。

1、整體概覽

bitshares-ui這個(gè)項(xiàng)目是用react.js框架完成的前端頁(yè)面編寫痢艺,如果你對(duì)react一點(diǎn)也不知道也不必慌張仓洼,只要去了解下react.js 的基礎(chǔ)就可以了,畢竟只是看其中的一些代碼堤舒。采用了webpack來(lái)打包所有的模塊色建,所以你也得知道一些關(guān)于webpack的知識(shí)。還有一些plugin舌缤、loader等等組建箕戳。

2某残、簡(jiǎn)析項(xiàng)目目錄結(jié)構(gòu)

截圖

主要的組成部分,在app目錄里面我們可以看到陵吸,里面基本都是一些jsx玻墅、js代碼,所以里面都是一些項(xiàng)目的邏輯組成部分壮虫,在resources目錄里面澳厢,主要是生成桌面應(yīng)用的一些代碼。然后server.js是入口文件旨指,在npm start 之后就會(huì)啟動(dòng)這個(gè)代碼赏酥。啟動(dòng)之后,訪問(wèn)localhost:8080端口就可以看到網(wǎng)頁(yè)谆构。

app.use("*", function(req, res, next) {
    var filename = path.join(compiler.outputPath, "index.html");
    compiler.outputFileSystem.readFile(filename, function(err, result) {
        if (err) {
            return next(err);
        }
        res.set("content-type", "text/html");
        res.send(result);
        res.end();
    });
});

在server.js 的代碼中裸扶,我們可以看出,訪問(wèn)網(wǎng)站的時(shí)候搬素,會(huì)被網(wǎng)站帶到app/assets/index.html的目錄下面,但是在這個(gè)下面沒有這個(gè)文件呵晨,通過(guò)插件從相同目錄下index.hbs 模版生成的index.html,然后由react.js 生成的組件去豐富這個(gè)網(wǎng)頁(yè)熬尺,以及一些路由去解析一些請(qǐng)求路徑摸屠。

3、前端頁(yè)面簡(jiǎn)析

通過(guò)前面的分析粱哼,我們可以很快的看出季二,主要的邏輯以及頁(yè)面就在app這個(gè)目錄下面,所以我們就直接指向這個(gè)目錄揭措,在webpack.config.js中我們發(fā)現(xiàn)入口文件是Main.js胯舷,跟著Main.js 就找到了AppInit.jsx 這個(gè)文件,AppInit.jsx中導(dǎo)入了app.jsx绊含,在app.jsx中會(huì)看到很多的路由以及組件桑嘶,基本都來(lái)自于component這個(gè)文件夾里面。一開始躬充,我一直不明白Translate是什么逃顶,在npm官網(wǎng)上面看到了它的解釋,React的一個(gè)組件,它利用Counterpart模塊Interpolate組件來(lái)提供多語(yǔ)言/本地化的文本內(nèi)容充甚。它允許切換區(qū)域設(shè)置而無(wú)需重新加載頁(yè)面以政。說(shuō)白了就是一個(gè)改變語(yǔ)言還不需要從新加載的一個(gè)組件。

接下來(lái)伴找,在app.jsx中找一個(gè)組件妙蔗,跟著這個(gè)組件去了解項(xiàng)目組成,在這個(gè)項(xiàng)目中有許多的中間件疆瑰,第一次接觸可能還是有點(diǎn)措手不及眉反,中間件的功能應(yīng)該去看看。由于頁(yè)面比較多穆役,我們選擇Explorer這個(gè)組件來(lái)看看寸五,那么就從app.jsx這個(gè)文件跳轉(zhuǎn)到了./components/Explorer/Explorer這個(gè)文件里面,看起來(lái)還是很簡(jiǎn)潔耿币,這都是得益于react模塊化的好處梳杏。在這個(gè)文件里面,主要就是一些關(guān)于localhost:8080/explorer(如果你安裝了這個(gè)項(xiàng)目)的一些頁(yè)面


png

./components/Explorer/Explorer這個(gè)代碼對(duì)應(yīng)著這個(gè)頁(yè)面可以看到在"瀏覽"這個(gè)大的板塊下面淹接,還有區(qū)塊鏈十性、資產(chǎn)、賬戶塑悼、見證人等等7個(gè)子板塊劲适。那么在代碼里面也可以看到這7個(gè)子模塊對(duì)應(yīng)的代碼

class Explorer extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            tabs: [
                {
                    name: "blocks",
                    link: "/explorer/blocks",
                    translate: "explorer.blocks.title",
                    content: BlocksContainer
                },
                {
                    name: "assets",
                    link: "/explorer/assets",
                    translate: "explorer.assets.title",
                    content: AssetsContainer
                },
                {
                    name: "accounts",
                    link: "/explorer/accounts",
                    translate: "explorer.accounts.title",
                    content: AccountsContainer
                },
                {
                    name: "witnesses",
                    link: "/explorer/witnesses",
                    translate: "explorer.witnesses.title",
                    content: Witnesses
                },
                {
                    name: "committee_members",
                    link: "/explorer/committee-members",
                    translate: "explorer.committee_members.title",
                    content: CommitteeMembers
                },
                {
                    name: "markets",
                    link: "/explorer/markets",
                    translate: "markets.title",
                    content: MarketsContainer
                },
                {
                    name: "fees",
                    link: "/explorer/fees",
                    translate: "fees.title",
                    content: FeesContainer
                }
            ]
        };
    }

對(duì)應(yīng)的“l(fā)ink”鏈接就對(duì)應(yīng)不同的子模塊。具體的代碼讀者可以自己去項(xiàng)目中查看厢蒜。查看了前端頁(yè)面的構(gòu)成霞势,我們?cè)賮?lái)分析下后端的代碼。

4斑鸦、API簡(jiǎn)析

在比特股的項(xiàng)目中愕贡,有很多的API,有很大一部分都是基于bitsharesjs這個(gè)比特股的node.js 中間件以及它的一些衍生中間件如bitsharesjs-ws巷屿。實(shí)現(xiàn)創(chuàng)建交易固以,簽名等等這些基本功能。在app目錄下面的API目錄下嘱巾,查看applicationapi可以看出憨琳,這是一個(gè)創(chuàng)建賬戶、交易浓冒、worker的一個(gè)集合API栽渴,很多js文件都引用了這個(gè)js文件。在API目錄下面的js文件其實(shí)就是對(duì)一些特有功能的封裝稳懒,然后在其他的js文件中被調(diào)用闲擦。
再看看action目錄下面,基本上都是以···action.js結(jié)尾的js文件场梆,action顧名思義開始的意思墅冷,在accountActions.js中也是集成了一些功能,搜索或油、添加寞忿、移除、更新賬戶等等功能

accountSearch(start_symbol, limit = 50) {
        let uid = `${start_symbol}_${limit}}`;
        return dispatch => {
            if (!accountSearch[uid]) {
                accountSearch[uid] = true;
                return AccountApi.lookupAccounts(start_symbol, limit).then(
                    result => {
                        accountSearch[uid] = false;
                        dispatch({accounts: result, searchTerm: start_symbol});
                    }
                );
            }
        };
    }
    setCurrentAccount(name) {
        return name;
    }
//部分代碼

5顶岸、 總結(jié)

在比特股開源交易所這個(gè)項(xiàng)目腔彰,梳理一下大致的結(jié)構(gòu)叫编。打開這個(gè)項(xiàng)目,個(gè)人習(xí)慣首先去看package.json 這個(gè)目錄霹抛,從中可以看到script這個(gè)項(xiàng)下面的start搓逾,從這里我們可以知道這個(gè)項(xiàng)目的開始是從哪里開始的

"start": "cross-env NODE_ENV=development node server.js"

一開始啟動(dòng)server.js,然后這個(gè)進(jìn)程就會(huì)去監(jiān)聽8080或者8085(https)端口,在server.js中可以看到不管訪問(wèn)什么地址杯拐,都會(huì)被導(dǎo)到這里

app.use("*", function(req, res, next) {
    var filename = path.join(compiler.outputPath, "index.html");
    compiler.outputFileSystem.readFile(filename, function(err, result) {
        if (err) {
            return next(err);
        }
        res.set("content-type", "text/html");
        res.send(result);
        res.end();
    });
});

通過(guò)這里就可以去找到對(duì)應(yīng)的數(shù)據(jù)霞篡,通過(guò)返回的數(shù)據(jù)構(gòu)建出頁(yè)面。整個(gè)的目錄的結(jié)構(gòu)比較清晰端逼,主要的邏輯以及交互代碼都在app這個(gè)目錄下面朗兵,在app 這個(gè)目錄下面有一個(gè)app.jsx 這是整個(gè)項(xiàng)目的核心,在這個(gè)文件里面導(dǎo)入了許多外部的組件顶滩。在app目錄下component文件夾也是重點(diǎn)要關(guān)注的東西余掖。這個(gè)目錄包含了許多的.jsx文件,里面都是react的模塊用于構(gòu)建整個(gè)前端頁(yè)面诲祸。

在項(xiàng)目中有比較多的中間件浊吏,如果都去了解它們的基本功能,那么這會(huì)耗費(fèi)巨大的時(shí)間救氯,所以我在看了這個(gè)項(xiàng)目之后發(fā)現(xiàn)需要去了解bitsharesjs中間件以及它的衍生中間件找田。
需要熟練的掌握react.js,不然很多的東西都看不明白着憨,就會(huì)形成只知其表不知其里的尷尬局面墩衙。

個(gè)人認(rèn)為像類似于比特股這樣的一個(gè)開源的去中心化的交易所才是交易所的未來(lái),區(qū)塊鏈給我們帶來(lái)了去中心化和開源甲抖,但是很多的數(shù)字貨幣交易所確是中心化的閉源的漆改,這不符合區(qū)塊鏈的精神,很容易成為一些少數(shù)人玩的東西准谚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挫剑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柱衔,更是在濱河造成了極大的恐慌樊破,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唆铐,死亡現(xiàn)場(chǎng)離奇詭異哲戚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艾岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門楔壤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刑桑,“玉大人仰猖,你說(shuō)我怎么就攤上這事∩骺牛” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粒没,道長(zhǎng),這世上最難降的妖魔是什么簇爆? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮爽撒,結(jié)果婚禮上入蛆,老公的妹妹穿的比我還像新娘。我一直安慰自己硕勿,他們只是感情好哨毁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著源武,像睡著了一般扼褪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粱栖,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天话浇,我揣著相機(jī)與錄音,去河邊找鬼闹究。 笑死幔崖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的渣淤。 我是一名探鬼主播赏寇,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼价认!你這毒婦竟也來(lái)了嗅定?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤用踩,失蹤者是張志新(化名)和其女友劉穎渠退,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捶箱,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡智什,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丁屎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荠锭。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晨川,靈堂內(nèi)的尸體忽然破棺而出证九,到底是詐尸還是另有隱情删豺,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布愧怜,位于F島的核電站呀页,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拥坛。R本人自食惡果不足惜蓬蝶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜惋。 院中可真熱鬧丸氛,春花似錦、人聲如沸著摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谍咆。三九已至禾锤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摹察,已是汗流浹背恩掷。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留港粱,地道東北人螃成。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像查坪,于是被迫代替她去往敵國(guó)和親寸宏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,781評(píng)論 25 707
  • 1偿曙、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,969評(píng)論 3 119
  • 雪花獨(dú)自飛舞了一夜 黑暗中 看不見冰清玉潔 茅屋低矮 鳥兒撲楞楞飛散了 辯論氮凝,毫無(wú)疑義 霞光點(diǎn)亮雙眸 那紅紅的冰糖...
    曦華閱讀 48評(píng)論 0 0
  • 敬畏—進(jìn)入—體驗(yàn)—交給—持續(xù) 1,缺啥補(bǔ)啥,怕啥練啥望忆; 2,一切為我所用罩阵,所用為團(tuán)隊(duì)家; 3启摄,我想變稿壁,我要變,我...
    GL_212a閱讀 254評(píng)論 0 0
  • 后來(lái),我認(rèn)識(shí)無(wú)數(shù)比你更可愛的女孩 文/迎春花阿班 偶然看到朋友前女友的照片,他前女友曾是我同學(xué)喧笔。在他們故事里帽驯,我們...
    迎春花阿班閱讀 937評(píng)論 13 12