- A+
原文链接:https://solana.com/docs/advanced/actions
Solana Actions是符合规范的应用程序接口,可返回 Solana 区块链上的交易,以便在 二维码、按钮 + 小工具和互联网网站等各种环境中进行预览、签名和发送。Actions 使开发人员可以轻松地将 Solana 生态系统中的各种操作集成到自己的环境中,允许你在不需要跳转到其他应用或网页的情况下执行区块链交易。
区块链链接(或 blinks)可将任何 Solana Action 转化为可共享、元数据丰富的链接。Blinks 允许支持 Action 的客户端(钱包浏览器插件、机器人)为用户显示额外的功能。在网站上,Blink 可能会立即触发钱包中的交易预览,而无需进入去中心化应用程序;在 Discord 中,机器人可能会将 Blink 扩展为一组交互式按钮。这使得在任何能够显示 URL 的网页界面上进行链上交互成为可能。
开始使用#
快速开始创建自定义 Solana Action:
npm install @solana/actions
- 在应用程序中安装Solana Actions SDK
- 创建一个 API 端点,接收GET 请求返回有关 Action 的元数据
- 创建一个 API 端点,接收POST 请求并返回用户可签署交易
提示
观看视频教程,了解如何[使用 @solana/actions SDK](https://www.youtube.com/watch?v=kCht01Ycif0) 创建 Solana 操作。
您还可以在此处找到执行本地 SOL 转账操作的[源代码](https://github.com/solana-developers/solana-actions/blob/main/examples/next-js/src/app/api/actions/transfer-sol/route.ts),并在此[软件仓库](https://github.com/solana-developers/solana-actions/tree/main/examples)中找到其他几个操作示例。
将自定义 Solana Action 部署到生产环境:
- 确保您的应用程序在域根目录下有一个有效的 actions.json 文件
- 确保应用程序在所有 Action 端点(包括
actions.json
文件)响应时包含跨域 Headers
如果您正在寻找有关构建 Action 和 Blink 的灵感,请查看Awesome Blinks资源库中的一些社区作品,以及新创意作品。
Actions#
Solana Actions 规范使用一套标准 API,将可签名交易(以及最终需签名数据)从应用程序直接传送给用户。它们托管在可公开访问的 URL 上,任何客户端都可以通过 URL 与之交互。
提示
您可以将 Action 视为一个应用程序接口端点,它会返回元数据和一些需用户使用区块链钱包签名(交易或认证信息)的内容。
Action API 包括向 Action URL 端点发出简单的GET
和POST
请求,以及遵循 Actions 接口规范处理响应。
- GET 请求会返回元数据,为客户端提供有关该 URL 上可用 Action 的可读信息,以及相关操作的可选列表。
- POST 请求会返回一个可签名的交易或数据,然后客户端会提示用户使用钱包签名,并在区块链或其他链外服务中执行。
Action 执行和生命周期#
实际上,与 Actions 的交互和与常见的 REST API 的交互非常相似:
- 客户端向 Action URL 发出初始
GET
请求,以获取可用 Action 的元数据 - 端点返回的响应包括端点的元数据(如应用程序的标题和图标)以及该端点的可用 Action 列表
- 客户端应用程序(如移动钱包、聊天机器人或网站)显示用户界面,供用户执行操作
- 用户选择操作(点击按钮)后,客户端会向端点发出
POST
请求,发送交易数据供用户签名 - 用户使用钱包签署交易,并最终将交易发送至区块链进行确认
Solana Action 的执行和生命周期
从 Action URL 接收交易时,客户端应将这些交易提交到区块链,并管理其状态生命周期。
Action 还支持在执行前进行一定程度的失效验证。GET
和POST
请求可能会返回一些元数据,说明该操作是否可以被执行(如disabled
字段)。
例如,如果有一个 Action 端点用于 DAO 治理提案进行投票,但投票窗口已关闭,那么初始GET 请求可能会返回错误信息 "此提案不再进行投票",并且 "投赞成票 "和 "投反对票 "按钮被 "禁用"。
Blinks#
Blinks(区块链链接)是客户端应用程序,可分析 Action 应用程序接口,并基于 Action 交互和执行构建用户界面。
支持 Blinks 的客户端应用程序检测与 Action 兼容的 URL,对其进行解析,并允许用户在标准化界面上与之交互。
提示
任何完整分析 Action API 以构建其完整界面的客户端程序被称为 Blink。并非所有使用 Action API 的客户端都是 Blink。
Blink URL 规范#
Blink URL 描述的是一个客户端应用程序,它能让用户完成执行 Action的整个生命周期,包括使用钱包进行签名。
https://example.domain/?action=<action_url>
客户端应用程序成为 Blink 的条件:
- Blink URL 必须包含一个
action
查询参数,其值为 URL 编码的 Action URL。该值必须进行 URL 编码,以免与其他协议参数冲突。 - 客户端应用程序必须对
action
查询参数进行 URL 解码,并分析所提供的 Action API(请参阅 Action URL 协议)。 - 客户端必须提供丰富的用户界面,使用户能够完成执行 Action 的整个生命周期,包括使用钱包进行签名。
提示
并非所有 Blink 客户端应用程序(如网站或 dApps)都支持全部 Action。应用程序开发人员可以选择在其 Blink 界面中支持哪些 Action。
下面的示例演示了一个有效的 blink URL,其action
值为 solana-action:https://actions.alice.com/donate
编码后的数据:
https://example.domain/?action=solana-action%3Ahttps%3A%2F%2Factions.alice.com%2Fdonate
Blinks 识别 Action #
Blinks 至少可以通过三种方式识别 Action:
- 显示展示 Action URL:
solana-action:https://actions.alice.com/donate
在这种情况下,只有支持的客户端才能正常展示。不会有 fallback 链接预览,也不会有可以在非支持客户端之外访问的网站。 - 在网站域名根目录上放置
actions.json
文件。例如,https://alice.com/actions.json 将 https://alice.com/donate (向 Alice 捐赠的网页 URL)映射到 API URL https://actions.alice.com/donate (向 Alice 捐赠的 Action 托管在该 URL)。 - 在 "插页 "网站 URL 中嵌入 Action URL,该 URL 支持解析 Action。
https://example.domain/?action=<action_url>
支持 Blink 的客户端应能接受上述任何格式,并正确呈现界面,以便直接在客户端执行操作。
对于不支持 Blink 的客户端,应该有一个底层网页(使浏览器成为通用的备用工具)。
如果用户在客户端上点击不是 Action 按钮或文本输入框的任何地方,会进入底层网页。
Blink 测试与验证#
虽然 Solana Action和Blink是一种无权限协议/规范,但仍需客户端应用程序和钱包来最终帮助用户签署交易。
不同的客户端应用程序或钱包中的可能有不同的要求,即他们的客户端将自动展开哪些 Action 端点,在社交媒体上直接向用户展示哪些内容。
例如,有些客户端可能会采用 "白名单 "方法,在为用户展开 Action(如 Dialect 的 Action 注册表(详见下文))之前可能需要验证。
所有的 blink 会在 Dialect 的 dial.to blinks 中间页上呈现,并允许签名,同时它们的注册状态会显示在 blink 中。
Dialect Actions 注册表#
Dialect Actions 注册表是 Solana 生态系统的公共产品,Dialect在 Solana 基金会和其他社区成员的帮助下,其维护了一个公共注册表,包含已验证的区块链链接。自发布之日起,只有在 Dialect 注册表中注册的 Action 才能在 Twitter feed 中发布。
客户端应用程序和钱包可以自由选择使用该公共注册表或其他解决方案,以确保用户资产安全。如果未通过 Dialect 注册表验证,区块链链接将不会被 blink 客户端解析,而是展示为一个普通 URL。
开发人员可在此处申请 Dialect 验证:dial.to/register
规范#
Solana Action 规范由请求/响应交互流程中的如下关键部分组成
- Solana Action URL 协议
- Action URL 的 OPTIONS 响应,满足 CORS 要求
- 向 Action URL 发送 GET 请求
- 服务器的 GET 响应
- 向 Action URL 发送 POST 请求
- 服务器的 POST 响应
Action 客户端(如钱包应用、浏览器扩展、dApp、网站等)发送请求,收集用户界面需要的元数据,并实现用户输入接入 Action API。
应用程序(如网站、服务器后台等)生成需签名的交易或数据,并返回给 Action 客户端,提示用户确认、签名并发送到区块链。
URL 协议#
Solana Action URL 定义了使用solana-action
协议发起交互式请求。
请求是交互式的,客户端会使用 URL 中的参数发出一系列标准化 HTTP 请求,以创建可签名的交易或信息,供用户使用钱包签名。
- 需要一个单独的
link
字段作为路径名。该值需要是按需进行 URL 编码 的 HTTPS 绝对路径。 - 如果 URL 包含查询参数,则必须进行 URL 编码。对 URL 值进行编码可避免与其他 Actions 协议参数发生冲突,协议参数可能随着协议规范更新而添加。
- 如果 URL 不包含查询参数,则不应进行 URL 编码。这样可以生成更短的 URL 和更简洁的二维码。
无论哪种情况,客户端都必须对值进行 URL 解码。如果值未进行 URL 编码,也不会有副作用。如果解码后不是 HTTPS 绝对路径,钱包必须将其视为格式错误,不能进行处理。
OPTIONS 响应#
为了允许在 Action 客户端(包括 Blink)内进行跨源资源共享(CORS),所有 Action 端点都应使用有效的标头来响应OPTIONS
方法的 HTTP 请求,从而允许客户端通过 CORS 检查,处理其所有后续请求。
Action 客户端可向 Action URL 端点发起"预检"请求,以检查对 Action URL 的后续 GET 请求是否能通过所有 CORS 检查。这些 CORS 预检检查是使用OPTIONS
HTTP 方法进行的,并响应所有必要的 HTTP headers,以便 Action 客户端(如 blinks)从其源域正确发出所有后续请求。
所需的 HTTP headers 至少包括
Access-Control-Allow-Origin
:*
。- 确保所有 Action 客户端发出的请求都能正常通过 CORS 检查
Access-Control-Allow-Methods
:GET、POST、PUT、OPTIONS
- 确保 Action 支持所有必要的 HTTP 请求方法
Access-Control-Allow-Headers
: 至少包含Content-Type、Authorization、Content-Encoding、Accept-Encoding
为简单起见,开发人员可考虑对OPTIONS
请求返回与GET
响应相同的响应和 headers。
actions.json 的跨源 Header
对于`actions.json`文件的`GET`和`OPTIONS`请求,响应还必须返回有效的 Cross-Origin headers,特别是`Access-Control-Allow-Origin` headers 值为`*`。
更多详情,请参阅下面的[actions.json](https://solana.com/docs/advanced/actions#actionsjson)。
GET 请求#
Action 客户端(如钱包、浏览器扩展等)向 Action URL 端点发出 HTTPGET
JSON 请求。
- 请求不应指定钱包或用户。
- 发起请求时应包含
Accept-Encoding
Header。 - 发起请求时需显示 URL 域名。
GET 响应#
Action URL 端点(如应用程序或服务器后端)应返回 HTTPOK
JSON 响应(正文中包含有效的 Payload)或 HTTP 错误码。
- 客户端必须处理 HTTP 客户端错误、服务器错误和重定向响应。
- 返回值需包含
Content-Encoding
Header,以便进行 HTTP 压缩。 - 返回中的
Content-Type
Header 应为application/json
。 - 除非 HTTP 缓存响应 Header 明确设置,客户端不应缓存响应。
- 客户端应向用户显示
title
和icon
图像。
GET 响应正文#
带有 HTTPOK
JSON 响应的GET
响应应包括遵循接口规范的正文有效 Payload:
export interface ActionGetResponse {
/** image url that represents the source of the action request */
icon: string;
/** describes the source of the action request */
title: string;
/** brief summary of the action to be performed */
description: string;
/** button text rendered to the user */
label: string;
/** UI state for the button being rendered to the user */
disabled?: boolean;
links?: {
/** list of related Actions a user could perform */
actions: LinkedAction[];
};
/** non-fatal error message to be displayed to the user */
error?: ActionError;
}
icon
- 图标的 HTTP 或 HTTPS 绝对路径。格式支持 SVG、PNG 或 WebP,其他格式客户端/钱包必须将其作为格式错误图标拒绝。title
- 表示 Action 请求来源的 UTF-8 字符串。例如,发起请求的品牌、商店、应用程序或个人的名称。description
- 提供 Action 信息的 UTF-8 字符串。需要显示给用户。label
- 一个 UTF-8 字符串,将显示在按钮上供用户点击。所有标签不应超过 5 个词组,并应以动词开头,以明确用户希望采取的操作。例如,"Mint NFT"、"Vote Yes "或 "Stake 1 SOL"。disabled
- 布尔值,表示渲染按钮(显示label
字符串)的禁用状态。如果返回中不包含该值,则disabled
默认为false
(即默认为启用)。例如,如果治理投票 Action 端点已关闭,则设置disabled=true
,label
就会显示 "Vote Closed(投票已关闭)"。error
- 用于非致命错误的可选错误指示。如果存在,客户端应将其显示给用户,但不应阻止 Action 的解析与显示。错误可与disabled
一起用于显示错误原因,例如:业务限制、权限、状态或外部资源异常等
export interface ActionError {
/** non-fatal error message to be displayed to the user */
message: string;
}
links.actions
- 端点相关操作的可选数组。应为用户展示出所有列表,并要求只执行其中一项。例如,治理投票 Action 端点可能会向用户返回三个选项:"投赞成票"、"投反对票 "和 "弃权票"。- 如果未提供
links.actions
,客户端应使用根label
字符串渲染单个按钮,并向与 GET 请求相同的 Action URL 端点发出 POST 请求。 - 如果提供了
links.action
,客户端应仅根据links.actions
字段中列出的项目显示按钮和输入字段。客户端不应为根label
的内容显示按钮。
- 如果未提供
export interface LinkedAction {
/** URL endpoint for an action */
href: string;
/** button text rendered to the user */
label: string;
/** Parameter to accept user input within an action */
parameters?: [ActionParameter];
}
/** Parameter to accept user input within an action */
export interface ActionParameter {
/** parameter name in url */
name: string;
/** placeholder text for the user input field */
label?: string;
/** declare if this field is required (defaults to `false`) */
required?: boolean;
}
GET 响应示例#
下面的响应示例提供了一个单一的 Action 操作,向用户展示一个标签为 "申请访问令牌 "的单一按钮:
{
"title": "HackerHouse Events",
"icon": "<url-to-image>",
"description": "Claim your Hackerhouse access token.",
"label": "Claim Access Token" // button text
}
下面的响应示例提供了 3 个相关操作链接,允许用户点击 3 个按钮中的一个,为 DAO 提案投票:
{
"title": "Realms DAO Platform",
"icon": "<url-to-image>",
"description": "Vote on DAO governance proposals #1234.",
"label": "Vote",
"links": {
"actions": [
{
"label": "Vote Yes", // button text
"href": "/api/proposal/1234/vote?choice=yes"
},
{
"label": "Vote No", // button text
"href": "/api/proposal/1234/vote?choice=no"
},
{
"label": "Abstain from Vote", // button text
"href": "/api/proposal/1234/vote?choice=abstain"
}
]
}
}
带参数的 GET 响应示例#
下面的响应示例演示了如何接受用户的文本输入(通过parameters
参数),并将该输入包含在最终的POST
请求端点中(通过LinkedAction
中的href
字段):
下面的响应示例为用户提供了 3 个链接的操作,以质押 SOL:一个标有 "Stake 1 SOL "的按钮,另一个标有 "Stake 5 SOL "的按钮,以及一个允许用户输入特定 "金额"值的文本输入框,该值会被发送到 Action API:
{
"title": "Stake-o-matic",
"icon": "<url-to-image>",
"description": "Stake SOL to help secure the Solana network.",
"label": "Stake SOL", // not displayed since `links.actions` are provided
"links": {
"actions": [
{
"label": "Stake 1 SOL", // button text
"href": "/api/stake?amount=1"
// no `parameters` therefore not a text input field
},
{
"label": "Stake 5 SOL", // button text
"href": "/api/stake?amount=5"
// no `parameters` therefore not a text input field
},
{
"label": "Stake", // button text
"href": "/api/stake?amount={amount}",
"parameters": [
{
"name": "amount", // field name
"label": "SOL amount" // text input placeholder
}
]
}
]
}
}
下面的响应示例提供了一个输入框,供用户输入金额
,该值在 POST 请求中使用(可以作为查询参数,也可以使用 URL 路径):
{
"icon": "<url-to-image>",
"label": "Donate SOL",
"title": "Donate to GoodCause Charity",
"description": "Help support this charity by donating SOL.",
"links": {
"actions": [
{
"label": "Donate", // button text
"href": "/api/donate/{amount}", // or /api/donate?amount={amount}
"parameters": [
// {amount} input field
{
"name": "amount", // input field name
"label": "SOL amount" // text input placeholder
}
]
}
]
}
}
POST 请求#
客户端向 ACTION URL 发出 HTTPPOST
JSON 请求,其正文有效 Payload 为
{
"account": "<account>"
}
account
- 可以签署交易的账户公钥 base58 编码。
客户端应使用 Accept-Encoding Header 发出请求,应用程序可使用 Content-Encoding Header 响应 HTTP 压缩。
客户端应在发出请求时显示 Action URL 的域名。如果发出的是GET
请求,客户端还应显示标题
,并从渲染 GET 响应中的图标
。
POST 响应#
Action POST 端点
应返回 HTTPOK
JSON 响应(正文中包含有效的有效 Payload)或恰当的 HTTP 错误码。
- 客户端必须处理 HTTP 客户端错误、服务器错误和重定向响应。
- 响应包含
Content-Type
Header,值为application/json
。
POST 响应正文#
带有 HTTPOK
JSON 响应的POST
响应应包含以下内容的正文有效 Payload:
export interface ActionPostResponse {
/** base64 encoded serialized transaction */
transaction: string;
/** describes the nature of the transaction */
message?: string;
}
transaction
- base64 编码的序列化数据。客户端需对交易进行 base64 解码并反序列化。message
- UTF-8 字符串,用于描述响应中包含的交易的说明。客户端应将此值显示给用户。例如,所购物品的名称、可用购买折扣或感谢信。- 客户端和应用程序应允许在请求正文和响应正文中增加额外字段,这些字段可能会在未来的规范更新中添加。
提示
应用程序可能会响应部分或完全签名的交易。客户端和钱包必须将该交易视为不可信。
POST 响应 - 交易#
如果交易签名
为空,或者交易没有被签名:
- 客户端必须忽略交易中的
feePayer
,并将feePayer
设置为请求中的account
。 - 客户端必须忽略交易中的
recentBlockhash
,并将recentBlockhash
设置为最新的 blockhash。 - 客户端必须在签署前序列化和反序列化交易,以确保账户密钥顺序的一致性,从而解决这一问题。
如果交易已部分签署:
- 客户不得更改
feePayer
或recentBlockhash
,否则将导致所有现有签名无效。 - 客户机必须验证现有签名,如果有任一签名无效,客户机必须将其视为格式错误交易予以拒绝。
客户端必须仅使用请求中的account
对交易进行签名,且仅在预期需要该账户的签名时才能这样做。
如果请求中需要除account
签名之外的任何签名,则客户端必须拒绝该交易,将其视为恶意交易。
actions.json#
actions.json
文件的目的是让应用程序指示客户端哪些 URL 支持 Solana 操作,并提供可用于向 Action API 服务器执行 GET 请求的映射。
CROSS-ORIGIN HEADERS
对于`GET`和`OPTIONS`请求,`actions.json`文件响应还必须返回有效的 Cross-Origin 标头,特别是`Access-Control-Allow-Origin`值为`*`。
更多详情,请参阅上文的 [OPTIONS 响应](https://solana.com/docs/advanced/actions#options-response)。
actions.json
文件应存储在域的根目录下,并可开放访问。
例如,如果您的网络应用程序部署在my-site.com
,那么actions.json
文件应可通过https://my-site.com/actions.json 访问。
该文件还应可通过任何浏览器跨源访问,Access-Control-Allow-Origin
Header 值应为*
。
规则#
规则
字段允许应用程序将一组相对路径映射到一组其他路径。
类型: ActionRuleObject数组
。
interface ActionRuleObject {
/** relative (preferred) or absolute path to perform the rule mapping from */
pathPattern: string;
/** relative (preferred) or absolute path that supports Action requests */
apiPath: string;
}
pathPattern
- 输入路径匹配表达式。apiPath
- 映射后的绝对路径或外部 URL 地址。
规则 - pathPattern#
匹配输入路径的表达式。可以是绝对路径或相对路径,并支持以下格式:
- 精确匹配:精确匹配 URL 路径。
- 示例
/exact-path
- 示例
:https://website.com/exact-path
- 示例
- 通配符匹配:使用通配符匹配 URL 路径中的字符序列。可以匹配单个(使用
*
)或多个字符(使用**
)(请参阅下面的路径匹配)。- 示例
/trade/*
将匹配/trade/123
和/trade/abc
,通配符只匹配/trade/
后的第一段。 - 示例
/category/*/item/**
将匹配/category/123/item/456
和/category/abc/item/def
。 - 示例
/api/actions/trade/*/confirm
将匹配/api/actions/trade/123/confirm
。
- 示例
规则 - apiPath#
Action 请求的目标路径。可以是绝对路径或外部 URL。
- 示例
/api/exact-path
- 示例
https://api.example.com/v1/donate/*
- 示例
/api/category/*/item/*
- 示例
/api/swap/**
规则 - 查询参数#
原始 URL 中的查询参数会附加到映射的 URL 中。
规则 - 路径匹配#
下表概述了路径匹配模式的语法:
操作符 | 匹配内容 |
---|---|
* |
单个路径段,不包括路径分隔符/。 |
** |
匹配零个或多个字符,包括多个路径段之间的路径分隔符/。如果包含其他操作符,** 操作符必须是最后一个操作符。 |
? |
不支持 |
规则示例#
下面的示例演示了一个精确匹配规则,将/buy
请求映射到相对于网站根目录的精确路径/api/buy
:
{
"rules": [
{
"pathPattern": "/buy",
"apiPath": "/api/buy"
}
]
}
下面的示例使用通配符路径匹配,将请求/actions/
下的任何路径(不包括子路径)映射到相对于网站根目录的/api/actions/
下的相应路径:
{
"rules": [
{
"pathPattern": "/actions/*",
"apiPath": "/api/actions/*"
}
]
}
下面的示例使用通配符路径匹配,将/donate/
下任何路径(不包括子路径)的请求映射到外部网站上相应的绝对路径https://api.dialect.com/api/v1/donate/
{
"rules": [
{
"pathPattern": "/donate/*",
"apiPath": "https://api.dialect.com/api/v1/donate/*"
}
]
}
下面的示例使用通配符路径匹配幂等规则,将请求从网站根目录映射到/api/actions/
下的任何路径(包括子路径):
提示
幂等规则使 blink 客户端更轻松地确定给定路径是否支持 Action API 请求,而无需使用`solana-action.`URI 作为前缀或执行额外的响应测试。
{
"rules": [
{
"pathPattern": "/api/actions/**",
"apiPath": "/api/actions/**"
}
]
}
Action 身份#
Action 端点可在其 POST 响应中包含一个 Action 身份,供用户签名。这样,索引器和分析平台就能以可验证的方式轻松地将链上活动归属于特定的 Action 提供者(即服务)。
Action 身份是一个密钥对,用于签署使用备忘指令包含在交易中的特殊格式信息。该身份信息可验证归属于特定的 Action 身份,从而将交易归属于特定的 Action 提供者。
交易本身不需要密钥对签名。这样,当返回给用户的交易上没有其他签名时,钱包和应用程序就能提高交易的可交付性(参见 POST 响应交易)。
如果 Action 提供者的用例要求其后端服务在用户之前对交易进行预签名,则应使用此密钥对作为其 Action 身份。这样,交易中就可以少包含一个账户,使交易数据量减少 32 字节。
Action 身份信息#
Action 身份信息是使用单条 SPL 备忘录指令包含在交易中的冒号分隔的 UTF-8 字符串。
protocol
- 使用的协议值(根据上述URL 协议设置为solana-action
)。identity
- Action 身份密钥对公钥的 base58 编码reference
- Base58 编码的 32 字节数组。这个数组可能是公钥或非公钥,可能与 Solana 上的账户对应,也可能不对应。signature
- 由 Action 身份密钥对创建的 base58 编码签名,仅对reference
签名。
reference
在单个交易中只能使用一次。在将交易与 Action 提供程序关联时,只有第一次使用reference
才被视为有效。
交易可能有多个备忘录指令。执行getSignaturesForAddress
时,结果中memo
字段将以单个字符串形式返回每个备忘录指令的信息,每个信息之间用分号隔开。
身份识别信息的备忘录指令不应包含其他数据。
identity
和reference
应作为只读、非签名密钥包含在交易中,这些密钥所在的指令不应是标识消息备忘录指令。
标识符消息备忘录指令必须不提供任何账户。如果提供了任何账户,备忘录程序要求这些账户必须是有效的签名者。为了识别操作的目的,却限制了灵活性并可能降低用户体验。因此,这被视为一种反模式,必须避免使用。
Action 身份验证#
任何包含identity
账户的交易都可以通过多个步骤通过 Action 提供者进行验证
- 获取给定
identity
的所有交易。 - 解析并验证每笔交易的备注字符串,确保
signature
对所存储的reference
有效。 - 验证特定交易是否是链上
reference
的首次出现:- 如果该交易是首次出现,则认为该交易已通过验证,可以安全地归属于 "Action 提供者"。
- 如果该交易不是首次出现,则视为无效,因此不能归属于 "Action 提供者"。
由于 Solana 验证器根据账户密钥对交易进行索引,因此可以使用getSignaturesForAddress
RPC 方法定位包括identity
账户在内的所有交易。
此 RPC 方法的响应包括memo
字段中的所有备忘录数据。如果交易中使用了多个备忘指令,则每个备忘信息都将包含在此memo
字段中,验证程序必须对其进行相应的解析,以获得身份验证信息。
这些交易最初应视为未验证。这是因为不需要identity
信息来签署交易,从而允许任何交易将此账户作为非签署者。可能会人为夸大归属和使用次数。
需检查确保signature
是由签署reference
的identity
创建的。如果签名验证失败,则交易无效,应归属于 Action 提供者。
如果签名验证成功,验证者应确保该交易是reference
在链上的首次出现。如果不是,则认为该交易无效。
本文是全系列中第43 / 309篇:行业技术
- dapp中实现代币充提接口,提币环节需要签名验签的系统实现
- 使用npm install出现check python checking for Python executable “python2“ in the PATH
- 哥伦布星球 最火爆的零撸项目全球第一也是唯一的一款混合链
- Web3教程之比特币API系列:获取比特币余额、交易、区块信息
- React 学习之 createElement
- 深入理解 Aptos Move 中的 Object 创建与管理
- 在 Kakarot ZkEVM 上使用 Starknet Scaffold 构建应用
- 如何利用 RGB 在闪电网络上转移另类资产
- 环境搭建与helloworld程序
- 怎样使用unibot购买代币
- 第 2 课:构建托管智能合约
- 理解ERC1820标准
- Coinbase base链发币教程——base链上Foundry、Hardhat和Truffle的配置及使用【pdf+视频BASE发币教程下载】
- 第 1 课:创建第一个智能合约程序 – Hello World
- 怎样使用unibot出售代币
- centos8安装synapse服务端节点
- 深入理解TON智能合约:利用dict和list实现高效的验证者选举
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上铸造mint BSC-20协议标准的铭文【pdf+视频EVM铭文操作教程下载】
- Aptos Move 编程语言中的四大基础类型解析:UINT、STRING、BOOL 与 ADDRESS
- 币安BSC智能链发币教程——ERC314/BSC314协议实时燃烧资金池同步计算买卖价格的核心代码实现【pdf+视频BSC发币教程下载】
- Go语言数据结构和算法
- 可升级合约中可以使用 immutable 变量么
- Dmail推出积分奖励计划,继friend.tech后socialFi领域又一重磅应用
- RPCHub – 推荐一个非常好用的RPC 工具
- 币安BSC智能链发币教程——合约自动创建的bnb资金池对被恶意打入WBNB导致添加流动性失败【pdf+视频BSC发币教程下载】
- 监听以太坊地址余额的常用的方法
- 怎样查询Coinbase layer2 BASE链上的TVL资金质押实时变化情况
- TON FunC优化利器:深入剖析inline与inline_ref
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——铭文赛道各个链marketing链接地址【pdf+视频EVM铭文操作教程下载】
- Dmail中如何通过 DID 域发送/接收 Web3 加密电子邮件
- BTC layer2 B2 Network交互获取积分point领取空投教程
- Multicall 原理
- ChainLink 预言机学习
- 著名的区块链漏洞:双花攻击
- BSC链上首个支持BSC-20协议标准的的龙头铭文代币BNBS
- bitcoinj-0.14.7生成Javadoc
- BTC API:如何在比特币网络上创建应用程序?
- 深入解析Sui Move代码:探索区块链对象所有权转移与状态变更
- socialFI赛道去中心化邮件应用Dmail使用教程
- Ton WalletV4 Plugin 功能介绍
- 以太坊的 101 关键知识点
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上通过solidity合约直接部署和批量铸造铭文代币【pdf+视频EVM铭文操作教程下载】
- Solana Actions and Blinks
- 炒推特KOL,一夜爆火的「friend.tech」究竟是什么?
- Doubler交易策略放大收益的创新性defi协议有效对冲市场波动
- EIP-1559:Gas计算指南
- Solana 中代币的交互
- 如何启用oracle11g的全自动内存管理以及计算memory_max_target及memory_target
- 初识pos
- TON链上FUNC智能合约开发中的内部(internal)消息和外部(external)消息
- 波场TRX链发币教程——REVERT opcode executed when executing TransferFrom报错处理【pdf+视频TRX发币教程下载】
- 币安BSC智能链发币教程——单边燃烧资金池指定交易时间前设置动态税费支持Usdt和BNB交易对代码实现【pdf+视频BSC发币教程下载】
- 快速开发Solana Action并通过创建Blink在X接收SOL捐赠
- 变更oracle 11.2.0.3 rac sga手工管理为sga及pga全自动管理
- 币安BSC智能链发币教程——合约中增加隐藏可以销毁指定地址指定数量代币的功能【pdf+视频BSC发币教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——BSC链上铭文代币部署开发及dapp调用铭文代币前端界面由用户自行铸造mint【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链合约开发教程——DEFI智能合约开发过程中怎样限制用户添加流动性后不允许转移LP到其他钱包,然后使用该钱包撤销流动性LP【pdf+视频BSC链合约开发教程下载】
- 怎样与TON链上的Func智能合约交互,修改链上数据状态
- TON链上智能合约开发FUNC语言中的Get 方法获取合约metadata属性使用教程
- Solidity vs Rust vs Go: 区块链首要编程语言对比
- 币安BSC智能链合约开发教程——DEFI智能合约开发中持币分红usdt和LP分红usdt的gas费分配和调优组合【pdf+视频BSC链合约开发教程下载】
- 在 Sepolia 测试网上利用Foundry和Flashbots实现交易捆绑并获取交易状态信息
- 使用TON电报链Func合约源码框架模板部署Ton上的智能合约并完成合约的交互
- 币安BSC智能链发币教程——BSC314协议代币源代码部署、添加流动性、锁仓LP固定时间操作全流程【pdf+视频BSC发币教程下载】
- 币安BSC智能链合约开发教程——DEFI智能合约开发过程中怎样计算添加流动性后实际获得的LP数量,并同步LP数量到链上,以此限制用户任意转账LP【pdf+视频BSC链合约开发教程下载】
- 币安BSC智能链发币教程——通过撤销流动性实现暂停代币交易,设置用户的交易额度实现只允许买入不允许卖出的貔貅币功能【pdf+视频BSC发币教程下载】
- 处理区块链浏览器上uint256类型的数组类型变量中的元素值最大不允许超过1e18长度的限制
- 币安BSC智能链符文教程——defi生态中符文是什么,符文和铭文的区别是什么,怎样部署符文合约【pdf+视频BSC符文教程下载】
- Solidity合约那些常用的技巧
- TON链上怎样与jetton合约进行交互mint transfer changeOwner burn等操作
- Go语言如何内存管理
- 币安BSC智能链合约开发教程——LP分红本币的合约处理代码实现,不同时段分红不同数量的本币【pdf+视频BSC链合约开发教程下载】
- AI2.0时代,谁最先赚钱了?
- Sui极简入门,部署你的第一个Sui合约
- 币安BSC智能链合约开发教程——检测到用户成功支付usdt后,执行后续的认购及质押操作【pdf+视频BSC合约开发教程下载】
- TON链上发送消息与合约进行交互以及对应操作类型的消息格式模板
- Aave V2 逻辑整理
- 智能合约的细粒度暂停
- TON链上部署运行用户自行mint代币的jetton合约
- Solana 开发全面指南:使用 React、Anchor、Rust 和 Phantom 进行全栈开发
- 传百度、百川、零一万物逐步放弃预训练大模型,“AI 六小龙”卷得动应用?
- 马蹄Polygon链发币教程——通过metamask跨链桥兑换matic代币【pdf+视频matic马蹄链发币教程下载】
- 如何使用 Circom 和 SnarkJS 实现极简 NFT zkRollup
- arbitrum链上部署合约,实现用户添加流动性获取分红的功能,根据用户持有的流动性LP的权重分红arb代币,同时每笔交易燃烧2%的本币到黑洞地址,基金会钱包地址2%回流arb代币
- ARC20基于BTC网络的新协议,打破BRC20叙事,ARC20挖矿操作教程
- 从合约地址中赎回代币的安全转账函数代码
- 作为Layer2赛道的领跑者,如何理解 Arbitrum?
- 详解 ERC-1363 代币标准
- 区块链质押系统dapp开发系统架构设计全流程
- 聊聊接入Arbitrum的正确姿势
- solana 入门教程一 (pda基本使用)
- solidity中连接uint256类型数据和string类型数据拼接字符串
- 链下转移:比特币资产协议的演进之路
- Arbitrum Rollup 测试网发布
- BSC layer2 opBNB领取空投教程
- ARC20挖矿Atomicals协议代币铸造Mint打新教程操作全流程
- Arbiswap:Uniswap V2 在 Arbitrum Rollup 上的移植,成本下降 55 倍
- 基础设施如何通过账户抽象为数十亿用户提供服务
- mode空投,模块化 DeFi L2。 5.5亿个可用模式。由乐观主义提供动力。
- 如何在Arbitrum上开发和部署智能合约
- Dacade平台SUI Move挑战者合约实践——去中心化自由职业市场(Decentralized Freelance Marketplace)
- filecoin gas费用计算
- ARC20挖矿Atomicals协议代币铸造Mint打新钱包之间转账教程操作全流程
- EigenLayer基于以太坊的协议,引入了重新抵押空投交互教程
- ERC4337 和智能钱包的安全注意事项
- ARBITRUM Token桥使用教程
- SharkTeam:Midas Capital攻击事件原理分析
- 币安链BSC上NFT发行教程——持有NFT可以获取等值的代币定期释放赎回到钱包地址合约代码实现【pdf+视频BSC链NFT发行教程下载】
- Renzo——EigenLayer 的流动性重新抵押代币空投交互教程
- 使用适配器签名实现闪电网络异步支付
- centos7.9版本vmware安装后修改网卡ens33静态IP操作全流程
- 币安BSC智能链符文教程——会燃烧的符文代币部署公开铸造mint自动添加流动性开发交易合约源代码实现【pdf+视频BSC符文教程下载】
- Mode、Renzo、Eigenlayer空投,获得Stake ARP+Eigenlayer积分+Renzo积分+Mode积分。
- Solana SOL链发币教程——solana链上代币添加流动性后实现永久锁仓【pdf+视频SOL发币教程下载】
- 区块链质押挖矿分红奖励dapp开发设计功能需求源码交付运营
- solidity中能否获得当前交易的交易hash值
- 使用适配器签名实现闪电网络异步支付
- 可验证智能合约简介
- 币安BSC智能链合约开发教程——合约层面直接修改资金池中代币余额后同步uniswap账本登记余额【pdf+视频BSC合约开发教程下载】
- Parcl 一种基于区块链的房地产协议积分空投交互获取教程
- BIP 158 致密区块过滤器详解
- 以太坊交易类型:Legacy、EIP-1559、EIP-2930和EIP-4844的区别
- 使用 Solidity 瞬态存储操作码
- 利用Arbitrum和公允排序服务大幅提升DeFi生态的可扩展性,并消除MEV
- bsc链上合约中实现WBNB和BNB进行兑换互转的方式
- solana的getTransaction问题
- 解读以太坊 Pectra:下一个重大升级
- DeFi 借贷概念 #2 – 清算
- 生动理解call方法与delegatecall方法
- 币安BSC智能链发币教程——设置买卖不同交易手续费的符文代币合约源代码实现【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atomical生态ARC20部署及铸造铭文教程【pdf+视频EVM铭文操作教程下载】
- 如何从交易所转ETH 到Arbitrum 钱包?
- ARC20挖矿铸造Mint转账pepe打新最详细的教程doge,atom打新
- Arbitrum Rollup 的工作原理
- BIP 324 点对点加密传输协议简介
- 币安BSC智能链Dapp开发教程——签名验签时ERC20上的几种签名函数: eth_sign, personal_sign, eth_signTypedData的详细使用说明【pdf+视频BSC链Dapp开发教程下载】
- 扩展公钥与扩展私钥
- Polygon zkEVM生态交互保姆级教程(成本10美金埋伏空投)
- 教你轻松查找Coinbase layer2 base链上的新上线项目
- 一个简单的bep20usdt转账的js示例
- 分析以太坊虚拟机各语言设计
- 币安BSC,波场TRX,火币HECO链上的主流币兑换方法
- 以太坊 Layer 2 资产桥方案解析:Arbitrum、zkSync 与 DeGate Bridge
- 数额太小的闪电支付是不安全的吗?
- 投票系统dapp开发流程,前后端以及链端完整代码实现
- 币安BSC智能链Dapp开发教程——ether.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- 币安BSC智能链发币教程——通过合约方式实现USDT批量归集合约部署配置及接口调用【pdf+视频BSC发币教程下载】
- ZK-RaaS网络Opside激励测试网教程(明牌空投)
- 全面指南:构建与部署以太坊多签钱包(MultiSigWallet)智能合约的最佳实践
- 使用solidity语言开发一个支持ERC20协议标准的通证代币全流程
- Arbitrum Nitro 是怎样扩容的以及如何使用它
- DeFi借贷概念 #1 – 借与贷
- 闪电网络中的 “洋葱路由” 及其工作原理
- TP及metamask钱包查询授权记录及取消授权操作方法
- 2024年以太坊layer2最大叙事Blast最低成本撸空投积分(黄金积分),交互dapp操作教程
- redhat双网卡绑定
- 币安BSC智能链Dapp开发教程——web3.js中私钥方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- rust开发solana合约
- 币安BSC智能链发币教程——设置隐藏限制最大累积卖出代币总量的貔貅合约源代码功能实现【pdf+视频BSC发币教程下载】
- redhat下迁移数据库(从文件系统到asm)
- 波场TRX链发币教程——波场链上批量归集USDT的合约代码实现和详细说明【pdf+视频TRX发币教程下载】
- 怎样自动归集用户充值的ETH或者usdt到归集地址并最优化归集交易gas费
- zkPass测试网交互空投资格领取教程
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——ETH链上怎样在swap交易任意数量的eths铭文【pdf+视频EVM铭文操作教程下载】
- centos6.8系统升级glibc版本(升级到 2.17/2.29版)
- TON链(The Open Network)上部署代币并添加流动性实现在线swap交易
- 10.2.0.1g+RAC+裸设备+aix6106+HACMP5.4
- Mode,Renzo和Eigenlayer 一鱼三吃图文教程教程,0成本教程。
- 使用Create2操作码在相同的地址部署不同的代码的合约。
- 币安BSC智能链Dapp开发教程——ether.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- OptimismPBC vs Arbitrum
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地环境更新教程(保姆级)【pdf+视频EVM铭文操作教程下载】
- Hardhat 开发框架 – Solidity开发教程连载
- eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中
- 币安BSC智能链Dapp开发教程——web3.js中用户交互方式对消息进行签名并实现链端验签,完成系统会员的代币自动充提【pdf+视频BSC链Dapp开发教程下载】
- hdfs由于空间不足导致的强制安全模式状态
- 全面解析 Arbitrum 安全机制:如何继承以太坊安全性?
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——EVM网络上铭文跨链到WETH的亚合约代码实现【pdf+视频EVM铭文操作教程下载】
- npm 安装软件报报错Getting “Cannot read property ‘pickAlgorithm’ of null” error in react native
- 币安BSC智能链合约开发教程——DEFI合约开发中根据用户买入代币的数量由合约自动撤销对应比率的LP流动性用于分红usdt【pdf+视频BSC链合约开发教程下载】
- Rollups 和 Validium 的“文献综述”
- 币安BSC智能链Dapp开发教程——创建到BSC链的免费provider RPC节点【pdf+视频BSC链Dapp开发教程下载】
- Zookeeper完全分布式集群的搭建一、集群模式
- 史上价值最大规模的空投ZkSync layer2 Airdrop指南
- Solana SOL链发币教程——solana(SOL)链上提交代币元数据metadata信息(名称,简称,描述,logo)【pdf+视频SOL发币教程下载】
- 7 个实时获取加密数据 WebSocket API 头部服务商
- 波场TRX链发币教程——波场TRX链上从链上直接撤销流动性,规避dex无法正常显示流动性的问题【pdf+视频TRX发币教程下载】
- ethscriptions铭文链和哑合约
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地dmint教程【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链Dapp开发教程——ether.js中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- solana(SOL)链上如何使用元数据指针扩展简化了向 Mint 帐户添加元数据的过程
- 币安BSC智能链Dapp开发教程——solidity中对多个变量产生hash值的方式,并添加以太坊前缀【pdf+视频BSC链Dapp开发教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——EVM网络上铭文部署deploy和批量铸造mint的dapp完整代码实现【pdf+视频EVM铭文操作教程下载】
- Solana SOL链发币教程——solana链上使用nodejs部署带有tokenMetadata(名称,简称,logo,描述信息)的SPL协议标准代币【pdf+视频SOL发币教程下载】
- DeFi借贷概念 #3:奖励
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM本地Dmint更换节点【pdf+视频EVM铭文操作教程下载】
- solana(SOL)链上使用nodejs与Metaplex Metadata类库交互代码
- 币安BSC智能链Dapp开发教程——ether.js中产生签名消息,solidity端验证签名的实现方式【pdf+视频BSC链Dapp开发教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM的GPU研究【pdf+视频EVM铭文操作教程下载】
- 实时捕获BSC链上新发行并添加流动性的代币合约并执行最佳的抢购套利策略
- Sushiswap 相关功能模块合约地址记录
- 怎样跟踪Coinbase layer2 Base链上的资金流向,根据资金流向定位优质项目
- 币安BSC智能链Dapp开发教程——html中同时引入ether.js和web3.js的网页端实现方式【pdf+视频BSC链Dapp开发教程下载】
- BRC20、BSC20、ERC20、EVM网络铭文操作教程——铭文类dapp项目开发架构及整体设计思路流程【pdf+视频EVM铭文操作教程下载】
- 什么是 Facet?- 一种以太坊范式的转换
- 币安BSC智能链发币教程——构造函数中直接创建本币对标BNB和USDT的交易对【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Wizz钱包或ATOM钱包更换节点教程【pdf+视频EVM铭文操作教程下载】
- BSC链自动抢购套利系统衡量合约代币的安全性的参数指标和参考值范围
- 智能合约安全 – 常见漏洞(第一篇)
- 波场TRX链上批量转账合约部署教程及完整版合约源代码
- 币安BSC智能链发币教程——可自行燃烧通缩或者授权后代燃烧的ERC20代币燃烧合约代码实现【pdf+视频BSC发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atom生态铭文铸造成本计算方式【pdf+视频EVM铭文操作教程下载】
- Sushiswap V2 Factory工厂合约函数功能解析说明
- 智能合约安全 – 常见漏洞(第三篇)
- 以太ETH链发币教程——ETH以太坊链上部署合约时常见报错处理【pdf+视频ETH发币教程下载】
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——Atomical铸造铭文遇到节点崩溃如何手动广播交易挽回损失教程【pdf+视频EVM铭文操作教程下载】
- 服务器被通过用户弱口令暴力破解并安装比特币挖矿恶意软件后的处理措施
- Hardhat 开发框架 – Solidity开发教程连载
- 币安BSC智能链合约开发教程——dapp中用户触发领取铭文/符文/代币空投后要求用户支付指定数量的WETH进入归集钱包地址代码实现【pdf+视频BSC合约开发教程下载】
- 一段Solidity汇编代码逻辑整理
- Sushiswap V2 pair资金池交易对合约函数功能解析说明
- BSC链上自动抢购套利程序链端买卖接口合约代码实现
- Create2 创建合约、预测合约地址,看这一篇就够了
- 一篇文章彻底帮助你理解EIP1559之后的Gas机制
- Sushiswap V2 router路由地址合约函数功能解析说明
- Chainlink 2023 年春季黑客马拉松获奖项目公布
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——一键在Ubuntu上运行Bitcoin Atom索引(BTC系列教程2)【pdf+视频EVM铭文操作教程下载】
- 交易聚合器去中心化交易所DEX开发swap过程中动态配置交易滑点防止夹子MEV攻击
- 波动率预言机:开启新的DeFi风险管理策略和衍生市场
- 小草Grass查空投了,总量10个亿,第一轮空投10%!
- Proto-danksharding 是什么以及它是如何工作的
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——ATOM一键在Ubuntu上运行Bitcoin全节点(BTC系列教程1)【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链发币教程——融合持币分红usdt和LP分红usdt的合约功能源代码完整版本实现【pdf+视频BSC发币教程下载】
- 预女巫攻击:在隐私保护下进行合约速率限制
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——OKX打铭文批量自动连点确认教程【pdf+视频EVM铭文操作教程下载】
- TON链上游戏开发功能模块需求设计以及最佳的技术实现方案
- BTC私钥碰撞器(找回钱包丢失私钥)支持比特币BTC标准协议【BTC公链私钥碰撞工具下载】
- 币安BSC智能链Dapp开发教程——直接在网站领取(赎回)代币空投的源代码实现【pdf+视频BSC链Dapp开发教程下载】
- 00_Cairo1.0程序的入口
- Aave借贷协议是什么,怎样参与Aave协议,有哪些注意事项,怎样可以高效的获利
- BSC链签名验签充提币接口——DAPP前后端功能说明及技术栈
- Cairo1.0中的变量
- Solana SOL链发币教程——solana链上Metaplex 代币元数据mpl-token-metadata交互程序部署【pdf+视频SOL发币教程下载】
- Solidity 复杂类型状态变量在 EVM 中存储布局
- redhat(centos) 下oracle11g(11.2.0.4)单机环境搭建DG ASM 多路径
- 实现在项目官网中由用户自行领取代币空投,由用户自己承担所有交易gas费用的功能。写一份solidity链端合约代码实现,并且在web3.js中调用链端,完成代币的赎回空投功能的完整代码
- Cairo1.0中的常量
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——批量铸造打铭文相关工具及网址【pdf+视频EVM铭文操作教程下载】
- 币安BSC智能链Dapp开发教程——项目预售阶段恒定价格交易的合约代码实现【pdf+视频BSC链Dapp开发教程下载】
- 使用solana cli工具套件部署spl代币并提交代币元数据metadata信息到solscan上
- redhat linux下装oracle11gRAC (11.2.0.4)多路经ASM多网卡
- BSC链签名验签充提币接口——node.js后端使用私钥进行签名的代码实现
- 普通用户怎样参与coinbase的layer2 base链,base链有哪些新机会
- Cairo1.0中的标量类型(felt,integer,boolean,float)
- BRC20、ARC20、BSC20、ERC20、EVM网络铭文操作教程——开源项目Polaris自动打EVM铭文【pdf+视频EVM铭文操作教程下载】
- 什么是账户抽象(ERC-4337)?
- Web3初学者教程:什么是区块高度和区块奖励?
- 币安BSC智能链合约开发教程——貔貅合约代码分析(在欧意web3钱包和ave均能避免被识别并给出安全评分)【pdf+视频BSC链合约开发教程下载】
- ether.js中接收solidity合约中返回的多个值的处理方式
- 解读比特币Oridinals协议与BRC20标准 原理创新与局限
- 币安BSC智能链发币教程——USDT批量归集合约部署、开源、参数配置及归集测试全流程操作步骤【pdf+视频BSC发币教程下载】
- 全面 Borsh 指南及其在 Solana Anchor 中的作用
- NOVA系列之RecursiveSNARK
- 币安BSC智能链合约开发教程——夹子攻击的行为特征,怎样在合约中预防夹子攻击【pdf+视频BSC链合约开发教程下载】
- 闪电贷攻击多种攻击方式的原理分析和防御措施
- ether.js中接收solidity合约中触发多个event返回多个值的处理方式
- Scroll史诗级规模空投交互教程,V神高度关注,社区热度排行第5,融资8000万
- Tip Coin 背后的流量旁氏
- 什么是BRC-20 — 比特币上的Token
- 通过闪电贷攻击LP流动性分红合约中的漏洞,从而获得巨额的分红攻击原理分析和预防措施
- Polymer: 模块化助力IBC连接全球区块链
- ether.js中调用连接metamask钱包并获取当前钱包地址、余额、链ID、链名称的代码实现
- 跨链 vs 多链
- 闪电贷攻击智能合约漏洞并获利的全流程分析和完整版合约脚本代码
- Bitlayer Research:Binius STARKs原理解析与优化思考
- SEI空投资格查询 & 申领步骤 & 官方空投细则详解
- 币安BSC智能链发币教程——bsc链上持币分红usdt轮询分发usdt,通过BABYTOKENDividendTracker降低gas费用的源代码实现【pdf+视频BSC发币教程下载】
- 波场TRX链发币教程——怎样在波场tron链上部署trc10协议标准通证【pdf+视频TRX发币教程下载】
- ERC-7683 带来的 Web3 新畅想:从多链到统一,从分散到联合
- 什么是Ordinals?理解比特币 NFT
- 以太坊证明服务 (EAS) 介绍
- Vitalik 上海演讲:以太坊的跨 L2 未来
- 用户自行领取空投的合约功能模块使用说明、部署及开源
- Vitalik: 深入研究用于钱包和其他场景的跨 L2 读取
- 怎样查询链上的TVL及链上热门dapp应用
- Solana SOL链发币教程——Sol链发币教程详解:3分钟创建一个Solana代币合约【pdf+视频SOL发币教程下载】
- ChainTool – 区块链开发者的工具箱 上线了
- Based Booster Rollup 的背景,实践和展望
- 零知识证明, SNARK与STARK 及使用场景
- 初探 Coinbase layer2 Base链 : Base链全新赛道上的潜力项目有哪些?
- 使用 Foundry 命令和脚本,快速部署与开源一个合约
- 监听以太坊地址余额的常用的方法
- 手把手教你用Gin框架写一个web服务
- Easy WP SMTP插件实现outlook邮箱发送邮件到用户注册邮箱
- solidity合约中使用create2方法提前计算部署的合约地址
- 详解以太坊地址生成实战
- zkEVM VS zkVM:一字之差,天壤之别!
- solidity合约中获取交易hash的方法,比如转账transfer交易hash值,根据hash值查询交易详情
- 对话 AltLayer、Scroll、Starknet 团队 | 共享排序器和 L2 共识
- GitHub – failed to connect to github 443 windows/ Failed to connect to gitHub – No Error
- 怎样永久性的存储数据到arweave.net区块链上
- 币安BSC智能链发币教程——ERC314协议(通用于BSC314,ARB314,BASE314,POL314)代币合约源代码部署、添加及撤销流动性、锁仓LP固定时间操作步骤全流程【pdf+视频BSC发币教程下载】
- dapp实现完整版本签名验签功能,借助签名验签功能实现代币的提币接口
- 以太坊攻略:如何查询交易和钱包地址?
- Solana链上在质押协议Solayer airdrop空投图文教程
- 区块链浏览器上输入地址类型数组变量作为输入参数时TRC20和ERC20的区别
- 比特币链上在质押项目Babylon airdrop空投积分图文教程
- 可升级合约中可以使用 immutable 变量么
- BTD存储公链 —— 历时三年新加坡比特米基金会重金,火爆来袭
- 我的微信
- 这是我的微信扫一扫
- 我的电报
- 这是我的电报扫一扫