GVKun编程网logo

漫画秒懂区块链(Blockchain)究竟是什么(区块链是什么术语)

33

本文将介绍漫画秒懂区块链(Blockchain)究竟是什么的详细情况,特别是关于区块链是什么术语的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于1区

本文将介绍漫画秒懂区块链(Blockchain)究竟是什么的详细情况,特别是关于区块链是什么术语的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于1 区块链(blockchain)的定义、起源与特点、200行代码实现blockchain 区块链实例详解、Awesome Blockchain 区块链技术导航、BaaS(区块链即服务Blockchain as a Service)的知识。

本文目录一览:

漫画秒懂区块链(Blockchain)究竟是什么(区块链是什么术语)

漫画秒懂区块链(Blockchain)究竟是什么(区块链是什么术语)


      区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念。从技术角度还是经济学的角度来看,区块链这种容错很强的点对点网络,恰恰满足了共享经济低成本的可信环境要求区块链对大多数人来说是个生晦的概念,今天就通过漫画以通俗易懂的形式来谈谈区块链技术。


相关阅读

  • 以太坊、以太币、比特币和区块链技术

  • 阿里和顺丰之争隐藏的区块链大战

  • 如何从技术角度理解区块链

  • 详解比特币的原理及运作机制

  • 比特币十大杀手级应用

  • 重塑世界的区块链技术




      区块链技术是指一种全民参与记账的方式。所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本。目前是各自记各自的账。






      由于没有中心化的中介机构存在,让所有的东西都通过预先设定的程序自动运行,不仅能够大大降低成本,也能提高效率。而由于每个人都有相同的账本,能确保账本记录过程是公开透明的。




      区块链技术是比特币的底层技术,比特币在没有任何中心化机构运营和管理的情况下,多年运行非常稳定,没有出现过任何问题,所以有人注意到了它的底层技术,把比特币技术抽象提取出来,称之为区块链技术,或者分布式账本技术。



      根据西班牙最大银行桑坦德发布的一份报告显示,2020年左右如果全世界的银行内部都使用区块链技术的话,大概每年能省下200亿美元的成本。这样的数据足以说明“区块链”给传统金融领域带来的巨大变革和突破。





      云计算通常定义为通过互联网来提供动态易扩展且经常是虚拟化的资源,但是提供云计算平台的往往是一个中心化机构。而区块链组成的网络一般是没有特定的机构,所以区块链更接近分布式计算系统的定义,属于分布式计算的一种。









      Q币是一种中心化的电子货币,包括总量,发行方式都是由腾讯公司控制的。而比特币的总量,发行方式都是由程序和加密算法预先设定后,在全世界的多个节点上运行,没有任何人和机构可以修改,不受任何单一人或者机构来控制。一般称Q币为电子货币,或者企业代币。称比特币为数字货币或者加密数字货币。文章转自“网优雇佣军”微信公众号,点击原文链接阅读原文。



温馨提示:
请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

听说点赞和分享的朋友都已走上人生巅峰

1 区块链(blockchain)的定义、起源与特点

1 区块链(blockchain)的定义、起源与特点


1.1 区块链的定义

百度百科:是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
维基百科:用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。
巴比特:由节点参与的分布式数据库系统,它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger)。


1.2 区块链的起源:拜占庭将军问题


拜占庭将军问题也被称为“拜占庭容错”、“拜占庭将军问题”。

拜占庭将军问题是Leslie Lamport(2013年的图灵讲得住)用来为描述分布式系统一致性问题(Distributed Consensus)在论文中抽象出来一个著名的例子。

拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。敌人的守军也很强大,足以抵御5支常规拜占庭军队的同时袭击。由于地形和补给的原因,这10支军队在分开的包围状态下同时攻击。除非有至少6支军队(一半以上)同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵骑马传递信息,来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们当中是否有叛徒被敌军收买,叛徒可能扰乱进攻计划。而这些将军们也是不完全互相信任的,不会统一聚会商讨共识,只会派使者传递消息。在这种状态下,拜占庭将军们如何才能保证有多于6支军队在同一时间一起发起进攻,从而赢取战斗?

拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问题,消息不会在传输中失真。Lamport已经证明了如果传递消息的通道不可靠(通信兵被劫持或者收买传输错误消息),那么各个节点会互相猜疑消息的可靠性而无法判断消息的真伪,从而无法达成一致性共识。

在拜占庭问题里,各军队最重要的事情是:所有平等且互不信任的将军如何能过达成一致共识去攻打敌军。

拜占庭问题的解决办法:

(1)用口头信息传达
    缺点:
    1)口头协议并不会告知消息的上一个消息来源是哪个将军,也就是消息不可追根溯源,出现信息不一致也很难找到叛徒在哪。
    2)每个将军都需要跟其他将军发送消息,这样的验证效率很低,随着节点的数量递增,整个网络的通信次数会指数上涨,使得达成共识的效率进一步下降。

(2)用书面协议
    缺点:
    1)物理距离导致信息传输延迟。
    2)可信的签名体系难以实现,签名造假没法避免。
    3)签名的信息记录保存难以摆脱中心化机构。

(3)中本聪(比特币创造者)的解决方案:blockchain+pow

利用互联网的存在,降低信心流通的时间成本。每个将军配一台电脑,解决了“书面协议”中骑马通讯造成的时间延迟问题。

中本聪要求一段时间只有一个节点可以传播信息。加入工作量证明,谁第一个完成工作,谁可以传播信息,解决了同时发起消息,造成系统混乱,行动不一致问题。

在拜占庭系统里,加入了工作量证明,发消息的前提条件就是看谁最聪明,谁就有资格第一个发起消息。

中本聪设计的比特币系统采用了工作量机制叫哈希碰撞,在一个交易块找到一个随机数,计算机只能用穷举法来找到这个随机数,一群算力相同的计算机,谁先找到答案全靠运气,在这个世界上,只有随机才是真正的公平,而实现最好的办法就是使用数学。

根据的经济学分析工作量证明其实相当于提高了做叛徒(发布虚假区块)的成本,在工作量证明下,只有第一个完成证明的节点才能广播区块,竞争难度非常大,需要很高的算力,如果不成功其算力就白白的耗费了(算力是需要成本的),如果有这样的算力作为诚实的节点,同样也可以获得很大的收益(这就是矿工所作的工作),这也实际就不会有做叛徒的动机,整个系统也因此而更稳定。

将军们那又凭什么要一起做工作量证明呢?中本聪也完全可以设置一个奖励机制,比特币的奖励机制是每打包一个块,目前是奖励12.5个比特币,当然,拜占庭将军问题的奖励机制可以是瓜分拜占庭获得的利益。

如果有出现背叛怎么办?在这个分布式网络里:
    1)每个将军都有一份实时与其他将军同步的消息账本。
    2)账本里有每个将军的签名都是可以验证身份的。
    3)如果有哪些消息不一致,可以知道消息不一致的是哪些将军。
    4)尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。
基于互联网的区块链技术,它克服了口头协议与书面协议的种种缺点,使用消息加密技术、以及公平的工作量证明机制,创建了一组所有将军都认可的协议,这套协议的出现,拜占庭将军问题也就完美的得到了解决。

对于拜占庭问题的详解,网上有很多帖子,感兴趣的童鞋可以自行百度,在此不做赘述。


So,人与人之间的信任,得交给区块链:

1.3 区块链的特点:
(1)去中心化
区块链存储数据时使用的是对等网络技术,使用分布式核算和存储,不存在中心化的硬件或管理机构。所有节点的权利和义务都相等,因此任一节点停止工作都会不影响系统整体的运作。

(2)集体维护
系统是开放的,除了交易各方的私有信息被加密外,系统是由其中所有具有维护功能的节点共同维护的,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。

(3)信息不可篡改
一旦信息经过验证并添加至区块链,就会永久的存储起来。生成一套按照时间先后顺序记录的、不可篡改的、可信任的数据库,从而可以限制相关不法行为。因此区块链的数据稳定性和可靠性极高。

(4)无须信任系统
由于节点之间的交换遵循固定的算法,参与人不需要对任何人信任,随着参与节点增加,系统的安全性反而增加。因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
 

注:本帖内容素材均为从互联网上获取整理

200行代码实现blockchain 区块链实例详解

200行代码实现blockchain 区块链实例详解

这篇文章主要介绍了200行代码实现blockchain 区块链的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧

了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上的)数据库支持主办记录日益增长的名单。但是,这也是容易混淆blockchain与我们试图帮他解决了目标 - 在人们心中的那一刻,这个词是相当强烈的交易,合同或智能cryptocurrency的概念有关。

只有在这里blockchain - 是不是一回事比特币,并理解链块的基本知识比它似乎更容易,尤其是在,它是基于源代码的情况下。在本文中,我们提出了建立与在JavaScript中200行代码的简单模型。这个项目,我们称之为NaiveChain的源代码,可以在GitHub上找到。第1部分和第2部分:如果您需要刷上它的功能,使用我们的备忘单,我们将使用标准的ECMAScript 6。
块结构

第一步 - 确定应包含块的元素。为简单起见,我们只包括最必要的:先前块的指数(指数),时间标记(时间戳),数据(数据),散列和散列,要录制,以保持电路的结构完整性。

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(); 
  } 
}
登录后复制

