BTC系列 - 启示录

推荐《区块链启示录:中本聪文集》这本书, 原来早在2010年, BTC生态还不完善的时候, 社区中就已经畅想出了未来其它链上的特色方案, 中本聪也都一一做了教父级回应: coinbase币的成熟时间, 交易池, 交易确认机制, 防51%攻击, 防双重消费, 水龙头, 轻量级客户端, 链上只记录哈希(Layer2的思想), 矿池, 分布式域名系统

历史

  • 比特币0.1版发布时, 仅用于Windows平台。(原来最初的代码是windows GUI版)
  • 0号区块中包含着以下的信息:“《泰晤士报》2009年1月3日英国财政大臣正欲对银行业实施第二轮救助。” (英文的ASCII编码)
  • 哈尔·芬尼是由中本聪亲自发送的第一枚比特币的接收人
  • 2009年12月30日,工作量证明难度首次被自动调整。
  • 匹萨订购系统。由mizerdearia承接。可以通过网站、命令行、智能手机、短信等方式订购匹萨。(哈哈,才有了后来著名的BTC匹萨日)
  • 截至2014年3月14日,这是中本聪在2014年3月7日发表在p2pfoundation上的最后一篇文章:增加了一些DoS限制,移除了安全模式(0.3.19版)

Token

政府有三种方法为财政赤字提供资金:通货膨胀(加印新钞)、社会借款和税收

通货膨胀率

比特币是限量供应的,计划到2140年发行2100万枚,分发(每个区块所产生的比特币)的数量每4年减半。
第一个4年:1050万枚
第二个4年:525万枚
第三个4年:262.5万枚
第四个4年:131.25万枚
以此类推……

即初始通货膨胀率35%

coinbase的成熟时间

创建后,留出120个区块的成熟时间的目的是为了在用于支付前要完全确定该区块属于主链。您的节点在此期间不会对该区块做任何事情,只是等待别的区块添加到它后面。这段时间都不需要在线。
想法:coinbase的币20小时后可用

Transaction

bitcoin支持向IP地址发送的交易吗?

比特币最早的实现(如 Bitcoin Core 的早期版本)确实支持向一个特定的 IP 地址发送交易。这种方式被称为 “IP-to-IP 交易”,是比特币网络的一项实验性功能。然而,这种功能已经在比特币的主流实现中被弃用,原因包括隐私和安全问题。

IP-to-IP 交易的原理
  • 概念:在 IP-to-IP 模式下,比特币客户端直接向目标 IP 地址发送比特币,最终是发送到区块链地址。
  • 机制:
    • 发送方和接收方都需要在线。
    • 接收方需要运行一个支持这种功能的比特币客户端,并监听一个开放的端口。收到请求后,把自己的BTC地址发给发送方
    • 交易会通过网络发送到目标 的BTC地址。

交易费

有了最近发布的基于交易费的激励机制,节点将会有动力处理它们所收到的所有支付交易。

比如 让每笔交易的输出值比输入值少1分钱, 这部分便是交易费
当所有2100万枚比特币都产生了之后,矿工维护比特币系统的工作激励将只限于维护比特币系统过程中所收取的交易手续处理费。

交易池

节点将交易保留在工作集中,直到进入区块。如果90%的节点包含这笔交易,那么每次发现一个新区块时,该交易就有90%的可能性存在于区块里。

即使一笔早期支付还没有进入区块链,如果这笔交易已经存在于所有节点的交易池,那么这笔钱的第二次支付也会被所有已经包含第一笔支付的节点所拒绝。

只需要为当前最好的分支保留一个未决交易池。当新区块进入最好的分支时,ConnectBlock函数从pending-tx池移除该区块的交易。如果另一个分支变得更长,就会调用主分支的DisconnectBlock函数转移主分支,而将主分支区块中的交易恢复到pending-tx池,并调用新分支的ConnectBlock函数,把同时存在于两个分支的所有交易移出来

脚本支持不同的交易类型

比特币内置的类Forth脚本语言的处理。例如,[‘TxOut:value:100.00 Script:DUP HASH1606fad...ab90EQUALVERIFY CHECKSIG’]。
首先,比特币有内置的脚本语言,尽管是非常简单的脚本语言(没有循环、指针,除了数学和密码外什么都没有)。

新交易是通过将签名和公钥压入解释器堆栈来完成验证,然后再运行TxOut脚本

脚本实际上是一种断言。它只是用来评估真假的方程式。

回复:交易和脚本:DUP HASH160...EQUALVERIFY CHECKSIG
这个设计支持各种可能的交易类型,包括托管交易、担保交易、第三方仲裁、多方签名等。

系统

DB

