区块链 matlab,matlab可以实现区块链吗?
用MATLAB實現區塊鏈:把區塊對象連成鏈
現在可以把區塊連成區塊鏈了,我們用一個新的類叫做BlockChain來模擬它。 首先規定該鏈中的第一個block可以直接產生,就是genesis
block,這就是上面Block的construtor中,輸入參數個數等于2是返回的對象.
classdef BlockChain < handle
properties
totalCount % 用來記錄區塊的個數
blockArray % 對象數組 用來盛放區塊鏈
end
methods
function obj = BlockChain()
obj.blockArray =[ Block(0,'Genesis Block')]; % 構造blockchain對象時產生第一個 genesis
block
obj.totalCount = 1 ;
obj.calculateGensisBlockHash(); % 計算genesis block的hash
end
function bc = getLatest(obj)
bc = obj.blockArray(end);
end
function calculateGensisBlockHash(obj)
gb = obj.blockArray(1);
Opt.Method = 'SHA-256';
Opt.Input = 'ascii';
str = strcat(num2str(gb.index),gb.data) % 計算方法是把所有的內容做strcat
gb.selfHash = DataHash( str , Opt); % 然后hash
end
function addBlock(obj,newBlock) % 當miner成功的'挖出'一個符合要求的block之后
if obj.validateNewBlock(newBlock) % 調用該函數
obj.blockArray(end+1) = newBlock; % 把這個block加到blockchain上去
end
end
function tf = validateNewBlock(obj,newBlock) % 驗證新添加的block是否符合要求
newHash = DataHash( strcat( newBlock.getCombined(), num2str(newBlock.nonce)
));
if(strcmp(newHash(1:2),'00') &&
strcmp(newBlock.selfHash,newHash))
tf= true;
else
tf = false;
end
end
end
end
在live editor中演示實例化這個BlockChain類,在它的constructor中,產生第一個genesis
block并且計算它的hash值
所謂的”鏈”,就是前一個block的selfHash的數據,保存在下一個block的previousHash屬性中.
這就是說,區塊2中包含著區塊0的信息,區塊3中包含著區塊2的信息,從而區塊3也包含著區塊0的信息
+----------------------------+ +-------------------------+
+----------------------+
| genesis block | | block 1 | | block 2 |
+----------------------------+ +-------------------------+
+----------------------+
| index = 0 | | index = 1 | | index = 2 |
| previousHash ='' | +-----+ previousHash='075c277..'| +--+
previousHash='00abcd'| +-- ....
| selfHash = '075c27741a35068+---+ | selfHash ='00abcd...' +---+ | selfHash
= '00efgh..'+--+
| 46368fa6e5b3477f85b31cee..'| | | | |
+----------------------------+ +-------------------------+
+-----------------
總結
以上是生活随笔為你收集整理的区块链 matlab,matlab可以实现区块链吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的exec函数
- 下一篇: 黑龙江对口学计算机上机,2009年黑龙江