區(qū)塊鏈是不可變的,因?yàn)闉榻灰子?jì)算SHA-256哈希。系統(tǒng)詳情了解塊的內(nèi)容也會(huì)被散列,從而提供唯一的標(biāo)識(shí)符。
public class Block {
public long timeStamp;
private int index;
private List transactions = new ArrayList();
private String hash;
private String previousHash;
private String merkleRoot;
private String nonce = "0000";
// caches Transaction SHA256 hashes
public Map map = new HashMap();
請注意,注入的泛型類型是Tx類型。這允許事務(wù)數(shù)據(jù)發(fā)生變化。此外, previousHash 屬性將引用前一個(gè)塊的哈希。 merkleRoot 和 nonce 屬性將在稍后進(jìn)行描述。,t>,t>
塊散列
每個(gè)塊可以計(jì)算一個(gè)塊散列。這本質(zhì)上是連接在一起的所有塊屬性的散列,包括前一個(gè)塊的散列和由此計(jì)算出的SHA-256散列。
下面是塊中定義的方法。計(jì)算散列的java類。
public void computeHash() {
Gson parser = new Gson(); // probably should cache this instance
String serializedData = parser.toJson(transactions);
setHash(SHA256.generateHash(timeStamp + index + merkleRoot + serializedData + nonce + previousHash));
}
塊事務(wù)被序列化為JSON字符串,以便在散列之前將其附加到塊屬性中。
Chain 鏈
區(qū)塊鏈通過接受交易來管理區(qū)塊。當(dāng)達(dá)到預(yù)定閾值時(shí),創(chuàng)建塊。這是一個(gè)簡單的Chain鏈。java部分實(shí)現(xiàn):
public class SimpleBlockchain {
public static final int BLOCK_SIZE = 10;
public List> chain = new ArrayList>();
public SimpleBlockchain() {
// create genesis block
chain.add(newBlock());
}
chain屬性包含使用Tx類型鍵入的塊的列表。此外,在創(chuàng)建鏈時(shí),無參數(shù)構(gòu)造函數(shù)會(huì)創(chuàng)建一個(gè)初始的“ genesis ”塊。下面是 newBlock() 方法的源代碼。
public Block newBlock() {
int count = chain.size();
String previousHash = "root";
if (count > 0)
previousHash = blockChainHash();
Block block = new Block();
block.setTimeStamp(System.currentTimeMillis());
block.setIndex(count);
block.setPreviousHash(previousHash);
return block;
}
這個(gè)新的block方法將創(chuàng)建一個(gè)新的block實(shí)例,為適當(dāng)?shù)闹翟O(shè)定種子,并分配前一個(gè)block的hash(即鏈頭的hash)。然后它將返回塊。
在將塊添加到鏈之前,可以通過將新塊的上一個(gè)哈希與鏈的最后一個(gè)塊(頭)進(jìn)行比較來驗(yàn)證塊,以確保它們匹配。這是一個(gè)簡單的鎖鏈。java方法描述了這一點(diǎn)。
public void addAndValidateBlock(Block block) {
// compare previous block hash, add if valid
Block current = block;
for (int i = chain.size() - 1; i >= 0; i--) {
Block b = chain.get(i);
if (b.getHash().equals(current.getPreviousHash())) {
current = b;
} else {
throw new RuntimeException("Block Invalid");
}
}
this.chain.add(block);
}
整個(gè)區(qū)塊鏈通過鏈的循環(huán)進(jìn)行驗(yàn)證,以確保一個(gè)區(qū)塊的哈希仍然與前一個(gè)區(qū)塊的哈希匹配。
這是 SimpleBlockChain.java 的 validate() 方法實(shí)現(xiàn)。
public boolean validate() {
String previousHash = null;
for (Block block : chain) {
String currentHash = block.getHash();
if (!currentHash.equals(previousHash)) {
return false;
}
previousHash = currentHash;
}
return true;
}
審核編輯:符乾江
-
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105161 -
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66963
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】2.具身智能機(jī)器人的基礎(chǔ)模塊
《具身智能機(jī)器人系統(tǒng)》第10-13章閱讀心得之具身智能機(jī)器人計(jì)算挑戰(zhàn)
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】2.具身智能機(jī)器人大模型
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】1.初步理解具身智能
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】1.全書概覽與第一章學(xué)習(xí)
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】+數(shù)據(jù)在具身人工智能中的價(jià)值
【「具身智能機(jī)器人系統(tǒng)」閱讀體驗(yàn)】+初品的體驗(yàn)
《具身智能機(jī)器人系統(tǒng)》第1-6章閱讀心得之具身智能機(jī)器人系統(tǒng)背景知識(shí)與基礎(chǔ)模塊
鴻蒙機(jī)器人與鴻蒙開發(fā)板聯(lián)動(dòng)演示
ROS讓機(jī)器人開發(fā)更便捷,基于RK3568J+Debian系統(tǒng)發(fā)布!
Al大模型機(jī)器人
小米機(jī)器人入駐小米汽車工廠,已研發(fā)鐵大、鐵蛋等機(jī)器人
全球機(jī)器人開發(fā)領(lǐng)域采用NVIDIA 機(jī)器人開發(fā)和生產(chǎn)
其利天下技術(shù)·搭載無刷電機(jī)的掃地機(jī)器人的前景如何?
自主移動(dòng)機(jī)器人(AMR)功能和特點(diǎn)
![自主移動(dòng)<b class='flag-5'>機(jī)器人</b>(AMR)<b class='flag-5'>功能</b>和特點(diǎn)](https://file1.elecfans.com/web2/M00/C2/C1/wKgaomXe2sWAGkMsAAMmh7f3Jj8592.png)
評(píng)論