加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > 世界幣 > Info

編程小白模擬簡易比特幣系統,手把手帶你寫一波_LET:WALLET幣

Author:

Time:1900/1/1 0:00:00

作者:VV一笑ヽ

如果有一個p2p的demo,我們要怎么才能應用到區塊鏈當中?

今天就來一起嘗試一下吧!

首先,我們需要模擬網絡中的多個節點相互通訊,我們假設現在的情況是有AB兩個節點整個過程如下圖所示:

梳理流程

讓我們來梳理一下整個流程,明確在p2p網絡中需要做的事情。

啟動節點A。A首先創建一個創世區塊創建錢包A1。調用節點A提供的API創建一個錢包,此時A1的球球幣為0。A1挖礦。調用節點A提供的挖礦API,生成新的區塊,同時為A1的錢包有了系統獎勵的球球幣。啟動節點B。節點B要向A同步信息,當前的區塊鏈,當前的交易池,當前的所有錢包的公鑰。創建錢包B1、A2,調用節點A和B的API,要廣播出去創建的錢包,目前節點只有兩個,因此A需要告訴B,A2的錢包。B需要告訴A,B1的錢包。A1轉賬給B1。調用A提供的API,同時廣播交易。A2挖礦記賬。調用A提供的API,同時廣播新生成的區塊。總結一下,就是節點剛開始加入到區塊鏈網絡中,需要同步其他節點的

已經處于網絡中的某個節點,在下述情況下需要通知網絡中的其他節點

P2P的大致流程為下方幾點,我們后邊的實現會結合這個過程。

client→server發送消息,一般是請求數據server收到消息后,向client發送消息client收到消息處理數據相關代碼

在實現的過程中,由于消息類型較多,封裝了一個消息對象用來傳輸消息,對消息類型進行編碼,統一處理,消息對象Message,實現了Serializable接口,使其對象可序列化:

可編程的NFT平臺Async Art已上線五位新藝術家的可編程音樂作品:7月29日,可編程的NFT平臺AsyncArt近日宣布已上線新Async音樂(AsyncMusic),有5位新藝術家在Async上發布了可編程音樂。這五位藝術家分別是重視NFT技術的女性制作Vérité、電子音樂制作人PLS&TY、獨立歌手TerraNaomi、DJMa?lstrom以及作曲家和鋼琴家CristinaSpinei。Async表示未來還將舉辦各種虛擬活動,對音樂人的獨家采訪等。[2021/7/29 1:22:23]

publicclassMessageimplementsSerializable{/***消息內容,就是我們的區塊鏈、交易池等所需要的信息,使用JSON.toString轉化到的json字符串*/privateStringdata;/***消息類型*/privateinttype;}涉及到的消息類型有:

/***查詢最新的區塊*/privatefinalstaticintQUERY_LATEST_BLOCK=0;/***查詢整個區塊鏈*/privatefinalstaticintQUERY_BLOCK_CHAIN=1;/***查詢交易集合*/privatefinalstaticintQUERY_TRANSACTION=2;/***查詢已打包的交易集合*/privatefinalstaticintQUERY_PACKED_TRANSACTION=3;/***查詢錢包集合*/privatefinalstaticintQUERY_WALLET=4;/***返回區塊集合*/privatefinalstaticintRESPONSE_BLOCK_CHAIN=5;/***返回交易集合*/privatefinalstaticintRESPONSE_TRANSACTION=6;/***返回已打包交易集合*/privatefinalstaticintRESPONSE_PACKED_TRANSACTION=7;/***返回錢包集合*/privatefinalstaticintRESPONSE_WALLET=8;由于代碼太多,就不全部粘在這里了,以client同步其他節點錢包信息為例,結合上面的p2p網絡交互的三個步驟,為大家介紹下相關的實現。

