这次一定好好学 Solana (7) : 最简单的 Blink 原理讲解及开发实战

  • dgu
  • 发布于 1天前
  • 阅读 222

🔍Blink是什么鬼?简单说就是利用钱包插件(比如Phantom、Backpack)对网页内容进行"魔改"渲染。用过「沉浸式翻译」插件的小伙伴应该懂这种感觉——它能无缝把翻译的中文嵌到英文下面。Blink也类似,只不过是将你的推文渲染成链上交互界面。沉浸式翻译插件的效果钱包渲染t

🔍 Blink 是什么鬼?

简单说就是利用钱包插件(比如 Phantom、Backpack)对网页内容进行"魔改"渲染。用过「沉浸式翻译」插件的小伙伴应该懂这种感觉——它能无缝把翻译的中文嵌到英文下面。Blink 也类似,只不过是将你的推文渲染成链上交互界面。

沉浸式翻译插件的效果 like chrome ext.jpg

钱包渲染 twitter 的效果

twitter 效果.webp

重点来了:只有装了钱包插件的人才能看到这个效果哦, 其他人只能看到 url 本身或者是 fallback 的一个稍微好看的无法交互的效果~

这是一个 fallback 的效果, 还凑合, 起码比 url 纯文字效果好 x none blink.jpg

🛠️ 钱包配置指南

想让你的钱包支持 Blink?按这个来:

  • Backpack:设置 -> Solana -> Allow Solana Actions on X

backpack blink.jpg

  • Phantom:设置 -> 实验性功能 -> Blinks

photam blink.jpg

📜 背后的规范

所有魔法都有规则,Blink 的规则在这里: solan官方blink规范

但有个限制:不是随便一个URL都能被渲染!因为怕你被诈骗,你得先去 Dialect 注册过审才行。不然你发的URL就只是个寂寞的链接..., 为此我看了 backpack 插件源码, 让 AI 帮我看到底是哪限制的, 这里就是判断是否已经是注册的合法 url

backpack checkblink.jpg

💻 开发者要做什么?

搞个后端服务,什么语言开发都可以, 准备两类接口:

1. GET 元数据接口

返回一个JSON告诉钱包该怎么渲染。举个质押的例子:

// 这个 json 里面的 field 都是页面上的元素
{
  "title": "Stake-o-matic", // 标题
  "icon": "<url-to-image>",  // 背景图片
  "description": "Stake SOL to help secure the Solana network.",
  "label": "Stake SOL",
  "links": {
    "actions": [  // 按钮1
      {
        "label": "Stake 1 SOL",
        "href": "/api/stake?amount=1" // 后端接口
      },
      {
        "label": "Stake 5 SOL", // 按钮2
        "href": "/api/stake?amount=5"
      },
      {
        "label": "Stake", // 按钮3
        "href": "/api/stake?amount={amount}",
        "parameters": [ // 按钮3前面的表单项, 可以让你输入数字
          {
            "name": "amount",
            "label": "SOL amount"
          }
        ]
      }
    ]
  }
}

2. POST 交易接口

每个action对应一个,返回未签名交易的base64: 还记得 solana 这个经典的交易结构吧, 就是组装这玩意, 只不过是未签名的, 因为你是要让钱包提示出来后, 用户自己签名

{
  "transaction": {
    "message": {
      "accountKeys": ["3z9...", "3z1...", "111..."],
      "header": {
        "numReadonlySignedAccounts": 0,
        "numReadonlyUnsignedAccounts": 1,
        "numRequiredSignatures": 1
      },
      "recentBlockhash": "Dzf...",
      "instructions": [
        {
          "accounts": [0, 1],
          "programIdIndex": 2,
          "data": "3Bx..."
        }
      ]
    },
    "signatures": []
  }
}

🧪 调试工具

  • inspecto:检查你的服务是否符合规范

全绿就代表 ok check ok.jpg

  • dial:模拟钱包渲染效果

blink sim.jpg

🔄 完整流程梳理

  1. 开发后端服务(GET+POST接口)
  2. 在 Dialect 上调试,拿到专属URL
  3. 去 Dialect 注册过审
  4. 用这个URL发推
  5. 有插件的用户就能看到魔法效果了!

具体渲染过程

  1. 钱包发现你推文里的URL是注册过的
  2. 调用你的GET接口拿到元数据
  3. 渲染出炫酷的UI替换原始链接
  4. 用户点击按钮 -> 调用你的POST接口
  5. 返回未签名交易 -> 钱包弹出确认
  6. 用户签名 -> 交易上链

💣 我踩过的坑

Dialet 官方例子 做实验时遇到的坑:

  1. 本地 anchor deploy 到 devnet 死活不成功,最后把代码copy到 playground 才发布成功
  2. devnet 日常抽风,失败是常态
  3. 手速太快连续点击会触发 getLatestBlockhash 风控, 可能是 devnet 的限制

🚀 实战代码

后端代码就不贴了, 没啥意义, 就是纯组装 json 结构, 难点是小白不知道咋组装 我把 这次一定好好学 Solana (5) : 开发一个有PDA的简单合约 改成了 PDA 支持 Blink 的版本,需要自取~

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
dgu
dgu
江湖只有他的大名,没有他的介绍。