名称集市 - 技术概览
一.看看名称集市的后台
10月24日,district0x团队发布了“名称集市”(Name Bazaar),这是一个点对点的交易市场,用于通过以太坊名称服务注册的名称交易。到目前为止,市场运行良好,我们收到了很多积极的反馈,所以在这篇文章中,我想分享一些我们的设计决策并深入研究“名称集市”究竟是如何在后台实际运作的。
二.智能合约
正如你可能已经猜到的那样,名称集市的核心是以太坊智能合约。以下是其智能合约的高级架简化图。
一个产品只是一个智能合约,以去信任化的方式协调一个ENS名称的交易。目前,我们支持两种类型的产品:立即购买、固定价格交易和拍卖。
产品注册(OfferingRegistry):一种中心化的智能合约,每创建一个新产品或现有产品改变状态时,它都会收到通知。这主要是帮助我们的服务器跟踪区块链上发生的与所有产品相关的事件。产品注册还可以作为紧急中断,通过使用我们的紧急多重签名钱包来触发暂停功能,如果发现有严重漏洞,我们可以立即停止所有已部署的产品合约的交易。在这种情况下,所有权和资金将逐一归还给原所有者。
拍卖产品工厂(AuctionOfferingFactory),立即购买产品工厂(BuyNowOfferingFactory):这些合约用于将新的产品合约部署到区块链上。这些已部署的合约不包含任何真正的逻辑,它们只是将所有的函数调用转发给“真实的”产品合约的代理合约,但仍处于存储状态。由于这一点,创建一个产品是非常高效的并且代码不会在区块链上重复。要了解更多关于这种模式的信息,请查看Manuel Araoz写的Solidity中的代理库。
转发器(Forwarder):一个非常小的代理智能合约,可以将所有的调用委托给拍卖产品或立即购买产品。我们的前拜占庭实施是从阿拉贡的存储库中借鉴的,所以对我们的朋友非常赞赏!
拍卖产品工厂,立即购买产品工厂: 这些合约包含产品逻辑,转发器委托调用。这些只由district0x部署一次。
除了这些合约,名称集市还利用了其他几个不重要的智能合约来交易:
- 产品要求:这个合约持续跟踪要求出售名称的用户地址,所以我们有最需要的名称的指示,并且一旦请求的名称被提供,允许我们通过电子邮件通知他们。
- 地区邮件:一个非常简单的合约,在此用户可以将他们的地址与他们的加密电子邮件相关联以接收通知。只有我们的邮件服务器可以解密电子邮件地址。该计划是在所有的地区重新使用这个合约,所以用户不需要为每个地区设置合约。当一个更强大的解决方案出现在主网时,如uPort,我们将转向那个方案。
如果您想看到名称集市的智能合约的完整列表,您可以在这里找到它们。
三.系统架构
名称集市有一个由三个主要部分组成的半去中心化结构。
四.服务器
我们的服务器与区块链同步,并以友好搜索的格式构建内存数据库。然后,用户界面可以向服务器发出请求,例如“给我10个以最昂贵的价格订购的以汽车开始的产品”。直接向区块链提出这样的请求是不可能的。该服务器总是只返回产品的地址,然后用户界面直接从区块链加载产品的数据。这有助于我们减少服务器负载,并且也更加去中心化。
据说,未来我们计划使服务器同步代码也可以在用户界面中加载,因此,在本地运行区块链节点的用户将能够切换到“完全去中心化模式”,并以他们的浏览器为背景建立一个友好搜索的数据库,根本不依赖于我们的服务器。对于那些不关心去中心化的用户来说,只要连接到我们的服务器,就会有方便的选择。我们计划在所有地区采用这种模式,而不仅仅是名称集市。对于我们的服务器代码以及我们目前使用sqlite3的内存数据库,我们都是用Clojurescript编译成Node.js。
五.用户界面(UI)
在district0x,我们特别注意提供完美的用户体验和令人眼前一亮的用户界面。鉴于此,名称集市的大部分代码库实际上都是UI代码。
使用名称集市,我们引入了交易日志,一个位于界面右上角附近的便捷面板,用于跟踪用户的交易,显示有用的信息,例如对平台上的操作进行人类可读的描述。这有助于用户了解他们的交易状态,消除了等待交易处理的过程,以便能够进一步与UI进行交互。
对于UI代码,我们使用Clojurescript时,同时在后台使用ReactJS和SemanticUI。我们的UI文件可以在这里通过IPFS访问,也可以通过我们的服务器访问。
六.区块链
所有用户数据仅以事件或状态数据的形式存储在区块链中。 名称集市的当前功能不需要存储大量数据,因此IPFS集成尚不需要。
进一步开发
为名称集市的未来提供一个潜行高峰,下面是按时间顺序准备的主要特点清单:
• 注册新的ENS名称
• 管理自有的ENS名称
• 更容易谈判价格的评估系统
• 改进的产品