比特币使用了事务型数据库Berkeley DB。系统崩溃时不会丢失数据。系统收到交易时会立即写入数据库。

警报系统

中本聪讨论了他开发的一套警报系统,拥有某个私钥的人可以在比特币网络传递重要消息,目前只有中本聪本人有该私钥。例如可以在发现bug之后通报所有矿工进行软件的重要升级。

警报消息用一个私钥进行签名,这个私钥只有中本聪有。节点在收到警报时会做两件事:
· 在状态栏上设置警告信息。
· 让json-rpc接口的资金处理方法返回错误。

共识

  • 相信最长链为有效链, 如果长度相等,就保留最早的那条.
    • 接收方需要等待一小时,直到交易正式被确认进入了区块链。中本聪认为6个区块(每个区块10分钟,6个区块就是1小时)是适当的时间,让交易得以确认并成为区块链的永久部分。
    • 节点表达接纳该区块的方式是着手在该区块后创建下一个区块,并将接受区块的哈希值作为上一个哈希值。
  • 工作量证明是用类似于Hashcash的SHA-256(前面由一些0构成),而不是签名。
    • 搜索结果是256位无符号十六进制数,其SHA-256值必须小于能成功产生区块的值。
  • 工作量证明的难度每两周(2016个区块)调整一次,以达到整个网络平均每小时增加6个区块。如果过去的6×24×30个区块跨越的时间不到15天,那么区块就产生太快了,于是系统把工作量证明的难度增加一倍。
    • 最低难度是32个零位

网络

区块广播也不在乎消息丢失。如果一个节点没有收到某个区块,当它收到下一个区块时就会意识到中间丢了一个,此时该节点会向网络请求那个遗漏的区块。

密码学

ECC

  • 采用椭圆曲线密码(EDCSA)而非RSA的主要原因是交易字节数的多少。为了让每笔交易字节数尽可能少,保持区块大小可控,中本聪决定使用EDCSA。
  • 比特币地址是公钥的160位哈希值
    • bitcoinaddress=RIPEMD-160(SHA-256(publickey))
    • 中本聪决定使用公钥的哈希值而非公钥本身作为比特币地址。中本聪这么做有两个原因。一是减小每笔交易的长度,因为哈希值只有160位长。二是简单地提高了安全性,以防比特币所用的非对称加密算法中发现后门或安全缺陷。为了能使用比特币,黑客必须首先从哈希值中推导出公钥,然后从公钥中推导出私钥
  • 为了验证一笔交易,节点从签名中取得公钥,用以验证实际签名。如果签名有效,则对公钥进行哈希计算,确认哈希值与上一笔交易中分配的比特币地址相同。按照定义,如果两个都对上了,那么交易正常。
    • 如果签名也被攻破了, 还可以切换到更健壮的系统。当首次运行升级后的软件时,将会用新的更强的签名算法为所有的币重新签名。(通过创建一笔交易,用更强的签名把币支付给自己。)

SHA

  • 如果SHA-256全面崩溃,我们可以达成某种一致,即把在问题开始前的那部分算作是诚实链,并锁定诚实链,然后从那一点采用新的哈希函数往下继续。

随机种子

  • BTC的随机种子考虑得非常严密。使用Windows所有的性能监控数据,包括启动后对磁盘性能、网卡指标、CPU时间以及分页等的测量。Linux有内置的熵收集器。再加上每次鼠标在比特币窗口移动时产生并由磁盘操作所捕获的熵。

盲签

  • 生成公钥的额外盲变种密钥的方法。盲变种密钥具有与源公钥相同的属性,例如私钥可以为这些盲变种密钥生成签名。其他人无法判断这些盲密钥是否与根密钥相关,或者其他的盲密钥是否来自于同一个根密钥。这些都是盲化特性。简而言之,盲化就是x=(x×large_random_int)mod m。

  • 如果使用一次性公钥为输出项哈希值和当前区块编号的组合签名。那么当输出项哈希值首次创建时采用公钥进行记录。当使用该输出项时,哈希由一个不同但相关的签名进行验证,该签名也是由相同的密钥签署的。

    盲公钥相当于交易中比特币地址的公钥。如果说比特币地址的公钥私钥对是P/p,那么盲公钥就是P1,P2,P3,…,Pn。其中每个都可以验证私钥(p)签名。
    所以在创建过程中,当提交输出项的哈希值进行验证时,看起来就像是由P1签署的。然而,当接收者取消该输出项时,则会以P2或P1以外的其他密钥签名(因为P1已经被公开记录)。两个签名的结果都一致,但是公钥会更换。这就意味着只有公用私钥的拥有者才能生成签名

