| @@ -19,32 +19,7 @@ import com.jd.blockchain.crypto.PubKey; | |||
| import com.jd.blockchain.crypto.service.classic.ClassicAlgorithm; | |||
| import com.jd.blockchain.crypto.service.classic.ClassicCryptoService; | |||
| import com.jd.blockchain.crypto.service.sm.SMCryptoService; | |||
| import com.jd.blockchain.ledger.AccountHeader; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.BlockchainKeyGenerator; | |||
| import com.jd.blockchain.ledger.BlockchainKeypair; | |||
| import com.jd.blockchain.ledger.ContractCodeDeployOperation; | |||
| import com.jd.blockchain.ledger.ContractEventSendOperation; | |||
| import com.jd.blockchain.ledger.DataAccountKVSetOperation; | |||
| import com.jd.blockchain.ledger.DataAccountRegisterOperation; | |||
| import com.jd.blockchain.ledger.EndpointRequest; | |||
| import com.jd.blockchain.ledger.KVDataEntry; | |||
| import com.jd.blockchain.ledger.KVInfoVO; | |||
| import com.jd.blockchain.ledger.LedgerBlock; | |||
| import com.jd.blockchain.ledger.LedgerInfo; | |||
| import com.jd.blockchain.ledger.LedgerMetadata; | |||
| import com.jd.blockchain.ledger.LedgerTransaction; | |||
| import com.jd.blockchain.ledger.NodeRequest; | |||
| import com.jd.blockchain.ledger.Operation; | |||
| import com.jd.blockchain.ledger.ParticipantNode; | |||
| import com.jd.blockchain.ledger.TransactionContent; | |||
| import com.jd.blockchain.ledger.TransactionContentBody; | |||
| import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.ledger.TransactionRequestBuilder; | |||
| import com.jd.blockchain.ledger.TransactionResponse; | |||
| import com.jd.blockchain.ledger.TransactionState; | |||
| import com.jd.blockchain.ledger.UserInfo; | |||
| import com.jd.blockchain.ledger.UserRegisterOperation; | |||
| import com.jd.blockchain.ledger.*; | |||
| import com.jd.blockchain.ledger.core.CryptoConfig; | |||
| import com.jd.blockchain.ledger.core.LedgerDataSet; | |||
| import com.jd.blockchain.ledger.core.LedgerEditor; | |||
| @@ -427,15 +402,16 @@ public class MockerNodeContext implements BlockchainQueryService { | |||
| return reqBuilder.buildRequest(); | |||
| } | |||
| public void txProcess(TransactionRequest txRequest) { | |||
| public OperationResult[] txProcess(TransactionRequest txRequest) { | |||
| LedgerEditor newEditor = ledgerRepository.createNextBlock(); | |||
| LedgerBlock latestBlock = ledgerRepository.getLatestBlock(); | |||
| LedgerDataSet previousDataSet = ledgerRepository.getDataSet(latestBlock); | |||
| TransactionBatchProcessor txProc = new TransactionBatchProcessor(newEditor, previousDataSet, opHandler, | |||
| ledgerManager); | |||
| txProc.schedule(txRequest); | |||
| TransactionResponse txResp = txProc.schedule(txRequest); | |||
| TransactionBatchResultHandle handle = txProc.prepare(); | |||
| handle.commit(); | |||
| return txResp.getOperationResults(); | |||
| } | |||
| private LedgerRepository registerLedger(HashDigest ledgerHash, DBConnectionConfig dbConnConf) { | |||
| @@ -10,5 +10,5 @@ public interface WriteContract { | |||
| void print(String name); | |||
| @ContractEvent(name = "writeKv") | |||
| void writeKv(String address, String key, String value); | |||
| String writeKv(String address, String key, String value); | |||
| } | |||
| @@ -15,8 +15,9 @@ public class WriteContractImpl implements EventProcessingAwire, WriteContract { | |||
| } | |||
| @Override | |||
| public void writeKv(String address, String key, String value) { | |||
| public String writeKv(String address, String key, String value) { | |||
| eventContext.getLedger().dataAccount(address).setText(key, value, -1); | |||
| return String.format("address = %s, key = %s, value = %s, version = %s", address, key, value, 0); | |||
| } | |||
| @Override | |||
| @@ -1,9 +1,6 @@ | |||
| package com.jd.blockchain.mocker.handler; | |||
| import com.jd.blockchain.contract.ContractEventContext; | |||
| import com.jd.blockchain.contract.ContractException; | |||
| import com.jd.blockchain.contract.EventProcessingAwire; | |||
| import com.jd.blockchain.contract.LedgerContext; | |||
| import com.jd.blockchain.contract.*; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.ContractEventSendOperation; | |||
| @@ -38,6 +35,7 @@ public class MockerContractExeHandle implements OperationHandle { | |||
| ExecutorProxy executorProxy = executorProxyMap.get(txHash); | |||
| Object result = null; | |||
| if (executorProxy != null) { | |||
| LedgerQueryService queryService = new LedgerQueryService(ledgerManager); | |||
| ContractLedgerContext ledgerContext = new ContractLedgerContext(queryService, opHandleContext); | |||
| @@ -45,24 +43,31 @@ public class MockerContractExeHandle implements OperationHandle { | |||
| MockerContractEventContext contractEventContext = new MockerContractEventContext(ledgerHash, | |||
| contractOP.getEvent(), requestContext.getRequest(), ledgerContext); | |||
| EventProcessingAwire eventProcessingAwire = (EventProcessingAwire) executorProxy.getInstance(); | |||
| try { | |||
| // | |||
| // Before处理过程 | |||
| eventProcessingAwire.beforeEvent(contractEventContext); | |||
| executorProxy.invoke(); | |||
| Object instance = executorProxy.getInstance(); | |||
| EventProcessingAwire awire = null; | |||
| if (instance instanceof EventProcessingAwire) { | |||
| awire = (EventProcessingAwire) instance; | |||
| awire.beforeEvent(contractEventContext); | |||
| } | |||
| // After处理过程 | |||
| eventProcessingAwire.postEvent(contractEventContext, null); | |||
| try { | |||
| result = executorProxy.invoke(); | |||
| if (awire != null) { | |||
| // After处理过程 | |||
| awire.postEvent(contractEventContext, null); | |||
| } | |||
| } catch (Exception e) { | |||
| eventProcessingAwire.postEvent(contractEventContext, new ContractException(e.getMessage())); | |||
| if (awire != null) { | |||
| awire.postEvent(contractEventContext, new ContractException(e.getMessage())); | |||
| } | |||
| } finally { | |||
| removeExecutorProxy(txHash); | |||
| } | |||
| } | |||
| // No return value; | |||
| return null; | |||
| return ContractSerializeUtils.serialize(result); | |||
| } | |||
| @Override | |||
| @@ -4,6 +4,8 @@ import com.jd.blockchain.contract.Contract; | |||
| import com.jd.blockchain.contract.ContractEvent; | |||
| import com.jd.blockchain.crypto.HashDigest; | |||
| import com.jd.blockchain.ledger.BlockchainIdentity; | |||
| import com.jd.blockchain.ledger.OperationResult; | |||
| import com.jd.blockchain.ledger.OperationResultData; | |||
| import com.jd.blockchain.ledger.TransactionRequest; | |||
| import com.jd.blockchain.mocker.MockerNodeContext; | |||
| import com.jd.blockchain.mocker.handler.MockerContractExeHandle; | |||
| @@ -68,9 +70,14 @@ public class ContractProxy<T> implements InvocationHandler { | |||
| operationHandle.registerExecutorProxy(txHash, new ExecutorProxy(instance, method, args)); | |||
| // 提交该请求至整个区块链系统 | |||
| mockerNodeContext.txProcess(txRequest); | |||
| // 不处理返回值 | |||
| return null; | |||
| OperationResult[] operationResults = mockerNodeContext.txProcess(txRequest); | |||
| if (operationResults == null || operationResults.length == 0) { | |||
| return null; | |||
| } | |||
| OperationResult opResult = operationResults[0]; | |||
| // 处理返回值 | |||
| return new OperationResultData(opResult).getResultData(); | |||
| } | |||
| private boolean isExecuteContractMethod(Method method) { | |||
| @@ -10,7 +10,7 @@ import org.junit.Test; | |||
| import static org.junit.Assert.assertEquals; | |||
| public class SampleTest_ { | |||
| public class SampleTest { | |||
| MockerNodeContext mockerNodeContext = null; | |||
| @@ -33,7 +33,9 @@ public class SampleTest_ { | |||
| writeContract = mockerNodeContext.deployContract(writeContract); | |||
| writeContract.writeKv(dataAccountAddress, key, value); | |||
| String result = writeContract.writeKv(dataAccountAddress, key, value); | |||
| System.out.println(result); | |||
| // 查询结果 | |||
| KVDataEntry[] dataEntries = mockerNodeContext.getDataEntries(ledgerHash, dataAccountAddress, key); | |||