主页 > 小米不能安imtoken > 比特币核心概念和算法

比特币核心概念和算法

小米不能安imtoken 2023-07-23 05:10:55

联客,为开发者而生,答疑解惑!

本文来自区块链技术社区,未经许可拒绝转载。

图片描述

比特币项目地址位于github仓库。 目前,各种“币”基本上都是从复制比特币代码开始的。 要想深入研究,难免要从看源码入手。

P2P:电驴、迅雷、BT。 网络影视在中国的发展,让大家对P2P不陌生。 可能没人记得,比特币其实是第一批P2P的从业者。 所有交易记录通过P2P方式在全网广播,每个人都保存一份完整的交易记录。 所以也叫去中心化。

去中心化:比特币的去中心化是指账本去中心化,每个人都有完整的交易记录。 因此,不会出现因人为修改某个账本而造成财产损失的情况。

在这种模式下,如果想要有效修改之前的交易记录,就需要工作量证明(POW)。 理论上,对前一个区块的修改必须得到 51% 的联网机器的认可才能成功,而这绝对是不可能的。

事实上,在整个比特币系统的运行中,P2P的特性还是需要服务器系统来负责支持和维护,这是显而易见的。

在比特币软件中,这个支持系统使用DNS Seed来获取一部分对等节点列表,以便用户可以快速找到对等节点。 这部分DNS地址是硬编码在源代码中的,每个新安装的客户端都需要使用这些地址来工作:

比特币的核心技术是什么_狗狗币是下一个比特币_比特币和股票交易技术

vSeeds.emplace_back("seed.bitcoin.sipa.be", true); // Pieter Wuille,仅支持 x1、x5、x9 和 xd vSeeds.emplace_back("dnsseed.bluematt.me", true); // Matt Corallo,仅支持 x9 vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org", false); // Luke Dashjr vSeeds.emplace_back("seed.bitcoinstats.com", true); // Christian Decker,支持 x1 - xf vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch", true); // Jonas Schnelli,仅支持 x1、x5、x9 和 xd vSeeds.emplace_back("seed.btc.petertodd.org", true); // Peter Todd,只支持x1、x5、x9、xd

客户端工作并缓存了对等网络节点的地址后,下次重启时不需要访问该地址。 每个客户端等于自己的路由比特币的核心技术是什么,这一次是真正的去中心化。

DNS系统使用UDP工作,速度更快,更不易受到DDOS攻击。

去中心化的商业概念一度非常流行,也被认为是比特币的关键创新点,但最近业界基本认为“去中心化”是一个伪命题。 因为所有提出去中心化的公司,其实都是以此为武器,打破大公司的垄断或者行业垄断。 先不说能不能成功,就算成功了,新公司也还是希望能垄断垄断。 所以大家其实想要的不是去中心化,而是一个自己可以控制,别人无法控制的优势。

Proof of Work:工作量证明(简称POW)。 因为记账的过程是分布式的,每个人都有可能发生,这个过程的监管难度很大。 工作量证明相当于只监控结果,你必须付出足够的工作量(有效挖矿)来证明你的记账工作是有效的。 这个工作量的定义是由挖矿的难度决定的,见后面的挖矿。

共识机制:区块链系统利用上面提到的工作量证明来解决节点可信度问题(共识问题在计算机算法中有一个典型的模型叫做拜占庭将军问题,通常存在于分布式数据库中)。

区块链:区块链是一个古老的概念。 软件专业的算法课,基本上前几门课都会涉及到链表的概念。 区块链是一个链表。 除了第一个“Genesis”节点外,每个节点都有一个指向前一个节点的指针。 单向链表的特点使得多个节点指向同一个节点是肯定的。 这一般是由于两次同时挖矿成功。 此情为叉,无限发展成树。 比特币系统的设计不允许出现这种情况。 每次在链表中选择最长的链表链接到下一个节点,最短的分支最终会被丢弃。 在比特币的设计中,一个区块与另外5个区块(共6个区块)链接后,就可以确认这个区块中的交易是安全的。 示意性的区块链节点结构图如下:

比特币的核心技术是什么_狗狗币是下一个比特币_比特币和股票交易技术

