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. LeetCode HOT 100:验证二叉搜索树(从左右子树获取信息进行推导)

    题目:98. 验证二叉搜索树 题目描述: 给你一个二叉树,让你判断该二叉树是否是二叉搜索树.什么是二叉搜索树呢?就是某一个节点的左子树上的所有节点的值都小于当前节点,右子树上的所有节点值都大于当前节点 ...

  2. CVE-2020-13933

    漏洞名称 Apache Shiro 身份验证绕过漏洞复现CVE-2020-13933 利用条件 Apache Shiro < 1.6.0 漏洞原理 Apache Shiro是一个强大且易用的Ja ...

  3. CVE-2020-1957

    漏洞名称 Apache Shiro 认证绕过漏洞 CVE-2020-1957 利用条件 Apache Shiro < 1.5.1 漏洞原理 Apache Shiro 是一款开源安全框架,提供身份 ...

  4. ABP Framework 手动升级指南:从6.0.1升级到7.0.0

    ABP 7.0.0 正式版已经发布,ABP-Framework-All-In-One 项目同步升级. LeptonX Lite Theme 目前还没有包含在源码解决方案中,还是以 Nuget 包提供, ...

  5. Python语法与基本数据类型

    Python语法与基本数据类型 一.Python语法之注释 1.注释 注释就是对一段代码的解释说明 2.注释的写法 1.单行注释:解释说明的文字前面加#号, pycharm中有快捷键 ctrl+? 2 ...

  6. Random概述和基本使用-Random生成指定范围的随机数

    Random概述和基本使用 什么是Random类 此类的实例用于生成伪随机数. 例如,以下代码使用户能够得到一个随机数: Random r = new Random(); int i = r.next ...

  7. Unity_UIWidgets - 按钮组件IconButton

    Unity_UIWidgets - 按钮组件IconButton 按钮组件IconButton IconButton 结尾 QQ 今日无推荐 按钮组件IconButton 既然上周给大家介绍了ICON ...

  8. spring-in-action-初识反应式编程reactor

    一:反应式编程 1.反应式编程的优点 1)无阻塞 2)处理的数据可以是无限的 打水仗:  命令式编程:使用的是水气球.水气球的容量有限.把水气球装水,再扔向对方.如果想要更多的水,就需要更多的水气球. ...

  9. 聊聊火热的 ChatGPT(我帮大伙问了几个比较关心的问题)

    如需要转载,请声明原文链接微信公众号「ENG八戒」https://mp.weixin.qq.com/s/L9tZy_KWnE1kf0E3HNhJhQ 本文大概 2562 个字,阅读需花 15 分钟 内 ...

  10. JavaScript 日期和时间的格式化

    一.日期和时间的格式化 1.原生方法 1.1.使用 toLocaleString 方法 Date 对象有一个 toLocaleString 方法,该方法可以根据本地时间和地区设置格式化日期时间.例如: ...