第四课 以太坊术语说明及开发者资源列表

592 阅读12分钟

EVM-以太坊虚拟机

是以太坊中智能合约的运行环境。

以太坊客户端

也称钱包,提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,以太坊节点利用以太坊客户端接入到以太坊网络。 现在以太坊客户端主要有:Wallent/ist , Geth, Parity, Harmony,

Geth

go-ethereum的简称,由以太坊基金会提供的官方客户端软件,用Go语言编写,用于创建一个本地的测试网络。geth是真正的以太坊环境。

Solidity语言

一种高级语言,以太坊编写智能合约最流行的编程语言。在Remix IDE中编写,然后编译成在EVM上可运行的字节码。

Remix

以太坊官方推荐的智能合约开发IDE,适合新手,可以在浏览器中快速部署测试智能合约。

运行Remix IDE环境:

remix.ethereum.org/#optimize=f…

Web3.js

javascript库,可以用来与一个节点进行交互。

当Solidity合约编译好并且发送到网络上之后,你可以使用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web应用。

web3.js的接口文档:github.com/ethereum/wi…

web3.js的代码库:github.com/ethereum/we…

JavaScript格式化工具(能正常恢复被压缩的JS代码):tool.oschina.net/codeformat/…

Truffle

Truffle 和 Embark 是用于开发以太坊 DApps的两个最常用的框架。 它们抽象出在区块链上编译和部署合同的许多复杂的东西。

Truffle让你可以迅速进入写代码-编译-部署-测试-打包DApp这个流程。(Truffle ['trʌfl] 、Embark [ɪm'bɑrk] )

本地的用来编译、部署智能合约的工具。

testrpc

testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当你的合约在testrpc中测试通过后,再可以部署到geth中去。

Ganache

Ganache是为以太坊开发准备的个人区块链钱包,你可以用它执行智能合约,研发应用和执行测试用例。Ganache的前身是testrpc,跟testrpc一样的功能。

Ganache现在有两个版本,一个是带图形界面的版本,下载地址:

github.com/trufflesuit…

MetaMask

【定义】MetaMask 是一款插件形式的以太坊轻客户端,开发过程中使用MetaMask和我们的dapp进行交互是个很好的选择。

百度云盘获取链接:pan.baidu.com/s/1N0oH5Azb… 密码:77sl

Solc

编译器,用Solidity写好智能合约之后,需要用solc来编译。它是一个来自C++客户端实现的组件。

Gas

可理解成汽油, 在以太坊上执行程序以及保存数据都要消耗一定量的以太币,Gas是以太币转换而成。这个机制用来保证效率。

**油费计算 **

油费 = gasPrice 油价 × gasLimit 用油限制

gasCost = gasPrice * gasLimit(used gas)

注意gasLimit只是一个最大使用值,如果没有使用完全则会退回账户。就像是开车去某个目的地一样,gasPrice就是油价,油箱大小就是gasLimit,油够,到达目的地多余的油会留在油箱里面,也就是转账成功,多余的油费会返回账户。如果少了那就到达不了,意味着转账失败。

货币单位(Ether Units):Gwei / wei / Eth之间的关系

gasPrice单位一般用 Gwei表示,三者之间的转换关系为:

1 eth = 1e9 Gwei = 1e18 wei

【注意】1e9 代表的是10的9次方

智能合约也是一样的,当一个发起者部署运行一段智能合约时,以太坊会收取gas费用,就像汽车行驶需要烧油一样,直到你的智能合约运行完毕,“油箱”中剩余的gas会退还给你,如果你的代码死循环了,耗尽了你“油箱”中的gas,那么以太坊会自动报出异常停止你的智能合约。

一个数字常量(字面量)后面跟随一个后缀wei, finney,szaboether,这个后缀就是货币单位。不同的单位可以转换。不含任何后缀的默认单位是wei。

不同的以太币单位转换关系如下:

1 ether == 10^3 finney == 1000 finney

1 ether == 10^6 szabo

1 ether == 10^18 wei

插曲:以太币单位其实是密码学家的名字,是以太坊创始人为了纪念他们在数字货币的领域的贡献。他们分别是:

wei: Wei Dai 戴伟 密码学家 ,发表 B-money

finney: Hal Finney 芬尼 密码学家、工作量证明机制(POW)提出

