JavaScript 不可用。

我们检测到浏览器禁用了 JavaScript。请启用 JavaScript 或改用支持的浏览器来继续访问

Lens Protocol 智能合约源码解读

作者:Anban Chu

发表日期:2023年10月10日

所属目录:合约分析

前置介绍

这是一个基于 Polygon 网络的社交协议。

功能分析

平台核心逻辑基于 Profile NFT,核心内容均挂载这个 NFT 上,用户名信息储存在 Handle,类似 ENS 一样,全局唯一。信息交流主要在 Publication,的核心是 MirrorQuoteComment,Publication 会挂载在用户的 Profile NFT 上,Publication 本身不是 NFT,Publication 上挂载了两个模块 Action Module 和 Reference Module。

  • Action Module 限制其他用户对 Publication 的操作限制和逻辑。比如是否可以打赏,投票等。
  • Reference Module 对引用本身的限制。包括水可以引用/评论/镜像当前的 Publication,比如设置仅自己的粉丝可以评论。
    • 引用类似文献的引用。镜像类似传统网页中花瓣网的采摘功能,镜像本身不存在 Action Module,但是有 Reference Module,可以定义哪些人能够评论等。

Publication 是一个 ROOT 概念,评论等操作均基于这个 ROOT,还存在推荐系统,推荐系统的关系链也是基于这个 ROOT 的。

另外用户还可以在自己的 Profile NFT 上设置 Profile Manager,授权某个地址来做发布,评论等事情。 Profile Manager 可以代发信息,实现相对作者的无 Gas 交易。(另外一种无 gas 交易是,发布者签名。代发者将签名发到链上)

应用方需要为自己的 DAPP 写适配合约。比如写自己应用的关注功能,可以如下操作(引用 Lens 平台的合约)

pragma solidity 0.8.19;

import {IFollowModule} from 'contracts/interfaces/IFollowModule.sol';
import {HubRestricted} from 'contracts/base/HubRestricted.sol';

contract SecretCodeFollowModule is HubRestricted, IFollowModule {}

当 Dapp 的自定义模块合约代码发布完成后,需要对其进行注册。注册仅仅是在平台上发布一个声明,方便平台和应用进行索引。注册分为模块注册和 ERC20 代币注册。

  • 模块注册:registerModule(address moduleAddress, uint256 moduleType); 传入模块地址和对应的 Type 值即可。
  • 代币注册: registerErc20Currency(address currencyAddress) 进行代币声明,表示该代币是可用状态。

为什么发布时候的功能,不通过外部直接操作。比如 A 想捐赠 USDT 给 C。通过协议来做比直接转账有如下好处

  • 协议捐赠时,C 可以看到自己收到了 A 的捐赠,而不是一串未知的地址。
  • 如果发布的时候,开启了捐赠功能,可以统计每篇文章的收入分别是多少。并且还可以查询到哪个人是他的最大榜一大哥。
  • 捐赠行为可以通过推荐系统分发奖励。比如 B 分享了 A 的文章给 C,C 对 A 的文章进行打赏,则 B 也会收到部分赏金作为佣金。
    • 推荐系统适用发布模块的所有动作。比如某篇文章是付费阅读的,如果是 C 付费阅读了 A 的文章,B 也会收到佣金。

场景描述

合约分析





以上就是本篇文章的全部内容了,希望对你有帮助。

>> 本站不提供评论服务,技术交流请在 Twitter 上找我 @anbang_account