diff --git a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java b/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java index 607c051d..279daea0 100644 --- a/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java +++ b/source/base/src/main/java/com/jd/blockchain/consts/DataCodes.java @@ -22,7 +22,7 @@ public interface DataCodes { public static final int DATA_SNAPSHOT = 0x130; -// public static final int LEDGER_ADMIN_DATA = 0x131; + public static final int LEDGER_ADMIN_INFO = 0x131; public static final int TX = 0x200; diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/EmptyLedgerDataset.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/EmptyLedgerDataset.java index 64e08117..3bd87b8d 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/EmptyLedgerDataset.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/EmptyLedgerDataset.java @@ -2,7 +2,7 @@ package com.jd.blockchain.ledger.core; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.AccountHeader; -import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.MerkleProof; import com.jd.blockchain.ledger.ParticipantDataQuery; import com.jd.blockchain.ledger.ParticipantNode; @@ -45,7 +45,7 @@ public class EmptyLedgerDataset implements LedgerDataQuery { @Override - public LedgerAdminInfo getAdminInfo() { + public LedgerAdminSettings getAdminInfo() { return null; } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java index 05c62138..623a47b1 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerAdminDataQuery.java @@ -1,11 +1,11 @@ package com.jd.blockchain.ledger.core; -import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.ParticipantDataQuery; public interface LedgerAdminDataQuery { - LedgerAdminInfo getAdminInfo(); + LedgerAdminSettings getAdminInfo(); ParticipantDataQuery getParticipantDataset(); 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 9c794f82..f7cf951c 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 @@ -8,7 +8,7 @@ import com.jd.blockchain.binaryproto.DataContractRegistry; import com.jd.blockchain.crypto.Crypto; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.crypto.HashFunction; -import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.LedgerException; import com.jd.blockchain.ledger.LedgerInitSetting; import com.jd.blockchain.ledger.LedgerMetadata; @@ -23,7 +23,7 @@ import com.jd.blockchain.storage.service.VersioningKVStorage; import com.jd.blockchain.utils.Bytes; import com.jd.blockchain.utils.Transactional; -public class LedgerAdminDataset implements Transactional, LedgerAdminDataQuery, LedgerAdminInfo { +public class LedgerAdminDataset implements Transactional, LedgerAdminDataQuery, LedgerAdminSettings { static { DataContractRegistry.register(LedgerMetadata.class); @@ -110,7 +110,7 @@ public class LedgerAdminDataset implements Transactional, LedgerAdminDataQuery, } @Override - public LedgerAdminInfo getAdminInfo() { + public LedgerAdminSettings getAdminInfo() { return this; } diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java index ddd5a68d..06fce128 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerInitializer.java @@ -8,6 +8,7 @@ import com.jd.blockchain.ledger.BlockchainIdentityData; import com.jd.blockchain.ledger.BlockchainKeypair; import com.jd.blockchain.ledger.DigitalSignature; import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerInitException; import com.jd.blockchain.ledger.LedgerInitOperation; @@ -254,6 +255,16 @@ public class LedgerInitializer { public LedgerAdminInfo getAdminInfo(LedgerBlock block) { return null; } + + @Override + public LedgerAdminSettings getAdminSettings() { + return null; + } + + @Override + public LedgerAdminSettings getAdminSettings(LedgerBlock block) { + return null; + } @Override public LedgerBlock getBlock(HashDigest hash) { diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQuery.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQuery.java index 0bed1953..748cb212 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQuery.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerQuery.java @@ -2,6 +2,7 @@ package com.jd.blockchain.ledger.core; import com.jd.blockchain.crypto.HashDigest; import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.LedgerBlock; public interface LedgerQuery { @@ -53,6 +54,10 @@ public interface LedgerQuery { LedgerAdminInfo getAdminInfo(); LedgerAdminInfo getAdminInfo(LedgerBlock block); + + LedgerAdminSettings getAdminSettings(); + + LedgerAdminSettings getAdminSettings(LedgerBlock block); LedgerBlock getBlock(HashDigest hash); diff --git a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java index 55c9d6d6..caba630f 100644 --- a/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java +++ b/source/ledger/ledger-core/src/main/java/com/jd/blockchain/ledger/core/LedgerRepositoryImpl.java @@ -7,6 +7,7 @@ import com.jd.blockchain.crypto.HashFunction; import com.jd.blockchain.ledger.BlockBody; import com.jd.blockchain.ledger.CryptoSetting; import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; import com.jd.blockchain.ledger.LedgerBlock; import com.jd.blockchain.ledger.LedgerDataSnapshot; import com.jd.blockchain.ledger.LedgerInitSetting; @@ -244,7 +245,7 @@ class LedgerRepositoryImpl implements LedgerRepository { @Override public LedgerAdminInfo getAdminInfo() { - return getAdminInfo(getLatestBlock()); + return getAdminSettings(getLatestBlock()); } private LedgerBlock deserialize(byte[] blockBytes) { @@ -265,7 +266,17 @@ class LedgerRepositoryImpl implements LedgerRepository { } @Override - public LedgerAdminDataset getAdminInfo(LedgerBlock block) { + public LedgerAdminInfo getAdminInfo(LedgerBlock block) { + return getAdminSettings(block); + } + + @Override + public LedgerAdminSettings getAdminSettings() { + return getAdminSettings(getLatestBlock()); + } + + @Override + public LedgerAdminSettings getAdminSettings(LedgerBlock block) { long height = getLatestBlockHeight(); if (height == block.getHeight()) { return latestState.getAdminDataset(); @@ -284,7 +295,7 @@ class LedgerRepositoryImpl implements LedgerRepository { if (height == block.getHeight()) { return latestState.getUserAccountSet(); } - LedgerAdminDataset adminAccount = getAdminInfo(block); + LedgerAdminSettings adminAccount = getAdminSettings(block); return createUserAccountSet(block, adminAccount.getSettings().getCryptoSetting()); } @@ -300,7 +311,7 @@ class LedgerRepositoryImpl implements LedgerRepository { return latestState.getDataAccountSet(); } - LedgerAdminDataset adminAccount = getAdminInfo(block); + LedgerAdminSettings adminAccount = getAdminSettings(block); return createDataAccountSet(block, adminAccount.getSettings().getCryptoSetting()); } @@ -316,7 +327,7 @@ class LedgerRepositoryImpl implements LedgerRepository { return latestState.getContractAccountSet(); } - LedgerAdminDataset adminAccount = getAdminInfo(block); + LedgerAdminSettings adminAccount = getAdminSettings(block); return createContractAccountSet(block, adminAccount.getSettings().getCryptoSetting()); } 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 08c3ec89..684d720a 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 @@ -10,7 +10,6 @@ import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Random; -import com.jd.blockchain.ledger.*; import org.junit.Test; import com.jd.blockchain.crypto.AddressEncoding; @@ -20,6 +19,21 @@ import com.jd.blockchain.crypto.HashDigest; 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.BlockchainKeyGenerator; +import com.jd.blockchain.ledger.BlockchainKeypair; +import com.jd.blockchain.ledger.LedgerAdminInfo; +import com.jd.blockchain.ledger.LedgerAdminSettings; +import com.jd.blockchain.ledger.LedgerMetadata_V2; +import com.jd.blockchain.ledger.LedgerPermission; +import com.jd.blockchain.ledger.LedgerSettings; +import com.jd.blockchain.ledger.ParticipantNode; +import com.jd.blockchain.ledger.ParticipantNodeState; +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.UserRoles; +import com.jd.blockchain.ledger.UserRolesSettings; import com.jd.blockchain.ledger.core.CryptoConfig; import com.jd.blockchain.ledger.core.LedgerAdminDataset; import com.jd.blockchain.ledger.core.LedgerConfiguration; @@ -213,7 +227,7 @@ public class LedgerAdminDatasetTest { actualLedgerSettings.getCryptoSetting().getHashAlgorithm()); } - private void verifyRealoadingRoleAuthorizations(LedgerAdminInfo actualAccount, + private void verifyRealoadingRoleAuthorizations(LedgerAdminSettings actualAccount, RolePrivilegeSettings expRolePrivilegeSettings, UserRolesSettings expUserRoleSettings) { // 验证基本信息; RolePrivilegeSettings actualRolePrivileges = actualAccount.getRolePrivileges(); 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 b666535e..62a2aa2f 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 @@ -1,17 +1,23 @@ package com.jd.blockchain.ledger; +import com.jd.blockchain.binaryproto.DataContract; +import com.jd.blockchain.binaryproto.DataField; +import com.jd.blockchain.binaryproto.PrimitiveType; +import com.jd.blockchain.consts.DataCodes; + +@DataContract(code=DataCodes.LEDGER_ADMIN_INFO) public interface LedgerAdminInfo { + @DataField(order=1, refContract = true) LedgerMetadata_V2 getMetadata(); + @DataField(order=2, refContract = true) LedgerSettings getSettings(); - long getParticipantCount(); - + @DataField(order=3, refContract = true, list = true) ParticipantNode[] getParticipants(); - - UserRolesSettings getUserRoles(); - - RolePrivilegeSettings getRolePrivileges(); + + @DataField(order=4, primitiveType = PrimitiveType.INT64) + long getParticipantCount(); } \ No newline at end of file diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminSettings.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminSettings.java new file mode 100644 index 00000000..1c8cc9ff --- /dev/null +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/ledger/LedgerAdminSettings.java @@ -0,0 +1,8 @@ +package com.jd.blockchain.ledger; + +public interface LedgerAdminSettings extends LedgerAdminInfo { + + UserRolesSettings getUserRoles(); + + RolePrivilegeSettings getRolePrivileges(); +} diff --git a/source/test/test-ledger/src/test/java/test/com/jd/blockchain/test/ledger/RolesAuthorizationTest.java b/source/test/test-ledger/src/test/java/test/com/jd/blockchain/test/ledger/RolesAuthorizationTest.java index 2cd06f96..0e015086 100644 --- a/source/test/test-ledger/src/test/java/test/com/jd/blockchain/test/ledger/RolesAuthorizationTest.java +++ b/source/test/test-ledger/src/test/java/test/com/jd/blockchain/test/ledger/RolesAuthorizationTest.java @@ -192,7 +192,7 @@ public class RolesAuthorizationTest { if (roles == null) { roles = new String[0]; } - UserRoles userRoles = ledger.getAdminInfo().getUserRoles().getUserRoles(address); + UserRoles userRoles = ledger.getAdminSettings().getUserRoles().getUserRoles(address); assertNotNull(userRoles); assertEquals(policy, userRoles.getPolicy()); @@ -206,7 +206,7 @@ public class RolesAuthorizationTest { private void assertRolePermissions(LedgerQuery ledger, String roleName, LedgerPermission[] ledgerPermissions, TransactionPermission[] txPermissions) { - RolePrivilegeSettings roles = ledger.getAdminInfo().getRolePrivileges(); + RolePrivilegeSettings roles = ledger.getAdminSettings().getRolePrivileges(); assertTrue(roles.contains(roleName)); RolePrivileges privileges = roles.getRolePrivilege(roleName); assertEquals(ledgerPermissions.length, privileges.getLedgerPrivilege().getPermissionCount());