@@ -21,7 +21,7 @@ public interface DataCodes { | |||
public static final int BLOCK_GENESIS = 0x120; | |||
public static final int DATA_SNAPSHOT = 0x130; | |||
// public static final int LEDGER_ADMIN_DATA = 0x131; | |||
public static final int TX = 0x200; | |||
@@ -59,16 +59,15 @@ public interface DataCodes { | |||
public static final int ENUM_TX_PERMISSION = 0x401; | |||
public static final int ENUM_LEDGER_PERMISSION = 0x402; | |||
public static final int ENUM_MULTI_ROLES_POLICY = 0x403; | |||
public static final int PRIVILEGE_SET = 0x410; | |||
public static final int ROLE_SET = 0x411; | |||
// contract types of metadata; | |||
public static final int METADATA = 0x600; | |||
public static final int METADATA_V2 = 0x601; | |||
public static final int METADATA_INIT_SETTING = 0x610; | |||
public static final int METADATA_INIT_PROPOSAL = 0x611; | |||
@@ -79,6 +78,10 @@ public interface DataCodes { | |||
public static final int METADATA_CONSENSUS_PARTICIPANT = 0x621; | |||
public static final int METADATA_SECURITY_INIT_SETTING = 0x622; | |||
public static final int METADATA_ROLE_INIT_SETTING = 0x623; | |||
// public static final int METADATA_CONSENSUS_NODE = 0x630; | |||
// | |||
// public static final int METADATA_CONSENSUS_SETTING = 0x631; | |||
@@ -37,7 +37,7 @@ import com.jd.blockchain.ledger.core.LedgerAdminDataset; | |||
import com.jd.blockchain.ledger.core.LedgerConfiguration; | |||
import com.jd.blockchain.storage.service.utils.MemoryKVStorage; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.net.NetworkAddress; | |||
@@ -51,7 +51,7 @@ public class LedgerAdminDatasetTest { | |||
@Test | |||
public void testSerialization() { | |||
String keyPrefix = ""; | |||
LedgerInitSettingData initSetting = new LedgerInitSettingData(); | |||
LedgerInitData initSetting = new LedgerInitData(); | |||
ConsensusParticipantData[] parties = new ConsensusParticipantData[5]; | |||
BlockchainKeypair[] bckeys = new BlockchainKeypair[parties.length]; | |||
for (int i = 0; i < parties.length; i++) { | |||
@@ -34,7 +34,7 @@ import com.jd.blockchain.ledger.core.LedgerTransactionalEditor; | |||
import com.jd.blockchain.ledger.core.UserAccount; | |||
import com.jd.blockchain.storage.service.utils.MemoryKVStorage; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.io.BytesUtils; | |||
import com.jd.blockchain.utils.net.NetworkAddress; | |||
@@ -25,7 +25,7 @@ import com.jd.blockchain.ledger.core.CryptoConfig; | |||
import com.jd.blockchain.ledger.core.ParticipantCertData; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitOpTemplate; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.net.NetworkAddress; | |||
@@ -36,7 +36,7 @@ public class LedgerInitOperationTest { | |||
byte[] seed = null; | |||
byte[] csSysSettingBytes = null; | |||
LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); | |||
LedgerInitData ledgerInitSettingData = new LedgerInitData(); | |||
@Before | |||
public void initCfg() { | |||
@@ -24,14 +24,14 @@ import com.jd.blockchain.ledger.core.CryptoConfig; | |||
import com.jd.blockchain.ledger.core.ParticipantCertData; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitOpTemplate; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.net.NetworkAddress; | |||
public class LedgerInitSettingSerializeTest { | |||
byte[] seed = null; | |||
byte[] csSysSettingBytes = null; | |||
LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); | |||
LedgerInitData ledgerInitSettingData = new LedgerInitData(); | |||
LedgerInitOpTemplate template = new LedgerInitOpTemplate(); | |||
private static final String[] SUPPORTED_PROVIDERS = { ClassicCryptoService.class.getName(), | |||
@@ -44,7 +44,7 @@ import com.jd.blockchain.ledger.core.UserAccount; | |||
import com.jd.blockchain.ledger.core.UserAccountSet; | |||
import com.jd.blockchain.storage.service.utils.MemoryKVStorage; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.transaction.TxBuilder; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.io.BytesUtils; | |||
@@ -202,7 +202,7 @@ public class LedgerManagerTest { | |||
defCryptoSetting.setAutoVerifyHash(true); | |||
defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); | |||
LedgerInitSettingData initSetting = new LedgerInitSettingData(); | |||
LedgerInitData initSetting = new LedgerInitData(); | |||
initSetting.setLedgerSeed(BytesUtils.toBytes("A Test Ledger seed!", "UTF-8")); | |||
initSetting.setCryptoSetting(defCryptoSetting); | |||
@@ -21,7 +21,7 @@ import com.jd.blockchain.ledger.TransactionResponse; | |||
import com.jd.blockchain.ledger.core.CryptoConfig; | |||
import com.jd.blockchain.ledger.core.TransactionStagedSnapshot; | |||
import com.jd.blockchain.transaction.ConsensusParticipantData; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.transaction.TransactionService; | |||
import com.jd.blockchain.transaction.TxBuilder; | |||
import com.jd.blockchain.utils.Bytes; | |||
@@ -62,7 +62,7 @@ public class LedgerTestUtils { | |||
defCryptoSetting.setAutoVerifyHash(true); | |||
defCryptoSetting.setHashAlgorithm(ClassicAlgorithm.SHA256); | |||
LedgerInitSettingData initSetting = new LedgerInitSettingData(); | |||
LedgerInitData initSetting = new LedgerInitData(); | |||
initSetting.setLedgerSeed(BytesUtils.toBytes("A Test Ledger seed!", "UTF-8")); | |||
initSetting.setCryptoSetting(defCryptoSetting); | |||
@@ -0,0 +1,48 @@ | |||
package com.jd.blockchain.ledger; | |||
public class RoleInitData implements RoleInitSettings { | |||
private String roleName; | |||
private LedgerPermission[] ledgerPermissions; | |||
private TransactionPermission[] transactionPermissions; | |||
public RoleInitData() { | |||
} | |||
public RoleInitData(String roleName, LedgerPermission[] ledgerPermissions, | |||
TransactionPermission[] transactionPermissions) { | |||
this.roleName = roleName; | |||
this.ledgerPermissions = ledgerPermissions; | |||
this.transactionPermissions = transactionPermissions; | |||
} | |||
@Override | |||
public String getRoleName() { | |||
return roleName; | |||
} | |||
@Override | |||
public LedgerPermission[] getLedgerPermissions() { | |||
return ledgerPermissions; | |||
} | |||
@Override | |||
public TransactionPermission[] getTransactionPermissions() { | |||
return transactionPermissions; | |||
} | |||
public void setRoleName(String roleName) { | |||
this.roleName = roleName; | |||
} | |||
public void setLedgerPermissions(LedgerPermission[] ledgerPermissions) { | |||
this.ledgerPermissions = ledgerPermissions; | |||
} | |||
public void setTransactionPermissions(TransactionPermission[] transactionPermissions) { | |||
this.transactionPermissions = transactionPermissions; | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
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; | |||
/** | |||
* 角色参数设置; | |||
* | |||
* @author huanghaiquan | |||
* | |||
*/ | |||
@DataContract(code = DataCodes.METADATA_ROLE_INIT_SETTING) | |||
public interface RoleInitSettings { | |||
/** | |||
* 角色名称; | |||
* | |||
* @return | |||
*/ | |||
@DataField(order = 0, primitiveType = PrimitiveType.TEXT) | |||
String getRoleName(); | |||
/** | |||
* 角色的账本权限; | |||
* | |||
* @return | |||
*/ | |||
@DataField(order = 1, refEnum = true, list = true) | |||
LedgerPermission[] getLedgerPermissions(); | |||
/** | |||
* 角色的交易权限; | |||
* | |||
* @return | |||
*/ | |||
@DataField(order = 2, refEnum = true, list = true) | |||
TransactionPermission[] getTransactionPermissions(); | |||
} |
@@ -0,0 +1,28 @@ | |||
package com.jd.blockchain.ledger; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
public class SecurityInitData implements SecurityInitSettings { | |||
private List<RoleInitSettings> roles = new ArrayList<RoleInitSettings>(); | |||
@Override | |||
public RoleInitData[] getRoles() { | |||
return roles.toArray(new RoleInitData[roles.size()]); | |||
} | |||
public void setRoles(RoleInitData[] roles) { | |||
List<RoleInitSettings> list = new ArrayList<RoleInitSettings>(); | |||
for (RoleInitSettings r : roles) { | |||
list.add(r); | |||
} | |||
this.roles = list; | |||
} | |||
public void add(String roleName, LedgerPermission[] ledgerPermissions, | |||
TransactionPermission[] transactionPermissions) { | |||
RoleInitData roleInitData = new RoleInitData(roleName, ledgerPermissions, transactionPermissions); | |||
roles.add(roleInitData); | |||
} | |||
} |
@@ -0,0 +1,24 @@ | |||
package com.jd.blockchain.ledger; | |||
import com.jd.blockchain.binaryproto.DataContract; | |||
import com.jd.blockchain.binaryproto.DataField; | |||
import com.jd.blockchain.consts.DataCodes; | |||
/** | |||
* 安全权限的初始化; | |||
* | |||
* @author huanghaiquan | |||
* | |||
*/ | |||
@DataContract(code = DataCodes.METADATA_SECURITY_INIT_SETTING) | |||
public interface SecurityInitSettings { | |||
/** | |||
* 角色列表; | |||
* | |||
* @return | |||
*/ | |||
@DataField(order = 0, refContract = true, list = true) | |||
RoleInitSettings[] getRoles(); | |||
} |
@@ -5,7 +5,7 @@ import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.ledger.CryptoSetting; | |||
import com.jd.blockchain.ledger.LedgerInitSetting; | |||
public class LedgerInitSettingData implements LedgerInitSetting { | |||
public class LedgerInitData implements LedgerInitSetting { | |||
private byte[] ledgerSeed; | |||
@@ -0,0 +1,82 @@ | |||
package test.com.jd.blockchain.ledger; | |||
import static org.junit.Assert.assertArrayEquals; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertNotNull; | |||
import org.junit.Test; | |||
import com.jd.blockchain.binaryproto.BinaryProtocol; | |||
import com.jd.blockchain.ledger.LedgerPermission; | |||
import com.jd.blockchain.ledger.SecurityInitData; | |||
import com.jd.blockchain.ledger.SecurityInitSettings; | |||
import com.jd.blockchain.ledger.TransactionPermission; | |||
import com.jd.blockchain.utils.serialize.json.JSONSerializeUtils; | |||
public class SecurityInitDataTest { | |||
@Test | |||
public void testEnumsSerialization() { | |||
LedgerPermission[] permissions = JSONSerializeUtils.deserializeFromJSON("[\"REGISTER_USER\",\"REGISTER_DATA_ACCOUNT\"]", LedgerPermission[].class); | |||
assertNotNull(permissions); | |||
assertEquals(2, permissions.length); | |||
assertEquals(LedgerPermission.REGISTER_USER, permissions[0]); | |||
assertEquals(LedgerPermission.REGISTER_DATA_ACCOUNT, permissions[1]); | |||
LedgerPermission[] permissions2 = JSONSerializeUtils.deserializeFromJSON("['REGISTER_USER', 'REGISTER_DATA_ACCOUNT']", LedgerPermission[].class); | |||
assertNotNull(permissions2); | |||
assertEquals(2, permissions2.length); | |||
assertEquals(LedgerPermission.REGISTER_USER, permissions2[0]); | |||
assertEquals(LedgerPermission.REGISTER_DATA_ACCOUNT, permissions2[1]); | |||
} | |||
@Test | |||
public void testSecurityInitDataSerialization() { | |||
SecurityInitData securityInitData = new SecurityInitData(); | |||
securityInitData.add("DEFAULT", | |||
new LedgerPermission[] { LedgerPermission.REGISTER_USER, LedgerPermission.REGISTER_DATA_ACCOUNT }, | |||
new TransactionPermission[] { TransactionPermission.CONTRACT_OPERATION }); | |||
securityInitData.add("ADMIN", | |||
new LedgerPermission[] { LedgerPermission.REGISTER_USER, LedgerPermission.REGISTER_DATA_ACCOUNT }, | |||
new TransactionPermission[] { TransactionPermission.DIRECT_OPERATION, | |||
TransactionPermission.CONTRACT_OPERATION }); | |||
securityInitData.add("R1", | |||
new LedgerPermission[] { LedgerPermission.REGISTER_USER, LedgerPermission.REGISTER_DATA_ACCOUNT }, | |||
null); | |||
securityInitData.add("R2", null, new TransactionPermission[] { TransactionPermission.DIRECT_OPERATION, | |||
TransactionPermission.CONTRACT_OPERATION }); | |||
String json = JSONSerializeUtils.serializeToJSON(securityInitData, true); | |||
System.out.println("----------- JSON ------------"); | |||
System.out.println(json); | |||
System.out.println("-----------------------"); | |||
SecurityInitData desSecurityInitData = JSONSerializeUtils.deserializeFromJSON(json, SecurityInitData.class); | |||
String json2 = JSONSerializeUtils.serializeToJSON(desSecurityInitData, true); | |||
System.out.println("----------- JSON2 ------------"); | |||
System.out.println(json2); | |||
System.out.println("-----------------------"); | |||
assertEquals(json, json2); | |||
byte[] bytes = BinaryProtocol.encode(securityInitData, SecurityInitSettings.class); | |||
SecurityInitSettings securityInitData2 = BinaryProtocol.decode(bytes); | |||
byte[] bytes2 = BinaryProtocol.encode(securityInitData2, SecurityInitSettings.class); | |||
assertArrayEquals(bytes, bytes2); | |||
assertEquals(4, securityInitData2.getRoles().length); | |||
assertEquals(securityInitData.getRoles().length, securityInitData2.getRoles().length); | |||
assertEquals(LedgerPermission.REGISTER_USER, securityInitData2.getRoles()[1].getLedgerPermissions()[0]); | |||
assertEquals(securityInitData.getRoles()[1].getLedgerPermissions()[0], securityInitData2.getRoles()[1].getLedgerPermissions()[0]); | |||
assertEquals(securityInitData.getRoles()[1].getLedgerPermissions()[1], securityInitData2.getRoles()[1].getLedgerPermissions()[1]); | |||
} | |||
} |
@@ -1,96 +1,96 @@ | |||
package com.jd.blockchain.sdk; | |||
import com.jd.blockchain.consensus.ConsensusSettings; | |||
import com.jd.blockchain.crypto.HashDigest; | |||
import com.jd.blockchain.ledger.CryptoSetting; | |||
import com.jd.blockchain.ledger.ParticipantNode; | |||
/** | |||
* 账本初始化配置 | |||
* | |||
* @author shaozhuguang | |||
* @date 2019-04-23 | |||
* @since 1.0.0 | |||
* | |||
*/ | |||
public class LedgerInitSettings { | |||
/** | |||
* 账本初始化种子 | |||
*/ | |||
private String seed; | |||
/** | |||
* 共识参与方的默克尔树的根; | |||
*/ | |||
private HashDigest participantsHash; | |||
/** | |||
* 算法配置 | |||
*/ | |||
private CryptoSetting cryptoSetting; | |||
/** | |||
* 共识协议 | |||
*/ | |||
private String consensusProtocol; | |||
/** | |||
* 共识配置 | |||
*/ | |||
private ConsensusSettings consensusSettings; | |||
/** | |||
* 共识参与方 | |||
*/ | |||
private ParticipantNode[] participantNodes; | |||
public void setSeed(String seed) { | |||
this.seed = seed; | |||
} | |||
public String getSeed() { | |||
return seed; | |||
} | |||
public HashDigest getParticipantsHash() { | |||
return participantsHash; | |||
} | |||
public void setParticipantsHash(HashDigest participantsHash) { | |||
this.participantsHash = participantsHash; | |||
} | |||
public CryptoSetting getCryptoSetting() { | |||
return cryptoSetting; | |||
} | |||
public void setCryptoSetting(CryptoSetting cryptoSetting) { | |||
this.cryptoSetting = cryptoSetting; | |||
} | |||
public String getConsensusProtocol() { | |||
return consensusProtocol; | |||
} | |||
public void setConsensusProtocol(String consensusProtocol) { | |||
this.consensusProtocol = consensusProtocol; | |||
} | |||
public ConsensusSettings getConsensusSettings() { | |||
return consensusSettings; | |||
} | |||
public void setConsensusSettings(ConsensusSettings consensusSettings) { | |||
this.consensusSettings = consensusSettings; | |||
} | |||
public ParticipantNode[] getParticipantNodes() { | |||
return participantNodes; | |||
} | |||
public void setParticipantNodes(ParticipantNode[] participantNodes) { | |||
this.participantNodes = participantNodes; | |||
} | |||
} | |||
//package com.jd.blockchain.sdk; | |||
// | |||
// | |||
//import com.jd.blockchain.consensus.ConsensusSettings; | |||
//import com.jd.blockchain.crypto.HashDigest; | |||
//import com.jd.blockchain.ledger.CryptoSetting; | |||
//import com.jd.blockchain.ledger.ParticipantNode; | |||
// | |||
///** | |||
// * 账本初始化配置 | |||
// * | |||
// * @author shaozhuguang | |||
// * @date 2019-04-23 | |||
// * @since 1.0.0 | |||
// * | |||
// */ | |||
//public class LedgerInitSettings { | |||
// | |||
// /** | |||
// * 账本初始化种子 | |||
// */ | |||
// private String seed; | |||
// | |||
// /** | |||
// * 共识参与方的默克尔树的根; | |||
// */ | |||
// private HashDigest participantsHash; | |||
// | |||
// /** | |||
// * 算法配置 | |||
// */ | |||
// private CryptoSetting cryptoSetting; | |||
// | |||
// /** | |||
// * 共识协议 | |||
// */ | |||
// private String consensusProtocol; | |||
// | |||
// /** | |||
// * 共识配置 | |||
// */ | |||
// private ConsensusSettings consensusSettings; | |||
// | |||
// /** | |||
// * 共识参与方 | |||
// */ | |||
// private ParticipantNode[] participantNodes; | |||
// | |||
// public void setSeed(String seed) { | |||
// this.seed = seed; | |||
// } | |||
// | |||
// public String getSeed() { | |||
// return seed; | |||
// } | |||
// | |||
// public HashDigest getParticipantsHash() { | |||
// return participantsHash; | |||
// } | |||
// | |||
// public void setParticipantsHash(HashDigest participantsHash) { | |||
// this.participantsHash = participantsHash; | |||
// } | |||
// | |||
// public CryptoSetting getCryptoSetting() { | |||
// return cryptoSetting; | |||
// } | |||
// | |||
// public void setCryptoSetting(CryptoSetting cryptoSetting) { | |||
// this.cryptoSetting = cryptoSetting; | |||
// } | |||
// | |||
// public String getConsensusProtocol() { | |||
// return consensusProtocol; | |||
// } | |||
// | |||
// public void setConsensusProtocol(String consensusProtocol) { | |||
// this.consensusProtocol = consensusProtocol; | |||
// } | |||
// | |||
// public ConsensusSettings getConsensusSettings() { | |||
// return consensusSettings; | |||
// } | |||
// | |||
// public void setConsensusSettings(ConsensusSettings consensusSettings) { | |||
// this.consensusSettings = consensusSettings; | |||
// } | |||
// | |||
// public ParticipantNode[] getParticipantNodes() { | |||
// return participantNodes; | |||
// } | |||
// | |||
// public void setParticipantNodes(ParticipantNode[] participantNodes) { | |||
// this.participantNodes = participantNodes; | |||
// } | |||
//} |
@@ -37,7 +37,7 @@ import com.jd.blockchain.transaction.DataAccountKVSetOpTemplate; | |||
import com.jd.blockchain.transaction.DataAccountRegisterOpTemplate; | |||
import com.jd.blockchain.transaction.KVData; | |||
import com.jd.blockchain.transaction.LedgerInitOpTemplate; | |||
import com.jd.blockchain.transaction.LedgerInitSettingData; | |||
import com.jd.blockchain.transaction.LedgerInitData; | |||
import com.jd.blockchain.transaction.UserRegisterOpTemplate; | |||
import com.jd.blockchain.utils.Bytes; | |||
import com.jd.blockchain.utils.codec.Base58Utils; | |||
@@ -173,7 +173,7 @@ public class ClientResolveUtil { | |||
public static LedgerInitOperation convertLedgerInitOperation(JSONObject jsonObject) { | |||
JSONObject legerInitObj = jsonObject.getJSONObject("initSetting"); | |||
LedgerInitSettingData ledgerInitSettingData = new LedgerInitSettingData(); | |||
LedgerInitData ledgerInitSettingData = new LedgerInitData(); | |||
String ledgerSeedStr = legerInitObj.getString("ledgerSeed"); | |||
// 种子需要做Base64转换 | |||
@@ -328,7 +328,7 @@ public class LedgerInitializeWebController implements LedgerInitProcess, LedgerI | |||
public LedgerInitProposal prepareLocalPermission(int currentId, PrivKey privKey, LedgerInitProperties ledgerProps, | |||
ConsensusSettings csSettings, CryptoSetting cryptoSetting) { | |||
// 创建初始化配置; | |||
LedgerInitSettingData initSetting = new LedgerInitSettingData(); | |||
LedgerInitData initSetting = new LedgerInitData(); | |||
initSetting.setLedgerSeed(ledgerProps.getLedgerSeed()); | |||
initSetting.setCryptoSetting(cryptoSetting); | |||
@@ -203,7 +203,7 @@ public class MockerLedgerInitializer implements LedgerInitProcess, LedgerInitCon | |||
public LedgerInitProposal prepareLocalProposal(int currentId, PrivKey privKey, LedgerInitProperties ledgerProps, | |||
ConsensusSettings csSettings, CryptoSetting cryptoSetting) { | |||
// 创建初始化配置; | |||
LedgerInitSettingData initSetting = new LedgerInitSettingData(); | |||
LedgerInitData initSetting = new LedgerInitData(); | |||
initSetting.setLedgerSeed(ledgerProps.getLedgerSeed()); | |||
initSetting.setCryptoSetting(cryptoSetting); | |||