技能使用指南

multiversx-crypto-verification(MultiversX加密验证API技能)Skill 有什么用?

详解 MultiversX加密验证API技能:一键安装后即可在智能合约中完成 SHA256、Keccak256、RIPEMD160 哈希与 Ed25519、secp256k1、secp256r1、BLS 验签,并给出 Panic 与 Bool 接口区别、哈希类型选型与反模式清单,帮助开发者少踩坑、快写对链上验签逻辑。

MultiversX加密验证API技能Skillmultiversx-crypto-verification
8 个章节 约 16 分钟阅读 AI 智能生成

MultiversX加密验证API技能:让智能合约的哈希与验签一次写对

  • 它是什么:一个面向 MultiversX 智能合约(Rust SDK v0.64+)的 self.crypto() API 参考型 AI 技能,专注于哈希计算、签名验证与签名编码。
  • 覆盖哪些算法:哈希支持 SHA256、Keccak256、RIPEMD160;验签支持 Ed25519、secp256k1、secp256r1、BLS 以及 BLS 聚合签名。
  • 最实用的差异化点:明确区分「Panic 型」与「Bool 型」两类验签接口,避免「调用成功但根本没检查结果」这类高危写法。
  • 最适合谁用:正在写链上验签、跨链桥、白名单授权、承诺-揭示等逻辑的智能合约开发者与安全审计人员。
  • 使用成本:以对话方式按需获取代码片段与算法选型建议,无需反复翻文档、翻源码。

1. 该技能叫什么?如何一键安装 AI 技能提升开发效率?

技能基本信息

项目 内容
中文名 MultiversX加密验证API技能
英文名 multiversx-crypto-verification
技能 ID 12540
技术领域 MultiversX 智能合约开发 / 密码学操作

它解决什么问题

在 MultiversX 上写智能合约时,只要业务涉及「证明某个地址确实签过某段数据」或者「证明某个数据没有被篡改」,就绕不开 self.crypto() 这一组接口。但实际开发中经常遇到三类麻烦:

  1. 接口签名记不住:Ed25519 公钥是 32 字节、BLS 公钥是 96 字节、secp256r1 公钥可以是 33 或 65 字节,一旦传错长度,报错信息并不直观。
  2. 失败语义容易搞反:verify_ed25519 返回的是 (),签名无效会直接 Panic 回滚交易;而 verify_secp256k1 返回 bool,无效时只是返回 false。如果不检查这个 bool,编译器不会报错,但验签实际上等于没做。
  3. 哈希类型选错:以太坊签名必须用 Keccak256 预哈希,而不是 SHA256,这类细节错过一次就可能导致整条跨链逻辑失效。

这个技能把上述内容整理成一份可直接被 AI 调用的参考:哈希函数清单、验签方法签名、MessageHashType 枚举取值、DER 编码方法、算法选型指南、常见模式与反模式。

一键安装的思路与步骤

  1. 确认前提:你的项目已使用 MultiversX Rust 智能合约框架,且 SDK 版本为 v0.64 及以上(本技能内容基于该版本撰写)。
  2. 找到安装入口:在你的 AI 技能市场 / 技能包管理界面中,按技能名 multiversx-crypto-verification 或技能 ID 12540 检索并添加(具体入口路径与命令以官方说明为准)。
  3. 完成安装:按平台提示确认安装,使该技能在当前会话或项目中生效。
  4. 验证是否生效:在对话中提出一个具体的链上验签问题,例如「帮我在 MultiversX 合约里校验一条以太坊签名,用哪种哈希类型?」如果回复能给出 verify_custom_secp256k1 搭配 MessageHashType::ECDSAKeccak256 的写法,说明技能已正常加载。

安装本身只是一次性动作,真正的效率提升来自「写合约时随手就能问」的使用方式。

2. 该技能的主要功能和特点

一、三类哈希函数,固定输出长度

  • .sha256(data):返回 32 字节,适合通用哈希、默克尔树构建。
  • .keccak256(data):返回 32 字节,主打以太坊兼容场景,例如 EIP-712 相关逻辑。
  • .ripemd160(data):返回 20 字节,用于比特币地址派生等少见场景。

所有哈希函数接受 &ManagedBuffer(或任何可借用为 ManagedBuffer 的类型),返回固定大小的 ManagedByteArray,类型层面就能防止长度错乱。

二、五类签名的完整验签接口

  • Panic 型(无效签名直接让交易失败、自动回滚):verify_ed25519、verify_bls、verify_secp256r1、verify_bls_signature_share、verify_bls_aggregated_signature。
  • Bool 型(返回 true / false,合约继续执行):verify_secp256k1、verify_custom_secp256k1。

三、MessageHashType 枚举,精确控制预哈希方式

提供 ECDSAPlainMsg、ECDSASha256、ECDSADoubleSha256、ECDSAKeccak256、ECDSARipemd160、ECDSABlake2b 六种取值,分别对应原始消息、SHA256、双重 SHA256(比特币)、Keccak256(以太坊)、RIPEMD160、Blake2b。

