Git Product home page Git Product logo

eth-dev3's Introduction

以太坊开发从0到1

看到很多同学想接触以太坊开发,但是看到茫茫多的关键字,不知道从哪开始,我是先搭个节点呢,还是先学solidity呢,还是先一键发个币呢? 我自己本身也是个初学者,我想从自身感受来出发,介绍下我理解的以太坊开发中的各个部分和学习步骤。

以太坊开发,是一个大的范围,实际上它可以分成几个小部分理解,甚至你完全不接触其中的一些部分(比如solidity语言),你也可以参与到以太坊开发中来。 不过首先我想声明的是,你必须有一点点编程的基础,这样更好理解。

首先,以太坊开发,我们不是去构建它的核心组件,像开发操作系统那样写复杂的模块算法和数据结构,而是一个和以太坊交互的过程,大概分这么两种:

  1. 查询数据。这类的开发就不需要你去了解智能合约的编程语言。 你需要的是一个和以太坊交互的语言,比如python或者js,去编写一个客户端,以太坊网络类似一个服务端,然后你像发送http请求一样,从以太坊网络取得你要的数据。 这方面的例子有nansendebank等链上分析应用。

  2. 如果第一种算是读数据,那么第二种就是写数据了。发币,发NFT,都是往以太坊网络存数据, 除了需要一个和以太坊交互的客户端以外,你还要自己准备要储存的数据,以及处理数据的逻辑,那么就是写智能合约。 转账也是写数据,但它只是改变原来已有的状态,所以你只需要一个交互客户端和填几个参数就ok了。

有了整体的概念以后我们再来看什么是我们要优先了解的。很明显,你必须知道以太坊世界为你抽象出的各种概念,理解这些概念甚至不需要编程基础,但又是非常重要的,不然交互无从谈起。 比如,addressblockgastransaction等等。这一部分,很显然,我把它叫做以太坊的基本概念

再然后,你要做的就是优先实践,具体说就是查询一个简单的以太坊数据,比如最新的区块号,或者某个地址的余额。 要做这件事情,需要两样东西,一个是提供以太坊查询服务的provider和你自己的交互客户端。具体到这两样东西,分别又有很多不同的选择。 provider分自建的和第三方服务商提供的,大白话就是给你提供接入以太坊网络服务的。因为自己本地搭建节点的话,需要耗费很多资源,只是简单查询的话,用第三方提供的节点就很方便,后边会具体介绍。

/*

+--------------------------------+
|                                |
|                                |
|       Ethereum Network         |
|                                |
|                                |
|           Provider             |
+--------------------------------+

            |     ^
      query |     | Deploy Contract
            |     |
            v     |
    +-------------------+
    |                   |      +--------------+
    |                   |      |              |
    |      Client       | <--- |Smart Contract|
    |                   |      |              |
    |                   |      +--------------+
    +-------------------+
    
 */

交互客户端,最简单来说,可能是三行python代码,第一行连接provider,第二行创建个Web3对象,第三行查询最新的区块号。 客户端同时也会负责编译,发布或调试智能合约。像上图中所示,它主要是和以太坊网络沟通的。 以上这一部分,我们谈到了两个模块,那就是provider交互客户端

实践完读数据,下面实践写数据。发个币,发个NFT?这时候就需要学习智能合约的语言了。什么solidity语法,ERC20或者ERC721接口标准都可以在这个阶段学习。 最后这部分很明显涉及到的模块就是智能合约了。

Ok, 上面提到的四个模块,以太坊基本概念, provider, 交互客户端, 智能合约没有一定之分,只是我学习过程中的个人理解。 第一个是概念理解,第二个结合了概念和搭环境的实操,后边两个都偏code,分别运行在本地机器和以太坊网络上。然后在看的时候穿插着看,相互映证。

