主页 > imtoken官网电话 > 使用 Java 代码创建您的第一个区块链程序

使用 Java 代码创建您的第一个区块链程序

imtoken官网电话 2023-01-17 08:56:03

我们都看到了比特币和其他加密货币的规模。 虽然这种在线货币的波动性是出了名的,但它背后的技术有可能从内到外颠覆每个行业。 因为区块链有无限的应用范围,它每天都以新的方式出现。

在本文中,我们将探讨区块链背后的架构以及分布式账本的工作原理。 一旦亲眼所见,您就会明白为什么这么多开发人员将区块链视为新常态。 我们还将深入了解如何创建您自己的(基本)区块链序列和使用工作量证明(挖掘)系统的简短教程。

比特币标识图片_比特币比特币的行情_比特币怎么比特币钱包

了解区块链

首先,在我们自己尝试之前,我们都需要就什么是区块链及其工作原理达成一致。 块具有标题信息,以及一组或块“块”数据。 这些数字通常是加密货币世界中的交易,但可以进行调整。 然后链从创世块开始,并根据块中存储的事务或数据集的数量创建新块。

一旦达到该阈值,将创建一个新块。 这个新的链接到前一个,这是术语区块链的来源。 区块链也是不可变的。 这是因为每个交易或数据集都涉及 SHA-256 哈希。 块中的内容也被散列。 这意味着每个块都有一个唯一的标识符,链接块的哈希值也存储在图中并进行哈希处理。

因为区块链是不可变的,所以它们非常安全。 基本上不可能惹到一个。 试图伪造交易数据或财产将具有挑战性。 更重要的是,随着链的增长,它变得更加安全。 破坏这个系统的技术还不存在,这是个好消息。

区块链分为三种类型:

贸易

接下来说一下区块链内部的交易。 区块链技术是分布式的。 因为它们是仅附加的,所以很容易在网络中的节点之间复制区块链。 虽然节点通常进行点对点通信(如比特币),但它们也可以通过基于 HTTP 的 API 进行去中心化。

交易可以是任何东西。 它可以有一个执行代码或只是存储信息。 随着新智能合约的推出,您可以看到这项技术的实际应用。 本质上,这些智能合约是促进和验证数字合约的计算机协议。 它们很可能成为制造业和银行业等行业的主流。

让我们以比特币为例。 有了比特币,就会有一笔交易,将一定数量的钱从所有者的账户转移到另一个账户。 此交易有一个公钥和帐户 ID 以确保其安全。 这些交易被添加到网络中并汇集在一起​​。 尽管它们在共享网络中,但它们本身并不在块或链中。

这是怎么回事? 说到底就是共识机制。 您可能已经知道比特币使用的一种称为挖矿的机制。 共识机制层出不穷,要一一列举可能需要很长时间。 你只需要知道它们是收集交易、构建区块并将这些区块添加到链中以进行验证的算法或模式。

开始

如上所述,区块链是一个链或块列表。 每个块都有自己的数字签名以及前一个块的数字签名。 有些还可能包含交易信息等数据。 数字签名称为散列。 每个块自己的哈希值是根据前一个块计算的。 一次更改将影响此后的所有哈希。 通过计算和比较,我们可以看到区块链是否有效。

由于数据的任何变化都会导致链断裂,让我们首先创建一个类块,它将构成 Buffic 链的基础。

