bdcontract-doc/markdown_trans/markdown/ContractAPI.md
2022-08-05 18:29:30 +08:00

97 KiB
Raw Permalink Blame History

BDContract SDK

In addition to using the visual smart contract online IDE, users can also use the WebSocket interface, Http interface, Bash interface to start and run the contract.


WebSocketSDK download and installation

The contract SDK provides a javascript version and a Java version of the client.

The download links of Java client are :java source and jar refer to Readme.md and test cases in java_Source.

The javascript download link is :js SDK Built-in SM2 encryption library link :sm2 SDK

Establish a connection

Establish a WebSocket connection to the node server.

parameter

field value
url If http is used, the prefix is ws://, for example, "ws://localhost:1717/SCIDE/SCExecutor". If https is used, the prefix is wss://.
msgHandler The callback function after receiving the server WebSocket reply can be written by the user, or refer to the example provided below

Sample request

var url = "ws://127.0.0.1:1717/SCIDE/SCExecutor";//与Slave节点建立连接
//var url = "ws://127.0.0.1:1718/NodeCenterWS";//与Manager节点建立连接
var msgHandler = function(m){
  console.log("recmsg:");
  console.log(m);
};
var onOpenHandler=undefined;
wssocket = createWssocket(url,onOpenHandler,msgHandler);

Result

{
  receiveSeg: [Function (anonymous)],
  isSending: false,
  sendList: [],
  monitor: [Function (anonymous)],
  send: [Function (anonymous)],
  sendNextSegment: [Function (anonymous)],
  isOpen: [Function (anonymous)]
}

ping

ping Server test

parameter

field
action ping

Sample request

var request = {};
request.action = "ping";
wssocket.send(JSON.stringify(request));

Result

{
    "action":"pong"
}

The login

When using the Websocket interface to invoke an interface that requires permission, either to connect to CenterPortal or NodePortal, you must first The login. The login process has 3 steps:

  • The client establishes a connection to the server and sends {“action”:“getSessionID”} (implemented in onOpenHandler).
  • After receiving the request, the server returns a result similar to {“action”:“onGetSessionID”,“session”:”-4959947809200104526_session”} to the client
  • After receiving the onGetSessionID, the client signs the sessionID with the local public and private keys and invokes the login interface
  • The server returns the onLogin result, and the data field returns the role corresponding to the public key.

User Role Division

Role division of contract nodes

In contract node (NodePortal. HTML) is divided into NodeManager/ContractProvider/ContractInstanceManager/ContractUser four types of roles.

角色 instructions
NodeManager The administrator of the node has rights to manage users and configure nodes
ContractProvider Have the rights to edit contract, develop contract code, run debugging and so on
ContractInstanceManager Have the rights to start, stop, and configure I/O of the contract instance
ContractUser Have the rights to view the list of contract instances and call the contract
Anonymous Anonymous users, can be called the contract, can apply for to become ContractProvider/InstanceManager role
interface 说明 role
changeDumpPeriod 设置备份周期 ContractInstanceManager;
createLedger 创建账本 ContractInstanceManager;
dumpContract 手动备份 ContractInstanceManager;
deleteMemoryFile 删除镜像 ContractInstanceManager;
forkContract 迁移合约 ContractInstanceManager;
getDumpPeriod 获取备份周期 ContractInstanceManager;
killAllContract 停止全部实例 ContractInstanceManager;
killContractProcess 停止某一实例 ContractInstanceManager;
listMemoryFiles 列取某一实例的镜像 ContractInstanceManager;
loadMemory 加载镜像 ContractInstanceManager;
queryContractInstanceDOI 查询合约实例信息 ContractInstanceManager;
rebuildHashIndex ContractInstanceManager;
setPermission ContractProvider;ContractInstanceManager;
startContract Start the contract ContractInstanceManager;
startContractBatched 废弃 ContractInstanceManager;
startContractByYPK 启动合约 ContractInstanceManager;
startContractInTempZips 废弃 ContractInstanceManager;
startContractConfig 启动合约(集群模式) ContractInstanceManager;
updateContract ContractInstanceManager;
connectTo 连接合约实例输出流 ContractInstanceManager;ContractUser;
countContractLogGroupByAction ContractInstanceManager;ContractUser;
countContractLogGroupByCategory ContractInstanceManager;ContractUser;
getLastLog 查询日志 ContractInstanceManager;ContractUser;
getLog 查询日志 ContractInstanceManager;ContractUser;
getLogSize 查询日志 ContractInstanceManager;ContractUser;
listAllContractProcess ContractInstanceManager;ContractUser;
listContractProcess 查询合约实例列表 ContractInstanceManager;ContractUser;
listLeakContractProcess ContractInstanceManager;ContractUser;
queryContractLogByDate ContractInstanceManager;ContractUser;
queryContractLogByKey ContractInstanceManager;ContractUser;
queryContractLogByOffset ContractInstanceManager;ContractUser;
queryContractLogDetail ContractInstanceManager;ContractUser;
queryContractLogSize ContractInstanceManager;ContractUser;
queryNodeLogByDate ContractInstanceManager;ContractUser;
queryNodeLogByOffset ContractInstanceManager;ContractUser;
queryNodeLogSize ContractInstanceManager;ContractUser;
rebuildContractLogIndex ContractInstanceManager;ContractUser;
rebuildNodeLogIndex ContractInstanceManager;ContractUser;
changePublic ContractProvider;
createFile 新建文件 ContractProvider;
deleteFile 删除文件 ContractProvider;
distributeContract ContractProvider;
downloadContract ContractProvider;
downloadContractFromOtherHost ContractProvider;
generateAnnotationSample ContractProvider;
generateAppDataAnalysis ContractProvider;
generateAppDataSource ContractProvider;
generateBDCoinEventProject ContractProvider;
generateBDCoinProject ContractProvider;
generateBiddingExample ContractProvider;
generateCSVProject ContractProvider;
generateContractExecutor ContractProvider;
generateDAC4BDOA ContractProvider;
generateDAC4BDOA_persist ContractProvider;
generateDACSample ContractProvider;
generateEmptyProject ContractProvider;
generateEventPublisher ContractProvider;
generateEventSubscriber ContractProvider;
generateGasExample ContractProvider;
generateHello ContractProvider;
generateHttpExample ContractProvider;
generateIncentives ContractProvider;
generateJSONExample ContractProvider;
generateLedgerExample ContractProvider;
generateLedgerProject ContractProvider;
generateLicenceManager ContractProvider;
generateLoggerExample ContractProvider;
generateMySQLExample ContractProvider;
generateMySQLProject ContractProvider;
generatePostgreSQLSample ContractProvider;
generateReadme ContractProvider;
generateRenderSample ContractProvider;
generateRocksDBSample ContractProvider;
generateSM2Example ContractProvider;
generateStaticResource ContractProvider;
generateTFLinux ContractProvider;
generategenerateTFMac ContractProvider;
getProject ContractProvider;
getTemplateList ContractProvider;
importContractInstanceCodeByDOI ContractProvider;
listFile ContractProvider;
listProject ContractProvider;
listProjectPermission ContractProvider;
listProjects ContractProvider;
renameFile ContractProvider;
saveFile ContractProvider;
startContractAsDebug ContractProvider;
uploadFile ContractProvider;
compile ContractProvider;ContractInstanceManager;
evaluates ContractProvider;ContractInstanceManager;
executeContractP2PTrustfully ContractProvider;ContractInstanceManager;
getCodeByID 查询代码 ContractProvider;ContractInstanceManager;
getControlFlowByFileName ContractProvider;ContractInstanceManager;
getGasValue ContractProvider;ContractInstanceManager;
listCompiledFiles ContractProvider;ContractInstanceManager;
queryContractResourceInfo ContractProvider;ContractInstanceManager;
queryFreeResourceInfo ContractProvider;ContractInstanceManager;
staticVerifyContract ContractProvider;ContractInstanceManager;
writeDyjs ContractProvider;ContractInstanceManager;
authNodeRole 授权角色 NodeManager;
changeBDledger 修改账本配置 NodeManager;
changeIpPort NodeManager;
changeNodeCenter 修改集群地址 NodeManager;
changeNodeName NodeManager;
changeIpPort NodeManager;
changeDOIPConfig NodeManager;
changeYJSPath NodeManager;
countNodeLogGroupByCategory NodeManager;
countRole NodeManager;
deleteRole NodeManager;
downloadUUID 废弃 NodeManager;
getEncodedUUID 废弃 NodeManager;
getPeerID NodeManager;
listAllAuthRole NodeManager;
listNodeInfos NodeManager;
listUnAuthRole NodeManager;
loadConfig NodeManager;
loadNodeConfig NodeManager;
lockEdit NodeManager;
unlockEdit NodeManager;
updateConfig NodeManager;
uploadLicence NodeManager;
applyNodeRole 申请角色 Any role
executeContract Call the contract Any role
getConnCount Any role
getHashAbstractLocally Any role
getHashLocally Any role
getNodeRoleDeprecated 查询当前角色 Any role
getSessionID Any role
listAdapters Any role
listTheContractProcess Any role
login 登录 Any role
longStr Any role
ping Any role
queryDataByHash Any role
queryDataByHashLocally Any role
queryHashByOffset Any role
queryHashByRequestID Any role
queryHashSize Any role
queryLedgers Any role
queryRole Any role
queryTransactionByHash Any role
sendTransaction Any role
setLogStage Any role

