Hero Circle Shape
Hero Moon Shape
Hero Right Shape
比特派下载|挖矿流程

比特派下载|挖矿流程

  • 作者: 比特派下载
  • 2024-03-15 06:58:31

以太坊挖矿逻辑流程 :: 以太坊技术与实现

矿逻辑流程 :: 以太坊技术与实现以太坊技术与实现前言开始以太坊术语第一章. 基础数据结构配置创世块账户交易区块交易回执Gas第二章. 挖矿核心交易池架构设计交易存储交易入队列内存限制挖矿架构启动挖矿挖矿信号挖矿流程叔块挖矿奖励区块存储共识算法代码结构Ethash基础Ethash算法实现第三章. 底层核心技术签名与校验MPTStateDBRLPEVM第四章. 功能集第五章. 区块同步第六章. 漏洞分析TheDao第七章. Dapp开发存储布局More Github 源码 深入浅出区块链 文章标签Star Fork作者:虞双齐| 主题:learn 我要编辑 > 挖矿核心 > 以太坊挖矿逻辑 > 以太坊挖矿逻辑流程挖矿代码方法介绍挖矿工作管理新工作启动信号新交易信号挖矿流程环节设置新区块基本信息准备上下文环境选择叔块提交交易提交区块PoW计算寻找Nonce等待挖矿结果 Nonce存储与广播挖出的新块总结以太坊挖矿逻辑流程上一篇文章中,有介绍是如何发出挖矿工作信号的。当有了挖矿信号后,就可以开始挖矿了。先回头看看,在讲解挖矿的第一篇文章中,有讲到挖矿流程。这篇文章将讲解挖矿中的各个环节。挖矿代码方法介绍在继续了解挖矿过程之前,先了解几个miner方法的作用。commitTransactions:提交交易到当前挖矿的上下文环境(environment)中。上下文环境中记录了当前挖矿工作信息,如当前挖矿高度、已提交的交易、当前State等信息。updateSnapshot:更新 environment 快照。快照中记录了区块内容和区块StateDB信息。相对于把当前 environment 备份到内存中。这个备份对挖矿没什么用途,只是方便外部查看 PendingBlock。commitNewWork:重新开始下一个区块的挖矿的第一个环节“构建新区块”。这个是整个挖矿业务处理的一个核心,值得关注。commit: 提交新区块工作,发送 PoW 计算信号。这将触发竞争激烈的 PoW 寻找Nonce过程。挖矿工作管理什么时候可以进行挖矿?如下图所述,挖矿启动工作时由 mainLoop 中根据三个信号来管理。首先是新工作启动信号(newWorkCh)、再是根据新交易信号(txsCh)和最长链链切换信号(chainSideCh)来管理挖矿。三种信号,三种管理方式。新工作启动信号这个信号,意思非常明确。一旦收到信号,立即开始挖矿。//miner/worker.go:409

case req := <-w.newWorkCh:

w.commitNewWork(req.interrupt, req.noempty, req.timestamp)这个信号的来源,已经在上一篇文章 挖矿工作信号监控中讲解。信号中的各项信息也来源与外部,这里仅仅是忠实地传递意图。新交易信号在交易池文章中有讲到,交易池在将交易推入交易池后,将向事件订阅者发送 NewTxsEvent。在 miner 中也订阅了此事件。worker.txsSub = eth.TxPool().SubscribeNewTxsEvent(worker.txsCh)当接收到新交易信号时,将根据挖矿状态区别对待。当尚未挖矿(!w.isRunning()),但可以挖矿w.current != nil时❶,将会把交易提交到待处理中。//miner/worker.go:451

case ev := <-w.txsCh:

if !w.isRunning() && w.current != nil {//❶

w.mu.RLock()

coinbase := w.coinbase

w.mu.RUnlock()

txs := make(map[common.Address]types.Transactions)

for _, tx := range ev.Txs {//❷

acc, _ := types.Sender(w.current.signer, tx)

txs[acc] = append(txs[acc], tx)

}

txset := types.NewTransactionsByPriceAndNonce(w.current.signer, txs)//❸

w.commitTransactions(txset, coinbase, nil)//❹

w.updateSnapshot()//❺

} else {

if w.config.Clique != nil && w.config.Clique.Period == 0 {//❻

w.commitNewWork(nil, false, time.Now().Unix())

}

}

atomic.AddInt32(&w.newTxs, int32(len(ev.Txs)))//❼首先,将新交易按发送者分组❷后,根据交易价格和Nonce值排序❸。形成一个有序的交易集后,依次提交每笔交易❹。最新完毕后将最新的执行结果进行快照备份❺。当正处于 PoA挖矿,右允许无间隔出块时❻,则将放弃当前工作,重新开始挖矿。最后,不管何种情况都对新交易数计加❼。但实际并未使用到数据量,仅仅是充当是否有进行中交易的一个标记。总得来说,新交易信息并不会干扰挖矿。而仅仅是继续使用当前的挖矿上下文,提交交易。也不用考虑交易是否已处理, 因为当交易重复时,第二次提交将会失败。###最长链链切换信号当一个区块落地成功后,有可能是在另一个分支上。当此分支的挖矿难度大于当前分支时,将发生最长链切换。此时 miner 将需要订阅从信号,以便更新叔块信息。//miner/worker.go:412

case ev := <-w.chainSideCh:

if _, exist := w.localUncles[ev.Block.Hash()]; exist {//❶

continue

}

if _, exist := w.remoteUncles[ev.Block.Hash()]; exist {

continue

}

if w.isLocalBlock != nil && w.isLocalBlock(ev.Block) {//❷

w.localUncles[ev.Block.Hash()] = ev.Block

} else {

w.remoteUncles[ev.Block.Hash()] = ev.Block

}

if w.isRunning() && w.current != nil && w.current.uncles.Cardinality() < 2 {//❸

start := time.Now()

if err := w.commitUncle(w.current, ev.Block.Header()); err == nil {//❹

var uncles []*types.Header

w.current.uncles.Each(func(item interface{}) bool {

//...

})

w.commit(uncles, nil, true, start)//❺

}

}短时间内,分支切换可能是频繁的。挖矿一直再相互竞争。如果接受到的区块,已经在叔块集中则忽略❶,没有则记录到叔块中❷。因为区块奖励是包含叔块奖励的,因此如果还在挖矿中,而叔块数量不到2个时❸。可以不再处理交易,一旦此区块加入叔块集成功❹,则直接结束交易处理,立刻将当前已处理的交易组装成区块,生成此区块的 PoW 计算信号❺。挖矿流程环节当开始新区块挖矿时,第一步就是构建区块,打包出包含交易的区块。在打包区块中,是按逻辑顺序依次组装各项信息。如果你对区块内容不清楚,请先查阅文章区块结构。设置新区块基本信息挖矿是在竞争挖下一个区块,需要把最新高度的区块作为父块来确定新区块的基本信息❶。//miner/worker.go:829

parent := w.chain.CurrentBlock()//❶

if parent.Time() >= uint64(timestamp) {//❷

timestamp = int64(parent.Time() + 1)

}

if now := time.Now().Unix(); timestamp > now+1 {

wait := time.Duration(timestamp-now) * time.Second

log.Info("Mining too far in the future", "wait", common.PrettyDuration(wait))

time.Sleep(wait)//❸

}

num := parent.Number()

header := &types.Header{//❹

ParentHash: parent.Hash(),

Number: num.Add(num, common.Big1),

GasLimit: core.CalcGasLimit(parent, w.gasFloor, w.gasCeil),

Extra: w.extra,

Time: uint64(timestamp),

}

if w.isRunning() {

if w.coinbase == (common.Address{}) {

log.Error("Refusing to mine without etherbase")

return

}

header.Coinbase = w.coinbase//❺

}先根据父块时间戳调整新区块的时间戳。如果新区块时间戳还小于父块时间戳,则直接在父块时间戳上加一秒。一种情是,新区块链时间戳比当前节点时间还快时,则需要稍做休眠❸,避免新出块属于未来。这也是区块时间戳可以作为区块链时间服务的一种保证。有了父块,新块的基本信息是确认的。分别是父块哈希、新块高度、燃料上限、挖矿自定义数据、区块时间戳❹。为了接受区块奖励,还需要设置一个不为空的矿工账户 Coinbase ❺。一个区块的挖矿难度是根据父块动态调整的,因此在正式处理交易前,需要根据共识算法设置新区块的挖矿难度❻。if err := w.engine.Prepare(w.chain, header); err != nil {//❻

log.Error("Failed to prepare header for mining", "err", err)

return

}至此,区块头信息准备就绪。准备上下文环境为了方便的共享当前新区块的信息,是专门定义了一个 environment ,专用于记录和当前挖矿工作相关内容。为即将开始的挖矿,先创建一份新的上下文环境信息。 err := w.makeCurrent(parent, header)

if err != nil {

log.Error("Failed to create mining context", "err", err)

return

}上下文环境信息中,记录着此新区块信息,分别有:state: 状态DB,这个状态DB继承自父块。每笔交易的处理,实际上是在改变这个状态DB。ancestors: 祖先区块集,用于检测叔块是否合法。family: 近亲区块集,用于检测叔块是否合法。uncles:已合法加入的叔块集。tcount: 当请挖矿周期内已提交的交易数。gasPool: 新区块可用燃料池。header: 新区块区块头。txs: 已提交的交易集合。receipts: 已提交交易产生的交易回执集合。makeCurrent方法就是在初始化好上述信息。Cd3ecj6#QG4Q3hzEU选择叔块前面不断将非分支上的区块存放在叔块集中。在打包新块选择叔块时,将从叔块集中选择适合的叔块。//miner/worker.go:886

uncles := make([]*types.Header, 0, 2)

commitUncles := func(blocks map[common.Hash]*types.Block) {

for hash, uncle := range blocks {//❷

if uncle.NumberU64()+staleThreshold <= header.Number.Uint64() {

delete(blocks, hash)

}

}

for hash, uncle := range blocks {

if len(uncles) == 2 {//❸

break

}

if err := w.commitUncle(env, uncle.Header()); err != nil {

} else {

uncles = append(uncles, uncle.Header())

}

}

}