public class Block {
    public String hash;
    Public String previousHash;
    Private String data;

比特币比特币的行情_比特币怎么比特币钱包_比特币标识图片

Private long timeStamp; //Block Constructor. Public Block(String data,String previousHash ) { this.data = data; this.previousHash = previousHash; this.timeStamp = new Date().getTime(); }

上面的代码以字符串哈希开头,这是我们制作数字签名的地方。 如您所见,previousHash 将保存最后一个块的哈希值,而字符串数据将保存整个块数据。 有了基础,我们就可以生成数字签名了。 这意味着您必须选择一种加密算法。 对于这个例子,我们将使用 SHA256。为了得到这个结果,我们将导入

java.security.MessageDigest。

import java.security.MessageDigest;
public class StringUtil {
    public static String applySha256(String input){       
        try {
            MessageDigest digest = MessageDigest.getInstance(“SHA-256”);           

比特币怎么比特币钱包_比特币标识图片_比特币比特币的行情

byte[] hash = digest.digest(input.getBytes(“UTF-8”)); StringBuffer hexString = new StringBuffer(); // This will contain hash as hexidecimal for (int i = 0; i < hash.length; i++) { String hex = Integer.toHexString(0xff & hash[i]); if(hex.length() == 1) hexString.append(‘0’); hexString.append(hex); } return hexString.toString(); } catch(Exception e) { throw new RuntimeException(e); } } }

这将创建一个我们稍后将使用的 StringUtil 实用程序类。 这将采用一个字符串并应用 SHA256 算法以返回生成的签名。 使用新的帮助程序,我们可以计算块类中的哈希值。 为了计算哈希值,我们需要使用块的所有部分,我们不想被弄乱。

public String calculateHash() {
    String calculatedhash = StringUtil.applySha256(
            previousHash +
            Long.toString(timeStamp) +
            data
            );
    return calculatedhash;

比特币怎么比特币钱包_比特币标识图片_比特币比特币的行情

} public Block(String data,String previousHash ) { this.data = data; this.previousHash = previousHash; this.timeStamp = new Date().getTime(); this.hash = calculateHash(); / }

Perfect 现在是测试它的时候了。 我们需要创建一些块并在屏幕上显示哈希值。 这样比特币标识图片,我们就知道一切正常。 由于 genesis(first) 块中没有前一个块,因此我们将输入“0”作为前一个哈希值。

public class Test {
    public static void main(String[] args) {
       
        Block genesisBlock = new Block(“Genesis block”, “0”);
        System.out.println(“Hash for block 1 : ” + genesisBlock.hash);
       
        Block secondBlock = new Block(“Second block”,genesisBlock.hash);
        System.out.println(“Hash for block 2 : ” + secondBlock.hash);
       
        Block thirdBlock = new Block(“Third block”,secondBlock.hash);
        System.out.println(“Hash for block 3 : ” + thirdBlock.hash);

比特币标识图片_比特币怎么比特币钱包_比特币比特币的行情

} }

您的输出应该包含三个块,每个块都有自己的数字签名。 根据您独特的时间戳,您的数字签名将具有不同的值,但您正在取得进展。 现在,是时候将块存储在 ArrayList 中了。 同时,我们将输入gson,将其当成Json。

import java.util.ArrayList;
import com.google.gson.GsonBuilder;
public class Test {
   
    public static ArrayList blockchain = new ArrayList();
    public static void main(String[] args) {   
        blockchain.add(new Block(“Genesis block”, “0”));       
        blockchain.add(new Block(“Second    block”,blockchain.get(blockchain.size()-1).hash));
        blockchain.add(new Block(“Third  block”,blockchain.get(blockchain.size()-1).hash));
       
        String blockchainJson = new GsonBuilder().setPrettyPrinting().create().toJson(blockchain);       
        System.out.println(blockchainJson);
    }
}

现在我们正在做更多的过程。 您的输出更接近于区块链应该看起来的样子。 最后,我们将检查我们的区块链的有效性。 我们将在我们的测试类中创建一个 ischainvalid() 布尔方法。 这将遍历我们到目前为止创建的所有块,并将比较哈希值以查看它是否等于计算的哈希值,等等。

比特币比特币的行情_比特币怎么比特币钱包_比特币标识图片

public static Boolean isChainValid() {
    Block currentBlock;
    Block previousBlock;
   
    for(int i=1; i < blockchain.size(); i++) {
        currentBlock = blockchain.get(i);
        previousBlock = blockchain.get(i-1);
        if(!currentBlock.hash.equals(currentBlock.calculateHash()) ){
            System.out.println(“Current Hashes not equal”);           
            return false;
        }
        if(!previousBlock.hash.equals(currentBlock.previousHash) ) {
            System.out.println(“Previous Hashes not equal”);
            return false;
        }
    }
    return true;
}

使用此代码,如果块有任何更改,那么您将返回错误。 如果你得到一个诚实的答案,你就成功了。 您将所有存储的数据块与唯一的数字签名链接在一起。 您已准备好开始挖掘。

最后的想法

因为区块链是去中心化的比特币标识图片,所以没有单一的权威来为接受的交易设置规则。 区块链涉及一定程度的信任,因为这些交易存储在开放网络上。 尽管围绕这项技术存在混淆,但正如您在上面看到的那样,它并不像许多人想象的那么复杂。

随着越来越多的开发人员尝试解决他们自己的挖矿问题,我们看到了更多可以帮助他们的工具。 Loggly 和 Microsoft Azure 等软件旨在使区块链更易于访问。 开发人员探索区块链世界的原因有很多。 首先,从上面可以看出,它是比较容易学的,而且在不久的将来也会成为热门的职业。

虽然区块链不是云端的神奇数据库,但它是复杂技术交易的现代解决方案。 毫无疑问,这项技术将继续存在。 只有时间才能证明它在未来将如何继续应用。