Contract access center role division

There are two roles: CenterManager and NodeManager. CenterManager has permissions on cluster Settings. NodeManager can add and delete nodes.

接口 说明 角色
authNodeManager CenterManager;
countActionLogByCategory CenterManager;
countCMLogByCategory CenterManager;
delete CenterManager;
listAllUsers CenterManager;
listApplyList CenterManager;
listLicence CenterManager;
queryActionLog CenterManager;
queryCMLog CenterManager;
updateLicence CenterManager;
addNode CenterManager;NodeManager;
changeNCFile CenterManager;NodeManager;
changeOtherNC CenterManager;NodeManager;
createTrustUnit 创建可信集群 CenterManager;NodeManager;
deleteTrustUnit CenterManager;NodeManager;
getNCFile CenterManager;NodeManager;
getNodeTrustUnits CenterManager;NodeManager;
getOtherNC CenterManager;NodeManager;
listContractProcess CenterManager;NodeManager;
listMultiPointContractProcess CenterManager;NodeManager;
listNodes CenterManager;NodeManager;
listTrustUnits CenterManager;NodeManager;
queryUserStat CenterManager;NodeManager;
stopMultiPointContractProcess CenterManager;NodeManager;
applyRole NodeManager;
executeContract 调用合约 任意角色
executeContractTrustfully 任意角色
getManagerPubkey 任意角色
getNodeRole 任意角色
getNodeSessionID 任意角色
getRole 任意角色
getSessionID 任意角色
login 登录 任意角色

Contract node Http interface

http://xxx.xxx.xxx.xxx:1717/SCIDE/SCManager is the URL of the server providing Http interface services( xxx.xxx.xxx.xxx:1717 is the IP and port number of BDWare SCIDE operation), the user can add field parameters after the URL, Perform the following functions: http://xxx.xxx.xxx.xxx:18000/SCIDE/SCManager is the server that provides Http interface services

URL( xxx.xxx.xxx.xxx:1717 is the IP and port number of BDWare SCIDE operation), the user can complete the following functions by adding field parameters after the URL:

User Management

ping

ping Server test

methods

GET

parameter
字段
action ping
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=ping
Result
{"data":"pong"}

Contract code management class

Download Contract Item

methods

GET

parameter
字段 value
action downloadContract
projectName 合约项目名
isPrivate 是否在私有目录下
pubKey The users public key
timestamp The time stamp
sign The signature
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=downloadContract&projectName=BDCoin&isPrivate=false&pubKey=0480204f4ef341359a5f64fcb11baf9ca2e6706ac20cba3
8b7ff78aa631e97346086e2d48fac2ba7f5b75ccbd19ebf495c0e6f9934d69e3b083da4d42e46c991e0c2ea8bb45d59f31f46d0ec700fb01f2fdd275

Upload a file

methods

POST

parameter
字段 value
path File upload path
fileName File name to be uploaded
isPrivate 是否在私有目录下
order The number of packets
count Total number of packets
timestamp The time stamp
sign The signature
Sample request
http://127.0.0.1:18000/SCIDE/Upload?path=/TEST/TEST.yjs&fileName=WechatIMG15.jpeg&isPrivate=true&order=0&count=3&pubKey=0480204f4ef341359a5f64fcb11baf9ca2e6706ac20cba36ca83066870cf2c1d5de6df67e24e68dde7934af9b31d94a6084281db3d32d5ce42ab8f75bf799aca05&sign=dd867469f5adf9986e4ea6215febeae50c7d4c3836d002cf8c17050dfca031fd2595ffa8646e9eeae53150d2cbaea690e27d818eaf5cea3632ee1b69c3307a4b631e97346086e2d48fac2ba7f5b75ccbd19ebf495c0e6f9934d69e3b083da4d42e46c991e0c2ea8bb45d59f31f46d0ec700fb01f2fdd275
Result
{"status":"true","data":"success"}

Save the contract script

Send a request to the server to save the contract script content locally to the server.

methods

GET

parameter
字段 value
action writeDyjs
target 合约脚本文件名
content Contract Script Content
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=writeDyjs&target=testyjs.yjs&content=contract%20shortc%7B%0A%09export%20function%20main(arg)%7B%0A%09%09return%20arg.length%3B%09%0A%09%7D%0A%7D
Result
{
    "status": false,
    "action": "onWriteDyjs",
    "data": "success"
}

Subsequent users can start and invoke the contract.

Contract instance management class

Querying the contract process

Sends a request to the server for all the contract processes that have been started on the server.

methods

GET

parameter
字段 value
action listContractProcess
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=listContractProcess
Result
{
    "status": false,
    "action": "onListContractProcess",
    "data": "[\n  {\n    \"id\": \"-562752842\",\n    \"name\": \"shortc\",\n    \"port\": \"1626\",\n    \"times\": \"0 \",\n    \"traffic\": \"32.00 B\",\n    \"storage\": \"0.00 B\",\n    \"contractStatus\": \"Ready\"\n  }\n]"
}

启动合约

Send a request to the server to start a contract.

methods

GET

parameter
字段 value
action startContract
script Contract script content, need to do URIEncode
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=startContract&script=contract%20shortc%7B%0A%09export%20function%20main(arg)%7B%0A%09%09return%20arg.length%3B%09%0A%09%7D%0A%7D
Result
{
    "data": "{\"status\":\"Success\",\"result\":\"\"}",
    "action": "onStartContract",
    "cid": "-562752842",
    "executeTime": 1187
}

调用合约

Send a request to the server to invoke a contract.

methods

GET

parameter
字段 value
action executeContract
contractID Contract ID
withDynamicAnalysis True /false Indicates whether to perform dynamic analysis
operation The name of the method that calls the contract
arg Call the parameters of the contract
pubkey Optionally, caller public key
signature Optional, sign

Pubkey is the public key of SM2. The calculation method is as follows:

//sm2 可从sm2.js中加载获得。
signature = sm2.doSignature(contractID+"|"+operation+"|"+arg+"|"+pubkey,privateKey);
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=executeContract&contractID=-620602333&operation=main&arg=hhh
Result
{
    "data": "{\"status\":\"Success\",\"result\":\"3\"}",
    "action": "onExecuteResult",
    "executeTime": "13"
}

Bulk start contract

Send a request to the server to start a series of contracts that hold the contract script in the server.

methods

GET

parameter
字段 value
action startContractBatched
fileList List of contract script files (Json array,URLEncode)
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=startContractBatched&fileList=%5B%20%22EventPuber.yjs%22%2C%20%22EventSuber.yjs%22%2C%20%22LicenceManager.yjs%22%20%5D

Result
{"EventPuber.yjs":"{\"status\":\"Success\",\"result\":\"\"}","LicenceManager.yjs":"{\"status\":\"Success\",\"result\":\"\"}","EventSuber.yjs":"{\"status\":\"Success\",\"result\":\"\"}","action":"onStartContract"}

Start the Zip package contract

Send a request to the server to start the contract wrapped in zip format in the server.

methods

GET

parameter
字段 value
action startContractInTempZips
owner Callers public key
path Zip file name of the contract (path and)
signature Caller signature
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=startContractInTempZips&owner=0475c7b061f32477c1e228dd04143daf58a5574dc3f6b02bd2857cc794eb92bfe98606dc314049e77fd8714f57a5a481cb470cc759e688fe60d40fc87092165e55&path=traceTest.zip&signature=650d3cad50509682937c253d84da99230e8ea1bcfb9b10f6d18f8888c7c4b6b4%2C72231a6daa078a3ce657c0a2ed38251b7db56cf725beaf86780d4c240b19ccc2

Result
{"data":"verify failed","action":"onStartContract"}

Get the contract code

Send a request to the server for the script code for an ID contract.

methods

GET

parameter
字段 value
action getCodeByID
contractID 合约ID
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=getCodeByID&contractID=814046805

Result
{"status":true,"action":"onCodeResult","data":"@LogType(\"Arg\")\ncontract EventSuberAtCHQ{\n\t\n  \texport function init(arg){\n\t\tvar result \u003d YancloudUtil.subscribe(\"EventPuberAt3966\",\"abc\",handler);\n       // print(\"Handler:\"+handler);\n  \t \n  \t\treturn result;\n\t}\n  \texport function handler(e){\n        var ret \u003d \"ReceiveEvent:\";\n\t\tret+\u003d\"\\n\";\n      \tprint(ret);\n      \tret+\u003dYancloudUtil.executeContract(\"EventPuberAt3966\",\"notify\",\"success\");\n      \tprint(ret);\n        return ret;\n\t}\n}\n"}

Save contract status

Send a request to the server to get the state transition log of the node server.

methods

GET

parameter
字段 value
action dumpContract
contractID Contract ID or contract Name=
Sample request
http://127.0.0.1:18000/SCIDE/SCManager?action=dumpContract&contractID=counter&pubKey=040461417efe01423ba603f71c689387e8aac4aa2a6f7cddfaf22c1d22c40222f7669a054e7ec2e8533b04ccbc7a0e6655ac4ae4acef81a2b1822ec6cabcaf6c1f&sign=3045022004ffd1346b936196f5b13953d2f3e11823a0d0a2d2f6fecea258cef8e20d99c0022100bbc219ed1f56799ba28a763b9e9e47063164e7ceecfbfa752de42f44551ffb83

