项目需求#
我们的团队为 Core Registry 交付了两项新增功能。Core Registry 是 Chia Network 面向国家级碳信用登记系统开发的开源软件,这两项功能分别是:一个登记系统可以放在其公开网站上的看板,以及一个记录碳信用接收方的地址簿。
基于 Core Registry 的登记系统保存着一个国家的碳项目和碳信用,并可以把这些碳信用在 Chia 的区块链上代币化。它的记录会发布到 Climate Action Data Trust,这是一个共享的碳信用记录库,前身是世界银行的 Climate Warehouse。不丹是第一个把自己的登记系统与这一共享记录库对接的国家,它的登记系统就运行在 Core Registry 上。这款软件由 Chia 与 Climate Warehouse 团队共同构建。
对世界银行所定义系统的测试,揭示了运行它的国家接下来需要什么。这些改动由不丹王国和世界银行委托,并由 Chia 交给了我们。其中最大的两块是:在应用内和该国的公开网站上,用一个视图呈现整个登记系统;以及不再需要手动输入每位接收方的钱包地址,这件事既让人望而生畏,又容易出错。
难点:8 个代码仓库和一个已同步的节点#
在做任何改动之前,我们的团队必须先让 Core Registry 运行起来,而它由多个应用组成,并不是一个。登记系统有一个后端和一个界面,代币化引擎也一样。token driver,也就是在链上创建和销毁代币的那个组件,同时还负责运行 explorer,而 explorer 又自带一个界面。另外两个仓库把所有这些组合成一个统一的 API 和一个统一的应用。
在本地跑起一份副本,意味着让 8 个仓库协同工作:JavaScript 应用统一使用同一个 Node 版本,token driver 统一使用同一个 Python 版本,全部读取同一个共享配置文件。最底层是一个 Chia 节点,它的钱包和 DataLayer 必须先同步到 Chia 面向登记系统的测试网络,上层的任何东西才能启动。
Chia 的工程师在通话中带着我们的团队完成了环境搭建,而且他们只合并经过签名的提交。在这一切都就绪之后,我们才写下第一行新代码。
我们构建了什么:一个登记系统可以公开发布的看板#
这个看板是一个新应用,与登记系统自身的应用并列。Chia 大致勾勒了它应该展示的内容。Saif Pasha 负责设计,先在 Figma 中,然后在代码中完成。
第一页按状态给出项目数量,每个状态都链接到它在术语表中的定义。这一页还按方法学和项目类型拆分已签发的碳量,并显示登记系统自身托管的项目数量。第二页按单位类型绘制 10 年间已签发的碳量,配有状态筛选器;并按状态展示登记系统的全部碳信用,配有年份(vintage)筛选器。
登记系统之所以能把看板托管在自己的公开网站上,是因为它还可以构建为一个独立的 Web 应用。随后,Chia 的工程师把它加入了 Core Registry,使其成为这套软件的第四个应用。
地址簿,以及守在它前面的闸门#
地址簿把我们的团队带进了后端。其中最难的部分是代理。碳信用在代币化引擎中签发,而这个引擎没有数据库。由于引擎总是与登记系统一同运行,地址簿就放进了登记系统的数据库。引擎的界面仍然只与引擎通信,再由引擎把每个请求转发出去。
两个事实决定了代理的形态。签发方把碳信用发给谁属于私密信息,而登记系统也可以作为一个对公众查询开放的只读副本运行。所以代理就是一道闸门。它首先检查代币化引擎自己的密钥。只有携带正确密钥的请求,才会获得登记系统的密钥;代理从自己的配置中读取这把密钥,并在服务器端附加上去,任何浏览器都接触不到。其他请求都会被挡在闸门外,永远到达不了登记系统。
签发方看到的是一个列表。每位接收方的名称和钱包地址只需录入一次,并且可以在同一页面上编辑或删除。此后,签发碳信用只需从下拉菜单中选择一个名称,不过直接粘贴地址依然可行。
成果#
Chia 的工程师审查了每一项改动,并把它们合并进 Core Registry 的开源代码,随后 Chia 把这些成果移交给了世界银行和不丹。


随着看板作为这套软件的第四个应用落地,任何基于 Core Registry 的国家,现在都可以在自己的网站上向公众展示其登记系统的数据。它的签发方可以把碳信用发给一位只需保存并核对一次的接收方,而过去每一次签发,都要从手动输入钱包地址开始。