Substrate应用开发解析:Subsocial架构解析(上)

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册
币安app

binance币安交易所

币安交易所app是全球排名第一的虚拟货币交易所,注册领取盲盒礼包!

APP下载   官网注册

前言本Substrate应用开发解析系列,主要选择优秀的面向具体应用的项目进行解析,总结经验,整理模式,给其它项目方以启示,并将Substrate的应用推广到更多场景。

本次我们选择Subsocial项目进行解析。

Subsocial项目介绍Subsocial自己的一句话介绍是:“An open platform for decentralized social networks and marketplaces. It's censorship-resistant and has built-in monetization methods. Built with Polkadot and IPFS tech stack.” 一个面向分布式社交网络和市场的开放平台。它抗审查,并内置铸币方式。它构建在Polkadot和IPFS技术栈上。

Subsocial是目前Substrate生态历史最久,(相对)最成熟的社交网络应用。你可以把它想象成分布式的Reddit、Blog、Medium。使用Subsocial,你可以为每个社交类应用跑一个链。

据其官网所说,为何要选择Subsocial,是因为当今的社交网络有如下问题,而Subsocial致力于解决这些问题:- 全球审查- 不公平的变现方式- 网络效应的垄断- 缺少可定制性- 算法独裁

Subsocial项目将自己定位为一个社交网络平台,同时也是一个社交网络框架。用户可以用subsocial启动自己的社区网络,并(理想情况下),以平行链的形式接入未来上线的Polkadot网络。

Subsocial的仓库项目情况Subsocial官方仓库在https://github.com/dappforce。其下有几个主要的仓库:1. Subsocial-node:substrate开发的链节点2. Subsocial-offchain:subsocial链下枢纽,处理链下业务3. Subsocial-js:与subsocialnode打交道的js库,负责rpc通信及上层的封装4. Subsocial-web-app:前端UI5. Subsocial-docs:相关文档6. Subsocial-flutter:fluttersdk,用于手机端UI7. Subsocial-starter:启动脚本,用于启动和运维

整个Subsocial工程,除了链节点之外,还由好几个组件共同组成。下面一节会解释这些组件之间的关系。

Subsocial的架构图及解释Subsocail官网给出的分层架构图如下:

[图片]

上图中,只有Substrate和IPFS层是协议必备组件,其它部分是可选的,但可用于优化整体的交互体验。

经过对Subsocial结构深入分析,我们整理出如下总体架构图:

[图片]

各个组件的功能如下:- IPFS组件用于存放Subsocial平台的图片文件和所有内容数据;- Subsocialnode存储各种模型和其索引;- Subsocialoffchain是各种链下逻辑的枢纽;- PostgreSQL用于存储feed,notifications,activities信息。访问这些信息不走ipfs和Subsocialnode;- ElasticSearch用于搜索spaces,posts,comments,profiles信息。搜索请求,直接访问这里;

写的过程(以创建一篇Post为例,假设你已经登录):1. 用户WebApp发起请求到SubsocialOffchain,运行ipfs/add,将Post整个结构添加到ipfs服务器中(如果Post内容中包含image,则是先在浏览器中请求ipfs/addFile,再将返回的文件hash值放入Post结构中);2. 从ipfs正常返回后,SubsocialOffchain将ipfs生成的Posthash值(也就是cid)返回给WebApp;3. WebApp将cid信息与Post的其它结构信息一起,向Subsocialnode发起一个transaction。这时会调起你的Polkadot浏览器插件进行签名。每发起一次成功的交易,会扣除掉你的账户中的一部分金额(注册后会有水龙头给你一部分SUBtoken);4. 交易执行后,会从Subsocialnode中抛出Event,SubsocialOffchain会监听Subsocialnode,并获取到这些Event,然后进行处理,并将Event中的相关信息写到PostgreSQL和ElasticSearch中;5. 这样写过程就完成了。

读取一篇Post的过程:1. 对于刚创建的Post,其cid会缓存在WebApp,于是用户发起ipfs/get请求到SubsocialOffchain;2. SubsocialOffchain直接去ipfs服务器上取回数据(是一个Json),返回给用户;3. WebApp将Json数据渲染出来;

首页加载过程:1. 用户访问https://app.subsocial.network/,加载静态资源到Browser;2. WebApp建立rpc.subsocial.network连接,使用jsonrpc协议,这个连接直接连接到Subsocialnode上,通过Substrateruntimeapi获取信息;3. 通过rpc从Subsocialnode获取一些初始信息(链上的信息);4. 通过调用20次state_getStoragerpc方法从Subsocialnode中取出20条Post索引信息,返回回来是编码后的数据;5. WebApp解码,得到最近20篇Post的cid;6. 发请求到https://app.subsocial.network//offchain/v1/ipfs/get,这个请求经SubsocialOffchain节点转发到ipfs节点,从ipfs节点取回这20篇文章的json结构;7. 这些json数据经SubsocialOffchain中转后,返回给WebApp;8. WebApp对这些数据进行前端渲染;9. 还有一些其它数据请求,也是类似的模式;10. 页面呈现完毕。

由上图结构可以看到,SubsocialOffchain会启动一个WebServer,并同时维护4个连接(不全是长连接):1. 与IPFSnode的连接2. 与Substratenode的连接,订阅substrateevent3. 与Pgdb的连接4. 与es的连接

以上就是Subsocial这个项目的总体架构。

一些选择由于Subsocial项目立项时间比较早。在代码里面:- Runtime尚未更新到v3写法- 没有使用substrate提供的offchainworker和offchainstorage特性

一些不足从架构图可以看到,Subsocialoffchain这一个独立的nodejs项目占据整个系统的一个核心位置,而其是需要独立运维的,并没有纳入Substratenode一起实现自动去中心化。在这一点上,显得不是那么Web3.0,还有改进空间。

前端Js体验不够好。加载数据慢,js执行有时会卡死浏览器。

数据加载上的一些优化点,比如:首页一次性直接加载了最近20条Post信息,是全文,没有做摘要

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/14274.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年07月12日
下一篇 2023年07月12日

相关推荐

  • 区块链 数据怎么存储,区块链里的数据怎么保存

    一、区块链里的数据怎么保存***区块链怎么存储区块链技术中数据的储存方式是怎样的?简单的来说,区块链的数据储存是通过区块通过公式算法过程后被正式纳入区块链中储存,全网节点均表示接受该区块,而表示接受的方法,就是将区块的随机散列值是为最新的区块散列值,兴趣快的

    2025-04-09 13:30:01
    16 0
  • 币数据是什么东西,数字货币的数据是什么意思

    一、数字货币的数据是什么意思数字货币是指基于密码学以及网络、计算机等技术手段所发行和使用的一种货币。它是一种完全去中心化、匿名性极高、交易速度快、交易费用低廉的全新货币形态。数字货币的发展,不仅有助于提高货币流通效率,还可以大大降低支付成本,同时更具有安全

    2025-04-06 08:00:01
    21 0
  • 比特币如何下载数据,什么是比特币比特币如何产生的

    一、如何才算拥有比特币从比特币的本质说起,比特币的本质其实就是一堆复杂算法所生成的特解。特解是指方程组所能得到有限个解中的一组。而每一个特解都能解开方程并且是唯一的。以钞票来比喻的话,比特币就是钞票的冠字号码,你知道了某张钞票上的冠字号码,你就拥有了这张钞

    2025-03-28 20:30:01
    31 0
  • 灰度基金数据在哪里看,灰度基金是什么

    一、灰度基金持有的数字货币有哪些灰度基金持有的数字货币有: BTC(比特币)、BCH(比特币现金)、ETH(以太坊)、ETC(以太经典)、ZEN、LTC(莱特币)、XLM(恒星币)、XRP(瑞波币)、ZEC(大零币)。灰度基金则是由灰度公司在2013年创立的专用于管理加密资产的信托基金(

    2025-03-21 05:00:01
    32 0
  • 怎么看挖以太矿数据,以太坊怎么挖矿

    一、以太坊是如何挖矿的以太坊的代币是通过采矿过程中产生的,每块采矿率为 5个以太币。以太坊的采矿过程几乎与比特币相同,对于每一笔交易,矿工都可以使用计算机通过散列函数运行该块的唯一标题元数据,反复,快速地猜出答案,直到其中一人获胜。许多新用户认为,采矿的唯一

    2025-03-16 20:30:01
    36 0
  • ipfs怎么查看测试网数据,IPFS如何解决数据存储之痛

    一、IPFS 是如何解决数据安全的问题的IPFS是一种分布式存储协议,它的目标是取代传统的中心化的数据存储访问模式。IPFS的存储数据的模式,开创了一种全新的安全储存模式,对所有内容进行加密,有效地保证了数据的安全,保护了用户的隐私。IPFS通过去中心化的方式,将数据分散

    2025-03-06 02:30:01
    58 0

发表回复

8206
验证码

评论列表(0条)

    暂无评论

ok交易所
已有100万用户加入ok交易所

立即下载