您当前的位置:首页 > 互联网百科 > 区块链

使用Java构建你自己的区块链

时间:2022-01-07 10:38:15  来源:  作者:顶顶架构师

正如我们所知,区块链设计是不可变的。在这里,我们将设计一个简单的区块链,它将帮助您理解散列如何使区块链不可变,只需几行JAVA代码。

注:这只是一个演示区块链,真正的区块链涉及很多其他东西,如共识机制、数字签名、Merkle树等。。此代码示例将有助于实现理想的目的。

区块链中的第一个区块是Genesis区块。genesis区块几乎总是硬编码到利用其区块链的应用程序的软件中。

对于随后生成的每个新块,我们将使用前一个块的哈希以及它自己的事务作为输入来确定它的块哈希。

Object[] contents ={Arrays.hashCode(transactions),previousHash};
  blockHash = Arrays.hashCode(contents);

散列函数是一种数学函数,它接受任意长度数值数据的输入,并将其转换为固定长度的数值数据。

不同的散列函数使用不同的算法生成散列值。

此外,哈希函数将始终为任何特定输入提供相同的输出。但是,如果您在输入中做了一点小的更改,那么产生的哈希值将与前一个完全不同。

记住散列不是加密。

在加密中,一旦加密了数据,就可以通过解密将其取回,而在散列中,则无法通过任何方法将输入取回。

您可能会想知道为什么需要像SHA256(安全哈希算法)这样的哈希算法?

最重要的原因是这些算法帮助我们避免冲突(不同输入的哈希值相似)。

现在,让我们通过代码来了解区块链如何使块的散列无法更改,从而使块一旦写入区块链,就无法更改。

我们将创建一个块类。每个块将有:

  • 交易清单(int)
  • 上一个块哈希(String[])
  • 散列(int)

对变量块类应用 getter setter 方法后,如下所示:

import java.util.Arrays;
public class Block 
{
    private int previousHash;
    private String[] transactions;
    
    private int blockHash;
    public Block(int previousHash, String[] transactions) {
        this.previousHash = previousHash;
        this.transactions = transactions;
        Object[] contents = {Arrays.hashCode(transactions),previousHash};
        this.blockHash = Arrays.hashCode(contents);
    }

    public int getPreviousHash() {
        return previousHash;
    }
    public String[] getTransactions() {
        return transactions;
    }
    public int getBlockHash() {
        return blockHash;
    }

    public void setPreviousHash(int previousHash) {
        this.previousHash = previousHash;
    }
    public void setTransactions(String[] transactions) {
        this.transactions = transactions;
        }

    public void setBlockHash(int blockHash) {
        this.blockHash = blockHash;
 }
}

现在让我们创建一个区块链。

我们将从创建Genesis块开始。由于Genesis块是链中的第一个块,我们将硬编码事务和以前的哈希值。

真正的区块链中的交易肯定是某种交易类别,将使用不同的数据结构。为了简单起见,我将它们写成字符串。

主类如下所示:

import java.util.ArrayList;
public class Blockchain {

    ArrayList<Block> blockchain = new ArrayList<>();
    public static void main(String[] args) {
        String[] genesisTransactions = {"Suraj sent Ruja 1542 Bitcoins","Ruja sent 10 Bitcoins to John"};
        Block genesisBlock = new Block(0,genesisTransactions);
        System.out.println("Genesis Block Hash:"+genesisBlock.getBlockHash());
        String[] block2Transactions = {"John sent 10 bitcoins to Suraj","Suraj sent 10 bitcoins to Alex"};
        Block block2= new Block(genesisBlock.getBlockHash(), block2Transactions);
        System.out.println("Block2 Hash:"+block2.getBlockHash());
       String[] block3Transactions = {"Alex sent 999 bitcoins to non"};
       Block block3 = new Block(block2.getBlockHash(), block3Transactions);
       System.out.println("Block3 Hash:"+block3.getBlockHash());
    }        
}