Result
{"data":"success","size":"3.76 KB","time":"0.03s"}

Gets a list of contracted memory files

Send a request to the server for a list of all memory files in a subfolder.

methods

GET

parameter
字段 value
action listMemoryFiles
contractID Contract Id or contract Name
Sample request
http://127.0.0.1:18000/SCIDE/SCManager?action=listMemoryFiles&contractID=-247468535&pubKey=040461417efe01423ba603f71c689387e8aac4aa2a6f7cddfaf22c1d22c40222f7669a054e7ec2e8533b04ccbc7a0e6655ac4ae4acef81a2b1822ec6cabcaf6c1f&sign=3045022075c7268e888b0efdef167a3f4dfc6589d771c6be41b3c0a1dc12d057e811f395022100d44f460d0cc3643e169ef08231e75a1e895646c53295c0ef1d15c3b462a53d6b

Result
{"data":["2020-09-23.18:40:38","2020-09-24.16:03:41","2020-09-24.16:58:39","2020-09-24.18:25:47","2020-09-24.18:32:37","2020-09-24.20:54:41","2020-09-24.20:57:39","2020-09-24.21:31:07","2020-09-24.21:32:09","2020-09-24.21:36:11","2020-09-28.15:29:15","2020-09-28.20:28:29","2020-09-28.20:39:46","2020-09-28.21:45:31","2020-09-28.21:49:18","2020-09-28.22:27:34","2020-09-28.22:31:09","2020-09-28.22:32:49","2020-10-07.16:51:06","2020-10-07.16:51:23","2020-10-25.21:09:10","2020-12-14.19:06:53","2021-02-02.10:28:56","2021-02-02.10:31:13"],"action":"onListMemoryFiles"}

To stop the contract

Send a request to the server to stop a contract.

methods

GET

parameter
字段 value
action killContractProcess
id Contract ID
*requestID Request ID, String type

* This parameter is optional

Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=killContractProcess&id=-1759263594

Result
{"status":false,"action":"onListContractProcess","data":"[\n  {\n    \"id\": \"-65051856\",\n    \"name\": \"EventSuber\",\n    \"port\": \"1631\",\n    \"times\": \"0 \",\n    \"traffic\": \"32.00 B\",\n    \"storage\": \"0.00 B\",\n    \"contractStatus\": \"Ready\"\n  },\n  {\n    \"id\": \"814046805\",\n    \"name\": \"EventSuberAtCHQ\",\n    \"port\": \"1630\",\n    \"times\": \"0 \",\n    \"traffic\": \"32.00 B\",\n    \"storage\": \"0.00 B\",\n    \"contractStatus\": \"Ready\"\n  },\n  {\n    \"id\": \"2023975189\",\n    \"name\": \"LicenceService\",\n    \"port\": \"1632\",\n    \"times\": \"0 \",\n    \"traffic\": \"32.00 B\",\n    \"storage\": \"0.00 B\",\n    \"contractStatus\": \"Ready\"\n  },\n  {\n    \"id\": \"-620602333\",\n    \"name\": \"shortc\",\n    \"port\": \"1627\",\n    \"times\": \"0 \",\n    \"traffic\": \"0.00 B\",\n    \"storage\": \"0.00 B\",\n    \"contractStatus\": \"Ready\"\n  }\n]"}

Termination of all contracts

Send a request to the server to stop all contracts started on the server.

methods

GET

parameter
字段 value
action killAllContract
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=killAllContract

Result
{"status":false,"action":"onKillAllContract","data":"Kill:7357,7541,7548,7555,7584,7585,7591,7598,7609,7612,8440,8442,8444,8521,"}

Static analysis contract

Send a request to the server to statically analyze the contract script.

methods

GET

parameter
字段 value
action staticVerifyContract
contractid Contract ID
script Request ID, String type
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=staticVerifyContract&contractid=943728900&script=contract%20shortc%7B%0A%09export%20function%20main(arg)%7B%0A%09%09return%20arg.length%3B%09%0A%09%7D%0A%7D&path=static.yjs

Result
{"data":"{\"status\":\"Success\",\"result\":\"{\\\"main\\\":\\\"Ret:arg \\\"}\"}","action":"onExecuteResult","cid":"943728900","executeTime":54}

Gets the contract static analysis flow

Send a request to the server for a static analysis Control Flow of a contract.

methods

GET

parameter
字段 value
action getControlFlowByFileName
path Contract ID
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=getControlFlowByFileName&path=EventSuber.yjs

