木星链 木星链
Ctrl+D收藏木星链

WEB:以太坊开发指南 #1

作者:

时间:1900/1/1 0:00:00

*译文出自:登链翻译计划

*译者:翻译小组

*校对:Tiny熊

你应该听说过了以太坊了,准备进入以太坊的世界冒险了吗?这篇文章将快速介绍一些区块链基础知识,然后让了解与模拟的以太坊节点进行交互--读取区块数据,检查账户余额并发送交易。在这个过程中,我们将理解传统的应用程序与这种新的去中心化应用之间的差异。

要求

本文希望面向所有的开发者,不过文章里还是会涉及到Python工具,但它们只是思想的载体--如果你不是Python开发者也没有问题,它只是可以帮助我们更快速进入到以太坊。

本文假定你:

*熟悉命令终端。

*你已经写了几行Python代码。

*你的机器上安装了Python3.6或更高版本(强烈建议使用虚拟环境),并且

*你已经使用了pip。

再次强调,这些都是不是必须的,或者你不打算敲本文中的代码,也不影响你理解本文。

简单介绍一下区块链

描述以太坊的方法有很多,但其核心还是区块链。区块链是由一系列的区块组成的,所以我们从区块链开始。最简单的说,以太坊区块链上的每个区块只是一些元数据和交易列表。在JSON格式中,它看起来像这样:

{"number":1234567,"hash":"0xabc123...","parentHash":"0xdef456...","miner":"0xa1b2c3...",...,"transactions":}

每个区块都有一个对之前区块的引用,parentHash是前一个区块的哈希值。

注意:以太坊广泛使用哈希函数来产生固定长度的值。哈希值在以太坊中扮演着重要的角色,但你现在可以放心地将其视为唯一的ID。

区块结构

区块链本质上是一个链表,每个区块都有一个对前一个区块的引用。

这种数据结构并不新颖,但治理网络的规则却很新颖。区块链没有中央权威机构,网络中的对等节点必须协作来维持网络,并竞争决定将哪些交易纳入下一个区块。因此,当你想给朋友转账时,你需要将这笔交易广播到网络上,然后等待它被包含在即将到来的区块中。

去中心化借贷项目Flux Finance上线以太坊主网:金色财经报道,去中心化借贷项目 Flux Finance 宣布已上线以太坊主网,旨在为用户提供针对美国国债收益的敞口。Flux 通过支持稳定币等无需许可的资产以及 Token 化证券等许可资产。

目前,贷方可以提供稳定币(USDC 和 DAI)来赚取收益,而借方可以抵押 Token 化国债作为抵押品。Flux 发行时支持的 Token 化国债采用 OUSG 的形式,专门投资于贝莱德的 iShares 短期国债 ETF (SHV)。提供 USDC 的贷方将收到可以自由转移的 fUSDC。[2023/2/9 11:56:57]

区块链验证金钱从一个用户发送到另一个用户的唯一方法是使用区块链的原生货币。在以太坊中,原生货币被称为ether,它是以太坊区块链包含了账户余额的唯一官方记录。

新的开发工具链

新的去中心化技术栈催生了新的开发者工具。这些工具存在于许多编程语言中,但本文将从Python的角度来看。

想要与以太坊进行交互的Python开发者可能会接触到Web3.py。Web3.py是一个库,用来帮助我们简化连接以太坊节点,以及发送和接收数据。

注:以太坊节点和以太坊客户端可互换使用。在任何一种情况下,它们都是指以太坊网络中的参与者所运行的软件。这个软件可以读取区块数据、在新区块加入到链上时接收更新、广播新交易等。

以太坊客户端可以配置为通过IPC、HTTP或Websockets来访问,所以Web3.py也需要进行这个配置。Web3.py将这些连接选项称为提供者。你需要从三个提供者中选择一个来连接Web3.py实例和你的节点。

1_OrElsXOF45w-AgBuezCqjQ配置以太坊节点和Web3.py通过相同通信的协议,本图中用IPC

一旦Web3.py配置正确,你就可以开始与区块链进行交互。下面是几个Web3.py的使用例子,抛砖引玉。

#读取区块:w3.eth.getBlock('latest')#发送交易:w3.eth.sendTransaction({'from':...,'to':...,'value':...})

安装环境

