我正在写一个临时的小私人“区块链”,用于说明目的,用作教学工具。我已经解决了所有的核心功能,但我正在考虑区块链的一些更奇特的方面,并发现自己想知道Java中的多头。我在应用程序中内置的“矿工”方法使用 ++运算符递增一个 long 类型的随机数值,直到满足条件。我的问题是,如果我想避免(或至少大大延长)耗尽整数随机数空间(2147483647)的机会,如果我初始化起始随机数值,我将传递给Nonce = 0L的miner方法;我可以使用 ++运算符递增它并利用完整的长文本范围吗?
我的理解是,比特币在交易中使用了特殊的输入值,并且/或者一些矿工会稍微改变“ExtraNonce”的时间戳,但由于这只是为了说明目的,我不想在应用程序中包含类似的东西。
如果有人出于任何原因想看到它们,我可以提供代码片段,任何想法将不胜感激!
代码如下:
(请不要在我可疑的if/else控制逻辑上嘲笑我,这不是一个合法的生产应用程序,我仍然是java的新手)
这是来自调用矿工方法的启动器类的代码:
} else if (cliInput.contentEquals("mine")) {
Scanner howMany = new Scanner(System.in);
System.out.println("\n");
System.out.println("Enter number of blocks to mine: \n");
int howManyBlocks = howMany.nextInt();
int numBlocksMined = 0;
while (howManyBlocks >= numBlocksMined) {
MainChain mc = new MainChain();
long indexValue = (HashArray.hashArray.size() / 8);
long timeStamp = mc.getUnixTimestamp();
String data = helpers.SHA256.generateHash(pubKey + addressKey);
String previousHash = mc.getPreviousBlockHash();
ChainBuilder cb = new ChainBuilder();
cb.miner(indexValue, timeStamp, data, 0, previousHash, 5);
numBlocksMined++;
}
以下是矿工方法的核心:
public void miner(long index, long currentTimeMillis, String data, long Nonce, String previousBlockHash, int difficulty) throws InterruptedException {
this.index = index;
this.currentTimeMillis = currentTimeMillis;
this.pszTimeStamp = pszTimeStamp;
this.Nonce = Nonce;
this.previousBlockHash = previousBlockHash;
this.difficulty = difficulty;
this.data = data;
boolean iterator = true;
我想知道的是,如果我将0L而不是0传递给矿工方法,我是否可以访问整个范围?
郎朗坤
心有法竹
相关分类