- 第 1 章 区块链
- 第 2 章 以太坊
- 第 3 章 以太坊私链入门
- 第 4 章 以太坊网络
- 第 5 章 geth v1.8.16 命令详解
- 第 6 章 Wallet
- 第 7 章 Token
- 第 8 章 智能合约语言 Solidity v0.5.0
- 第 9 章 Truffle v4.1.8 开发框架
- 第 10 章 web3.js - 1.0.0
- 第 11 章 web3j v3.4.0 - Jave Client
- 11.2. 启动以太坊
- 11.3. Maven pom.xml 文件
- 11.4. Java 与 Solidity 数据类型映射关系
- 11.5. 常量
- 11.6. 连接到服务器获取版本号
- 11.7. 获得以太坊状态信息
- 11.8. 单位转换
- 11.9. 账号管理
- 11.10. Credentials
- 11.11. 交易
- 11.12. 钱包
- 11.13. 智能合约
- 11.14. ERC20合约
- 11.15. Infura
- 11.16. 助记词
- 11.17. 过滤器 (Filter)
- 11.18. Subscription
- 11.19. 解锁账号
- 11.20. IBAN (International Bank Account Number)
- 11.21. Springboot with Ethereum (web3j)
- 第 12 章 web3.py - A python interface for interacting with the Ethereum blockchain and ecosystem.
- 第 14 章 Ethereum Developer APIs
- 第 15 章 infura
- 第 16 章 以太坊案例
- 第 17 章 FAQ
- 17.3. Error: authentication needed: password or unlock
- 17.4. 新增节点后不生效
- 17.5. Unhandled rejection Error: Returned error: The method personal_unlockAccount does not exist/is not available
- 17.6. Error: exceeds block gas limit
- 17.7. Migrations.sol:11:3: Warning: Defining constructors as functions with the same name as the contract is deprecated. Use "constructor(…) { … }" instead.
- 17.8. Exception in thread "main" rx.exceptions.OnErrorNotImplementedException: Invalid response received: okhttp3.internal.http.RealResponseBody@6c25e6c4
- 17.9. 旧版本 Remix(browser-solidity) 本地安装
- 第 18 章 Hyperledger Fabric v2.0.0
- 第 19 章 Hyperledger Fabric 运维
- 第 20 章 Chaincode 链码(智能合约)
- 第 21 章 Hyperledger Fabric Client SDK for Node.js
- 第 22 章 fabric-sdk-java
- 第 24 章 已知 Hyperledger 落地案例
- 第 25 章 Fabric Command
- 第 26 章 Fabric FAQ
- 第 27 章 IPFS(InterPlanetary File System,星际文件系统)
- 第 28 章 IPFS 命令
- 第 29 章 IPFS WebUI
- 第 30 章 IPFS 集群配置
- 第 31 章 IPFS API
- 第 32 章 IPFS Faq
- 第 33 章 EOS
- 第 34 章 EOS 安装
- 第 35 章 CLEOS
- 第 36 章 智能合约开发
- 第 37 章 EOS Dapp 开发
- 第 38 章 FAQ
- 第 39 章 BaaS (Blockchain as a Service) 平台
- 第 40 章 BitCoin
- 第 41 章 其他区块链相关
- 附录 1. 附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
11.12. 钱包
11.12. 钱包
11.12.1. 创建钱包
package cn.netkiller.ethereum.wallet; import java.io.File; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import org.web3j.crypto.CipherException; import org.web3j.crypto.WalletUtils; public class WalletMain { public void createWallet() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException, CipherException, IOException { File file = new File("/tmp/ethereum/keystore"); String password = "passw0rd"; String fileName = WalletUtils.generateFullNewWalletFile(password, file); System.out.println(fileName); } public static void main(String[] args) { // TODO Auto-generated method stub WalletMain wallet = new WalletMain(); try { wallet.createWallet(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果
neo@MacBook-Pro ~ % mkdir -p /tmp/ethereum/keystore neo@MacBook-Pro ~ % ll /tmp/ethereum/keystore total 8 -rw-r--r-- 1 neo wheel 491B Feb 4 18:30 UTC--2018-02-04T10-30-58.476000000Z--75d01e920d6e018445dae504058ce4d968fd2a58.json neo@MacBook-Pro ~ % cat /tmp/ethereum/keystore/UTC--2018-02-04T10-30-58.476000000Z--75d01e920d6e018445dae504058ce4d968fd2a58.json {"address":"75d01e920d6e018445dae504058ce4d968fd2a58","id":"80700448-69bc-475a-aaf9-f2b836f17b13","version":3,"crypto":{"cipher":"aes-128-ctr","ciphertext":"fe86f5dbd61d15d092f9d6870e70bff7ed99a7925703ea71eef23669c8e3ec62","cipherparams":{"iv":"d058819ab660cd062080b405591ba143"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"f69c535137b08667dbac53b8001313f5b43f81fce67a5d0e94b518c97d212d14"},"mac":"c247e34760bc838c3a4c8b2da286ccc6acec244bbc13fc6cc9ce28e88a7319d5"}}
11.12.2. 从钱包取出账号
package cn.netkiller.ethereum.wallet; import java.io.File; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import org.web3j.crypto.CipherException; import org.web3j.crypto.Credentials; import org.web3j.crypto.WalletUtils; public class WalletMain { public void walletAddress() throws IOException, CipherException { File file = new File( "/tmp/ethereum/keystore/UTC--2018-02-04T10-43-27.339000000Z--7cab470df532710d13078c5cdc0812a27f70cf51.json"); String password = "passw0rd"; Credentials credentials = WalletUtils.loadCredentials(password, file); System.out.println(credentials.getAddress()); } public static void main(String[] args) { // TODO Auto-generated method stub WalletMain wallet = new WalletMain(); try { wallet.walletAddress(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
运行结果
0x7cab470df532710d13078c5cdc0812a27f70cf51
11.12.3. 生成助记词钱包
String keystore = WalletUtils.getDefaultKeyDirectory(); System.out.println("生成keystore文件的默认目录:" + keystore); // 通过密码及keystore目录生成钱包 Bip39Wallet wallet = WalletUtils.generateBip39Wallet("yourpassword", new File(keystore)); // keystore文件名 System.out.println(wallet.getFilename()); // 12个单词的助记词 System.out.println(wallet.getMnemonic());
11.12.4. 随机产生助记词
package cn.netkiller.example.ethereum.mnemonic; import java.security.SecureRandom; import org.web3j.crypto.MnemonicUtils; public class MnemonicUtilsTest { public MnemonicUtilsTest() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub byte[] initialEntropy = new byte[16]; SecureRandom secureRandom = new SecureRandom(); secureRandom.nextBytes(initialEntropy); String mnemonic = MnemonicUtils.generateMnemonic(initialEntropy); System.out.println(mnemonic); } }
11.12.5. 导入 BIP39 钱包
Credentials credentials = WalletUtils.loadBip39Credentials("password", "spoon crisp length scrub train scrap initial inherit airport that answer tornado"); // 钱包地址 System.out.println(credentials.getAddress()); // 公钥16进制字符串表示 System.out.println(credentials.getEcKeyPair().getPublicKey().toString(16)); // 私钥16进制字符串表示 System.out.println(credentials.getEcKeyPair().getPrivateKey().toString(16));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论