一鍵發鏈三個層次,本文為官方腳本第一個層次,第二個層次正在完善
1、官方腳本
無須多言,通過官方檔案和預先提供的AST,ASM腳本,加上簡單的輸入,可以構建好應用鏈
2、自動構建腳本
問題在于SCS賬本需要同步,也許需要兩天,這個改進辦法是從已有的SCS上匯出賬本,匯入到新SCS節點上,同步時間將會縮短,用戶能盡快建立起自己應用鏈
3、預建立
官方團隊先注冊好SCS,用戶直接拿去用,相當于毛坯房自己精裝修
——————————————————————
北京時間2018年6月30日,MOAC應用鏈正式上線公測。
北京時間2019年7月12日,MOAC發布Nuwa1.0.10,該版本適用于主網(mainnet)和測驗網(testnet)。
以下為MOAC testnet應用鏈安裝及應用教程,mainnet應用鏈的搭建程序相同(要付出真金白銀的moac哦)。
6.4 應用鏈開放注冊
通過開放應用鏈注冊,候選SCS內部完成注冊,最終成為應用鏈的一員,才有資格參與應用鏈的相關業務。 需要注意的是:SCS參與應用鏈注冊是通過SCS地址(我們也稱為scsid,放在“./scskeystore”目錄下)發送交易到應用鏈完成;因此需要給SCS地址儲備一定量的moac,建議1個moac。同時應用鏈合約需要最終提供gas費給scs,因此,也需要給應用鏈控制合約發送一定量的moac。
請注意:給應用鏈控制合約發送moac,不能直接send,需要用合約里的函式addFund()。

部署應用鏈開放注冊的代碼如下registerOpen.js,執行node即可。
var Chain3 = require('chain3');
var chain3 = new Chain3(new Chain3.providers.HttpProvider('http://localhost:8545'));
//register open
var dappAddr = "0x7610fd66c272332edd59a43460ad24eee1973bfe";
var dappPasswd = "password";
var subchainAddr = "0x8a194e9567d7339b968dac61546a52f89a8c7a2f";//應用鏈控制合約地址
chain3.personal.unlockAccount(dappAddr, dappPasswd,0);
sendtx(dappAddr, subchainAddr, '0','0x5defc56c' );
function sendtx(src, tgtaddr, amount, strData) {
chain3.mc.sendTransaction(
{
from: src,
value:chain3.toSha(amount,'mc'),
to: tgtaddr,
gas: "2000000",
gasPrice: chain3.mc.gasPrice,
data: strData
});
console.log('sending from:' + src + ' to:' + tgtaddr + ' with data:' + strData);
}
dappAddr、dappPasswd:Dapp用戶用來發送交易前賬戶解鎖;
subchainAddr:部署應用鏈控制合約subchainbase的地址;
資料:'0x5defc56c'是應用鏈控制合約subchainbase中‘registerOpen()’通過hash演算法Keccak256得到前4個位元組,此處不用修改;
該步驟也可以不使用代碼,而是在http://wallet.moac.io的合約功能處完成。

6.5 查看注冊情況
通過registerOpen后,系統將自動選擇符合條件的SCS節點并通知他們進行注冊,DAPP用戶需要通過如下方法查看已經注冊完成的SCS節點數目(nodeCount):
>mc.getStorageAt(subchainAddr,0x0e)

通過合約地址subchainAddr查詢合約中第0x0e個public成員變數(即nodeCount)的值,請不要修改此值 當達到應用鏈運行需要的SCS的數量區間后,即可進入RegisterClose步驟。
該步驟也可以在http://wallet.moac.io的合約功能處直接查看。還可以查詢已經注冊的scs的id。

