基于blockchain的積分交易平臺關(guān)鍵代碼解釋_第1頁
基于blockchain的積分交易平臺關(guān)鍵代碼解釋_第2頁
基于blockchain的積分交易平臺關(guān)鍵代碼解釋_第3頁
基于blockchain的積分交易平臺關(guān)鍵代碼解釋_第4頁
基于blockchain的積分交易平臺關(guān)鍵代碼解釋_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

部分關(guān)鍵代碼戶,transfer用來負(fù)責(zé)我們BlockChain平臺和商家之間的,最外面的Invoke函1func(t*SimpleChaincode)Invoke(stubfunctionstring,args[]string)([]byte,error)2varA,B //3varAval,Bvalint//Asset4varX,Y //Transaction5varerr67iflen(args)!=48returnnil,errors.New("Incorrectnumberarguments.Expecting9}A=B=//Getthestatefromthe//TODO:willbenicetohaveaGetAllStatecalltoAvalbytes,err:=iferr!=nilreturnnil,errors.New("Failedtoget}ifAvalbytes==nilreturnnil,errors.New("Entitynot}Aval,_=Bvalbytes,err:=iferr!=nilreturnnil,errors.New("Failedtoget}ifBvalbytes==nilreturnnil,errors.New("Entitynot}Bval,_=//PerformtheX,err=Y,err=iferr!=nilreturnnil,errors.New("Invalidtransactionexpectingainteger}Aval=Aval-Bval=Bval+fmt.Printf("Aval=%d,Bval=%d\n",Aval,//Writethestatebacktotheerr=stub.PutState(A,iferr!=nilreturnnil,}err=stub.PutState(B,iferr!=nilreturnnil,}returnnil,}是1:1的比例。Args[]數(shù)組中按順序存著四個命令參量:減少積分的賬戶A名稱、增加積BAint)Bint)。ififlen(args)!=4 returnnil,errors.New("Incorrectnumberofarguments.Expecting4") X,X,err=Y,err=iferr!=nil returnnil,errors.New("Invalidtransactionamount,expectingaintegervalue") Aval=Aval-Bval=Bval+前三句,如果X或者Y任意一個不是int型的數(shù)字,那么就會報錯并中止chaincode的錯誤運(yùn)行。40、41句則可以控制AX積分,BY個積分,以達(dá)到控制積分的除了invoke之外,其他addAcc、transfer兩個方法都在invoke方法內(nèi)部對RESTAPI里function參量進(jìn)行判斷。例如,收到的json中method為“invoke”,function為1iffunction==2varN //3varNvalint//Asset4varerr56iflen(args)!=27returnnil,errors.New("Incorrectnumberarguments.Expecting8}9N=Nval,err=iferr!=nilreturnnil,errors.New("Expectingvalueforasset}err=stub.PutState(N,iferr!=nilreturnnil,}returnnil,}2chaincode參量N用來新建賬戶的名稱,Nval用來初始積分?jǐn)?shù)量,讀入方法如下,當(dāng)N=N=Nval,err=iferr!=nil returnnil,errors.New("Expectingintegervalueforassetholding") err=stub.PutState(N,iferr!=nilreturnnil,} 功能transfer函數(shù)的具體實現(xiàn):1iffunction==2varM3varflag,Mval,num4varerr56iflen(args)!=7returnnil,errors.New("Incorrectnumberarguments.Expecting8}9//MisM=Mvalbytes,err:=iferr!=nilreturnnil,errors.New("Failedto}ifMvalbytes==nilreturnnil,errors.New("Entitynot}Mval,_=//flagdefinesflag,err=iferr!=nilreturnnil,errors.New("Expectingvalueforflag}//numischangesofnum,err=iferr!=nilreturnnil,errors.New("Expectingvalueformodify}//ififflag==0Mval=Mval-err=iferr!=nilreturnnil,}returnnil,}//ififflag==1Mval=Mval+err=iferr!=nilreturnnil,}returnnil,}returnnil,}義了一個標(biāo)志量flag,當(dāng)flag0時,表示積分自減,當(dāng)flag1積分自增。參量num自增減的數(shù)量。M表示自增減賬戶的名稱,Mval表示賬戶M在增減積分之前的積分?jǐn)?shù)iflen(args)iflen(args)!= returnnil,errors.New("Incorrectnumberofarguments.Expecting3") //MisM=Mvalbytes,err:=iferr!=nilreturnnil,errors.New("Failedto}ifMvalbytes==nilreturnnil,errors.New("Entitynot}Mval,_=//flagdefines//flagdefinesflag,err=iferr!=nilvalueforflag}returnnil,errors.New("Expecting如果flag為數(shù)字,那么判斷他為0還是1,0則進(jìn)行減法運(yùn)算Mval=Mval-num,1則進(jìn)行加法運(yùn)算Mval=Mval+num://ififflag==0Mval=Mval-err=iferr!=nilreturnnil,}returnnil,}//ififflag==1Mval=Mval+err=iferr!=nilreturnnil,}returnnil,}智能推薦算家、用戶提供積分?jǐn)?shù)量、用戶期望積分?jǐn)?shù)量獲得滿足用戶需求的訂單ID,將這些ID添加到隊頭訂單的links屬性中去,同時如果這些ID對應(yīng)訂單并未加入過隊列則加入隊列,從而根據(jù)廣搜找到每一個訂單滿足自己要求的訂單ID隊列。3nulllinks publicclassAllOrdersprivateHashMap<String,Integer>allShops=newprivateString[]shopNum=newprivateintprivateintprivateOrdersorderList[]=newpublicvoidgetShops(String[]//獲取商家列for(StringshopName: privatevoidsetShops(String//設(shè)置商 publicVector<Vector<Integer>>setOrders(StringfromShop,StringtoShop,StringfromPoints,StringtoPoints){//未發(fā)布的訂單(進(jìn)行查詢訂單)的訂單id設(shè)置為return publicVector<Vector<Integer>>setOrders(StringrealID,StringfromShop,StringtoShop,StringfromPoints,StringtoPoints){//廣度優(yōu)先搜索隊列Orders Vector<Vector<Integer>>alltrade=new//生成新訂//將訂單id添加到相}catch(NumberFormatException //當(dāng)該訂單不是查詢訂單的時候直接返回return //廣度優(yōu)先搜索隊列不為空則一直進(jìn)Ordersfor(int//將符合條件并未進(jìn)行搜索的訂單id加入廣度 //訂單不能構(gòu)成一個環(huán)路(不存在滿足條件的System.out.println("Thereisnooneaviableintsize--{//當(dāng)查詢訂單的查詢隊列不為空則進(jìn)行深度優(yōu)先搜索查

