[置顶]以太坊开发者指南

 

  • 什么是区块链,区块里有什么?
  • 是什么让以太坊去中央化?
  • 什么是以太币,为什么它是网络的需要组成部门?

在这篇文章中,我们将在这些看法的基础上,探讨对开发者的一些影响,若是你跳过或需要温习,请返回第 1 部门[5]

接下来做什么?

我们将从账户最先,更深入地领会你若何与以太坊网络交互。以太坊账户和 Web 2.0 账户之间有一些显著的区别。

注:Web 2.0是用来形貌:引入用户天生内容的互联网时代的,例如社交媒体和博客。而以太坊和其他去中央化手艺则称为是下一代互联网(Web3.0 ,缩写Web3)的一部门。Web3因此被Web3.js[6]Web3.py[7]等库以及生态系统的其他地方使用。

Web2 与 Web3

在现在的网络中,很难聚集账号。你得为每个社交媒体应用程序、新闻网站、配送服务、零售商和航空公司等等   都注册一个账号  。每一个账户都在其公司的服务器上,这使得你必须遵守他们的条款和条件、隐私政策和平安老例。你的账户可以被冻结、删除、审查或由所在公司酌情更改。

Web3 代表了账户治理的范式转变:只有你自己一小我私人拥有你的以太坊账户。当你确立一个账户时,它与任何公司无关,此账号而且可以在多个应用程序中使用。事实上,确立一个以太坊账户基本不需要与以太坊区块链举行交互。我们现在就来缔造一个。

:这个演习纯属教育目的。在明了平安影响之前,不要在账户中存储真实价值。否则有些错误是无法挽回的!

确立一个账户

和上次演练一样,依旧在IPython[8] shell 中演示这些看法。若是你不是 Python 开发者,没问题。只要在看法上随着走就可以了。

环境设置

三步到位:

  1. 安装 Web3.py、eth-tester 和 IPython(若是你在第一部门还没有安装的话)。
    $ pip install web3 web3[tester] ipython
  2. 启动一个新的沙盒环境。
    $ ipython
  3. 导入
    Web3模块。
    在[1]:从web3导入Web3

账户天生

让我们确立一个账户:

In [2]: w3 = Web3() # 现在不需要 provider

In [3]: acct = w3.eth.account.create()

# public address:
In [4]: acct.address
Out[4]: '0x33736Bf0Ac7A046eAC36648ca852B91EAe5f567A'

# private key:
In [5]: acct.key
Out[5]: HexBytes('0x7aca78f5e54...')

这就是确立账户所有要做的! 没有注册历程,也没有和区块链或任何服务器交互。事实上,你可以完全断开与互联网的毗邻,仍然可以确立一个有用的以太坊账户。

在上面的代码中,你会发现一个账户的两个组成部门:一个公然地址和一个私钥。简朴来说,私钥就是一个账户的密码。公然地址是由私钥衍生出来的可共享账号。从代码示例中可以看出,两者通常用十六进制[9]数字示意。

:以太坊用户和应用开发者不必领会账户天生历程的详细运作方式,但若是你有兴趣异常深入地领会,可阅读 :明白助记词与 HD 钱包[10]

使用账户

在区块链上影响转变的唯一方式是通过生意,每笔生意必须由账户签署。这是需要领会,且很主要的一点。

账户可以提议转账以太币的生意,部署智能合约,或与合约交互(诸如铸造新的代币)。我们来简朴探讨一下每个方式。

以太币转账

回首一下,EthereumTesterProvider启用了一个以账户和充值了测试以太币种子的测试环境。我们先来查看一些测试账户和账户余额。

In [1]: w3 = Web3(Web3.EthereumTesterProvider())

In [2]: w3.eth.accounts
Out[2]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf',
 '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF',
 '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...]

In [3]: acct_one = w3.eth.accounts[0]

In [4]: w3.eth.get_balance(acct_one)
Out[4]: 1000000000000000000000000

接下来,我们将先容一个新的账户。

In [5]: acct_two = w3.eth.accounts.create()

In [6]: acct_two.address
Out[6]: '0x2FF32Bcc040e98EBa3c0ae2d8ad9C451a78d3E24'

In [7]: acct_two.key
Out[7]: HexBytes('0x02af55504048265...f70e9965a3505ea')

然后把一些测试以太币送到新的账户上。