散列单元

哈希块需要保持数据的完整性。在我们的例子,这适用于算法SHA-256。这种类型的散列是不相关的开采,因为在这种情况下,我们并没有用表现证明实施保护。

var calculateHash = (index, previousHash, timestamp, data) => { 
  return CryptoJS.SHA256(index + previousHash + timestamp + data).toString(); 
};
登录后复制

产生单元

要生成块,我们需要知道前一个块的哈希,使我们在结构已经确定了元素的其余部分。数据由最终用户提供。

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); 
};
登录后复制

存储单元

使用blockchain 存储阵列。第一个块总是硬编码“创世纪块”。

var getGenesisBlock = () => { 
  return new Block(0, "0", 1465154705, "my genesis block!!", "816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7"); 
}; 
var blockchain = [getGenesisBlock()];
登录后复制

确认块的完整性

我们必须始终能够确认单元或电路的完整性。尤其是当你从其他单位新的单位,必须决定是否接受它们。

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 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'); 
  } 
};
登录后复制

消息到其它网络节点

该网站的一个组成部分 - 与其他节点的数据交换。下列规则用于维护网络同步:
当一个节点产生新的单元,它会报告给网络;
当本机连接到新的盛宴,他要求有关最后生成的块信息;
当一个节点正面临着一个块,其中有一个指标比他还大,他增加了一个块到电路或请求的完整链条的信息。
自动搜索同龄人不执行,所有环节都手动添加。

单元的控制

用户应该能够以某种方式控制节点,通过将HTTP服务器解决。当与节点相互作用有以下功能:
打印所有单元的列表;
创建用户生成内容的新单元;
打印列表,或添加的节日。
互动的最直接的方式 - 通过卷曲:

一个节点上的所有块#名单

curl http://localhost:3001/blocks

架构

值得注意的是,该网站是指两个Web服务器:HTTP进行用户控制的装置和向所述的WebSocket HTTP来安装节点之间的P2P连接。

如下为js 200行代码

''use strict''; 
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!!", "816534932c2b7154836da6afc367695e6337db8a921823784c14378abed4f7d7"); 
}; 
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();
登录后复制

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

NodeJS父进程与子进程资源共享原理与实现方法

vue中手机号,邮箱正则验证以及60s发送验证码的实例

Vue实现active点击切换方法

以上就是200行代码实现blockchain 区块链实例详解的详细内容,更多请关注php中文网其它相关文章!

Awesome Blockchain 区块链技术导航

Awesome Blockchain 区块链技术导航

区块链技术导航:收集整理最全面最优质的区块链(BlockChain)技术开发相关资源。
以后找不到文档资料的时候去导航站看看。

先亮个像,我长这样:
区块链技术导航

导航站内容

区块链开发所涉及的资源: 如 项目白皮书、黄皮书、SDK 文档及翻译、GitHub地址库、开发工具链、开发案例、音视频课程等。

涉及的技术有:

  1. 区块链主流技术如比特币、以太坊、超级账本、EOS
  2. 提供区块链前沿技术如跨链、侧链、Layer2、存储协议、DAG 、匿名技术

导航索引

  • 区块链技术导航
  • 区块链入门/比特币

    • 区块链入门/比特币
    • 比特币闪电网络
    • 比特币术语
    • 区块链英文术语-中文对照
  • 以太坊

    • 以太坊资源汇总
    • 开发文档
    • 以太坊扩容技术1
    • 以太坊扩容技术2
    • 以太坊术语
  • 柚子EOS
  • 超级账本
  • IPFS/FileCoin
  • DAG/树图
  • 跨链

    • 波卡 Polkadot
  • 隐私/匿名技术
  • Defi 去中心化金融
  • 技术动向
  • 课程学习
  • 区块链社区

参与贡献

本站有由一群区块链技术爱好者共同维护,欢迎大家提交内容,我们会第一时间处理,大家可以提交Issues,也可以提交Pull Request,这里还有一个份如何贡献操作指南

部分贡献者

以下排名不分先后:

  • Tiny熊
  • 虞是乎
  • Bob

尊重汗水,转载请注明来自 深入浅出区块链社区 - 技术导航站。

BaaS(区块链即服务Blockchain as a Service)

BaaS(区块链即服务Blockchain as a Service)

BaaS(区块链即服务Blockchain as a Service)



BaaS(区块链即服务Blockchain as a Service)

1. 什么是区块链服务?

区块链服务是指利用区块链产生的数据,提供基于区块链的搜索查询、任务提交,等一系列操作服务。

目前在区块链领域,只有各大公链的区块浏览器能称之为区块链服务,以及部分公链衍生应用:存证型-Factom,数字身份型-uPort等。

