Compare commits

...

28 Commits

Author SHA1 Message Date
CaiHQ
376fde8154 update doip-sdk 2023-12-15 16:36:54 +08:00
CaiHQ
2ab42516f9 update index_datanet 2022-12-13 10:39:08 +08:00
CaiHQ
141532cd19 add update node manager 2022-11-29 15:14:57 +08:00
CaiHQ
82bab8f7e3 fix nounces 2022-10-25 17:51:02 +08:00
CaiHQ
19d0c53304 support remote debug 2022-09-02 21:26:21 +08:00
CaiHQ
6f6be77dfe front: support startMulitipoint with args
fix: ContractClient missing arguments error
update: @Router arguments format
fix: ContractStatusRecorder null exception
2022-06-26 17:54:29 +08:00
CaiHQ
a85bd4bb14 debug raft 2022-05-27 17:48:24 +08:00
CaiHQ
b0f4c4225b feat: support createParam 2022-04-21 10:14:00 +08:00
CaiHQ
897f59c2eb add nodecenterws config 2022-03-30 11:17:08 +08:00
CaiHQ
a1a52ffc32 fix: MultiPointCooperationExecutor 2022-02-18 11:14:10 +08:00
Frank.R.Wu
cdcdfbdfde fix: add a lost file
add jquery-2.1.4.js to fix frontend bugs
2021-12-23 21:40:54 +08:00
CaiHQ
d0f8af9851 optimize: use jquery 2.1.4.min
refactor: DOA Contract
update: use doip sdk 1.0.2
2021-12-22 22:07:51 +08:00
Frank.R.Wu
965ee67409 fix: fix bugs in executeContract of NodeContractInstances.js 2021-12-12 12:25:36 +08:00
Frank.R.Wu
0dfa8a555a style 2021-12-11 19:15:13 +08:00
CaiHQ
37476bd506 merge pbft algorithm 2021-11-22 11:50:39 +08:00
Frank.R.Wu
89360bbf0c feat: add SelfAdaptiveShardingExecutor
add new type of multi-point contract "SelfAdaptiveSharding"
2021-11-11 12:52:38 +08:00
bitvincent
f6c898dc9e fix:typo error (shading->sharding) 2021-11-04 18:31:16 +08:00
CaiHQ
c73d1cfabf fix openInClientBug 2021-10-26 14:17:31 +08:00
CaiHQ
e96048de2a fix: path bug 2021-10-26 11:22:45 +08:00
Frank.R.Wu
a117a53b0b feat: optimize the view of TrustUnits
just show node names in the view of TrustUnits
2021-08-14 21:05:50 +08:00
zhanghongwei
2aa98c4f17 Merge branch 'master' of https://phabricator.internetapi.cn/source/bdcontract-web-ide 2021-08-09 21:58:18 +08:00
Frank.R.Wu
de634576fd feat: change title
change title with node addr
2021-08-09 21:19:43 +08:00
Frank.R.Wu
e600c386da feat: change title
change title with node addr
2021-08-09 21:08:57 +08:00
fe1dcf7e79 NodePortal 2021-08-09 09:48:56 +08:00
root
5758a3ae78 fix: /td> in NodePortal.html/合约实例管理 2021-08-04 10:49:44 +08:00
root
e48679db44 feat: decouple mockjs 2021-08-03 14:24:27 +08:00
root
1ff93a3e76 fix: BaasOnlineIDE.html hidden overflowed part 2021-07-26 16:57:28 +08:00
root
44d288f147 fix: BaasOnlineIDE.html hidden overflowed part 2021-07-26 16:12:23 +08:00
22 changed files with 3649 additions and 9356 deletions

View File

@ -127,7 +127,7 @@
</style> </style>
</head> </head>
<body> <body style="overflow-x: hidden;">
<header <header
class="headerFooter navbar navbar-default navbar-fixed-top navColor "> class="headerFooter navbar navbar-default navbar-fixed-top navColor ">
@ -142,7 +142,7 @@
</div> </div>
</header> </header>
<div class="container-fluid" id="main"> <div class="container-fluid" id="main">
<div class="row h-100"> <div class="row h-100" style="overflow:hidden">
<div class="col-2 h-100" id="horiNav"> <div class="col-2 h-100" id="horiNav">
<div class="container-fluid d-flex flex-column h-100"> <div class="container-fluid d-flex flex-column h-100">
<div class="row" style="display: none;"> <div class="row" style="display: none;">
@ -271,7 +271,7 @@
</div> </div>
</div> </div>
<div id="box" style="overflow:auto; height:100%"> <div id="box" style="overflow:hidden; height:100%">
<div id="contractCode" class="flex-grow-1" style="height:100%"> <div id="contractCode" class="flex-grow-1" style="height:100%">
<div id="textareaDiv" class="col-sm-12" style="width: 100%; height: 100%; padding:0"> <div id="textareaDiv" class="col-sm-12" style="width: 100%; height: 100%; padding:0">
<textarea id="scriptEditor" style="width: 100%; height: 100%" <textarea id="scriptEditor" style="width: 100%; height: 100%"

View File

