以太坊开发者指南二


欢迎回来!在本系列的第一部分中,我们在与模拟的以太坊网络交互时涵盖了很多基础。在这一点上,您应该至少对如何回答这些问题有一个模糊的想法:

什么是区块链,什么是区块?

是什么让以太坊去中心化?

什么是以太,为什么它是网络的必要组成部分?

在本文中,我们将基于这些概念并探讨对开发人员的一些影响,因此,如果您跳过它或需要重新学习,请回到第1部分。

下一步是什么?

我们将从帐户开始更深入地研究如何与以太坊网络进行交互。以太坊账户和Web 2.0账户之间存在一些显着差异。

注意:“ Web 2.0”是为了描述引入用户生成的内容(例如社交媒体和博客)的Internet时代而创造的。以太坊和其他分散式技术据说是下一代Internet的一部分:Web 3.0。Web3的缩写被Web3.js和Web3.py之类的库以及生态系统中的其他地方使用。


Web2与Web3

很难不在当今的网络上收集帐户。每个社交媒体应用程序,新闻站点,交付服务,零售商和航空公司都有一个,仅举几例。这些帐户中的每个帐户都位于公司的服务器上,这使您必须遵守其条款和条件,隐私策略和安全惯例。您的帐户可以被托管公司决定冻结,删除,审查或更改。

Web3代表了账户管理的范式转变:您和您一个人拥有自己的以太坊账户。创建帐户时,该帐户不在任何公司的范围内,可以与您一起使用多个应用程序。实际上,创建一个以太坊账户根本不需要与以太坊区块链进行交互。让我们现在创建一个来证明这一点。

注意:此练习仅用于教育目的。除非您了解安全隐患,否则请勿在帐户中存储实际价值。有些错误是无法挽回的!更多的上下文。

创建一个账户

与上一次相同的练习:这些概念将在IPythonShell中进行演示。如果您不是Python开发人员,那就没问题。从概念上讲。

环境设定

设置步骤的三个步骤:

安装Web3.py,eth-tester和IPython(如果您尚未参加第1部分):
$ pip install web3 web3[tester] ipython

启动一个新的沙箱:
$ ipython

导入Web3模块:
In [1]: from web3 import Web3

帐户生成

让我们创建一个帐户:

以太坊开发者指南二

这里的所有都是它的!没有注册过程,也没有到区块链或任何服务器的往返行程。实际上,您可以完全断开与Internet的连接,并仍然创建有效的以太坊帐户。

在上面的代码中,您将找到帐户的两个组成部分:公共地址和私钥。简而言之,私钥是帐户的密码。一个公网地址是私有密钥导出的共享账号。从代码示例中可以看出,两者通常都表示为十六进制数。

注意:方便地,以太坊用户和应用程序开发人员不必确切了解帐户生成过程的工作原理,但是如果您对深入学习感兴趣,请参阅我以前的文章:以太坊201:助记符和以太坊201:HD钱包。

使用帐号

这是一个重要的要点:影响区块链变更的唯一方法是通过交易,每个交易都必须由一个帐户签名。账户可以发起交易以转移以太币,部署智能合约或与合约互动以进行新的代币之类的事情。让我们简要地探讨一下。

转移醚

回想一下,它EthereumTesterProvider可以启用一个包含帐户和假以太币的测试环境。让我们先查看一些测试帐户和帐户余额:

以太坊开发者指南二

接下来,我们将介绍一个新帐户:

以太坊开发者指南二

然后将一些假冒的醚发送到新帐户:

以太坊开发者指南二

该事务将立即执行,但是一些重要的细节从视图中隐藏了。Web3.py非常聪明,足以知道它EthereumTesterProvider正在管理acct_one并且我们正在使用测试环境。为方便起见,acct_one“解锁”是指默认情况下批准(签名)该帐户的交易。

那么,如果不是通过未锁定的帐户进行交易,会是什么样?为了找出答案,让我们从acct_two不是由所管理的帐户发送一些%&&&&&%EthereumTesterProvider。这个更手动的过程需要三个步骤:1)指定交易明细,2)签署交易,然后3)将交易广播到网络。

以太坊开发者指南二

让我们分解一下。步骤1使用所需的交易字段定义了Python字典。我们了解gas并gasPrice在第1部分,但nonce可能是一个新的领域。在以太坊中,现时只是帐户的交易数。以太坊协议会跟踪该值以防止重复支出。

由于这是的第一笔交易acct_two,其现时值为零。如果提供了错误的值,则结果是无效的事务,并被Web3.py拒绝:

以太坊开发者指南二