好了,介绍了这些具体的模块,我想谈谈我个人对区块链或者是以太坊的理解。以太坊在我看来就是对现有计算机系统的一个更高级的抽象。 我们先有了计算机,然后抽象出了虚拟机,屏蔽了物理机这一层,在这之上又构建很多现代服务比如分布式,云计算。但更上一层的抽象是什么? 是一个统一存储,计算和网络资源的计算机,它屏蔽了单体计算机本身所具有的内存,硬盘,cpu等概念,可能变成了memory,storage,和gas。 所以以太坊是科技上更加向上的一个抽象,是下一个时代科技浪潮的基石,依托这层抽象,我们已经也会继续构建出一些新的玩法和商业模式。

下面的各个部分,会分别就我上边介绍过的,列一些有用的资源。

以太坊基本概念

了解以太坊当中的一些基础概念,最好先把官网的文档浏览一遍,然后再慢慢搜关键字深入了解。这一类的文档非常多,下面就只放个官网链接吧。

Provider

手动搭建node的话,这块步骤较多,我们使用geth来帮助你搭建节点。它本身有三种模式light, snap, full. full模式的话硬盘占用空间太大了2~3个T, 不当矿工的话,不建议选这个。light模式最快,不怎么占硬盘,但使用过程中频繁报找不到peer node, 体验很差。因为light模式不下载大部分的数据,很多校验操作都依赖其他的node不能独立完成。还好我们有snap模式,geth默认也是启动这个模式的。 snap模式大概占用800G的硬盘。安装和使用geth参考官方手册:

如果借用第三方服务的话,非常简单,经常使用的有如下两家:

注册完毕的话,通常你会得到一个类似这样的https://mainnet.infura.io/v3/***api 接口,这里我们选用了http的,还有IPC的连接方式。

然后可以通过下面这种方式,来立刻上手,和以太坊主网来一次完美的talk, 查询最新的区块编号。注意python需要先安装好web3的包,其他语言同理。

from web3 import Web3, HTTPProvider
w3 = Web3(HTTPProvider('https://mainnet.infura.io/v3/***'))
print ("Latest Ethereum block number" , w3.eth.blockNumber)

交互客户端

这一部分就是搭建本地开发环境。上面那节,其实已经展示过了,一个极简的客户端成功地和以太坊主网完成了talk。

客户端这一部分,可以分成很多语言的栈,python, js, java之类的。我个人只用过pythonjs的。 他们分别提供了web3pyweb3js开发包,封装了各种处理消息发送和处理接收消息的模块,来方便开发。阅读下边的开发文档:

另外js社区还更多用另外一个包etherjs来开发。

除此之外,你可能已经了解到了集成开发环境的概念,比如brownie, hardhat等,brownie是python开发栈使用,hardhat是js栈使用,更专业和全面。 他们都提供了编译,集成测试,部署等操作,是你后边开发调试智能合约必不可少的工具。他们是对上边提到的web3py,web3js更进一步的封装。

下面是一些官方对于各个开发栈的介绍

下边是一片python栈从头开始搭建到交互的文章, 值得参考

智能合约 Solidity

到了这个部分,你可以研究的范围就很多了,你可以研究怎么发币和NFT,你也可以做一个mini版的swap, 还可以做数据分析,扒数据,监听event等等,范围非常大了。

入门的话,直接推荐看下面这个WFTSolidity中文教程,非常优质的教程,还有部署各种合约的样例

另外还可以看下官方文档和一些英文教程

总结

我大概总结了4个模块,来切分以太坊开发入门时需要理解的部分,怕很多杂乱的概念把新手朋友吓到。 值得一提的是,我刻意避免提到怎么安装具体的程序,具体有哪些步骤,需要执行哪些命令行。 一个原因是同作为初学者,很难覆盖全面,这样会造成误导;另一个原因是因为我觉得最好的方式 就是看官网,自己搜索关键字,自己实践,看别人提取之后的一些操作和命令,非常有局限性。

欢迎加入Discord社区,讨论开发遇到的问题,一起做开源项目: https://discord.gg/vujpgYnwWk

eth-dev3's People

Contributors

cryptothink629 avatar

Stargazers

Calvin Bauch avatar fyy avatar JoDragon avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.