@ -60,14 +60,14 @@
<script src="./js/bootstrap4-toggle.min.js"></script> <script src="./js/bootstrap4-toggle.min.js"></script>
</head> </head>
<body> <body style="overflow-x: hidden;">
<header <header
class="headerFooter navbar navbar-default navbar-fixed-top navColor "> class="headerFooter navbar navbar-default navbar-fixed-top navColor ">
<div class="col-4"> <div class="col-4">
<a class="navbar-brand" href="#"> <img alt="Brand" <a class="navbar-brand" href="#"> <img alt="Brand"
src="./images/logo-1.png" style="height: 30px"> src="./images/logo-1.png" style="height: 30px">
</a> <span>数瑞智能合约节点管理中心</span> </a> <span>合约引擎管理中心</span>
</div> </div>
<div class="nav navbar-right userName" data-toggle="modal" <div class="nav navbar-right userName" data-toggle="modal"
@ -230,16 +230,29 @@
onchange="changeYpkName(this.value)"> onchange="changeYpkName(this.value)">
<option selected>请选择ypk文件</option> <option selected>请选择ypk文件</option>
</select> </select>
<input class="form-control" id="createParam"
placeholder="填写启动参数" class="modal_input"/>
<div class="input-group-text">
<input type="checkbox" id="autoConvertStr"
aria-label="Checkbox for convertParam"
data-toggle="tooltip"
checked
title="" data-original-title="自动将参数转为JSON对象"/>
</div>
<input class="form-control input-group-small"
id="remoteDebugPort"
placeholder="远程调试端口" class="modal_input"/>
<select id="selectDumpPeriod" class="custom-select" <select id="selectDumpPeriod" class="custom-select"
style="appearance: none"> style="appearance: none">
<option selected>不保存</option> <option selected>不保存</option>
<option selected>/12hours自动保存</option> <option>/12hours</option>
<option selected>/1day自动保存</option> <option>/1day</option>
<option selected>/2days自动保存</option> <option>/2days</option>
<option selected>选择状态保存模式</option> <option>状态保存模式</option>
</select> </select>
<div class="input-group-append"> <div class="input-group-append">
<button onclick="deleteYpk()" <button onclick="deleteYpk()"
type="button" title="删除该合约ypk文件" data-toggle="tooltip" type="button" title="删除该合约ypk文件" data-toggle="tooltip"
@ -250,9 +263,15 @@
</button> </button>
</div> </div>
<div class="input-group-append"> <div class="input-group-append">
<button type="button" class="btn btn-outline-primary"
title="使用该ypk单点调试启动" data-toggle="tooltip"
onclick="startContractAtSlave(true)">
<img alt="Brand" src="./images/onlineide/debug.png"
class="buttonimg">
</button>
<button type="button" class="btn btn-outline-primary" <button type="button" class="btn btn-outline-primary"
title="使用该ypk单点启动合约" data-toggle="tooltip" title="使用该ypk单点启动合约" data-toggle="tooltip"
onclick="startContractAtSlave()"> onclick="startContractAtSlave(false)">
<img alt="Brand" src="./images/onlineide/start.png" <img alt="Brand" src="./images/onlineide/start.png"
class="buttonimg"> class="buttonimg">
</button> </button>
@ -280,7 +299,10 @@
<option value="3">RARF</option> <option value="3">RARF</option>
<option value="4">RARH</option> <option value="4">RARH</option>
<option value="5">RARA</option> <option value="5">RARA</option>
<option value="6">Shading</option> <option value="6">Sharding</option>
<option value="7">SASharding</option>
<option value="8">PBFT</option>
<option value="9">RAFT</option>
</select> </select>
<div class="btn-group mr-3" role="group" <div class="btn-group mr-3" role="group"
style="margin-left: 2%"> style="margin-left: 2%">
@ -504,7 +526,8 @@
</div> </div>
<input type="text" class="form-control" placeholder="输入参数" id="arg"> <input type="text" class="form-control" placeholder="输入参数" id="arg">
<input type="text" class="form-control col-2" placeholder="输入gas" id="gasLimit"> <input type="text" class="form-control col-2" placeholder="输入gas"
id="gasLimit">
<div class="input-group-append"> <div class="input-group-append">
<div class="input-group-text"> <div class="input-group-text">
<input type="checkbox" id="executeContractAsDebug" <input type="checkbox" id="executeContractAsDebug"
@ -544,6 +567,75 @@
<textarea class="form-control" id="responseArea"></textarea> <textarea class="form-control" id="responseArea"></textarea>
</div> </div>
</div> </div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">Mask配置</h6>
<div class="input-group mb-3">
<div class="input-group-append">
<span class="input-group-text">参数</span>
</div>
<input type="text" class="form-control" placeholder="输入参数"
id="maskArg">
<div class="input-group-append">
<button onclick="getMask()" type="button"
class="btn btn-outline-primary">get
</button>
</div>
<div class="input-group-append">
<button onclick="setMask()"
type="button" class="btn btn-outline-primary">set
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="maskStatus">当前配置:</span>
</div>
<textarea class="form-control" id="maskResponseArea"></textarea>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">Mock配置</h6>
<div class="input-group mb-3">
<div class="input-group-append">
<span class="input-group-text">参数</span>
</div>
<input type="text" class="form-control" placeholder="输入参数"
id="mockArg">
<div class="input-group-append">
<button onclick="getMock()" type="button"
class="btn btn-outline-primary">get
</button>
</div>
<div class="input-group-append">
<button onclick="setMock()"
type="button" class="btn btn-outline-primary">set
</button>
</div>
</div>
</div>
<div class="row d-flex justify-content-flex-start">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text" id="mockStatus">当前配置:</span>
</div>
<textarea class="form-control" id="mockResponseArea"></textarea>
</div>
</div>
<div class="row d-flex justify-content-flex-start"> <div class="row d-flex justify-content-flex-start">
<h6 class="card-title" style="margin-top: 2%">权限管理</h6> <h6 class="card-title" style="margin-top: 2%">权限管理</h6>
</div> </div>
@ -964,9 +1056,9 @@
<div class="input-group mb-3"> <div class="input-group mb-3">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text" <span class="input-group-text"
id="inputGroup-sizing-default">PeerID</span> id="inputGroup-sizing-default">节点公钥</span>
</div> </div>
<input type="text" class="form-control" id="peerIDInput"> <input type="text" class="form-control" id="nodePubKeyInput">
</div> </div>
</div> </div>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
@ -983,20 +1075,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="d-flex justify-content-center">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">MasterAddr</span>
</div>
<input type="text" class="form-control" id="masterAddrInput">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button"
onclick="changeMasterAddress()">修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<div class='input-group mb-3'> <div class='input-group mb-3'>
<div class="input-group-prepend"> <div class="input-group-prepend">
@ -1012,6 +1090,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="d-flex justify-content-center">
<div class='input-group mb-3'>
<div class="input-group-prepend">
<span class="input-group-text"
id="inputGroup-sizing-default">加入网络WS</span>
</div>
<input type='text' class='form-control'
id='nodeCenterWSInput'>
<div class='input-group-append'>
<button class='btn btn-outline-secondary' type='button'
id='changeNodeCenterWS' onclick='changeNodeCenterWS()'>
修改
</button>
</div>
</div>
</div>
<div class="d-flex justify-content-center"> <div class="d-flex justify-content-center">
<div class="input-group mb-3"> <div class="input-group mb-3">
<div class="input-group-prepend"> <div class="input-group-prepend">
@ -1268,6 +1362,11 @@
//initWSocket(); //initWSocket();
</script> </script>
</body> </body>

