asch使用的是不一樣於以太坊和比特幣的側鏈架構,dapp是運行在側鏈上的,每套側鏈對應一個dapp。javascript
側鏈的獨立性
側鏈架構的好處是代碼和數據獨立,不增長主鏈的負擔,避免數據過分膨脹,其實是一種自然的分片機制。 側鏈有獨立的區塊鏈,有獨立的受託人或者說見證人,同時也有獨立的節點網絡,就是說一個側鏈產生的區塊只會在全部安裝了該側鏈的節點之間進行廣播。
獨立性既是優勢,也是缺點。開發者完成了dapp的開發工做以後,還要考慮運維,也就是說要尋找足夠的節點來運行它,不然難以維持足夠的安全性。 從這一點來看,與以太坊相比,是缺陷,以太坊上一旦發佈一個dapp,全部的節點均可覺得它工做,併爲它提供安全保障。java
側鏈的靈活性
可是側鏈架構依然有存在的必要性,由於並不是全部的應用都須要那麼高的安全性。Asch給用戶提供了一種能夠選擇的靈活性。 比方說,假設asch有1000個節點,那麼其中有的dapp比較重要,須要500個節點來運行它,有的dapp不那麼重要,可能只須要100個節點,這徹底是由用戶和開發者決定的。 在以太坊上,則只能選擇一種,即所有節點都來運行它。聽說以太坊也打算實現一種分片的機制,實際上這在asch系統中是一個早就解決了的問題。 另外,對於比較重要的、安全性要求較高的應用,咱們依然能夠選擇在主鏈上開發,可是不可能對全部開發者開放這種權力,仍是爲了不主鏈的膨脹和不可控(DAO事件)。
側鏈的靈活性還表如今,全部的區塊鏈參數是能夠定製的,簡單的好比區塊間隔、區塊獎勵、交易費的去向等,高級用戶還能夠修改共識算法。 不過最重要的仍是業務邏輯,側鏈上能夠輕易的開發出與你的業務相關的交易類型或者智能合約。 這一點是與側鏈的發明者blockstreams不一樣,blockstreams的側鏈,只是一個不一樣的貨幣系統而已,開發新型交易和智能合約很不容易。
以下圖所示 黑色的圓圈表明一個節點,64個節點組成了主鏈的網絡。紅色方框以內的是1號側鏈,其側鏈網絡是由12個節點組成。藍色方框以內的是2號側鏈,其網絡是由36個節點組成。node
主鏈與側鏈的互利關係
Asch的主鏈與側鏈之間是互惠互利的關係,asch爲側鏈提供基礎設施,好比數據庫寫入的api,網絡通信api,加密api等等,側鏈則能夠爲asch補充更多的節點,以壯大整個系統。 側鏈的開發者不須要提供全部的機器,能夠利用已經存在主鏈節點,只須要節點主人安裝該應用便可。 另外,主鏈的代幣XAS能夠轉入側鏈中,因爲XAS能夠在交易所交易,就至關於爲側鏈的資產提供了一種價值的媒介。 開發者在側鏈發行一種資產後,能夠直接與XAS兌換,不須要考慮交易平臺的問題。
解決生產力問題
咱們在sdk中爲側鏈提供了一套模板,或者說腳手架,也能夠叫作開發框架,側鏈的大部分底層功能都是寫好的,dapp開發者只須要關心具體的業務邏輯,在這一點上,與以太坊的dapp開發難度至關。 Asch的側鏈框架使用的語言是nodejs,咱們內置了很多經常使用的庫讓開發者直接使用,固然開發者也能夠自行安裝所須要的,有一個龐大的javascript社區做爲後盾。
下面是asch內置的模塊 算法
解決安全問題
這裏的安全問題與上面提到的由於節點不足致使的問題不同,這裏說的安全問題是指側鏈代碼對安裝者形成侵犯的問題。 咱們但願每個asch節點都能安裝一個側鏈,並且asch節點的主人無需信任側鏈的開發者。這就須要提供一種安全防範的措施,好比,防止側鏈代碼讀取文件系統、進行網絡操做。 在asch系統中,側鏈代碼會以子進程的方式啓動,子進程首先加載一個使用沙箱機制隔離的javascript虛擬機,這個js虛擬機就是沒有require以及任何多餘模塊的裸體虛擬機。 而後咱們爲這個虛擬機植入一個定製的require和一些經常使用且安全的模塊, 最後再加載側鏈的代碼。 咱們還經過進程間通信的方式提供一系列的api。 這樣,側鏈的框架就擁有了足夠多的api,同時側鏈的安裝者也沒有任何風險。數據庫