声音 | V神:以太坊区块链几乎已满,可拓展性仍是一大瓶颈:以太坊创始人Vitalik Buterin在接受The Star采访时表示,以太坊区块链几乎已满,对以太坊生态系统感兴趣的大型组织面临的障碍仍然是区块链可扩展性这一棘手问题。至于如何改善可拓展性,V神表示,网络需要从每台计算机都需要验证每一笔交易演变为一种新的模型,即一台计算机平均只验证区块链上的一小部分交易。V神声称改进后的可扩展性将使成本降低100多倍。虽然在某种程度上这样会牺牲了安全,但妥协是相当温和的。(Cointelegraph)[2019/8/19]

在这个演练中,我们仅在Python解释器中进行,不会创建任何目录、文件、类或函数。

注意:在下面的例子中,以$开头的命令是表示在终端中运行。(不要输入$,它只是表示行的开始。)

首先,安装IPython,以方便用户在其中进行探索。IPython提供了tab补全功能,让你更容易看到Web3.py内的有哪些可用方法。

$pipinstallipython

Web3.py以web3的名义发布,安装方式如下:

$pipinstallweb3

另外,我们后面要模拟一个区块链,这就需要多一些依赖。则可以通过下面命令安装:

$pipinstallweb3

准备好了!

开启沙盒环境

在终端中运行ipython打开一个新的Python环境。这与运行python相当,但更友好。

$ipython

这将打印出一些关于你正在运行的Python和IPython版本的信息,然后你应该看到一个等待输入的提示:

In:

你现在看到的是一个交互式的Pythonshell,如果你跟着进行到了这里,现在可以导入Web.py了。

In:fromweb3importWeb3

Web3模块介绍

除了作为以太坊的网关,Web3模块还提供了一些方便的功能。让我们来探究探究。

在以太坊应用中,你通常需要转换货币面额。Web3模块就为此提供了几个辅助方法:fromWei和toWei。

分析 | 以太坊gasprice上涨 或造成Fomo3D游戏结束:近日,国外媒体Trustnodes分析指出以太坊gaspirce上升可能跟争夺Fomo3D终极大奖有关。据了解,Fomo3D游戏倒计时也出现异常波动,甚至一度在3分钟左右徘徊,濒临结束。

区块链安全公司PeckShield安全人员进一步分析发现,这是由于MetaMask默认的gasprice值普遍较低导致的。一旦当前以太坊网络的gasprice超过该默认值,基于该默认值的正常交易被打包的可能性降低。如果无法打包的情况一直持续,超过游戏设定的终止时长,就会造成该游戏“意外”结束。[2018/8/8]

注:计算机不擅长处理十进制数学。为了规避这个问题,开发者通常会将美元金额用美分存储。例如,价格为5.99美元的物品在数据库中存储为599。

在处理ether中的交易时,也使用类似的模式。然而,以太币不是两个小数点,而是有18位,以太币的最小面额叫wei,所以发送交易时指定的就是这个值。

1以太币=1000000000000000000wei1wei=0.000000000000000001以太币

试一下将一些数值转换为wei或相反。请注意,以太币和wei之间还有其他的面额名称。其中比较有名的是gwei,因为它往往是交易费用的体现方式。

In:Web3.toWei(1,'ether')Out:1000000000000000000In:Web3.fromWei(500000000,'gwei')Out:Decimal('0.5')

Web3模块上的其他实用方法包括数据格式转换器(如toHex)、地址助手(如isAddress)和哈希函数(如keccak)。其中许多内容将在后面的系列文章中介绍。要查看所有可用的方法和属性,可以利用IPython的自动补全功能,输入Web3.并按两次tab键。

与链交互

接下来配置Web3.py与以太坊节点通信。这里我们可以选择使用IPC、HTTP或Websocket提供者。

我们不会完整的进行这个步骤,但一个使用HTTP提供者的完整工作流的例子像这样:

*下载一个以太坊节点,例如:Geth。

分析 | 以太坊前10000大地址拥有83.3%的 ETH:据TokenAnalyst 数据科学家Matthias De Aliaga,以太坊的前10000大地址拥有83.3%的 ETH,前10大地址总计共持有11.4%的 ETH。在ETH 的持币大户中,“交易发送大户”并不一定接收到很多交易。此外,很多 ETH 持币大户的账户余额高达150 万枚 ETH,但在交易方面却并不活跃。平均而言,矿池发送交易很多,发币团队的钱包拥有较高账户余额, 交易所接收和发送交易很多。[2018/7/11]

