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. [python] tensorflow中的argmax()函数argmax()函数

    首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量.当tensor为矩阵返回向量,tensor为向 ...

  2. day02-Promise

    Promise 1.Promise基本介绍 Promise是异步编程的一种解决方案,可以解决传统Ajax回调函数嵌套问题. 传统的Ajax异步调用在需要多个操作的时候,会导致多个回调函数嵌套,导致代码 ...

  3. JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 本地缓存变身分布式集群缓存,打破本地缓存天花板

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 上一篇文章中,我们知晓了如何在项目中通 ...

  4. [WPF]颜色主题功能

    效果 点击选择皮肤颜色 代码 public enum Themes { Blue, Gray, Orange } /// <summary> /// 主题颜色管理类 /// </su ...

  5. 小H的小屋

    题解 [NOI2004]小H的小屋 前记 又鸽了好久,这回可要努力更新了 2019.6.2,痛下杀心,把电脑上所有的游戏都删掉了,提前160天奋力备考NOIP.目标:A类省队! 我是传送门 题解 这道 ...

  6. ionic+vue+capacitor系列笔记--capacitor3.X和2.X+android自定义capacitor的JSbridge插件注册与使用(不同版本注册方式不同,返回值格式也不同,使用方法也不同)

    经过我的多番折腾,终于搞明白了这个东西的用法,不同版本的注册方法,使用方法都不一样,现在把这个折腾的结果记录下来,造福大家~ 首先编写一个类,然后注册,注意,这个和2.x不一样,2.x的时候我们会使用 ...

  7. Tomcat 解决一些基本配置问题。

    解决Tomcat进入manger管理界面需要账号密码问题 第一步,打开Tomcat的conf文件夹 进入tomcat-users.xml文件 在 标签里面复制以下内容 <role rolenam ...

  8. IDEA插件:lombok

    1 安装插件lombok File => Settings => Plugins => Marketplace.在 Marketplace 中搜索 lombok 并安装,安装成功后 ...

  9. 生成式AI对业务流程有哪些影响?企业如何应用生成式AI?一文看懂

    集成与融合类ChatGPT工具与技术,以生成式AI变革业务流程 ChatGPT背后的生成式AI,聊聊生成式AI如何改变业务流程 ChatGPT月活用户过亿,生成式AI对组织的业务流程有哪些影响? 生成 ...

  10. SqlServer Express 自动备份数据库(没有sql代理服务的情况下)

    一.由于Express版本的SQLServer没有SQL代理服务(SQLSERVERAGENT),所以就不能通过SQLServer作业来进行自动备份了,那么我们可以用Windows计划任务来定时处理 ...