Esempio n. 1
0
        public Task <ChainCodeInvokeResponse> ChaincodeInit(TxRequest request)
        {
            if (request.Data.Type != TxType.Invoke)
            {
                return(Task.FromResult(new ChainCodeInvokeResponse()
                {
                    StatusCode = StatusCode.BAD_TX_TYPE
                }));
            }

            var stub      = GetChaincodeStub(request);
            var chaincode = new Chaincode();

            chaincode.NameSpace = stub.GetChaincodeNameSpace();
            chaincode.Name      = stub.GetChaincodeName();
            chaincode.Version   = stub.GetChaincodeVersion();
            var ass           = _assemblyProvider.GetAssembly(stub.GetChannelId(), stub.GetChaincodeName(), stub.GetChaincodeNameSpace(), stub.GetChaincodeVersion());
            var classfullname = chaincode.NameSpace + "." + chaincode.Name;
            //必须使用 名称空间+类名称
            var type = ass.GetType(classfullname);
            //方法的名称
            MethodInfo method = type.GetMethod("Init");
            //必须使用名称空间+类名称
            var obj = ass.CreateInstance(classfullname);
            var rs  = method.Invoke(obj, new object[] { stub });

            if (rs != null)
            {
                return(Task.FromResult((ChainCodeInvokeResponse)rs));
            }
            return(null);
        }