比特币

比特币真的安全吗?我居然生成了一个和别人一样的私钥

时间秒杀一切 提交于 2019-11-26 00:36:00
比特币的私钥长度为256位,理论上有2的256次方种情况,这是一个非常庞大的数字,科学研究宇宙中的原子个数大约为10的80次方,2的256次方大约等于10的77次方。所以随机生成一个私钥,出现重复的概率是相当小的,这也是比特币安全性的保障。概率虽小但还是会出现,今天就被我遇到了。 今天用程序随机生成了一个私钥,生成比特币测试链地址,用于程序中测试使用。我从测试币网站获取了0.0081 BTC,然后到区块链浏览器去查看,神奇的一幕出现了,这个地址在2017年已经发生过交易记录。 我生成的测试地址为:mt4Nzc2Zz6nnULY9iSPJcyAYwmLwoX9jwt 区块链浏览器查询链接: https://testnet.blockchain.info/address/mt4Nzc2Zz6nnULY9iSPJcyAYwmLwoX9jwt 有图有真相 说明有人在2017年用同一个私钥生成了和我一样的地址,我们知道拥有私钥就拥有了地址中的比特币,虽然这只是一个测试链上的地址,虽然我们知道出现重复的概率极小,但今天的的确确就发生了,比特币真的就安全吗? 来源: 51CTO 作者: thao888 链接: https://blog.51cto.com/634435/2312107?source=dra

比特币CPU挖矿、GPU挖矿、矿池及矿机挖矿技术原理

孤街醉人 提交于 2019-11-26 00:35:33
比特币挖矿原理   比特币的区块头,共含6个字段,如下:   int32_t nVersion,4字节,版本号,一般固定不变,仅在升级时改变。   uint256 hashPrevBlock,32字节,前一个区块的区块头哈希,由前一个区块决定。   uint256 hashMerkleRoot,32字节,包含进区块的所有交易构造的Merkle根,调整区块中的交易次序、增删交易、或修改Coinbase交易时改变。   uint32_t nTime,4字节,时间戳,后一个区块时间略早于前一个区块是被允许的,但必须在合理的时间区间,一般会直接使用机器当前时间戳。   uint32_t nBits,4字节,挖矿难度,由全网决定,每2016个区块按算法重新调整。   uint32_t nNonce,4字节,随机数,提供2^32种取值。即4,294,967,296。   其中nVersion、hashPrevBlock、nBits是固定的,其他hashMerkleRoot、nTime、nNonce为可变的。   比特币挖矿原理即,不断变更区块头中的可变值,使得对区块头做双重SHA256哈希,结果小于挖矿难度目标值。即:   SHA256D(BlockHeader) < F(nBits)   其中SHA256D(BlockHeader)即对区块头做双重SHA256哈希,F(nBits

众多新点子推动比特币现金BCH普及

廉价感情. 提交于 2019-11-25 22:52:58
比特币现金(BCH)自产生以来已经将近6个月的时间。在这6个月的时间中,比特币现金(BCH)被很多人所熟知,并且获得了众多商家和企业的支持,并接受它作为一种支付方式。 那些对加密数字货币感兴趣的人,对比特币现金(BCH)是不陌生的,但是对于一些普通人而言,比特币现金(BCH)还是比较陌生的,尤其是连比特币都没听过的朋友。因此,比特币现金(BCH)社区中有很多支持者都自发的去推广比特币现金(BCH),还想一些点子促进比特币现金(BCH)的普及。 咖啡营销理念 比特币现金(BCH)社区的一个成员为了促进比特币现金(BCH)的普及,想出了一个咖啡营销的点子。咖啡对于西方国家来说是一种生活的必须品。这个成员也是一个咖啡爱好者,因此他提出的这个点子是和咖啡有关的。 他的理念是,将比特币现金(BCH)和咖啡杯结合起来。当用户每天去当地的咖啡馆喝咖啡的时候都可以把咖啡杯带走。而这款杯子上面,贴着一个比特币现金(BCH)的标签,上面印着比特币现金(BCH)。这个标签是可以撕开的,当你把它撕开的后,会显示一个二维码的私钥。你可以扫描二维码,看看是否有比特币现金(BCH)。如果有的话,就可以将这个咖啡杯上的比特币现金(BCH)扫到你的手机BCH钱包中。这种咖啡一杯大概是4美元,但是人们却有机会通过获得比特币现金(BCH)赢得一杯免费的咖啡。 采用这种方法可以培养咖啡爱好者对比特币现金(BCH)的兴趣

PoW挖矿算法原理及其在比特币、以太坊中的实现

夙愿已清 提交于 2019-11-25 22:49:51
  PoW,全称Proof of Work,即工作量证明,又称挖矿。大部分公有链或虚拟货币,如比特币、以太坊,均基于PoW算法,来实现其共识机制。即根据挖矿贡献的有效工作,来决定货币的分配。 比特币区块   比特币区块由区块头和该区块所包含的交易列表组成。区块头大小为80字节,其构成包括:    4字节:版本号   32字节:上一个区块的哈希值   32字节:交易列表的Merkle根哈希值    4字节:当前时间戳    4字节:当前难度值    4字节:随机数Nonce值   此80字节长度的区块头,即为比特币Pow算法的输入字符串。   交易列表附加在区块头之后,其中第一笔交易为矿工获得奖励和手续费的特殊交易。   bitcoin-0.15.1源码中区块头和区块定义: class CBlockHeader { public: //版本号 int32_t nVersion; //上一个区块的哈希值 uint256 hashPrevBlock; //交易列表的Merkle根哈希值 uint256 hashMerkleRoot; //当前时间戳 uint32_t nTime; //当前挖矿难度,nBits越小难度越大 uint32_t nBits; //随机数Nonce值 uint32_t nNonce; //其它代码略 }; class CBlock : public

比特币原理详解

自古美人都是妖i 提交于 2019-11-25 19:59:05
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人分别称之为ABCD,他们之间发起了3个交易,A转给B10个比特币,B转给C5个比特币,C转给D2个比特币。如果是传统的记账方式,这些交易会记录在银行的系统中,这些信息由银行来记录,我们相信银行不会随意添加、删除或修改一条交易记录,我们也不会关注到底有哪些交易,我们只关注自己的账户余额。而比特币的记账方式为ABCD每个人保存了这样一份账本,账本上记录了上述交易内容,如果每个人账本实时的一致,ABCD就不再需要银行。 比特币是这样做的,每当有人发起一笔交易,他就要将一笔交易广播至全网,由全网中的某一个人,把一段时间内的交易打包好记录到一个区块上,再按照顺序把这些区块,一个一个的链接在一起,进而形成了一个链条,这就是所谓的区块链。 那么问题来了 1、我凭什么要参与这个系统,我为什么要动用自己的计算机资源来存储这些信息呢? 2、以谁的记录为准呢?比如上面的账单顺序,A用户可能是这个顺序