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. 绿色版MySQL8.0.26安装流程

    下载  5.7 8.0 官网 https://dev.mysql.com/downloads/mysql/ 国内镜像网站 https://developer.aliyun.com/mirror/ ​  ...

  2. CF构造题1600-1800(2)

    H. Hot Black Hot White(COMPFEST 14 - Preliminary Online Mirror (Unrated, ICPC Rules, Teams Preferred ...

  3. printf()和scanf()的*修飾符

    如果你不想預先設置字段的寬度,想通過程序來進行設定,則可以可以使用"*"來進行修飾字段的寬度,前提是在程序中要包含"*"和參數對應的值(比如%*d,那麽參數應該 ...

  4. Python 内置界面开发框架 Tkinter入门篇 乙

    本文大概 1685 个字,阅读需花 6 分钟内容不多, 但也花了一些精力如要交流, 欢迎关注我然后评论区留言 谢谢你的点赞收藏分享 这篇文章属于系列文章<Python 内置界面开发框架 Tkin ...

  5. (Newtonsoft)Json增删改查

    public static class JsonHelper { #region 字段 private static string json; public static string path; # ...

  6. 关于Vue2.x与Es6一些特性

    关于Vue2.x与Es6一些特性 Vue的定位,就是快速开发. 这些特性,我没有过于熟练,导致写的代码质量不高. 过滤器 <template> <div> {{title | ...

  7. 【LeetCode字符串#06】KMP巩固练习:重复子串

    重复的子字符串 力扣题目链接(opens new window) 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...

  8. python新冠疫情分析-世界疫情数据爬取

    事情发展:1.毕业设计是关于疫情数据的可视化展示(基于java,需要做数据可视化,需要做管理员端对数据进行增删改查处理)2.飞起来速度学爬虫,参考了非常多资料,比如b站的黑马爬取(报错,就是在切片那里 ...

  9. Java前后端请求Content-Type与接受方式

    1.Get Get方法没有请求体,所以加不加Content-Type没有意义. 参数通过拼接到Url来加入 url?key=value&key2=value2 SpringMVC后台如何获取参 ...

  10. 队列——queue的用法(及洛谷B3616)

    队列的概念 在说队列之前,先回忆一下栈是什么,我们一般说栈是一个先进后出的数据结构,而队列就是先进先出的数据结构. 队列是定在表的一端进行插入,表的另一端进行删除. 通常,我们称进数据的一端为队尾,出 ...