区块链入门学习笔记(一)

2023-11-05

比特币的原理和运行机制

1.比特币产生的动机

  • 以物易物
  • 实物货币(黄金)
  • 符号货币(纸币)
  • 中央系统虚拟货币
  • 分布式虚拟货币(中本聪)

2.基础设施搭建

(1)账簿公开机制
账簿不记录余额,只记录交易。
账簿由私有改为公开。

(2)身份与签名机制(公钥加密系统)
不使用真实身份交易,使用一个唯一的代号进行交易
保密印章 + 印章扫描器

(3)成立虚拟矿工组织(挖矿群体)
- 矿工以组为单位,一组可以是单独的一户,也可以是几户联合成一组
- 成为矿工不影响正常使用货币
- 矿工每天要花费一定的时间从事比特币“挖矿”活动
- 在挖矿的活动中越努力,获得报酬的可能性就越大
- 可以随时退出,也可以随时进入新矿工

(4)建立初始账簿(创世块)
新帐簿的付款人都是“系统”,收款人是印章对应的隐含字符。
新帐簿上系统给每一户默认分配了一定数量的比特币,数量很少,只有几枚,有些甚至没有。

3.支付与交易

  • 付款人签署交易单 (付款人 收款人 数量 来源 保密章)
  • 收款人确认单据签署人 (确认付款人和盖章人是否一致)
  • 收款人确认付款人余额 (由矿工组织负责)
    任何使用比特币进行交易的都依赖矿工组织的工作才能完成交易。

4.矿工的工作

(1)矿工的工具
初始账簿(记录了系统的第一次赠送)
空帐簿纸
编码生成器(哈希函数)
编码生成器的功能:
 a. 生成的编号只与填写的内容有关
 b. 内容相同的帐簿纸生成的编号总是相同
 c. 检测所有的填入帐簿纸的交易单,尤其是保密印章和付款人
 d. 机器可判断已经打印的帐簿纸的编号是否有效,以及编号和内容是否一致
 交易单收件箱
 公告板(公示一些信息)

(2)收集交易单
交易的发起人不仅要把交易单给收款人,还要复制一份一摸一样的交易单投递到矿工小组的收件箱里。

(3)填写账簿
矿工拿一张空的帐簿纸,把交易填写到“交易清单”一栏,并且将账簿最后一页的编号抄写到“上一张账单编号”一栏。还一个“幸运数字”,随便填写。然后将帐簿纸放入编号生成器,打印好编号。
只有编号的前10个数均为0,帐簿纸才算有效。(若不是有效的帐簿纸,只能通过不停的修改幸运数字来生成有效的编号)

(4)确认账簿
需要进行确认的信息有3个:
a. 账簿的编号有效 (放入编号生成器进行验证)
b. 账簿的前一页账簿有效
c. 交易清单有效 (付款人是否有足够的余额)

(5)账簿确认反馈
收到其他小组送来的账簿纸,“上一页账簿编号”为自己送出去的帐簿纸,表示工作成功被认可。
任何一个小组新生成有效帐簿纸或者确认了别的小组的帐簿纸时,需要将最新被小组承认的交易写在公告牌上。

5.工作机制分析
核心问题处理
1、同时收到两份合法的账簿该如何处理?
由于各个挖矿小组是并行工作的,所以很有可能出现两份不一样的账簿页,并且都是基于这个小组账簿的最后一页,都是合法的。为了解决这种情况:
中本聪提出:小组应该以树状组织账簿,而不是线性方式,无论何时都以账簿的最长分支作为主账簿,树的其他的分支保留。
2、挖矿小组有人伪造账簿怎么办?double-spending如何解决?
中本聪提出:只要挖矿组织中大多数人诚实,系统就可靠。

理由1:保密印章机制。
理由2:诚实的矿工也不会承认不合法的交易。

唯一的攻击行为:在收款人确认收款后,从另一条分支上建立另外的交易单,取消之前的付款,将同一笔钱付给另外一个人。(double-spnding问题)
攻击者签署交易单,支付应支付的比特币,然后挖矿小组确认了这笔交易,并且进行了公告,收款人看到公告后,确认转账已经完成了,支付给了攻击者等值的黄金。然后攻击者在新帐簿(包含上边被确认的账簿)的前一页做出一个分支,生成更多的账单,使原来的主分支变成旁支,挖矿小组就不承认刚才的转账,收款人的收款确认会被取消,攻击者的比特币又恢复。然后攻击者再次签署交易单,以同样的方式进行下去。我们该如何解决这种情况?
中本聪提出:收款人不要在公告挂出时立即确认交易完成,应该观察一段时间,等各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消时,才确认付给自己的钱到账。
之前的变态的编号规则就是为了防御这一点。
3、比特币一直增加会不会导致通货膨胀?
不会。
开始的时候:每生成一张账簿,奖励小组50个比特币。
然后:每当账簿增加21,000页,奖励减半。

账簿页数 0-21,000 21,000-42,000 …-6,930,000
奖励比特币数 50个 25 0
备注 比特币总量为21,000,000个

4、矿工如果越来越多,比特币生成速度会变快不?
不会。
中本聪解释:编码生成器中有调控机制。当前工作的编码生成器越多,机器的效率就会越低,从而保证新账簿页生成的速率不变。
5、如果某个人的代号泄露,账簿又公开,他的隐私岂不泄露了?
确实。但是中本聪说可以提供无限制的保密印章

参考:
CodingLabs :一个故事告诉你比特币的原理及运作机制

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链入门学习笔记(一) 的相关文章

