主页 > imtoken钱包苹果手机下载 > 可能是迄今为止最完整的以太坊开发入门指南

可能是迄今为止最完整的以太坊开发入门指南

imtoken钱包苹果手机下载 2023-06-02 05:45:18

可能是目前为止最全的以太坊开发入门指南

以太坊技术发展从入门到精通,干货。

目标观众:

专业程序员;

想进一步了解以太坊/区块链及其生态的读者;

如果你已经有一定的以太坊技术基础,只是想研究一些落地项目,可以直接跳到以下项目模块。

初步知识:

了解区块链的概念以及比特币的工作原理。不明白的可以先看看阿里云整理的区块链菜鸟介绍系列();

基本的编程知识将是一个巨大的优势,系统/架构/数学等知识。

不知道你是不是和我一样,一开始被各种数学问题搞糊涂了,比如拜占庭问题、双花问题等等。我的建议是先把这些问题放在一边,先大致了解一下区块链是如何工作的,然后回来想想。

事实上,如果我们只想开发基于以太坊的智能合约应用程序,我们不必完全了解区块链的架构。

以太坊

和比特币一样,底层框架是区块链协议,区块链本质上是一个应用密码学的分布式数据库系统。看完上面提到的阿里云整理的科普文章,为了进一步了解以太坊,推荐阅读以太坊白皮书:%5B%E4%B8%AD%E6%96%87%5D-%E4 %BB %A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6.md

智能合约

智能合约是在以太坊区块链系统上运行的一段代码。合约根据预先设定的规则自动转移数字资产。比如一个人可能有一份存储合约,形式为“A每天最多可以取X币,B每天最多可以取Y币,A和B可以随意取款,A可以停止B的取款权”。

以太坊账户

以太坊有两种类型的账户:外部账户(EOA)和合约账户

外部账户具有以下特点:

1. 有以太币余额;

2.可以发送交易(以太币转账或激活合约代码);

3.由私钥控制;

4.没有关联代码。

合约账户具有以下特点:

1. 有以太币余额;

2. 有关联代码;

3.代码执行由交易或其他合约发出的调用激活;

4.执行时——以随机复杂度运行(图灵完备性)——只能在它拥有的特定存储上运行,例如可以拥有它的永久状态——可以调用其他合约。

以太坊区块链上的所有操作都由各种账户发送的交易激活。合约账户每收到一笔交易,交易自带的参数都会成为代码运行的输入值。合约代码由参与网络的每个节点上的以太坊虚拟机 (EVM) 运行以太坊挖矿教程2021,作为对其新区块的验证。

什么是气体

以太坊挖矿教程2021

智能合约由区块链网络中的每个完整节点重复执行,使得合约执行成本高昂,因此这也促使大家不要将可以在链下执行的操作放在区块链上。对于执行的每个命令,都有一个特定的成本,以气体为单位计算。合约可用的每个命令都将具有相应的 gas 值。gas 值的存在阻止了智能合约进入死循环,你不能编写一个永无止境的程序,因为你的 gas 用完了,计算会被节点拒绝。

在以太坊中,每笔交易都需要包含一个gas限制和交易愿意为每单位gas支付的费用。矿工可以选择打包这些交易并收取这些费用。现实中,由于矿工会优先选择打包费用高的交易,所以用户选择支付的交易费用会影响交易打包的时间。

如果交易因计算需要使用的gas量,包括原始消息和触发的其他一些消息,小于或等于设置的gas limit,则交易将被处理。

如果总gas消耗超过gas限制,所有操作将恢复,但交易将建立,交易费用将由矿工收取。区块链将显示该交易已被尝试,但由于没有提供足够的气体,所有的合约命令都被恢复为耗尽气体。

所有未在交易中使用的多余气体将以以太币的形式发送回交易发起者。由于 gas 消耗通常只是一个粗略的估计,许多用户会多付 gas 以保证他们的交易会被接受。

