账户(Account)
帐户在以太坊中扮演着重要角色。有两种类型的账户:外部拥有账户(EOAs)和合同账户。这里我们关注外部拥有的账户,这些账户将简称为账户。合同账户将被称为合同,并在合同中详细讨论。这种通用的账户概念包含了外部拥有的账户和合约,这是合理的,因为这些实体被称为状态对象。这些实体有一个状态:账户有余额,合同有余额和合同存储。所有帐户的状态都是以太坊网络的状态,每个区块都会更新,而网络真正需要达成共识。账户对于用户通过交易与以太坊区块链进行交互至关重要。
如果我们将以太坊仅限于外部拥有的账户,并且只允许它们之间的交易,那么我们会得到一个比比特币稍弱的系统, 只能用于转以太.
帐户表示外部代理的身份(例如,人类角色,挖掘节点或自动代理)。账户使用公钥加密来签署交易,以便EVM可以安全地验证交易发件人的身份。
keyfiles
每个账户都由一对密钥,一个私钥和一个公钥来定义。帐户是通过它们的地址索引的,该地址是通过取最后20个字节从公钥得出的。每个私钥/地址对都被编码在一个密钥文件中。密钥文件是JSON文本文件,可以在任何文本编辑器中打开和查看。密钥文件的关键组成部分(您的帐户的私钥)始终是加密的,并且使用您在创建帐户时输入的密码进行加密。密钥文件位于您以太坊节点数据目录的密钥库子目录中。确保定期备份你的密钥文件!有关更多信息,请参阅备份和还原帐户部分。
创建密钥等同于创建帐户:
* 你不需要告诉其他人你正在做它
* 您不需要与区块链同步
*您不需要运行客户端
* 你甚至不需要连接到互联网
当然你的新账户不会包含任何以太。但它是你的,你可以肯定的是没有你的密码和密码,任何人都无法访问它。在以太坊节点之间传输整个目录或任何单独的密钥文件是安全的。
请注意,如果您将密钥文件从不同节点添加到节点,帐户顺序可能会更改。 因此在你的程序里, 不要修改或依赖索引
创建账户
为了从一个账户发送交易,包括发送以太,你必须同时拥有密钥文件和密码。 请务必保留密钥文件的副本并记住该密钥文件的密码,并尽可能安全地存储它们。 这里没有逃生路线; 丢失密钥文件或忘记密码,你所有的以太都会消失了。 忘记密码就无法访问您的帐户,并且没有密码恢复功能。 别忘记了。
使用 geth account new
一旦你安装了geth客户端,创建一个帐户只需要在终端中执行geth account new命令。
请注意,您不必运行geth客户端或与区块链同步即可使用geth account命令。
对于非交互式使用,您提供明文密码文件作为--password标志的参数。该文件中的数据由密码的原始字节组成,可选地后跟一个换行符。
使用--password标志仅用于可信环境中的测试或自动化。 将密码保存到文件或以任何其他方式公开它是个不错的主意。 如果确实在密码文件中使用了--password标志,请确保该文件对于除您以外的任何人都不可读或甚至不可列出。 您可以在Mac / Linux系统中通过以下方式实现此目的:
要列出当前包含密钥文件的所有帐户是密钥存储文件夹,请使用geth帐户命令的列表子命令:
使用geth控制台
为了使用geth创建一个新帐户,我们必须首先以控制台模式启动geth(或者您可以使用geth attach将控制台附加到已经运行的实例):
控制台允许您通过发出命令与本地节点进行交互。例如,尝试使用命令列出您的帐户:
这表明你没有帐户。您也可以从控制台创建一个帐户:
使用Mist以太坊钱包
对于厌恶命令行的人,现在有一个基于GUI的创建账户选项:“官方”Mist以太坊钱包。在以太坊基金会的赞助下,Mist以太坊钱包和它的父亲Mist项目正在开发,因此是“官方”的地位。钱包应用程序的版本适用于Linux,Mac OS X和Windows。
使用GUI Mist Ethereum钱包创建一个账户不是一件容易的事情。实际上,您的第一个帐户是在安装应用程序期间创建的。
1) 为您的操作系统下载最新版本的钱包应用程序。打开电子钱包应用程序将开始在计算机上同步以太坊区块链的完整副本,因为您实际上将运行完整的geth节点。
2) 解压下载的文件夹并运行Ethereum-Wallet可执行文件。
3) 等待区块链完全同步,然后按照屏幕上的说明操作,并创建您的第一个帐户。
4) 当您第一次启动Mist钱包时,您会看到您在安装过程中创建的帐户。默认情况下,它将被命名为MAIN ACCOUNT(ETHERBASE)。
5. 创建额外的帐户很容易;只需点击应用程序主屏幕上的添加帐户,然后输入所需的密码即可。
在Mist里创建多重签名的钱包
Mist钱包有一个多用签名机制, 用以保障钱包的安全。使用多重签名(multisig)的好处是,它需要从多个帐户授权才能从余额中提取更多金额。在创建多重钱包之前,您需要创建多个帐户。
在Mist中创建账户文件非常简单。在“帐户”部分,点击“添加帐户”。选择一个强大且易于记忆的密码(记住没有密码恢复选项),确认它,然后创建您的帐户。创建至少2个帐户。如果您愿意,可以在运行Mist的单独计算机上创建辅助帐户(理论上,通过这种方式使您的多重身份更安全)。创建多重钱包时,您只需要辅助帐户的公钥(您的存款地址)(复制/粘贴它们,千万不要手动输入)。您的主帐户将需要创建多种签名的钱包合约,因此它必须位于您创建该钱包的计算机上。
您现在应该为您的主帐户添加大约不低于0.02 ETH(您将开始创建多重签名钱包的帐户)。创建多重签名钱包合同时,这是交易费用所必需的。另外还需要1个ETH(或更多),因为Mist目前要求这样做才能确保钱包合同交易有足够的费用来正确执行...所以对于初学者来说,总计不低于1.02 ETH。
在创建时,您将输入您附加到此钱包的所有帐户的完整地址。在进入Mist中每个帐户的详细信息页面,并从右侧按钮列中选择“复制地址”后,我建议将每个地址复制/粘贴到纯文本编辑器(记事本/ kedit / etc)中。千万不要手动输入地址,否则冒着拼写错误的风险,并且可能会失去将余额发送到错误地址的交易。
我们现在准备创建multisig钱包。在“电子钱包合同”下,选择“添加钱包合同”。给它一个名字,选择主帐户所有者,然后选择'多重签名钱包合同'。您会看到类似这样的内容:
“这是由X所有者控制的联合账户。您每天最多可以发送X以太。任何超过该限额的交易都需要X业主的确认。“
设置您连接到此multisig钱包的任何数量的所有者(账户),无论您想要每日提款限额(只需要一个账户提取该金额),以及需要多少所有者(账户)才能批准任何提款金额超过每日限额。
现在添加您之前复制/粘贴到您的文本编辑器中的帐户的地址,确认您的所有设置都是正确的,然后点击底部的“创建”。然后您需要输入密码才能发送交易。在“电子钱包合同”部分,它应该显示您的新钱包,并说'创建'。
当钱包创建完成后,您应该在屏幕上看到您的合同地址。选择整个地址,将其复制/粘贴到文本编辑器中的新文本文件中,然后将该文本文件保存为“Ethereum-Wallet-Address.txt”或任何您想命名的文件。
现在您只需备份“Ethereum-Wallet-Address.txt”文件,就像备份您的帐户文件一样,然后您就可以使用此地址加载带有ETH的新multisig钱包。
如果您要从备份中恢复,只需将'Ethereum -keystore-backup'文件夹中的文件复制到本演练的第一部分中提到的'keystore'文件夹中即可。仅供参考,您可能需要创建'keystore'文件夹(如果它是之前从未安装过的机器上的全新安装的Mist)(第一次创建帐户时是创建此文件夹时)。至于恢复多重钱包,而不是像我们之前在创建时那样选择“多签名钱包合同”,我们只需选择“导入钱包”。
故障排除:
1) Mist不会同步。有效的解决方案之一就是将PC硬件时钟与NTP服务器同步,因此时间完全正确,然后重新启动。
2) Mist同步后开始,但是是一个空白的白色屏幕。你有可能在基于Linux的操作系统(Ubuntu,Linux Mint等)上运行“xorg”视频驱动程序。尝试安装制造商的视频驱动程序。
3) “密码错误”通知。这在目前的Mist版本上似乎是错误的通知。重新启动Mist,问题应该消失(如果你确实输入了正确的密码)。
使用Eth
与使用geth可用的密钥管理相关的每个选项都可以在eth中以相同的方式使用。
以下是“帐户”相关选项:
这是"钱包"相关选项:
'账户导入'选项只能用于导入通用密钥文件。 “钱包导入”选项只能用于导入预售钱包。
也可以从集成控制台访问密钥管理(使用内置控制台或geth attach):
导入预售(presale)钱包
使用Mist钱包
使用GUI Mist 钱包导入预售钱包非常简单。事实上,在安装应用程序的过程中,系统会询问您是否要导入预售钱包。
Mist钱包是beta软件。 谨防和使用它需要您自担风险。
只需将您的.json预售钱包文件拖放到指定区域,然后输入密码即可导入您的预售帐户。
如果您在安装应用程序时选择不导入预售钱包,则可以随时通过选择应用程序菜单栏中的帐户菜单,然后选择导入预售帐户来导入它。
Mist钱包仍在积极开发中,因此上述步骤的细节可能随升级而改变。
使用geth
如果您有geth的独立安装,则通过在终端中执行以下命令来导入预售钱包:
系统会提示您输入密码。
更新账户
您可以将密钥文件升级到最新的密钥文件格式和/或升级密钥文件密码。
使用geth
您可以使用update子命令以帐户地址或索引作为参数更新命令行上的现有帐户。请记住,帐户索引反映了创建的顺序(包含创建时间的密钥文件名的字典顺序)。
例如:
该帐户以加密格式保存在最新版本中,系统会提示您输入密码以解锁帐户,而另一个帐户则保存更新的文件。可以使用相同的命令将不推荐格式的帐户迁移到最新的格式,也可以更改帐户的密码。
对于非交互式使用,可以使用--password标志指定密码:
由于只能输入一个密码,所以只能进行格式更新,只能以交互方式更改密码。
帐户更新具有可能会改变帐户顺序的副作用。 成功更新后,该相同密钥的所有以前的格式/版本将被删除!
备份和恢复账户
手动备份/恢复
您必须拥有帐户的密钥文件才能发送该帐户的任何交易。密钥文件位于您以太坊节点数据目录的密钥库子目录中。默认数据目录位置是平台特定的
windows: C:\Users\username\%appdata%\Roaming\Ethereum\keystore
Linux: ~/.ethereum/keystore
Mac: ~/Library/Ethereum/keystore
要备份密钥文件(帐户),请复制密钥库子目录中的单个密钥文件或复制整个密钥库文件夹。
要还原您的密钥文件(帐户),请将密钥文件复制回原始位置的密钥存储子目录中。
导入非加密私有key
geth支持导入未加密的私钥
该命令从纯文本文件中导入未加密的私钥并创建一个新帐户并打印该地址。假设密钥文件包含一个未加密的私钥,作为编码为十六进制的规范EC原始字节。该帐户以加密格式保存,系统会提示您输入密码。您必须记住此密码才能在未来解锁您的帐户。
一个数据目录被指定的例子。如果未使用--datadir标志,则将在默认数据目录中创建新帐户,即密钥文件将被放置在数据目录的密钥存储子目录中。
对于非交互式使用,可以使用--password标志指定密码:
由于您可以直接将您的加密账户复制到另一个以太坊实例,所以当您在节点之间转账时,不需要此导入/导出机制。
当您将密钥复制到现有节点的密钥库中时,您习惯使用的帐户顺序可能会发生变化。 因此,请确保您不要依赖帐户顺序或仔细检查并更新脚本中使用的索引。