天天看點

從零開始建立自己的區塊鍊應用(JAVA版) 歡迎使用區塊鍊成語接龍。

??璇誨?矽薄

??????璇誨?矽薄锛?涓昏???甯??????沖?浠?浜??哄???懼?????椤圭???舵??甯?锛?寮???宸ョ?甯?锛?椤圭??璁捐?℃??浜у??璁捐?″???瑕?姹???璇昏???峰?涓?瀹??????哄???鋸???虹??ヨ????姒?蹇靛??浠ュ???稿?崇???????ヨ????

濡???浣?????瑕?瀵瑰?哄???懼??ㄥ??涓?涓??存繁?寸?磋???浜?瑙o???杩???????渚?瀛??存??頒?瑙e?哄???炬????涔???浜?锛?澶ф?????涔?寮????烘?ョ??锛???涔?浣跨????d??ラ??涓?浜??哄???劇?稿?崇?ヨ???沖????

濡???浣???涓?涓??充?浜?杩??歸?㈠伐浣???浜猴?灏ゅ?舵??浠?浜?寮??????舵????????浜哄??锛??d???瑕????????ヨ??灏辯?稿???澶?浜?锛???娉?涓?涓???涓撅?澶ф?涓?涓?楂?绾х?缁?寮???宸ョ?甯???涓?绾т互涓????舵??甯?姘村鈎锛?????瑕?????

??瑷?

寰?澶??扮??姒?蹇碉?浜轟滑?ㄥ???ヨЕ???跺??锛?浼?璁╀漢???伴??甯稿?版??锛?瀛??濂藉?娆¢?界???绯?娑?锛?骞朵?浠?浠???????锛?寰?澶??版?歸?芥??濡?姝ゃ??瀵逛?姣?杈??劇??瑙g??姒?蹇碉??ㄤ?涔???娉??誨?????楂????????涓??磋?や負锛?灏辨???句?涓?渚?瀛?锛???????涓?涓?Demo锛?涓?涓????句?锛?for涓?涓?example?沖????????

??杩?涓?娈墊?堕?達?AI浜哄伐?鴻?芥?瑰?存???撅??哄???炬??????杩??㈣蛋?ワ?瀵規?闆??璐у???宕?璧鋒???版?闆?????浠?锛?浼拌?″??崇?ラ???惰?????????????哄???炬?????風??涓?涓?涓?瑗褲??浣???瀹??ㄦ?????哄???懼苟????浜?锛??ㄥ??璺典腑瀛???逛負涓?绛???

????娆㈡??绋?搴?褰???璇?姝??ュ??锛?????褰??惰???杩???浠g???ュ???闆苟杩?琛?涓?涓?渚?瀛?锛??ョ??瑙e苟瀛??杩??ㄦ??????杩???锛?灏遍??杩???AVA璇?瑷?瀹??闆????寤轟?涓??哄???炬?ユ?㈣?ㄥ?瑰?哄???劇????瑙c??

????锛???浠?瑕??ㄥ?哄???炬?ュ???拌?涔?涓?涓?渚?瀛?锛???瀛??????哄???炬??璇??ラ??????ㄦ?烽??杩?杩?涓?渚?瀛?锛???浠ヤ??????ラ??????涓??ㄦ?風????璇?锛?瑙?????????娓告??涓??鳳??????涓??ㄦ?風????璇???????涓?涓?瀛?锛?浣?涓哄?????涓???璇???绗?涓?涓?瀛???

????浣?涓轟?涓?搴????杩?涓?寰?绠?????锛???棰???锛???浠?瑕??ㄥ?哄???劇?????????稿?蟲????瀹??闆????

OK锛?let??s go????

??澶?宸ヤ?

杩?涓??跺???跺????寰??沖ぇ??涓?澹幫????哄???鋸???跺??涓?????涓?绉???绾???????锛??????轟???涓?绉????崇??澶?绉???????缁?????

??瑕?????????????甯?寮?瀛??????甯?寮?璁$??锛?P2P?版????姝ワ???瀵?瑙e??锛?瀹??ㄤ?杈?锛?涓?浜?璇?瑷?锛?涓?浜?寮???宸ュ?楓??????杩???涓?浜??闆????姒?蹇??? ??甯?寮????癸?宸ヤ???璇???锛??辮??绠?娉???????绛?绛?

?轟???涓?绉????沖???澶у?堕?借?存?????諱腑蹇?????锛???瑙?寰?灏辨????????????????????????锛?????璇?棰?锛?涓?灞?寮?浜???浣?????浜?瀹?涓???涓?涓???娆㈡?涓葷??浜猴???浠ュ?哄???劇?????諱腑蹇?????瀵規???稿???棰?澶с??????all men are created equal????

???????㈡????扮??涓?浜?渚?瀛?锛??ユ???缃?涓?锛???浜???Python????锛???浜???Java????锛?C????锛???????AVA?翠負???ㄥ????璇誨??锛??跺??????璁や負JAVA璇?瑷??村??璇?姝?浜?锛?锛?灏辨??浠?浠??規??浜?JAVA??锛???浠ヨ?姹?璇昏??瀵矽??姝??????涓???锛???瀵?AVA??甯鎬?瑙o??借?誨???烘????璇?娉?妗??跺???昏?锛?骞朵???涓鴻?涓?DEMO???規???э???瑕?瀵圭?缁?妗??跺??HTTP璇鋒????烘????浜?瑙c??

??浠??ラ???哄???炬???版???????劇??瀛??ㄦ?瑰???缁???锛?????澶?涓??版???哄?????ч?劇??缁?缁???璁闆???????涓?????????搴????劇???锛?璁闆???浠ユ??浜ゆ??????浠舵??浠諱?浣??寵????版??锛????跺??浠?????杩???甯??鹼?hashes锛??炬?ヨ搗?ョ??????浠ワ??ㄩ??璇繪????涔???锛?涓?瀹?瑕???璇誨??绡??充??哄???劇????绔?锛?浜?瑙i???㈠??锛??撅??版??锛?宸ヤ???璇???绛?绛?姒?蹇碉???濂戒?浜?瑙d?浜??稿?蟲????姣?濡?Hash锛???甯?寮?瀛??ㄧ??绛???姒?蹇點??濡???浣?杩?涓???寰?浜?瑙h?浜?锛?璇鋒?懼害濞???