1333
NodePortal_Gateway.html Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,8 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-cache"/> <meta http-equiv="Cache-Control" content="no-cache"/>
<title>数瑞智能合约在线编辑器</title> <meta name="sharedArrayBuffer" description="using cross-origin-isolation in the web browser">
<title>智能合约在线编辑器</title>
<script src="./jqueryui1.12/jquery-2.1.4.js"></script> <script src="./jqueryui1.12/jquery-2.1.4.js"></script>
<link href="./jqueryui1.12/jquery-ui.css" rel="stylesheet"> <link href="./jqueryui1.12/jquery-ui.css" rel="stylesheet">
<script src="./jqueryui1.12/jquery-ui.js"></script> <script src="./jqueryui1.12/jquery-ui.js"></script>
@ -35,11 +36,6 @@
<!--script src="./js/echartsTheme.js"></script --> <!--script src="./js/echartsTheme.js"></script -->
<!-- script src="./js/echarts-gl.min.js"></script --> <!-- script src="./js/echarts-gl.min.js"></script -->
<script src="./js/sm2.js"></script> <script src="./js/sm2.js"></script>
<script src="./js/sm3.js"></script>
<script src="./js/sm4.js"></script>
<script src="./js/sm/index.js"></script>
<script src="./js/d3.v5.min.js"></script> <script src="./js/d3.v5.min.js"></script>
<!-- script src="./js/dagre-d3.min.js"></script --> <!-- script src="./js/dagre-d3.min.js"></script -->
<script src="./js/tipsy/jquery.tipsy.min.js"></script> <script src="./js/tipsy/jquery.tipsy.min.js"></script>
@ -132,14 +128,14 @@
</style> </style>
</head> </head>
<body> <body style="overflow-x: hidden;">
<header <header
class="headerFooter navbar navbar-default navbar-fixed-top navColor "> class="headerFooter navbar navbar-default navbar-fixed-top navColor ">
<div class="col-4"> <div class="col-4">
<a class="navbar-brand" href="#"> <img alt="Brand" <a class="navbar-brand" href="#"> <img alt="Brand"
src="./images/logo-1.png" style="height: 30px"> src="./images/logo-1.png" style="height: 30px">
</a> <span>数瑞智能合约在线编辑器</span><input id="uploadFileInput" type="file" </a> <span>智能合约在线编辑器</span><input id="uploadFileInput" type="file"
name="file" multiple onchange="uploadFile()" style="display: none;"> name="file" multiple onchange="uploadFile()" style="display: none;">
</div> </div>
<div class="nav navbar-right userName" data-toggle="modal" <div class="nav navbar-right userName" data-toggle="modal"
@ -147,7 +143,7 @@
</div> </div>
</header> </header>
<div class="container-fluid" id="main"> <div class="container-fluid" id="main">
<div class="row h-100"> <div class="row h-100" style="overflow:hidden">
<div class="col-2 h-100" id="horiNav"> <div class="col-2 h-100" id="horiNav">
<div class="container-fluid d-flex flex-column h-100"> <div class="container-fluid d-flex flex-column h-100">
<div class="row"> <div class="row">
@ -278,7 +274,7 @@
</div> </div>
</div> </div>
<div id="box" style="overflow:auto; height:100%"> <div id="box" style="overflow:hidden; height:100%">
<div id="contractCode" class="flex-grow-1" style="height:100%"> <div id="contractCode" class="flex-grow-1" style="height:100%">
<div id="textareaDiv" class="col-sm-12" style="width: 100%; height: 100%; padding:0"> <div id="textareaDiv" class="col-sm-12" style="width: 100%; height: 100%; padding:0">
<textarea id="scriptEditor" style="width: 100%; height: 100%" <textarea id="scriptEditor" style="width: 100%; height: 100%"
@ -390,12 +386,35 @@
</div> </div>
<div class="input-group mb-1"> <div class="input-group mb-1">
<div class="btn-group btn-block" role="group"> <div class="btn-group btn-block" role="group">
<input class="form-control input-group-small"
id="createParam"
placeholder="启动参数" class="modal_input"/>
<div class="input-group-text">
<input type="checkbox" id="autoConvertStr"
aria-label="Checkbox for convertParam"
data-toggle="tooltip"
checked
title="" data-original-title="自动将参数转为JSON对象"/>
</div>
</div>
</div>
<div class="input-group mb-1">
<div class="btn-group btn-block" role="group">
<input class="form-control input-group-small"
id="remoteDebugPort"
placeholder="调试端口" class="modal_input"/>
<button class="btn btn-outline-primary" <button class="btn btn-outline-primary"
onclick="startContractAsDebug()" type="button" id="button-debug" onclick="startContractAsDebug(true)" type="button" id="button-debug"
title="调试" data-toggle="tooltip"> title="调试启动" data-toggle="tooltip">
<img alt="Brand" src="./images/onlineide/debug.png" <img alt="Brand" src="./images/onlineide/debug.png"
class="buttonimg"> class="buttonimg">
</button> </button>
<button class="btn btn-outline-primary"
onclick="startContractAsDebug(false)" type="button" id="button-start"
title="启动" data-toggle="tooltip">
<img alt="Brand" src="./images/onlineide/start.png"
class="buttonimg">
</button>
</div> </div>
</div> </div>
<div class="input-group mt-1 mb-3"> <div class="input-group mt-1 mb-3">

BIN
images/bdwarelog.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
images/datanet/repo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
images/datanet/search.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

314
index_datanet.html Normal file
View File

@ -0,0 +1,314 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-cache"/>
<title>数瑞数联网系统</title>
<script src="./jqueryui1.12/jquery-2.1.4.js"></script>
<script src="./js/createWS.js"></script>
<script src="./js/cryptico.js"></script>
<script src="./js/bootstrap.min.js"></script>
<script src="./js/commonutil.js"></script>
<script src="./js/vue.js"></script>
<script src="./client/js/bdwareclient.js"></script>
<script src="./js/sm2.js"></script>
<link href="./css/common.css" rel="stylesheet">
<link href="./css/bootstrap.min.css" rel="stylesheet">
</head>
<body style="background: #2E324C; color: white;">
<div class="modal fade" id="pubkeyDialog" data-backdrop="static">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle" style="color:black;">用户信息</h5>
</div>
<div class="modal-body">
<div class="row" style="padding-left: 16px; padding-right: 16px">
<div class="input-group mb-3">
<div class="input-group-prepend">
<label class="input-group-text" for="localKeyList">本地密钥</label>
</div>
<select class="custom-select"
aria-label="Example select with button addon"
style="appearance: none" v-model="selectedSM2Key"
@change="changeSM2Key($event)">
<option v-for="(item,index) in sm2KeyList" :key="index"
:value='item.id'>{{item.title}}
</option>
</select>
<div class="input-group-append">
<button class="btn btn-outline-primary" for="localKeyList"
v-on:click="exportPubkey">导出密钥
</button>
<button type="button" class="btn btn-outline-primary"
id="generatePubkeyBtn" v-on:click="generatePubkey">生成新密钥
</button>
<button class="btn btn-outline-danger" for="localKeyList"
v-on:click="deletePubkey">删除密钥
</button>
</div>
</div>
<textarea class="form-control mb-3" title="复制密钥,并妥善保存"
id="sm2KeyTextarea" v-model="sm2KeyStr"
style="width: 100%; min-height: 150px; resize:none" rows="" cols="">
</textarea>
<div class="row" style="padding-left: 16px; padding-right: 16px">
<div class="input-group mb-1">
<div class="input-group-prepend">
<label class="input-group-text" for="localKeyList">以上为当前SM2密钥请复制或导出密钥并妥善保存</label>
</div>
<div class="input-group-append">
<button type="button" class="btn btn-primary"
data-dismiss="modal" id="importPubkeyBtn"
v-on:click="importPubkey">确认
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="width: 90%; height:10px; max-width: 1000px; min-width: 850px; margin: 3% auto 0px;">
<header class="" style="float:right">
<div class=" nav navbar-right userName" data-toggle="modal" id="user"
data-target="#pubkeyDialog">当前用户: {{shortName}}
</div>
</header>
</div>
<style>
.halfDiv {
float: left;
width: 100%;
height: 100%;
}
.projectTreeDiv {
height: auto;
padding: 0;
}
.halfDivRight {
float: left;
width: 100%;
height: 100%;
}
.ui-tabs {
padding: 0;
}
.ui-accordion .ui-accordion-content {
padding: 0;
}
#tabs-1 {
display: none;
}
.ui-tabs .ui-tabs-panel {
padding: 0;
}
.context-menu-root {
z-index: 10;
}
#projectDiv {
height: 83%;
width: 20%;
border: 0px solid grey;
float: left;
}
.CodeMirror {
height: auto
}
.logoimg {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
}
input {
height: 32px;
}
.sendTransInput {
background-color: #f0e4e4;
border-radius: 5px;
margin: 5px;
width: 15%;
margin-left: 4%;
border: 0px;
}
.normalDiv {
float: left;
text-align: center;
border-radius: 5px;
margin: 2%;
padding: 5px;
padding-top: 30px;
padding-bottom: 30px;
width: 29%;
cursor: hand;
background: #2E324C;
color: white;
}
.iconimg {
width: auto;
height: auto;
max-width: 48px;
max-height: 48px;
vertical-align: middle;
filter: invert(100%);
}
</style>
<div id="main" style="background: #2E324C; color: white;">
<input id="urlInput" style="display:none"/>
<input id="selectContract" style="display:none"/>
<div
style="width: 90%; max-width: 1000px; min-width: 850px; margin: 0 auto; margin-top: 3%;">
<div style="width: 20%; float: right; margin-right: 0%">
<img src="./images/logo.png" class="logoimg"></img>
</div>
<div
style="width: fit-content; margin: 0; font-size: 200%; background-color: white; color: black; border-radius: 10px; float: left; padding: 10px;">
&nbsp;&nbsp;导航&nbsp;&nbsp;
</div>
<div
style="width: 100%; margin-top: 2%; float: left; background-color: white; border-radius: 10px;">
<div class="normalDiv" onclick="jumpTo('./DOIP/GlobalRouter/assets/#')">
<img src="./images/datanet/identifier.png" class="iconimg"></img><br/>
<span style="vertical-align: middle">标识解析系统</span>
</div>
<div class="normalDiv" onclick="jumpTo('./DOIP/Registry/assets/#')">
<img src="./images/datanet/search.png" class="iconimg"></img><br/>
<span style="vertical-align: middle">数字对象注册表</span>
</div>
<div class="normalDiv"
onclick="jumpTo('./client/bdwareclient.html?self=true&contract=RepositoryExample')">
<img src="./images/datanet/repo.png" class="iconimg"></img><br/>
<span style="vertical-align: middle">数字对象仓库</span>
</div>
</div>
<br/>
<div style="width: fit-content; margin-top: 2%; float: right; border-radius: 10px; font-size: 50%">
Icons made by
<a href="https://www.flaticon.com/authors/monkik"
title="monkik" style="color: white;">monkik</a>
from
<a href="https://www.flaticon.com/" title="Flaticon"
style="color: white;">www.flaticon.com</a>
</div>
</div>
</div>
<script>
jumpTo = function (addr) {
document.location.href = addr;
};
const isBaaS = false
const h = document.body.clientHeight
- $("header").css("height").replace("px", "")
$("#main").css("height", h + "px");
function init() {
const urlParams = getRequestParameters();
initVue();
initGlobal(urlParams);
if (global.urlparam["noRender"] === "true") {
switchRenderBtn.innerHTML = "加载界面";
}
global.cbs = {};
const urlInput = $("#urlInput");
if (global.urlparam["self"] === "true") {
if (document.location.href.startsWith("http")) {
let path = document.location.origin + document.location.pathname;
path = path.replace("/client/bdwareclient.html", "");
urlInput[0].value = path.replace("http",
"ws");
if (global.urlparam["withNodeCenterWS"] === "true") {
urlInput[0].value += "/NodeCenterWS";
}
connectNode();
}
} else if (global.urlparam["nodeAddr"]) {
urlInput[0].value = global.urlparam["nodeAddr"];
connectNode();
} else {
const lastNode = localStorage.getItem("lastNode");
if (lastNode) {
urlInput[0].value = lastNode;
connectNode();
}
}
}
init();
$(document).ready(function(){
if(localStorage.getItem("PrivKeyList") == null || localStorage.getItem("agent") == null){
$('#pubkeyDialog').modal();
}else{
var div = document.getElementById("user");
// div.setAttribute("style","display:none");
}
})
$('#pubkeyDialog').on('hide.bs.modal', function () {
var div = document.getElementById("user");
var lst = JSON.parse(localStorage.getItem("PrivKeyList"));
lst.pop();
localStorage.setItem("PrivKeyList",JSON.stringify(lst));
});
</script>
</body>
</html>
<!--
============ NodeCenter的一些链接其中39.106.6.6监听的是1817端口。 查看节点是否启动
http://39.106.6.6:18001/SCIDE/NodeCenter?action=ping 查看NodeCenter当前连接的节点
http://39.106.6.6:18001/SCIDE/NodeCenter?action=listCMInfo
刷新NodeCenter已连接节点的合约数据
http://39.106.6.6:18001/SCIDE/NodeCenter?action=updateContract
检查节点是否已连接,删除断开连接的节点
http://39.106.6.6:18001/SCIDE/NodeCenter?action=checkAlive
获取某个合约的日志数量
http://39.106.6.6:18001/SCIDE/NodeCenter?action=getLogSize&contractID=BDCoin
获取某个合约的日志从第offset条取count条
http://39.106.6.6:18001/SCIDE/NodeCenter?action=requestLog&contractID=BDCoin&offset=16&count=10
获取某个合约的日志取最新的count条
http://39.106.6.6:18001/SCIDE/NodeCenter?action=requestLastLog&contractID=BDCoin&count=10
-->