输出:

Genesis Block Hash:-1106827926
Block2 Hash:957910147
Block3 Hash:-716750945

您可以输出genesis block的HashCode并更改它,您将看到输出与以前的输出有很大不同,即使您更改事务字符串中单个字母的大小写。

将genesis block事务中“Suraj”的“S”更改为“S”后的输出:

Genesis Block Hash:1528835466
Block2 Hash:-701393757
Block3 Hash:1918912447

这就是块链的形成方式,每个新块散列都指向它之前的块散列。这种散列系统保证历史记录中的任何事务都不会被篡改,因为如果事务的任何单个部分发生更改,那么它所属的块的散列以及随后任何块的散列也会发生更改。

因此很容易捕获任何篡改,因为您只需比较散列即可。



Tags:区块链   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
正如我们所知,区块链的设计是不可变的。在这里,我们将设计一个简单的区块链,它将帮助您理解散列如何使区块链不可变,只需几行Java代码。注:这只是一个演示区块链,真正的区块链涉及...【详细内容】
2022-01-07  Tags: 区块链  点击:(0)  评论:(0)  加入收藏
什么是区块链?这是一个好问题!假如你是一位女生,在某个晚上,你男票跟你说了一句:“我爱你一生一世”。然后,你把这句话发给了你的闺蜜、爸妈、朋友圈、公众号、微信群等,你男票再也...【详细内容】
2022-01-07  Tags: 区块链  点击:(2)  评论:(0)  加入收藏
作为一个不断增长的行业,区块链对其专业人员有着巨大的需求。Upwork的报告显示,仅在过去连续三个季度,与区块链技术相关的工作岗位就增加了2000%。大公司和初创企业都希望雇佣...【详细内容】
2021-10-20  Tags: 区块链  点击:(34)  评论:(0)  加入收藏
区块链经济是基于区块链技术而产生的一种新经济现象。区块链是一个去中心化的分布式数据库,该数据库由一串使用密码学方法产生的数据区块有序连接而成,区块中包含有一定时间内...【详细内容】
2021-09-18  Tags: 区块链  点击:(29)  评论:(0)  加入收藏
我们来回顾一下,传统的合同签约步骤是这样的:执行传统合同需要人工验证,以检查条款和条件,并根据书面协议决定下一步。1、费时 - 检查合同条款,审核批准,再进行后续等步骤2、资源...【详细内容】
2021-07-14  Tags: 区块链  点击:(61)  评论:(0)  加入收藏
区块链技术带来了互联网的变革,将互联网从“信息互联网”带向“价值互联网”,我们也渐渐发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链处理的是“价...【详细内容】
2021-07-13  Tags: 区块链  点击:(63)  评论:(0)  加入收藏
图片来源@视觉中国文丨夏玩醇社交平台和资讯网站上,众多未知来源的图片引来人们的猜测,好奇者会花费大量时间在评论区争吵。这也许是平台和内容创作者乐于看到的情况。更多的...【详细内容】
2021-06-04  Tags: 区块链  点击:(63)  评论:(0)  加入收藏
我们日常通用货币是人民币 (CNY),美国通用货币是美元 (USD),俄罗斯通用货币是卢布 (RUB)。那么,区块链中的通用货币是什么呢? 是泰达币 (USDT)。乍一看,USDT 与 USD 很像,那它们...【详细内容】
2021-06-04  Tags: 区块链  点击:(134)  评论:(0)  加入收藏
欧科链讯:本文为读者了解区块链这项前沿技术提供基础支持。作者对区块链特征、优势、应用等层面进行讲解,言简意赅,通俗易懂。我相信你们最近应该听到过“区块链”一词,也许是在...【详细内容】
2021-05-18  Tags: 区块链  点击:(107)  评论:(0)  加入收藏
前几期我们提到了,关于区块链的基本概念、安全性等。本期从八个点为大家解读区块链的优势。 一、链条的准确性区块链网络上的交易由数以千计的计算机网络批准。这消除了几乎...【详细内容】
2021-05-14  Tags: 区块链  点击:(89)  评论:(0)  加入收藏
▌简易百科推荐
正如我们所知,区块链的设计是不可变的。在这里,我们将设计一个简单的区块链,它将帮助您理解散列如何使区块链不可变,只需几行Java代码。注:这只是一个演示区块链,真正的区块链涉及...【详细内容】
2022-01-07  顶顶架构师    Tags:区块链   点击:(0)  评论:(0)  加入收藏
什么是区块链?这是一个好问题!假如你是一位女生,在某个晚上,你男票跟你说了一句:“我爱你一生一世”。然后,你把这句话发给了你的闺蜜、爸妈、朋友圈、公众号、微信群等,你男票再也...【详细内容】
2022-01-07  3x6x9    Tags:区块链   点击:(2)  评论:(0)  加入收藏
作为一个不断增长的行业,区块链对其专业人员有着巨大的需求。Upwork的报告显示,仅在过去连续三个季度,与区块链技术相关的工作岗位就增加了2000%。大公司和初创企业都希望雇佣...【详细内容】
2021-10-20  知识小纸条  搜狐号  Tags:区块链   点击:(34)  评论:(0)  加入收藏
以太坊是目前第二大公链,它和比特币不一样,以太坊上的可以实现的功能更多,如果比特币是一个可以进行加减乘除的计算器,那么以太坊就是一台功能完备的计算机。以太坊系统的复杂度...【详细内容】
2021-10-18  Rayjun的区块链笔记    Tags:Gas 机制   点击:(22)  评论:(0)  加入收藏
区块链经济是基于区块链技术而产生的一种新经济现象。区块链是一个去中心化的分布式数据库,该数据库由一串使用密码学方法产生的数据区块有序连接而成,区块中包含有一定时间内...【详细内容】
2021-09-18  UTON在线    Tags:区块链经济   点击:(29)  评论:(0)  加入收藏
我们来回顾一下,传统的合同签约步骤是这样的:执行传统合同需要人工验证,以检查条款和条件,并根据书面协议决定下一步。1、费时 - 检查合同条款,审核批准,再进行后续等步骤2、资源...【详细内容】
2021-07-14  深圳都市微生活   企鹅号  Tags:智能合约   点击:(61)  评论:(0)  加入收藏
众所周知区块链是一个分布式账本,每条公链都是一个独立的账本,不同链之间是没有直接关系的,尤其是现在各个国家和地方,都在大力发展区块链技术,未来势必会是个区块链技术百花齐放...【详细内容】
2021-07-14  Life去中心化预言机协议    Tags:跨链   点击:(76)  评论:(0)  加入收藏
区块链技术带来了互联网的变革,将互联网从“信息互联网”带向“价值互联网”,我们也渐渐发现,最初被形象地称为“信息高速公路”的互联网处理的是“信息”,而区块链处理的是“价...【详细内容】
2021-07-13  MICA链盟    Tags:智能合约   点击:(63)  评论:(0)  加入收藏
图片来源@视觉中国文丨夏玩醇社交平台和资讯网站上,众多未知来源的图片引来人们的猜测,好奇者会花费大量时间在评论区争吵。这也许是平台和内容创作者乐于看到的情况。更多的...【详细内容】
2021-06-04  钛媒体APP  今日头条  Tags:区块链   点击:(63)  评论:(0)  加入收藏
我们日常通用货币是人民币 (CNY),美国通用货币是美元 (USD),俄罗斯通用货币是卢布 (RUB)。那么,区块链中的通用货币是什么呢? 是泰达币 (USDT)。乍一看,USDT 与 USD 很像,那它们...【详细内容】
2021-06-04  wei1guang  今日头条  Tags:USDT   点击:(134)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条