In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-03-29 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >
Share
Shulou(Shulou.com)06/02 Report--
This article mainly explains "how to use java to achieve simple bitcoin function". The content in the article is simple and clear, and it is easy to learn and understand. Please follow the editor's train of thought to study and learn "how to use java to achieve simple Bitcoin function".
I. Block definition
/ * *
* Block structure
* @ author
, /
Public class Block {
/ * *
* Block index number
, /
Private int index
/ * *
* the hash value of the current block, which is uniquely identified.
, /
Private String hash
/ * *
* generate the timestamp of the block
, /
Private long timestamp
/ * *
* Collection of transactions for the current block
, /
Private List transactions
/ * *
* proof of workload, the number of times the correct hash value is calculated
, /
Private int nonce
/ * *
* hash value of the previous block
, /
Private String previousHash
Public Block () {
Super ()
}
Public Block (int index, long timestamp, List transactions, int nonce, String previousHash, String hash) {
Super ()
This.index = index
This.timestamp = timestamp
This.transactions = transactions
This.nonce = nonce
This.previousHash = previousHash
This.hash = hash
}
}
II. Definition of transaction
/ * *
* transaction
* @ author
, /
Public class Transaction {
/ * *
* unique identification of the deal
, /
Private String id
/ * *
* the wallet address of the sender of the transaction
, /
Private String sender
/ * *
* wallet address of the recipient of the transaction
, /
Private String recipient
/ * *
* transaction amount
, /
Private int amount
Public Transaction () {
Super ()
}
Public Transaction (String id, String sender, String recipient, int amount) {
Super ()
This.id = id
This.sender = sender
This.recipient = recipient
This.amount = amount
}
}
III. Mining methods
/ * *
* Mining
* @ param blockchain entire block chain
* @ param txs requires bookkeeping and transaction records
* @ param address miner's wallet address
* @ return
, /
Private static void mineBlock (List blockchain, List txs, String address) {
/ / join the transaction rewarded by the system. Mining rewards 10 bitcoins by default.
Transaction sysTx = new Transaction (CryptoUtil.UUID (), ", address, 10)
Txs.add (sysTx)
/ / get the last block in the current block chain
Block latestBlock = blockchain.get (blockchain.size ()-1)
/ / Random number
Int nonce = 1
String hash = ""
While (true) {
Hash = CryptoUtil.SHA256 (latestBlock.getHash () + JSON.toJSONString (txs) + nonce)
If (hash.startsWith ("0000000000")) {
System.out.println ("= calculation result is correct, the number of calculations is:" + nonce+ ", hash:" + hash)
Break
}
Nonce++
System.out.println ("calculation error, hash:" + hash)
}
/ / solve the problem, you can construct a new block and add it to the block chain
Block newBlock = newBlock (latestBlock.getIndex () + 1, System.currentTimeMillis (), txs, nonce, latestBlock.getHash (), hash)
Blockchain.add (newBlock)
System.out.println ("Block chain after mining:" + JSON.toJSONString (blockchain))
}
IV. Balance calculation
/ * *
* query the balance
* @ param blockchain
* @ param address
* @ return
, /
Public static int getWalletBalance (List blockchain, String address) {
Int balance = 0
For (Block block: blockchain) {
List transactions = block.getTransactions ()
For (Transaction transaction: transactions) {
If (address.equals (transaction.getRecipient () {
Balance + = transaction.getAmount ()
}
If (address.equals (transaction.getSender () {
Balance-= transaction.getAmount ()
}
}
}
Return balance
Fifth, operating examples
Public static void main (String [] args) {
/ / create an empty blockchain
List blockchain = new ArrayList ()
/ / generate the Genesis Block
Block block = new Block (1, System.currentTimeMillis (), new ArrayList (), 1, "1", "1")
/ / add the Genesis block to the block chain
Blockchain.add (block)
System.out.println (JSON.toJSONString (blockchain))
/ / sender wallet address
String sender = "sender_wallet"
/ / recipient wallet address
String recipient = "recipient_wallet"
/ / create an empty transaction collection
List txs = new ArrayList ()
/ / Mining
MineBlock (blockchain, txs, sender)
The balance of System.out.println (sender + "wallet is:" + getWalletBalance (blockchain, sender))
/ / create an empty transaction collection
List txs1 = new ArrayList ()
/ / for transactions that have occurred but have not been recorded, the sender transfers 3 bitcoins to the receiver
Transaction tx1 = new Transaction (CryptoUtil.UUID (), sender, recipient, 3)
/ / for transactions that have occurred but not accounted for, the sender transfers 1 bitcoin to the receiver
Transaction tx2 = new Transaction (CryptoUtil.UUID (), sender, recipient, 1)
Txs1.add (tx1)
Txs1.add (tx2)
/ / Mining
MineBlock (blockchain, txs1, sender)
The balance of System.out.println (sender + "wallet is:" + getWalletBalance (blockchain, sender))
The balance of System.out.println (recipient + "wallet is:" + getWalletBalance (blockchain, recipient))
}
Thank you for reading, the above is "how to use java to achieve simple bitcoin function" content, after the study of this article, I believe you have a deeper understanding of how to use java to achieve simple bitcoin function, and the specific use needs to be verified in practice. Here is, the editor will push for you more related knowledge points of the article, welcome to follow!
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.