szabo: Nick Szabo 尼克萨博 密码学家、智能合约的提出者

账户

以太坊中有两类账户,它们共用同一个地址空间:

外部账户,该类账户被公钥-私钥对控制(人类)。

合约账户,该类账户被存储在账户中的代码控制。

外部账户的地址是由公钥决定的,合约账户的地址是在创建改合约时确定的(这个地址由合约创建者的地址和该地址发出过的交易数量计算得到,地址发出过的交易数量也被称作"nonce")

合约账户存储了代码,外部账户则没有,除了这点以外,这两类账户对于EVM来说是一样的。

每个账户有一个key-value形式的持久化存储。其中key和value的长度都是256bit,名字叫做storage.

另外,每个账户都有一个以太币余额(单位是“Wei"),该账户余额可以通过向它发送带有以太币的交易来改变。

ERC-20

代币合约标准,一系列通过以太坊智能合约发布的代币制定了代币发放的通用规则。该标准是目前通过ICO发行代币的基础准则。

该标准能够确保基于以太坊的代币在整个生态系统中以一种可预测的方式进行,使去中心化应用程序和智能合约可以在整个平台上彼此协作,所有代币都遵循一个固定的安全标准。

ERC721

ERC721 是由Dieter Shirley 在2017年9月提出。Dieter Shirley 正是谜恋猫CryptoKitties背后的公司Axiom Zen的技术总监。因此谜恋猫也是第一个实现了ERC721 标准的去中心化应用。ERC721号提议已经被以太坊作为标准接受,但该标准仍处于草稿阶段。

ERC721同样是一个代币标准,ERC721官方简要解释是Non-Fungible Tokens,简写为NFTs,多翻译为非同质代币。非同质代表独一无二,谜恋猫为例,每只猫都被赋予拥有基因,是独一无二的(一只猫就是一个NFTs),猫之间是不能置换的。这种独特性使得某些稀有猫具有收藏价值,也因此受到追捧。

DAPP(分布式应用)

DAPP是Decentralized Application的缩写,中文叫分布式应用/去中心化应用。通常来说,不同的DAPP会采用不同的底层区块链开发平台和共识机制,或者自行发布代币(也可以使用基于相同区块链平台的通用代币)。DAPP于区块链,就好比APP之于IOS和Android。

根据David Johnston对DAPP的定义,一个真正的DAPP应用,需要同时满足一下几个条件:

1、应用必须完全开源、自治,且没有一个实体控制着该应用超51%Token。该应用必须能够根据用户的反馈及技术要求进行升级,且应用升级必须由大部分用户达成共识之后方可进行;

2、应用的数据必须加密后存储在公开的区块链上;

3、应用必须拥有Token机制(可用基于相同底层区块链平台的通用代币或自行发行新币),矿工或应用维护节点需要得到代币奖励;

4、应用代币的产生必须依据标准的加密算法,有价值的节点可以根据该算法获取应用的代币奖励。

IPFS

星际文件系统IPFS(InterPlanetary File System)是一个面向全球的、点对点的分布式版本文件系统,目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。

IPFS想打造一个点对点的网络拓扑,相当于颠覆HTTP所代表的分布关系,它具有内容可寻址的特点,通过文件内容生成唯一的哈希标识,一定程度上节约了空间开销的成本。

Lite Server

它是一个全功能的网站架设工具软件包,内置有Web、FTP、Telnet and E-Mail等服务器,你可以容易地进行设置,方便初学者使用。

lite-server 是轻量级的,仅适用于开发 的 node 服务器, 它仅支持 web app。

安装FTP服务器

参考文章链接:

blog.csdn.net/mgsky1/arti…

Markdown 语法整理大集合2017

这个跟以太坊无关,笔者写文章需要,就临时存放这儿了。

www.jianshu.com/p/b03a8d7b1…

GITHUB

gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。

gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

中文帮助文档:

gitbeijing.com/

中文教程:

www.imooc.com/learn/390

DAG

DAG(Directed Asyclic Graph)意思是有向无环图,所谓有向无环图是指任意一条边有方向,且不存在环路的图。相比较于比特币的最长链共识, DAG 将最长链共识改成最重链共识机制, 通过交易权重与节点间建立局部共识来确认新的交易,将工作量证明巧妙的和每一笔交易绑定一起,不但打破了目前比特币挖矿集中化的问题,而且大幅度提升了整个分布式网络的吞吐能力,带来极低的交易成本。

image

SPV

SPV( Simple Payment Verification , 简单支付验证) 是一种无须维护完整的区块链信息,只需要保存所有的区块头部信息即可进行支付验证的技术。

ABI

ABI是Application Binary Interface的缩写,它是智能合约的接口说明。

参考文档:me.tryblockchain.org/Solidity-ab…

JSON-RPC远程调用协议

JSON-RPC是一种基于JSON的跨语言远程调用协议。有文本传输数据小,便于调试扩展的特点。

参考文档:www.cnblogs.com/cielosun/p/…

www.cnblogs.com/chunguang/p…

算法

1)比原链 - 图解比原链Tensority算法:如何让POW做到人工智能友好

