成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

如何開發(fā)一款以太坊(安卓)錢包系列2 - 導(dǎo)入賬號(hào)及賬號(hào)管理

Tecode / 1112人閱讀

摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢包系列導(dǎo)入賬號(hào)及賬號(hào)管理原文已更新,請(qǐng)讀者前往原文閱讀這是如何開發(fā)一款以太坊安卓錢包系列第篇,如何導(dǎo)入賬號(hào)。提示大家閱讀本文時(shí),最好把代碼庫克隆到本地對(duì)照閱讀。

本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)
原文鏈接:以太坊(安卓)錢包系列2 - 導(dǎo)入賬號(hào)及賬號(hào)管理原文已更新,請(qǐng)讀者前往原文閱讀

這是如何開發(fā)一款以太坊(安卓)錢包系列第2篇,如何導(dǎo)入賬號(hào)。有時(shí)用戶可能已經(jīng)有一個(gè)賬號(hào),這篇文章接來介紹下,如何實(shí)現(xiàn)導(dǎo)入用戶已經(jīng)存在的賬號(hào)。

導(dǎo)入賬號(hào)預(yù)備知識(shí)

從用戶需求上來講,導(dǎo)入用戶已經(jīng)存在的賬號(hào)是有必要的。 不過從安全性考慮,當(dāng)你之前使用的是一個(gè)非官方、非開源的錢包產(chǎn)品時(shí)(尤其是小眾錢包),或者之前沒有對(duì)私鑰、助記詞、Keysotre文件小心保存時(shí)。
正確的做法是提示用戶:

在新的錢包重新創(chuàng)建一個(gè)錢包賬號(hào)、并安全備份(因?yàn)橹暗目赡芤呀?jīng)不安全);

然后在老錢包里把所有的幣轉(zhuǎn)移到新賬號(hào)。

導(dǎo)入賬號(hào)有3種方式:

通過私鑰導(dǎo)入

通過KeyStore 導(dǎo)入

通過助記詞導(dǎo)入

通過私鑰導(dǎo)入賬號(hào)

關(guān)鍵是用用戶輸入的私鑰創(chuàng)建一個(gè)橢圓曲線秘鑰對(duì),然后用這個(gè)秘鑰對(duì)創(chuàng)建錢包,代碼如下:
(代碼在代碼庫中的app/src/pro/upchain/wallet/utils/ETHWalletUtils.java文件中)

    public static ETHWallet loadWalletByPrivateKey(String privateKey, String pwd) {
        Credentials credentials = null;
        ECKeyPair ecKeyPair = ECKeyPair.create(Numeric.toBigInt(privateKey));
        return generateWallet(generateNewWalletName(), pwd, ecKeyPair);
    }

返回語句中的 generateWallet(),在系列1-通過助記詞創(chuàng)建賬號(hào) 已經(jīng)介紹過,通過橢圓曲線秘鑰對(duì)創(chuàng)建錢包。

loadWalletByPrivateKey()中第2個(gè)參數(shù)密碼pwd,在私鑰生成賬號(hào)這個(gè)過程并不需要pwd,它是用來加密保存私鑰,即為了生成keystore文件。

通過KeyStore文件導(dǎo)入賬號(hào)

關(guān)于KeyStore文件,不了解的可以閱讀下賬號(hào)Keystore文件導(dǎo)入導(dǎo)出。

關(guān)鍵步驟:

KeyStore 文本內(nèi)容解析WalletFile實(shí)例;

使用密碼 解碼 WalletFile 生成橢圓曲線秘鑰對(duì)創(chuàng)建錢包。

    /**

     * @param keystore 原json文件內(nèi)容
     * @param pwd      keystore解密密碼
     * @return
     */
    public static ETHWallet loadWalletByKeystore(String keystore, String pwd) {
        try {
            WalletFile walletFile = null;
            walletFile = objectMapper.readValue(keystore, WalletFile.class);
            return generateWallet(generateNewWalletName(), pwd, Wallet.decrypt(pwd, walletFile));
        } catch (IOException e) {
        } catch (CipherException e) {
        }
        return null;
    }
通過助記詞導(dǎo)入賬號(hào)

導(dǎo)入和上一篇中,創(chuàng)建非常相似,不同的是,種子由用戶提供的助記詞生成。

使用助記詞導(dǎo)入賬號(hào)時(shí),還需要用戶選擇(或輸入)一個(gè)推倒路徑(參考BIP44),關(guān)鍵步驟是:

通過助記詞創(chuàng)建隨機(jī)數(shù)種子;

