Get the App
SLTechnology News&Howtos  ›  Internet Technology  › 

How to use java to realize simple Bitcoin function

Shulou Source: shulou.com Published: 2022-06-02 05:31:10 09月28日 Update

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!

Tags: Blocks transactions wallets balances addresses functions learning bookkeeping content sender recipient logo times rewards generation transfers problems that is workload Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Shulou Technology MariaDB vpn Docker MySQL