FROM : https://docs.blockstack.org/core/naming/register.html
本节解释注册BNS名称,并为您可以用来理解命名空间注册成本的方法提供说明。
了解注册
查询名字登记费(参考资料)
获取当前共识散列(引用)
注册一个名字
了解注册
注册一个BNS名称需要使用加密货币。这项费用有两个来源:
- Transaction fees:这是存储到区块链本身的事务数据的成本所产生的费用。它们独立于BNS,因为区块链的所有用户都在竞争将其事务包含在下一个块中。区块链的矿商收取交易费。
-Registration fees:每个BNS名称空间对一个名称的成本收取额外的费用。注册费用在名称空间存在的第一年发送到名称空间创建者,然后发送到burn地址。每个名称的注册费不同,由名称空间本身决定,但是用户可以提前查询。
注册一个名称需要两个事务。它们是:
-
NAME_PREORDER事务:这是要发送的第一个事务。它告诉所有BNS节点BNS名称的咸散列,并将注册费支付给名称空间所有者的指定地址(或burn地址)。此外,它还通过在事务中包含最近的一致散列向BNS节点证明客户端知道系统的当前状态(有关详细信息,请参阅BNS fork一节)。
-
NAME_REGISTRATION事务:这是要发送的第二个事务。它向所有BNS节点显示salt和名称,并为名称分配初始公钥散列和区域文件散列
这个过程需要两个事务的原因是为了防止提前运行。BNS共识规则规定,只有在其匹配的预订交易在过去24小时内发送时,才能注册名称。因为一个名字之前必须收到注册,有人看区块链的对等网络不能种族受害者宣称他们试图注册名称(即攻击者需要先发送NAME_PREORDER事务,并将不得不在24小时前发送它)。
名称以先到先得的方式登记。如果两个不同的人试图同时注册相同的名字,最先完成这两步流程的人将收到这个名字。另一个人的NAME_REGISTRATION事务将被忽略,因为此时它将被认为无效。由NAME_PREORDER支付的注册费将会丢失。然而,这种情况在实践中很少见——截至2018年初,我们只知道该系统在3年多的运行中有一个被证实的实例。
全限定名的长度可以在3到37个字符之间,由字符a-z、0-9、+、-、_和..这是为了防止同伦攻击。不符合此要求的NAME_REGISTRATION事务将被忽略。
查询名字登记费(参考资料)
$ curl -sL https://core.blockstack.org/v1/prices/names/helloworld.id | jq -r ".name_price"
{
"btc": 2.5e-05,
"satoshis": 2500
}
注意使用jq -r选择“name_price”字段。这个API端点可能返回关于交易费用估计的其他辅助数据,但这是该规范保证出现的惟一字段。
获取当前共识散列(引用)
$ curl -sL https://core.blockstack.org/v1/blockchains/bitcoin/consensus
{
"consensus_hash": "98adf31989bd937576aa190cc9f5fa3a"
}
共识散列必须包含在NAME_PREORDER事务中。BNS客户端自动执行此操作。有关如何在事务中包含此内容的详细信息,请参阅事务格式文档。
注册一个名字
注册通过BNS客户端进行,例如Blockstack浏览器或Blockstack .js。参考BNS客户端管理一个本地比特币钱包,动态自动计算交易费用,并在正确的时间广播NAME_PREORDER和NAME_REGISTRATION交易。
如果您想创建自己的注册客户端,您应该看到事务格式文档。
网友评论