chokcoco / cnblogsArticle

自己博客园一些写得比较好的文章移植,欢迎订阅。
481 stars 49 forks source link

从零开始学习以太坊编程(一)-- 环境准备与基础知识 #23

Open chokcoco opened 6 years ago

chokcoco commented 6 years ago

区块链在 2018 突然就爆发了,区块链工程师招聘也是异常火爆。长期混迹币圈,又是个人兴趣所向,遂打算学习一下区块链方面的编程技术。

如果你也感兴趣,可以和我一起,从零开始学习以太坊编程。

废话少说,直接开始教程。

安装 truffle

truffle 是啥?

Truffle 是一个以太坊智能合约开发框架,利用它可以方便地生成项目模板、编译合约、部署合约到区块链、测试合约等等。

Truffle官方文档可以戳这里。

truffle 能干啥?

  1. 内置的智能合约编译,链接,部署和二进制文件的管理。
  2. 快速开发下的自动合约测试。
  3. 脚本化的,可扩展的部署与发布框架。
  4. 部署到不管多少的公网或私网的网络环境管理功能
  5. 使用EthPM&NPM提供的包管理,使用ERC190标准。
  6. 与合约直接通信的直接交互控制台(写完合约就可以命令行里验证了)。
  7. 可配的构建流程,支持紧密集成。
  8. 在Truffle环境里支持执行外部的脚本。

安装 truffle

truffle 支持使用 npm 安装。对于前端同学是个福音。

npm install -g truffle

当然有些前提:

  1. NODEJS 版本必须大于 5.0+ (好奇怪?为什么不是6.0+的稳定版本?)
  2. 支持 Windows、MAC OS X 以及 Linux 操作系统。

nodejs 版本要求大于 5.0,所以版本过低的同学需要更新一下。建议直接上 8.1.0 的稳定版本。Node.js 8.10.0 LTS

OK,我是 windows 下的环境,安装完成大概是这样:

image

创建项目

OK,工具已经有了,接下来就是创建项目。

我们创建一个文件夹,在该文件夹下,使用 truffle init 指令创建一个新的项目。

> truffle init

上述命令之后,我们可以得到一个官方提供的简单脚手架 -- metacoin 项目。简单的目录示意如下:

image

目录简介

当然,除了 truffle init 之外,官方还提供了一个简明教程项目 -- metacoin。安装它的方法如下:

> truffle unbox metacoin

两者都可以,目的是创建一个简单的脚手架。我们看到,脚手架提供的几个文件,后缀只有两个 *.js 或者是 *.sol

*.js 这个大家都很熟悉,就是 JavaScript 脚本。

*.sol 是个啥呢?

sol 简介

.sol 后缀文件中的 sol 是 Solidity 的简称。Solidity 是基于以太坊虚拟机 Ethereum Virtual Machine (EVM)运行,面向智能合约,语法类似于 JavaScript 的高级编程语言。

语法类似于 JavaScript,前端工程师的福音。

这里先了解一下,后面会有更深入的讲解。

下面在正式编程之前,还有一些专业术语要了解一下。

DApp(Distributed App,分布式应用)

什么是 Dapp?去中心化应用也被称为DApp(decentralized applications),是技术进化的下一个合乎逻辑的步骤。

一个分布式应用,类似以太坊上的智能合约,但也有关键不同。不像智能合约,Dapp不需仅围绕金融,还可将区块链技术用于可想到的任何用途。

有人将 Distributed App 翻译成去中心化应用,这个翻译其实并不准确。去中心化的英文单词是 Decentralized 或者是 Distributed 。但其实翻译过来为分散,而非去中心化

区块链是一种软件系统,而软件系统的网络架构一般有三种模式:单中心、多中心、分布式。单词 Decentralized 只是表明不是单中心模式,可能为多中心或弱中心,也可能是分布式的。

ERC20 / ERC223 / ERC721

经常看到说像 ETH 钱包支持 ERC20 标准代币。

那么所谓的 ERC20 是什么呢?

ERC20 标准

ERC-20 标准是在2015年11月份推出的,使用这种规则的代币,表现出一种通用的和可预测的方式,可以让以太坊区块链上的其他智能合约和分布式应用之间无缝交互。

简单地说,任何 ERC-20 代币都能立即兼容以太坊钱包。ERC20 是各个代币的标准接口。ERC20 代币仅仅是以太坊代币的子集。

ERC 20 标准存在的问题

ERC20 令牌存在的最大问题在于无法通过接收方合同处理传入的交易。在此基础上,有了 ERC223 标准。

ERC223 标准

自从引入 ERC20 令牌标准以来,几乎所有的基于以太坊的令牌都成功的接受了这个新标准。

然而其自身的缺点需要及时解决,这便是ERC223令牌诞生的原因。

ERC223 令牌标准将向现有的 ERC20 标准引入一个新功能,以防止意外转移的发生。ERC223 令牌标准可以防止令牌在以太坊网络上丢失。

ERC 721/NFT 标准

我们知道,类似ETH,很多代币都是可以细分到小数点后面很多很多位数的。

譬如,我要可以只买卖 0.00000001 枚 ETH 。这就是 ERC20 的标准。Token 可以无限细分为 10^18 份。

而 ERC721 的 Token 最小的单位为 1,无法再分割。类似于我们见到的百度莱次狗、小米加密猫,这些阿猫阿狗正常来说都是一只一只的,我们不可能说去交易 0.000001 只加密猫。所以正常来说 莱次狗、加密猫 都应该是符合 ERC721 标准的代币。

20180205054919795

ERC721(Non-Fungible Tokens),翻译为不可互换的 Token, 英文简写为"NFT",简单理解为每个 Token 都是独一无二的。也就是说 ERC721 的每个 Token 都拥有独立唯一的 tokenId 编号。

ERC20 是可置换的,意味着所有的 Token 直接没有区别,所有Token都是一样的,而符合 ERC721 的 Token 每个都具有独立唯一的 tokenId 编号。

举个例子,假设我的加密猫的 TokenId 为 888888888,是不是很具有收藏价值。可以类似对比车牌。

总结

本期先带大家了解这多,下一期介绍 Go Ethereum 和直接开始一个简单和合约编程,敬请期待。

任何技术问题交流,或者有志学习 ETH 编程的,可以加 Q 群交流:互联网区块链技术交流 --483931379 。