ConsenSys Academy正提供捐款幫助伊朗女性學習編程:2月13日消息,以太坊創業孵化器的教育分支ConsenSys Academy正在以提供獎學金的方式,幫助伊朗女性學習在以太坊上編程。已有7名伊朗女程序員獲得了獎學金,并順利從ConsenSys Academy畢業。據悉,該項目為ConsenSys全球項目的一部分,旨在幫助開發者在以太坊區塊鏈上編程,并為伊朗大部分與國際科技社區隔絕的人提供額外的機會。(CoinDesk)[2021/2/13 19:41:46]

1、client→server發送消息,一般是請求數據

在client節點的啟動類首先創建client對象,調用client內部方法,連接server。

啟動類main方法中關鍵代碼,:

P2PClientp2PClient=newP2PClient;Stringurl="ws://localhost:"+args+"/test";p2PClient.connectToPeer(url);P2PClient中的connectToPeer方法

publicvoidconnectToPeer(Stringurl)throwsIOException,DeploymentException{WebSocketContainercontainer=ContainerProvider.getWebSocketContainer;URIuri=URI.create(url);this.session=container.connectToServer(P2PClient.class,uri);}P2PClient中,WebSocketContainer.connectToServer的時候會回調onOpen函數,假設我們只查詢錢包公鑰信息,此時服務端會接收到相應的請求。

動態 | Gnosis資助的以太坊零編程自動化工具Gelato推出Alpha版:由 Gnosis 生態基金和 Meta Cartel 資助的 Gelato 團隊正式公開首個工具 Gelato Finance,這是一個無需編程就可以創建基于以太坊的自動化程序的工具。官方稱,Gelata 的目標是幫助用戶全天候自動執行基于以太坊平臺的任務。簡而言之,用戶可以通過 Gelato 創建自己的以太坊機器人,它會替你執行與其他應用的交互,原則上可以使用該機器人接入任何去中心化應用,而且不需要寫任何代碼。Gelato Finance 是 Gelato 展示的首個工具,目前還處于早期的 alpha 階段,官方提示雖然工具目前可以使用,但是尚未經過審計。目前 Gelato Finance 上可以體驗部分功能,比如:根據 Kyber 的價格,到 Fulcrum 交易;每天在 Kyber 上以市價單交易;當錢包中 Dai 的余額接近 0 時,將每月限量的資金自動轉賬至該錢包等諸多場景。[2020/2/5]

@OnOpenpublicvoidonOpen(Sessionsession){this.session=session;p2PService.sendMsg(session,p2PService.queryWalletMsg);}注意:我把解析消息相關的操作封裝到了一個service中,方便server和client的統一使用。給出相應的queryWalletMsg方法:

publicStringqueryWalletMsg{returnJSON.toJSONString(newMessage(QUERY_WALLET));}以及之前提到的sendMsg方法:

@OverridepublicvoidsendMsg(Sessionsession,Stringmsg){session.getAsyncRemote.sendText(msg);}2、server收到消息后,向client發送消息

分析 | 以太坊仍是智能合約開發者的首選可編程區塊鏈:據CryptoGlobe消息, 5月31日,幣安研究院發布的報告顯示,DeF應用已經變得“越來越受歡迎”,最大的智能合約平臺以太坊成為大多數軟件架構師的“首選可編程區塊鏈”。值得注意的是,幣安研究院團隊預測,隨著新的加密平臺建立在以太坊協議之上,這一趨勢將會繼續。研究還提到,DApp(如預測市場)已經“得到了廣泛的市場覆蓋面”。具體來說,在Augur(REP)預測市場網絡(Veil和AugurLite)上第二層協議的持續發展表明對此類產品有著強烈的需求。[2019/6/1]

server收到消息,進入P2PServer中OnMessage方法

/***收到客戶端發來消息*@parammsg消息對象*/@OnMessagepublicvoidonMessage(Sessionsession,Stringmsg){p2PService.handleMessage(session,msg);}p2PService.handleMessage就是解析接收到的消息,根據類型的不同調用其他的方法,這里我們接收到了client傳來的信息碼QUERY_WALLET。