去中心化应用 DApp

DApp是运行在区块链网络上的“服务器”应用程序,类似于运行在Android/iOS等设备上的应用程序,以及运行在以太坊网络上的DApp。以太坊在 GitHub 下有一个代码存储库 dapp-bin(),其中包含一些文档和示例。在使用之前,您需要查看文件的最近状态,因为它们很可能已被删除。

DApp客户端

目前有四个用 C++、Go、Python 和 Java 实现的可运行客户端,几乎完全兼容以太坊协议。用 C++ 和 Go 实现的客户端目前完全兼容。

1. 去以太坊

go-ethereum 客户端,通常被称为 geth,是目前用户最友好和使用最广泛的客户端。通过 Geth 客户端与以太坊网络进行连接和交互,可以实现账户管理、合约部署、挖矿等诸多有趣且实用的功能()。

2. pyethapp

Pyethapp 是一个基于 python 的客户端,它实现了以太坊加密经济状态机。python 实现旨在提供一个更容易删减和扩展的代码库。Pyethapp 利用两个以太坊核心组件来实现客户端:

pyethereum - 核心库,具有区块链、以太坊模拟器和挖矿功能;

pydevp2p - 点对点网络库,具有节点发现和多路复用和加密连接的传输。

GitHub:

维基百科:

吉特聊天:

3. 奇偶校验

Parity 声称是世界上最快、最轻的客户端。它是用 Rust 编写的,具有增强的可靠性、性能和代码清晰度。Parity 由 Ethcore 开发。Ethcore 是由以太坊基金会的几位成员创建的。

网站:

GitHub:

吉特聊天:

DApp 浏览器

一个 DApp 浏览器,顾名思义,可以更轻松地使用 DApp 客户端(通常使用 JS 与以太坊的智能合约进行交互)。

DApp浏览器的主要目的是:

提供与以太坊节点(本地节点或远程节点)的连接,以及不同节点(甚至不同网络)之间的便捷切换。

以太坊挖矿教程2021

提供账户(或钱包)以方便用户与 DApp 交互。

1. 雾

Mist() 是以太坊官方 DApp 浏览器。一个漂亮的界面,可以与以太坊节点交互以太坊挖矿教程2021,通过智能合约发送和接收交易。

2. 状态

Status() 是一个可以在手机上使用的 DApp 浏览器。

3. 元掩码

MetaMask() 是一个谷歌浏览器扩展,可以将 Chrome 变成 DApp 浏览器。它的核心特点是将以太坊提供的js客户端库web3注入到各个接口中,让DApp连接到MetaMask提供的以太坊节点服务。但是,此 Chrome 扩展程序允许您管理您的钱包并连接到不同的以太坊网络。

4. 奇偶校验

Parity 是一个集成到 Web 浏览器并使其成为 DApp 浏览器的以太坊客户端(和完整的节点实现)。

以太坊代币

现在你应该知道我们可以编写智能合约并将状态存储在区块链上吗?那么如果在 state 中,我们存储一个 Map 类型,key 是地址,value 是整数。那么我们把这些整数值叫做balances,谁的余额呢?就是我们说的token(token的数据结构很简单,就是存储了某个用户当前的余额)。

是的,你刚刚听说的所有token都只是一些数据,存储在一个哈希表中,通过api或者所谓的协议,进行增删改查。这是一个简单的基本合约()。

你可以看看以太坊官方的创建众筹合约的教程()。你会发现它只是一个合约(Crowdsale)与另一个合约(MyToken)交互,类似于之前的基础合约。它没有什么神奇之处。

人们使用代币做各种各样的事情,只有你的想象力才能阻止你如何做。代币通常用于激励用户与协议交互,或证明资产的所有权、投票权等。

以太坊创始人 Vitalik 最近有一篇关于代币销售模式的好文章()。

与智能合约交互

