<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>QIUQIU (ZHENGQIUWAN)</title>
    <link>https://soldev.cn/QIUQIU</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>使用 Go 打造 Solana Blinks </title>
      <description>&lt;p&gt;原文链接：&lt;a href="https://dev.to/brymes/solana-blinks-with-go-j4i" rel="nofollow" target="_blank"&gt;https://dev.to/brymes/solana-blinks-with-go-j4i&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Blinks 是多元化的链接（metadata-rich links），代表并启用 Solana 生态系统中的链上活动，而无需导航到不同的应用程序或网页。
Blinks 支持 Solana Actions 启用的广泛活动，主要允许用户通过社交媒体和其他链下平台与区块链互动。&lt;/p&gt;
&lt;h3 id="使用场景包括："&gt;使用场景包括：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;NFT 交易与铸造；&lt;/li&gt;
&lt;li&gt;捐赠；&lt;/li&gt;
&lt;li&gt;众筹；&lt;/li&gt;
&lt;li&gt;代币兑换；&lt;/li&gt;
&lt;li&gt;彩票/赌场应用等等&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;在本文中，我们将探讨一个使用 Go 的简单 Blink 应用，专注于铸造 NFTs。虽然本文侧重于 Go，但核心概念适用于任何 Blink 应用。你可以在 GitHub 上找到完整代码。
我们将首先使用 Gin 框架设置一个基本的 Web 服务器，以及按照规范定义的必要 CORS 配置。同时，我们将定义一些在下面详细讨论的端点。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;corsConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultConfig&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;router&lt;/span&gt;     &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Default&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;port&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PORT"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;corsConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowAllOrigins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
    &lt;span class="n"&gt;corsConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAllowHeaders&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Content-Length"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Access-Control-Allow-Origin"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;corsConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAllowMethods&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"OPTIONS"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;corsConfig&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/actions.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ActionsRulesHandler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/actions/mint_nft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetActionsHandler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OPTIONS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/actions/mint_nft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OptionsHandler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/actions/mint_nft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PostHandler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"StickyLabs Blink Active 🚀"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"8081"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server is running"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;router&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":%v"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;任何 Blinks 应用的核心在于复制 Solana Actions API 规范。以下是 Blinks 工作方式的视觉表示。&lt;/p&gt;
&lt;h3 id="Blinks 操作生命周期"&gt;Blinks 操作生命周期&lt;/h3&gt;
&lt;p&gt;&lt;img src="/uploads/photo/QIUQIU/96f6d6d3-eca8-4eac-8e1b-55a2e3647315.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="操作处理程序"&gt;操作处理程序&lt;/h3&gt;
&lt;p&gt;Solana 上的 Blinks 使用一个 Action URL 方案来提供元数据丰富的链接，启用各种链上活动。本节概述了处理 /api/actions/mint_nft 铸造 NFT 操作的主要处理程序。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GET 处理程序&lt;/strong&gt;：返回元数据、支持的操作和所需的参数。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ActionGetResponse&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Title&lt;/span&gt;       &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"title"`&lt;/span&gt;
    &lt;span class="n"&gt;Icon&lt;/span&gt;        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"icon"`&lt;/span&gt;
    &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"description"`&lt;/span&gt;
    &lt;span class="n"&gt;Label&lt;/span&gt;       &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"label"`&lt;/span&gt;
    &lt;span class="n"&gt;Links&lt;/span&gt;       &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Actions&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;Actions&lt;/span&gt; &lt;span class="s"&gt;`json:"actions"`&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="s"&gt;`json:"links"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;Actions&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Label&lt;/span&gt;      &lt;span class="kt"&gt;string&lt;/span&gt;             &lt;span class="s"&gt;`json:"label"`&lt;/span&gt;
    &lt;span class="n"&gt;Href&lt;/span&gt;       &lt;span class="kt"&gt;string&lt;/span&gt;             &lt;span class="s"&gt;`json:"href"`&lt;/span&gt;
    &lt;span class="n"&gt;Parameters&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;ActionParameters&lt;/span&gt; &lt;span class="s"&gt;`json:"parameters,omitempty"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ActionParameters&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt;     &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"name"`&lt;/span&gt;
    &lt;span class="n"&gt;Label&lt;/span&gt;    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"label"`&lt;/span&gt;
    &lt;span class="n"&gt;Required&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt;   &lt;span class="s"&gt;`json:"required"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;GetActionsHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;ActionGetResponse&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Actions Example - Mint NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;        &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Scheme&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"://"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"/solana_devs.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Transfer SOL to another Solana wallet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Label&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;       &lt;span class="s"&gt;"Transfer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Links&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Actions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;Actions&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Mint NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"/api/actions/mint_nft"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;ActionParameters&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Enter the Name of the NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"symbol"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Enter the Symbol of the NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"uri"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Enter the Uri of the NFT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;}},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusOK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;OPTIONS&lt;/span&gt; &lt;span class="n"&gt;处理程序&lt;/span&gt;&lt;span class="err"&gt;：&lt;/span&gt;&lt;span class="n"&gt;OPTIONS&lt;/span&gt; &lt;span class="n"&gt;处理程序处理&lt;/span&gt; &lt;span class="n"&gt;CORS&lt;/span&gt; &lt;span class="n"&gt;要求&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;确保与浏览器和其他客户端请求机制的兼容性&lt;/span&gt;&lt;span class="err"&gt;。&lt;/span&gt;



&lt;span class="s"&gt;```go
var ACTIONS_CORS_HEADERS = map[string]string{
    "Access-Control-Allow-Origin":  "*",
    "Access-Control-Allow-Methods": "GET,POST,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type",
}

