美文网首页blockstackblockstack-Trans
naming-Atlas-How to Use the Atla

naming-Atlas-How to Use the Atla

作者: 空乱木 | 来源:发表于2019-08-07 07:17 被阅读1次

FROM : https://docs.blockstack.org/core/atlas/howtouse.html

本节教你如何使用Atlas集网络,它包含以下部分:

API
查找块
添加新块
传播块

The API

虽然Blockstack软件栈期望atlashost承载的数据由DNS区域文件组成,但Atlas本身并不强制执行这一点(它也不关心块的格式)。它被设计为一个通用的块存储。尽管如此,Atlas作为DNS区域文件存储数据的普遍使用对其API设计字段和方法名产生了影响,这些字段和方法名经常暗指区域文件和区域文件散列。这是故意的。

公共BNS API端点不支持解析不编码Gaia路由信息或子域信息的Atlas块。为了与Atlas直接交互,开发人员需要安装Blockstack Core并为这些示例使用它的Python客户端库。

查找块

所有Atlas块都由块数据的SHA256哈希的RIPEMD160哈希来寻址。客户机可以在一次RPC调用中查询多达100个块。

客户端可以使用get_zonefiles()方法查找块。如果成功,返回的有效负载将是一个dict,带有一个zonefiles键,该键将块哈希映射到它们各自的数据。

import blockstack
data = blockstack.lib.client.get_zonefiles('https://node.blockstack.org:6263', ['1b89a685f4c4ea245ce9433d0b29166c22175ab4'])
print data['zonefiles']['1b89a685f4c4ea245ce9433d0b29166c22175ab4']
ORIGIN duckduckgo_tor.idTTL 3600
tor TXT "3g2upl4pq6kufc4m.onion"

(这个特殊的块恰好与BNS名称duckduckgo_tor.id相关联)。

添加新块

向Atlas添加块的唯一方法是通过BNS中的on-chain名称。添加一个新的块需要两个步骤:

  • 名称所有者通过NAME_REGISTRATION、NAME_UPDATE、NAME_RENEWAL或NAME_IMPORT事务将块散列声明为名称的状态。
  • 一旦事务被BNS确认和处理,名称所有者将广播匹配的区域文件。

将名称的状态设置为块的散列超出了本文档的范围,因为它需要通过BNS客户端来完成。要做到这一点,请参阅Blockstack .jsBlockstack浏览器的相关文档。

一旦名称操作被确认,您就可以向Atlas网络公布数据。你可以用Python客户端这样做:

import blockstack
import base64
data = "..." # this is the chunk data you will announce
data_b64 = base64.b64encode(data)
result = blockstack.lib.client.put_zonefiles('https://node.blockstack.org:6263', [data_b64])
assert result['saved'][0] == 1

在一个RPC调用中最多可以声明五个块。注意,数据必须以base64编码才能被公布。

当put_zonefiles()方法成功时,它返回一个dict,其中保存的键下有一个列表。在这里,如果节点保存了给put_zonefiles()的第i个块,那么result['saved'][i]将为1,如果没有保存,则为0。如果数据块太大,或者还没有处理包含数据块哈希的name操作,节点将不会保存数据块。

put_zonefiles()方法是幂等的。

传播块

Atlas对等点将存储您声明的块的副本。在后台,它们将异步地向彼此宣布它们有哪些块可用,并以最稀有的顺序彼此复制(很像BitTorrent的工作方式)。最终,每个Atlas的对等点都将接收到数据块。

但是,开发人员可以通过急切地传播块来加速这个过程。要做到这一点,他们可以向一个Atlas对等点请求它在Atlas对等点图中的近邻,并将数据块复制到它们中的每一个。

例如,这段代码不仅将块复制到https://node.blockstack.org:6263,还将复制到它的近邻。

import blockstack
import base64
data = "..." # this is the chunk you will replicate widely
data_b64 = base64.b64encode(data)

result = blockstack.lib.client.get_atlas_peers('https://node.blockstack.org:6263')
neighbors = result['peers']
print ", ".join(neighbors)
13.65.207.163:6264, 52.225.128.191:6264, node.blockstack.org:6264, 23.102.162.7:6264, 52.167.230.235:6264, 23.102.162.124:6264, 52.151.59.26:6264, 13.92.134.106:6264

for neighbor in neighbors:
... result = blockstack.lib.client.put_zonefiles(neighbor, [data_b64])
... assert result['saved'][0] == 1
...

严格来说,这并不是必需的,但它确实有助于加速块复制,并降低了由于单个节点故障而丢失块的可能性。

相关文章

网友评论

    本文标题:naming-Atlas-How to Use the Atla

    本文链接:https://www.haomeiwen.com/subject/tgnwdctx.html