im钱包官网下载
数字资产服务平台

im钱包官网下载是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

imtoken国内版下载|比特币钱包私钥

时间:2024-03-08 19:22:06

从Bitcoin Core 导出私钥 - 知乎

从Bitcoin Core 导出私钥 - 知乎首发于互联网支付杂思切换模式写文章登录/注册从Bitcoin Core 导出私钥梁川​互联网金融话题下的优秀答主比特币项目官方 提供的 Bitcoin Core 是很多人入门Bitcoin的第一个钱包。但是由于Bitcion Core 钱包与Electrum等钱包遵循的协议(BIP,比特币改进协议)不同,因此围绕Bitcoin Core钱包私钥导出问题产生了一堆。最近接连有几个人问起:1、备份了Bitcoin Core的wallet.dat文件,怎样恢复出私钥?2、将从Bitcoin Core 使用 dumpwallet 或 dumpprivkey 命令得到的私钥(包括密语种子、主密钥extended private masterkey),导入 Electrum等钱包,为何钱包余额为零?3、怎样从Bitcoin Core 导出私钥,并导入到Electrum 钱包?由于Bitcoin Core 支持BIP32协议,其对应的衍生路径(Derivation Path)为 m/0'/0' , 其对应的地址称之为硬化地址hardened addresses。值得强调的,Bitcoin Core并不支持助记词 mnemonic方案。Electrum之类的钱包,虽然支持BIP32,但其衍生路径一般为:m/44'/0'/0',因此直接将Bitcoin Core导出的密语种子或主密钥( extended private masterkey)导入到Electrum中,由于衍生路径不同,得到的地址、私钥也不相同,最终表现为钱包余额为零。那么从Bitcoin Core中导出私钥正确姿势是怎样呢?从备份wallet.dat恢复钱包文件以下以windows下为例,其他同理。1、从 Bitcoin.org 下载官方客户端 并安装请务必从http://Bitcoin.org 下载Bitcoin Core,以保证资金的安全2、启动Bitcoin Core图形界面(bitcoin-qt.exe)3、正常进入后,不用等同步,退出bitcoin-qt4、将 %appdata%\bitcoin\wallets 下的wallet.dat 重命名 为wallet.dat.orig这里 %appdata% 是 C:\Users\用户名\AppData\Roaming请注意,如果不是全新安装的Bitcoin Core,请务必备份 原wallet.dat。5、拷贝备份的wallet.dat到%appdata%\bitcoin\wallets 下6、重新启动Bitcoin Core图形界面导出钱包文件1、点击菜单项 窗口(Window)->控制台(Console),进入控制台2、解锁钱包(如果设置了钱包密码,必须先解锁)walletpassphrase "YOUR_WALLET_PASSWORD" 6060为解锁钱包60秒注意,如果设置了密码解锁成功,会提示 null;如果失败,会有错误信息。3、导出钱包dumpwallet 'd:\mywallet20210112.txt'

或者

dumpwallet d:/mywallet20210112.txt

或者

dumpwallet d:\\mywallet20210112.txt注意:由于是console,因此要指定导入路径,或者用单引号”避免转义,或者用 \\转义,或者 用 / 。导出的文件中会包含如下重要信息:主密钥( extended private masterkey)# extended private masterkey: xprv9s21ZrQH143K3JQSiGssAtDC3Md3x7XZLA32TcnMvXQFFfLKDrN2QDd8VzFu482kkaFMfKpQLBGRtAi5r7TespySzuTcNTmA2GpP6rYFqN8搜索hdseed=1 为的哪一行,为钱包的密语种子KxgVjtJV33FmMQun3v98drokcvjh2dvxrS3oHEmMQRV132Y8GQWo 2021-01-12T03:27:05Z hdseed=1 # addr=bc1qyujqnktx2h86zqwzy3ppe9m05aqmfp6slp0pmn以上例子 KxgVjtJV33FmMQun3v98drokcvjh2dvxrS3oHEmMQRV132Y8GQWo 就是所谓的钱包密语种子,由钱包密语种子可以衍生生成主密钥( extended private masterkey)及其他子私钥、公钥、地址。可以使用Coleman’s BIP39 tool https://github.com/iancoleman/bip39 验证生成导出文件的相关信息在 Coleman’s BIP39 tool 工具中BIP32 Root Key:输入hdseedDerivation Path:选择BIP32Client:Bitcoin CoreBIP32 Derivation Path: m/0’/0′可以看到,在 Derived Addresses 生成的私钥等信息与导出文件完全相同。4、得到对应地址的私钥如果知道曾经用过的Bitcoin Core的公钥地址,可以直接在导出文件中搜索,对应行的第一列就是对应地址的私钥。如果不记得对应的地址,要得到最近接收过BTC的活跃地址,可以在console中输入:listreceivedbyaddress 0 true

listaddressgroupings在Electrum中导入1、从 Electrum.org 下载 Electrum并安装2、启动Electrum,创建空钱包3、在安装向导的“创建新钱包”,选择“导入比特币地址或私钥”4、在安装向导的“导入比特币地址或私钥”输入框,输入 私钥,稍等同步完,可以看到对应地址的余额,也可以转账。注意:Electrum中,可以直接导入Bitcoin Core的的密语种子、主私钥。导入方法:在安装向导的“创建新钱包”,选择“标准钱包”,选择“我已经有一个密语种子”可以导入hdseed=1的密语种子。选择“使用主密钥(主公钥或主私钥)”可以导入主密钥( extended private masterkey)。当由于衍生路径的不同,导入后生成的私钥和地址,与通过dumpwallet 导入的Bitcoin Core的私钥并不相同。因此如果需要操作原有的地址的余额,请采用“导入比特币地址或私钥”。如果想沿用原有主私钥或密语种子,但使用权限的钱包,可以采用创建“标准钱包”的方案。再次强调一下:以上操作过程,请一定主要备份wallet.da文件,务必保证操作系统安全。对新手,不熟悉Electrum操作的情况下,请慎用 Electrum的 Sweep 功能,有很多新手因为通过Sweep 导入私钥到Electrum中,导致永久丢失币。发布于 2021-01-12 12:18数字货币钱包电子钱包比特币 (Bitcoin)​赞同 22​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录互联网支

如何生成比特币地址和私钥? - 知乎

如何生成比特币地址和私钥? - 知乎切换模式写文章登录/注册如何生成比特币地址和私钥?Peter 王广忠程序员,专业区块链讲解员这集来聊如何生成一个比特币钱包,具体来说包含两项:地址和私钥。文末的参考资料给出了详细的操作步骤,我们这里的内容会比较概要,主要是帮助大家理解公钥密码学和钱包生成过程的关系,钱包地址和比特币私钥的关系。生成私钥生成钱包要从生成私钥开始,钱包地址可以通过私钥运算出来。选择私钥的过程就是在一个限定范围内,随机选择一个数。那么这个范围是什么呢?答案非常简单,第一,私钥必须是32个字节,也就是说是32乘以8位的二进制数。实际使用中,私钥可以表示为二进制格式、八进制格式、Base64格式、WIF格式或者助记词格式。不管什么样的格式,底层都对应相同的256位二进制数。第二,私钥必须是正数并且小于 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141,这是一个非常大的数了,绝大部分的256位二进制数都要比它小。那么为什么会有上面的限制范围呢?这是因为比特币通过私钥运算公钥的时候会使用一套名为 ECDSA 的签名算法,全称是椭圆曲线数字签名算法。ECDSA 还可以选择不同的曲线,比特币选择的曲线被叫做 secp256k1。签名算法决定了私钥的选择范围。生成私钥的时候唯一要考虑的就是安全问题。例如,通过 Python 语言 random.getrandbits(256) 就可以生成256位的随机数,就可以当私钥用了,但是这样生成的随机性其实只取决于生成时间,所以如果攻击者能够猜到你生成这个私钥的大致时间就会相对容易的通过暴力搜索的形式获得私钥。而采用 secrets.randbits(256) 就比较安全一些,因为随机性取决于系统上的一些不可复现的行为,即使我把自己的系统给你,你也不可能重新获得我的私钥。实际中,有人会到 https://www.bitaddress.org 上面生成私钥,这里的随机性取决于我们用鼠标在屏幕上随意滑动的轨迹。总之,私钥只要满足范围,并且保证别人肯定获取不到就可以了。计算公钥有了私钥就可以通过 ECDSA 算法来生成比特币公钥了。首先,我们需要把私钥传入 ECDSA 算法,这样得到的结果是一个64字节的整数,这个数是由长度均为32字节的一个点的 X 值和 Y 值拼接到一起得到的,例如,1e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7。接下来,由这个结果获得比特币的完整公钥是非常容易的,只需要在结果的最开头加上 0x04,也就是 041e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7b73ff919898c836396a6b0c96812c3213b99372050853bd1678da0ead14487d7。完整公钥看起来很长,所以可以压缩一下。我们知道公钥其实是一个点的 X 值和 Y 值拼接而成的,现在已知这条曲线,那么给定一个 X 值,只可能有正负两个 Y 值处在这条曲线上,所以我们可以从完整公钥里面把 Y 值剔除,只保留 Y 值的正负号。这样,如果以后需要的话,我们就可以很容易的运算出 Y 值来了。具体的做法是这样的,我们从完整公钥之中取出 X 值,如果 Y 值的最后一个字节是偶数,那么在 X 值的开头添加 0x02。如果 Y 值的最后一个字节是奇数,则在 X 值的开头添加 0x03。所以,我们当前情况下得到的压缩公钥就是 031e7bcc70c72770dbb72fea022e8a6d07f814d2ebe4de9ae3f7af75bf706902a7。这就是计算公钥的过程,主要就是对私钥进行了椭圆曲线运算。以前的钱包软件通常会使用完整公钥,而现在大部分钱包都使用压缩公钥了。获得地址比特币的地址是通过公钥进行了一系列的转换而获得的,其中主要的是进行了多重的哈希运算。第一步,对公钥进行加密。这里的公钥既可以是完整版,也可以是压缩版,我们选择压缩版。有了公钥之后,对公钥进行两次哈希运算,第一次通过 SHA-256 算法得到运算结果后,对结果再进行一次 RIPEMD-160 运算,最终得到的结果就是所谓的加密版的公钥了453233600a96384bb8d73d400984117ac84d7e8b。第二步,对加密版公钥添加网络标识字节。比特币一共有两个网络:主网和测试网。如果我们需要生成一个主网地址,就要在加密版公钥开头添加 0x00,得到的结果是 00453233600a96384bb8d73d400984117ac84d7e8b。第三步,添加校验值。校验值是通过对第二步得到的结果运行两次 SHA-256 哈希运算,然后取最终哈希值的前四个字节得到的,表示成十六机制就是 512f43c4。把这个校验值添加到第二步结果的末尾,得到的就是钱包地址了,也就是 00453233600a96384bb8d73d400984117ac84d7e8b512f43c4。有了校验值,钱包软件就很容易帮我们判定地址有没有填错或者损坏了。但是,很多时候我们看到的钱包地址不是用十六进制表示的,而是用 Base58 格式,所以看起来可能是这个样子 17JsmEygbbEUEpvt4PFtYaTeSqfb9ki1F1。总结最后来总结一下,生成钱包的过程主要分了这么几步:第一步,生成一个32字节的私钥。第二步,通过椭圆曲线签名算法由私钥获得公钥。第三步,公钥经过一系列的转换得到钱包地址。注意,转换过程中采用了不可逆的哈希运算,所以从地址是不能够反向运算出公钥的。参考:https://medium.freecodecamp.org/how-to-create-a-bitcoin-wallet-address-from-a-private-key-eca3ddd9c05fhttps://medium.freecodecamp.org/how-to-generate-your-very-own-bitcoin-private-key-7ad0f4936e6c编辑于 2019-01-08 10:55比特币 (Bitcoin)​赞同 74​​5 条评论​分享​喜欢​收藏​申请

比特币的密钥,地址与钱包 - 知乎

比特币的密钥,地址与钱包 - 知乎切换模式写文章登录/注册比特币的密钥,地址与钱包add简介比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。数字密钥实际上并不是存储在网络中,而是由用户生成并存储在一个文件或简单的数据库中,称为钱包。存储在用户钱包中的数字密钥完全独立于比特币协议,可由用户的钱包软件生成并管理,而无需区块链或网络连接。密钥实现了比特币的许多有趣特性,包括去中心化信任和控制、所有权认证和基于密码学证明的安全模型。每笔比特币交易都需要一个有效的签名才会被存储在区块链。只有有效的数字密钥才能产生有效的数字签名,因此拥有比特币的密钥副本就拥有了该帐户的比特币控制权。密钥是成对出现的,由一个私钥和一个公钥所组成。公钥就像银行的帐号,而私钥就像控制账户的PIN码或支票的签名。比特币的用户很少会直接看到数字密钥。一般情况下,它们被存储在钱包文件内,由比特币钱包软件进行管理。在比特币交易的支付环节,收件人的公钥是通过其数字指纹表示的,称为比特币地址,就像支票上的支付对象的名字(即“收款方”)。一般情况下,比特币地址由一个公钥生成并对应于这个公钥。然而,并非所有比特币地址都是公钥;他们也可以代表其他支付对象,譬如脚本,我们将在本章后面提及。这样一来,比特币地址把收款方抽象起来了,使得交易的目的地更灵活,就像支票一样:这个支付工具可支付到个人账户、公司账户,进行账单支付或现金支付。比特币地址是用户经常看到的密钥的唯一代表,他们只需要把比特币地址告诉其他人即可。公钥加密和加密货币公钥加密发明于20世纪70年代。它是计算机和信息安全的数学基础。自从公钥加密被发明之后,一些合适的数学函数被提出,譬如:素数幂和椭圆曲线乘法。这些数学函数都是不可逆的,就是说很容易向一个方向计算,但不可以向相反方向倒推。基于这些数学函数的密码学,使得生成数字密钥和不可伪造的数字签名成为可能。比特币正是使用椭圆曲线乘法作为其公钥加密的基础算法。在比特币系统中,我们用公钥加密创建一个密钥对,用于控制比特币的获取。密钥对包括一个私钥,和由其衍生出的唯一的公钥。公钥用于接收比特币,而私钥用于比特币支付时的交易签名。公钥和私钥之间的数学关系,使得私钥可用于生成特定消息的签名。此签名可以在不泄露私钥的同时对公钥进行验证。支付比特币时,比特币的当前所有者需要在交易中提交其公钥和签名(每次交易的签名都不同,但均从同一个私钥生成)。比特币网络中的所有人都可以通过所提交的公钥和签名进行验证,并确认该交易是否有效,即确认支付者在该时刻对所交易的比特币拥有所有权。私钥和公钥一个比特币钱包中包含一系列的密钥对,每个密钥对包括一个私钥和一个公钥。私钥(k)是一个数字,通常是随机选出的。有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥(K)。有了公钥(K),我们就可以使用一个单向加密哈希函数生成比特币地址(A)。私钥私钥就是一个随机选出的数字而已。一个比特币地址中的所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。私钥必须始终保持机密,因为一旦被泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。公钥通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G 。其中k是私钥,G是被称为生成点的常数点,而K是所得公钥。其反向运算,被称为“寻找离散对数”——已知公钥K来求出私钥k——是非常困难的,就像去试验所有可能的k值,即暴力搜索。生成公钥以一个随机生成的私钥k为起点,我们将其与曲线上已定义的 生成点G相乘以获得曲线上的另一点,也就是相应的公钥K。生成点是secp256k1标准的一部分,比特币密钥的生成点都是相同的:{K = k * G}其中k是私钥,G是生成点,在该曲线上所得的点K是公钥。因为所有比特币用户的生成点是相同的,一个私钥k乘以G将得到相同的公钥K。k和K之间的关系是固定的,但只能单向运算,即从k得到K。这就是可以把比特币地址(K的衍生)与任何人共享而不会泄露私钥(k)的原因。因为其中的数学运算是单向的,所以私钥可以转换为公钥,但公钥不能转换回私钥。为实现椭圆曲线乘法,我们以之前产生的私钥k和与生成点G相乘得到公钥K:K = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G公钥K 被定义为一个点 K = (x, y):比特币地址比特币地址是一个由数字和字母组成的字符串,可以与任何想给你比特币的人分享。由公钥(一个同样由数字和字母组成的字符串)生成的比特币地址以数字“1”开头。下面是一个比特币地址的例子:1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy在交易中,比特币地址通常以收款方出现。如果把比特币交易比作一张支票,比特币地址就是收款人,也就是我们要写入收款人一栏的内容。一张支票的收款人可能是某个银行账户,也可能是某个公司、机构,甚至是现金支票。支票不需要指定一个特定的账户,而是用一个普通的名字作为收款人,这使它成为一种相当灵活的支付工具。与此类似,比特币地址的使用也使比特币交易变得很灵活。比特币地址可以代表一对公钥和私钥的所有者,也可以代表其它东西,比如会在132页的“P2SH (Pay-to-Script-Hash)”一节讲到的付款脚本。现在,让我们来看一个简单的例子,由公钥生成比特币地址。比特币地址可由公钥经过单向的加密哈希算法得到。哈希算法是一种单向函数,接收任意长度的输入产生指纹摘要。加密哈希函数在比特币中被广泛使用:比特币地址、脚本地址以及在挖矿中的工作量证明算法。由公钥生成比特币地址时使用的算法是Secure Hash Algorithm (SHA)和the RACE Integrity Primitives Evaluation Message Digest (RIPEMD),特别是SHA256和RIPEMD160。以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160比特(20字节)的数字:A = RIPEMD160(SHA256(K))公式中,K是公钥,A是生成的比特币地址。比特币地址与公钥不同。比特币地址是由公钥经过单向的哈希函数生成的。通常用户见到的比特币地址是经过“Base58Check”编码的,这种编码使用了58个字符(一种Base58数字系统)和校验码,提高了可读性、避免歧义并有效防止了在地址转录和输入中产生的错误。Base58Check编码也被用于比特币的其它地方,例如比特币地址、私钥、加密的密钥和脚本哈希中,用来提高可读性和录入的正确性。比特币钱包钱包是私钥的容器,通常通过有序文件或者简单的数据库实现。另外一种制作私钥的途径是 确定性密钥生成。在这里你可以用原先的私钥,通过单向哈希函数来生成每一个新的私钥,并将新生成的密钥按顺序连接。只要你可以重新创建这个序列,你只需要第一个私钥(称作种子、主私钥)来生成它们。在本节中,我们将会检查不同的私钥生成方法及其钱包结构。比特币钱包只包含私钥而不是比特币。每一个用户有一个包含多个私钥的钱包。钱包中包含成对的私钥和公钥。用户用这些私钥来签名交易,从而证明它们拥有交易的输出(也就是其中的比特币)。比特币是以交易输出的形式来储存在区块链中(通常记为vout或txout)。钱包地址生成1. 首先使用随机数发生器生成一个『私钥』。一般来说这是一个256bits的数,拥有了这串数字就可以对相应『钱包地址』中的比特币进行操作,所以必须被安全地保存起来。2. 『私钥』经过SECP256K1算法处理生成了『公钥』。SECP256K1是一种椭圆曲线算法,通过一个已知『私钥』时可以算得『公钥』,而『公钥』已知时却无法反向计算出『私钥』。这是保障比特币安全的算法基础。3. 同SHA256一样,RIPEMD160也是一种Hash算法,由『公钥』可以计算得到『公钥哈希』,而反过来是行不通的。4. 将一个字节的地址版本号连接到『公钥哈希』头部(对于比特币网络的pubkey地址,这一字节为“0”),然后对其进行两次SHA256运算,将结果的前4字节作为『公钥哈希』的校验值,连接在其尾部。5. 将上一步结果使用BASE58进行编码(比特币定制版本),就得到了『钱包地址』。比如, 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa『私钥』『公钥』『钱包地址』间的关系在上述的五个步骤里只有“BASE58编码”有相应的可逆算法(“BASE58解码”),其他算法都是不可逆的,所以这些数据之间的关系可以表示为:可以看到:通过『私钥』可以得到上述计算过程中所有的值。『公钥哈希』和『钱包地址』可以通过互逆运算进行转换,所以它们是等价的。哈尔滨工程大学计算机学院2021年区块链技术课程苑江昊 邵星源 崔雯龙发布于 2021-05-31 13:35比特币 (Bitcoin)​赞同 6​​添加评论​分享​喜欢​收藏​申请

私钥、种子、助记词之间的关系是什么? - 知乎

