链视界

首页 > 区块技术 > ETH 钱包开发教程 01:创建与导出钱包的详细步骤

ETH 钱包开发教程 01:创建与导出钱包的详细步骤

广告 X
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

ETC移动端钱包,其重要性无庸赘述,即是您数字资产的强大守卫者!在创建与交易查询等环节中,挑战重重且乐趣无穷。试想,智能手机内蕴藏无尽财宝,轻触即可掌握全局,宛如现代宝藏猎手,岂不妙哉?

创建钱包:开启财富之门

搭建以太坊钱包,犹如打开通向金钱之门。创建过程虽简易,却不能轻视。一旦拥钱包,等同握住无尽机遇之钥。切勿忘记,创建钱包时生成的助记词乃生命线,若遗失,财富恐永眠数字世界。

导入钱包:旧钥匙新世界

若已拥有钱包,将其导入移动终端便犹如与老友重逢。借助助记词进行导入,如同使用陈旧钥匙开崭新锁,尽管钥匙已旧,但锁却是全新,这意味着您可借由过往记忆探索全新领域。然而务必牢记,助记词乃个人隐私,切勿轻示他人,以免财富如风消逝无踪。

钱包转账:数字世界的金钱游戏

转账功能,作为以太坊区块链钱包的引人入胜之处,让人倍感振奋。只需于手机上轻轻点击,您的财富便可瞬息传送至全球各地。然而务必牢记,每次转账皆如行走在钢丝之上,需保持高度警惕与精准,否则一个微小的疏忽,即有可能使您的财富在浩瀚的数字海洋中消逝无踪。

 implementation 'org.web3j:core:3.3.1-android'

交易查询:透明与信任的桥梁

// implementation 'org.bitcoinj:bitcoinj-core:0.14.7'
    implementation 'io.github.novacrypto:BIP39:0.1.9' //用于生成助记词
    implementation 'io.github.novacrypto:BIP44:0.0.3'
 //    implementation 'io.github.novacrypto:BIP32:0.0.9' 
    //使用这个bip32
    implementation 'com.lhalcyon:bip32:1.0.0'
    implementation 'com.lambdaworks:scrypt:1.4.0' //加密算法

交易查询,助您全面掌握每笔交易情况。在当今科技主导的时代,透明度与信任至关重要。借助此项服务,您可详细了解每一枚ETH的流动路径,这不仅是查询,更是构建以数据为基础的信任桥梁。

私钥与助记词:财富的双重保险


    /**
     * generate a random group of mnemonics
     * 生成一组随机的助记词
     */
    public String generateMnemonics() {
        StringBuilder sb = new StringBuilder();
        byte[] entropy = new byte[Words.TWELVE.byteLength()];
        new SecureRandom().nextBytes(entropy);
        new MnemonicGenerator(English.INSTANCE)
                .createMnemonic(entropy, sb::append);
        return sb.toString();
    }

私钥与助记词,名称虽显深奥,实则系您财富之双保险。私钥宛如个人印鉴,唯有持有人方可支配您的财富;而助记词则为备用方案,若私钥遗失,可凭此恢复所有权益。请务必珍视二者,犹如呵护生命。

/**
    * generate key pair to create eth wallet_normal
    * 生成KeyPair , 用于创建钱包(助记词生成私钥)
    */
   public ECKeyPair generateKeyPair(String mnemonics) {
       // 1. we just need eth wallet_normal for now
       AddressIndex addressIndex = BIP44
               .m()
               .purpose44()
               .coinType(60)
               .account(0)
               .external()
               .address(0);
       // 2. calculate seed from mnemonics , then get master/root key ; Note that the bip39 passphrase we set "" for common
       byte[] seed = new SeedCalculator().calculateSeed(mnemonics, "");
       ExtendedPrivateKey rootKey = ExtendedPrivateKey.fromSeed(seed, Bitcoin.MAIN_NET);
       Log.i(TAG, "mnemonics:"   mnemonics);
       String extendedBase58 = rootKey.extendedBase58();
       Log.i(TAG, "extendedBase58:"   extendedBase58);
       // 3. get child private key deriving from master/root key
       ExtendedPrivateKey childPrivateKey = rootKey.derive(addressIndex, AddressIndex.DERIVATION);
       String childExtendedBase58 = childPrivateKey.extendedBase58();
       Log.i(TAG, "childExtendedBase58:"   childExtendedBase58);
       // 4. get key pair
       byte[] privateKeyBytes = childPrivateKey.getKey();
       ECKeyPair keyPair = ECKeyPair.create(privateKeyBytes);
       // we 've gotten what we need
       String privateKey = childPrivateKey.getPrivateKey();
       String publicKey = childPrivateKey.neuter().getPublicKey();
       String address = Keys.getAddress(keyPair);
       Log.i(TAG, "privateKey:"   privateKey);
       Log.i(TAG, "publicKey:"   publicKey);
       Log.i(TAG, "address:"   Constant.PREFIX_16   address);
       return keyPair;
   }