1333
index_gate.html Normal file

File diff suppressed because it is too large Load Diff

165
index_gateway.html Normal file
View File

@ -0,0 +1,165 @@
<html>
<header>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Cache-Control" content="no-cache"/>
<title>北大数瑞数联网网关</title>
<script src="./jqueryui1.12/jquery-2.1.4.js"></script>
<style>
.halfDiv {
float: left;
width: 100%;
height: 100%;
}
.projectTreeDiv {
height: auto;
padding: 0;
}
.halfDivRight {
float: left;
width: 100%;
height: 100%;
}
.ui-tabs {
padding: 0;
}
.ui-accordion .ui-accordion-content {
padding: 0;
}
#tabs-1 {
display: none;
}
.ui-tabs .ui-tabs-panel {
padding: 0;
}
.context-menu-root {
z-index: 10;
}
#projectDiv {
height: 83%;
width: 20%;
border: 0px solid grey;
float: left;
}
.CodeMirror {
height: auto
}
.logoimg {
width: auto;
height: auto;
max-width: 100%;
max-height: 100%;
}
input {
height: 32px;
}
.sendTransInput {
background-color: #f0e4e4;
border-radius: 5px;
margin: 5px;
width: 15%;
margin-left: 4%;
border: 0px;
}
.normalDiv {
float: left;
text-align: center;
border-radius: 5px;
margin: 2%;
padding: 5px;
padding-top: 30px;
padding-bottom: 30px;
width: 45%;
cursor: hand;
background: #2E324C;
color: white;
}
.iconimg {
width: auto;
height: auto;
max-width: 48px;
max-height: 48px;
vertical-align: middle;
filter: invert(100%);
}
</style>
</header>
<body style="background: #2E324C; color: white;">
<div
style="width: 90%; max-width: 1000px; min-width: 850px; margin: 0 auto; margin-top: 3%;">
<div style="width: 20%; float: right; margin-right: 0%">
<img src="./images/logo.png" class="logoimg"></img>
</div>
<div
style="width: fit-content; margin: 0; font-size: 200%; background-color: white; color: black; border-radius: 10px; float: left; padding: 10px;">
&nbsp;&nbsp;导航&nbsp;&nbsp;
</div>
<div
style="width: 100%; margin-top: 2%; float: left; background-color: white; border-radius: 10px;">
<div class="normalDiv" onclick="jumpTo('./OnlineIDE.html')">
<img src="./images/index/web.png" class="iconimg"></img><br/>
<span style="vertical-align: middle">网关接入管理</span>
</div>
<div class="normalDiv" onclick="jumpTo('./NodePortal_Gateway.html')">
<img src="./images/index/analysis.png" class="iconimg"></img><br/>
<span style="vertical-align: middle">网关配置管理</span>
</div>
</div>
<script>
jumpTo = function (addr) {
document.location.href = addr;
};
</script>
<br/>
<div style="width: fit-content; margin-top: 2%; float: right; border-radius: 10px; font-size: 50%">
Icons made by
<a href="https://www.flaticon.com/authors/monkik"
title="monkik" style="color: white;">monkik</a>
from
<a href="https://www.flaticon.com/" title="Flaticon"
style="color: white;">www.flaticon.com</a>
</div>
</div>
</body>
</html>
<!--
============ NodeCenter的一些链接其中39.106.6.6监听的是1817端口。 查看节点是否启动
http://39.106.6.6:18001/SCIDE/NodeCenter?action=ping 查看NodeCenter当前连接的节点
http://39.106.6.6:18001/SCIDE/NodeCenter?action=listCMInfo
刷新NodeCenter已连接节点的合约数据
http://39.106.6.6:18001/SCIDE/NodeCenter?action=updateContract
检查节点是否已连接,删除断开连接的节点
http://39.106.6.6:18001/SCIDE/NodeCenter?action=checkAlive
获取某个合约的日志数量
http://39.106.6.6:18001/SCIDE/NodeCenter?action=getLogSize&contractID=BDCoin
获取某个合约的日志从第offset条取count条
http://39.106.6.6:18001/SCIDE/NodeCenter?action=requestLog&contractID=BDCoin&offset=16&count=10
获取某个合约的日志取最新的count条
http://39.106.6.6:18001/SCIDE/NodeCenter?action=requestLastLog&contractID=BDCoin&count=10
-->