通過 種子 + 路徑 派生生成私鑰 創(chuàng)建錢包 ;

    /**
     * 通過導(dǎo)入助記詞,導(dǎo)入錢包
     *
     * @param path bip44路徑
     * @param list 助記詞
     * @param pwd  密碼
     * @return
     */
    public static ETHWallet importMnemonic(String path, String mnemonic, String pwd) {
        List  list =  Arrays.asList(mnemonic.split(" "));
        if (!path.startsWith("m") && !path.startsWith("M")) {
            //參數(shù)非法
            return null;
        }
        String[] pathArray = path.split("/");
        if (pathArray.length <= 1) {
            //內(nèi)容不對(duì)
            return null;
        }
        String passphrase = "";
        long creationTimeSeconds = System.currentTimeMillis() / 1000;
        DeterministicSeed ds = new DeterministicSeed(list, null, passphrase, creationTimeSeconds);
        return generateWalletByMnemonic(generateNewWalletName(), ds, pathArray, pwd);
    }

generateWalletByMnemonic在上一篇中已經(jīng)介紹過,

賬號(hào)存儲(chǔ)(保存到數(shù)據(jù)庫)

很多同學(xué)肯定已經(jīng)注意到, 不管通過什么方式構(gòu)造的賬號(hào),都會(huì)最終構(gòu)造為一個(gè)ETHWallet 錢包對(duì)象,他的定義如下:

@Entity
public class ETHWallet {

    @Id(autoincrement = true)
    private Long id;

    public String address;
    private String name;
    private String password;   // 經(jīng)過加密后的pwd
    private String keystorePath;  
    private String mnemonic;   
    private boolean isCurrent;   // 是否是當(dāng)前選中的錢包
    private boolean isBackup;    // 是否備份過
}

前面構(gòu)造的ETHWallet是只存在于內(nèi)容之中, 在應(yīng)用程序退出之后,這個(gè)數(shù)據(jù)將丟失, 因此我們需要把它序列化到
序列化數(shù)據(jù)庫中存儲(chǔ)起來,在下一次進(jìn)入應(yīng)用的時(shí)候加載數(shù)據(jù)庫還原出賬號(hào)。

greenDAO

greenDAO 是一個(gè)將對(duì)象映射到 SQLite 數(shù)據(jù)庫中的輕量且快速的 ORM 解決方案,以下是一個(gè)greenDAO的作用示意圖:

這里我們也使用了 greenDAO 來把ETHWallet對(duì)象映射到 SQLite 數(shù)據(jù)庫, greenDAO的用法這里只簡單說明,不詳細(xì)闡述,大家可以跟隨官方提供的introduction 和 how-to-get-started。

對(duì)象映射保存

把ETHWallet映射的到數(shù)據(jù)庫,需要給類加上@Entity注解,這樣greenDAO會(huì)生成幾個(gè)類:DaoMaster、DaoSessionETHWalletDao 幫我們完成構(gòu)建數(shù)據(jù)庫表等操作。

在使用ETHWalletDao插入到數(shù)據(jù)庫之前需要先進(jìn)行一個(gè)初始化,通常初始化放在應(yīng)用程序入口中進(jìn)行,如:pro.upchain.wallet.UpChainWalletApp的onCreate()中執(zhí)行,初始化代碼如下:

protected void init() {
    DaoMaster.DevOpenHelper mHelper = new DaoMaster.DevOpenHelper(this, "wallet", null);
    SQLiteDatabase db = mHelper.getWritableDatabase();
    DaoSession daoSession = new DaoMaster(db).newSession();
    ETHWalletDao ethWalletDao = daoSession.getETHWalletDao();
}

有了greenDAO為我們生成的輔助類,插入到數(shù)據(jù)庫就很簡單了,一行代碼:

ethWalletDao.insert(ethWallet);  // 

ethWallet為ETHWallet實(shí)例, 前面不管是新創(chuàng)建還是導(dǎo)入的賬號(hào)都會(huì)構(gòu)造這樣一個(gè)實(shí)例。

多賬號(hào)管理

考慮到用戶可能會(huì)創(chuàng)建多個(gè)賬號(hào),因此需要確定一個(gè)當(dāng)前選定的賬號(hào),一般情況下,用戶新創(chuàng)建的賬號(hào)應(yīng)該作為當(dāng)前選中的的賬號(hào),同時(shí)其他賬號(hào)應(yīng)該取消選中, 我們完善下賬號(hào)存儲(chǔ)邏輯, 如下:
(代碼在代碼庫中的app/src/pro/upchain/wallet/utils/WalletDaoUtils.java文件中)

    /**
     * 插入新創(chuàng)建錢包
     *
     * @param ethWallet 錢
     */
    public static void insertNewWallet(ETHWallet ethWallet) {
        updateCurrent(-1);  // 取消其他站賬號(hào)選中狀態(tài)
        ethWallet.setCurrent(true);
        ethWalletDao.insert(ethWallet);
    }
    

    /**
     * 更新選中錢包
     *
     * @param id 錢包ID
     */
    public static ETHWallet updateCurrent(long id) {
    // 加載所有錢包賬號(hào)
        List ethWallets = ethWalletDao.loadAll();
        ETHWallet currentWallet = null;
        for (ETHWallet ethwallet : ethWallets) {
            if (id != -1 && ethwallet.getId() == id) {
                ethwallet.setCurrent(true);
                currentWallet = ethwallet;
            } else {
                ethwallet.setCurrent(false);
            }
            ethWalletDao.update(ethwallet);
        }
        return currentWallet;
    }