commitUncles(w.localUncles)//❶

commitUncles(w.remoteUncles)叔块集分本地矿工打包区块和其他挖矿打包的区块。优先选择自己挖出的区块❶。选择时,将先删除太旧的区块,只从最近的7(staleThreshold)个高度中选择❷,但最多选择两个叔块放入新区块中❸。为什么不多选几个呢?这个不太清楚如何确定的。共识校验中叔块上限是2。怎样的叔块才能够被选择呢?在 commitUncle 时将根据当前新区块的高度、父区块信息来决定是否加入。//miner/worker.go:645

func (w *worker) commitUncle(env *environment, uncle *types.Header) error {

hash := uncle.Hash()

//...

if env.header.ParentHash == uncle.ParentHash {//❹

return errors.New("uncle is sibling")

}

//...

env.uncles.Add(uncle.Hash())

return nil

}唯一需要确认的是叔块必须在另一个分支上❹。总得来说,叔块是最近7个高度内上的区块,,且和当前新区块不在同一分支上、且不能重复包含在祖先块中。提交交易区块头已准备就绪,此刻开始从交易池拉取待处理的交易。将交易根据交易发送者分为两类,本地账户交易 localTxs 和外部账户交易 remoteTxs。本地交易优先不仅在交易池交易排队如此,在交易打包到区块中也是如此。本地交易优先,先将本地交易提交❸,再将外部交易提交❹。//miner/worker.go:917

pending, err := w.eth.TxPool().Pending()//❶

//...

localTxs, remoteTxs := make(map[common.Address]types.Transactions), pending//❷

for _, account := range w.eth.TxPool().Locals() {

if txs := remoteTxs[account]; len(txs) > 0 {

delete(remoteTxs, account)

localTxs[account] = txs

}

}

if len(localTxs) > 0 {//❸

txs := types.NewTransactionsByPriceAndNonce(w.current.signer, localTxs)

if w.commitTransactions(txs, w.coinbase, interrupt) {

return

}

}

if len(remoteTxs) > 0 {//❹

txs := types.NewTransactionsByPriceAndNonce(w.current.signer, remoteTxs)

if w.commitTransactions(txs, w.coinbase, interrupt) {

return

}

}交易处理完毕后,便可进入下一个环节。提交区块在交易处理完毕时,会获得交易回执和变更了区块状态。这些信息已经实时记录在上下文环境 environment 中。将 environment 中的数据整理,便可根据共识规则构建一个区块。//miner/worker.go:959

s := w.current.state.Copy()

block, err := w.engine.Finalize(w.chain, w.current.header, s, w.current.txs, uncles, w.current.receipts)有了区块,就剩下最重要也是最核心的一步,执行 PoW 运算寻找 Nonce。这里并不是立刻开始寻找,而是发送一个PoW计算任务信号。//miner/worker.go:968

select {

case w.taskCh <- &task{receipts: receipts, state: s, block: block, createdAt: time.Now()}:

//...

}PoW计算寻找Nonce之所以称之为挖矿,也是因为寻找Nonce的精髓所在。这是一道数学题,只能暴力破解,不断尝试不同的数字。直到找出一个符合要求的数字,这个数字称之为Nonce。寻找Nonce的过程,称之为挖矿。寻找Nonce是需要时间的,耗时主要由区块难度决定。在代码设计上,以太坊是在 taskLoop 方法中,一直等待 task ❶。//miner/worker.go:508

case task := <-w.taskCh://❶

//...

sealHash := w.engine.SealHash(task.block.Header())//❷

if sealHash == prev {

continue

}

interrupt()//❹

stopCh, prev = make(chan struct{}), sealHash

if w.skipSealHook != nil && w.skipSealHook(task) {

continue

}

w.pendingMu.Lock()

w.pendingTasks[w.engine.SealHash(task.block.Header())] = task//❸

w.pendingMu.Unlock()

if err := w.engine.Seal(w.chain, task.block, w.resultCh, stopCh); err != nil {

log.Warn("Block sealing failed", "err", err)

}当接收到挖矿任务后,先计算出这个区块所对应的一个哈希摘要❷,并登记此哈希对应的挖矿任务❸。登记的用途是方便查找该区块对应的挖矿任务信息,同时在开始新一轮挖矿时,会取消旧的挖矿工作,并从pendingTasks 中删除标记。以便快速作废挖矿任务。随后,在共识规则下开始寻找Nonce,一旦找到Nonce,则发送给 resutlCh。同时,如果想取消挖矿任务,只需要关闭 stopCh。而在每次开始挖矿寻找Nonce前,便会关闭 stopCh 将当前进行中的挖矿任务终止❹。//miner/worker.go:500

interrupt := func() {

if stopCh != nil {

close(stopCh)

stopCh = nil

}

}等待挖矿结果 Nonce上一步已经开始挖矿,寻找Nonce。下一步便是等待挖矿结束,在 resultLoop 中,一直在等待执行结果❶。//miner/worker.go:542