Result
{"init":{"blocks":[{"type":"Continuous","name":"B0","stmts":["\u003dL0\u003d","aload 0","invokevirtual wrp/jdk/nashorn/internal/runtime/ScriptFunction getScope ()Lwrp/jdk/nashorn/internal/runtime/ScriptObject;"],"original":""},{"type":"Continuous","name":"B1","stmts":["\u003dL1\u003d","astore 4"],"original":""},{"type":"Continuous","name":"B2","stmts":["\u003dL2\u003d","aload 4","invokedynamic dyn:getProp|getElem|getMethod:YancloudUtil (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 5 "],"original":"\t\tvar result \u003d YancloudUtil.subscribe(\"XiaomiSmartHomeAtPKU\",\"onAirPurifierModeChange\",handler);"},{"type":"Continuous","name":"B3","stmts":["dup","invokedynamic dyn:getMethod|getProp|getElem:subscribe (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 0 "],"original":"\t\tvar result \u003d YancloudUtil.subscribe(\"XiaomiSmartHomeAtPKU\",\"onAirPurifierModeChange\",handler);"},{"type":"Continuous","name":"B4","stmts":["swap","ldc XiaomiSmartHomeAtPKU","ldc onAirPurifierModeChange","aload 4","invokedynamic dyn:getProp|getElem|getMethod:handler (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 5 "],"original":"\t\tvar result \u003d YancloudUtil.subscribe(\"XiaomiSmartHomeAtPKU\",\"onAirPurifierModeChange\",handler);"},{"type":"Continuous","name":"B5","stmts":["invokedynamic dyn:call:\\\u003dYancloudUtil\\,subscribe (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 0 "],"original":"\t\tvar result \u003d YancloudUtil.subscribe(\"XiaomiSmartHomeAtPKU\",\"onAirPurifierModeChange\",handler);"},{"type":"Continuous","name":"B6","stmts":["\u003dL3\u003d","astore 5"],"original":"\t\tvar result \u003d YancloudUtil.subscribe(\"XiaomiSmartHomeAtPKU\",\"onAirPurifierModeChange\",handler);"},{"type":"Continuous","name":"B7","stmts":["\u003dL4\u003d","aload 5","areturn"],"original":"  \t\treturn result;"},{"type":"Continuous","name":"B8","stmts":["\u003dL5\u003d"],"original":"  \t\treturn result;"},{"type":"Continuous","name":"B9","stmts":["\u003dL6\u003d"],"original":"  \t\treturn result;"}],"edges":[{"from":"B0","to":"B1","label":{"label":"e"}},{"from":"B1","to":"B2","label":{"label":"e"}},{"from":"B2","to":"B3","label":{"label":"e"}},{"from":"B3","to":"B4","label":{"label":"e"}},{"from":"B4","to":"B5","label":{"label":"e"}},{"from":"B5","to":"B6","label":{"label":"e"}},{"from":"B6","to":"B7","label":{"label":"e"}},{"from":"B7","to":"B9","label":{"label":"e"}}]},"handler":{"blocks":[{"type":"Continuous","name":"B0","stmts":["\u003dL0\u003d","aload 0","invokevirtual wrp/jdk/nashorn/internal/runtime/ScriptFunction getScope ()Lwrp/jdk/nashorn/internal/runtime/ScriptObject;"],"original":""},{"type":"Continuous","name":"B1","stmts":["\u003dL1\u003d","astore 4"],"original":""},{"type":"Continuous","name":"B2","stmts":["\u003dL2\u003d","ldc ReceiveEvent:","aload 2","invokedynamic dyn:getProp|getElem|getMethod:content (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 0 "],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B3","stmts":["invokestatic wrp/jdk/nashorn/internal/runtime/ScriptRuntime ADD (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B4","stmts":["ldc  ","invokestatic wrp/jdk/nashorn/internal/runtime/ScriptRuntime ADD (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B5","stmts":["aload 2","invokedynamic dyn:getProp|getElem|getMethod:type (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 0 "],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B6","stmts":["invokestatic wrp/jdk/nashorn/internal/runtime/ScriptRuntime ADD (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B7","stmts":["\u003dL3\u003d","astore 5"],"original":"        var ret \u003d \"ReceiveEvent:\"+e.content+\" \"+e.type;"},{"type":"Continuous","name":"B8","stmts":["\u003dL4\u003d","aload 4","invokedynamic dyn:getMethod|getProp|getElem:print (Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 5 "],"original":"      \tprint(ret);"},{"type":"Continuous","name":"B9","stmts":["getstatic wrp/jdk/nashorn/internal/runtime/ScriptRuntime UNDEFINED Lwrp/jdk/nashorn/internal/runtime/Undefined;","aload 5","invokedynamic dyn:call:print (Ljava/lang/Object;Lwrp/jdk/nashorn/internal/runtime/Undefined;Ljava/lang/Object;)Ljava/lang/Object; HANDLE:wrp/jdk/nashorn/internal/runtime/linker/Bootstrap.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/CallSite; (6) 5 "],"original":"      \tprint(ret);"},{"type":"Continuous","name":"B10","stmts":["pop"],"original":"      \tprint(ret);"},{"type":"Continuous","name":"B11","stmts":["\u003dL5\u003d","aload 5","areturn"],"original":"        return ret;"},{"type":"Continuous","name":"B12","stmts":["\u003dL6\u003d"],"original":"        return ret;"},{"type":"Continuous","name":"B13","stmts":["\u003dL7\u003d"],"original":"        return ret;"}],"edges":[{"from":"B0","to":"B1","label":{"label":"e"}},{"from":"B1","to":"B2","label":{"label":"e"}},{"from":"B2","to":"B3","label":{"label":"e"}},{"from":"B3","to":"B4","label":{"label":"e"}},{"from":"B4","to":"B5","label":{"label":"e"}},{"from":"B5","to":"B6","label":{"label":"e"}},{"from":"B6","to":"B7","label":{"label":"e"}},{"from":"B7","to":"B8","label":{"label":"e"}},{"from":"B8","to":"B9","label":{"label":"e"}},{"from":"B9","to":"B10","label":{"label":"e"}},{"from":"B10","to":"B11","label":{"label":"e"}},{"from":"B11","to":"B13","label":{"label":"e"}}]}}

Log Viewing Class

Contract log — Number of queries

methods

GET

WhencontractNameis empty or not passed in, the number of items queried for the entire contract

parameter
字段 value
action queryContractLogSize
contractName 字符串,非必须,合约名称
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryContractLogSize&contractName=NanningDataSource
Result
{
    "size": 12,
    "action": "onQueryContractLogSize",
    "status": "success"
}

Contract log — Query by date

methods

GET

parameter
字段 value
action queryContractLogByDate
start Long, must, start time
end Long, not required. If end is not used, the current time is default
contractName String, not required, contract name
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryContractLogByDate&start=1597296300272&end=1597296305747
Returns the result
{
    "data": [
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "getMainFrame",
            "costTime": "2493",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296300272,
            "key": "-8590335427581967208"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "loadResource",
            "costTime": "732",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296301030,
            "key": "849660532962309239"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "loadResource",
            "costTime": "4580",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305745,
            "key": "-8003529429500512736"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "loadResource",
            "costTime": "4551",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305746,
            "key": "7604666709899222357"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "loadResource",
            "costTime": "6",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305751,
            "key": "-7561786202695627022"
        }
    ],
    "action": "onQueryRecentContractLog"
}

Contract log — Queried by offset

methods

GET

parameter
字段 value
action queryContractLogByOffset
count Long: required. Gets the number of logs
offset Long, not required. If there is no offset, the latest count bar is returned by default
contractName String, not required, contract name
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryContractLogByOffset&count=5&contractName=NanningDataSource
Returns the result
{
    "data": [
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "loadResource",
            "costTime": "4",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305842,
            "key": "-2390672423847654148"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "isOwner",
            "costTime": "4",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305868,
            "key": "6056586201629372511"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "getApplyList",
            "costTime": "6",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305893,
            "key": "3882409580676458151"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "getAcceptList",
            "costTime": "4",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "date": 1597296305908,
            "key": "-3437513873417136535"
        },
        {
            "action": "executeContract",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "contractID": "-1382208250",
            "contractName": "NanningDataSource",
            "function": "analysisByIndustry",
            "costTime": "6",
            "totalGas": "0",
            "executionGas": "0",
            "extraGas": "0",
            "signature": "4c2cef1756b2b591ab7eead19d67331e2294c7ba765c72298733c306ada0b6e84afbb6c7b9dba48b9843236ebe67aecb4af09fe58a51eef0e2e89b9f3e5cad02",
            "arg": " {\"year\":2018,\"category\":\"工业\",\"indexType\":\"营业额\"}",
            "date": 1597296314654,
            "key": "203156239086062402"
        }
    ],
    "action": "onQueryRecentContractLog"
}

Contract log — Query by key

methods

GET

parameter
字段 value
action queryContractLogByKey
key Long: Must, the key corresponding to the log
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryContractLogByKey&key=203156239086062402
Returns the result
{
    "data": {
        "action": "executeContract",
        "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
        "contractID": "-1382208250",
        "contractName": "NanningDataSource",
        "function": "analysisByIndustry",
        "costTime": "6",
        "totalGas": "0",
        "executionGas": "0",
        "extraGas": "0",
        "signature": "4c2cef1756b2b591ab7eead19d67331e2294c7ba765c72298733c306ada0b6e84afbb6c7b9dba48b9843236ebe67aecb4af09fe58a51eef0e2e89b9f3e5cad02",
        "arg": " {\"year\":2018,\"category\":\"工业\",\"indexType\":\"营业额\"}",
        "date": 1597296314654
    },
    "action": "onQueryContractLogByKey"
}

Contract log — Counts the number of calls by time period

methods

GET

parameter
字段 value
action countContractLogGroupByCategory
start Long, must, start time
end Not required. End time. Default is current
interval Long, not necessary, statistical interval
category If not required, the contract name is concatenated with a comma, and all contract calls are counted when not passed in
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=countContractLogGroupByCategory&start=1596758400000&interval=86400000
Returns the result
{
    "start": 1596758400000,
    "interval": 86400000,
    "action": "onCountContractLogGroupByCategory",
    "data": [
        0,
        0,
        0,
        0,
        0,
        0,
        43,
        14
    ]
}

Ledger log — Number of queries

Query the number of logs recorded in the ledger of the node

methods

GET

parameter
字段 value
action queryHashSize
contractName 非必须,合约名称
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryHashSize&contractName=NanningDataSource
Returns the result
{
    "count": "2",
    "action": "onQueryHashSize"
}

Ledger log — Query by offset

Query the hash list of x logs that pass this node to the ledger

methods

GET

parameter
字段 value
action queryHashByOffset
count Integer, mandatory, indicates the number of items
offset An integer, not required, representing an offset. If offset is not passed, the latest count bar is returned by default
contractName A character string, not required, indicating the contract name
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryHashByOffset&count=1&contractName=NanningDataSource
Returns the result
{
    "data": [
        {
            "hash": "3a6c60621907146b77146c1f2d48700e47520173",
            "date": 1597296314658
        }
    ],
    "action": "onQueryHash",
    "status": "success"
}

Ledger log — Query details based on hash

Query log content based on hash

methods

GET

parameter
字段 value
action queryDataByHash
hash String, available by queryHashByOffset
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryDataByHash&count=1&contractName=NanningDataSource&hash=3a6c60621907146b77146c1f2d48700e47520173
Returns the result
{
    "from": "0x3034643139323433323966373263656431343866",
    "to": "0x65786563757465436f6e74726163740000000000",
    "data": "1597296314655 --> {\"extraGas\":\"0\",\"totalGas\":\"0\",\"executionGas\":\"0\",\"signature\":\"4c2cef1756b2b591ab7eead19d67331e2294c7ba765c72298733c306ada0b6e84afbb6c7b9dba48b9843236ebe67aecb4af09fe58a51eef0e2e89b9f3e5cad02\",\"costTime\":\"6\",\"arg\":\" {\\\\\\\"year\\\\\\\":2018,\\\\\\\"category\\\\\\\":\\\\\\\"工业\\\\\\\",\\\\\\\"indexType\\\\\\\":\\\\\\\"营业额\\\\\\\"}\",\"contractID\":\"-1382208250\",\"action\":\"analysisByIndustry\",\"pubKey\":\"04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd\"}",
    "requestID": "1597296314629_6067",
    "action": "onQueryDataByHash"
}

Ledger log — Queries the Hash according to requestID

Query log contents by requestID. The developer must ensure the uniqueness of requestID

methods

GET

parameter
字段 value
action queryHashByRequestID
requestID A string that is generated when the call is made
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=queryHashByRequestID&requestID=0987654321ab

Node Logs — Number of queries

methods

GET

parameter
字段 value
action queryNodeLogSize
category Not required, not passed in to query the full situation

The options include ping, startContract, and saveFile.

Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryNodeLogSize

http://127.0.0.1:18000/SCIDE/CMManager?action=queryNodeLogSize&category=login
Returns the result
{
    "size": 177,
    "action": "onQueryNodeLogSize",
    "status": "success"
}

Node logs — Query by date

methods

GET

parameter
字段 value
action queryNodeLogByDate
start Long, must, start date
end Long, not necessary
category Not required, not passed in to query the full situation
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryNodeLogByDate&start=1597376006441

http://127.0.0.1:18000/SCIDE/CMManager?action=queryNodeLogByDate&start=1596758400000&category=login
Returns the result
{
    "data": [
        {
            "action": "listAllAuthRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006438,
            "key": "387355870552374748"
        },
        {
            "action": "listUnAuthRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006441,
            "key": "4772693258708933626"
        },
        {
            "action": "countRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006444,
            "key": "-6425375229108830572"
        },
        {
            "action": "loadNodeConfig",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006448,
            "key": "-6602401010405792959"
        },
        {
            "action": "getPeerID",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006449,
            "key": "-7006776427870311552"
        }
    ],
    "action": "onQueryNodeLogByDate"
}

Node log — Query by offset

methods

GET

parameter
字段 value
action queryNodeLogByOffset
count Long: required. Gets the number of logs
offset Long, not required. If there is no offset, the latest count bar is returned by default
contractName String, not required, contract name
Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=queryNodeLogByOffset&count=5
Returns the result
{
    "data": [
        {
            "action": "listAllAuthRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006438,
            "key": "387355870552374748"
        },
        {
            "action": "listUnAuthRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006441,
            "key": "4772693258708933626"
        },
        {
            "action": "countRole",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006444,
            "key": "-6425375229108830572"
        },
        {
            "action": "loadNodeConfig",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006448,
            "key": "-6602401010405792959"
        },
        {
            "action": "getPeerID",
            "pubKey": "04d1924329f72ced148f6f333fb985ccbaa31b1e3aacf10be5f43d4a4ff5ad88899a005e79e37fc06993e1d66ada8cf8b711cb36f59538bb7d3e39e70fa9360ddd",
            "status": "accept",
            "date": 1597376006449,
            "key": "-7006776427870311552"
        }
    ],
    "action": "onQueryNodeLogByOffset"
}

Node Log — Collects statistics on invocation times by time range

methods

GET

parameter
字段 value
action countLogGroupByCategory
start Long, must, start time
end Not required. End time. Default is current
interval Long, not necessary, statistical interval
category Action is concatenated with commas if not required, and counts all calls when not passed

In the category, Action is the action collection of the NodePortal interface. The value can be ping, startContract, and saveFile.

Sample request
http://127.0.0.1:18000/SCIDE/CMManager?action=countNodeLogGroupByCategory&start=1596758400000&interval=86400000

http://127.0.0.1:18000/SCIDE/CMManager?action=countNodeLogGroupByCategory&start=1596758400000&interval=86400000&category=ping,startContract
Returns the result
{
    "start": 1596758400000,
    "interval": 86400000,
    "action": "onCountNodeLogGroupByCategory",
    "data": [
        0,
        0,
        0,
        0,
        0,
        0,
        912,
        761
    ]
}

Example Output historical logs

Send a request to the server for the TimeTravel log of the contract on the node server.

methods

GET

parameter
字段 value
action printTimeTravelLog
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=printTimeTravelLog

Result
{"status":false,"data":"[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps/aa\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps/aa_1572335939893.dyjs\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps/memoryDumps\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps/.\n[CMActions] memory dir \u003d /Users/oliveds/docs/SmartContract/contractExamples/memoryDumps/.\n"}

Example Output node transfer logs

Send a request to the server to get the state transition log of the node server.

methods

GET

parameter
字段 value
action printTransferLog
Sample request
http://127.0.0.1:1717/SCIDE/SCManager?action=printTransferLog

Result
{"status":false,"data":""}

Template generation class


Contract node WebSocket interface

User Management

Access to the Session

Before login, obtain the session for signing.

parameter
field value
action getSessionID
Sample request
var req = {};
req.action = "getSessionID";
wssocket.send(JSON.stringify(req));
Returns the result
{
	"action": "onSessionID",
	"session": "9782323_session"
}

The user login

The user performs public-private key authentication

parameter
field
action login
Sample request
var loginParam = {};
loginParam.pubKey = global.sm2Key.publicKey;
loginParam.signature = sm2.doSignature(global.session,
			global.sm2Key.privateKey);
loginParam.action = "login";
wssocket.send(JSON.stringify(loginParam));
Returns the result
{
	"action": "onLogin",
	"data": "NodeManager,ContractProvider"
}

Apply for role

In the node administrator interface, you can apply for the names contract administrator, ContractUser, ContractProvider.

parameter
字段 value
action applyNodeRole
role Applying for a Role Name
Sample request
var param = {};
param.action = "applyNodeRole";
param.role = "ContractUser";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onApplyRole",
	"data": "success"
}

{
    "action":"onApplyRole",
    "data":"already has!"
}

Authorization role

parameter
字段 value
action authNodeRole
isAccept Bool: indicates no authorization
pubKey Authorized user public key
Sample request
var param = {};
param.action = "authNodeRole";
param.isAccept = true;
param.pubKey = "xxxxx";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onAuthNodeRole",
	"data": "success"
}

Deleting a User Role

parameter
字段 value
action deleteRole
role Deleting a Role Name
Sample request
var deleteInfo = {};
deleteInfo.pubKey = global.authorizedUsers.[publicKey];
deleteInfo.action = "deleteRole";
deleteInfo.role="ContractUser";
wssocket.send(JSON.stringify(deleteInfo));
Returns the result
{
	"action": "onDeleteRole",
	"data": "success"
}

View the list of authorized users

View authorized node administrators in the current network

parameter
字段 value
action listAllAuthRole
Sample request
var param = {};
param.action = "listAllAuthRole";
wssocket.send(JSON.stringify(param));
Returns the result
{
    "status":false,
    "action":"onListAllAuthRole",
    "data":
    {
        "kv":[{"key":"04eafad549d0757cf67f360815e15e157c7428c9ea9fb933f31a5d45bfb6edd9809c5bf6a5f37d7b817207f19fb2d76b7dbdefe38084cd3282e37b9ac39959dfab",
              "value":"NodeManager,ContractProvider,ContractUser,ContractInstanceManager"}],
        "time":[{"key":"04eafad549d0757cf67f360815e15e157c7428c9ea9fb933f31a5d45bfb6edd9809c5bf6a5f37d7b817207f19fb2d76b7dbdefe38084cd3282e37b9ac39959dfab",
                "value":"1617178709933"}]
    }
}

View the list of applied users

parameter
字段 value
action listUnAuthRole
Sample request
var param = {};
param.action = "listUnAuthRole";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onListUnAuthRole",
	 "kv": [{
        "key": "049999ebd14ff3b96ebf7f7325e1da94a1c4c376573a1dc1cec2b4f7a3b09ed7b07252134e93b6ac2e1853268b82f4b541d34fb42b0182cd61043e99d3489e2cf7",
        "value": "ContractProvider,ContractUser"
    }],
    "time": [{
        "key": "049999ebd14ff3b96ebf7f7325e1da94a1c4c376573a1dc1cec2b4f7a3b09ed7b07252134e93b6ac2e1853268b82f4b541d34fb42b0182cd61043e99d3489e2cf7",
        "value": "1587398989914"
    }]
}
Parameter (delete)
字段 value
action queryUserStat
Sample request
var param = {};
param.action = "queryUserStat";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onQueryUserStat",
	"userListCount": 3,
	"applyListCount":0
}

Contract code management class

Gets a list of public contract files

parameter
字段 value
action listProjects
Sample request
var request = {};
request.action = "listProjects";
wssocket.send(JSON.stringify(request));
Returns the result
{
    "action":"onListProjects",
    "data":"[\"AnnotationSample\",\"AppDataAnalysis\",\"AppDataSource\",\"BiddingExample\",\"ContractExecutor\"]",
    "executeTime":0,
    "isPrivate":false
}

Gets a list of private contract files

parameter
字段 value
action listProjects
pubKey The public key of the user
isPrivate true
Sample request
var request = {};
request.action = "listProjects";
request.pubKey = "global.sm2.publicKey";
request.isPrivate=true;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "action":"onListProjects",
    "data":"[\"CSVFromTemplate\",\"Empty22\",\"MySQLFromTemplate\",\"test\"]",
    "executeTime":0,
    "isPrivate":true
}

Get the contract instance

parameter
字段 value
action listContractProcess
Sample request
var request = {};
request.action = "listContractProcess";
wssocket.send(JSON.stringify(request));
Returns the result
{
    "status":false,
    "action":"onListContractProcess",
    "data":"[{\"id\": \"1658407837\",\"name\": \"BDCoin\",\"port\": \"1617\"}]"
}

Start the contract

parameter
字段 value
action startContract
owner pubkey
requestID 当前时间
script 脚本内容
signature The signature
Sample request
request.action = "startContract";
request.owner = global.sm2Key.publicKey;
request.requestID = new Date().getTime() + "";
request.script = global.projectScript;
request.signature = sm2.doSignature("Algorithm|" + request.script + "|" + global.sm2Key.publicKey, global.sm2Key.privateKey);
wssocket.send(JSON.stringify(request));
Returns the result
{
    "data":"{\"needSeq\":false,\"seq\":0,\"status\":\"Success\",\"result\":\"\",\"isInsnLimit\":false,\"totalGas\":0,\"executionGas\":0,\"extraGas\":0,\"size\":0,\"eventRelated\":false}",
    "action":"onStartContract",
    "cid":"-506393888",
    "executeTime":2496,
    "responseID":"1617206735696"
}

Distribution of contract items

parameter
字段 value
action distributeContract
peersID 集群中节点peer
projectName The contract of
isPrivate 是否在私有目录
sponsorPeerID The originators of the ID
signature The signature
Sample request
request.action = "distributeContract";
request.peersID = peersID;
request.projectName = global.projects[global.lastClickedProjectId];
request.isPrivate = $("#privateDir-tab").hasClass("active"); 
request.sponsorPeerID = global.peerID;
request.signature = sm2.doSignature("DistributeContract|" + request.projectName + "|" + global.sm2Key.publicKey, global.sm2Key.privateKey);  
wssocket.send(JSON.stringify(request));
Returns the result
{
	"action":"onDistributeContract",
	"progress":"100.00%"
}

Terminate the contract

parameter
字段 value
action killContractProcess
id Contract id
requestID Request ID
Sample request
request.action = "killContractProcess";
request.id = contractid;
request.requestID = new Date().getTime() + "";
wssocket.send(JSON.stringify(request));
Returns the result
{
    "data": "ContractHandler: exit in 3 seconds!",
    "action": "onOutputStream"
}

Termination of all contracts

parameter
字段 value
action killAllContract
Sample request
request.action = "killAllContract";
wssocket.send(JSON.stringify(request));
Returns the result
{
   	"status":false,
   	"action":"onKillAllContract",
   	"data":"Kill:7241,7245,"
}

Static analysis contract

parameter
字段 value
action staticVerifyContract
owner User private key
isPartial Is it part of
contractid contractid
script The script content
path Name of contract
Sample request
request.action = "staticVerifyContract";
request.owner = global.sm2Key.privateKey
request.isPartial = false;
request.contractid = contractid;
request.script = global.projectScript;
request.path = global.projectName;
wssocket.send(JSON.stringify(request));
Returns the result

{
    "data":"{\"needSeq\":false,\"seq\":0,\"status\":\"Success\",\"result\":{\"hello\":\"Ret:\"},\"isInsnLimit\":false,\"totalGas\":0,\"executionGas\":0,\"extraGas\":0,\"size\":0,\"eventRelated\":false}",
    "action":"onStaticVerifyResult",
    "cid":"verify",
    "executeTime":83
}

Delete the contract

parameter
字段 value
action deleteFile
file fileName
Sample request
request.action = "deleteFile";
request.file = fileName;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "action":"onDeleteFile",
    "data":"success",
    "executeTime":0
}

Private contracts are uploaded to public directories

parameter
字段 value
action changePublic
pubkey 用户公钥
fileName fileName
Sample request
request.action = "changePublic";
request.pubkey = pubkey;
request.fileName = fileName;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "action":"onChangePublic",
    "data":"success",
    "executeTime":0
}

Upload the contract

parameter
字段 value
action UploadFile
isAppend false
fileName fileName
path path
isPrivate true/false
content The fileContent (base64 encoding)
Sample request
request.action = "uploadFile";
request.isAppend = false;
request.fileName = "test1.yjs";
request.path = "test1";
text="Y29udHJhY3QgdGVzdDF7CglleHBvcnQgZnVuY3Rpb24gaGVsbG8oYXJnKXsgCiAgICAgICAgcmV0dXJuICJ3b3JsZCI7ICAKICAgIH0gICAKfQ=="
request.content = text;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "action":"onUploadFile",
    "data":"success",
    "executeTime":0
}

Compile the contract

parameter
字段 value
action compile
path String indicates the name of the project to be compiled
privateTab Bool, indicates whether the item is a private directory
Sample request
var req = {"action":"compile","path":"Hello","privateTab":true}
Returns the result
{"result":"Hello_2020-08-17-09:09:40.ypk","action":"onCompile"}

Locking private directories

Lock the private directory editing function for a user

parameter
字段 value
action lockEdit
pubKey String Indicates the public key to be locked
Sample request
var req = {};
req.action = "lockEdit";
req.pubKey = "xxxxxx";
wssocket.send(JSON.stringify(req));
{
    "action":"onLockEdit",
    "status":"success",
    "data":"04c4c855862b53f323e077ccfcc744ecc2c0a04645ed16d99ede8fd5866b38c0670a97ad22c6260d1a4672aba2a5fe229a2d4eba34627c054aab102620afa288c1"
}

Unlock a private directory

Unlock the private directory editing function for a user

parameter
字段 value
action unLockEdit
pubKey String Indicates the public key to be locked
Sample request
var req = {};
req.action = unlockEdit;
req.pubKey = "xxxxxx";
wssocket.send(JSON.stringify(req));
{
    "action":"onUnlockEdit",
    "status":"success",
    "data":"04c4c855862b53f323e077ccfcc744ecc2c0a04645ed16d99ede8fd5866b38c0670a97ad22c6260d1a4672aba2a5fe229a2d4eba34627c054aab102620afa288c1"
}

Contract instance management class

Querying the contract process

Sends a request to the server for all the contract processes that have been started on the server.

parameter
字段 value
action listContractProcess
Sample request
var request = {};
request.action = "listContractProcess";
wssocket.send(JSON.stringify(request));
Result
{
	"status": false,
	"action": "onListContractProcess",
	"data": "[...]"
}

Call the contract

Send a request to the server to invoke a contract.

parameter
字段 value
action executeContract
contractID Contract ID
withDynamicAnalysis True /false Specifies whether to perform dynamic analysis. This parameter is optional
operation 调用合约的方法名
arg 调用合约的parameter
pubkey Caller public key, optional
signature Caller signature, optional

* Indicates that the value is optional

//sm2 可从sm2.js中加载获得。
signature = sm2.doSignature(contractID+"|"+operation+"|"+arg+"|"+pubkey,privateKey);
Sample request
var request = {};
request.action = "executeContract";
request.contractID = "2073401446";
request.operation = "main";
request.arg = "hhhhh";
wssocket.send(JSON.stringify(request));
Result
{
    "needSeq":false,
    "seq":0,
    "status":"Success",
    "result":"world",
    "isInsnLimit":false,
    "totalGas":0,
    "executionGas":0,
    "extraGas":0,
    "size":0,
    "eventRelated":false,
    "responseID":"1617211077264_223",
    "action":"onExecuteResult",
    "executeTime":"5"
}

Output history log (delete)

Send a request to the server for the TimeTravel log of the contract on the node server.

parameter
字段 value
action printTimeTravelLog
Sample request
var request = {};
request.action = "printTimeTravelLog";
wssocket.send(JSON.stringify(request));
Result
{
	"status": false,
	"data": "[CMActions] dumpContract :…t/contractExamples/memoryDumps/LicenceManager\n"
}

Outputting node transition logs (delete)

Send a request to the server to get the state transition log of the node server.

parameter
字段 value
action printTransferLog
Sample request
var request = {};
request.action = "printTransferLog";
wssocket.send(JSON.stringify(request));
Result
 {
	"status": false,
	"data": ""
}

Contract status migration

Send a request to the server to get the state transition log of the node server.

parameter
字段 value
action loadMemory
contractName 合约名称
memoryFile 合约文件名称
Sample request
var request = {};
request.action = "loadMemory";
request.contractName = "JsonContract";
request.memoryFile = "2020-03-17.20/42/55";
wssocket.send(JSON.stringify(request));
Result
{
    "data":"success",
    "size":"0.00 B",
    "action":"onTransferTo",
    "time":"0.01s"
}

Log Viewing Class

Querying Local Node Logs in the last N Days (Deleted)

parameter
字段 value
action listLocalNodeLog
date The current time
Sample request
request.action = "listLocalNodeLog";
request.date = new Date().getTime() - 24 * 3600 * 1000 * n;
wssocket.send(JSON.stringify(request));
Returns the result
{
   "data":"[{\"action\":\"login\",\"pubKey\":\"null\",\"status\":\"accept\",\"date\":1583139323822}\",]"
}

Querying Local Contract Logs in the last N Days (Deleted)

parameter
字段 value
action listLocalContractLog
date The current time
Sample request
request.action = "listLocalContractLog";
request.date = new Date().getTime() - 24 * 3600 * 1000 * n;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "data":"[\"{\"action\":\"startContract\",\"pubKey\":\"04405d7ba358d9234939623ab51ea94ca685e6a1f36ed81fd9630ccba6473e632f163bb30faffd4c91f21e5bace20101d6d6e36c04ac67eea14cc24b4962b84f57\",\"contractID\":\"845581788\",\"contractName\":\"null\",\"date\":1583141525539}\"]"
}

Node Configuration Class

Obtain node configuration information

parameter
字段 value
action loadNodeConfig
Sample request
var param = {};
param.action = "loadNodeConfig";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onLoadNodeConfig",
	"data": {
		"nodeName": "04BF52213343C147E631B877BCEB17B794230EE551E85F58FA429C4BA03D690778CC384C6916C63DF36CB9E35C7E274FDB4E18491DFE3D611D347856D441CACC5AF9090B515F02AFC2DFBF56461EC83B5A4CD342466360D6CF82E6E40B637430AC4A329CCBC798DAF7D526AF9E3B3600E0BEA1BFAB8C160EF90128FAF67B19E45F37664F1E4B",
		"licence": "04AADCC7103CD02626D228AFFBEF53F8242ECA4DDD6F179D30B622440666715CFBB6FD1D3678A2B25812DEA9917073E79A65F7ADE517F784DC76288EFCEB37ECAA1025E6903540702F729DA1C2ECCD93F4E6FAFCE40DF443E7FD74387169D0C6D927C7BB12882D0471C8D3E6F31B0316A42FC38F6DD9978D4351B23B2AD63E2244909E98F51185D32CB99B4AE4E22D3AB4C04027BB",
		"expireTime": "Wed Aug 26 09:43:08 CST 2020",
		"nodes": "[\"node1\",\"node2\",\"node3\"]",
		"yjsPath": "/Users/xxx/docs/BDWareHttp/generatedlib/yjs.jar",
		"nodeCenter": "ws://127.0.0.1:1719/SCIDE/NodeCenter"
	}
}