濡????ㄤ?瑙h?浜?姒?蹇電??杩?绋?涓?锛?涓?涓?灏?蹇??ヨЕ?頒?姣??瑰?锛?璇蜂?瀹?瑕????斤?姣??瑰??????哄???炬??????涓?涓?浜у??瀹??般??濡???杩??ヨЕ?闆?跺??涓?浜?璇稿?浠ュお缃?绛?绛?????璇?锛??d???瑕??ラ??锛?杩?浜??芥???哄???炬????涓?瀹??扮??涓?浜?妗??跺??浜у????
           

??澧???澶?

??璁轟??ヨ?達???浠ョ?ㄤ換浣?涓?绉?璇?瑷??ュ??寤轟換浣?涓?绉???????渚?瀛?锛??????哄???劇??渚?瀛?锛???浠?杩??????ㄤ?JAVA锛???浠ヨ??ㄨ??宸辯???佃??涓?锛???澶?JAVA???稿?沖?????澧???

纭?淇?浣????佃??涓?宸茬?瀹?瑁?浜?杈??扮??????JDK锛?Tomcat????涓?绉?浣?????????濂借?芥?村??Tomcat??JAVA IDE锛???渚??ㄧ????Eclipse??Tomcat?ㄦ??浠?杩?涓?渚?瀛?涓??達???涓?涓?WEB宸ュ?鳳???涓烘??浠???椤圭??锛???瑕??轟?WEB HTTP ??甯???杩?琛???

濡?浣?瀹?瑁?Java????绉?宸ュ?鳳?????濡?浣???clipse??寤?ynamic web椤圭??骞跺??甯???omcat绛?绛?姝ラ?わ??㈢?朵?宸茬?濡?姝ょ????JAVA浜?锛?杩???灏變???澶?璁層??

寮?濮???寤哄?哄????

?哄????绉版?版????Block绫? ?哄???句腑姣?涓??哄??????浠ヤ??烘????瀹癸?绱㈠?锛?index锛?锛?Unix?堕?存?籌?timestamp锛?锛??版????(data)锛?????浜ゆ??锛???瀛?锛??蟲??锛?濂??辯??浠諱???????????瀹癸?锛?璇?????宸ヤ???璇???锛?proof绋???瑙i??锛?浠ュ????涓?涓??哄????Hash?鹼?Hash ?ㄦ?ラ?炬?ユ?版????锛????剁‘淇??版????涓?琚???娉?淇??廣??

浠ヤ???涓?涓??哄????缁???锛?

public class Block {

int iIndex;              //绱㈠?
String sProof;           //宸ヤ???璇???锛??ㄨ?涓?渚?瀛???????跺??灏辨??涓?涓?缁?杩?楠?璇???姝g‘????璇?
String sPreviousHash;    //??涓?涓??哄????Hash??Timestamp tsCreateTime;  //?哄????寤烘?堕?存??

/*?版????
 * 
 * ?ㄦ?鋒???ヤ?涓?涓???璇?锛?浼?寰??扮郴缁?10???辯??濂??憋????朵?璧㈠??????涓??ㄦ?風??2???? * ?版???哄???堕??瑕?璁闆???宸辯???ㄦ?峰??????绛??轟?涓?涓???璇????ㄦ?峰??
 * 
 * */
String sSender;           //??绛??轟?涓?涓???璇????ㄦ?峰??
String sRecipient;        //??绛??哄???杩?涓???璇????ㄦ?峰??
final int iMoneyAward=10; //绯葷?濂??憋??伴??哄??
final int iMoneyWin=2;    //璧㈠??濂??憋??伴??哄??


public Block(){
	
}
           

}

?哄???懼????lockchain绫?

import java.util.*;

import blockchain.Block;

public class BlockChain {

//?ㄦ?ュ???ㄥ?哄??

private List lBlockchain=new ArrayList<>[];

public BlockChain(){
	
}


//??寤烘?闆??
public Block NewBlock(){
	Block bRet=null;
	
	//?ㄨ?????寤轟?涓??闆??
	
	return bRet;
}

//Hash 涓?涓???
public String Hash(Block block){
	String sHash=null;
	
	//?ㄨ???Hash 涓?涓???
	
	return sHash;
}

//?朵??規?
//....
           

}

Blockchain绫葷?ㄦ?ョ?$???炬?★?瀹??藉???ㄥ???存?伴?炬?版??锛????ユ?闆??绛?绛?锛?涓??㈡??浠??ヨ?涓?姝ュ?????瀹??????㈢??涓?浜??規?

??寤烘?闆??????涓???

褰?涓?涓??ㄦ?鋒???ф??璇??ラ???瑙???锛?瀵逛?涓?涓?涓???璇?锛?骞朵?绯葷?楠?璇?杩???璇?姝g‘锛?宸ヤ???琚?璇???锛???杩?涓??跺????浠?灏卞??浠ュ??寤轟?涓??闆??锛?骞朵????伴?鵑??????

涓???伐浣???璇???纭?璁わ?骞朵?涓?涓?涓???hash ??????锛?灏卞??浠ョ????璋??ㄥ?芥?闆??寤轟?涓??闆??浜???

??寤烘?闆???規?濡?涓?锛?

//??寤烘?闆??
public Block NewBlock(int i,String proof,String hash,Timestamp c,String sender,String recipient){
	Block bRet=null;
	
	//?ㄨ?????寤轟?涓??闆??
	bRet = new Block(i,proof,hash,c,sender,recipient);
	
	return bRet;
}
           

杩???锛???浠???瑕???涓?涓???涓?????姒?蹇碉???涓??????哄???劇??绗?涓?涓??哄??锛?瀹???娌℃?????哄???????昏?涓????ㄧ??涓?涓??ㄦ?風??涓?娆″???ㄧ郴缁????跺??锛?????瑕???寤哄??涓???锛????㈢???芥????杩???姝ヨ?峰?????涓???绱㈠???0锛????烽??瑕?缁?瀹???涓?涓?涓?宸ヤ???璇???锛???浠?杩???灏辨????濮???璇???娴烽??澶╃┖??锛???涓烘病?????㈢????锛???浠?ash=????锛????剁?涓?涓??哄??????寤烘?堕?淬???規?濡?涓?锛?

