主页 > imtoken钱包下载安卓版 > Ethereum Getting Started Tutorial(可能是迄今为止最完整的以太坊开发入门指南)

Ethereum Getting Started Tutorial(可能是迄今为止最完整的以太坊开发入门指南)

imtoken钱包下载安卓版 2023-07-01 06:09:02

以太坊教程_n卡以太坊挖矿教程_以太坊为什么叫以太坊

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

目标听众:

专业程序员;

想深入了解以太坊/区块链及其生态的读者;

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

预备知识:

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

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

不知道大家是不是和我一样,一开始被各种数学问题搞得一头雾水,比如拜占庭问题,双花问题等等。 我的建议是一开始先把这些问题搁置一旁,对区块链的原理有个基本的整体了解,然后再回过头来思考这些问题。

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

以太坊

与比特币一样,以太坊的底层框架是区块链协议,而区块链本质上是一个应用密码学的分布式数据库系统。 看完上面提到的阿里云整理的科普文章,为了进一步了解以太坊,推荐阅读以太坊白皮书:%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) 在参与网络的每个节点上运行,作为对其新区块的验证。

什么是煤气

以太坊为什么叫以太坊_n卡以太坊挖矿教程_以太坊教程

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

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

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

如果总耗气量超过gas limit,所有操作将被还原,但交易成立,交易费仍由矿工收取。 区块链将显示交易已尝试完成,但所有合约命令都被还原(气体不足),因为没有提供足够的气体。

交易中所有未使用的多余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 浏览器的主要目的是:

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

以太坊教程_以太坊为什么叫以太坊_n卡以太坊挖矿教程

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

1.雾

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

2.状态

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

3.元掩码

MetaMask() 是一个谷歌浏览器扩展,可以将 Chrome 变成 DApp 浏览器。 其核心功能是在各个接口中注入以太坊提供的js客户端库web3,让DApp连接到MetaMask提供的以太坊节点服务。 但是这个 Chrome 扩展允许你管理你的钱包并连接到不同的以太坊网络(译者注:包括本地开发网络)。

4.平价

Parity 是一个以太坊客户端(也是一个全节点实现),它集成到网络浏览器中并使其成为 DApp 浏览器。

以太坊代币

现在你应该知道我们可以编写智能合约并将状态存储在区块链上了吧? 那么如果在status部分,我们存储一个Map类型,key是一个地址,value是一个整数。 那么我们把这些整数值称为balances,到底是谁的balance呢? 就是我们说的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 语言一样。

以太坊教程_n卡以太坊挖矿教程_以太坊为什么叫以太坊

乙醇胺

分享就是关怀,所以ETHPM是一个去中心化的智能合约包管理仓库()。 使用ETHPM,您可以关联或连接知名合约或库,减少代码重复,尽可能理想地为以后的开发打下良好的基础。

这里的specification()详细解释了相关信息和背景。 Truffle 和 Embark 都可以与之集成,创造愉快的开发体验。

以太网络

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

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

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

Rinkeby - 使用群体共识的 geth 客户端测试网,尽管计算密集度较低,但它对恶意行为者更具弹性。 关联:

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

智能合约编程语言

坚固性

Solidity 是最早用于描述智能合约的语言之一。 目前最流行的语言,因此拥有最多的示例、文档和教程。 除非你有其他理由学习它,否则你应该学习它。

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

这是一个 Solidity 合约:

pragma solidity ^0.4.11; 合同 BasicToken { 映射(地址 => uint256)余额; function transfer(address _to, uint256 _value) returns () { balances[msg.sender] = balances[msg.sender] - _value; } 余额[_to] = 余额[_to] + _value; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; }}

生命周期

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

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

如果你正在学习,可能不太容易习惯 LLL 语言的书写。

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

但是最近 Zeppelin Solution 团队发现其编译器存在严重的 bug,链接:。 在解决此问题之前,不建议继续使用。

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

Serpent 的合约如下所示:

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

智能合约安全

智能合约一旦部署在以太坊网络上,就不可更改,永远存在。 如果你写了一个bug,你将无法去除有bug的版本,你只能在后续版本中修复它。

以太坊为什么叫以太坊_以太坊教程_n卡以太坊挖矿教程

由于许多开发以太坊和其他智能合约平台的工程师都来自网络开发,所以这个概念是如此新颖和疯狂。

ConsenSys 有一个很棒的资源,叫做智能合约最佳实践,你应该很好地理解它。 关联:

一个 Parity 钱包被黑的解释()。

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

耳语

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

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

分散式自动化组织

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

副作用是投资的决策、管理和结果将不可更改地存储在区块链上。

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

阿拉贡

Aragon ( ) 也在接受挑战,设计一家按照智能合约逻辑运营的公司,重点是创建一家可以接受投资、处理会计、支付员工工资、分配股权并完成日常事务的企业。 - 我们现在所知道的一家公司的日常业务。 他们还实现了一个很好的 DApp 客户端,以便更轻松地使用他们的协议。

请参阅此处 Aragon 核心 contract() 以了解有关其工作原理的更多信息。

贮存

IPFS 和文件币

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

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

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

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

相关链接

IPFS:

文件币:

IPLD:

由于FileCoin还没有上线,大家可以使用目前的IPFS存储网络运行html/css/js,作为类似orbit-db的数据库使用。

一群

Swarm 是一个集成在以太坊生态系统中的去中心化存储网络。 作为第一阵营的项目,关于IPFS和本项目的对比和优缺点请看这里。 但本质上,它基本上是一样的,除了他们有不同的哲学并且在引擎盖下使用稍微不同的协议。

n卡以太坊挖矿教程_以太坊教程_以太坊为什么叫以太坊

项目

预言机

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直接交易(而不是基于订单表),这里有一份白皮书(),大家可以看看,这里是对Swap协议的介绍().

银行

代币的流动性是加密货币生态中比较大的一个问题。 用户之间的交易需要买卖双方都满意。

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

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

2. 可以通过持有其他代币作为抵押品来立即创造流动性。

打开 Zeppelin 和 zeppelinOS

Zeppelin Solutions 是一家技术公司,在这个领域做一些伟大的、专业的事情。 他们做了很多事情,很难一一列举。

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

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

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

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

社区

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

最后

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