In [8]: tx_hash = w3.eth.send_transaction({
   'from': acct_one,
   'to': acct_two.address,
   'value': 10000000000
 })

这笔生意将立刻执行,但一些主要的细节被隐藏起来。Web3.py 很伶俐,知道EthereumTesterProvider正在治理acct_one,而且我们正在使用测试环境。为利便起见,acct_one是 "unlocked(解锁)"的,也就是说,该默认使用该账户来签署生意。

那么,若是从非解锁账户提议生意是什么样的呢?让我们从acct_two,一个不由EthereumTesterProvider治理的账户发送一些以太币。这个需要三个步骤。1)指定生意细节,2)签署生意,3)向网络广播生意。

# 1) 手动组织生意
In [9]: tx = {
          'to': acct_one,
          'value': 10000000,
          'gas': 21000,
          'gasPrice': 1,  # price only possible in eth-tester
          'nonce': 0
        }

# 2) 用私钥署名生意
In[10]: signed = w3.eth.account.sign_transaction(tx, acct_two.key)

# 3) 发送”raw“ 原始生意
In[11]: tx_hash = w3.eth.sendRawTransaction(signed.rawTransaction)

让我们来剖析一下。步骤 1 界说了一个 Python 字典,其中包罗所需的生意字段。我们在第一部门学习了 gasgasPrice,但 nonce可能是新要害字。在以太坊中,nonce只是账户的生意次数。以太坊协议会跟踪这个值,以防止双花[11]

由于这是 acct_two举行的第一笔生意,以是它的 nonce 为 0。若是你提供了错误的值,效果是无效的生意,并被 Web3.py 拒绝。

ValidationError: Invalid transaction nonce: Expected 0, but got 4

请注重,当从acct_one发送生意时,仍然需要一个 nonce,但EthereumTesterProvider会跟踪治理账户的生意计数,并为新的生意添加适当的 nonce。

另一个细节你可能已经注重到了,从 tx中缺少一个 from值。这是由于,sign_transaction方式可以从发件人的私钥推断出发件人的地址。上面提到过,公然地址可以从私钥中推导出来,但私钥不能从公然地址反向推导出来。

最后,raw原始生意是以字节示意的生意数据和署名。在底层,sign_transactionsendRawTransaction接纳相同的编码。

部署智能合约

与智能合约的交互看起来与尺度生意异常相似。

简朴来说,智能合约是”活跃“在以太坊区块链上的程序,任何人都可以使用。当你准备好部署一个智能合约时,需要将代码编译成字节码,并将其作为一个data值包罗在一个生意中。

bytecode = "6080604052348015610...36f6c63430006010033"

tx = {
   'data': bytecode,
   'value'0,
   'gas'1500000,
   'gasPrice'1,
   'nonce'0
}

除了需要更多的 Gas 外,合约部署生意中唯一的区别是没有 to值。其余历程与尺度的以太币转账相同。

与智能合约交互

使用部署合约的生意花样类似。在这种情形下,to值指向合约地址,data值将凭证正在执行的合约方式的输入而转变。

需要注重的是,像 Web3.py 这样的工具为合约的部署和交互提供了更直观的界面。

# 与合约交互
myContract = web3.eth.contract(address=address, abi=abi)
twentyone = myContract.functions.multiply7(3).call()

# 部署新合约
Example = w3.eth.contract(abi=abi, bytecode=bytecode)
tx_hash = Example.constructor().transact()

署名

生意是影响区块链状态的唯一方式,但并不是账户的唯一的使用方式。仅仅是证实某个账户的所有权,其自己就很有用。

举个例子,OpenSea[12]是一个以太坊市场,你可以用你的账户署名留言来竞拍待售物品。只有当拍卖到期或卖家接受你的报价时,才是真正的生意。同样,在向你展示一些账户细节之前,该应用程序使用署名信息作为一种认证形式。

与生意差其余是,署名信息不需要任何用度。他们没有向网络广播,也没有列入一个区块。署名信息只是用私钥签署后的一串数据。和期望的一样,发送者的私钥仍然是隐藏的,但吸收者可以用数学方式证实发送者的公共地址。换句话说,无法冒充信息的发送者。

**注:**术语 链上链下是示意数据是否活跃在以太坊区块链上的缩写。例如,账户余额和智能合约状态是链上治理的,但新闻署名却发生在链下

