FROM : https://docs.blockstack.org/core/naming/resolving.html
本节解释如何解析BNS名称,并提供用于完成命名空间解析的方法的说明。
理解解析
查找名称的公钥和区域文件(引用)
列出节点知道的所有名称(引用)
查找一个名字所在州的历史(参考)
查找给定公钥散列所拥有的名称列表(引用)
理解解析
BNS名称绑定到公钥和大约40Kb的off-chain状态。off-chain状态被编码为DNS区域文件,其中包含用于发现用户blockstack数据的路由信息(例如用户的配置文件和应用程序数据,它们驻留在Gaia存储系统中)。
区块链不用于直接存储此信息。相反,区块链存储公钥散列和区域文件散列。在索引区块链时,每个BNS节点构建一个包含三列的数据库:所有已注册的链上BNS名称、每个名称的公钥散列和每个名称的区域文件散列。此外,每个BNS节点维护每个名称的事务历史记录。开发人员可以将名称解析为它在以前任何时间点所处的任何配置。
下边是一个从活动BNS节点中提取的示例名称表:
名称 | 公钥Hash | Zone File Hash |
---|---|---|
ryan.id | 15BcxePn59Y6mYD2fRLCLCaaHScefqW2No | a455954b3e38685e487efa41480beeb315f4ec65 |
muneeb.id | 1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs | 37aecf837c6ae9bdc9dbd98a268f263dacd00361 |
jude.id | 16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg | b6e99200125e70d634b17fe61ce55b09881bfafd |
实际上,区域文件哈希是区域文件SHA256哈希的RIPEMD160哈希,公钥是ECDSA公钥(即比特币地址)双SHA256哈希的base58check编码的RIPEMD160哈希。
BNS一致规则确保BNS名称只能在尚未被接受的情况下注册,并且只有拥有该名称私钥的用户才能更改其公钥散列或区域文件散列。这意味着名称的公钥和区域文件可以存储在任何地方,因为可以使用BNS一致规则下索引区块链发现的散列对它们进行身份验证。
BNS节点为区域文件实现一个去中心化的存储系统,称为Atlas网络。在这个系统中,BNS节点急切地相互复制它们所知道的所有区域文件,这样最终每个BNS节点都拥有所有区域文件的完整副本。
名称的公钥存储在Gaia的off-chain中。用户使用区域文件内容控制其公钥托管在何处(如果它们在线托管在任何地方)。
开发人员可以通过BNS API查询这个表。该API提供了以下路径:
查找名称的公钥和区域文件(引用)
curl https://core.blockstack.org/v1/names/muneeb.id
{
"address": "1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs",
"blockchain": "bitcoin",
"expire_block": 599266,
"last_txid": "7e16e8688ca0413a398bbaf16ad4b10d3c9439555fc140f58e5ab4e50793c476",
"status": "registered",
"zonefile": "TTL 3600\n_http._tcp URI 10 1 "https://gaia.blockstack.org/hub/1J3PUxY5uDShUnHRrMyU6yKtoHEUPhKULs/0/profile.json"\n",
"zonefile_hash": "37aecf837c6ae9bdc9dbd98a268f263dacd00361"
}
注意,zonefile字段是与散列到zonefile_hash字段的off-chain数据一起给出的。
列出节点知道的所有名称(引用)
curl https://core.blockstack.org/v1/names?page=0
[
"judecn.id",
"3.id",
"4.id",
"8.id",
"e.id",
"h.id",
"5.id",
"9.id",
"i.id",
"l.id",
"p.id",
"w.id",
"ba.id",
"df.id",
...
]
每个页面返回100个名称。虽然协议没有指定特定的顺序,但是引用实现按照区块链中创建名称的顺序对名称排序。
查找一个名字状态的历史(参考)
curl https://core.blockstack.org/v1/names/patrickstanley.id/history
{
"445838": [
{
"address": "1occgbip7tFDXX9MvzQhcnTUUjcVX2dYK",
"block_number": 445838,
"burn_address": "1111111111111111111114oLvT2",
"consensus_hash": "7b696b6f4060b792d41912068944d73b",
"op": "?",
"op_fee": 25000,
"opcode": "NAME_PREORDER",
"preorder_hash": "26bf7874706ac761afdd403ed6b3b9578fb01a34",
"sender": "76a91408d0dd44c1f0a3a4f0957ae95901929d7d66d55788ac",
"sender_pubkey": "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea",
"txid": "6730ae09574d5935ffabe3dd63a9341ea54fafae62fde36c27738e9ee9c4e889",
"vtxindex": 40
}
],
"445851": [
{
"address": "17CbHgTgBG3kLedXNneEKBkCTgW2fyrnUD",
"block_number": 445838,
"consensus_hash": null,
"first_registered": 445851,
"importer": null,
"importer_address": null,
"last_creation_op": "?",
"last_renewed": 445851,
"name": "patrickstanley.id",
"name_hash128": "683a3e1ee5f0296833c56e481cf41b77",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ":",
"op_fee": 25000,
"opcode": "NAME_REGISTRATION",
"preorder_block_number": 445838,
"preorder_hash": "26bf7874706ac761afdd403ed6b3b9578fb01a34",
"revoked": false,
"sender": "76a9144401f3be5311585ea519c1cb471a8dc7b02fd6ee88ac",
"sender_pubkey": "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea",
"transfer_send_block_id": null,
"txid": "55b8b42fc3e3d23cbc0f07d38edae6a451dfc512b770fd7903725f9e465b2925",
"value_hash": null,
"vtxindex": 54
}
],
"445873": [
{
"address": "17CbHgTgBG3kLedXNneEKBkCTgW2fyrnUD",
"block_number": 445838,
"consensus_hash": "18b8d69f0182b89ccb1aa536f83be18a",
"first_registered": 445851,
"importer": null,
"importer_address": null,
"last_creation_op": "?",
"last_renewed": 445851,
"name": "patrickstanley.id",
"name_hash128": "683a3e1ee5f0296833c56e481cf41b77",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": "+",
"op_fee": 25000,
"opcode": "NAME_UPDATE",
"preorder_block_number": 445838,
"preorder_hash": "26bf7874706ac761afdd403ed6b3b9578fb01a34",
"revoked": false,
"sender": "76a9144401f3be5311585ea519c1cb471a8dc7b02fd6ee88ac",
"sender_pubkey": "039a8948d339ecbff44cf426cb85d90fce876f1658d385cdc47f007f279be626ea",
"transfer_send_block_id": null,
"txid": "dc478659fc684a1a6e1e09901971e82de11f4dfe2b32a656700bf9a3b6030719",
"value_hash": "02af0ef21161ad06b0923106f40b994b9e4c1614",
"vtxindex": 95
}
],
"445884": [
{
"address": "1GZqrVbamkaE6YNveJFWK6cDrCy6bXyS6b",
"block_number": 445838,
"consensus_hash": "18b8d69f0182b89ccb1aa536f83be18a",
"first_registered": 445851,
"importer": null,
"importer_address": null,
"last_creation_op": "?",
"last_renewed": 445851,
"name": "patrickstanley.id",
"name_hash128": "683a3e1ee5f0296833c56e481cf41b77",
"namespace_block_number": 373601,
"namespace_id": "id",
"op": ">>",
"op_fee": 25000,
"opcode": "NAME_TRANSFER",
"preorder_block_number": 445838,
"preorder_hash": "26bf7874706ac761afdd403ed6b3b9578fb01a34",
"revoked": false,
"sender": "76a914aabffa6dd90d731d3a349f009323bb312483c15088ac",
"sender_pubkey": null,
"transfer_send_block_id": 445875,
"txid": "7a0a3bb7d39b89c3638abc369c85b5c028d0a55d7804ba1953ff19b0125f3c24",
"value_hash": "02af0ef21161ad06b0923106f40b994b9e4c1614",
"vtxindex": 16
}
]
}
以上所有信息都是从区块链中提取的。每个顶级字段都对在给定块高度转换到的名称进行编码(例如445838、445851、445873、adn 445884)。在每个块的高度,按在区块链中发现的顺序返回名称的区域文件散列。
每个名称状态都包含许多辅助数据,这些数据由其他API调用和客户端库在内部使用。本文件范围的相关范围如下:
- address:这是base58check编码的公钥散列。
- name:这是查询的名称。
- value_hash:这是区域文件哈希。
- opcode:这是处理的事务类型。
- txid:这是底层区块链中的事务ID。
返回name的整个历史记录。这包括前所有者名下的名称的历史记录(如果该名称过期并重新注册)。
查找给定公钥散列所拥有的名称列表(引用)
curl https://core.blockstack.org/v1/addresses/bitcoin/16EMaNw3pkn3v6f2BgnSSs53zAKH4Q8YJg
{
"names": [
"judecn.id",
"patrickstanley1.id",
"abcdefgh123456.id",
"duckduckgo_tor.id",
"jude.id",
"blockstacknewyear2017.id",
"jude.statism.id"
]
}
注意,这个API端点包含名称和子域名。
网友评论