leveldb.net工作原理:leveldb为键值对数据库,具有增加,删除,查询功能,利用加密链式结构存储和查询数据。

区块(block):在区块链技术中,数据以电子记录的形式被永久储存下来,存放这些电子记录的文件我们就称之为“区块(block)”。区块是按时间顺序一个一个先后生成的,每一个区块记录下它在被创建期间发生的所有价值交换活动,所有区块汇总起来形成一个记录合集。

区块结构有两个非常重要的特点:第一,每一个区块上记录的是上一个区块形成之后、该区块被创建前发生的所有活动,这个特点保证了数据库的完整性。第二,在绝大多数情况下,一旦新区块完成后被加入到区块链的最后,则此区块的数据记录就再也不能改变或删除。这个特点保证了数据库的严谨性,即无法被篡改。

区块+链=时间戳,这是区块链数据库的最大创新点。区块链数据库让全网的记录者在每一个区块中都盖上一个时间戳来记账,表示这个信息是这个时间写入的,形成了一个不可篡改、不可伪造的数据库 。

详细开发代码:

1.创建block结构体

public struct Block(

{

  public int Index{get;set;}  //区块ID

  public string TimeStamp{get;set;}//时间戳

  public string BPM{get;set;}//实际存储内容

  public string Hash{get;set;}//sha256哈希值

  public string PrevHash{get;set;}//前一个区块的sha256哈希值

}

2.生成时间戳 CalculateCUrrentTimeUTC

DateTime startTime = new DateTime(1970,1,1,0,0,0,0);

DateTime nowTime = DateTime.Now;

long unixTiem = (long)Math.Round((nowTime -startTime).TotalMilliseconds,MidpointRounding.AwayFromZero);

return unixTiem;

3.计算区块hash值 CalculateHash(Block block)

string calculationStr = $"{block.Index}{block.TimeStamp}{block.BPM}{block.PrevHash}";

SHA256 sha256Generator = SHA256.Create();

byte[] sha256hashBytes = sha256Generator.ComputeHash(Encoding.UTF8.GetBytes(calculationStr));

StringBuilder sha256StrBuider = new StringBuilder();

foreach(byte @byte in sha256hashBytes)

{

  sha256StrBuider.Append(@byte.Tostring("x2"));

}

return sha256StrBuider.Tosring();

4.检验区块是否有效1index是否递增,2.hash是否正确,3.prehash与旧的区块hash是否匹配 IsBlockValid(Block oldblock,Block newBlock)

if(oldblock.Index + 1 != newBlock.Index)

  return false;

if(oldBlock.Hash != newBlock.PrevHash)

  return false;

if(CalculateHash(newBlock) != newBlock.Hash)

  return false;

return true;

5.生成新的区块GenerateBlock(string oldBlockHash,string BPM,int key)

Block newBlock = new Block()

{

  Index = key,

  TimeStamp = CalculateCurrentTimeUTC(),

  BPM = BPM,

  PrevHash = oldBlockHash

}

newBlock.Hash = CalculateHash(newBlock);

6.leveldb写入WriteDate(string value)

var db = LevelDB.DB.Open("D:\\wenjianjia",new Options{CreateIfMissing = true});

var oldblock = "";

int count = int.Parse(GetDataCount(db).ToString());

int key = count + 1

if(key > 1)

{

  oldblock = GetFirstValue(db,count);

}

else

{

  key = 1;

}

Block block = GenerateBlock(oldblcok,value,key);

db.Put(new WriteOptions(),key,block.Hash);

db.Dispose();

return  block;

7.leveldb查询GetFirstValue(DB db,int key)

string val = db.Get(new ReadOptions(),key).ToString();

return val;

8.leveldb删除DelDataWithKey(int key)

var db = LevelDB.DB.Open("D:\\文件夹",new Options{CreateIfMissing = true});

db.Delete(new WriteOptions(){Sync = true},key);

db.Dispose();

9.统计长度GetDataCount(DB db)

long dataCount  = 0;

Iterator iterator = db.NewIterator(new ReadOptions());

iterator.SeeToFirst();

while(iterator.Valid())

{

  datacount++;

  byte[] valBytes = Convert.FromBase64String(iteartor.Value().Tostring());

  iteartor,Next();

}

return dataCount;

10.统计大小GetDataSize(DB db)]

long dataSize  = 0;

Iterator iterator = db.NewIterator(new ReadOptions());

iterator.SeeToFirst();

while(iterator.Valid())

{

  byte[] valBytes = Convert.FromBase64String(iteartor.Value().Tostring());

  dataSize += valBytes.length

  iteartor,Next();

}

return dataSize;

