DelegateCall.com
人们一直在问我们如何在区块链上构建高性能的社交媒体网站,如DelegateCall或Steemit。
Steemit是区块链上的原始社交网络,使用来自Reddit和Medium的一些功能。 当我们设计DelegateCall时,我们从Steemit学到了很多东西,并且往前更进一步。
从用户的角度来看,最重要的事情之一是快速和交互式的前端,具有搜索、标签和通知等功能。 在以太坊上,用Solidity做这些要不就是不可能,要不就是极度困难。
所以,这最终导致我们为DelegateCall创建了一个辅助链下索引层。
在区块链上进行搜索——DelegateCall界面
索引是什么?
索引是将数据从区块链存储到更高性能的辅助数据库中。我们从智能合约中收集事件,然后将它们发送到队列中。接着,我们让这个队列的监听者将事件插入到各种数据库中。这样,我们就可以使用缓存版本的数据在网页上显示。在未来,我们甚至可以在辅助索引中执行诸如存储证明之类的操作,以便轻区块链客户端可以对其进行验证。
Etherscan & Infura
以太坊主网同样允许这种做法,Etherscan就是最好的例子。这是一个为所有以太坊的事务和区块提供索引并可供任何人查看的网站。当你使用它时,你并不是在实时查询区块链,而是在查看它的缓存。
Etherscan界面
Infura是第二个例子。它是一个完整的Web3 API用来缓存完整的以太坊区块链。许多开发人员都在网页上使用它,以便能够读取区块链而无需直接与其交互。
代码示例:发送事件
现在,让我们来直接看看代码。
注意:这篇文章并打算作为教程,更多的是对该功能的高度概述。所以我们不会逐行分解代码。
如果你想看的是偏教程类的,你可以跳到下面的示例DApp。
从Go智能合约发送事件:
从Solidity发送事件:
订阅事件
想订阅事件并将它们索引编入另一个数据库中,可以使用WebSockets或Redis队列。
通过WebSockets订阅
Loom SDK查询端点也可用于订阅事件流。以下是使用命令行和wscat CLI的示例订阅代码:
wscat CLI
另外一个用Web3 WebSockets的Node.js示例:
用WebSockets的Node.js事件
我们同样也可以通过Redis队列来订阅。
默认情况下,loom-sdk只会将事件发送到日志。要将其配置为将其发送到Redis有序集合,将以下这一行添加到loom.yaml配置文件中。
这个会开始将事件发送到Redis服务器的一个名为loomevents的有序集合中。每个事件都会被添加到有序集合中,按照各自的区块链高度排序。
示例DApp:社交网络网站
我们构建了一个示例社交网络DApp,用户可以在上面写评论,其他用户可以对其进行评论。
下载源代码:https://github.com/loomnetwork/solidity-social-example
评论存储在Loom DApp链上,我们又一个Node.js后端,它监听WebSocket并将数据索引到Elasticsearch中。
DApp链上的社交网络应用示例。评论被写入DApp链中,并在Elasticsearch中进行索引以方便快速读取。
注意,Node.js服务和Elasticsearch索引层是在链下的,但所有事务都是直接发送到DApp链。
Elasticsearch索引层作为支持快如闪电般读取的补充服务,使DApp能像任何Web2.0网站一样高性能。
去下载源代码看看吧!
还有一件事……
我们的Loom SDK马上就要准备好了!下一站黑客马拉松也许在你的城市!
我们在Loom Network有太多让人激动的事情发生了,都快要hold不住了!
在六月份,我们将向公众发布我们的Loom SDK。这将是开发者轻松构建和部署可扩展DApp及游戏的最简单方法,他们无需再执行大量繁重的工作。
还有,我们正在准备一些Hackathon(北京和上海将在六月下旬举行)。在这些活动中,我们将向游戏和区块链开发者们独家介绍Loom SDK的功能。
我们在东京的第一个Hackathon取得了巨大的成功,同时也看到了一些极有天赋的团队的项目原型!想了解更多,请看这里。
所以,如果你的生活已经离不开代码了,欢迎来参加我们的活动!
下次再见!
加入我们的僵尸大军
电报私人聊天室(中文社区):https://t.me/loomnetworkcn
想要学习写属于你自己的DApp代码:https://cryptozombies.io/zh
中文版medium:medium.com/loom-network-chinese
领取专属 10元无门槛券
私享最新 技术干货