*在一个终端窗口启动Geth,等待它同步网络。默认的HTTP端口是8545,但可以配置。

*告诉Web3.py通过HTTP连接到节点,使用localhost:8545。w3=Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))。

*使用w3实例与节点交互。

虽然这是一种正式的方式,但如果你只是想要一个开发环境,同步过程需要几个小时,而且没有必要。Web3.py为此暴露了第四个提供者,即以太坊TesterProvider。这个测试器提供者连接到一个模拟的以太坊节点,它有更宽松的权限,还有虚拟以太币可以使用。

以太坊TesterProvider连接到一个模拟节点,对于快速开发环境来说非常方便。

这个模拟节点叫做eth-tester,我们把它作为pipinstallweb3命令的一部分进行安装。配置Web3.py来使用这个测试提供者很简单:

In:w3=Web3(Web3.EthereumTesterProvider())

现在,你已经准备好在链上冲浪了!

快速预览功能

第一件事,先来个连接检查。

In:w3.isConnected()Out:True

由于我们使用的是测试提供者,这不是一个非常有价值的测试,但如果它确实失败了,很可能是你在实例化w3变量时输入错误。仔细检查你是否包含了内括号,即Web3.EthereumTesterProvider()。

账户

为了方便起见,测试提供者创建了一些账户,并预分配测试以太币。首先,我们来看看这些账户的列表。

比特币现金和以太坊交易量飙升 但瑞波币持续下降:五月对比特币现金和以太坊来说是个大牛市,与此前一个月相比,这两种加密货币在全球范围内交易量都出现了大幅增长。比特币的交易量也保持稳定,但瑞波币的表现不太好,自1月以来,该加密货币的交易量下降了86%。[2018/6/6]

In:w3.eth.accountsOut:

如果你运行这个命令,你应该看到一个以0x开头的十个字符串的列表。每一个都是一个的公共地址,在某些方面,类似于支票账户上的账号。如果有人要给你转账,你需要把这个地址给他。

如前所述,测试提供者已经为这些账户中的每一个账户预分配了一些测试以太币。我们来看看第一笔账有多少钱。

In:w3.eth.getBalance(w3.eth.accounts)Out:1000000000000000000000000

好多零啊!在你一路笑醒之前,先回忆一下之前关于货币面额的介绍。以太坊用最小的面额表示,wei。将其转换为以太币。

In:w3.fromWei(1000000000000000000000000,'ether')Out:Decimal('1000000')

100万测试以太币,也不算太寒酸。

区块数据

我们来看看这个模拟区块链的状态。

In:w3.eth.getBlock('latest')Out:AttributeDict({'number':0,'hash':HexBytes('0x9469878...'),'parentHash':HexBytes('0x0000000...'),...'transactions':})

关于一个区块,很多信息都会被返回,但这里只介绍:

块号是零-无论你在多长时间前配置了测试提供者。与真实的以太坊网络不同,以太坊网络大概每隔15秒就会挖掘一个新的区块,而模拟链则会等到你给它一些工作在增加区块。

transactions是一个空列表,原因相同:我们还没有做任何事情。第一个区块是一个的空区块,只是为了开个头。

注意,parentHash只是一堆空的字节。这标志着它是链条上的第一个区块,也就是所谓的创世区块。

交易

在没有交易之前,我们停留在零区块,所以我们给它一个交易。从一个账户向另一个账户发送一些测试以太币。

