区块链

  • N5_322151
    了解作者
  • 3.1MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-03 15:01
    上传日期
区块链
blockchain-master.zip
内容介绍
package test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import edu.ictt.blockchain.Block.block.Block; import edu.ictt.blockchain.Block.block.BlockBody; import edu.ictt.blockchain.Block.block.BlockHeader; import edu.ictt.blockchain.Block.check.DbBlockChecker; import edu.ictt.blockchain.Block.check.GRecordChecker; import edu.ictt.blockchain.Block.check.NewRecordChecker; import edu.ictt.blockchain.Block.db.ConnectRocksDB; import edu.ictt.blockchain.Block.db.DbInitConfig; import edu.ictt.blockchain.Block.db.RecoverLocalRecord; import edu.ictt.blockchain.Block.db.RocksDbStoreImpl; import edu.ictt.blockchain.Block.generatorUtil.GenerateBlock; import edu.ictt.blockchain.Block.generatorUtil.GenerateNewBlock; import edu.ictt.blockchain.Block.generatorUtil.GenerateNewRecord; import edu.ictt.blockchain.Block.generatorUtil.GenerateRecord; import edu.ictt.blockchain.Block.me.MerkleTree; import edu.ictt.blockchain.Block.merkle.MerkleHash; import edu.ictt.blockchain.Block.merkle.MerkleNode; import edu.ictt.blockchain.Block.record.*; import edu.ictt.blockchain.common.CommonUtil; import edu.ictt.blockchain.common.Const; import edu.ictt.blockchain.common.FastJsonUtil; import edu.ictt.blockchain.common.PairKey; import edu.ictt.blockchain.common.SHA256; import edu.ictt.blockchain.common.algorithm.ECDSAAlgorithm; import edu.ictt.blockchain.common.util.DerbyDBUtil; import edu.ictt.blockchain.core.manager.DbBlockManager; import edu.ictt.blockchain.core.manager.ManageMessage; import edu.ictt.blockchain.socket.body.common.BaseBody; import edu.ictt.blockchain.socket.body.common.StateBody; import edu.ictt.blockchain.socket.body.lowerbody.RecordBody; import edu.ictt.blockchain.socket.body.lowerbody.RpcBlockBody; import edu.ictt.blockchain.socket.packet.BlockPacket; import edu.ictt.blockchain.socket.packet.PacketBuilder; import edu.ictt.blockchain.socket.packet.PacketType; import edu.ictt.blockchain.socket.pbft.VoteType; import edu.ictt.blockchain.socket.pbft.msg.VoteMsg; import edu.ictt.blockchain.socket.pbft.msg.VotePreMsg; import edu.ictt.blockchain.socket.pbft.queue.BaseMsgQueue; import edu.ictt.blockchain.socket.pbft.queue.CommitMsgQueue; import edu.ictt.blockchain.socket.record.queue.GRecordQueue; import edu.ictt.blockchainmanager.groupmodel.NodeState; import org.apache.coyote.http11.filters.VoidInputFilter; import org.apache.log4j.Logger; import org.junit.Test; import org.rocksdb.Options; import org.rocksdb.RocksDB; import org.rocksdb.RocksDBException; import org.slf4j.LoggerFactory; import org.tio.utils.json.Json; import static edu.ictt.blockchain.common.algorithm.ECDSAAlgorithm.generatePrivateKey; import static edu.ictt.blockchain.common.algorithm.ECDSAAlgorithm.generatePublicKey; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class PartTest { //生成并校验nerrecord:成绩记录 @Test public void NewRCTest() throws UnsupportedEncodingException { GenerateNewRecord geneRecord = new GenerateNewRecord(); NewRecord record = geneRecord.generateNewGRecord(); System.out.println("生成的记录为:" + record.toString()); NewRecordChecker nChecker = new NewRecordChecker(); if(nChecker.checkNewRecord(record)==0) System.out.println("记录校验成功"); //对记录进行修改并再次校验 /*record.setComment("我被修改过了"); record.getGradeInfo().setGrade(95); if(nChecker.checkNewRecord(record)==0) { System.out.println("记录校验成功"); }else { System.out.println("校验结果为:" + nChecker.checkNewRecord(record)); System.out.println("记录校验失败,记录失效"); }*/ //记录进一步篡改:教师级别的篡改,将公钥和签名全都换成自己的 String tPriKey = generatePrivateKey(); String tPubKey = generatePublicKey(tPriKey,true); record.getGradeInfo().setGrade(96); String grade = FastJsonUtil.toJSONString(record.getGradeInfo().getSchoolInfo()) + record.getGradeInfo().getFaculthId() + record.getGradeInfo().getMajorId() + record.getGradeInfo().getCourseId() + record.getGradeInfo().getTeacherId()+record.getGradeInfo().getStudentId() + record.getGradeInfo().getGrade(); String teacherSign = ECDSAAlgorithm.sign(tPriKey, grade); record.getGradeInfo().setTeacherSign(teacherSign); record.getGradeInfo().setTeacherPubkey(tPubKey); System.out.println("篡改后的记录为:" + record); if(nChecker.checkNewRecord(record)==0) { System.out.println("记录校验成功"); }else { System.out.println("校验结果为:" + nChecker.checkNewRecord(record)); System.out.println("记录校验失败,记录失效"); } //更进一步,如果学院级别的进行了如上教师级别的修改,那么目前的校验是无法校验出来的。需要在校验前加一些课程和教师及教师和公钥的对照检查。 }; //生成并校验nerrecord:学位记录 @Test public void NewRCTest2() throws UnsupportedEncodingException { GenerateNewRecord geneRecord = new GenerateNewRecord(); NewRecord record = geneRecord.generateNewDRecord(); System.out.println("生成的记录为:" + record.toString()); NewRecordChecker nChecker = new NewRecordChecker(); if(nChecker.checkNewRecord(record)==0) System.out.println("记录校验成功"); //对记录进行修改并再次校验 record.setComment("我被修改过了"); if(nChecker.checkNewRecord(record)==0) { System.out.println("记录校验成功"); }else { System.out.println("校验结果为:" + nChecker.checkNewRecord(record)); System.out.println("记录校验失败,记录失效"); } //更进一步,如果学校级别的进行了别的修改,那么目前的校验是无法校验出来的。需要在校验前加一些对照检查。 }; //newRecord生成区块并校验 @Test public void NewBlockTest() throws UnsupportedEncodingException { GenerateNewBlock generateNewBlock = new GenerateNewBlock(); Block block = generateNewBlock.GenerateNewBlock(); System.out.println("生成的区块为:" + block); DbBlockChecker dChecker = new DbBlockChecker(); //此处checkAll只校验了sign和merkelroot //if(dChecker.checkAll(block)==0) System.out.println("区块校验成功"); //对区块修改并再次校验 List<NewRecord> records = block.getBlockBody().getRecordList(); records.get(0).getGradeInfo().setGrade(100); //if(dChecker.checkAll(block)==0) { // System.out.println("区块校验成功"); //}else { // System.out.println("校验结果为:" + dChecker.checkAll(block)); // System.out.println("区块校验失败,区块失效"); //} //更进一步,如果学校级别的进行了别的修改,那么目前的校验是无法校验出来的。需要在校验前加一些对照检查。 } @Test public void saveNewBlock() throws UnsupportedEncodingException, RocksDBException { GenerateNewBlock generateNewBlock = new GenerateNewBlock(); Block block = generateNewBlock.GenerateNewBlock(); String jsonStr = JSON.toJSONString(block); ConnectRocksDB rocksDB = new ConnectRocksDB(1); rocksDB.getRocksDbStore().put("0", jsonStr); rocksDB.getRocksDbStore().put("key_first_block", jsonStr); rocksDB.getRocksDbStore().put("key_last_block", jsonStr); System.out.println(jsonStr); System.out.println("save this block success"); } @Test public void readNewBlock() throws RocksDBException { ConnectRocksDB rocksDB = new ConnectRocksDB(1); System.out.println("read block" + 0 + " : " + JSON.parseObject(rocksDB.getRocksDbStore().get("0"), new TypeReference<Block>(){})); } @Test public void newmerkle(){ Block block=GenerateBlock.generateBlock(1); DbBlockChecker blockChecker=new DbBlockChecker(); System.out.println(blockChecker.checkMerkleRoot(block)); } @Test public void merkle(){ GradeRecord r1=Gen
评论
    相关推荐
    • 区块链
      区块链Python 专案 课堂项目的第1部分 基本设置和工作证明(basic_block_gp) 第1部分带回家的项目 客户端矿工(client_mining_p) 课堂项目的第二部分 基本交易(basic_transactions_gp) 第2部分带回家的项目 ...
    • 私人区块链
      私人区块链应用 您以区块链开发人员的身份开始旅程,此项目可让您证明您已熟悉区块链平台的基本概念。 像这样的概念:-区块-区块链-钱包-区块链身份-存在证明 您是否需要描述区块链框架中一些最重要的组件,为什么不...
    • 区块链
      区块链 运行权限证明区块链 权限证明(PoA)算法通常用于私有区块链网络,因为它需要预先批准或投票批准可以批准交易(封签)的账户地址。 由于必须批准帐户,因此我们将生成两个具有新帐户地址的新节点,这些地址将...
    • 区块链白皮书
      区块链白皮书合集,内容比较全,2018新版。区块链白皮书合集,内容比较全,2018新版。
    • 区块链
      区块链
    • 区块链
      区块链
    • 区块链技术
      .希望进行区块链开发的程序员。 ·希望投资或参与区块链项目的人员。 ·对区块链感兴趣的爱好者
    • 区块链
      blochchain_prot 该项目基于hyperledger fabric 2.1版本,有关详细说明,请访问 。 您也可以在该手册。
    • 区块链
      区块链Python 专案 课堂项目的第1部分 基本设置和工作证明(basic_block_gp) 第1部分带回家的项目 客户端矿工(client_mining_p) 课堂项目的第二部分 基本交易(basic_transactions_gp) 第2部分带回家的项目 ...
    • GaussDB_100_1.0.1-DATABASE-REDHAT-64bit.tar.gz
      guassdb100在redhat上安装包,单机部署的包,安装步骤请看我的文中介绍,经过大量实验搭建总结出来的文档