挖矿

POC挖矿没有前途

耗尽温柔 提交于 2019-11-26 10:28:39
最好的工作量证明是能力证明,能力不适合存储。望文生义,能力的本质意义是“能”和“力”(所有的词汇都按照望文生义理解,因为所有不能望文生义的词汇都是不良的已经被前人修正或将来被后人修正) 能力是流动的,迁移的,转换的,能力约等于计算。存储不能证明能力,我们都知道原子核中存储着巨大的能量但是不转化出来根本不是能力。 POW是最好的工作量证明,POC、POS都可以在非常小的规模存在,存在的意义是服务于POW。能力不适合存储,挖矿可以带来更快的计算设备,更多的发电量,这些计算设备不是只对挖矿有意义,能让各行各业运转的更快更良,带来更大的硬盘不是没有意义,但是更有意义的是带来更快的硬盘。 开源矿工: https://ntminer.com 来源: oschina 链接: https://my.oschina.net/u/4140472/blog/3129040

解密比特币的那些核心技术原理

一笑奈何 提交于 2019-11-26 02:04:32
作者:李艳鹏,现任蚂蚁金服高级技术专家,著有《分布式服务架构:原理、设计与实战》和《可伸缩服务架构:框架与中间件》,曾经在易宝支付、花旗银行、甲骨文、新浪微博、路透社等大型IT互联网公司担任技术负责人和首席架构师的工作,现专注于区块链平台的研发与推广,擅长大规模高并发的线上与线下相结合的第三方支付平台的架构规划与实施。 1 背景 对于当下流行的电子货币-比特币系统,朋友圈里有很多介绍性的文章,也有人试图通过漫画来生动的解释比特币的特性,但是始终不得要领,总是有些问题想不清楚,为了弄清楚这些问题,最近深入的研读了几本比特币的书籍以及中本聪本人发表的比特币论文,感觉茅塞顿开,迫不及待的与大家分享我的理解,希望与大家共同探讨、共同进步。 2 比特币 比特币是一种利用点对点技术实现的电子现金系统,它允许一个组织直接与另外一个组织进行在线支付,而不需要中间的权威的清算机构。 在比特币的世界里,如果你想拥有比特币,你需要申请一个比特币地址,就像你到银行存款,需要开立一个账户,然后,你就拥有这个账号,有了自己的账号,你可以向你的账号存款,别人也可以给你的账号转账,当你需要提款的时候或者给别人转账的时候,你需要出示一个能够打开这个地址的钥匙,也就是你的私钥,就像你在ATM上取款的时候需要提供密码一样。 与银行发行的法定货币不同,法定货币的发行是由各国央行来统一管理的,大家都相信央行是靠谱的

比特币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

搭建以太坊私有链完整版

风格不统一 提交于 2019-11-25 23:48:21
可以直接下载程序进行安装,也可以下载源码自己进行编译安装,本文介绍源码编译方式。 源码编译 环境需求 正确安装Go语言环境 正确安装GCC: 安装GCC方法 从github下载源码 go get github.com/ethereum/go-ethereum 编译 Ubuntu和Mac下编译 cd go-ethereum make geth 或者 make all Windows下编译 按以下目录结构才能正确编译,需要下载的包请自行下载 $GOPATH$/src ├── github.com │ └── ethereum │ └── go-ethereum └── golang.org └── x └── net 在CMD命令行下,执行以下命令进行编译: go install -v github.com/ethereum/go-ethereum/cmd/geth go install -v github.com/ethereum/go-ethereum/cmd/evm 编译成功,在$GOPATH$/bin下会出现:geth.exe和evm.exe 配置环境变量 将 geth 添加到环境变量中 # ubuntu下 vi ~/.bashrc # mac下 vi ~/.bash_profile # 打开配置文件后,把以下内容添加到文件中 export GETH="$GOPATH/src

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用户可能是这个顺序