Binary file not shown.

9214
jqueryui1.12/jquery-2.1.4.js vendored Executable file → Normal file

File diff suppressed because one or more lines are too long

View File

@ -10,11 +10,12 @@ function loadNodeConfig(event) {
function onLoadNodeConfig(data) { function onLoadNodeConfig(data) {
global.config = data.data; global.config = data.data;
showNodeConfig(data);
if (!global.centerportalws) { if (!global.centerportalws) {
let port = global.config.nodeCenter.replace(/.*:/g, ""); let url = global.config.nodeCenterWS;
const len = global.config.nodeCenter.length - port.length; if (window.location.origin.startsWith("https")){
port = port - 1; url = url.replace("ws://","wss://");
let url = global.config.nodeCenter.substring(0, len) + port + "/NodeCenterWS"; }
if (window.location.origin === "https://contract.internetapi.cn") { if (window.location.origin === "https://contract.internetapi.cn") {
url = "wss://cluster.contract.internetapi.cn/NodeCenterWS"; url = "wss://cluster.contract.internetapi.cn/NodeCenterWS";
} }
@ -28,7 +29,7 @@ function onLoadNodeConfig(data) {
})); }));
}, centerportalWSHandler); }, centerportalWSHandler);
} }
showNodeConfig(data);
} }
function showNodeConfig(data) { function showNodeConfig(data) {
@ -38,12 +39,12 @@ function showNodeConfig(data) {
$("#nodeNameInput")[0].value = global.config.nodeName; $("#nodeNameInput")[0].value = global.config.nodeName;
$("#ipPortInput")[0].value = global.config.ipPort; $("#ipPortInput")[0].value = global.config.ipPort;
$("#doipConfigInput")[0].value = global.config.doipConfig; $("#doipConfigInput")[0].value = global.config.doipConfig;
$("#masterAddrInput")[0].value = global.config.masterAddress;
$("#peerIDInput")[0].value = global.config.peerID;
$("#licence")[0].value = global.config.licence $("#licence")[0].value = global.config.licence
$("#expireTime").html(global.config.expireTime); $("#expireTime").html(global.config.expireTime);
$("#yjsInput")[0].value = global.config.yjsPath; $("#yjsInput")[0].value = global.config.yjsPath;
$("#nodePubKeyInput")[0].value = global.config.nodePubKey;
nodeCenterInputEl[0].value = global.config.nodeCenter; nodeCenterInputEl[0].value = global.config.nodeCenter;
$("#nodeCenterWSInput")[0].value = global.config.nodeCenterWS;
if (global.config.clusterConnected && global.config.clusterConnected === "true") { if (global.config.clusterConnected && global.config.clusterConnected === "true") {
nodeCenterInputEl.css("color", "green"); nodeCenterInputEl.css("color", "green");
} else { } else {
@ -114,14 +115,6 @@ function changeDOIPConfig(event) {
})); }));
} }
function changeMasterAddress(event) {
global.wssocket.send(JSON.stringify({
action: 'updateConfig',
key: 'masterAddress',
val: $("#masterAddrInput")[0].value
}));
}
function onChangeNodeName(data) { function onChangeNodeName(data) {
console.log("onChangeNodeName", data); console.log("onChangeNodeName", data);
//$("#nodeNameInput")[0].value = data; //$("#nodeNameInput")[0].value = data;
@ -167,6 +160,14 @@ function changeNodeCenter(event) {
})); }));
} }
function changeNodeCenterWS(event) {
console.log("changeNodeCenterWS");
global.wssocket.send(JSON.stringify({
action: 'changeNodeCenterWS',
data: $("#nodeCenterWSInput")[0].value
}));
}
function onChangeNodeCenter(event) { function onChangeNodeCenter(event) {
// console.log("onChangeNodeCenter", data); // console.log("onChangeNodeCenter", data);
myToast("成功", "修改NodeCenter成功") myToast("成功", "修改NodeCenter成功")
@ -262,7 +263,7 @@ function showNodeTrustUnits(obj) {
} }
}; };
let html = "<table class='table display row-border' id='trustNodesUnitTabDivTab'>" + let html = "<table class='table display row-border' id='trustNodesUnitTabDivTab'>" +
"<thead><tr><th>序号</th><th>ID</th><th>类型</th><th>创建者</th><th>节点数目</th><th>节点公钥</th></tr></thead>" + "<thead><tr><th>序号</th><th>ID</th><th>类型</th><th>创建者</th><th>节点数目</th><th>节点列表</th></tr></thead>" +
"<tbody>"; "<tbody>";
const tableTail = "</tbody></table>"; const tableTail = "</tbody></table>";
if (global.nodeUnits) { if (global.nodeUnits) {
@ -275,13 +276,13 @@ function showNodeTrustUnits(obj) {
<td>TCP</td> <td>TCP</td>
<td>${global.nodeUnits[i].key.substring(0, at_ - 1)}</td> <td>${global.nodeUnits[i].key.substring(0, at_ - 1)}</td>
<td>${nodes.length}</td> <td>${nodes.length}</td>
<td>${JSON.stringify(nodes)}</td> <td>${nodes.map(x => x.nodeName).sort().join(',')}</td>
</tr>` </tr>`
} }
} }
if (global.p2pNodes) { if (global.p2pNodes) {
html += "<tr><td>" + (i+1) + "</td> <td>P2PUnit</td><td>P2P</td> <td>bdledger</td> <td>" + global.p2pNodes.length + "</td> <td>" + JSON.stringify(global.p2pNodes) + "</td> </tr>"; html += "<tr><td>" + (i + 1) + "</td> <td>P2PUnit</td><td>P2P</td> <td>bdledger</td> <td>" + global.p2pNodes.length + "</td> <td>" + JSON.stringify(global.p2pNodes) + "</td> </tr>";
} }
html += tableTail; html += tableTail;
$("#trustNodesUnitTabDiv").html(html); $("#trustNodesUnitTabDiv").html(html);
$("#trustNodesUnitTabDivTab").DataTable({ $("#trustNodesUnitTabDivTab").DataTable({

View File

@ -102,8 +102,6 @@ function drawConInfoTable(table) {
<th>状态</th> <th>状态</th>
<th>端口</th> <th>端口</th>
<th>类型</th> <th>类型</th>
<th>通讯</th>
<th>共识</th>
<!--<th>返回方式</th>--> <!--<th>返回方式</th>-->
<th>次数</th> <th>次数</th>
<th>流量</th> <th>流量</th>
@ -125,19 +123,20 @@ ${table[i].name}
<td>${table[i]['contractStatus']}</td> <td>${table[i]['contractStatus']}</td>
<td>${table[i].port || '-'}</td> <td>${table[i].port || '-'}</td>
<td>${table[i].type}</td> <td>${table[i].type}</td>
<td>${table[i]['networkType'] ? "P2P" : "TCP"}</td> <!--<td>${table[i]['networkType'] ? "P2P" : "TCP"}</td>-->
<td>${table[i]['consensusType'] ? CONSENSUS_TABLE[table[i]['consensusType']] : '无'}</td> <!--<td>${table[i]['consensusType'] ? CONSENSUS_TABLE[table[i]['consensusType']] : '无'}</td>-->
<!--<td>${table[i].responseType ? RESPONSE_TYPE_TABLE[table[i].responseType] : '-'}</td>--> <!--<td>${table[i].responseType ? RESPONSE_TYPE_TABLE[table[i].responseType] : '-'}</td>-->
<td>${table[i].times}</td> <td>${table[i].times}</td>
<td>${table[i]['traffic'] || '-'}</td> <td>${table[i]['traffic'] || '-'}</td>
<td>${table[i].storage || '-'}</td> <td>${table[i].storage || '-'}</td>
<td style='padding:2px 12px 2px 12px'> <td style='padding:2px 12px 2px 12px'>
<button onclick="stopContractByID('${table[i].id}')" class="btn btn-secondary">停止</button> <button onclick="stopContractByID('${table[i].id}')" class="btn btn-secondary">停止</button>
<button onclick="restartContractByID('${table[i].id}')" class="btn btn-secondary">重启</button>
</td> </td>
</tr>` </tr>`
} }
html += tableTail; html += tableTail;
html = "<h5 class='card-title'>合约实例列表</h5>" + html; html = "<h5 class='card-title'>合约实例列表</h5>" + "<button onclick='pruneKilledContract()' class='btn btn-secondary' style='float:right'>清除已停合约</button>"+html;
ciTabDiv.html(html); ciTabDiv.html(html);
$("#ciTabDivTab").DataTable( $("#ciTabDivTab").DataTable(
@ -184,6 +183,29 @@ function stopContractByID(contractID) {
}); });
} }
function pruneKilledContract() {
$("#dialogBodyDiv").html("是否清除已停合约" );
showDialog("请确认", function () {
global.wssocket.send(JSON.stringify({
action: 'pruneKilledContract',
requestID: new Date().getTime().toString()
}));
setTimeout(listContractProcess,1000);
});
}
function restartContractByID(contractID) {
$("#dialogBodyDiv").html("是否重启合约ContractID" + contractID);
showDialog("请确认", function () {
global.wssocket.send(JSON.stringify({
action: 'restartContractProcess',
requestID: new Date().getTime().toString(),
id: contractID
}));
});
}
function drawContractInstanceStatusPie(table) { function drawContractInstanceStatusPie(table) {
const ciStatusPieDiv = $("#ciStatusPieDiv") const ciStatusPieDiv = $("#ciStatusPieDiv")
if (ciStatusPieDiv.css("height") === "0px") { if (ciStatusPieDiv.css("height") === "0px") {
@ -398,14 +420,14 @@ function executeContract() {
request.pubkey = global.sm2Key.publicKey; request.pubkey = global.sm2Key.publicKey;
request.isDebug = executeContractAsDebug.checked; request.isDebug = executeContractAsDebug.checked;
console.log(request.arg); console.log(request.arg);
const gasLimit = $('#gasLimit').val()/1; const gasLimit = $('#gasLimit').val() / 1;
var toSign = request.contractID + "|" var toSign = request.contractID + "|"
+ request.operation + "|" + arg ; + request.operation + "|" + request.arg;
if (gasLimit>0){ if (gasLimit > 0) {
request.gasLimit = gasLimit; request.gasLimit = gasLimit;
toSign+= "|" + gasLimit; toSign += "|" + gasLimit;
} }
toSign+= "|" + global.sm2Key.publicKey; toSign += "|" + global.sm2Key.publicKey;
request.signature = sm2.doSignature( request.signature = sm2.doSignature(
toSign, toSign,
global.sm2Key.privateKey, global.sm2Key.privateKey,
@ -431,9 +453,9 @@ function onExecuteResult(obj) {
$("#responseArea")[0].value = result.result; $("#responseArea")[0].value = result.result;
} }
$("#responseID").html(`请求ID:${obj['responseID']}`); $("#responseID").html(`请求ID:${obj['responseID']}`);
var gasInfo=""; var gasInfo = "";
if (obj.executionGas!=undefined && obj.executionGas>0) if (obj.executionGas != undefined && obj.executionGas > 0)
gasInfo="<br>"+obj.executionGas+"gas"; gasInfo = "<br>" + obj.executionGas + "gas";
$("#responseTime").html(`响应时间:${obj['executeTime']}ms${gasInfo}${styleTail}`); $("#responseTime").html(`响应时间:${obj['executeTime']}ms${gasInfo}${styleTail}`);
} catch (e) { } catch (e) {
$("#responseStatus").html("执行状态Failed"); $("#responseStatus").html("执行状态Failed");
@ -443,6 +465,156 @@ function onExecuteResult(obj) {
} }
} }
function getMask() {
const argDiv = $('#maskArg')[0];
const request = {};
request.action = "getMask";
request.requestID = new Date().getTime() + "";
request.contractID = global.contractInstance;
const operation = $("#selectContractFunction")[0].value;
if (operation === " " && !operation) {
myToast("执行合约", "请选择合约方法!");
return;
}
//request.operation = operation;
request.arg = argDiv.value;
request.pubkey = global.sm2Key.publicKey;
//request.isDebug = executeContractAsDebug.checked;
console.log(request.arg);
//const gasLimit = $('#gasLimit').val()/1;
var toSign = request.contractID + "|"
+ request.operation + "|" + arg;
/*if (gasLimit>0){
request.gasLimit = gasLimit;
toSign+= "|" + gasLimit;
}*/
toSign += "|" + global.sm2Key.publicKey;
request.signature = sm2.doSignature(
toSign,
global.sm2Key.privateKey,
{hash: true, der: true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
}
function setMask() {
const argDiv = $('#maskArg')[0];
const request = {};
request.action = "setMask";
request.requestID = new Date().getTime() + "";
request.contractID = global.contractInstance;
const operation = $("#selectContractFunction")[0].value;
if (operation === " " && !operation) {
myToast("执行合约", "请选择合约方法!");
return;
}
//request.operation = operation;
request.arg = argDiv.value;
request.pubkey = global.sm2Key.publicKey;
//request.isDebug = executeContractAsDebug.checked;
console.log(request.arg);
//const gasLimit = $('#gasLimit').val()/1;
var toSign = request.contractID + "|"
+ request.operation + "|" + arg;
/*if (gasLimit>0){
request.gasLimit = gasLimit;
toSign+= "|" + gasLimit;
}*/
toSign += "|" + global.sm2Key.publicKey;
request.signature = sm2.doSignature(
toSign,
global.sm2Key.privateKey,
{hash: true, der: true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
}
function onGetMask(obj) {
console.log("onGetMask obj.data", obj.data);
try {
const result = obj;
$("#maskResponseArea")[0].value = JSON.stringify(obj.data);
} catch (e) {
$("#maskResponseArea")[0].value = JSON.stringify(obj.data);
}
}
function getMock() {
const argDiv = $('#mockArg')[0];
const request = {};
request.action = "getMock";
request.requestID = new Date().getTime() + "";
request.contractID = global.contractInstance;
const operation = $("#selectContractFunction")[0].value;
if (operation === " " && !operation) {
myToast("执行合约", "请选择合约方法!");
return;
}
//request.operation = operation;
request.arg = argDiv.value;
request.pubkey = global.sm2Key.publicKey;
//request.isDebug = executeContractAsDebug.checked;
console.log(request.arg);
//const gasLimit = $('#gasLimit').val()/1;
var toSign = request.contractID + "|"
+ request.operation + "|" + arg;
/*if (gasLimit>0){
request.gasLimit = gasLimit;
toSign+= "|" + gasLimit;
}*/
toSign += "|" + global.sm2Key.publicKey;
request.signature = sm2.doSignature(
toSign,
global.sm2Key.privateKey,
{hash: true, der: true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
}
function setMock() {
const argDiv = $('#mockArg')[0];
const request = {};
request.action = "setMock";
request.requestID = new Date().getTime() + "";
request.contractID = global.contractInstance;
const operation = $("#selectContractFunction")[0].value;
if (operation === " " && !operation) {
myToast("执行合约", "请选择合约方法!");
return;
}
//request.operation = operation;
request.arg = argDiv.value;
request.pubkey = global.sm2Key.publicKey;
//request.isDebug = executeContractAsDebug.checked;
console.log(request.arg);
//const gasLimit = $('#gasLimit').val()/1;
var toSign = request.contractID + "|"
+ request.operation + "|" + arg;
/*if (gasLimit>0){
request.gasLimit = gasLimit;
toSign+= "|" + gasLimit;
}*/
toSign += "|" + global.sm2Key.publicKey;
request.signature = sm2.doSignature(
toSign,
global.sm2Key.privateKey,
{hash: true, der: true});
localStorage.setItem("persisArg", JSON.stringify(request));
global.wssocket.send(JSON.stringify(request));
}
function onGetMock(obj) {
console.log("onGetMask obj.data", obj.data);
try {
const result = obj;
$("#mockResponseArea")[0].value = JSON.stringify(obj.data);
} catch (e) {
$("#mockResponseArea")[0].value = JSON.stringify(obj.data);
}
}
function onHashResult(obj) { function onHashResult(obj) {
$("#hashResult").html("数链指纹:" + obj.data); $("#hashResult").html("数链指纹:" + obj.data);
} }
@ -502,7 +674,7 @@ function drawCPTable(table) {
<td>${i + 1}</td> <td>${i + 1}</td>
<td>${table[i].pid}</td> <td>${table[i].pid}</td>
<td>${table[i]['isLeak']}</td> <td>${table[i]['isLeak']}</td>
<td>${new Date(table[i]['cpuStart']).toLocaleString()}/td> <td>${new Date(table[i]['cpuStart']).toLocaleString()}</td>
<td>${table[i]['cpuTotal']}</td> <td>${table[i]['cpuTotal']}</td>
<td>${table[i]['cpuSys']}</td> <td>${table[i]['cpuSys']}</td>
<td>${(table[i]['resident'] / (1024 * 1024)).toFixed(2)}MB</td> <td>${(table[i]['resident'] / (1024 * 1024)).toFixed(2)}MB</td>

View File

@ -200,6 +200,12 @@ function WSHandler(event) {
case 'onListLeakContractProcess': case 'onListLeakContractProcess':
onListLeakContractProcess(obj); onListLeakContractProcess(obj);
break; break;
case 'onGetMask':
onGetMask(obj);
break;
case 'onGetMock':
onGetMock(obj);
break;
default: default:
displayOutput(obj); displayOutput(obj);
break; break;
@ -268,7 +274,7 @@ function getControlWsUrl(host) {
} }
path += "SCExecutor"; path += "SCExecutor";
if (isBaaS) { if (isBaaS) {
path = path.replace("ide/", "") path = "/SCIDE/SCExecutor"
} }
return prefix + host + path; return prefix + host + path;
} }
@ -276,6 +282,7 @@ function getControlWsUrl(host) {
function initWSocket() { function initWSocket() {
const host = document.location.host; const host = document.location.host;
const url = getControlWsUrl(host); const url = getControlWsUrl(host);
document.title = `数瑞智能合约节点管理中心(${host}`;
// console.log("connect ws:" + url); // console.log("connect ws:" + url);
global.wssocket = createWssocket(url, function () { global.wssocket = createWssocket(url, function () {
getSession(); getSession();
@ -309,8 +316,8 @@ function onNodeLogin(data) {
console.log("onNodeLogin"); console.log("onNodeLogin");
pubkeyDialogVue.myRole = data.data; pubkeyDialogVue.myRole = data.data;
global.myRole = data.data; global.myRole = data.data;
loadUserMan();
loadNodeConfig(); loadNodeConfig();
loadUserMan();
} }
function apply() { function apply() {
@ -517,7 +524,4 @@ function addNodeUnit(obj) {
} }
option.value = obj.key; option.value = obj.key;
x.add(option, null); x.add(option, null);
} }

View File

@ -127,21 +127,14 @@ function getControlWsUrl(host) {
if (document.location.href.startsWith("https")) { if (document.location.href.startsWith("https")) {
prefix = "wss://"; prefix = "wss://";
} }
let path = document.location.pathname.lastIndexOf("/"); path = "/SCIDE/SCExecutor";
path = document.location.pathname.substr(0, path + 1);
if (path.indexOf("SCIDE") < 0) {
path += "SCIDE/";
}
path += "SCExecutor";
if (isBaaS) {
path = path.replace("ide/", "")
}
return prefix + host + path; return prefix + host + path;
} }
function initWSocket() { function initWSocket() {
console.log("[OnlineIDE.js] initWSocket : "); console.log("[OnlineIDE.js] initWSocket : ");
let host = document.location.host; let host = document.location.host;
document.title = `数瑞智能合约在线编辑器(${host}`
let url = getControlWsUrl( let url = getControlWsUrl(
global.urlparam && global.urlparam['nodeAddr'] ? global.urlparam['nodeAddr'] : host); global.urlparam && global.urlparam['nodeAddr'] ? global.urlparam['nodeAddr'] : host);
// console.log("connect ws:" + url); // console.log("connect ws:" + url);
@ -360,12 +353,12 @@ function initResponseAndOutputArea() {
function onExecuteResult(obj) { function onExecuteResult(obj) {
const executeResultTitleEl = $("#executeResultTitle"); const executeResultTitleEl = $("#executeResultTitle");
const data = obj; const data = obj;
var sytleTail = "未知格式"; var styleTail = "未知格式";
if (data.result==undefined) { if (data.result==undefined) {
styleTail = "Undefined"; styleTail = "Undefined";
data.result = ""; data.result = "";
} else if (data.result instanceof Object) { } else if (data.result instanceof Object) {
sytleTail = "JSON格式"; styleTail = "JSON格式";
data.result =JSON.stringify(data.result); data.result =JSON.stringify(data.result);
} else if (typeof data.result == 'string') { } else if (typeof data.result == 'string') {
styleTail = "字符串格式"; styleTail = "字符串格式";

View File

@ -75,9 +75,7 @@ var getControlWsUrl = function (host) {
var prefix = "ws://"; var prefix = "ws://";
if (document.location.href.startsWith("https")) if (document.location.href.startsWith("https"))
prefix = "wss://"; prefix = "wss://";
var path = document.location.pathname.lastIndexOf("/"); var path = "/SCIDE/SCExecutor";
path = document.location.pathname.substr(0, path + 1);
path += "SCExecutor";
return prefix + host + path; return prefix + host + path;
}; };
var initWSocket = function () { var initWSocket = function () {

View File

@ -120,9 +120,8 @@ var switchPeriod = function(per) {
return ""; return "";
} }
}; };
// 本地启动 // 本地启动
var startContractAtSlave = function() { var startContractAtSlave = function(isDebug) {
//this is for fixed contract,not for the unit contract //this is for fixed contract,not for the unit contract
var period = $("#selectDumpPeriod")[0].value; var period = $("#selectDumpPeriod")[0].value;
if (period == "选择状态保存模式") { if (period == "选择状态保存模式") {
@ -131,10 +130,29 @@ var startContractAtSlave = function() {
} }
var dumpPeriod = switchPeriod(period); var dumpPeriod = switchPeriod(period);
var project = global.ypkName; var project = global.ypkName;
$("#result")[0].innerHTML="正在启动,请稍候"; $("#result")[0].innerHTML="正在启动,请稍候";
var request = {}; var request = {};
request.action = "startContractByYPK"; request.action = "startContractByYPK";
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{
}
}
if (remoteDebugPort.value !='') {
request.remoteDebugPort = remoteDebugPort.value;
}
request.isDebug = isDebug;
request.dumpPeriod = dumpPeriod; request.dumpPeriod = dumpPeriod;
request.isPrivate = global.ypkIsPrivate; request.isPrivate = global.ypkIsPrivate;
request.owner = global.sm2Key.publicKey; request.owner = global.sm2Key.publicKey;
@ -158,39 +176,60 @@ var onStartContract = function(obj) {
}; };
// 集群启动合约 // 集群启动合约
var startContractUnits = function(place) { function startContractUnits(place) {
// ZYX // ZYX
var unitsID = $("#selectUnits")[0].value.split("_")[1]; const unitsID = $("#selectUnits")[0].value.split("_")[1];
if(unitsID == undefined || unitsID == "选择节点集群"){ if (!unitsID || unitsID === "选择节点集群") {
myToast("提示","请选择节点集群!"); myToast("提示", "请选择节点集群!");
return;
}
var peersID = "";
for ( var i in global.units[unitsID]) {
peersID += global.units[unitsID][i].pubKey + ",";
}
var request = {};
request.action = "startContractMultiPoint";
request.peersID = peersID;
request.type = $("#sequence")[0].value;
console.log(request.type);
if (request.type==0){
myToast("提示","请选择集群合约模式!");
return; return;
}
let peersID = "";
for (let i in global.units[unitsID]) {
peersID += global.units[unitsID][i].pubKey + ",";
}
const request = {};
request.action = "startContractMultiPoint";
request.peersID = peersID;
request.type = $("#sequence")[0].value;
console.log(request.type);
if (request.type == 0) {
myToast("提示", "请选择集群合约模式!");
return;
}
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
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{
}
} }
request.projectName = global.ypkName; console.log(request);
if (request.projectName==undefined || request.projectName == "请选择ypk文件"){ global.wssocket.send(JSON.stringify(request));
myToast("提示","请选择合约!"); }
return;
}
request.isPrivate = global.ypkIsPrivate;
request.sponsorPeerID = global.peerID; //peerID of the node
console.log(request);
global.wssocket.send(JSON.stringify(request));
};
var onStartTrustfulContract = function(obj) { var onStartTrustfulContract = function(obj) {
console.log(obj); console.log(obj);

View File

@ -62,7 +62,15 @@ function initVue() {
newKey.id = this.sm2KeyList.length; newKey.id = this.sm2KeyList.length;
newKey.title = headerVue.shortName; newKey.title = headerVue.shortName;
newKey.sm2Key = this.sm2KeyStr; newKey.sm2Key = this.sm2KeyStr;
this.sm2KeyList.push(newKey); var exist = false;
for (var i=0;i<this.sm2KeyList.length;i++){
var iterKey = this.sm2KeyList[i];
if (iterKey.sm2Key==newKey.sm2Key)
exist = true;
}
if (!exist)
this.sm2KeyList.push(newKey);
localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList)); localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList));
getSession(); getSession();
listProjects("priv"); listProjects("priv");

View File

@ -176,8 +176,6 @@ var getControlWsUrl = function(host) {
var prefix = "ws://"; var prefix = "ws://";
if (document.location.href.startsWith("https")) if (document.location.href.startsWith("https"))
prefix = "wss://"; prefix = "wss://";
var path = document.location.pathname.lastIndexOf("/"); var path = "/SCIDE/SCExecutor";
path = document.location.pathname.substr(0, path + 1);
path += "SCExecutor";
return prefix + host + path; return prefix + host + path;
}; };

View File

@ -43,7 +43,7 @@ function startContract() {
global.wssocket.send(JSON.stringify(request)); global.wssocket.send(JSON.stringify(request));
} }
function startContractAsDebug() { function startContractAsDebug(isDebug) {
const key = pubkeyDialogVue.sm2KeyList[pubkeyDialogVue.selectedSM2Key]; const key = pubkeyDialogVue.sm2KeyList[pubkeyDialogVue.selectedSM2Key];
const sm2Key = JSON.parse(key.sm2Key); const sm2Key = JSON.parse(key.sm2Key);
const projectId = $("#selectedProject")[0].value; const projectId = $("#selectedProject")[0].value;
@ -51,9 +51,28 @@ function startContractAsDebug() {
startResult.innerText = "正在以调试模式启动合约:" + project; startResult.innerText = "正在以调试模式启动合约:" + project;
const request = {}; const request = {};
request.action = "startContractAsDebug"; request.action = "startContract";
request.isPrivate = $("#privateprojecttab").hasClass("active"); request.isPrivate = $("#privateprojecttab").hasClass("active");
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{
}
}
request.isDebug = isDebug;
if (remoteDebugPort.value !='') {
request.remoteDebugPort = remoteDebugPort.value;
}
request.owner = sm2Key.publicKey; request.owner = sm2Key.publicKey;
request.requestID = new Date().getTime() + ""; request.requestID = new Date().getTime() + "";
// request.contractid = $("#tabdiv")[0].value; // request.contractid = $("#tabdiv")[0].value;
@ -173,9 +192,13 @@ function importContractInstanceCodeByDOI() {
} }
function openInClient() { function openInClient() {
let path = document.location.pathname.lastIndexOf("/ide");
if (path > 0)
path = document.location.pathname.substr(0, path + 1);
else path = "/";
window.open(isBaaS ? window.open(isBaaS ?
`${location.origin}/client/BaaSClient.html${location.search}` : `${location.origin}${path}client/BaaSClient.html${location.search}` :
`${location.origin}/client/bdwareclient.html?self=true&` + `${location.origin}${path}client/bdwareclient.html?self=true&` +
`contract=${mainVue.contracts[selectedContract.value].id}`); `contract=${mainVue.contracts[selectedContract.value].id}`);
} }
@ -218,15 +241,15 @@ function executeContract() {
request.contractID = contract.id; request.contractID = contract.id;
request.operation = contract.exportedFunctions[selectedFunction.value].functionName; request.operation = contract.exportedFunctions[selectedFunction.value].functionName;
const arg = executeContractArgInput.value; const arg = executeContractArgInput.value;
const gasLimit = $('#gasLimit').val()/1; const gasLimit = $('#gasLimit').val() / 1;
request.pubkey = sm2Key.publicKey; request.pubkey = sm2Key.publicKey;
var toSign = request.contractID + "|" let toSign = request.contractID + "|"
+ request.operation + "|" + arg ; + request.operation + "|" + arg;
if (gasLimit>0){ if (gasLimit > 0) {
request.gasLimit = gasLimit; request.gasLimit = gasLimit;
toSign+= "|" + gasLimit; toSign += "|" + gasLimit;
} }
toSign+= "|" + sm2Key.publicKey; toSign += "|" + sm2Key.publicKey;
request.signature = sm2.doSignature( request.signature = sm2.doSignature(
toSign, toSign,
sm2Key.privateKey, sm2Key.privateKey,