主页 > imtoken最新官网客服 > 如何开发以太坊钱包

如何开发以太坊钱包

imtoken最新官网客服 2023-02-19 07:14:25

以太坊钱包的分类

事实上,Geth 节点和 Ethereum Wallet 都可以称为钱包,因为它们都可以存储以太币和发送交易指令。 但是这里说的钱包分类是另外一个维度,基于Geth节点上层再次开发的手机APP钱包。 根据私钥存放的位置,可以分为两类:

去中心化钱包

去中心化钱包不是本文的重点,这里只是简单介绍一下。 无论是中心化钱包还是去中心化钱包,在App层面都是非常轻量级的。 App中没有内置Geth节点,交易查询或发送都是通过服务端进行的。 区别在于谁来保管和负责交易签名的私钥。

去中心化钱包有一个关键词:助记词。 可以用下面的表述来描述助记符的作用:

私钥 = 助记词 = keystore+密码

从上面的公式可以看出助记词的作用很重要,也是去中心化钱包功能的一大亮点。 此类钱包在创建账户时,钱包会根据生成的私钥文件生成一组助记词,可以是英文也可以是中文,通过助记词可以反向计算出keystore+密码。 助记词由用户手写并保存在安全的地方。 进行交易时,输入助记词签署交易并发送交易。 助记词丢失即代表私钥丢失,钱包一般不保存用户的私钥信息,资产将永久丢失。

去中心化钱包的好处是不用担心平台碍手碍脚,也不用担心平台被黑造成资产损失,但是需要个人有一定的能力保存私钥。

中心钱包

所谓中心化钱包,就是把所有的私钥文件都存放在钱包服务商的服务器里,服务商会保管好这些私钥文件,也就是说资产是你的,私钥不被你保管你。 这样做的好处是用户完全不需要记住私钥,只需要记住在平台上开设的账户、登录密码和支付密码即可。 即使忘记密码,仍可通过平台提供的忘记密码找回。 当然,这没有去中心化钱包的优势。

下面就带大家了解开发这样一款去中心化钱包的幕后技术工作和思路。 后面提到的钱包如无特别说明,均指中心化钱包。

钱包的核心功能

钱包对外表现可能有不同的功能,如充值、提现、转账等,但本质上只有一个功能,那就是转账。 区块链本质上是一个账本,记录一笔交易,而钱包当然离不开这个本质。

在这个过程中,也对应着钱包账户资金的增减。

如何分配用户地址

使用钱包时,用户必须在区块链上有一个与当前账户对应的地址。 这个地址是怎么生成的? 在技​​术交流群中,很多开发者是这样实现的:每次用户注册时,调用Geth节点的personal_newAccount方法生成一个地址,并将该地址存储在Geth节点的默认位置。 这种方法是可以实现的,但是从技术和安全的角度来说是不可取的。

优化的方法是预先批量生成地址,用户注册时只需要分配地址给用户。 这样做的好处是:

这种Web3j的生成方法提供了相应的创建方法,可以直接通过代码生成符合私钥规则的公私钥,无需Geth节点。 当然,如果你有开发能力,也可以通过Geth源码中的私钥生成方式,提取一个单独的与网络无关的生产私钥程序。

充值交易

在比特币钱包中,有子账户的概念。 只需在一个总账户下创建N个子账户即可。 用户充值到该子账户的比特币也会显示在钱包上,同时提供地址查询所有交易方式。 遗憾的是,以太坊并没有提供这样的接口,判断对应账户是否有充值交易的唯一方法就是遍历区块交易。

相关操作:

确认次数

我们在区块链中查询交易并不代表交易成功。 比特币默认12次确认后,交易几乎不会被篡改。 以太坊默认是6次,那么怎么计算确认次数呢?

确认次数 = 当前区块高度 - 交易所在区块高度 + 1

此处注意:交易可能是孤立的。 在执行这个公式的时候,需要验证区块中的交易是否还在那个区块上,是否已经回滚。 同样,必须保证幂等性。

提现交易

提现交易也涉及到上述的知识点,同时还有一些需要额外注意的事项。

提款和转账

提现和转账都发起一笔交易。 以太坊的json-rpc中提到可以直接通过eth_sendTransaction和personal_sendTransaction进行转账,Geth节点是支持的。 账户在转账前可以通过unlock方法解锁,前面章节有提到。

但对于私钥单独存储的情况,上述方法不适用,可以采用先签署交易再广播的模式:

通过这种模式,节点与外界打交道的唯一功能就是广播交易。 之前的所有操作都可以通过内网操作,极大地保证了私钥和交易的安全。

转让费

转账手续费是常识。 可以给用户一些参考价值,让用户选择自己愿意支付的手续费。 也可以通过节点提供的eth_estimateGas进行估算。

最笨拙有效的方法是定期观察区块链上成功交易的gasPrice的大致范围,动态调整价格,同时gasLimit不影响交易(过大不足用于查看账户余额),as little尽可能,因为如果未使用,这部分将被记回交易发起账户。

节点隔离

在发起或检查以太坊交易是否成功时,不仅要检查确认次数,还要检查交易是否孤儿。 用下图来展示和分析孤立的情况:

火币网查询自己的比特币钱包地址_火币转账到比特币钱包要多久_比特币钱包的核心功能

在此处输入图像描述

当一个节点被孤立时会发生什么? 上图中,区块1和2被成功打包记录在区块链中。 当到达第三个区块时比特币钱包的核心功能,两个节点同时挖出第三个区块。 整个区块链的一部分同意上述链。 他们中的一些人同意以下连锁店。 这个时候因为只有3个区块,所以没法确认哪一个是主链。 但是此时区块已经分叉了。 当挖出更多区块时比特币钱包的核心功能,在某个时间节点,上层链的长度比下层链长。 此时,所有节点都会认为最长的链是正确的链。 下面的第三个和第四个块被打包了,交易会被回滚,等待重新打包。 此时,块 3 和块 4 的状态称为被隔离。

结合签名的业务逻辑,当我们的节点在隔离链上时,我们之前扫描的交易所的区块高度是可变的,那个区块上没有我们的交易。 账户增减都会出现资产不一致的情况。

那么如何检测孤立块呢?

测试环境模拟隔离节点双机热备

由于每个节点同步的数据进度差异太大,没有办法像中心化业务那样做负载均衡,只能通过热备份的形式保证当一个节点出现故障时,可以快速切换到另一个节点节点。 因为分块打包本身就比较耗时,所以这里对时效性的要求还是可以接受的。

火币网查询自己的比特币钱包地址_火币转账到比特币钱包要多久_比特币钱包的核心功能

节点热备

节点安全

以前很多朋友因为把Geth节点开放到公网导致资产丢失,正是因为没有正确理解json-rpc不同权限的接口。 在前面的章节中我们已经介绍了不同节点的权限。 这里再次谨慎对外开放以下节点:

事实上,最安全的模式是geth节点只对外广播交易。

私钥管理

上面已经穿插了这个区块的内容,私钥是单独存储的,甚至是加密过两次的。

钱包整体结构

通过这种架构,钱包可以同时实现高可用性和安全性。

火币网查询自己的比特币钱包地址_火币转账到比特币钱包要多久_比特币钱包的核心功能

钱包架构图