6.6 應用鏈關閉注冊
首先介紹一下RegisterClose的主要作業:
Dapp用戶設定應用鏈關閉注冊;
已經注冊SCS數目必須不小于應用鏈要求的最小數目,否則應用鏈注冊無效;
主網廣播通知所有的協議合約中候選SCS,包括已經注冊的成功的SCS;
SCS收到廣播后,SCS自身完成初始化并開始應用鏈運行。
關閉應用鏈注冊后,候選SCS不能再通過subchain RegisterOpen方式注冊該應用鏈,已經注冊的SCS處于正常運行狀態,參與應用鏈的相關業務,如:處理交易、出塊、重繪等。
部署應用鏈關閉注冊的代碼如下registerClose.js,執行node即可。
var Chain3 = require('chain3');
var chain3 = new Chain3(new Chain3.providers.HttpProvider('http://localhost:8545'));
//register open
var dappAddr = "0x7610fd66c272332edd59a43460ad24eee1973bfe";
var dappPasswd = "password";
var subchainAddr = "0x8a194e9567d7339b968dac61546a52f89a8c7a2f";//應用鏈控制合約地址
chain3.personal.unlockAccount(dappAddr, dappPasswd,0);
sendtx(dappAddr, subchainAddr, '0','0x69f3576f' );
function sendtx(src, tgtaddr, amount, strData) {
chain3.mc.sendTransaction(
{
from: src,
value:chain3.toSha(amount,'mc'),
to: tgtaddr,
gas: "2000000",
gasPrice: chain3.mc.gasPrice,
data: strData
});
console.log('sending from:' + src + ' to:' + tgtaddr + ' with data:' + strData);
}
其中,
dappAddr、dappPasswd:Dapp用戶用來發送交易前賬戶解鎖;
subchainAddr:部署應用鏈合約得到的合約地址;
資料:'0x69f3576f'是應用鏈控制合約subchainbase中‘registerClose()’通過hash演算法Keccak256得到前4個位元組;
執行完畢,如果一切正常,應用鏈建成并開始出塊。
該步驟也可以不使用代碼,而是在http://wallet.moac.io的合約功能處完成。

實測環境中3個scs輪流出塊,顯示如下。

圖中顯示本scs出塊正常,當前為應用鏈第15個區塊,由本scs挖礦出塊成功。
如果是同步其他scs出的應用鏈區塊,“SendBkToVnode”顯示為“Insert”,也就是同步其他scs的區塊。

至此,應用鏈部署完成。
7.SCS monitor
Monitor是一個特殊的SCS節點,它是一種模式,DAPP用戶可以通過這個節點來監控自己的應用鏈運行狀態和業務資料。
SCS Monitor不參與應用鏈共識,因此只能查看,不能修改資料。即使應用鏈已經運行,Monitor也能注冊加入。
Monitor SCS啟動方式為( 需要自設密碼,加上-p "password"):
D:\nuwa1.0.10.win\win\scs>scsserver --rpc --rpcaddr 0.0.0.0 --rpcport 2345 --rpccorsdomain "*" --verbosity 4
啟動后,DAPP用戶通過呼叫應用鏈控制合約subchainbase中的registerAsMonitor方法使Monitor SCS接入應用鏈同步資料。
部署應用鏈開放注冊的代碼如下registerAsMonitor.js,執行node即可。
var Chain3 = require('chain3');
var chain3 = new Chain3(new Chain3.providers.HttpProvider('http://localhost:8545'));
//register as monitor
var dappAddr = "0x7610fd66c272332edd59a43460ad24eee1973bfe";
var dappPasswd = "password";
var subchainAddr = "0x4132d3d98e5781507633dfd2248d810ab05d1431";//應用鏈控制合約地址
var scsAddr = "d35eb82143aa45857bb5324a3b5b493d4078e812"; //monitor的scsid,不帶0x開頭
subchainRegisterAsMonitor (dappAddr,dappPasswd,subchainAddr,'1',scsAddr);
function subchainRegisterAsMonitor (dappAddr,dappPasswd,subchainAddr,amount,scsAddr)
{
chain3.mc.sendTransaction(
{
from: dappAddr,
value:chain3.toSha(amount,'mc'),
to: subchainAddr,
gas: "2000000",
gasPrice: chain3.mc.gasPrice,
data: '0x4e592e2f000000000000000000000000' + scsAddr
});
console.log('sending from:' + dappAddr + ' to:' + subchainAddr + ' with data:' + '0x4e592e2f000000000000000000000000' + scsAddr);
}
部署成功后可以看到,SCS monitor開始同步應用鏈區塊。

該步驟也可以不使用代碼,而是在http://wallet.moac.io的合約功能處完成。

8.在應用鏈部署業務邏輯合約
8.1 使用錢包工具部署業務邏輯合約
登錄http://wallet.moac.io,點擊“部署新合約”。
本檔案使用一個簡單的合約,mySubContract.sol,代碼如下:
pragma solidity ^0.4.18;
contract Calc{
uint public count;
uint public equation;
function add(uint a, uint b){
count++;
equation = a + b;
}
function getCount() constant returns (uint){
return count;
}
function getEquation() constant returns (uint){
return equation;
}
}
部署應用鏈業務邏輯合約時,勾選復選框“MicroChain Dapp”;
MicroChain Base Address:在里面填上應用鏈控制合約的地址;
SCS Monitor Address:填寫SCS Monitor的IP地址(本機可以用127.0.0.1);
SCS Monitor Port:SCS Monitor啟動埠。