档案系统区块链集成 leveldb.net集成的更多相关文章

  1. 区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统

    区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统 区块链区块的生成和链接,比特币btc的产生,UTXO的生成和消耗,比特币系统

  2. 微软Coco Blockchain Framework:一键解决企业级区块链三大难题

    近年来,异军突起的“区块链”受到全行业的广泛关注,众多企业级用户在积极拥抱新技术的过程中却面临三大难题:性能.隐私和组织管理.如果不能很好地解决这些“顽固分子”,区块链技术就相对局限,很难发挥出应有的 ...

  3. 基于Tendermint的区块链漂流瓶简单实现

    本文主要借demo介绍基于Tendermint的区块链应用开发,这个demo很简单,主要包含以下功能: 扔漂流瓶 捞漂流瓶 之后投放者和打捞者可以相互传递[加密]信息 代码已上传至github. Te ...

  4. 【转载】格式化存储装置成为 Ext2/Ext3/Ext4 档案系统

    格式化 用系统管理员帐户 (即 root) 身份打「mkfs -t ext2|ext3|ext4 储存装置」: mkfs -t ext3 /dev/sdb5 要格式化档案系统为 Ext2,亦可以直接使 ...

  5. 鲜衣怒马散尽千金,Vue3.0+Tornado6前后端分离集成Web3.0之Metamask钱包区块链虚拟货币三方支付功能

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_219 不得不承认,大多数人并不拥有或者曾经拥有加密货币.是的,Web3.0.加密货币.区块链,对于大多数的互联网用户来说,其实是一 ...

  6. 区块相隔虽一线,俱在支付同冶熔,Vue3.0+Tornado6前后端分离集成Web3.0之Metamask区块链虚拟三方支付功能

    最近几年区块链技术的使用外延持续扩展,去中心化的节点认证机制可以大幅度改进传统的支付结算模式的经营效率,降低交易者的成本并提高收益.但不能否认的是,区块链技术也存在着极大的风险,所谓身怀利器,杀心自起 ...

  7. Datahero inc:区块链方案如何在现有食品溯源系统里实现落地?

    在食品行业,区块链溯源平台的应用,主要是指围绕"从农田到餐桌"的安全管理理念,综合运用区块链技术.大数据技术和二维码技术等前沿技术,具有产品生产企业管理. 产品生产档案 (农药/防 ...

  8. xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成

    xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能 ...

  9. Factom(公证通)--基于区块链的存证系统

    Factom这个Solution在2014年的时候就已经推出了,现在已经2018年了,我才来写这一篇分析文章可能有些迟了,但是它是十分具有参考价值的.因为现阶段来开区块链虽然炒得火热--养猫.养狗.草 ...

  10. 微软刚发布的区块链去中心化身份识别系统DID

    https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653549389&idx=1&sn=158f9feb10d76a ...

随机推荐

  1. java中json字符串与实体类对象相互转换

    1.问题描述 有一个需求是这样的,把实体类转为Json字符串存入redis中,然后再把redis中存放的实体类Json字符串插入数据库中.因此需要涉及到json字符串与实体类对象的相互转换. 2.产生 ...

  2. 小样本利器5. 半监督集各家所长:MixMatch,MixText,UDA,FixMatch

    在前面的几个章节中,我们介绍了几种基于不同半监督假设的模型优化方案,包括Mean Teacher等一致性正则约束,FGM等对抗训练,min Entropy等最小熵原则,以及Mixup等增强方案.虽然出 ...

  3. python之路45 初识django框架

    纯手撸web框架 1.web框架的本质 理解1:连接前端与数据库的中间介质 理解2:socket服务端 2.手写web框架 1.编写socket服务端代码 2.浏览器访问响应无效>>> ...

  4. 01-逻辑仿真工具VCS使用

    1 逻辑仿真工具VCS的使用 在书写完成RTL代码之后,确保自己书写的代码和自己想要的逻辑是一致的. VCS是synopsys公司下的的仿真工具. 1 VCS仿真过程 编译-->仿真--> ...

  5. Linux c 获取U盘挂载路径

    思路: 1.执行df -h 找到 带mnt的行.将结果存入一个文件中. system("df -h |grep mnt >./extendevinfo.txt"); 也可以直 ...

  6. 图文并茂记录下重新配置Win10系统Flutter环境--内含Android Studio 下载安装教程

    Flutter 是什么 Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.Flutter 开源.免费,拥 ...

  7. Ionic 设置全局变量,三种方法设置图片一种是直接增加,一种是replace,第三种是管道和第二种类似

  8. .NET 团队 更新了 .NET 语言策略

    2023年2月6日 ,.NET团队在官方博客上发布了.NET 语言策略的更新文章,具体参见 https://devblogs.microsoft.com/dotnet/update-to-the-do ...

  9. java_web案例文件下载案例

    目的:完成javaweb的文件下载 <!--如果想要一个a标签点击后不论文件类型,都需要弹出下载,保存框:--><!--我们就需要创建一个servlet,让这个a标签指向servle ...

  10. 学习Java Day13

    今天学习了对象与类,类是构造对象的模板或蓝图.由类构造对象的过程称为创建类的实例.类与类之间的关系有依赖,聚合,继承. 然后学习了如何构造对象.