Web轉區塊鏈
1. 如何要打造區塊鏈平台
在很多區塊鏈商業應用的案例中,我們總能看到BaaS這個字眼,BaaS是Blockchain as a Service的縮寫,中文譯為「區塊鏈即服務」。那麼區塊鏈即服務BaaS究竟是什麼?我們就帶著這個疑問跟隨著人人鏈區塊鏈技術團隊的小王來仔細的探討下。
據小王介紹:區塊鏈即服務BaaS主要是由微軟、IBM兩個巨頭提出的概念,說白了它其實就是一種新型的雲服務,一種結合區塊鏈技術的雲服務。比如微軟的Azure雲計算平台、IBM的Bluemix Garage雲平台都提供區塊鏈即服務BaaS。
區塊鏈即服務BaaS是微軟、IBM這些企業從自己的雲服務網路中開辟出一個空間,用來運行某個區塊鏈節點。和普通節點及交易所節點相比,BaaS節點的用途主要是:快速建立自己所需的開發環境,提供基於區塊鏈的搜索查詢、交易提交、數據分析等一系列操作服務,這些服務既可以是中心化的,也可以是非中心化的,用來幫助開發者更快地驗證自己的概念和模型。BaaS節點的服務性體現在:工具性更強,便於創建、部署、運行和監控區塊鏈。
2. 怎麼把我寫的代碼部署到區塊鏈中
簡單項目啟動的話一般在1秒左右你打開tomcat目錄看看webapp裡面有沒有你的項目文件夾就知道了,你用的myeclipse的話,部署很簡單,在伺服器圖標左側有個部署按鈕,把項目add到伺服器里就可以了
3. 區塊鏈技術怎麼開發,難不難
區塊鏈技術同屬於軟體開發行業,如果技術到位得話肯定是不難的,反之一竅不通那就難如登天,你可以自己衡量下 自己水平,不行就外包
4. 區塊鏈需要學多久
看你的基礎水平,如果有一定技術基礎做過開發,學習起來就相對容易些。
「鏈人學院」針對有一定編程基礎的學院開設有短期周末技術培訓課,可以考察下他們,咨詢下你的情況。
5. 作為一個區塊鏈小白,怎樣入門區塊鏈
網上基本都有,但內容參次不齊,必竟是一項新技術。深入了解可通過一些這方面研發公司和區塊鏈媒體,像和數軟體、區塊之家、和數傳媒、區塊鏈110等網站了解。希望能幫到你,望採納謝謝.
6. 如何用neo區塊鏈開發web程序
找個中控
7. 如何快速入門區塊鏈
目前市面上還沒有多少系統學習區塊鏈的視頻,自學區塊鏈還是比較難得。可以報班,黑馬程序員新開區塊鏈學科,老師以通俗易懂的授課方式,深入淺出的技術講解,肯定可以學會的哦。
8. 如何用JavaScript實現區塊鏈
<span style="font-family:Arial, Helvetica, sans-serif;">'use strict';</span>var CryptoJS = require("crypto-js");var express = require("express");var bodyParser = require('body-parser');var WebSocket = require("ws");var http_port = process.env.HTTP_PORT || 3001;var p2p_port = process.env.P2P_PORT || 6001;var initialPeers = process.env.PEERS ? process.env.PEERS.split(',') : [];class Block { constructor(index, previousHash, timestamp, data, hash) { this.index = index; this.previousHash = previousHash.toString(); this.timestamp = timestamp; this.data = data; this.hash = hash.toString(); }}var sockets = [];var MessageType = { QUERY_LATEST: 0, QUERY_ALL: 1, RESPONSE_BLOCKCHAIN: 2};var getGenesisBlock = () => { return new Block(0, "0", 1465154705, "my genesis block!!", "");};var blockchain = [getGenesisBlock()];var initHttpServer = () => { var app = express(); app.use(bodyParser.json()); app.get('/blocks', (req, res) => res.send(JSON.stringify(blockchain))); app.post('/mineBlock', (req, res) => { var newBlock = generateNextBlock(req.body.data); addBlock(newBlock); broadcast(responseLatestMsg()); console.log('block added: ' + JSON.stringify(newBlock)); res.send(); }); app.get('/peers', (req, res) => { res.send(sockets.map(s => s._socket.remoteAddress + ':' + s._socket.remotePort)); }); app.post('/addPeer', (req, res) => { connectToPeers([req.body.peer]); res.send(); }); app.listen(http_port, () => console.log('Listening http on port: ' + http_port));};var initP2PServer = () => { var server = new WebSocket.Server({port: p2p_port}); server.on('connection', ws => initConnection(ws)); console.log('listening websocket p2p port on: ' + p2p_port);};var initConnection = (ws) => { sockets.push(ws); initMessageHandler(ws); initErrorHandler(ws); write(ws, queryChainLengthMsg());};var initMessageHandler = (ws) => { ws.on('message', (data) => { var message = JSON.parse(data); console.log('Received message' + JSON.stringify(message)); switch (message.type) { case MessageType.QUERY_LATEST: write(ws, responseLatestMsg()); break; case MessageType.QUERY_ALL: write(ws, responseChainMsg()); break; case MessageType.RESPONSE_BLOCKCHAIN: handleBlockchainResponse(message); break; } });};var initErrorHandler = (ws) => { var closeConnection = (ws) => { console.log('connection failed to peer: ' + ws.url); sockets.splice(sockets.indexOf(ws), 1); }; ws.on('close', () => closeConnection(ws)); ws.on('error', () => closeConnection(ws));};var generateNextBlock = (blockData) => { var previousBlock = getLatestBlock(); var nextIndex = previousBlock.index + 1; var nextTimestamp = new Date().getTime() / 1000; var nextHash = calculateHash(nextIndex, previousBlock.hash, nextTimestamp, blockData); return new Block(nextIndex, previousBlock.hash, nextTimestamp, blockData, nextHash);};var calculateHashForBlock = (block) => { return calculateHash(block.index, block.previousHash, block.timestamp, block.data);};var calculateHash = (index, previousHash, timestamp, data) => { return CryptoJS.SHA256(index + previousHash + timestamp + data).toString();};var addBlock = (newBlock) => { if (isValidNewBlock(newBlock, getLatestBlock())) { blockchain.push(newBlock); }};var isValidNewBlock = (newBlock, previousBlock) => { if (previousBlock.index + 1 !== newBlock.index) { console.log('invalid index'); return false; } else if (previousBlock.hash !== newBlock.previousHash) { console.log('invalid previoushash'); return false; } else if (calculateHashForBlock(newBlock) !== newBlock.hash) { console.log(typeof (newBlock.hash) + ' ' + typeof calculateHashForBlock(newBlock)); console.log('invalid hash: ' + calculateHashForBlock(newBlock) + ' ' + newBlock.hash); return false; } return true;};var connectToPeers = (newPeers) => { newPeers.forEach((peer) => { var ws = new WebSocket(peer); ws.on('open', () => initConnection(ws)); ws.on('error', () => { console.log('connection failed') }); });};var handleBlockchainResponse = (message) => { var receivedBlocks = JSON.parse(message.data).sort((b1, b2) => (b1.index - b2.index)); var latestBlockReceived = receivedBlocks[receivedBlocks.length - 1]; var latestBlockHeld = getLatestBlock(); if (latestBlockReceived.index > latestBlockHeld.index) { console.log('blockchain possibly behind. We got: ' + latestBlockHeld.index + ' Peer got: ' + latestBlockReceived.index); if (latestBlockHeld.hash === latestBlockReceived.previousHash) { console.log("We can append the received block to our chain"); blockchain.push(latestBlockReceived); broadcast(responseLatestMsg()); } else if (receivedBlocks.length === 1) { console.log("We have to query the chain from our peer"); broadcast(queryAllMsg()); } else { console.log("Received blockchain is longer than current blockchain"); replaceChain(receivedBlocks); } } else { console.log('received blockchain is not longer than received blockchain. Do nothing'); }};var replaceChain = (newBlocks) => { if (isValidChain(newBlocks) && newBlocks.length > blockchain.length) { console.log('Received blockchain is valid. Replacing current blockchain with received blockchain'); blockchain = newBlocks; broadcast(responseLatestMsg()); } else { console.log('Received blockchain invalid'); }};var isValidChain = (blockchainToValidate) => { if (JSON.stringify(blockchainToValidate[0]) !== JSON.stringify(getGenesisBlock())) { return false; } var tempBlocks = [blockchainToValidate[0]]; for (var i = 1; i < blockchainToValidate.length; i++) { if (isValidNewBlock(blockchainToValidate[i], tempBlocks[i - 1])) { tempBlocks.push(blockchainToValidate[i]); } else { return false; } } return true;};var getLatestBlock = () => blockchain[blockchain.length - 1];var queryChainLengthMsg = () => ({'type': MessageType.QUERY_LATEST});var queryAllMsg = () => ({'type': MessageType.QUERY_ALL});var responseChainMsg = () =>({ 'type': MessageType.RESPONSE_BLOCKCHAIN, 'data': JSON.stringify(blockchain)});var responseLatestMsg = () => ({ 'type': MessageType.RESPONSE_BLOCKCHAIN, 'data': JSON.stringify([getLatestBlock()])});var write = (ws, message) => ws.send(JSON.stringify(message));var broadcast = (message) => sockets.forEach(socket => write(socket, message));connectToPeers(initialPeers);initHttpServer();initP2PServer();