主页 > imtoken钱包下载2.0版本 > 比特币交易耗时|MaxsWallet区块链钱包源码实现逻辑

比特币交易耗时|MaxsWallet区块链钱包源码实现逻辑

imtoken钱包下载2.0版本 2023-02-14 06:27:25

介绍

“钱包”大家都很熟悉比特币wallet文件分析,因为我们每个人都会随身携带一个钱包,里面放着一些钱,一些证件,钥匙等等。 “区块链钱包”这个概念相对于钱包来说有些新鲜。 在本文中,我们将从代码实现的角度深入剖析MaxsWallet区块链钱包的源码实现逻辑。

MaxsWallet钱包的功能类似于比特币钱包\以太坊钱包的功能,获取用户余额,管理地址和密钥,转账,智能合约调用。 MaxsWallet一般不需要在本地维护区块链数据,只需要使用JSON-RPC访问即可。

RhaQhT9qvgBUva8Q.png!thumbnail

1.钱包文件

KeyStore = 私钥 + 密码

创建钱包时创建助记词,使用密码加密钱包地址对应的子私钥比特币wallet文件分析,加密后的结果就是Keystore。

{

??? “地址”:“001d3f1ef827552ae1114027bd3ecf1f086ba0f9”,

?????"id":"4fcb2ba4-ccdb-424f-89d5-26cce304bf9c",

2.MaxsWallet钱包地址创建流程

1.使用Secp256k1创建公钥和私钥

比特币交易的风险分析_比特币蜡烛图分析讲解_比特币wallet文件分析

2.通过Keccak算法得到公钥的哈希值,然后得到长度为40的地址串

3、地址字符串签名一般会加上前缀“0x”

3.用Web3j创建钱包

Web3j

添加 Web3j 依赖

执行? 'org.web3j:core:3.3.1-android'

复制一代

4.创建一个新钱包

这个不同于比特币钱包,它不涉及BIP协议,是一个非确定性钱包

File?walletDir?=?contextWrapper.getDir("eth",?Context.MODE_PRIVATE);

比特币交易的风险分析_比特币wallet文件分析_比特币蜡烛图分析讲解

//生成密钥对

ECKeyPair?ecKeyPair?=?Keys.createEcKeyPair();

//钱包文件?=?KeyStore

WalletFile?wallet?=?Wallet.createLight(密码,?ecKeyPair);

String?walletFileName?=?getWalletFileName(wallet);

文件?目标?=?新?文件(walletDir,?walletFileName);

对象映射器。 writeValue(目的地,?钱包)

5.加载钱包文件

File[]?files?=?walletDir.listFiles();

wallet?=?objectMapper.readValue(files[0],?WalletFile.class);

比特币交易的风险分析_比特币wallet文件分析_比特币蜡烛图分析讲解

复制

6.通过助记词创建钱包

涉及BIP协议,但不遵循MaxsWallet地址只使用一次的原则,钱包一般只使用第一个派生地址

可以通过工具检查派生地址的正确性

// 创建助记词

public?List?createMnemonics()?throws?MnemonicException.MnemonicLengthException?{

????SecureRandom?secureRandom?=?new?SecureRandom();

????byte[]?entropy?=?new?byte[DeterministicSeed.DEFAULT_SEED_ENTROPY_BITS?/?8];

????secureRandom.nextBytes(熵);

????return??MnemonicCode.INSTANCE.toMnemonic(entropy);

比特币蜡烛图分析讲解_比特币wallet文件分析_比特币交易的风险分析

}

//Hardened的意思是派生加固,防止得到一个子私钥后,后续的子私钥不能被派生

//必须有上一层的父私钥才能推导

public?static?fin​​al?ImmutableList?BIP44_ETH_ACCOUNT_ZERO_PATH?=

//通过助记词生成HD钱包

public?void?onCreateWallet(View?view)?{

????byte[]?seed?=?MnemonicCode.toSeed(words,?"");

????DeterministicKey?masterPrivateKey?=?HDKeyDerivation.createMasterPrivateKey(seed);

????DeterministicHierarchy?deterministicHierarchy?=?new?DeterministicHierarchy(masterPrivateKey);

????DeterministicKey?deterministicKey?=?deterministicHierarchy

比特币交易的风险分析_比特币蜡烛图分析讲解_比特币wallet文件分析

????byte[]?bytes?=?deterministicKey.getPrivKeyBytes();

????ECKeyPair?keyPair?=?ECKeyPair.create(bytes);

7.导出钱包(导出KeyStore)

public?String?exportKeyStore(WalletFile?wallet)?{

????}?catch?(JsonProcessingException?e)?{

8.导出私钥

public?String?exportPrivateKey(WalletFile?wallet)?{

9.导出助记词

一般助记词可以加密存储,导出时解密。 请注意,不能从 KeyStore 或私钥中导出助记词。

例如:使用MaxsWallet导入私钥或KeyStore创建的钱包不具备导出助记词的功能。 如果是使用助记词创建的,则具有导出助记词的功能。

RLGPLdzsL940UpDA.png!thumbnail

10.结论

以上是MaxsWallet源码实现的逻辑。 需要再次强调的是,这只是MaxsWallet的实现方式之一。 编程实现列举了几种编程语言及其典型产品。 由于协议层技术比较底层,现成的框架介绍或讨论的不多。 同时,具体的技术细节也不是几行就能说清楚的。 幸运的是,这些产品都是开源产品。 大家可以根据自己的技术背景进一步查看相应产品的源代码,很快就能了解其中的奥秘。