卡尔达诺结算层浏览器

正如之前提到的,浏览器是一个在卡尔达诺网络中搜索卡尔达诺结算层转账地址,时间区间(epochsslots)信息的服务。

浏览器后端工作流

浏览器利用命令行参数选项启动。所有支持的选项都可以通过 cardano-explorer --help 命令查看。

然后,浏览器通过 cardano-sl 库运行『内部节点』。因此我们可以把浏览器当做有着两个特殊插件 explorerPlugin, notifierPlugin 的普通节点。

第一个插件用于浏览器 web API,第二个启动通知服务器,这个基于 websocket 的服务器通知前端关于区块/转账的修改。

浏览器后端 API

目前,浏览器后端 Web API 提供了一系列从卡尔达诺网络获取信息的方法。servant 库提供了很多构建 API 的方法模块。该库使用组合器来构建 HTTP 原子操作,并将这些原子方法组合在一起形成更大,更完整的 API。

HTTP API

浏览器 web api 在这里定义。如果事件请求失败,则有一个 ExplorerError 类型,它简单地封装在 Text 里面,以显示发生了什么。

浏览器 Web API 的文档可以在这里找到。

socket.io API

目前我们有这些事件客户可以订阅到:

data ClientEvent
    = Subscribe Subscription
    | Unsubscribe Subscription
    | CallMe

订阅可以是以下事件:

data Subscription
    = SubAddr
    | SubBlockLastPage
    | SubTx

相应的服务器事件是:

data ServerEvent
    = AddrUpdated
    | BlocksLastPageUpdated
    | TxsUpdated
    | CallYou

用户可以调用所需的事件并订阅它们:

var client = require('socket.io-client');
var socket = client('http://localhost:8110');

socket.on('CallYou', function(msg){ console.log(msg); })
socket.emit('CallMe', 'test');

你也可以尝试运行 purescript repl(pulp psci ),尝试一下事件:

import Prelude
import Control.SocketIO.Client
import Control.Monad.Eff.Console

let socket = connect "http://localhost:8110"

socket >>= \soc -> emit soc "CallYou" "test"