群签名

  • 使用群签名可以在签名之后不让人知道是谁签的。
    举个例子,比如必须下令进行一次不太受欢迎的军事攻击,但是没人愿意作为下令者成为历史的罪人。如果10位领袖都有私钥,其中一位签署了命令而你并不知道具体是谁签的。

其它

  • 可信计算(当时还只是研究)
    • 使用现代处理器用于支持“可信计算”的安全特性来强化比特币钱包
  • 一种像sss的夏米尔(Shamir)秘密共享方案的实现。类似于ssss的工具允许爱丽丝和鲍勃指定仲裁方以防发生分歧。
    • ·买方把比特币发送给托管账户,并指明收款人的地址。
      ·卖方看到托管账户中的比特币后,注明比特币将发往的地址。
      ·买方把款放给卖方。
      ·托管账户会在x天后自动完成放款。
  • 作废列表的想法
    • 将前序交易和输出项计算哈希值后,如果该哈希值在区块列表中出现且仅出现过一次,那么就可以断定该输出项有效并且未被用过。
      想法:作废列表
  • 分布式哈希表(DHT)
    • 用来最小化空间。还有一些细节尚未解决,但是您可以把它想象成将区块列表分割成1024个相同的小区块列表,每个小区块列表有10个冗余的验证节点。而不是具有10000个冗余的验证节点的单个区块列表。每个随机选取的节点集负责哈希空间的一部分。

矿池设想

矿池开采是一种多用户合作铸造比特币并且公平分享收益的方法。比特币矿池最好的类比是同事共同出钱买彩票,中奖后分享奖金。

矿池开采可以获得更小额、更频繁、更稳定的收益。如果您的电脑比较慢或者是一台CPU矿工,那么矿池开采可能是您能够铸造比特币的唯一方法。

  1. 首先会有一个网页让您注册,输入钱包地址,取得URL和矿工个人CPU/GPU的用户名与密码(rpcuser/rpcpass-word)。当以用户名和密码启动自己的矿机时,服务器将把尚未分配给集群其他成员计算的工作发送给你。

    如果您一天提供了100万次哈希/秒的算力,而整个集群的算力是2000万哈希/秒,并且花了两天才找到一个区块,那么属于您的奖励将是(50/20/2=)1.25枚比特币。

  2. 矿池难度: 矿池服务器会要求每个客户为此计算一些哈希值。每个客户要提交他们发现的高于某个特定难度阈值的哈希值。服务器选择的难度为当前“官方”难度的1/40。
    矿池验证: 因为需要一个不同的哈希值才能将生成的比特币支付给其他人。如果不诚实的客户端作弊,把产生的哈希值所生成的比特币支付给他们自己,那么他们提交的哈希值在我的服务器上无法通过验证,并且我也不会向他们分配任何利益。

    服务器得到了远程采矿客户端发回的候选哈希值消息流。时不时会有一个哈希值可以满足官方的难度要求,这样我的服务器就可以产生一个区块,并赚到50枚比特币。

  3. 然后,矿池将比特币分给远程采矿客户端,即为当前区块提交大于或等于1/40官方难度哈希值1枚比特币的比例分配。

    对于矿池运营商来说,最简单的方法就是等到发现下一个区块时,将其按比例分配为:用户达标次数/所有人总达标次数。

    提交哈希值发现了区块的人都应该从总收入中多分一些,比如10枚比特币。

分布式域名

比特域名服务(BitDNS)

有人建议创建一种比特币克隆版(一种替代币),以运行分布式点对点域名服务器系统(DNS)。除了货币以外,存储在区块链中的交易也包含DNS信息,并且可以用新的交易更新。

允许人们注册以.bit结尾的域名并与IP地址关联。


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953149.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSM商城设计与实现

摘 要 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景,分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应用开…

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/

CentOS7下Hadoop集群分布式安装详细图文教程

1、集群规划 主机 角色 DSS20 NameNode DataNode ResourceManager NodeManager DSS21 SecondaryNameNode NameNode NodeManager DSS22 DataNode NodeManager 1.1、环境准备 1.1.1 关闭防火墙 #查看防火墙状态 firewall-cmd --state #停止…

计算机网络——网络层-IPV4相关技术

一、网络地址转换NAT • 网络地址转换 NAT 方法于1994年提出。 • 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。 • 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将…

postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)

一、 旧版批量执行SQL脚本的python文件缺点,优点,以及更新内容 书接上回,postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)_python sql psycopg2-CSDN博客 这个python脚本写了很久了,最近开始…

Node.js——http 模块(二)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

基于element UI el-dropdown打造表格操作列的“更多⌵”上下文关联菜单