四、DER 签名编码

encode_secp256k1_der_signature(r, s) 可以把预言机等外部来源给出的 32 字节 r、32 字节 s 组件,转换成 secp256k1 验签所需的 DER 格式。

五、算法选型指南与反模式提示

  • Ed25519:MultiversX 原生签名,验证链上用户或合约签名时的默认选择。
  • secp256k1:以太坊 / 比特币兼容,桥接合约与跨链验证的主力。
  • secp256r1:NIST P-256 / WebAuthn / Apple Secure Enclave,适合基于密钥的认证。
  • BLS 与 BLS 聚合:验证器签名、多签聚合、门限方案。

和普通工具比强在哪:普通文档只告诉你「有哪些方法」,这个技能还会提醒你「哪些写法是错的」。例如「调用 verify_secp256k1 却不检查返回值」「把 Ed25519 的 Panic 当异常去 try-catch」「给以太坊签名用 ECDSASha256」这三类反模式,都被明确点名并给出正确写法。

3. 如何使用该技能?

步骤一:明确你的验证目标

先想清楚三件事:验证谁的签名(用户 / 合约 / 验证器)、来自哪条链(MultiversX 原生、以太坊、比特币、WebAuthn)、失败后期望什么行为(直接回滚,还是自行处理错误)。这三件事直接决定用哪个方法。

步骤二:用自然语言描述需求,获取代码骨架

示例输入:

我要在 MultiversX 合约里加一个带签名校验的入口,签名方是我预先配置的 trusted signer,签名无效时必须让交易失败。

预期输出(对应技能中的「Ed25519 签名门控」模式):

#[endpoint(executeWithSignature)]
fn execute_with_signature(&self, data: ManagedBuffer, signature: ManagedBuffer) {
    let signer = self.trusted_signer().get();
    // 无效则 Panic,交易自动回滚
    self.crypto().verify_ed25519(&signer, &data, &signature);
    self.process_data(&data);
}

步骤三:需要优雅处理时,改用 Bool 型接口

示例输入:

同一个入口我想支持以太坊钱包签名,签名不合法时返回 false 而不是整笔交易挂掉。

预期输出:

#[endpoint(verifyEthSignature)]
fn verify_eth_signature(&self, key: ManagedBuffer, message: ManagedBuffer, signature: ManagedBuffer) -> bool {
    let valid = self.crypto().verify_custom_secp256k1(
        &key,
        &message,
        &signature,
        MessageHashType::ECDSAKeccak256,
    );
    require!(valid, "无效以太坊签名");
    valid
}

步骤四:让技能帮你检查写法

把自己的合约片段贴进对话,请技能对照「反模式」清单做一次自查,重点确认:Bool 型接口的返回值有没有被 require! 或 if 消费、Panic 型接口有没有被放进不可能生效的错误处理分支、哈希类型是否与来源链匹配。

步骤五:本地编译与测试

把生成的代码放回合约工程,执行编译与单元测试。链上密码学相关逻辑建议额外准备「签名有效 / 签名无效 / 消息被篡改 / 公钥长度错误」四组用例。

步骤六:按需组合进阶模式

如果需要隐藏答案后再揭晓,可以请技能给出「承诺-揭示」模式(commit 存 SHA256 哈希、reveal 重新计算并比对);如果需要一次校验多个验证器,可使用 verify_bls_aggregated_signature 传入公钥列表与聚合签名。

4. 同类型竞品对比分析

方案名称 定位 核心功能 安装/使用门槛 适用场景 优势与不足
MultiversX加密验证API技能(本技能) 面向 MultiversX 合约的密码学参考型 AI 技能 哈希、Ed25519/secp256k1/secp256r1/BLS 验签、DER 编码、选型指南、反模式提示 低:通过技能市场安装后对话即用 合约验签逻辑编写、代码自查、算法选型 优势:场景贴合链上、直击易错点;不足:范围限于该链生态的 self.crypto() 接口
官方框架文档与源码 权威一手资料 完整 API 与方法签名说明 中:需要自行检索,版本差异需判断 深度确认细节、排查版本兼容 优势:绝对权威;不足:不主动提示错误写法,阅读成本高
通用 Rust 密码学库(如 ed25519、k256 等生态库) 通用密码学实现 各类签名算法与哈希实现 中高:需自行引入依赖并处理字节布局 链下服务、工具脚本 优势:通用性强;不足:链上类型(ManagedBuffer)需额外适配,不能直接替代链上内置验签
通用 AI 编码助手 泛化代码生成 通用补全与问答 低 通用编程任务 优势:覆盖面广;不足:链上特定 API 细节容易给出过时或臆造写法

5. 该技能的典型应用场景与实际体验情况

场景一:跨链桥接合约的以太坊签名校验