In:tx_hash=w3.eth.sendTransaction({'from':w3.eth.accounts,'to':w3.eth.accounts,'value':w3.toWei(3,'ether'。)

这时通常会等上几秒钟,等待交易挖到一个新的区块。完整的流程是这样的:

提交交易并持有交易哈希。在没有被挖出来之前,交易是pending的:tx_hash=w3.eth.sendTransaction({...})。

等到交易被挖掘出来:w3.eth.waitForTransactionReceipt(tx_hash)。

继续应用逻辑。如查看成功的交易:w3.eth.getTransaction(tx_hash)。

我们的模拟环境会在一个新的区块中即时添加交易,所以我们可以立即查看交易:

In:w3.eth.getTransaction(tx_hash)Out:AttributeDict({'hash':HexBytes('0x15e9fb95dc39...'),'blockNumber':1,'transactionIndex':0,'from':'0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf','to':'0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF','value':3000000000000000000,...})

你会看到一些熟悉的细节:from、to和value字段应该与我们的sendTransaction调用的输入相匹配。另一个令人欣慰的是,这项交易被列为区块号1内的第一笔交易。

我们也可以通过检查两个相关账户的余额,轻松验证这次交易是否成功。三个以太币应从一个账号转移到另一个。

In:w3.eth.getBalance(w3.eth.accounts)Out:999996999999999999979000In:w3.eth.getBalance(w3.eth.accounts)Out:1000003000000000000000000

后者看起来不错!余额从1000000到100003以太币。但第一笔账看起来减少的数量略大于三个以太币?是的,没有免费的午餐,使用以太坊公网需要支付矿工手续费,因为它从进行交易的账户中扣除了少量的交易费,金额为21000wei。

注意:在公共网络上,交易费用根据网络需求和你希望交易处理的速度而变化。如果你对费用的计算方式有兴趣,请看我之前的帖子交易如何包含在一个区块中。

结束

本文结束,我们将在这个系列的第二部分继续探索一些概念:连接到一个真实的节点,智能合约和代币,

本翻译由CellNetwork赞助支持。

来源:https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/作者:MarcGarreau

参考资料

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

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

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

以太坊:https://learnblockchain.cn/categories/ethereum/

虚拟环境:https://realpython.com/effective-python-environment/#virtual-environments

哈希函数:https://en.wikipedia.org/wiki/Hash_function

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

IPC:https://en.wikipedia.org/wiki/Inter-process_communication

IPython:https://ipython.org/

Web3:https://web3py.readthedocs.io/en/stable/overview.html#base-api

fromWei:https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.fromWei

toWei:https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toWei

其他的面额名称:https://web3py.readthedocs.io/en/stable/examples.html#converting-currency-denominations

Geth:https://geth.ethereum.org/

eth-tester:https://github.com/ethereum/eth-tester

交易如何包含在一个区块中:https://medium.com/ethereum-grid/ethereum-101-how-are-交易s-included-in-a-block-9ae5f491853f

CellNetwork:https://www.cellnetwork.io/?utm_souce=learnblockchain

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

登链社区

现已在非小号资讯平台发布105篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/9637398.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

QT拳头回归给所有人重新选择财富的机会

标签:WEBWEB3ETH以太坊coinweb币投资机构WEB3币eth大学以太坊最新价格行情价

以太坊价格热门资讯
加密货币:如何看待「拜登」带来的加密市场影响力?

对于加密货币行业来说,至少从目前来看,拜登的一系列人事任命的确释放出一丝「利好」气息,但市场走向不可能押注在一个人、或是一群人身上.

1900/1/1 0:00:00
BBK:BBKX平台2021年1月销毁公示

亲爱的BBKX用户截止到今日13时,2021年1月平台使用平台手续费的50%进行回购销毁BBK数据公示如下:本月销毁总量为3,222,523枚BBK,当前BBK累计销毁总量:267,868.

1900/1/1 0:00:00
TPS:币安上线 DOGE/AUD、DOGE/BRL、DOT/NGN 交易对

亲爱的用户:币安将于2021年02月02日18:00上线DOGE/AUD、DOGE/BRL、DOT/NGN交易对,邀您体验!注意:AUD、BRL、NGN是法定货币代码,并非数字货币代码.

1900/1/1 0:00:00
GAT:Gate.io 排行榜焕新升级,新增个人盈亏及排名、做市商盘口贡献排名等

Gate.io焕新升级交易排行榜,全新板块全方位展示交易大咖辉煌战绩,新升级包括:1、个人盈亏和排名2、交易大神详情页3、做市商盘口贡献排名欢迎您前往排行榜页面查看体验,与全球交易大神切磋交流.

1900/1/1 0:00:00
GATE:Gate.io 将上线 Yield Optimization Platform & Protocol (YOP) 交易的公告

Gate.io将于2021年2月4日12:00上线YieldOptimizationPlatform&Protocol(YOP)交易.

1900/1/1 0:00:00
区块链:链游玩家周报(1.25-1.31)

导语:上周链游玩家平台动态总览:首席福利官链小银直播;《光之圣境放置次元》1.26上线链游玩家平台;《天影奇缘》1.29上线链游玩家平台.

1900/1/1 0:00:00