我们将在以后的文章中深入探讨新闻署名,但这里有一些伪代码可以让你领会事情流程。

# 1. 一串信息
msg = "amanaplanacanalpanama"

# 2. 用私钥署名
pk = b"..."
signed_message = sign_message(message=msg, private_key=pk)

# 3. 用任何方式发送署名信息 `signed_message`

# 4. 信息吸收者剖析出 发送者的公共地址
sender = decode_message_sender(msg, signed_message.signature)
print(sender)
# '0x5ce9454...b9aB12E'

Web3 账户所涉问题

我们可以轻松确立以太坊账户:离线并与任何应用程序自力。这些账户可以用来签署信息或发送种种类型的生意。这对应用开发者意味着什么?

永远密码

这个天下一个残酷的现实是,没有密码恢复服务。若是你丢失了你的私钥(或助记词短语),你就可以和这个账户吻别了。这就是真正的所有权的双刃剑。应用开发者有道德和义务辅助以太坊新人上岗,并教育他们熟悉到这一现实。(注:社交恢复型钱包[13]可改善此类用户体验)。

新挑战

将新用户引入以太坊是有门槛的。正如你一直在学习的那样,有一些范式的转变并不是很显著。你可能要指导还没有以太坊账户的访客或没有以太币的用户支付生意用度。教育用户的成本取决于你的受众,但若是你能够优雅地引入新用户,整个生态系统将受益。

较少的账户治理功效

鉴于用户在你的应用之外确立账户,你可能会发现你的使用场景险些不需要或基本不需要账户治理功效。

新的商业模式

数据挖掘不会消逝,但这种新的账户所有权模式是 Web 2.0 模式的一个康健的替换方案,在 Web 2.0 模式下,公司拥有用户的每一点数据,并将其出售给出价最高的人。以太坊的智能合约平台提供了一个新的激励模子。

新的软件架构

在你的商业模式界说中,一个有趣的权衡将是若那边理链上与链下。正如我们讨论过的,新闻署名不需要链上交互。也没有什么可以阻止你使用私人数据库来处置部门数据,而使用以太坊区块链来处置其他位数据或功效。需要思量的权衡因素许多:可用性、成本、透明度、去中央化、隐私等等。

小结

这些都掌握了吗?磨练一下:

  • 以太坊账户与 Web2.0 中的账户有何差异?
  • 以太坊账户可以在哪些方面使用?
  • 以太坊账户对应用开发者有什么影响?

你可以天生的账户数目没有限制,你可以自由地将统一个账户用于多个应用程序,或者为每个应用程序确立一个新的账户。当一个公共区块链被形貌为无需允许的(permissionless),意思是:你和网络之间没有守卫人。因此,不要等着别人允许你制作。


本翻译由 Cell Network[14] 赞助支持。

泉源:https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-2/ 作者:Marc Garreau

参考资料

[1]

登链翻译设计: https://github.com/lbc-team/Pioneer

[2]

翻译小组: https://learnblockchain.cn/people/412

[3]

Tiny 熊: https://learnblockchain.cn/people/15

[4]

第一部门: https://learnblockchain.cn/article/2092

[5]

第1部门: https://learnblockchain.cn/article/2092

[6]

Web3.js: https://web3js.readthedocs.io/

[7]

Web3.py: https://web3py.readthedocs.io/

[8]

IPython: https://ipython.org/

[9]

十六进制: https://simple.wikipedia.org/wiki/Hexadecimal

[10]

明白助记词与HD 钱包: https://learnblockchain.cn/2018/09/28/hdwallet/

[11]

双花: https://en.wikipedia.org/wiki/Double-spending

[12]

OpenSea: https://opensea.io/

[13]

社交恢复型钱包: https://learnblockchain.cn/article/2011

[14]

Cell Network: https://www.cellnetwork.io/?utm_souce=learnblockchain

以太坊现在还能买吗?|疑问解答

1.关注公众号:道说区块链  2.后台回复:电子书 3.获取《DeFi实战投资方法论》电子书 下面是近期大家留言的一些解答,分析只是我个人的理解,不作为直接投资建议!大家有疑问可以留言,或者私发我微信上,因为精力有限,就不一对一回复。。。。。。

本文由PeckShield投稿,不代表比特币区块链教育17学立场。如需转载,请注明出处:https://www.btc17.com/59638.html
2
谜一样的人

发表评论