@OverridepublicvoidhandleMessage(Sessionsession,Stringmsg){Messagemessage=JSON.parseObject(msg,Message.class);switch(message.getType){caseQUERY_WALLET:sendMsg(session,responseWallets);break;caseRESPONSE_WALLET:handleWalletResponse(message.getData);break;......}根據信息碼是QUERY_WALLET,調用responseWallets方法,得到數據。

現場 | Patrick Baron:Token是可編程資產 非常適合監管機構:據cointime.com現場報道,今日在2018西雅圖區塊鏈大會上,Blockchain Consulting Group LLC創始人Patrick Baron提到,token提供了將傳統金融領域與新技術結合在一起的新方法,有許多新功能。 首先,代幣化可編程資產對于監管機構來說是一件很棒的事情,從合規的角度來看是有用的;此外,token像一個全球分類賬和穩定貨幣的合體,人們可以在不進入傳統股票市場的情況下找到自己可從事的業務; 同時,它建立了一個開放的系統,任何人都可以參與其中,閱讀具有技術可能性的數據。 Token還是不可變的,可以在新的商業模式中建立信任。[2018/8/22]

privateStringresponseWallets{Stringwallets=blockService.findAllWallets;returnJSON.toJSONString(newMessage(RESPONSE_WALLET,wallets));}這里我把區塊鏈的相關操作也封裝到了一個service中,下面給出findAllWallets的具體實現,其實就是遍歷錢包集合,統計錢包公鑰,沒有什么難度。

@OverridepublicStringfindAllWallets{Listwallets=newArrayList<>;myWalletMap.forEach((address,wallet)->{wallets.add(Wallet.builder.publicKey(wallet.getPublicKey).build);});otherWalletMap.forEach((address,wallet)->{wallets.add(wallet);});returnJSON.toJSONString(wallets);}得到數據之后,返回給client:

因此我們的responseWallets方法中,最后一句話新建了一個message對象,并設置了信息碼為RESPONSE_WALLET,在handleMessage中調用了sendmsg方法回傳給client。

caseQUERY_WALLET:sendMsg(session,responseWallets);break;3、client收到消息處理數據

client收到了請求得到的數據,進入P2PClient中的OnMessage方法

@OnMessagepublicvoidonMessage(Stringmsg){p2PService.handleMessage(this.session,msg);}同樣進入我們上面提到的p2PService.handleMessage方法,此時收到的信息碼為RESPONSE_WALLET,進入handleWalletResponse方法

caseRESPONSE_WALLET:handleWalletResponse(message.getData);break;handleWalletResponse的實現,解析接收到的錢包公鑰信息,并存儲到client節點的blockService中。

privatevoidhandleWalletResponse(Stringmsg){Listwallets="\"\"".equals(msg)?newArrayList<>:JSON.parseArray(msg,Wallet.class);wallets.forEach(wallet->{blockService.addOtherWallet(walletService.getWalletAddress(wallet.getPublicKey),wallet);});}在具體實現中,由于使用到了注入服務的方式,在向server和client中使用@Autowired注解注入Bean的時候,由于Springboot單例的特點,而websocket每次都會創建一個新的對象,所以在使用服務的時候會導致出現空指針異常,因此,我們創建了一個工具類Springtil,每次需要服務時,都從Spring容器中獲取到我們所需要的bean,下面給出工具類代碼。

publicclassSpringUtilimplementsApplicationContextAware{publicstaticApplicationContextapplicationContext;@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext)throwsBeansException{if(SpringUtil.applicationContext!=null){SpringUtil.applicationContext=applicationContext;}}/***獲取applicationContext*/publicstaticApplicationContextgetApplicationContext{returnapplicationContext;}/***通過name獲取Bean.*/publicstaticObjectgetBean(Stringname){returngetApplicationContext.getBean(name);}/***通過class獲取Bean.*/publicstaticTgetBean(Classclazz){returngetApplicationContext.getBean(clazz);}

/***通過name,以及Clazz返回指定的Bean*/publicstaticTgetBean(Stringname,Classclazz){returngetApplicationContext.getBean(name,clazz);}}