func OptionsHandler(c *gin.Context) {
    for key, value := range ACTIONS_CORS_HEADERS {
        c.Header(key, value)
    }
    c.Status(http.StatusOK)
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;POST 处理程序&lt;/strong&gt;：POST 处理程序接受查询参数，解析 base58 形式的账户信息，返回一个 base64 编码的序列化交易以及供用户签名和执行的消息。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;MintNFTParams&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt;   &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`form:"name"   binding:"required"`&lt;/span&gt;
    &lt;span class="n"&gt;Symbol&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`form:"symbol" binding:"required"`&lt;/span&gt;
    &lt;span class="n"&gt;URI&lt;/span&gt;    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`form:"uri"    binding:"required"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// {  "account": "&amp;lt;account&amp;gt;" } //JSONtype ActionPostRequest struct {&lt;/span&gt;
    &lt;span class="n"&gt;Account&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"account"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ActionPostResponse&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Fields&lt;/span&gt; &lt;span class="n"&gt;ActionPostResponseFields&lt;/span&gt; &lt;span class="s"&gt;`json:"fields"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ActionPostResponseFields&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Transaction&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"transaction"`&lt;/span&gt;
    &lt;span class="n"&gt;Message&lt;/span&gt;     &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"message"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;PostHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;qPayload&lt;/span&gt; &lt;span class="n"&gt;MintNFTParams&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;  &lt;span class="n"&gt;ActionPostRequest&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="n"&gt;ActionPostResponse&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShouldBindQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;qPayload&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBadRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ActionError&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Invalid Query Params"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ShouldBindJSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBadRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ActionError&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Invalid request"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AccountFromBase58&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusBadRequest&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ActionError&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Invalid request; Error validating account"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fields&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fields&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mintNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;qPayload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusOK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="铸造 NFTs"&gt;铸造 NFTs&lt;/h3&gt;
&lt;p&gt;mintNFT 函数利用 Solana-Go-SDK 进行 NFT 铸造，并进行了一些调整。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;unc&lt;/span&gt; &lt;span class="n"&gt;mintNFT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metadata&lt;/span&gt; &lt;span class="n"&gt;MintNFTParams&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;feePayer&lt;/span&gt; &lt;span class="n"&gt;types&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;// 省略其他代码&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;错误处理：操作应返回用户友好的错误，格式如下。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;ActionError&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Message&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"message"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;actions.json：actions.json 文件应存储在域的根目录下。它为客户端提供支持 Solana Actions 的 URL 说明，并提供可用于对 Blink 应用执行 GET 请求的映射。为简单起见，我们会从 URL 路径返回一个 JSON 响应。&lt;/p&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;ActionsRulesHandler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s"&gt;"rules"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;gin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;H&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s"&gt;"pathPattern"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s"&gt;"apiPath"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;"/api/actions/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s"&gt;"pathPattern"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"/api/actions/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s"&gt;"apiPath"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;"/api/actions/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;StatusOK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="测试 Blink"&gt;测试 Blink&lt;/h3&gt;
&lt;p&gt;部署应用后，你可以使用 Blinks Inspector 应用进行测试。
Blinks Inspector 示例
&lt;img src="/uploads/photo/QIUQIU/d89a9e83-75c4-4d42-a936-3aa0d3309e98.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="结论"&gt;结论&lt;/h3&gt;
&lt;p&gt;希望本文能为在 Solana 上使用 Go 构建 Blinks 应用提供实用的介绍。完整代码可以在此找到。
要深入了解 Solana Actions 框架和详细文档，请查阅 Solana 官方资源。&lt;/p&gt;</description>
      <author>QIUQIU</author>
      <pubDate>Fri, 30 Aug 2024 09:54:54 +0800</pubDate>
      <link>https://soldev.cn/topics/67</link>
      <guid>https://soldev.cn/topics/67</guid>
    </item>
    <item>
      <title>Jito Restaking：下一代基础设施平台发布</title>
      <description>&lt;p&gt;原文链接：&lt;a href="https://www.jito.network/blog/announcing-jito-restaking/" rel="nofollow" target="_blank"&gt;https://www.jito.network/blog/announcing-jito-restaking/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/QIUQIU/12fece61-64cb-4a7e-ab91-6d92f3c24903.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Jito 基金会发布了 Jito Restaking 的代码，这是一款下一代混合质押、再质押和流动性再质押代币 (LRT) 模块。&lt;/p&gt;

&lt;p&gt;Jito Restaking 由两个主要部分组成：Vault 程序和 Restaking 程序。这两者相互配合，提供一种灵活且可扩展的基础架构，用于创建和管理质押资产、LRT 和主动验证服务（AVS）&lt;/p&gt;

&lt;p&gt;Vault 程序：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;管理流动性再质押代币（LRT）的创建和运行&lt;/li&gt;
&lt;li&gt;支持任意/多个 SPL 代币作为基础资产&lt;/li&gt;
&lt;li&gt;处理 LRT 的铸造、销毁和委托&lt;/li&gt;
&lt;li&gt;允许通过 DAO、多重签名、治理或来自 StakeNet 等协议的链上自动化，实现跨多个操作者和 AVS 的可定制委托策略&lt;/li&gt;
&lt;li&gt;根据关联的 AVS 定义灵活的惩罚条件和上限&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Restaking 程序：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;促进 AVS 和运营者的创建和管理&lt;/li&gt;
&lt;li&gt;协调 AVS、运营者和 Vault 之间的关系&lt;/li&gt;
&lt;li&gt;实现 AVS、运营者和 Vault 的灵活选择加入/退出机制&lt;/li&gt;
&lt;li&gt;管理奖励分配和强制执行惩罚&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;过这一框架，Jito Restaking 提供了一种高度灵活、轻量级的方法，来实现链上和链下活动的共识和经济安全。Jito Restaking 不仅可以看作是一个质押和再质押产品，还能为代币增加实用性、保障机制，提供保险基金，扩展基础层，或为几乎任何已有自动化但集中化处理的网络创建风险后备，所有这些都是使用极具定制性的 AVS 接口构建。&lt;/p&gt;

&lt;p&gt;Jito Restaking 具备多资产能力，能够利用质押的基础资产如 JitoSOL、其他流动质押代币，或任何其他 SPL 代币。它还允许对惩罚条件和上限进行细致的调整，使每个项目可以根据其特定需求定制更为细致的风险管理和安全模型。例如，项目可以实施多层次的惩罚机制，以确保经济安全。&lt;/p&gt;

&lt;p&gt;此外，用户可以使用多种代币创建质押和惩罚结构，并无缝创建流动性再质押代币，从而实现多样化的质押和委托策略，这为 Solana 生态系统中的代币经济学解锁了新的可能性。&lt;/p&gt;

&lt;p&gt;举个例子：&lt;/p&gt;

&lt;p&gt;假设 ORCL 是 Solana 网络的一个预言机提供协议。它利用多个节点运营商对某些资产的价格达成共识，并将这些价格提供给 DeFi 协议。然而，目前 ORCL 协议与节点运营商的互动基于商业发展关系和信任体系，而不是一个完全的经济激励模型。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/QIUQIU/c9a7f75b-98c9-4b3e-94ee-747df999bac8.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;ORCL 有一个治理代币 $ORCL。该项目希望建立一个质押系统，让用户将 $ORCL 委托给节点运营商，节点运营商则因提供准确的价格而获得 $ORCL 释放的奖励。然而，构建这样一个系统的内部工作量巨大。通过使用 Jito Restaking，ORCL 可以快速高效地建立代币的实用性，并通过质押来确保网络安全。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/QIUQIU/c85b2587-8a18-4156-8418-d5bc52114747.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;此外，ORCL 希望确保节点因不当行为（如停机或报告过时价格数据）而受到惩罚。Jito Restaking 可以引入多种形式的惩罚机制，例如对超出一定百分比范围的价格进行分级惩罚。&lt;/p&gt;

&lt;p&gt;&lt;img src="/uploads/photo/QIUQIU/fd500b26-667c-42ff-a4b0-fa4fde6e86f5.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;在这种情况下，因为 ORCL 的经济安全依赖于单一资产，该网络希望增加另一种资产以确保免受外部经济攻击的保护。Jito Restaking 允许网络将 JitoSOL（或任何其他质押资产）作为第二质押资产，创建双资产再质押系统。&lt;/p&gt;

&lt;p&gt;最后，因为一些用户希望在赚取质押和再质押奖励的同时保持流动性，ORCL 允许质押者铸造流动性再质押代币 $rORCL 和 $rJitoSOL，这些代币可以在 DeFi 中使用。&lt;/p&gt;

&lt;p&gt;最终结果是一个成功去中心化、激励化并加固了网络核心功能核心部分的经济系统，为实现新的实用性和经济活动开辟了新的途径。Jito Restaking 位于该系统的核心，推动整个生态系统的增长。&lt;/p&gt;

&lt;p&gt;然而，这只是一个例子。Jito Restaking 的灵活性使其能够构建能够安全管理 Layer-2 的顺序器和证明者、保险基金、跨链桥梁、保管者和维护者、上下币通道，或几乎任何需要去中心化和经济安全的加密使用案例的网络。&lt;/p&gt;

&lt;p&gt;对于 AVS 提供者&lt;/p&gt;

&lt;p&gt;Jito Restaking 的每一个方面都是以 AVS 为设计目标而构建的。建立在 Solana 高性能区块链上，Jito Restaking 提供更快的交易和低费用，使其对更多项目和用户更有吸引力。
Vault 和 Restaking 程序的结合为在 Solana 上启动和管理质押、再质押和 LRT 产品提供了一站式解决方案，简化了项目的开发过程。&lt;/p&gt;

&lt;p&gt;该平台赋予项目以下能力：&lt;/p&gt;

&lt;p&gt;加速创新：
项目可以专注于其核心产品，而 Jito Restaking 则处理质押和再质押的复杂基础设施。
这意味着更快的开发时间，更多的资源用于推动 DeFi 的创新边界。&lt;/p&gt;

&lt;p&gt;增强代币实用性：
项目可以将任何 SPL 代币转化为质押（或再质押）流动资产，同时保持与治理的兼容性。
Jito Restaking 提供了实施质押、惩罚和奖励系统的工具，操作简便。&lt;/p&gt;

&lt;p&gt;大规模安全网络：
为您的协议或链下服务实施经济安全性。
通过可定制的惩罚条件和多资产质押和惩罚，项目可以为良好行为创建灵活和强大的激励机制，并保护免受攻击。&lt;/p&gt;

&lt;p&gt;解锁新的流动性范式：
项目可以为任何资产一键发行流动再质押代币。
这在 DeFi 中开辟了资本效率的新可能性，使用户能够在维持流动性的同时质押或再质押其资产。&lt;/p&gt;

&lt;p&gt;精确管理风险：
项目可以实施与其特定安全需求相符的定制资产和运营商支持以及惩罚条件。
配置高度可定制化，包括设置每个周期每个运营商的最大可惩罚金额，确保可预测的风险暴露。&lt;/p&gt;

&lt;p&gt;我们相信这些功能将吸引跨生态系统的 AVS 构建者，鼓励更多在 Solana 上的开发。&lt;/p&gt;

&lt;p&gt;节点运营商、质押者和委托管理者的好处&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;节点运营商：通过控制支持的 Vault 和 AVS，并在选择加入前审查链上惩罚条款，清楚了解和控制其风险概况。&lt;/li&gt;
&lt;li&gt;LRT 委托管理者：通过透明的链上风险评估为运营商和 AVS 做出明智的决策，轻松查看和比较不同运营商和 AVS 的最大可惩罚金额。&lt;/li&gt;
&lt;li&gt;质押者：受益于一个更安全和透明的质押生态系统，风险明确且管理良好，从而增加信任和稳定性。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jito Restaking 正在进行审计和正式验证。源代码可以在这里查看。&lt;/p&gt;

&lt;p&gt;鼓励有兴趣在 Jito Restaking 平台上构建的项目通过此表单与我们联系。这包括 AVS、LRT 和节点运营者。&lt;/p&gt;

&lt;p&gt;后续步骤&lt;/p&gt;

&lt;p&gt;Jito Restaking 正在进入审计和正式验证阶段。源代码可以&lt;a href="https://github.com/jito-foundation/restaking" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;对在 Jito Restaking 平台上构建感兴趣的项目，包括 AVS、LRT 和节点运营商，欢迎通过&lt;a href="https://forms.gle/cfbshwfvwqB5RMGdA" rel="nofollow" target="_blank" title=""&gt;表单&lt;/a&gt;联系我们。&lt;/p&gt;</description>
      <author>QIUQIU</author>
      <pubDate>Wed, 31 Jul 2024 02:45:36 +0800</pubDate>
      <link>https://soldev.cn/topics/57</link>
      <guid>https://soldev.cn/topics/57</guid>
    </item>
  </channel>
</rss>
