主页 > imtoken钱包下载安卓 > 5分钟技术实践:手把手教你开发以太坊钱包

5分钟技术实践:手把手教你开发以太坊钱包

imtoken钱包下载安卓 2023-07-05 05:09:42

米老鼠网络干货:以太坊钱包开发教程

以太坊钱包快速发币_以太坊币钱包_以太坊钱包添加其他币

创建钱包服务

钱包服务将允许用户生成一个独特的种子、显示地址和相关余额,最后将允许用户将以太币发送到其他账户。 所有操作都在客户端进行,更容易获得用户的信任。 用户必须记住种子或将其存储在某处。

必要条件

在开始创建钱包服务之前,你应该确保运行geth开发实例(即挖矿),它已经启动了HTTP-RPC服务器,允许来自任何域名的客户端请求,最后解锁账户0。运行下面的代码:

以太坊币钱包_以太坊钱包添加其他币_以太坊钱包快速发币

其中,--rpccorsdomain 用于允许一些特定的域与geth通信。 需要以空格分隔的域名列表,例如“:8080 *”。 它还支持 * 通配符。

--rpcaddr 表示geth服务器可以到达的IP地址。 默认值为 127.0.0.1,因此如果它是托管服务器,则无法使用服务器的公共 IP 地址访问它。 因此,将其值更改为 0.0.0.0,这意味着可以使用任何 IP 地址访问服务器。

项目结构

在本章的练习文件中,您会发现两个目录,Final 和 Initial。 Final 包含项目的最终源代码,而 Initial 包含可用于快速创建应用程序的空源代码文件和库。

为了测试 Final 目录,在其中运行 npm install,然后在 Final 目录中使用命令 node app.js 运行应用程序。

在 Initial 目录中,您会找到一个公共目录和两个文件(app.js 和 package.json)。 package.json 包含了应用后端相关的内容,并将后端源码放在app.js中。

public 目录包含与前端相关的文件。 你会在public/css中找到bootstrap.min.css,这是bootstrap库; 你会在 public/html 中找到 index.html,将应用程序的 HTML 代码放在这里; 你会在 public/js 目录中找到 Hooked-Web3- Provider、web3js 和 LightWallet。 .js 文件。 在 public/js 中还会发现一个 main.js 文件,该文件放置了应用程序的前端 JS 代码。

创建后端

让我们先创建应用程序后端。 首先,在 Initial 目录中运行 npm install 以安装后端所需的依赖项。

运行快速服务并用于 index.html 文件和静态文件的完整后端代码如下:

以太坊钱包快速发币_以太坊币钱包_以太坊钱包添加其他币

创建前端

现在开始创建 App 前端。 前端包含的主要功能是生成种子、显示种子地址和发送以太币。

为应用程序编写 HTML 代码。 将以下代码放入 index.html 文件中:

以太坊钱包快速发币_以太坊钱包添加其他币_以太坊币钱包

以太坊钱包添加其他币_以太坊钱包快速发币_以太坊币钱包

上述代码的执行过程如下:

1) 排队 Bootstrap 4 样式表。

2) 显示一个信息框,上面将显示多个信息。

3)得到一个表单,上面有一个输入框和两个按钮。 输入框用于输入种子或生成新种子时显示种子。

4) Generate Details 按钮用于显示地址,Generate NewSeed 按钮用于生成一个新的、唯一的种子。 generate_Addresses() 方法在用户单击 Generate Details 按钮时调用,而 generate_seed() 方法在用户单击 Generate New Seed 按钮时调用。

5) 此时有一个空的有序列表。 当用户点击生成详细信息按钮时,种子地址、余额和关联的私钥将被动态显示。

6) 最后,还有一个表格,其中包含发件人地址、收件人地址和要转账的以太币数量。 发件人地址必须是当前未排序列表中显示的地址之一。

现在编写 HTML 代码调用的每个函数的实现。 首先编写生成新种子的代码。 将此代码放入 main.js 文件中:

以太坊钱包添加其他币_以太坊币钱包_以太坊钱包快速发币

keystore 命名空间的 generateRandomSeed() 方法用于生成随机种子。 它有一个可选参数,一个表示额外熵的字符串。

熵用于某些算法或需要随机数的地方。 熵通常来自硬件源或现有硬件源,例如鼠标移动,或专门提供的随机数生成器。

生成独特的种子需要非常高的熵。 LightWallet 有一个内置的方法来生成一个独特的种子。 LightWallet 使用的生成熵的算法取决于环境。 但是如果可以生成更好的熵,可以将生成的熵传递给generateRandomSeed(),内部会和generateRandomSeed()生成的熵进行拼接。

生成随机种子后,调用 generate_Addresses 方法。 此方法将种子作为参数并显示其中的地址。 在生成地址之前,它会询问用户他们想要多少个地址。

generate_Addresses() 方法实现如下。 将以下代码放入 main.js 文件中:

以太坊币钱包_以太坊钱包添加其他币_以太坊钱包快速发币

以太坊钱包快速发币_以太坊钱包添加其他币_以太坊币钱包

上述代码的执行过程如下:

1)首先有一个变量totalAddresses,存放的是用户希望生成的地址总数。

2) 检查参数seed是否定义。 如果未定义,则从输入字段中获取种子。 这样做时,generate_Addressess() 方法可用于显示信息种子,如果用户单击“生成详细信息”按钮,也会同时生成一个新种子。

3) 使用 isSeedValid() 方法验证密钥库命名空间的种子。

4) 要求用户输入他们要生成多少个地址并显示和验证。

