From 133a7a162aa1cc1dbba24cd243f391dd5bf59501 Mon Sep 17 00:00:00 2001 From: huanghaiquan Date: Sun, 1 Sep 2019 22:58:27 +0800 Subject: [PATCH] Fixed compilation errors; --- source/base/pom.xml | 8 -- source/gateway/pom.xml | 12 +- .../DefaultOperationHandleRegisteration.java | 79 +++++++++---- .../ledger/core/LedgerAdminDataset.java | 4 +- .../core/LedgerSecurityManagerImpl.java | 6 +- .../ledger/core/OperationHandle.java | 2 +- .../ledger/core/RolePrivilegeDataset.java | 6 + .../ledger/core/UserRoleDataset.java | 25 +++- .../AbstractLedgerOperationHandle.java | 9 +- ...ractContractEventSendOperationHandle.java} | 8 +- .../JVMContractEventSendOperationHandle.java | 6 +- .../RolesConfigureOperationHandle.java | 49 ++++++++ .../handles/UserAuthorizeOperationHandle.java | 72 ++++++++++++ .../core/serialize/LedgerBlockSerializer.java | 5 +- .../ledger/core/ContractInvokingHandle.java | 4 +- .../ledger/core/ContractInvokingTest.java | 2 +- .../ledger/core/LedgerAdminDatasetTest.java | 8 +- .../jd/blockchain/ledger/LedgerAdminInfo.java | 2 +- .../blockchain/ledger/LedgerPermission.java | 34 +++--- .../ledger/RolePrivilegeSettings.java | 2 + .../com/jd/blockchain/ledger/UserRoles.java | 19 +++ ...leSettings.java => UserRolesSettings.java} | 15 ++- source/peer/pom.xml | 10 +- source/pom.xml | 12 +- .../contract/samples/AssetContractImpl.java | 2 +- source/tools/tools-initializer/pom.xml | 8 +- .../initializer/LedgerInitPropertiesTest.java | 24 ++-- .../src/test/resources/ledger.init | 4 +- .../blockchain/mocker/MockerNodeContext.java | 7 +- .../handler/MockerContractExeHandle.java | 4 +- .../MockerOperationHandleRegister.java | 108 +++++++++--------- .../com/jd/blockchain/utils/StringUtils.java | 2 +- 32 files changed, 381 insertions(+), 177 deletions(-) rename source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/{AbtractContractEventHandle.java => AbtractContractEventSendOperationHandle.java} (94%) create mode 100644 source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java create mode 100644 source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java rename source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/{UserRoleSettings.java => UserRolesSettings.java} (79%) diff --git a/source/base/pom.xml b/source/base/pom.xml index 367d7c8a..94592186 100644 --- a/source/base/pom.xml +++ b/source/base/pom.xml @@ -8,12 +8,4 @@ 1.1.0-SNAPSHOT base - - - - org.slf4j - slf4j-api - - - \ No newline at end of file diff --git a/source/gateway/pom.xml b/source/gateway/pom.xml index 6bd8122c..cb5478f6 100644 --- a/source/gateway/pom.xml +++ b/source/gateway/pom.xml @@ -75,7 +75,6 @@ commons-io commons-io - ${commons-io.version} @@ -98,18 +97,13 @@ org.springframework.boot spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-logging - - + - + org.springframework.boot diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DefaultOperationHandleRegisteration.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DefaultOperationHandleRegisteration.java index 15d5a0f1..7ab3b129 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DefaultOperationHandleRegisteration.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/DefaultOperationHandleRegisteration.java @@ -1,7 +1,9 @@ package com.jd.blockchain.ledger.core; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import org.springframework.stereotype.Component; @@ -10,26 +12,31 @@ 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.RolesConfigureOperationHandle; +import com.jd.blockchain.ledger.core.handles.UserAuthorizeOperationHandle; import com.jd.blockchain.ledger.core.handles.UserRegisterOperationHandle; @Component public class DefaultOperationHandleRegisteration implements OperationHandleRegisteration { - private List opHandles = new ArrayList<>(); + private static Map, OperationHandle> DEFAULT_HANDLES = new HashMap<>(); - public DefaultOperationHandleRegisteration() { - initDefaultHandles(); + private Map, OperationHandle> handles = new ConcurrentHashMap<>(); + + private Map, OperationHandle> cacheMapping = new ConcurrentHashMap<>(); + + static { + addDefaultHandle(new RolesConfigureOperationHandle()); + addDefaultHandle(new UserAuthorizeOperationHandle()); + addDefaultHandle(new DataAccountKVSetOperationHandle()); + addDefaultHandle(new DataAccountRegisterOperationHandle()); + addDefaultHandle(new UserRegisterOperationHandle()); + addDefaultHandle(new ContractCodeDeployOperationHandle()); + addDefaultHandle(new JVMContractEventSendOperationHandle()); } - /** - * 针对不采用bean依赖注入的方式来处理; - */ - private void initDefaultHandles() { - opHandles.add(new DataAccountKVSetOperationHandle()); - opHandles.add(new DataAccountRegisterOperationHandle()); - opHandles.add(new UserRegisterOperationHandle()); - opHandles.add(new ContractCodeDeployOperationHandle()); - opHandles.add(new JVMContractEventSendOperationHandle()); + private static void addDefaultHandle(OperationHandle handle) { + DEFAULT_HANDLES.put(handle.getOperationType(), handle); } /** @@ -37,9 +44,32 @@ public class DefaultOperationHandleRegisteration implements OperationHandleRegis * * @param handle */ - public void insertAsTopPriority(OperationHandle handle) { - opHandles.remove(handle); - opHandles.add(0, handle); + public void registerHandle(OperationHandle handle) { + handles.put(handle.getOperationType(), handle); + } + + private OperationHandle getRegisteredHandle(Class operationType) { + OperationHandle hdl = handles.get(operationType); + if (hdl == null) { + for (Entry, OperationHandle> entry : handles.entrySet()) { + if (entry.getKey().isAssignableFrom(operationType)) { + hdl = entry.getValue(); + } + } + } + return hdl; + } + + private OperationHandle getDefaultHandle(Class operationType) { + OperationHandle hdl = DEFAULT_HANDLES.get(operationType); + if (hdl == null) { + for (Entry, OperationHandle> entry : DEFAULT_HANDLES.entrySet()) { + if (entry.getKey().isAssignableFrom(operationType)) { + hdl = entry.getValue(); + } + } + } + return hdl; } /* @@ -51,12 +81,19 @@ public class DefaultOperationHandleRegisteration implements OperationHandleRegis */ @Override public OperationHandle getHandle(Class operationType) { - for (OperationHandle handle : opHandles) { - if (handle.support(operationType)) { - return handle; + OperationHandle hdl = cacheMapping.get(operationType); + if (hdl != null) { + return hdl; + } + hdl = getRegisteredHandle(operationType); + if (hdl == null) { + hdl = getDefaultHandle(operationType); + if (hdl == null) { + throw new LedgerException("Unsupported operation type[" + operationType.getName() + "]!"); } } - throw new LedgerException("Unsupported operation type[" + operationType.getName() + "]!"); + cacheMapping.put(operationType, hdl); + return hdl; } } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java index b85873a2..501e8d7d 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataset.java @@ -16,7 +16,7 @@ import com.jd.blockchain.ledger.LedgerMetadata_V2; import com.jd.blockchain.ledger.LedgerSettings; import com.jd.blockchain.ledger.ParticipantNode; import com.jd.blockchain.ledger.RolePrivilegeSettings; -import com.jd.blockchain.ledger.UserRoleSettings; +import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.ExPolicyKVStorage.ExPolicy; import com.jd.blockchain.storage.service.VersioningKVStorage; @@ -105,7 +105,7 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminInfo { } @Override - public UserRoleSettings getUserRoles() { + public UserRolesSettings getUserRoles() { return userRoles; } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerSecurityManagerImpl.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerSecurityManagerImpl.java index 6b74c2ce..0a26de4c 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerSecurityManagerImpl.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerSecurityManagerImpl.java @@ -14,7 +14,7 @@ import com.jd.blockchain.ledger.RolePrivilegeSettings; import com.jd.blockchain.ledger.RolePrivileges; import com.jd.blockchain.ledger.RolesPolicy; import com.jd.blockchain.ledger.TransactionPermission; -import com.jd.blockchain.ledger.UserRoleSettings; +import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.ledger.UserRoles; import com.jd.blockchain.utils.Bytes; @@ -28,7 +28,7 @@ public class LedgerSecurityManagerImpl implements LedgerSecurityManager { private RolePrivilegeSettings rolePrivilegeSettings; - private UserRoleSettings userRolesSettings; + private UserRolesSettings userRolesSettings; // 用户的权限配置 private Map userPrivilegesCache = new ConcurrentHashMap<>(); @@ -36,7 +36,7 @@ public class LedgerSecurityManagerImpl implements LedgerSecurityManager { private Map userRolesCache = new ConcurrentHashMap<>(); private Map rolesPrivilegeCache = new ConcurrentHashMap<>(); - public LedgerSecurityManagerImpl(RolePrivilegeSettings rolePrivilegeSettings, UserRoleSettings userRolesSettings) { + public LedgerSecurityManagerImpl(RolePrivilegeSettings rolePrivilegeSettings, UserRolesSettings userRolesSettings) { this.rolePrivilegeSettings = rolePrivilegeSettings; this.userRolesSettings = userRolesSettings; } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java index 94affc27..d7bf15e8 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/OperationHandle.java @@ -11,7 +11,7 @@ public interface OperationHandle { * @param operationType * @return */ - boolean support(Class operationType); + Class getOperationType(); /** * 同步解析和执行操作; diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java index c5685ecf..7e7bd238 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/RolePrivilegeDataset.java @@ -283,4 +283,10 @@ public class RolePrivilegeDataset implements Transactional, MerkleProvable, Role public boolean isReadonly() { return dataset.isReadonly(); } + + @Override + public boolean contains(String roleName) { + Bytes key = encodeKey(roleName); + return dataset.getVersion(key) > -1; + } } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java index 355f5973..9a88e39b 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/UserRoleDataset.java @@ -1,5 +1,7 @@ package com.jd.blockchain.ledger.core; +import java.util.Collection; + import com.jd.blockchain.binaryproto.BinaryProtocol; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.AuthorizationException; @@ -7,8 +9,8 @@ import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.RoleSet; import com.jd.blockchain.ledger.RolesPolicy; -import com.jd.blockchain.ledger.UserRoleSettings; import com.jd.blockchain.ledger.UserRoles; +import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.storage.service.ExPolicyKVStorage; import com.jd.blockchain.storage.service.VersioningKVEntry; import com.jd.blockchain.storage.service.VersioningKVStorage; @@ -21,7 +23,7 @@ import com.jd.blockchain.utils.Transactional; * @author huanghaiquan * */ -public class UserRoleDataset implements Transactional, MerkleProvable, UserRoleSettings { +public class UserRoleDataset implements Transactional, MerkleProvable, UserRolesSettings { private MerkleDataSet dataset; @@ -84,6 +86,25 @@ public class UserRoleDataset implements Transactional, MerkleProvable, UserRoleS } } + /** + * 加入新的用户角色授权;
+ * + * 如果该用户的授权已经存在,则引发 {@link LedgerException} 异常; + * + * @param userAddress + * @param rolesPolicy + * @param roles + */ + @Override + public void addUserRoles(Bytes userAddress, RolesPolicy rolesPolicy, Collection roles) { + UserRoles roleAuth = new UserRoles(userAddress, -1, rolesPolicy); + roleAuth.addRoles(roles); + long nv = setUserRolesAuthorization(roleAuth); + if (nv < 0) { + throw new AuthorizationException("Roles authorization of User[" + userAddress + "] already exists!"); + } + } + /** * 设置用户角色授权;
* 如果版本校验不匹配,则返回 -1; diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java index 311dc9d5..89bc5cf6 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbstractLedgerOperationHandle.java @@ -32,9 +32,14 @@ public abstract class AbstractLedgerOperationHandle impleme this.SUPPORTED_OPERATION_TYPE = supportedOperationType; } +// @Override +// public final boolean support(Class operationType) { +// return SUPPORTED_OPERATION_TYPE.isAssignableFrom(operationType); +// } + @Override - public final boolean support(Class operationType) { - return SUPPORTED_OPERATION_TYPE.isAssignableFrom(operationType); + public Class getOperationType() { + return SUPPORTED_OPERATION_TYPE; } @Override diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventSendOperationHandle.java similarity index 94% rename from source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventHandle.java rename to source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventSendOperationHandle.java index 8a410f1a..edcb5db3 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventHandle.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/AbtractContractEventSendOperationHandle.java @@ -22,11 +22,11 @@ import com.jd.blockchain.ledger.core.SecurityPolicy; import com.jd.blockchain.ledger.core.TransactionRequestExtension; @Service -public abstract class AbtractContractEventHandle implements OperationHandle { - +public abstract class AbtractContractEventSendOperationHandle implements OperationHandle { + @Override - public boolean support(Class operationType) { - return ContractEventSendOperation.class.isAssignableFrom(operationType); + public Class getOperationType() { + return ContractEventSendOperation.class; } @Override diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/JVMContractEventSendOperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/JVMContractEventSendOperationHandle.java index 018c4d8a..1cdd3fe6 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/JVMContractEventSendOperationHandle.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/JVMContractEventSendOperationHandle.java @@ -1,13 +1,13 @@ package com.jd.blockchain.ledger.core.handles; +import static com.jd.blockchain.utils.BaseConstant.CONTRACT_SERVICE_PROVIDER; + import com.jd.blockchain.contract.engine.ContractCode; import com.jd.blockchain.contract.engine.ContractEngine; import com.jd.blockchain.contract.engine.ContractServiceProviders; import com.jd.blockchain.ledger.core.ContractAccount; -import static com.jd.blockchain.utils.BaseConstant.CONTRACT_SERVICE_PROVIDER; - -public class JVMContractEventSendOperationHandle extends AbtractContractEventHandle { +public class JVMContractEventSendOperationHandle extends AbtractContractEventSendOperationHandle { private static final ContractEngine JVM_ENGINE; diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java new file mode 100644 index 00000000..d0f95989 --- /dev/null +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/RolesConfigureOperationHandle.java @@ -0,0 +1,49 @@ +package com.jd.blockchain.ledger.core.handles; + +import com.jd.blockchain.ledger.LedgerPermission; +import com.jd.blockchain.ledger.RolePrivilegeSettings; +import com.jd.blockchain.ledger.RolePrivileges; +import com.jd.blockchain.ledger.RolesConfigureOperation; +import com.jd.blockchain.ledger.RolesConfigureOperation.RolePrivilegeEntry; +import com.jd.blockchain.ledger.core.LedgerDataset; +import com.jd.blockchain.ledger.core.LedgerService; +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; + +public class RolesConfigureOperationHandle extends AbstractLedgerOperationHandle { + public RolesConfigureOperationHandle() { + super(RolesConfigureOperation.class); + } + + @Override + protected void doProcess(RolesConfigureOperation operation, LedgerDataset newBlockDataset, + TransactionRequestExtension request, LedgerDataset previousBlockDataset, + OperationHandleContext handleContext, LedgerService ledgerService) { + // 权限校验; + SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); + securityPolicy.checkEndpoints(LedgerPermission.CONFIGURE_ROLES, MultiIdsPolicy.AT_LEAST_ONE); + + // 操作账本; + RolePrivilegeEntry[] rpcfgs = operation.getRoles(); + RolePrivilegeSettings rpSettings = newBlockDataset.getAdminDataset().getRolePrivileges(); + if (rpcfgs != null) { + for (RolePrivilegeEntry rpcfg : rpcfgs) { + RolePrivileges rp = rpSettings.getRolePrivilege(rpcfg.getRoleName()); + if (rp == null) { + rpSettings.addRolePrivilege(rpcfg.getRoleName(), rpcfg.getEnableLedgerPermissions(), + rpcfg.getEnableTransactionPermissions()); + } else { + rp.enable(rpcfg.getEnableLedgerPermissions()); + rp.enable(rpcfg.getEnableTransactionPermissions()); + + rp.disable(rpcfg.getDisableLedgerPermissions()); + rp.disable(rpcfg.getDisableTransactionPermissions()); + } + } + } + } + +} diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java new file mode 100644 index 00000000..26ce7c4a --- /dev/null +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/handles/UserAuthorizeOperationHandle.java @@ -0,0 +1,72 @@ +package com.jd.blockchain.ledger.core.handles; + +import java.util.ArrayList; +import java.util.List; + +import com.jd.blockchain.ledger.LedgerPermission; +import com.jd.blockchain.ledger.RolePrivilegeSettings; +import com.jd.blockchain.ledger.RolesPolicy; +import com.jd.blockchain.ledger.UserAuthorizeOperation; +import com.jd.blockchain.ledger.UserAuthorizeOperation.UserRolesEntry; +import com.jd.blockchain.ledger.UserRoles; +import com.jd.blockchain.ledger.UserRolesSettings; +import com.jd.blockchain.ledger.core.LedgerDataset; +import com.jd.blockchain.ledger.core.LedgerService; +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; + +public class UserAuthorizeOperationHandle extends AbstractLedgerOperationHandle { + public UserAuthorizeOperationHandle() { + super(UserAuthorizeOperation.class); + } + + @Override + protected void doProcess(UserAuthorizeOperation operation, LedgerDataset newBlockDataset, + TransactionRequestExtension request, LedgerDataset previousBlockDataset, + OperationHandleContext handleContext, LedgerService ledgerService) { + // 权限校验; + SecurityPolicy securityPolicy = SecurityContext.getContextUsersPolicy(); + securityPolicy.checkEndpoints(LedgerPermission.CONFIGURE_ROLES, MultiIdsPolicy.AT_LEAST_ONE); + + // 操作账本; + + UserRolesEntry[] urcfgs = operation.getUserRolesAuthorizations(); + UserRolesSettings urSettings = newBlockDataset.getAdminDataset().getUserRoles(); + RolePrivilegeSettings rolesSettings = newBlockDataset.getAdminDataset().getRolePrivileges(); + if (urcfgs != null) { + for (UserRolesEntry urcfg : urcfgs) { + // + String[] authRoles = urcfg.getAuthorizedRoles(); + List validRoles = new ArrayList(); + if (authRoles != null) { + for (String r : authRoles) { + if (rolesSettings.contains(r)) { + validRoles.add(r); + } + } + } + UserRoles ur = urSettings.getUserRoles(urcfg.getUserAddress()); + if (ur == null) { + RolesPolicy policy = urcfg.getPolicy(); + if (policy == null) { + policy = RolesPolicy.UNION; + } + urSettings.addUserRoles(urcfg.getUserAddress(), policy, validRoles); + } else { + ur.addRoles(validRoles); + ur.removeRoles(urcfg.getUnauthorizedRoles()); + + // 如果请求中设置了策略,才进行更新; + RolesPolicy policy = urcfg.getPolicy(); + if (policy != null) { + ur.setPolicy(policy); + } + } + } + } + } + +} diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/serialize/LedgerBlockSerializer.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/serialize/LedgerBlockSerializer.java index 65b15129..09cedf9d 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/serialize/LedgerBlockSerializer.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/serialize/LedgerBlockSerializer.java @@ -1,13 +1,12 @@ package com.jd.blockchain.ledger.core.serialize; +import java.lang.reflect.Type; + import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; -import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.LedgerBlock; -import java.lang.reflect.Type; - public class LedgerBlockSerializer implements ObjectSerializer { @Override diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingHandle.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingHandle.java index 83883d06..c804a64a 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingHandle.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingHandle.java @@ -8,10 +8,10 @@ import com.jd.blockchain.contract.engine.ContractCode; import com.jd.blockchain.contract.jvm.AbstractContractCode; import com.jd.blockchain.contract.jvm.ContractDefinition; import com.jd.blockchain.ledger.core.ContractAccount; -import com.jd.blockchain.ledger.core.handles.AbtractContractEventHandle; +import com.jd.blockchain.ledger.core.handles.AbtractContractEventSendOperationHandle; import com.jd.blockchain.utils.Bytes; -public class ContractInvokingHandle extends AbtractContractEventHandle { +public class ContractInvokingHandle extends AbtractContractEventSendOperationHandle { private Map contractInstances = new ConcurrentHashMap(); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java index 335a21bd..d7807db3 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/ContractInvokingTest.java @@ -61,7 +61,7 @@ public class ContractInvokingTest { // 注册合约处理器; DefaultOperationHandleRegisteration opReg = new DefaultOperationHandleRegisteration(); - opReg.insertAsTopPriority(contractInvokingHandle); + opReg.registerHandle(contractInvokingHandle); // 发布指定地址合约 deploy(ledgerRepo, ledgerManager, opReg, ledgerHash, contractKey); diff --git a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerAdminDatasetTest.java b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerAdminDatasetTest.java index bce41009..e591aa7f 100644 --- a/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerAdminDatasetTest.java +++ b/source/ledger/ledger-core/src/test/java/test/com/jd/blockchain/ledger/core/LedgerAdminDatasetTest.java @@ -30,7 +30,7 @@ import com.jd.blockchain.ledger.RolePrivilegeSettings; import com.jd.blockchain.ledger.RolePrivileges; import com.jd.blockchain.ledger.RolesPolicy; import com.jd.blockchain.ledger.TransactionPermission; -import com.jd.blockchain.ledger.UserRoleSettings; +import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.ledger.UserRoles; import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.LedgerAdminDataset; @@ -92,7 +92,7 @@ public class LedgerAdminDatasetTest { testStorage); ledgerAdminDataset.getRolePrivileges().addRolePrivilege("DEFAULT", - new LedgerPermission[] { LedgerPermission.AUTHORIZE_ROLES, LedgerPermission.REGISTER_USER, + new LedgerPermission[] { LedgerPermission.CONFIGURE_ROLES, LedgerPermission.REGISTER_USER, LedgerPermission.APPROVE_TX }, new TransactionPermission[] { TransactionPermission.DIRECT_OPERATION, TransactionPermission.CONTRACT_OPERATION }); @@ -225,7 +225,7 @@ public class LedgerAdminDatasetTest { } private void verifyRealoadingRoleAuthorizations(LedgerAdminInfo actualAccount, - RolePrivilegeSettings expRolePrivilegeSettings, UserRoleSettings expUserRoleSettings) { + RolePrivilegeSettings expRolePrivilegeSettings, UserRolesSettings expUserRoleSettings) { // 验证基本信息; RolePrivilegeSettings actualRolePrivileges = actualAccount.getRolePrivileges(); RolePrivileges[] expRPs = expRolePrivilegeSettings.getRolePrivileges(); @@ -239,7 +239,7 @@ public class LedgerAdminDatasetTest { assertArrayEquals(expRP.getTransactionPrivilege().toBytes(), actualRP.getTransactionPrivilege().toBytes()); } - UserRoleSettings actualUserRoleSettings = actualAccount.getUserRoles(); + UserRolesSettings actualUserRoleSettings = actualAccount.getUserRoles(); UserRoles[] expUserRoles = expUserRoleSettings.getUserRoles(); assertEquals(expUserRoles.length, actualUserRoleSettings.getUserCount()); diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminInfo.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminInfo.java index 035db6f2..b666535e 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminInfo.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminInfo.java @@ -10,7 +10,7 @@ public interface LedgerAdminInfo { ParticipantNode[] getParticipants(); - UserRoleSettings getUserRoles(); + UserRolesSettings getUserRoles(); RolePrivilegeSettings getRolePrivileges(); diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerPermission.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerPermission.java index 82793392..a735a2da 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerPermission.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerPermission.java @@ -15,57 +15,61 @@ import com.jd.blockchain.consts.DataCodes; public enum LedgerPermission { /** - * 授权角色权限;
- * 包括:创建角色、设置角色的权限代码、分配用户角色; + * 配置角色的权限;
*/ - AUTHORIZE_ROLES((byte) 0x01), + CONFIGURE_ROLES((byte) 0x01), + + /** + * 授权用户角色;
+ */ + AUTHORIZE_USER_ROLES((byte) 0x02), /** * 设置共识协议;
*/ - SET_CONSENSUS((byte) 0x02), + SET_CONSENSUS((byte) 0x03), /** * 设置密码体系;
*/ - SET_CRYPTO((byte) 0x03), + SET_CRYPTO((byte) 0x04), /** * 注册参与方;
*/ - REGISTER_PARTICIPANT((byte) 0x04), + REGISTER_PARTICIPANT((byte) 0x05), /** * 注册用户;
* * 如果不具备此项权限,则无法注册用户; */ - REGISTER_USER((byte) 0x05), + REGISTER_USER((byte) 0x11), /** * 注册数据账户;
*/ - REGISTER_DATA_ACCOUNT((byte) 0x06), + REGISTER_DATA_ACCOUNT((byte) 0x12), /** * 注册合约;
*/ - REGISTER_CONTRACT((byte) 0x07), + REGISTER_CONTRACT((byte) 0x13), /** * 升级合约 */ - UPGRADE_CONTRACT((byte) 0x08), + UPGRADE_CONTRACT((byte) 0x14), /** * 设置用户属性;
*/ - SET_USER_ATTRIBUTES((byte) 0x09), + SET_USER_ATTRIBUTES((byte) 0x15), /** * 写入数据账户;
*/ - WRITE_DATA_ACCOUNT((byte) 0x0A), + WRITE_DATA_ACCOUNT((byte) 0x16), /** * 参与方核准交易;
@@ -74,16 +78,14 @@ public enum LedgerPermission { *

* 只对交易请求的节点签名列表{@link TransactionRequest#getNodeSignatures()}的用户产生影响; */ - APPROVE_TX((byte) 0x0B), + APPROVE_TX((byte) 0x0C), /** * 参与方共识交易;
* * 如果不具备此项权限,则无法作为共识节点接入并对交易进行共识; */ - CONSENSUS_TX((byte) 0x0C); - - + CONSENSUS_TX((byte) 0x0D); @EnumField(type = PrimitiveType.INT8) public final byte CODE; diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/RolePrivilegeSettings.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/RolePrivilegeSettings.java index b678d644..cdaa99e8 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/RolePrivilegeSettings.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/RolePrivilegeSettings.java @@ -155,4 +155,6 @@ public interface RolePrivilegeSettings { long disablePermissions(String roleName, LedgerPermission[] ledgerPermissions, TransactionPermission[] txPermissions); + boolean contains(String r); + } \ No newline at end of file diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoles.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoles.java index 42160fe3..d73d67a2 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoles.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoles.java @@ -1,5 +1,6 @@ package com.jd.blockchain.ledger; +import java.util.Collection; import java.util.Set; import java.util.TreeSet; @@ -72,6 +73,24 @@ public class UserRoles implements RoleSet { } } + public void addRoles(Collection roles) { + for (String r : roles) { + this.roles.add(r); + } + } + + public void removeRoles(String... roles) { + for (String r : roles) { + this.roles.remove(r); + } + } + + public void removeRoles(Collection roles) { + for (String r : roles) { + this.roles.remove(r); + } + } + /** * 设置角色集合;
* 注意,这不是追加;现有的不在参数指定范围的角色将被移除; diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoleSettings.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRolesSettings.java similarity index 79% rename from source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoleSettings.java rename to source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRolesSettings.java index f7426ccf..af822b82 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRoleSettings.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/UserRolesSettings.java @@ -1,8 +1,10 @@ package com.jd.blockchain.ledger; +import java.util.Collection; + import com.jd.blockchain.utils.Bytes; -public interface UserRoleSettings { +public interface UserRolesSettings { /** * 单一用户可被授权的角色数量的最大值; @@ -51,6 +53,17 @@ public interface UserRoleSettings { * @param roles */ void addUserRoles(Bytes userAddress, RolesPolicy rolesPolicy, String... roles); + + /** + * 加入新的用户角色授权;
+ * + * 如果该用户的授权已经存在,则引发 {@link LedgerException} 异常; + * + * @param userAddress + * @param rolesPolicy + * @param roles + */ + void addUserRoles(Bytes userAddress, RolesPolicy rolesPolicy, Collection roles); /** * 更新用户角色授权;
diff --git a/source/peer/pom.xml b/source/peer/pom.xml index f428d188..a7127e68 100644 --- a/source/peer/pom.xml +++ b/source/peer/pom.xml @@ -54,18 +54,12 @@ org.springframework.boot spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-logging - - - + org.springframework.boot diff --git a/source/pom.xml b/source/pom.xml index 6d34bb90..9dd10642 100644 --- a/source/pom.xml +++ b/source/pom.xml @@ -8,11 +8,6 @@ spring-boot-starter-parent 2.0.6.RELEASE - - - - - com.jd.blockchain jdchain-root @@ -45,9 +40,6 @@ 0.7.0.RELEASE 1.0.0-SNAPSHOT 2.4 - - 3.3.0 1.2.2 1.8.8 @@ -85,6 +77,10 @@ + + org.springframework.boot + spring-boot-starter-logging + junit junit diff --git a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java index 803d9d5c..d662378d 100644 --- a/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java +++ b/source/sdk/sdk-samples/src/main/java/com/jd/blockchain/contract/samples/AssetContractImpl.java @@ -54,7 +54,7 @@ public class AssetContractImpl implements EventProcessingAware, AssetContract { KVDataObject currTotal = (KVDataObject) kvEntries[0]; long newTotal = currTotal.longValue() + amount; eventContext.getLedger().dataAccount(ASSET_ADDRESS).setInt64(KEY_TOTAL, newTotal, currTotal.getVersion()); - + // 分配到持有者账户; KVDataObject holderAmount = (KVDataObject) kvEntries[1]; long newHodlerAmount = holderAmount.longValue() + amount; diff --git a/source/tools/tools-initializer/pom.xml b/source/tools/tools-initializer/pom.xml index f4cfe07d..b4f51d28 100644 --- a/source/tools/tools-initializer/pom.xml +++ b/source/tools/tools-initializer/pom.xml @@ -72,18 +72,18 @@ org.springframework.boot spring-boot-starter-web - + - + org.springframework.boot diff --git a/source/tools/tools-initializer/src/test/java/test/com/jd/blockchain/tools/initializer/LedgerInitPropertiesTest.java b/source/tools/tools-initializer/src/test/java/test/com/jd/blockchain/tools/initializer/LedgerInitPropertiesTest.java index 6e890a52..8b34623c 100644 --- a/source/tools/tools-initializer/src/test/java/test/com/jd/blockchain/tools/initializer/LedgerInitPropertiesTest.java +++ b/source/tools/tools-initializer/src/test/java/test/com/jd/blockchain/tools/initializer/LedgerInitPropertiesTest.java @@ -96,15 +96,18 @@ public class LedgerInitPropertiesTest { TransactionPermission.CONTRACT_OPERATION }, roleDefault.getTransactionPermissions()); RoleInitData roleAdmin = rolesInitDatas.get("ADMIN"); - assertArrayEquals(new LedgerPermission[] { LedgerPermission.AUTHORIZE_ROLES, LedgerPermission.SET_CONSENSUS, - LedgerPermission.SET_CRYPTO, LedgerPermission.REGISTER_PARTICIPANT, - LedgerPermission.REGISTER_USER }, roleAdmin.getLedgerPermissions()); + assertArrayEquals( + new LedgerPermission[] { LedgerPermission.CONFIGURE_ROLES, LedgerPermission.AUTHORIZE_USER_ROLES, + LedgerPermission.SET_CONSENSUS, LedgerPermission.SET_CRYPTO, + LedgerPermission.REGISTER_PARTICIPANT, LedgerPermission.REGISTER_USER }, + roleAdmin.getLedgerPermissions()); assertArrayEquals(new TransactionPermission[] { TransactionPermission.DIRECT_OPERATION }, roleAdmin.getTransactionPermissions()); RoleInitData roleManager = rolesInitDatas.get("MANAGER"); assertArrayEquals( - new LedgerPermission[] { LedgerPermission.REGISTER_USER, LedgerPermission.REGISTER_DATA_ACCOUNT, + new LedgerPermission[] { LedgerPermission.CONFIGURE_ROLES, LedgerPermission.AUTHORIZE_USER_ROLES, + LedgerPermission.REGISTER_USER, LedgerPermission.REGISTER_DATA_ACCOUNT, LedgerPermission.REGISTER_CONTRACT, LedgerPermission.UPGRADE_CONTRACT, LedgerPermission.SET_USER_ATTRIBUTES, LedgerPermission.WRITE_DATA_ACCOUNT }, roleManager.getLedgerPermissions()); @@ -127,7 +130,7 @@ public class LedgerInitPropertiesTest { // 验证参与方信息; assertEquals(4, initProps.getConsensusParticipantCount()); - + ConsensusParticipantConfig part0 = initProps.getConsensusParticipant(0); assertEquals("jd.com", part0.getName()); PubKey pubKey0 = KeyGenCommand.decodePubKey("3snPdw7i7PjVKiTH2VnXZu5H8QmNaSXpnk4ei533jFpuifyjS5zzH9"); @@ -135,26 +138,25 @@ public class LedgerInitPropertiesTest { assertEquals("127.0.0.1", part0.getInitializerAddress().getHost()); assertEquals(8800, part0.getInitializerAddress().getPort()); assertEquals(true, part0.getInitializerAddress().isSecure()); - assertArrayEquals(new String[] {"ADMIN", "MANAGER"}, part0.getRoles()); + assertArrayEquals(new String[] { "ADMIN", "MANAGER" }, part0.getRoles()); assertEquals(RolesPolicy.UNION, part0.getRolesPolicy()); - ConsensusParticipantConfig part1 = initProps.getConsensusParticipant(1); assertEquals(false, part1.getInitializerAddress().isSecure()); PubKey pubKey1 = KeyGenCommand.decodePubKey("3snPdw7i7PajLB35tEau1kmixc6ZrjLXgxwKbkv5bHhP7nT5dhD9eX"); assertEquals(pubKey1, part1.getPubKey()); - assertArrayEquals(new String[] { "MANAGER"}, part1.getRoles()); + assertArrayEquals(new String[] { "MANAGER" }, part1.getRoles()); assertEquals(RolesPolicy.UNION, part1.getRolesPolicy()); ConsensusParticipantConfig part2 = initProps.getConsensusParticipant(2); assertEquals("7VeRAr3dSbi1xatq11ZcF7sEPkaMmtZhV9shonGJWk9T4pLe", part2.getPubKey().toBase58()); - assertArrayEquals(new String[] { "MANAGER"}, part2.getRoles()); + assertArrayEquals(new String[] { "MANAGER" }, part2.getRoles()); assertEquals(RolesPolicy.UNION, part2.getRolesPolicy()); - + ConsensusParticipantConfig part3 = initProps.getConsensusParticipant(3); PubKey pubKey3 = KeyGenCommand.decodePubKey("3snPdw7i7PifPuRX7fu3jBjsb3rJRfDe9GtbDfvFJaJ4V4hHXQfhwk"); assertEquals(pubKey3, part3.getPubKey()); - assertArrayEquals(new String[] { "GUEST"}, part3.getRoles()); + assertArrayEquals(new String[] { "GUEST" }, part3.getRoles()); assertEquals(RolesPolicy.INTERSECT, part3.getRolesPolicy()); } finally { diff --git a/source/tools/tools-initializer/src/test/resources/ledger.init b/source/tools/tools-initializer/src/test/resources/ledger.init index 275778b7..ebbd8872 100644 --- a/source/tools/tools-initializer/src/test/resources/ledger.init +++ b/source/tools/tools-initializer/src/test/resources/ledger.init @@ -37,11 +37,11 @@ security.role.DEFAULT.tx-privileges=DIRECT_OPERATION, CONTRACT_OPERATION # 其它角色的配置示例; # 系统管理员角色:只能操作全局性的参数配置和用户注册,只能执行直接操作指令; -security.role.ADMIN.ledger-privileges=AUTHORIZE_ROLES, SET_CONSENSUS, SET_CRYPTO, REGISTER_PARTICIPANT, REGISTER_USER +security.role.ADMIN.ledger-privileges=CONFIGURE_ROLES, AUTHORIZE_USER_ROLES, SET_CONSENSUS, SET_CRYPTO, REGISTER_PARTICIPANT, REGISTER_USER security.role.ADMIN.tx-privileges=DIRECT_OPERATION # 业务主管角色:只能够执行账本数据相关的操作,包括注册用户、注册数据账户、注册合约、升级合约、写入数据等;能够执行直接操作指令和调用合约; -security.role.MANAGER.ledger-privileges=REGISTER_USER, REGISTER_DATA_ACCOUNT, REGISTER_CONTRACT, UPGRADE_CONTRACT, SET_USER_ATTRIBUTES, WRITE_DATA_ACCOUNT, +security.role.MANAGER.ledger-privileges=CONFIGURE_ROLES, AUTHORIZE_USER_ROLES, REGISTER_USER, REGISTER_DATA_ACCOUNT, REGISTER_CONTRACT, UPGRADE_CONTRACT, SET_USER_ATTRIBUTES, WRITE_DATA_ACCOUNT, security.role.MANAGER.tx-privileges=DIRECT_OPERATION, CONTRACT_OPERATION # 访客角色:不具备任何的账本权限,只有数据读取的操作;也只能够通过调用合约来读取数据; diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java index e29cd904..189b7f63 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/MockerNodeContext.java @@ -57,18 +57,19 @@ import com.jd.blockchain.ledger.TransactionState; import com.jd.blockchain.ledger.UserInfo; import com.jd.blockchain.ledger.UserRegisterOperation; import com.jd.blockchain.ledger.core.CryptoConfig; +import com.jd.blockchain.ledger.core.DefaultOperationHandleRegisteration; import com.jd.blockchain.ledger.core.LedgerDataset; import com.jd.blockchain.ledger.core.LedgerEditor; import com.jd.blockchain.ledger.core.LedgerManager; import com.jd.blockchain.ledger.core.LedgerQueryService; import com.jd.blockchain.ledger.core.LedgerRepository; import com.jd.blockchain.ledger.core.LedgerSecurityManager; +import com.jd.blockchain.ledger.core.OperationHandleRegisteration; import com.jd.blockchain.ledger.core.SecurityPolicy; import com.jd.blockchain.ledger.core.TransactionBatchProcessor; import com.jd.blockchain.mocker.config.MockerConstant; import com.jd.blockchain.mocker.config.PresetAnswerPrompter; import com.jd.blockchain.mocker.handler.MockerContractExeHandle; -import com.jd.blockchain.mocker.handler.MockerOperationHandleRegister; import com.jd.blockchain.mocker.proxy.ContractProxy; import com.jd.blockchain.service.TransactionBatchResultHandle; import com.jd.blockchain.storage.service.DbConnectionFactory; @@ -91,7 +92,7 @@ public class MockerNodeContext implements BlockchainQueryService { private DbConnectionFactory dbConnFactory = new MemoryDBConnFactory(); - private MockerOperationHandleRegister opHandler = new MockerOperationHandleRegister(); + private DefaultOperationHandleRegisteration opHandler = new DefaultOperationHandleRegisteration(); private MockerContractExeHandle contractExeHandle = new MockerContractExeHandle(); @@ -194,7 +195,7 @@ public class MockerNodeContext implements BlockchainQueryService { contractExeHandle.initLedger(ledgerManager, ledgerHash); - opHandler.registerHandler(contractExeHandle); + opHandler.registerHandle(contractExeHandle); return this; } diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java index 7683c3db..174e1f86 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerContractExeHandle.java @@ -73,8 +73,8 @@ public class MockerContractExeHandle implements OperationHandle { } @Override - public boolean support(Class operationType) { - return ContractEventSendOperation.class.isAssignableFrom(operationType); + public Class getOperationType() { + return ContractEventSendOperation.class; } public void initLedger(LedgerManager ledgerManager, HashDigest ledgerHash) { diff --git a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerOperationHandleRegister.java b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerOperationHandleRegister.java index 52c8392a..d22c6174 100644 --- a/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerOperationHandleRegister.java +++ b/source/tools/tools-mocker/src/main/java/com/jd/blockchain/mocker/handler/MockerOperationHandleRegister.java @@ -1,54 +1,54 @@ -package com.jd.blockchain.mocker.handler; - -import java.util.ArrayList; -import java.util.List; - -import com.jd.blockchain.ledger.LedgerException; -import com.jd.blockchain.ledger.core.OperationHandle; -import com.jd.blockchain.ledger.core.OperationHandleRegisteration; -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.UserRegisterOperationHandle; - -public class MockerOperationHandleRegister implements OperationHandleRegisteration { - - private List opHandles = new ArrayList<>(); - - public MockerOperationHandleRegister() { - initDefaultHandles(); - } - - /** - * 针对不采用bean依赖注入的方式来处理; - */ - private void initDefaultHandles(){ - opHandles.add(new DataAccountKVSetOperationHandle()); - opHandles.add(new DataAccountRegisterOperationHandle()); - opHandles.add(new UserRegisterOperationHandle()); - opHandles.add(new ContractCodeDeployOperationHandle()); -// opHandles.add(new ContractEventSendOperationHandle()); - } - - public List getOpHandles() { - return opHandles; - } - - public void registerHandler(OperationHandle operationHandle) { - opHandles.add(operationHandle); - } - - public void removeHandler(OperationHandle operationHandle) { - opHandles.remove(operationHandle); - } - - @Override - public OperationHandle getHandle(Class operationType) { - for (OperationHandle handle : opHandles) { - if (handle.support(operationType)) { - return handle; - } - } - throw new LedgerException("Unsupported operation type[" + operationType.getName() + "]!"); - } -} +//package com.jd.blockchain.mocker.handler; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import com.jd.blockchain.ledger.LedgerException; +//import com.jd.blockchain.ledger.core.OperationHandle; +//import com.jd.blockchain.ledger.core.OperationHandleRegisteration; +//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.UserRegisterOperationHandle; +// +//public class MockerOperationHandleRegister implements OperationHandleRegisteration { +// +// private List opHandles = new ArrayList<>(); +// +// public MockerOperationHandleRegister() { +// initDefaultHandles(); +// } +// +// /** +// * 针对不采用bean依赖注入的方式来处理; +// */ +// private void initDefaultHandles(){ +// opHandles.add(new DataAccountKVSetOperationHandle()); +// opHandles.add(new DataAccountRegisterOperationHandle()); +// opHandles.add(new UserRegisterOperationHandle()); +// opHandles.add(new ContractCodeDeployOperationHandle()); +//// opHandles.add(new ContractEventSendOperationHandle()); +// } +// +// public List getOpHandles() { +// return opHandles; +// } +// +// public void registerHandler(OperationHandle operationHandle) { +// opHandles.add(operationHandle); +// } +// +// public void removeHandler(OperationHandle operationHandle) { +// opHandles.remove(operationHandle); +// } +// +// @Override +// public OperationHandle getHandle(Class operationType) { +// for (OperationHandle handle : opHandles) { +// if (handle.support(operationType)) { +// return handle; +// } +// } +// throw new LedgerException("Unsupported operation type[" + operationType.getName() + "]!"); +// } +//} diff --git a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/StringUtils.java b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/StringUtils.java index fea16ace..5761f464 100644 --- a/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/StringUtils.java +++ b/source/utils/utils-common/src/main/java/com/jd/blockchain/utils/StringUtils.java @@ -51,7 +51,7 @@ public class StringUtils { */ public static String[] splitToArray(String str, String delimiter, boolean trimElement, boolean ignoreEmptyElement) { if (str == null) { - return null; + return EMPTY_ARRAY; } if (trimElement) { str = str.trim();