Search in sources :

Example 6 with MethodCode

use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.

the class ProgramExecutorImpl method getEventConstructor.

private static Set<ProgramMethod> getEventConstructor(Map<String, ClassCode> classCodes) {
    Map<String, MethodCode> methodCodes = new LinkedHashMap<>();
    getEventClassCodes(classCodes).forEach(classCode -> {
        for (MethodCode methodCode : classCode.methods) {
            if (methodCode.isConstructor) {
                methodCodes.put(methodCode.fullName, methodCode);
            }
        }
    });
    return methodCodes.values().stream().filter(methodCode -> methodCode.isConstructor).map(methodCode -> {
        ProgramMethod method = new ProgramMethod();
        method.setName(methodCode.classCode.simpleName);
        method.setDesc(methodCode.normalDesc);
        method.setArgs(methodCode.args);
        method.setReturnArg(methodCode.returnArg);
        method.setView(methodCode.hasViewAnnotation());
        method.setPayable(methodCode.hasPayableAnnotation());
        method.setEvent(true);
        return method;
    }).collect(Collectors.toSet());
}
Also used : StateSource(org.ethereum.db.StateSource) java.util(java.util) VMFactory(io.nuls.contract.vm.VMFactory) Hex(org.spongycastle.util.encoders.Hex) LoggerFactory(org.slf4j.LoggerFactory) ByteArrayWrapper(org.ethereum.db.ByteArrayWrapper) StringUtils(org.apache.commons.lang3.StringUtils) VM(io.nuls.contract.vm.VM) Block(org.ethereum.core.Block) DefaultConfig(org.ethereum.config.DefaultConfig) SystemProperties(org.ethereum.config.SystemProperties) FastByteComparisons(org.ethereum.util.FastByteComparisons) BigInteger(java.math.BigInteger) MethodCode(io.nuls.contract.vm.code.MethodCode) ErrorException(io.nuls.contract.vm.exception.ErrorException) NativeAddress(io.nuls.contract.vm.natives.io.nuls.contract.sdk.NativeAddress) io.nuls.contract.vm.program(io.nuls.contract.vm.program) Logger(org.slf4j.Logger) DataWord(org.ethereum.vm.DataWord) Result(io.nuls.contract.vm.Result) DBService(io.nuls.db.service.DBService) Repository(org.ethereum.core.Repository) Collectors(java.util.stream.Collectors) VMContext(io.nuls.contract.util.VMContext) ObjectRef(io.nuls.contract.vm.ObjectRef) Source(org.ethereum.datasource.Source) Constants(io.nuls.contract.vm.util.Constants) AccountState(org.ethereum.core.AccountState) ClassCode(io.nuls.contract.vm.code.ClassCode) ClassCodeLoader(io.nuls.contract.vm.code.ClassCodeLoader) CommonConfig(org.ethereum.config.CommonConfig) LevelDbDataSource(org.ethereum.datasource.leveldb.LevelDbDataSource) ClassCodes(io.nuls.contract.vm.code.ClassCodes) RepositoryRoot(org.ethereum.db.RepositoryRoot) BlockHeaderDto(io.nuls.contract.entity.BlockHeaderDto) MethodCode(io.nuls.contract.vm.code.MethodCode)

Example 7 with MethodCode

use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.

the class ProgramExecutorImpl method getProgramMethodCodes.

public static List<MethodCode> getProgramMethodCodes(Map<String, ClassCode> classCodes) {
    Map<String, MethodCode> methodCodes = new LinkedHashMap<>();
    ClassCode contractClassCode = getContractClassCode(classCodes);
    if (contractClassCode != null) {
        contractMethods(methodCodes, classCodes, contractClassCode, false);
    }
    return methodCodes.values().stream().collect(Collectors.toList());
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) MethodCode(io.nuls.contract.vm.code.MethodCode)

Example 8 with MethodCode

use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.

the class NativeVM method initialize.

/**
 * native
 *
 * @see VM#initialize()
 */
