.near-credentials密钥对中的公钥为何看似无关紧要?
NEAR本地公钥修改后仍能转账的原因解析
ED25519密钥对的本质特性
ED25519加密体系中,合法私钥本身包含了对应公钥的完整信息——只要私钥有效,就能直接推导出与之匹配的真实公钥,完全不需要依赖本地存储的公钥字符串。
NEAR CLI的实际签名流程
当你执行near send foo.near foo.near 1命令时,CLI的工作流程是:
- 读取本地
.near-credentials/mainnet/foo.near.json中的私钥ed25519:secrettt - 自动从该私钥推导得出对应的真实公钥
ed25519:publiccc - 使用私钥对交易进行签名,签名数据中会附带这个推导出来的真实公钥
- 将签名完成的交易广播到NEAR主网节点
链上验证的核心逻辑
NEAR主网节点验证交易时,只关注两个核心点:
- 交易签名是否由对应公钥的私钥生成(签名有效性校验)
- 该公钥是否在目标账户
foo.near的权限列表中,且具备执行转账的全权限
- 由于你使用的私钥是合法的全权限密钥,推导出来的公钥确实存在于链上账户的权限列表里,所以交易能顺利通过验证并执行。
本地公钥无效的原因
你把本地凭证里的公钥改成ed25519:giggle这类无意义字符串时,CLI并不会使用这个假公钥——它会直接忽略本地存储的公钥,从私钥中自动推导真实公钥,因此本地的假公钥完全不参与签名和验证流程,自然不会影响交易结果。
补充:修改私钥失败的合理性
当你修改私钥为无效值时,CLI无法从其推导合法公钥,也无法生成有效的交易签名,链上节点会直接判定签名无效,转账自然失败,这符合预期逻辑。
内容的提问来源于stack exchange,提问作者Erik Trautman
相关产品推荐
相关产品推荐

