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挖矿赞同 31 条评论分享喜欢收藏申请转载文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎
比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了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挖矿赞同 31 条评论分享喜欢收藏申请转载文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎
详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本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挖矿挖矿赞同 394 条评论分享喜欢收藏申请
比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了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挖矿赞同 31 条评论分享喜欢收藏申请转载文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎
比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了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挖矿赞同 31 条评论分享喜欢收藏申请转载文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎
详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本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挖矿挖矿赞同 394 条评论分享喜欢收藏申请
干货:资深矿工教你如何挖矿 - 知乎首发于区块链应用技术切换模式写文章登录/注册干货:资深矿工教你如何挖矿头等仓专业服务价值投资者新闻内容:本文来源于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
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.
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
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.