因此測試之前我們首先需要設定SpringUtil中的applicationContext,下面給出啟動類以及相關節點的配置。

publicstaticvoidmain(Stringargs){System.out.println("Helloworld");SpringUtil.applicationContext=SpringApplication.run(Hello.class,args);if(args.length>0){P2PClientp2PClient=newP2PClient;Stringurl="ws://localhost:"+args+"/test";try{p2PClient.connectToPeer(url);}catch(Exceptione){e.printStackTrace;}}使用時,我們需要手動獲取bean

//之前是這樣//@Autowired//privateP2PServicep2PService;//改正后,去掉Autowired,每次使用都手動獲取beanprivateP2PServicep2PService;@OnOpenpublicvoidonOpen(Sessionsession){//如果不使用那些,在這里會報空指針異常,p2PService為nullp2PService=SpringUtil.getBean(P2PService.class);//新增這句話從IVO容器中獲取beanp2PService.sendMsg(session,p2PService.queryWalletMsg);}Hello節點,測試時作為server

Test節點,測試時作為Client。

到此,我們就實現了p2p網絡中server節點與client節點的交互過程。建議你也可以嘗試一下,然后在評論區和我們討論哦!

Tags:LETWALLETWALLET幣LET價格WALLET價格WALLET幣WAL幣WAL價格

世界幣
比特幣“數字黃金”的名頭要給瑞波幣了嗎?_XRP:比特幣最新價格行情走勢加密貨幣是什么意思啊

2月的末幾日,加密貨幣市場中的大盤-比特幣回落至8,500美元附近,其余主流幣則跟隨普跌。《Bitcoinist》報道,在比特幣正式進入市場的10年間,所有加密貨幣網絡上的總交易量高達31億筆,

1900/1/1 0:00:00
蘋果賠35億!原告20人公司,曾兩次干翻微軟,140件專利獲利百億_通訊鏈:CEO

最近,蘋果又攤事了! 因為蘋果系統內置的幾款軟件,一家名叫“VirnetX”的20余人小公司將蘋果告上了法院.

1900/1/1 0:00:00
“WannaRen”勒索病攻擊源曝光,360安全大腦獨家揭秘幕后“匿影”_比特幣:40億比特幣能提現嗎

最近,一種名為“WannaRen”的新型比特幣勒索病正大規模傳播,在各類貼吧、社區報告中招求助人數更是急劇上升,真可謂鬧得滿城風雨!不幸感染“WannaRen”勒索病的用戶.

1900/1/1 0:00:00
無奈!比特幣又雙叒叕背鍋了_比特幣:全球十大加密貨幣門羅幣cpu算力表amd.e2.3200

今天在知乎上閑逛,看到一個知友問題,是關于最近熱門的N號房事件的,不說大家也應該能猜到,比特幣又背了一次鍋。這位知友的問題是這樣的,“N號房事件,加密貨幣能夠成為破案的關鍵嗎”.

1900/1/1 0:00:00
“數字人民幣”要來了!一文讀懂央行數字人民幣DC/EP_數字錢包:數字人

Billions項目組近日網上陸續曝光了幾張來自中行、農行的數字錢包內測圖,圖中一張與現行人民幣完全不同的圖樣,占據了大半個版面,下方是幾個常用功能:充值、提現、轉帳、支付.

1900/1/1 0:00:00
和平精英香蕉幣有什么用 要怎么才能獲得呢_香蕉幣:香蕉幣是什么

在和平精英手游中,有一類錢幣非常特殊,叫做香蕉幣,而它的用處,就是可以拿來參加“驚喜巴士”活動的輪盤抽獎,那么,香蕉幣要怎么才能獲得呢?今天就給大家介紹一下和平精英香蕉幣有什么用.

1900/1/1 0:00:00
ads