这些应用都有个特点,基于已存在的公链,发挥并强化公链已有的功能,让公链为大家提供更好的区块链服务。

也就是说,如果要开发一个区块链服务型应用,我们一般指在公链上开发一个应用。

2. 什么是区块链技术服务?

区块链技术服务是指利用区块链技术,去构建一个新的区块链,去替代传统互联网架构的服务。

目前在区块链领域,主要是HyperLedger,multichain,以太坊私有链等多个框架去构建多个实例,去解决已经被证明使用传统互联网技术能很好解决的问题,我一般称“强行区块链”。

这些应用也有典型特点,希望构建属于自己的区块链系统,其实称之为分布式账本技术更合适些。

在这种情况下,我更推荐一个更好的技术栈:pingcap/tidb,或者是基于PBFT协议的分布式数据库,而不是私有区块链系统。

所以我把区块链技术服务称之为 BaTS。

3. 两者区别。

两者区别在于

BaTS 专注的是技术过程,而不是产品过程,而BaaS恰恰相反,而且通常指公链服务。

举个类比例子,阿里云不是一个卖云计算技术的公司,而是一个卖云计算实例的公司。阿里云不会告诉客户如何搭建一个自己的云服务平台,而是阿里云直接构建好一堆拿来即用的实例,用户只需要为实例付费即可。

同理,BaaS应当会用户提供基于比特币/以太坊等公链的实例服务,而不是提供如何再构建区块链系统的服务。

这其实是由区块链的特性决定的,去中心化、不可篡改、公开透明等优点只有在公链才能无限放大,而在联盟链私有链的情况下迅速的退化成非合作博弈的均衡问题,已不再是技术问题了,与是不是区块链技术无关。详细见我的文章:论联盟链局限性与公有链 | blockchaindev.org

4. 为什么说区块链服务比区块链技术服务重要?

再重新设计一个HTTP协议更重要,还是利用HTTP去构建互联网应用更重要?

虽然目前比特币,以太坊,元界等公链有诸多缺陷,但是开发者不如集中精力,去解决BIP,EIP,MIP,让已经稳定的公链系统生态更加完善。(智能合约开发者并不能算作区块链开发者,算区块链应用开发者)

比特币区块链目前能够提供稳定开放的互联网数字货币服务,也有很多研发团队正在改善比特币区块链生态,如RSK(RootStock)将使比特币区块链支持智能合约,这无疑会给公链生态带来较大的促进作用。这是为了提供更好的区块链服务而改善现有区块链技术栈的绝佳案例。

5. 如何构建区块链服务?

区块链服务是指根据公链提供的基础设施开发公链应用,并运行应用提供服务。

如在以太坊上使用智能合约开发公链应用,并在以太坊节点上运行对公众提供有效服务。在比特币上,利用比特币有限的功能,提供一些存证服务。

区块链开发者应当建立有效的渠道,能够收集当前区块链的不足,并进行针对性的改进,这种过程我们称之为Improvement Proposals (改进提案):比特币隔离见证(由一系列BIP组成)就是一个很好的例子。

应用层的开发者利用IP过程可以将在使用过程中发现的问题反馈给开发者,形成一个良性循环。

且IP过程不应当仅限在技术领域,而应当深入Business Layer。

6. 对公链基础技术设施的一个预测。

全球绝大部分国家支持比特币支付,但仍有大量的商家并不懂如何搭建比特币服务端钱包,需要花费大量的力气研究公链钱包部署甚至优化,但是他们甚至没有足够的技术人员来部署配置。另外一方面,比特币/以太坊/元界的官方版钱包的LevelDB对服务端其实很不友好,根本不适合服务端应用。

大的技术平台应当着力优化各种钱包,将其变成服务端稳定可扩展的版本,绝对比提供区块链技术栈要有用得多。

希望不久将来就会有云计算平台(虽然我都和微软Azure/阿里巴巴阿里云表达过需求)提供比特币/以太坊/元界等公链的全节点服务,用户只需要付费即可使用。

未来公链的下一个发展方向肯定是轻钱包(移动端)技术,离线支付技术,公链应用开发,云计算平台提供简单易用的公链全节点实例服务,每个普通人都可以购买的专属全节点服务,利用轻支付/离线支付等手段,将主公私钥对分离,轻钱包端提供交易签名,全节点只负责验证并发送交易,这样才可以做到完美的用户级的产品。

关于漫画秒懂区块链(Blockchain)究竟是什么区块链是什么术语的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于1 区块链(blockchain)的定义、起源与特点、200行代码实现blockchain 区块链实例详解、Awesome Blockchain 区块链技术导航、BaaS(区块链即服务Blockchain as a Service)的相关信息,请在本站寻找。

本文标签: