build: config spotless plugin and reformat code

This commit is contained in:
Frank.R.Wu 2023-06-15 11:17:31 +08:00
parent 587310c899
commit 0e5f92e51e
135 changed files with 2847 additions and 2989 deletions

View File

@ -5,6 +5,8 @@ plugins {
id 'signing'
}
apply from: '../spotless.gradle'
group = "org.bdware.sc"
version = "1.9.0"
tasks.withType(JavaCompile) {

View File

@ -16,8 +16,6 @@ import com.alibaba.datax.plugin.rdbms.util.DBUtil;
import com.alibaba.datax.plugin.rdbms.util.DBUtilErrorCode;
import com.alibaba.datax.plugin.rdbms.util.DataBaseType;
import com.alibaba.datax.plugin.rdbms.util.RdbmsException;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonPrimitive;
import org.apache.commons.lang3.Validate;
import org.bdware.sc.util.JsonUtil;
@ -56,8 +54,10 @@ public class MaskingJob {
jdbcUrl = readerPara.getString(Key.JDBC_URL);
table = readerPara.getString(Key.TABLE);
buffer = new ArrayList<>();
System.out.println("maskConf11"+maskConf.getConfiguration(CoreConstant.DATAX_JOB_CONTENT + "[0]"));
transformerExecs = TransformerUtil.buildTransformerInfo(maskConf.getConfiguration(CoreConstant.DATAX_JOB_CONTENT + "[0]"));
System.out.println(
"maskConf11" + maskConf.getConfiguration(CoreConstant.DATAX_JOB_CONTENT + "[0]"));
transformerExecs = TransformerUtil.buildTransformerInfo(
maskConf.getConfiguration(CoreConstant.DATAX_JOB_CONTENT + "[0]"));
}
public String buildQuerySql() {
@ -65,7 +65,8 @@ public class MaskingJob {
// String column = readerPara.getString(Key.COLUMN);
String table = readerPara.getString(Key.TABLE);
String where = readerPara.getString(Key.WHERE, null);
//String querySql = SingleTableSplitUtil.buildQuerySql(column, table, where) + " limit 100";
// String querySql = SingleTableSplitUtil.buildQuerySql(column, table, where) + " limit
// 100";
String querySql = SingleTableSplitUtil.buildQuerySql(column, table, where) + " limit 100";
return querySql;
@ -113,8 +114,7 @@ public class MaskingJob {
return new JsonPrimitive(res);
}
private Record transportOneRecord(ResultSet rs, ResultSetMetaData metaData,
int columnNumber) {
private Record transportOneRecord(ResultSet rs, ResultSetMetaData metaData, int columnNumber) {
Record record = buildRecord(rs, metaData, columnNumber);
sendToWriter(record);
return record;
@ -138,8 +138,8 @@ public class MaskingJob {
return record;
}
ClassLoaderSwapper classLoaderSwapper = ClassLoaderSwapper
.newCurrentThreadClassLoaderSwapper();
ClassLoaderSwapper classLoaderSwapper =
ClassLoaderSwapper.newCurrentThreadClassLoaderSwapper();
Record result = record;
@ -148,17 +148,19 @@ public class MaskingJob {
for (TransformerExecution transformerInfoExec : transformerExecs) {
System.out.println("transformerExecs" + transformerInfoExec.getTransformerName());
if (transformerInfoExec.getClassLoader() != null) {
classLoaderSwapper.setCurrentThreadClassLoader(transformerInfoExec.getClassLoader());
classLoaderSwapper
.setCurrentThreadClassLoader(transformerInfoExec.getClassLoader());
}
/**
* 延迟检查transformer参数的有效性直接抛出异常不作为脏数据
* 不需要在插件中检查参数的有效性但参数的个数等和插件相关的参数在插件内部检查
* 延迟检查transformer参数的有效性直接抛出异常不作为脏数据 不需要在插件中检查参数的有效性但参数的个数等和插件相关的参数在插件内部检查
*/
if (!transformerInfoExec.isChecked()) {
if (transformerInfoExec.getColumnIndex() != null && transformerInfoExec.getColumnIndex() >= record.getColumnNumber()) {
throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER,
if (transformerInfoExec.getColumnIndex() != null
&& transformerInfoExec.getColumnIndex() >= record.getColumnNumber()) {
throw DataXException.asDataXException(
TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER,
String.format("columnIndex[%s] out of bound[%s]. name=%s",
transformerInfoExec.getColumnIndex(), record.getColumnNumber(),
transformerInfoExec.getTransformerName()));
@ -167,10 +169,11 @@ public class MaskingJob {
}
try {
result = transformerInfoExec.getTransformer().evaluate(result, transformerInfoExec.gettContext(), transformerInfoExec.getFinalParas());
result = transformerInfoExec.getTransformer().evaluate(result,
transformerInfoExec.gettContext(), transformerInfoExec.getFinalParas());
} catch (Exception e) {
errorMsg = String.format("transformer(%s) has Exception(%s)", transformerInfoExec.getTransformerName(),
e.getMessage());
errorMsg = String.format("transformer(%s) has Exception(%s)",
transformerInfoExec.getTransformerName(), e.getMessage());
failed = true;
// LOG.error(errorMsg, e);
// transformerInfoExec.addFailedRecords(1);
@ -199,8 +202,7 @@ public class MaskingJob {
}
protected Record buildRecord(ResultSet rs, ResultSetMetaData metaData,
int columnNumber) {
protected Record buildRecord(ResultSet rs, ResultSetMetaData metaData, int columnNumber) {
final byte[] EMPTY_CHAR_ARRAY = new byte[0];
Record record = new DefaultRecord();
try {
@ -276,13 +278,10 @@ public class MaskingJob {
break;
default:
throw DataXException
.asDataXException(
DBUtilErrorCode.UNSUPPORTED_TYPE,
throw DataXException.asDataXException(DBUtilErrorCode.UNSUPPORTED_TYPE,
String.format(
"您的配置文件中的列配置信息有误. 因为DataX 不支持数据库读取这种字段类型. 字段名:[%s], 字段名称:[%s], 字段Java类型:[%s]. 请尝试使用数据库函数将其转换datax支持的类型 或者不同步该字段 .",
metaData.getColumnName(i),
metaData.getColumnType(i),
metaData.getColumnName(i), metaData.getColumnType(i),
metaData.getColumnClassName(i)));
}
}

View File

@ -26,12 +26,14 @@ public class DebugMain {
DebugConfig config = JsonUtil.fromJson(content, DebugConfig.class);
inject(config);
String keyPairStr = "{\"publicKey\":\"%s\",\"privateKey\":\"%s\"}";
SM2KeyPair pair = SM2KeyPair.fromJson(String.format(keyPairStr, config.publicKey, config.privateKey));
SM2KeyPair pair =
SM2KeyPair.fromJson(String.format(keyPairStr, config.publicKey, config.privateKey));
String uriFormat = "ws://%s/SCIDE/SCExecutor";
if (config.killBeforeStart != null && config.killBeforeStart.length() > 0) {
AtomicInteger counter = new AtomicInteger(0);
SmartContractClient client = new SmartContractClient(String.format(uriFormat, config.agentAddress), pair) {
SmartContractClient client =
new SmartContractClient(String.format(uriFormat, config.agentAddress), pair) {
public void onLogin(JsonObject obj) {
counter.incrementAndGet();
}
@ -49,7 +51,8 @@ public class DebugMain {
} catch (InterruptedException e) {
e.printStackTrace();
}
client.sendMsg("{\"action\":\"killContractProcess\",\"name\":\"" + config.killBeforeStart + "\"}");
client.sendMsg("{\"action\":\"killContractProcess\",\"name\":\""
+ config.killBeforeStart + "\"}");
try {
for (; counter.get() == 1;)
Thread.sleep(100);
@ -58,9 +61,9 @@ public class DebugMain {
}
}
config.contract.setCreateParam(config.createParam);
ContractProcess.main(new String[]{"-port=" + config.port, "-cmi=" + config.cmi, "-disablePID"});
ResultCallback printCallback
= new ResultCallback() {
ContractProcess
.main(new String[] {"-port=" + config.port, "-cmi=" + config.cmi, "-disablePID"});
ResultCallback printCallback = new ResultCallback() {
@Override
public void onResult(String str) {
if (str.contains("Error")) {
@ -70,16 +73,18 @@ public class DebugMain {
}
};
ContractProcess.instance.handler.setDBInfo(wrap("", config.dbPath), printCallback);
ContractProcess.instance.handler.registerMangerPort(wrap("", Integer.valueOf(config.cPort)), printCallback);
ContractProcess.instance.handler.registerMangerPort(wrap("", Integer.valueOf(config.cPort)),
printCallback);
ContractProcess.instance.handler.setContractBundle(wrap("", config.contract), printCallback);
ContractProcess.instance.handler.setContractBundle(wrap("", config.contract),
printCallback);
String urlFormat = "http://%s/SCIDE/SCManager?action=reconnectPort&owner=%s&port=%d%s";
String cpHost = "";
if (config.cpHost != null && config.cpHost.length() > 0)
cpHost = "&host=" + config.cpHost;
String url = String.format(urlFormat, config.agentAddress,
config.publicKey, ContractProcess.instance.server.mainPort.get(), cpHost);
String url = String.format(urlFormat, config.agentAddress, config.publicKey,
ContractProcess.instance.server.mainPort.get(), cpHost);
Map<String, Object> resp = HttpUtil.httpGet(url);
String data = (String) resp.get("response");
@ -103,7 +108,8 @@ public class DebugMain {
config.cPort = jsonObject.get("cPort").getAsInt();
config.port = jsonObject.get("port").getAsInt();
JsonObject ownerAndScript = new JsonObject();
String arg = "abc&owner=" + config.publicKey + "&script=" + config.ypkPath + "&doipStartPort=" + config.doipStartPort;
String arg = "abc&owner=" + config.publicKey + "&script=" + config.ypkPath
+ "&doipStartPort=" + config.doipStartPort;
url = String.format(urlFormat, config.agentAddress, "allocateKeyPair", arg);
resp = HttpUtil.httpGet(url);
LOGGER.info(url);

View File

@ -137,8 +137,7 @@ public class ContractProcess {
byte[] buffer = new byte[4];
int length = input.read(buffer, 0, 4);
if (length == 4) {
isArchive =
(Arrays.equals(ZIP_HEADER_1, buffer))
isArchive = (Arrays.equals(ZIP_HEADER_1, buffer))
|| (Arrays.equals(ZIP_HEADER_2, buffer));
}
} catch (IOException e) {
@ -194,9 +193,8 @@ public class ContractProcess {
cn = czb.mergeContractNode();
} else {
cn =
compiler.compile(
new ByteArrayInputStream(script.getBytes()), "contract_main.yjs");
cn = compiler.compile(new ByteArrayInputStream(script.getBytes()),
"contract_main.yjs");
}
DesktopEngine engine = new DesktopEngine(); // engine.loadJar(zf);
engine.loadContract(c, cn, ret.isInsnLimit);
@ -216,8 +214,8 @@ public class ContractProcess {
MethodNode mn = methods.get(fn.functionName);
if (mn != null) {
System.out.println(
"[ContractManager] getMethodNode, verify:" + fn.functionName);
System.out
.println("[ContractManager] getMethodNode, verify:" + fn.functionName);
TaintResult.nLocals = mn.maxLocals;
TaintResult.nStack = mn.maxStack;
TaintCFG cfg = new TaintCFG(mn);
@ -278,17 +276,12 @@ public class ContractProcess {
* CFGraph cfg = new CFGraph(mn) {
*
* @Override public BasicBlock getBasicBlock(int id) { return new
* BasicBlock(id); } }; FrontCF frontCF = new FrontCF(graph); String[]
data =
* fn.plainText().split("\n"); for (int i = 0; i <
graph.getBasicBlockSize();
* i++) { BasicBlock bb = graph.getBasicBlockAt(i); String decompiled =
""; if
* BasicBlock(id); } }; FrontCF frontCF = new FrontCF(graph); String[] data =
* fn.plainText().split("\n"); for (int i = 0; i < graph.getBasicBlockSize();
* i++) { BasicBlock bb = graph.getBasicBlockAt(i); String decompiled = ""; if
* (bb.lineNum - 1 < data.length && bb.lineNum > 0) { decompiled =
* data[bb.lineNum - 1]; } frontCF.addBB(bb, decompiled); Set<BasicBlock>
suc =
* graph.getSucBlocks(bb); for (BasicBlock sucBB : suc)
frontCF.addEdge(bb,
* data[bb.lineNum - 1]; } frontCF.addBB(bb, decompiled); Set<BasicBlock> suc =
* graph.getSucBlocks(bb); for (BasicBlock sucBB : suc) frontCF.addEdge(bb,
* sucBB); }
*/
TaintResult.nLocals = mn.maxLocals;
@ -311,7 +304,8 @@ public class ContractProcess {
List<Integer> ids = map.get(i);
frontCF.addBB(bb, decompiled, ids, cfg);
Set<BasicBlock> suc = cfg.getSucBlocks(bb);
for (BasicBlock sucBB : suc) frontCF.addEdge(bb, sucBB);
for (BasicBlock sucBB : suc)
frontCF.addEdge(bb, sucBB);
}
// get result
// TaintBB lastBlock = cfg.getLastBlock();
@ -404,10 +398,8 @@ public class ContractProcess {
String yancloud_desktop = "";
isOpen.put(pmList[0], pmList[1]);
yancloud_desktop += UtilRegistry.getInitStr(pmList[0], pmList[1].equals("open"));
engine.getNashornEngine()
.getContext()
.setAttribute(
ScriptEngine.FILENAME, yancloud_desktop, ScriptContext.ENGINE_SCOPE);
engine.getNashornEngine().getContext().setAttribute(ScriptEngine.FILENAME,
yancloud_desktop, ScriptContext.ENGINE_SCOPE);
engine.getNashornEngine().eval(yancloud_desktop);
} catch (ScriptException e) {
e.printStackTrace();
@ -429,24 +421,19 @@ public class ContractProcess {
// 判断是否满足Oracle和Contact的执行要求
public String verifyOracleAndContractPermission(Contract contract) {
// 权限校验 如果是Oracle 启动方式只能是Sole 否则报错
if (cn.getYjsType() == YjsType.Oracle && contract.getType() != ContractExecType.Sole && contract.getType() != ContractExecType.Sharding) {
if (cn.getYjsType() == YjsType.Oracle && contract.getType() != ContractExecType.Sole
&& contract.getType() != ContractExecType.Sharding) {
LOGGER.info("Oracle only support Sole ContractType!");
return JsonUtil.toJson(
new ContractResult(
Status.Error,
return JsonUtil.toJson(new ContractResult(Status.Error,
new JsonPrimitive("Oracle only support Sole ContractType!")));
}
// 权限校验 如果是contract 申请了MySQL等权限 报错
if (cn.getYjsType() == YjsType.Contract) {
for (Permission per : cn.getPermission()) {
if (per == Permission.SQL
|| per == Permission.Http
|| per == Permission.RocksDB
if (per == Permission.SQL || per == Permission.Http || per == Permission.RocksDB
|| per == Permission.MongoDB) {
LOGGER.debug("Contract can not have permissions of IO!");
return JsonUtil.toJson(
new ContractResult(
Status.Error,
return JsonUtil.toJson(new ContractResult(Status.Error,
new JsonPrimitive("Contract can not have permissions of IO|")));
}
}
@ -458,7 +445,8 @@ public class ContractProcess {
JavaScriptEntry.members = members;
if (members != null)
return members.size() + "";
else return "0";
else
return "0";
}
public String setContractBundle(Contract contract) {
@ -470,8 +458,7 @@ public class ContractProcess {
JavaScriptEntry.invokeID = 0L;
JavaScriptEntry.random.setSeed(Integer.parseInt(contract.getID()));
JavaScriptEntry.numOfCopies = this.contract.getNumOfCopies();
JavaScriptEntry.shardingID =
this.contract.getShardingId(); // 设置javaScriptEntry中的shardingID
JavaScriptEntry.shardingID = this.contract.getShardingId(); // 设置javaScriptEntry中的shardingID
// JavaScriptEntry
// contract.getCreateParam().get("repoId").getAsString()-->去获取repoId
// 知道自己的BDOID --> repo的id+contract.getID()
@ -487,17 +474,14 @@ public class ContractProcess {
memorySet = cn.memorySet;
this.contract.sourcePath = zipBundle.getManifest().sourcePath;
LOGGER.debug(
"check sourcePath\n\tin-contract="
+ this.contract.sourcePath
+ "\n\tin-manifest="
+ zipBundle.getManifest().sourcePath);
LOGGER.debug("check sourcePath\n\tin-contract=" + this.contract.sourcePath
+ "\n\tin-manifest=" + zipBundle.getManifest().sourcePath);
// zhanghongwei
/* if (ret.getManifest().getInsnLimit() != 0) {
gasLimit=ret.getManifest().getInsnLimit();
isInsnLimit = true;
}*/
/*
* if (ret.getManifest().getInsnLimit() != 0) {
* gasLimit=ret.getManifest().getInsnLimit(); isInsnLimit = true; }
*/
String ver = verifyOracleAndContractPermission(contract);
if (!ver.isEmpty()) {
return ver;
@ -533,15 +517,13 @@ public class ContractProcess {
}
} catch (MalformedJsonException | JsonSyntaxException e) {
return JsonUtil.toJson(
new ContractResult(
Status.Error,
return JsonUtil.toJson(new ContractResult(Status.Error,
new JsonPrimitive("parse manifest.json error, not json format!")));
} catch (Exception e) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bo));
return JsonUtil.toJson(
new ContractResult(Status.Error, new JsonPrimitive(bo.toString())));
return JsonUtil
.toJson(new ContractResult(Status.Error, new JsonPrimitive(bo.toString())));
}
}
@ -578,7 +560,8 @@ public class ContractProcess {
fun.appendBeforeInvokeHandler(accessHandler);
}
fun.appendAfterInvokeHandler(new ObjToJsonHandler());
ResultSchemaHandler resultSchemaHandler = createHandlerIfExist(fun, ResultSchemaHandler.class);
ResultSchemaHandler resultSchemaHandler =
createHandlerIfExist(fun, ResultSchemaHandler.class);
if (resultSchemaHandler != null) {
fun.appendAfterInvokeHandler(resultSchemaHandler);
}
@ -605,8 +588,10 @@ public class ContractProcess {
if (doopRequestHandler == null) {
doopRequestHandler = new DOOPRequestHandler();
}
fun.appendBeforeInvokeHandler(new DOOPBeforeExecHandler(fun.getDoipOperationInfo().operation));
fun.appendAfterInvokeHandler(new DOOPAfterExecHandler(fun.getDoipOperationInfo().operation));
fun.appendBeforeInvokeHandler(
new DOOPBeforeExecHandler(fun.getDoipOperationInfo().operation));
fun.appendAfterInvokeHandler(
new DOOPAfterExecHandler(fun.getDoipOperationInfo().operation));
doopRequestHandler.addDoipOperation(fun);
}
}
@ -614,11 +599,14 @@ public class ContractProcess {
<T extends AnnotationHook> T createHandlerIfExist(FunctionNode function, Class<T> clz) {
YJSAnnotation annotation = clz.getAnnotation(YJSAnnotation.class);
if (annotation == null) return null;
if (annotation == null)
return null;
try {
AnnotationNode node = function.getAnnotation(annotation.name());
if (node == null) return null;
Method m = clz.getDeclaredMethod("fromAnnotationNode", FunctionNode.class, AnnotationNode.class);
if (node == null)
return null;
Method m = clz.getDeclaredMethod("fromAnnotationNode", FunctionNode.class,
AnnotationNode.class);
T result = (T) m.invoke(null, function, node);
return result;
} catch (Exception e) {
@ -660,8 +648,7 @@ public class ContractProcess {
handleLog();
LOGGER.info("load script, contract:" + JsonUtil.toJson(contract.getScriptStr()));
LOGGER.info("load cn:" + JsonUtil.toJson(cn));
ContractResult ret =
engine.loadContract(contract, cn, cn.getInstrumentBranch());
ContractResult ret = engine.loadContract(contract, cn, cn.getInstrumentBranch());
ContractResult onCreate = invokeOnCreate(contract.getCreateParam());
JsonObject jo = new JsonObject();
jo.add("onCreate", JsonUtil.parseObject(onCreate));
@ -679,8 +666,8 @@ public class ContractProcess {
} catch (Exception e) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bo));
return JsonUtil.toJson(
new ContractResult(Status.Error, new JsonPrimitive(bo.toString())));
return JsonUtil
.toJson(new ContractResult(Status.Error, new JsonPrimitive(bo.toString())));
}
}
@ -695,9 +682,11 @@ public class ContractProcess {
if (createParams.has("router")) {
JsonElement routerInfo = createParams.get("router");
if (!routerInfo.isJsonObject())
throw new Exception("Provide wrong router info in create params to DoipModule");
throw new Exception(
"Provide wrong router info in create params to DoipModule");
else {
EndpointConfig endpointConfig = JsonUtil.GSON.fromJson(routerInfo.getAsJsonObject(), EndpointConfig.class);
EndpointConfig endpointConfig = JsonUtil.GSON
.fromJson(routerInfo.getAsJsonObject(), EndpointConfig.class);
DoipClusterServer.createDOOPServerInstance(endpointConfig);
}
} else {
@ -712,17 +701,20 @@ public class ContractProcess {
}
}
public void invokeOnStartingDoipServer(ContractNode cn, JsonElement arg, JsonObject returnValue) {
public void invokeOnStartingDoipServer(ContractNode cn, JsonElement arg,
JsonObject returnValue) {
ContractRequest onStartingDoipServer = new ContractRequest();
onStartingDoipServer.setAction("onServerStart");
if (arg == null) {
if (engine != null && engine.getManifest() != null && engine.getManifest().createParam != null)
if (engine != null && engine.getManifest() != null
&& engine.getManifest().createParam != null)
arg = engine.getManifest().createParam;
else
arg = new JsonPrimitive("");
}
onStartingDoipServer.setArg(arg);
LOGGER.debug("invoke onStartingDoipServer, param:" + onStartingDoipServer.getArg().toString());
LOGGER.debug(
"invoke onStartingDoipServer, param:" + onStartingDoipServer.getArg().toString());
onStartingDoipServer.setRequester(contract.getOwner());
FunctionNode funNode = cn.getFunction("onServerStart");
@ -733,13 +725,16 @@ public class ContractProcess {
if (arg.isJsonObject() && arg.getAsJsonObject().has("doipStartPort")) {
startPort = arg.getAsJsonObject().get("doipStartPort").getAsInt();
}
LOGGER.info("Fetch the onStartingDoipServerRes from router successfully, the result is " + onStartingDoipServerRes);
int doipListenPort = DoipClusterServer.startDoipServer(startPort, onStartingDoipServerRes);
LOGGER.info("Fetch the onStartingDoipServerRes from router successfully, the result is "
+ onStartingDoipServerRes);
int doipListenPort =
DoipClusterServer.startDoipServer(startPort, onStartingDoipServerRes);
returnValue.addProperty("doipListenPort", doipListenPort);
this.contract.setDoipPort(doipListenPort);
returnValue.addProperty("doipStartPort", startPort);
} catch (Exception e) {
LOGGER.error("DoipLocalSingleton cannot starts properly, plz check the onServerStart function");
LOGGER.error(
"DoipLocalSingleton cannot starts properly, plz check the onServerStart function");
e.printStackTrace();
}
funNode = cn.getFunction("onInitSharableVars");
@ -774,7 +769,8 @@ public class ContractProcess {
}
}
if (fun.getLogToBDContract()) detail.append("bdcontract;");
if (fun.getLogToBDContract())
detail.append("bdcontract;");
if (fun.getLogToNamedLedger()) {
for (String str : fun.getLedgerNames()) {
detail.append("bdledger:").append(str).append(";");
@ -820,7 +816,8 @@ public class ContractProcess {
ContractRequest onCreate = new ContractRequest();
onCreate.setAction("onCreate");
if (arg == null) {
if (engine != null && engine.getManifest() != null && engine.getManifest().createParam != null)
if (engine != null && engine.getManifest() != null
&& engine.getManifest().createParam != null)
arg = engine.getManifest().createParam;
else
arg = new JsonPrimitive("");
@ -893,8 +890,7 @@ public class ContractProcess {
List<Long> hashes = logIndex.request(offset, size);
List<Map<String, String>> jo = new ArrayList<>();
TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {
};
TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {};
for (Long hash : hashes)
try {
Map<String, String> obj =
@ -909,8 +905,7 @@ public class ContractProcess {
public String requestLast(int count) {
List<Long> hashes = logIndex.requestLast(count);
List<Map<String, String>> jo = new ArrayList<>();
TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {
};
TypeToken<Map<String, String>> token = new TypeToken<Map<String, String>>() {};
String log;
for (Long hash : hashes)
try {
@ -920,8 +915,8 @@ public class ContractProcess {
}
Map<String, String> obj = JsonUtil.fromJson(log, token.getType());
if (obj == null) {
System.out.println(
"[ContractProcess] requestLast, parseJsonError:" + log + "==");
System.out
.println("[ContractProcess] requestLast, parseJsonError:" + log + "==");
continue;
}
obj.put("hash", hash + "");
@ -964,9 +959,8 @@ public class ContractProcess {
try {
request = JsonUtil.fromJson(arg, ContractRequest.class);
} catch (Exception ignored) {
result =
new ContractResult(
ContractResult.Status.Error, new JsonPrimitive("Illegal Arguments!"));
result = new ContractResult(ContractResult.Status.Error,
new JsonPrimitive("Illegal Arguments!"));
return JsonUtil.toJson(result);
}
String reqID = request.getRequestID();
@ -987,9 +981,9 @@ public class ContractProcess {
engine.redirectTracePS(new Logger(bo, this));
result = engine.executeContract(request);
result.analysis = bo.toString();
System.out.println(
"[ContractProcess] result.analysis = "
+ result.analysis); // 动态分析bug null pointer
System.out.println("[ContractProcess] result.analysis = " + result.analysis); // 动态分析bug
// null
// pointer
// branchResult = JsonUtil.toJson(result);
// branchTrace = result.analysis;
engine.redirectTracePS(previous);
@ -1008,16 +1002,8 @@ public class ContractProcess {
evaluatesAnalysis(request.getAction());
}
engine.redirectTracePS(
new ProgramPointCounter(
bo,
this,
gasLimit,
functionIndex,
request.getValue(),
0L,
request.getAction(),
ppCountMap));
engine.redirectTracePS(new ProgramPointCounter(bo, this, gasLimit, functionIndex,
request.getValue(), 0L, request.getAction(), ppCountMap));
result = engine.executeContract(request);
result.analysis = bo.toString();
@ -1058,8 +1044,7 @@ public class ContractProcess {
for (String s : function) {
MethodNode mn = methods.get(s);
if (mn != null) {
CFGraph cfg =
new CFGraph(mn) {
CFGraph cfg = new CFGraph(mn) {
@Override
public BasicBlock getBasicBlock(int id) {
return new BasicBlock(id);
@ -1126,10 +1111,7 @@ public class ContractProcess {
TaintBB bb = cfg.getLastBlock();
result.analysis = bb.getResultWithTaintBit();
System.out.println(
"[ContractProcess] dynamically verify: "
+ ac.getAction()
+ "-->"
System.out.println("[ContractProcess] dynamically verify: " + ac.getAction() + "-->"
+ result.analysis);
}
}
@ -1152,8 +1134,7 @@ public class ContractProcess {
return !JavaScriptEntry.topic_handlers.isEmpty();
}
public void beforeSuicide() {
}
public void beforeSuicide() {}
public String redo(String path) {
return engine.syncUtil.redo(path);
@ -1208,8 +1189,7 @@ public class ContractProcess {
}
@Override
protected void finalize() {
}
protected void finalize() {}
public String getDeclaredEvents() {
return JsonUtil.toJson(cn.events);
@ -1224,8 +1204,8 @@ public class ContractProcess {
for (FunctionNode fn : cn.getFunctions()) {
if (fn.isExport() && !fn.functionName.equals("onCreate")) {
function.add(fn.functionName);
FunctionDesp desp =
new FunctionDesp(fn.functionName, fn.annotations, fn.getRouteInfo(), fn.getJoinInfo(), fn.isView());
FunctionDesp desp = new FunctionDesp(fn.functionName, fn.annotations,
fn.getRouteInfo(), fn.getJoinInfo(), fn.isView());
ret.add(desp);
}
}
@ -1246,11 +1226,8 @@ public class ContractProcess {
public String startAutoDump() {
String dumpPeriod = projectConfig.getDumpPeriod();
System.out.println(
"[ContractProcess] startAutoDump : "
+ cn.getContractName()
+ " period = "
+ dumpPeriod);
System.out.println("[ContractProcess] startAutoDump : " + cn.getContractName()
+ " period = " + dumpPeriod);
String status = "startAutoDump status 0";
if (null != dt) {
if (null == dumpPeriod || dumpPeriod.isEmpty()) {
@ -1431,8 +1408,7 @@ public class ContractProcess {
private class DumpTask extends TimerTask {
@Override
public void run() {
System.out.println(
"[ContractProcess DumpTask] auto dump period : "
System.out.println("[ContractProcess DumpTask] auto dump period : "
+ projectConfig.getDumpPeriod());
File file1 = new File(dir);
File file2 = new File(file1.getParent());

View File

@ -31,11 +31,13 @@ public class SM2Helper {
backupFile(new File("./cmconfig.json"));
System.out.println("Generate file: cmconfig.json");
String content = FileUtil.getFileContent("./cmconfig.json.template");
JsonObject jo = JsonParser.parseReader(new FileReader("cmvar.json")).getAsJsonObject();
JsonObject jo =
JsonParser.parseReader(new FileReader("cmvar.json")).getAsJsonObject();
for (String key : jo.keySet()) {
content = content.replaceAll(key, jo.get(key).getAsString());
}
JsonObject keypair = JsonParser.parseReader(new FileReader("manager.keypair")).getAsJsonObject();
JsonObject keypair =
JsonParser.parseReader(new FileReader("manager.keypair")).getAsJsonObject();
content = content.replaceAll("_PRIVKEY", keypair.get("privateKey").getAsString());
content = content.replaceAll("_PUBKEY", keypair.get("publicKey").getAsString());
content = content.replaceAll("CMI", System.currentTimeMillis() + "");
@ -58,15 +60,18 @@ public class SM2Helper {
}
private static void backupFile(File file) {
if (!file.exists()) return;
if (!file.exists())
return;
File backup = null;
for (int i = 0; i <= 100; i++) {
if (i == 100) throw new IllegalArgumentException("failed to backup:" + file.getAbsolutePath());
if (i == 100)
throw new IllegalArgumentException("failed to backup:" + file.getAbsolutePath());
backup = new File(file.getParent(), file.getName() + "." + i);
if (!backup.exists())
break;
}
FileUtil.copyFile(file, backup);
System.out.println("Backup: " + file.getAbsolutePath() + " --> " + backup.getAbsolutePath());
System.out
.println("Backup: " + file.getAbsolutePath() + " --> " + backup.getAbsolutePath());
}
}

View File

@ -14,7 +14,6 @@ import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.MethodNode;
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.util.*;
import java.util.zip.ZipFile;
@ -44,10 +43,7 @@ public class FSAnalysis extends BreadthFirstSearch<TaintResult, TaintBB> {
setToAnalysis(toAnalysis);
if (isDebug) {
System.out.println("===Method:" + cfg.getMethodNode().name + cfg.getMethodNode().desc);
System.out.println(
"===Local:"
+ cfg.getMethodNode().maxLocals
+ " "
System.out.println("===Local:" + cfg.getMethodNode().maxLocals + " "
+ cfg.getMethodNode().maxStack);
}
}
@ -81,9 +77,8 @@ public class FSAnalysis extends BreadthFirstSearch<TaintResult, TaintBB> {
ContractZipBundle czb = compiler.compile(zf);
cn = czb.mergeContractNode();
} else {
cn =
compiler.compile(
new ByteArrayInputStream(script.getBytes()), "contract_main.yjs");
cn = compiler.compile(new ByteArrayInputStream(script.getBytes()),
"contract_main.yjs");
}
DesktopEngine engine = new DesktopEngine(); // engine.loadJar(zf);
engine.loadContract(c, cn, false);
@ -109,7 +104,8 @@ public class FSAnalysis extends BreadthFirstSearch<TaintResult, TaintBB> {
FSAnalysis analysis = new FSAnalysis(cfg);
analysis.analysis();
TaintBB bb = cfg.getLastBlock();
if (bb != null) result.put(fn.functionName, bb.getResult());
if (bb != null)
result.put(fn.functionName, bb.getResult());
cfg.printSelf();
}
}

View File

@ -126,7 +126,8 @@ public class AccountIndex {
}
try {
LenVarTimeSerialIndex2 index = getIndexFile(getString(args, "account") + getString(args, "file"));
LenVarTimeSerialIndex2 index =
getIndexFile(getString(args, "account") + getString(args, "file"));
long startTime = getLong(args, "startTime");
long endTime = getLong(args, "endTime");
List<byte[]> result = index.requestByTime(startTime, endTime);
@ -183,7 +184,8 @@ public class AccountIndex {
}
try {
LenVarTimeSerialIndex2 index = getIndexFile(getString(args, "account") + getString(args, "file"));
LenVarTimeSerialIndex2 index =
getIndexFile(getString(args, "account") + getString(args, "file"));
long date = getLong(args, "date");
String content = getString(args, "content");
index.manullyIndex(date, HashUtil.str16ToBytes(content));

View File

@ -78,9 +78,8 @@ public class JavaScriptEntry {
}
public static void setSM2KeyPair(String pubKey, String privKey) {
keyPair =
new SM2KeyPair(
SM2KeyPair.publicKeyStr2ECPoint(pubKey), new BigInteger(privKey, 16));
keyPair = new SM2KeyPair(SM2KeyPair.publicKeyStr2ECPoint(pubKey),
new BigInteger(privKey, 16));
}
public static SM2KeyPair getKeyPair() {
@ -168,8 +167,8 @@ public class JavaScriptEntry {
return new ApiGate(ip, Integer.parseInt(port));
}
public static String executeContractWithSig(
String contractID, String action, String arg, String pubkey, String sig) {
public static String executeContractWithSig(String contractID, String action, String arg,
String pubkey, String sig) {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
@ -182,21 +181,10 @@ public class JavaScriptEntry {
app.setFromDebug(isDebug);
if (numOfCopies > 1) {
// The caller is special.
app.setRequestID(
app.getPublicKey().hashCode()
+ "_"
+ numOfCopies
+ "_"
+ (invokeID++)
+ "_"
+ random.nextInt()
+ "_mul");
app.setRequestID(app.getPublicKey().hashCode() + "_" + numOfCopies + "_"
+ (invokeID++) + "_" + random.nextInt() + "_mul");
} else {
app.setRequestID(
app.getPublicKey().hashCode()
+ "_"
+ (invokeID++)
+ "_"
app.setRequestID(app.getPublicKey().hashCode() + "_" + (invokeID++) + "_"
+ random.nextInt());
}
return get.syncGet("dd", "executeContract", JsonUtil.toJson(app));
@ -210,9 +198,8 @@ public class JavaScriptEntry {
public static Object executeContract(String contractID, String action, Object arg) {
if (currentSyncUtil.engine.recovering) {
String str =
currentSyncUtil.transRecoverUtil.curRecoverRecord.getExecuteResult(
invokeID + "");
String str = currentSyncUtil.transRecoverUtil.curRecoverRecord
.getExecuteResult(invokeID + "");
String[] strs = str.split("<seperate>");
String flag1 = strs[0];
String flag = strs[1];
@ -233,29 +220,22 @@ public class JavaScriptEntry {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(JSONTool.convertMirrorToJson(arg));
app.setContractID(contractID).setAction(action)
.setArg(JSONTool.convertMirrorToJson(arg));
app.doSignature(keyPair);
app.setFromDebug(isDebug);
ContractExecType type = ContractProcess.instance.getContract().getType();
if (type.needSeq()) {
app.setRequestID(
String.format(
"%d_%d_%d_%d_mul",
keyPair.getPublicKeyStr().hashCode(),
numOfCopies,
(invokeID++),
random.nextInt()));
String.format("%d_%d_%d_%d_mul", keyPair.getPublicKeyStr().hashCode(),
numOfCopies, (invokeID++), random.nextInt()));
// The caller is special.
flag = 1;
flag1 = 1;
LOGGER.warn("invoke contractExecution! " + JsonUtil.toJson(app));
} else {
app.setRequestID(
String.format(
"%d_%d_%d",
keyPair.getPublicKeyStr().hashCode(),
(invokeID++),
random.nextInt()));
app.setRequestID(String.format("%d_%d_%d", keyPair.getPublicKeyStr().hashCode(),
(invokeID++), random.nextInt()));
flag = 1;
flag1 = 1;
}
@ -264,45 +244,38 @@ public class JavaScriptEntry {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bo));
String result = bo.toString();
if (currentSyncUtil.startFlag
&& currentSyncUtil.currType == SyncType.Trans
if (currentSyncUtil.startFlag && currentSyncUtil.currType == SyncType.Trans
&& !currentSyncUtil.engine.recovering) {
currentSyncUtil.transRecordUtil.recordExecutes(
formerInvokeID + "", flag1 + "<seperate>" + flag + "<seperate>" + result);
currentSyncUtil.transRecordUtil.recordExecutes(formerInvokeID + "",
flag1 + "<seperate>" + flag + "<seperate>" + result);
}
return result;
}
}
private static Object executeContract(long formerInvokeID, int flag1, int flag, ContractRequest app) {
private static Object executeContract(long formerInvokeID, int flag1, int flag,
ContractRequest app) {
String result = get.syncGet("dd", "executeContract", JsonUtil.toJson(app));
if (currentSyncUtil.startFlag
&& currentSyncUtil.currType == SyncType.Trans
if (currentSyncUtil.startFlag && currentSyncUtil.currType == SyncType.Trans
&& !currentSyncUtil.engine.recovering) {
currentSyncUtil.transRecordUtil.recordExecutes(
formerInvokeID + "",
currentSyncUtil.transRecordUtil.recordExecutes(formerInvokeID + "",
flag1 + "<seperate>" + flag + "<seperate>" + result);
}
JsonObject jo = JsonUtil.parseStringAsJsonObject(result);
return JSONTool.convertJsonElementToMirror(jo);
}
public static void executeContractAsyncWithoutSig(
String contractID, String action, String arg, final ScriptFunction cb) {
public static void executeContractAsyncWithoutSig(String contractID, String action, String arg,
final ScriptFunction cb) {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
app.setRequestID((invokeID++) + "_" + random.nextInt());
get.asyncGet(
"dd",
"executeContract",
JsonUtil.toJson(app),
new ResultCallback() {
get.asyncGet("dd", "executeContract", JsonUtil.toJson(app), new ResultCallback() {
@Override
public void onResult(String str) {
if (null != cb) {
DesktopEngine.applyWithGlobal(
cb, currentEngine.getNashornGlobal(), str);
DesktopEngine.applyWithGlobal(cb, currentEngine.getNashornGlobal(), str);
}
}
});
@ -312,24 +285,20 @@ public class JavaScriptEntry {
}
}
public static String executeContractAsync(
String contractID, String action, String arg, final ScriptFunction cb) {
public static String executeContractAsync(String contractID, String action, String arg,
final ScriptFunction cb) {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
app.doSignature(keyPair);
app.setRequestID((invokeID++) + "_" + random());
get.asyncGet(
"dd",
"executeContract",
JsonUtil.toJson(app),
new ResultCallback() {
get.asyncGet("dd", "executeContract", JsonUtil.toJson(app), new ResultCallback() {
@Override
public void onResult(String str) {
if (cb != null) {
DesktopEngine.applyWithGlobal(
cb, currentEngine.getNashornGlobal(), str, arg);
DesktopEngine.applyWithGlobal(cb, currentEngine.getNashornGlobal(), str,
arg);
}
}
});
@ -366,10 +335,8 @@ public class JavaScriptEntry {
* @author Kaidong Wu
*/
public static void pubEventConstraint(String topic, String content, String constraint) {
String reqID =
String.format(
"%d_%d_%d_%s_pe",
keyPair.getPublicKeyStr().hashCode(), numOfCopies, invokeID, random());
String reqID = String.format("%d_%d_%d_%s_pe", keyPair.getPublicKeyStr().hashCode(),
numOfCopies, invokeID, random());
REvent msg = new REvent(topic, PUBLISH, content, reqID);
if (null != constraint) {
msg.setSemantics(REvent.REventSemantics.valueOf(constraint));
@ -412,17 +379,11 @@ public class JavaScriptEntry {
}
private static void subscribe(String topic, ScriptFunction fun, boolean fromPreSub) {
String reqID =
String.format(
"%d_%d_%d_%s_se",
keyPair.getPublicKeyStr().hashCode(), numOfCopies, invokeID, random());
String reqID = String.format("%d_%d_%d_%s_se", keyPair.getPublicKeyStr().hashCode(),
numOfCopies, invokeID, random());
REvent msg =
new REvent(
topic,
SUBSCRIBE,
String.format(
"{\"subscriber\":\"%s\",\"handler\":\"%s\"}",
REvent msg = new REvent(topic, SUBSCRIBE,
String.format("{\"subscriber\":\"%s\",\"handler\":\"%s\"}",
ContractProcess.instance.getContractName(), fun.getName()),
reqID);
if (fromPreSub) {
@ -434,10 +395,8 @@ public class JavaScriptEntry {
}
public static void unsubscribe(String topic) {
String reqID =
String.format(
"%d_%d_%d_%s_us",
keyPair.getPublicKeyStr().hashCode(), numOfCopies, invokeID, random());
String reqID = String.format("%d_%d_%d_%s_us", keyPair.getPublicKeyStr().hashCode(),
numOfCopies, invokeID, random());
String content;
if (null == topic) {
content = "{\"subscriber\":\"" + ContractProcess.instance.getContractName() + "\"}";
@ -447,9 +406,7 @@ public class JavaScriptEntry {
});
} else {
String handler = topic_handlers.get(topic).getName();
content =
String.format(
"{\"subscriber\":\"%s\",\"handler\":\"%s\"}",
content = String.format("{\"subscriber\":\"%s\",\"handler\":\"%s\"}",
ContractProcess.instance.getContractName(), handler);
topic_handlers.remove(topic);
ContractProcess.instance.unSubscribe(handler);
@ -468,10 +425,8 @@ public class JavaScriptEntry {
public static void preSub(String topic, String content) {
String newTopic = topic + "|" + content + "|" + ContractProcess.instance.getContractName();
subscribe(newTopic, topic_handlers.get(topic), true);
String reqID =
String.format(
"%d_%d_%d_%s_pse",
keyPair.getPublicKeyStr().hashCode(), numOfCopies, (invokeID++), random());
String reqID = String.format("%d_%d_%d_%s_pse", keyPair.getPublicKeyStr().hashCode(),
numOfCopies, (invokeID++), random());
REvent msg = new REvent(topic, REvent.REventType.PRESUB, newTopic, reqID);
msg.setSemantics(REvent.REventSemantics.ONLY_ONCE);
msgList.add(msg);
@ -482,7 +437,8 @@ public class JavaScriptEntry {
* @author Kaidong Wu
*/
public static String random() {
String seed = String.valueOf(null == random ? System.currentTimeMillis() : random.nextInt());
String seed =
String.valueOf(null == random ? System.currentTimeMillis() : random.nextInt());
return HashUtil.sha3(seed);
}

View File

@ -10,7 +10,6 @@ import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class Resources {
private final ZipFile zf;
YJSClassLoader loader;
@ -67,7 +66,8 @@ public class Resources {
ZipEntry entry = zf.getEntry(path);
if (entry == null)
return null;
reader = new BufferedReader(new InputStreamReader(zf.getInputStream(entry), StandardCharsets.UTF_8));
reader = new BufferedReader(
new InputStreamReader(zf.getInputStream(entry), StandardCharsets.UTF_8));
String line = null;
while ((line = reader.readLine()) != null) {
fileList.add(line);
@ -84,7 +84,8 @@ public class Resources {
public String unzipToDir(String path) {
ZipEntry entry = zf.getEntry(path);
try {
return loader.unzipLibrary(zf.getInputStream(entry), entry.getName().replaceAll(".*/", ""));
return loader.unzipLibrary(zf.getInputStream(entry),
entry.getName().replaceAll(".*/", ""));
} catch (IOException e) {
e.printStackTrace();
}

View File

@ -16,13 +16,16 @@ import java.security.NoSuchAlgorithmException;
@PermissionStub(permission = Permission.AES)
public class AESUtil {
public static ScriptObject encrypt(String key, String plaintext) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, InvalidKeyException {
public static ScriptObject encrypt(String key, String plaintext)
throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException,
IllegalBlockSizeException, InvalidAlgorithmParameterException, InvalidKeyException {
JO ret = new JO(PropertyMap.newMap());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String iv = generateKey(128);
IvParameterSpec ivSpec = new IvParameterSpec(DatatypeConverter.parseHexBinary(iv));
byte[] byteContent = plaintext.getBytes();
SecretKeySpec secretKeySpecSpec = new SecretKeySpec(DatatypeConverter.parseHexBinary(key), "AES");
SecretKeySpec secretKeySpecSpec =
new SecretKeySpec(DatatypeConverter.parseHexBinary(key), "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpecSpec, ivSpec);
byte[] result = cipher.doFinal(byteContent);
ret.put("iv", iv, false);
@ -30,12 +33,16 @@ public class AESUtil {
return ret;
}
public static String decrypt(String key, String ciphertext, String iv) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
public static String decrypt(String key, String ciphertext, String iv)
throws NoSuchPaddingException, NoSuchAlgorithmException,
InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException,
IllegalBlockSizeException {
// JO ret = new JO(PropertyMap.newMap());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(DatatypeConverter.parseHexBinary(iv));
byte[] byteContent = DatatypeConverter.parseHexBinary(ciphertext);
SecretKeySpec secretKeySpecSpec = new SecretKeySpec(DatatypeConverter.parseHexBinary(key), "AES");
SecretKeySpec secretKeySpecSpec =
new SecretKeySpec(DatatypeConverter.parseHexBinary(key), "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpecSpec, ivSpec);
byte[] result = cipher.doFinal(byteContent);
return new String(result);

View File

@ -30,15 +30,13 @@ public class AsyncUtil {
}
public static String postFunction(final ScriptFunction callback, Object wrapper) {
ServiceServer.executor.execute(
() -> JavaScriptEntry.executeFunction(callback, wrapper));
ServiceServer.executor.execute(() -> JavaScriptEntry.executeFunction(callback, wrapper));
return "success";
}
public static TimerTask setTimeOut(
final ScriptFunction callback, long delay, final Object arg) {
TimerTask task =
new TimerTask() {
public static TimerTask setTimeOut(final ScriptFunction callback, long delay,
final Object arg) {
TimerTask task = new TimerTask() {
@Override
public void run() {
JavaScriptEntry.executeFunction(callback, arg);
@ -48,10 +46,9 @@ public class AsyncUtil {
return task;
}
public static TimerTask setInterval(
final ScriptFunction callback, long delay, long interval, final Object arg) {
TimerTask task =
new TimerTask() {
public static TimerTask setInterval(final ScriptFunction callback, long delay, long interval,
final Object arg) {
TimerTask task = new TimerTask() {
@Override
public void run() {
JavaScriptEntry.executeFunction(callback, arg);
@ -61,22 +58,19 @@ public class AsyncUtil {
return task;
}
public static void executeContractAsyncWithoutSig(
String contractID, String action, String arg, final ScriptFunction cb) {
public static void executeContractAsyncWithoutSig(String contractID, String action, String arg,
final ScriptFunction cb) {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
app.setRequestID((JavaScriptEntry.invokeID++) + "_" + JavaScriptEntry.random.nextInt());
JavaScriptEntry.get.asyncGet(
"dd",
"executeContract",
JsonUtil.toJson(app),
JavaScriptEntry.get.asyncGet("dd", "executeContract", JsonUtil.toJson(app),
new ResultCallback() {
@Override
public void onResult(String str) {
if (null != cb) {
DesktopEngine.applyWithGlobal(
cb, JavaScriptEntry.currentEngine.getNashornGlobal(), str);
DesktopEngine.applyWithGlobal(cb,
JavaScriptEntry.currentEngine.getNashornGlobal(), str);
}
}
});
@ -85,24 +79,22 @@ public class AsyncUtil {
e.printStackTrace(new PrintStream(bo));
}
}
public static String executeContractAsync(
String contractID, String action, String arg, final ScriptFunction cb) {
public static String executeContractAsync(String contractID, String action, String arg,
final ScriptFunction cb) {
try {
ContractRequest app = new ContractRequest();
app.setContractID(contractID).setAction(action).setArg(arg);
app.doSignature(JavaScriptEntry.getKeyPair());
app.setRequestID((JavaScriptEntry.invokeID++) + "_" + JavaScriptEntry.random());
JavaScriptEntry.get.asyncGet(
"dd",
"executeContract",
JsonUtil.toJson(app),
JavaScriptEntry.get.asyncGet("dd", "executeContract", JsonUtil.toJson(app),
new ResultCallback() {
@Override
public void onResult(String str) {
if (cb != null) {
DesktopEngine.applyWithGlobal(
cb, JavaScriptEntry.currentEngine.getNashornGlobal(), str, arg);
DesktopEngine.applyWithGlobal(cb,
JavaScriptEntry.currentEngine.getNashornGlobal(), str, arg);
}
}
});

View File

@ -2,7 +2,6 @@ package org.bdware.sc.boundry.utils;
import org.bdware.sc.ContractProcess;
import org.bdware.sc.compiler.PermissionStub;
import org.bdware.sc.db.TimeDBUtil;
import org.bdware.sc.db.TimeRocksDBUtil;
import org.bdware.sc.node.Permission;

View File

@ -77,7 +77,8 @@ public class DOIPUtil {
msg = ret.get(0);
if (msg != null) {
return msg;
} else return DoipMessageFactory.createTimeoutResponse(message.requestID);
} else
return DoipMessageFactory.createTimeoutResponse(message.requestID);
} catch (Exception ie) {
ie.printStackTrace();
return DoipMessageFactory.createConnectFailedResponse(message.requestID);
@ -97,13 +98,14 @@ public class DOIPUtil {
}
public String hello(String repoID) {
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder()).createRequest(repoID, BasicOperations.Hello.getName()).create();
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder())
.createRequest(repoID, BasicOperations.Hello.getName()).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String retrieve(String doi, String args) {
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder()).createRequest(doi, BasicOperations.Retrieve.getName())
.create();
DoipMessage msg = (new DoipMessageFactory.DoipMessageBuilder())
.createRequest(doi, BasicOperations.Retrieve.getName()).create();
msg.header.parameters.addAttribute("element", "");
return convertDoipMsgToString(syncGetMessage(msg));
}
@ -126,27 +128,21 @@ public class DOIPUtil {
}
e.dataString = null;
}
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(repoID, BasicOperations.Create.getName())
.setBody(digitalObject)
DoipMessage msg = new DoipMessageFactory.DoipMessageBuilder()
.createRequest(repoID, BasicOperations.Create.getName()).setBody(digitalObject)
.create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String delete(String doID) {
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.Delete.getName())
.create();
DoipMessage msg = new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.Delete.getName()).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
public String listOperation(String doID) {
DoipMessage msg =
new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.ListOps.getName())
.create();
DoipMessage msg = new DoipMessageFactory.DoipMessageBuilder()
.createRequest(doID, BasicOperations.ListOps.getName()).create();
return convertDoipMsgToString(syncGetMessage(msg));
}
@ -222,7 +218,8 @@ public class DOIPUtil {
return createIrpClient(uri, null, null, null);
}
public static IRPClientWrapper createIrpClient(String uri, String pubkey, String privateKey, String repoName) {
public static IRPClientWrapper createIrpClient(String uri, String pubkey, String privateKey,
String repoName) {
EndpointConfig config = new EndpointConfig();
config.routerURI = uri;
config.repoName = repoName;

View File

@ -25,13 +25,9 @@ public class EmailUtil {
props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
props.setProperty("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.socketFactory.port", jo.get("port").getAsString());
Session session =
Session.getDefaultInstance(
props,
new Authenticator() {
Session session = Session.getDefaultInstance(props, new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
jo.get("from").getAsString(),
return new PasswordAuthentication(jo.get("from").getAsString(),
jo.get("pwd").getAsString()); // 发件人邮件用户名密码
}
});
@ -41,8 +37,8 @@ public class EmailUtil {
msg.setSubject(jo.get("subject").getAsString());
msg.setText(jo.get("content").getAsString());
msg.setFrom(new InternetAddress(jo.get("from").getAsString()));
msg.addRecipient(
Message.RecipientType.TO, new InternetAddress(jo.get("to").getAsString()));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(jo.get("to").getAsString()));
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace();

View File

@ -48,7 +48,8 @@ public class HttpUtil {
ScriptObjectMirror som = (ScriptObjectMirror) headers;
for (String key : som.getOwnKeys(true)) {
Object val = som.get(key);
if (val instanceof String) connection.setRequestProperty(key, (String) val);
if (val instanceof String)
connection.setRequestProperty(key, (String) val);
}
} else {
connection.setRequestProperty("Accept", "application/json");
@ -77,9 +78,11 @@ public class HttpUtil {
}
return ret;
}
public static String encodeURI(String str) {
return URLEncoder.encode(str);
}
public static String decodeURI(String str) {
return URLDecoder.decode(str);
}
@ -131,7 +134,8 @@ public class HttpUtil {
connection.setRequestProperty("Content-Type", "application/json");
}
connection.connect();
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
OutputStreamWriter out =
new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8);
out.append((String) str.get("data"));
out.flush();
out.close();
@ -156,24 +160,17 @@ public class HttpUtil {
private static CloseableHttpClient getHttpClient(String url) {
try {
SSLContext sslcontext =
SSLContexts.custom()
.loadTrustMaterial(
null,
(arg0, arg1) -> true)
.build();
SSLContexts.custom().loadTrustMaterial(null, (arg0, arg1) -> true).build();
SSLConnectionSocketFactory sslSf =
new SSLConnectionSocketFactory(
sslcontext, null, null, new NoopHostnameVerifier());
SSLConnectionSocketFactory sslSf = new SSLConnectionSocketFactory(sslcontext, null,
null, new NoopHostnameVerifier());
int tle = 10;
if (url.contains("data.tj.gov.cn")) {
tle = 3;
}
return HttpClients.custom()
.setSSLSocketFactory(sslSf)
return HttpClients.custom().setSSLSocketFactory(sslSf)
.setKeepAliveStrategy((arg0, arg1) -> 0)
.setConnectionTimeToLive(tle, TimeUnit.SECONDS)
.build();
.setConnectionTimeToLive(tle, TimeUnit.SECONDS).build();
} catch (Exception e) {
e.printStackTrace();
}
@ -235,18 +232,15 @@ public class HttpUtil {
RequestBody.create(MediaType.parse("application/json; charset=utf-8"), req.data);
Request request = new Request.Builder().url(req.url).post(body).build(); // 2.瀹氫箟涓<EFBFBD>涓猺equest
Call call = okHttpClient.newCall(request); //
call.enqueue(
new Callback() { //
call.enqueue(new Callback() { //
@Override
public void onFailure(Call call, IOException e) {
}
public void onFailure(Call call, IOException e) {}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string(); //
System.out.println("currentEngine:");
DesktopEngine.applyWithGlobal(
callback, currentEngine.getNashornGlobal(), result);
DesktopEngine.applyWithGlobal(callback, currentEngine.getNashornGlobal(), result);
}
});
return "success";

View File

@ -1,33 +1,17 @@
package org.bdware.sc.boundry.utils;
import com.google.api.client.json.Json;
import com.google.gson.JsonObject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.bdware.doip.audit.EndpointConfig;
import org.bdware.doip.audit.client.AuditIrpClient;
import org.bdware.doip.audit.config.TempConfigStorage;
import org.bdware.doip.codec.digitalObject.DigitalObject;
import org.bdware.doip.codec.digitalObject.Element;
import org.bdware.doip.codec.doipMessage.DoipMessage;
import org.bdware.doip.codec.doipMessage.DoipMessageFactory;
import org.bdware.doip.codec.operations.BasicOperations;
import org.bdware.doip.endpoint.client.ClientConfig;
import org.bdware.doip.endpoint.client.DoipClientImpl;
import org.bdware.doip.endpoint.client.DoipMessageCallback;
import org.bdware.irp.exception.IrpClientException;
import org.bdware.irp.stateinfo.StateInfoBase;
import org.bdware.sc.compiler.PermissionStub;
import org.bdware.sc.engine.JSONTool;
import org.bdware.sc.node.Permission;
import org.bdware.sc.util.JsonUtil;
import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@PermissionStub(permission = Permission.IRP)
public class IRPUtil {
@ -40,7 +24,8 @@ public class IRPUtil {
EndpointConfig endpointConfig = configStorage.loadAsEndpointConfig();
if (jo.has("clientDoId")) {
this.auditIrpClient = new AuditIrpClient(jo.get("clientDoId").getAsString(), endpointConfig);
this.auditIrpClient =
new AuditIrpClient(jo.get("clientDoId").getAsString(), endpointConfig);
} else {
this.auditIrpClient = new AuditIrpClient(endpointConfig);
}

View File

@ -36,7 +36,8 @@ public class LedgerUtil {
public static Client getDefaultClient() {
String ledgerParam = JavaScriptEntry.get.syncGet("", "getLedgerParams", "");
JsonElement jo = JsonParser.parseString(ledgerParam);
JsonObject param = jo.getAsJsonObject().get("nodes").getAsJsonArray().get(0).getAsJsonObject();
JsonObject param =
jo.getAsJsonObject().get("nodes").getAsJsonArray().get(0).getAsJsonObject();
return new Client(param.get("ip").getAsString(), param.get("port").getAsInt());
}
@ -57,7 +58,8 @@ public class LedgerUtil {
ret.put("to", HashUtil.byteArray2Str(transaction.getTo().toByteArray(), 0), false);
ret.put("type", transaction.getType().toString(), false);
ret.put("data", new String(transaction.getData().toByteArray()), false);
ret.put("blockHsah", HashUtil.byteArray2Str(transaction.getBlockHash().toByteArray(), 0), false);
ret.put("blockHsah", HashUtil.byteArray2Str(transaction.getBlockHash().toByteArray(), 0),
false);
return ret;
}
@ -66,14 +68,8 @@ public class LedgerUtil {
String from = str.get("from").toString();
String to = str.get("to").toString();
String data = str.get("data").toString();
SendTransactionResponse result =
c.sendTransactionSync(
ledger,
TransactionType.MESSAGE,
from,
random.nextLong(),
to,
data.getBytes());
SendTransactionResponse result = c.sendTransactionSync(ledger, TransactionType.MESSAGE,
from, random.nextLong(), to, data.getBytes());
return HashUtil.byteArray2Str(result.getHash().toByteArray(), 0);
}
}

View File

@ -18,12 +18,8 @@ public class MongoDBUtil {
List addrs = new ArrayList<>();
addrs.add(serverAddress);
Method createeScramSha1 =
Class.forName("com.mongodb.MongoCredential")
.getDeclaredMethod(
"createScramSha1Credential",
String.class,
String.class,
char[].class);
Class.forName("com.mongodb.MongoCredential").getDeclaredMethod(
"createScramSha1Credential", String.class, String.class, char[].class);
Object credential = createeScramSha1.invoke(null, usrName, dbName, pwd.toCharArray());
List credentials = new ArrayList<>();
credentials.add(credential);

View File

@ -116,7 +116,8 @@ public class MultiTagIndexDBUtil {
public List<Long> countInInterval(String tag, long startTime, long endTime, long interval) {
List<Long> ret = new ArrayList<>();
if (interval <= 0) return ret;
if (interval <= 0)
return ret;
long start = rocksDB.queryOffset(tag, startTime);
long delta;
startTime += interval;

View File

@ -46,14 +46,13 @@ public class SM2Util {
JO ret = new JO(PropertyMap.newMap());
try {
byte[] sig = ByteUtils.fromHexString(signature);
ECPublicKeyParameters pubKey =
BCECUtil.createECPublicKeyFromStrParameters(
pubKeyStr,
org.zz.gmhelper.SM2Util.CURVE,
org.zz.gmhelper.SM2Util.DOMAIN_PARAMS);
ECPublicKeyParameters pubKey = BCECUtil.createECPublicKeyFromStrParameters(pubKeyStr,
org.zz.gmhelper.SM2Util.CURVE, org.zz.gmhelper.SM2Util.DOMAIN_PARAMS);
boolean value = org.zz.gmhelper.SM2Util.verify(pubKey, content.getBytes(), sig);
if (value) ret.put("status", "success", false);
else ret.put("status", "failed", false);
if (value)
ret.put("status", "success", false);
else
ret.put("status", "failed", false);
ret.put("result", value, false);
} catch (Exception e) {
ret.put("status", "failed", false);
@ -65,9 +64,8 @@ public class SM2Util {
public static String encrypt(String content, String pubkey) {
try {
return ByteUtils.toHexString(
org.zz.gmhelper.SM2Util.encrypt(
SM2KeyPair.publicKeyStr2ECPoint(pubkey), content.getBytes()));
return ByteUtils.toHexString(org.zz.gmhelper.SM2Util
.encrypt(SM2KeyPair.publicKeyStr2ECPoint(pubkey), content.getBytes()));
} catch (InvalidCipherTextException e) {
e.printStackTrace();
}
@ -76,12 +74,10 @@ public class SM2Util {
public static String decrypt(String content, String privateKey) {
try {
ECPrivateKeyParameters privateKeyParam =
new ECPrivateKeyParameters(
ECPrivateKeyParameters privateKeyParam = new ECPrivateKeyParameters(
new BigInteger(privateKey, 16), org.zz.gmhelper.SM2Util.DOMAIN_PARAMS);
return new String(
org.zz.gmhelper.SM2Util.decrypt(
privateKeyParam, ByteUtils.fromHexString(content)));
return new String(org.zz.gmhelper.SM2Util.decrypt(privateKeyParam,
ByteUtils.fromHexString(content)));
} catch (InvalidCipherTextException e) {
e.printStackTrace();
}

View File

@ -16,8 +16,7 @@ public class SQLUtil {
.setContextClassLoader(ContractProcess.instance.engine.getClassLoad());
Class.forName(driver, true, ContractProcess.instance.engine.getClassLoad());
} catch (Exception e) {
System.out.println(
"Still can't find class! Cl of SQLUtil:\n\t\t"
System.out.println("Still can't find class! Cl of SQLUtil:\n\t\t"
+ SQLUtil.class.getClassLoader());
System.out.println(
"Cl of DEgine:\n\t\t" + ContractProcess.instance.engine.getClassLoad());
@ -40,18 +39,15 @@ public class SQLUtil {
if (password != null && !"undefined".equals(password)) {
info.put("password", password);
}
if (url.startsWith("jdbc:postgresql")) info.put("sslmode", "allow");
if (url.startsWith("jdbc:postgresql"))
info.put("sslmode", "allow");
Class<?> clz =
Class.forName(
"java.sql.DriverManager",
true,
Class<?> clz = Class.forName("java.sql.DriverManager", true,
ContractProcess.instance.engine.getClassLoad());
// set caller class into null, thus use YJSClassLoader in
// DriverManager.isDriverAllowed(driver,classloader);
Method m =
clz.getDeclaredMethod(
"getConnection", String.class, Properties.class, Class.class);
Method m = clz.getDeclaredMethod("getConnection", String.class, Properties.class,
Class.class);
m.setAccessible(true);
return (Connection) m.invoke(null, url, info, null);
} catch (Exception e) {

View File

@ -23,7 +23,8 @@ public class UtilRegistry {
for (String name : allName) {
Class<?> clz;
try {
clz = Class.forName(String.format("%s.%sUtil", UtilRegistry.class.getPackage().getName(), name));
clz = Class.forName(String.format("%s.%sUtil",
UtilRegistry.class.getPackage().getName(), name));
ret.add(clz);
} catch (Throwable e) {
e.printStackTrace();
@ -52,10 +53,8 @@ public class UtilRegistry {
public static String getInitStr(String s, boolean open) {
if (stubClzNameMap.containsKey(s)) {
String ret =
String.format(
"%sUtil = %s.%sUtil%s;\n",
s, UtilRegistry.class.getPackage().getName(), s, open ? "" : "Stub");
String ret = String.format("%sUtil = %s.%sUtil%s;\n", s,
UtilRegistry.class.getPackage().getName(), s, open ? "" : "Stub");
return ret;
}
return "";

View File

@ -9,8 +9,8 @@ public abstract class AnnotationProcessor {
return;
}
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) throws Exception {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) throws Exception {
return;
}
}

View File

@ -34,7 +34,8 @@ public class PermissionStubGenerator extends ClassVisitor implements Opcodes {
return null;
}
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) {
public void visit(int version, int access, String name, String signature, String superName,
String[] interfaces) {
if (cv != null) {
cv.visit(version, access, name + "Stub", null, "java/lang/Object", null);
}
@ -53,7 +54,8 @@ public class PermissionStubGenerator extends ClassVisitor implements Opcodes {
mv.visitEnd();
}
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
public MethodVisitor visitMethod(int access, String name, String desc, String signature,
String[] exceptions) {
if (cv != null) {
if (name.equals("<clinit>"))
return null;
@ -69,7 +71,8 @@ public class PermissionStubGenerator extends ClassVisitor implements Opcodes {
mv.visitTypeInsn(NEW, "javax/script/ScriptException");
mv.visitInsn(DUP);
mv.visitLdcInsn("Do not have " + p + " Permission");
mv.visitMethodInsn(INVOKESPECIAL, "javax/script/ScriptException", "<init>", "(Ljava/lang/String;)V");
mv.visitMethodInsn(INVOKESPECIAL, "javax/script/ScriptException", "<init>",
"(Ljava/lang/String;)V");
mv.visitInsn(ATHROW);
mv.visitMaxs(5, 20);
mv.visitEnd();

View File

@ -34,8 +34,7 @@ public class YJSCompiler {
ContractNode contract;
private static final Logger LOGGER = LogManager.getLogger(YJSCompiler.class);
public YJSCompiler() {
}
public YJSCompiler() {}
public static ScriptFunction compileWithGlobal(Source source, Global global, Context context) {
Global oldGlobal = Context.getGlobal();
@ -55,8 +54,8 @@ public class YJSCompiler {
}
}
private static Context makeContext(
final InputStream in, final OutputStream out, final OutputStream err) {
private static Context makeContext(final InputStream in, final OutputStream out,
final OutputStream err) {
final PrintStream pout =
out instanceof PrintStream ? (PrintStream) out : new PrintStream(out);
final PrintStream perr =
@ -92,14 +91,8 @@ public class YJSCompiler {
}
}
}
return new Context(
options,
errors,
wout,
werr,
Thread.currentThread().getContextClassLoader(),
new YJSFilter(),
null);
return new Context(options, errors, wout, werr,
Thread.currentThread().getContextClassLoader(), new YJSFilter(), null);
}
public ContractZipBundle compile(ZipFile zf) throws Exception {
@ -115,9 +108,8 @@ public class YJSCompiler {
// Gson gson = new GsonBuilder().registerTypeAdapter(Contract.Type.class,
// typeAdapter)
ContractManifest cm =
JsonUtil.GSON.fromJson(
new InputStreamReader(manifestInput), ContractManifest.class);
ContractManifest cm = JsonUtil.GSON.fromJson(new InputStreamReader(manifestInput),
ContractManifest.class);
// 如果没有就不限制根据gas进行插装
if (0L != cm.getInsnLimit()) {
LOGGER.info("++++++++++++++++++++++true");
@ -161,23 +153,21 @@ public class YJSCompiler {
// add function _preSub
// Kaidong Wu
String preSubConName = cm.main.substring(0, cm.main.length() - 4) + "PreSub";
String preSubContract =
"contract "
+ preSubConName
String preSubContract = "contract " + preSubConName
+ " { function _preSub (e) { YancloudUtil.preSub(e.topic, e.content); }}";
ContractNode preSubNode =
compile(
new ByteArrayInputStream(preSubContract.getBytes(StandardCharsets.UTF_8)),
compile(new ByteArrayInputStream(preSubContract.getBytes(StandardCharsets.UTF_8)),
preSubConName + ".yjs");
czb.put(preSubConName + ".yjs", preSubNode);
LOGGER.info("--compile-- " + preSubConName);
String globalBeanName = cm.main.substring(0, cm.main.length() - 4) + "GlobalBean";
String globalBeanContract =
"contract " + globalBeanName + "{ function setGlobal (_global) { Global = _global; }\n" +
" function getGlobal () { return Global; }}";
String globalBeanContract = "contract " + globalBeanName
+ "{ function setGlobal (_global) { Global = _global; }\n"
+ " function getGlobal () { return Global; }}";
czb.put(globalBeanName + ".yjs",
compile(new ByteArrayInputStream(globalBeanContract.getBytes(StandardCharsets.UTF_8)),
compile(new ByteArrayInputStream(
globalBeanContract.getBytes(StandardCharsets.UTF_8)),
globalBeanName + ".yjs"));
LOGGER.info("--compile-- " + globalBeanName);
czb.setMergedContractNode();

View File

@ -7,6 +7,8 @@ import org.bdware.sc.node.FunctionNode;
public class Confidential extends AnnotationProcessor {
@Override
public void processFunction(AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
functionNode.setConfidential(true); }
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
functionNode.setConfidential(true);
}
}

View File

@ -9,8 +9,8 @@ import org.bdware.sc.util.JsonUtil;
public class Cost extends AnnotationProcessor {
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
CostDetail detail = JsonUtil.fromJson(anno.getArgs().get(0), CostDetail.class);
functionNode.setCost(detail);
if (detail.isCountGas())

View File

@ -10,7 +10,8 @@ import org.bdware.sc.node.FunctionNode;
// DOOP is designed for DoipModule which contains specific functions for RepositoryHandler
public class DOOP extends AnnotationProcessor {
@Override
public void processFunction(AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) throws Exception {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) throws Exception {
// 通过DOOP注解解析对应的值并放进对应的FunctionNode中
functionNode.setIsExport(true);
functionNode.setIsDoipOperation(true);

View File

@ -8,7 +8,8 @@ import org.bdware.sc.node.FunctionNode;
public class HomomorphicDecrypt extends AnnotationProcessor {
@Override
public void processFunction(AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
functionNode.setHomomorphicDecrypt(true);
functionNode.setKeyManagerID(anno.getArgs().get(0));
functionNode.setSecretID(anno.getArgs().get(1));

View File

@ -8,7 +8,8 @@ import org.bdware.sc.node.FunctionNode;
public class HomomorphicEncrypt extends AnnotationProcessor {
@Override
public void processFunction(AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
functionNode.setHomomorphicEncrypt(true);
functionNode.setKeyManagerID(anno.getArgs().get(0));
functionNode.setSecretID(anno.getArgs().get(1));

View File

@ -8,8 +8,8 @@ import org.bdware.sc.node.FunctionNode;
public class Join extends AnnotationProcessor {
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
// functionNode.setRouteInfo(RouteInfo.create(anno,contractNode));
// 增加标记在ContractNode中记录Join相关的函数和Join规则
functionNode.setJoinInfo(JoinInfo.create(anno, contractNode));

View File

@ -14,12 +14,11 @@ public class LogLocation extends AnnotationProcessor {
}
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
if (anno != null && anno.getArgs() != null)
for (String s : anno.getArgs()) {
if (s.equals("\"dataware\"")
|| s.equals("\"bdledger\"")
if (s.equals("\"dataware\"") || s.equals("\"bdledger\"")
|| s.equals("\"bdledger:\"")) {
functionNode.setLogToBDContract(true);
} else if (s.startsWith("\"bdledger:") && s.length() > 11) {

View File

@ -15,12 +15,13 @@ public class LogType extends AnnotationProcessor {
}
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
for (String str : anno.getArgs()) {
org.bdware.sc.node.LogType type = org.bdware.sc.node.LogType.parse(str);
functionNode.addLogType(type);
if (type == org.bdware.sc.node.LogType.Branch) contractNode.setInstrumentBranch(true);
if (type == org.bdware.sc.node.LogType.Branch)
contractNode.setInstrumentBranch(true);
}
}
}

View File

@ -1,17 +1,15 @@
package org.bdware.sc.compiler.ap;
import com.google.gson.Gson;
import org.bdware.sc.bean.RouteInfo;
import org.bdware.sc.compiler.AnnotationProcessor;
import org.bdware.sc.node.AnnotationNode;
import org.bdware.sc.node.ContractNode;
import org.bdware.sc.node.CostDetail;
import org.bdware.sc.node.FunctionNode;
public class Route extends AnnotationProcessor {
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
functionNode.setRouteInfo(RouteInfo.create(anno, contractNode));
}
}

View File

@ -9,8 +9,8 @@ import org.bdware.sc.node.FunctionNode;
public class Split extends AnnotationProcessor {
@Override
public void processFunction(
AnnotationNode anno, ContractNode contractNode, FunctionNode functionNode) {
public void processFunction(AnnotationNode anno, ContractNode contractNode,
FunctionNode functionNode) {
functionNode.setRouteInfo(RouteInfo.create(anno, contractNode));
}
}

View File

@ -13,7 +13,8 @@ import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
public class SharableVar {
public final static HashedWheelTimer HASHED_WHEEL_TIMER = new HashedWheelTimer(new ThreadFactory() {
public final static HashedWheelTimer HASHED_WHEEL_TIMER =
new HashedWheelTimer(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = Executors.defaultThreadFactory().newThread(r);
@ -31,7 +32,8 @@ public class SharableVar {
private SyncTimeout nextTimeOut;
public SharableVar(String cpId, String identifier, SharableVarManager.VarResolveResult resolveResult) {
public SharableVar(String cpId, String identifier,
SharableVarManager.VarResolveResult resolveResult) {
counter = new GCounter(cpId, identifier);
myId = cpId;
varId = identifier;

View File

@ -49,7 +49,8 @@ public class SharableVarManager {
String content = message.header.parameters.attributes.get("content").getAsString();
SharableVar var = getVar(varId);
var.join(content);
DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
DoipMessageFactory.DoipMessageBuilder builder =
new DoipMessageFactory.DoipMessageBuilder();
builder.createResponse(DoipResponseCode.Success, message);
builder.addAttributes("msg", "success");
return builder.create();
@ -57,7 +58,8 @@ public class SharableVarManager {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace();
e.printStackTrace(new PrintStream(bo));
DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
DoipMessageFactory.DoipMessageBuilder builder =
new DoipMessageFactory.DoipMessageBuilder();
builder.createResponse(DoipResponseCode.UnKnownError, message);
builder.addAttributes("exception", bo.toString());
return builder.create();
@ -83,7 +85,8 @@ public class SharableVarManager {
client.sendMessage(doipMessage, new DoipMessageCallback() {
@Override
public void onResult(DoipMessage doipMessage) {
LOGGER.info("RECV Sync:" + JsonUtil.toJson(JsonDoipMessage.fromDoipMessage(doipMessage)));
LOGGER.info("RECV Sync:"
+ JsonUtil.toJson(JsonDoipMessage.fromDoipMessage(doipMessage)));
}
});
}
@ -104,14 +107,18 @@ public class SharableVarManager {
public synchronized SharableVar createVar(String identifier, String type) {
try {
if (allVars.containsKey(identifier)) return allVars.get(identifier);
if (allVars.containsKey(identifier))
return allVars.get(identifier);
StateInfoBase stateInfoBase = client.resolve(identifier);
if (stateInfoBase.handleValues.has("bdwType") && stateInfoBase.handleValues.get("bdwType").getAsString().equals("SharableVar")) {
VarResolveResult resolveResult = JsonUtil.fromJson(stateInfoBase.handleValues, VarResolveResult.class);
if (stateInfoBase.handleValues.has("bdwType") && stateInfoBase.handleValues
.get("bdwType").getAsString().equals("SharableVar")) {
VarResolveResult resolveResult =
JsonUtil.fromJson(stateInfoBase.handleValues, VarResolveResult.class);
SharableVar sharableVar = new SharableVar(cpId, identifier, resolveResult);
allVars.put(identifier, sharableVar);
return sharableVar;
} else return null;
} else
return null;
} catch (Exception e) {
e.printStackTrace();
return null;

View File

@ -23,23 +23,26 @@ public class ConfidentialContractUtil {
public static final String CONFIDENTIAL_TEMPLATE_PATH = System.getenv("GRAPHENE_DIR")
+ File.separator + "Examples" + File.separator + "nodejs-secret";
public static final String CONFIDENTIAL_SCRIPT_PATH = System.getenv("GRAPHENE_DIR")
+ File.separator + "App";
public static final String CONFIDENTIAL_SCRIPT_PATH =
System.getenv("GRAPHENE_DIR") + File.separator + "App";
public static final String[] COMMAND = {"bash", "executeContract.sh"};
private static final Type MapType = TypeToken.getParameterized(HashMap.class, String.class, String.class).getType();
private static final Type MapType =
TypeToken.getParameterized(HashMap.class, String.class, String.class).getType();
public static String executeConfidentialContract(ContractRequest input) throws IOException, InterruptedException {
public static String executeConfidentialContract(ContractRequest input)
throws IOException, InterruptedException {
File runDir = new File(CONFIDENTIAL_SCRIPT_PATH + File.separator + input.getRequestID());
ProcessBuilder pb = new ProcessBuilder(COMMAND);
pb.directory(runDir);
Process p = pb.start();
p.waitFor();
File resultFile = new File(CONFIDENTIAL_SCRIPT_PATH + File.separator + input.getRequestID() +
File.separator + "result.json");
File resultFile = new File(CONFIDENTIAL_SCRIPT_PATH + File.separator + input.getRequestID()
+ File.separator + "result.json");
return FileUtils.readFileToString(resultFile, StandardCharsets.UTF_8);
}
public static void generateConfidentialContract(ContractNode cn, ScriptObjectMirror globalVars, Global global) {
public static void generateConfidentialContract(ContractNode cn, ScriptObjectMirror globalVars,
Global global) {
List<FunctionNode> functionNodes = cn.getFunctions();
for (FunctionNode fn : functionNodes) {
// assuming only one confidential function for now
@ -54,18 +57,46 @@ public class ConfidentialContractUtil {
}
}
// load necessary Node.js libraries
jsStr.append("var fs = require('fs');\n" + "var crypto = require('crypto');\n" + "var sm2 = require('sm-crypto').sm2;\n");
jsStr.append("var fs = require('fs');\n" + "var crypto = require('crypto');\n"
+ "var sm2 = require('sm-crypto').sm2;\n");
// load Global variables and arguments from files
jsStr.append("let rawGlobal = fs.readFileSync('global.json').toString();\n" + "let Global = JSON.parse(rawGlobal);\n");
jsStr.append("let rawArg = fs.readFileSync('arg.json').toString();\n" + "let jsonArg = JSON.parse(rawArg);\n" + "let requester = jsonArg.requester;\n" + "let arg = jsonArg.arg;\n");
jsStr.append("let rawGlobal = fs.readFileSync('global.json').toString();\n"
+ "let Global = JSON.parse(rawGlobal);\n");
jsStr.append("let rawArg = fs.readFileSync('arg.json').toString();\n"
+ "let jsonArg = JSON.parse(rawArg);\n"
+ "let requester = jsonArg.requester;\n" + "let arg = jsonArg.arg;\n");
jsStr.append("let srcStr = fs.readFileSync('contract.js').toString();\n");
// verify signatures and decrypt all confidential variables Important!!!!!
jsStr.append("for (var k in Global) {\n" + " if (Global.hasOwnProperty(k)) {\n" + " if (k.startsWith('conf_')) {\n" + " let sig = Global[k].signature;\n" + " let pubKey = Global[k].owner;\n" + " let verifyResult = sm2.doVerifySignature(srcStr, sig, pubKey);\n" + " if (verifyResult) {\n" + " let newKey = k.substring(5);\n" + " let decKey = Buffer.from(process.env['KEY_'+pubKey.substring(0,10).toUpperCase()], 'hex');\n" + " let decIv = Buffer.from(Global[k].iv, 'hex');\n" + " let cipherText = Buffer.from(Global[k].cipherText, 'hex');\n" + " let decipher = crypto.createDecipheriv('aes-256-cbc', decKey, decIv);\n" + " let decrypted = decipher.update(cipherText);\n" + " decrypted = Buffer.concat([decrypted, decipher.final()]);\n" + " let plaintext = decrypted.toString();\n" + " Global[newKey] = plaintext;\n" + " }\n" + " }\n" + " }\n" + "}\n");
jsStr.append("for (var k in Global) {\n" + " if (Global.hasOwnProperty(k)) {\n"
+ " if (k.startsWith('conf_')) {\n"
+ " let sig = Global[k].signature;\n"
+ " let pubKey = Global[k].owner;\n"
+ " let verifyResult = sm2.doVerifySignature(srcStr, sig, pubKey);\n"
+ " if (verifyResult) {\n" + " let newKey = k.substring(5);\n"
+ " let decKey = Buffer.from(process.env['KEY_'+pubKey.substring(0,10).toUpperCase()], 'hex');\n"
+ " let decIv = Buffer.from(Global[k].iv, 'hex');\n"
+ " let cipherText = Buffer.from(Global[k].cipherText, 'hex');\n"
+ " let decipher = crypto.createDecipheriv('aes-256-cbc', decKey, decIv);\n"
+ " let decrypted = decipher.update(cipherText);\n"
+ " decrypted = Buffer.concat([decrypted, decipher.final()]);\n"
+ " let plaintext = decrypted.toString();\n"
+ " Global[newKey] = plaintext;\n" + " }\n" + " }\n"
+ " }\n" + "}\n");
// call function
jsStr.append("var ret = ").append(fn.functionName).append("(arg, requester, null);\n");
// TODO: encrypt all confidential variables so state can be updated in confidential function @shujunyi
jsStr.append("var ret = ").append(fn.functionName)
.append("(arg, requester, null);\n");
// TODO: encrypt all confidential variables so state can be updated in confidential
// function @shujunyi
// encrypt return value and write to a file
jsStr.append("var retStr = JSON.stringify(ret);\n" + "var key = Buffer.from(process.env['KEY_'+requester.substring(0,10).toUpperCase()], 'hex');\n" + "var iv = crypto.randomBytes(16);\n" + "let cipher = crypto.createCipheriv('aes-256-cbc', key, iv); \n" + "let encRet = cipher.update(retStr);\n" + "encRet = Buffer.concat([encRet, cipher.final()]);\n" + "let result = {iv: iv.toString('hex'), encryptedData: encRet.toString('hex')};\n" + "let resultStr = JSON.stringify(result);\n" + "fs.writeFileSync('result.json', resultStr);\n");
jsStr.append("var retStr = JSON.stringify(ret);\n"
+ "var key = Buffer.from(process.env['KEY_'+requester.substring(0,10).toUpperCase()], 'hex');\n"
+ "var iv = crypto.randomBytes(16);\n"
+ "let cipher = crypto.createCipheriv('aes-256-cbc', key, iv); \n"
+ "let encRet = cipher.update(retStr);\n"
+ "encRet = Buffer.concat([encRet, cipher.final()]);\n"
+ "let result = {iv: iv.toString('hex'), encryptedData: encRet.toString('hex')};\n"
+ "let resultStr = JSON.stringify(result);\n"
+ "fs.writeFileSync('result.json', resultStr);\n");
// put script into Global so owner can send it and collect signatures
Object som = ScriptObjectMirror.wrap(jsStr.toString(), global);
globalVars.put("src_" + fn.functionName, som);
@ -85,11 +116,8 @@ public class ConfidentialContractUtil {
}
}
public static void dumpScriptAndStates(
Invocable engine,
FunctionNode functionNode,
ContractRequest input,
ScriptObjectMirror globalVars)
public static void dumpScriptAndStates(Invocable engine, FunctionNode functionNode,
ContractRequest input, ScriptObjectMirror globalVars)
throws IOException, ScriptException, NoSuchMethodException {
Map<String, Object> globalMap = (Map<String, Object>) convertIntoJavaObject(globalVars);
String dest = CONFIDENTIAL_SCRIPT_PATH + File.separator + input.getRequestID();
@ -136,156 +164,116 @@ public class ConfidentialContractUtil {
return dependentFunctions;
}
private static String generateGrapheneManifestStr(Invocable engine, ContractRequest input) throws ScriptException, NoSuchMethodException {
String manifestStr = "# Nodejs manifest file example\n" +
"#\n" +
"# This manifest was prepared and tested on Ubuntu 18.04.\n" +
"\n" +
"loader.argv0_override = \"nodejs\"\n" +
"\n" +
"# LibOS layer library of Graphene. There is currently only one implementation,\n" +
"# so it is always set to libsysdb.so.\n" +
"loader.preload = \"file:$(GRAPHENEDIR)/Runtime/libsysdb.so\"\n" +
"\n" +
"# Show/hide debug log of Graphene ('inline' or 'none' respectively).\n" +
"loader.debug_type = \"$(GRAPHENEDEBUG)\"\n" +
"\n" +
"# Read application arguments directly from the command line. Don't use this on production!\n" +
"loader.insecure__use_cmdline_argv = 1\n" +
"\n" +
"# Specify paths to search for libraries. The usual LD_LIBRARY_PATH syntax\n" +
"# applies. Paths must be in-Graphene visible paths, not host-OS paths (i.e.,\n" +
"# paths must be taken from fs.mount.xxx.path, not fs.mount.xxx.uri).\n" +
"loader.env.LD_LIBRARY_PATH = \"/lib:/usr/lib:$(ARCH_LIBDIR):/usr/$(ARCH_LIBDIR):./\"\n" +
"\n" +
"# Mount host-OS directory to required libraries (in 'uri') into in-Graphene\n" +
"# visible directory /lib (in 'path').\n" +
"fs.mount.lib.type = \"chroot\"\n" +
"fs.mount.lib.path = \"/lib\"\n" +
"fs.mount.lib.uri = \"file:$(GRAPHENEDIR)/Runtime\"\n" +
"\n" +
"fs.mount.lib2.type = \"chroot\"\n" +
"fs.mount.lib2.path = \"$(ARCH_LIBDIR)\"\n" +
"fs.mount.lib2.uri = \"file:$(ARCH_LIBDIR)\"\n" +
"\n" +
"#fs.mount.lib3.type = \"chroot\"\n" +
"#fs.mount.lib3.path = \"/usr/$(ARCH_LIBDIR)\"\n" +
"#fs.mount.lib3.uri = \"file:/usr/$(ARCH_LIBDIR)\"\n" +
"\n" +
"fs.mount.usr.type = \"chroot\"\n" +
"fs.mount.usr.path = \"/usr\"\n" +
"fs.mount.usr.uri = \"file:/usr\"\n" +
"\n" +
"# Host-level directory to NSS files required by Glibc + NSS libs\n" +
"fs.mount.etc.type = \"chroot\"\n" +
"fs.mount.etc.path = \"/etc\"\n" +
"fs.mount.etc.uri = \"file:/etc\"\n" +
"\n" +
"# Workload needs to create temporary files\n" +
"fs.mount.tmp.type = \"chroot\"\n" +
"fs.mount.tmp.path = \"/tmp\"\n" +
"fs.mount.tmp.uri = \"file:/tmp\"\n" +
"\n" +
"# Set enclave size to 2GB; NodeJS expects around 1.7GB of heap on startup,\n" +
"# see e.g. https://github.com/nodejs/node/issues/13018.\n" +
"# Recall that SGX v1 requires to specify enclave size at enclave creation time.\n" +
"sgx.enclave_size = \"2G\"\n" +
"\n" +
"# Set maximum number of in-enclave threads (somewhat arbitrarily) to 8. Recall\n" +
"# that SGX v1 requires to specify the maximum number of simultaneous threads at\n" +
"# enclave creation time.\n" +
"sgx.thread_num = 16\n" +
"\n" +
"# Specify all libraries used by Node.js and its dependencies (including all libs\n" +
"# which can be loaded at runtime via dlopen).\n" +
"sgx.trusted_files.ld = \"file:$(GRAPHENEDIR)/Runtime/ld-linux-x86-64.so.2\"\n" +
"sgx.trusted_files.libc = \"file:$(GRAPHENEDIR)/Runtime/libc.so.6\"\n" +
"sgx.trusted_files.libm = \"file:$(GRAPHENEDIR)/Runtime/libm.so.6\"\n" +
"sgx.trusted_files.libdl = \"file:$(GRAPHENEDIR)/Runtime/libdl.so.2\"\n" +
"sgx.trusted_files.librt = \"file:$(GRAPHENEDIR)/Runtime/librt.so.1\"\n" +
"sgx.trusted_files.libutil = \"file:$(GRAPHENEDIR)/Runtime/libutil.so.1\"\n" +
"sgx.trusted_files.libpthread = \"file:$(GRAPHENEDIR)/Runtime/libpthread.so.0\"\n" +
"sgx.trusted_files.libnssdns = \"file:$(GRAPHENEDIR)/Runtime/libnss_dns.so.2\"\n" +
"sgx.trusted_files.libresolv = \"file:$(GRAPHENEDIR)/Runtime/libresolv.so.2\"\n" +
"\n" +
"sgx.trusted_files.libstdc = \"file:/usr/$(ARCH_LIBDIR)/libstdc++.so.6\"\n" +
"sgx.trusted_files.libgccs = \"file:$(ARCH_LIBDIR)/libgcc_s.so.1\"\n" +
"sgx.trusted_files.libaptpkg = \"file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.5.0\"\n" +
"sgx.trusted_files.liblz4 = \"file:/usr/$(ARCH_LIBDIR)/liblz4.so.1\"\n" +
"sgx.trusted_files.libsystemd = \"file:$(ARCH_LIBDIR)/libsystemd.so.0\"\n" +
"sgx.trusted_files.libselinux = \"file:$(ARCH_LIBDIR)/libselinux.so.1\"\n" +
"sgx.trusted_files.libgcrypt = \"file:$(ARCH_LIBDIR)/libgcrypt.so.20\"\n" +
"sgx.trusted_files.libpcre = \"file:$(ARCH_LIBDIR)/libpcre.so.3\"\n" +
"sgx.trusted_files.libgpgerror = \"file:$(ARCH_LIBDIR)/libgpg-error.so.0\"\n" +
"sgx.trusted_files.libexpat = \"file:$(ARCH_LIBDIR)/libexpat.so.1\"\n" +
"sgx.trusted_files.libz = \"file:$(ARCH_LIBDIR)/libz.so.1\"\n" +
"sgx.trusted_files.libz2 = \"file:$(ARCH_LIBDIR)/libbz2.so.1.0\"\n" +
"sgx.trusted_files.liblzma = \"file:$(ARCH_LIBDIR)/liblzma.so.5\"\n" +
"sgx.trusted_files.libmpdec = \"file:/usr/$(ARCH_LIBDIR)/libmpdec.so.2\"\n" +
"\n" +
"# Name Service Switch (NSS) libraries (Glibc dependencies)\n" +
"sgx.trusted_files.libnssfiles = \"file:$(ARCH_LIBDIR)/libnss_files.so.2\"\n" +
"sgx.trusted_files.libnsscompat = \"file:$(ARCH_LIBDIR)/libnss_compat.so.2\"\n" +
"sgx.trusted_files.libnssnis = \"file:$(ARCH_LIBDIR)/libnss_nis.so.2\"\n" +
"sgx.trusted_files.libnsl = \"file:$(ARCH_LIBDIR)/libnsl.so.1\"\n" +
"sgx.trusted_files.libnssmyhostname = \"file:$(ARCH_LIBDIR)/libnss_myhostname.so.2\"\n" +
"sgx.trusted_files.libnssmdns = \"file:$(ARCH_LIBDIR)/libnss_mdns4_minimal.so.2\"\n" +
"\n" +
"# Scratch space\n" +
"sgx.allowed_files.tmp = \"file:/tmp\"\n" +
"\n" +
"# APT config files\n" +
"sgx.allowed_files.aptconfd = \"file:/etc/apt/apt.conf.d\"\n" +
"sgx.allowed_files.aptconf = \"file:/etc/apt/apt.conf\"\n" +
"sgx.allowed_files.apport = \"file:/etc/default/apport\"\n" +
"\n" +
"# Name Service Switch (NSS) files (Glibc reads these files)\n" +
"sgx.allowed_files.nsswitch = \"file:/etc/nsswitch.conf\"\n" +
"sgx.allowed_files.group = \"file:/etc/group\"\n" +
"sgx.allowed_files.passwd = \"file:/etc/passwd\"\n" +
"\n" +
"# DNS hostname resolution files (Glibc reads these files)\n" +
"sgx.allowed_files.hostconf = \"file:/etc/host.conf\"\n" +
"sgx.allowed_files.hosts = \"file:/etc/hosts\"\n" +
"sgx.allowed_files.gaiconf = \"file:/etc/gai.conf\"\n" +
"sgx.allowed_files.resolv = \"file:/etc/resolv.conf\"\n" +
"\n" +
"sgx.allowed_files.openssl = \"file:/etc/ssl/openssl.cnf\"\n" +
"\n" +
"# System's file system table\n" +
"sgx.allowed_files.fstab = \"file:/etc/fstab\"\n" +
"\n" +
"$(NODEJS_TRUSTED_LIBS)\n" +
"\n" +
"# JavaScript (trusted)\n" +
"sgx.allowed_files.smlib = \"file:node_modules\"\n" +
"sgx.trusted_files.npminfo = \"file:package.json\"\n" +
"sgx.trusted_files.contract = \"file:contract.js\"\n" +
"sgx.trusted_files.globaljson = \"file:global.json\"\n" +
"sgx.trusted_files.argjson = \"file:arg.json\"\n" +
"\n" +
"sys.insecure__allow_eventfd = 1\n" +
"\n" +
"sgx.remote_attestation = 1\n" +
"\n" +
"loader.env.LD_PRELOAD = \"libsecret_prov_attest.so\"\n" +
"loader.env.SECRET_PROVISION_CONSTRUCTOR = \"1\"\n" +
"loader.env.SECRET_PROVISION_SET_PF_KEY = \"1\"\n" +
"loader.env.SECRET_PROVISION_CA_CHAIN_PATH = \"certs/test-ca-sha256.crt\"\n" +
"loader.env.SECRET_PROVISION_SERVERS = \"localhost:4433\"\n" +
"\n" +
"sgx.trusted_files.libsecretprovattest = \"file:libsecret_prov_attest.so\"\n" +
"sgx.trusted_files.cachain = \"file:certs/test-ca-sha256.crt\"\n" +
"\n" +
"# Specify your SPID and linkable/unlinkable attestation policy\n" +
"sgx.ra_client_spid = \"DF3A8BA098E93F66CC64E8A215E98333\"\n" +
"sgx.ra_client_linkable = 0\n";
private static String generateGrapheneManifestStr(Invocable engine, ContractRequest input)
throws ScriptException, NoSuchMethodException {
String manifestStr = "# Nodejs manifest file example\n" + "#\n"
+ "# This manifest was prepared and tested on Ubuntu 18.04.\n" + "\n"
+ "loader.argv0_override = \"nodejs\"\n" + "\n"
+ "# LibOS layer library of Graphene. There is currently only one implementation,\n"
+ "# so it is always set to libsysdb.so.\n"
+ "loader.preload = \"file:$(GRAPHENEDIR)/Runtime/libsysdb.so\"\n" + "\n"
+ "# Show/hide debug log of Graphene ('inline' or 'none' respectively).\n"
+ "loader.debug_type = \"$(GRAPHENEDEBUG)\"\n" + "\n"
+ "# Read application arguments directly from the command line. Don't use this on production!\n"
+ "loader.insecure__use_cmdline_argv = 1\n" + "\n"
+ "# Specify paths to search for libraries. The usual LD_LIBRARY_PATH syntax\n"
+ "# applies. Paths must be in-Graphene visible paths, not host-OS paths (i.e.,\n"
+ "# paths must be taken from fs.mount.xxx.path, not fs.mount.xxx.uri).\n"
+ "loader.env.LD_LIBRARY_PATH = \"/lib:/usr/lib:$(ARCH_LIBDIR):/usr/$(ARCH_LIBDIR):./\"\n"
+ "\n"
+ "# Mount host-OS directory to required libraries (in 'uri') into in-Graphene\n"
+ "# visible directory /lib (in 'path').\n" + "fs.mount.lib.type = \"chroot\"\n"
+ "fs.mount.lib.path = \"/lib\"\n"
+ "fs.mount.lib.uri = \"file:$(GRAPHENEDIR)/Runtime\"\n" + "\n"
+ "fs.mount.lib2.type = \"chroot\"\n" + "fs.mount.lib2.path = \"$(ARCH_LIBDIR)\"\n"
+ "fs.mount.lib2.uri = \"file:$(ARCH_LIBDIR)\"\n" + "\n"
+ "#fs.mount.lib3.type = \"chroot\"\n"
+ "#fs.mount.lib3.path = \"/usr/$(ARCH_LIBDIR)\"\n"
+ "#fs.mount.lib3.uri = \"file:/usr/$(ARCH_LIBDIR)\"\n" + "\n"
+ "fs.mount.usr.type = \"chroot\"\n" + "fs.mount.usr.path = \"/usr\"\n"
+ "fs.mount.usr.uri = \"file:/usr\"\n" + "\n"
+ "# Host-level directory to NSS files required by Glibc + NSS libs\n"
+ "fs.mount.etc.type = \"chroot\"\n" + "fs.mount.etc.path = \"/etc\"\n"
+ "fs.mount.etc.uri = \"file:/etc\"\n" + "\n"
+ "# Workload needs to create temporary files\n"
+ "fs.mount.tmp.type = \"chroot\"\n" + "fs.mount.tmp.path = \"/tmp\"\n"
+ "fs.mount.tmp.uri = \"file:/tmp\"\n" + "\n"
+ "# Set enclave size to 2GB; NodeJS expects around 1.7GB of heap on startup,\n"
+ "# see e.g. https://github.com/nodejs/node/issues/13018.\n"
+ "# Recall that SGX v1 requires to specify enclave size at enclave creation time.\n"
+ "sgx.enclave_size = \"2G\"\n" + "\n"
+ "# Set maximum number of in-enclave threads (somewhat arbitrarily) to 8. Recall\n"
+ "# that SGX v1 requires to specify the maximum number of simultaneous threads at\n"
+ "# enclave creation time.\n" + "sgx.thread_num = 16\n" + "\n"
+ "# Specify all libraries used by Node.js and its dependencies (including all libs\n"
+ "# which can be loaded at runtime via dlopen).\n"
+ "sgx.trusted_files.ld = \"file:$(GRAPHENEDIR)/Runtime/ld-linux-x86-64.so.2\"\n"
+ "sgx.trusted_files.libc = \"file:$(GRAPHENEDIR)/Runtime/libc.so.6\"\n"
+ "sgx.trusted_files.libm = \"file:$(GRAPHENEDIR)/Runtime/libm.so.6\"\n"
+ "sgx.trusted_files.libdl = \"file:$(GRAPHENEDIR)/Runtime/libdl.so.2\"\n"
+ "sgx.trusted_files.librt = \"file:$(GRAPHENEDIR)/Runtime/librt.so.1\"\n"
+ "sgx.trusted_files.libutil = \"file:$(GRAPHENEDIR)/Runtime/libutil.so.1\"\n"
+ "sgx.trusted_files.libpthread = \"file:$(GRAPHENEDIR)/Runtime/libpthread.so.0\"\n"
+ "sgx.trusted_files.libnssdns = \"file:$(GRAPHENEDIR)/Runtime/libnss_dns.so.2\"\n"
+ "sgx.trusted_files.libresolv = \"file:$(GRAPHENEDIR)/Runtime/libresolv.so.2\"\n"
+ "\n" + "sgx.trusted_files.libstdc = \"file:/usr/$(ARCH_LIBDIR)/libstdc++.so.6\"\n"
+ "sgx.trusted_files.libgccs = \"file:$(ARCH_LIBDIR)/libgcc_s.so.1\"\n"
+ "sgx.trusted_files.libaptpkg = \"file:/usr/$(ARCH_LIBDIR)/libapt-pkg.so.5.0\"\n"
+ "sgx.trusted_files.liblz4 = \"file:/usr/$(ARCH_LIBDIR)/liblz4.so.1\"\n"
+ "sgx.trusted_files.libsystemd = \"file:$(ARCH_LIBDIR)/libsystemd.so.0\"\n"
+ "sgx.trusted_files.libselinux = \"file:$(ARCH_LIBDIR)/libselinux.so.1\"\n"
+ "sgx.trusted_files.libgcrypt = \"file:$(ARCH_LIBDIR)/libgcrypt.so.20\"\n"
+ "sgx.trusted_files.libpcre = \"file:$(ARCH_LIBDIR)/libpcre.so.3\"\n"
+ "sgx.trusted_files.libgpgerror = \"file:$(ARCH_LIBDIR)/libgpg-error.so.0\"\n"
+ "sgx.trusted_files.libexpat = \"file:$(ARCH_LIBDIR)/libexpat.so.1\"\n"
+ "sgx.trusted_files.libz = \"file:$(ARCH_LIBDIR)/libz.so.1\"\n"
+ "sgx.trusted_files.libz2 = \"file:$(ARCH_LIBDIR)/libbz2.so.1.0\"\n"
+ "sgx.trusted_files.liblzma = \"file:$(ARCH_LIBDIR)/liblzma.so.5\"\n"
+ "sgx.trusted_files.libmpdec = \"file:/usr/$(ARCH_LIBDIR)/libmpdec.so.2\"\n" + "\n"
+ "# Name Service Switch (NSS) libraries (Glibc dependencies)\n"
+ "sgx.trusted_files.libnssfiles = \"file:$(ARCH_LIBDIR)/libnss_files.so.2\"\n"
+ "sgx.trusted_files.libnsscompat = \"file:$(ARCH_LIBDIR)/libnss_compat.so.2\"\n"
+ "sgx.trusted_files.libnssnis = \"file:$(ARCH_LIBDIR)/libnss_nis.so.2\"\n"
+ "sgx.trusted_files.libnsl = \"file:$(ARCH_LIBDIR)/libnsl.so.1\"\n"
+ "sgx.trusted_files.libnssmyhostname = \"file:$(ARCH_LIBDIR)/libnss_myhostname.so.2\"\n"
+ "sgx.trusted_files.libnssmdns = \"file:$(ARCH_LIBDIR)/libnss_mdns4_minimal.so.2\"\n"
+ "\n" + "# Scratch space\n" + "sgx.allowed_files.tmp = \"file:/tmp\"\n" + "\n"
+ "# APT config files\n"
+ "sgx.allowed_files.aptconfd = \"file:/etc/apt/apt.conf.d\"\n"
+ "sgx.allowed_files.aptconf = \"file:/etc/apt/apt.conf\"\n"
+ "sgx.allowed_files.apport = \"file:/etc/default/apport\"\n" + "\n"
+ "# Name Service Switch (NSS) files (Glibc reads these files)\n"
+ "sgx.allowed_files.nsswitch = \"file:/etc/nsswitch.conf\"\n"
+ "sgx.allowed_files.group = \"file:/etc/group\"\n"
+ "sgx.allowed_files.passwd = \"file:/etc/passwd\"\n" + "\n"
+ "# DNS hostname resolution files (Glibc reads these files)\n"
+ "sgx.allowed_files.hostconf = \"file:/etc/host.conf\"\n"
+ "sgx.allowed_files.hosts = \"file:/etc/hosts\"\n"
+ "sgx.allowed_files.gaiconf = \"file:/etc/gai.conf\"\n"
+ "sgx.allowed_files.resolv = \"file:/etc/resolv.conf\"\n" + "\n"
+ "sgx.allowed_files.openssl = \"file:/etc/ssl/openssl.cnf\"\n" + "\n"
+ "# System's file system table\n"
+ "sgx.allowed_files.fstab = \"file:/etc/fstab\"\n" + "\n"
+ "$(NODEJS_TRUSTED_LIBS)\n" + "\n" + "# JavaScript (trusted)\n"
+ "sgx.allowed_files.smlib = \"file:node_modules\"\n"
+ "sgx.trusted_files.npminfo = \"file:package.json\"\n"
+ "sgx.trusted_files.contract = \"file:contract.js\"\n"
+ "sgx.trusted_files.globaljson = \"file:global.json\"\n"
+ "sgx.trusted_files.argjson = \"file:arg.json\"\n" + "\n"
+ "sys.insecure__allow_eventfd = 1\n" + "\n" + "sgx.remote_attestation = 1\n" + "\n"
+ "loader.env.LD_PRELOAD = \"libsecret_prov_attest.so\"\n"
+ "loader.env.SECRET_PROVISION_CONSTRUCTOR = \"1\"\n"
+ "loader.env.SECRET_PROVISION_SET_PF_KEY = \"1\"\n"
+ "loader.env.SECRET_PROVISION_CA_CHAIN_PATH = \"certs/test-ca-sha256.crt\"\n"
+ "loader.env.SECRET_PROVISION_SERVERS = \"localhost:4433\"\n" + "\n"
+ "sgx.trusted_files.libsecretprovattest = \"file:libsecret_prov_attest.so\"\n"
+ "sgx.trusted_files.cachain = \"file:certs/test-ca-sha256.crt\"\n" + "\n"
+ "# Specify your SPID and linkable/unlinkable attestation policy\n"
+ "sgx.ra_client_spid = \"DF3A8BA098E93F66CC64E8A215E98333\"\n"
+ "sgx.ra_client_linkable = 0\n";
// add secret servers
manifestStr += "loader.env.SECRET_PROVISION_CC_SERVERS = ";
Object resultStr = engine.invokeFunction(
"getAllSecret",
"",
input.getRequester(),
Object resultStr = engine.invokeFunction("getAllSecret", "", input.getRequester(),
input.getRequesterDOI());
Map<String, String> resultMap = JsonUtil.fromJson(resultStr.toString(), MapType);
Map<String, String> serverMap = JsonUtil.fromJson(resultMap.get("result"), MapType);

View File

@ -1,6 +1,5 @@
package org.bdware.sc.engine;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@ -139,11 +138,7 @@ public class DesktopEngine extends JSEngine {
ccl = (ccl == null) ? NashornScriptEngineFactory.class.getClassLoader() : ccl;
String[] args = new String[] {"--loader-per-compile=false", "-strict=false"};
classLoader = new YJSClassLoader(ccl, new YJSFilter());
engine =
(NashornScriptEngine)
new NashornScriptEngineFactory()
.getScriptEngine(
args, // "--print-ast",
engine = (NashornScriptEngine) new NashornScriptEngineFactory().getScriptEngine(args, // "--print-ast",
// "true",
// "-d=/Users/huaqiancai/Downloads/dumpedClz",
// "--trace-callsites=enterexit"
@ -157,17 +152,12 @@ public class DesktopEngine extends JSEngine {
// engine = (NashornScriptEngine) new
// NashornScriptEngineFactory().getScriptEngine(new YJSFilter());
if (_with_init_script) {
InputStream in =
DesktopEngine.class
.getClassLoader()
InputStream in = DesktopEngine.class.getClassLoader()
.getResourceAsStream("org/bdware/sc/engine/yancloud_desktop.js");
assert in != null;
InputStreamReader streamReader = new InputStreamReader(in);
engine.getContext()
.setAttribute(
ScriptEngine.FILENAME,
"org/bdware/sc/engine/yancloud_desktop.js",
ScriptContext.ENGINE_SCOPE);
engine.getContext().setAttribute(ScriptEngine.FILENAME,
"org/bdware/sc/engine/yancloud_desktop.js", ScriptContext.ENGINE_SCOPE);
engine.eval(streamReader);
}
global = engine.getNashornGlobal();
@ -195,10 +185,7 @@ public class DesktopEngine extends JSEngine {
yancloud_desktop.append(UtilRegistry.getInitStr(str, false));
}
// LOGGER.debug("[initScript] " + yancloud_desktop);
engine.getContext()
.setAttribute(
ScriptEngine.FILENAME,
yancloud_desktop.toString(),
engine.getContext().setAttribute(ScriptEngine.FILENAME, yancloud_desktop.toString(),
ScriptContext.ENGINE_SCOPE);
engine.eval(yancloud_desktop.toString());
} catch (ScriptException e) {
@ -252,11 +239,11 @@ public class DesktopEngine extends JSEngine {
}
@Override
public ContractResult loadContract(
Contract contract, ContractNode contractNode, boolean isInsnLimit) {
public ContractResult loadContract(Contract contract, ContractNode contractNode,
boolean isInsnLimit) {
cn = contractNode;
engine.getContext()
.setAttribute(ScriptEngine.FILENAME, ScriptFileName, ScriptContext.ENGINE_SCOPE);
engine.getContext().setAttribute(ScriptEngine.FILENAME, ScriptFileName,
ScriptContext.ENGINE_SCOPE);
try {
setPermission(cn.getPermission());
} catch (Exception e) {
@ -266,10 +253,7 @@ public class DesktopEngine extends JSEngine {
for (FunctionNode fun : contractNode.getFunctions())
try {
String str = fun.plainText();
engine.getContext()
.setAttribute(
ScriptEngine.FILENAME,
fun.getFileName(),
engine.getContext().setAttribute(ScriptEngine.FILENAME, fun.getFileName(),
ScriptContext.ENGINE_SCOPE);
compileFunction(fun, str, isInsnLimit);
} catch (ScriptException e) {
@ -280,7 +264,8 @@ public class DesktopEngine extends JSEngine {
e.printStackTrace();
return new ContractResult(Status.Error, new JsonPrimitive(bo.toString()));
}
LOGGER.debug(JsonUtil.toJson(contractNode.events) + "\n\t" + JsonUtil.toJson(contractNode.logs));
LOGGER.debug(
JsonUtil.toJson(contractNode.events) + "\n\t" + JsonUtil.toJson(contractNode.logs));
for (String topic : contractNode.events.keySet()) {
compileEventFunction(topic, topic, contractNode.events.get(topic));
}
@ -311,20 +296,16 @@ public class DesktopEngine extends JSEngine {
try {
String str;
if (REventSemantics.AT_LEAST_ONCE.equals(semantics)) {
str =
String.format(
"function %s(arg) { YancloudUtil.pubEvent(\"%s\", arg); }",
str = String.format("function %s(arg) { YancloudUtil.pubEvent(\"%s\", arg); }",
name, topic);
} else {
str =
String.format(
str = String.format(
"function %s(arg) { YancloudUtil.pubEventConstraint(\"%s\", arg, \"%s\"); }",
name, topic, semantics.name());
}
compileFunction(null, str, false);
LOGGER.debug("compile function " + name + " success!");
str =
String.format(
str = String.format(
"function %ss(arg0, arg1) { YancloudUtil.pubEventConstraint(\"%s\", arg0, arg1); }",
name, topic);
compileFunction(null, str, false);
@ -406,7 +387,8 @@ public class DesktopEngine extends JSEngine {
//
// return new ContractResult(Status.Success, new JsonPrimitive(""));
// }
private void compileFunction(FunctionNode functionNode, ScriptObjectMirror sf, boolean instrumentBranch) {
private void compileFunction(FunctionNode functionNode, ScriptObjectMirror sf,
boolean instrumentBranch) {
Global oldGlobal = Context.getGlobal();
boolean globalChanged = (oldGlobal != global);
try {
@ -423,7 +405,8 @@ public class DesktopEngine extends JSEngine {
f.setAccessible(true);
ScriptFunctionData scriptFunctioNData = (ScriptFunctionData) f.get(scriptFunction);
Object scope = scriptFunction.getScope();
Method getGeneric = ScriptFunctionData.class.getDeclaredMethod("getGenericInvoker", ScriptObject.class);
Method getGeneric = ScriptFunctionData.class.getDeclaredMethod("getGenericInvoker",
ScriptObject.class);
getGeneric.setAccessible(true);
MethodHandle methodHandle = (MethodHandle) getGeneric.invoke(scriptFunctioNData, scope);
if (methodHandle.getClass() != Class.forName("java.lang.invoke.DirectMethodHandle")) {
@ -446,12 +429,14 @@ public class DesktopEngine extends JSEngine {
e.printStackTrace();
} finally {
if (globalChanged) Context.setGlobal(oldGlobal);
if (globalChanged)
Context.setGlobal(oldGlobal);
Context.TRACEIF = false;
}
}
public void compileFunction(FunctionNode functionNode, String snippet, boolean instrumentBranch) throws ScriptException {
public void compileFunction(FunctionNode functionNode, String snippet, boolean instrumentBranch)
throws ScriptException {
compileFunction(functionNode, (ScriptObjectMirror) engine.eval(snippet), instrumentBranch);
}
@ -481,8 +466,7 @@ public class DesktopEngine extends JSEngine {
JavaScriptEntry.msgList = new ArrayList<>();
FunctionNode fun = cn.getFunction(input.getAction());
if (fun == null) {
return new ContractResult(
Status.Exception,
return new ContractResult(Status.Exception,
new JsonPrimitive("Action " + input.getAction() + " is not exists"));
}
ProgramPointCounter ppc = null;
@ -499,23 +483,14 @@ public class DesktopEngine extends JSEngine {
HashMap<String, Long> ppCountMap = evaluatesAnalysis(input.getAction(), functions);
Long extraGas = getExtraGas(fun.getCost().getExtraGas(), input);
bo = new ByteArrayOutputStream();
ppc =
new ProgramPointCounter(
bo,
previous.getCp(),
Long.MAX_VALUE,
functionIndex,
input.getGasLimit(),
extraGas,
input.getAction(),
ppCountMap);
ppc = new ProgramPointCounter(bo, previous.getCp(), Long.MAX_VALUE, functionIndex,
input.getGasLimit(), extraGas, input.getAction(), ppCountMap);
this.redirectTracePS(ppc);
}
if (fun.isExport() ||
// if the function has been registered as event handler
(fun.isHandler() &&
null != input.getRequester() &&
input.getRequester().startsWith("event"))) {
(fun.isHandler() && null != input.getRequester()
&& input.getRequester().startsWith("event"))) {
Object ret;
if (fun.isView()) {
ret = executeWithoutLock(fun, input, null);
@ -525,8 +500,10 @@ public class DesktopEngine extends JSEngine {
}
}
//System.out.println("[DesktopEngine MaskConfig]"+ContractProcess.instance.getProjectConfig().getMaskConfig().config.toString());
ContractResult contractRes = new ContractResult(Status.Success, JSONTool.convertMirrorToJson(ret));
// System.out.println("[DesktopEngine
// MaskConfig]"+ContractProcess.instance.getProjectConfig().getMaskConfig().config.toString());
ContractResult contractRes =
new ContractResult(Status.Success, JSONTool.convertMirrorToJson(ret));
if (ppc != null) {
contractRes.extraGas = ppc.extraGas;
contractRes.executionGas = ppc.cost;
@ -568,16 +545,13 @@ public class DesktopEngine extends JSEngine {
} else {
// return new ContractResult(Status.Exception, "Action " + input.getAction() + "
// is not exported!");
return new ContractResult(
Status.Exception,
return new ContractResult(Status.Exception,
new JsonPrimitive("Action " + input.getAction() + " is not exported!"));
}
} catch (ScriptReturnException e) {
e.printStackTrace();
return new ContractResult(
Status.Exception,
e.message);
return new ContractResult(Status.Exception, e.message);
} catch (ScriptException e) {
Throwable cause = e.getCause();
e.printStackTrace();
@ -588,23 +562,22 @@ public class DesktopEngine extends JSEngine {
e.printStackTrace(ps);
e.printStackTrace();
if (e.getCause() != null && e.getCause() instanceof ScriptException) {
return new ContractResult(
Status.Exception,
new JsonPrimitive(
return new ContractResult(Status.Exception, new JsonPrimitive(
extractException(bo1.toString(), extract(cn, e.getCause()))));
} else {
return new ContractResult(
Status.Exception,
return new ContractResult(Status.Exception,
new JsonPrimitive(extractException(bo1.toString(), extract(cn, e))));
}
} finally {
this.redirectTracePS(previous);
if (globalChanged) Context.setGlobal(oldGlobal);
if (globalChanged)
Context.setGlobal(oldGlobal);
}
}
public Object executeWithoutLock(FunctionNode fun, ContractRequest input, Object injectedArg) throws ScriptException, NoSuchMethodException {
public Object executeWithoutLock(FunctionNode fun, ContractRequest input, Object injectedArg)
throws ScriptException, NoSuchMethodException {
// long start = System.currentTimeMillis();
ArgPacks argPacks = new ArgPacks(input, input.getArg(), null);
if (injectedArg != null) {
@ -616,14 +589,10 @@ public class DesktopEngine extends JSEngine {
// actually invoke!
if (argPacks.ret == null) {
argPacks.ret =
engine.invokeFunction(
input.getAction(),
(fun.isHandler()
? JsonUtil.fromJson(input.getArg(), Event.class)
argPacks.ret = engine.invokeFunction(input.getAction(),
(fun.isHandler() ? JsonUtil.fromJson(input.getArg(), Event.class)
: JSONTool.convertJsonElementToMirror(argPacks.arg)),
input.getRequester(),
input.getRequesterDOI());
input.getRequester(), input.getRequesterDOI());
}
for (AnnotationHook handler : fun.afterExecutionAnnotations()) {
@ -661,8 +630,7 @@ public class DesktopEngine extends JSEngine {
for (String function : functions) {
MethodNode mn = methods.get(function);
if (mn != null) {
CFGraph cfg =
new CFGraph(mn) {
CFGraph cfg = new CFGraph(mn) {
@Override
public BasicBlock getBasicBlock(int id) {
return new BasicBlock(id);
@ -686,15 +654,15 @@ public class DesktopEngine extends JSEngine {
flag++;
}
}
/* for (Map.Entry<String, Long> map : PPCount.functionSumGas.entrySet()) {
if (map.getKey().contains(getFunction) && map.getKey().contains("true")) {
System.out.println("[合约方法pub中条件循环为true时]" + map.getValue());
} else if (map.getKey().contains(getFunction) && map.getKey().contains("false")) {
System.out.println("[合约方法pub中条件循环为false时]" + map.getValue());
} else if (map.getKey().contains(getFunction)) {
System.out.println("[合约方法pub中其他语句消耗]" + map.getValue());
}
}*/
/*
* for (Map.Entry<String, Long> map : PPCount.functionSumGas.entrySet()) { if
* (map.getKey().contains(getFunction) && map.getKey().contains("true")) {
* System.out.println("[合约方法pub中条件循环为true时]" + map.getValue()); } else if
* (map.getKey().contains(getFunction) && map.getKey().contains("false")) {
* System.out.println("[合约方法pub中条件循环为false时]" + map.getValue()); } else if
* (map.getKey().contains(getFunction)) { System.out.println("[合约方法pub中其他语句消耗]" +
* map.getValue()); } }
*/
return ppCountMap;
}
@ -704,11 +672,7 @@ public class DesktopEngine extends JSEngine {
return 0L;
}
Invocable cal = engine;
Object ret =
cal.invokeFunction(
costFunction,
input.getArg(),
input.getRequester(),
Object ret = cal.invokeFunction(costFunction, input.getArg(), input.getRequester(),
input.getRequesterDOI());
if (ret != null && StringUtils.isNumeric(ret.toString())) {
return Long.parseLong(ret.toString());
@ -765,15 +729,16 @@ public class DesktopEngine extends JSEngine {
if (actLine != -1) {
actLine += line - 1;
}
message =
message.replaceAll(
"at line number " + e.getLineNumber(), "at line number " + (actLine));
message = message.replaceAll("at line number " + e.getLineNumber(),
"at line number " + (actLine));
if (fun.getFileName() != null)
message = message.replace("in contract_main.yjs", "in " + fun.getFileName());
content.append(message);
content.append("(");
if (fun.functionName != null) content.append(fun.functionName);
else content.append("contract_main.yjs");
if (fun.functionName != null)
content.append(fun.functionName);
else
content.append("contract_main.yjs");
content.append(":");
content.append(actLine);
@ -792,16 +757,14 @@ public class DesktopEngine extends JSEngine {
String methodName = element.getMethodName();
String fileName = element.getFileName();
if (fileName.endsWith(".java")) continue;
if (fileName.endsWith(".java"))
continue;
if (c.isBundle()) {
fileName = fixFile(c, methodName);
}
if (fileName.equals("--")) continue;
ret.add(
String.format(
"at %s(%s:%d)",
methodName,
fileName,
if (fileName.equals("--"))
continue;
ret.add(String.format("at %s(%s:%d)", methodName, fileName,
(fixLine(c, methodName) + element.getLineNumber())));
}
return ret;
@ -918,13 +881,13 @@ public class DesktopEngine extends JSEngine {
}
if (entry.getName().endsWith(".so") || entry.getName().endsWith(".so.1")) {
System.out.println("unzip library:" + entry.getName().replaceAll(".*/", ""));
loader.unzipLibrary(
zf.getInputStream(entry), entry.getName().replaceAll(".*/", ""));
loader.unzipLibrary(zf.getInputStream(entry),
entry.getName().replaceAll(".*/", ""));
}
if (HardwareInfo.type == OSType.mac && entry.getName().endsWith(".dylib")) {
System.out.println("unzip library:" + entry.getName().replaceAll(".*/", ""));
loader.unzipLibrary(
zf.getInputStream(entry), entry.getName().replaceAll(".*/", ""));
loader.unzipLibrary(zf.getInputStream(entry),
entry.getName().replaceAll(".*/", ""));
}
} catch (IOException e) {
e.printStackTrace();

View File

@ -50,11 +50,14 @@ public class JSONTool {
}
private static JsonElement convertMirrorToJsonInternal(Object obj, Set<Object> recorded) {
if (recorded.contains(obj)) return JsonNull.INSTANCE;
if (obj == null) return JsonNull.INSTANCE;
if (recorded.contains(obj))
return JsonNull.INSTANCE;
if (obj == null)
return JsonNull.INSTANCE;
if (obj.getClass() == wrp.jdk.nashorn.internal.runtime.Undefined.class)
return JsonNull.INSTANCE;
if (obj instanceof JsonElement) return (JsonElement) obj;
if (obj instanceof JsonElement)
return (JsonElement) obj;
if (obj.getClass().isArray()) {
Object[] arr = (Object[]) obj;
recorded.add(obj);

View File

@ -128,17 +128,18 @@ public class SyncMechUtil {
}
/*
* memory的操作
* 无需startFlag就可以使用memory的操作
* memory的操作 无需startFlag就可以使用memory的操作
*/
public synchronized String dumpMemory(String path) {
if (memoryDumpUtil == null) memoryDumpUtil = new MemoryDumpUtil(engine.engine);
if (memoryDumpUtil == null)
memoryDumpUtil = new MemoryDumpUtil(engine.engine);
return memoryDumpUtil.dumpMemory(path, true);
}
public synchronized String dumpMemory(String path, boolean stateful) {
LOGGER.info("dumpMemroy : stateful=" + stateful);
if (memoryDumpUtil == null) memoryDumpUtil = new MemoryDumpUtil(engine.engine);
if (memoryDumpUtil == null)
memoryDumpUtil = new MemoryDumpUtil(engine.engine);
return memoryDumpUtil.dumpMemory(path, stateful);
}
@ -210,7 +211,8 @@ public class SyncMechUtil {
}
public void changeCurrType(SyncType t) {
if (t == currType) return;
if (t == currType)
return;
// finASyncRecord();
currType = t;
@ -226,7 +228,8 @@ public class SyncMechUtil {
}
break;
case Memory:
if (memoryDumpUtil == null) memoryDumpUtil = new MemoryDumpUtil(engine.engine);
if (memoryDumpUtil == null)
memoryDumpUtil = new MemoryDumpUtil(engine.engine);
break;
default:
break;
@ -256,7 +259,8 @@ public class SyncMechUtil {
* Trans操作
*/
public synchronized String redo(String path) {
if (transRecoverUtil == null) transRecoverUtil = new TransRecoverUtil(engine);
if (transRecoverUtil == null)
transRecoverUtil = new TransRecoverUtil(engine);
// 先清空否则会重复执行一些trans
if (transRecoverUtil.transRecords != null && !transRecoverUtil.transRecords.isEmpty())
@ -264,7 +268,8 @@ public class SyncMechUtil {
// 某一次检查点之后没有transRecords
File file = new File(path);
if (!file.exists()) return "success";
if (!file.exists())
return "success";
transRecoverUtil.setTraceRecords(path);
transRecoverUtil.recoverFromTransRecord();

View File

@ -6,9 +6,8 @@ import javax.script.ScriptEngine;
public class TestClassFilter {
public TestClassFilter() {
final String script = "print(java.lang.System.getProperty(\"java.home\"));" +
"print(\"Create file variable\");" +
"var File = Java.type(\"java.io.File\");";
final String script = "print(java.lang.System.getProperty(\"java.home\"));"
+ "print(\"Create file variable\");" + "var File = Java.type(\"java.io.File\");";
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(new YJSFilter());
try {

View File

@ -63,7 +63,8 @@ public class YJSClassLoader extends URLClassLoader {
public String unzipLibrary(InputStream inputStream, String name) {
try {
if (libDir == null) {
libDir = new File(System.getProperty("java.io.tmpdir"), "yjscontract_" + System.currentTimeMillis());
libDir = new File(System.getProperty("java.io.tmpdir"),
"yjscontract_" + System.currentTimeMillis());
libDir.mkdirs();
}
File f = new File(libDir, name);

View File

@ -43,19 +43,22 @@ public class AccessHandler implements AnnotationHook {
public ArgPacks handle(JSEngine desktopEngine, ArgPacks argPacks) {
if (requireSign) {
if (!argPacks.request.verifySignature()) {
throw new ScriptReturnException(JsonParser.parseString("{\"code\":400,\"msg\":\"permission denied\"}"));
throw new ScriptReturnException(
JsonParser.parseString("{\"code\":400,\"msg\":\"permission denied\"}"));
}
return argPacks;
}
if (!argPacks.request.verifySignature()) {
LOGGER.info("verify failed! clear requester," + argPacks.request.getContentStr() +
" -> " + argPacks.request.getPublicKey() + "sign:" + argPacks.request.getSignature());
LOGGER.info("verify failed! clear requester," + argPacks.request.getContentStr()
+ " -> " + argPacks.request.getPublicKey() + "sign:"
+ argPacks.request.getSignature());
// TODO
// FIXME here!
// argPacks.request.setRequester(null);
} else
LOGGER.info("verify success!" + argPacks.request.getRequester());
if (acFunction == null) return argPacks;
if (acFunction == null)
return argPacks;
DesktopEngine de = (DesktopEngine) desktopEngine;
try {
ContractRequest input = argPacks.request;

View File

@ -28,7 +28,8 @@ public class ArgSchemaHandler implements AnnotationHook {
// }
}
public static ArgSchemaHandler fromAnnotationNode(FunctionNode funNode, AnnotationNode annoNode) {
public static ArgSchemaHandler fromAnnotationNode(FunctionNode funNode,
AnnotationNode annoNode) {
return new ArgSchemaHandler(annoNode);
}

View File

@ -89,7 +89,8 @@ public class ArgSchemaVisitor extends JsonVisitor {
if (root.isJsonPrimitive() && root.getAsJsonPrimitive().isString()) {
return this;
} else {
message = "[Type error] The value (" + root.getAsJsonPrimitive().getAsString() + ") should be string";
message = "[Type error] The value ("
+ root.getAsJsonPrimitive().getAsString() + ") should be string";
status = false;
errorCode = 1001;
return this;
@ -98,7 +99,8 @@ public class ArgSchemaVisitor extends JsonVisitor {
if (root.isJsonPrimitive() && root.getAsJsonPrimitive().isNumber()) {
return this;
} else {
message = "[Type error] The value (" + root.getAsJsonPrimitive().getAsString() + ") should be number";
message = "[Type error] The value ("
+ root.getAsJsonPrimitive().getAsString() + ") should be number";
status = false;
errorCode = 1001;
return this;
@ -107,7 +109,8 @@ public class ArgSchemaVisitor extends JsonVisitor {
if (root.isJsonPrimitive() && root.getAsJsonPrimitive().isBoolean()) {
return this;
} else {
message = "[Type error] The value (" + root.getAsJsonPrimitive().getAsString() + ") should be boolean";
message = "[Type error] The value ("
+ root.getAsJsonPrimitive().getAsString() + ") should be boolean";
status = false;
errorCode = 1001;
return this;
@ -116,7 +119,8 @@ public class ArgSchemaVisitor extends JsonVisitor {
if (root.isJsonArray()) {
return this;
} else {
message = "[Type error] The value (" + root.getAsJsonPrimitive().getAsString() + ") should be array";
message = "[Type error] The value ("
+ root.getAsJsonPrimitive().getAsString() + ") should be array";
status = false;
errorCode = 1001;
return this;
@ -125,7 +129,8 @@ public class ArgSchemaVisitor extends JsonVisitor {
if (root.isJsonObject()) {
return this;
} else {
message = "[Type error] The value (" + root.getAsJsonPrimitive().getAsString() + ") should be object";
message = "[Type error] The value ("
+ root.getAsJsonPrimitive().getAsString() + ") should be object";
status = false;
errorCode = 1001;
return this;

View File

@ -23,8 +23,8 @@ public class ConfidentialHandler implements AnnotationHook {
DesktopEngine desktopEngine = (DesktopEngine) engine;
ConfidentialContractUtil.copyTemplateToDestination(input);
ScriptObjectMirror globalVars = (ScriptObjectMirror) desktopEngine.get("Global");
ConfidentialContractUtil.dumpScriptAndStates(
desktopEngine.engine, fun, input, globalVars);
ConfidentialContractUtil.dumpScriptAndStates(desktopEngine.engine, fun, input,
globalVars);
// run in SGX instead of Nashorn if function has @Confidential annotation
argPacks.ret = ConfidentialContractUtil.executeConfidentialContract(input);
return argPacks;

View File

@ -35,23 +35,27 @@ public class DOOPAfterExecHandler implements AnnotationHook {
// if http, directly return
if (doipMessagePacker.source.equals("http")) {
if (argPacks.ret != null && argPacks.ret instanceof DoipMessage) {
argPacks.ret = JsonUtil.parseObject(JsonDoipMessage.fromDoipMessage((DoipMessage) argPacks.ret));
argPacks.ret = JsonUtil.parseObject(
JsonDoipMessage.fromDoipMessage((DoipMessage) argPacks.ret));
}
return argPacks;
} else {
// pack
if (!(argPacks.ret instanceof DoipMessage)) {
JsonObject jsonObjectRes = ((JsonElement) argPacks.ret).getAsJsonObject();
if (!jsonObjectRes.has("bodyBase64Encoded") || jsonObjectRes.get("bodyBase64Encoded").getAsBoolean() == false) {
if (!jsonObjectRes.has("bodyBase64Encoded")
|| jsonObjectRes.get("bodyBase64Encoded").getAsBoolean() == false) {
if (jsonObjectRes.has("body")) {
String body = jsonObjectRes.get("body").getAsString();
jsonObjectRes.addProperty("body", ByteUtil.encodeBASE64(body.getBytes(StandardCharsets.UTF_8)));
jsonObjectRes.addProperty("body",
ByteUtil.encodeBASE64(body.getBytes(StandardCharsets.UTF_8)));
}
}
// validate json response
ArgSchemaVisitor visitor = new ArgSchemaVisitor(jsonObjectRes);
validateJsonElementRulesByArgSchemaVisitor(jsonResponseRules, visitor);
JsonDoipMessage returnedMessage = JsonUtil.fromJson(jsonObjectRes, JsonDoipMessage.class);
JsonDoipMessage returnedMessage =
JsonUtil.fromJson(jsonObjectRes, JsonDoipMessage.class);
argPacks.ret = returnedMessage.toResponseDoipMessage(originDoipMsg);
}
return argPacks;
@ -71,7 +75,8 @@ public class DOOPAfterExecHandler implements AnnotationHook {
case Search:
case ListOps:
case Delete:
return JsonParser.parseString("{\"header\":{\"response\":\"string\",\"attributes\":{}},\"body\":\"string\"}");
return JsonParser.parseString(
"{\"header\":{\"response\":\"string\",\"attributes\":{}},\"body\":\"string\"}");
case Extension:
case Unknown:
default:
@ -80,17 +85,21 @@ public class DOOPAfterExecHandler implements AnnotationHook {
}
// old convert jsonResponse from argPack's ret to Doip response in doip chain logic
public DoipMessage convertJsonResponseToDoipMessage(FunctionNode fn, JsonElement jsonResponse, DoipMessage msg) {
public DoipMessage convertJsonResponseToDoipMessage(FunctionNode fn, JsonElement jsonResponse,
DoipMessage msg) {
JsonObject jsonParams = jsonResponse.getAsJsonObject();
// validate json response
ArgSchemaVisitor visitor = new ArgSchemaVisitor(jsonResponse);
validateJsonElementRulesByArgSchemaVisitor(jsonResponseRules, visitor);
JsonObject header = jsonParams.get("header") != null ? jsonParams.get("header").getAsJsonObject() : null;
JsonObject header =
jsonParams.get("header") != null ? jsonParams.get("header").getAsJsonObject()
: null;
String body = jsonParams.get("body") != null ? jsonParams.get("body").getAsString() : null;
if (header != null) {
String headerRespCode = header.get("response") != null ? header.get("response").getAsString() : null;
String headerRespCode =
header.get("response") != null ? header.get("response").getAsString() : null;
if (headerRespCode != null) {
for (DoipResponseCode responseCode : DoipResponseCode.values()) {
if (responseCode.toString().equals(headerRespCode)) {
@ -107,7 +116,8 @@ public class DOOPAfterExecHandler implements AnnotationHook {
return msg;
}
public static void validateJsonElementRulesByArgSchemaVisitor(JsonElement jsonElement, ArgSchemaVisitor visitor) {
public static void validateJsonElementRulesByArgSchemaVisitor(JsonElement jsonElement,
ArgSchemaVisitor visitor) {
visitor.visit(jsonElement);
if (!visitor.getStatus()) {
JsonObject jo = new JsonObject();

View File

@ -40,7 +40,8 @@ public class DOOPBeforeExecHandler implements AnnotationHook {
doipMsgPackerArg.rawDoipMsg = convertHttpRequestToDoipMessage(httpReq);
if (httpReq.verifySignature()) {
doipMsgPackerArg.rawDoipMsg.credential = new MessageCredential(httpReq.getRequester(), new byte[0]);
doipMsgPackerArg.rawDoipMsg.credential =
new MessageCredential(httpReq.getRequester(), new byte[0]);
} else {
doipMsgPackerArg.rawDoipMsg.credential = null;
}
@ -70,11 +71,14 @@ public class DOOPBeforeExecHandler implements AnnotationHook {
return JsonParser.parseString("{\"!header\":{\"!identifier\":\"string\"}}");
case Create:
case Update:
return JsonParser.parseString("{\"!header\":{\"!identifier\":\"string\"}, \"!body\":\"string\"}");
return JsonParser.parseString(
"{\"!header\":{\"!identifier\":\"string\"}, \"!body\":\"string\"}");
case Search:
return JsonParser.parseString("{\"!header\":{\"!identifier\":\"string\", \"!attributes\":{\"!query\":\"string\", \"!pageNum\":\"int\", \"!pageSize\":\"int\", \"!type\":\"string\"}}}");
return JsonParser.parseString(
"{\"!header\":{\"!identifier\":\"string\", \"!attributes\":{\"!query\":\"string\", \"!pageNum\":\"int\", \"!pageSize\":\"int\", \"!type\":\"string\"}}}");
case Retrieve:
return JsonParser.parseString("{\"!header\":{\"!identifier\":\"string\", \"attributes\":{\"element\":\"string\", \"includeElementData\":\"boolean\"}}}");
return JsonParser.parseString(
"{\"!header\":{\"!identifier\":\"string\", \"attributes\":{\"element\":\"string\", \"includeElementData\":\"boolean\"}}}");
case Extension:
case Unknown:
default:
@ -92,7 +96,8 @@ public class DOOPBeforeExecHandler implements AnnotationHook {
}
public static void validateJsonElementRulesByArgSchemaVisitor(JsonElement jsonElement, ArgSchemaVisitor visitor) {
public static void validateJsonElementRulesByArgSchemaVisitor(JsonElement jsonElement,
ArgSchemaVisitor visitor) {
visitor.visit(jsonElement);
if (!visitor.getStatus()) {
JsonObject jo = new JsonObject();

View File

@ -33,19 +33,19 @@ public class HomomorphicDecryptHandler implements AnnotationHook {
// String arg = JsonUtil.toJson(args);
JsonElement homoDecryptConf = this.fun.getHomoDecryptConf();
if (null != homoDecryptConf && !homoDecryptConf.isJsonNull()) {
String res = (String)
JavaScriptEntry.executeContract(
"keyManager_1",
"getPrivKey",
String res = (String) JavaScriptEntry.executeContract("keyManager_1", "getPrivKey",
this.fun.getSecretID().replaceAll("\"", ""));
LOGGER.info("HomomorphicDecryptHandler--------------------------------1: " + res);
ContractResult results = JsonUtil.fromJson(res, ContractResult.class);
String privKeyStr = results.result.getAsString();
LOGGER.info("HomomorphicEncryptHandler--------------------------------2: " + privKeyStr);
LOGGER.info("HomomorphicEncryptHandler--------------------------------2: "
+ privKeyStr);
RSAPrivateKey privkey = (RSAPrivateKey) PaillierKeyPair.pemToPrivateKey(privKeyStr);
LOGGER.info("HomomorphicEncryptHandler--------------------------------3: " + privkey);
LOGGER.info(
"HomomorphicEncryptHandler--------------------------------3: " + privkey);
HomoVisitor.privateKey = privkey;
argPacks.ret = getDecryptResult(homoDecryptConf, JsonUtil.parseObject(argPacks.ret));
argPacks.ret =
getDecryptResult(homoDecryptConf, JsonUtil.parseObject(argPacks.ret));
if (null != argPacks.ret) {
return argPacks;
}

View File

@ -29,19 +29,14 @@ public class HomomorphicEncryptHandler implements AnnotationHook {
public ArgPacks handle(JSEngine engine, ArgPacks argPacks) {
try {
ContractRequest input = argPacks.request;
LOGGER.info(
"HomomorphicEncryptHandler--------------------------------1: "
LOGGER.info("HomomorphicEncryptHandler--------------------------------1: "
+ input.getRequester());
LOGGER.info(
"HomomorphicEncryptHandler--------------------------------2: "
LOGGER.info("HomomorphicEncryptHandler--------------------------------2: "
+ this.fun.getSecretID());
JsonElement response = (JsonElement) argPacks.ret;
JsonElement homoEncryptConf = this.fun.getHomoEncryptConf();
if (homoEncryptConf != null && !homoEncryptConf.isJsonNull()) {
String res =
(String) JavaScriptEntry.executeContract(
"keyManager_1",
"getPubKey",
String res = (String) JavaScriptEntry.executeContract("keyManager_1", "getPubKey",
this.fun.getSecretID().replaceAll("\"", ""));
// String res =
// JavaScriptEntry.executeContract(
@ -51,14 +46,19 @@ public class HomomorphicEncryptHandler implements AnnotationHook {
LOGGER.info("HomomorphicEncryptHandler--------------------------------4: " + res);
ContractResult results = JsonUtil.fromJson(res, ContractResult.class);
String pubKeyStr = results.result.getAsString();
LOGGER.info("HomomorphicEncryptHandler--------------------------------5: " + pubKeyStr);
LOGGER.info(
"HomomorphicEncryptHandler--------------------------------5: " + pubKeyStr);
HomoVisitor.publicKey = (RSAPublicKey) PaillierKeyPair.pemToPublicKey(pubKeyStr);
// if (homoEncryptConf.getAsJsonPrimitive().isString())
// homoEncryptConf = JsonParser.parseString(homoEncryptConf.getAsString());
LOGGER.info("HomomorphicEncryptHandler--------------------------------6: " + homoEncryptConf);
LOGGER.info("HomomorphicEncryptHandler--------------------------------7: " + argPacks.ret);
LOGGER.info("HomomorphicEncryptHandler--------------------------------8: " + argPacks.ret.toString());
// LOGGER.info("HomomorphicEncryptHandler--------------------------------9: " + JsonUtil.toJson(ret));
LOGGER.info("HomomorphicEncryptHandler--------------------------------6: "
+ homoEncryptConf);
LOGGER.info("HomomorphicEncryptHandler--------------------------------7: "
+ argPacks.ret);
LOGGER.info("HomomorphicEncryptHandler--------------------------------8: "
+ argPacks.ret.toString());
// LOGGER.info("HomomorphicEncryptHandler--------------------------------9: " +
// JsonUtil.toJson(ret));
argPacks.ret = getEncryptResult(homoEncryptConf, response);
if (argPacks.ret != null) {
return argPacks;

View File

@ -23,7 +23,8 @@ public class MockTemplateHandler implements AnnotationHook {
MockUtil Mock = new MockUtil();
argPacks.ret = Mock.mock(template).toString();
return argPacks;
} else return argPacks; //When mock config is null defined just ignore.
} else
return argPacks; // When mock config is null defined just ignore.
}
} catch (Exception e) {
e.printStackTrace();

View File

@ -13,10 +13,9 @@ import org.commonmark.parser.Parser;
public class ReadMeHandler implements AnnotationHook {
String getReadMeData(DesktopEngine desktopEngine, ContractRequest c) {
String fileReadme =
desktopEngine
.getResources()
.loadAsString("/assets/README.md"); // is "/README.md" not"./README.md"!!!!
String fileReadme = desktopEngine.getResources().loadAsString("/assets/README.md"); // is
// "/README.md"
// not"./README.md"!!!!
// System.out.println("fileReadme:" + fileReadme);
if (null == fileReadme) {
return "项目目录下无预览文档";
@ -30,18 +29,11 @@ public class ReadMeHandler implements AnnotationHook {
while (visitor != null) {
if (visitor instanceof Heading) {
if (((Heading) visitor).getLevel() == 2) {
if (((Text) (visitor.getFirstChild()))
.getLiteral()
if (((Text) (visitor.getFirstChild())).getLiteral()
.equals(targetFunction)) {
FencedCodeBlock blockResult =
(FencedCodeBlock)
(visitor.getNext()
.getNext()
.getNext()
.getNext()
.getNext()
.getNext()
.getNext());
(FencedCodeBlock) (visitor.getNext().getNext().getNext()
.getNext().getNext().getNext().getNext());
result = blockResult.getLiteral();
break;
}

View File

@ -78,7 +78,8 @@ public class ResultSchemaHandler implements AnnotationHook {
return argPacks;
}
public static ResultSchemaHandler fromAnnotationNode(FunctionNode funNode, AnnotationNode annoNode) {
public static ResultSchemaHandler fromAnnotationNode(FunctionNode funNode,
AnnotationNode annoNode) {
return new ResultSchemaHandler(annoNode);
}
}

View File

@ -3,8 +3,7 @@ package org.bdware.sc.engine.setArgs;
public class GetHomArgs {
public String secretID;
public GetHomArgs() {
}
public GetHomArgs() {}
public GetHomArgs(String secretID) {
this.secretID = secretID;

View File

@ -11,8 +11,7 @@ public class DoipMessagePacker {
// the well-composed DoipMessage
public DoipMessage rawDoipMsg;
public DoipMessagePacker() {
}
public DoipMessagePacker() {}
public DoipMessagePacker(String source, DoipMessage rawMsg) {
this.source = source;
@ -28,6 +27,7 @@ public class DoipMessagePacker {
}
public Object toJSObject() {
return JSONTool.convertJsonElementToMirror(JsonUtil.parseObject(JsonDoipMessage.fromDoipMessage(rawDoipMsg)));
return JSONTool.convertJsonElementToMirror(
JsonUtil.parseObject(JsonDoipMessage.fromDoipMessage(rawDoipMsg)));
}
}

View File

@ -104,8 +104,8 @@ public class ContractHandler extends MsgHandler implements Runnable {
@Description("set members")
public void setMembers(GetMessage msg, ResultCallback cb) {
cb.onResult(cs.setMembers(JsonUtil.fromJson(msg.arg, new TypeToken<List<String>>() {
}.getType())));
cb.onResult(cs.setMembers(
JsonUtil.fromJson(msg.arg, new TypeToken<List<String>>() {}.getType())));
}
@Description("get current contract name")

View File

@ -42,14 +42,16 @@ public class DOOPRequestHandler implements DoipRequestHandler {
@Override
public DoipMessage onRequest(ChannelHandlerContext ctx, DoipMessage msg) {
String str = msg.header.parameters.operation;
if (msg.header != null && msg.header.parameters.operation.equals(SharableVarManager.SHARABLEOP)) {
if (msg.header != null
&& msg.header.parameters.operation.equals(SharableVarManager.SHARABLEOP)) {
return SharableVarManager.instance.handleSyncMessage(msg);
}
logger.debug("[Call operation] name: " + str);
if (str != null) {
FunctionNode fn;
fn = doipFunctionNodeMap.get(str);
if (fn == null) fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
if (fn == null)
fn = doipFunctionNodeMap.get(BasicOperations.Unknown.getName());
if (fn != null) {
return buildRequestAndInvokeEngine(fn, msg);
}
@ -62,7 +64,8 @@ public class DOOPRequestHandler implements DoipRequestHandler {
DoipMessagePacker arg = new DoipMessagePacker("doip", msg);
try {
// 改变调用的函数 + 构造DoipMessagePacker
Object ret = ContractProcess.instance.engine.executeWithoutLock(fn, contractRequest, arg);
Object ret =
ContractProcess.instance.engine.executeWithoutLock(fn, contractRequest, arg);
DoipMessage finalDoipMsg = (DoipMessage) ret;
finalDoipMsg.requestID = msg.requestID;
if (finalDoipMsg.header.parameters == null) {
@ -71,16 +74,19 @@ public class DOOPRequestHandler implements DoipRequestHandler {
if (finalDoipMsg.header.parameters.attributes == null) {
finalDoipMsg.header.parameters.attributes = new JsonObject();
}
finalDoipMsg.header.parameters.attributes.addProperty("nodeID", String.valueOf(JavaScriptEntry.shardingID));
finalDoipMsg.header.parameters.attributes.addProperty("nodeID",
String.valueOf(JavaScriptEntry.shardingID));
return finalDoipMsg;
} catch (Exception e) {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
e.printStackTrace(new PrintStream(bo));
DoipMessageFactory.DoipMessageBuilder builder = new DoipMessageFactory.DoipMessageBuilder();
DoipMessageFactory.DoipMessageBuilder builder =
new DoipMessageFactory.DoipMessageBuilder();
builder.createResponse(DoipResponseCode.Declined, msg);
builder.setBody(bo.toByteArray());
builder.addAttributes("nodeID", String.valueOf(JavaScriptEntry.shardingID));
logger.error("buildRequestAndInvokeEngine has something wrong, executeWithoutLock err or validateJsonElementRulesByArgSchemaVisitor err");
logger.error(
"buildRequestAndInvokeEngine has something wrong, executeWithoutLock err or validateJsonElementRulesByArgSchemaVisitor err");
return builder.create();
}
}

View File

@ -4,8 +4,9 @@ import jdk.internal.dynalink.beans.StaticClass;
import wrp.jdk.nashorn.api.scripting.ScriptObjectMirror;
public enum MOType {
String(true), Int(true), Double(true), Boolean(true),JSObject(false), JSArray(false), JavaObject(false), Method(false),
Undefined(true), JSFunction(false),JSStatic(false);
String(true), Int(true), Double(true), Boolean(true), JSObject(false), JSArray(
false), JavaObject(
false), Method(false), Undefined(true), JSFunction(false), JSStatic(false);
private boolean isPrimitive;

View File

@ -100,10 +100,9 @@ public class MemoryDump implements Serializable {
currID = id;
if (obj.getClass() == jdk.internal.dynalink.beans.StaticClass.class) {
/*
String obj2 = "jdk.internal.dynalink.beans.StaticClass.class";
if (allocated.containsKey(obj2))
return allocated.get(obj2);
allocated.put(obj2, currID);
* String obj2 = "jdk.internal.dynalink.beans.StaticClass.class"; if
* (allocated.containsKey(obj2)) return allocated.get(obj2); allocated.put(obj2,
* currID);
*/
} else {
if (allocated.containsKey(obj))
@ -151,7 +150,8 @@ public class MemoryDump implements Serializable {
mo.data = obj;
objects.put(currID, mo);
} else
System.out.println("[MemoryDump] Allocat MetType:" + obj.getClass() + " now id=" + currID);
System.out.println(
"[MemoryDump] Allocat MetType:" + obj.getClass() + " now id=" + currID);
}
return currID;
@ -203,10 +203,12 @@ public class MemoryDump implements Serializable {
}
switch (mo.type) {
case JSArray:
obj = ScriptObjectMirror.wrap(Global.allocate(new int[0]), JavaScriptEntry.getEngineGlobal());
obj = ScriptObjectMirror.wrap(Global.allocate(new int[0]),
JavaScriptEntry.getEngineGlobal());
break;
case JSObject:
obj = ScriptObjectMirror.wrap(new JO(PropertyMap.newMap()), JavaScriptEntry.getEngineGlobal());
obj = ScriptObjectMirror.wrap(new JO(PropertyMap.newMap()),
JavaScriptEntry.getEngineGlobal());
break;
case JSFunction:
break;

View File

@ -34,7 +34,8 @@ public class MemoryDumpUtil {
memoryDump = (MemoryDump) reader.readObject();
reader.close();
String ret = JsonUtil.toPrettyJson(memoryDump.objects);
ret += ("<seperate>" + memoryDump.jseDump.invokeID + ";" + memoryDump.jseDump.ranSeed + ";" + memoryDump.jseDump.numsOfCopies + "");
ret += ("<seperate>" + memoryDump.jseDump.invokeID + ";" + memoryDump.jseDump.ranSeed
+ ";" + memoryDump.jseDump.numsOfCopies + "");
return ret;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
@ -43,20 +44,11 @@ public class MemoryDumpUtil {
}
/*
public static String getContentFromFile2(String path) {
File file = new File(path);
ObjectInputStream reader;
try {
FileInputStream fileout = new FileInputStream(file);
reader = new ObjectInputStream(fileout);
String ret = (String)reader.readObject();
reader.close();
return ret;
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
* public static String getContentFromFile2(String path) { File file = new File(path);
* ObjectInputStream reader; try { FileInputStream fileout = new FileInputStream(file); reader =
* new ObjectInputStream(fileout); String ret = (String)reader.readObject(); reader.close();
* return ret; } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } return
* null; }
*/
// stateful 表示合约是有/无状态合约
@ -73,16 +65,21 @@ public class MemoryDumpUtil {
long id = memoryDump.allocate(obj);
root.addField(key, id);
}
memoryDump.jseDump = new JSEDump(JavaScriptEntry.invokeID, Long.parseLong(JavaScriptEntry.currentSyncUtil.contractID), JavaScriptEntry.numOfCopies);
memoryDump.jseDump = new JSEDump(JavaScriptEntry.invokeID,
Long.parseLong(JavaScriptEntry.currentSyncUtil.contractID),
JavaScriptEntry.numOfCopies);
ret = JsonUtil.toPrettyJson(memoryDump.objects);
} else { // 无状态合约
memoryDump.jseDump = new JSEDump(JavaScriptEntry.invokeID, Long.parseLong(JavaScriptEntry.currentSyncUtil.contractID), JavaScriptEntry.numOfCopies);
memoryDump.jseDump = new JSEDump(JavaScriptEntry.invokeID,
Long.parseLong(JavaScriptEntry.currentSyncUtil.contractID),
JavaScriptEntry.numOfCopies);
memoryDump.objects.clear();
ret = JsonUtil.toPrettyJson(memoryDump.objects);
}
ret += "--seperate--";
ret += (memoryDump.jseDump.invokeID + ";" + memoryDump.jseDump.ranSeed + ";" + memoryDump.jseDump.numsOfCopies);
ret += (memoryDump.jseDump.invokeID + ";" + memoryDump.jseDump.ranSeed + ";"
+ memoryDump.jseDump.numsOfCopies);
if (path == null || path.equals("")) {
return ret;
@ -90,7 +87,8 @@ public class MemoryDumpUtil {
File mem = new File(path);
File parent = mem.getParentFile();
if (!parent.exists()) parent.mkdirs();
if (!parent.exists())
parent.mkdirs();
ObjectOutputStream writer;
try {
FileOutputStream fileout = new FileOutputStream(mem);
@ -112,44 +110,25 @@ public class MemoryDumpUtil {
/*
public String dumpMemory(String path) {
memoryDump = new MemoryDump();
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
System.out.println("[MemoryDumpUtil] bindings size=" + bindings.size());
MemoryJSObject root = memoryDump.getRoot();
for (String key : bindings.keySet()) {
System.out.println("[MemoryDumpUtil] dumpMemory " + key);
Object obj = bindings.get(key);
long id = memoryDump.allocate(obj);
root.addField(key, id);
System.out.println("[root addFiled] key=" + key + " id=" + id);
}
String ret = JsonUtil.toPrettyJson(memoryDump);
dumpContent = ret;
if(path == null || path.equals("")) {
return ret;
}
File mem = new File(path);
File parent = mem.getParentFile();
if (!parent.exists())
parent.mkdirs();
ObjectOutputStream writer;
try {
FileOutputStream fileout = new FileOutputStream(mem);
writer = new ObjectOutputStream(fileout);
writer.writeObject(dumpContent);
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
memoryDump = null;
return ret;
}
* public String dumpMemory(String path) { memoryDump = new MemoryDump(); Bindings bindings =
* engine.getBindings(ScriptContext.ENGINE_SCOPE);
* System.out.println("[MemoryDumpUtil] bindings size=" + bindings.size()); MemoryJSObject root
* = memoryDump.getRoot(); for (String key : bindings.keySet()) {
* System.out.println("[MemoryDumpUtil] dumpMemory " + key); Object obj = bindings.get(key);
* long id = memoryDump.allocate(obj); root.addField(key, id);
*
* System.out.println("[root addFiled] key=" + key + " id=" + id); } String ret =
* JsonUtil.toPrettyJson(memoryDump); dumpContent = ret;
*
* if(path == null || path.equals("")) { return ret; }
*
* File mem = new File(path); File parent = mem.getParentFile(); if (!parent.exists())
* parent.mkdirs(); ObjectOutputStream writer; try { FileOutputStream fileout = new
* FileOutputStream(mem); writer = new ObjectOutputStream(fileout);
* writer.writeObject(dumpContent);
*
* writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); }
*
* memoryDump = null; return ret; }
*/
}

View File

@ -1,7 +1,6 @@
package org.bdware.sc.memory;
import java.util.LinkedHashMap;
import java.util.Map;
public class MemoryJSObject extends MemoryObject {
private static final long serialVersionUID = -2290414347562477503L;

View File

@ -114,7 +114,8 @@ public class MemoryRecoverUtil {
ScriptObjectMirror global = (ScriptObjectMirror) objects.get(0L);
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
for (Object key : global.keySet()) {
if (global.get(key) != null) bindings.put((String) key, global.get(key));
if (global.get(key) != null)
bindings.put((String) key, global.get(key));
}
}
this.memoryDump = null;
@ -127,34 +128,20 @@ public class MemoryRecoverUtil {
}
/*
public void loadMemory(String path) {
try {
String memory;
File mem = new File(path);
FileInputStream fileout = new FileInputStream(mem);
ObjectInputStream reader = new ObjectInputStream(fileout);
loadContent = (String) reader.readObject();
// System.out.println("[MemoryRecoverUtil] loadContent : \n" + loadContent);
reader.close();
memoryDump = MemoryDump.loadFromStr(loadContent);
String ret = JsonUtil.toPrettyJson(memoryDump);
MemoryJSObject root = memoryDump.getRoot();
Map<Long, Object> objects = memoryDump.recreateObject();
ScriptObjectMirror global = (ScriptObjectMirror) objects.get(0L);
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
for (Object key : global.keySet()) {
if (global.get(key) != null)
bindings.put((String) key, global.get(key));
}
this.memoryDump = null;
if (resource != null)
((Invocable) engine).invokeFunction("defineProp", "Resources", resource);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
* public void loadMemory(String path) { try { String memory; File mem = new File(path);
* FileInputStream fileout = new FileInputStream(mem); ObjectInputStream reader = new
* ObjectInputStream(fileout); loadContent = (String) reader.readObject(); //
* System.out.println("[MemoryRecoverUtil] loadContent : \n" + loadContent); reader.close();
* memoryDump = MemoryDump.loadFromStr(loadContent);
*
*
* String ret = JsonUtil.toPrettyJson(memoryDump); MemoryJSObject root = memoryDump.getRoot();
* Map<Long, Object> objects = memoryDump.recreateObject(); ScriptObjectMirror global =
* (ScriptObjectMirror) objects.get(0L); Bindings bindings =
* engine.getBindings(ScriptContext.ENGINE_SCOPE); for (Object key : global.keySet()) { if
* (global.get(key) != null) bindings.put((String) key, global.get(key)); } this.memoryDump =
* null; if (resource != null) ((Invocable) engine).invokeFunction("defineProp", "Resources",
* resource); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
* }
*/
}

View File

@ -14,7 +14,8 @@ public class TransRecordUtil {
public static final int RESERVED = 20; // 最近的多少次records内存也保存如果一个节点距离集群当前的seq相差超过这个值就不从本地恢复让别的节点现场dump
public static final int DUMP_PERIOD = 50; // 每满50次记录就记录一次全量状态清一次trans记录
private static final Logger LOGGER = LogManager.getLogger(TransRecordUtil.class);
public Map<Integer, TransRecord> cacheTransRecords = new TreeMap<Integer, TransRecord>(); //TODO 认为其中records一定是seq连续的否则可能有问题?
public Map<Integer, TransRecord> cacheTransRecords = new TreeMap<Integer, TransRecord>(); // TODO
// 认为其中records一定是seq连续的否则可能有问题?
// public PriorityQueue<TransRecord> transRecords = new PriorityQueue<TransRecord>();
public TransRecord currentTransRecord;
SyncMechUtil syncUtil;

View File

@ -46,7 +46,8 @@ public class TransRecoverUtil {
System.out.println("恢复时加入 " + cur_read.toString());
}
if (strs[1].equals("true"))
cur_read = new TransRecord(strs[3], JsonUtil.parseString(arg), Integer.parseInt(strs[2]));
cur_read = new TransRecord(strs[3], JsonUtil.parseString(arg),
Integer.parseInt(strs[2]));
else
cur_read = new TransRecord(strs[3], JsonUtil.parseString(arg));
} else {
@ -83,7 +84,8 @@ public class TransRecoverUtil {
ac.seq = curRecoverRecord.seq;
LOGGER.info("[TransRecordUtil] redo 重新执行事务 " + ac.seq);
}
System.out.println("[TransRecoverUtil] recover " + ac.needSeq + " " + ac.seq + " " + ac.getAction() + " " + ac.getArg());
System.out.println("[TransRecoverUtil] recover " + ac.needSeq + " " + ac.seq + " "
+ ac.getAction() + " " + ac.getArg());
ContractResult result = engine.executeContract(ac);

View File

@ -42,7 +42,8 @@ public class DoipClusterServer extends DoipServerImpl {
return instance;
}
public static int startDoipServer(int startPort, JsonElement otherConfigs) throws InterruptedException {
public static int startDoipServer(int startPort, JsonElement otherConfigs)
throws InterruptedException {
try {
int ret = DoipLocalSingleton.run(startPort, otherConfigs);
return ret;
@ -56,7 +57,10 @@ public class DoipClusterServer extends DoipServerImpl {
repoIrpClient = new AuditIrpClient(config);
EndpointInfo info = repoIrpClient.getEndpointInfo();
if (info == null) {
String content = "{\"date\":\"2022-1-13\",\"name\":\"testrepoforaibd\",\"doId\":\"bdware.test.local/Repo\",\"address\":\"tcp://127.0.0.1:" + defaultDOIPServerPort + "\",\"status\":\"已审核\",\"protocol\":\"DOIP\",\"pubKey\":\"empty\",\"version\":\"2.1\"}";
String content =
"{\"date\":\"2022-1-13\",\"name\":\"testrepoforaibd\",\"doId\":\"bdware.test.local/Repo\",\"address\":\"tcp://127.0.0.1:"
+ defaultDOIPServerPort
+ "\",\"status\":\"已审核\",\"protocol\":\"DOIP\",\"pubKey\":\"empty\",\"version\":\"2.1\"}";
info = EndpointInfo.fromJson(content);
}
List<DoipListenerConfig> infos = new ArrayList<>();
@ -65,7 +69,8 @@ public class DoipClusterServer extends DoipServerImpl {
} catch (Exception e) {
e.printStackTrace();
}
DoipServiceInfo ret = new DoipServiceInfo(info.getDoId(), info.getPubKey(), defaultRepoType, infos);
DoipServiceInfo ret =
new DoipServiceInfo(info.getDoId(), info.getPubKey(), defaultRepoType, infos);
return ret;
}
@ -93,10 +98,14 @@ public class DoipClusterServer extends DoipServerImpl {
// 维护RouteInfo将RouteInfo和doipOperationName的映射关系以及所有Router中用得到的函数都维护好
// TODO 移除这部分逻辑
cn.maintainRouteJoinInfo(methodRouteInfoMap, methodJoinInfoMap, functions);
if (clusterInfo != null) repoHandleValues.add("clusterInfo", clusterInfo);
if (functions.size() > 0) repoHandleValues.add("functions", functions);
if (methodRouteInfoMap.size() > 0) repoHandleValues.add("routeInfo", methodRouteInfoMap);
if (methodJoinInfoMap.size() > 0) repoHandleValues.add("joinInfo", methodJoinInfoMap);
if (clusterInfo != null)
repoHandleValues.add("clusterInfo", clusterInfo);
if (functions.size() > 0)
repoHandleValues.add("functions", functions);
if (methodRouteInfoMap.size() > 0)
repoHandleValues.add("routeInfo", methodRouteInfoMap);
if (methodJoinInfoMap.size() > 0)
repoHandleValues.add("joinInfo", methodJoinInfoMap);
repoInfo.handleValues.addProperty("cluster", repoHandleValues.toString());
String updateRepoInfoRes = repoIrpClient.reRegister(repoInfo);
if (updateRepoInfoRes.equals("success")) {
@ -104,7 +113,8 @@ public class DoipClusterServer extends DoipServerImpl {
} else if (updateRepoInfoRes.equals("failed")) {
LOGGER.error("Failed to update cluster info to router");
} else {
LOGGER.warn("Oops...The result of updating clusterInfo to the router is " + updateRepoInfoRes);
LOGGER.warn("Oops...The result of updating clusterInfo to the router is "
+ updateRepoInfoRes);
}
}

View File

@ -100,7 +100,8 @@ public class DoipLocalSingleton {
ResultChecker checker = new ResultChecker();
server.start(checker);
checker.waitForResult(1000);
if (checker.port > 0) return port;
if (checker.port > 0)
return port;
return -1;
}

View File

@ -3,8 +3,7 @@ package org.bdware.sc.trace;
import java.io.Serializable;
/*
* js中对象
* ScriptObject JO
* js中对象 ScriptObject JO
*/
public class JSObject extends JSScript implements Serializable {

View File

@ -49,7 +49,8 @@ public class MethodInvokePrinter implements TraceMethod {
}
}
public void tracePrint(final String tag, int pc, String methodName, final Object[] args, final Object result) {
public void tracePrint(final String tag, int pc, String methodName, final Object[] args,
final Object result) {
// boolean isVoid = type().returnType() == void.class;
out.print(tag);
out.print(methodName + "_" + pc + "(");

View File

@ -24,14 +24,8 @@ public class ProgramPointCounter extends ContractProcess.Logger implements Trace
int functionIndex = 0;
public long gasValue = 0;
public ProgramPointCounter(
ByteArrayOutputStream bo,
ContractProcess cp,
long gasLimit,
int functionIndex,
long gasValue,
long extraGas,
String action,
public ProgramPointCounter(ByteArrayOutputStream bo, ContractProcess cp, long gasLimit,
int functionIndex, long gasValue, long extraGas, String action,
HashMap<String, Long> countMap) {
super(new PrintStream(bo), cp);
// out = System.out;
@ -50,52 +44,33 @@ public class ProgramPointCounter extends ContractProcess.Logger implements Trace
public String getOutputStr() {
return bo.toString();
}
/*
private void printObject(final Object arg) {
if (simple) return;
if (arg instanceof ScriptObject) {
final ScriptObject object = (ScriptObject) arg;
boolean isFirst = true;
final Set<Object> keySet = object.keySet();
// System.out.println("[keySet:]");
if (keySet.isEmpty()) {
out.print(ScriptRuntime.safeToString(arg));
} else {
out.print("{ ");
for (final Object key : keySet) {
if (!isFirst) {
out.print(", ");
}
out.print(key);
out.print(":");
final Object value = object.get(key);
if (value instanceof ScriptObject) {
out.print("...");
} else {
printObject(value);
}
isFirst = false;
}
out.print(" }");
}
} else {
out.print(ScriptRuntime.safeToString(arg));
}
}
* private void printObject(final Object arg) { if (simple) return; if (arg instanceof
* ScriptObject) { final ScriptObject object = (ScriptObject) arg;
*
* boolean isFirst = true; final Set<Object> keySet = object.keySet(); //
* System.out.println("[keySet:]"); if (keySet.isEmpty()) {
* out.print(ScriptRuntime.safeToString(arg)); } else { out.print("{ ");
*
* for (final Object key : keySet) { if (!isFirst) { out.print(", "); }
*
* out.print(key); out.print(":");
*
* final Object value = object.get(key);
*
* if (value instanceof ScriptObject) { out.print("..."); } else { printObject(value); }
*
* isFirst = false; }
*
* out.print(" }"); } } else { out.print(ScriptRuntime.safeToString(arg)); } }
*/
boolean initEnter = false;
Stack<Integer> pcStack = new Stack<>();
@Override
public void tracePrint(
final String tag, int pc, String methodName, final Object[] args, final Object result) {
public void tracePrint(final String tag, int pc, String methodName, final Object[] args,
final Object result) {
// System.out.println("!@#$%^&*" + tag + pc + methodName + args + result);
if (!initEnter) {
// System.out.println("[functionIndex]:" + countMap.get(String.valueOf(functionIndex)));

View File

@ -2,7 +2,6 @@ package org.bdware.sc.trace;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.zip.GZIPInputStream;
@ -93,7 +92,8 @@ public class TraceRecordUtil {
public void saveTraceRecords(String fileName) {
if (traceRecords == null) {
System.out.println("[saveTraceRecords] traceRecords is null,can't save traceRecords to fill!");
System.out.println(
"[saveTraceRecords] traceRecords is null,can't save traceRecords to fill!");
}
File traceFile = new File(fileName + ".trace"); // trace文件名中不带时间
@ -159,11 +159,10 @@ public class TraceRecordUtil {
TraceSetup tracesetup = new TraceSetup((JSScript) produceJS(arg));
/*
* System.out.println("[startRecord] setupScriptObject argID=" +
* arg.getObjectID() + " map=" + map.size()); Iterator<String> keys =
* arg.propertyIterator(); while(keys.hasNext()) { String key = keys.next();
* System.out.println(key + " ; " +
* map.findProperty(key).getClass().getCanonicalName());
* System.out.println("[startRecord] setupScriptObject argID=" + arg.getObjectID() +
* " map=" + map.size()); Iterator<String> keys = arg.propertyIterator();
* while(keys.hasNext()) { String key = keys.next(); System.out.println(key + " ; "
* + map.findProperty(key).getClass().getCanonicalName());
* tracesetup.add(map.findProperty(key)); }
*/
@ -195,15 +194,15 @@ public class TraceRecordUtil {
/*
* Context.TRACESETGLOBALOBJECTPROTO = new TraceSetGlobalObjectProto() {
*
* @Override public void trace(int id, int id2,List<Object> keys,List<Object>
* values) { System.out.println("[startRecord] set global object proto id=" + id
* + " id2=" + id2 + " size=" + keys.size());
* @Override public void trace(int id, int id2,List<Object> keys,List<Object> values) {
* System.out.println("[startRecord] set global object proto id=" + id + " id2=" + id2 +
* " size=" + keys.size());
*
*
*
* TraceInitObject traceinitobject = new TraceInitObject(id,id2); for(int i =
* 0;i < keys.size();i++) { System.out.println("i=" + i + " key=" + keys.get(i)
* + " value=" + values.get(i)); } currentTraceRecord.record(traceinitobject); }
* TraceInitObject traceinitobject = new TraceInitObject(id,id2); for(int i = 0;i <
* keys.size();i++) { System.out.println("i=" + i + " key=" + keys.get(i) + " value=" +
* values.get(i)); } currentTraceRecord.record(traceinitobject); }
*
* };
*/
@ -228,7 +227,8 @@ public class TraceRecordUtil {
} else if (arg instanceof wrp.jdk.nashorn.internal.runtime.Undefined) {
return new JSUndifined();
} else {
System.out.println("[produceJS] arg encounter new type!" + arg.toString() + " " + arg.getClass());
System.out.println(
"[produceJS] arg encounter new type!" + arg.toString() + " " + arg.getClass());
return new JS();
}
}

View File

@ -50,9 +50,12 @@ public class TraceRecoverUtil {
}
public TraceRecord getTraceRecord(int c) {
if (traceRecords == null) return null;
else if (traceRecords.size() <= c) return null;
else return traceRecords.get(c);
if (traceRecords == null)
return null;
else if (traceRecords.size() <= c)
return null;
else
return traceRecords.get(c);
}
public String getTraceRecordsContent() {
@ -86,7 +89,8 @@ public class TraceRecoverUtil {
for (String key : bindings.keySet()) {
Object obj = bindings.get(key);
if (obj instanceof ScriptObjectMirror) initRecoverMap((ScriptObjectMirror) obj);
if (obj instanceof ScriptObjectMirror)
initRecoverMap((ScriptObjectMirror) obj);
}
Context.setGlobal(JavaScriptEntry.getEngineGlobal());
}
@ -137,31 +141,25 @@ public class TraceRecoverUtil {
return "[recoverFromTraceRecord] recover all";
}
/*
* 通过traceRecord进行恢复 从当前状态恢复到第c次执行之后的状态
*/
public String recoverFromTraceRecord(int c) {
int oldflag = recoverFlag;
if (recoverFlag < 0) recoverInit();
if (recoverFlag < 0)
recoverInit();
if (recoverFlag > c) {
System.out.println(
"[recoverFromTraceRecord] recoverFlag now is "
+ recoverFlag
+ " ,can't recover to "
+ c
+ " !");
System.out.println("[recoverFromTraceRecord] recoverFlag now is " + recoverFlag
+ " ,can't recover to " + c + " !");
return "recover from trace failed!";
}
if (c >= traceRecords.size()) {
System.out.println(
"[recoverFromTraceRecord] traceRecords' size now is "
+ traceRecords.size()
+ " ,can't recover to "
+ c
+ " !");
System.out.println("[recoverFromTraceRecord] traceRecords' size now is "
+ traceRecords.size() + " ,can't recover to " + c + " !");
return "recover from trace failed!";
}
@ -217,10 +215,8 @@ public class TraceRecoverUtil {
if (trace.getObj() instanceof JSArray) {
id = ((JSArray) trace.getObj()).getObjID();
obj =
(ScriptObjectMirror)
ScriptObjectMirror.wrap(
Global.allocate(new int[0]), engine.getDesktopGlobal());
obj = (ScriptObjectMirror) ScriptObjectMirror.wrap(Global.allocate(new int[0]),
engine.getDesktopGlobal());
obj.setObjectID(id);
} else if (trace.getObj() instanceof JSObject) {
@ -233,9 +229,8 @@ public class TraceRecoverUtil {
* System.out.println("[recover setup JSObject] : "); id = ((JSObject)
* trace.getObj()).getObjID();
*
* PropertyMap map = PropertyMap.newMap(); for(int i = 0;i <
* trace.proLength();i++) { map.addProperty(trace.get(i)); } ScriptObject so =
* new JO(map);
* PropertyMap map = PropertyMap.newMap(); for(int i = 0;i < trace.proLength();i++) {
* map.addProperty(trace.get(i)); } ScriptObject so = new JO(map);
*
*
*
@ -279,12 +274,14 @@ public class TraceRecoverUtil {
// 目前JSArray和JSObject一样可能可以简化
else if (value instanceof JSArray)
value = getScriptObjectMirrorById(((JSArray) value).getObjID());
else if (value instanceof String || value instanceof Integer || value instanceof Double) ;
else if (value instanceof String || value instanceof Integer || value instanceof Double)
;
else if (value instanceof JSNull) // 数组trace中可能存在null和Undifined类型赋值时跳过
return;
else if (value instanceof JSUndifined) {
return;
} else System.out.println("[recoverSet] encounter new value type!" + value.toString());
} else
System.out.println("[recoverSet] encounter new value type!" + value.toString());
// 修改ScriptObjectMirror中的setMemeber使它支持所有类型
owner.setMember2(key, value);
@ -294,8 +291,10 @@ public class TraceRecoverUtil {
* 将bindings中的变量放入recoverMap 对于函数的scope中的对象以及对象中的对象的情况可以通过递归将所有需要的都放入recoverMap中
*/
private void initRecoverMap(ScriptObjectMirror obj) {
if (obj == null) return;
if (recoverMap.containsKey(obj.getObjectID())) return;
if (obj == null)
return;
if (recoverMap.containsKey(obj.getObjectID()))
return;
recoverMap.put(obj.getObjectID(), obj);
// 全局变量从bindings中获得
@ -309,10 +308,8 @@ public class TraceRecoverUtil {
if (svalue.isFunction()) {
ScriptFunction sf = (ScriptFunction) svalue.getScriptObject();
ScriptObject s = sf.getScope();
ScriptObjectMirror obj2 =
(ScriptObjectMirror)
ScriptObjectMirror.wrap(
s, JavaScriptEntry.getEngineGlobal());
ScriptObjectMirror obj2 = (ScriptObjectMirror) ScriptObjectMirror.wrap(s,
JavaScriptEntry.getEngineGlobal());
initRecoverMap(obj2);
}
}
@ -326,7 +323,8 @@ public class TraceRecoverUtil {
ScriptObjectMirror so = null;
// 从recoverMap中获得
if (recoverMap.containsKey(id)) return recoverMap.get(id);
if (recoverMap.containsKey(id))
return recoverMap.get(id);
System.out.println("[getScriptObjectMirrorById] can't find the ScriptObjectMirror by id!");
return so;

View File

@ -3,8 +3,7 @@ package org.bdware.sc.trace;
import java.io.Serializable;
/*
* 记录nashorn中setElem和setProp的trace
* 自定义对象和数组的set不同
* 记录nashorn中setElem和setProp的trace 自定义对象和数组的set不同
*/
public class TraceSet extends Trace implements Serializable {
int owner; // 该对象的id

View File

@ -28,10 +28,12 @@ public class TraceSetIdentifier {
if (this.key instanceof String && obj2.key instanceof String && obj2.key.equals(this.key))
return true;
else if(this.key instanceof Double && obj2.key instanceof Double && obj2.key.equals(this.key))
else if (this.key instanceof Double && obj2.key instanceof Double
&& obj2.key.equals(this.key))
return true;
else
System.out.println("[TraceSetIdentifier] error : encounter new key type : " + this.key.getClass().getName());
System.out.println("[TraceSetIdentifier] error : encounter new key type : "
+ this.key.getClass().getName());
return false;
}
@ -50,7 +52,8 @@ public class TraceSetIdentifier {
temp = (int) t;
result = result * 31 + temp;
} else {
System.out.println("[TraceSetIdentifier] error : encounter new key type : " + this.key.getClass().getName());
System.out.println("[TraceSetIdentifier] error : encounter new key type : "
+ this.key.getClass().getName());
}
if (result < 0)

View File

@ -39,9 +39,11 @@ public class TraceSetup extends Trace implements Serializable{
StringBuilder str = new StringBuilder();
str.append("[TraceSetup]\n");
if (obj instanceof JSObject)
str.append(((JSObject)obj).getObjID() + "," + ((JSObject)obj).getClass()+ " " + /*map.toString() +*/ "\n");
str.append(((JSObject) obj).getObjID() + "," + ((JSObject) obj).getClass() + " "
+ /* map.toString() + */ "\n");
else if (obj instanceof JSArray)
str.append(((JSArray)obj).getObjID() + "," + ((JSArray)obj).getClass() + " " +/* map.toString() + */"\n");
str.append(((JSArray) obj).getObjID() + "," + ((JSArray) obj).getClass() + " "
+ /* map.toString() + */"\n");
if (properties.size() > 0) {
str.append("properties : " + "\n");

View File

@ -13,12 +13,14 @@ public class DataXTest {
File directory = new File("");
String path = directory.getCanonicalPath();
try {
BufferedReader bf = new BufferedReader(new FileReader("./src/test/data-mask/maskingJobs/config.json"));
BufferedReader bf = new BufferedReader(
new FileReader("./src/test/data-mask/maskingJobs/config.json"));
while ((s = bf.readLine()) != null) {
content.append(s.trim());
}
s = content.toString();
} catch (Exception e) {}
} catch (Exception e) {
}
String ans = mj.getMaskedData(s).getAsString();
System.out.println(ans);
}

View File

@ -7,7 +7,8 @@ public class DataBaseProcess {
// // start a process before
// long startJava = System.currentTimeMillis();
// // authentication: user, dbname, pwd
// MongoCredential credential = MongoCredential.createCredential("yancloud-dbuser", "yancloud",
// MongoCredential credential = MongoCredential.createCredential("yancloud-dbuser",
// "yancloud",
// "yancloud-112".toCharArray());
// // connect to mongodb server
// ServerAddress addr = new ServerAddress("39.106.118.0", 27017);

View File

@ -8,8 +8,8 @@ public class FSAnalysisTest {
public static void main(String[] args) throws Exception {
Contract contract = new Contract();
FSAnalysis.isDebug = true;
String content =
FileUtil.getFileContent("/Users/hulingxuan/git/SmartContract/contractExamples/fsanlysis.yjs");
String content = FileUtil.getFileContent(
"/Users/hulingxuan/git/SmartContract/contractExamples/fsanlysis.yjs");
contract.setScript(null == content ? "" : content);
FSAnalysis.staticVerify(contract);
}

View File

@ -42,9 +42,7 @@ public class MultiSourceTaintAyalysisTest extends MultiSourceTaintAnalysis {
// contractNode = compiler.compile(new FileInputStream(path), "contract_main.yjs");
// contractNode = compiler.compile(new FileInputStream(path), "DORepo.yjs");
contractNode =
compiler.compile(
new ZipFile(
contractNode = compiler.compile(new ZipFile(
"/Users/huaqiancai/BDWare/BDContract/front-agent/./BDWareProjectDir/publicCompiled/StaticAnalysisExample_2020-07-09-00.ypk"))
.mergeContractNode();
DesktopEngine engine = new DesktopEngine(); // engine.loadJar(zf);
@ -78,8 +76,6 @@ public class MultiSourceTaintAyalysisTest extends MultiSourceTaintAnalysis {
TaintResult.printer.setLabelOrder(cfg.getLabelOrder());
MultiSourceTaintAnalysis analysis = new MultiSourceTaintAnalysis(cfg);
analysis.analysis();
@ -95,7 +91,8 @@ public class MultiSourceTaintAyalysisTest extends MultiSourceTaintAnalysis {
List<Integer> ids = map.get(i);
frontCF.addBB(bb, decompiled, ids, cfg);
Set<BasicBlock> suc = cfg.getSucBlocks(bb);
for (BasicBlock sucBB : suc) frontCF.addEdge(bb, sucBB);
for (BasicBlock sucBB : suc)
frontCF.addEdge(bb, sucBB);
}
TaintBB bb = cfg.getLastBlock();
cfg.printSelf();
@ -103,7 +100,8 @@ public class MultiSourceTaintAyalysisTest extends MultiSourceTaintAnalysis {
// if(fn.functionName.equals("setDBInfo"))
// cfg.printSelf();
if (bb != null) result.put(fn.functionName, bb.getResultWithTaintBit());
if (bb != null)
result.put(fn.functionName, bb.getResultWithTaintBit());
System.out.println("[ContractManager] verifyDone:" + fn.functionName);
}
}

View File

@ -44,8 +44,7 @@ public class PPCountTest extends PPCount {
// flag++;
MethodNode mn = methods.get("log");
if (mn != null) {
CFGraph cfg =
new CFGraph(mn) {
CFGraph cfg = new CFGraph(mn) {
@Override
public BasicBlock getBasicBlock(int id) {
return new BasicBlock(id);

View File

@ -2,7 +2,6 @@ package org.bdware.sc;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import jdk.nashorn.internal.objects.Global;
import org.bdware.sc.bean.Contract;
import org.bdware.sc.engine.JSONTool;
import org.bdware.sc.util.JsonUtil;
@ -11,7 +10,8 @@ import org.junit.Test;
public class ExecuteFunctionWithoutLimitTest {
@Test
public void go() {
String arg = "{\"funcName\":\"getWriteCandidates\",\"funcArgs\":[\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",[\"04a68e0f34cd28484f67cf4e108eb64b8d565d18ecd916e9049151f97d1553872bf8706b3be9e418b7e6136e627d8e81c82a7ce3fd7045ed5382ae3196aa3ac418\",\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",\"04cd228cc3eeec97d912a5158eb25edfcb37947f9934a7645a3311eeeb06f1af05f155f2019ff1edc716d3d10a79a67714284a06ef16d61ccea80aa6816110d157\"],3,{\"doId\":\"abc\",\"body\":\"abcdefg\"}]}";
String arg =
"{\"funcName\":\"getWriteCandidates\",\"funcArgs\":[\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",[\"04a68e0f34cd28484f67cf4e108eb64b8d565d18ecd916e9049151f97d1553872bf8706b3be9e418b7e6136e627d8e81c82a7ce3fd7045ed5382ae3196aa3ac418\",\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",\"04cd228cc3eeec97d912a5158eb25edfcb37947f9934a7645a3311eeeb06f1af05f155f2019ff1edc716d3d10a79a67714284a06ef16d61ccea80aa6816110d157\"],3,{\"doId\":\"abc\",\"body\":\"abcdefg\"}]}";
JsonObject body = JsonUtil.parseString(arg).getAsJsonObject();
String funcName = body.get("funcName").getAsString();
@ -19,13 +19,15 @@ public class ExecuteFunctionWithoutLimitTest {
Object[] funcArgs = JsonUtil.fromJson(arr, Object[].class);
System.out.println(funcArgs);
}
@Test
public void go2() {
ContractProcess instance = new ContractProcess(124, "bac");
Contract c = new Contract();
c.setScript("contract abc{}");
instance.setContract(c);
String arg = "{\"funcName\":\"getWriteCandidates\",\"funcArgs\":[\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",[\"04a68e0f34cd28484f67cf4e108eb64b8d565d18ecd916e9049151f97d1553872bf8706b3be9e418b7e6136e627d8e81c82a7ce3fd7045ed5382ae3196aa3ac418\",\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",\"04cd228cc3eeec97d912a5158eb25edfcb37947f9934a7645a3311eeeb06f1af05f155f2019ff1edc716d3d10a79a67714284a06ef16d61ccea80aa6816110d157\"],3,{\"doId\":\"abc\",\"body\":\"abcdefg\"}]}";
String arg =
"{\"funcName\":\"getWriteCandidates\",\"funcArgs\":[\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",[\"04a68e0f34cd28484f67cf4e108eb64b8d565d18ecd916e9049151f97d1553872bf8706b3be9e418b7e6136e627d8e81c82a7ce3fd7045ed5382ae3196aa3ac418\",\"041016acfbc8f4068a24d38a99a1355449ba958f7e905d66617cec9eda311e3001f8d15a4440b6eb61d7b7bd94bb434b30a518623c1593540e7d32eb72fe8088e1\",\"04cd228cc3eeec97d912a5158eb25edfcb37947f9934a7645a3311eeeb06f1af05f155f2019ff1edc716d3d10a79a67714284a06ef16d61ccea80aa6816110d157\"],3,{\"doId\":\"abc\",\"body\":\"abcdefg\"}]}";
JsonObject body = JsonUtil.parseString(arg).getAsJsonObject();
String funcName = body.get("funcName").getAsString();
JsonArray arr = body.getAsJsonArray("funcArgs");

View File

@ -8,14 +8,16 @@ import java.math.BigInteger;
public class SM2Test {
@Test
public void run() {
String str = "{publicKey:\"04398dfde44290595cd098cd2f904b36367c69f9011719d43fb0955f823cf1386764769bc7c0a5649dcb316d552998a5c106afd268d9db8b6482ce527544a7bd15\",privateKey:\"82a119ee46db52778182682f11e21980b6de3070b070a2f58e614af66775d6fc\"}";
String pubKey = "04398dfde44290595cd098cd2f904b36367c69f9011719d43fb0955f823cf1386764769bc7c0a5649dcb316d552998a5c106afd268d9db8b6482ce527544a7bd15";
String str =
"{publicKey:\"04398dfde44290595cd098cd2f904b36367c69f9011719d43fb0955f823cf1386764769bc7c0a5649dcb316d552998a5c106afd268d9db8b6482ce527544a7bd15\",privateKey:\"82a119ee46db52778182682f11e21980b6de3070b070a2f58e614af66775d6fc\"}";
String pubKey =
"04398dfde44290595cd098cd2f904b36367c69f9011719d43fb0955f823cf1386764769bc7c0a5649dcb316d552998a5c106afd268d9db8b6482ce527544a7bd15";
// 04398dfde44290595cd098cd2f904b36367c69f9011719d43fb0955f823cf1386764769bc7cOa5649dcb316d552998a5c106afd268d9db8b6482ce527544a7bd15
String privKey = "82a119ee46db52778182682f11e21980b6de3070b070a2f58e614af66775d6fc";
// 82a119ee46db52778182682f11e21980b6de3070b070a2f58e614af66775d6fc
SM2KeyPair key = new SM2KeyPair(
SM2KeyPair.publicKeyStr2ECPoint(pubKey), new BigInteger(privKey, 16));
SM2KeyPair key = new SM2KeyPair(SM2KeyPair.publicKeyStr2ECPoint(pubKey),
new BigInteger(privKey, 16));
System.out.println("hello");
}
}

View File

@ -3,8 +3,10 @@ package org.bdware.sc.blockdb.test;
public class SQLiteTest {
public static void main(String[] args) {
// SqliteDBUtil db = SqliteDBUtil.connect("testdb");
// Block block = db.getBlock("bb68c4a00b251ea350bbb28052eb44b565749586", "480af5c0c74eb471b671edb49bc9db93dc3456e4");
// DataInputStream in = new DataInputStream(new ByteArrayInputStream(block.blockheader.prevblockID));
// Block block = db.getBlock("bb68c4a00b251ea350bbb28052eb44b565749586",
// "480af5c0c74eb471b671edb49bc9db93dc3456e4");
// DataInputStream in = new DataInputStream(new
// ByteArrayInputStream(block.blockheader.prevblockID));
// byte[] b1 = new byte[20];
// byte[] b2 = new byte[20];
// byte[] b3 = new byte[20];

View File

@ -19,7 +19,8 @@ public class ACIndexTest {
DesktopEngine engine = new DesktopEngine();
engine.getDesktopGlobal();
Context.setGlobal(JavaScriptEntry.getEngineGlobal());
ScriptObjectMirror mir = (ScriptObjectMirror) ScriptObjectMirror.wrap(Global.allocate(new int[0]), engine.getDesktopGlobal());
ScriptObjectMirror mir = (ScriptObjectMirror) ScriptObjectMirror
.wrap(Global.allocate(new int[0]), engine.getDesktopGlobal());
mir.setMember("account", "ac1");
mir.setMember("file", "time");
mir.setMember("dataLength", "32");
@ -29,7 +30,8 @@ public class ACIndexTest {
for (int i = 0; i < 10000000; i++) {
mir.setMember("account", "ac1");
mir.setMember("file", "time");
mir.setMember("content", "61c1dc1d49ccd251b2f73567c776b4607dd36b12fa64e49e7ca53630102d0389");
mir.setMember("content",
"61c1dc1d49ccd251b2f73567c776b4607dd36b12fa64e49e7ca53630102d0389");
mir.setMember("date", 1578042000 + i);
obj = index.manullyIndex(mir);
}

View File

@ -35,14 +35,15 @@ public class HttpPostTest {
}
public static String get24Html(String url) {
ProcessBuilder builder = new ProcessBuilder("curl", url, "-H", "Connection: keep-alive", "-H",
"Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123", "-H",
"Upgrade-Insecure-Requests: 1", "-H", "Content-Type: application/x-www-form-urlencoded", "-H",
ProcessBuilder builder = new ProcessBuilder("curl", url, "-H", "Connection: keep-alive",
"-H", "Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123", "-H",
"Upgrade-Insecure-Requests: 1", "-H",
"Content-Type: application/x-www-form-urlencoded", "-H",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
"-H",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H", "Accept-Encoding: gzip, deflate", "-H",
"Accept-Language: zh-CN,zh;q=0.9", "-H",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H",
"Accept-Encoding: gzip, deflate", "-H", "Accept-Language: zh-CN,zh;q=0.9", "-H",
"Cookie: setstring=%CB%CE%CC%E5%2FBLACK%2F4%2F%C1%A5%CA%E9%2FBLUE%2F2%2F%CB%CE%CC%E5%2Fgreen%2F3%2F%C1%A5%CA%E9%2FBLUE%2F2; clientadd=10%2E1%2E12%2E68; serveradd=162%2E105%2E138%2E123; ASPSESSIONIDAQQTRBDT=HHKDBDKBHGLMACLALGIFGKPO",
"--compressed");
try {
@ -54,14 +55,16 @@ public class HttpPostTest {
}
public static String getCatalogHtml(String key) {
ProcessBuilder builder = new ProcessBuilder("curl", "http://162.105.138.123/net25/readns-25.htm", "-H",
"Connection: keep-alive", "-H", "Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123",
"-H", "Upgrade-Insecure-Requests: 1", "-H", "Content-Type: application/x-www-form-urlencoded", "-H",
ProcessBuilder builder = new ProcessBuilder("curl",
"http://162.105.138.123/net25/readns-25.htm", "-H", "Connection: keep-alive", "-H",
"Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123", "-H",
"Upgrade-Insecure-Requests: 1", "-H",
"Content-Type: application/x-www-form-urlencoded", "-H",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
"-H",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H", "Accept-Encoding: gzip, deflate", "-H",
"Accept-Language: zh-CN,zh;q=0.9", "-H",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H",
"Accept-Encoding: gzip, deflate", "-H", "Accept-Language: zh-CN,zh;q=0.9", "-H",
"Cookie: setstring=%CB%CE%CC%E5%2FBLACK%2F4%2F%C1%A5%CA%E9%2FBLUE%2F2%2F%CB%CE%CC%E5%2Fgreen%2F3%2F%C1%A5%CA%E9%2FBLUE%2F2; clientadd=10%2E1%2E12%2E68; serveradd=162%2E105%2E138%2E123; ASPSESSIONIDAQQTRBDT=HHKDBDKBHGLMACLALGIFGKPO",
"--compressed");
try {
@ -73,14 +76,16 @@ public class HttpPostTest {
}
public static String query24(String keyword) {
ProcessBuilder builder = new ProcessBuilder("curl", "http://162.105.138.123/net25/readwhole.asp", "-H",
"Connection: keep-alive", "-H", "Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123",
"-H", "Upgrade-Insecure-Requests: 1", "-H", "Content-Type: application/x-www-form-urlencoded", "-H",
ProcessBuilder builder = new ProcessBuilder("curl",
"http://162.105.138.123/net25/readwhole.asp", "-H", "Connection: keep-alive", "-H",
"Cache-Control: max-age=0", "-H", "Origin: http://162.105.138.123", "-H",
"Upgrade-Insecure-Requests: 1", "-H",
"Content-Type: application/x-www-form-urlencoded", "-H",
"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
"-H",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H", "Accept-Encoding: gzip, deflate", "-H",
"Accept-Language: zh-CN,zh;q=0.9", "-H",
"-H", "Referer: http://162.105.138.123/net25/query.asp", "-H",
"Accept-Encoding: gzip, deflate", "-H", "Accept-Language: zh-CN,zh;q=0.9", "-H",
"Cookie: setstring=%CB%CE%CC%E5%2FBLACK%2F4%2F%C1%A5%CA%E9%2FBLUE%2F2%2F%CB%CE%CC%E5%2Fgreen%2F3%2F%C1%A5%CA%E9%2FBLUE%2F2; clientadd=10%2E1%2E12%2E68; serveradd=162%2E105%2E138%2E123; ASPSESSIONIDAQQTRBDT=HHKDBDKBHGLMACLALGIFGKPO",
"--data",
"query=_keyword&B1=%BC%EC+%CB%F7&colid=2.0&colid=2.1&colid=2.14&colid=2.25&colid=2.34&colid=2.65&colid=2.136&colid=2.138"

View File

@ -20,8 +20,9 @@ public class LedgerUtilTest {
System.out.println(c.clientVersionSync().getVersion());
System.out.println(c.getLedgersSync().toString());
String from = "0xb60e8dd61c5d32be8058bb8eb970870f07233155";
LedgerProto.SendTransactionResponse ret = c.sendTransactionSync("bdcontract", CommonProto.TransactionType.MESSAGE,
from, System.currentTimeMillis(), from, "hello".getBytes(StandardCharsets.UTF_8));
LedgerProto.SendTransactionResponse ret =
c.sendTransactionSync("bdcontract", CommonProto.TransactionType.MESSAGE, from,
System.currentTimeMillis(), from, "hello".getBytes(StandardCharsets.UTF_8));
System.out.println("=====" + HashUtil.byteArray2Str(ret.getHash().toByteArray()));
}
@ -44,13 +45,15 @@ public class LedgerUtilTest {
String hash = ByteUtil.encodeBASE64(bytes);
System.out.println(URLEncoder.encode(hash));
}
@Test
public void readData() {
String hash = "kNkTGrOLKlMiVHiCx/Ik3Tx3DDI=";
hash = "mEoVJx4k2L5nhKY6exjtJWmU7RA=";
hash = "OTg0YTE1MjcxZTI0ZDhiZTY3ODRhNjNhN2IxOGVkMjU2OTk0ZWQxMA==";
byte[] data = ByteUtil.decodeBASE64(hash);
//<ByteString@67aaeb8d size=20 contents="<D\206P!\241\005\017\366\321\312\336\323cWiS>\226\207">
// <ByteString@67aaeb8d size=20
// contents="<D\206P!\241\005\017\366\321\312\336\323cWiS>\226\207">
// System.out.println(new String(data));
}
}

View File

@ -18,7 +18,8 @@ public class SQLUtilTest {
// 1.getConnection()方法连接MySQL数据库
con = DriverManager.getConnection(url, user, password);
if (!con.isClosed()) System.out.println("Succeeded connecting to the Database!");
if (!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
// 2.创建statement类对象用来执行SQL语句
Statement statement = con.createStatement();

View File

@ -9,8 +9,12 @@ import org.junit.Test;
public class ArgSchemaTest {
@Test
public void test1() {
JsonObject realData=JsonParser.parseString("{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}],\"doId\":1}").getAsJsonObject();
JsonObject schema=JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"doId\":\"number\"}").getAsJsonObject();
JsonObject realData = JsonParser
.parseString("{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}],\"doId\":1}")
.getAsJsonObject();
JsonObject schema =
JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"doId\":\"number\"}")
.getAsJsonObject();
ArgSchemaVisitor visitor = new ArgSchemaVisitor(realData);
@ -18,10 +22,16 @@ public class ArgSchemaTest {
System.out.println(visitor.getStatus());
System.out.println(visitor.getException().toString());
}
@Test
public void test2() {
JsonObject realData=JsonParser.parseString("{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}],\"doId\":\"string\"}").getAsJsonObject();
JsonObject schema=JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"doId\":\"number\"}").getAsJsonObject();
JsonObject realData = JsonParser
.parseString(
"{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}],\"doId\":\"string\"}")
.getAsJsonObject();
JsonObject schema =
JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"doId\":\"number\"}")
.getAsJsonObject();
ArgSchemaVisitor visitor = new ArgSchemaVisitor(realData);
@ -30,6 +40,7 @@ public class ArgSchemaTest {
System.out.println(visitor.getException().toString());
System.out.println(visitor.errorCode);
}
@Test
public void test3() {
JsonElement realData = JsonParser.parseString("data.json");
@ -46,8 +57,12 @@ public class ArgSchemaTest {
// 缺少必选项
@Test
public void test4() {
JsonObject realData=JsonParser.parseString("{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}]}").getAsJsonObject();
JsonObject schema=JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"!doId\":\"string\"}").getAsJsonObject();
JsonObject realData =
JsonParser.parseString("{\"data\":[{\"name\":\"zzz\"},{\"name\":\"aaa\"}]}")
.getAsJsonObject();
JsonObject schema =
JsonParser.parseString("{\"data\":[{\"name\":\"string\"}],\"!doId\":\"string\"}")
.getAsJsonObject();
ArgSchemaVisitor visitor = new ArgSchemaVisitor(realData);
visitor.visit(schema);
System.out.println(visitor.getStatus());

View File

@ -6,8 +6,10 @@ import org.bdware.sc.engine.hook.MaskVisitor;
public class MaskVisitorTest {
public static void main(String[] args) {
String mask = "[{\"score\":\"md5\",\"name\":\"fpe\",\"grade\":\"edp\",\"number\":\"aes\",\"info\":{\"age\":\"edp\",\"sex\":\"md5\"}}]";
String data = "[{\"score\":11,\"name\":\"ccq\",\"grade\":98.5,\"number\":2001210533,\"info\":{\"age\":\"18\",\"sex\":\"m\"}},{\"score\":11,\"name\":\"ccq\",\"grade\":98.5,\"number\":2001210533}]";
String mask =
"[{\"score\":\"md5\",\"name\":\"fpe\",\"grade\":\"edp\",\"number\":\"aes\",\"info\":{\"age\":\"edp\",\"sex\":\"md5\"}}]";
String data =
"[{\"score\":11,\"name\":\"ccq\",\"grade\":98.5,\"number\":2001210533,\"info\":{\"age\":\"18\",\"sex\":\"m\"}},{\"score\":11,\"name\":\"ccq\",\"grade\":98.5,\"number\":2001210533}]";
String m1 = "{\"score\":\"edp\",\"name\":\"md5\"}";
String d1 = "{\"score\":\"95\",\"name\":\"zzz\"}";

View File

@ -35,7 +35,8 @@ public class MockUtilTest {
Object ret = MockUtil.mock(ele2.toString());
// System.out.println(
// (JSONTool.copy((jdk.nashorn.api.scripting.ScriptObjectMirror) mock(ele2.toString()))).toString());
// (JSONTool.copy((jdk.nashorn.api.scripting.ScriptObjectMirror)
// mock(ele2.toString()))).toString());
System.out.println(MockUtil.mock("'@string'"));
}

View File

@ -24,45 +24,32 @@ public class MemoryDumpRecoverTest {
return sb.toString();
}
/* //仅支持public路径下测试
public static void memoryRecover(String contractName) {
String name = contractName + "/" + contractName;
//启动合约
ContractManager cm2 = new ContractManager();
cm2.yjsPath = JudgeStatus.yjsPath;
Contract c = new Contract();
c.setType(ContractType.Sole);
String id = "169412582";
c.setID(id);
c.setScript(RedoRecoverTest.file2Str("/Users/zhangyixuan/Lab/newProject/BDContract/front-agent/BDWareProjectDir/public/" + name + ".yjs"));
String key = "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
SM2KeyPair pair = SM2KeyPair.fromJson(key);
c.doSignature(pair);
System.out.println("<<<Start a contract>>> : " + cm2.startContractAndRedirect(c, null));
//loadMemory
long time1 = System.currentTimeMillis();
File mem = new File("./cp/recoverTestFiles/memory/" + contractName + ".txt");
String res = cm2.loadMemory(contractName, mem.getAbsolutePath());
long time2 = System.currentTimeMillis();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("<<<Load memory>>> : " + res);
double cost = ((double)time2 - (double)time1)/1000;
System.out.println("load memory 用时" + cost + "s");
String content1 = MemoryDumpUtil.getContentFromFile(mem.getAbsolutePath());
String content2 = cm2.dumpContract(contractName, "");
System.out.println("load之后dump : \n" + content2 + "\n\n");
System.out.println(content1.equals(content2));
}*/
/*
* //仅支持public路径下测试 public static void memoryRecover(String contractName) { String name =
* contractName + "/" + contractName;
*
* //启动合约 ContractManager cm2 = new ContractManager(); cm2.yjsPath = JudgeStatus.yjsPath;
* Contract c = new Contract(); c.setType(ContractType.Sole); String id = "169412582";
* c.setID(id); c.setScript(RedoRecoverTest.file2Str(
* "/Users/zhangyixuan/Lab/newProject/BDContract/front-agent/BDWareProjectDir/public/" + name +
* ".yjs")); String key =
* "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
* SM2KeyPair pair = SM2KeyPair.fromJson(key); c.doSignature(pair);
* System.out.println("<<<Start a contract>>> : " + cm2.startContractAndRedirect(c, null));
*
*
*
*
* //loadMemory long time1 = System.currentTimeMillis(); File mem = new
* File("./cp/recoverTestFiles/memory/" + contractName + ".txt"); String res =
* cm2.loadMemory(contractName, mem.getAbsolutePath()); long time2 = System.currentTimeMillis();
* try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch
* block e.printStackTrace(); } System.out.println("<<<Load memory>>> : " + res); double cost =
* ((double)time2 - (double)time1)/1000; System.out.println("load memory 用时" + cost + "s");
*
*
* String content1 = MemoryDumpUtil.getContentFromFile(mem.getAbsolutePath()); String content2 =
* cm2.dumpContract(contractName, ""); System.out.println("load之后dump : \n" + content2 +
* "\n\n"); System.out.println(content1.equals(content2)); }
*/
}

View File

@ -8,55 +8,36 @@ public class MemoryDumpTest {
// memoryRecord("Test","Test1");
}
/* //仅支持public路径下测试
public static void memoryRecord(String contractName,String argsFileName) {
String name = contractName + "/" + contractName;
//启动合约
ContractManager cm1 = new ContractManager();
cm1.yjsPath = JudgeStatus.yjsPath;
Contract c = new Contract();
c.setType(ContractType.Sole);
String id = "169412582";
c.setID(id);
c.setScript(RedoRecoverTest.file2Str("/Users/zhangyixuan/Lab/newProject/BDContract/front-agent/BDWareProjectDir/public/" + name + ".yjs"));
String key = "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
SM2KeyPair pair = SM2KeyPair.fromJson(key);
c.doSignature(pair);
System.out.println("<<<Start a contract>>> : " + cm1.startContractAndRedirect(c, null));
//执行事务
int count = 0;
ContractRequest cor = new ContractRequest();
cor.setContractID(contractName);
cor.doSignature(pair);
File file = new File("./cp/recoverTestFiles/affairs/" + contractName + "/" + argsFileName);
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s=br.readLine()) != null) {
String[] strs = s.split(" ");
cor.setAction(strs[0]);
cor.setArg(strs[1]);
System.out.println("<<<execute the contract>> NO." + (++count) + " [Result]" + cm1.execute(cor,null));
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//memoryDump
long time1 = System.currentTimeMillis();
File mem = new File("./cp/recoverTestFiles/memory/" + contractName + ".txt");
String memory = cm1.dumpContract(contractName,mem.getAbsolutePath());
System.out.println("memory\n" + memory);
long time2 = System.currentTimeMillis();
double cost = ((double)time2 - (double)time1)/1000;
System.out.println("" + count + "项事务dump memory 用时" + cost + "s");
}*/
/*
* //仅支持public路径下测试 public static void memoryRecord(String contractName,String argsFileName) {
* String name = contractName + "/" + contractName;
*
* //启动合约 ContractManager cm1 = new ContractManager(); cm1.yjsPath = JudgeStatus.yjsPath;
* Contract c = new Contract(); c.setType(ContractType.Sole); String id = "169412582";
* c.setID(id); c.setScript(RedoRecoverTest.file2Str(
* "/Users/zhangyixuan/Lab/newProject/BDContract/front-agent/BDWareProjectDir/public/" + name +
* ".yjs")); String key =
* "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
* SM2KeyPair pair = SM2KeyPair.fromJson(key); c.doSignature(pair);
* System.out.println("<<<Start a contract>>> : " + cm1.startContractAndRedirect(c, null));
*
*
*
* //执行事务 int count = 0; ContractRequest cor = new ContractRequest();
* cor.setContractID(contractName); cor.doSignature(pair); File file = new
* File("./cp/recoverTestFiles/affairs/" + contractName + "/" + argsFileName); try { FileReader
* fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String s = null;
* while((s=br.readLine()) != null) { String[] strs = s.split(" "); cor.setAction(strs[0]);
* cor.setArg(strs[1]); System.out.println("<<<execute the contract>> NO." + (++count) +
* " [Result]" + cm1.execute(cor,null)); } } catch (IOException e1) { // TODO Auto-generated
* catch block e1.printStackTrace(); }
*
*
* //memoryDump long time1 = System.currentTimeMillis(); File mem = new
* File("./cp/recoverTestFiles/memory/" + contractName + ".txt"); String memory =
* cm1.dumpContract(contractName,mem.getAbsolutePath()); System.out.println("memory\n" +
* memory); long time2 = System.currentTimeMillis(); double cost = ((double)time2 -
* (double)time1)/1000; System.out.println("" + count + "项事务dump memory 用时" + cost + "s"); }
*/
}

View File

@ -18,7 +18,8 @@ import java.io.InputStream;
public class YJSParserTest {
@Test
public void elseTest() throws IOException {
InputStream resource = YJSParserTest.class.getClassLoader().getResourceAsStream("module1.yjs");
InputStream resource =
YJSParserTest.class.getClassLoader().getResourceAsStream("module1.yjs");
JavaScriptLexer lexer;
assert resource != null;
lexer = new JavaScriptLexer(CharStreams.fromStream(resource));
@ -37,7 +38,8 @@ public class YJSParserTest {
@Test
public void functionTest() throws IOException {
InputStream resource = YJSParserTest.class.getClassLoader().getResourceAsStream("function.yjs");
InputStream resource =
YJSParserTest.class.getClassLoader().getResourceAsStream("function.yjs");
JavaScriptLexer lexer;
assert resource != null;
lexer = new JavaScriptLexer(CharStreams.fromStream(resource));
@ -50,7 +52,8 @@ public class YJSParserTest {
parser.addErrorListener(errorListener);
parser.addErrorListener(new DiagnosticErrorListener());
YJSParser.ProgramContext tree = parser.program();
for (YJSParser.ClzOrFunctionDeclarationContext clzOrFunc : tree.contractDeclar().clzOrFunctionDeclaration()) {
for (YJSParser.ClzOrFunctionDeclarationContext clzOrFunc : tree.contractDeclar()
.clzOrFunctionDeclaration()) {
System.out.println(clzOrFunc.functionDeclaration().View());
}
for (String str : errorListener.getResultList()) {

View File

@ -21,26 +21,18 @@ public class ExecuteContractTest {
public static void main(String[] args) throws Exception {
String testDir = "./scripts/test/";
File f = new File(testDir);
if (!f.exists()) f.mkdirs();
String[] confs =
new String[]{
"HelloAtMac",
"AnalysisAtMac",
"TFAtMac",
"HelloAtAli",
"AnalysisAtAli",
"TFAtAli"
};
if (!f.exists())
f.mkdirs();
String[] confs = new String[] {"HelloAtMac", "AnalysisAtMac", "TFAtMac", "HelloAtAli",
"AnalysisAtAli", "TFAtAli"};
// http://59.110.5.194:8080/
String[] urls =
new String[]{
String[] urls = new String[] {
"http://127.0.0.1:18000/SCIDE/CMManager?action=executeContract&&contractID=HelloAtMac&operation=get&arg=world",
"http://127.0.0.1:18000/SCIDE/CMManager?action=executeContract&&contractID=AppDataContractAtMac&operation=connectDBAndQuery&arg=%7B%22type%22%3A%22takeout%22%2C%22detail%22%3A%22overall%22%2C%22district%22%3A%22%E5%AF%86%E4%BA%91%22%7D&requestID=1576408475257_93",
"http://127.0.0.1:18000/SCIDE/CMManager?action=executeContract&&contractID=ImageMatcherAtMac&operation=testLocal&arg=%2Fimgs%2Fcup.jpg",
"http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=HelloAt59&operation=get&arg=world",
"http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=AppDataContractAt59&operation=connectDBAndQuery&arg=%7B%22type%22%3A%22takeout%22%2C%22detail%22%3A%22overall%22%2C%22district%22%3A%22%E5%AF%86%E4%BA%91%22%7D&requestID=1576408475257_93",
"http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=ImageMatcherAt59&operation=testLocal&arg=%2Fimgs%2Fcup.jpg"
};
"http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=ImageMatcherAt59&operation=testLocal&arg=%2Fimgs%2Fcup.jpg"};
// String[] urls = new String[] {
//
@ -54,7 +46,8 @@ public class ExecuteContractTest {
//
// "http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=AppDataContractAtMac&operation=connectDBAndQuery&arg=%7B%22type%22%3A%22takeout%22%2C%22detail%22%3A%22overall%22%2C%22district%22%3A%22%E5%AF%86%E4%BA%91%22%7D&requestID=1576408475257_93",
//
// "http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=ImageMatcherAtMac&operation=testLocal&arg=%2Fimgs%2Fcup.jpg" };
// "http://59.110.5.194:8080/SCIDE/CMManager?action=executeContract&&contractID=ImageMatcherAtMac&operation=testLocal&arg=%2Fimgs%2Fcup.jpg"
// };
String output = "./scripts/test/executeContract_cross.txt";
FileOutputStream fout = new FileOutputStream(output, true);
@ -82,10 +75,10 @@ public class ExecuteContractTest {
// System.out.println("http result:" + r.response);
if (r.get("response").toString().contains("busy"))
c.busy.incrementAndGet();
else c.success.incrementAndGet();
else
c.success.incrementAndGet();
JsonObject jo =
JsonParser.parseString(r.get("response").toString())
.getAsJsonObject();
JsonParser.parseString(r.get("response").toString()).getAsJsonObject();
int exeTime = jo.get("executeTime").getAsInt();
out.println(conf + "\t" + exeTime);
});

View File

@ -36,11 +36,9 @@ public class PermissionStubDocGenerator {
List<Method> methodList = Arrays.asList(methods);
methodList.sort(Comparator.comparing(Method::getName));
System.out.println("## " + stub.permission() + "util\n");
System.out.printf(
"可以使用@Permission(\"%s\")来引入%s对象。%n",
stub.permission(), stub.permission() + "util");
System.out.printf(
"```\n@Permission(\"%s\")\ncontract %sExample{\n ...\n}\n```\n%n",
System.out.printf("可以使用@Permission(\"%s\")来引入%s对象。%n", stub.permission(),
stub.permission() + "util");
System.out.printf("```\n@Permission(\"%s\")\ncontract %sExample{\n ...\n}\n```\n%n",
stub.permission(), stub.permission());
for (Method m : methods) {
@ -52,15 +50,14 @@ public class PermissionStubDocGenerator {
System.out.println("|---|---|---|");
int i = 1;
for (Parameter p : parameters) {
System.out.printf(
"| %d | %s | %s |%n",
i, p.getName(), p.getType().getCanonicalName());
System.out.printf("| %d | %s | %s |%n", i, p.getName(),
p.getType().getCanonicalName());
i++;
}
System.out.println("\n#### 使用示例\n");
System.out.println("```javascript");
System.out.println(
"var ret = " + stub.permission() + "Util." + m.getName() + "();");
System.out
.println("var ret = " + stub.permission() + "Util." + m.getName() + "();");
System.out.println("```");
}
}

View File

@ -13,26 +13,18 @@ public class StartContractTest {
public static void main(String[] args) throws Exception {
String testDir = "./scripts/test/";
File f = new File(testDir);
if (!f.exists()) f.mkdirs();
String[] confs =
new String[] {
"HelloAtMac",
"AnalysisAtMac",
"TFAtMac",
"HelloAtAli",
"AnalysisAtAli",
"TFAtAli"
};
if (!f.exists())
f.mkdirs();
String[] confs = new String[] {"HelloAtMac", "AnalysisAtMac", "TFAtMac", "HelloAtAli",
"AnalysisAtAli", "TFAtAli"};
// http://59.110.5.194:8080/
String[] urls =
new String[] {
String[] urls = new String[] {
"http://127.0.0.1:18000/SCIDE/CMManager?action=startContractBatched&fileList=[A2.yjs]",
"http://127.0.0.1:18000/SCIDE/CMManager?action=startContractBatched&fileList=[EleAnalysis.yjs]",
"http://127.0.0.1:18000/SCIDE/CMManager?action=startContract&owner=04266aa345154d8e224990e33dd47a3203dd927d8c4f6420f63fbab063d9ecb8c4d58751e81940f2092dc4609de22a1980f4d8df39730ba0ddd453e3fa3b7b2a6b&requestID=1576403183009&contractid=Hello&script=empty&path=/Tensorflow/imagematch.yjs&signature=815490e34a3c85bcfe54a740f91e8739cfd6e5daa6c73084de758705e754a43bb245c5c23ff9f46c2a99cc0d627d4cf1da583e20073e85455f6cb10c63bef86b",
"http://59.110.5.194:8080/SCIDE/CMManager?action=startContractBatched&fileList=[A2.yjs]",
"http://59.110.5.194:8080/SCIDE/CMManager?action=startContractBatched&fileList=[EleAnalysis.yjs]",
"http://59.110.5.194:8080/SCIDE/CMManager?action=startContract&owner=04266aa345154d8e224990e33dd47a3203dd927d8c4f6420f63fbab063d9ecb8c4d58751e81940f2092dc4609de22a1980f4d8df39730ba0ddd453e3fa3b7b2a6b&requestID=1576403183009&contractid=Hello&script=empty&path=/Tensorflow/imagematch.yjs&signature=815490e34a3c85bcfe54a740f91e8739cfd6e5daa6c73084de758705e754a43bb245c5c23ff9f46c2a99cc0d627d4cf1da583e20073e85455f6cb10c63bef86b"
};
"http://59.110.5.194:8080/SCIDE/CMManager?action=startContract&owner=04266aa345154d8e224990e33dd47a3203dd927d8c4f6420f63fbab063d9ecb8c4d58751e81940f2092dc4609de22a1980f4d8df39730ba0ddd453e3fa3b7b2a6b&requestID=1576403183009&contractid=Hello&script=empty&path=/Tensorflow/imagematch.yjs&signature=815490e34a3c85bcfe54a740f91e8739cfd6e5daa6c73084de758705e754a43bb245c5c23ff9f46c2a99cc0d627d4cf1da583e20073e85455f6cb10c63bef86b"};
String output = "./scripts/test/startContract.txt";
FileOutputStream fout = new FileOutputStream(output, true);

View File

@ -5,19 +5,8 @@ import com.google.gson.JsonParser;
import org.bdware.sc.http.HttpUtil;
import org.junit.Test;
import java.io.File;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URLEncoder;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class setMaskTest {
@Test
public void test1() {
@ -27,9 +16,11 @@ public class setMaskTest {
String operation = "hello1";
String maskInfo = "\"md5\"";
maskInfo = "";
String pubkey="04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
String pubkey =
"04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
System.out.println(url);
String sign="30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
String sign =
"30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
// url+="&contractID="+contractID+"&operation="+operation+"&maskInfo="+maskInfo+"&pubkey="+pubkey+"&signature="+sign;
url += "&contractID=" + contractID + "&operation=" + operation + "&maskInfo=" + maskInfo;
// url="http://127.0.0.1:21030/SCIDE/CMManager?action=setMask&&pubkey=04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7&signature=304602210082f33a4cdbf483428c701753eb08ca430f855d52df18547a367fe14ee638761f022100cab7fa189b03248b54f3cb679d7df6c2548f6743256cad6ee772c532bb34bdf9";
@ -41,6 +32,7 @@ public class setMaskTest {
String resp = HttpUtil.httpGet(url.toString()).get("response").toString();
System.out.println(resp);
}
@Test
public void testSetMock() {
@ -49,9 +41,11 @@ public class setMaskTest {
String operation = "hello1";
String mockInfo = "\"@string\"";
// String mockInfo="";
String pubkey="04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
String pubkey =
"04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
System.out.println(url);
String sign="30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
String sign =
"30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
// url+="&contractID="+contractID+"&operation="+operation+"&maskInfo="+maskInfo+"&pubkey="+pubkey+"&signature="+sign;
url += "&contractID=" + contractID + "&operation=" + operation + "&mockInfo=" + mockInfo;
// url="http://127.0.0.1:21030/SCIDE/CMManager?action=setMask&&pubkey=04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7&signature=304602210082f33a4cdbf483428c701753eb08ca430f855d52df18547a367fe14ee638761f022100cab7fa189b03248b54f3cb679d7df6c2548f6743256cad6ee772c532bb34bdf9";
@ -63,6 +57,7 @@ public class setMaskTest {
String resp = HttpUtil.httpGet(url.toString()).get("response").toString();
System.out.println(resp);
}
@Test
public void testGetMock() {
@ -70,9 +65,11 @@ public class setMaskTest {
String contractID = "Hello1";
String operation = "hello1";
String mockInfo = "@string";
String pubkey="04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
String pubkey =
"04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
System.out.println(url);
String sign="30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
String sign =
"30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
// url+="&contractID="+contractID+"&operation="+operation+"&maskInfo="+maskInfo+"&pubkey="+pubkey+"&signature="+sign;
url += "&contractID=" + contractID + "&operation=" + operation;
// url="http://127.0.0.1:21030/SCIDE/CMManager?action=setMask&&pubkey=04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7&signature=304602210082f33a4cdbf483428c701753eb08ca430f855d52df18547a367fe14ee638761f022100cab7fa189b03248b54f3cb679d7df6c2548f6743256cad6ee772c532bb34bdf9";
@ -84,6 +81,7 @@ public class setMaskTest {
String resp = HttpUtil.httpGet(url.toString()).get("response").toString();
System.out.println(resp);
}
@Test
public void test3() {
@ -91,9 +89,11 @@ public class setMaskTest {
String contractID = "Hello";
String operation = "hello3";
String maskInfo = "";
String pubkey="04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
String pubkey =
"04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7";
System.out.println(url);
String sign="30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
String sign =
"30440220138c8ae1956f6af19ddb24b9a0fe5cf9cc4f8ecd25537a8b5c4dcd5f30a4f985022026475279687ccdfb112cbcc307e573333d80f45386281def4df54b8b7532ed79";
// url+="&contractID="+contractID+"&operation="+operation+"&maskInfo="+maskInfo+"&pubkey="+pubkey+"&signature="+sign;
url += "&contractID=" + contractID + "&operation=" + operation + "&maskInfo=" + maskInfo;
// url="http://127.0.0.1:21030/SCIDE/CMManager?action=setMask&&pubkey=04c111cde30c257eb9d891653e2a25eb15df5239dd9882389e8daeffd4b16f65f30b30688b58d3e2eaf25ce5a529a601e4924581b55cedf78d94d17864b73c51a7&signature=304602210082f33a4cdbf483428c701753eb08ca430f855d52df18547a367fe14ee638761f022100cab7fa189b03248b54f3cb679d7df6c2548f6743256cad6ee772c532bb34bdf9";
@ -105,12 +105,14 @@ public class setMaskTest {
String resp = HttpUtil.httpGet(url.toString()).get("response").toString();
System.out.println(resp);
}
@Test
public void test2() {
String s1 = "{\"score\":\"md5\",\"name\":\"aes\"}";
JsonElement je1 = JsonParser.parseString("{\"score\":\"md5\",\"name\":\"aes\"}");
System.out.println(je1);
}
@Test
public void testHangUp() {
String url = "http://127.0.0.1:21030/SCIDE/CMManager?action=";
@ -123,6 +125,7 @@ public class setMaskTest {
// String operation="hello3";
}
@Test
public void testResume() {
String url = "http://127.0.0.1:21030/SCIDE/CMManager?action=";
@ -135,10 +138,12 @@ public class setMaskTest {
// String operation="hello3";
}
@Test
public void testMysql() {
String contractID = "AAA12BMySQL";
String url="http://127.0.0.1:21030/SCIDE/CMManager?action=getMask"+"&contractID="+contractID+"&requestID=1";
String url = "http://127.0.0.1:21030/SCIDE/CMManager?action=getMask" + "&contractID="
+ contractID + "&requestID=1";
System.out.println(url);
String resp = HttpUtil.httpGet(url.toString()).get("response").toString();

View File

@ -1,11 +1,11 @@
package org.bdware.sc.test.synctest;
import org.bdware.sc.trace.TraceRecordUtil;
public class PrintTraceRecords {
public static void main(String[] args) {
// String path = "/Users/zhangyixuan/Lab/new/BDContract/front-agent/BDWareProjectDir/trace/";
// String path =
// "/Users/zhangyixuan/Lab/new/BDContract/front-agent/BDWareProjectDir/trace/";
// String contractName = "Test";
// path += (contractName + "/");
//

View File

@ -1,11 +1,10 @@
package org.bdware.sc.test.synctest;
import org.bdware.sc.redo.TransRecordUtil;
import org.bdware.sc.trace.TraceRecordUtil;
public class PrintTransRecords {
public static void main(String[] args) {
// String path = "/Users/zhangyixuan/Lab/new/BDContract/front-agent/BDWareProjectDir/trans/";
// String path =
// "/Users/zhangyixuan/Lab/new/BDContract/front-agent/BDWareProjectDir/trans/";
// String contractName = "Test";
// path += (contractName + "/");
//

View File

@ -17,8 +17,10 @@ public class RedoRecordTest {
// c.setType(ContractType.Sole);
// String id = "169412582";
// c.setID(id);
// c.setScript(RedoRecoverTest.file2Str("/Users/zhangyixuan/Lab/BDWareHttp/BDWareProjectDir/public/" + name + ".yjs"));
// String key = "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
// c.setScript(RedoRecoverTest.file2Str("/Users/zhangyixuan/Lab/BDWareHttp/BDWareProjectDir/public/"
// + name + ".yjs"));
// String key =
// "{\"publicKey\":\"041d7b4818817736b3d64305675f04e9a00a12ce23c72e6740f83785edcffec6bae2c178fbc934f66d72e26f89a2e7a2c966dc3f0a8e415663c9b933af7a2e9ff8\",\"privateKey\":\"18505919022281880113072981827955639221458448578012075254857346196103069175443\"}";
// SM2KeyPair pair = SM2KeyPair.fromJson(key);
// c.doSignature(pair);
// System.out.println("<<<Start a contract>>> : " + cm1.startContractAndRedirect(c, null));
@ -30,7 +32,8 @@ public class RedoRecordTest {
// ContractRequest cor = new ContractRequest();
// cor.setContractID(contractName);
// cor.doSignature(pair);
// File file = new File("./cp/recoverTestFiles/affairs/" + contractName + "/" + argsFileName);
// File file = new File("./cp/recoverTestFiles/affairs/" + contractName + "/" +
// argsFileName);
// try {
// FileReader fr = new FileReader(file);
// BufferedReader br = new BufferedReader(fr);
@ -39,7 +42,8 @@ public class RedoRecordTest {
// String[] strs = s.split(" ");
// cor.setAction(strs[0]);
// cor.setArg(strs[1]);
// System.out.println("<<<execute the contract>> NO." + (++count) + " [Result]" + cm1.execute(cor));
// System.out.println("<<<execute the contract>> NO." + (++count) + " [Result]" +
// cm1.execute(cor));
// }
// } catch (IOException e1) {
// // TODO Auto-generated catch block
@ -51,7 +55,8 @@ public class RedoRecordTest {
//
// //记录最终状态
// cm1.saveTransRecords(contractName,"./cp/recoverTestFiles/trans/" + contractName);
// System.out.println("<<<transRecords>>> : \n" + cm1.engineTransRecords2String(contractName));
// System.out.println("<<<transRecords>>> : \n" +
// cm1.engineTransRecords2String(contractName));
//
//
// File mem = new File("./cp/recoverTestFiles/memory/" + contractName + ".txt");

Some files were not shown because too many files have changed in this diff Show More