然后填寫合約的內容,按步驟即可成功部署應用鏈業務邏輯合約。同時在contract頁面的MICROCHAIN CONTRACTS顯示。

點擊進去,會發現顯示的合約地址仍然是應用鏈控制合約地址,同時顯示scs monitor的address和port;
右邊的合約函式就是業務邏輯合約的函式。

請注意,此時Nonce值應該自動是1,才是正確狀態,如果等待很久之后還是0或者-1,則表示沒有部署成功。
部署不成功的原因很多,比如本地網路問題,或者scs出塊時應用鏈分叉等。
正常后,可以對應用鏈業務邏輯合約進行操作,每次操作成功后,Nonce會自動增加1。
本例中,左邊可以直接看到測驗運算結果。
在對應用鏈業務邏輯合約的操作中,可以在scs monitor界面看到交易的發送情況,基本格式如下:
====== Transactions: 1 =====
TX(f3eb6baf45ff003f766d88bf7dddd6894ec4bf72ebdae1a2931241674ad7f8d4)
Contract: false
From: 7610fd66c272332edd59a43460ad24eee1973bfe
To: 6b4e01e1598fdabd7c926260ae614005bf1cc9a0
Nonce: 1
GasPrice: 0x4a817c800
GasLimit 0x0
Value: 0x0
Data: 0x771602f700000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000005
V: 0xee
R: 0xf0023109bd51efc72702637bf4ef3c7ca11df228bf258d1b31ed593c2e9f9686
S: 0x6bdd7642aa10d94e837ee9ae5c39ee25be395182355cab554a6ec4b67534fe28
Hex: f8bf01808504a817c80080946b4e01e1598fdabd7c926260ae614005bf1cc9a080b844771602f70000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000501947610fd66c272332edd59a43460ad24eee1973bfe81eea0f0023109bd51efc72702637bf4ef3c7ca11df228bf258d1b31ed593c2e9f9686a06bdd7642aa10d94e837ee9ae5c39ee25be395182355cab554a6ec4b67534fe28
SysCnt: 0
ShardingFlag: 1
Via: [118 16 253 102 194 114 51 46 221 89 164 52 96 173 36 238 225 151 59 254]
=============================
8.2 使用代碼部署業務邏輯合約
在已經出塊的應用鏈上部署業務邏輯合約的代碼如下deployContractOnSubchain.js,執行node即可。
const Chain3 = require('chain3');
const vnodeUri = 'http://localhost:8545';
let chain3 = new Chain3();
chain3.setProvider(new chain3.providers.HttpProvider(vnodeUri));
if(!chain3.isConnected()){
throw new Error('unable to connect to moac vnode at ' + vnodeUri);
}else{
var subchainbaseaddress = "0xb104eE51270e930D889CbBA2d0A578Dc3e82279f"; //subchainBase合約地址
var dataStr = "0x6060604052341561000f57600080fd5b33600160006101000a81548173......0029";//應用鏈業務邏輯合約Bin,加0x
chain3.mc.sendTransaction(
{
from: chain3.mc.coinbase,
value:chain3.toSha('0','mc'),
to: subchainbaseaddress,
gas: 0,
shardingFlag: "0x1",
data: dataStr,
nonce: 0,
via: chain3.mc.coinbase,
});
}
9.增加新的出塊scs
一個應用鏈已經出塊,想加入新的出塊scs,方法是:
按照之前的步驟,新建一個scs,給scsid充值1mc,將該scs加入到已經出塊的應用鏈所使用的sub Chain Protocol Base池子;
到應用鏈合約subChain Base下面呼叫Register Add,該函式有一個引數,設定為比subChain Protocol池子中的scs count大的值就可以;比如池子中有10個scs,就設定該值為11;
新的這個scs接收到vnode的資訊,開始同步應用鏈區塊,同步完畢,開始出塊;
新scs同步程序中,舊的scs輪流向proxy輸出區塊資訊,同步結束后,該動作停止:
48027:Got Upload Block reply from proxy server: len:8
48027:Uploading block 30524 to the Proxy server...
10.應用鏈瀏覽器
上面的步驟都完成,應用鏈已經出塊,scs monitor部署完成并正常作業,可以到瀏覽器查詢應用鏈區塊資訊。

點擊“MicroChain Form”,界面上寫入相應引數:

引數主要包括SCS monitor的ip地址和埠,應用鏈合約地址等。點擊Submit按鈕。

可以看到應用鏈的基本資訊、區塊資訊及構建該應用鏈的SCS。
---------------------
作者:Li_Yu_Qing
來源:CSDN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/31820.html
標籤:區塊鏈技術