区块链是将基本数据结构模型应用于去中心化记账算法的成功范例。 优点是这种创新将对未来金融系统的设计产生深远的影响,缺点是目前似乎还没有发现这种区块链结构在其他领域的有利应用或最优解。

挖矿:区块链中的每个节点都用于记账。 为了防止节点被伪造,节点的生成有严格且耗时的要求。 只有当找到满足这些要求的新节点时,该节点才能记录最近的交易并将其链接到区块链主链。 寻找新记账节点的过程就是挖矿。

挖矿算法:如果用python来表达挖矿算法,源码大致是这样的:

import hashlib, struct ver = 1 prev_block = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" mrkl_root = "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098" time = 1231469665 bits = 486604799 nonce = 2573394689 hex_str = struct.pack(" 挖矿的核心是进行两次的sha256运算,并且要求结果符合当前比特币要求的难度值,难度值表示两次sha256计算的结果,前面有一个0满足难度值。也就是说,假设计算结果为“000000xx...xxxxxx”,前面0的个数必须满足难度值要求,而这个难度值在比特币系统中是不断增加的,也就意味着挖矿的难度越来越高。

参考上面的链表图,一开始定义的常量是节点的基本信息,不可更改,只有nonce是可变的。 但是由于sha256 hash算法的特性,最终的结果只能通过暴力循环所有可能的nonce值来得到。 到目前为止,还没有机会主义的方法。

这样的设计让区块链的产生并不是那么容易,所以锻造区块链就变成了一种争夺算力的行为,而挖矿如此火爆,算力不可能超过全球挖矿算力的一半事物。 这在技术上消除了“账本伪造”的可能性。 这也成为“工作量证明”共识机制的核心。

矿池:因为挖矿难度越来越高,所以今天一个人想用自己的电脑挖矿成功是极其困难的。 因此,借助辅助网站和辅助程序,可以将大家分散的算力集中起来。 起来,一起挖矿,把收益分享给大家。 这是矿池。 矿池的主要算法就是将上述的nonce值进行分割,每个人穷举出一小段,从而提高并行找到正确nonce值的概率。 事实上,矿池的概念如今已经成功应用于分布式计算、众筹等多个领域。

狗狗币是下一个比特币_比特币的核心技术是什么_比特币和股票交易技术

UTXO:一种记账方式。 每笔交易的记录只记录最新的交易和“UTXO”,即未花费的交易输出(Unspent Transaction Output)。 最重要的一点是每笔交易都包括谁转了钱。 为你。 链表中的最后一笔交易也是如此,所以实际上每一笔钱都是可以完全追踪的。 这种方式的特点是: 1. 获取余额需要遍历区块链,而不是某个节点。 2. 显然,节点的数据量可以大大减少。 如果分布中的每个人都有一个分类帐,这可以大大减少空间需求。

矿机:从上面的挖矿源码可以看出主要计算了两次sha256。 如果想提高速度,除了用CPU比特币的核心技术是什么,GPU更适合这种简单的数学运算。 所以就有了专门为挖矿设计的电脑,比如同时支持多张显卡,大大加快了速度。 这种计算机除了挖矿之外,在其他应用上意义不大,所以被称为“矿机”。 GPU计算之后,出现了FPGA矿机和ASIC矿机,但好像产量不是很大。 也可能是因为一旦挖矿失败,普通设备还是可以拆开卖显卡的,但是这种纯专业的机器不好搞。

Genesis block:即创世块,链表中的第一个块,相当于链表的头部。 这也是硬编码在源代码中,该区块及其挖矿收益属于作者中本聪。 我们来看看本尊:

curl {"hash":"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f","ver":1,"prev_block":"0000000000000000000000000000000000000000000000000000000000000000","mrkl_root":"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b","time":1231006505,"bits":486604799,"fee":0, "nonce":2083236893,"n_tx":1,"size":285,"block_index":14849,"main_chain":true,"height":0,"tx":[ { "lock_time":0, "ver ":1, "size":204, "inputs":[{"sequence":4294967295,"witness":"","script":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"} ], "weight":816, "time":1231006505 ,“tx_index”:14849,“vin_sz”:1,“hash”:“4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b”,“vout_sz”:1,“relayed_by”:“0。

0.0.0", "out":[{"addr_tag_link":"https://en. 比特币。 it/wiki/Genesis_block","addr_tag":"比特币创世记","spent":false,"tx_index":14849,"type":0,"addr":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","value":5000000000," n":0,"脚本":"4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4acfb1}2bf6

请注意prev_block中“0”的字符串和height中的“0”,证明这是链表的根。

创世块有一个有趣的“副作用”,因为比特币“账本”不可篡改,其内容的独特确定性毋庸置疑,人人都可以验证。

比特币的核心技术是什么_狗狗币是下一个比特币_比特币和股票交易技术

因此,只要有人用创世块地址的私钥签署声明,就可以确定是中本聪本人的声明,或者他泄露了私钥。

如果秘钥是比特币世界的封印,那么创世块地址对应的秘钥就是传国玉玺。 中本聪的比特币地址在地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。

Genesis block可以看到源代码文件:src/chainparams.cpp,其中:

assert(consensus.hashGenesisBlock == uint256S("0x000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"));

Merkle Tree:Merkle树,通常也叫Hash Tree,顾名思义,就是一种存储哈希值的树。 Merkle 树的叶子是数据块(例如一个文件或文件集合)的哈希值,代表了区块链中用于记账的账本内容。 非叶节点是其相应子节点的串联字符串的散列。 hash算法也就是digest算法,用于保证主要内容的微小变化都会导致hash内容发生变化,层次树结构保证下一级数据不被篡改. 这里用一棵默克尔树代替整个数据块来做哈希值。 起源其实是一个p2p软件。 它用于下载整个分类帐。 如果发生错误,则无需全部下载。 而是一步步追溯hash值,下载失败。 一小段数据就可以了。

电子签名:比特币也是最早实践电子签名的应用之一。

电子签名分为私钥和公钥两部分。 如果有私钥,则可以通过计算得到公钥,反之亦然。 工作时,私钥由您自己持有,您有责任保密。 公钥公开在网络上,每个人都可以看到。

比特币的核心技术是什么_比特币和股票交易技术_狗狗币是下一个比特币

所有交易数据均由交易者的私钥签名,其他人可以使用公开的公钥来验证签名。 修改交易数据会使签名失效,这是比特币系统对资产最大的保障。

比特币电子签名使用 ecdsa 算法。 这个算法有一个小缺陷,就是如果只修改交易记录中的一个字节,仍然会通过验证。

当然,这种修改不能修改交易金额,但可能会导致后续的哈希计算得到完全不同的ID值。 如果攻击者的网络足够快,广播能力足够强,就可能造成小范围内的假冒。

历史上曾出现过利用这种方式伪造交易失败并向交易者声称成功的案例,但原因并不是比特币系统设计的问题。 如果交易者严格遵守交易原则,在没有人为干预的情况下只接受程序的结果,则损失是可以避免的。

比特币源码:src/secp256k1/src/secp256k1.c 这里主要处理签名相关的东西。

电子签名机制已经渗透到当今互联网的方方面面,包括https网站、电子邮件、电子交易、网上银行等。 现在的问题不是要不要使用电子签名,而是要尽量让经过公网的每一个环节都尽可能靠近。 签名是当前的趋势。

智能合约:比特币系统中整个流程的业务逻辑都被视为智能合约。 与他人完成一笔交易,相当于与双方签订合同,然后通过区块链记账、交易广播、工作量证明来保证合同的签订。 正确执行不会被篡改或攻击。 这个描述比较抽象,可能涉及到多个方面。 在我个人看来,“智能合约”的概念是比特币系统中最有价值的概念。

交易确认:交易确认分为两部分,一是区块生成后的确认,二是一笔比特币交易完成后的确认,均设置了交易确认时间(目前为10分钟)。 主要原因是P2P广播需要时间。 在尽可能多的人收到广播之前确认交易。 前者会导致区块链发生冲突,出现分支。 不能及时纠正的树枝甚至可能成为树枝。 这导致区块链崩溃。 后者如果在广播前没有确认,就会有伪造的可能,而广播被更多人接收后,伪造需要工作证明,是不可能实现的。 但普遍认为,要达到6条区块链的不可逆标准,6*10其实需要1个小时才能真正判断一笔交易的安全性。

有问题加站长微信联系(非本文作者)

比特币和股票交易技术_狗狗币是下一个比特币_比特币的核心技术是什么