角色是跨链桥开发者。痛点在于以太坊侧签名使用 Keccak256 预哈希,而很多示例代码错误地套用了 SHA256,导致验签永远失败却找不到原因。使用方式是把「以太坊 EOA 签名如何在本链验证」直接抛给技能,得到 verify_custom_secp256k1 + MessageHashType::ECDSAKeccak256 的组合,并附上 require! 检查示例。实际体验:一次性给出正确哈希类型,省去了反复试错;注意点在于公钥格式需要与来源链约定一致。

场景二:白名单授权与链下签名执行

角色是 DApp 后端与合约开发者。痛点是希望用户凭链下签名触发链上操作,而不必每笔都发一笔授权交易。技能给出「Ed25519 签名门控」模式:从存储中取 trusted signer,调用 verify_ed25519 后继续执行 process_data。实际体验:Panic 语义与「无效即拒绝」的业务意图天然契合,代码非常短;注意点是要提前把 trusted signer 管理好,公钥需为 32 字节。

场景三:多验证器 BLS 聚合签名校验

角色是共识 / 验证器相关合约的开发者。痛点是逐个验证多个 BLS 签名成本高、代码冗长。技能指出存在 verify_bls_aggregated_signature(keys, message, signature),可传入公钥列表与单个聚合签名一次完成校验。实际体验:省掉了循环与状态拼装;注意点是聚合签名无效时会直接 Panic,需要根据业务决定这是否符合预期。

场景四:承诺-揭示式盲拍与抽奖

角色是活动合约开发者。痛点是参与者在截止前不能暴露出价或答案。技能给出 commit 存 SHA256 哈希、reveal 重算比对的完整模式,并在哈希不一致时用 require! 拦截。实际体验:模式成熟、可直接复用;注意点是揭示阶段需要防止重复提交,示例中通过 clear() 清理存储解决。

整体上手感受:对已经熟悉 Rust 合约框架的开发者几乎没有门槛,问一次就能拿到可编译的骨架;对刚接触链上密码学的开发者,最有价值的其实是那些「反模式」提示——它把最容易踩的坑提前摆到了台面上。

6. 该技能能为用户带来的价值

  • 减少查文档往返:方法签名、字节长度、返回语义集中在一次对话里,写一个验签入口的时间从「翻半天文档 + 试错」压缩到几分钟。
  • 降低安全风险:明确区分 Panic 型与 Bool 型接口,直接消灭「verify_secp256k1 返回值被忽略」这类静默失效问题,这类缺陷一旦上线往往意味着资金风险。
  • 降低跨链门槛:secp256k1、secp256r1、BLS 聚合的使用条件与哈希类型配对讲清楚,做跨链与 WebAuthn 场景时不必再靠猜。
  • 代码可维护性提升:统一采用官方推荐的模式(门控、承诺-揭示、聚合校验),团队内新成员阅读代码时理解成本更低。
  • 长期价值:这套密码学接口在 MultiversX 生态中变化较小,沉淀下来的模式与反模式清单,可作为团队内部的验签实现规范反复复用。

7. 常见问题 FAQ

Q1:这个技能怎么安装?需要付费吗?

在 AI 技能市场或技能包管理入口中,按技能名 multiversx-crypto-verification 或技能 ID 12540 检索并添加即可,具体安装路径、可用平台与是否收费以官方说明为准。安装后无需额外配置即可在对话中调用。

Q2:它和直接看 MultiversX 官方文档有什么区别?

官方文档是权威但静态的,需要你自己检索并判断版本差异;这个技能把内容整理成可被追问的形式,并且额外提供算法选型指南和反模式清单——也就是「哪些写法是错的」。二者配合使用效果最好:先问技能拿骨架,再回官方文档确认版本细节。

Q3:Ed25519 验签失败为什么不能捕获异常?

因为 verify_ed25519 返回类型是 (),签名无效时交易直接 Panic 并回滚,不存在可捕获的 Result。这实际上是一种「无效签名 = 未授权操作」的天然映射。如果你需要优雅处理失败或尝试多种验证方式,应改用返回 bool 的 verify_secp256k1 / verify_custom_secp256k1 并在业务层检查。

Q4:什么时候用 Ed25519,什么时候用 secp256k1 或 secp256r1?

验证 MultiversX 原生签名(链上用户、合约)用 Ed25519,这是默认选择;做以太坊、比特币兼容或跨链桥接时用 secp256k1;做 NIST P-256、WebAuthn、Apple Secure Enclave 相关的密钥认证时用 secp256r1;验证验证器签名或多签聚合时用 BLS。

Q5:这个技能适合谁用?

主要面向在 MultiversX 上编写智能合约的 Rust 开发者、需要实现跨链验签的桥接开发者,以及做合约安全审计、需要快速核对密码学写法是否合规的审计人员。如果你的项目完全不涉及该链生态,它的参考价值会相对有限。