{ 
    "status":true,
    "action":"onLoadNodeConfig",
    "data":{  
        "nodeName":"Node_180",
        "peerID":"",
        "masterAddress":"39.104.201.40:21031",
        "licence":"04AADCC7103C",
        "doipConfig":"{\\"LHSProxyAddress\\":\\"http://39.104.201.40:21042/\\",\\"ownerHandle\\":\\"86.5000.470/dou.TEST\\",\\"certPath\\":\\"keys/dou.TEST.keystore\\",\\"certPassword\\":\\"123456\\",\\"repoID\\":\\"86.5000.470/doip.vcg9Mu1gSq_bdw\\",\\"listeners\\":\\"[{\\\\\\"url\\\\\\":\\\\\\"tcp://39.104.201.40:21032\\\\\\",\\\\\\"protocolVersion\\\\\\":\\\\\\"2.1\\\\\\",\\\\\\"messageFormat\\\\\\":\\\\\\"packet\\\\\\"}]\\",\\"serviceDescription\\":\\"test local Contract Repository\\",\\"serviceName\\":\\"ContractEngine021\\"}",
        "clusterConnected":"false",
        "nodePubKey":"0492d974b8a5b473d0ed2c81800917f76e2a1ec3666067888c85fe6922a672223f2083f95402ae13a744df58deabbe7206c4a317dd14296b0d3941a26ca4e34dc5",
        "ipPort":"",
        "bdledger":"39.108.56.240:18091,39.108.56.12:1809139.104.70.160:18091 47.98.247.70:18091 47.98.248.208:18091 39.104.77.165:18091 47.98.249.131:18091",
        "yjsPath":"/data/bdwaas/bdcontract/yjs.jar",
        "nodeCenter":"ws://39.104.201.21040/SCIDE/NodeCenter"
    }
}

Modifying Node Configuration

parameter
字段 value
action updateConfig
key The configuration item to change
val The target value to change

Options for key include:

key的示 Val sample 说明
yjsPath /User/xxx/cp/yjs.jar 合约进程启动所需的jar
dataChain 192.168.1.8:18090,182.173.2.3:18091 账本节点的ip与端口
nodeCenter ws://127.0.0.1:18002 CenterPortal所在的ip/端口
nodeName Node_180 字符串类型
masterAddress 192.168.3.2:18001 该NodePortal节点的ip和的TCP端口

The TCP port of the NodePortal is the HTTP/WS port number +1 of the Node.

Modifying a Node Name

parameter
字段 value
action changeNodeName
data New node name
Sample request
var param = {};
param.action = "changeNodeName";
param.data = "NewNodeName";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onChangeNodeName",
	"data": true
}

Example Change the YJS path of a node

parameter
字段 value
action changeYJSPath
data Yjs.jar path of the node server
Sample request
var param = {};
param.action = "changeYJSPath";
param.data = "/Users/xxx/docs/BDWareHttp/generatedlib/yjs.jar";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onChangeYJSPath",
	"data": true
}

Modify NodeCenter

parameter
字段 value
action changeNodeCenter
data NodeCenterWebSocket path to which the node server is to connect
Sample request
var param = {};
param.action = "changeNodeCenter";
param.data = "ws://127.0.0.1:1719/SCIDE/NodeCenter";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onChangeNodeCenter",
	"data": true
}

Example Modify an account node

parameter
字段 value
action changeBDledger
data The IP address of the node is port, separated by commas (,)
Sample request
var param = {};
param.action = "changeBDledger";
param.data = "39.108.56.240:18091,39.108.56.12:18091";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onChangeBDledger",
	"data": true
}

Uploading the Node License

parameter
字段 value
action uploadLicence
data The content of the license on the node server
Sample request
var param = {};
param.action = "uploadLicence";
param.data = "04AADCC7103C";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onUploadLicence",
	"data": true
}

Obtaining Node ids

parameter
字段 value
action getNodeID
Sample request
var param = {};
param.action = "getNodeID";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"status": true,
	"action": "onGetNodeID",
	"data": "0431…d3a92e1184bbc5817ebda5c2ad498e4ff1d240009b4f06d"
}

Gets the trusted execution cluster where the node resides

parameter
字段 value
action getNodeTrustUnits
data The node ID
msgHandler MsgHandler for the callback function that receives a reply
ws WebSocket address of the NodeCenter to which the node belongs
Sample request
centerportalws = createWssocket("ws://127.0.0.1:1718/NodeCenterWS",function() {
var param = {};
param.action = "getNodeTrustUnits";
param.data = "0431e311bd70840fe69965e2cabea97fafe99f2133953c01abb9bd7cb62af42f8283f474d203051e920d3a92e1184bbc5817ebda5c2ad498e4ff1d240009b4f06d";
centerportalws.send(JSON.stringify(param));
}, msgHandler);
Returns the result
{
	"data": [{
		"key": "0475c7b061...65e55_4063665700873624164",
		"value": "[\"04541429c11b094…40009b4f06d\"]"
	}],
	"action": "onGetNodeTrustUnits"
}

Template generation class

Gets a list of contract templates

parameter
字段 value
action getTemplateList
Sample request
req={};
req.action = "getTemplateList";
wssocket.send(JSON.stringify(req));
Returns the result
{
    "data": [
        {
            "formDesc": {
                "dbPWD": {
                    "label": "密码",
                    "type": "input"
                },
                "contractName": {
                    "label": "合约名称",
                    "type": "input"
                },
                "accessPolicy": {
                    "label": "访问控制策略",
                    "type": "input",
                    "option": [
                        {
                            "text": "无访问控制",
                            "value": "NAC"
                        },
                        {
                            "text": "直接访问控制",
                            "value": "DAC"
                        },
                        {
                            "text": "基于角色的访问控制",
                            "value": "RBAC"
                        }
                    ]
                },
                "dbUserName": {
                    "label": "用户名",
                    "type": "input"
                },
                "fieldList": {
                    "label": "字段名",
                    "type": "tag"
                },
                "dbUrl": {
                    "label": "数据库链接",
                    "type": "input"
                },
                "tableName": {
                    "label": "表名",
                    "type": "input"
                }
            },
            "apiName": "generateMySQLProject"
        },
        {
            "formDesc": {
                "contractName": {
                    "label": "合约名称",
                    "type": "input"
                },
                "accessPolicy": {
                    "label": "访问控制策略",
                    "type": "input",
                    "option": [
                        {
                            "text": "无访问控制",
                            "value": "NAC"
                        },
                        {
                            "text": "直接访问控制",
                            "value": "DAC"
                        },
                        {
                            "text": "基于角色的访问控制",
                            "value": "RBAC"
                        }
                    ]
                }
            },
            "apiName": "generateEmptyProject"
        }
    ],
    "action": "onTemplateList"
}

Blank Contract Template

parameter
字段 value
action generateEmptyProject
contractName The name of the contract is a string
isPrivate Boolean type, whether it is a private project
accessPolicy If the value is “DAC”, direct access control is implemented
Sample request
var req = {};
req.contractName = "Empty22";
req.action = "generateEmptyProject";
req.accessPolicy = "DAC";
//wssocket为建立好的连接
wssocket.send(JSON.stringify(req));
Returns the result
{
    "action":"onListProjects",
    "data":"[\"AnnotationSample\",\"AppDataAnalysis\",\"AppDataSource\"]",
    "executeTime":0,
    "isPrivate":false
}

MySQL Access Contract

parameter
字段 value
action generateMySQLProject
contractName The name of the contract is a string
isPrivate Boolean type, whether it is a private project
dbUrl The string is the URI of the database
dbUserName The value is a string of characters and the user name of the database
dbPWD The value is a string of characters and the database password
accessPolicy If it is “DAC”, direct access control is implemented; if it is “NAC”, no access control is implemented
tableName A string, the name of a database table
fieldList A list of strings, a list of database fields
defaultAccept Boolean value indicating whether the application is granted by default
Sample request
var req = {};
req.contractName = "MySQLFromTemplate";
req.action = "generateMySQLProject";
req.pubKey = global.sm2Key.publicKey;
req.isPrivate = true;
req.tableName = "data";
req.dbUrl = "jdbc:mysql://xxx:xxx/xxx";
req.dbUserName = "loushuai";
req.dbPWD = "loushuai";
req.fieldList = [{"name":"名字","code":"*"}];
req.basicInfo={"type":"所属分类","name":"资源名称"};
req.accessPolicy = "DAC";
req.defaultAccept = true;
//global.wssocket为建立好的连接
global.wssocket.send(JSON.stringify(req));
Returns the result
{
    "action":"onListProjects",
    "data":"[\"CSVFromTemplate\",\"Empty22\",\"Hello\",\"MySQLFromTemplate\",\"test\"]",
    "executeTime":0,
    "isPrivate":true
}

