您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“bytom DAPP緩沖服務(wù)器怎么啟動”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
從目前已經(jīng)發(fā)布的DAPP
來看,DAPP
架構(gòu)大致可以分成3種類型:插件錢包模式、全節(jié)點錢包模式和兼容模式。
插件錢包模式是借助封裝了錢包的瀏覽器插件通過RPC
協(xié)議與區(qū)塊鏈節(jié)點通信,插件在運行時會將Web3
框架注入到DAPP
前端頁面中,然后DApp
通過Web3
來與區(qū)塊鏈節(jié)點通信。
全節(jié)點錢包模式需要項目方同步并持有一個區(qū)塊鏈節(jié)點,并對外提供一個瀏覽器環(huán)境與用戶進行交互。
兼容模式可以在插件錢包和全節(jié)點錢包下同時使用,即上述兩種方式可以自由切換,安全性能相對較高。
比原鏈DAPP
的架構(gòu)模式跟賬戶模型DAPP
的插件錢包模式有些相似,都是由DAPP
前端、插件錢包和合約程序共同組成,其中插件錢包需要連接去中心化的區(qū)塊鏈服務(wù)器blockcenter
,該服務(wù)器主要是為了管理插件錢包的相關(guān)信息。此外,比原鏈?zhǔn)?code>UTXO模型的區(qū)塊鏈系統(tǒng),合約程序存在于無狀態(tài)的UTXO
中,如果要實現(xiàn)這樣一個具體的DAPP
,就需要在前端和后端多做一些邏輯的處理。
比原鏈的虛擬機是圖靈完備的,理論上可以實現(xiàn)任意圖靈計算機能實現(xiàn)的操作。而Equity
作為比原鏈的智能合約語言,使用Equity
語言可以實現(xiàn)許多典型的金融模型案例,但是為了解決停機問題,比原鏈也設(shè)置了手續(xù)費的上限,因此用戶在設(shè)計合約的時候做一下權(quán)衡。
合約模板結(jié)構(gòu)如下:
contract contract_name(...) locks valueAmount of valueAsset { clause clause_name(...) { ... lock/unlock ... } ... }
Equity
語法結(jié)構(gòu)簡單,語句意思明確,有開發(fā)經(jīng)驗的童鞋一看基本能明白合約的意思。編寫智能合約可以參考Equity
合約介紹,文檔中對Equity
語言的語法和編譯方法都做了詳細的介紹。此外,文檔還對一些典型的模板合約進行了介紹,開發(fā)者可以自己需求進行參考。
編譯合約目前支持兩種方式,一種是使用Equity
編譯工具,另一種是調(diào)用比原鏈中編譯合約的RPC
接口compile
; 而合約實例化是為了將合約腳本按照用戶設(shè)定的參數(shù)進行鎖定,編譯并實例化合約可以參考編譯并實例化合約的上半部分說明,該文檔不僅介紹了合約的參數(shù)構(gòu)造說明,還對編譯合約的步驟進行詳細說明。而編譯器以及相關(guān)工具位于Equity
編譯器中,是使用go
語言開發(fā)的,用戶可以下載源代碼并編譯使用。
工具編譯和實例化示例如下:
// compile ./equity [contract_name] --bin // instance ./equity [contract_name] --instance [arguments ...]
部署合約即發(fā)送合約交易,調(diào)用比原鏈的build-transaction
接口將指定數(shù)量的資產(chǎn)發(fā)送到合約program
中,只需將輸出output
中接收方control_program
設(shè)置為指定合約即可。用戶可以參考合約交易說明中的鎖定合約章節(jié),交易的構(gòu)造按照文檔中介紹進行參考即可。如果合約交易發(fā)送成功,并且交易已經(jīng)成功上鏈,便可以通過調(diào)用API
接口list-unspent-outputs
來查找該合約的UTXO
。
部署合約交易模板大致如下:
{ "actions": [ // inputs { // btm fee }, { amount, asset, spend_account // spend user asset }, // outputs { amount, asset, contract_program // receive contract program with instantiated result } ], ... }
Bytom的blockcenter
服務(wù)器是官方開發(fā)的去中心化插件錢包服務(wù)器,開發(fā)者可以按照相關(guān)API
接口來調(diào)用即可。比原鏈的DAPP
總體框架模型如下:
搭建DAPP
前端主要包含兩個方面:一個是前端與插件錢包的交互,另一個是前端的邏輯處理、以及與緩沖服務(wù)器的交互。插件錢包是與區(qū)塊鏈節(jié)點服務(wù)器通信的窗口,一個DAPP
為了跟區(qū)塊鏈節(jié)點進行通信,需要通過借助插件來與后臺服務(wù)器節(jié)點進行交互。比原的插件錢包除了與后臺服務(wù)器進行交互之外,還包含一些本地業(yè)務(wù)邏輯處理的接口API
,具體內(nèi)容可以參考一下DAPP開發(fā)者向?qū)?。由于比原鏈?zhǔn)腔?code>UTXO模型的區(qū)塊鏈系統(tǒng),交易是由多輸入和多輸出構(gòu)成的結(jié)構(gòu),并且交易輸入或輸出的位置也需要按照順序來排列,因此開發(fā)DAPP
需要前端處理一些構(gòu)建交易的邏輯。除此之外,合約中的lock-unlock
語句中涉及到數(shù)量的計算需要根據(jù)抽象語法樹來進行預(yù)計算,計算的結(jié)果將用于構(gòu)建交易,而verify
、if-else
等其他語句類型也需要進行相關(guān)的預(yù)校驗,從而防止用戶在執(zhí)行合約的時候報錯。
從功能層面來說,前端主要包含頁面的設(shè)計、插件的調(diào)用、合約交易邏輯的處理、緩沖服務(wù)器的交互等。接下來對這幾個重要的部分展開說明:
1)前端頁面的設(shè)計主要是網(wǎng)頁界面的設(shè)計,這個部分開發(fā)者可以自己選擇頁面模式
2)插件錢包已經(jīng)進行了結(jié)構(gòu)化的封裝,并且提供了外部接口給DAPP
開發(fā)者調(diào)用,開發(fā)者只需要將插件的參數(shù)按照規(guī)則進行填充,具體請參考DAPP開發(fā)者向?qū)?/p>
3)比原鏈的合約交易是多輸入多輸出的交易結(jié)構(gòu),前端需要進行一些預(yù)判斷邏輯的處理,然后再選擇合適的合約交易模板結(jié)構(gòu)。
4)DAPP的插件連接的是去中心化的bycoin
服務(wù)器,該服務(wù)器從比原節(jié)點服務(wù)器上同步的所有區(qū)塊信息和交易信息,該部分主要是在插件錢包層進行了高度的封裝,用戶只需按照接口調(diào)用即可。除此之外,需要開發(fā)者搭建一個緩沖服務(wù)器,不僅可以在管理合約UTXO
層面做一些性能方面的處理,而且還可以為DAPP
做一些數(shù)據(jù)存儲。開發(fā)者可以根據(jù)實際需求來開發(fā)一些RPC
請求接口,然后在前端頁面設(shè)置相關(guān)條件來觸發(fā)這些API
的調(diào)用。
前端邏輯處理流程大致如下:
調(diào)用插件,比原的chrome
插件源碼位于Bytom-JS-SDK,開發(fā)比原DAPP
時調(diào)用插件的說明可以參考Dapp Developer Guide,其網(wǎng)絡(luò)配置如下:
window.addEventListener('load', async function() { if (typeof window.bytom !== 'undefined') { let networks = { solonet: ... // solonet bycoin url testnet: ... // testnet bycoin url mainnet: ... // mainnet bycoin url }; ... startApp(); });
配置合約參數(shù),可以采用文件配置的方式,該步驟是為了讓前端得到需要用到的一些已經(jīng)固定化的合約參數(shù),其前端配置文件為configure.json.js
,其示例模型如下:
var config = { "solonet": { ... // contract arguments "gas": 0.4 // btm fee }, "testnet":{ ... }, "mainnet":{ ... } }
前端預(yù)計算處理,如果合約中包含lock-unlock
語句,并且Amount
是一個數(shù)值表達式,那么前端來提取計算表達式并進行相應(yīng)的預(yù)計算。此外,前端還需要預(yù)判下所有可驗證的verify
語句,從而判定交易是否可行,因為一旦前端對這些驗證失敗,合約將必然驗證失敗。此外,如果define
或assign
語句涉及的變量,前端也需預(yù)計算這些變量的值。
構(gòu)建合約交易模板,由于解鎖合約是解鎖lock
語句條件,構(gòu)造交易需要根據(jù)lock
語句或unlock
語句來進行變換。解鎖合約交易是由inputs
和outputs
構(gòu)成,交易的第一個input
輸入一般都是是固定的,即合約UTXO
的hash
值,除此之外,其他輸入輸出都需要根據(jù)DAPP中的實際合約來進行變更,其模型大致如下:
const input = [] input.push(spendUTXOAction(utxohash)) ... // other input const output = [] output.push(controlProgramAction(amount, asset, program)) ... // other output
啟動前端服務(wù)
編譯前端命令如下:
npm run build
啟動之前需要先啟動bufferserver
緩沖服務(wù)器,然后再啟動前端服務(wù),其前端啟動命令如下:
npm start
緩沖服務(wù)器主要是為了在管理合約UTXO
層面做一些效率方面的處理,包括了對bycoin
服務(wù)器是如何同步請求的,此外對DAPP
的相關(guān)交易記錄也進行了存儲。bycoin
服務(wù)器是比原鏈的去中心化錢包服務(wù)器,緩沖服務(wù)器的UTXO
跟它是同步更新的,比原官方插件錢包默認連接的就是該服務(wù)器。盡管bycoin
服務(wù)器的也對比原鏈的所有UTXO
進行了管理,但是由于UTXO
數(shù)量比較大,如果直接在該層面處理會導(dǎo)致DAPP
性能不佳,所以建議用戶自己構(gòu)建自己的緩沖服務(wù)器做進一步優(yōu)化處理。此外,DAPP
開發(fā)者也可以搭建了自己的去中心化錢包服務(wù)器,并且自己開發(fā)相關(guān)的插件。
緩沖服務(wù)器架構(gòu)可以參考一下bufferserver案例的源代碼,其編譯和啟動步驟如下:
編譯bufferserver
源代碼
按照README
安裝部署服務(wù)需要的軟件包Mysql
和Redis
,然后下載源代碼并編譯:
make all
編譯完成之后,在target
目錄下會生成可執(zhí)行文件api
和updater
。
啟動服務(wù)
使用root
用戶創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表,其命令如下:
mysql -u root -p < database/dump.sql
修改配置文件config_local.json
,配置說明參考README
的config
配置參數(shù)詳解。
啟動api
和updater
服務(wù)器,其中api
是提供JSON RPC
請求的服務(wù)進程,updater
是提供同步blockcenter
和區(qū)塊鏈瀏覽器數(shù)據(jù)請求的服務(wù)進程。
./target/api config_local.json ./target/updater config_local.json
啟動緩沖服務(wù)器之后,便可以啟動前端服務(wù),然后打開DAPP
的網(wǎng)頁URL
即可使用。
附:緩沖服務(wù)器的JSON RPC
接口可以參考wiki
接口說明。
“bytom DAPP緩沖服務(wù)器怎么啟動”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。