如何开发以太坊(Android)钱包系列2-导入帐户和帐户管理


浏览:790 次

最新内容将在主网站上更新

原始链接:

这是如何开发以太坊(Android)钱包系列以及如何导入帐户的第二部分。有时用户可能已经有了帐户。本文将介绍如何导入现有帐户。

导入账户准备知识

从用户需求的角度来看,需要导入用户的现有帐户。然而,在安全方面,当您使用非官方和非开源钱包产品(尤其是小众钱包)时,或者当您没有仔细保存私钥、助记符和Keysotre文件时。

正确的方法是提示用户:

在新钱包中创建一个新的钱包帐户并进行安全备份(因为前一个可能不安全);

然后将所有硬币转移到旧钱包中的新帐户。

有三种方法可以导入帐户:

通过私钥导入

通过KeyStore导入

通过助记符导入

通过私钥导入帐户

密钥是用用户输入的私钥创建一个椭圆曲线密钥对,然后用这个密钥对创建一个钱包。代码如下:

(代码位于中的app/src/pro/upchain/wallet/utils/ETHWalletUtils.java文件中)

public static ETHWallet loadWalletByPrivateKey(字符串私有密钥,字符串密码){

凭据凭据=空;

ECKeyPair ECKeyPair=ECKeyPair.create(Numeric.toBigInt(私钥));

返回generateWallet(generateNewWalletName(),pwd,ecKeyPair);

}

如前所述,return语句中的generateWallet()通过椭圆曲线密钥对创建钱包。

loadWalletByPrivateKey()中第二个参数的密码pwd在使用私钥生成帐户的过程中不需要pwd。它用于加密和保存私钥,即生成密钥库文件。

通过KeyStore文件导入帐户

对于KeyStore文件,如果您不理解,可以阅读它。

关键步骤:

KeyStore文本内容解析WalletFile实例;

使用密码解码WalletFile生成椭圆曲线密钥对来创建钱包。

/**

*@param keystore原始json文件内容

*@param pwd密钥库解密密码

*@返回

*/

公共静态ETHWallet loadWalletByKeystore(String keystore,String pwd){

尝试{

钱包文件钱包文件=空;

walletFile=对象映射器。readValue(密钥库,WalletFile.class);

返回generateWallet(generateNewWalletName(),pwd,Wallet)。解密(pwd,walletFile));

}catch(IOException e){

}catch(CipherException e){

}

返回null;

}

通过助记符导入帐户

导入和创建非常相似。不同的是,种子是由用户提供的助记符生成的。

当使用助记符导入帐户时,用户还需要选择(或输入)下推路径(参考)。关键步骤包括:

通过助记符创建随机数种子;

通过种子+路径派生生成私钥来创建钱包;

/**

*通过导入助记符导入钱包

*

*@参数路径bip44路径

*@参数列表助记符

*@param密码

*@返回

*/

公共静态ETHWallet importMnemonic(字符串路径,字符串助记符,字符串pwd){

列表List=Arrays.asList(助记符.split(“”))

如果(!path.startsWith(“m”)&!路径启动方式(“M”){

//非法参数

返回null;

}

String[]pathArray=路径.split(“/”);

如果(pathArray.length<=1){

//错误的内容

返回null;

}

字符串密码=“”;

long creationTimeSeconds=系统。当前时间毫秒()/1000;

DeterministicSeed ds=新的DeterminlisticSeed(列表,空,密码,创建时间秒);

返回generateWalletByMnemonic(generateNewWalletName(),ds,pathArray,pwd);

}

GenerateWalletByMnemonic已引入,

帐户存储(保存到数据库)

许多学生一定注意到,无论账户如何构建,它最终都将被构建为ETHWallet钱包对象。他的定义如下:

@实体

公共类ETHWallet{

@Id(自动增量=真)

私有长id;

public String地址;

私有字符串名称;

private String密码;//加密的密码

private String keystorePath;

私有字符串助记符;

私有布尔值isCurrent;//是当前选定的钱包吗

私有布尔值isBackup;//是否已备份

}

之前构建的ETHWallet仅存在于内容中。app退出后,此数据将丢失,因此我们需要将其序列化为

它存储在序列化数据库中。下次进入app时,将加载数据库并还原帐户。

绿色DAO

GreenDAO是一种将对象映射到SQLite数据的方法

相关资讯:
什么是新订单系统

什么是新订单系统

查看
农产品分销软件如何帮助农产品分销

农产品分销软件如何帮助农产品分销

查看
如何成为一名程序员?这是重要的几点

如何成为一名程序员?这是重要的几点

查看
什么是域名归档?我们为什么要归档?备案后,您将获得以下好处!

什么是域名归档?我们为什么要归档?备案后,您将获得以下好处!

查看
上网速度慢。我该怎么办?

上网速度慢。我该怎么办?

查看