随机推荐

  • 【PostgreSQL】行变列、非空(CASE WHEN、COALESCE)语句总结

    1 源表结构 order id class count 111101100002 3 0 111101100012 1 3 11110112002 1 2 111101100202 2 0 2 目标表结构 根据order id分组 根据不同
  • ubuntu执行编译命令提示"No such file or directory"

    uname a 查看系统是32位或64位 若是64位可能没有安装32位库 安装32位lib库 sudo apt get install nautilus open terminal bison zlib1g dev doxygen libx
  • 找不到vcruntime140.dll,无法继续执行代码?多种解决方法解析

    找不到vcruntime140 dll 无法继续执行代码 当你在尝试运行某个程序时 突然弹出一条错误提示框 告诉你无法继续执行代码 因为找不到vcruntime140 dll 这个问题很常见 但是它可能会让你感到困惑和疑惑 这篇文章将详细介
  • C# 定时器轮询 设计思路

    C 定时器设计过程的记录 在Windows 系统上 C 常用定时器有三种 而最高进度的定时器误差 58ms 则个误差数字无法应用 16ms 级别的定时轮询 但还有另外的高精度定时器 这不是还有其他方法吗 对有的 空转也指的是直接让线程一只空
  • 设计模式之中介者模式

    介绍 在现实生活中 常常会出现好多对象之间存在复杂的交互关系 这种交互关系常常是 网状结构 它要求每个对象都必须知道它需要交互的对象 例如 每个人必须记住他 她 所有朋友的电话 而且 朋友中如果有人的电话修改了 他 她 必须让其他所有的朋友
  • html textarea文本域高度自适应

    1 可直接在 菜鸟教程网站测试页面中测试
  • shell脚本-1

    0 狂降 变量 1 标识符 2 数据类型 运算符 让多个变量产生关系 逻辑语句 1 顺序 2 分支 3 循环 方法 函数 将实现某一功能的代码封装 1 变量 定义变量时 变量名不加 基本都当成文本处理 bash 4 2 a 10 bash
  • 腾讯一面!说说ArrayList的遍历foreach与iterator时remove的区别,我一脸懵逼

    1 简介 ArrayList作为最基础的集合类 其底层是使用一个动态数组来实现的 这里 动态 的意思是可以动态扩容 虽然ArrayList可以动态扩容 但却不会动态缩容 但是与HashMap不同的是 ArrayList使用的是1 5的扩容策
  • VScode如何自动换行设置

    VScode安装完默认不能自动换行 需要我们手动配置 文本超出显示时 会溢出 如图 进入文件 gt 首选项 gt 设置 打开设置界面 在常用设置下找到Editor Word Wrap选项 默认为off 设置为on即可 如图所示 设置完成 即
  • STM32CubeMX基础例程(小熊派):09.厨房烟雾监测系统加强版

    1 准备开发板 这里我选用了一块网红开发板 小熊派 这款板子的人气比较高 还是全国大学生物联网设计竞赛 华为杯 的华为竞赛开发板 我个人也比较喜欢用这款板子 这款板子在放在纸箱吃灰半年之后 被我重新拿了起来 并想借此写博客的机会 整理一下自
  • 简单粗暴的分布式定时任务解决方案

    分布式定时任务 1 为什么需要定时任务 2 数据库实现分布式定时任务 3 基于redis实现 1 为什么需要定时任务 因为有时候我们需要定时的执行一些操作 比如业务中产生的一些临时文件 临时文件不能立即删除 因为不清楚用户是否操作完毕 不能
  • 通过FTP进行文件的上传和下载

    目录 一 FTP服务器展示文件列表 第一步 创建FTPClient 第二步 连接FTP服务器并验证用户名密码 第三步 切换到目标文件夹 第四步 切换成功后 显示所有该目录下的所有文件 第五步 最后关闭FTPClient对象 要处理异常 整理
  • 算法题-员工工号问题

    题目 公司员工的工号规则为 小写字母 数字 总长度不能超过8位 x表示该工号类型可以容纳的员工人数 y表示字母的个数 请确定数字的最小个数 例如 输入 260 1 输出 1 自己做的 不知道对不对 附上代码 import math def
  • c语言分数等级switch,用switch输出分数等级

    include int main float score 分数 用浮点数表示 int text printf n请输入你所得的分数 scanf f score 输入分数 下面用switch循环 text int score 10 强制转换为
  • 小红书“不误正夜”指南丨2023夜间营销数据报告

    对于当代年轻人来说 白天的 8 小时需要献给工作 学习和社交 夜晚时光才真正属于自己 下班后开始新的一天 越来越多人开始认同这个概念 告别 报复性熬夜 重新掌握晚间生活的方向盘 多样化的生活方式也因此孕育出了庞大的夜经济市场 千瓜数据显示
  • Qt之Http:4 利用QTcpSock访问HTTP

    QTcpSocket Class 利用 QTcpSocket 来实现一个界面 模仿 Telnet 的功能 访问HTTP服务器 QTcpSocket是QAbstractSocket的一个方便的子类 它允许您建立TCP连接并传输数据流 1 主要
  • 数据挖掘导论课后习题答案-第二章

    最近在读 Introduction to Data Mining 这本书 发现课后答案只有英文版 于是打算结合自己的理解将答案翻译一下 其中难免有错误 欢迎大家指正和讨论 侵删 第二章 字段3 3 字段2 字段2和字段3很有可能包含相同的信
  • 新冠疫情实时数据获取 python

    用到的工具 python pycham 模块 import requests import time import pandas as pd 目标网站 实时更新 新冠肺炎疫情最新动态 qq com 打开网站 F12 通过打开开发者工具 找到
  • SCI论文写作引导

    1 论文Introduction怎么写 a 背景介绍 现状 介绍别人研究 存在问题 怎样解决 你的做法 有何亮点 b 研究背景和重要性 引出该领域科研空白 点题 指出本文的研究课题 概述文章的核心方法论和主要发现 提出猜想和研究目的 c 最
  • 区块链入门学习笔记(一)

    比特币的原理和运行机制 1 比特币产生的动机 以物易物 实物货币 黄金 符号货币 纸币 中央系统虚拟货币 分布式虚拟货币 中本聪 2 基础设施搭建 1 账簿公开机制 账簿不记录余额 只记录交易 账簿由私有改为公开 2 身份与签名机制 公钥加