java chain_blockchain-java: 区块链 Java 的简易实现版,自学了一段时间的区块链理论知识,自己尝试着写一个具有钱包雏形的区块链项目,开源出来,供像我一样想开发区块链又不知...

blockchain-java

区块链 Java 的简易实现版,自学了一段时间的区块链理论知识,自己尝试着写一个具有钱包雏形的区块链项目,开源出来,供像我一样想开发区块链又不知从何下手初学者参考,也希望大牛们能够给点指导。现在大部门区块链从业者都是从事 DApp 开发,做底层链开发的还是比较少,目前也没有很大必要,不过尝试写链可以更好的理解区块链底层的运行逻辑。本人在开发的过程中最大的体会是,在理论学习的时候觉得区块链知识并不复杂,理论自己都懂了,但是真要自己实现了就会发现有各种坑,最后才发现自己对某些细节理解还是一知半解。希望这个项目能对初学区块链者有所帮助,大家一起学习,一起成长。

v1.0.0

初步了完成的区块链的各个模块,包括账户,区块链,网络等模块实现

实现了账户创建,发送交易和挖矿功能

实现了网络功能,包括发送广播账户,广播区块,广播交易以及自动同步区块功能。

运行部署

项目默认部署4个节点,创建了4个配置文件 application-{env}.yml,

如果想要部署更多的节点,再创建更多的配置文件就 OK 了。

使用 idea 部署测试非常简单,按照下面的方法添加多个 springBoot 启动配置。

e29ae3396f0ab8b72b1d95bcc09c0c9f.png

然后分别启动 4 个节点就好了。启动之后节点之间自动连接成 P2P 网络,随后你就可以使用 postman 工具进行测试了,如果没有安装 postman 的话请自行安装,或者和我一样使用 chrome 浏览器的 postman 扩展。

Web 测试 API

API名称

请求方式

URL

生成钱包

POST

/account/new

查看钱包列表

GET

/account/list

启动挖矿

GET

/chain/mine

发送交易

POST

/chain/transactions/new

查看最后一个区块

GET

/block/view

添加节点

POST

/node/add

查看节点

GET

node/view

注意:凡是 POST 请求都是使用 RequestBody 的方式传参的, 不是用表单的 form-data 形式, 比如发送交易的参数形式如下:

{

"sender":"1LptJ6Zs47eVG5aUoekgTCKcxqFZcHP4jM",

"recipient":"13VjqfiRBNYSeTF2BXNZ4R17f3G3GbF93j",

"amount":"30",

"privateKey":"24f939c2bdc4a278e340bfa35c4695698d4d0fdce7316b7348557c58f9ada0c2",

"data": "This is a test transaction"

}

b01c48f8b1428debf69d2c852b23a52f.png

当然可以!下面是一个简单的Java程序示例,演示了如何实现基于DPoS共识算法的区块链搭建: ```java import java.util.ArrayList; import java.util.List; class Block { private int index; private long timestamp; private String previousHash; private String hash; private List<Transaction> transactions; public Block(int index, long timestamp, String previousHash, String hash, List<Transaction> transactions) { this.index = index; this.timestamp = timestamp; this.previousHash = previousHash; this.hash = hash; this.transactions = transactions; } // getters and setters @Override public String toString() { return "Block{" + "index=" + index + ", timestamp=" + timestamp + ", previousHash='" + previousHash + '\'' + ", hash='" + hash + '\'' + ", transactions=" + transactions + '}'; } } class Transaction { private String fromAddress; private String toAddress; private double amount; public Transaction(String fromAddress, String toAddress, double amount) { this.fromAddress = fromAddress; this.toAddress = toAddress; this.amount = amount; } // getters and setters @Override public String toString() { return "Transaction{" + "fromAddress='" + fromAddress + '\'' + ", toAddress='" + toAddress + '\'' + ", amount=" + amount + '}'; } } class Blockchain { private List<Block> chain; private List<Transaction> pendingTransactions; public Blockchain() { this.chain = new ArrayList<>(); this.pendingTransactions = new ArrayList<>(); // Genesis block createBlock("0"); } public void createBlock(String previousHash) { int index = chain.size(); long timestamp = System.currentTimeMillis(); String hash = calculateHash(index, timestamp, previousHash, pendingTransactions); Block block = new Block(index, timestamp, previousHash, hash, new ArrayList<>(pendingTransactions)); chain.add(block); pendingTransactions.clear(); } public void createTransaction(String fromAddress, String toAddress, double amount) { Transaction transaction = new Transaction(fromAddress, toAddress, amount); pendingTransactions.add(transaction); } private String calculateHash(int index, long timestamp, String previousHash, List<Transaction> transactions) { // 实现具体的哈希计算逻辑,例如使用SHA-256算法 // 在此省略实现细节,仅作示例 return "hash"; } // 更多的区块链验证和共识算法逻辑可以在这里实现 @Override public String toString() { return "Blockchain{" + "chain=" + chain + ", pendingTransactions=" + pendingTransactions + '}'; } } public class Main { public static void main(String[] args) { Blockchain blockchain = new Blockchain(); // 创建一些交易 blockchain.createTransaction("Alice", "Bob", 10.0); blockchain.createTransaction("Bob", "Charlie", 5.0); // 挖矿产生新的区块 blockchain.createBlock(blockchain.getChain().get(blockchain.getChain().size() - 1).getHash()); System.out.println(blockchain); } } ``` 这是一个简单的区块链实现示例,仅用于演示基本概念和数据结构。在实际的生产环境中,还需要考虑更多的安全性和性能优化方面的问题。希望这个示例可以帮助你入门区块链开发!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值