<template><div :class"$options.name"><el-table :data"tableData"><el-table-column type"index" label"序号" width"60" /><!-- 主要列 BEGIN---------------------------------------- --&g…

javascrip基础语法

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 1. JavaScript 输出 1.1 console.log()&#xff1a;用于将信息输出到浏览器控制台&#xff0c;例如con…

大语言模型预训练、微调、RLHF

转发&#xff0c;如有侵权&#xff0c;请联系删除&#xff1a; 1.【LLM】3&#xff1a;从零开始训练大语言模型&#xff08;预训练、微调、RLHF&#xff09; 2.老婆饼里没有老婆&#xff0c;RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…

django基于Python的校园个人闲置物品换购平台

Django 基于 Python 的校园个人闲置物品换购平台 一、平台概述 Django 基于 Python 的校园个人闲置物品换购平台是专为校园师生打造的一个便捷、环保且充满活力的线上交易场所。它借助 Django 这一强大的 Python Web 开发框架&#xff0c;整合了校园内丰富的闲置物品资源&…

abap安装cl_json类

文章来自 SAP根据源码导入/ui2/cl_json类 - pikeduo - 博客园 新建一个se38程序&#xff0c;把源码放到里&#xff0c;源码如下 *----------------------------------------------------------------------* * CLASS zcl_json DEFINITION *----------------------------…

[OPEN SQL] ORDER BY排序数据

本次操作使用的数据库表为SFLIGHT&#xff0c;其字段内容如下所示 航班(SFLIGHT) 该数据库表中的部分值如下所示 OPEN SQL中的ORDER BY语句用于对数据库表中的数据进行排序 在查询数据的时候使用ORDER BY语句&#xff0c;则查询出来的结果会按照ORDER BY指定的字段进行排序 排序…

STM32F103ZET6战舰版单片机开发板PCB文件 电路原理图

资料下载地址&#xff1a;STM32战舰版单片机开发板PCB文件 电路原理图 1、原理图 2、PCB 3、板子介绍 一、核心芯片与性能 核心芯片&#xff1a;STM32F103ZET6&#xff0c;这是一款基于ARM Cortex-M3内核的高性能单片机。处理器频率&#xff1a;高达72MHz&#xff0c;确保了…

An FPGA-based SoC System——RISC-V On PYNQ项目复现

本文参考&#xff1a; &#x1f449; 1️⃣ 原始工程 &#x1f449; 2️⃣ 原始工程复现教程 &#x1f449; 3️⃣ RISCV工具链安装教程 1.准备工作 &#x1f447;下面以LOCATION代表本地源存储库的安装目录&#xff0c;以home/xilinx代表在PYNQ-Z2开发板上的目录 ❗ 下载Vivad…

GAN的应用

5、GAN的应用 ​ GANs是一个强大的生成模型&#xff0c;它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布&#xff0c;也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…

centos9设置静态ip

CentOS 9 默认使用 NetworkManager 管理网络&#xff0c;而nmcli是 NetworkManager 命令行接口的缩写&#xff0c;是一个用来进行网络配置、管理网络连接的命令工具&#xff0c;可以简化网络设置&#xff0c;尤其是在无头&#xff08;没有图形界面&#xff09;环境下。 1、 cd…

Idea日志乱码

问题描述 前提&#xff1a;本人使用windows Idea运行sh文件&#xff0c;指定了utf-8编码&#xff0c;但是运行过程中还是存在中文乱码 Idea的相关配置都已经调整 字体调整为雅黑 文件编码均调整为UTF-8 调整Idea配置文件 但是还是存在乱码&#xff0c;既然Idea相关配置已经…

R4-LSTM学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-火灾温度预测 导入数据数据可视化设置X、y构建模型调用模型个人总结LSTM 的基本结构细胞状态&#xff08;Cell State&#xff09;LSTM 的优点 导入数据 i…

uniapp实现H5页面内容居中与两边留白,打造类似微信公众号阅读体验

在 UniApp 中&#xff0c;由于需要兼容多端应用&#xff0c;我们通常使用 rpx 作为尺寸单位。然而&#xff0c;在某些情况下&#xff0c;如需要实现内容居中且两边留白时&#xff0c;直接使用 rpx 可能会带来一些限制。这时&#xff0c;我们可以考虑使用 px 或 rem 等单位&…

网工_网络体系结构

2024.01.09&#xff1a;网络工程学习笔记&#xff08;网工老姜&#xff09; 第1节 网络体系结构 1.1 计算机一切皆011.2 网络协议1.3 协议的分层模型1.4 主机1向主机2发送数据过程1.5 本章小结 1.1 计算机一切皆01 在计算机内部&#xff0c;所有的数据最终都是以01的方式存在的…