您与智能合约的交互(也称为调用函数和读取状态)是通过连接到以太坊节点并执行操作码来实现的。目前有多种可以轻松开发的以太坊客户端。Geth 和 parity 都提供了一种控制台或浏览器方式来更好地与智能合约交互。

如果你想要一个程序库用来与智能合约交互的接口,也有这个的客户端实现。对于 JS 语言,你可以使用 web3.js。对于 go 语言,可以使用 go-ethereum 中的 abigen 程序,它提供了与智能合约交互的 go 包。

如果只用于测试和开发,可以使用 Ganache 运行本地节点。

当你部署一个智能合约时,你实际上做的是发送一个交易到地址 0x0,使用当前的合约内容作为参数,一个以太坊交易解释 (@codetractio/inside-an-ethereum-transaction-fa94ffca912f)。

松露和上船

一旦你开始编写智能合约,你就会重复做很多事情,例如将源代码编译为字节码和 abi,​​部署到网络,测试然后部署合约等。你可能希望更多地专注于你的工作。想要达到。

Truffle 和 Embark 框架将这些琐碎的任务标准化和自动化。它们为开发、部署,更重要的是测试智能合约提供了良好的体验。

您可以通过官方文档开始您的 Truffle 之旅。

我的公众号还写了一篇关于使用 truffle 开发 Dapps 的文章,作为入口也是不错的选择:开发第一个基于以太坊的去中心化应用——宠物商店。

Embark() 提供了类似但略有不同的工具来帮助开发人员组织项目。

当你第一次接触智能合约时,你应该尽量不要使用框架。在您了解框架可以带来的价值之前,您不应该开始使用框架,就像您不应该使用 rails new 来学习 HTML 一样。

以太坊挖矿教程2021

ETHPM

分享就是关怀,所以 ETHPM 是一个去中心化的智能合约包管理库()。使用 ETHPM,您可以链接或链接到知名合约或库,减少代码重复,理想情况下为未来的开发提供良好的基础。

本规范()在这里,详细介绍了相关信息和背景。Truffle 和 Embark 都可以与之集成,并创造令人愉快的开发体验。

以太坊网络

Mainnet - 以太坊主网,通常是所有客户端的默认网络。

Ropsten - 以太坊使用工作证明的主要测试网络。该网络由于其计算成本低,容易受到 DDOS 攻击、碎片或其他问题的影响。它在垃圾邮件攻击后被暂时放弃,直到最近才恢复。关联:

Kovan - 一个奇偶校验客户端测试网络,它使用授权证明来提高对垃圾邮件攻击的免疫力,阻塞时间为 4 秒。关联:

Rinkeby - 一个使用群体共识的 geth 客户端测试网络,尽管计算成本低,但对恶意行为者更具弹性。关联:

您可以建立自己的测试网,可能使用 kubernetes() 或 docker-compose(),但也许您很快就能完成,而无需花费任何时间。

智能合约编程语言

坚固性

Solidity 是描述智能合约的第一种语言。目前最流行的语言,因此也是最多的示例、文档和教程。你应该学习这个,除非你有其他学习的理由。

您可以使用基于浏览器的 Remix IDE 进行快速验证。

这是一个 Solidity 合约:

pragma solidity ^0.4.11;
contract BasicToken {
 mapping(address => uint256) balances;
 function transfer(address _to, uint256 _value) returns () {
 balances[msg.sender] = balances[msg.sender] - _value;
 balances[_to] = balances[_to] + _value;
 }
 function balanceOf(address _owner) constant returns (uint256 balance) {
 return balances[_owner];
 }
}

LLL

LLL 是一种 Lisp 风格的低级编程语言,正如语言名称所暗示的那样。虽然以太坊官方并未将其作为需要支持的主要语言,但它仍在不断更新中,并且与solidity在同一个仓库中。

这是一个用 LLL 语言编写的 ERC20 代币合约,链接:

如果您正在学习,可能不太容易习惯 LLL 语言。

