mirror of
https://gitee.com/BDWare/cp.git
synced 2025-01-10 01:44:08 +00:00
feat: support onCreateParams
This commit is contained in:
parent
bac80bbf31
commit
cf097ce7fd
@ -6,6 +6,7 @@ plugins {
|
||||
|
||||
mainClassName = 'org.bdware.sc.ContractProcess'
|
||||
repositories {
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
}
|
||||
sourceSets {
|
||||
@ -39,7 +40,8 @@ dependencies {
|
||||
implementation 'org.jsoup:jsoup:1.14.2'
|
||||
implementation 'com.sun.mail:javax.mail:1.6.2'
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
|
||||
implementation 'org.bdware.doip:doip-sdk:1.1.0'
|
||||
implementation 'org.bdware.bdcontract:sdk-java:1.0.0'
|
||||
implementation 'org.bdware.doip:doip-audit-tool:0.9.3'
|
||||
api fileTree(dir: 'lib', include: '*.jar')
|
||||
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
|
@ -1,8 +1,10 @@
|
||||
package org.bdware.sc.debugger;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import org.apache.log4j.LogManager;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.bdware.client.SmartContractClient;
|
||||
import org.bdware.sc.ContractProcess;
|
||||
import org.bdware.sc.bean.Contract;
|
||||
import org.bdware.sc.bean.ContractExecType;
|
||||
@ -11,6 +13,7 @@ import org.bdware.sc.get.GetMessage;
|
||||
import org.bdware.sc.http.HttpUtil;
|
||||
import org.bdware.sc.util.FileUtil;
|
||||
import org.bdware.sc.util.JsonUtil;
|
||||
import org.zz.gmhelper.SM2KeyPair;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -21,6 +24,21 @@ public class DebugMain {
|
||||
String content = FileUtil.getFileContent("./debugconf.json");
|
||||
DebugConfig config = JsonUtil.fromJson(content, DebugConfig.class);
|
||||
inject(config);
|
||||
String keyPairStr = "{\"publicKey\":\"%s\",\"privateKey\":\"%s\"}";
|
||||
SM2KeyPair pair = SM2KeyPair.fromJson(String.format(keyPairStr, config.pubKey, config.privKey));
|
||||
String uriFormat = "ws://%s/SCIDE/SCExecutor";
|
||||
if (config.killContract != null && config.killContract.length() > 0) {
|
||||
SmartContractClient client = new SmartContractClient(String.format(uriFormat, config.agentHttpAddr), pair);
|
||||
client.waitForConnect();
|
||||
client.login();
|
||||
try {
|
||||
Thread.sleep(2000);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
client.sendMsg("{\"action\":\"killContractProcess\",\"contractName\":\"" + config.killContract + "\"}");
|
||||
}
|
||||
config.contract.setCreateParam(config.createParam);
|
||||
ContractProcess.main(new String[]{"-port=" + config.port, "-cmi=" + config.cmi, "-disablePID"});
|
||||
ResultCallback printCallback
|
||||
= new ResultCallback() {
|
||||
@ -31,14 +49,16 @@ public class DebugMain {
|
||||
};
|
||||
ContractProcess.instance.handler.setDBInfo(wrap("", config.dbPath), printCallback);
|
||||
ContractProcess.instance.handler.registerMangerPort(wrap("", Integer.valueOf(config.cPort)), printCallback);
|
||||
|
||||
ContractProcess.instance.handler.setContractBundle(wrap("", config.contract), printCallback);
|
||||
String urlFormat = ("http://%s/SCIDE/SCManager?action=reconnectPort&owner=%s&port=%d");
|
||||
|
||||
String url = String.format(urlFormat, config.agentHttpAddr,
|
||||
config.pubKey, ContractProcess.instance.server.mainPort.get());
|
||||
Map<String, Object> resp = HttpUtil.httpGet(url);
|
||||
|
||||
String data = (String) resp.get("response");
|
||||
LOGGER.info(JsonUtil.toPrettyJson(JsonUtil.parseStringAsJsonObject(data)));
|
||||
// LOGGER.info(JsonUtil.toPrettyJson(JsonUtil.parseStringAsJsonObject(data)));
|
||||
LOGGER.info("start done!");
|
||||
}
|
||||
|
||||
@ -77,12 +97,13 @@ public class DebugMain {
|
||||
}
|
||||
|
||||
static class DebugConfig {
|
||||
String killContract;
|
||||
public JsonElement createParam;
|
||||
String script;
|
||||
String agentHttpAddr;
|
||||
String pubKey;
|
||||
String privKey;
|
||||
//AutoAppend
|
||||
|
||||
int port;
|
||||
String cmi;
|
||||
String dbPath;
|
||||
|
@ -1,10 +1,6 @@
|
||||
package org.bdware.sc;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
import com.google.gson.*;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.google.gson.stream.MalformedJsonException;
|
||||
import org.apache.logging.log4j.Level;
|
||||
@ -719,10 +715,14 @@ public class ContractProcess {
|
||||
JavaScriptEntry.isDebug = contract.isDebug();
|
||||
ContractRequest onCreate = new ContractRequest();
|
||||
onCreate.setAction("onCreate");
|
||||
if (arg == null)
|
||||
onCreate.setArg("null");
|
||||
if (arg == null) {
|
||||
if (engine != null && engine.getManifest() != null && engine.getManifest().createParam != null)
|
||||
arg = engine.getManifest().createParam;
|
||||
else
|
||||
arg = new JsonPrimitive("");
|
||||
}
|
||||
onCreate.setArg(arg);
|
||||
LOGGER.info("invoke onCreate, param:" + onCreate.getArg().toString());
|
||||
onCreate.setRequester(contract.getOwner());
|
||||
if (contract.getDoipFlag() && null != contract.getDOI() && !contract.getDOI().isEmpty()) {
|
||||
onCreate.setRequesterDOI(contract.getDOI());
|
||||
@ -760,7 +760,8 @@ public class ContractProcess {
|
||||
"getFunction:" + (System.currentTimeMillis() - start) + " " + funNode.functionName);
|
||||
long start1 = System.currentTimeMillis();
|
||||
funNode.setIsExport(true);
|
||||
engine.executeContract(onRecover);
|
||||
ContractResult result = engine.executeContract(onRecover);
|
||||
LOGGER.info("invoke onCreate, result:" + new Gson().toJson(result));
|
||||
LOGGER.debug("executeOnCreate:" + (System.currentTimeMillis() - start1));
|
||||
start1 = System.currentTimeMillis();
|
||||
funNode.setIsExport(false);
|
||||
|
@ -1,11 +1,14 @@
|
||||
package org.bdware.sc;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.bdware.sc.util.FileUtil;
|
||||
import org.zz.gmhelper.SM2KeyPair;
|
||||
import org.zz.gmhelper.SM2Util;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
@ -24,13 +27,36 @@ public class SM2Helper {
|
||||
fout = new FileOutputStream("./manager.key");
|
||||
fout.write(pair.getPublicKeyStr().getBytes(StandardCharsets.UTF_8));
|
||||
fout.close();
|
||||
} else if (args.length > 0 && args[0].equals("generateCMConfig")) {
|
||||
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();
|
||||
for (String key : jo.keySet()) {
|
||||
content = content.replaceAll(key, jo.get(key).getAsString());
|
||||
}
|
||||
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() + "");
|
||||
FileOutputStream fout = new FileOutputStream("./cmconfig.json");
|
||||
fout.write(content.getBytes(StandardCharsets.UTF_8));
|
||||
fout.close();
|
||||
} else
|
||||
System.out.println(pair.toJson());
|
||||
printHelp();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static void printHelp() {
|
||||
String usage = "Usage:\n";
|
||||
usage += "java -cp cp/libs/*:cp/yjs.jar org.bdware.sc.SM2Helper generateCMConfig\n";
|
||||
usage += "java -cp cp/libs/*:cp/yjs.jar org.bdware.sc.SM2Helper generateKeyToFile";
|
||||
System.out.println(usage);
|
||||
}
|
||||
|
||||
private static void backupFile(File file) {
|
||||
if (!file.exists()) return;
|
||||
File backup = null;
|
||||
|
@ -3,6 +3,8 @@ package org.bdware.sc.boundry.utils;
|
||||
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.codec.digitalObject.DigitalObject;
|
||||
import org.bdware.doip.codec.digitalObject.Element;
|
||||
import org.bdware.doip.codec.doipMessage.DoipMessage;
|
||||
@ -11,10 +13,15 @@ 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.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;
|
||||
@ -140,4 +147,86 @@ public class DOIPUtil {
|
||||
.create();
|
||||
return convertDoipMsgToString(syncGetMessage(msg));
|
||||
}
|
||||
|
||||
public static class IRPClientWrapper {
|
||||
public AuditIrpClient impl;
|
||||
|
||||
public IRPClientWrapper(EndpointConfig config) {
|
||||
|
||||
impl = new AuditIrpClient(config);
|
||||
|
||||
}
|
||||
|
||||
public Object reconnect() {
|
||||
JsonObject jo2 = new JsonObject();
|
||||
try {
|
||||
impl.reconnect();
|
||||
jo2.addProperty("code", 1);
|
||||
jo2.addProperty("msg", "success");
|
||||
} catch (Exception e) {
|
||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||
e.printStackTrace(new PrintStream(bo));
|
||||
jo2.addProperty("code", 0);
|
||||
jo2.addProperty("msg", bo.toString());
|
||||
|
||||
}
|
||||
return JSONTool.convertJsonElementToMirror(jo2);
|
||||
}
|
||||
|
||||
public Object resolve(String doId) {
|
||||
StateInfoBase jo = null;
|
||||
try {
|
||||
jo = impl.resolve(doId);
|
||||
} catch (Exception e) {
|
||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||
e.printStackTrace(new PrintStream(bo));
|
||||
JsonObject jo2 = new JsonObject();
|
||||
jo2.addProperty("code", 0);
|
||||
jo2.addProperty("msg", bo.toString());
|
||||
return JSONTool.convertJsonElementToMirror(jo2);
|
||||
}
|
||||
return JSONTool.convertJsonElementToMirror(jo.getHandleValues());
|
||||
}
|
||||
|
||||
public Object register(ScriptObjectMirror obj) {
|
||||
JsonObject jo = JSONTool.convertMirrorToJson(obj).getAsJsonObject();
|
||||
StateInfoBase base = new StateInfoBase();
|
||||
jo.addProperty("repoId", impl.getEndpointInfo().getDoId());
|
||||
base.setHandleValues(jo);
|
||||
String ret = null;
|
||||
JsonObject jo2 = new JsonObject();
|
||||
try {
|
||||
ret = impl.register(base);
|
||||
if (ret != null) {
|
||||
jo2.addProperty("code", 1);
|
||||
jo2.addProperty("doId", ret.toString());
|
||||
} else {
|
||||
jo2.addProperty("code", 0);
|
||||
jo2.addProperty("msg", "connection failed!");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ByteArrayOutputStream bo = new ByteArrayOutputStream();
|
||||
e.printStackTrace(new PrintStream(bo));
|
||||
jo2.addProperty("code", 0);
|
||||
jo2.addProperty("msg", bo.toString());
|
||||
return JSONTool.convertJsonElementToMirror(jo2);
|
||||
}
|
||||
return JSONTool.convertJsonElementToMirror(jo2);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static IRPClientWrapper createIrpClient(String uri) {
|
||||
return createIrpClient(uri, null, null, null);
|
||||
}
|
||||
|
||||
public static IRPClientWrapper createIrpClient(String uri, String pubkey, String privateKey, String repoName) {
|
||||
EndpointConfig config = new EndpointConfig();
|
||||
config.routerURI = uri;
|
||||
config.repoName = repoName;
|
||||
config.privateKey = privateKey;
|
||||
config.publicKey = pubkey;
|
||||
return new IRPClientWrapper(config);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ package org.bdware.sc.boundry.utils;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.bdware.bdledger.api.grpc.Client;
|
||||
import org.bdware.bdledger.api.grpc.pb.CommonProto.Transaction;
|
||||
import org.bdware.bdledger.api.grpc.pb.CommonProto.TransactionType;
|
||||
@ -42,7 +44,10 @@ public class LedgerUtil {
|
||||
return new Client((String) str.get("ip"), Integer.parseInt(str.get("port").toString()));
|
||||
}
|
||||
|
||||
static Logger LOGGER = LogManager.getLogger(LedgerUtil.class);
|
||||
|
||||
public static ScriptObject queryByHash(Client c, ScriptObjectMirror str) {
|
||||
LOGGER.info("TID:" + Thread.currentThread().getId());
|
||||
String ledger = str.get("ledger").toString();
|
||||
String hash = str.get("hash").toString();
|
||||
JO ret = new JO(PropertyMap.newMap());
|
||||
@ -52,6 +57,7 @@ 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);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -37,12 +37,11 @@ public class RocksDBUtil {
|
||||
options.setCreateIfMissing(true);
|
||||
File parent = new File("./ContractDB/" + ContractProcess.getContractDir());
|
||||
File dir = new File(parent, path);
|
||||
LOGGER.info("init RocksDB in " + dir.getAbsolutePath());
|
||||
//LOGGER.info("init RocksDB in " + dir.getAbsolutePath());
|
||||
if (!dir.exists()) {
|
||||
LOGGER.trace("create directory " + dir.getAbsolutePath() + ": " + dir.mkdirs());
|
||||
LOGGER.info("create directory " + dir.getAbsolutePath() + ": " + dir.mkdirs());
|
||||
}
|
||||
File lockFile = new File(dir, "LOCK");
|
||||
LOGGER.trace("delete file" + lockFile.getAbsolutePath() + ": " + lockFile.delete());
|
||||
if (readOnly) {
|
||||
rocksDB = RocksDB.openReadOnly(options, dir.getAbsolutePath());
|
||||
} else {
|
||||
|
@ -137,7 +137,6 @@ public class YJSCompiler {
|
||||
}
|
||||
ContractNode cn = compile(zf.getInputStream(entry), str);
|
||||
czb.put(str, cn);
|
||||
System.out.println("----" + str);
|
||||
for (ImportNode in : cn.getImports()) {
|
||||
todo.add(in.getPath());
|
||||
}
|
||||
@ -179,17 +178,14 @@ public class YJSCompiler {
|
||||
ProgramContext tree = parser.program();
|
||||
// 应该是antlr4访问器进行遍历语法树
|
||||
ContractReader reader = new ContractReader(fileName);
|
||||
System.out.println("遍历语法树");
|
||||
contract = reader.visitProgram(tree);
|
||||
// 遍历完 获取 contract 里的 yjs type
|
||||
System.out.println(contract.getYjsType());
|
||||
contract.initPlainText(cts);
|
||||
handleAnnotation(contract);//处理注解
|
||||
return contract;
|
||||
}
|
||||
|
||||
private void handleAnnotation(ContractNode contractNode) {
|
||||
System.out.println("handleAnnotation");
|
||||
for (AnnotationNode node : contract.annotations) {
|
||||
AnnotationProcessor processor = findProcessor(node);
|
||||
if (processor != null) {
|
||||
@ -200,8 +196,6 @@ public class YJSCompiler {
|
||||
List<AnnotationNode> annos = functionNode.annotations;//函数里的annotation
|
||||
if (annos != null)
|
||||
for (AnnotationNode anno : annos) {
|
||||
System.out.println(anno.getType());//打印类型和参数
|
||||
System.out.println(anno.getArgs());
|
||||
AnnotationProcessor processor = findProcessor(anno);
|
||||
if (processor != null)
|
||||
processor.processFunction(anno, contractNode, functionNode);
|
||||
|
@ -65,6 +65,7 @@ public class DesktopEngine extends JSEngine {
|
||||
// private String traceDir;
|
||||
private ContractProcess.Logger tracePS = null;
|
||||
private Contract contract;
|
||||
private ContractManifest manifest;
|
||||
|
||||
public DesktopEngine() {
|
||||
startEngine();
|
||||
@ -248,7 +249,6 @@ public class DesktopEngine extends JSEngine {
|
||||
@Override
|
||||
public ContractResult loadContract(
|
||||
Contract contract, ContractNode contractNode, boolean isInsnLimit) {
|
||||
LOGGER.info("loadContract isInsnLimit:" + isInsnLimit);
|
||||
cn = contractNode;
|
||||
engine.getContext()
|
||||
.setAttribute(ScriptEngine.FILENAME, ScriptFileName, ScriptContext.ENGINE_SCOPE);
|
||||
@ -427,7 +427,7 @@ public class DesktopEngine extends JSEngine {
|
||||
|
||||
|
||||
@Override
|
||||
public synchronized ContractResult executeContract(ContractRequest input) {
|
||||
public ContractResult executeContract(ContractRequest input) {
|
||||
Global oldGlobal = Context.getGlobal();
|
||||
boolean globalChanged = (oldGlobal != global);
|
||||
if (globalChanged) {
|
||||
@ -481,34 +481,18 @@ public class DesktopEngine extends JSEngine {
|
||||
ppCountMap);
|
||||
this.redirectTracePS(ppc);
|
||||
}
|
||||
Invocable cal = engine;
|
||||
if (fun.isExport() ||
|
||||
// if the function has been registered as event handler
|
||||
(fun.isHandler() &&
|
||||
null != input.getRequester() &&
|
||||
input.getRequester().startsWith("event"))) {
|
||||
Object ret = null;
|
||||
// long start = System.currentTimeMillis();
|
||||
|
||||
for (AnnotationHook handler : fun.beforeExecutionAnnotations()) {
|
||||
ret = handler.handle(input, this, ret);
|
||||
Object ret;
|
||||
if (fun.isView()) {
|
||||
ret = executeWithoutLock(fun, input);
|
||||
} else {
|
||||
synchronized (this) {
|
||||
ret = executeWithoutLock(fun, input);
|
||||
}
|
||||
// actually invoke!
|
||||
if (ret == null) {
|
||||
ret =
|
||||
cal.invokeFunction(
|
||||
input.getAction(),
|
||||
(fun.isHandler()
|
||||
? JsonUtil.fromJson(input.getArg(), Event.class)
|
||||
: JSONTool.convertJsonElementToMirror(input.getArg())),
|
||||
input.getRequester(),
|
||||
input.getRequesterDOI());
|
||||
}
|
||||
for (AnnotationHook handler : fun.afterExecutionAnnotations()) {
|
||||
//Mask在after裏面
|
||||
//System.out.println("afterHook"+contract.Mask);
|
||||
|
||||
ret = handler.handle(input, this, ret);
|
||||
}
|
||||
//System.out.println("[DesktopEngine MaskConfig]"+ContractProcess.instance.getProjectConfig().getMaskConfig().config.toString());
|
||||
ContractResult contractRes = new ContractResult(Status.Success, (JsonElement) ret);
|
||||
@ -558,13 +542,12 @@ public class DesktopEngine extends JSEngine {
|
||||
new JsonPrimitive("Action " + input.getAction() + " is not exported!"));
|
||||
}
|
||||
|
||||
}catch (ScriptReturnException e){
|
||||
} catch (ScriptReturnException e) {
|
||||
e.printStackTrace();
|
||||
return new ContractResult(
|
||||
Status.Exception,
|
||||
e.message);
|
||||
}
|
||||
catch (ScriptException e) {
|
||||
} catch (ScriptException e) {
|
||||
Throwable cause = e.getCause();
|
||||
e.printStackTrace();
|
||||
return new ContractResult(
|
||||
@ -592,6 +575,33 @@ public class DesktopEngine extends JSEngine {
|
||||
|
||||
}
|
||||
|
||||
private Object executeWithoutLock(FunctionNode fun, ContractRequest input) throws ScriptException, NoSuchMethodException {
|
||||
Object ret = null;
|
||||
// long start = System.currentTimeMillis();
|
||||
|
||||
for (AnnotationHook handler : fun.beforeExecutionAnnotations()) {
|
||||
ret = handler.handle(input, this, ret);
|
||||
}
|
||||
// actually invoke!
|
||||
if (ret == null) {
|
||||
ret =
|
||||
engine.invokeFunction(
|
||||
input.getAction(),
|
||||
(fun.isHandler()
|
||||
? JsonUtil.fromJson(input.getArg(), Event.class)
|
||||
: JSONTool.convertJsonElementToMirror(input.getArg())),
|
||||
input.getRequester(),
|
||||
input.getRequesterDOI());
|
||||
}
|
||||
for (AnnotationHook handler : fun.afterExecutionAnnotations()) {
|
||||
//Mask在after裏面
|
||||
//System.out.println("afterHook"+contract.Mask);
|
||||
|
||||
ret = handler.handle(input, this, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private String extractException(String msg, List<String> stack) {
|
||||
int endIndex = Math.min(msg.indexOf("in"), msg.length());
|
||||
StringBuilder msb = new StringBuilder(msg.substring(0, endIndex));
|
||||
@ -872,9 +882,6 @@ public class DesktopEngine extends JSEngine {
|
||||
try {
|
||||
assert null != loader;
|
||||
if (entry.getName().endsWith(".jar")) {
|
||||
System.out.println("[DesktopEngine] loadJar:" + entry.getName());
|
||||
System.out.println("[DesktopEngine] classLoader:" + getClassLoad());
|
||||
|
||||
loader.loadJar(zf.getInputStream(entry), entry.getName().replaceAll(".*/", ""));
|
||||
}
|
||||
if (entry.getName().endsWith(".so") || entry.getName().endsWith(".so.1")) {
|
||||
@ -911,8 +918,12 @@ public class DesktopEngine extends JSEngine {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void initManifest(ContractManifest manifest) {
|
||||
// TODO Auto-generated method stub
|
||||
public void setManifest(ContractManifest manifest) {
|
||||
this.manifest = manifest;
|
||||
}
|
||||
|
||||
public ContractManifest getManifest() {
|
||||
return this.manifest;
|
||||
}
|
||||
|
||||
public ContractProcess.Logger getTracePS() {
|
||||
|
@ -84,7 +84,7 @@ public class YJSClassLoader extends URLClassLoader {
|
||||
|
||||
private void addDirToPath(String s) {
|
||||
try {
|
||||
System.out.println("[YJSClassloader] addtopath:" + s);
|
||||
// System.out.println("[YJSClassloader] addtopath:" + s);
|
||||
Field field = ClassLoader.class.getDeclaredField("sys_paths");
|
||||
field.setAccessible(true);
|
||||
String[] path = (String[]) field.get(null);
|
||||
|
@ -110,7 +110,7 @@ public class ContractHandler extends MsgHandler implements Runnable {
|
||||
cb.onResult(cs.setContract(JsonUtil.fromJson(msg.arg, Contract.class)));
|
||||
}
|
||||
|
||||
@Description(value = "execute contract")
|
||||
@Description(value = "execute contract",isAsync = true)
|
||||
public void executeContract(GetMessage msg, ResultCallback cb) {
|
||||
cb.onResult(cs.executeContract(msg.arg));
|
||||
}
|
||||
|
@ -1,12 +1,54 @@
|
||||
package org.bdware.sc.boundry.utils.test;
|
||||
|
||||
import org.bdware.bdledger.api.grpc.Client;
|
||||
import org.bdware.bdledger.api.grpc.pb.CommonProto;
|
||||
import org.bdware.bdledger.api.grpc.pb.LedgerProto;
|
||||
import org.bdware.sc.conn.ByteUtil;
|
||||
import org.bdware.sc.util.HashUtil;
|
||||
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class LedgerUtilTest {
|
||||
public static void main(String[] arg) {
|
||||
Client c = new Client("39.108.56.240", 18091);
|
||||
// c.sendTransactionSync("test", TransactionType.RECORD, arg2, arg3, arg4)
|
||||
String ip = "39.104.202.92";
|
||||
ip = "39.104.205.122";
|
||||
ip = "39.104.202.92";
|
||||
Client c = new Client(ip, 18021);
|
||||
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));
|
||||
System.out.println("=====" + HashUtil.byteArray2Str(ret.getHash().toByteArray()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transToB64() {
|
||||
String str = "1dc589951b10840e097c793764f8ad63ff577ef7";
|
||||
str = "3c011ab510c5756db9aab1f2ac1a14742b85200f";
|
||||
str ="867020d3463126c0f5ea41967100865770ca1873";
|
||||
str = "3f40a6afcd4e7c7db1ee8a3cf54074be270c6847";
|
||||
str = "ab7d541b4f320f77fe424082d79d1f4ca2a40f84";
|
||||
str = "246f5527c3182d162ea8f1c3f5e0be05d9269517";
|
||||
str = "d148e40be1078c707891ba12ed270978d81dad30";
|
||||
str = "dbda443da8a6da3b4703b06250f07f7df3e04d72";
|
||||
str = "d16da370021447c1c1136f97f9975069b1f22ddb";
|
||||
str = "448b314de358384a55b9c5d2eae7596cff4e3587";
|
||||
str ="a114aa22365c2d61ee1c242c755d82c035783e41";
|
||||
byte[] bytes = ByteUtils.fromHexString(str);
|
||||
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">
|
||||
// System.out.println(new String(data));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user