5) keystore 命名空间中的私钥始终加密存储。 生成密钥时,需要加密; 签署交易时,需要解密。 用于导出对称加密密钥的密码可以由用户输入,或者可以提供随机字符串作为密码。 为了更好的用户体验,生成一个随机字符串并将其用作密码。 对称加密密钥不存储在keystore命名空间中,所以只要进行与私钥相关的操作,如生成密钥、访问密钥等,都需要从密码中生成密钥。

6) 使用 createVault 方法创建密钥库实例。

createVault 将一个对象和一个回调函数作为参数。 对象可以有 4 个属性:password、seedPharse、salt 和 hdPathString。

密码是必需的,其他是可选的。 如果未提供 seedPharse,它将生成并使用随机种子。 拼接salt和password提高对称密钥加密技术的安全性以太坊钱包快速发币,因为攻击者不仅要找到password还要找到salt。 如果没有提供盐,它将随机生成。 keystore 命名空间存储未加密的盐。 hdPathString 用于为keystore命名空间提供默认的推导路径,即生成地址、签署交易等。如果没有提供推导路径,则使用该推导路径。

如果没有提供 hdPathString,则默认为 m/0'/0'/0'。 此派生路径的默认目的是签名。 您可以创建新的派生路径或使用密钥库实例的 addHdDerivationPath() 方法来覆盖当前派生路径的用途。 您还可以使用密钥库实例的 setDefaultHdDerivationPath() 方法更改默认派生路径。

最后,一旦创建了密钥库命名空间,就会通过回调函数返回实例。 因此,这里仅使用关键字和种子创建了一个密钥库。

7) 生成用户指定数量的地址及其相关密钥。 一个种子可以生成数百万个地址,因为密钥库不知道用户想要生成多少个地址,所以在此之前不会生成任何地址。 创建密钥库后,使用 keyFromPassword 方法从密码生成对称密钥,然后调用 generateNewAddress() 方法生成地址及其相关密钥。

8)generateNewAddress()有3个实际参数,分别是密码导出的密钥、生成地址的个数和导出路径。 由于没有提供派生路径,它使用密钥库的默认派生路径。 如果多次调用 generateNewAddress(),它将从上次调用中创建的地址重新开始。 比如你调用这个方法两次,每次生成两个地址,你会得到前四个地址。

9) 使用 getAddresses() 获取存储在密钥库中的所有地址。

10) 使用exportPrivateKey方法解码并获取地址私钥。

11) 使用 web3.eth.getBalance() 获取地址余额。

12) 在未排序的列表中显示所有信息。

上面描述了从种子生成地址及其私钥的方法。 现在编写 send_ether() 方法的实现,该方法用于从种子生成的地址发送以太币。

相关代码如下。 将此代码放入 main.js 文件中:

以太坊钱包添加其他币_以太坊币钱包_以太坊钱包快速发币

以太坊钱包添加其他币_以太坊钱包快速发币_以太坊币钱包

上面的代码不用解释,直到seed生成地址的部分。 然后给ks的passwordProvider属性赋一个回调函数。 签署交易时调用该回调函数,获取加密解码私钥。 如果未提供,LightWallet 将提示用户输入密码。

此时,通过将密钥库作为事务签名者传递来创建一个 HookedWeb3Provider 实例。 当自定义服务提供者要对交易进行签名时,调用ks的hasAddress方法和signTransactions方法。

如果要签名的地址不在生成的地址中,ks 将向自定义服务提供商返回错误。 最后使用 web3.eth.sendTransaction 方法发送一些以太币。

测试

现在钱包服务的创建已经完成,让我们对其进行测试以确保它按预期工作。

首先以太坊钱包快速发币,在 Initial 目录中运行 node app.js,

然后在浏览器中访问:8080,运行界面如下图所示。

以太坊币钱包_以太坊钱包添加其他币_以太坊钱包快速发币

单击生成新种子按钮以生成新种子。 提示输入一个数字,表示要生成的地址数。 可以输入任何数字,但出于测试目的,给出了一个大于 1 的数字。 运行界面如下图所示。

以太坊币钱包_以太坊钱包添加其他币_以太坊钱包快速发币

现在要测试发送以太币,我们需要向从我们的 coinbase 帐户生成的地址之一发送一些以太币。 一旦您向其中一个生成的地址发送了一些以太币,请单击“生成详细信息”按钮以更新用户界面 (UI),尽管没有必要测试使用钱包服务发送以太币。 确保再次生成相同的地址。 此时的运行界面如下图所示。

以太坊钱包添加其他币_以太坊钱包快速发币_以太坊币钱包

在发件人地址字段中输入列表中有余额的账户地址,然后在收件人地址字段中输入另一个地址。 出于测试目的,输入显示的任何其他地址。

然后输入一定数量的以太币,该数量要小于或等于地址账户中的以太币余额。 运行界面如下图所示。

以太坊币钱包_以太坊钱包快速发币_以太坊钱包添加其他币

点击 Send Ether 按钮,您可以在信息框中看到交易哈希。 等待交易被挖掘。 同时,在短时间内,您可以点击生成详情按钮查看交易是否已经被挖出。 如果交易被挖矿,运行界面如下图所示。

以太坊钱包添加其他币_以太坊钱包快速发币_以太坊币钱包

如果一切如刚才所解释的那样,那么钱包服务就准备好了。 事实上,该服务可以部署到自定义域名并提供给公众使用。

小编在此推荐一款在线软件交易平台——米老鼠网,这是一款创新的复杂项目在线交易平台。 其服务包括政府采购、软件开发、定制开发、人才外包等。可远程监控项目进度,确保项目质量。 对买家而言,米老鼠网提供了强大的供应商资源,大大降低了成本; 为乙方提供无限商机,互惠互利,并有保证金制度限制双方交易过程

以太坊币钱包_以太坊钱包快速发币_以太坊钱包添加其他币