Serpent 是一种高级的类 Python 语言,最终编译为 EVM 字节码。它主要由 Augur 团队使用。

但是最近 Zeppelin 解决方案团队在其编译器中发现了一个严重的错误,链接:. 在解决此问题之前,不建议继续使用。

如果您对 Augur 如何解决这些漏洞感兴趣,可以阅读 Zeppelin Solution 的这篇文章。关联:

Serpent 的合约如下所示:

def register(key, value): 
 # Key not yet claimed 
 if not self.storage[key]:
 self.storage[key] = value
 return(1) 
 else:
 return(0) # Key already claimed
def ask(key):
 return(self.storage[key])

智能合约的安全性

一旦在以太坊网络上部署了智能合约,它就是不可变的并且将永远存在。如果您编写了错误,您将无法删除错误版本,您只能在后续版本中修复它。

以太坊挖矿教程2021

由于许多工程师从 Web 开发中开发以太坊和其他智能合约平台,因此这个概念是如此新颖和疯狂。

ConsenSys 有一个很好的资源,称为智能合约最佳实践,你应该深入研究。关联:

Parity 的钱包是如何被黑的解释()。

当你部署你的智能合约时,由于你管理的是真钱,你应该启动一个赏金计划 () 并尝试确保它经过全面测试。

耳语

Whisper() 是一个集成到以太坊中的消息系统。它允许 DApp 发布少量信息以进行非实时消息通信。

它使用 shh 协议。虽然已经有一段时间没有更新了,但这里有一个使用 Whisper 协议实现聊天客户端的示例。关联:。

去中心化自动化组织

这是一个组织(例如,一群人),其中代码用于保证最终执行,而不是传统的法律文件。这群人使用智能合约来做普通组织所做的所有事情,比如对某事进行投票,决定是否投资某事等。

副作用是决策、管理和投资内容将一成不变地存储在区块链上。

早期的 slock.it 创建了标准 DAO 框架来说明这一理念。这里 ( ) 是对 DAO 概念的概述以及如何使用该框架来实现您自己的一个(该项目因错误而被黑客入侵)。

阿拉贡

Aragon() 还面临着设计一家根据智能合约逻辑运营的公司的挑战,重点是创建一家接受投资、处理会计、支付员工、分配股权的公司,正如我们现在所知,它完成了业务一家日常公司。他们还实现了一个不错的 DApp 客户端,以使他们的协议更易于使用。

请参阅此处 Aragon core contract() 以了解更多关于它是如何做到的。

贮存

IPFS&文件币

IPFS(星际文件系统)是一种用于分发文件的协议。您可以将其视为基于 bittorrent 和 git 等概念的文件系统,文件可以在其中定位并且是不可变的。IPFS 将信息存储在 IPLD 数据模型中,这很有趣,并且提供了一些特殊功能,您可以通过下面的说明了解这些功能。

这是一个具有 http 网关和文件系统适配器的新协议,它允许您通过 http 将整个 Internet 文件系统挂载到本地磁盘/ipfs。IPFS 还提供了一个寻址服务 IPNS(星际命名空间),它允许可变状态(请注意,IPFS 中的所有内容都是不可变的)。您甚至可以使用 DNS TXT 记录来定位您的 IPNS 客户端,从而生成指向相应数据的用户友好链接。

FileCoin 是 Protocol Lab 努力打造基于 IPFS 的去中心化存储市场的成果,这是一个为全网提供存储资源的激励层。FileCoin 的共识协议不使用浪费资源的 Proof of Work,而是使用 Proof of Replication 和 Proof of SpaceTime 来确保每条数据都被复制特定数量的副本并存储特定时间。

您应该阅读 IPFS 白皮书、FileCoin 白皮书和 IPLD 规范。

相关链接

IPFS:

文件币:

知识产权:

由于 FileCoin 目前未上线,您可以使用当前的 IPFS 存储网络运行 html/css/js 并将其用作类似 orbit-db 的数据库。

一群

Swarm 是一个集成到以太坊生态系统中的去中心化存储网络。作为第一阵营的一个项目,在这里查看IPFS和这个项目的对比和优劣。但本质上,它基本上是一样的,除了它们有不同的理念并且在底层使用稍微不同的协议。

以太坊挖矿教程2021

项目

占卜师

Augur 是一个去中心化的预测市场,让每个人都可以投注真实世界的事件。一方面,用户对可能发生的特定事件下注,一旦结果成真,他们赢得的代币就具有真正的价值。为此,您需要实现一个去中心化的预言机协议来输入现实世界的信息,该协议使用 REP 协议代币进行经济激励。

Augur 白皮书:;

第一时间获取Augur最新进展,可以关注其Medium账号:@AugurProject;

你也可以看看Augur项目的合约代码:;

并了解 Augur 总体规划:@AugurProject/augur-master-plan-42dda65a3e3d

灵知

Gnosis 与 Augur 有着相似的理念,也是一个去中心化的预测市场。这是该项目的白皮书:

并与 Augur 项目进行比较:@akhounov/hopefully-impartial-comparison-of-gnosis-and-augur-f743d11d6d37。

0x项目

0xProject 创建了一个交换代币的协议,以及一个 DApp 来实现这个协议。开发者可以基于自己的分布式应用(技术上称为中继层)创建一个交易所,用户可以在不信任这些应用的情况下完成交易,并在区块链上进行结算。0x 协议旨在使用离线第三方广播交易和管理订单(可以创建/更新/删除订单,而无需直接向以太坊发送缓慢/昂贵的交易),但最终将使用以太坊进行结算。

它们支持场外交易,这是一个使用该协议在用户之间直接交换代币的 DApp。你可以在 github 上查看他们的合同。

交换

ConsenSys 的 Swap 协议也非常相似,但更侧重于 p2p 直接交易(而不是基于订单表)。

班科尔

代币流动性是加密货币生态系统中比较大的问题。用户之间的交易需要满足买卖双方的想法。

Bancor 是一种允许您的代币执行以下操作的协议:

1.可以根据订单自动给出价格;

2. 通过持有其他代币作为抵押品,即时创造流动性。

打开 Zeppelin 和 zeppelinOS

Zeppelin Solutions 是一家科技公司,在这个领域做了一些伟大而专业的事情。他们做了很多事情,很难解释所有事情。

他们管理 Open Zeppelin,这是一组经过审查的最佳智能合约实践,您可以继承并应用于您自己的 DApp。您可以查看他们的 github 资源以了解更多信息。你应该阅读其中的每一份合同。

他们坚持代码重用的想法,然后通过创建 Zeppelin OS 更进一步。你可以忽略操作系统,它不是传统意义上的操作系统的概念。zeppelinOS 功能、工具和服务的集合,旨在提供可靠的开发人员体验,同时最大限度地提高智能合约的安全性。

zeppelinOS 的一部分是“zeppelinOS 内核”。实际上,它们并不是传统意义上的内核,而是一组库。它们是通过库模型实现的可扩展智能合约,可以在出现安全问题时独立更新。因为你在合约中包含的代码更少,部署也将花费更少的 gas,并且开发人员减少了代码重复。

zeppelinOS 还有其他一些巧妙的计划,比如调度器(智能合约的异步执行,因为默认合约一般不会主动触发某种行为)、市场级协议和链下开发者体验工具。

社区

以太坊爱好者()是目前以太坊最好的中文技术社区,不断推广和普及以太坊技术,帮助以太坊释放区块链和智能合约的潜力,为开发者提供更好的平台和机会。

终于

区块链技术还在飞速发展,显然这篇文章很快就会过时,所以如果你喜欢某个协议、平台、技术或团队,可以告诉我,我会考虑将它们添加到文章中。