private static Result initialize(MethodCode methodCode, MethodArgs methodArgs, Frame frame) {
    ObjectRef savedProps = (ObjectRef) frame.heap.getStatic(TYPE, "savedProps");
    ObjectRef key = frame.heap.newString("user.script");
    ObjectRef value = frame.heap.newString("");
    MethodCode methodCode1 = frame.methodArea.loadMethod("java/util/Properties", "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
    frame.vm.run(methodCode1, new Object[] { savedProps, key, value }, false);
    Result result = NativeMethod.result(methodCode, null, frame);
    return result;
}
Also used : ObjectRef(io.nuls.contract.vm.ObjectRef) MethodCode(io.nuls.contract.vm.code.MethodCode) Result(io.nuls.contract.vm.Result)

Example 9 with MethodCode

use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.

the class LoadJarTest method test.

@Test
public void test() {
    InputStream in = null;
    try {
        // in = new FileInputStream(LoadJarTest.class.getResource("/contract.jar").getFile());
        in = new FileInputStream(LoadJarTest.class.getResource("/nrc20.jar").getFile());
        byte[] contractCode = IOUtils.toByteArray(in);
        Map<String, ClassCode> codeMap = ClassCodeLoader.loadJarCache(contractCode);
        // for(String key : codeMap.keySet()) {
        // System.out.println("key: " + key);
        // }
        // io/nuls/vote/contract/event/AddItemEvent
        // io/nuls/vote/contract/func/BaseVote
        // io/nuls/vote/contract/VoteContract
        // io/nuls/contract/token/SimpleToken
        // ClassCode classCode = codeMap.get("io/nuls/vote/contract/event/AddItemEvent");
        // ClassCode classCode = codeMap.get("io/nuls/vote/contract/func/BaseVote");
        // ClassCode classCode = codeMap.get("io/nuls/vote/contract/VoteContract");
        ClassCode classCode = codeMap.get("io/nuls/contract/token/SimpleToken");
        List<MethodCode> methods = classCode.methods;
        for (MethodCode methodCode : methods) {
            System.out.println("Method Name: " + methodCode.fullName);
            InsnList instructions = methodCode.instructions;
            ListIterator<AbstractInsnNode> iterator = instructions.iterator();
            AbstractInsnNode node;
            while (iterator.hasNext()) {
                node = iterator.next();
                String desc = getDesc(node);
                int opcode = node.getOpcode();
                OpCode opCode = OpCode.valueOf(opcode);
                if (opCode != null) {
                    System.out.println(OpCode.valueOf(opcode) + " " + desc);
                }
            }
            System.out.println();
            System.out.println();
            System.out.println("////////////////////////////////////////////////////////////////////////");
            System.out.println("////////////////////////////////////////////////////////////////////////");
            System.out.println("////////////////////////////////////////////////////////////////////////");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) ClassCode(io.nuls.contract.vm.code.ClassCode) OpCode(io.nuls.contract.vm.OpCode) MethodCode(io.nuls.contract.vm.code.MethodCode) Test(org.junit.Test)

Example 10 with MethodCode

use of io.nuls.contract.vm.code.MethodCode in project nuls by nuls-io.

the class MethodArea method loadSuperMethod.

private MethodCode loadSuperMethod(String className, String methodName, String methodDesc) {
    ClassCode classCode = loadClass(className);
    MethodCode methodCode = classCode.getMethodCode(methodName, methodDesc);
    if (methodCode == null && classCode.superName != null) {
        methodCode = loadSuperMethod(classCode.superName, methodName, methodDesc);
    }
    return methodCode;
}
Also used : ClassCode(io.nuls.contract.vm.code.ClassCode) MethodCode(io.nuls.contract.vm.code.MethodCode)

Aggregations

MethodCode (io.nuls.contract.vm.code.MethodCode)15 ObjectRef (io.nuls.contract.vm.ObjectRef)7 Result (io.nuls.contract.vm.Result)7 ClassCode (io.nuls.contract.vm.code.ClassCode)7 MethodArgs (io.nuls.contract.vm.MethodArgs)4 MethodInsnNode (org.objectweb.asm.tree.MethodInsnNode)4 VM (io.nuls.contract.vm.VM)2 VariableType (io.nuls.contract.vm.code.VariableType)2 ErrorException (io.nuls.contract.vm.exception.ErrorException)2 AccountState (org.ethereum.core.AccountState)2 DataWord (org.ethereum.vm.DataWord)2 BlockHeaderDto (io.nuls.contract.entity.BlockHeaderDto)1 VMContext (io.nuls.contract.util.VMContext)1 OpCode (io.nuls.contract.vm.OpCode)1 VMFactory (io.nuls.contract.vm.VMFactory)1 ClassCodeLoader (io.nuls.contract.vm.code.ClassCodeLoader)1 ClassCodes (io.nuls.contract.vm.code.ClassCodes)1 NativeAddress (io.nuls.contract.vm.natives.io.nuls.contract.sdk.NativeAddress)1 io.nuls.contract.vm.program (io.nuls.contract.vm.program)1 Constants (io.nuls.contract.vm.util.Constants)1