CSV Access Contract

parameter
字段 value
action generateCSVProject
contractName The name of the contract is a string
base64EncodedData The value is a string of characters in a Base64-encoded CSV file
isPrivate Optional fields, Boolean type, private item or not
accessPolicy If it is “DAC”, direct access control is implemented; if it is “NAC”, no access control is implemented
defaultAccept An optional field, a Boolean value that indicates whether the application is granted by default
Sample request
var req = {};
req.contractName = "CSVFromTemplate";
req.action = "generateCSVProject";
req.pubKey = global.sm2Key.publicKey;
req.isPrivate = true;
req.tableName = "data";
req.accessPolicy = "DAC";
req.defaultAccept = true;
req.base64EncodedData = "bmFtZSwgc2NvcmUsCmphY2ssIDkwLApsdWN5LCA5MQo=";
//global.wssocket为建立好的连接
global.wssocket.send(JSON.stringify(req));
Returns the result
{
    "action":"onListProjects",
    "data":"[\"CSVFromTemplate\",\"Empty22\",\"Hello\",\"MySQLFromTemplate\",\"test\"]",
    "executeTime":0,
    "isPrivate":true
}

Routing node WebSocket interface

User Management

Access to the Session

Before login, obtain the session for signing.

parameter
字段 value
action getSessionID
Sample request
var req = {};
req.action = "getSessionID";
wssocket.send(JSON.stringify(req));
Returns the result
{
	"action": "onSessionID",
	"session": "9782323_session"
}

The user login

To authenticate the public key, the user needs to call “getSessionID” to obtain the sessionID for signature.

parameter
字段
action login
Sample request
var loginParam = {};
loginParam.pubKey = global.sm2Key.publicKey;
loginParam.signature = sm2.doSignature(global.session,
			global.sm2Key.privateKey);
loginParam.action = "login";
wssocket.send(JSON.stringify(loginParam));
Result
{
	"action": "onLogin",
	"data": "CenterManager"
}

User gets the current role (Delete)

A user obtains a role based on the public key used during login. If it is the first login, the public key used during login is called the access administrator by default

parameter
字段 value
action getRole
Sample request
var param = {};
param.action = "getRole";
wssocket.send(JSON.stringify(param));
Result
{
	"action": "onGetRole",
	"data": "CenterManager"
}

Apply for role

On the Access administrator page, you can apply for a node administrator for a node in the network

parameter
字段 value
action applyRole
role Specifies the name of the applied role
Sample request
var param = {};
param.action = "applyRole";
param.role="
wssocket.send(JSON.stringify(param));
Result
{
	"action": "onApplyRole",
	"data": "failed"
}

Add a node

parameter
字段 value
action addNode
nodePubKey 要添加的节点公钥

Sample request

var req = {};
//某节点的publicKey可通过连接该节点并通过"获取节点配置信息"接口获取
req.nodePubKey = publicKey;
req.action = "addNode";
wssocket.send(JSON.stringify(req));

Deleting a User Role

parameter
字段 value
action delete
pubKey The public key of the corresponding user
Sample request
var deleteInfo = {};
deleteInfo.pubKey = user.publicKey;
deleteInfo.action = "delete";
wssocket.send(JSON.stringify(deleteInfo));
Result
{
	"action": "onDelete",
	"data": "success"
}

View the list of authorized users

View authorized node administrators in the current network

parameter
字段 value
action listAllUsers
Sample request
var param = {};
param.action = "onListAllUsers";
wssocket.send(JSON.stringify(param));
Result
{
	"action": "onListAllUsers",
	 "kv": {
        "key": "049999ebd14ff3b96ebf7f7325e1da94a1c4c376573a1dc1cec2b4f7a3b09ed7b07252134e93b6ac2e1853268b82f4b541d34fb42b0182cd61043e99d3489e2cf7",
        "value": " NodeManager"
    },
    "time": {
        "key": "049999ebd14ff3b96ebf7f7325e1da94a1c4c376573a1dc1cec2b4f7a3b09ed7b07252134e93b6ac2e1853268b82f4b541d34fb42b0182cd61043e99d3489e2cf7",
        "value": 1587398989914
    }
}

View the list of applied users

parameter
字段 value
action listApplyList
Sample request
var param = {};
param.action = "onListApplyList";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onListApplyList",
	 "kv": {
        "key": "04b00f32eab70c78d1b43738f190d326d36c021af2124acefe6d057016b11ea31c750bb473e565c9d89e4993a44f4d30adf447d3026a21ff4b3b64cef523074ef7",
        "value": " NodeManager"
    },
    "time": {
        "key": "04b00f32eab70c78d1b43738f190d326d36c021af2124acefe6d057016b11ea31c750bb473e565c9d89e4993a44f4d30adf447d3026a21ff4b3b64cef523074ef7",
        "value": 1587398989914
    }
}

View the distribution of user types

parameter
字段 value
action queryUserStat
Sample request
var param = {};
param.action = "onQueryUserStat";
wssocket.send(JSON.stringify(param));
Result
{
	"action": "onQueryUserStat",
	"userListCount": 3,
	"applyListCount":0
}

Node Management

Viewing the Node List

View the node list that the user has the permission to view (only available to access administrators and contract managers)

parameter
字段 value
action listNodes
Sample request
var param = {};
param.action = "listNodes";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"offline": [{
		"key": "0431e31...40009b4f06d",
		"value": "0431e311bd708...b4f06d"
	}],
	"action": "onListNodes",
	"online": [{
		"contracts": [],
		"pubKey": "0431e311...09b4f06d",
		"nodeName": "NewNodeName",
		"udpID": "528822126",
		"cimanager": ""
	}]
}

View the list of trusted execution clusters

View the node list that the user has permission to view (available only to the center administrator and contract manager)

parameter
字段 value
action listTrustUnits
Sample request
var param = {};
param.action = "listTrustUnits";
wssocket.send(JSON.stringify(param));
Returns the result
{
	"data": [{
		"key": "0470b2f27f4f6…1cb855f1ecec11",
		"value": "[...]"
	}],
	"action": "onListTrustUnits"
}

Establish a trusted execution cluster

parameter
字段 value
action createTrustUnit
data Json array of node public keys
Msg The name of the cluster
Sample request
var param = {};
param.action = "createTrustUnit";
param.data = "[\"382r0934309t...\",\"345343rr3f34...\"]";
param.msg = "newUnit1";
global.wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onCreateTrustUnit",
	"status": "Success"
}

Delete a trusted execution cluster

parameter
字段 value
action deleteTrustUnit
data Trusted execution cluster ID
Sample request
var param = {};
param.action = "deleteTrustUnit";
param.data = "0475d34rf3434..._1583410158761";
global.wssocket.send(JSON.stringify(param));
Returns the result
{
	"action": "onDeleteTrustUnit",
	"status": "Success"
}

Log Viewing Class

View the statistics of network management operations

parameter
字段 value
action queryActionLog
date The current time
Sample request
request.action = "onQueryActionLog";
request.date = new Date().getTime() - 24 * 3600 * 1000 * n;
wssocket.send(JSON.stringify(request));
Returns the result
{	"action":"onQueryActionLog",
     "data":"[{\"action\":\"login\",\"pubKey\":\"null\",\"status\":\"accept\",\"date\":1583139323822}\",]"
}

View local contract logs in the last N days

参数
字段 value
action listLocalContractLog
date The current time
Sample request
request.action = "listLocalContractLog";
request.date = new Date().getTime() - 24 * 3600 * 1000 * n;
wssocket.send(JSON.stringify(request));
Returns the result
{
    "data":"[\"{\"action\":\"startContract\",\"pubKey\":\"04405d7b...\",\"contractID\":\"845581788\",\"contractName\":\"null\",\"date\":1583141525539}\"]"
}

Bash interface

Has been abandoned. BDWareConfigTool can be used instead. Send Socket instructions through the command line to execute the invocation of methods in the class to accomplish the following functions (need to run the instance on the local port)

Schematic diagram of Bash interface functions

instruction

java -jar yjs.jar function_name arguments

function_name is the name of the called method;

arguments is the method parameter.

Start the contract

parameter

function_name is startContract;

arguments to start the contract parameters, including the type of contract type, the contract ID id, contract script script.

Order sample

java -jar yjs.jar startContract "{\"type\":\"Algorigthm\",\"id\":\"656565\",\"script\":\"contract c{function main(arg){return arg/1.0+1;}}\"}"

Call the contract

parameter

function_name is executeContract;

arguments need to invoke the contract parameters, including the call parameters arg, the contract ID contractID.

Order sample

java -jar yjs.jar executeContract "{\"arg\":\"http://www.baidu.com\",\"contractID\":\"656564\"}"

To stop the contract

parameter

function_name is stopContract;

arguments is the parameter required to invoke the contract, that is, the contract ID contractID.

Order sample

java -jar yjs.jar stopContract "{\"arg\":\"http://www.baidu.com\",\"contractID\":\"656564\"}"

Termination of all contracts

parameter

function_name indicates that stopAllContracts.

Order sample

java -jar yjs.jar stopAllContracts 

Query all contracts

parameter

function_name indicates that listContracts.

Order sample

java -jar yjs.jar listContracts