MNID:在多链情景中更安全的区块链地址编码方式

以太坊地址本身不支持多个不同的网络

目前来看,有至少7个 以太坊为基础的公有链(应用)和一系列的私有链或许可链。如果有人给你一个常规的地址如0x00521965e7bd230323c423d96c657db5b79d099f,然后你向它发送资金,你真的知道这些资金会发往何处吗?

1-6r1_9DSAr7FyZX3Uj2GLvQ.png

简单回答是不知道。如果地址是由加密密钥生成的,它可以在网络中使用。如今和未来,绝大部分你打交道的地址很有可能是那些只存在其中一个网络中的智能合约地址。因此,这要求uPort平台能够了解一个(身份)标识所存在的网络。

让我们来阐明问题。今天,如果你从自己的主网以太坊地址发送1000个ETH来购买一种在Ropsten或者Kovan测试网络的代币,ETH就会从此消失。你会丢失1000个ETH,没有人可以(帮助你)做什么。这是向错误的网络中发送交易时真实发生的事情。

在uPort中,我们正在尝试建立简单的标识和交易基础架构,允许普通人能够标识自己并与dApps&智能合约进行交互。正常用户不需要明白Mprden,Kovan,Main -net 或者 Rinkeby的区别。uPort会保护它的用户免受错误。换句话说——平台会正常工作。

比特币协议使用Base58Check编码来防止这个问题。然而,Ethereum社区希望通过诸如ENS等更高层次的方案来解决这个问题。但是,即使是ENS,也没有人能够真的预见到我们目前所拥有的不同测试网络的数量。

随着uPort正在计划支持多个网络以及主要网络,我们急需解决这个问题。

多网络标识符(MNID)

我们的提案灵感来自Base58Check编码以及EIP77,但是添加一个网络标识符,它允许我们以编程方式提取地址使用的网络,并提供所使用网络的可视化指示器。

下面的项目被编码:

  1. 1个字节的当前版本编号
  2. 网络id或者4个字节的genesis区块hash
  3. 实际的地址
  4. 4个字节(32bits)的基于SHA3的错误检查码(版本,网络和有效载荷的摘要)

然后使用base58编码最终结果。最终的结果是相当完整的,我们比以前的任何解决方案都更安全,而且在未来仍然可以扩展。我们一开始简单地使用网络ID,并在未来将其替换为enesis区块哈希和其他元数据。

Examples

下面的以太坊十六进制编码地址0x00521965e7bd230323c423d96c657db5b79d099f可以被编码成下面这样:

* main-net: 2nQtiQG6Cgm1GYTBaaKAgr76uY7iSexUkqX
* ropsten: 2oDZvNUgn77w2BKTkd9qKpMeUo8EL94QL5V
* kovan: 34ukSmiK1oA1C5Du8aWpkjFGALoH7nsHeDX
* infuranet: 9Xy8yQpdeCNSPGQ9jwTha9MRSb2QJ8HYzf1u

可扩展性

这是设计来参与Ethereum区块链工作的,但是实际上没有什么理由不能用于其他区块链,甚至是未来的非区块链的标识符。

将分片标识符,分叉描述符(区块号和散列)等添加到地址上是很容易的。 编码与链上地址无直接关联的其他类型的身份也是十分容易的。

MNID and the uPort Mobile App

现在使用uPort Mobile App来创建的新标识都会自动创建一个MNID作为它的主标识。

我们知道很多人正在忙于将uPort整合到您当前的应用程序中,我们不希望为您增加额外的负担如果你很忙,因此您当前的uPort身份保持不变,并且表现相同。

我们很快会提供选择,允许你切换现存的标识为MNID格式。

MNID and the uPort javascript libraries

我们已经发布一个容易使用的MNID javascript库。更新的uport-lite,uport-connect和uport npm软件包,也可以透明地处理十六进制和MNID格式的地址。

Why did we build this?

在Ropsten被垃圾交易攻击的时候,我们需要考虑支持许多新网络,同时保持主平台正常。 这个事件加速了MNID的发展。

赞 (0)

添加新评论