//trade為深度優(yōu)先搜索之后獲得的訂單idintfor(intint//將程序中設(shè)置的訂單id轉(zhuǎn)換為系統(tǒng)中訂單}

returnprivatevoid//初始化商家訂單idint //通過廣搜從商家訂Vector<Integer>nextOrders=newfor(int//對于商家訂單是否滿足條件進(jìn)行判for(intif(one.ensureNext(orderList[ano], return}privateVector<Integer>findOrder(intfromS,intpoints,int//根據(jù)目的商家和期望商家獲得滿足條件的下一個訂單(期望訂單)idint

int else return //廣度優(yōu)先搜索結(jié)束利用深度優(yōu)先搜索展示可以 return//保證每次深度優(yōu)先搜索之后不影響以后的深度優(yōu)先搜}elseint}elsefor(int}}return}publicbooleandeleteOrders(int[]//所有的已經(jīng)的訂單不能被搜booleanfor(int{}}return}}模塊部分BlockChain,BlockChain,BlockChain返回結(jié)果給,若返回OK,說明在BlockChain操作成功,將進(jìn)行數(shù)據(jù)庫中訂單發(fā)布 失敗。若BlockChain返回的不是OK,則本地數(shù)據(jù)庫不進(jìn)行任何publicclassOrderService privateintorderStatus_unfinished_valid0;//0代表未完成且未超過privateintorderStatus_finished1;//156789

OrderorderInfo= np=bsm.isBindThisShop(exchangeUserName,orderInfo.getShopName());//驗證發(fā)起 是否綁 niBnSoNme=bsm.isBindThisShop(exchangeUserName,orderInfo.getWantedShop());驗證發(fā)起 者是已定目商家if(!isBindWantedShop){//沒有綁定目標(biāo)商家給出提finishOrderRes="您未綁定return if(!isBindShopName){//沒有綁定商finishOrderRes="您未綁定return intpointsAt tByExchanger=uptm.ownPointsAt f(pointsAt tByExchanger<orderInfo.getWantedPoint()){如果起在商的臺分于訂發(fā)者期望的平積,返回 顯 finishOrderRes="您在商家return Pointpoint1=bindShopManger.findBindedShop Pointpoint2= Pointpoint3=bindShopManger.findBindedShop Pointpoint4=bindShopManger.findBindedShop(orderInfo.getUserNameorderInfo.getWantedShop());//訂單發(fā)布者在期Stringstr1="{'jsonrpc':'2.0','method': getPoint())+"']}},'id':3}"; 傳送給BlockChain的JSON字符串,決定BockChain進(jìn)行invoke(交易)Stringstr2="{'jsonrpc':'2.0','method': tedPoint())+"']}},'id':3}";HttpUtilshttputils=new StringconReshttputils.getHttpConnection();//開啟連接if(conRes.equals("開啟請求連接成功 GetJsonStrresult1=httputils.postJsonToBlockChainHttpUtilshttputils2=new GetJsonStrresult2=//本地Mysql數(shù)據(jù)庫操/*改變訂單發(fā)布者的積分 /*改變訂單發(fā)布者想要交換的積分 /*改變發(fā) /*改變發(fā) intpointRes1intpointRes2intpointRes3intpointRes4StringorderDate=Orderorder=new return return finishOrderRes="連接blockchain失敗}return}return首先獲取要進(jìn)行的訂單的ID以及發(fā)起的用戶的名稱,調(diào)用OrderService類中的finishOrder(exchangeUserName,orderID)方法進(jìn)行,返回處理的結(jié)果。123456789publicvoidfinishOrderByTwo(HttpServletRequestrequest,HttpServletResponseresponse){intorderID=StringexchangeUserName=(String)OrderServiceos=newStringfinishOrderRes=os.finishOrder(exchangeUserName,request.setAttribute("index",3);request.setAttribute("finishOrderRes",finishOrderRes);try{st,response);//頁面轉(zhuǎn)}catch(ServletExceptione)//TODOAuto-generatedcatch}catch(IOExceptione)//TODOAuto-generatedcatch}} 起方選擇一種路徑,點擊按鈕之后調(diào)用finshOrderByMuliti(),獲取發(fā)起方選。進(jìn)行多方的時候,根據(jù)路徑中的訂單ID循環(huán)調(diào)用finishOrder()完易, publicvoidfin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論