@@ -6,11 +6,20 @@ import java.util.List; | |||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.concurrent.ConcurrentHashMap; | import java.util.concurrent.ConcurrentHashMap; | ||||
import com.jd.blockchain.ledger.core.handles.*; | |||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import com.jd.blockchain.ledger.LedgerException; | import com.jd.blockchain.ledger.LedgerException; | ||||
import com.jd.blockchain.ledger.Operation; | import com.jd.blockchain.ledger.Operation; | ||||
import com.jd.blockchain.ledger.core.handles.ContractCodeDeployOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.DataAccountKVSetOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.DataAccountRegisterOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.JVMContractEventSendOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.LedgerInitOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.ParticipantRegisterOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.ParticipantStateUpdateOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.RolesConfigureOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.UserAuthorizeOperationHandle; | |||||
import com.jd.blockchain.ledger.core.handles.UserRegisterOperationHandle; | |||||
@Component | @Component | ||||
public class DefaultOperationHandleRegisteration implements OperationHandleRegisteration { | public class DefaultOperationHandleRegisteration implements OperationHandleRegisteration { | ||||
@@ -2,8 +2,21 @@ package com.jd.blockchain.ledger.core.handles; | |||||
import com.jd.blockchain.crypto.AddressEncoding; | import com.jd.blockchain.crypto.AddressEncoding; | ||||
import com.jd.blockchain.crypto.PubKey; | import com.jd.blockchain.crypto.PubKey; | ||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.ledger.core.*; | |||||
import com.jd.blockchain.ledger.LedgerPermission; | |||||
import com.jd.blockchain.ledger.ParticipantInfo; | |||||
import com.jd.blockchain.ledger.ParticipantInfoData; | |||||
import com.jd.blockchain.ledger.ParticipantNode; | |||||
import com.jd.blockchain.ledger.ParticipantNodeState; | |||||
import com.jd.blockchain.ledger.ParticipantRegisterOperation; | |||||
import com.jd.blockchain.ledger.UserRegisterOperation; | |||||
import com.jd.blockchain.ledger.core.LedgerAdminDataset; | |||||
import com.jd.blockchain.ledger.core.LedgerDataset; | |||||
import com.jd.blockchain.ledger.core.LedgerQuery; | |||||
import com.jd.blockchain.ledger.core.MultiIDsPolicy; | |||||
import com.jd.blockchain.ledger.core.OperationHandleContext; | |||||
import com.jd.blockchain.ledger.core.SecurityContext; | |||||
import com.jd.blockchain.ledger.core.SecurityPolicy; | |||||
import com.jd.blockchain.ledger.core.TransactionRequestExtension; | |||||
import com.jd.blockchain.transaction.UserRegisterOpTemplate; | import com.jd.blockchain.transaction.UserRegisterOpTemplate; | ||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
@@ -15,8 +28,8 @@ public class ParticipantRegisterOperationHandle extends AbstractLedgerOperationH | |||||
@Override | @Override | ||||
protected void doProcess(ParticipantRegisterOperation op, LedgerDataset newBlockDataset, | protected void doProcess(ParticipantRegisterOperation op, LedgerDataset newBlockDataset, | ||||
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||||
OperationHandleContext handleContext, LedgerService ledgerService) { | |||||
TransactionRequestExtension requestContext, LedgerQuery previousBlockDataset, | |||||
OperationHandleContext handleContext) { | |||||
// 权限校验; | // 权限校验; | ||||
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | ||||
@@ -28,7 +41,7 @@ public class ParticipantRegisterOperationHandle extends AbstractLedgerOperationH | |||||
ParticipantInfo participantInfo = new ParticipantInfoData(participantRegOp.getParticipantName(), participantRegOp.getParticipantIdentity().getPubKey(), participantRegOp.getNetworkAddress()); | ParticipantInfo participantInfo = new ParticipantInfoData(participantRegOp.getParticipantName(), participantRegOp.getParticipantIdentity().getPubKey(), participantRegOp.getNetworkAddress()); | ||||
ParticipantNode participantNode = new PartNode((int)(adminAccountDataSet.getParticipantCount()), participantInfo.getName(), participantInfo.getPubKey(), ParticipantNodeState.REGISTED); | |||||
ParticipantNode participantNode = new PartNode((int)(adminAccountDataSet.getParticipantCount()), participantInfo.getName(), participantInfo.getPubKey(), ParticipantNodeState.REGISTERED); | |||||
//add new participant as consensus node | //add new participant as consensus node | ||||
adminAccountDataSet.addParticipant(participantNode); | adminAccountDataSet.addParticipant(participantNode); | ||||
@@ -4,8 +4,22 @@ import com.jd.blockchain.consensus.ConsensusProvider; | |||||
import com.jd.blockchain.consensus.ConsensusProviders; | import com.jd.blockchain.consensus.ConsensusProviders; | ||||
import com.jd.blockchain.crypto.AddressEncoding; | import com.jd.blockchain.crypto.AddressEncoding; | ||||
import com.jd.blockchain.crypto.PubKey; | import com.jd.blockchain.crypto.PubKey; | ||||
import com.jd.blockchain.ledger.*; | |||||
import com.jd.blockchain.ledger.core.*; | |||||
import com.jd.blockchain.ledger.LedgerPermission; | |||||
import com.jd.blockchain.ledger.LedgerSettings; | |||||
import com.jd.blockchain.ledger.ParticipantInfo; | |||||
import com.jd.blockchain.ledger.ParticipantInfoData; | |||||
import com.jd.blockchain.ledger.ParticipantNode; | |||||
import com.jd.blockchain.ledger.ParticipantNodeState; | |||||
import com.jd.blockchain.ledger.ParticipantStateUpdateOperation; | |||||
import com.jd.blockchain.ledger.core.LedgerAdminDataset; | |||||
import com.jd.blockchain.ledger.core.LedgerConfiguration; | |||||
import com.jd.blockchain.ledger.core.LedgerDataset; | |||||
import com.jd.blockchain.ledger.core.LedgerQuery; | |||||
import com.jd.blockchain.ledger.core.MultiIDsPolicy; | |||||
import com.jd.blockchain.ledger.core.OperationHandleContext; | |||||
import com.jd.blockchain.ledger.core.SecurityContext; | |||||
import com.jd.blockchain.ledger.core.SecurityPolicy; | |||||
import com.jd.blockchain.ledger.core.TransactionRequestExtension; | |||||
import com.jd.blockchain.utils.Bytes; | import com.jd.blockchain.utils.Bytes; | ||||
@@ -16,8 +30,8 @@ public class ParticipantStateUpdateOperationHandle extends AbstractLedgerOperati | |||||
@Override | @Override | ||||
protected void doProcess(ParticipantStateUpdateOperation op, LedgerDataset newBlockDataset, | protected void doProcess(ParticipantStateUpdateOperation op, LedgerDataset newBlockDataset, | ||||
TransactionRequestExtension requestContext, LedgerDataQuery previousBlockDataset, | |||||
OperationHandleContext handleContext, LedgerService ledgerService) { | |||||
TransactionRequestExtension requestContext, LedgerQuery previousBlockDataset, | |||||
OperationHandleContext handleContext) { | |||||
// 权限校验; | // 权限校验; | ||||
SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); | ||||
@@ -35,7 +49,7 @@ public class ParticipantStateUpdateOperationHandle extends AbstractLedgerOperati | |||||
for(int i = 0; i < participants.length; i++) { | for(int i = 0; i < participants.length; i++) { | ||||
if (stateUpdateOperation.getParticipantIdentity().getPubKey().equals(participants[i].getPubKey())) { | if (stateUpdateOperation.getParticipantIdentity().getPubKey().equals(participants[i].getPubKey())) { | ||||
participantNode = new PartNode(participants[i].getId(), participants[i].getName(), participants[i].getPubKey(), ParticipantNodeState.CONSENSUSED); | |||||
participantNode = new PartNode(participants[i].getId(), participants[i].getName(), participants[i].getPubKey(), ParticipantNodeState.ACTIVED); | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
@@ -50,7 +50,7 @@ public class LedgerAdminDatasetTest { | |||||
parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | ||||
parties[i].setName("Participant[" + i + "]"); | parties[i].setName("Participant[" + i + "]"); | ||||
parties[i].setPubKey(bckeys[i].getPubKey()); | parties[i].setPubKey(bckeys[i].getPubKey()); | ||||
parties[i].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[i].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ||||
initSetting.setConsensusParticipants(parties1); | initSetting.setConsensusParticipants(parties1); | ||||
@@ -77,7 +77,7 @@ public class LedgerInitOperationTest { | |||||
parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | ||||
parties[i].setName("Participant[" + i + "]"); | parties[i].setName("Participant[" + i + "]"); | ||||
parties[i].setPubKey(keys[i].getPubKey()); | parties[i].setPubKey(keys[i].getPubKey()); | ||||
parties[i].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[i].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ||||
@@ -116,7 +116,7 @@ public class LedgerInitOperationTest { | |||||
for (int i = 0; i < parties.length; i++) { | for (int i = 0; i < parties.length; i++) { | ||||
keys[i] = BlockchainKeyGenerator.getInstance().generate(); | keys[i] = BlockchainKeyGenerator.getInstance().generate(); | ||||
parties[i] = new ParticipantCertData(AddressEncoding.generateAddress(keys[i].getPubKey()), | parties[i] = new ParticipantCertData(AddressEncoding.generateAddress(keys[i].getPubKey()), | ||||
"Participant[" + i + "]", keys[i].getPubKey(), ParticipantNodeState.CONSENSUSED); | |||||
"Participant[" + i + "]", keys[i].getPubKey(), ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
ParticipantCertData[] parties1 = Arrays.copyOf(parties, 4); | ParticipantCertData[] parties1 = Arrays.copyOf(parties, 4); | ||||
@@ -81,7 +81,7 @@ public class LedgerInitSettingSerializeTest { | |||||
parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | parties[i].setHostAddress(new NetworkAddress("192.168.10." + (10 + i), 10010 + 10 * i)); | ||||
parties[i].setName("Participant[" + i + "]"); | parties[i].setName("Participant[" + i + "]"); | ||||
parties[i].setPubKey(keys[i].getPubKey()); | parties[i].setPubKey(keys[i].getPubKey()); | ||||
parties[i].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[i].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ConsensusParticipantData[] parties1 = Arrays.copyOf(parties, 4); | ||||
@@ -124,7 +124,7 @@ public class LedgerInitSettingSerializeTest { | |||||
for (int i = 0; i < parties.length; i++) { | for (int i = 0; i < parties.length; i++) { | ||||
keys[i] = BlockchainKeyGenerator.getInstance().generate(); | keys[i] = BlockchainKeyGenerator.getInstance().generate(); | ||||
parties[i] = new ParticipantCertData(AddressEncoding.generateAddress(keys[i].getPubKey()), | parties[i] = new ParticipantCertData(AddressEncoding.generateAddress(keys[i].getPubKey()), | ||||
"Participant[" + i + "]", keys[i].getPubKey(), ParticipantNodeState.CONSENSUSED); | |||||
"Participant[" + i + "]", keys[i].getPubKey(), ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
ParticipantCertData[] parties1 = Arrays.copyOf(parties, 4); | ParticipantCertData[] parties1 = Arrays.copyOf(parties, 4); | ||||
@@ -205,7 +205,7 @@ public class LedgerManagerTest { | |||||
parties[0].setPubKey(kp0.getPubKey()); | parties[0].setPubKey(kp0.getPubKey()); | ||||
parties[0].setAddress(AddressEncoding.generateAddress(kp0.getPubKey())); | parties[0].setAddress(AddressEncoding.generateAddress(kp0.getPubKey())); | ||||
parties[0].setHostAddress(new NetworkAddress("127.0.0.1", 9000)); | parties[0].setHostAddress(new NetworkAddress("127.0.0.1", 9000)); | ||||
parties[0].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[0].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
parties[1] = new ConsensusParticipantData(); | parties[1] = new ConsensusParticipantData(); | ||||
parties[1].setId(1); | parties[1].setId(1); | ||||
@@ -214,7 +214,7 @@ public class LedgerManagerTest { | |||||
parties[1].setPubKey(kp1.getPubKey()); | parties[1].setPubKey(kp1.getPubKey()); | ||||
parties[1].setAddress(AddressEncoding.generateAddress(kp1.getPubKey())); | parties[1].setAddress(AddressEncoding.generateAddress(kp1.getPubKey())); | ||||
parties[1].setHostAddress(new NetworkAddress("127.0.0.1", 9010)); | parties[1].setHostAddress(new NetworkAddress("127.0.0.1", 9010)); | ||||
parties[1].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[1].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
parties[2] = new ConsensusParticipantData(); | parties[2] = new ConsensusParticipantData(); | ||||
parties[2].setId(2); | parties[2].setId(2); | ||||
@@ -223,7 +223,7 @@ public class LedgerManagerTest { | |||||
parties[2].setPubKey(kp2.getPubKey()); | parties[2].setPubKey(kp2.getPubKey()); | ||||
parties[2].setAddress(AddressEncoding.generateAddress(kp2.getPubKey())); | parties[2].setAddress(AddressEncoding.generateAddress(kp2.getPubKey())); | ||||
parties[2].setHostAddress(new NetworkAddress("127.0.0.1", 9020)); | parties[2].setHostAddress(new NetworkAddress("127.0.0.1", 9020)); | ||||
parties[2].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[2].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
parties[3] = new ConsensusParticipantData(); | parties[3] = new ConsensusParticipantData(); | ||||
parties[3].setId(3); | parties[3].setId(3); | ||||
@@ -232,7 +232,7 @@ public class LedgerManagerTest { | |||||
parties[3].setPubKey(kp3.getPubKey()); | parties[3].setPubKey(kp3.getPubKey()); | ||||
parties[3].setAddress(AddressEncoding.generateAddress(kp3.getPubKey())); | parties[3].setAddress(AddressEncoding.generateAddress(kp3.getPubKey())); | ||||
parties[3].setHostAddress(new NetworkAddress("127.0.0.1", 9030)); | parties[3].setHostAddress(new NetworkAddress("127.0.0.1", 9030)); | ||||
parties[3].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[3].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
initSetting.setConsensusParticipants(parties); | initSetting.setConsensusParticipants(parties); | ||||
@@ -186,7 +186,7 @@ public class LedgerMetaDataTest { | |||||
// NetworkAddress consensusAddress = new NetworkAddress("192.168.1.1", 9001, | // NetworkAddress consensusAddress = new NetworkAddress("192.168.1.1", 9001, | ||||
// false); | // false); | ||||
Bytes address = AddressEncoding.generateAddress(pubKey); | Bytes address = AddressEncoding.generateAddress(pubKey); | ||||
ParticipantCertData participantCertData = new ParticipantCertData(address, name, pubKey, ParticipantNodeState.CONSENSUSED); | |||||
ParticipantCertData participantCertData = new ParticipantCertData(address, name, pubKey, ParticipantNodeState.ACTIVED); | |||||
// encode and decode | // encode and decode | ||||
byte[] encodeBytes = BinaryProtocol.encode(participantCertData, ParticipantNode.class); | byte[] encodeBytes = BinaryProtocol.encode(participantCertData, ParticipantNode.class); | ||||
@@ -68,7 +68,7 @@ public class LedgerTestUtils { | |||||
parties[i].setPubKey(partiKeys[i].getPubKey()); | parties[i].setPubKey(partiKeys[i].getPubKey()); | ||||
parties[i].setAddress(AddressEncoding.generateAddress(partiKeys[i].getPubKey())); | parties[i].setAddress(AddressEncoding.generateAddress(partiKeys[i].getPubKey())); | ||||
parties[i].setHostAddress(new NetworkAddress("192.168.1." + (10 + i), 9000)); | parties[i].setHostAddress(new NetworkAddress("192.168.1." + (10 + i), 9000)); | ||||
parties[i].setParticipantState(ParticipantNodeState.CONSENSUSED); | |||||
parties[i].setParticipantState(ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
@@ -326,7 +326,7 @@ public class LedgerInitProperties { | |||||
.parseBoolean(PropertiesUtils.getRequiredProperty(props, initializerSecureKey)); | .parseBoolean(PropertiesUtils.getRequiredProperty(props, initializerSecureKey)); | ||||
NetworkAddress initializerAddress = new NetworkAddress(initializerHost, initializerPort, initializerSecure); | NetworkAddress initializerAddress = new NetworkAddress(initializerHost, initializerPort, initializerSecure); | ||||
parti.setInitializerAddress(initializerAddress); | parti.setInitializerAddress(initializerAddress); | ||||
parti.setParticipantNodeState(ParticipantNodeState.CONSENSUSED); | |||||
parti.setParticipantNodeState(ParticipantNodeState.ACTIVED); | |||||
initProps.addConsensusParticipant(parti); | initProps.addConsensusParticipant(parti); | ||||
} | } | ||||
@@ -18,12 +18,12 @@ public enum ParticipantNodeState { | |||||
/** | /** | ||||
* 已注册; | * 已注册; | ||||
*/ | */ | ||||
REGISTED((byte) 0), | |||||
REGISTERED((byte) 0), | |||||
/** | /** | ||||
* 已共识; | |||||
* 已激活; | |||||
*/ | */ | ||||
CONSENSUSED((byte) 1); | |||||
ACTIVED((byte) 1); | |||||
@EnumField(type= PrimitiveType.INT8) | @EnumField(type= PrimitiveType.INT8) | ||||
public final byte CODE; | public final byte CODE; | ||||
@@ -81,7 +81,7 @@ public class SDK_GateWay_Participant_State_Update_Test_ { | |||||
NetworkAddress networkAddress = new NetworkAddress("127.0.0.1", 20000); | NetworkAddress networkAddress = new NetworkAddress("127.0.0.1", 20000); | ||||
txTemp.states().update(user.getIdentity(),networkAddress, ParticipantNodeState.CONSENSUSED); | |||||
txTemp.states().update(user.getIdentity(),networkAddress, ParticipantNodeState.ACTIVED); | |||||
// TX 准备就绪; | // TX 准备就绪; | ||||
PreparedTransaction prepTx = txTemp.prepare(); | PreparedTransaction prepTx = txTemp.prepare(); | ||||
@@ -88,7 +88,7 @@ public class Utils { | |||||
public static ParticipantNode[] loadParticipantNodes() { | public static ParticipantNode[] loadParticipantNodes() { | ||||
ParticipantNode[] participantNodes = new ParticipantNode[PUB_KEYS.length]; | ParticipantNode[] participantNodes = new ParticipantNode[PUB_KEYS.length]; | ||||
for (int i = 0; i < PUB_KEYS.length; i++) { | for (int i = 0; i < PUB_KEYS.length; i++) { | ||||
participantNodes[i] = new PartNode(i, KeyGenUtils.decodePubKey(PUB_KEYS[i]), ParticipantNodeState.CONSENSUSED); | |||||
participantNodes[i] = new PartNode(i, KeyGenUtils.decodePubKey(PUB_KEYS[i]), ParticipantNodeState.ACTIVED); | |||||
} | } | ||||
return participantNodes; | return participantNodes; | ||||
} | } | ||||
@@ -201,7 +201,7 @@ public class IntegrationBase { | |||||
ParticipantInfoData participantInfoData = new ParticipantInfoData("peer4", participantKeyPair.getPubKey(), new NetworkAddress("127.0.0.1", 20000)); | ParticipantInfoData participantInfoData = new ParticipantInfoData("peer4", participantKeyPair.getPubKey(), new NetworkAddress("127.0.0.1", 20000)); | ||||
txTpl.states().update(new BlockchainIdentityData(participantInfoData.getPubKey()), participantInfoData.getNetworkAddress(), ParticipantNodeState.CONSENSUSED); | |||||
txTpl.states().update(new BlockchainIdentityData(participantInfoData.getPubKey()), participantInfoData.getNetworkAddress(), ParticipantNodeState.ACTIVED); | |||||
// 签名; | // 签名; | ||||
PreparedTransaction ptx = txTpl.prepare(); | PreparedTransaction ptx = txTpl.prepare(); | ||||
@@ -12,7 +12,6 @@ import java.util.Properties; | |||||
import org.mockito.Mockito; | import org.mockito.Mockito; | ||||
import com.jd.blockchain.binaryproto.DataContract; | |||||
import com.jd.blockchain.binaryproto.DataContractRegistry; | import com.jd.blockchain.binaryproto.DataContractRegistry; | ||||
import com.jd.blockchain.consensus.ClientIdentification; | import com.jd.blockchain.consensus.ClientIdentification; | ||||
import com.jd.blockchain.consensus.ClientIdentifications; | import com.jd.blockchain.consensus.ClientIdentifications; | ||||
@@ -50,6 +49,8 @@ import com.jd.blockchain.ledger.NodeRequest; | |||||
import com.jd.blockchain.ledger.Operation; | import com.jd.blockchain.ledger.Operation; | ||||
import com.jd.blockchain.ledger.OperationResult; | import com.jd.blockchain.ledger.OperationResult; | ||||
import com.jd.blockchain.ledger.ParticipantNode; | import com.jd.blockchain.ledger.ParticipantNode; | ||||
import com.jd.blockchain.ledger.ParticipantRegisterOperation; | |||||
import com.jd.blockchain.ledger.ParticipantStateUpdateOperation; | |||||
import com.jd.blockchain.ledger.TransactionContent; | import com.jd.blockchain.ledger.TransactionContent; | ||||
import com.jd.blockchain.ledger.TransactionContentBody; | import com.jd.blockchain.ledger.TransactionContentBody; | ||||
import com.jd.blockchain.ledger.TransactionPermission; | import com.jd.blockchain.ledger.TransactionPermission; | ||||