打通賬號(hào)創(chuàng)建與保存

以通過私鑰導(dǎo)入賬號(hào)進(jìn)行保存為例,把創(chuàng)建賬號(hào)和保存賬號(hào)打通,這里我們使用響應(yīng)式編程 ReactiveX,
這部分作為訂閱者福利,發(fā)表在我的小專欄,趁還未漲價(jià),趕緊訂閱吧,超值的!

學(xué)習(xí)資料

RxAndroid 了解更多響應(yīng)式編程

introduction 和 how-to-get-started 了解greenDAO。

我創(chuàng)建了一個(gè)專門討論錢包開發(fā)的微信群,加微信:xlbxiong 備注:錢包。

加入知識(shí)星球,和一群優(yōu)秀的區(qū)塊鏈從業(yè)者一起學(xué)習(xí)。
深入淺出區(qū)塊鏈 - 系統(tǒng)學(xué)習(xí)區(qū)塊鏈,打造最好的區(qū)塊鏈技術(shù)博客。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/24620.html

相關(guān)文章

  • 如何開發(fā)一款以太安卓錢包系列1 - 通過助記詞創(chuàng)建賬號(hào)

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢包系列通過助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀上周我開源了一款錢包,反映很好,一周時(shí)間不到已經(jīng)快到。的功能和類似,它是比特幣協(xié)議的實(shí)現(xiàn),他實(shí)現(xiàn)了及相關(guān)協(xié)議。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊(安卓)錢包系列1 - 通過助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀 上周我開源了一款錢包,反映很好,一周時(shí)間不到已經(jīng)快到10...

    bbbbbb 評(píng)論0 收藏0
  • 如何開發(fā)一款以太安卓錢包系列1 - 通過助記詞創(chuàng)建賬號(hào)

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊安卓錢包系列通過助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀上周我開源了一款錢包,反映很好,一周時(shí)間不到已經(jīng)快到。的功能和類似,它是比特幣協(xié)議的實(shí)現(xiàn),他實(shí)現(xiàn)了及相關(guān)協(xié)議。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊(安卓)錢包系列1 - 通過助記詞創(chuàng)建賬號(hào)原文已更新,請(qǐng)讀者前往原文閱讀 上周我開源了一款錢包,反映很好,一周時(shí)間不到已經(jīng)快到10...

    genefy 評(píng)論0 收藏0
  • 區(qū)塊鏈技術(shù)學(xué)習(xí)指引

    摘要:引言給迷失在如何學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一個(gè)指引,區(qū)塊鏈技術(shù)是隨比特幣誕生,因此要搞明白區(qū)塊鏈技術(shù),應(yīng)該先了解下比特幣。但區(qū)塊鏈技術(shù)不單應(yīng)用于比特幣,還有非常多的現(xiàn)實(shí)應(yīng)用場景,想做區(qū)塊鏈應(yīng)用開發(fā),可進(jìn)一步閱讀以太坊系列。 本文始發(fā)于深入淺出區(qū)塊鏈社區(qū), 原文:區(qū)塊鏈技術(shù)學(xué)習(xí)指引 原文已更新,請(qǐng)讀者前往原文閱讀 本章的文章越來越多,本文是一個(gè)索引帖,方便找到自己感興趣的文章,你也可以使用左側(cè)...

    Cristic 評(píng)論0 收藏0
  • 如何開發(fā)一款以太安卓錢包系列3 - 資產(chǎn)信息展示

    摘要:這是如何開發(fā)以太坊安卓錢包系列第篇,錢包賬號(hào)資產(chǎn)信息展示,展示信息主要包括賬號(hào)地址余額及該賬號(hào)所擁有的及余額。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:開發(fā)以太坊安卓錢包系列第3篇,原文已更新,請(qǐng)讀者前往原文閱讀 請(qǐng)大家前往深入淺出區(qū)塊鏈主站, 獲取最新內(nèi)容。 這是如何開發(fā)以太坊(安卓)錢包系列第3篇, 錢包賬號(hào)資產(chǎn)信息展示,展示信息主要包括賬號(hào)地址、eth余額及該賬號(hào)所擁有的Token...

    taohonghui 評(píng)論0 收藏0
  • 如何開發(fā)一款以太安卓錢包系列3 - 資產(chǎn)信息展示

    摘要:這是如何開發(fā)以太坊安卓錢包系列第篇,錢包賬號(hào)資產(chǎn)信息展示,展示信息主要包括賬號(hào)地址余額及該賬號(hào)所擁有的及余額。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:開發(fā)以太坊安卓錢包系列第3篇,原文已更新,請(qǐng)讀者前往原文閱讀 請(qǐng)大家前往深入淺出區(qū)塊鏈主站, 獲取最新內(nèi)容。 這是如何開發(fā)以太坊(安卓)錢包系列第3篇, 錢包賬號(hào)資產(chǎn)信息展示,展示信息主要包括賬號(hào)地址、eth余額及該賬號(hào)所擁有的Token...

    asce1885 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<