//??濮???????寤猴???涓?????涓?涓???锛?蹇?椤繪???哄????淇℃??
//?昏?涓??ヨ?達??????ㄥ?哄???句駭????绗?涓?涓??ㄦ?風??涓?娆″???ㄧ???跺??锛???浼???瑕???寤哄??涓???
public Block CreateFirstBlock(){
	try{
		Timestamp t=new Timestamp((new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("2018-01-01 01:01:01").getTime());
		return NewBlock(0,"娴烽??澶╃┖","",t,"","");
	}catch(Exception e){
		return null;
	}
}
           

杩???椤轟究璐翠?????????Hash瀛?绗?覆???規?锛?

//Hash 涓?涓???

public static String Hash(Block block){

String sHash=null;

//?ㄨ???Hash 涓?涓???
	String s=block.sPreviousHash+block.sProof+block.sRecipient+block.sSender+block.tsCreateTime.toString();
	
	sHash = MD5(s);
    
	return sHash;
}

public static String MD5(String key) {
    char hexDigits[] = {
            '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
    };
    try {
        byte[] btInput = key.getBytes();
        // ?峰?MD5??瑕?绠?娉??? MessageDigest 瀵矽薄
        java.security.MessageDigest mdInst = java.security.MessageDigest.getInstance("MD5");
        // 浣跨?ㄦ??瀹???瀛????存?版??瑕?
        mdInst.update(btInput);
        // ?峰?瀵???
        byte[] md = mdInst.digest();
        // ??瀵???杞??㈡??????杩??剁??瀛?绗?覆褰㈠?
        int j = md.length;
        char str[] = new char[j * 2];
        int k = 0;
        for (int i = 0; i < j; i++) {
            byte byte0 = md[i];
            str[k++] = hexDigits[byte0 >>> 4 & 0xf];
            str[k++] = hexDigits[byte0 & 0xf];
        }
        return new String(str);
    } catch (Exception e) {
        return null;
    }
}
           

??瑙e伐浣???璇???

?扮???哄??????锛?蹇?椤諱?璧?宸ヤ???璇???绠?娉?锛?PoW锛??ユ??????

PoW?????????懼?轟?涓??借???璁ょ???規?锛??ヨ????浣???浠?浜?宸ヤ???姝g‘?с??

?ㄥ????哄???懼??ㄤ腑锛?PoW缁?甯告??琚?璁捐?℃????杩?瀵繪?炬??涓?涓?绗????瑰???′歡???闆???ヨ????锛?杩?涓??闆?????藉??捐?$???烘?ワ?浣?寰?瀹規??楠?璇???

杩?灏辨??宸ヤ???璇??????稿????熾??

涓轟??逛究??瑙o?涓句釜渚?瀛?锛?

??璁句?涓??存??x 涔?浠ュ???涓??存??y ??绉??? Hash ?煎?椤諱互涓や釜????00?? 缁?灏撅???hash(x * y) = xxxxxx??0??璁懼???? x = 5锛?姹? y ???鹼?

??ava瀹??闆?涓?锛?

int x=5;

int y=0;

while(true){

String md5=BlockChain.MD5(""+(x*y));

if(md5.charAt(md5.length()-1)==??0??){

break;

}

y+=1;

}

????寰???y=69

??涓?D5(5*69)=D81F9C1BE2E08964BF9F24B15F0E4900

?????哄???懼??ㄧ???╁?锛?搴?璇ユ???村???????宸ヤ???璇???绠?娉???

?ㄦ???瑰?涓?锛?浣跨?ㄧО涓?ashcash??宸ヤ???璇???绠?娉?锛?瀹???涓??㈢????棰?寰?绫諱技???垮伐浠?涓轟?浜?澶哄??寤哄?哄???????╄??浜??歌?$??缁???锛????沖?ㄧ???扮?佃??锛?杩?灏辨??绉頒?涓烘???褲????甯革?璁$???懼害涓?????瀛?绗?覆??瑕?婊¤凍???瑰??瀛?绗????伴????姝f??锛??垮伐绠??虹?????锛?浼??峰?姣??瑰?濂??便??褰??訛?涓????$???烘?ワ?浼???甯稿?規??楠?璇?杩?涓?缁?????

瀹??版??浠???宸ヤ???璇???

??浠???宸ヤ???璇???锛??e氨姣?杈?绠???锛?褰??ㄦ?瘋??ヤ?涓?涓???璇????跺??锛???浠???寮???璇?璇??告?????懼害锛?涓??ャ????????灏卞??浠ョ?ラ??瀹??ョ??瀵矽?????浜???

浠?绯葷?涓??ヨ?達???浠???浠ラ??杩?璋??ㄥ??ㄥ????ヨ?㈡?ュ?o???????甯???璇?璇?搴?锛??ュ???拌?涓?宸ヤ???璇???锛?浠g??濡?涓?锛?姝ゅ?寮??ㄤ?涓?涓?澶??ㄦ??璇???瀹??ф?ヨ?㈡?ュ?o?锛?

//楠?璇?褰???????璇?????????瑙???
//pre ??涓?涓???璇?
//cur 杩?涓?涓???璇?
public static boolean ValidProof(String pre,String cur){
	
	//楠?璇?杩?涓???璇???澶翠?涓?瀛???涓???涓?涓?涓???璇???????涓?涓?瀛?
	if(cur.charAt(0)!=pre.charAt(pre.length()-1)){
		return false;
	}
	
	//楠?璇?????????璇?
	//http://chengyu.t086.com/chaxun.php?q=%B9%E2%C3%F7%D5%FD%B4%F3&t=ChengYu
	String content=httpRequest("http://chengyu.t086.com/chaxun.php?q="+cur+"&t=ChengYu");
	if(content.indexOf("娌℃???懼?頒??ㄦ??绱㈢?稿?崇????璇?")!=-1 || content.indexOf("??绱㈣??澶???)!=-1){
		return false;
	}
	
	return true;
}
           

灏?缁?锛???杩?涓??㈢??璁茶В锛???杩頒??哄???炬????扮??涓?浜??版?蹇碉??哄??锛???涓???锛??懼?瀛????宸ヤ???璇???锛?涓繪?版??褰㈠?????瀹癸?Hash??瀵?绛?绛??????舵??浠???杩?????璇??ラ?????渚?瀛?锛??ㄤ?瀛?涓???ava????浜??稿?崇??绫誨???規???

?峰?浜??哄???鵑」?????虹?缁?浠跺??锛?涓?涓?姝ュ氨??灏?杩?浜?缁?浠惰?琛?璧鋒?ワ?????涓?涓???浠ョ??姝h?琛?璧鋒?ョ???哄???鵑」????

???ㄤ?涓?Blockchain椤圭??

??浠??界?ラ??锛??哄???炬??涓?涓???甯?寮?瀛??ㄥ????甯?寮?璁$??浜??哥???????????浜у??妗??躲???舵?稿????諱腑蹇???瀛??ㄣ??杩?涓????崇??锛??????哄???劇???版???藉?璇ュ???ㄥ?ㄧ?ㄦ?鋒???拌??涓?????涓?涓?蹇????″?ㄣ????浠ワ?涓?涓???姝g???哄???句駭??锛???瑕??ㄦ病??涓?蹇????″?ㄦ???????典?锛?瑙e?沖?涓???涓??烘??????棰?锛?

1?? 姣?涓??ㄦ?風?????ㄥ?哄???句駭???訛?濡?浣?灏??哄???版??????濮?涓?杞藉?版???幫?

2?? ?闆????哄???訛??哄???懼??瀹圭???存?闆??甯?浠ュ??涓????ㄦ?鋒?闆??哄???堕?村?茬????澶???锛?

3?? ?ュ父杩?琛?杩?绋?涓?濡?浣?淇?璇?姣?涓??ㄦ?風??锛????癸??版???????闆?????跺??姝ワ?

??寤鴻????

?哄???鵑」??涓?锛?涓?涓?姝e?ㄨ?琛????哄???鵑」?????ㄦ?風?绔?锛?绉頒負涓?涓????廣??

姣?涓??ㄦ?風??涓?娆″???ㄦ??涓??哄???鵑」??锛?灏辯?稿?浜???寤轟?涓?涓????廣????浠ュ??姣?娆″???ㄩ」??锛??芥???崇?????ㄤ?杩?涓????廣??

涓轟?涔?璇存????寤轟?涓????癸?????寰?绠???锛??哄???劇???烘?????蟲???諱腑蹇???锛??諱腑蹇????????绉?璇存?锛?涓??翠換浣?涓?涓?缁?绔?锛??藉??浠ユ??涓?蹇?锛???????瀵圭????缁?缃?妯″??锛?涔?灏辨??P2P缁?缃?妯″??????涓轟換浣????ㄧ??缁?绔?锛??や???瑕?瀹????版??涓?杞斤?浣跨???杩?绠?涔?澶?锛?杩???瑕?瀹???瀵瑰???渚??版??锛???姝ワ?楠?璇?绛?绛????姐??
           

?哄???劇?缁?绯葷?涔???浠ラ????2P浣?涓哄?剁?缃?妯″??锛?杩????變?浜??????崇??濂???搴?‘瀹???锛??哄???劇???規???哄???逛?涓????諱腑蹇???锛?涓??????ㄤ????界??涔???锛????扮?靛???伴??绯葷?涓?锛?绗?涓??圭郴缁???澶?浣???锛?娌℃??浠峰?鹼?????灏辨???翠釜绯葷?涓?瑕?渚?璧?浠諱??規????绗?涓??規?ュ??????韬?绯葷???杩?杞?锛???P2P缃?缁???澶╃?跺??э?灏辨???ㄧ????瑰鈎绛?锛????規?????癸??變??哄???懼??瀵圭??缃?缁???寤鴻?炬???籌?楂?搴????锛?????涓?P2P缃?缁?宸茬???涓?涓???灞???????缃?缁?????锛?浜???璧闆?頒?璧鳳???涔???涓?绉?蹇??躲??

??浠ユ??浠??ㄨ?涓?渚?瀛????㈠???omcat锛?涓??歸?㈡??涓轟?灏?涓?浜??ㄦ?鋒??浣?杞??㈠?版?瑙????婕?绀烘?逛究锛????涓??歸?????涓轟??逛究??甯?涓?浜?瀵瑰??ュ?o??ㄦ?ユā????2P瀵圭??缃?缁?涔??存?版????姝ャ??
           

棣?????浠?浣跨??clipse寤虹??涓?涓??ㄦ??WEB 椤圭??锛?灏?涓??㈢?稿?崇被瀵煎?ワ????舵?闆緩涓?涓?绫諱技涓??㈢?? index.jsp 娆㈣?椤甸??

<%@ page language=??java?? contentType=??text/html; charset=gb2312??

pageEncoding=??gb2312??%>

?哄???炬?璇?

<% java.util.Date d = new java.util.Date(); %>

娆㈣?浣跨?ㄥ?哄???炬??璇??ラ???

?哄???版????姝ヤ腑锛?璇風?绛???????

<%= d.toString() %> !

??甯?椤圭???頒?瀹?瑁???Tomcat锛?????omcat锛?杈??ュ?涓??闆??锛?褰????闆?涓??炬??绀洪〉????沖??寤哄?哄???鵑」??????璇??ラ????????瑰??澶?宸ヤ?宸茬?瀹?????

???ㄥ?哄???懼??????寤鴻???癸?????浠ュ??姣?娆″???ㄥ?????介??瑕?瀹?????绗?涓?涓?宸ヤ?锛?????姝ュ?哄???炬?版???版???版?????存?版???闆?哄???版????纰闆?扮??绗?涓?涓???棰???锛?????涔??ラ???闆?????誨??姝ユ?版?????????璇存????涔??ラ???跺????浠ュ??姝ユ?版???????圭???闆?????

?鵑???懼害锛?寰?澶??借?寸??寰?妯$?锛?澶ц?存????瑕? node-seed 涔?灏辨??绉?瀛????規????锛??????懼?頒??哄???懼?绁?姣??瑰???寮???????涓?娈佃?存??濡?涓?锛?
           

缈昏????涓???锛?绠???瑷?涔?灏辨???ㄤ唬?????㈠??姝諱?涓?涓??????扮???IP?闆???扮?锛?绋?搴????ㄧ???跺??灏卞?昏?杩?浜???????IP??

褰??訛?瑙?寰?杩?绉??規???浠ヨВ?抽??棰?锛?浣???锛?杩???澶???灏?浣垮????諱腑蹇???????涓?浜?涓?灞?娣℃貳???村獎??
           

?d??規????杩?涓?渚?瀛???妯℃????澧?锛???灏辨?????稿???缃????界??IP??hard-code ?ㄧ?搴???锛???涓??????ユ?炬???塊?撅?浣?涓轟?杞藉?哄???炬?版?????????闆???с??涓??㈡??Java浠g??锛?

static final String  sIPPre="10.70.5.";                 
           

//瀵瑰???缃??????佃??杩?琛?????锛??懼?版???跨???撅?涓?杞藉?版????

static final String  sDataFileDir="c://blockchain";     //???闆???ㄨ礬寰?

//浠?缃?缁?璇誨???哄???炬?版???版???版??浠?public static void DowloadData(){

	//妫??ユ?版????浠剁??褰?锛?涓?瀛??ㄥ氨??寤?    File dirFile = new File(sDataFileDir);
    boolean bFile   = dirFile.exists();
	if(!bFile ){
		bFile = dirFile.mkdir();
		//寰??闆??寤虹?????版??浠堕???㈠??涓?涓???涓???
		try{
			FileOutputStream out = new FileOutputStream(new File(dirFile+"//data.txt"));
			out.write((BlockChain.CreateFirstBlock().toInfoString()+"\r\n").getBytes());
			out.close();
		}catch(Exception e){	
		}
	}
	
	
	//?????ㄨ竟?????癸??懼?版???跨???撅?涓?杞藉?版????	int iLastLen=0;
	String sLastChain="";
	for(int i=0;i<255;i+=1){
		String sThisURL="http://"+sIPPre+i+":8080/blockchain/chain.jsp";
		
		System.out.println(sThisURL);
		
		String sChain=httpRequest(sThisURL);
		
		if(sChain!=""){
			System.out.println(sChain);
			String sTemp[]=sChain.split("##");
			if(sTemp.length>iLastLen){
				iLastLen=sTemp.length;
				sLastChain=sChain;
			}
		}
	}
	
	try{
		if(sLastChain!=""){
			FileOutputStream out = new FileOutputStream(new File(dirFile+"//data.txt"));
			//System.out.println("before:"+sLastChain);
			sLastChain=sLastChain.replace("##", "\r\n");
			//System.out.println("after:"+sLastChain);
			out.write((sLastChain+"\r\n").getBytes());
			out.close();
		}
	}catch(Exception e){	
	}
	
}
           

DowloadData锛?锛?杩?涓??規?锛?搴?璇ュ?ㄥ??ㄥ???ㄧ???跺??琚?璋??ㄣ??涔????藉?ㄥ??ㄦ?ц?杩?绋?涓?锛????伴?撮???ц?璋??ㄣ??

浣????介┈涓?浼????幫?澶?浜?涓?涓?澶??ㄦ?ュ?o?

http://"+IP+":8080/blockchain/chain.jsp

杩?涓??ュ?f??姣?涓????歸?介??瑕?瀹??扮??锛??ㄦ?ヨ??鴻??宸辮???規???扮???哄???炬?版??锛??ㄥ鈎?跺??涓????瑰郊姝や??歌??????濮???????姝ュ?哄???炬?版?????ㄦ??渚?涓?锛?绠???瀹??版?規?濡?涓?锛?

寤虹??涓?涓? chain.jsp 椤甸????懼??omcat 璺?寰?涓?锛?璐翠?????富瑕?浠g??

<%@ page language=??java?? contentType=??text/html; charset=gb2312??

pageEncoding=??gb2312??%><%

//java.util.Date d = new java.util.Date();

blockchain.BlockChain.LoadData();

%>

<%= blockchain.BlockChain.StringBlockchain() %>

?ㄦ?鋒??涔????? ?頒?杩?涓?姝ワ???浠ユ????浠?渚?瀛?绋?搴?绋?寰?瀹???涓?涓?锛?涓哄???㈢???????庫??姒?蹇靛????澶???

瀹???????浜у?????㈠?涓?

???ㄥ????棣?????涓?涓??版????姝ョ??娆㈣?椤甸????姝ら〉?㈢??jax?瑰?瀹??闆???版?版????姝ャ??

??姝ュ??????锛?杈??ユ???哄?風??锛?杩??ヤ?涓?涓?椤甸????

娉ㄦ??椤甸????癸?澧???浜?涓?涓????ㄦ?存?闆?哄???懼???斤?涔???杩?ajax瀹??般??

??璋??????庫???????垮伐??锛???涓?杩??????ㄤ?姣??瑰????㈢???稿?寵?存??????垮伐??灏辨???ㄦ?蜂?锛??????庫??灏辨???ㄦ?峰?ㄨ?涓??哄???懼??ㄤ??㈠????浜???锛?涓???甯???涓?瀹???浠峰?煎??????锛?????寰?澶??哄???懼?????????庫??灏辨??瀹?????涓?宸ヤ?锛??峰?绯葷?涓?浜?濂??便??

?ㄦ??浠?杩?涓?婕?绀哄??ㄩ????????垮氨???ㄦ?鋒?規??涓?涓?涓???璇?锛??靛????璇??ラ???瑙???锛??沖?哄苟杈??ヤ?涓?涓???璇?锛?绯葷?楠?璇???璇?锛?灏變?涓轟??ㄥ?哄???懼???涓??¤?闆?锛????舵??濂??變?缁?浣?璁闆???

?跺??????瀛???寰??d?绁?濂?锛?浜?瀹??村?绠???锛?绯葷?灏辨????浜?浠ヤ?涓?浠朵?锛?

1??璁$??宸ヤ???璇???PoW锛?楠?璇??ㄦ?烽??浜ょ??宸ヤ?锛?

2??瀵逛??????庫?????????ㄦ?鳳???杩??闆?涓?涓??哄????浜??垮伐?崇?ㄦ?蜂?浜????版????????甯?濂??憋?

3???????闆?哄??骞跺??舵坊???伴?句腑锛???姝ュ?版??涓????廣??

浠g??濡?涓?:

if(request.getParameter(??answer??)!=null){ //璇誨???扮?ㄦ?風??杈???

//??杞藉?哄???炬?版??
blockchain.BlockChain.LoadData();

//?峰???哄???句腑????涓?涓???璇?
String sPre=blockchain.BlockChain.lBlockchain.get(blockchain.BlockChain.lBlockchain.size()-1).sProof;

//?ㄦ?瘋??ョ????璇?
String sCur=new String(request.getParameter("answer").getBytes("ISO8859-1"),"gb2312");

//?ゆ????涓???姝g‘绛?妗?锛?濡?????锛?灏辮???寤烘?闆??骞舵坊???闆?哄???句腑
if(blockchain.BlockChain.ValidProof(sPre,sCur)){
	
	blockchain.Block bPre=blockchain.BlockChain.lBlockchain.get(blockchain.BlockChain.lBlockchain.size()-1);
	
	//?峰????涓?涓?????Hash
	String sHash=blockchain.BlockChain.Hash(bPre);
	
	//??寤烘?闆??
	blockchain.Block bCur=blockchain.BlockChain.NewBlock(bPre.iIndex+1, sCur, sHash, new java.sql.Timestamp(System.currentTimeMillis()), bPre.sRecipient, (String)session.getAttribute("mobile"));
	
	//???ュ?哄???懼苟淇?瀛??版???版??浠?	blockchain.BlockChain.lBlockchain.add(bCur);
	blockchain.BlockChain.WriteData();
	??????
}else{
		????????
}
           

}

涓??㈡??缁?杩???涓??ラ?????椤甸???

杩?????浠ユ??寮????闆?哄???炬?版????浠???c:/blockchain/data.txt????浠ョ???闆?涓???瀹癸?涓轟??ョ??绠???锛??版????浠剁?ㄦ????txt瀛??ㄣ??

?朵腑绗?涓??★?????涓??????版??锛??ㄥ?哄???句腑锛?瀹????瑰?哄????

?ㄥ????椤圭??涓?锛??版????浠朵????戒?浠ユ??绉?杈?澶??????瑰?瀛????姣?濡????ㄦ??绉???瀵??瑰???

???規?版??涓??存?э??辮??绠?娉?/涓??存?х??娉?锛?

?扮????涓烘?㈡??浠?宸茬???浜?涓?涓??烘?????哄???句駭?????????骞朵???浠ュ??绠??????????庫??锛??ㄥ??ㄥ???ㄧ???跺??锛???浠?涔????頒?绗?涓?娆℃?版????姝ュ?????㈡????涓?娈墊?堕?存?版????姝ョ??瀹??版?規?锛??ㄤ?涓????逛?杩?琛?娌℃????棰???

浣???锛??哄???劇郴缁?搴?璇ユ????甯?寮??????㈢?舵????甯?寮???锛??d???浠?灏遍??瑕?????绌剁???誇?涔?淇?璇????????規?????風???懼???杩?灏辨??涓??存?ч??棰?锛???浠?瑕??沖?ㄧ?缁?涓???寰?澶?涓????瑰苟涓?浠?浠????版??淇???涓??達??e氨蹇?椤誨???頒?涓?涓??存?х??绠?娉???

瀹??闆?辮??绠?娉?锛?涓??存?х??娉?锛?

??涓????瑰??甯??ㄤ?????璁$???烘?????虹??绛?缁?绔?锛?????宸ヤ?锛?蹇??舵??涓?浜??茬??浜х?????茬????浜х??锛?涓昏??ヨ??涓ゆ?歸???涓????鵑?跨??涓?涓??達?浜????懼??????浜х????

?ㄦ??渚??ヨ?存????绗?涓?绉????墊??锛?姣?涓????瑰??姝ュ??锛?????????????棰???锛????????炬?版???藉?ㄦ?╁?锛?瀵艱?存??涓?浜虹???鵑?垮害涓?涓??淬??杩???涓?绉????墊??锛??ㄦ??涓??哄??涓????瀛??ㄤ??????芥?g‘??绛?妗?锛??d?锛??充嬌?垮害涓??達?浣??劇????瀹逛?涓??淬??姣?濡??ㄦ??渚?涓???娴烽??澶╃┖?????㈠??浠ユ?ョ????璇???寰?澶?锛?姣?濡???绌轟腑妤奸????????绌哄??缁?????????绌哄?f??????锛?浠?浠??芥??姝g‘????杩?绉????典?锛?绯葷?蹇?椤誨??涔?涓?涓???涓??х??绠?娉???

瑙e?充??㈤??棰???绠?娉?锛?绉頒?涓衡???辮??绠?娉???????涓??存?х??娉?????

??杩?涓??㈢????杩幫???浠??ラ?????辮??绠?娉????跺????瑙e?充????ㄦ?鳳???绉頒??????癸??ㄥ????琚???宸ヤ???璇?????绠?娉??胯?ょ??宸ヤ?涔???锛?濡?浣???骞沖??????濂??遍??棰???浠?蹇?椤誨????锛?浣??闆??骞熾????姝c???ㄤ??????哄???懼??ㄤ腑锛??ㄤ???????宸ヤ???璇??????虹?涓?锛??跺???版?規???涓?????锛??ㄥ?轟???浜?澶???????宸ヤ???璇????????哄???懼??ㄤ腑锛???浠ユ?寵薄锛?杩?浜?澶???????宸ヤ???璇?????锛?浼?瀵艱?撮??瑕???甯稿????????辮??绠?娉????昏В?沖?茬????

濡???姣?涓????瑰?ㄥ???涓?涓??闆?哄?????跺??锛??藉??浠ュ???跺??姝ュ?版??涓????癸?骞朵??ㄥ??姝ヨ?绋?涓?锛??介??瀹??跺?????癸?褰??惰????????崇????浣?浜?瀹?涓?锛??ㄧ?闆???烘??涓?锛?杩?寰??懼???般??缃?涓???寰?澶??辮???х??娉?璁ㄨ?猴?澶у?跺??浠ユ?ヨ?㈠????锛?涓?杩?寰?澶??藉???ㄤ?涓???棰?锛???瑕?涓?蹇????規????锛???瑙?寰?杩?涓??????諱腑蹇?????涓????ュ????锛???浠ラ??甯鎬?浠ヤ負?躲??

灏辨??渚?瀛???瑷?锛???浠ヨ?捐?′?涓??稿?圭?????????辮??绠?娉???锛???浠?绉頒?涓烘???塊?炬?锛?涓轟?瑙e?寵?涓???棰?锛?瑙?瀹????跨???????????炬??????缁????撅??㈠?ヨ??璇達?缃?缁?涓????????塊?炬????瀹??????俱???蜂?瀹??闆?涓?锛?

褰?涓?涓??ㄦ?峰????涓?涓???璇??ラ?骞惰?绯葷??ゆ??绛?妗?姝g‘???跺??锛?浠?灏?璁″???闆?涓?涓??哄??锛?骞朵?甯???娣誨???闆?哄???句腑锛?浣?杩?涔???锛?绯葷?浼????繪????褰??????????圭???????撅?濡??????闆???ㄩ?垮害姣?褰??????瑰??涓?杩?瑕??跨???撅??d?绯葷?璁や負锛?褰??????矽?界?跺????浜?棰???锛?浣?宸茬?涓?????蹇????d釜浜轟?锛???姝や????胯?よ?娆″伐浣????????с??骞朵????跺??姝ユ???塊?懼?版???幫???绀虹?ㄦ?烽???闆????璇??ラ???

杩?涓?绠?娉??ㄦ??渚?涓?锛???璁轟?????????锛???涓轟??借?翠?涓??ㄦ?瘋?變?涓?????灏卞??绛??烘?ョ??绛?妗?锛????涓?涓??變?涓?澶╂????绛??烘?ワ?褰??跺???㈢??灏變??借?存????浜???娌℃???翠?缁????寵?杩?涓????辮??绠?娉??????????э?浣?涓烘?绀猴????跺氨?d??ㄤ?涓?浜???涓??㈣?翠?涓??ㄦ??渚?涓?瀹??伴??瑕???涓や釜????锛?

1?? 姣?涓????歸??瑕?涓?涓??借?????????渚?瀹???宸辯???哄???炬?版?????ュ?o?杩?涓??跺???ュ?e凡缁???浜?锛?灏辨??http:/??blockchain/chain.jsp锛???椤懼??????ㄥ???ㄨ???圭???跺???ㄥ?拌?锛?

2?? 瀹??頒?涓??辮??绠?娉??規?锛??ㄦ??娆♀?????庫??瀹?????锛??ゆ??宸ヤ????????с??

?辮??绠?娉?濡?涓?锛?

//?辮??绠?娉?
//杩??? true 琛ㄧず褰??????瑰伐浣???浠ヨ?璁ゅ??
public static boolean Unanimous(){
	boolean bRet=true;
	
	//?????ㄨ竟?????癸??懼?版???跨???撅?涓?杞藉?版????	int iLastLen=0;
	String sLastChain="";
	for(int i=0;i<255;i+=1){
		String sThisURL="http://"+sIPPre+i+":8080/blockchain/chain.jsp";
		
		System.out.println(sThisURL);
		
		String sChain=httpRequest(sThisURL);
		
		if(sChain!=""){
			System.out.println(sChain);
			String sTemp[]=sChain.split("##");
			if(sTemp.length>iLastLen){
				iLastLen=sTemp.length;
				sLastChain=sChain;
			}
		}
	}
	
	BlockChain.LoadData();
	try{
		//濡????跺?????瑰???ㄩ?垮害澶т????拌??3??1???撅?????娆♀?????庫??????
		if(sLastChain!="" && iLastLen >= BlockChain.lBlockchain.size()+1){
			bRet=false;
			FileOutputStream out = new FileOutputStream(new File(sDataFileDir+"//data.txt"));
			sLastChain=sLastChain.replace("##", "\r\n");
			out.write((sLastChain+"\r\n").getBytes());
			out.close();
		}
	}catch(Exception e){	
	}
	return bRet;
}
           

???モ???辮??绠?娉??????????㈠????濡?涓?锛?

褰??ㄦ?烽??浜や?涓???璇???锛?绯葷?浼???杩?Ajax棣???妫?娴??哄???劇??涓??存?э?涓??存?ч??杩?浜?锛??ㄦ?烽??浜ょ??杩?涓??扮????璇?锛???浼????ュ?闆?哄???俱??濡??????版???撮?跨???炬?″???????绯葷?浼???绀烘???涓?姝ワ?宸茬?琚?寮哄ぇ锛?蹇?椤婚???闆?濮???

椤甸?㈠ぇ?村?涓?锛?

??甯???杩?琛??哄???炬??璇??ラ?

?拌???锛?杩?涓????哄???炬??璇??ラ???娓告??灏卞?烘????寤哄??娴?璇?瀹?????

?ヤ??ョ??浜???锛?浣???浠ュ?姝ら」??????war锛??跺????甯??頒????ㄥ???缃?涓????????圭???哄?ㄤ?锛???涓虹??澧?????????棰?锛???浠ヨ???瑰?椤繪??Windows+JDK+Tomcat杩?琛???澧?锛?灏?椤圭???????? blockchain.war锛??懼?頒???Tomcat??褰? webapps涓?????跺??????omcat锛???寮?浣???娴?瑙????杈??ワ?http://localhost:8080/blockchain/

杩?绋?涓???绱?杩般??濡???灞???缃?????澧??????扮??褰?缁????????瑰??锛?????瑕?瀵歸」?????ㄥ???版?圭?浣?淇??癸?姣?濡?锛?

//瀵瑰???缃??????佃??杩?琛?????锛??懼?版???跨???撅?涓?杞藉?版???? static final String sIPPre=??10.70.5.??;

//???闆???ㄨ礬寰?

static final String sDataFileDir=??c://blockchain??;

濂藉???浣???浠ラ??璇蜂?????浜???????浠?涓?璧鋒?ユ?璇?浣????哄???炬??璇??ラ?锛?

?葷?锛?

??杩???寤轟?涓??哄???鵑」??锛???浠???浠ヤ?瑙d?涓??哄???鵑」?????ㄦ????瑕????????ヨ??锛???澧????跺?烘??绠?娉???浠h〃??姒?蹇碉??ㄤ?瀛?涓?锛???浠?涓?涓?璁茶В骞朵?瀹??幫???浠???浠ラ??甯稿?蜂??頒?浼??扳???諱腑蹇?????????瀹???涔???浜?瀹?涓?锛???浠ュ?ㄦ?璇?杩?绋?涓?锛????ュ?澶?缁?绔?锛??跺??锛??抽??涓??翠換浣?涓??扮?绔?锛???杩?涓?浜у???????????浠ユ?e父杩?琛???

?界?跺?姝わ??ㄨ?涓?杩?绋?涓?锛?涔???浠ョ???版??浜???棰?骞舵病??寰?濂藉??褰誨???瑙e?蟲?規?锛??哄???句?涓轟?涓??拌搗??姒?蹇靛??????锛?杩?涓?褰??朵???浠ョ??瑙o????鳳?杩?涓???浠ヤ?涓烘??浠???绌朵漢??杩?涓?姝ヤ?缁????????廣??
           

1?? ?充?绉?瀛????圭????棰?

?ㄤ換浣?涓?涓????瑰???ㄧ???跺??锛?濡?浣??峰??跺?????圭??浣?缃?淇℃??锛?浠???涓?杞藉????濮????哄???懼???绉?瀛????圭??瀛??????纭???浠ヨВ?寵?涓???棰?锛?浣?绉?瀛????規??韬?锛?灏卞甫????涓?蹇?????杩?涓?姒?蹇碉???浠ワ?濡???娌℃??绉?瀛????逛??村??濂斤?浣?濡?浣?瀹??闆???

2?? ?充???宸ヤ???璇?????

涓?涓??????????芥????????涓???锛?????璇村?圭?ㄦ?峰?圭ぞ浼?????????姝g??浠峰?鹼?灏卞?ㄤ?瀹??戒??借В?蟲??浠??蜂???娲誨?烘??????棰????哄???鵑???㈠?蜂???????浜???锛??藉?ㄢ??宸ヤ???璇??????????褰???寰?澶??哄???鵑」??锛?姣?濡???姣??瑰???锛??芥???ㄤ?涓?璁$???哄?????瑰?锛??ユ??杩闆??????涓?绉?宸ヤ?锛?浣?杩?绫誨伐浣?????涔?绌剁????澶?澶э??????堕???ㄦ?ф??澶?澶э???????瑕???????杩?绉??瑰??ㄦ?ヤ駭????????甯?????涓???锛?浣???????甯?????????浠峰?間?锛?杩???灏辨??锛?????????宸ヤ?锛??藉??浠ヤ???瑕???涓?蹇????光??????涔?锛???浠ワ?璁捐?℃?村???绗???浜轟滑??娲誨?烘??????宸ヤ???璇?????绠?娉?锛?灏?澶уぇ??灞?杩?涓?????????????

3?? ?充????辮??绠?娉???

???辮??绠?娉???????宸ヤ???璇??????????稿?籌?浣????????辮??绠?娉????介??瑕?????瑙e?寵搗??涓や釜??棰?锛?褰???涓????圭????杩?浣????跺??锛?涓????垮??浼?浜х??姣?涓????瑰?哄???句???姝ョ????棰?锛?涓???姝ュ???藉?ㄦ?堕?翠?锛?涔????藉?ㄢ??宸ヤ???璇???????澶???缁???涓?锛?杩?涓ょ?锛???瑕???缁?杈炬???辮??锛?浣垮?绯葷?涓?濮?缁?????涓??℃?g‘???撅?搴?璇ヨ?存???稿??伴?俱??缃?缁???寤惰?锛?缁?绔???宸?寮?锛?涓?????缁????藉????锛???涔???骞沖??????????绛?绛???瀹??ㄤ????d?绠???????

4?? ?充?宸ㄩ???哄???炬?版????姝ラ??搴? ?充嬌瑙e?充?涓???锛?2锛?3 ???虹????棰?锛?涔?瀛??ㄦ?版????姝ラ??搴???棰???

??璁轟??ヨ?達??哄???炬??涓????癸?搴?璇ユ???版?????ㄥ?浠姐???ㄦ??浠?杩?涓?渚?瀛?涓?锛???姝ユ?版????姣?杈?灏?锛???姝ヨ???逛?涓?澶?锛???浠ユ??娆″??姝ユ?堕?村?????浣????ㄥ???ㄧ郴缁?涓?锛?濡????虹?闆ぇ???????癸?澶ч?????版??锛?杩?涓???姝ヨ??瀹?浼????堕?淬??涓?涓??????瑰???ㄥ?歸????棰?锛?涓?涓?????姝ュ甫瀹介??棰?锛?涓よ???芥??涓???棰????????????轟??哄???劇???鴻?藉??绾????妗??朵互澶?璁匡?Ethereum锛???瑕???姝ョ???版??宸茬??ヨ?浜???浜虹??100G锛?杩??ㄤ???澧??匡???涓?杞藉??瑁?涓?涓???姝ヤ?涓?涓????????ㄥ?姝ゅぇ???版??涓や?锛?绠???????姝ュ???瘋?锛???瀹???涓???????锛????甯??ュ法澶х??璧?婧?娴?璐癸?涔?浼?甯??ュ??ㄧ????浣跨?ㄦ?у??宸?????浠ヨ????㈤??瑕?瑙e?崇????棰?杩?寰?澶???

浠ヤ?杩?浜?锛?浠諱?涓??癸?浠?缁???绌堕?芥??涓?涓?宸ㄥぇ??璇鵑?锛???涓?涓?绠????g???哄???鵑」??涓??撅?瑕???濂藉苟涓?????绀句???姝f???ㄨ??????浣???浜у??锛?浼拌?¤???寰?杩???璺?锛??蜂??蟲?ラ?芥????瑕?濂藉ソ瑙e?崇????棰???璁╂??浠?涓?璧峰?????с??

??瑕?椤圭??婧?浠g??????涓?璧瘋?ㄨ?哄?哄???鵑??棰?锛???浠ュ??寰?淇″?鋒????????涓??逛?缁寸????????绯彙??

寰?淇″?鳳?thisiswwh