ABI压缩网站

www.bejson.com/zhuanyi/

推荐几个区块链技术文章博主

1,深入浅出区块链 - 熊丽兵

blog.csdn.net/xilibi2003

2,

国内知名区块链公链项目网址

1,比原链官网地址:bytom.io/

2,币乎官网地址:www.bihu.com/

3,量子链官网地址:www.qtum.org/zh/

4,小蚁链官网地址:neo.org/

入门培训教程

**1, 以太坊DApp开发入门 - 汇智网 **

网址:xc.hubwiz.com/course/5a95…

**2,以太坊电商DApp实战 - 汇智网 **

网址:xc.hubwiz.com/course/5abb…

打包GOOGLE插件的方法

获取google商店的插件ID,例如https://chrome.google.com/webstore/detail/scatter/ammjpmhgckkpcamddpolhchgomcojkle?hl=zh-CN的插件ID为ammjpmhgckkpcamddpolhchgomcojkle。

在http://yurl.sinaapp.com/crx.php输入ID即可完成打包工作。

vmware虚拟机启动提示"内部错误"

**现象描述:**windows上安装的虚拟机多日不用,打开“VMware Workstation”时提示"内部错误”,点击快照也不能恢复。

**解决方法:**关闭VMware Workstation后,右键点击图标“VMware Workstation”,选择“以管理员身份运行”就恢复了。

如何获知NPM有哪些安装包及操作命令?

www.npmjs.com/

登录注册后即可查找truffle-hdwallet-provider,openzeppelin-solidity都是存在的。

(例如辉哥注册了账号:duncanwang)

以太坊开发者资源工具集

常用以太坊交互代码库

Web3.js - 以太坊官方的 Javascript API

Eth.js - 优化过的 Web3.js

Web3.php - PHP 版的 Web3

Web3j - Java 版的 Web3

Web3.py - Python 版的 Web3

钱包

Gnosis multisig wallet - 多重签名钱包

imToken - 广为使用的闭源钱包

WallETH - 开源的 Android 以太坊钱包

gas 计算

EthGasStation - 估计交易费用和时间的网站

Petrometer - 计算特定账户每天所花费的 gas

CryptoProf - 智能合约 gas 消耗测量工具

相关服务

ENS - 以太坊域名系统

Name Bazaar - 以太坊域名市场

Quantstamp - 安全审计

SmartCheck - solidity 源码静态分析

MD4 Online Hash Function - hash 算法在线工具

合约代码库

Zeppelin - 经过测试的可重用合约库比如 SafeMathZeppelinOS

Modular Libraries - 另一个合约库

测试

Solidity code coverage- solidity 单元测试覆盖率

Solidity coverage- 另一个 solidity 代码覆盖率工具

Solidity function profiler- 列出合约函数

Espresso- solidity 测试框架

Eth tester- 以太坊应用测试套件

Cliquebait- 简化验收测试的工具

Hevm- 专为合约测试的 EVM 实现

Ethereum graph debugger- solidity 调试图形化工具

安全

Mythril- 智能合约静态安全分析

Oyente- 智能合约静态安全分析

Porosity- 智能合约反编译与静态安全分析

Ethersplay- EVM 反汇编

Evmdis- EVM 反汇编

Hydra- 去中心化的合约安全分析框架

Solgraph- 图形化智能合约处理流程

Manticore- 合约分析工具

Solidity security blog- 合约安全分析博客

Awesome Buggy ERC20 Tokens- 问题合约汇集

智能合约最佳实践- by ConsenSys

Safety wiki- 以太坊安全