常记区块日暮,沉醉不知归路。
兴尽晚回舟,误入以太深处。
争渡,争渡,惊起一滩函数。
一、何为以太坊?
以太坊(英文Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether)提供去中心化的虚拟机(“以太虚拟机” Ethereum Virtual Machine)来处理点对点合约。
以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为“下一代加密货币与去中心化应用平台”,在2014年通过ICO众筹开始得以发展。
截至2018年2月,以太币是市值第二高的加密货币,仅次于比特币。
二、功能应用
以太坊是一个平台,它上面提供各种模块让用户来搭建应用,如果将搭建应用比作造房子,那么以太坊就提供了墙面、屋顶、地板等模块,用户只需像搭积木一样把房子搭起来,因此在以太坊上建立应用的成本和速度都大大改善。
具体来说,以太坊通过一套图灵完备的脚本语言(EthereumVirtual Machinecode,简称EVM语言)来建立应用,它类似于汇编语言,我们知道,直接用汇编语言编程是非常痛苦的,但以太坊里的编程并不需要直接使用EVM语言,而是类似C语言、Python、Lisp等高级语言,再通过编译器转成EVM语言。
三、何为ERC20?
ERC(Ethereum Request for Comments)是以太坊征询意见活动的简称,描述了在以太坊区块链上设计而制定的标准,ERC能够使以太坊区块链上的其他智能合约和去中心化应用之间进行无缝交互。
ERC-20标准是2015年11月推出的代币规则。使用这种规则的代币,表现出通用的、可预测的方式。使用ERC-20的代币,都能立即兼容以太坊钱包;同时,交易所也知道这些代币如何操作,因此更容易对其进行管理和整合。常见的操作有:获得代币总供应量,获得账户余额,转让代币,批准花费代币。
四、ERC20协议的标准
1、Method
1.1、name
function name() constant returns (string name)
返回string类型的ERC20代币的名字,例如:StatusNetwork
1.2、symbol
function symbol() constant returns (string symbol)
返回string类型的ERC20代币的符号,也就是代币的简称,例如:SNT。
1.3、decimals
function decimals() constant returns (uint8 decimals)
支持几位小数点后几位。如果设置为3。也就是支持0.001表示。
1.4、totalSupply
function totalSupply() constant returns (uint256 totalSupply)
发行代币的总量,可以通过这个函数来获取。所有智能合约发行的代币总量是一定的,totalSupply必须设置初始值。如果不设置初始值,这个代币发行就说明有问题。
1.5、balanceOf
function balanceOf(address _owner) constant returns (uint256 balance)
输入地址,可以获取该地址代币的余额。
1.6、transfer
function transfer(address _to, uint256 _value) returns (bool success)
调用transfer函数将自己的token转账给_to地址,_value为转账个数
1.7、approve
function approve(address _spender, uint256 _value) returns (bool success)
批准_spender账户从自己的账户转移_value个token。可以分多次转移。
1.8、transferFrom
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
与approve搭配使用,approve批准之后,调用transferFrom函数来转移token。
1.9、allowance
function allowance(address _owner, address _spender) constant returns (uint256 remaining)
返回_spender还能提取token的个数。
1.10、approve、transferFrom及allowance解释:
账户A有1000个ETH,想允许B账户随意调用100个ETH。A账户按照以下形式调用approve函数approve(B,100)。当B账户想用这100个ETH中的10个ETH给C账户时,则调用transferFrom(A, C, 10)。这时调用allowance(A, B)可以查看B账户还能够调用A账户多少个token。
2、Events
2.1、Transfer
event Transfer(address indexed _from, address indexed _to, uint256 _value)
当成功转移token时,一定要触发Transfer事件
2.2、Approval
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
当调用approval函数成功时,一定要触发Approval事件
3、Geth 客户端的一些命令
3.1账户操作
eth.accounts //查看账户
personal.listAccounts //查看账户
personal.newAccount("***") //新建账户
personal.unlockAccount("**********") //解锁账户
personal.lockAccount("**********") //锁定账户
3.2代币操作
eth.getBalance() //查看余额
web3.fromWei() //单位换算
3.3节点操作
------------------------------------------------------------------------------
net模块
net.listening //查看节点状态
net.peerCount // 查看节点链接的数量
------------------------------------------------------------------------------
admin模块
admin.nodeInfo //查看节点信息
admin.addPeer() //添加节点
admin.peers //查看添加的节点的信息
------------------------------------------------------------------------------
eth模块
eth.hashrate //查看节点的hash运算速率
------------------------------------------------------------------------------
开启和关闭挖矿
miner.start(n) //n是挖矿的线程数
miner.stop()
----------------------------------------------------------------------
一些设置命令
miner.setEtherbase(eth.accounts[n]) //etherbase地址并不需要一定是本机上
miner.setExtra("zhou") //写一些额外信息
eth.getBlock(n) //查看区块信息
五、感受:
近一周,经过在咱比学堂报名《区块链全能人才魔鬼训练营》的学习,我发现你对区块链了解越深,越被她深深的吸引,越发的为她着迷。
通过训练,我在以太坊客户端geth上进行智能合约的编写,部署及调用。并且尝试基于REC2.0发行代币,最后会开发基于以太智能合约的DAPP,
So cool !
BLUE老师说:
一定要勤动手,只有在动手中,你才能体会到你所学到的东西正在被一件一件的验证。
你才能感受到那份埋藏在码农内心深处的自豪和傲慢。
当你发现,你已经慢慢开始,可以和计算机对话了,是不是有一种从未有过的达成感?
哼上一支小曲,满脑子里想些代码的事情,管他路人在笑我还是笑他,从此坚定人生的方向,你战胜了比人不曾战胜的区块链恐怖情节,你获得了别人不曾获得的区块链开发经历,更增强了别人没有增强的自信。从此,你的人生还有什么不可战胜!”
我说:
我是码农我自豪;
芸芸众生,只看到应用的表面的繁花似锦;
我却深知,繁华似锦背后的丝丝入扣、逻辑严谨!
以上内容部分摘自:
https://zanbtc.com/thread-12156-1-1.html
https://zanbtc.com/thread-12195-1-1.html