2021-06-15 11:56:39 +00:00
|
|
|
|
var initUnitsocket = function() {
|
|
|
|
|
if (global.config == undefined) {
|
|
|
|
|
var param = {};
|
|
|
|
|
param.action = "loadNodeConfig";
|
|
|
|
|
global.wssocket.send(JSON.stringify(param));
|
|
|
|
|
setTimeout(initUnitsocket, 1000);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var port = global.config.nodeCenter.replace(/.*:/g, "");
|
|
|
|
|
var len = global.config.nodeCenter.length - port.length;
|
|
|
|
|
port = port - 1;
|
|
|
|
|
var url = global.config.nodeCenter.substring(0, len) + port
|
|
|
|
|
+ "/NodeCenterWS";
|
|
|
|
|
if (window.location.origin == "https://contract.internetapi.cn") {
|
|
|
|
|
url = "wss://cluster.contract.internetapi.cn/NodeCenterWS";
|
|
|
|
|
}
|
|
|
|
|
if (window.location.origin == "http://contract.internetapi.cn") {
|
|
|
|
|
url = "ws://cluster.contract.internetapi.cn/NodeCenterWS";
|
|
|
|
|
}
|
|
|
|
|
console.log("connect :" + url);
|
|
|
|
|
global.unitsocket = createWssocket(url, function() {
|
|
|
|
|
getUnitSession();
|
|
|
|
|
}, WSUnitHandler);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO we should get the address from config!
|
|
|
|
|
var getUnitWsUrl = function(host) {
|
|
|
|
|
var prefix = "ws://";
|
|
|
|
|
if (document.location.href.startsWith("https"))
|
|
|
|
|
prefix = "wss://";
|
|
|
|
|
var path = "NodeCenterWS";
|
|
|
|
|
var port = ":18001";
|
|
|
|
|
if (host == "contract.internetapi.cn") {
|
|
|
|
|
host = "cluster.contract.internetapi.cn";
|
|
|
|
|
port = "";
|
|
|
|
|
}
|
|
|
|
|
return prefix + host + port + "/" + path;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var getUnitSession = function() {
|
|
|
|
|
if(global.centerportalws == undefined || global.centerportalws == null || global.centerportalws.send == undefined || global.centerportalws.send == null){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
global.centerportalws.send("{\"action\":\"getSessionID\"}");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onSessionID = function(data) {
|
|
|
|
|
global.session = data.session;
|
|
|
|
|
|
|
|
|
|
var loginParam = {};
|
|
|
|
|
loginParam.pubKey = global.sm2Key.publicKey;
|
|
|
|
|
loginParam.signature = sm2.doSignature(global.session,
|
|
|
|
|
global.sm2Key.privateKey,{hash:true,der:true});
|
|
|
|
|
loginParam.action = "login";
|
|
|
|
|
global.centerportalws.send(JSON.stringify(loginParam));
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onLogin = function(data) {
|
|
|
|
|
// console.log(data);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var distributeContract = function() {
|
|
|
|
|
var place = $("#selectUnits")[0].value;
|
2021-06-21 09:52:11 +00:00
|
|
|
|
if (place === "选择节点集群") {
|
2021-06-15 11:56:39 +00:00
|
|
|
|
myToast("提示","请选择集群分发合约!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-21 09:52:11 +00:00
|
|
|
|
if(!global.ypkName || global.ypkName === "请选择ypk文件"){
|
2021-06-15 11:56:39 +00:00
|
|
|
|
myToast("提示","请选择文件!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-21 09:52:11 +00:00
|
|
|
|
var unitsID = place.split("_")[1];
|
2021-06-15 11:56:39 +00:00
|
|
|
|
var nodeIDs = ""; //公钥
|
|
|
|
|
for ( var i in global.units[unitsID]) {
|
|
|
|
|
if(global.units[unitsID][i].nodeName == global.config.nodeName)
|
|
|
|
|
continue;
|
|
|
|
|
nodeIDs += global.units[unitsID][i].pubKey + ",";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(nodeIDs == ""){
|
|
|
|
|
myToast("提示","集群中无需要分发的节点!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var request = {};
|
|
|
|
|
request.action = "distributeContract";
|
|
|
|
|
request.nodeIDs = nodeIDs;
|
|
|
|
|
request.projectName = global.ypkName;
|
|
|
|
|
request.isPrivate = global.ypkIsPrivate;
|
|
|
|
|
//request.sponsorName = global.config.nodeName;
|
|
|
|
|
request.signature = sm2.doSignature("DistributeContract|"
|
|
|
|
|
+ request.projectName + "|" + global.sm2Key.publicKey,
|
|
|
|
|
global.sm2Key.privateKey,{hash:true,der:true}); // 合约的签名
|
|
|
|
|
console.log(request);
|
|
|
|
|
//global.centerportalws.send(JSON.stringify(request));
|
|
|
|
|
global.wssocket.send(JSON.stringify(request));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onDistributeContract = function(obj) {
|
|
|
|
|
updateResultDisplay(obj);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onDistributeFinish = function(obj) {
|
|
|
|
|
customAlert("合约分发完成!");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 将所选周期转化为毫秒
|
|
|
|
|
var switchPeriod = function(per) {
|
|
|
|
|
switch (per) {
|
|
|
|
|
case '/12hours自动保存':
|
|
|
|
|
return (12 * 3600 * 1000) + "";
|
|
|
|
|
case '/1day自动保存':
|
|
|
|
|
return (24 * 3600 * 1000) + "";
|
|
|
|
|
case '/2days自动保存':
|
|
|
|
|
return (48 * 3600 * 1000) + "";
|
|
|
|
|
default:
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
// 本地启动
|
2022-09-02 13:26:21 +00:00
|
|
|
|
var startContractAtSlave = function(isDebug) {
|
2021-06-15 11:56:39 +00:00
|
|
|
|
//this is for fixed contract,not for the unit contract
|
|
|
|
|
var period = $("#selectDumpPeriod")[0].value;
|
|
|
|
|
if (period == "选择状态保存模式") {
|
|
|
|
|
myToast("提示","请选择状态保存模式!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var dumpPeriod = switchPeriod(period);
|
|
|
|
|
var project = global.ypkName;
|
|
|
|
|
$("#result")[0].innerHTML="正在启动,请稍候";
|
|
|
|
|
var request = {};
|
|
|
|
|
request.action = "startContractByYPK";
|
2022-06-26 09:54:29 +00:00
|
|
|
|
if (createParam.value !='') {
|
2022-04-21 02:14:00 +00:00
|
|
|
|
request.createParam = createParam.value;
|
|
|
|
|
$("#createParam").css("color","");
|
|
|
|
|
if (autoConvertStr.value=='on') {
|
|
|
|
|
try{
|
|
|
|
|
request.createParam = JSON.parse(request.createParam);
|
|
|
|
|
$("#createParam").css("color","");
|
|
|
|
|
}catch(e){
|
|
|
|
|
console.log(e);
|
|
|
|
|
$("#createParam").css("color","red");
|
2022-06-26 09:54:29 +00:00
|
|
|
|
alert("Create Param not JSON Format");
|
|
|
|
|
return;
|
2022-04-21 02:14:00 +00:00
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-09-02 13:26:21 +00:00
|
|
|
|
if (remoteDebugPort.value !='') {
|
|
|
|
|
request.remoteDebugPort = remoteDebugPort.value;
|
|
|
|
|
}
|
|
|
|
|
request.isDebug = isDebug;
|
2021-06-15 11:56:39 +00:00
|
|
|
|
request.dumpPeriod = dumpPeriod;
|
|
|
|
|
request.isPrivate = global.ypkIsPrivate;
|
|
|
|
|
request.owner = global.sm2Key.publicKey;
|
|
|
|
|
request.requestID = new Date().getTime() + "";
|
|
|
|
|
// request.contractid = $("#tabdiv")[0].value;
|
|
|
|
|
// request.script = global.scriptEditor.getValue();
|
|
|
|
|
request.path = "/" + project;
|
|
|
|
|
localStorage.setItem("persisStatus", JSON.stringify(request));
|
|
|
|
|
{
|
|
|
|
|
request.signature = sm2.doSignature("Fixed|" + request.path + "|"
|
|
|
|
|
+ global.sm2Key.publicKey, global.sm2Key.privateKey,{hash:true,der:true});
|
|
|
|
|
request.script = "empty";
|
|
|
|
|
}
|
|
|
|
|
console.log(request);
|
|
|
|
|
global.wssocket.send(JSON.stringify(request));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onStartContract = function(obj) {
|
|
|
|
|
listContractProcess();
|
|
|
|
|
updateResultDisplay(obj);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 集群启动合约
|
2021-11-11 04:52:38 +00:00
|
|
|
|
function startContractUnits(place) {
|
|
|
|
|
// ZYX
|
|
|
|
|
const unitsID = $("#selectUnits")[0].value.split("_")[1];
|
|
|
|
|
if (!unitsID || unitsID === "选择节点集群") {
|
|
|
|
|
myToast("提示", "请选择节点集群!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2021-06-15 11:56:39 +00:00
|
|
|
|
|
2021-11-11 04:52:38 +00:00
|
|
|
|
let peersID = "";
|
|
|
|
|
for (let i in global.units[unitsID]) {
|
|
|
|
|
peersID += global.units[unitsID][i].pubKey + ",";
|
|
|
|
|
}
|
2021-06-15 11:56:39 +00:00
|
|
|
|
|
2021-11-11 04:52:38 +00:00
|
|
|
|
const request = {};
|
2021-06-15 11:56:39 +00:00
|
|
|
|
|
2021-11-11 04:52:38 +00:00
|
|
|
|
request.action = "startContractMultiPoint";
|
|
|
|
|
request.peersID = peersID;
|
|
|
|
|
request.type = $("#sequence")[0].value;
|
|
|
|
|
console.log(request.type);
|
|
|
|
|
if (request.type == 0) {
|
|
|
|
|
myToast("提示", "请选择集群合约模式!");
|
2021-06-15 11:56:39 +00:00
|
|
|
|
return;
|
2021-11-11 04:52:38 +00:00
|
|
|
|
}
|
|
|
|
|
request.selectUnitNum = Number($("#selectUnitNum")[0].value);
|
|
|
|
|
if (!request.selectUnitNum || isNaN(request.selectUnitNum)) {
|
|
|
|
|
myToast("提示", "请填写集群规模!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
request.projectName = global.ypkName;
|
|
|
|
|
if (!request.projectName || request.projectName == "请选择ypk文件") {
|
|
|
|
|
myToast("提示", "请选择合约!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
request.isPrivate = global.ypkIsPrivate;
|
|
|
|
|
request.sponsorPeerID = global.peerID; //peerID of the node
|
2022-06-26 09:54:29 +00:00
|
|
|
|
if (createParam.value !='') {
|
|
|
|
|
request.createParam = createParam.value;
|
|
|
|
|
$("#createParam").css("color","");
|
|
|
|
|
if (autoConvertStr.value=='on') {
|
|
|
|
|
try{
|
|
|
|
|
request.createParam = JSON.parse(request.createParam);
|
|
|
|
|
$("#createParam").css("color","");
|
|
|
|
|
}catch(e){
|
|
|
|
|
console.log(e);
|
|
|
|
|
$("#createParam").css("color","red");
|
|
|
|
|
alert("Create Param not JSON Format");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-11-11 04:52:38 +00:00
|
|
|
|
console.log(request);
|
|
|
|
|
global.wssocket.send(JSON.stringify(request));
|
|
|
|
|
}
|
2021-06-15 11:56:39 +00:00
|
|
|
|
|
|
|
|
|
var onStartTrustfulContract = function(obj) {
|
|
|
|
|
console.log(obj);
|
|
|
|
|
$("#dialogBodyDiv").html("");
|
|
|
|
|
customAlert("集群启动合约已完成!请等待各节点的结果(<span id='countDown'>20</span>)");
|
|
|
|
|
setTimeout(decreaseCountDown,1000);
|
|
|
|
|
};
|
|
|
|
|
var decreaseCountDown = function(){
|
|
|
|
|
if ($("#countDown").length!=1){
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var val = $("#countDown").html();
|
|
|
|
|
val/=1;
|
|
|
|
|
if (val>0) val--;
|
|
|
|
|
$("#countDown").html(val);
|
|
|
|
|
setTimeout(decreaseCountDown,1000);
|
|
|
|
|
}
|
|
|
|
|
var onStartContractTrustfullyResult = function(obj){
|
|
|
|
|
var data = JSON.parse(obj.data);
|
|
|
|
|
$("#countDown").remove();
|
|
|
|
|
$("#customAlertSpan").html("集群启动合约已完成!总共用时("+obj.executionTime+"ms)");
|
|
|
|
|
if ($("#startP2PResultTable").length>0){
|
|
|
|
|
}else{
|
|
|
|
|
var html = "<table id='startP2PResultTable' style='width:100%' ><thead><tr><td>PubKey</td><td>结果</td></tr></thead><tbody>";
|
|
|
|
|
html+="</tbody></table>";
|
|
|
|
|
$("#customAlertSpan").parent().append(html);
|
|
|
|
|
$("#startP2PResultTable").DataTable(
|
|
|
|
|
{
|
|
|
|
|
"language" : dtLang,
|
|
|
|
|
"rowCallback" : function(row, data, displayNum, displayIndex,
|
|
|
|
|
dataIndex) {
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
"headerCallback" : function(thead, data, start, end, display) {
|
|
|
|
|
$(thead).css("background", primaryColor);
|
|
|
|
|
$(thead).css("color", "white");
|
|
|
|
|
$(thead).children().css("background", primaryColor);
|
|
|
|
|
$(thead).children().css("color", "white");
|
|
|
|
|
},
|
|
|
|
|
scrollCollapse : false,
|
|
|
|
|
paging : true,
|
|
|
|
|
pageLength : 5,
|
|
|
|
|
order : [ [ 1, 'desc' ] ],
|
|
|
|
|
"columnDefs" : []
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
var p = $("#startP2PResultTable").DataTable();
|
|
|
|
|
p.row.add([data.pubKey.substr(0,6),data.result]);
|
|
|
|
|
p.row().draw();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var customAlert = function(msg){
|
|
|
|
|
if ($("#customAlertSpan").length>0){
|
|
|
|
|
$("#customAlertSpan").append("<br/>"+msg);
|
|
|
|
|
} else {
|
|
|
|
|
var body = "<div class='row'><div class='col-sm-12'><span id='customAlertSpan'>";
|
|
|
|
|
body +=msg;
|
|
|
|
|
body += "</span></div></div>";
|
|
|
|
|
$("#dialogBodyDiv").html(body);
|
|
|
|
|
showDialog("提示",function(){
|
|
|
|
|
$("#dialogBodyDiv").html("");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var startContractConfig = function() {
|
|
|
|
|
if (global.ypkIsPrivate) {
|
|
|
|
|
myToast("提示","私有合约不支持随机执行");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var project = global.ypkName;
|
|
|
|
|
if(project==undefined) {
|
|
|
|
|
myToast("提示","未选择合约");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var num = document.getElementById("selectUnitNum").value;
|
|
|
|
|
var re = /^[0-9]+.?[0-9]*/;//判断字符串是否为数字//判断正整数/[1−9]+[0−9]∗]∗/
|
|
|
|
|
if (!re.test(num)) {
|
|
|
|
|
myToast("提示","请选择合理节点数量");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var nameParts = $("#selectUnits")[0].value.split("_");
|
|
|
|
|
var unitsID = nameParts[1];
|
|
|
|
|
var request = {};
|
|
|
|
|
var peers;
|
|
|
|
|
var network = $("#network")[0].value;
|
|
|
|
|
if (unitsID == undefined) {
|
|
|
|
|
console.log("unitsID " + unitsID);
|
|
|
|
|
} else if (network == 1) {
|
|
|
|
|
peers = global.p2pNodes;
|
|
|
|
|
} else {
|
|
|
|
|
peers = global.units[unitsID];
|
|
|
|
|
}
|
|
|
|
|
if (peers.length < num) {
|
|
|
|
|
myToast("失败","节点数量 > 集群节点数量");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
var peersID = "";
|
|
|
|
|
for ( var i in peers) {
|
|
|
|
|
if (peers[i].peerID) {
|
|
|
|
|
peersID += peers[i].peerID +" ";
|
|
|
|
|
} else {
|
|
|
|
|
peersID += peers[i] + " ";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log("peers ", peersID)
|
|
|
|
|
request.action = "startContractConfig";
|
|
|
|
|
request.type = network;
|
|
|
|
|
request.peersID = peersID;
|
|
|
|
|
request.num = num;
|
|
|
|
|
request.path = "/" + project;
|
|
|
|
|
request.contractName = project;
|
|
|
|
|
request.signature = sm2.doSignature("Trusted|" + request.path + "|"
|
|
|
|
|
+ global.sm2Key.publicKey, global.sm2Key.privateKey); // 合约的签名
|
|
|
|
|
request.sequencing = $("#sequence")[0].value;
|
|
|
|
|
request.response = $("#response")[0].value;
|
|
|
|
|
console.log("startContractConfig",request)
|
|
|
|
|
global.wssocket.send(JSON.stringify(request));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var onStartContractConfig = function(obj) {
|
|
|
|
|
updateResultDisplay(obj);
|
|
|
|
|
listContractProcess();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onHashResult = function(obj) {
|
|
|
|
|
$("#hashDisplayDiv").html("溯源指纹:"+obj.data);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var startTestADSP = function(obj){
|
|
|
|
|
var request = {};
|
|
|
|
|
request.action = "startTestADSP";
|
|
|
|
|
global.centerportalws.send(JSON.stringify(request));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var onStartTestADSP = function(obj){
|
|
|
|
|
myToast("提示","开始测试ADSP!");
|
|
|
|
|
};
|