私钥、种子、助记词之间的关系是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册比特币 (Bitcoin)数字货币钱包私钥、种子、助记词之间的关系是什么?大家总说私钥很重要,但是没见过。又助记词很重要,那助记词跟私钥是什么关系。提到助记词还有人说种子。这3个是什么关系?显示全部 ​关注者12被浏览12,444关注问题​写回答​邀请回答​好问题​添加评论​分享​3 个回答默认排序币姐教你比特币人人都能看懂的区块链科普节目​ 关注助记词12-24个单词组成,助记词可以生成种子,种子可以生成所有私钥。大概长这样(助记词是用户可见的):种子助记词可以生成种子,种子可以生成所有的私钥。如果用1Password来比喻,种子就好像主密码,一旦有了主密码,你就可以使用1Password里的所有密码。16位的种子大概长这样(普通用户是不需要看到种子的,只需要记住助记词)0C1E24E5917779D297E14D45F14E1A1A私钥私钥大家应该都知道,拥有私钥,就拥有控制权。比特币私钥的原始格式是256位二级制组成的。大概长这样(私钥是普通用户不需要看到的):1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 0如果按照这种格式来导出,每个人都要疯~~关于私钥更多的格式,可以看看币姐之前的回答:币姐教你比特币:为什么各比特币客户端的私钥格式都不一样呢?在钱包中,助记词,种子,私钥是如何运作的?可以看看币姐的详细说明简单总结一下:助记词≠种子(助记词生成种子,但不是相等的关系)种子≠私钥(种子生成私钥,但不是相等的关系)助记词≠私钥(2者没有直接关系)编辑于 2018-03-23 11:15​赞同 6​​添加评论​分享​收藏​喜欢收起​话李话外专注区块链知识分享与项目研究​ 关注钱包,是进入区块链的小伙们必备的工具之一。而钱包的安全也一直是大家都在讨论的一个话题。对于钱包而言,私钥/助记词的安全是非常重要的,谁拥有了私钥/助记词就相当于拥有了对应钱包的绝对掌控权,所以使用钱包的第一要点就是,安全地备份好自己的私钥/助记词。在开始正文之前,我们还是先来简单阐述一下什么是私钥/助记词。以以太坊钱包MetaMask(大家也叫小狐狸钱包)为例,当我们创建一个以太坊钱包后,就会生成一个以“0x”开头的字符串,这个字符串就是钱包「地址」,钱包「地址」的主要用途是收款。在创建钱包的同时,还需要自己设定一个「密码」,一般要求不少于8个字符。这个「密码」一是用于转账时进行验证,二是用「Keystore」导入钱包时,也必须输入这个「密码」进行验证。如果「密码」忘记了,那么我们可以直接用「私钥」或是「助记词」导入钱包,重置一个新的「密码」。上面我们提到几个概念,分别是「地址」、「密码」、「私钥」、「助记词」、「Keystore」。我们来简单梳理一下这几者的关系:「地址」:是一串由字母和数字组成的26位到34位字符串,它们由随机数字和大写字母及小写字母组成。相当于是银行卡的卡号,这个是可以发给别人的。「密码」:创建钱包时候由用户自己设置的一个密码,用于转账等操作的验证。相当于是银行卡的密码,打死不要告诉别人。「私钥」:一般是由64个字符组成的字符串,一个钱包「地址」只对应一个私钥,具有唯一性且不能修改。只要拥有「私钥」,就能进入钱包并拥有这个钱包的所有掌控权,就可以把钱包中的币转移走。相当于拥有了你的银行卡卡号+银行卡密码。打死不要告诉别人。「助记词」:由12个单词组成,每个单词之间有一个空格,等同于「私钥」。我们一般都是备份助记词,因为私钥字符太多,不方便日常的记录和备份。而「助记词」就可以很方便地记录到纸上面保存(藏)起来。打死不要告诉别人。「Keystore」:可以理解为加密后的「私钥」,和钱包的「密码」有关,钱包的「密码」修改后,「Keystore」也发生相应变化。因为「Keystore」是由一大段代码组成,也不方便记录,所以日常我们只要保管好「助记词」就行了。只要密码不泄露钱包不会丢,但也建议打死不要告诉别人。小结:助记词=私钥=Keystore+密码。MetaMask小狐狸钱包,目前使用率最高的以太坊系钱包。MetaMask在首次启动/使用时为用户提供一个独特的12位助记词。但如果你没有备份或忘记了你的助记词,亦或者丢失了助记词怎么办呢?情况一:MetaMask浏览器插件可以正常使用如果MetaMask浏览器插件可以正常使用,那么直接解锁MetaMask浏览器插件(需要输入你自己设置好的一个密码进行解锁)、或者也可以通过手机安装的MetaMask App解锁,然后在设置里面找回12位助记词即可。效果如图1所示。【图1】情况二:MetaMask浏览器插件无法正常使用(浏览器命令方式找回)如果由于某种原因你无法正常使用MetaMask钱包插件、且手机的App也已经卸载了,那么方法就有点复杂,下面我来教大家怎么找回(以谷歌浏览器Chrome操作举例)。1.右键单击 MetaMask 扩展窗口,单击“检查”以打开 Web 检查器。如图2所示。【图2】2.点击Console 选项卡,然后直接键入下面的命令(代码),然后按 Enter 回车键(即先复制下面的代码、然后在粘贴即可)。如图3所示。chrome.storage.local.get('data', result => {

var vault = result.data.KeyringController.vault

console.log(vault)

})【图3】3.命令粘贴成功后,这时就会返回一个以“ {"data": ”开头的结果,这是MetaMask的保险库数据(JSON 格式)。如图4所示。【图4】4.复制一下这段data代码,然后通过MetaMask Vault Decryptor(MetaMask Vault 解密器)进行解码。解码器地址如下:https://metamask.github.io/vault-decryptor/ 【图5】Vault Decryptor 工具也可以离线使用,我们只需要使用浏览器的工具栏 > 文件 > 将页面另存为... > MetaMask Decryptor.htm。然后在把电脑断开与 Internet 的连接的情况下,在浏览器中打开MetaMask Decryptor.htm文件即可正常使用。5.在 Vault Decryptor 页面上,粘贴保险库数据的{"data":}部分,然后输入自己在 MetaMask中为钱包设置的密码,再单击“Decrypt”按钮。如果成功,那么就可以在解密按钮下方看到结果,显示显示出钱包对应的12位助记词。如图6所示。【图6】有了这个12位助记词,那么现在开始,这个钱包就又属于你了,真正的属于你了!情况三:MetaMask浏览器插件无法正常使用(本地缓存文件方式找回)原理同上面的情况二,但如果你不习惯或者太会用浏览器命令的方式操作,那么可以试试下面的方式,直接通过查找电脑本地的文件进行操作。1.先找插件目录,具体路径如下:C:\用户\你的用户名\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn如果你的电脑没有看到这些文件夹,说明默认是隐藏的,你需要设置一下把隐藏文件夹显示出来,如图7所示。【图7】然后找到一个名字是数字且log后缀的文件,用记事本工具打开这个文件,通过记事本的查找功能搜索关键字vault,里面的data代码。如图8所示。【图8】有了这个data开头的代码,接下来的操作就和上面情况二的方法一样了,即只要通过通过MetaMask Vault Decryptor解码即可。情况四:MetaMask浏览器扩展插件已经删除如果删除了扩展,那么极大概率无法找回助记词的,但对于技术牛逼的大佬来说,也有方法找回。虽然删除 MetaMask 扩展,本地留存的私钥/助记词文件也会删除,即便是重装扩展也不会找回,重置只是覆盖一个新的文件而已。但通过技术牛逼的大佬通过特殊恢复手段,如果能找回上文第三种情况里提到的那个log后缀的文件,然后你再按照前面说的方法就可以恢复钱包。最后,我们再来小结一下:一台电脑,安装MetaMask小狐狸创建钱包后,即使卸载小狐狸,助记词和私钥还是有可能存在这台电脑文件夹里,只要别人拿到了这台电脑通过特殊手段恢复硬盘被删除文件,或者引诱你下载木马程序,其实你的助记词和私钥相当于明明白白的放在别人眼前。所以,不能以为在电脑上卸载了钱包就万事大吉了。不过,助记词和私钥是用你的 MetaMask 解锁密码加密的(解锁密码是自己安装MetaMask时候设置的一个进入密码、而且通过助记词也可以在新设备上重置该密码),不会以明文形式存在。如果你的电脑安装过小狐狸钱包,且你的钱包里面有比较大数额的资产,但你的电脑不用了,建议可以通过多次安装新扩展创建空钱包来覆盖之前的扩展缓存文件,以此来降低电脑被别人恢复的概率。总之,站在个人角度,如果因为各种原因无法登入Metamask钱包,且未备份私钥/助记词,那么一定不要直接删除扩展,按照上文提到的方法是可以恢复的。如果扩展删除,且未备份未备份私钥/助记词,此时不要安装任何新扩展,找找技术大牛看看能不能通过找回被删文件的方式找回。而且为了防止极低概率的被通过文件找回的方式恢复,不再使用的电脑最好不要赠予或者出售,可以将其物理销毁或留存,或者每换一次电脑就换一次新钱包。(注:如您对本文有任何问题或建议、欢迎在评论区或公众号留言提出,搜索@话李话外、关注作者更多其它内容吧)发布于 2023-01-19 14:07​赞同 1​​1 条评论​分享​收藏​喜欢收起​​

什么是钱包/交易所/私钥,他们之间的关系是什么? - 知乎

什么是钱包/交易所/私钥,他们之间的关系是什么? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册比特币 (Bitcoin)交易所数字货币什么是钱包/交易所/私钥,他们之间的关系是什么?关注者3被浏览2,710关注问题​写回答​邀请回答​好问题​添加评论​分享​2 个回答默认排序灵引道人师承中医,中国玄学院理事,​ 关注判断一个人是否真的了解区块链,可以先问一句:“我转 Token 给你,你的钱包地址是什么呢?”这个试金石可以轻松地区分很多人。在区块链世界,没有自己的钱包地址就是一个旁观者。要创建一个钱包,需要先获得自己的钱包地址。比如,这就是一个合法的比特币地址:opEHNa6Q4Jz2uvNExL497mE43ikXhwF6k就像银行账户一样,有了它,任何人都可以给你转账。其实,任何人都可以独立地、不联网地生成自己的钱包。这是怎么做到的呢? 01 公钥和私钥这涉及到一个密码学上的一个基本概念:公钥加密技术。公钥加密技术中,公钥和私钥成对出现,公钥加密的东西可以拿私钥解开,私钥加密的东西可以用公钥解开。两者的关系,大家可以想象成一个带锁的盒子和一把钥匙之间的关系。这个特性用来加密和签名。加密的过程,就像是把要寄的信放到盒子里,锁上并写上地址,然后寄出去。寄件人和收件人都很放心,因为其他人无法打开盒子。签名的过程,类似于对外展示钥匙的过程。锁上的盒子只有你可以打开,如果有人拿着你发的钥匙打开了盒子,那盒子里的东西一定是你发的。你手里面握着私钥,无论如何都不能泄露;你的钱包地址,是满世皆知的转换后的公钥。钥匙信息可以被公钥打开,则说明是知道私钥的人加密的。所以,任何的交易一旦用你的私钥加密了,收到的人用你的公钥可以解密,那就认为是你授权的操作。 02 钱包地址的生成比特币世界几个关键的信息是按照这个顺序生成的:先生成私钥,再由私钥算出公钥,再由公钥经过一系列哈希算出钱包地址。私钥 → 公钥 → 钱包地址上面的推导次序是单向的,反向不可能。也就是说,从钱包地址无法得到公钥,从公钥无法得到私钥。比特币的公钥变形出来的钱包地址,可以想象成用户名,这全世界都可以知道;私钥可以想象成密码,这个只有自己知道。私钥是一切的开端。私钥是一个大于零、小于 2 的 256 次方的任意数字,比如下面这个私钥:00000000000000000000000000000001(也就是数字 1)需要注意的是,不是随机生成的私钥,风险非常大!然后,私钥通过椭圆曲线函数,生成对应的公钥,比如下面这个:0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8经过一系列哈希加密之后,最终形成比特币地址,比如下面这个:opEHNa6Q4Jz2uvNExL497mE43ikXhwF6k私钥就像《阿里巴巴和四十大盗》故事里面的“芝麻开门”。世界上任何人只要知道“芝麻开门”这个咒语,就可以在那座大山里面找到那个山洞并且打开大门。一个人是否拥有账户,只看他知不知道那个咒语。四十大盗知道咒语后可以取走宝贝,阿里巴巴知道后也可以取走,至于那个山洞里面有没有金银财宝,则是另外一件事情了。看这篇文章的你,在知道了本文举例中的比特币私钥(即数字 1),这意味着我们对这个地址里面的“钱”都拥有控制权。在比特币的世界,虽然无法知道地址背后的人是谁,但这个地址历史上所有的交易都是公开的,可以通过区块链浏览器查询。发布于 2023-05-01 11:18​赞同 5​​添加评论​分享​收藏​喜欢收起​雅格布​ 关注钱包托管型钱包是把用户私钥储存在自己的服务器中,这种做法的优点是:如果用户丢失私钥,可以在服务器端恢复自己的账户,如果用户更倾向于便捷地使用钱包,会选择托管类型的钱包。同样,托管型钱包的缺点也很明显:服务商可以随时冻结用户资产,也有遭受网络攻击的危险。非托管型钱包则是不提供服务器端的解决方案,私钥会被加密储存在用户的设备中,用户100%掌控自己的资产,但非托管型钱包最大的缺点也在于此:用户如果丢失了自己的助记词,那么用户将无法恢复自己的资产。交易所交易所的核心功能就是:充值、提现、下单、订单撮合、资金结算,对于所有中心化的交易所(CEX)来说,所有的这些环节均有交易平台本身协助完成,而去中心化交易所(DEX)则是把上述所有环节都放在链上,通过智能合约执行全部操作,这样子用户的整个交易过程就无需任何第三方介入处理。目前的CEX交易流程类似券商,用户把自己的虚拟货币资产转入交易所,然后在交易所的监督下完成账户与账户之间的交易,最后用户再把资产提到自己的钱包上;在CEX中用户开户要做KYC(Know Your Customer)认证,维护自己的个人资料等;如Binance而在DEX里面,交易流程就会简化了很多,它们没有KYC认证、也没有充值、提现的步骤,用户使用自己在DEX申请的地址与DEX的智能合约地址交易,用户始终掌握着资产本身;如MetaMask交易的本身,就是货币转移的场景本身,在CEX里,每一个交易的背后,其实是数据库中通过增减用户资产的字段达到货币转移的目的,而在DEX里,支付方使用数字签名把代币转移到收款方的地址上,其中数字签名在数学上表示支付方和收款方公开地址相关联的加密信息,这段加密信息会固化在交易的链条里,一直延展下去。DEX比CEX最大的优势就是安全,相对于CEX来说,DEX的交易处在攻击分散的计算机网络中,没有单一攻击点,这样子使异常攻击变得额外困难,也正因为这个原因,DEX比CEX更耗能,执行效率更低(大部分都在公链上运行),所以一笔交易确认的时间往往会比CEX的长很多,这样子对于那些高并发的实时交易场景来说,就容易形成支持不足。其次DEX比CEX更注重隐蔽性,因为交易不需要对KYC进行验证,交易往往能在匿名环境下自由交易,非常适合无信任状态下的陌生人交易场景。私钥设备安装了钱包,钱包根据设备随机数生成私钥,在用户计算私钥时,有些钱包会加入用户端的信号、声音、图像等更多的随机因素来增大整个熵池,这样子生成的随机数质量最高;私钥本质上可以理解为就是一堆随机数,具体一点:是一堆一共256位,由0和1组成的数字,基于有256位这么多不容易保存,用比特币举例,阿聪就把这串256的数字基于Base58编码转换成一段容易备份的样子,这就是私钥的基本形态,如下所示:KwYHFL7WfhJPkfQkp1LsUwHvy1Pd9KynuxjjVDMZvRSV5D9VJq3vBase58是一种编码方式,它的目的主要是为了避免产生混淆的编码,例如数字0和字母O、小写字母i对应的大写I和大写字母L对应的小写字母l这种非常相似的字体混淆,目前Base58主要用于产生Bitcoin的钱包地址;私钥能生成的总数为2的256次方,短短一个数学表达式就能表达完整,但是这个结果无法用常见事物描述,2的256次方数学结果是1.1579209e+77,简单看就是1.15 ×10的77次方,而地球上的水分子总数为0.47 ×10的47次方,换句话说私钥的总数比地球上的水分子总数还要多很多个数量级,也就是如果你打算用暴力碰撞去获取特定私钥,无疑在地球上去寻找一个特定水分子。基于上面的论述,私钥的安全性取决于2点:足够随机的生成方式+足够大的可生成范围。数字钱包是一个管理私钥(生成、储存、签名)的工具,钱包并不保存资产,资产是在链上。私钥和助记词在功能层面是一致的,助记词的出现,顾名思义是为了解决私钥依然难以记忆、不方便使用的问题;私钥本身尽管已经经过优化,但是仍然很长很臭,在人机交互的领域里,词语更有助于被写在纸上让人清晰理解或在电话中被说出来,更易于传输和转录信息,所以比特币社区基于BIP39协议(Bitcoin Improvement Proposals的第39个改进建议),将这些随机数通过特定编码转化为词库中的单词,俗称助记词,如下所示(私钥是有大小写区分,但助记词是没有的):candy maple cake sugar pudding cream honey rich smooth crumble sweet treat对助记词钱包来说还有个好处,就是一组助记词可以派生出超级多个私钥,每个私钥可以对应一种币种或者一种用途的账户,毕竟一个人可以有很多账号的需求,就和一个人有多张银行卡一样的道理;这个时候你不需要记录每个私钥,只要记录好一组助记词就可以掌握所有资产。只有使用的助记词钱包都遵循了BIP32、BIP39、BIP44协议的,就可以互相使用。私钥和助记词都不能发在联网设备中,而应该认真抄写在纸上或者放在冰甲助记词板中。对BIP32来说,本质上就是为了避免管理一堆私钥的麻烦提出的分层推导方案,达到只需保存一个私钥,其他子私钥、孙私钥可以推导出来。对BIP39来说,本质上就是通过定义助记词让私钥备份和储存得更友好。对BIP44来说,本质上就是给BIP32的分层路径定义规范。公钥公钥和私钥都是建立在区块链网络上加密货币中不可或缺的组成部分,两者都属于公钥密码学(PKC)的范畴;PKC的目的就是简单从一种状态转变到另一种状态,同时需要杜绝这一过程逆转的可能性,在这个过程中,某笔支出确实经资金所有者签署,而不是伪造的,而且还要证明你携带某个秘密,但不会暴露这个秘密。基于PKC的数学函数,是一种易于单向计算,但是计算机却要花费大量时间(数千年)才能算出正确答案的数学问题,这正是它的安全性所在。对私钥来说,它解锁的是你访问自己加密货币的访问权限,用户可以用私钥证明自己是支出交易或发送消息的人,而公钥更像是接收加密货币的地址。拥有私钥可以恢复公钥,但仅使用公钥是不可能获取私钥的。理论上一个用户可以利用他手上的私钥创建很多公钥,私钥自始至终只有一个。当他把他手上创建好的公钥地址对网络上的所有用户公开,所有用户都可以给他发送加密货币,从一定程度上来说,这些加密货币是属于这个用户的,所以只有他能利用自己手上的私钥,去访问发送到了这个公钥地址的加密货币。发布于 2022-10-14 09:18​赞同 2​​1 条评论​分享​收藏​喜欢收起​​

保护你的钱包 - 比特币

保护你的钱包 - 比特币

Bitcoin.org 是一个社区支持的社区,我们十分感谢任何捐助。这些捐助会用于改进网站。

捐助

Bitcoin.org 需要你的帮助!

×

捐助Bitcoin.org

使用下方二维码或地址

3E8ociqZa9mZUSwGdSmAEMAoAxBK3FNDcd

$5.00

(... BTC)

$25.00

(... BTC)

$50.00

(... BTC)

介绍

个人

商家

开发者

入门指南

工作原理

White paper

资源

资源

兑换

社区

词汇表

活动

比特币核心

创新

参与

支持比特币

购买比特币

开发

常见问题

简体中文

Bahasa Indonesia

Català

Dansk

Deutsch

English

Español

Français

Italiano

Magyar

Nederlands

Polski

Português Brasil

Română

Slovenščina

Srpski

Svenska

Türkçe

Ελληνικά

български

Русский

Українська

Հայերեն

العربية

فارسی

עברית

हिन्दी

한국어

ខ្មែរ

日本語

简体中文

繁體中文

Bahasa Indonesia

Català

Dansk

Deutsch

English

Español

Français

Italiano

Magyar

Nederlands

Polski

Português Brasil

Română

Slovenščina

Srpski

Svenska

Türkçe

Ελληνικά

български

Русский

Українська

Հայերեն

العربية

فارسی

עברית

हिन्दी

한국어

ខ្មែរ

日本語

简体中文

繁體中文

Language: zh_CN

保护你的钱包

和在现实生活中一样,你必须保护好自己的钱包。使用比特币可以轻而易举地在世界范围内转移资金,也让你完全掌控自己的资金。如此强大的功能也伴随着很大的安全顾虑。同时,如果正确使用,比特币能够提供高级别的的安全性。请随时牢记,你有责任采取良好的做法来保护你的财产。

View All

使用在线服务要小心

少量的比特币用于日常所需

备份你的钱包

备份你的整个钱包

加密线上备份

使用多个安全的存放处

定期备份

加密你的钱包

永远不要忘记你的密码

使用强密码

离线钱包存储

离线交易签名

硬件钱包

将软件升级到最新版

多重签名以防资金被盗

想想你的遗嘱

使用在线服务要小心

对于任何用以在网上存储你的资金的服务你都应该谨慎。许多兑换和在线钱包服务在过去都出现过安全漏洞,并且这些服务通常来说至今依然无法提供像银行一样的资金存储安全性。因此,你可以选择使用其它类型的比特币钱包。否则,你就应该特别小心地使用这类服务。另外,推荐使用双重认证机制。

少量的比特币用于日常所需

比特币钱包就像是装现金的钱包。如果你不会在口袋里放上千美元,对你的比特币钱包也应有同样的顾虑。一般来说,一个好的策略是:在你的电脑,移动设备或服务器上仅存放少量的比特币用于日常所需,而将剩余的资金存放在更安全的环境里。

备份你的钱包

将你的钱包备份保存在一个安全的地方,能够保护你的钱包免于电脑故障和很多人为错误。如果你对钱包进行过加密,当你的手机或电脑被偷,它还可以用来还原你的钱包。

备份你的整个钱包

有些比特币钱包内部使用很多隐藏私钥。如果你只备份了可见比特币地址的私钥,资金中的很大部分可能都无法从备份中恢复。

加密线上备份

任何线上备份都容易遭致被盗。甚至一台连上网络的电脑也容易遭受恶意软件的侵害。因此,为任何暴露在网络中的备份进行加密是一个良好的安全习惯。

使用多个安全的存放处

单点故障不利于安全性。如果你的备份不限于仅一处,发生坏事情导致钱包无法还原的可能性就会更小。你也可以考虑使用不同的存储介质,比如U盘、纸和光盘。

定期备份

钱包需要定期备份,以确保所有最近的比特币找零地址和新创建的比特币地址都包含在备份中。不过,很快所有的应用程序将使用只需备份一次的钱包。

加密你的钱包

对钱包或智能手机进行加密后,任何人在操作转出资金时都要求输入你设置的一组密码。这样做可以防盗,但要注意这对按键记录硬件或软件无效。

永远不要忘记你的密码

你要确保自己不会忘记密码,否则你将永远失去你的资金。和你的银行账户不同,比特币的密码恢复选项非常有限。事实上,即使你许多年不用也应该记住你的密码。如果对此有怀疑,你也许需要保留一份写有你的密码的纸质副本,存放在像保险柜一样安全的地方。

使用强密码

任何仅包含字母或可识别单词的密码都可以被认为是弱密码并很容易被破解。一个强密码必须包含字母,数字,标点符号,并且其长度必须至少为16个字符。最安全的密码是由专门的程序生成的。强密码通常更难记住,因此你需要认真熟记它。

离线钱包存储

离线钱包也被称为冷存储,可以提供最高级别的安全性存储。它涉及到将钱包存储在没有网络连接的安全环境下。如果处理得当,它可以针对计算机安全漏洞提供一个非常好的保护。对离线钱包进行备份并加密也是一个很好的做法。下面是一些方法的概述。

离线交易签名

用这种方式需要有两台电脑共享同一个钱包的部分内容。第一台电脑必须与互联网完全隔绝,它是唯一持有整个钱包并可以给交易签名的电脑。第二台电脑与网络连接,并且只有一个可以创建未签名交易的可视钱包。这样,你就可以参照以下步骤安全地发起新交易了。

在联网的电脑上创建一个新交易,并把它保存到U盘中。

用不联网的电脑给交易签名。

用联网的电脑将签过名的交易发送出去。

因为这台联网的电脑不能为交易签名,所以即使它被入侵也不能被用来取出资金。Armory可用于处理离线交易签名。

硬件钱包

硬件钱包是高安全性和易用性之间的最佳平衡。它们是从底层起被设计为只能用作钱包的一个非常小的设备。不能安装任何软件,免受计算机安全漏洞和网络盗窃的危害,使得它们非常安全。因为可以备份,如果你的设备丢失,你的资金仍然可以恢复。

将软件升级到最新版

最新版本的Bitcoin客户端已经可以让你获取重要的稳定性和安全性修复。这些更新能够防范各种严重问题,并包含有用的新功能,还能有助于保持钱包的安全。为了使钱包环境更安全,给你的电脑或手机上所有其他软件安装更新也同样很重要。

多重签名以防资金被盗

Bitcoin 拥有多重签名功能,它要求一个交易在得到多个独立的许可之后才能成交。组织机构可以通过这一功能让其成员可以接触它的资产,但是只有在3/5的成员签署交易后才能提款。一些网页钱包也提供多重签名钱包,让用户可以对他们的钱保有掌控权,同时防止小偷通过入侵一个单独的设备或服务器即可盗取资金。

想想你的遗嘱

如果没有为家人和朋友准备一个备份计划,你的比特币可能会永远丢失。当你不在了,如果没有人知道钱包存放的位置,或者知晓你的密码,资金将永远找不回来。花一点时间在这个问题上结果就大不一样了。

支持Bitcoin.org:

捐助

3E8ociqZa9mZUSwGdSmAEMAoAxBK3FNDcd

介绍:

个人

商家

开发者

入门指南

工作原理

注意事项

White paper

资源:

资源

兑换

社区

词汇表

活动

比特币核心

参与:

支持比特币

开发

其他:

法律

Privacy Policy

新闻媒体

关于bitcoin.org

Blog

© Bitcoin Project 2009-2024 基于MIT协议授权发布

Network Status

简体中文

Bahasa Indonesia

Català

Dansk

Deutsch

English

Español

Français

Italiano

Magyar

Nederlands

Polski

Português Brasil

Română

Slovenščina

Srpski

Svenska

Türkçe

Ελληνικά

български

Русский

Українська

Հայերեն

العربية

فارسی

עברית

हिन्दी

한국어

ខ្មែរ

日本語

简体中文

繁體中文

Bahasa Indonesia

Català

Dansk

Deutsch

English

Español

Français

Italiano

Magyar

Nederlands

Polski

Português Brasil

Română

Slovenščina

Srpski

Svenska

Türkçe

Ελληνικά

български

Русский

Українська

Հայերեն

العربية

فارسی

עברית

हिन्दी

한국어

ខ្មែរ

日本語

简体中文

繁體中文

zh_CN

比特币入门教程 - 阮一峰的网络日志

比特币入门教程 - 阮一峰的网络日志

阮一峰的网络日志 » 首页 » 档案

上一篇:区块链入门教程    

下一篇:加密货币的本质    

分类:

理解计算机

⇐ 

 ⇒

比特币入门教程

作者: 阮一峰

日期: 2018年1月 4日

比特币(bitcoin)诞生于2008年的一篇论文。

一个署名为中本聪的人,提出了革命性的构想:让我们创造一种不受政府或其他任何人控制的货币!这个想法堪称疯狂:一串数字,背后没有任何资产支持,也没有任何人负责,你把它当作钱付给对方,怎么会有人愿意接受?

但是,狂想居然变成了现实。随后的几年,在全世界无数爱好者的支持下,比特币网络运行起来了,越来越多的人和资本参与,星星之火,终成燎原。刚刚过去的2017年,比特币迎来了爆发式的增长,从年初的1000美元,最高涨到了2万美元,全世界都为之震动,上到政府,下到普通百姓都在关注。事实就是比特币已经并将继续改变世界。

新闻媒体往往只关注它的火爆表现,忽视或者无法回答一些基本的问题。

比特币的原理是什么?

为什么这个无人管理的体系可以成功运作?

比特币交易的流程是怎么回事?

它与区块链又是什么关系?

下面,我尝试回答这些问题,希望帮助大家理解比特币。抛开技术细节,还是很容易解释的。

有一点说明,本文只讨论技术问题,不涉及如何投资比特币,更不会预测价格走势。事实上,我也不知道,如果我知道怎么发财,可能就不会在这里写博客了。

一、非对称加密

首先,理解比特币,必须理解非对称加密。

你可能听说过这个词,所谓非对称加密,其实很简单,就是加密和解密需要两把钥匙:一把公钥和一把私钥。

公钥是公开的,任何人都可以获取。私钥是保密的,只有拥有者才能使用。他人使用你的公钥加密信息,然后发送给你,你用私钥解密,取出信息。反过来,你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的,且未被篡改,这叫做数字签名(更详细的介绍请看《什么是数字签名》)。

现在请设想,如果公钥加密的不是普通的信息,而是加密了一笔钱,发送给你,这会怎样?

首先,你能解开加密包,取出里面的钱,因为私钥在你手里。其次,别人偷不走这笔钱,因为他们没有你的私钥。因此,支付可以成功。

这就是比特币(以及其他数字货币)的原理:非对称加密保证了支付的可靠性。

由于支付的钱必须通过私钥取出,所以你是谁并不重要,重要的是谁拥有私钥。只有拥有了私钥,才能取出支付给你的钱。(事实上,真实的交易流程稍有不同,私钥保证的不是取出支付给你的钱,而是保证只有你能把这些属于你的钱支付出去,详见后文。)

二、比特币钱包

对于比特币来说,钱不是支付给个人的,而是支付给某一把私钥。这就是交易匿名性的根本原因,因为没有人知道,那些私钥背后的主人是谁。

所以,比特币交易的第一件事,就是你必须拥有自己的公钥和私钥。

你去网上那些比特币交易所开户,它们会让你首先生成一个比特币钱包(wallet)。这个钱包不是用来存放比特币,而是存放你的公钥和私钥。软件会帮你生成这两把钥匙,然后放在钱包里面。

根据协议,公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、易于传播的哈希值。160位是二进制,写成十六进制,大约是26到35个字符,比如 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2。这个字符串就叫做钱包的地址,它是唯一的,即每个钱包的地址肯定都是不一样的。

你向别人收钱时,只要告诉对方你的钱包地址即可,对方向这个地址付款。由于你是这个地址的拥有者,所以你会收到这笔钱。

由于你是否拥有某个钱包地址,是由私钥证明的(具体的证明方法稍后介绍),所以一定要保护好私钥。这是极其重要的,如果你的私钥被偷了,你的比特币也就等于没了,因为他人可以冒用你的身份了,把钱包里面的钱都转走。

同样的,你向他人支付比特币,千万不能写错他人的钱包地址,否则你的比特币就支付到了另一个不同的人了。

三、交易过程

下面,我把整个流程串起来,看看比特币如何完成一笔交易。

一笔交易就是一个地址的比特币,转移到另一个地址。由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的。

问题出在怎么防止其他人,冒用你的名义申报交易。举例来说,有人申报了一笔交易:地址 A 向地址 B 支付10个比特币。我怎么知道这个申报是真的,申报人就是地址 A 的主人?

比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据。

上一笔交易的 Hash(你从哪里得到这些比特币)

本次交易双方的地址

支付方的公钥

支付方的私钥生成的数字签名

验证这笔交易是否属实,需要三步。

第一步,找到上一笔交易,确认支付方的比特币来源。

第二步,算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。

第三步,使用公钥去解开数字签名,保证私钥属实。

经过上面三步,就可以认定这笔交易是真实的。

四、交易确认与区块链

确认交易的真实性以后,交易还不算完成。交易数据必须写入数据库,才算成立,对方才能真正收到钱。

比特币使用的是一种特殊的数据库,叫做区块链(blockchain),详细的介绍请看《区块链入门教程》。本文只讨论交易如何写入区块链。

首先,所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。

根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的哈希。

计算哈希的过程叫做采矿,这需要大量的计算。矿工之间也在竞争,谁先算出哈希,谁就能第一个添加新区块进入区块链,从而享受这个区块的全部收益,而其他矿工将一无所获。

一笔交易一旦写入了区块链,就无法反悔了。这里需要建立一个观念:比特币不存放在钱包或其他别的地方,而是只存在于区块链上面。区块链记载了你参与的每一笔交易,你得到过多少比特币,你又支付了多少比特币,因此可以算出来你拥有多少资产。

五、矿工的收益

交易的确认离不开矿工。为什么有人愿意做矿工呢?

比特币协议规定,挖到新区块的矿工将获得奖励,一开始(2008年)是50个比特币,然后每4年减半,目前(2018年)是12.5个比特币。这也是比特币的供给增加机制,流通中新增的比特币都是这样诞生的。

你可能看出来了,每4年奖励减半,由于比特币可以分割到小数点后八位,那么到了2140年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。

所谓交易手续费,就是矿工可以从每笔交易抽成,具体的金额由支付方自愿决定。你完全可以一毛不拔,一分钱也不给矿工,但是那样的话,你的交易就会没人处理,迟迟无法写入区块链,得到确认。矿工们总是优先处理手续费最高的交易。

目前由于交易数量猛增,手续费已经水涨船高,一个区块2000多笔交易的手续费总额可以达到3~10个比特币。如果你的手续费给低了,很可能过了一个星期,交易还没确认。

一个区块的奖励金12.5个比特币,再加上手续费,收益是相当可观的。按照目前的价格,可以达到100万~200万人民币。想想看,运气好的话,几分钟就能挖到一个区块,拿到这样一大笔钱,怪不得人们对挖矿趋之若鹜。

六、区块的扩容

《区块链入门教程》说过,比特币协议规定,平均10分钟诞生一个区块。区块的大小只有 1MB,最多只能包含2000多笔交易。也就是说,比特币网络每10分钟,最多只能处理2000多笔交易,换算一下,就是处理速度为3~5笔/秒。

全世界的比特币交易这么多,可是区块链每秒最多只能处理5笔,这已经成为制约比特币发展的一个瓶颈。

很早就有人呼吁,改革比特币协议,提升处理速度。这件事在2017年8月有了一点眉目,当时区块链发生了一次分叉,诞生了一个新协议,称为 Bitcoin Cash(简称 BCH)。这种新货币其他方面都与比特币一致,就是每个区块的大小从 1MB 增加到了 8MB,因此处理速度提升了8倍,手续费也低得多。该协议是对原有区块链的分叉,因此当时持有比特币的人,等于一人获赠了一份同样数量的 BCH。

BCH 等于创造了一种新货币,还有人提议,原始比特币的区块大小提升到 2MB,这称为 SegWit2x 。这个建议原定于2017年11月实施,但是最后一刻由于缺乏共识,就被取消了,目前还在讨论中。

七、点对点网络

比特币是一个全世界的开放网络,只要你有服务器,就能加入这个网络,成为一个节点。每个节点都包含了整个区块链(目前大概 100多 GB),并且节点之间时刻不停地在同步信息。

当你发生了一笔支付,你所在的节点就会把这笔交易告诉另一个节点,直至传遍整个网络。矿工从网上收集各种新发生的交易,将它们打包写入区块链。一旦写入成功,

矿工所在节点的区块链,就成为最新版本,其他节点都会来复制新增的区块,保证全网的区块链都是一致的。

最后,你所在的节点也拿到了最新的区块链,从而得知你早先的那笔交易,已经写在里面了,至此交易确认成功。

八、还有一个问题

写到这里,我就介绍完了比特币的基本知识,希望你已经明白了比特币是怎么回事。但是还有一个根本的问题,我没有回答:比特币的本质到底是什么?

说到底,比特币只是区块链的一条记录,是凭空生成的,为什么可以当钱用?举例来说,矿工获得12.5个比特币的奖励,其实就是区块链有一个记录:"xxx地址获得12.5个比特币"。正是这行记录,导致该矿工获得了大笔金钱。如果区块链突然增加了一条记录,记载你的地址获得了1000个比特币,你就真的会有1000个比特币。这到底是为什么?

这篇文章已经够长了,这个问题就留到下次再谈,欢迎关注本系列的最后一篇文章《加密货币的本质》。

九、参考链接

How Bitcoin works , by Timothy B. Lee

Bitcoins the hard way: Using the raw Bitcoin protocol, by Ken Shirriff

(完)

文档信息

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

发表日期: 2018年1月 4日

相关文章

2022.08.02: DNS 查询原理详解

通过 DNS 查询,得到域名的 IP 地址,才能访问网站。

2022.06.03: 字节序探析:大端与小端的比较

今天谈谈一个重要的计算机概念,大家可能都听说过它,但是很少深究,那就是字节序(Endianness)。

2022.02.04: 万兆家庭网络的时代

最近,我想将家里的网络设备,都升级到千兆。

2021.12.07: 为什么 Web3 与区块链有关

互联网迄今有两个阶段:Web 1.0 和 Web 2.0。

留言(162条)

Jaxure

说:

哈哈 最近阮老师集中研究这一块

2018年1月 4日 08:59

| #

| 引用

L.Rain

说:

引用Jaxure的发言:

哈哈 最近阮老师集中研究这一块

阮老师要出手了,哈哈

2018年1月 4日 09:25

| #

| 引用

binary

说:

"这个钱包不是用来存放比特币,而是存放你的公钥和私钥。软件会帮你生成这两把私钥,然后放在钱包里面。"

应该是生成这两把密钥

2018年1月 4日 09:34

| #

| 引用

zyg

说:

传说的去中心化呢~ 到头来还是矿工中心化~ 算力决定一切 哈哈~

2018年1月 4日 10:01

| #

| 引用

温国兵

说:

纠正一个错误

“你可能看出来了,每 4 年奖励减半,那么到了 2140 年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这里应该是 2040 年。

2018年1月 4日 10:07

| #

| 引用

机器猫电路改造

说:

关于第八个问题,不知道阮老师后续文章会不会谈到"比特币的伦理"问题;

比如比特币的出现对现阶段资源分配方式的影响?

如何面对和传统货币一样会带来犯罪问题? 对资源分配方式的处理问题?

另外,不知道阮老师,有没有机会谈一谈 World Community Grid,BOIN 等等这些分布计算? 很好奇,数字货币有没有可能和这些分布计算实现更科学的结合? 而不是像矿工们那样浪费资源.

2018年1月 4日 10:21

| #

| 引用

HiTimor

说:

好好好,入门篇。

2018年1月 4日 10:27

| #

| 引用

Mike

说:

比特币技术复杂、普通人不能很好的理解。比特币没有金融监管、容易产生金融犯罪。前段时间的黑客勒索无不采用比特币技术。所以个人并不看好这一块的技术。

2018年1月 4日 10:29

| #

| 引用

bravist

说:

写的真是通俗易懂,读了好多比特币的文章,这个原理解释地道

2018年1月 4日 10:35

| #

| 引用

小白

说:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

2018年1月 4日 11:37

| #

| 引用

TONYHEAD

说:

有若干疑问:

一个100GB的数据库就可以记录到比特币创立至今的所有交易往来?

"2000笔交易的区块手续费是3-10个比特币",这个交易成本太高了,2000笔流水,大一点的小卖部都不止这个数,难不成按目前的交易成本, 比特币只适合做大额资金的交易?

2018年1月 4日 11:59

| #

| 引用

问天玄铁

说:

比特币目前的很多问题(交易慢,账本大,算力集中)导致比特币一定不是数字货币的最终形态。我们不妨来想想更接近未来形态的数字货币协议和算法,就能让比特币变得不值钱,而且能让自己再次站在财富大门口。

2018年1月 4日 14:13

| #

| 引用

tc

说:

感谢科普了,通俗易懂。

不过有个疑问,“当矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这样感觉货币流通会很受影响啊,不知道在后面当数字货币的文章中会不会说明

2018年1月 4日 14:47

| #

| 引用

张庆华

说:

最近也在看这块,感觉非常有前途

2018年1月 4日 14:56

| #

| 引用

陈辉

说:

还是阮老师写的通俗易懂,能否一直同步到微信公众号里面。

2018年1月 4日 15:27

| #

| 引用

杨高超

说:

@TONYHEAD:

这个应该这么理解,比特币的交易不是以一个比特币为最小单位的,他可以无穷分割下去,例如一次交易交易了0.000001个比特币。

2018年1月 4日 15:31

| #

| 引用

leter

说:

如果我知道怎么发财,可能就不会在这里写博客了。说的很接地气。。哈哈

2018年1月 4日 15:39

| #

| 引用

没事扯扯蛋

说:

谁能说明比特币怎样和实际金钱或实物挂钩的???

如果不能挂钩,比特币就是个数字游戏,没有价值。

如果挂钩了,那说明比特币背后还是有势力(中心)支持的,否则怎么可能风生水起?

2018年1月 4日 16:08

| #

| 引用

BitcoinFan

说:

您最近有关注币圈么?感觉遗漏了很重要的东西:

1.挖矿赚币只是为了激励矿工,这个不是关键。挖矿的本质是达到分布式共识的手段,或者说,就是随机选一个人来记账,防止作弊,这个才是关键。

比特币安全的一个假设就是没有单个的人/组织能掌控50%以上的算力。

比特币的共识规则规定,大家都认最长链,更准确地说,是积累工作量最多的链。

矿工必须积极地接收别人挖到的新区块、在上面追加自己挖出的区块,并把自己挖出的区块积极广播出去,否则,他的链会被孤立,他就白干了。(可想而知,超过50%的算力,就不用鸟这些了)

2.扩容之争吵了几年了,现在BTC的开发者不愿意提高这个1MB的限制,是因为区块扩大后,会加剧比特币的中心化,这样的话,最后我们还不如直接用支付宝、VISA这样的中心化服务。

有人甚至认为比特币已经失去去中心化的本质,因为中国的大矿池已经垄断了算力,也就垄断了记账权。

有了SegWit之后,支撑交易量堪比VISA的闪电网络,还有其他技术能减少区块占用。而且,还有RSK等侧链技术可以期待。

Bitcoin Cash主要是中国矿工群体支持的,虽说未来扩大区块大小是不可避免的,但是Bitcoin Cash除了扩大区块大小,技术上并没有什么优势,它的宣传者还四处混淆视听,宣称只有自己才是真正的比特币。

闪电网络比较复杂,软件开发了几年,最近才基本成型,还在测试中。不过,也确实不能指望它能解决所有问题,因为闪电网络是为微支付设计的,支付通道的容量是有限的,大额交易可能还是直接走主链交易比较方便。

2018年1月 4日 16:37

| #

| 引用

BitcoinFan

说:

引用tc的发言:

感谢科普了,通俗易懂。

不过有个疑问,“当矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这样感觉货币流通会很受影响啊,不知道在后面当数字货币的文章中会不会说明

有人说最后手续费会占到交易额的5%,也有人认为用户花钱养矿工是不值得的,既浪费电,又不能消除被矿工攻击的风险。不如直接换共识机制,把工作证明(PoW)换掉,换成权益证明(PoS),大体上是谁持币多谁更有记账权,相信持币人不会做伤害体系利益的事情,否则他自己的利益会大大受损。

Peercoin算PoS的始祖,不过有学者指出它有漏洞,受到nothing at stake攻击的威胁;以太坊已经在测试PoS机制;还有Cardano,使用的是Ouroboros这个经过学术界同行评议的PoS机制。

2018年1月 4日 16:46

| #

| 引用

BitcoinFan

说:

引用TONYHEAD的发言:

有若干疑问:

一个100GB的数据库就可以记录到比特币创立至今的所有交易往来?

"2000笔交易的区块手续费是3-10个比特币",这个交易成本太高了,2000笔流水,大一点的小卖部都不止这个数,难不成按目前的交易成本, 比特币只适合做大额资金的交易?

现在已经有170GB了。

您怀疑比特币的交易量极为有限——确实是这样!比特币的交易容量小到“可笑”的程度。按照10分钟1MB来算,其实只相当于每秒7笔交易。

虽说可以把多笔交易拼成一个来节省空间,但这么做的效果是有限的。

对于交易所从1个地址提币给N个人这种情况,把多笔交易拼起来确实可以显著地节省空间,但是,这些币最终还是要再被它们的主人花出去,这个时候仍然需要消耗主链空间。

要理解具体情况,您可以去查一查比特币的交易格式,包括UTXO是什么。

我也可以大概给您描述一下:比特币的交易,由“输入”和“输出”两部分组成。

每一笔交易,都相当于把“输入”的币熔毁,重新铸造成“输出”中指定的金额。(其中输出金额需要小于等于输入,少的那部分作为付给矿工的手续费,计入coinbase交易)

所以,每个比特币地址上的余额都可以看作是通过从2009年“创世”开始的所有交易记录推算出来的。

“输入”部分包括数字签名(也就是“见证”部分),数据量一般比较大。

虽然扩大区块大小就可以提高交易量,但这样只是线性扩容,不能指数级地提升容量。

中国矿工群体和少数开发者认为,扩大区块容量并不会让比特币中心化,但是多数人(尤其是国外的社区)都不认同这种说法,目前排前几名的矿池已经把全网算力差不多都垄断了:https://btc.com/stats/pool。

多数开发者认为小额交易不能用宝贵的主链空间完成,需要放在主链之外,比如闪电网络,还有RSK等侧链。

还可以看看Bitcoin Core官方写的FAQ:https://bitcoincore.org/zh_CN/2015/12/21/%E7%B3%BB%E7%BB%9F%E6%89%A9%E5%B1%95%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E7%AD%94/

2018年1月 4日 17:04

| #

| 引用

ixx

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

交易平台提供一个钱包地址 你往里充钱并提供交易记录就可以了 跟你用银行转账类似

平台不会要所有人的钱包(要你也不会给的。。。)需要提币的时候 提供给平台你的钱包地址 就可以转到你的钱包里了

2018年1月 4日 18:01

| #

| 引用

ixx

说:

引用没事扯扯蛋的发言:

谁能说明比特币怎样和实际金钱或实物挂钩的???

如果不能挂钩,比特币就是个数字游戏,没有价值。

如果挂钩了,那说明比特币背后还是有势力(中心)支持的,否则怎么可能风生水起?

最开始有一部分人出于各种目的(收藏,或是炒作),允许你买他们的东西使用比特币支付(最开始买个比萨要50比特币。。。。现在想想。。。)慢慢的,越来越多的人接受了他,才发展到现在,这东西不可做假且数量固定,就像限量版的乐高一样,越多的人支持,“收藏”越值钱

2018年1月 4日 18:10

| #

| 引用

林海草原

说:

关于比特币,之前我还真没有了解过。前两天,一位博友的博客被挂马,被挂的是一个在线挖矿代码,每次打开博客都会被执行。我当时简单了解了一下,但是网上的文章晦涩。当今天看到阮老师的博文,我才真正知道挖矿是什么。挖矿能拿到如此高的奖励,难怪有些人会通过程序漏洞给别人的网站挂马来挖矿。

2018年1月 4日 18:12

| #

| 引用

jg

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

交易平台是知道的,有的平台还实名认证的。

不放心,可以把从平台转移到自己的钱包就好了

2018年1月 4日 18:50

| #

| 引用

BitcoinFan

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

交易平台相当于你把比特币转给他们,然后他们给你一个欠条。

可以说中心化的交易所和比特币的理念是完全背道而驰的。

交易所也确实是各种不靠谱,宣称“被盗”之类事情发生过好多次了,还有结合期货杠杆交易操纵价格、虚发假币之类黑历史。

2018年1月 4日 19:21

| #

| 引用

BitcoinFan

说:

引用林海草原的发言:

关于比特币,之前我还真没有了解过。前两天,一位博友的博客被挂马,被挂的是一个在线挖矿代码,每次打开博客都会被执行。我当时简单了解了一下,但是网上的文章晦涩。当今天看到阮老师的博文,我才真正知道挖矿是什么。挖矿能拿到如此高的奖励,难怪有些人会通过程序漏洞给别人的网站挂马来挖矿。

比特币早就不能用电脑(CPU或GPU)挖了,连FPGA都不行了,现在都是ASIC专用芯片挖矿。详细数据可以看这个:

https://en.bitcoin.it/wiki/Mining_Hardware_Comparison

2018年1月 4日 19:23

| #

| 引用

BitcoinFan

说:

引用jg的发言:

交易平台是知道的,有的平台还实名认证的。

不放心,可以把从平台转移到自己的钱包就好了

比特币的交易记录是一环扣一环,可以追溯的,而且完全公开(随便找个区块浏览器就可以方便地查,开一个比特币全节点也可以直接下载区块链数据)。如果不用混币之类的手段来切断追踪,从实名制交易所转出去还是可以被跟踪的。

2018年1月 4日 19:26

| #

| 引用

BitcoinFan

说:

引用林海草原的发言:

关于比特币,之前我还真没有了解过。前两天,一位博友的博客被挂马,被挂的是一个在线挖矿代码,每次打开博客都会被执行。我当时简单了解了一下,但是网上的文章晦涩。当今天看到阮老师的博文,我才真正知道挖矿是什么。挖矿能拿到如此高的奖励,难怪有些人会通过程序漏洞给别人的网站挂马来挖矿。

现在这些“挖矿木马”挖的都是Monero之类山寨币,它们换掉了比特币的双SHA256工作证明算法,换成对ASIC极不友好的CryptoNight等,这样CPU或GPU挖矿才有可能,否则就被ASIC的能效虐翻了,直接亏本出局。

山寨币一般也都在技术上有创新和改进,比如Monero,已经全网启用RingCT,交易都是机密的,不像比特币那样全部公开透明、可追踪。

2018年1月 4日 19:29

| #

| 引用

ljt2k

说:

对于比特币来说,钱不是支付给个人的,而是支付给某一把私钥。

这里应该是支付给某一把公钥

2018年1月 5日 14:07

| #

| 引用

两只羊

说:

货币的由来是人民生产出来充当流通的东西。

这个是怎么来的,炒作来的。为什么能存在,值得思量的事情。

2018年1月 5日 14:55

| #

| 引用

麻三

说:

老师,下一篇啥时候来啊

2018年1月 5日 15:45

| #

| 引用

区块链小白

说:

如果因为战争,切断了所有出口网络,是不是就变成两条比特链了?

2018年1月 5日 17:54

| #

| 引用

H-u-a-n

说:

写的确实简单易懂,阮老师,受教了,Thanks♪(・ω・)ノ

2018年1月 6日 11:38

| #

| 引用

Dong

说:

有个疑问求解答:

一块区块链只能存2000笔交易,2040年就挖不到新的区块链,但交易是继续增加的,那么区块链用完了怎么办呢?

2018年1月 6日 11:47

| #

| 引用

Ellie Ren

说:

赞 以后可以follow 看你的博客了

2018年1月 6日 11:55

| #

| 引用

xunzhang

说:

如果10分钟内写不满1MB记录,如何处理

2018年1月 6日 15:12

| #

| 引用

Asid

说:

有那个比特币钱包能用的?搜了几个网让,还有ANDORID/IOS的APP,不敢用啊。怕有后门。

2018年1月 6日 17:09

| #

| 引用

方减

说:

浅显易懂,非常好的科普入门文章!期待下一篇

2018年1月 6日 20:30

| #

| 引用

zero

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

交易所才是真正密钥的掌控者,用户实际上是不掌控密钥的。

2018年1月 7日 02:09

| #

| 引用

哈哈

说:

引用jg的发言:

交易平台是知道的,有的平台还实名认证的。

不放心,可以把从平台转移到自己的钱包就好了

这点倒是真的,哈哈哈,我做个这样的平台

2018年1月 8日 09:58

| #

| 引用

max210

说:

期待下一篇

2018年1月 8日 11:16

| #

| 引用

吕海超

说:

连着看完区块链和比特币,特别期待你写《数字货币的本质》,这几天每天都会登上来看一下有没有更新。。。

2018年1月 8日 14:20

| #

| 引用

杨峰

说:

很好奇,比特币是怎么开始的?有这个想法是因为,采矿是产生比特币的“造血系统”,而造血的过程是写入交易记录,而最初是没有交易记录给人来写的。

2018年1月 8日 15:50

| #

| 引用

BitcoinFan

说:

引用Dong的发言:

有个疑问求解答:

一块区块链只能存2000笔交易,2040年就挖不到新的区块链,但交易是继续增加的,那么区块链用完了怎么办呢?

你混淆了比特币发行和挖矿机制。

比特币发行是以区块补贴的形式发放,四年一减半,2140年区块补贴才会归零,但十几年后区块补贴就接近归零了。

但是,矿工还能收到手续费收入。只要矿工有收入,他们就会继续挖。

而且,比特币的难度调整机制让它保持大约10分钟挖出一个区块,无论挖矿的算力是多还是少都是这样。挖矿的算力多了,难度就上升、出块(先加快再)放缓,反之难度下降、出块(先放缓再)加快。

2018年1月 8日 19:05

| #

| 引用

BitcoinFan

说:

引用xunzhang的发言:

如果10分钟内写不满1MB记录,如何处理

以前一直是写不满的,写满了才有拥堵问题。

2018年1月 8日 19:06

| #

| 引用

BitcoinFan

说:

引用杨峰的发言:

很好奇,比特币是怎么开始的?有这个想法是因为,采矿是产生比特币的“造血系统”,而造血的过程是写入交易记录,而最初是没有交易记录给人来写的。

没人用,矿工可以打空块。

比特币最初就是中本聪一个人在那里挖。

2018年1月 8日 21:15

| #

| 引用

BitcoinFan

说:

引用Asid的发言:

有那个比特币钱包能用的?搜了几个网让,还有ANDORID/IOS的APP,不敢用啊。怕有后门。

比特币官网:https://bitcoin.org/zh_CN/

按照去中心化的精神,比特币是没有官网的,这个网站的管理员是Cobra。

一般用户推荐Electrum,最好结合硬件钱包,防止木马偷币。

比太钱包也不错,有方便的冷热钱包选择。

想折腾技术就装Bitcoin Core,不过这个是全节点,要下载一百多GB的区块链数据。

顺便说一下,现在1M区块空间已经满了,手续费比较高,转账时最好启用RBF(勾选Replacable),这样万一转账卡着了,可以直接加手续费加速确认。

2018年1月 8日 21:18

| #

| 引用

BitcoinFan

说:

SegWit2x的目的其实是把Core踢出去,而不是扩容。但实际上支持Core的人还是不少的,Core不愿意被“打脸”,这个2x还能有多少支持率呢……

而且,实际上2x这个项目搞出来的btc1软件(从Core fork出来的)很挫,最后还爆出off-by-one这种低级bug,参与者大概本来就是同床异梦吧。

2018年1月 9日 07:30

| #

| 引用

Mark

说:

引用BitcoinFan的发言:

您最近有关注币圈么?感觉遗漏了很重要的东西:

1.挖矿赚币只是为了激励矿工,这个不是关键。挖矿的本质是达到分布式共识的手段,或者说,就是随机选一个人来记账,防止作弊,这个才是关键。

比特币安全的一个假设就是没有单个的人/组织能掌控50%以上的算力。

比特币的共识规则规定,大家都认最长链,更准确地说,是积累工作量最多的链。

矿工必须积极地接收别人挖到的新区块、在上面追加自己挖出的区块,并把自己挖出的区块积极广播出去,否则,他的链会被孤立,他就白干了。(可想而知,超过50%的算力,就不用鸟这些了)

2.扩容之争吵了几年了,现在BTC的开发者不愿意提高这个1MB的限制,是因为区块扩大后,会加剧比特币的中心化,这样的话,最后我们还不如直接用支付宝、VISA这样的中心化服务。

有人甚至认为比特币已经失去去中心化的本质,因为中国的大矿池已经垄断了算力,也就垄断了记账权。

有了SegWit之后,支撑交易量堪比VISA的闪电网络,还有其他技术能减少区块占用。而且,还有RSK等侧链技术可以期待。

Bitcoin Cash主要是中国矿工群体支持的,虽说未来扩大区块大小是不可避免的,但是Bitcoin Cash除了扩大区块大小,技术上并没有什么优势,它的宣传者还四处混淆视听,宣称只有自己才是真正的比特币。

闪电网络比较复杂,软件开发了几年,最近才基本成型,还在测试中。不过,也确实不能指望它能解决所有问题,因为闪电网络是为微支付设计的,支付通道的容量是有限的,大额交易可能还是直接走主链交易比较方便。

想问 BitcoinFan 一个问题,挖矿的成功与否是不是取决于计算机计算力的大小,假设有人的或者某个组织的计算机计算力非常强,那不代表每次的挖矿都是他们成功了?这不就有可能超过50%以上的算力了吗

2018年1月 9日 11:35

| #

| 引用

henry

说:

交易所才是中心化的东西!我猜你在交易所买卖比特币,真正的比特币有可能是交易所帮你代持!就像互联网彩票一样!

2018年1月 9日 11:42

| #

| 引用

重本聪

说:

看了一片文章 都是深入浅出的讲这个技术 能看懂一半吧 可是作为货币 货币啊 它的基础在哪 目前看就是谁的矿机多谁厉害啊 比特币个数是定的 所谓涨跌 都是炒出来的 这不是货币的基本价值啊 还有 这玩意不唯一 现在有起码数十种 加密货币 这肯定不算那些传销用货币 这些货币号称都是更牛逼的 更合理的 发明的人更吊的 说道发明人 这些中本聪就是因为聪明发明了这么一套理论? 他定的各种协议 规矩大家就 必须遵守 就是因为互联网精神就是公平公正?这是不是太乌托邦了 那以后有没有大本聪 巨本聪 利用这些干坏事呢

2018年1月 9日 11:48

| #

| 引用

重本聪

说:

引用Mark的发言:

想问 BitcoinFan一个问题,挖矿的成功与否是不是取决于计算机计算力的大小,假设有人的或者某个组织的计算机计算力非常强,那不代表每次的挖矿都是他们成功了?这不就有可能超过50%以上的算力了吗

有个机制 算出来的时间并不固定 如果一段时间内太多了 就会增加难度 太少了 就会减小 大概这么个意思 算力是基础 但不是一定就最先算出来 但矿机多 肯定没错 你看看网上那些一片矿机的照片

2018年1月 9日 11:52

| #

| 引用

sms

说:

所以说,下个钱包app就分了一对key和一个地址?没有交易的话这个地址有效么?不怎么懂

2018年1月 9日 14:47

| #

| 引用

凡浩浩

说:

关注的博客很久了,看了你很多文章,佩服您的才华,敬佩您的坚持,感谢您的分享,很想问您一个问题,您最初热爱文学,后来获得经济学博士学历,成为大学教授,现在又是计算机工程师,在每一次选择的时候,您迷茫过吗?什么才您的热爱,您未来还会选择做别的吗?

2018年1月 9日 15:35

| #

| 引用

小米

说:

有一个地方不明白,需要请教博主。

如果我是矿工,挖矿时在当前交易记录中擅自增加一条“我获得1000比特币”的记录,然后很幸运这块矿被我挖到,交易记录被记录和通报全网了。

那是不是就能作弊了?

2018年1月 9日 16:30

| #

| 引用

王挺

说:

引用BitcoinFan的发言:

你混淆了比特币发行和挖矿机制。

比特币发行是以区块补贴的形式发放,四年一减半,2140年区块补贴才会归零,但十几年后区块补贴就接近归零了。

但是,矿工还能收到手续费收入。只要矿工有收入,他们就会继续挖。

而且,比特币的难度调整机制让它保持大约10分钟挖出一个区块,无论挖矿的算力是多还是少都是这样。挖矿的算力多了,难度就上升、出块(先加快再)放缓,反之难度下降、出块(先放缓再)加快。

我也有此疑问,但感觉这个回答没答到点上。

交易记录是必须要附在新的区块里,再写入主区块链才能生效的。而2040年之后,已经没机会“算出”新的区块了,还怎么附加交易记录呢?

2018年1月 9日 20:00

| #

| 引用

小米

说:

引用王挺的发言:

我也有此疑问,但感觉这个回答没答到点上。

交易记录是必须要附在新的区块里,再写入主区块链才能生效的。而2040年之后,已经没机会“算出”新的区块了,还怎么附加交易记录呢?

你没有分清楚生成区块与取得比特币之间的区别。区块是永远可以生成的,只要对上一区块的头文件进行hash运算并符合难度要求即可。但生成区块后,能否得到比特币奖励,是不一定的,固定收益是逐年递减的。

2018年1月10日 14:24

| #

| 引用

davino

说:

有几个疑问:

1. 交易平台是不是本身自己就是矿工?

2. 如果交易平台是矿工,在上面平台上用户的交易是实时的,但交易平台如果成功把记录放到链上,是不是等于你和用户没有进行任何操作?

3. 火币现在能进行P2P的交易。如果火币没有挖到矿,不是等于买方白给钱了?

2018年1月10日 16:10

| #

| 引用

齐宁

说:

我在想,中本聪拥有多少比特币,现在财富有多少了...

2018年1月10日 16:54

| #

| 引用

YANG

说:

如果我说这东西是骗人的,会不会有人来教育我?

区块链本质不谈,就说普通用户层面。

1. 普通人使用比特币的最大理由是什么?

2. 为什么要去挖矿?货币不是拿来用的么,为啥大部分人不去使用它。

3. 根据文中所写,在极端情况下一笔交易可能不会被确认,或者很长时间才能被记录下来。人们使用这种东西图了个啥?

4. 为什么要相信比特币组织,而不相信现有的货币发行组织?

2018年1月11日 10:47

| #

| 引用

FTY

说:

个人认知太浅,无非是浪费世界资源。与权贵争,成王败寇而已。

2018年1月11日 11:16

| #

| 引用

张鹏

说:

1,打包是谁做的? 旷工如何判断打包没有造假?

2,一个打包要2000条交易记录,如果当前一直不足2000条,打包会一直等待?

3,全网同步区矿链,这个效率会不会很低? 这很容易发生不一致问题。新的区块如何保证链到了最新的区块后面?

2018年1月11日 15:44

| #

| 引用

fogin

说:

引用TONYHEAD的发言:

有若干疑问:

一个100GB的数据库就可以记录到比特币创立至今的所有交易往来?

"2000笔交易的区块手续费是3-10个比特币",这个交易成本太高了,2000笔流水,大一点的小卖部都不止这个数,难不成按目前的交易成本, 比特币只适合做大额资金的交易?

连大额资金交易这个场景也做不了, 你知道这个世界上每秒发生着多少笔大额交易么。。。

2018年1月11日 16:59

| #

| 引用

forget

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

可以这样理解:比特币是在全世界网络中交易的,而公钥和私钥是用比特币底层了一组加密算法产生的。我们想要参与其中就需要得到这组秘钥。这个交易平台(比如:比特币中国)就是帮我们来用这个加密算法产生这组秘钥的。谁都可以去要,然后平台就给你生成这对秘钥。中间应该不会记录你的任何信息。就好比:我是大街上的一个小贩,你是路人,你想买了东西了,我卖给你就是了,不需要你的任何信息。

2018年1月12日 11:22

| #

| 引用

BitcoinFan

说:

引用王挺的发言:

我也有此疑问,但感觉这个回答没答到点上。

交易记录是必须要附在新的区块里,再写入主区块链才能生效的。而2040年之后,已经没机会“算出”新的区块了,还怎么附加交易记录呢?

新的比特币目前是通过每区块12.5BTC、四年一减半的区块补贴形式发放的(也就是从coinbase交易里“凭空生成”)。

但是,挖新区块在技术上并不需要生成新的比特币。

实际上,就在现在,矿工就可以选择不拿区块补贴(目前是每区块12.5BTC)——最近就有矿池出了Bug,涉事矿工不慎“弄丢”了12.5BTC:

http://8btc.com/thread-121250-1-1.html

对于矿工来说,有利益驱动,他们才会去挖矿。没了区块奖励,他们还可以收交易手续费,这个可以成为驱动他们挖矿的激励。

但是,其实很多人都觉得这个设计不好,他们认为手续费必须占交易额的一个比例才能维持系统安全,这个比例低了,矿工作为“保安”就可能反过来“监守自盗”。而且,维持这个体系运转还要白白烧电。

所以,现在还有人在研究PoS等新共识机制,比如以太坊的Casper、Cardano的Ouroboros,试图取代目前被比特币和以太坊使用的PoW共识机制(这个我也是拾人牙慧,各位感兴趣可以去知乎关注maxdeath这位大神)

引用davino的发言:

有几个疑问:

1. 交易平台是不是本身自己就是矿工?

2. 如果交易平台是矿工,在上面平台上用户的交易是实时的,但交易平台如果成功把记录放到链上,是不是等于你和用户没有进行任何操作?

3. 火币现在能进行P2P的交易。如果火币没有挖到矿,不是等于买方白给钱了?

1.交易平台相当于一个比特币用户。平台不需要是矿工,但也有矿业兼职开交易平台,比如ViaBTC,是个矿池,他们就开过交易所。

2.没太理解你的意思。你想问交易所能不能赖账么?

现在的交易所一般都是中心化的,而且好像大多没有第三方存管,这不就坑爹了——相当于你把比特币和人民币、美元等法币转给他,他给你一个欠条,他们赖账跑路你就GG了。然后,平台上的各种交易都和比特币区块链无关,直到你提币或充币。哪怕是ViaBTC这样的也不例外。

3.P2P?你说的是OTC场外交易么?场外是把原来的集中竞价撮合去掉,大家手动发布交易信息、进行交易,平台只做信息交流和中间人担保。币一般是其他用户充的,不是平台挖的。而且这种场外交易确实不能完全保证货银对付,可能发生一方伪造法币支付凭据、忽悠对方放币等欺诈。

2018年1月13日 00:53

| #

| 引用

BitcoinFan

说:

引用张鹏的发言:

1,打包是谁做的? 旷工如何判断打包没有造假?

2,一个打包要2000条交易记录,如果当前一直不足2000条,打包会一直等待?

3,全网同步区矿链,这个效率会不会很低? 这很容易发生不一致问题。新的区块如何保证链到了最新的区块后面?

1.只有矿工有记账权:因为只有矿工有算力、能挖出满足全网的难度需求的新区块,所以只有他们能挖出合法的区块。

2.不会,矿工可以打空块(只有一条给自己发奖励的coinbase交易)。区块满了反而会有问题——拥堵、手续费高涨。

现在的区块大小上限是1MB,或者说是浮动的(因为SegWit已经激活,交易信息被分为两部分,其中“见证”这个部分字节数按照乘0.25计算)

3.效率确实很低。不一致问题,挖矿就是解决这个问题的,挖矿是一种分布式共识机制,叫工作证明。大家只认最长链有效(准确地说是积累工作量最大的链)。

2018年1月13日 00:57

| #

| 引用

BitcoinFan

说:

引用张鹏的发言:

1,打包是谁做的? 旷工如何判断打包没有造假?

2,一个打包要2000条交易记录,如果当前一直不足2000条,打包会一直等待?

3,全网同步区矿链,这个效率会不会很低? 这很容易发生不一致问题。新的区块如何保证链到了最新的区块后面?

比特币的交易记录是一环扣一环的。如果一个新节点要严格验证的话,需要从2009年的创世区块开始验证(不断地更新UTXO集合,也就是删掉“已经被原主人花掉的币”,加入“有了新主人的币”)。但是,这样跑一遍验证,只能防止抢劫比特币、无端凭空生成比特币,不能阻止双重支付。

每条交易都会被广播到整个网络。交易包含数字签名,节点也会维持一个UTXO集合,可以验证交易是否有效,强制花别人的币、花无中生有的币都是无效交易,会被丢弃。矿工会把验证过的交易加到要挖的区块里,如果hash值碰出来了,挖到了有效的区块,他们就会立刻把这个新区块广播出去,让大家检查、承认。

2018年1月13日 01:10

| #

| 引用

BitcoinFan

说:

引用forget的发言:

可以这样理解:比特币是在全世界网络中交易的,而公钥和私钥是用比特币底层了一组加密算法产生的。我们想要参与其中就需要得到这组秘钥。这个交易平台(比如:比特币中国)就是帮我们来用这个加密算法产生这组秘钥的。谁都可以去要,然后平台就给你生成这对秘钥。中间应该不会记录你的任何信息。就好比:我是大街上的一个小贩,你是路人,你想买了东西了,我卖给你就是了,不需要你的任何信息。

你的描述是错的。

密钥是任何人都可以生成的。比特币用了ECDSA这个非对称加密算法,它被用来确定一个币的控制权/所有权——只有掌握私钥的人才能花对应地址上的币。

这个和交易平台完全没关系,交易平台只是为了方便比特币法币(如人民币/美元)或比特币山寨币的交易而存在的,只有集中竞价撮合的交易所才能产生足够的流动性和市场深度——有了交易所,一秒钟你就可以卖掉/买入1.5BTC,币很多的话还能挂冰山委托慢慢买/卖,如果没有交易所,你就需要自己去场外交易平台甚至是微信群等地方,手动挂单、喊单、吃单,一大意还会被骗。

可以说交易所在比特币系统里也只是个用户而已。

2018年1月13日 01:18

| #

| 引用

BitcoinFan

说:

引用张鹏的发言:

1,打包是谁做的? 旷工如何判断打包没有造假?

2,一个打包要2000条交易记录,如果当前一直不足2000条,打包会一直等待?

3,全网同步区矿链,这个效率会不会很低? 这很容易发生不一致问题。新的区块如何保证链到了最新的区块后面?

补充一下,花“已经花掉的币”也是无效交易。

至于双重支付,需要有很大的算力(51%攻击)才能做到,原理是用大算力挖一条更长的链,在这条链里,原先转给A的币被转给了B。有了超过50%的算力,只要坚持时间够长就一定能成功;如果没有那么多算力,也有一定概率能成功,但确认数越多,成功概率越低。

51%攻击能产生的实质威胁主要就是双重支付,除此之外还有审查交易(换句话说就是冻结指定的地址)等手段。

2018年1月13日 01:22

| #

| 引用

BitcoinFan

说:

@YANG:

这个就是信仰问题了,是信政府这个中央权威,还是信比特币这套分布式共识机制呢?没法说得通啦。

有人就认为比特币最后会像“世界语”一样半死不活。

要说骗局的话,拉高出货就可以看作是欺诈,无论是股市还是币市,这种现象都存在。

2018年1月13日 01:28

| #

| 引用

BitcoinFan

说:

引用小米的发言:

有一个地方不明白,需要请教博主。

如果我是矿工,挖矿时在当前交易记录中擅自增加一条“我获得1000比特币”的记录,然后很幸运这块矿被我挖到,交易记录被记录和通报全网了。

那是不是就能作弊了?

你这么做,挖出的区块就是非法的。

只要别的节点(无论是矿工的全节点,还是不挖矿的全节点)接收到区块进行检查就会发现新生成的币量超过共识规则规定的区块奖励,然后就会拒绝承认这个区块。

2018年1月13日 01:30

| #

| 引用

BitcoinFan

说:

引用Mark的发言:

想问 BitcoinFan一个问题,挖矿的成功与否是不是取决于计算机计算力的大小,假设有人的或者某个组织的计算机计算力非常强,那不代表每次的挖矿都是他们成功了?这不就有可能超过50%以上的算力了吗

没有人掌握超过50%的算力是比特币安全的前提。

如果有人掌握的算力超过50%,他就可以不用鸟别的节点挖出的区块,然后就可以进行51%攻击——比如回滚交易记录,或者审查交易(冻结任意比特币地址)。但即使是这样,他也可能会顾忌攻击行为是否会让比特币失去价值(然后他的矿机和币就都作废了),所以即使有人手里有超过50%的算力也未必会实行51%攻击。

2018年1月13日 01:35

| #

| 引用

BitcoinFan

说:

引用温国兵的发言:

纠正一个错误

“你可能看出来了,每 4 年奖励减半,那么到了 2140 年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这里应该是 2040 年。

博主没错,就是2140年。

但是,四年一减半还是很快的,再减半几次,区块补贴就已经接近归零了。

2018年1月13日 01:40

| #

| 引用

BitcoinFan

说:

引用davino的发言:

有几个疑问:

1. 交易平台是不是本身自己就是矿工?

2. 如果交易平台是矿工,在上面平台上用户的交易是实时的,但交易平台如果成功把记录放到链上,是不是等于你和用户没有进行任何操作?

3. 火币现在能进行P2P的交易。如果火币没有挖到矿,不是等于买方白给钱了?

前面的回帖好像没显示出来,不知道是不是博主要审核……

交易平台只相当于一个比特币用户,往难听了说,就是你把币转给他们,他们给你一个欠条。

也有ViaBTC这样矿业兼职开交易所的,即使是这样,性质仍然不变。

2018年1月13日 01:43

| #

| 引用

BitcoinFan

说:

引用sms的发言:

所以说,下个钱包app就分了一对key和一个地址?没有交易的话这个地址有效么?不怎么懂

密钥是任何人都可以生成的,必须随机生成,否则别人就可以猜出来,这样就不安全了。

比特币用了ECDSA这个非对称加密算法,打个比方,就是认章不认人,章(密钥)其实有机器就能刻(任何人都可以用电脑生成,甚至可以用骰子来生成),只有你手里有章(私钥),能给账单盖章(数字签名),其他人手里都有完整账本,如果你想花无中生有的钱、花之前已经被花掉的钱、花别人的钱,都是无效的。

私钥可以推算出公钥,公钥经过两次哈希运算,再加上校验值、经过Base58编码就得到地址。反推在目前是不可能的,除非ECDSA、RIMEPD160、SHA256算法被破解(哈希算法本来就是不可逆的,即使“破解”,也不能由哈希值“恢复原状”,只是能找到碰撞值而已,不过目前找到碰撞也足够花别人地址上的钱了)。

现在的钱包一般都是HD的,也就是分层确定性钱包,由一个随机种子就可以推算出几乎无穷无尽的私钥,种子还可以表示为一串单词(密语),这样备份/恢复钱包就方便了,而且可以每次使用比特币都换一个地址。

2018年1月13日 01:58

| #

| 引用

BitcoinFan

说:

引用sms的发言:

所以说,下个钱包app就分了一对key和一个地址?没有交易的话这个地址有效么?不怎么懂

没用过的地址也是有效的。

博主对比特币地址的描述有误:比特币地址不是用十六进制表示公钥的哈希,而是用Base58编码表示公钥的哈希+一段校验值。用那段校验值就可以知道地址有没有错。

甚至还有找不到对应私钥的“烧币地址”(Proof of Burn),转进去的币就无法被转出来,等于被销毁了,这种地址同样是有效的。比如:合约币CounterParty提出的1CounterpartyXXXXXXXXXXXXXXXUWLpVr。生成这种地址也不难,先写出Base58地址,内容可以任意,然后算出对应的二进制数据(Base58解码),再计算对应的校验值,加到后面,然后重新Base58编码,就可以得到这种“烧币地址”。

2018年1月13日 02:17

| #

| 引用

BitcoinFan

说:

@YANG:

比特币的优点在于无国界、(伪)匿名、快速(相对电汇等传统服务)、安全等。价格波动大也确实是个问题,不过也不是完全没办法,比如用期货交易对冲(不过目前期货交易平台也是中心化的,甚至有平台亲自下海操纵市场等黑历史,而且,平台肯定要收交易手续费)。

挖矿是达成分布式共识的手段,这样才能防止双重支付。也有人觉得挖矿不好,达成共识慢、吞吐量有限、浪费能源、可能“监守自盗”,就开始想办法改进,所以现在也有其他共识机制,比如以太坊的Casper、Cardano的Ouroboros,都是PoS共识机制;还有比特股的DPoS等。

2018年1月13日 02:47

| #

| 引用

walker

说:

问两个问题啊:

1, 目前每个节点大小约为100G, 也就是说选择加入这个网络的话, 初始是要"同步"100G 的内容到硬盘上对吧?

2, 没有确认的交易, 是以什么形式传遍全网的? 从文中的描述, 好像是"纯请求, 不持久化", 那么文中又描述了有的交易因为手续费低, 可能几周都没有确认, 那么可以推断出任何交易其实都是持久化了的(并且严格遵循区域链的原因, 保证了不可篡改), 并不是单纯靠

"即时"的网络请求, 所以一个比特币节点严格意义上是有确认的和多如牛毛未确认的"数据库"构成? 这样的话, 目前总量100G 的大小, 其实饱含了即时全网所有未确认的交易数据, 这个理解对么?

2018年1月15日 01:51

| #

| 引用

Leo

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

有道理啊

2018年1月15日 11:09

| #

| 引用

rstevens

说:

首先赞一下阮老师的文章!

不过还是有很多细节的地方有疑惑,例如

"首先,所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。

根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。矿工负责把这2000多笔交易打包在一起,组成一个区块,然后计算这个区块的 Hash。"

1、 交易数据是怎么传到矿工那的? 是发给所有矿工么?

2、 矿工自己来决定把多少个交易合并到一个区块中么?

这些细节,如果有实现代码可以看到就好了。阮老师知道有哪些开源的代码可以学习么?

2018年1月15日 16:41

| #

| 引用

ty

说:

所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。

根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。

相请教第一个块区是怎么来的?没有交易矿工就没办法写入块区,不写入块区就得不到比特币。

实在想不通,求指教。

2018年1月15日 21:34

| #

| 引用

Alex

说:

其实,任何东西想成为货币,就是一个信心,当然还有方便性。

要是人们都认为这东西能当钱使,那它就值钱了。

就像一般等价物的诞生一样,只不过现在的技术让这个过程简化快捷了很多。

这发行起来岂不就是通货膨胀啊!!!首先就让这显卡贵到姥姥家去了。

2018年1月16日 17:14

| #

| 引用

yaro

说:

每个区块的容量随着时间的增长会越来越大么,不会爆掉么?

2018年1月17日 17:03

| #

| 引用

BitcoinFan

说:

@walker:

1.现在已经冲着200GB去了。如果要完整从头验证一遍,需要把这么多区块链数据全部下载一遍。全节点也支持修剪模式(prune),但就我自己的经验,修剪模式会带来一些不便,比如不能rescan(导入私钥的时候就需要rescan来显示出正确的转账记录和余额)。以后可能有backward syncing,也就是从最近的区块倒着往回同步,而且还要同步UTXO集合(相当于余额数据)。

2.不对。

一百多GB是2009年比特币诞生至今的所有已确认交易。中间有不少孤块/分叉都被丢弃了,还有很多零确认因为被双花/手续费太低等原因也被丢弃了。

每个比特币节点都会连接到附近的节点(不过连接数默认是受限的),一个人广播一笔交易后,会一传十十传百,直到传遍整个网络。

零确认交易是保存在内存池里的,这些交易只是等待着矿工把它打包进链,是不算数的(比如,已有一笔零确认交易,但是矿池在新挖出的区块中,把另一笔与之冲突的“双重支付”交易打包进去了,那么大家都承认区块链里的那个交易有效,零确认交易无效)。

不过,现在大矿池基本垄断了算力,而且都遵守Opt-in RBF的规则,所以一般的零确认交易在几天之内还是不能双花的(也就是“卡着确认不了”),因为RBF现在还不是默认启用,但未来会改成默认启用。

2018年1月19日 16:03

| #

| 引用

BitcoinFan

说:

引用ty的发言:

所有的交易数据都会传送到矿工那里。矿工负责把这些交易写入区块链。

根据比特币协议,一个区块的大小最大是 1MB,而一笔交易大概是500字节左右,因此一个区块最多可以包含2000多笔交易。

相请教第一个块区是怎么来的?没有交易矿工就没办法写入块区,不写入块区就得不到比特币。

实在想不通,求指教。

第一个区块就是创世区块(genesis block),只有一笔“凭空”生成50BTC的coinbase交易(也就是区块补贴),内容算是中本聪随便写的。

就是这个:

https://btc.com/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

点开coinbase交易,就可以看到著名的The Times 03/Jan/2009 Chancellor on brink of second bailout for banks了:

https://btc.com/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

2018年1月19日 16:07

| #

| 引用

BitcoinFan

说:

引用yaro的发言:

每个区块的容量随着时间的增长会越来越大么,不会爆掉么?

原来是一个区块最大1MB(矿工还可以自己设置更低的上限),但是直到最近这个上限才被填满,然后,矿工优先打包手续费高的交易,手续费不够高的,就在内存池里排队等着。

即使是鼓吹超大区块的Bitcoin Cash,矿工们现在也没敢把这个限制完全拿掉,目前的上限是8MB,前一阵子BCH发生了粉尘攻击(有人发帖说是“压力测试”),可以看到有些矿池甚至还保留着1MB的限制。

去年软分叉SegWit已经激活了,引入了一种新的交易格式(和老格式并存),这种格式把交易数据分成两块,一块是资金往来和数额,另一块是用数字签名证明交易有效的“见证”;对见证部分,计算字节数时要少算四分之三(给了折扣),这样就等于允许区块大小超过1MB。

SegWit格式的交易使用率越高,区块就可以扩到越大。目前SW使用率只有10%。

根据估计,这样扩容最大可以达到2MB左右。(4MB是不可能达到的,因为非见证部分字节数不会是零)

未来BTC应该还会有硬分叉,可能要扩大区块,不过近期是不会有了。

目前还有一些方法能减少交易字节数,比如压缩公钥、batching等。以后还会有Schnorr签名等技术。

2018年1月19日 16:22

| #

| 引用

BitcoinFan

说:

@Alex:

现在比特币的概念还被很多人抵触,多数人还是宁愿相信国家政权,而不是分布式共识。

政府也是,不少都对比特币不友好,像我国不就是这样,只是把比特币定位为合法的虚拟商品,不承认它是货币,而且把交易所都关了,连矿场都要赶出去……

而且比特币-法币“汇率”波动很大,市场投机性很强,这也是个本质上的问题。

比特币还面临着扩容问题,区块大了就趋向于中心化,闪电网络现在还没准备好。

还有,就是比特币不存在账户密码、密码忘记找回、资金冻结这种概念,算是“认密钥不认人”的,丢失被盗都是责任自负的。

比特币早就不能用显卡挖了,连莱特币都不行了,只能用ASIC矿机挖,否则是纯浪费电、耗费显卡寿命。

现在用显卡挖的是其他加密货币,比如以太币(ETH,以太坊Ethereum平台上用的代币,其实人人都可以轻易在以太坊上发行自己的ERC20代币)、门罗币(XMR,Monero)、零币(ZEC,Zcash)等等。

2018年1月19日 16:32

| #

| 引用

BitcoinFan

说:

引用没事扯扯蛋的发言:

谁能说明比特币怎样和实际金钱或实物挂钩的???

如果不能挂钩,比特币就是个数字游戏,没有价值。

如果挂钩了,那说明比特币背后还是有势力(中心)支持的,否则怎么可能风生水起?

这个都是老生常谈的问题了。

有价值的东西未必是“实物”,比如大数据,或者……玩游戏氪金;黄金就是没有人担保背书的,但它仍然有价值。

所以,现在有人想让比特币成为“数字黄金”……

2018年1月19日 16:46

| #

| 引用

nonehat

说:

纠正小错误:每笔交易的大小约为250B左右,也就是说1个区块可以包含 1 * 1024 * 1024 / 250 笔交易,而挖出一个区块约10分钟。所以每秒的交易量: 1*1024*1024 / 600 = 6.9。 也就是人们常说的不超过7笔。

2018年1月19日 22:25

| #

| 引用

lies

说:

假如算力能垄断比特币的交易权,那这个就是集权中心化了,因为假如算力越分散,那么想要垄断的成本就越低,51%对政府来说,想要达到并不难,什么时候政府管不住了,自己这么一折腾,是不是比特币就该没了

2018年1月21日 10:04

| #

| 引用

anor

说:

引用Dong的发言:

一块区块链只能存2000笔交易,2040年就挖不到新的区块链,但交易是继续增加的,那么区块链用完了怎么办呢?

区块链不会用完吧?只是用来奖励的比特币可能就没有了,到那时矿工只能靠手续费获得奖励了。

2018年1月25日 16:37

| #

| 引用

风君子-神游

说:

关于交易,按照文章里面所说,没交易一次是不是相当于生成了一个新的区块,因为会生成一个新的hash,那这个交易所产生的区块,和矿工新挖出来的区块有什么区别,其次,交易是通过矿工去填写数据的,那矿工会不会恶意的去写数据,例如,把新交易的比特币写自己钱包里面

2018年1月26日 14:24

| #

| 引用

ade

说:

引用Mike的发言:

比特币技术复杂、普通人不能很好的理解。比特币没有金融监管、容易产生金融犯罪。前段时间的黑客勒索无不采用比特币技术。所以个人并不看好这一块的技术。

比特币只是一种货币形式,RMB也是一种货币形式,如果敲诈勒索犯罪用RMB,那我们不是??

2018年1月26日 16:46

| #

| 引用

ALLEN

说:

区块链 和 比特币交易大概理解了。 但是作为交易者怎么获利。这一点是不是类似股票说,在比特币网上用现金(真实货币)交易购买虚拟比特币,然后等着升值再出售。

2018年1月29日 16:05

| #

| 引用

wjzsuperman

说:

是不是新增一个区块,就代表新增一个比特币?

2018年1月30日 10:08

| #

| 引用

胡吃喝

说:

引用wjzsuperman的发言:

是不是新增一个区块,就代表新增一个比特币?

最开始,新增一个区块,增加50个比特币,后来新增一个区块,增加25个,再后来就是12.5个

2018年2月 2日 20:32

| #

| 引用

胡吃喝

说:

引用anor的发言:

区块链不会用完吧?只是用来奖励的比特币可能就没有了,到那时矿工只能靠手续费获得奖励了。

区块链用不完,比特币倒是会用完,也就是再也挖不出来了。

2018年2月 2日 20:33

| #

| 引用

郭海峰

说:

原文:目前由于交易数量猛增,手续费已经水涨船高,一个区块2000多笔交易的手续费总额可以达到3~10个比特币。如果你的手续费给低了,很可能过了一个星期,交易还没确认。

请教:如果一个区块的2000比交易中有没有确认的,那这个区块怎么确认呢?不是一个小时就可以确认了吗?另外,如果一笔交易在确认过程中但还没没有支付成功,这些比特币是否可能再次支付给其它方,而因为第二次交易所在的区块被确认导致第二次交易成功,第一次交易失败呢?

2018年2月 3日 21:11

| #

| 引用

夜上

说:

引用Dong的发言:

有个疑问求解答:

一块区块链只能存2000笔交易,2040年就挖不到新的区块链,但交易是继续增加的,那么区块链用完了怎么办呢?

新开区块没有奖励了而已,并不是不开新的

2018年2月 5日 11:47

| #

| 引用

cqcmdwym

说:

你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的

你好,阮老师,这样是不是不安全,人家有公钥就能解开?

2018年2月 7日 07:45

| #

| 引用

airomyas

说:

引用王挺的发言:

我也有此疑问,但感觉这个回答没答到点上。

交易记录是必须要附在新的区块里,再写入主区块链才能生效的。而2040年之后,已经没机会“算出”新的区块了,还怎么附加交易记录呢?

区块永远可以增加,区块链的长度并没有限制。只是矿工取得记账权的时候,系统没有给矿工比特币来奖励了。

2018年2月12日 09:53

| #

| 引用

airomyas

说:

引用cqcmdwym的发言:

你也可以用私钥加密信息,别人用你的公钥解开,从而证明这个信息确实是你发出的

你好,阮老师,这样是不是不安全,人家有公钥就能解开?

这个叫数字签名,目的是为了证明这条用私钥签名的消息的确是你发出的(因为别人没有你的私钥),那么怎么证明呢?就是这条消息能够用你发布的公钥解开,这就说明消息是你发的,因为用别人的公钥不可能揭开你的私钥签名的消息。

这种情况下,不是为了保密,而是为了验证身份。

2018年2月12日 10:28

| #

| 引用

天空

说:

一开始错了,是欧美各大银行以及金融机构的一个需求,最后是一个中本聪的人或者组织造出一个比特比的产品来,本身不是中本聪的想法,它是需求的实现者

2018年2月13日 14:52

| #

| 引用

路人甲

说:

怎么全是小白?

2018年2月14日 01:10

| #

| 引用

老宽

说:

区块链记录着完整的账本,而比特币本质是希望解决去中心化的问题。1M的块大小引起交易堵塞的问题我能理解,通过扩容等技术手段肯定能解决的,只是扩多少的问题了。但是这个只是解决交易速度的问题啊?

但是,将来积累的账本数据肯定越来越多啊,那岂不是意味着每个安装了比特币钱包的客户端软件都得同步这些账本信息呢,比如现在账本数据如果几百G能理解不是问题,但是将来账本数据累积了总会很大啊,这个问题怎么能搞定啊?

2018年2月17日 00:22

| #

| 引用

谦修

说:

引用binary的发言:

"这个钱包不是用来存放比特币,而是存放你的公钥和私钥。软件会帮你生成这两把私钥,然后放在钱包里面。"

应该是生成这两把密钥

可以理解为,一个是银行卡号,一个是密码吗。。前者对应公钥,后者是私钥!

2018年2月23日 15:28

| #

| 引用

纪钟磊

说:

您好,我想问一个问题。就是张三有10个比特币,同时向另外两个他自己的私钥(s1,s2)分别支付10个比特币。把支付给s1的交易让旷工1处理。支付给s2的交易让旷工2处理。恰巧旷工1和旷工2出处理的达到的分支数也都是大于6并且相同的。那不是这个时候张三就把10个比特币分别成功支付给了自己的两个私钥,他本身拥有的10个bitcoin就变成了20个?解答一下我的疑惑吧,谢谢!

2018年2月24日 14:42

| #

| 引用

zcqshine

说:

引用TONYHEAD的发言:

有若干疑问:

一个100GB的数据库就可以记录到比特币创立至今的所有交易往来?

"2000笔交易的区块手续费是3-10个比特币",这个交易成本太高了,2000笔流水,大一点的小卖部都不止这个数,难不成按目前的交易成本, 比特币只适合做大额资金的交易?

比特币的价格现在已经够大额了...哈哈

2018年2月24日 16:30

| #

| 引用

btcoin小白

说:

区块是不是可以是0-2000条交易记录(包含是0条交易记录),我在想比特币诞生时应该是还没有交易的吧,这个时候区块里面应该是没有交易记录的吧?

2018年2月26日 23:22

| #

| 引用

xmokdjs

说:

引用温国兵的发言:

纠正一个错误

“你可能看出来了,每 4 年奖励减半,那么到了 2140 年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这里应该是 2040 年。

一尺之棰,日取其半,万世不竭。——《庄子·天下》

2018年2月27日 11:50

| #

| 引用

戴祎程

说:

我想问一下阮老师,如果矿工没有收集全交易记录,或者故意写错了交易记录,从而生成了最新的区块,后续的矿工怎么发现他记录的有问题?

2018年2月28日 16:42

| #

| 引用

DannyPei

说:

我想问个问题,矿工们从网络上收集各种交易请求,组包并计算hash,当计算出的hash不满足要求时,是会更换或重新收集网络上的各种交易请求然后重新打包计算hash,直到所计算出的hash满足要求吗?(因为如果不更换组包的交易内容的话,计算出的hash还是会和原来的一样)这样的话作为一个交易请求的提出方,所提出的交易请求能否被认可、何时被认可都是完全未知的,这样将难以满足货币日常流通的基本需求。不知道是否是这样,求阮老师和各位老师解答。

2018年3月 1日 15:22

| #

| 引用

DannyPei

说:

引用纪钟磊的发言:

您好,我想问一个问题。就是张三有10个比特币,同时向另外两个他自己的私钥(s1,s2)分别支付10个比特币。把支付给s1的交易让旷工1处理。支付给s2的交易让旷工2处理。恰巧旷工1和旷工2出处理的达到的分支数也都是大于6并且相同的。那不是这个时候张三就把10个比特币分别成功支付给了自己的两个私钥,他本身拥有的10个bitcoin就变成了20个?解答一下我的疑惑吧,谢谢!

不会,矿工1和矿工2同时计算出符合要求区块链,并且两个分支又同时达到6个链的长度,这是不可能发生的

2018年3月 1日 15:23

| #

| 引用

alex

说:

有个地方没明白。

假如说矿工A抢到了这块区块。然后广播出去。大家承认了以后。这块区块的HASH值就定了。

然后再在这块区块中输入"A挖到了这块区块 获得12.5个比特币"。那这个输入信息不是会导致这块区块的HASH值变了么?

2018年3月 2日 17:13

| #

| 引用

Aspi1in

说:

“事实上,我也不知道,如果我知道怎么发财,可能就不会在这里写博客了。”

扎心了老铁~

2018年3月 2日 19:17

| #

| 引用

gelvshige

说:

引用Aspi1in的发言:

“事实上,我也不知道,如果我知道怎么发财,可能就不会在这里写博客了。”

扎心了老铁~

坦白的很可爱!

2018年3月 2日 19:22

| #

| 引用

peakandyuri

说:

我其实有一个疑问,比特币是没有中心节点的,如果我要加入矿工的行列,我怎么才能知道其它节点并和它们交换数据。

2018年3月 5日 14:31

| #

| 引用

xuewuchen

说:

其实我觉得这里最大的问题就是,所有的资源都浪费在无意义的计算上面了。如果这些算力真的可以一起计算,是不是能够解决很多计算上面的难题呢

2018年3月 7日 09:14

| #

| 引用

zbw

说:

引用没事扯扯蛋的发言:

谁能说明比特币怎样和实际金钱或实物挂钩的???

如果不能挂钩,比特币就是个数字游戏,没有价值。

如果挂钩了,那说明比特币背后还是有势力(中心)支持的,否则怎么可能风生水起?

你可以把它当做一件物品,一个东西,这个东西只要有人愿意花钱去买,那就能与真实货币挂钩

2018年3月 9日 15:01

| #

| 引用

csha

说:

引用zyg的发言:

传说的去中心化呢~到头来还是矿工中心化~ 算力决定一切 哈哈~

你把去中心化这个概念理解错了

2018年3月13日 19:05

| #

| 引用

中本葱

说:

引用王挺的发言:

我也有此疑问,但感觉这个回答没答到点上。

交易记录是必须要附在新的区块里,再写入主区块链才能生效的。而2040年之后,已经没机会“算出”新的区块了,还怎么附加交易记录呢?

有区块啊,只是这些区块不会新生成比特币而已

2018年3月18日 11:27

| #

| 引用

沈小扬

说:

请教,矿工记录交易记录生成新的区块,从而得到奖励的比特币。这个奖励本身的交易又是谁来记录呐?有没有区块链来保存?

2018年3月19日 13:10

| #

| 引用

Satan

说:

160位是二进制,写成十六进制,大约是26到35个字符

这个是怎么算的?

2018年3月19日 13:13

| #

| 引用

Bicong Wang

说:

引用杨峰的发言:

很好奇,比特币是怎么开始的?有这个想法是因为,采矿是产生比特币的“造血系统”,而造血的过程是写入交易记录,而最初是没有交易记录给人来写的。

阮老师没有细讲挖矿,实际上挖矿的要求是造出一个哈希值小于xx的区块,这个跟交易是否存在没有必然关系。而随着区块的产生,比特币会被制造出来。

2018年3月19日 19:04

| #

| 引用

ieayoio

说:

引用小米的发言:

有一个地方不明白,需要请教博主。

如果我是矿工,挖矿时在当前交易记录中擅自增加一条“我获得1000比特币”的记录,然后很幸运这块矿被我挖到,交易记录被记录和通报全网了。

那是不是就能作弊了?

不知道你的问题解决了没,我觉得“我获得1000比特币”的这条记录不能凭空的产生,它必须是“xxx向你转账了1000比特币”才能达到你获得比特币的目的,而这个动作需要有向你转账的人的数字签名作为凭证

2018年3月20日 17:31

| #

| 引用

ieayoio

说:

所谓交易手续费,就是矿工可以从每笔交易抽成,具体的金额由支付方自愿决定。你完全可以一毛不拔,一分钱也不给矿工,但是那样的话,你的交易就会没人处理,迟迟无法写入区块链,得到确认。矿工们总是优先处理手续费最高的交易。

这里我有个疑问,是不是说等到矿工挖到新的区块没有奖励的时候,如果支付不付手续费,是不是说有可能交易永远无法写入区块链,这岂不是有钱花不出去了吗,所以只能追加手续费来完成交易吧?而且手续费少了也很有可能迟迟完成不了交易

2018年3月20日 17:40

| #

| 引用

悟空

说:

现在比特币的区块有多高了啊?

2018年4月 2日 21:05

| #

| 引用

mall

说:

有几点疑问:

1 公钥和私钥都是软件生成的,如何保证软件平台不会私自保存用户的私钥?

2 区块链本身的机制只承认最长新增链(block),那么最终会对导致每个block都只包含最简单的信息(空block或者只包含一笔交易的block),因为你等到2000笔交易凑齐的时候再开始打包计算,可能别人已经算出来的了。这样推演下去最终区块链里每个块只会包含一笔交易,1M的大小根本就用不完。为什么还会出现提议将block size增加 ?

望哪位大侠能指教一下?谢谢

2018年4月 9日 08:57

| #

| 引用

崔文远

说:

私钥的保存用什么方式最安全?

2018年4月11日 20:34

| #

| 引用

帅锅

说:

越看越带劲,真的十分感谢作者这么辛苦写的文章呀!已经能理解很多很多了,感激

2018年4月19日 16:10

| #

| 引用

shilion

说:

引用Satan的发言:

160位是二进制,写成十六进制,大约是26到35个字符

这个是怎么算的?

这个是十六进制和2进制的转换了。就像我们的十进制,冯10进1,十六进制是冯16进1,有0-9,A-F组成。

2018年4月19日 22:17

| #

| 引用

没有

说:

引用Mike的发言:

比特币技术复杂、普通人不能很好的理解。比特币没有金融监管、容易产生金融犯罪。前段时间的黑客勒索无不采用比特币技术。所以个人并不看好这一块的技术。

你不看好的原因我却感觉是比特币火的真正原因,不接受黑暗并不代表黑暗不存在

2018年4月28日 17:52

| #

| 引用

chen

说:

想请问一下:

比特币第一个区块Block #0是相当于初始化创建的,记录的交易一个新闻报纸的标题。

产生50个比特币的奖励(这50个比特币好像不能被使用)。

那第二个区块Block #1它的交易记录是什么呢(是否是用比特币交易呢)?

这些交易的手续费所需的比特币从何处来呢?

2018年5月 2日 18:11

| #

| 引用

梦元

说:

“我获得1000比特币”的这条记录不能凭空的产生,btc不会凭空产生,它产生的唯一渠道是旷工算出合规hash值后获得的奖励,而且会有专门的标识记录这笔btc的产生,以及它产生的条件。首先“我获得1000比特币”这条记录不会添加进去,因为这条记录不合规范至少是“xxx转给xx多少btc”或者是“xx算出了新的合规hash获得XX个btc的奖励”,其次即使你想办法强行添到了数据库,请求同步数据时,其它节点也会算出你这笔凭空产生的记录是非法,拒绝同步你的数据。

每一笔交易都必须具备 (from, to, value,fee ) ,而且每一笔交易应该都会有from方进行数字签名,避免旷工把转账给to方的5个btc改成了10个

2018年5月 3日 18:46

| #

| 引用

晨晨

说:

我就想知道怎么开户 交易

2018年5月11日 22:53

| #

| 引用

虾米

说:

虽然在币圈工作几年了,但是每次需要给小白讲解btc的时候都不知从何讲起。

以后我可以让他们来看峰哥的文章。

2018年5月17日 18:45

| #

| 引用

虾米

说:

引用梦元的发言:

“我获得1000比特币”的这条记录不能凭空的产生,btc不会凭空产生,它产生的唯一渠道是旷工算出合规hash值后获得的奖励,而且会有专门的标识记录这笔btc的产生,以及它产生的条件。首先“我获得1000比特币”这条记录不会添加进去,因为这条记录不合规范至少是“xxx转给xx多少btc”或者是“xx算出了新的合规hash获得XX个btc的奖励”,其次即使你想办法强行添到了数据库,请求同步数据时,其它节点也会算出你这笔凭空产生的记录是非法,拒绝同步你的数据。

每一笔交易都必须具备 (from, to, value,fee ) ,而且每一笔交易应该都会有from方进行数字签名,避免旷工把转账给to方的5个btc改成了10个

峰哥应该是想表达对 btc 的价值思考

2018年5月17日 18:47

| #

| 引用

浅蓝

说:

引用小白的发言:

有点疑惑,交易平台肯定需要维护 哪个比特币钱包是哪个用户的吧,而比特币钱包里包含公钥私钥,这样交易平台不就可以知道比特币是哪个用户的么

只需管理用户对应的钱包地址就行,不需要知道具体的公钥私钥,就好比支付宝管理用户的账号,但是不知道你的密码也能使交易正常完成

2018年5月18日 13:07

| #

| 引用

卫道者

说:

引用Mike的发言:

比特币技术复杂、普通人不能很好的理解。比特币没有金融监管、容易产生金融犯罪。前段时间的黑客勒索无不采用比特币技术。所以个人并不看好这一块的技术。

比特币勒索与比特币无关,只是通过比特币来收钱。

2018年7月13日 13:54

| #

| 引用

Tiger.xu

说:

每个节点都包含了整个区块链(目前大概 100多 GB),并且节点之间时刻不停地在同步信息。------目前100多GB,后面随着时间推移,这个区块链是否会非常之大。而且100多GB的数据在这么多节点中复制,会不会造成网络堵塞?

2018年7月15日 19:22

| #

| 引用

haiker

说:

为什么交易数据要包含双方的地址呢,既然交易数据中已经包含了公钥,而交易的支付方地址就是公钥计算hash得到,只提供公钥,私钥签名和接受方的地址和上次交易的hash不行吗?

2018年10月 7日 10:43

| #

| 引用

张淼

说:

嗯 讲的很清楚

2018年12月21日 11:31

| #

| 引用

风一样的男子

说:

老师,您好,我正在探究比特币的源码,现在有一块没弄清楚,就是同步机制.我想知道比特币的同步时机除了节点启动时,还有其他时机吗?特别时在处理孤块上,加入第k个区块在广播给A节点时丢了,那么对于A节点是采取怎样的措施来获得这个区块的呢?希望老师不吝赐教

2018年12月31日 12:08

| #

| 引用

哈哈

说:

很不错呢,通俗易懂。

2019年4月 9日 20:07

| #

| 引用

代富贵

说:

突然发现一个问题,有人(以为为例)炒币好几年了,说啥币都多少听说过,但是突然被问到到底什么是区块链,什么是加密货币的时候,还是一脸蒙。

2019年5月27日 17:02

| #

| 引用

柚子

说:

引用温国兵的发言:

纠正一个错误

“你可能看出来了,每 4 年奖励减半,那么到了 2140 年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这里应该是 2040 年。

每四年减半,要乘以4兄弟,就是2140年咯

2019年6月 1日 12:57

| #

| 引用

BitcoinFan

说:

引用haiker的发言:

为什么交易数据要包含双方的地址呢,既然交易数据中已经包含了公钥,而交易的支付方地址就是公钥计算hash得到,只提供公钥,私钥签名和接受方的地址和上次交易的hash不行吗?

交易数据其实压根就没有包含“地址”。地址只在应用层(钱包软件)里存在,在底层(区块链数据里)并不存在。

交易数据包含的是“输入”和“输出”。

每一项“输出”都含有金额和“锁定脚本”。就好像开宝箱一样,你必须有密码,或者钥匙(取决于这个宝箱最初是怎么制作的)才能打开,打开后想干啥就全部由你做主了。

一般情况下,锁定脚本的内容基本上就是公钥的哈希,外加一点点脚本操作码,

地址只是把公钥的哈希加上校验码,再用Base58编码了一下而已。加上校验码可以防止打错字,用Base58编码可以方便人类阅读。

每一项“输入”都要声明被“解锁”的是具体哪一笔钱,用上一笔交易的哈希(txid)和输出序号指定。同时还要拿出“解锁脚本”,一般就是公钥、数字签名,以及一点点脚本操作码。

2019年9月 6日 22:18

| #

| 引用

BitcoinFan

说:

引用haiker的发言:

为什么交易数据要包含双方的地址呢,既然交易数据中已经包含了公钥,而交易的支付方地址就是公钥计算hash得到,只提供公钥,私钥签名和接受方的地址和上次交易的hash不行吗?

更正一下,地址里不止包含公钥哈希和校验码,还有一个版本号。

实际上这还只是最简单的P2PKH地址,除此之外还有3开头的P2SH地址(含有脚本哈希而不是公钥哈希),以及bc1开头的P2WPKH、P2WSH地址(原生隔离见证地址,功能和P2PKH和P2SH类似)。

P2SH地址可以设置更复杂的脚本,也就是设定更复杂细致的解锁条件。一般它用于多重签名。除了多重签名,还可以“封装”隔离见证脚本,因为bc1开头的原生隔离见证地址很多地方还不兼容,封装成3开头的地址,就能保持兼容了(代价是交易略大,手续费略贵)。

对bc1开头的原生隔离见证地址来说,编码不再使用中本聪设计的Base58,而是使用重新设计的Bech32,只包含小写字母,但也可以全部转换成大写字母来表示(这样可以让二维码更小更“轻便”)。这样更方便在电话中口述这种用途。

2019年9月 6日 22:27

| #

| 引用

BitcoinFan

说:

引用haiker的发言:

为什么交易数据要包含双方的地址呢,既然交易数据中已经包含了公钥,而交易的支付方地址就是公钥计算hash得到,只提供公钥,私钥签名和接受方的地址和上次交易的hash不行吗?

比特币很多时候都是反直觉的……就比如“3开头的P2SH地址可以封装隔离见证”,可能会让很多人产生一种误解:“3开头的地址和bc1开头的地址往往使用同一个公钥”——实际上很多时候并不是这样,因为一般HD钱包都遵守BIP44/49/84规范,生成不同类型的地址时,使用的私钥也不一样;只有少数钱包,比如Bitcoin Core,在一些特殊情况下(老版本的addwitnessaddress,以及importprivkey/importpubkey导入单个私钥/公钥)是这么做的。

2019年9月 6日 22:32

| #

| 引用

BitcoinFan

说:

引用Tiger.xu的发言:

每个节点都包含了整个区块链(目前大概 100多 GB),并且节点之间时刻不停地在同步信息。------目前100多GB,后面随着时间推移,这个区块链是否会非常之大。而且100多GB的数据在这么多节点中复制,会不会造成网络堵塞?

确实是越攒越大的……有些比特币开发者反对增大区块,就是出于“历史区块增长的速度已经超过技术进步速度”这种理由。

网络堵塞,现在看还不至于,因为跑全节点的比特币用户算是少数(很多人只是在交易所里炒一炒,或者就只是用一下轻量级钱包而不是全节点钱包),而且只有一开始要下载那么多,后面只需要不断跟进就可以了,并不需要一遍遍地从头下载。

2019年9月 6日 22:36

| #

| 引用

BitcoinFan

说:

引用alex的发言:

有个地方没明白。

假如说矿工A抢到了这块区块。然后广播出去。大家承认了以后。这块区块的HASH值就定了。

然后再在这块区块中输入"A挖到了这块区块 获得12.5个比特币"。那这个输入信息不是会导致这块区块的HASH值变了么?

实际上当然是先把区块里的各种数据填好、把交易都打包进去,再发给矿机、让矿机去暴力试错凑hash值啊。矿机只需要拿到区块头、coinbase交易等很少的信息就可以进行挖矿了,并不需要拿到完整的区块。

2019年9月 6日 22:42

| #

| 引用

BitcoinFan

说:

引用老宽的发言:

区块链记录着完整的账本,而比特币本质是希望解决去中心化的问题。1M的块大小引起交易堵塞的问题我能理解,通过扩容等技术手段肯定能解决的,只是扩多少的问题了。但是这个只是解决交易速度的问题啊?

但是,将来积累的账本数据肯定越来越多啊,那岂不是意味着每个安装了比特币钱包的客户端软件都得同步这些账本信息呢,比如现在账本数据如果几百G能理解不是问题,但是将来账本数据累积了总会很大啊,这个问题怎么能搞定啊?

交易确认速度这个问题争议比较大。主流认可的办法是开发闪电网络,放弃原有的零确认交易。少数派的办法是用avalanche预共识加固零确认。还有侧链,以前经常提,现在已经有了liquid、rsk这些,却很冷清,几乎没人用。而且也有adam back等大佬认为侧链并不能从根本上解决扩容问题。

区块越攒越多的问题,也有争议。

有人坚持全节点必须把所有区块都下载验证一遍(启用修剪,也只是一边下载新的一边删旧的,并不是不下载旧的),有人就认为这么做太浪费,可以妥协一下,直接从最近的状态开始,跳过历史(也就是utxo commitment、assumeutxo之类的)。

以前对这个问题还提出一个解决方法,就是“欺诈证明”,也就是让轻量级客户端随机挑一部分进行验证,“众目睽睽”之下,总能发现猫腻。但是后来这个基本上是弃坑了,理由是如果有恶意矿工挖违反规则的链,那他完全可以把有猫腻的部分藏着不发出来,轻量级客户端拿它没办法,没办法证明这里缺了一块(而不只是网速卡了)。

引用DannyPei的发言:

我想问个问题,矿工们从网络上收集各种交易请求,组包并计算hash,当计算出的hash不满足要求时,是会更换或重新收集网络上的各种交易请求然后重新打包计算hash,直到所计算出的hash满足要求吗?(因为如果不更换组包的交易内容的话,计算出的hash还是会和原来的一样)这样的话作为一个交易请求的提出方,所提出的交易请求能否被认可、何时被认可都是完全未知的,这样将难以满足货币日常流通的基本需求。不知道是否是这样,求阮老师和各位老师解答。

区块头里有个nonce值,矿机一般是先修改nonce值。nonce值用完了,还可以稍微改一下时间戳,让时间戳前后稍微变动一下。除了时间戳,还有coinbase交易,可以用作extranonce,这里面的空间就大了,但是每次修改extranonce的计算成本都比较大,所以这一般是放到最后尝试。

还有像asicboost这样有争议的办法,(分显式和隐式两种,隐式asicboost里面有提到交换交易顺序,是多种办法中的一种),显式asicboost是修改nversion,争议相对较小。

2019年9月 6日 22:55

| #

| 引用

李晓铭

说:

请问博主,矿工们如何收集交易请求啊?我有一个交易,如何发给矿工呢?这个过程,需要一个中心转发吗?矿工们之间如何联系呢?

就像bt技术一样,最终离不开一个中心来发布种子和登记提供bt服务的ip地址,比特币和区块链能完全脱离一个中心吗?

2019年12月18日 17:38

| #

| 引用

BitcoinFan

说:

引用李晓铭的发言:

请问博主,矿工们如何收集交易请求啊?我有一个交易,如何发给矿工呢?这个过程,需要一个中心转发吗?矿工们之间如何联系呢?

就像bt技术一样,最终离不开一个中心来发布种子和登记提供bt服务的ip地址,比特币和区块链能完全脱离一个中心吗?

比特币有一套P2P协议啊,简单说就是一传十、十传百。

BT不也是有完全去中心化的DHT么,DHT是不需要Tracker服务器的。

不过,比特币的节点软件里确实有硬编码写进几个“种子节点”,一开始不知道其他节点的IP时,就可以向这些“种子节点”查询(这个查询用的是DNS协议,所以叫DNS seeding)。如果从其他途径来发现其他节点,比如手动添加、从已经连接上的其他节点查询等等,那DNS seeding就不是必要的。

这个话题细说的话就不简单了。

比如“节点”具体指什么呢?要是去阅读中本聪最初的介绍和发言,就会发现他默认“矿工即节点、节点即矿工”。

现在的话,“节点”(负责验证交易)和“矿工”(负责穷举哈希来“挖矿”)已经自然而然地分离了。

矿工自己并不会运行节点,他们会把矿机的算力输出给矿池,让矿池的“节点”(或者说是“全节点”full node)负责产生区块。

很多“全节点”背后也是没有算力的,只能监视网络,不能出块。

现在的比特币核心开发者大多认为用户需要跑全节点,因为全节点可以独立、完整地验证区块链账本的内容。

如果是SPV轻量级钱包的话,因为没有对交易内容进行验证,所以,理论上,即便是矿工打破了比特币的规则,比如凭空造100万币,那SPV也是无法识别的。

但是,全节点很笨重,很显然并不适合一般用户;而且有人认为“按照中本聪原本的设计,就不需要普通用户去跑全节点”,比特币的社区可以说也因为这个分歧而分裂了,反对“普通人应该跑全节点”的人很多转而去支持BCH(然后BCH又分裂成ABC和SV两个币……)。

比特币核心开发者则会指出中本聪很早以前就消失了,在他消失之前,他也并没有把SPV轻量级钱包设计完善,因为缺失了“警报机制”来提醒SPV不要去跟随违反规则的区块链账本。

2020年1月 4日 02:06

| #

| 引用

BitcoinFan

说:

还有,矿池之间可能未必是走比特币自身的P2P网络,他们可能还会走更快的FIBRE、Falcon等更加中心化、但也更快的网络,这样可以避免自己因为网络通信不畅(没有及时收到最新区块,或者没有及时把自己新挖出的区块广播出去)而挖出废块。

2020年1月 4日 02:11

| #

| 引用

JAK

说:

用核心钱包交易是不是每次交易都会生成一个新的地址,且钱包内所有的比特币都会转移到新的钱包内,接收了比特币是不是也是一样,所有的比特币包括不是交易所得的比特币都会自动到一个新的找零地址里去?

2020年3月31日 12:15

| #

| 引用

BCG

说:

引用温国兵的发言:

纠正一个错误

“你可能看出来了,每 4 年奖励减半,那么到了 2140 年,矿工将得不到任何奖励,比特币的数量也将停止增加。这时,矿工的收益就完全依靠交易手续费了。”

这里应该是 2040 年。

就是2140年,不是2040.

2020年4月30日 12:07

| #

| 引用

BitcoinFan

说:

引用JAK的发言:

用核心钱包交易是不是每次交易都会生成一个新的地址,且钱包内所有的比特币都会转移到新的钱包内,接收了比特币是不是也是一样,所有的比特币包括不是交易所得的比特币都会自动到一个新的找零地址里去?

避免重复使用同一个地址,这个是中本聪的白皮书里提到的。这是一种很鸡肋的、聊胜于无的隐私保护措施。

每次收款时都用新的收款地址,结合每次转出时都用新的找零地址,双管齐下,理想情况下就分不清哪个地址是回到原主人手里的找零,然后就无法进一步追查资金去向,从而保护隐私。

实际上有不少情况会泄露“哪个地址是找零”这个信息;甚至还有不少轻量级钱包是直接上传xpub主公钥的,钱包服务商直接就知道哪些地址背后是同一个主人了。

(而且Bitcoin Core虽然是HD钱包,但是用的是很蛋疼的hardened derivation,压根就没有xpub主公钥——这个情况可能在未来版本会有所改革,开发者现在正在做descriptor wallet)

每次转出,并不是会把所有币都转移到新的找零地址上。这要看你转出的金额大不大,以及你的钱包如何“选币”,选择花掉哪些UTXO。一般情况下钱包是只选择差不多够用的UTXO(所以这也会造成交易里的找零输出项金额较小,可以被猜测分辨出来;但是如果选了太多UTXO,也要注意,把不同地址上的币同时花出去本身也是隐私信息泄露,因为这样透露了这些地址背后实际上是属于同一个主人)。

2020年10月 2日 01:56

| #

| 引用

undefined

说:

挖到新区块的矿工可以获得比特币奖励,奖励的数量逐年递减,这个机制可以修改吗?谁来决定呢

2022年4月15日 11:56

| #

| 引用

sutungpo

说:

请教下在第三部分交易流程中:

转出比特币的一方提供的数据中的数字签名是不是也保证了交易金额的属实?否则交易的金额在申报提交过程中存在被篡改的可能性?

2022年8月15日 14:54

| #

| 引用

我在2023看世界

说:

2023年再看这篇文章,确实受益匪浅

2023年5月12日 21:43

| #

| 引用

我要发表看法

您的留言

(HTML标签部分可用)

您的大名:

«-必填

电子邮件:

«-必填,不公开

个人网址:

«-我信任你,不会填写广告链接

记住个人信息?

正在发表您的评论,请稍候

«- 点击按钮

Weibo |

Twitter |

GitHub

Email: [email protected]

比特币安全实测:暴力破解私钥到底有多难?_区块链_Kai Sedgwick_InfoQ精选文章

比特币安全实测:暴力破解私钥到底有多难?_区块链_Kai Sedgwick_InfoQ精选文章

比特币的私钥、地址和钱包 – imToken - 以太坊钱包 比特币钱包 - 客服中心

比特币的私钥、地址和钱包 – imToken - 以太坊钱包 比特币钱包 - 客服中心

下载 imToken

imToken - 以太坊钱包 比特币钱包 - 客服中心

区块链知识

名词解释

此组别内的文章

USDC 简介

一文了解 Permit2 授权

XTZ(Tezos)钱包

FIL(Filecoin)钱包

Polkadot(DOT)钱包

Kusama(KSM)钱包

什么是 Data?

Nervos (CKB) 钱包

TRON (TRX) 钱包

Litecoin (LTC) 钱包

查看更多

比特币的私钥、地址和钱包

Consenlabs

2024年02月16日 18:56

更新

关注

比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。数字密钥实际上并不是存储在网络中,而是由用户生成并存储在一个文件或者一个简单的数据库中,称为钱包。存储在用户钱包中的数字密钥完全独立于比特币协议,可由用户的钱包软件生成并管理,而无需区块链或者网络连接。密钥实现了比特币的许多有趣特性,包括去中心化的信任和机制、所有权认证和基于密码学的安全模型。

每笔比特币交易都需要一个有效的签名才能被存储在区块链。只有有效的数字密钥才能产生有效的数字签名,因此拥有了比特币的密钥副本就相当于拥有了该账户比特币的控制权。一个比特币钱包中包含一系列的密钥对,每个密钥对包含一个私钥和一个公钥。公钥就像银行的账号。而私钥就像控制账户的PIN码或支票的签名。比特币的用户很少会直接看到数字密钥。一般情况下,他们被存储在钱包文件内,由比特币钱包软件进行管理。

什么是 BTC 私钥?

私钥是一个数字,通常是随机选出的。一个比特币地址中的所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。私钥必须始终保持机密,因为一旦泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远消失。

什么是 BTC 地址?

有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥,这是个不可逆转的过程。有了公钥,我们就可以使用一个单向加密哈希函数生成比特币地址。

一般情况下,比特币地址由一个公钥生成并对应这个公钥。比特币地址就像支票上的支付对象的名字(即“收款方”),这样一来,比特币地址把收款方抽象起来了,使交易的目的地更灵活,就像支票一样。比特币地址是用户经常看到的密钥的唯一代表,他们只需要把比特币地址告诉其他人即可。 

什么是钱包?

钱包是私钥的容器,通常通过有序文件或者简单的数据库实现。比特币钱包只包含私钥而不是比特币。每一个用户有一个包含多个私钥的钱包。钱包中包含成对的私钥和公钥。用户用这些私钥来签名交易,从而证明他们拥有交易的输出(也就是其中的比特币)。比特币是以交易输出的形式来存储在区块链中。

Facebook

Twitter

LinkedIn

这篇文章有帮助吗?

609 人中有 415 人觉得有帮助

还有其它问题?提交请求

返回页首

imToken - 以太坊钱包 比特币钱包 - 客服中心

简体中文

English (US)

繁體中文

重要声明:目前 imToken 未在任何司法辖区接受监管,也未获得相关监管机构的许可。imToken 不提供包括但不限于新加坡金融管理局依据《2019 年支付服务法案》所管辖的任何金融及支付服务。

深入理解比特币:(1)钱包和地址

深入理解比特币:(1)钱包和地址

消灭幺蛾子!

Less Bug

首页

关于

归档

深入理解比特币:(1)钱包和地址

Published at 2024/3/6 15:49

, ... Views

目录

回顾

私钥

主私钥

主私钥派生出子私钥

派生路径表示

从私钥派生公钥

从普通公钥到扩展公钥

从公钥派生地址

地址

概览

P2PKH(Pay-to-Public-Key-Hash)

生成过程

交易结构和验证过程

安全性

P2SH (Pay-to-Script-Hash)

交易结构和验证过程

赎回脚本

P2WPKH (Pay-to-Witness-Pubkey-Hash)

隔离见证(Segregated Witness)地址

生成

交易结构和验证过程

为什么叫隔离见证

P2WSH (Pay-to-Witness-Script-Hash)

交易结构

验证过程

钱包

TRANSACTION(事务/交易/TX)

UTXO

TX

Coinbase Input

Utreexo

回顾

上一章我们了解了比特币钱包的生成过程,一般过程如下:

生成一个随机数作为种子。

使用种子生成一个随机私钥。

从私钥派生公钥。

使用公钥生成比特币地址。

打印私钥、公钥和地址。

今天我们会拆解分析这背后的原理。主要涉及到的是 BIP-0032.

私钥

私钥生成过程如下:

1    let mut entropy = [0u8; 32];

2    let sk = ExtendedPrivKey::new_master(Network::Bitcoin, &entropy)

可以看到,私钥来自于一个 32 bytes, 即 256 bit 的随机数。

主私钥

调用 ExtendedPrivKey::new_master 生成了一个主密钥,这背后使用了 HMAC-SHA512,后者可理解为:以密钥和消息为输入,通过SHA512哈希函数,结合密钥对消息进行多轮哈希处理,生成消息认证码。消息认证码是基于密钥和消息,通过特定算法生成的一段固定长度的值,可以简单理解为 hmac = hash(key * data) 也即类似 CRUD 程序员们熟知的加盐哈希的东西。

主私钥派生出子私钥

通过主私钥可以派生出一系列的子私钥,每个子私钥都与一个唯一的索引相关联。在派生子私钥的同时,也生成了新的链码,用于派生下一级的子私钥。可以重复以上步骤,从任何一级的私钥派生出更多的子私钥,形成层次结构。每个子私钥后续都可以转换成一个地址。

派生路径表示

实际开发中可能会看到这样的东西:

1    // 推导子私钥

2    let path = DerivationPath::from_str("m/0'/0/1").unwrap();

3    let derived_private_key = master_private_key.derive_priv(&Secp256k1::new(), &path).unwrap();

"m/0'/0/1" 用于推导比特币钱包中的子密钥。它遵循了 BIP32 中定义的路径规范。

在 BIP32 中,路径由一系列索引组成,用斜杠分隔。每个索引表示从当前密钥派生的子密钥的索引。

以下是 "m/0'/0/1" 路径的解释:

"m":表示根密钥(Master Key)。它是从根密钥开始的起点。

"0'":表示强化派生(Hardened Derivation)。这意味着从该索引开始的子密钥只能通过父密钥的私钥推导得到,而不能通过父密钥的公钥推导得到。强化派生的索引范围是从 2^31 到 2^32-1。

"0":表示子密钥索引。在这种情况下,它是一个普通的派生索引,可以通过父密钥的公钥或私钥推导得到。

"1":表示子密钥索引。与上面的索引类似,它是一个普通的派生索引。

在上述示例中,"m/0'/0/1" 表示从根密钥开始,通过强化派生索引 0' 推导出第一个子密钥,然后通过普通的派生索引 0 推导出第二个子密钥,最后通过普通的派生索引 1 推导出最终的密钥。

从私钥派生公钥

这个过程是生成 secp256k1 椭圆曲线上的公钥

1let res = ffi::secp256k1_ec_pubkey_create(secp.ctx, &mut pk, sk.as_c_ptr());

secp256k1_ec_pubkey_create 的大致原理:

首先,该函数接收一个私钥作为输入。私钥是一个随机数,通常由椭圆曲线算法生成。在 Bitcoin 中,私钥是一个 256 位的整数。

接下来,函数使用 secp256k1 椭圆曲线算法中的基点(也称为生成点)来计算公钥。基点是一个预定义的曲线上的固定点,对于 secp256k1 曲线来说是已知的。

使用私钥和基点,函数执行椭圆曲线点乘运算,将私钥乘以基点。这个运算的结果是一个新的点,即公钥点。公钥点是椭圆曲线上的一个点,它具有一对坐标 (x, y)。

最后,函数将公钥点的坐标进行编码,生成一个压缩或非压缩的公钥。压缩公钥只包含 x 坐标和一个标志位,非压缩公钥包含 x 和 y 坐标。在 Bitcoin 中,压缩公钥更常见,因为它更短,节省了存储空间。

具体实现这里不展开。这里得到一个普通公钥,然后可以直接用它得到地址,也可以先扩展,再得到地址。

从普通公钥到扩展公钥

在 Bitcoin 中,有两种类型的公钥:普通公钥(Regular Public Key)和扩展公钥(Extended Public Key)。它们之间的区别如下:

普通公钥:普通公钥是通过对私钥执行椭圆曲线点乘运算生成的公钥。它只包含公钥的坐标(通常是压缩形式的 x 坐标),没有其他额外的信息。普通公钥用于验证签名和生成 Bitcoin 地址。

扩展公钥:扩展公钥是基于 BIP32 中定义的 HD(Hierarchical Deterministic)钱包标准与额外的链码(Chain Code)相关联,通过路径迭代计算得到。

从公钥派生地址

在示例代码中,我们生成了一个 P2PKH 地址:

1address = bitcoin::Address::p2pkh(&ext_pk.public_key, Network::Bitcoin);

P2PKH 地址是 Bitcoin 中最常见的地址类型,但还有其它各种类型,下面将进行介绍。

地址

概览

目前 BTC 的所有地址类型如下,他们的区别主要在于结构和验证机制:

地址类型

结构

验证机制

P2PKH (pay-to-pubkey-hash)

以1开头的Base58编码

使用公钥哈希进行验证,发送者需要提供与地址相关的公钥,并且提供的公钥哈希必须与地址中的哈希匹配。

P2SH (pay-to-script-hash)

以3开头的Base58编码

使用脚本哈希进行验证,发送者需要提供解锁脚本以证明对地址中的脚本的控制权。

P2WPKH (pay-to-witness-pubkey-hash)

Bech32编码

使用隔离见证技术进行验证,直接验证公钥哈希,发送者需要提供与地址相关的公钥,并且提供的公钥哈希必须与地址中的哈希匹配。

P2WSH (pay-to-witness-script-hash)

Bech32编码

使用隔离见证技术进行验证,直接验证脚本哈希,发送者需要提供解锁脚本以证明对地址中的脚本的控制权。

P2PKH和P2SH是传统的地址类型,而P2WPKH和P2WSH是基于隔离见证技术的新型地址类型。

网络前缀的完整名单:https://en.bitcoin.it/wiki/List_of_address_prefixes

P2PKH(Pay-to-Public-Key-Hash)

是比特币交易中最常见的交易输出类型之一,它是比特币钱包中常见的地址格式之一。

特点:以"1"开头

生成过程

hash_public_key(public_key):

首先将提供的公钥(public_key)进行双重哈希运算,先使用SHA-256,再使用RIPEMD-160。

输出结果:哈希的公钥(hashed_public_key)。

add_network_prefix(hashed_public_key, network_prefix):

在哈希的公钥(hashed_public_key)前面添加网络前缀(network_prefix)。网络前缀(network_prefix)通常用于标识该地址是在主网(Mainnet)还是测试网(Testnet)上。

输出结果:添加了网络前缀的扩展哈希的公钥(extended_hashed_public_key)。

calculate_checksum(extended_hashed_public_key):

对扩展哈希的公钥(extended_hashed_public_key)进行两次SHA-256哈希运算,然后取结果的前4个字节作为校验和(checksum)。

输出结果:校验和(checksum)。

generate_P2PKH_address(public_key, network_prefix):

将提供的公钥(public_key)转换为字节串。

调用hash_public_key函数得到哈希的公钥(hashed_public_key)。

调用add_network_prefix函数添加网络前缀(network_prefix)。

调用calculate_checksum函数计算校验和(checksum)。

将校验和和扩展哈希的公钥合并,并对它们进行Base58编码,得到最终的P2PKH地址(address)。

输出结果:P2PKH地址(address)。

1import hashlib

2import base58

3​

4def hash_public_key(public_key):

5    hashed_public_key = hashlib.new('ripemd160', hashlib.sha256(public_key).digest()).digest()

6    print("Hashed Public Key:", hashed_public_key.hex())

7    return hashed_public_key

8​

9def add_network_prefix(hashed_public_key, network_prefix):

10    extended_hashed_public_key = network_prefix + hashed_public_key

11    print("Extended Hashed Public Key with Network Prefix:", extended_hashed_public_key.hex())

12    return extended_hashed_public_key

13​

14def calculate_checksum(extended_hashed_public_key):

15    checksum = hashlib.sha256(hashlib.sha256(extended_hashed_public_key).digest()).digest()[:4]

16    print("Checksum:", checksum.hex())

17    return checksum

18​

19def generate_P2PKH_address(public_key, network_prefix):

20    print("\nPublic Key:", public_key.hex())

21    hashed_public_key = hash_public_key(public_key)

22    extended_hashed_public_key = add_network_prefix(hashed_public_key, network_prefix)

23    checksum = calculate_checksum(extended_hashed_public_key)

24    extended_hashed_public_key_with_checksum = extended_hashed_public_key + checksum

25    address = base58.b58encode(extended_hashed_public_key_with_checksum)

26    print("P2PKH Address:", address.decode())

27    return address

28​

29public_key_hex = "02792d4659d703e1999cdfcb641470754634f88e8252e3625f26e83df815dbe123"

30public_key_bytes = bytes.fromhex(public_key_hex)

31network_prefix = b'\x00'  # Mainnet prefix

32​

33address = generate_P2PKH_address(public_key_bytes, network_prefix)

交易结构和验证过程

简化结构如下(后面都是简化,便于理解)

1transaction:

2 version: 1

3 inputs:

4 - previous_txid: abcdef1234567890abcdef1234567890abcdef1234567890abcdef12345678

5 output_index: 0

6 script_sig:

7 sequence: 4294967295

8 outputs:

9 - value: 1000000000

10 script_pubkey: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG

11 lock_time: 0

在比特币交易中,script_sig 和 script_pubkey 是两个重要的脚本,它们分别用于交易输入和输出。这些脚本由操作码组成,用于验证交易的有效性。

script_sig 是交易输入中的解锁脚本。包括签名和公钥。

script_pubkey 是交易输出中的锁定脚本。它规定了接收比特币的条件,通常是一个公钥哈希。

下面我们演示这一过程:

首先,将 script_sig 和 script_pubkey 合并成一个完整的脚本。

然后,将这个完整的脚本放入比特币脚本解释器中执行。

如果执行成功,脚本返回 TRUE,交易有效;如果失败,脚本返回 FALSE,交易无效。

示例代码如下(假设使用Python来模拟比特币脚本解释器):

1import hashlib

2

3# 定义脚本操作码

4OP_DUP = "OP_DUP"

5OP_HASH160 = "OP_HASH160"

6OP_EQUALVERIFY = "OP_EQUALVERIFY"

7OP_CHECKSIG = "OP_CHECKSIG"

8

9# 交易输入中的 script_sig

10script_sig = " "

11

12# 交易输出中的 script_pubkey

13script_pubkey = "OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG"

14

15# 合并成完整脚本

16complete_script = script_sig + " " + script_pubkey

17

18# 模拟比特币脚本解释器执行

19def execute_script(script):

20 stack = []

21 for op in script.split():

22 if op == "OP_DUP":

23 stack.append(stack[-1])

24 elif op == "OP_HASH160":

25 public_key_hash = hashlib.new('ripemd160')

26 public_key_hash.update(stack.pop())

27 stack.append(public_key_hash.digest())

28 elif op == "OP_EQUALVERIFY":

29 if stack.pop() != stack.pop():

30 return False

31 elif op == "OP_CHECKSIG":

32 # 在实际情况中,这里会进行数字签名验证,此处仅简化演示

33 return True

34 else:

35 stack.append(op)

36 return True if len(stack) == 1 else False

37

38# 执行脚本

39result = execute_script(complete_script)

40print("Transaction is valid:", result)

栈的变化过程如下:

初始时,栈为空。

执行 script_sig,将数字签名和公钥推入栈中:

栈:

执行 script_pubkey:

OP_DUP 复制栈顶元素,栈变为:

OP_HASH160 将栈顶元素取哈希,栈变为:

推送 入栈,栈变位:

OP_EQUALVERIFY 比较栈顶两个元素是否相等,如果相等则继续,否则抛出错误:

栈变为:

OP_CHECKSIG 使用公钥验证签名的有效性,如果验证通过则继续,否则抛出错误。

最终,栈中仅剩余一个元素,表示验证通过。

安全性

由于交易可以随便创建,那么能否让 script_sig 和 script_pubkey 直接返回 True,这样让任何人的钱都无条件转给我?

这当然是不行的,原因在于你花费的 UTXO 必须是属于你的。所以你只能让你的钱变得任何人都能支取。成慈善家了哈哈。

那么换个思路,能不能提交大量的这种无效交易,对比特币集群形成 DDOS 攻击?

理论上是可以的,甚至不需要是无效交易,提交大量的查询 RPC 都行。但是你的交易在最开始的签名验证一步就挂了。而且不要小看了现在的硬件防火墙,很容易识别出这种攻击模式,把你的 IP 拉黑。

P2SH (Pay-to-Script-Hash)

地址生成过程相同,但使用 0x05 版本前缀。

交易结构和验证过程

简化结构:

1transaction:

2 version: 1

3 inputs:

4 - previous_txid:

5 output_index:

6 script_sig:

7 sequence:

8 outputs:

9 - value:

10 script_pubkey: OP_HASH160 OP_EQUAL

11 lock_time: 0

验证过程:

提取出 script_sig 中的赎回脚本(redeem script);

计算赎回脚本的哈希值;

对比计算得到的哈希值是否与P2SH地址中的脚本哈希相匹配;

执行赎回脚本,验证交易的有效性。

验证过程与之前描述的相似,但是与P2PKH和P2WPKH交易不同,P2SH交易的 script_pubkey 中使用了 OP_HASH160 和 OP_EQUAL 操作码来验证提供的脚本是否与地址中的脚本匹配。

这里引入的赎回脚本概念我们详细介绍。

赎回脚本

赎回脚本(redeem script)是一个包含了特定条件的比特币脚本,用于解锁P2SH交易中的输出。赎回脚本可以包含各种条件,比如多重签名、时间锁定等。

假设有两个公钥:,需要两个签名才能解锁该交易输出。

赎回脚本的格式如下:

OP_2 OP_2 OP_CHECKMULTISIG

其中,OP_2 表示需要两个签名才能通过验证, 是两个参与者的公钥,OP_CHECKMULTISIG 用于验证多重签名。

P2WPKH (Pay-to-Witness-Pubkey-Hash)

隔离见证(Segregated Witness)地址

普通的比特币地址通常以1开头,而SegWit地址以bc1开头。其结构如下:

bc1q

其中:

bc1q 是SegWit地址的前缀,用于表示这是一个SegWit地址。

是SegWit地址的版本前缀。

是SegWit地址的数据部分,包含了公钥哈希或脚本哈希等信息。

是SegWit地址的校验和,用于确保地址的正确性。

生成

这部分逻辑已经封装到 bech32模块,其内部原理不再详说。只需要知道 Bech32 地址相对于传统的比特币地址具有更好的错误检测和纠正能力,更短的地址长度,并且更具人类可读性和可打印性。

1import hashlib

2import bech32

3

4def segwit_address(pubkey_bytes):

5 # 计算公钥的哈希值(hash160)

6 pubkey_hash = hashlib.new('ripemd160', hashlib.sha256(pubkey_bytes).digest()).digest()

7

8 # 生成SegWit地址

9 witness_version = 0 # SegWit版本

10 witness_program = pubkey_hash

11 return bech32.encode('bc', witness_version, witness_program)

12

13# 示例公钥

14pubkey_bytes = bytes.fromhex('036dde89b1a6bc90c832e7b3fd7a583035c3c16f0ab1a1a3a430bb23929c4ad4b4')

15segwit_addr = segwit_address(pubkey_bytes)

16print("SegWit Address:", segwit_addr)

交易结构和验证过程

P2WPKH(Pay-to-Witness-Pubkey-Hash)交易结构与普通的比特币交易结构略有不同,主要区别在于输入和输出脚本的格式以及见证数据的使用。以下是一个P2WPKH交易的简化结构:

1transaction:

2 version: 1

3 inputs:

4 - previous_txid:

5 output_index:

6 script_sig:

7 sequence:

8 witness:

9 -

10 -

11 outputs:

12 - value:

13 script_pubkey:

14 lock_time: 0

在这个结构中:

是见证脚本,用于验证见证数据的有效性。

是签名数据,用于证明交易的所有者同意将UTXO用于新的交易。

是用于验证签名的公钥。

下面是一个P2WPKH交易的示例:

1transaction:

2 version: 1

3 inputs:

4 - previous_txid: 5e6d91aa430b4387cc6b4d8fb5ec6de99b21ad3d218c07f4329cbda54b89a2ff

5 output_index: 0

6 script_sig:

7 sequence: 4294967295

8 witness:

9 - 304502210085ff3d536b38b1024f8f2695e2b24859c5b38bbaae1e7fda9fbf7173b9770e8402205717640a4d2f5167dcdb7a5108fbb3e58b007a0b54c2fd78e5f572d24b4dbd63

10 - 03a0bfa7353a4b7227c5f6f2591ec2b8e119a7a46f8aa3c5bfc46406a49ef06f10

11 outputs:

12 - value: 100000000

13 script_pubkey: 0014be3b5f5bdf0317a6b5a6c2950be15fe8062eb47f

14 lock_time: 0

在这个示例中,交易的输入引用了之前交易的输出,包括了签名数据和公钥作为见证数据。输出部分指定了要发送的金额和P2WPKH输出脚本。

你可能注意到,P2WPKH交易的输出脚本只包含公钥哈希,而不需要额外的脚本,因此,在P2WPKH交易中,Witness_Script字段应该是空的。

P2WPKH交易的验证过程与传统交易类似,但需要将签名和公钥从 witness 字段中提取出来进行验证。验证的步骤包括:

提取出交易的输入、输出、签名和公钥。

计算交易数据的哈希。

使用公钥对签名进行验证,确保它与交易数据哈希匹配。

验证交易输出脚本中的地址与公钥哈希匹配。

确认交易金额和其他条件是否满足。

如果所有条件都满足,则交易被视为有效。

为什么叫隔离见证

因为实现了将交易中的签名信息(见证数据)与其它交易数据分离。

解释这个名称的两个部分:

见证(Witness):这里的“见证”指的是交易签名,证明了交易发起者拥有他们所声称的比特币。。

隔离(Segregated):在SegWit之前,每个交易的签名信息是与交易的其它部分(例如发送者和接收者的地址、交易金额等)一起存储在区块链上的。SegWit通过将签名信息“隔离”开来,存储在一个单独的结构中,改变了这一点。这样做的好处包括但不限于减少单个交易的大小,从而在同样大小的区块中容纳更多的交易,提高网络的吞吐量。

隔离见证的引入还解决了一个称为交易延展性(Transaction Malleability)的问题。在SegWit之前,交易的签名可以被更改(虽然不会影响交易的实质内容),这意味着同一笔交易可以有多个有效的ID。通过将签名数据从交易的其余部分中分离,SegWit确保了即使签名数据被更改,交易ID也保持不变,从而增强了比特币网络的安全性和灵活性。

具体而言,之前交易的签名可以被更改的原因在于比特币的签名算法(ECDSA)存在一种特性,使得给定的签名可以有多种有效的表示。这意味着,即使不更改交易的任何实质内容(如发送者、接收者和金额),也可以通过修改签名的某些部分来改变 txid(因为 txid 通过对交易数据进行哈希运算而生成的)。这种能力被称为交易延展性问题。

P2WSH (Pay-to-Witness-Script-Hash)

交易结构

简化结构:

1transaction:

2 version: 1

3 inputs:

4 - previous_txid:

5 output_index:

6 script_sig:

7 sequence:

8 outputs:

9 - value:

10 script_pubkey: OP_0

11 lock_time: 0

在这个结构中:

是见证脚本,是一个被签名的脚本,用于解锁之前交易中的输出。P2WSH 中,它不再为空。

是见证脚本的哈希值,用于创建P2WSH地址。

示例:

1transaction:

2 version: 1

3 inputs:

4 - previous_txid: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

5 output_index: 0

6 script_sig:

7 sequence: 4294967295

8 outputs:

9 - value: 100000000

10 script_pubkey: OP_0 0014abcdef0123456789abcdef0123456789abcdef

11 lock_time: 0

在交易签名之后才会被添加。一个 Witness Script 的示例:

1witness_script = "OP_2 21 0221 02 OP_2 OP_CHECKMULTISIG"

21:公钥的长度为 33 字节(0x21),因为比特币的公钥通常是 33 字节长。

02:表示第一个公钥,长度为 33 字节,以 02 开头。

OP_CHECKMULTISIG: 是一个操作码,用于验证是否有足够的签名与提供的公钥匹配。

OP_2: 再次表示需两个操作数。

验证过程

提取出 Witness Script 和签名数据。

对每个输入进行以下操作:

将见证脚本和对应的签名数据推入栈中。

执行见证脚本,验证签名和条件是否满足。

如果见证脚本执行成功,则交易有效,否则交易无效。

具体栈执行过程如下:

将签名压入栈: 栈的状态(从顶部到底部):

开始执行witness_script:

OP_2:表示需要两个签名,验证一下栈上有两个操作数即可,不改变栈的状态。

接下来,公钥被压入栈:

21 02

21 02

OP_2再次压入栈,表示这是一个2-of-2 multisig,不改变上述栈的状态。

OP_CHECKMULTISIG开始执行,它期望栈的状态如下:

需要的签名数量(2)

签名(,

公钥数量(2)

公钥(21 02, 21 02

OP_CHECKMULTISIG会消耗这些元素,并验证提供的签名是否匹配公钥。

匹配则 OP_CHECKMULTISIG 执行成功,最终栈顶将留 OP_TRUE,表示成功。

钱包

一个私钥就够了,但这不够安全。

余额机制:不直接存储余额,追踪所有与钱包地址相关的交易记录,累加输入与输出的差额,得出钱包地址的余额。

实现上,使用UTXO(Unspent Transaction Outputs)模型和索引来优化查询过程。详见下文。

钱包按功能分为:

Full-Service Wallets:包含私钥和公钥,允许用户完全控制其资金。Full-Service Wallets可以在线或离线使用,但在线使用时需要考虑安全问题。

Signing-Only Wallets:仅用于生成签名,而不存储比特币。用户可以在离线设备中生成签名,然后将签名带到其他地方进行广播。

Distributing-Only Wallets:在网络分发公钥哈希,不提供接收比特币的功能,也不存储私钥,因此不能用于生成交易或签名。

Wallet Import Format (WIF) 是一种私钥序列化形式,提供了校验和,便于保持完整性地传输,但不提供加密。BIP38 提供了加密的 WIF,增加了额外的安全层。

TRANSACTION(事务/交易/TX)

UTXO

花剩下的钱。

UTXO(Unspent Transaction Output)即是“未花费的交易输出”,BTC 核心所有权机制。在UTXO模型中,货币的所有权通过交易历史的记录来证明,而不是通过账户余额。每个UTXO都是之前交易中未花费的部分,可以用于未来的交易。

伪代码:

class UTXO:   transaction_id: str  # 交易ID   output_index: int    # 输出索引   value: int           # 金额   script_pubkey: str   # 脚本公钥,用于验证所有权

TX

用以前花剩下的钱付款,付剩下的以后用。

伪代码:

class Transaction:   inputs: List[UTXO]   # 交易输入   outputs: List[UTXO]  # 交易输出

Coinbase Input

Coinbase 交易是用来奖励挖矿节点的特殊交易,它出现在每个新区块的头部,是 UTXO 的源头,无中生有地创造出比特币。

Utreexo

Utreexo的全称是"UTXO Set Refinement for Excessively Fast Execution of Opportunistic Transactions",它由Blockstream公司的Greg Maxwell和Pieter Wuille在2019年提出。

在传统的比特币实现中,全节点需要存储整个UTXO集合的副本,这意味着随着区块链的增长,节点的存储需求也会不断增加。Utreexo通过使用一种称为Merkle树的数据结构来优化这一过程,只存储UTXO集合的Merkle证明,而不是整个UTXO集合。

Utreexo的工作原理如下:

Merkle树构建:UTXO集合的每个元素都被哈希化,并插入到一个Merkle树中。Merkle树的根哈希代表了整个UTXO集合的状态。

证明生成:当一个UTXO被花费时,节点会生成一个Merkle证明,证明该UTXO之前存在于UTXO集合中。这个证明随后会被包含在新的区块中。

证明验证:当节点接收到新的区块时,它会验证区块中包含的Merkle证明,以确保所有被花费的UTXO都是有效的。

增量更新:节点只需要存储Merkle树的根哈希和少量的Merkle证明,就可以验证新的区块。当新的UTXO被创建时,节点会更新Merkle树,并生成新的根哈希。

通过这种方式,Utreexo显著减少了全节点所需的存储空间,同时也提高了验证交易和区块的速度。

Utreexo目前还没有在比特币的主网上实现,它仍然是一个研究和开发中的项目。

This work is licensed under CC BY 4.0 except those created with the assistance of AI.

最近发布

要查看全部文章,请点击右上角“归档”

深入理解比特币:(1)钱包和地址

(2024/3/6)

深入研究比特币:(0)从零到一

(2024/3/6)

BYOR——动手制作并理解区块链中的 Rollup 技术

(2024/1/31)

阅读大规模代码:挑战与实践(3)宏观理解代码结构

(2023/12/7)

阅读大规模代码:挑战与实践(2)不要直接开始阅读代码

(2023/12/7)

随机文章

请您随便浏览,获取您感兴趣的内容

«自动机理论、语言和计算导论»笔记:第三章 规则式与规则语言

Rust:一种线程崩溃处理机制研究

数据结构:单调栈

浅谈 Select & Epoll 多路复用技术

«统计学完全教程»笔记:第3章 期望

© 2024 Less Bug

RSS

Email

less-bug@mail.ry.rs