请注意,从发送事务时acct_one,仍然需要一个随机数,但是它EthereumTesterProvider会跟踪托管帐户的事务计数并将适当的随机数添加到新事务中。

您可能已经注意到的另一个细节from是中缺少一个值tx。在这种情况下,该sign_transaction方法可以从其私钥推断出发送者的地址。同样,公共地址可以从私钥派生,但是私钥不能从其公共地址反向工程。

最后,“原始”事务只是以字节表示的事务数据和签名。在幕后,send_transaction执行所需的相同编码sendRawTransaction。

部署智能合约

有关智能合约的完整介绍将在单独的博客文章中介绍,但这是一次潜入巅峰的好机会。与智能合约进行交互看起来与标准交易非常相似。

简而言之,智能合约是生活在以太坊区块链上的程序,任何人都可以使用。当您准备部署智能合约时,可以将代码编译为字节码,并将其作为data值包含在事务中:

以太坊开发者指南二

除了需要更多的天然气外,合同部署交易中的唯一其他区别是没有to价值。其余过程与标准的醚转移相同。


与智能合约互动

使用已部署的合同只是同一交易格式的另一种变体。在这种情况下,该to值指向合同地址,并且该data值将根据所执行的合同方法的输入而变化。

请注意,Web3.py之类的工具为部署合同和与合同进行交互提供了更直观的界面:

以太坊开发者指南二

签名消息

交易是影响区块链状态的唯一方法,但并非唯一可以利用账户的方法。仅凭简单证明一个特定帐户的所有权就很有用。

例如,以太坊市场OpenSea允许您通过使用帐户签名消息来对要出售的商品进行出价。仅当拍卖到期或卖方接受您的报价时,才进行实际交易。同样,在向您显示一些帐户详细信息之前,该应用程序将签名消息用作身份验证的一种形式。

与交易不同,签名消息不花任何钱。它们不会广播到网络,也不会包含在块中。消息只是用私钥签名的一点数据。如您所料,发件人的私钥仍处于隐藏状态,但是收件人可以在数学上证明发件人的公共地址。换句话说,邮件发件人不会被欺骗。

注意:术语“在链上”和“在链外”是数据是否驻留在以太坊区块链上的简写。例如,帐户余额和智能合约状态在链上进行管理,但消息签名发生在链外。

我们将在以后的帖子中深入研究邮件签名,但是下面的一些伪代码可以让您大致了解工作流程

以太坊开发者指南二

Web3帐户的含义

因此,我们可以轻松地创建以太坊账户:离线并与任何应用程序分离。这些帐户可用于签名消息或发送各种交易。这对应用程序开发人员意味着什么?

永久密码

这个世界的严酷现实是没有密码恢复服务。如果您丢失了私钥和恢复短语,则可以与该帐户道别。这就是真正拥有的双刃剑。应用开发人员在道德上有义务向以太坊新手入伍并对其进行教育。(注意:社交恢复钱包可以改善这种用户体验。)


入职挑战

向以太坊引入新用户很复杂。正如您所学习的,有许多范式转换并不是立即显而易见的。您可能需要指导还没有以太坊账户的访客或没有以太坊的用户支付交易费用。所需的教育材料数量取决于您的受众,但是如果您能够优雅地加入新用户,则整个生态系统都会受益。

较少的帐户管理功能

假设用户在您的应用程序外部创建帐户,您可能会发现用例几乎不需要或根本不需要帐户管理功能。


新的商业模式

数据挖掘并没有消失,但是这种新的帐户所有权模型代表了Web 2.0模型的健康替代方案,在Web 2.0模型中,公司拥有用户数据的每一位并将其出售给出价最高的人。以太坊的智能合约平台提供了许多新的激励结构。


新的软件架构

业务模型定义中一个有趣的皱纹将是处理链上还是链外的内容。正如我们所讨论的,消息签名不需要链上的交互。也没有什么可以阻止您将私有数据库用于某些数据,将以太坊区块链用于其他数据或功能。有很多折衷的考虑:可用性,成本,透明度,分散性,隐私性等等。


呼吸

所有这些都沉没了吗?测试自己:

以太坊账户与Web 2.0中的账户有何不同?

以什么方式可以使用以太坊账户?

以太坊账户对应用程序开发人员意味着什么?

您可以生成的帐户数量没有限制,您可以随意将同一帐户用于多个应用程序,也可以为每个应用程序创建一个新帐户。这就是将公共%&&&&&%描述为无许可的意思:您与网络之间没有网守。不要等待任何人向您授予构建权限。

以太坊开发者指南

—-

编译者/作者:蚁族的奋斗

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

分享到