select {

case block := <-w.resultCh: //❶

if block == nil {

continue

}

if w.chain.HasBlock(block.Hash(), block.NumberU64()) {//❷

continue

}

var (

sealhash = w.engine.SealHash(block.Header())

hash = block.Hash()

)一旦找到Nonce,则说明挖出了新区块。存储与广播挖出的新块挖矿结果已经是一个包含正确Nonce 的新区块。在正式存储新区块前,需要检查区块是否已经存在,存在则不继续处理❷。//miner/worker.go:556

w.pendingMu.RLock()

task, exist := w.pendingTasks[sealhash]

w.pendingMu.RUnlock()

if !exist { //❸

continue

}

var (

receipts = make([]*types.Receipt, len(task.receipts))

logs []*types.Log

)

for i, receipt := range task.receipts { //❹

receipt.BlockHash = hash

receipt.BlockNumber = block.Number()

receipt.TransactionIndex = uint(i)

receipts[i] = new(types.Receipt)

*receipts[i] = *receipt

for _, log := range receipt.Logs {

log.BlockHash = hash

}

logs = append(logs, receipt.Logs...)

}也许挖矿任务已被取消,如果Pending Tasks 中不存在区块对应的挖矿任务信息,则说明任务已被取消,就不需要继续处理❸。从挖矿任务中,整理交易回执,补充缺失信息,并收集所有区块事件日志信息❹。//miner/worker.go:584

stat, err := w.chain.WriteBlockWithState(block, receipts, task.state)//

if err != nil {

log.Error("Failed writing block to chain", "err", err)

continue

}

//...

w.mux.Post(core.NewMinedBlockEvent{Block: block})//❻随后,将区块所有信息写入本地数据库❺,对外发送挖出新块事件❻。在 eth 包中会监听并订阅此事件。//eth/handler.go:771

func (pm *ProtocolManager) minedBroadcastLoop() {

for obj := range pm.minedBlockSub.Chan() {

if ev, ok := obj.Data.(core.NewMinedBlockEvent); ok {

pm.BroadcastBlock(ev.Block, true) //❼

pm.BroadcastBlock(ev.Block, false) //❽

}

}

}一旦接受到事件,则立即将广播。首随机广播给部分节点❼,再重新广播给不存在此区块的其他节点❽。//miner/worker.go:595

var events []interface{}

switch stat {

case core.CanonStatTy:

events = append(events, core.ChainEvent{Block: block, Hash: block.Hash(), Logs: logs})

events = append(events, core.ChainHeadEvent{Block: block})

case core.SideStatTy:

events = append(events, core.ChainSideEvent{Block: block})

}

w.chain.PostChainEvents(events, logs)//❾

w.unconfirmed.Insert(block.NumberU64(), block.Hash())//⑩同时,也需要通知程序内部的其他子系统,发送事件。新存储的区块,有可能导致切换链分支。如果变化,则队伍是发送 ChainSideEvent 事件。如果没有切换,则说明新区块仍然在当前的最长链上。对外发送 ChainEvent 和 ChainHeadEvent事件❾。新区块并非立即稳定,暂时存入到未确认区块集中。可这个 unconfirmed 仅仅是记录,但尚未具体使用。总结至此,已经讲解完以太坊挖出一个新区块所经历的各个环节。下面是一张流程图是对挖矿环节的细化,可以边看图便对比阅读此文。同时在讲解时,并没有涉及共识内部逻辑、以及提交交易到虚拟机执行内容。这些内容不是挖矿流程的重点,共识部分将在一下次讲解共识时细说。hi ,我录制了《说透以太坊技术》的视频课程,快快上

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本S-Maruko从入门到精通,看我就够了!​​ 比特币挖矿就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。  相信很多人都听说过比特币挖矿的说法,不知道有多少人真正理解这个概念。在矿产领域,挖矿的概念其实很容易理解,就是从富含某种矿物质的矿石中提炼出矿物质的过程,而所谓的矿工就是那些头戴安全头盔,从事提炼矿物质的工人,他们的形象在我们的脑海中恐怕一点也不陌生。  比特币世界的挖矿和矿产领域的挖矿还是有很多相似之处的,都是在挖掘有价值的资产,都需要花费一定的代价,都能给挖矿的人带来一定的收益。矿产领域的挖矿可以得到相对稀缺的矿产资源,同时要付出体力和承担安全风险的代价;而比特币的挖矿可以得到比特币奖励,同时要付出计算机算力的代价。  矿产领域的矿工是靠大型的机械设备,而比特币世界里的矿工是靠专业的计算机设备,伴随着激烈竞争,比特币的挖矿设备从最开始的普通计算机,到现在的越来越专业的挖矿设备。  不过比特币世界的挖矿和矿产领域的挖矿也还是有很多不同的,比特币世界的挖矿还是发行新比特币的唯一方式,同时也是在去中心化的网络中保证民主和竞争的重要手段,但是它也不是一点坏处都没有,比如浪费了大量的计算机算力和电力。至于为什么会这么说,看完接下来的文字我想你就会明白了。  文章导读:​  1.什么是挖矿​  2.如何证明谁的工作量最多​  3.什么是工作量证明(POW)​  4.挖矿是一场接力赛​  5.小结  1. 什么是挖矿  如果还不了解区块链的话,可以参考不懂技术?老司机带你轻松理解区块链知识,比特币的网络中传播着大量的交易信息,既然没有中心化的统一服务,那么谁来确认这些交易的合法性,以及达成统一的共识呢?我们可以想想中心化服务的支付宝是如何解决这两个问题的,支付宝其实是买卖双方的中间担保,它负责确认每一笔交易是否合法,并且等双方在线下的交易没有问题时,才将资金转给卖方,这就保证了不会出现某一方作弊或者不认账的问题。  但是比特币网络中没有像支付宝这样的担保角色,那么它是如何做到交易的正常进行的呢?其实答案也很简单,就是由网络中的所有全节点共同决定这份交易是否合法,通过共同维护同一份帐薄来确保交易不会违约和篡改。  这就如同有10个人共同见证了两个人的交易,并一起确认这笔交易的合法性,同时每个人都维护了一份账本,这笔交易会记录到每个人各自维护的同一套账本上,如果有人要违约或篡改交易数据,他需要同时改掉至少6个人的账本(少数服从多数)。否则如果只改自己的那一份账本,别人很容易就看出他的作弊行为,想想掩耳盗铃的故事应该就能明白了。  说回到比特币世界的挖矿,挖矿就是比特币世界里的矿工确认每一笔交易是否合法(关于如何确认交易合法,可以参考一文看懂比特币交易的全过程),并将合法的交易写入到统一的公共帐薄上,同时会获得一定的新比特币和交易费的奖励的过程。奖励是为了鼓励更多的矿工加入进来,确保不会出现某一个节点独断专权的情况,至于奖励给哪一个矿工,这就要看谁的工作量更多了,在比特币的世界里,是靠共同解决某一个数学问题来证明工作量的多少。  这就如同在竞争激励的市场经济中,每个公司都会拼尽全力提供更好的服务和产品才能生存下去,这样就不太容易产生垄断和腐败,而竞争的结果促进了资源的有效配置,社会的整体财富就会不断增长,最终所有人都会受益,当然受益最大的还是对社会贡献最大的企业家。  而在计划经济下,所有的生产安排和资源分配,都掌握在少数人手中,权力的过度集中必然会导致腐败,也不利于资源的合理配置,长远来看,只能是绝大大多数人普遍赤贫,而受益最大的往往是掌握更多资源的人。想想改革开放前后的中国,就能明白计划经济和市场经济的不同效果了。  总结一下,挖矿就是矿工为了得到新发行的比特币和交易费的奖励,主动去确认交易是否合法,并将合法的交易写入共同维护的帐薄中的过程。而奖励是为了确保矿工有更多的积极性,避免权力集中在少数人手中,同时奖励也是比特币发行的唯一方式。 2. 如何证明谁的工作量更多  刚才提到了挖矿的奖励会给工作量最多的那个人,那么如何证明谁的工作量最多呢。其实也很简单,就是大家共同去解同一道数学题,这道数学题需要一定的计算量才能做出来,而率先得到答案的矿工就是最终的胜出者,分享最终的奖励。  相信大家以前都玩过数独游戏(没玩过的同学请自行搜索游戏规则),简单来说就是每一行与每一列必须出现1~9的数字,每个小九宫格内也必须有1~9的数字,并且每个数字在每行、每列和每个小九宫格里出现且仅能出现一次。游戏刚开始只会给出有限的几个位置上的数字,其他的位置都需要计算分析才能得出来正确的数字。​  由这张游戏图可以看出,想要计算分析出每一个位置上的数字,还是需要花费不少力气的,但是填完之后来验证是否正确就简单很多,看一下横排、竖排以及小九宫格是否没有重复的数字即可。  而比特币挖矿的数学题也有这样的特性,就是计算起来很费事,但是验证起来却很简单。当然了,挖矿的数学题不是求解一道数独题目,而是计算一道概率题。  先举一个简单的掷骰子游戏,假如说有两个骰子,如果我说掷出一个骰子之和小于等于12的组合,你肯定会说这还不简单,随便掷,任一个组合都肯定小于等于12,一点难度都没有。好,那假如我把条件设为小于等于8呢,可能就不是每次都能掷出来了,它的概率是0.72;如果我再把条件设小呢,如果是4呢,那么掷出来的可能性就会进一步减小,概率为0.11。(这里默认大家都会计算概率,如果不懂的话,只需要知道概率在不断减小就可以,想想现实的场景,这点应该不难理解)3. 什么是工作量证明(POW)  理解了掷骰子游戏,再来介绍挖矿的工作量证明(POW Proof-Of-Work)算法就很简单了,在之前一篇介绍区块链的文章不懂技术?老司机带你轻松理解区块链知识中,曾经提到过区块的数据结构,当时提到了两个数据是和挖矿相关的,当时没有详细说明,现在就可以拿出来分析了。  这里的难度目标和Nonce就是和挖矿相关的参数,我们都知道比特币网络平均每10分钟产生新的比特币,也就是说挖矿的平均时间为10分钟,也许你会问怎么确保刚好是10分钟呢。其实答案很简单,就是控制数学题目的难度,假如某个人的解题速度在不断提升,那么我只要提高题目难度,就可以保证他解答的时间大致衡定。  在比特币世界中,解题速度和计算机的算力有直接的关系,想想今天的一台计算机和20年前的一台计算机去解同一道复杂的数学题,谁先计算出来,我想你肯定也认同是今天的计算机率先求出答案。如果我告诉你,谁先解出答案,就给谁丰厚的奖励,大家肯定会拼命提高计算机的性能,这也是全球各个矿工在不断提高算力的原因,因为大家都想快速解出答案,以获得奖励。  说回到难度目标和Nonce两个参数,挖矿的题目是这样的,每一个区块头都有唯一的哈希值,我现在要求你在这个哈希值后面添加一个随机数字(一般是从零开始递增),然后再去计算这个结果的哈希值,直到求出来的哈希值小于某一个数字,而这个数字是由一个常数除以上面的难度目标得出来的。  如果你理解了上面的掷骰子游戏应该能看懂这道题目,其实就是通过不同的数字不断地计算哈希值,直到答案小于某一个目标数字,这个目标数字越小,难度就越大,跟上面的骰子一样,结果越小,掷出来的概率就越小。而这个目标数字是由难度目标决定的,难度目标数字越大,除出来得到的目标数字就越小。  Nonce计数器主要是统计总共计算了多少次,就如同掷骰子一样,虽然可以一把掷出要求的数字,但是多次平均下来,肯定是符合概率统计的,这样别的矿工就可以根据Nonce数字大小再一次印证这个矿工是否有作弊。  至此你应该已经明白工作量证明算法的大致逻辑了吧,本质上就是在求一个概率题,谁先算出来就算谁赢,奖励就归谁。难度随着答题的速度会动态调整,而这个难度就是由上面的难度目标值决定,这样就能保证平均每10分钟完成一次挖矿。  4. 挖矿是一场接力赛  一旦一个矿工成功挖矿,根据数独游戏的逻辑,其他矿工很快就能验证是否成功,一旦验证通过就会将区块放入自己维护的区块链中,并赶紧投入到下一次的挖矿,不带有一丝一毫的犹豫。如此激烈的竞争伴随的结果,就是每个矿工都不断提升自己的计算机性能,结果就是大家的挖矿设备都不断升级,以至于现在的矿场都是紧挨发电厂,用最先进的专用挖矿芯片。  这里其实还有一个问题,就是假如说有两个矿工同时计算出结果怎么办?这个时候就会出现分叉,也就是说区块链的末端区块存在分歧了,其实这只会临时出现,并不会长久存在。原因是一旦其他矿工确认了本次挖矿成功,就会投入到下一次挖矿,如果其他矿工又挖矿成功了,这条区块链路就会比另一条区块链路多出一个区块,区块链中的原则就是只认最长的链路,所以另一个挖矿成功的矿工很快就会舍弃之前的区块,以最长的区块链为准。  而奖励也是要得到大多数的矿工认可后才会有效,毕竟账本是所有的人一起维护的,只有大多数人的账本上认可你的挖矿结果才有效。所以临时的分叉并不会影响最终的奖励,其实10分钟的挖矿时间也是比特币之父“中本聪”对效率和共识的一种平衡。  看到这里也许你就会明白,为什么会说挖矿浪费了很多算力和电力,因为胜出者往往只有一个,其他的矿工就相当于白忙活了,但是他们的计算机已经投入计算了,这笔算力和与之相对应的电力也就此浪费了。  这恐怕就是为了维护民主化的代价,如果让中心化的节点去统一确认交易,并写入公共帐薄,那么很容易滋生出腐败,这也不符合中本聪一开始的去中心化的设计理念,但是靠挖矿决定输赢又会导致资源浪费,只能说任何事情都是有成本和代价的,只要收益大于成本,这件事就有做的价值,比特币现在的价格相比用于计算的电费还是划算得多。5. 小结  关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  当然随着全网算力的提高,篡改的难度就越来越大了,因为你要改至少51%的全节点的账本,这就要求你的算力至少是其他51%全节点的总和,这个难度现在已经大到无法想象的程度,而且即便能做到,为此付出的电费代价也会让篡改者掂量一下这么做是否划算。关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  ——The End——『声明:本文转载于公众号“扬帆沧海”』发布于 2021-05-13 13:48比特币 (Bitcoin)btc挖矿挖矿​赞同 39​​4 条评论​分享​喜欢​收藏​申请

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本S-Maruko从入门到精通,看我就够了!​​ 比特币挖矿就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。  相信很多人都听说过比特币挖矿的说法,不知道有多少人真正理解这个概念。在矿产领域,挖矿的概念其实很容易理解,就是从富含某种矿物质的矿石中提炼出矿物质的过程,而所谓的矿工就是那些头戴安全头盔,从事提炼矿物质的工人,他们的形象在我们的脑海中恐怕一点也不陌生。  比特币世界的挖矿和矿产领域的挖矿还是有很多相似之处的,都是在挖掘有价值的资产,都需要花费一定的代价,都能给挖矿的人带来一定的收益。矿产领域的挖矿可以得到相对稀缺的矿产资源,同时要付出体力和承担安全风险的代价;而比特币的挖矿可以得到比特币奖励,同时要付出计算机算力的代价。  矿产领域的矿工是靠大型的机械设备,而比特币世界里的矿工是靠专业的计算机设备,伴随着激烈竞争,比特币的挖矿设备从最开始的普通计算机,到现在的越来越专业的挖矿设备。  不过比特币世界的挖矿和矿产领域的挖矿也还是有很多不同的,比特币世界的挖矿还是发行新比特币的唯一方式,同时也是在去中心化的网络中保证民主和竞争的重要手段,但是它也不是一点坏处都没有,比如浪费了大量的计算机算力和电力。至于为什么会这么说,看完接下来的文字我想你就会明白了。  文章导读:​  1.什么是挖矿​  2.如何证明谁的工作量最多​  3.什么是工作量证明(POW)​  4.挖矿是一场接力赛​  5.小结  1. 什么是挖矿  如果还不了解区块链的话,可以参考不懂技术?老司机带你轻松理解区块链知识,比特币的网络中传播着大量的交易信息,既然没有中心化的统一服务,那么谁来确认这些交易的合法性,以及达成统一的共识呢?我们可以想想中心化服务的支付宝是如何解决这两个问题的,支付宝其实是买卖双方的中间担保,它负责确认每一笔交易是否合法,并且等双方在线下的交易没有问题时,才将资金转给卖方,这就保证了不会出现某一方作弊或者不认账的问题。  但是比特币网络中没有像支付宝这样的担保角色,那么它是如何做到交易的正常进行的呢?其实答案也很简单,就是由网络中的所有全节点共同决定这份交易是否合法,通过共同维护同一份帐薄来确保交易不会违约和篡改。  这就如同有10个人共同见证了两个人的交易,并一起确认这笔交易的合法性,同时每个人都维护了一份账本,这笔交易会记录到每个人各自维护的同一套账本上,如果有人要违约或篡改交易数据,他需要同时改掉至少6个人的账本(少数服从多数)。否则如果只改自己的那一份账本,别人很容易就看出他的作弊行为,想想掩耳盗铃的故事应该就能明白了。  说回到比特币世界的挖矿,挖矿就是比特币世界里的矿工确认每一笔交易是否合法(关于如何确认交易合法,可以参考一文看懂比特币交易的全过程),并将合法的交易写入到统一的公共帐薄上,同时会获得一定的新比特币和交易费的奖励的过程。奖励是为了鼓励更多的矿工加入进来,确保不会出现某一个节点独断专权的情况,至于奖励给哪一个矿工,这就要看谁的工作量更多了,在比特币的世界里,是靠共同解决某一个数学问题来证明工作量的多少。  这就如同在竞争激励的市场经济中,每个公司都会拼尽全力提供更好的服务和产品才能生存下去,这样就不太容易产生垄断和腐败,而竞争的结果促进了资源的有效配置,社会的整体财富就会不断增长,最终所有人都会受益,当然受益最大的还是对社会贡献最大的企业家。  而在计划经济下,所有的生产安排和资源分配,都掌握在少数人手中,权力的过度集中必然会导致腐败,也不利于资源的合理配置,长远来看,只能是绝大大多数人普遍赤贫,而受益最大的往往是掌握更多资源的人。想想改革开放前后的中国,就能明白计划经济和市场经济的不同效果了。  总结一下,挖矿就是矿工为了得到新发行的比特币和交易费的奖励,主动去确认交易是否合法,并将合法的交易写入共同维护的帐薄中的过程。而奖励是为了确保矿工有更多的积极性,避免权力集中在少数人手中,同时奖励也是比特币发行的唯一方式。 2. 如何证明谁的工作量更多  刚才提到了挖矿的奖励会给工作量最多的那个人,那么如何证明谁的工作量最多呢。其实也很简单,就是大家共同去解同一道数学题,这道数学题需要一定的计算量才能做出来,而率先得到答案的矿工就是最终的胜出者,分享最终的奖励。  相信大家以前都玩过数独游戏(没玩过的同学请自行搜索游戏规则),简单来说就是每一行与每一列必须出现1~9的数字,每个小九宫格内也必须有1~9的数字,并且每个数字在每行、每列和每个小九宫格里出现且仅能出现一次。游戏刚开始只会给出有限的几个位置上的数字,其他的位置都需要计算分析才能得出来正确的数字。​  由这张游戏图可以看出,想要计算分析出每一个位置上的数字,还是需要花费不少力气的,但是填完之后来验证是否正确就简单很多,看一下横排、竖排以及小九宫格是否没有重复的数字即可。  而比特币挖矿的数学题也有这样的特性,就是计算起来很费事,但是验证起来却很简单。当然了,挖矿的数学题不是求解一道数独题目,而是计算一道概率题。  先举一个简单的掷骰子游戏,假如说有两个骰子,如果我说掷出一个骰子之和小于等于12的组合,你肯定会说这还不简单,随便掷,任一个组合都肯定小于等于12,一点难度都没有。好,那假如我把条件设为小于等于8呢,可能就不是每次都能掷出来了,它的概率是0.72;如果我再把条件设小呢,如果是4呢,那么掷出来的可能性就会进一步减小,概率为0.11。(这里默认大家都会计算概率,如果不懂的话,只需要知道概率在不断减小就可以,想想现实的场景,这点应该不难理解)3. 什么是工作量证明(POW)  理解了掷骰子游戏,再来介绍挖矿的工作量证明(POW Proof-Of-Work)算法就很简单了,在之前一篇介绍区块链的文章不懂技术?老司机带你轻松理解区块链知识中,曾经提到过区块的数据结构,当时提到了两个数据是和挖矿相关的,当时没有详细说明,现在就可以拿出来分析了。  这里的难度目标和Nonce就是和挖矿相关的参数,我们都知道比特币网络平均每10分钟产生新的比特币,也就是说挖矿的平均时间为10分钟,也许你会问怎么确保刚好是10分钟呢。其实答案很简单,就是控制数学题目的难度,假如某个人的解题速度在不断提升,那么我只要提高题目难度,就可以保证他解答的时间大致衡定。  在比特币世界中,解题速度和计算机的算力有直接的关系,想想今天的一台计算机和20年前的一台计算机去解同一道复杂的数学题,谁先计算出来,我想你肯定也认同是今天的计算机率先求出答案。如果我告诉你,谁先解出答案,就给谁丰厚的奖励,大家肯定会拼命提高计算机的性能,这也是全球各个矿工在不断提高算力的原因,因为大家都想快速解出答案,以获得奖励。  说回到难度目标和Nonce两个参数,挖矿的题目是这样的,每一个区块头都有唯一的哈希值,我现在要求你在这个哈希值后面添加一个随机数字(一般是从零开始递增),然后再去计算这个结果的哈希值,直到求出来的哈希值小于某一个数字,而这个数字是由一个常数除以上面的难度目标得出来的。  如果你理解了上面的掷骰子游戏应该能看懂这道题目,其实就是通过不同的数字不断地计算哈希值,直到答案小于某一个目标数字,这个目标数字越小,难度就越大,跟上面的骰子一样,结果越小,掷出来的概率就越小。而这个目标数字是由难度目标决定的,难度目标数字越大,除出来得到的目标数字就越小。  Nonce计数器主要是统计总共计算了多少次,就如同掷骰子一样,虽然可以一把掷出要求的数字,但是多次平均下来,肯定是符合概率统计的,这样别的矿工就可以根据Nonce数字大小再一次印证这个矿工是否有作弊。  至此你应该已经明白工作量证明算法的大致逻辑了吧,本质上就是在求一个概率题,谁先算出来就算谁赢,奖励就归谁。难度随着答题的速度会动态调整,而这个难度就是由上面的难度目标值决定,这样就能保证平均每10分钟完成一次挖矿。  4. 挖矿是一场接力赛  一旦一个矿工成功挖矿,根据数独游戏的逻辑,其他矿工很快就能验证是否成功,一旦验证通过就会将区块放入自己维护的区块链中,并赶紧投入到下一次的挖矿,不带有一丝一毫的犹豫。如此激烈的竞争伴随的结果,就是每个矿工都不断提升自己的计算机性能,结果就是大家的挖矿设备都不断升级,以至于现在的矿场都是紧挨发电厂,用最先进的专用挖矿芯片。  这里其实还有一个问题,就是假如说有两个矿工同时计算出结果怎么办?这个时候就会出现分叉,也就是说区块链的末端区块存在分歧了,其实这只会临时出现,并不会长久存在。原因是一旦其他矿工确认了本次挖矿成功,就会投入到下一次挖矿,如果其他矿工又挖矿成功了,这条区块链路就会比另一条区块链路多出一个区块,区块链中的原则就是只认最长的链路,所以另一个挖矿成功的矿工很快就会舍弃之前的区块,以最长的区块链为准。  而奖励也是要得到大多数的矿工认可后才会有效,毕竟账本是所有的人一起维护的,只有大多数人的账本上认可你的挖矿结果才有效。所以临时的分叉并不会影响最终的奖励,其实10分钟的挖矿时间也是比特币之父“中本聪”对效率和共识的一种平衡。  看到这里也许你就会明白,为什么会说挖矿浪费了很多算力和电力,因为胜出者往往只有一个,其他的矿工就相当于白忙活了,但是他们的计算机已经投入计算了,这笔算力和与之相对应的电力也就此浪费了。  这恐怕就是为了维护民主化的代价,如果让中心化的节点去统一确认交易,并写入公共帐薄,那么很容易滋生出腐败,这也不符合中本聪一开始的去中心化的设计理念,但是靠挖矿决定输赢又会导致资源浪费,只能说任何事情都是有成本和代价的,只要收益大于成本,这件事就有做的价值,比特币现在的价格相比用于计算的电费还是划算得多。5. 小结  关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  当然随着全网算力的提高,篡改的难度就越来越大了,因为你要改至少51%的全节点的账本,这就要求你的算力至少是其他51%全节点的总和,这个难度现在已经大到无法想象的程度,而且即便能做到,为此付出的电费代价也会让篡改者掂量一下这么做是否划算。关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  ——The End——『声明:本文转载于公众号“扬帆沧海”』发布于 2021-05-13 13:48比特币 (Bitcoin)btc挖矿挖矿​赞同 39​​4 条评论​分享​喜欢​收藏​申请

干货:资深矿工教你如何挖矿 - 知乎

干货:资深矿工教你如何挖矿 - 知乎首发于区块链应用技术切换模式写文章登录/注册干货:资深矿工教你如何挖矿头等仓专业服务价值投资者新闻内容:本文来源于Rolf,由头等仓 Mavis进行翻译自从我开始撰写此博客以来,已经完成了一些关于挖矿的帖子和视频,并收到了很多提问!以下是对FAQ的一些介绍和回答——这些FAQ没有深入研究所有细节,为新进或有想法的矿工提供一个很好的概述。为什么要挖矿?如果理解加密货币的基础知识,拥有一点技术技能,且能够获得相对便宜的电力(<0.10美元/千瓦时),那么挖矿是一种获取收益的好方式 ,每天都可以攒一点。自2015年底到现在,我的经验是,购买的现有挖矿设备在挖矿约10个月内可以收回成本。在更小的半导体技术实现之前,可以一直使用这种挖矿设备。用什么挖矿设备?这取决于加密货币使用的哈希算法。任何新的哈希的一般过程是,它可以首先由CPU(像Intel这样的处理器)解决,然后是GPU(图形卡),然后是ASIC(专用集成电路)。CPU可以做任何事情,GPU的功能有限,而ASIC通常只用于一种类型的哈希算法。每种算法通常都有一个主要的加密货币来启动它,然后其他许多使用该算法的加密货币再来启动它。通常最好从挖取大型的代币开始。之后,随着获得的经验增加,可以挖取小型代币,并将其换成大型代币。SHA-256 – Bitcoin——BTCScrypt – Litecoin——LTCX11 – Dash——DASHCryptonight – Monero——XMREthash – Ethereum——ETHEquihash – Zcash——ZEC最佳的入门方式是什么?购买一个ASIC矿机和电源,就可以开始挖矿了。不要进行太多研究,因为我们无法做出完美的决定,就这么开始吧。如果收益不错,那就多买些矿机,继续挖。如果收益不好,则停止。这是我的第一次挖矿的照片。这是一个Antminer S-7:如打算购买多个矿机,最好直接从制造商那里购买。如果只想购买一台机器,请从亚马逊购买。如果直接从工厂购买,需支付的费用会更多,但可以使用信用卡付款;如果从Prime卖家购买,可以在30天内全额退款。ASIC矿机没有配备电源,需要另外购买。以下是亚马逊上不同ASIC矿工和电源的链接。请不要只看黄金铺铺位的商品,记得货比三家。只在有库存的商家处购买——不要买预售商品!Bitcoin——Bitmain Antminer S9 13.5 THLitecoin——Bitmain Antminer L3+ 504 MHDash——Bitmain Antminer D3 19.3 GHS9和D3的电源供应——Bitmain APW-3++ with 10 connectors一至二个L3++的电源供应—— Bitmain APW-3++ with 18 connectors电源在208伏或更高电压下会运行得更好,就像电动干衣机的插座一样。可能需要电工的帮助。Antminer S9很棒!D3也是!L3 ++可能在隔壁房间运行比较好。从GPU挖矿开始是否会更好?使用GPU矿机有一些很好的理由。初始的投资较少,且更灵活。如果已经拥有带有显卡的计算机,可以开始对山寨币进行GPU挖矿。另一种入门方法是构建GPU矿机。从一个GPU开始,并在获得收益时添加更多GPU。以下是购买和搭建GPU矿机的完整指南。挖矿设备是什么样的?我开始是在地下室挖矿,然后租了一个小仓库,然后是一个更大的仓库。现在我有大约450个矿机。以下是我在挖矿方面能做的三件事:1.撰写关于挖矿及运营的博文2.制作有关挖矿的视频,并将其发布到Crypto Mining YouTube频道上3.当我有时间时,会回复文章和视频下的评论如何计算不同矿机的盈利能力?查看矿机的规格,然后将其插入加密货币挖矿计算器(如Whattomine和Coinwarz)的字段中。这些网站已经为每个加密货币的算力和价格提供了很好的价值,可以执行计算,并根据目前的收益大小对它们进行排名。有一些事情需要考虑。首先,是否会在挖矿后立挖将矿奖励转换为比特币,再兑换成美元等法定货币?如果是这样,那么Whattomine计算器很适合。如不是,可能需要考虑其他因素。加密货币应该放在哪?我喜欢使用加密货币交易所,但我放在交易所的钱不多。对于任何我打算保存超过几周的加密货币,我都会把它们放在钱包里。对于任何加密货币,我都会在计算机上使用钱包应用程序,一个有价值的代币都有一个适用于Linux或Windows的钱包。将挖取的代币放在钱包、备份钱包文件和私钥,这样就不会面临资金丢失的风险。从长远来看,我尽可能多地将加密货币保存在硬件钱包上。最值得购买的是Ledger Blue和Trezor Model T。我喜欢直接在制造商的网站上进行购买。不要使用纸钱包。它们容易丢失,很难正确使用。如果没有保管好加密货币私钥,则无法保管好资金。让资金远离交易所,除非你正在积极地进行交易。如何建立和运营更大规模的挖矿设备?在向大型设备过渡时,需要考虑几个不同的事情。为了保持连续性,我将挖矿作业分为三种不同的规模:小型——拥有1到50个矿机,在办公室进行操作的人——这是属于爱好。中等——50到500个矿机。运行它们需要全职工作或厉害的兼职人员。这通常属于家族企业或私营企业。大型——大于500个矿机。这属于完整的业务,包括员工、投资者、流程、规模和盈利能力优化。不同规模的重点不同。小矿工倾向于优化他们的矿机的每个方面,并可以维护矿机,确保正常工作。中型矿工通常希望保持尽可能多的运行,同时保持小型操作的独立性。这篇文章是一个规划比特币挖矿操作的很好的开始。挖矿业有时非常有利可图,但近几年来的收益并不乐观,只有运营成本最低的矿工才能继续。本篇文章面向中型矿商,他们可以部署比小型矿商更多的机器,并且比大型矿工具有更大的操作灵活性。如何以优惠的价格购买大量矿机?直接从制造商处购买。在2017年底,在钱包中有加密货币的人可缴费。我从比特大陆购买了大部分矿机。还有其他优秀的挖矿制造商,但比特大陆Antminers具有最优惠的价格和性能。一般来说,可以从比特大陆那个购买多达50或200个矿机。有时,甚至可以使用法定货币进行电汇付款。问题是,比特大陆网站上的大多数矿机都卖光了。但还是有买到的可能的。在推特和脸书上关注比特大陆,因为他们会提前12-24小时宣布出售矿机的消息。当矿机上架时,尽可能将矿机放入购物车并在两小时内检查好。之后,它们通常会再次售罄。其他可以购买矿机的好公司包括:Innosilicon、Baikal Miner、Ibelink。偶尔会有其他公司声称拥有最好的矿机。除非你认识某个拥有他们矿机的人,否则不要从他们那里订购,因为可能是诈骗网站。如何兑换挖矿利润?我的建议是尽可能多地保留获得的代币。在美国,可以通过持有加密货币一年以上来减少税收,因为任何价值的增加的物品都会作为长期资本收益被征税。在某些时候,需要支付一些账单,或者还房贷。你会怎么做?主要有两种类型的交易所——一种是仅加密货币,另一种是与法币挂钩的加密货币。首先,在与法币挂钩的交易所创建一个账户。举一些例子:Coinbase、Kraken、Bitstamp。为了处理任何重要的数量,需要提供身份证明,以满足KYC/AML(了解客户/反洗钱)规则。进行法定货币的交易所就和银行运作一样。注册并提供身份证明后,将交易所帐户连接到银行帐户。再对美元等法定货币进行小规模的双向转账测试。当要出售(或购买)加密货币时,请使用交易所的交易功能。对于Kraken来说,这是他们主页的一部分。Coinbase交易功能GDAX上,它与Coinbase共享一个登录名。设置限价销售或购买,然后将资金转入银行帐户。在进行销售和转移时,请注意每日、每周和每月的交易限制。如果正在挖规模较小的山寨币,需要将它们转换成比特币、以太坊或莱特币,以便在交易所进行出售。众所周知的中心化交易所是:Bittrex、Poloniex、Cryptopia、Livecoin。也有去中心化交易所,但那些更难使用。将山寨币转换成BTC、ETH或LTC后,将其提取到Coinbase、Kraken或Bitstamp的存款地址,然后在交易所使用限价订单将其卖出。原文来源:Rolf 由头等仓 Mavis进行翻译。欢迎在下方留言一起讨论!想要获取更多项目资讯跟踪分析报告,欢迎私信或是添加微信号go-first-one 发布于 2019-01-14 13:47币圈挖矿区块链(Blockchain)​赞同 12​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录区块链应

挖矿原理 - 廖雪峰的官方网站

挖矿原理 - 廖雪峰的官方网站

Index

廖雪峰的官方网站

Blog

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

More

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

 

Profile

Passkey

Sign Out

Sign In

English

简体中文

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

挖矿原理

Last updated: ...

/

Reads: 3281324

Edit

在比特币的P2P网络中,有一类节点,它们时刻不停地进行计算,试图把新的交易打包成新的区块并附加到区块链上,这类节点就是矿工。因为每打包一个新的区块,打包该区块的矿工就可以获得一笔比特币作为奖励。所以,打包新区块就被称为挖矿。

比特币的挖矿原理就是一种工作量证明机制。工作量证明POW是英文Proof of Work的缩写。

在讨论POW之前,我们先思考一个问题:在一个新区块中,凭什么是小明得到50个币的奖励,而不是小红或者小军?

当小明成功地打包了一个区块后,除了用户的交易,小明会在第一笔交易记录里写上一笔“挖矿”奖励的交易,从而给自己的地址添加50个比特币。为什么比特币的P2P网络会承认小明打包的区块,并且认可小明得到的区块奖励呢?

因为比特币的挖矿使用了工作量证明机制,小明的区块被认可,是因为他在打包区块的时候,做了一定的工作,而P2P网络的其他节点可以验证小明的工作量。

工作量证明

什么是工作量证明?工作量证明是指,证明自己做了一定的工作量。例如,在驾校学习了50个小时。而其他人可以简单地验证该工作量。例如,出示驾照,表示自己确实在驾校学习了一段时间:

比特币的工作量证明需要归结为计算机计算,也就是数学问题。如何构造一个数学问题来实现工作量证明?我们来看一个简单的例子。

假设某个学校的一个班里,只有一个女生叫小红,其他都是男生。每个男生都想约小红看电影,但是,能实现愿望的只能有一个男生。

到底选哪个男生呢?本着公平原则,小红需要考察每个男生的诚意,考察的方法是,出一道数学题,比如说解方程,谁第一个解出这个方程,谁就有资格陪小红看电影:

因为解高次方程没有固定的公式,需要进行大量的计算,才能算出正确的结果,这个计算过程就需要一定的工作量。假设小明率先计算出了结果x=2.5,小红可以简单地验证这个结果是否正确:

可以看出,解方程很困难,但是,验证结果却比较简单。所以,一个有效的工作量证明在于:计算过程非常复杂,需要消耗一定的时间,但是,验证过程相对简单,几乎可以瞬间完成。

现在出现了另一个问题:如果其他人偷看了小明的答案并且抢答了怎么办?

要解决这个问题也很容易,小红可以按照男生的编号,给不同的男生发送不同的方程,方程的第一项的系数就是编号。这样,每个人要解的方程都是不一样的。小明解出的x=2.5对于小军来说是无效的,因为小军的编号是3,用小明的结果验证小军的方程是无法通过验证的。

事实上如果某个方程被验证通过了,小红可以直接从方程的第一项系数得知是谁解出的方程。所以,窃取别人的工作量证明的结果是没有用的。

通过工作量证明,可以有效地验证每个人确实都必须花费一定时间做了计算。

在比特币网络中,矿工的挖矿也是一种工作量证明,但是,不能用解多项式方程来实现,因为解多项式方程对人来说很难计算,对计算机来说非常容易,可以在1秒钟以内完成。

要让计算机实现工作量证明,必须找到一种工作量算法,让计算机无法在短时间内算出来。这种算法就是哈希算法。

通过改变区块头部的一个nonce字段的值,计算机可以计算出不同的区块哈希值:

直到计算出某个特定的哈希值的时候,计算结束。这个哈希和其他的哈希相比,它的特点是前面有好几个0:

hash256(block data, nonce=0) = 291656f37cdcf493c4bb7b926e46fee5c14f9b76aff28f9d00f5cca0e54f376f

hash256(block data, nonce=1) = f7b2c15c4de7f482edee9e8db7287a6c5def1c99354108ef33947f34d891ea8d

hash256(block data, nonce=2) = b6eebc5faa4c44d9f5232631f39ddf4211443d819208da110229b644d2a99e12

hash256(block data, nonce=3) = 00aeaaf01166a93a2217fe01021395b066dd3a81daffcd16626c308c644c5246

hash256(block data, nonce=4) = 26d33671119c9180594a91a2f1f0eb08bdd0b595e3724050acb68703dc99f9b5

hash256(block data, nonce=5) = 4e8a3dcab619a7ce5c68e8f4abdc49f98de1a71e58f0ce9a0d95e024cce7c81a

hash256(block data, nonce=6) = 185f634d50b17eba93b260a911ba6dbe9427b72f74f8248774930c0d8588c193

hash256(block data, nonce=7) = 09b19f3d32e3e5771bddc5f0e1ee3c1bac1ba4a85e7b2cc30833a120e41272ed

...

hash256(block data, nonce=124709132) = 00000000fba7277ef31c8ecd1f3fef071cf993485fe5eab08e4f7647f47be95c

比特币挖矿的工作量证明原理就是,不断尝试计算区块的哈希,直到计算出一个特定的哈希值,它比难度值要小。

比特币使用的SHA-256算法可以看作对随机输入产生随机输出,例如,我们对字符串Hello再加上一个数字计算两次SHA-256,根据数字的不同,得到的哈希是完全无规律的256位随机数:

hash256("Hello?") = ????????????????????????????????????????????????????????????????

大约计算16次,我们可以在得到的哈希中找到首位是0的哈希值,因为首位是0出现的概率是1/16:

hash256("Hello1") = ffb7a43d629d363026b3309586233ab7ffc1054c4f56f43a92f0054870e7ddc9

hash256("Hello2") = e085bf19353eb3bd1021661a17cee97181b0b369d8e16c10ffb7b01287a77173

hash256("Hello3") = c5061965d37b8ed989529bf42eaf8a90c28fa00c3853c7eec586aa8b3922d404

hash256("Hello4") = 42c3104987afc18677179a4a1a984dbfc77e183b414bc6efb00c43b41b213537

hash256("Hello5") = 652dcd7b75d499bcdc61d0c4eda96012e3830557de01426da5b01e214b95cd7a

hash256("Hello6") = 4cc0fbe28abb820085f390d66880ece06297d74d13a6ddbbab3b664582a7a582

hash256("Hello7") = c3eef05b531b56e79ca38e5f46e6c04f21b0078212a1d8c3500aa38366d9786d

hash256("Hello8") = cf17d3f38036206cfce464cdcb44d9ccea3f005b7059cff1322c0dd8bf398830

hash256("Hello9") = 1f22981824c821d4e83246e71f207d0e49ad57755889874d43def42af693a077

hash256("Hello10") = 8a1e475d67cfbcea4bcf72d1eee65f15680515f65294c68b203725a9113fa6bf

hash256("Hello11") = 769987b3833f082e31476db0f645f60635fa774d2b92bf0bab00e0a539a2dede

hash256("Hello12") = c2acd1bb160b1d1e66d769a403e596b174ffab9a39aa7c44d1e670feaa67ab2d

hash256("Hello13") = dab8b9746f1c0bcf5750e0d878fc17940db446638a477070cf8dca8c3643618a

hash256("Hello14") = 51a575773fccbb5278929c08e788c1ce87e5f44ab356b8760776fd816357f6ff

hash256("Hello15") = 0442e1c38b810f5d3c022fc2820b1d7999149460b83dc680abdebc9c7bd65cae

如果我们要找出前两位是0的哈希值,理论上需要计算256次,因为00出现的概率是162=256,实际计算44次:

hash256("Hello44") = 00e477f95283a544ffac7a8efc7decb887f5c073e0f3b43b3797b5dafabb49b5

如果我们要找出前3位是0的哈希值,理论上需要计算163=4096次,实际计算6591次:

hash256("Hello6591") = 0008a883dacb7094d6da1a6cefc6e7cbc13635d024ac15152c4eadba7af8d11c

如果我们要找出前4位是0的哈希值,理论上需要计算164=6万5千多次,实际计算6万7千多次:

hash256("Hello67859") = 00002e4af0b80d706ae749d22247d91d9b1c2e91547d888e5e7a91bcc0982b87

如果我们要找出前5位是0的哈希值,理论上需要计算165=104万次,实际计算158万次:

hash256("Hello1580969") = 00000ca640d95329f965bde016b866e75a3e29e1971cf55ffd1344cdb457930e

如果我们要找出前6位是0的哈希值,理论上需要计算166=1677万次,实际计算1558万次:

hash256("Hello15583041") = 0000009becc5cf8c9e6ba81b1968575a1d15a93112d3bd67f4546f6172ef7e76

对于给定难度的SHA-256:假设我们用难度1表示必须算出首位1个0,难度2表示必须算出首位两个0,难度N表示必须算出首位N个0,那么,每增加一个难度,计算量将增加16倍。

对于比特币挖矿来说,就是先给定一个难度值,然后不断变换nonce,计算Block Hash,直到找到一个比给定难度值低的Block Hash,就算成功挖矿。

我们用简化的方法来说明难度,例如,必须计算出连续17个0开头的哈希值,矿工先确定Prev Hash,Merkle Hash,Timestamp,bits,然后,不断变化nonce来计算哈希,直到找出连续17个0开头的哈希值。我们可以大致推算一下,17个十六进制的0相当于计算了1617次,大约需要计算2.9万亿亿次。

17个0 = 1617 = 295147905179352825856 = 2.9万亿亿次

实际的难度是根据bits由一个公式计算出来,比特币协议要求计算出的区块的哈希值比难度值要小,这个区块才算有效:

Difficulty = 402937298

= 0x18 0455d2

= 0x0455d2 * 28 * (0x18 - 3)

= 106299667504289830835845558415962632664710558339861315584

= 0x00000000000000000455d2000000000000000000000000000000000000000000

注意,难度值的数值越小,说明哈希值前面的0越多,计算的难度越大。

比特币网络的难度是不断变化的,它的难度保证大约每10分钟产生一个区块,而难度值在每2015个区块调整一次:如果区块平均生成时间小于10分钟,说明全网算力增加,难度也会增加,如果区块平均生成时间大于10分钟,说明全网算力减少,难度也会减少。因此,难度随着全网算力的增减会动态调整。

比特币设计时本来打算每2016个区块调整一次难度,也就是两周一次,但是由于第一版代码的一个bug,实际调整周期是2015个区块。

根据比特币每个区块的难度值和产出时间,就可以推算出整个比特币网络的全网算力。

比特币网络的全网算力一直在迅速增加。目前,全网算力已经超过了100EH/每秒,也就是大约每秒钟计算1万亿亿次哈希:

所以比特币的工作量证明被通俗地称之为挖矿。在同一时间,所有矿工都在努力计算下一个区块的哈希。而挖矿难度取决于全网总算力的百分比。举个例子,假设小明拥有全网总算力的百分之一,那么他挖到下一个区块的可能性就是1%,或者说,每挖出100个区块,大约有1个就是小明挖的。

由于目前全网算力超过了100EH/s,而单机CPU算力不过几M,GPU算力也不过1G,所以,单机挖矿的成功率几乎等于0。比特币挖矿已经从早期的CPU、GPU发展到专用的ASIC芯片构建的矿池挖矿。

当某个矿工成功找到特定哈希的新区块后,他会立刻向全网广播该区块。其他矿工在收到新区块后,会对新区块进行验证,如果有效,就把它添加到区块链的尾部。同时说明,在本轮工作量证明的竞争中,这个矿工胜出,而其他矿工都失败了。失败的矿工会抛弃自己当前正在计算还没有算完的区块,转而开始计算下一个区块,进行下一轮工作量证明的竞争。

为什么区块可以安全广播?因为Merkle Hash锁定了该区块的所有交易,而该区块的第一个coinbase交易输出地址是该矿工地址。每个矿工在挖矿时产生的区块数据都是不同的,所以无法窃取别人的工作量。

比特币总量被限制为约2100万个比特币,初始挖矿奖励为每个区块50个比特币,以后每4年减半。

共识算法

如果两个矿工在同一时间各自找到了有效区块,注意,这两个区块是不同的,因为coinbase交易不同,所以Merkle Hash不同,区块哈希也不同。但它们只要符合难度值,就都是有效的。这个时候,网络上的其他矿工应该接收哪个区块并添加到区块链的末尾呢?答案是,都有可能。

通常,矿工接收先收到的有效区块,由于P2P网络广播的顺序是不确定的,不同的矿工先收到的区块是有可能的不同的。这个时候,我们说区块发生了分叉:

在分叉的情况下,有的矿工在绿色的分叉上继续挖矿,有的矿工在蓝色的分叉上继续挖矿:

但是最终,总有一个分叉首先挖到后续区块,这个时候,由于比特币网络采用最长分叉的共识算法,绿色分叉胜出,蓝色分叉被废弃,整个网络上的所有矿工又会继续在最长的链上继续挖矿。

由于区块链虽然最终会保持数据一致,但是,一个交易可能被打包到一个后续被孤立的区块中。所以,要确认一个交易被永久记录到区块链中,需要对交易进行确认。如果后续的区块被追加到区块链上,实际上就会对原有的交易进行确认,因为链越长,修改的难度越大。一般来说,经过6个区块确认的交易几乎是不可能被修改的。

小结

比特币挖矿是一种带经济激励的工作量证明机制;

工作量证明保证了修改区块链需要极高的成本,从而使得区块链的不可篡改特性得到保护;

比特币的网络安全实际上就是依靠强大的算力保障的。

Comments

Make a comment

Sign in to

make a comment

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

廖雪峰的官方网站

©Copyright 2019-2021

Powered by iTranswarp

Feedback

License

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.

挖矿过程 | 区块链技术指南

| 区块链技术指南区块链技术指南搜索Ctrl + K前言修订记录如何贡献区块链的诞生记账科技的千年演化分布式记账与区块链集大成者的比特币区块链的商业价值本章小结核心技术概览定义与原理技术的演化与分类关键问题和挑战趋势与展望认识上的误区本章小结典型应用场景应用场景概览金融服务征信管理权属管理与溯源资源共享物流与供应链物联网数字艺术品和 NFT其它场景本章小结分布式系统核心技术一致性问题共识算法FLP 不可能原理CAP 原理ACID 原则与多阶段提交Paxos 算法与 Raft 算法拜占庭问题与算法可靠性指标本章小结密码学与安全技术密码学简史Hash 算法与数字摘要加解密算法消息认证码与数字签名数字证书PKI 体系Merkle 树结构Bloom Filter 结构同态加密其它技术本章小结比特币 —— 初露锋芒的区块链比特币项目简介比特币诞生背景工作原理挖矿过程共识机制闪电网络侧链热门问题相关工具本章小结以太坊 —— 挣脱加密货币的枷锁以太坊项目简介核心概念主要设计相关工具安装客户端使用智能合约智能合约案例:投票本章小结超级账本 —— 面向企业的分布式账本超级账本项目简介社区组织结构顶级项目介绍开发必备工具贡献代码本章小结Fabric 安装与部署简介本地编译组件容器方式获取本地方式启动 Fabric 网络容器方式启动 Fabric 网络本章小结管理 Fabric 网络简介使用通道管理节点管理链上代码监听网络事件自动发现网络信息使用运维服务如何升级网络版本使用 SDK注意事项与最佳实践本章小结智能合约开发简介链码概念与结构示例一:信息公证示例二:交易资产示例三:数字货币发行与管理示例四:学历认证示例五:社区能源共享小结Fabric 架构与设计简介架构设计消息协议小结区块链服务平台设计简介IBM Bluemix 云区块链服务微软 Azure 云区块链服务使用超级账本 Cello 搭建区块链服务本章小结性能与评测简介Hyperledger Fabric v0.6小结附录术语常见问题Go 语言开发相关安装与配置 Golang 环境编辑器与 IDE高效开发工具依赖管理ProtoBuf 与 gRPC参考资源链接由 GitBook 提供支持挖矿过程基本原理比特币中最独特的一个概念就是“挖矿”。挖矿是指网络中的维护节点,通过协助生成和确认新区块来获取一定量新增比特币的过程。当用户向比特币网络中发布交易后,需要有人将交易进行记录和确认,形成新的区块,并串联到区块链中。在一个互相不信任的分布式系统中,该由谁来完成这件事情呢?比特币网络采用了“挖矿”的方式来解决这个问题。目前,每 10 分钟左右生成一个不超过 1 MB 大小的区块(记录了这 10 分钟内发生的验证过的交易内容),串联到最长的链尾部,每个区块的成功提交者可以得到系统 12.5 个比特币的奖励(该奖励作为区块内的第一个交易,一定区块数后才能使用),以及用户附加到交易上的支付服务费用。即便没有任何用户交易,矿工也可以自行产生合法的区块并获得奖励。每个区块的奖励最初是 50 个比特币,每隔 21 万个区块自动减半,即 4 年时间,最终比特币总量稳定在 2100 万个。因此,比特币是一种通缩的货币。挖矿过程挖矿的具体过程为:参与者综合上一个区块的 Hash 值,上一个区块生成之后的新的验证过的交易内容,再加上自己猜测的一个随机数 X,一起打包到一个候选新区块,让新区块的 Hash 值小于比特币网络中给定的一个数。这是一道面向全体矿工的“计算题”,这个数越小,计算出来就越难。系统每隔两周(即经过 2016 个区块)会根据上一周期的挖矿时间来调整挖矿难度(通过调整限制数的大小),来调节生成区块的时间稳定在 10 分钟左右。为了避免震荡,每次调整的最大幅度为 4 倍。历史上最快的出块时间小于 10s,最慢的出块时间超过 1 个小时。为了挖到矿,参与处理区块的用户端往往需要付出大量的时间和计算力。算力一般以每秒进行多少次 Hash 计算为单位,记为 h/s。目前,比特币网络算力峰值已经达到了每秒数百亿亿次。汇丰银行分析师 Anton Tonev 和 Davy Jose 在 2016 年一份客户报告中曾表示,比特币区块链(通过挖矿)提供了一个局部的、迄今为止最优的解决方案:如何在分散的系统中验证信任。这就意味着,区块链本质上解决了传统依赖于第三方的问题,因为这个协议不只满足了中心化机构追踪交易的需求,还使得陌生人之间产生信任。区块链的技术和安全的过程使得陌生人之间在没有被信任的第三方时产生信任。如何看待挖矿2010 年以前,挖矿还是一个非常热门的盈利行业。但是随着相关技术和设备的发展,现在个人进行挖矿的收益已经降得很低。从概率上说,由于当前参与挖矿的计算力实在过于庞大(已经超出了大部分的超算中心),一般的算力已经不可能挖到比特币。特别是利用虚拟机来挖矿的想法,已经基本不可能了。从普通的 CPU(2009 年)、到后来的 GPU(2010 年) 和 FPGA(2011 年末)、到后来的 ASIC 矿机(2013 年年初,目前单片算力已达每秒数百亿次 Hash 计算)、再到现在众多矿机联合组成矿池(知名矿池包括 F2Pool、BitFury 等)。短短数年间,比特币矿机的技术走完了过去几十年的集成电路的进化历程,甚至还颇有创新之处。高回报刺激了科技的飞速发展。目前,矿机主要集中在少数矿池手中,全网的算力已超过每秒 10^20 次 Hash 计算。如果简单认为一次 Hash 计算等同于一次浮点运算,那么比特币全网算力将等同于 500 台 Summit 超级计算机(目前最快的超级计算机,由 IBM 和 Nvidia 于 2018 年研制)。很自然地,读者可能会想到,如果有人掌握了强大的计算力,计算出所有的新区块,并且拒不承认他人的交易内容,那是不是就能破坏掉比特币网络。确实如此,基本上个体达到 1/3 的计算力,比特币网络就存在被破坏的风险了;达到 1/2 的算力,从概率上就掌控整个网络了。但是要实现这么大的算力,将需要付出巨大的经济成本。那么有没有办法防护呢?除了尽量避免计算力放到同一个组织手里,没太好的办法,这是目前 PoW 机制自身造成的。也有人认为为了共识区块的生成,大部分计算力(特别是最终未能算出区块的算力)其实都浪费了。有人提出用 PoS(Proof of Stake)和 DPoS 等协议,利用权益证明(例如持有货币的币龄)作为衡量指标进行投票,相对 PoW 可以节约大量的能耗。PoS 可能会带来囤积货币的问题。除此之外,还有活跃度证明(Proof of Activity,PoA)、消耗证明(Proof of Burn,PoB)、能力证明(Proof of Capacity, PoC)、消逝时间证明(Proof of Elapsed Time)、股权速率证明(Proof of Stake Velocity,PoSV)等,采用了不同的衡量指标。当然,无论哪种机制,都无法解决所有问题。一种可能的优化思路是引入随机代理人制度,通过算法在某段时间内确保只让部分节点参加共识的提案,并且要发放一部分“奖励”给所有在线贡献的节点。上一页工作原理下一页共识机制最后更新于2年前在本页基本原理挖矿过程如何看待挖矿这有帮助吗?在GitHub

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.

比特币挖矿指南 - 比特币挖矿入门

比特币挖矿指南 - 比特币挖矿入门

Start

News

Pool

Cloud

Software

Hardware

Price

...

Global Vol.

...

Diff.

...

比特币挖矿指南 - 比特币挖矿入门

你将了解(1)如何进行比特币挖矿,(2)如何开始挖比特币,(3)最好的比特币挖矿软件是什么,(4)最好的比特币挖矿硬件是什么,(5)哪里能找到最好的比特币采矿池和(6)如何优化你的比特币收益。

比特币挖矿很难做到有利可图,但如果你尝试的话,那么这个比特币挖矿机可能是一个很好的机会。

如何进行比特币挖矿

在开始比特币挖矿之前,了解比特币挖矿到底是什么意思非常有用。比特币挖矿是合法的,通过运行SHA256双向哈希验证流程来完成,以验证比特币交易并为比特币网络的公开帐本提供必要的安全性。你挖比特币的速度是以每秒哈希为单位测算的。

比特币网络通过向贡献所需计算能力的人员发放比特币来作为比特币矿工的工作报酬。这以新发行的比特币和挖比特币时已验证交易中包含的交易费用的形式进行。你贡献的计算能力越大,你所获得的奖励份额就越多。

步骤 1 - 获得最好的比特币挖矿硬件

购买比特币 - 某些情况下,你可能需要使用比特币来购买挖矿硬件。今天,您可以在Amazon上购买大部分硬件。你也可能想查看比特币图表。

如何开始比特币挖矿

要开始挖比特币,您需要获取比特币挖矿硬件。在比特币早期,可以使用电脑CPU或高速视频处理器卡来挖矿。但今天这种作法已经不可行了。定制的比特币 ASIC芯片的性能最多可达旧系统的100倍,现在已经占据了比特币挖矿的主导地位。

使用性能比这低的硬件来挖比特币,消耗的电力比可能会赚到的钱还要多。使用专门为此目的而制作的最好硬件来挖比特币至关重要。像Avalon这样的多家公司提供专门针对比特币挖矿而设计的优质系统。

最好的比特币云挖矿服务

另一个选择是购买比特币云挖矿合同。这大大简化了过程,但是由于你无法控制实际的硬件,因此会增加风险。

本节列出的并不是对这些服务的认可。已经发生过许多比特币云挖矿诈骗事件了。

Hashflare 评价:Hashflare提供SHA-256 挖矿合同,也可以挖更有利可图的SHA-256 比特币,同时仍使用比特币自动付款。客户必须至少购买10 GH/s。

Genesis Mining 评价:Genesis Mining 是最大的比特币云算力挖矿提供商。Genesis Mining提供三种比特币云挖矿计划,价格合理。另外也提供Zcash挖矿合同。

Hashing 24 评价:Hashing24自2012年以来就参与到比特币挖矿行业。他们在冰岛和格鲁吉亚有设施。他们使用BitFury的现代ASIC芯片,可以提供最佳的性能和效率。

Minex 评价:Minex是以经济模拟游戏格式呈现的区块链项目的创新聚合者。用户购买Cloudpack,然后可以使用它们为预先选定的云挖矿场、彩票、赌场、现实世界市场等建立索引。

Minergate 评价:提供比特币矿池以及合并的挖矿和云挖矿服务。

Hashnest 评价:Hashnest由比特币蚂蚁矿机的生产商Bitmain 运营。 HashNest目前有超过600台蚂蚁矿机 S7 供出租。你可以在Hashnest的网站上查看最新的价格和可租用的数量。在撰写本文时,一台蚂蚁矿机 S7的哈希率可以租$1200。

Bitcoin Cloud Mining 评价:当前 Bitcoin Cloud Mining 的合同已经售罄。

NiceHash 评价:NiceHash独一无二的原因在于,它使用订单来匹配采矿合同买家和卖家。查看其网站以了解最新价格。

Eobot 评价:刚开始时比特币云挖矿的价格可以低至$10。Eobot声称客户可以在14个月后实现盈亏平衡。

MineOnCloud 评价:MineOnCloud目前在云端有约35 TH/s的挖矿设备可供出租。另外还有一些挖矿机出租,其中包括蚂蚁矿机S4和S5。

步骤 2 - 下载免费的比特币挖矿软件

在收到比特币挖矿硬件后,你需要下载一个用于比特币挖矿的特殊程序。比特币挖矿可以使用很多程序,但两个最受欢迎的是CGminer和BFGminer,它们都是命令行程序。

如果你喜欢图形用户界面的易用性,你可能想试试EasyMiner,这是一个点击运行Windows / Linux / Android程序。

更多详细信息,请访问最佳比特币挖矿软件。

步骤 3 - 加入比特币矿池

在你准备好开始挖比特币时,我们建议你加入一个比特币矿池。比特币矿池是许多比特币挖矿机一起工作,共同解决一个数据块并分享其奖励。没有比特币矿池,你可能挖一年多也不会挖到任何比特币。与更大的比特币挖矿机群体一起工作并分享奖励,会让挖矿变得更为方便。这里有一些选择:

对于全分散控制矿池,我们强烈推荐p2pool。

以下矿池被认为目前正在使用比特币核心钱包 0.9.5或更高版本的有效数据块(由于DoS漏洞而推荐使用0.10.2或更高版本)

BitMinter

CK Pool

Eligius

Slush Pool

步骤 4 - 设置比特币钱包

挖比特币的下一步是设置一个比特币钱包,或使用现有的比特币钱包来接收你挖到的比特币。Copay是一个很棒的比特币钱包,并可在许多不同的操作系统上运行。也可以使用比特币硬件钱包。

比特币通过使用仅属于您的唯一地址发送到您的比特币钱包。设置比特币钱包最重要的一步是通过启用双因素身份验证或将其保存在无法访问互联网的离线电脑上,从而防止潜在的威胁。可以通过将软件客户端下载到电脑上来获得钱包。

有关选择比特币钱包的帮助,你可以从这里开始

您还需要能够购买和出售你的比特币。为此,我们建议:

SpectroCoin - 同日 SEPA 的欧洲交易平台,可以使用信用卡购买

Kraken - 最大的欧洲交易平台,具有同日SEPA

Buying Bitcoin Guide - 帮助你寻找你所在国家的比特币交易平台。

Local Bitcoins - 这个奇妙的服务可让你在你的社区寻找愿意直接出售给你比特币的人。不过要小心!

购买比特币时,Coinbase 是一个很好的开始之地。我们强烈建议你不要在其服务中保存任何比特币。

步骤 5 - 关注最新的比特币新闻

关注最新的比特币新闻对于比特币挖矿利润很重要。如果你想要了解一般的比特币新闻,那么我们推荐WeUseCoins news。

这是比特币挖矿新闻部分,这里有 5 篇最新的文章:

[警告] - 1 August 2017 年 8 月 1 日将发生 BIP 148 UASF 。这可能会大大影响比特币挖掘机传统挖矿或挖BIP 148 区块链的收益。

要做好准备,我们建议阅读 UASF 指南。

Written by Bitcoin Mining on .

Recommended posts

Contribute

Advertise

FAQ

About Us

Español

Deutsch

Français

Nederlands

Pусский

Português

Bitcoin Mining™® © 2010-2022 Hesiod Services LLC | Terms | Privacy

什么是比特币挖矿? | 了解关于BTC的一切 | 比特币入门

特币挖矿? | 了解关于BTC的一切 | 比特币入门开始什么是比特币挖矿?比特币的新铸造过程在某些方面类似于从地球中提取贵金属的过程。因此,这个过程被称为“比特币挖矿”。正如比特币白皮书中所述: 不断增加固定数量的新币类似于金矿工人耗费资源将黄金加入流通。在我们的案例中,耗费的是CPU时间和电力。 比特币挖矿的简化概述如下:人们通过应用计算能力参与一种称为“工作量证明”(PoW)的过程,以竞争获得比特币奖励。之所以这样命名,是因为只有那些证明自己已经投入了足够资源(工作)的参与者(矿工)才有机会赢得奖励。大约每10分钟,奖励会分发给一个胜出的“矿工”。奖励有两部分 -> (1) “区块奖励”,即新铸造的比特币。在写作本文时,区块奖励设定为6.25比特币(但从2024年5月初开始,奖励将减半,之后每四年再减半,依此类推)。(2) 当前区块内所有交易相关的费用。希望进行交易的终端用户必须为拟议的交易附加一笔费用,以激励矿工将其包含在下一个区块中。目录为什么需要比特币挖矿?什么是工作证明,为什么它是必要的?比特币挖矿是如何工作的?什么是比特币的哈希算法?比特币挖矿中的难度调整是什么,为什么需要它?比特币挖矿合法吗?比特币挖矿对环境有害吗?比特币挖矿盈利吗?比特币挖矿如何影响比特币的价格?仅需 30 美元就能起步购买从比特币、比特币现金、以太坊等中选择相关文章从此处开始 →比特币快速入门指南了解比特币及其重要性的简明介绍。查看 →比特币快速入门指南了解比特币及其重要性的简明介绍。我如何创建比特币钱包?学习如何快速轻松地创建比特币钱包。了解不同的钱包类型及其各自的优缺点。查看 →我如何创建比特币钱包?学习如何快速轻松地创建比特币钱包。了解不同的钱包类型及其各自的优缺点。比特币术语查看 →比特币术语阅读我们的常见问题解答快速找到常见问题的答案。查看 →阅读我们的常见问题解答快速找到常见问题的答案。我怎样购买比特币?了解如何在几分钟内获得您的第一比特币。查看 →我怎样购买比特币?了解如何在几分钟内获得您的第一比特币。如何出售比特币?了解如何安全地将比特币兑换成本地货币。查看 →如何出售比特币?了解如何安全地将比特币兑换成本地货币。如何保障我的加密资产安全?确保您的加密资产安全,请遵循这些简单的建议。查看 →如何保障我的加密资产安全?确保您的加密资产安全,请遵循这些简单的建议。你收件箱中的 Bitcoin.com每周的重要新闻提要,加上为经济自由提供支持的教育资源和产品及服务更新注册使用 Bitcoin.com 钱包,开始安全投资已生成超过个钱包安全买卖、交易和投资比特币及其他加密货币所需要的一切立即创建您自己的钱包

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.