区块链原理入门(代码片段)

水田如雅 水田如雅     2023-02-09     611

关键词:

定义区块创建区块链

/**
 * \\* Created: liuhuichao
 * \\* Date: 2021/11/20
 * \\* Time: 5:26 下午
 * \\* Description:区块定义
 * \\
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Block implements Serializable 
    private static final long serialVersionUID = -7756067036594010159L;
    private Integer index;//区块索引号
    private String hash;//当前区块的hash值,区块唯一标识
    private Long timestamp;//生成区块的时间戳
    private List<Transaction> transactions;//区块上面记录的交易
    private Integer nonce;//工作量证明,计算正确哈希值的次数
    private String prevHash;//前一个区块的hash值


    @Test
    public void testNewBlock() 
        //区块链
        List<Block> blockChain = new LinkedList<>();
        //先生成个创世区块
        Block god = new Block(1, "11", System.currentTimeMillis(), new ArrayList<>(), 1, "1");
        //将创世区块加入区块链
        blockChain.add(god);
    

挖矿

 @Test
    public void testNewBlock() 
        //区块链-------
        List<Block> blockChain = new LinkedList<>();
        //先生成个创世区块
        Block god = new Block(1, "1", System.currentTimeMillis(), new ArrayList<>(), 1, "1");
        //将创世区块加入区块链
        blockChain.add(god);

        //挖矿过程模拟------
        //创建一些交易
        List<Transaction> transactionList = new ArrayList<>();
        Transaction t1 = new Transaction();
        Transaction t2 = new Transaction();
        //...
        transactionList.add(t1);
        transactionList.add(t2);

        //创建好关于我这次挖矿收益的系统给我的奖励交易
        Transaction rewardTrans = new Transaction();
        transactionList.add(rewardTrans);
        //获取当前区块链里面最后一个区块
        Block tailBlock = blockChain.get(blockChain.size() - 1);
        String newHashValue;
        int nonce = 2;
        while (true) 
            //计算区块的哈希值
            //hash = SHA256(最后一个区块的Hash+交易记录信息+随机数)
            nonce = 2;
            String token = tailBlock.getHash() + JSONObject.toJSONString(tailBlock.getTransactions()) + nonce;
            newHashValue = Hashing.sha256().newHasher().putString(token, Charsets.UTF_8).hash().toString();
            //校验哈希值
            if (checkHashStandarded(newHashValue)) 
                break;
            
            nonce++;
        
        //创建新区块
        Block b2 = new Block(2, newHashValue, System.currentTimeMillis(), transactionList, nonce, "1");
        blockChain.add(b2);
        System.out.println(blockChain);
    

    public boolean checkHashStandarded(String hash) 
        //这里是一些校验生成hash是不是符合要求的逻辑
        return true;
    

区块链技术:truffle开发入门(代码片段)

以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环... 查看详情

区块链入门到实战之区块链–工作量证明(代码片段)

目的:解决艰难的任务,获取记账能力。区块链中,每个人手上都有账本,每个人都可以记账,但怎么能让这些账本的内容保持一致,让大家都认这个账,就需要共识机制。人类社会中,通常的共识机制是,如果某个人能完成某... 查看详情

这破玩意就是区块链?(代码片段)

ethtron快速入门这破玩意就是区块链?<!--more-->web3.0、区块链、比特币、以太坊这些一定有听过,这篇带你快速入门。通过学习你可以掌握以太坊的运转,实现原理,及如何搭建自己的区块链节点。历史说到区块链,我们马上... 查看详情

区块链记账原理(代码片段)

区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。通常认为与智能合约相结合的区块链为区块链2.0,如以太坊是典型的区块链2.0很多人只了解过比特币,不知道区块链,比特币实际是一个使用了... 查看详情

区块链记账原理(代码片段)

区块链(1.0)是一个基于密码学安全的分布式账本,是一个方便验证,不可篡改的账本。通常认为与智能合约相结合的区块链为区块链2.0,如以太坊是典型的区块链2.0很多人只了解过比特币,不知道区块链,比特币实际是一个使用了... 查看详情

区块链快速入门——区块链密码学与安全相关技术(代码片段)

区块链快速入门(六)——区块链密码学与安全相关技术一、区块链密码安全技术简介区块链和分布式账本中大量使用了密码学和安全技术的最新成果,特别是身份认证和隐私保护相关技术。区块链使用了包括Hash算法与摘要、... 查看详情

区块链入门教程(转)(代码片段)

...接:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html 区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。下面... 查看详情

区块链基本原理(代码片段)

区块链基本原理区块链基本原理账本什么是账本实现账本的四大难点分布式账本解决难点1、难点2密码学解决难点3区块链数据结构解决难点4hash函数(SHA-256)hash函数的特性hash函数在形成区块链结构时的作用P2P网络简介共... 查看详情

markdown区块链入门相关资源推荐来自知(代码片段)

查看详情

ctf的区块链入门资料(代码片段)

...列表靶场SecurityInnovationBlockchainCTF合约逆向其他常用平台区块链安全公司相关编写课件的心路历程第一阶段查找半个小时,发现CTF区块链的资料很少,稍微有点慌。在找到登链社区查看几篇相关的文章后,发现跟Re比较... 查看详情

一文弄懂区块链技术原理(代码片段)

前言近期由于工作需要,于是对区块链相关技术展开了大量的研究和学习.本文将以开发者的角度,对整个区块链行业技术的发展做一次全面的总结和归纳.文章宗旨是为了帮助大家理解区块链技术出现的目的、能够解决什么问题还... 查看详情

区块链原理(结合实际例子较详细的讲述原理)(代码片段)

区块链原理去中心化交易扩大交易重复消费问题三方验证摆脱中心机构小明多个公证人竞争下的交易引入区块链节点分歧解决链冲突工作量证明N确认交易p2p网络用公私钥来保证交易安全结尾为了你有更好的阅读体验,可以点... 查看详情

区域链---基础---入门(代码片段)

转自:http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html区块链(blockchain)是眼下的大热门,新闻媒体大量报道,宣称它将创造未来。可是,简单易懂的入门文章却很少。区块链到底是什么,有何特别之处,很少有解释。下面,... 查看详情

区块链快速入门——bft(拜占庭容错)共识算法(代码片段)

区块链快速入门(四)——BFT(拜占庭容错)共识算法一、BFT简介1、拜占庭将军问题简介拜占庭将军问题(ByzantineGeneralsProblem)是LeslieLamport(2013年的图灵奖得主)用来为描述分布式系统一致性问题(DistributedConsensus)在论文中... 查看详情

区块链教程区块链背后的信息安全2des3des加密算法原理一(代码片段)

区块链教程区块链背后的信息安全2DES、3DES加密算法原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点... 查看详情

区块链入门到实战(38)之solidity–条件语句(代码片段)

Solidity支持条件语句,让程序可以根据条件执行不同的操作。条件语句包括:ifif...elseif...elseif语法if(条件表达式)被执行语句(如果条件为真)示例展示if语句用法。pragmasolidity^0.5.0;contractSolidityTestuintstoredData;constructor()publicstoredData=10... 查看详情

区块链快速入门——cft(非拜占庭容错)共识算法(代码片段)

区块链快速入门(三)——CFT(非拜占庭容错)共识算法一、CFT简介CFT(CrashFaultTolerance),即故障容错,是非拜占庭问题的容错技术。Paxos问题是指分布式的系统中存在故障(crashfault),但不存在恶意(corrupt)节点的场景(即可能消... 查看详情

[go]用go语言实现区块链工作原理(代码片段)

...理这里就不写了,只写一个简单demo的实现首先得有一个区块用来存储区块头和区块体typeBlockstructVersionint64PreBlockHash[]byteHash[]byte//区块体内是不存储HASH值的,这是网络中某个节点在计算时存储在息本地的,这里是为了方便实现最... 查看详情