ZooBC 维基
集成

网关

节点在自己的端口上使用普通 HTTP,并忙于维护链。网关站在它们前面,面向公众。它持有一个域名的证书,因此浏览器通过 HTTPS 连接;它还提供人们打开的页面:钱包、区块浏览器、文件验证页面、手册和下载。网关登记在链上,因此钱包在自己的网关失效时可以找到另一个。

网关做什么

网关是由 ZooBC 安装程序设置的一个角色,是独立于节点的程序。它终结 TLS(HTTPS 背后的加密),并把 /api/v1/ 下的 API 请求转交给两个后端:

  • 首先交给归档服务,它保存深远、可搜索的历史(区块浏览器与归档节点);
  • 当归档服务以空的 404 作答、表示它没有该路由时,再交给节点。

因此,新交易最终会到达一个全节点,因为只有节点才有待处理交易的交易池。返回的答案是链自身的数据;网关只是传递它们。网关会加上自己的跨域(CORS)头,允许 GET、POST 和 OPTIONS 以及 X-API-Key 头,缓存 600 秒。

浏览器通过 HTTPS 访问网关;网关提供钱包、区块浏览器和验证页面,先询问归档服务,再回落到节点,由节点的交易池接收新交易
浏览器通过 HTTPS 访问网关;网关提供钱包、区块浏览器和验证页面,先询问归档服务,再回落到节点,由节点的交易池接收新交易

网关从不产出区块(出块只由已注册节点完成),从不持有任何人的密钥,也不兑换货币。

注册网关

所有者用 RegisterGateway(类型 36)登记网关。它记录:

  • 网关自己的密钥,写作 ZBG_…;
  • 它的域名:1 到 256 个字符,只能包含字母、数字、点和连字符;
  • 它的 URL,必须以 https:// 开头,最多 1,024 字节。

它从所有者的账户中锁定 10 ZBC(1,000,000,000 个原子单位)的质押。该金额就是经投票决定的 gateway_registration_cost,它在每条链上都从 10 ZBC 起步,只随席位的价格投票变动。

保持在列

网关通过 GatewayHeartbeat 交易(类型 37)证明自己仍在运行。每次心跳是一个 132 字节的交易体:网关密钥、一个近期区块的高度和哈希,以及网关密钥对前 68 个字节的签名。它指明的区块必须在距链顶 20 个区块以内,因此心跳无法提前准备。

链允许 240 个区块的心跳间隔,外加 480 个区块的宽限期:沉默了 720 个区块(3 小时)的网关会被设为非活跃,其所有者取回质押。所有者也可以随时用 UnregisterGateway(类型 38)退出,同样会退还质押。没有任何销毁:质押是押金,而不是付款,也不存在订阅。

每次心跳指明一个深度不超过 20 的区块,使网关保持在列;沉默 720 个区块后,网关变为非活跃,10 ZBC 的质押退还给所有者
每次心跳指明一个深度不超过 20 的区块,使网关保持在列;沉默 720 个区块后,网关变为非活跃,10 ZBC 的质押退还给所有者

任何人都可以在 GET /api/v1/registry/gateways 列出网关。该路由的答案形式取决于是由归档服务还是由节点给出。当自己的网关失效时,网页钱包会重新读取这份列表以及中继和归档服务的列表,然后转往另一个网关。每个网关还可以挂接中继。

Testnet 水龙头

在币没有价值的 testnet 上,网关还在 /faucet/ 提供水龙头。给它一个地址,它就会发送测试 ZBC。发放量随你的领取而减半:第一次请求最多 100 ZBC,然后是 50、25、12.5,依此类推,直到某次请求的发放量将少于 1 ZBC;此后直到每周重置都不会再发放。已领取的数量按地址或按互联网(IP)地址统计,因此同一连接后面的多个账户共享一个额度。水龙头是唯一一个以十进制 ZBC 而不是原子单位接收金额的地方。

它向任何受支持的地址发放,而不只是 ZBC_… 地址:比特币、以太坊或其他外部链地址同样可以,因为这些密钥可以控制 ZooBC 账户(密钥与账户类型)。测试币不能兑换成 mainnet ZBC,也没有人出售它们(devnet、testnet 与 mainnet)。

另见