BIP协议:钱包的幕后英雄

BIP协议,看似高深莫测,实则为钱包运作之关键。特别是BIP32、BIP39和BIP44等协议,确保了钱包能够安全有效地执行其功能。尽管其存在往往不为我们所见,然而在每次运用钱包之时,它们皆悄然发挥着重要作用。

 /**
     * 创建钱包(助记词方式)
     *
     * @param context    app context 上下文
     * @param password   the wallet_normal password(not the bip39 password) 钱包密码(而不是BIP39的密码)
     * @param mnemonics  助记词
     * @param walletName 钱包名称
     * @return wallet_normal 钱包
     */
    public Flowable
  
    generateWallet(Context context, String password, String mnemonics, String walletName) { Flowable
   
     flowable = Flowable.just(mnemonics); return flowable .map(s -> { ECKeyPair keyPair = generateKeyPair(s); WalletFile walletFile = Wallet.createLight(password, keyPair); HLWallet hlWallet = new HLWallet(walletFile, walletName); WalletManager.shared().saveWallet(context, hlWallet); //保存钱包信息 return hlWallet; }); } 
   
  

测试与校验:确保万无一失

在掌控虚拟货币钱包的创建与运用之际,对其进行有效的测试与验证至关重要。此举宛如出行前对车辆进行细致检修,旨在确保一切运作顺畅无误。通过对助记词及地址、公钥、私钥等元素的严谨测试与校验,您将能够确保您的钱包始终处于最佳运行状态。

public class HLWallet {
    public WalletFile walletFile; //钱包文件,包含私钥、keystore、address等信息
    public String walletName; //钱包名称
    @JsonIgnore
    public boolean isCurrent = false;
    public HLWallet() {
    }
    public HLWallet(WalletFile walletFile) {
        this.walletFile = walletFile;
    }
    public HLWallet(WalletFile walletFile, String walletName) {
        this.walletFile = walletFile;
        this.walletName = walletName;
    }
    public String getAddress(){
        return Constant.PREFIX_16   this.walletFile.getAddress();
    }
    public String getWalletName() {
        return walletName;
    }
    public void setWalletName(String walletName) {
        this.walletName = walletName;
    }
}

安全提示:守护你的数字家园

不可忽视的是,安全忠告。在数字化时代,保护个人财务至关重要。无论创建钱包、转入资产或执行交易等环节,皆需谨慎处理。请牢记,钱包即是数字之家,警惕守卫,方能保障自身利益。

 /**
     * 导出私钥
     *
     * @param password   创建钱包时的密码
     * @param walletFile
     * @return
     */
    public String exportPrivateKey(String password, WalletFile walletFile) {
        try {
//            ECKeyPair ecKeyPair = Wallet.decrypt(password, walletFile); //可能出现OOM
            ECKeyPair ecKeyPair = LWallet.decrypt(password, walletFile);
            String privateKey = Numeric.toHexStringNoPrefix(ecKeyPair.getPrivateKey());
            return privateKey;
        } catch (CipherException e) {
            e.printStackTrace();
            return "error";
        }
    }

         /**
     * 导出Keystore
     *
     * @param password   创建钱包时的密码
     * @param walletFile
     * @return
     */
    public String exportKeystore(String password, WalletFile walletFile) {
        if (decrypt(password, walletFile)) {
            return new Gson().toJson(walletFile);
        } else {
            return "decrypt failed";
        }
    }
/**
     * 解密
     * 如果方法没有抛出CipherException异常则表示解密成功,也就是说可以把Wallet相关信息展示给用户看
     *
     * @param password   创建钱包时的密码
     * @param walletFile
     * @return
     */
    public boolean decrypt(String password, WalletFile walletFile) {
        try {
//            ECKeyPair ecKeyPair = Wallet.decrypt(password, walletFile); //可能出现OOM
            ECKeyPair ecKeyPair = LWallet.decrypt(password, walletFile);
            return true;
        } catch (CipherException e) {
            e.printStackTrace();
            return false;
        }
    }

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。