以太坊(Ethereum)智能合约开发快速入门

一、简介

  1. 智能合约
    首先,智能合约并不是像人工智能AI那样的超级智能,智能合约的英文名叫Smart contract,仅仅是Smart而已,还没有到人工智能的intelligence。所以,我们可以把智能合约想象成一种自动售货机,出售的是通证(token):投资者(用户)发起交易,向智能合约转入以太币(ETH),智能合约自动运转,在满足一定规则后,它向投资者账户转入相应数量的通证。

  2. NFT
    上面我们知道了,智能合约类似一种自动售货机,出售的是通证(token)。如果出售的token的类型是独一无二的,并且是不可分割的,这种token就叫做 Non-Fungible Token,即是 NFT(需要符合ERC-721标准)。例如一个token代表一张体育比赛的门票,因为每一张门票座位编号不一样,所以对应的token独一无二,又因为座位只能出售给一个人,因为对应的token也不能分割。

一、以太坊区块链网络简介

以太坊区块链网络
  1. 以太坊公共区块链网络
    对区块链最好的描述是将其描述为一个公共数据库,它由网络中的许多计算机更新和共享,并且任何人都可以接入。以太坊公共区块链网络也不例外。目前,以太坊公共区块链网络提供了主网和三个测试网,主网就是智能合约正式上线的区块链网络,三个测试网分别为Kovan、Rinkeby和Ropsten。Ropsten是官方提供的和主网最相似的网络,使用工作量证明;Rinkeby也是官方提供的,使用权益证明。以太坊公共区块链网络具体的说明[见这里]。(https://ethereum.org/zh/developers/docs/networks/)

  2. 节点、Geth、Infura
    我们的程序需要访问以太坊节点,才能连接到以太坊公共区块链网络。有几种方法可以做到这一点,可以使用官方的Geth运行自己的以太坊节点。但这需要从区块链下载大量数据并保持同步,很麻烦,成本也高。比较方便的方法是,使用Infura访问以太坊节点。
    Infura 是什么?专业一点讲,Infura 是一种 IaaS(Infrastructure as a Service)产品,目的是为了降低访问以太坊数据的门槛。通俗一点讲,Infura 就是一个可以让你的 DApp 快速接入以太坊的平台,不需要本地运行以太坊节点。
    Infura是一个免费提供以太坊节点的服务。接下来有Infura的使用说明。

一、智能合约应用模块简介

我们的智能合约应用使用Solidity Template 项目模板开发框架来开发。下面简单介绍Solidity Template 的组成。

智能合约应用组成模块
  1. Solidity Template —— 项目模板
    Solidity Template 是一个 Hardhat 项目的模板,除了集成 Hardhat,还集成了以太坊 linter、代码格式化、代码覆盖率测试等工具。Solidity Template 直接clone或者下载回来就能使用,非常方便。

  2. Hardhat —— 项目主框架
    Hardhat 是一个编译、部署、测试和调试以太坊应用的开发环境。使用 Hardhat 可以方便地开发以太坊的智能合约和dApps。

  3. Waffle —— 智能合约应用测试库
    Waffle 是一个编写和测试以太坊智能合约的库,比Truffle更加好用,简单和快速,它内部使用了ethers-jsMochaChai。我们将使用它来编写智能合约应用的测试代码。

  1. Ethers.js —— 智能合约API库
    Ethers.js 是一个编译、部署、测试和调试以太坊应用的开发环境。使用 Hardhat 可以方便地开发以太坊的智能合约和dApps。这是我们开发智能合约应用所用的最多API的库。这里有中文文档,和官方英文文档

  2. Mocha和Chai —— 测试框架和断言库
    Mocha是一个功能丰富的javascript测试框架,运行在node.js和浏览器中,使异步测试变得简单有趣。Chai 是一个针对 Node.js 和浏览器的行为驱动测试和测试驱动测试的诊断库,可与任何 JavaScript 测试框架集成。

二、开发环境搭建

  1. 安装vscode Visual Studio Code

  2. 安装以太坊开发的vscode相关插件,打开下面的网址,在点击 install 即可。

https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity
https://marketplace.visualstudio.com/items?itemName=hosho.solidity-debugger

三、注册相关账号

  1. 上面说了,我们的程序需要访问Ethereum节点,才能连接到公共区块链网络,为了方便,我们使用Infura访问Ethereum节点。我们应用使用Infura只需要Infura的API KEY(即是API网址)即可。在Infura上注册账号,创建项目,在项目详情页上可以查看API KEY。我们先用测试网goerli的API KEY,等到正式上线再用mainnet的API Key:

    Infura api key

  2. 以太坊帐户由公钥和私钥加密对组成。因为密钥不方便记忆,我们不直接创建密钥,而是使用助记词来自动生成。助记词是由十二到二十四个单词组成的密码,它被用于生成区块链账户系统中512位的种子(seed),而种子可以生成私钥(prikey),由私钥可以导出公钥(pubkey),公钥经过变换后可以得到我们经常在区块链账本上看到的地址(address)。点击这里来生成助记词(注意空格也是助记词的一部分):

    生成助记词

助记词相当于以太坊的账号密码,千万要保存好,千万不要随便告诉别人。

四、项目搭建

  1. 下载 Solidity Template 的源代码,

https://github.com/paulrberg/solidity-template

  1. 用 vscode 打开下载的源代码,将 .env.example 复制一份,改名为 .env,填入上面注册时的 API KEY 和助记词。

  2. 使用下面的命令来安装项目依赖库:
    $ yarn install

  3. 编译合约

要编译合约,请在终端中运行 npx hardhat compilecompile任务是hardhat内置任务之一。

$ npx hardhat compile
Compiling...
Compiled 1 contract successfully

合约已成功编译,可以使用了。

五、编写智能合约(待续。。。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容