挖矿人们如今可以将新的交易添加到待处理交易的列表中。但无论若何,我们须要将他们清理掉落并移入实际的区块中。为此,我们来创建一个 minePendingTransactions()办法。这个办法不仅会发掘所有待交易的新区块,并且还会向采矿者发送嘉奖。
- minePendingTransactions(miningRewardAddress) {
- // 用所有待交易来创建新的区块并且开挖..
- let block = new Block(Date.now(), this.pendingTransactions);
- block.mineBlock(this.difficulty);
- // 将新挖的看矿参加到链上
- this.chain.push(block);
- // 重置待处理交易列表并且发送嘉奖
- this.pendingTransactions = [ new Transaction(null, miningRewardAddress, this.miningReward) ];
- }
有一点须要留意的是,在这个栗子中,我们将所有待处理交易一并添加到一个区块中。但实际上,因为区块的大年夜小是有限制的,所以这是行不通的。在比特币里,一个区块的大年夜小大年夜概是 2MB。如不雅有更多的交易可以或许挤进一个区块,那么矿工可以选择哪些交易杀青哪些交易不达成就平日情况下费用更高的交易轻易获胜)。地址的余额在测试我们的代码前让我们再做一件事!如不雅可以或许检查我们区块链上地址的余额将会更好。
- getBalanceOfAddress(address){
- let balance = 0;
- // you start at zero!
- // 遍历每个区块以及每个区块内的交易
- for(const block of this.chain){
- for(const trans of block.transactions){
- // 如不雅地址是提议方 -> 削减余额
- if(trans.fromAddress === address){ balance -= trans.amount; }
- // 如不雅地址是接收方 -> 增长余额
- if(trans.toAddress === address){ balance += trans.amount; }
- }
- }
- return balance;
- }
测试好吧,我们已经完成并可以正常工作。为此,我们创建了一些交易:
- let savjeeCoin = new Blockchain();
- console.log('Creating some transactions...');
- savjeeCoin.createTransaction(new Transaction('address1', 'address2', 100));
- savjeeCoin.createTransaction(new Transaction('address2', 'address1', 50));
这些交易今朝都处于等待状况,为了让他们获得证实,我们必须开端挖矿:
- console.log('Starting the miner...');
- savjeeCoin.minePendingTransactions('xaviers-address');
当我们开端挖矿,我们也会传递一个我们想要获得挖矿嘉奖的地址。在这种情况下,我的地址是 xaviers-address(异常复杂!)。之后,让我们检查一下 xaviers-address 的┞匪户余额:
- console.log('Balance of Xaviers address is'
推荐阅读
沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! 昨天数字泉币又一次全线暴跌,比特币的价格一度跌破了8000美元大年夜关。 据说比来币圈的社群氛围也都冷的出>>>详细阅读
本文标题:连编程语言都不懂?看完这篇你也会写区块链
地址:http://www.17bianji.com/lsqh/41009.html
1/2 1