我發現用以太坊思維,將以太坊代幣合約搬到 hyperledger 上,一樣可以實現代幣的功能,這個代幣除了不能上交易所,基本滿足我們替代積分系統的需求,下面是我寫了這樣一個合約,在超級賬本上實現類似以太坊的代幣轉賬功能。
packagemainimport("bytes""encoding/json""fmt""strconv""github.com/hyperledger/fabric/core/chaincode/shim"sc"github.com/hyperledger/fabric/protos/peer")//DefinetheSmartContractstructuretypeSmartContractstruct{}typeTokenstruct{Ownerstring`json:"Owner"`TotalSupplyuint`json:"TotalSupply"`TokenNamestring`json:"TokenName"`TokenSymbolstring`json:"TokenSymbol"`BalanceOfmap[string]uint`json:"BalanceOf"`}func(token*Token)initialSupply(){token.BalanceOf[token.Owner]=token.TotalSupply;}func(token*Token)transfer(_fromstring,_tostring,_valueuint){if(token.BalanceOf[_from]>=_value){token.BalanceOf[_from]-=_value;token.BalanceOf[_to]+=_value;}}func(token*Token)balance(_fromstring)uint{returntoken.BalanceOf[_from]}func(token*Token)burn(_valueuint){if(token.BalanceOf[token.Owner]>=_value){token.BalanceOf[token.Owner]-=_value;token.TotalSupply-=_value;}}func(token*Token)burnFrom(_fromstring,_valueuint){if(token.BalanceOf[_from]>=_value){token.BalanceOf[_from]-=_value;token.TotalSupply-=_value;}}func(token*Token)mint(_valueuint){token.BalanceOf[token.Owner]+=_value;token.TotalSupply+=_value;}func(s*SmartContract)Init(stubshim.ChaincodeStubInterface)sc.Response{returnshim.Success(nil)}func(s*SmartContract)initLedger(stubshim.ChaincodeStubInterface)sc.Response{token:=&Token{Owner:"netkiller",TotalSupply:10000,TokenName:"代幣通正",TokenSymbol:"COIN",BalanceOf:map[string]uint{}}token.initialSupply()tokenAsBytes,_:=json.Marshal(token)stub.PutState("Token",tokenAsBytes)fmt.Println("Added",tokenAsBytes)returnshim.Success(nil)}func(s*SmartContract)transferToken(stubshim.ChaincodeStubInterface,args[]string)sc.Response{iflen(args)!=3{returnshim.Error("Incorrectnumberofarguments.Expecting2")}tokenAsBytes,_:=stub.GetState(args[0])token:=Token{}json.Unmarshal(tokenAsBytes,&token)token.transfer(args[1],args[2],args[3])tokenAsBytes,_=json.Marshal(token)stub.PutState(args[0],tokenAsBytes)returnshim.Success(nil)}func(s*SmartContract)balanceToken(stubshim.ChaincodeStubInterface,args[]string)sc.Response{iflen(args)!=1{returnshim.Error("Incorrectnumberofarguments.Expecting1")}tokenAsBytes,_:=stub.GetState(args[0])token:=Token{}json.Unmarshal(tokenAsBytes,&token)amount:=token.balance(args[1])returnshim.Success(amount)}func(s*SmartContract)Invoke(stubshim.ChaincodeStubInterface)sc.Response{//RetrievetherequestedSmartContractfunctionandargumentsfunction,args:=stub.GetFunctionAndParameters()//Routetotheappropriatehandlerfunctiontointeractwiththeledgerappropriatelyiffunction=="balanceToken"{returns.balanceToken(stub,args)}elseiffunction=="initLedger"{returns.initLedger(stub)}elseiffunction=="transferToken"{returns.transferToken(stub,args)}returnshim.Error("InvalidSmartContractfunctionname.")}//Themainfunctionisonlyrelevantinunittestmode.Onlyincludedhereforcompleteness.funcmain(){//CreateanewSmartContracterr:=shim.Start(new(SmartContract))iferr!=nil{fmt.Printf("ErrorcreatingnewSmartContract:%s",err)}}
合約代碼的測試
funcmain(){token:=&Token{Owner:"netkiller",//代幣管理者TotalSupply:10000,//代幣發行總量TokenName:"積分連",//代幣名稱TokenSymbol:"NEO",//代幣符號NEOBalanceOf:map[string]uint{}}token.initialSupply()//初始化代幣fmt.Println(token.balance("netkiller"))//查詢余額token.transfer("netkiller","neo",100)//轉賬,這里賬號使用用戶ID,沒有使用以太坊錢包那樣的哈希值,因為哈希值不便于記憶。fmt.Println(token.balance("netkiller"))fmt.Println(token.balance("neo"))}
我們可以建立很多套這樣的比,例如水果幣,蔬菜幣,流量幣...
開發一個小型交易所難度也不大,讓用戶在交易所中交易這些幣。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
近日,萬孚生物新冠抗原產品自測應用獲批上市。局李阿偶誒,萬孚生物,是國內唯一獲得新冠抗原檢測和新冠抗體檢測雙注冊證的企業,萬孚生物新型冠狀病毒(2019-nCoV)抗原檢測試劑盒(膠體金法)是國內首批獲證的新冠病毒抗原檢測試劑之一,并獲得歐盟CE認證以及相關進口方當地資質。但是網傳截圖顯示,3月12日,萬孚生物董秘胡洪在公司新冠抗原檢測試劑盒獲批后,在朋友圈發表“此刻心情如下&rdqu...
2021美國國債持有國排名一覽表據2022年2月16日美國新公開的數據統計顯示:1、日本2021年12月減持美債230億美元至1.304萬億美元,仍為美國第一大 :債權國;2、中國在2021年12月 減持美債122億美元至1.0687萬億美元,仍為美國第二大債權國;3、英國2021年12月增持254億美元至6474億美元,持倉規模位居美債第三大持有國;4、 愛爾蘭2021年12月增持45億美元至3...
任何一家銀行信用卡都有積分產生的,持卡人可以使用積分兌換相應的禮品,所以對于積分也都熟悉了,但信用卡也有積點制度,那么興業銀行的積點和積分有什么區別呢,一起來看分析。1、概念區別:所謂興業銀行積點是針對興業銀行“自然人生”理財卡持卡客戶推出的專屬貴賓積點服務。而興業銀行積分是針對信用卡持卡客戶推出的,只要使用信用卡消費就可以累積積分。2、累計制度區別:興業銀行積點要去的是用...