一. 什么是以太坊钱包
二. JS编写的以太坊钱包
1. ERC-20 Token钱包
2. 冷钱包
3. 热钱包
三. 如何使用JS以太坊钱包
1. 创建钱包
2. 转账
3. 接收支付
4. 确认支付
四. 以太坊钱包的常见问题
1. 交易为何需要矿工费
2. 热钱包与冷钱包的优缺点
3. 钱包安全措施
4. 如何备份钱包
5. 钱包遗失时该怎么做
6. 钱包被盗如何处理
以太坊钱包是用于储存和管理以太坊及ERC-20代币的工具。它包括一个公钥和一个私钥。公钥可以用于发送、接受代币和以太币,私钥则用于签署和验证交易。
JS编写的以太坊钱包通常有两种,分别是ERC-20 Token钱包和冷热钱包。其中ERC-20 Token钱包适用于储存ERC-20代币,而冷热钱包是按照公共区块链网络的客户端类型分别分类的。
ERC-20 Token钱包是专门用于储存ERC-20代币的钱包。ERC-20是以太坊的代币标准,各个代币可以在以太坊钱包中进行储存和管理。具体来说,用户只需要通过JS编写的ERC-20 Token钱包程序,将代币转入该钱包中即可轻松管理自己的代币。
冷钱包也称为离线钱包,是将私钥储存在离线设备(如USB存储设备)中或者写在纸上。这种钱包相对于网络联接的钱包,储存私钥的设备将不会与互联网进行连接,即使是在恶意软件感染了电脑或手机等设备后,攻击者也无法获取到私钥。当需要进行交易时,只需要将交易数据通过USB等方式把数据传到与网络连接的设备上签名交易,最后再将签名数据传回到离线设备中完成交易即可。
热钱包与冷钱包相反,是需要在线进行交易的钱包。这种钱包通常零售价较低,按照硬件的不同,性能也有所区别。使用热钱包时,私钥将储存在可连接互联网的设备上,因此风险相对冷钱包要高一些。但热钱包适合进行频繁的交易,可以方便地进行转账等操作。
使用JS编写的以太坊钱包,在使用前第一步必须是创建钱包。具体步骤如下:
(1)引用JS钱包库
import Wallet from "./wallet.js";
import WalletProvider from "./walletProvider.js";
const privateKey = "";
const wallet = new Wallet(privateKey);
const walletProvider = new WalletProvider(wallet);
(2)通过传入私钥参数创建钱包实例,再调用WalletProvider对象设置钱包服务商提供商。由于在Ethplorer中调用API时需要申请一个API key,因此在实际使用中,需要在代码中增加该API key。
let ethereum_provider = new WalletProvider(web3wallet, ${API KEY});
let wallet = new Wallet(${private key});
web3wallet.setProvider(ethereum_provider);
web3.eth.setProvider(ethereum_provider);
walletProvider.setProvider(web3.eth);
转账指将以太坊或ERC-20代币从一个钱包转移到另一个钱包。转账方法分别针对以太坊和ERC-20代币有所区别。
以太坊转账:
web3.eth.sendTransaction({
from: "0x1d4dd6629",
to: "0xcd2a3e6",
value: web3.toWei(1, "ether")
}, function(error, result){
});
ERC-20代币转账:
let toAddress = '0x8c2737a20bc32eeee4d44b63857a521ba8adf4d7';
let tokenContractAddress = '0x48c816ac9c296b6d31b3dd8d3f3acf97531e3d65';
let tokenDecimals = 10;
let amountToSend = 1;
let contractABI = erc20.Contract.abi;
let contract = web3.eth.contract(contractABI).at(tokenContractAddress);
let amount = decimalAmount.amount(contractDecimals).mul(new Decimal(amountToSend)).toNumber();
contract.transfer(toAddress, amount, function (err, res) {
console.log('error:', err);
console.log('result:', res);
});
接收支付即将自己的钱包地址提供给转账人,方便对方进行转账。以太坊和ERC-20代币的接收方式相似,只需要向对方提供自己的钱包地址即可。
获取钱包地址:
const wallet = new Wallet(privateKey);
console.log(wallet.getAddress());
进行支付后,需要确认支付是否成功。可以通过监听交易事件等方式进行确认。
监听交易事件:
const confirmation = (resolve) => {
web3.eth.getTransactionReceipt(txHash, function (err, res) {
if (err) {
return setTimeout(() => confirmation(resolve), 500);
}
const { status } = res;
if (status) {
resolve('OK');
console.log(`Transaction confirmed: ${txHash}`);
} else {
resolve('FAILED');
console.log(`Transaction failed: ${txHash}`);
}
});
};
const waitForTransactionConfirmation = async (txHash) => {
return new Promise(confirmation);
};
const result = await waitForTransactionConfirmation(txHash);
在以太坊中,交易需要通过矿工来进行确认和验证。因此,发送交易时需要支付矿工费,也就是可获得这笔交易的矿工支付的金额。这是一种激励机制,有助于保证网络中的交易能够被及时地确认和处理。
热钱包与冷钱包的最大区别在于其私钥的存储方式。冷钱包可以在离线时,提高钱包的安全性,避免被黑客等攻击。但缺点在于,使用起来相对麻烦。热钱包则提供了快速的交易及方便的操作体验。但风险较高,容易被黑客攻击。
对于以太坊钱包的安全,采取以下措施可以降低钱包被盗的风险:
(1)选择一个口碑好的钱包软件或硬件钱包。
(2)钱包密码应设置强度高,且不要将密码存储在计算机等易受攻击的设备中。
(3)使用热钱包时应尽可能避免使用公共wifi等容易被黑客盯上的网络。
(4)注意妥善保存钱包的私钥等重要信息。
一旦出现钱包损坏或丢失等情况,备份钱包就成为了唯一可以恢复钱包信息的方式。常见的备份方法包括:
(1)在多个地点备份钱包,避免一旦损坏或被盗失无法找回。
(2)备份钱包文件,或者从钱包中提取助记词备份。
在钱包遗失或丢失私钥等情况下,需要通过助记词进行恢复。助记词是钱包中自动生成的一段单词,可以用于快速恢复钱包,避免对钱包造成无法逆转的损失。
一旦发现钱包被盗,应及时采取以下措施进行处理:
(1)马上停止使用该钱包。
(2)尽可能追踪被盗资产的流动,投诉网络上的黑客攻击事件。同时通知钱包服务商,采取相应措施避免钱包继续被盗。
(3)根据备份的助记词等方式,恢复钱包并更新钱包密码等信息,避免重新被攻击。