十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EOS 钱包开发攻略:一文搞懂 token-core-android 权限模型与多密钥签名

EOS 钱包开发攻略:一文搞懂 token-core-android 权限模型与多密钥签名 EOS 钱包开发攻略一文搞懂 token-core-android 权限模型与多密钥签名【免费下载链接】token-core-androida blockchain private key management library on android项目地址: https://gitcode.com/gh_mirrors/to/token-core-android在 Android 上做区块链钱包开发EOS 的权限模型与多密钥签名常常是新手最容易踩坑的地方。本文以开源库token-core-android一个基于 Android 的区块链私钥管理库同时支持 BTC / ETH / EOS 三种链为主线用通俗的语言带你理解 EOS 的 owner / active 权限结构并手把手梳理多密钥签名的完整流程。读完本文你就能明白一个 EOS 账户为什么可以有多把私钥以及如何在你的 App 里安全地管理它们。一、为什么 EOS 钱包开发要先搞懂权限模型传统的以太坊钱包一个地址 一把私钥逻辑很简单。但 EOS 完全不同一个 EOS 账户account可以同时挂载多把公钥每把公钥分别对应不同的权限等级。在 EOSKeystore.java 中可以看到两个核心权限常量权限名称作用常见使用场景owner账户最高权限可修改所有权限极少使用仅做冷备份active日常操作权限可转账、投票日常 App 调用简单理解owner 是钥匙之王active 是日常钥匙。这种设计让用户可以把日常使用的 active 私钥存在手机上而把 owner 私钥离线保存即使手机丢了也不怕账户被彻底控制。 开发启示EOS 钱包 App 的私钥管理天然就是多密钥结构你的代码必须能同时持有、加密、解密多把私钥。二、token-core-android 如何组织 EOS 的多密钥数据2.1 权限对象 PermissionObject在导入 EOS 钱包时你需要告诉库这把公钥对应哪个权限。核心数据结构是 EOSKeystore.java 中的内部类PermissionObject它只包含三个字段permission权限名owner / active / 自定义如 snspublicKey对应的 EOS 公钥形如EOS6MRyAj...parent父权限2.2 密钥条目 KeyPathPrivate而每个被加密保存的私钥会以KeyPathPrivate的形式存在见 EOSKeystore.java关键信息包括publicKey公钥用于索引encPrivate加密后的私钥用密码派生出的密钥加密pathBIP44 派生路径HD 钱包用derivedMode密钥来源分三种——PATH_DIRECTLY路径直接派生、HD_SHA256哈希派生、IMPORTED外部导入一个 EOSKeystore 里可以持有多个KeyPathPrivate这就是多密钥在数据层的落点。三、两种主流的 EOS 多密钥导入方式token-core-android 通过WalletManager提供统一入口见 WalletManager.java支持两种导入路径方式一从助记词导入HD 钱包适合新用户创建钱包。通过importWalletFromMnemonic传入助记词、账户名、BIP44 路径和权限列表库会自动从助记词派生密钥并绑定权限常用路径定义在 BIP44Util.java例如EOS_PATH m/44/194、EOS_LEDGER m/44/194/0/0/0派生出的公钥必须与传入的权限公钥一致否则抛出eos_private_public_not_match异常可参考 EOSWalletTest.java 中的测试用例方式二从多把私钥导入WIF 导入适合恢复已有账户。通过importWalletFromPrivateKeys一次性传入多把 WIF 格式私钥形如5KQwrPbwd...及各自的权限绑定ListString prvKeys new ArrayList(); prvKeys.add(5Jnx4Tv6iu5fyq9g3aKmKsEQrhe7rJZkJ4g3LTK5i7tBDitakvP); // owner 私钥 prvKeys.add(5JK2n2ujYXsooaqbfMQqxxd8P7xwVNDaajTuqRagJNGPi88yPGw); // active 私钥 ListEOSKeystore.PermissionObject permissions new ArrayList(); // ... 组装 permission - publicKey 的映射 Wallet wallet WalletManager.importWalletFromPrivateKeys( metadata, myaccount, prvKeys, permissions, password, true);⚠️ 注意库会校验私钥推导出的公钥是否与传入的权限公钥匹配任何不匹配都会直接拒绝导入这是防止私钥误绑的重要安全防线。四、EOS 多密钥签名实战signTransactions签名是钱包的核心操作。token-core-android 提供了专门的EOSTransaction类见 EOSTransaction.java其中signTransactions是支持多密钥签名的关键 API。4.1 签名流程拆解构造ToSignObj填入待签名交易的十六进制数据txHex以及参与签名的公钥列表publicKeys库将chainId txHex 32字节零填充拼接后做 SHA256 哈希遍历publicKeys从 keystore 中按公钥找到对应私钥并逐一签名每个签名结果格式为SIG_K1_xxxx含 RIPEMD160 校验和见 EOSSign.java返回TxMultiSignResult包含交易哈希和签名列表4.2 核心 API 一览EOSTransaction eosTransaction new EOSTransaction(toSignObjs); ListTxMultiSignResult results eosTransaction.signTransactions(ChainId.EOS_MAINNET, password, wallet);其中按公钥找私钥这一步由 Wallet.java 的decryptPrvKeyFor(pubKey, password)完成最终调用EOSKeystore.decryptPrivateKeyFor解密对应条目——这正是多密钥签名的精髓同一个钱包、同一笔交易可以用不同的私钥分别签名。✅ 实用技巧当一笔 EOS 交易涉及多个权限例如自定义权限 sns 需要单独签名时把需要签名的公钥都放进publicKeys列表一次调用就能拿到全部签名效率很高。五、EOS 钱包开发的 5 个最佳实践owner 与 active 分离active 私钥用于日常业务owner 私钥务必离线保存App 内甚至可以不导入 owner。严格校验公私钥匹配依赖库自带的eos_private_public_not_match校验导入前先用 EOSKey.java 的privateToPublicKey自行推导一次提前发现错误。账户名规则提前校验EOS 账户名只能是小写字母、数字 1-5 和点号最长 12 位且只能设置一次见setAccountName。私钥加密存储所有私钥都用 PBKDF2 派生密钥加密后落盘见 Crypto.java切勿明文存储。善用测试用例项目自带的 EOSWalletTest.java 覆盖了多权限导入、签名、账户名校验等场景是学习 API 的最佳范例。六、总结EOS 的权限模型并不复杂核心就是一个账户、多把钥匙、分级权限。token-core-android 通过PermissionObject描述权限绑定、用KeyPathPrivate存储多份加密私钥再用signTransactions完成多密钥签名三个环节环环相扣。掌握了这条主线你的 EOS 钱包开发就能少走很多弯路。如果你正准备在 Android 上集成 EOS 钱包不妨把本攻略中的模块路径挨个打开读一遍配合测试用例动手跑一跑很快就能上手。【免费下载链接】token-core-androida blockchain private key management library on android项目地址: https://gitcode.com/gh_mirrors/to/token-core-android创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表