2. Lens Protocol 核心概念:Profile、Publication、Follow、Collect 深度解析
好,咱们直接进入正题。Lens Protocol 的核心,说白了就是四个基本操作:Profile(个人资料)、Publication(发布内容)、Follow(关注)和 Collect(收藏)。这四个概念构成了整个社交网络的骨架。我刚开始接触 Lens 时,也花了不少时间才真正理解它们之间的关系。
你想想看,传统社交平台里,你的账号、发帖、关注、点赞都是平台说了算。但在 Lens 里,这些全部变成了链上资产。嗯,这里有个关键点——它们都是 NFT。
2.1 Profile:你的链上身份
Profile 是 Lens 的起点。没有 Profile,你啥也干不了。它本质上是一个 ERC-721 NFT,但比普通 NFT 复杂得多。
核心要点:每个 Profile 都有一个唯一的 profileId,从 1 开始递增。你持有这个 NFT,就拥有了这个身份的控制权。
我记得第一次部署 Lens 合约时,创建 Profile 的 gas 费让我有点心疼。但后来想想,这相当于你买了个永久的社交身份,不用再担心平台封号了。
Profile 的结构大致如下:
struct ProfileStruct {
uint256 id; // profileId
address creator; // 创建者
address owner; // 当前所有者
string handle; // 用户名(如:lensdev.lens)
string imageURI; // 头像
string followNFTURI; // 关注 NFT 的元数据
uint256 followModule; // 关注模块地址
}
实战经验:我个人习惯在创建 Profile 时,把 handle 设置得简短易记。因为 handle 是全局唯一的,抢注好名字的机会只有一次。
2.2 Publication:你的每一次发声
Publication 是 Lens 里的内容单元。它分为两种:Post(帖子)和 Comment(评论)。Mirror(转发)其实也算一种特殊的 Publication。
每个 Publication 都绑定到一个 Profile。也就是说,你发的每一条内容,都明确归属于你的链上身份。
Publication 的数据结构:
struct PublicationStruct {
uint256 id; // publicationId(在 profile 内唯一)
uint256 profileId; // 所属 Profile
uint256 pubId; // 全局唯一 ID
string contentURI; // 内容地址(通常是 IPFS 或 Arweave)
address collectModule; // 收藏模块
address referenceModule; // 引用模块
uint256 timestamp; // 发布时间
}
避坑指南:我曾经犯过一个错误——把 contentURI 直接指向了一个中心化服务器。后来那个服务器挂了,我发的所有内容都变成了空链接。记住,内容一定要上 IPFS 或 Arweave,否则你的「去中心化」就名存实亡了。
Publication 的 ID 是怎么生成的?每个 Profile 都有一个自增的 pubId。比如 profileId=1 的用户发了第一条帖子,那这条帖子的全局 ID 就是 (1, 1)。
2.3 Follow:不只是关注,是持有
在 Lens 里,关注不是简单的数据库记录。你关注一个人,实际上是 mint 了一个 Follow NFT。
这有什么好处?
- 可转让:你的关注列表可以卖掉(虽然很少人这么做)
- 可编程:关注模块可以设置条件,比如付费关注、NFT 持有者才能关注等
- 可追溯:链上记录了你什么时候关注了谁
Follow 的流程:
- 用户调用
follow(profileIds[], datas[]) - 合约检查 followModule 的条件(比如是否付费)
- 条件通过后,mint 一个 Follow NFT 给用户
- 更新 Profile 的 followerCount
我的建议:如果你在开发社交应用,可以考虑用 Follow NFT 来做粉丝等级。比如持有 Follow NFT 超过 30 天的用户,可以解锁特殊权限。这个玩法我在一个项目里试过,效果不错。
2.4 Collect:收藏即拥有
Collect 是 Lens 里最有趣的概念之一。它相当于「点赞 + 收藏 + 购买」的合体。
当你 Collect 一个 Publication 时,你实际上是在 mint 一个 Collect NFT。这个 NFT 代表了「我拥有这条内容的某个版本」。
Collect 模块可以设置:
| 参数 | 说明 | 示例 |
|---|---|---|
| collectLimit | 最多可被收藏多少次 | 1000 次 |
| price | 每次收藏需要支付的费用 | 0.01 ETH |
| timeLimit | 收藏开放的时间窗口 | 7 天 |
| recipient | 费用接收地址 | 创作者钱包 |
你想想看,这给创作者带来了什么?以前你在 Twitter 上发个帖子,最多赚点点赞。现在你可以设置付费收藏,粉丝花钱买你的内容 NFT。这才是真正的创作者经济。
核心逻辑:Collect 不是简单的「收藏」按钮,而是一个经济行为。每次 Collect 都是一次链上交易,都会产生 gas 费。所以设计 Collect 策略时,要考虑用户的接受度。
2.5 四个概念的关系
咱们捋一下它们之间的关系:
- Profile 是容器,你的一切行为都基于它
- Publication 是内容,由 Profile 发出
- Follow 是关系,连接两个 Profile
- Collect 是动作,作用于 Publication
举个例子:
假设我(profileId=5)发了一篇关于 Lens 开发的文章(publicationId=3)。你(profileId=10)先关注了我(mint 了一个 Follow NFT),然后觉得文章不错,又 Collect 了它(mint 了一个 Collect NFT)。
整个过程,链上记录了:
- Profile 5 创建了 Publication (5, 3)
- Profile 10 关注了 Profile 5
- Profile 10 收藏了 Publication (5, 3)
这些数据全部公开可查,没有任何平台能篡改或删除。
注意:我曾经见过一个项目,把 Collect 当成了「点赞」来用,结果用户每点一次赞就要付 gas 费,体验极差。Collect 应该用于有价值的场景,比如付费内容、限量版、粉丝福利等。
2.6 实战中的选择
如果你现在要基于 Lens 开发一个应用,我建议你:
- Profile:让用户创建 Profile 时,引导他们设置好 handle 和头像。这是他们的门面。
- Publication:内容一定要上链存储元数据,内容本身放 IPFS。别省这点功夫。
- Follow:默认用免费关注模块就行。除非你有特殊需求,比如付费社群。
- Collect:谨慎使用。不是每条内容都值得被 Collect。设置合理的价格和限量。
嗯,这四个概念搞懂了,Lens 的大门就算打开了。下一章咱们会深入代码,看看怎么用 JavaScript 和 Lens SDK 实际操作这些功能。