ERC20代币与ERC23代币

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
链客,有问必答!

每一个人都开始定义本身与代币的交互协议,但这些很快显得陈旧,因此一些人开始集结起来,建立了ERC20代币接口标准。大概意思是说,咱们定义这些接口,这样你们能够相互统一调用,好比转账定义为transfer,第一个参数为要转去的账户地址address _to,第二个参数为要发送的ether的uint _value数量。
有些人以为ERC20协议过于复杂了,因此他们提议了ERC197,稍微简单一点。
因为在ERC20中存在的一个小问题,有人提议了一个新的ERC23。ERC23是向后兼容ERC20的。若是你已经建立了一个代币合约,能够尝试来支持ERC23。
看起来ERC223和ERC23是相同的概念;ERC的值是223,可是当引用时,做者和全部的其它人误写成了ERC23很是屡次,它如今也仍是这样引用的。若是一句话说清楚的话,ERC223是规范号,代币说明时称为ERC23代币就行了。 
协议代币与App币
协议代币为用来激励对某个协议的使用。好比,REP,Augur的声誉代币,用来鼓励对Augur去中心化预测协议的使用。大多数的以太坊的ERC20/ERC23代币都是协议代币,好比Golem的GNT,ICONOMI,BAT等等。
App币则是用来激励对某个特定DApp或客户端的使用,而不是由于其使用的协议提供的价值。其中一个例子是Status的SNT代币,能够用来在应用内得到价值(好比,进行消息推送,投票权,得到用户名等等)。
这种范式的转变是,咱们能够开始投资协议代币而不是应用程序代币,由于咱们能够创建在它们之上(任何人均可以在协议之上构建一个dapp,或为实现该协议的Dapp构建一个Dapp客户端)。
以前,这并不可能,由于加密代币,以及接下来的协议创新的时代,为了实现货币化,你本身能够在协议之上建立一个应用,并实现赢利。由于你本身能够实现协议的货币化,你们能够在将来更好的协做。
你也许能够阅读一下,关于0xProject的下面这篇文章,关于这二者区别的详细说明。
与智能合约交互
你与智能合约的交互(也称作调用函数和读取状态)经过链接到某个以太坊节点,并执行操做码。当前有各类各样的以太坊客户端,能够方便进行开发。Geth和parity都提供了控制台或浏览器的方式来更好的与智能合约交互。
若是你想要一个程序的库用来与智能合约交互的接口,也有这样的客户端实现。对于JS语言,可使用web3.js。以于go语言,可使用在go-ethereum中的abigen的程序,提供了go包,用来与智能合约交互。
若是只是用来测试和开发,可使用ethereumjs-testrpc来运行一个本地节点(译者注:这个节点压短区块时间等,能够方便打整的开发与测试)。
当你部署了一个智能合约,你实际进行的操做是向地址0x0发送了一个交易,使用当前合约内容做为参数,一个以太坊交易详解。
Truffle和Embark
一旦你开始写智能合约,你会重复作大量的操做,好比编译源码为字节码和abi,部署到网络,测试而后部署合约等等。你也许但愿更关注于你想要实现的东西。
Truffle和Embark框架,标准化和自动化了这些琐碎的工做。它们提供了一个好的开发,部署,以及更为重要的,测试智能合约的体验。
你能够查看这个文章来开启使用Truffle的旅程。
这篇文章,提供了使用Truffle来部署以及与智能合约交互的方法。
Embark提供了相似的,帮助开发者组织工程的稍有些不一样的工具。
当你一开始接触智能合约这块时,应该尽可能不要使用框架。直到你明白了使用框架能带来的价值时,才应该开始使用,正如你不该该经过rails new来学习HTML语言同样。
ETHPM
分享是关心,因此ETHPM是一个去中心化的智能合约包管理资源库。使用ETHPM,你能够关联或链接到某个著名的合约或库,减小代码重复,尽量理想的为将来的开发提供好的基础。
这里的这个规范,详细的说明了相关的信息以及背景。Truffle和Embark都可与之集成,并创造一个愉快的开发体验。
网络css

Mainnet-以太坊主网,一般是全部客户端的默认网络。html

Ropsten - 以太坊使用工做量证实的主测试网络。这个网络,由于低的计算量,容易遭到DDOS攻击,分片,或者其它问题。垃圾邮件攻击后被暂时放弃,最近才恢复使用。node

Kovan-parity客户端组成的测试网络,使用受权证实来提高对垃圾邮件攻击的抗扰度,而且持续4秒的阻塞时间。git

Rinkeby-geth客户端组成的测试网络,使用集团共识,尽管计算量低,可是对恶意行为者更有弹性。github

你能够本身搭建你本身的测试网络,也许使用kubernetes或者docker-compose,但也许你将很快就能够不须要花什么时间。
账户与钱包
一个以太坊账户就是一个私钥和公钥地址对。它们能够用来存储ether,建立时不须要花费gas。
钱包则是用来管理ether的智能合约(一些代码)。这里是使用solidity写的一个钱包,运行于Mist浏览器。他们能够有许多的特性,好比多用户签名,纸?等等。
这样,咱们就正确的定义了两个名词,前面看到其它人对这两个术语的困惑,并把全部能存ether的都叫做Wallet。
EVM以及智能合约建立的状态
在每一个全节点网络上运行的智能合约代码在EVM内执行。这是您的标准虚拟机,执行一些字节码,除了这个vm与网络,文件系统,进程等隔离。没有人想要编写字节码,因此咱们有一些更高级别的语言编译为EVM字节码。
Solidity
Solidity是第一批的描述智能合约的语言。当前是最流行的语言,所以也有最多的例子,文档,和教程。你应该学习这个,除非你有要学习其它的理由。
你可使用基于浏览器的Remix IDE来进行快速验证。
下面是一个Solidity的合约:
pragma solidity ^0.4.11;
contract BasicToken {
mapping(address => uint256) balances;function transfer(address _to, uint256 _value) returns () {web

balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;

}function balanceOf(address _owner) constant returns (uint256 balance) {docker

return balances[_owner];

}
}
LLL
LLL,是一门Lisp风格的底层编程语言,就像语言名称看到的这样。虽然以太坊官方并无将它做为主要须要支持的语言,但它仍旧持续进行着更新,且与solidity在同一个资源库。
这是一个使用LLL语言写的一个ERC20代币的合约
LLL示例以下:
(seq (def 'node-bytes 0x00) (def 'owner 0x20) ; address (def 'set-node-owner 0x5b0fc9c3) ; setOwner(bytes32,address) (def 'get-owner (node) (sload (+ node owner)))
//只是用来示例,不能编译经过 
若是你正在学习,也许不是那么的容易习惯LLL语言的写法。
Serpent
Serpent是一个类Python的高级语言,最终也会被编译为EVM字节码。它主要被Augur团队使用。
但最近Zeppelin Solution团队发现其编译器有一个严重的bug,在这个问题被修复以前都不建议继续使用。
若是你对Augur如何解决这些漏洞感兴趣,你能够阅读Zeppelin Solution的这篇文章。
Serpent的合约看起来以下:
def register(key, value):数据库

# Key not yet claimed
if not self.storage[key]:
    self.storage[key] = value
    return(1)
else:
    return(0)  # Key already claimed

def ask(key):编程

return(self.storage[key])

在各类可用性和发展状态中还有一堆其余的高级语言,并且无疑将会被开发出来。 为了普遍采用,语言和编译器必须通过完全的审查和测试,这固然须要时间。
智能合约反编译/Disassembly
能够经过prosity来反编译以太坊智能合约的字节码,可使用evmdis来Disassembly。
智能合约的安全
一旦一个智能合约部署到了以太坊的网络上,它将是永不可变的,且将永久存在。若是你写了一个bug,你将不能下架这个有问题的版本,你只能在后续的版本中修复。
因为许多工程师开发的Ethereum和其余智能合同平台来自于Web开发,因此这个概念实在是太新,并且是疯狂的。
ConsenSys有一个很是棒的资源叫智能合约的最佳实践,你应该深刻的理解一下。
一个Parity的钱包被黑的解释。
在你部署你的智能合约的时候,因为你管理的是真正的资金,你应该先开一个赏金计划,并尽可能保证它完整的测试过。
Whisper
Whisper是一个集成进以太坊的消息系统。它容许DApp发布小量的信息来进行非实时的消息通讯。
它使用shh协议。
尽管它已经有段时间没有更新了,这是一个使用Whisper协议实现一个聊天客户端的例子。
去中心自动化组织(DAOs)
这是一个组织(就像,一群人),其中,使用代码来保证最终的强制执行,而不是使用传统的法律文件。这群人使用智能合约来作常见组织作的全部的事情,好比在某件事上进行投票,好比决定是否对什么进行投资等等。
反作用是决策,管理,以及对什么进行投资的结果将会不可改变的存储在区块链上。
以前slock.it建立了标准的DAO框架来讲明这个理念。在这里有对DAO概念的总览,以及如何使用框架来实现一个本身的DAO(译者注:这个项目因为bug被黑客攻击了)。
Aragon
Aragon也正在应对挑战,设计一个根据智能合约逻辑运做的公司,重点是建立一个能够接受投资,处理会计,支付雇员,分配股权,正如咱们如今知道的完成天天的公司的业务。他们也实现了漂亮的DApp客户端来让他们的协议使用起来更为简单。
查看这里Aragon核心合约来更多的理解它是如何作的。
IPFS&FileCoin
IPFS(星际文件系统)是一个协议,用来分发文件。你能够认为它是一个基于bittorrent和git这样概念的一个文件系统,文件能够定位,且是不可变的。IPFS以IPLD数据模型存储信息,它很是有趣,提供了一些特别的特性,你能够经过下面的说明了解一些。
这是一个新的协议,它有一个http的网关和文件系统适配器,这让你能够经过http,挂载整个互联网文件系统到你本地的盘/ipfs。IPFS还提供了一个寻址服务IPNS(星际命名空间),它容许可变的状态(须要注意的是在IPFS里的全部东西都是不可变的)。你甚至可使用DNS TXT记录来定位到你的IPNS客户端,容许你生成用户友好的连接来指向到对应的数据。
FileCoin是Protocol Lab为建立一个去中心化的基于IPFS的存储市场的努力结果,也就是向整个网络提供存储资源的激励层。FileCoin的共识协议没有使用浪费资源的工做量证实,而是使用了Proff of Replication和Proof of SpaceTime来保证每片数据被复制某个特定的拷贝数量且存储某个特定的时间。
你应该读一下IPFS的白皮书,FileCoin的白皮书,以及IPLD的规范。
因为当前FileCoin尚未上线,你可使用当前的IPFS存储网络来运行html/css/js,并把做为一个相似orbit-db的数据库。
Swarm
Swarm是一个去中心化的存储网络,集成于以太坊生态系统,做为第一阵营的项目,看看这里关于IPFS与这个项目的比较和优劣。但本质上,基本上是同样的,除了它们有不一样的哲学,并在底层使用稍微不一样的协议。
项目
Augur
Augur是一个去中心化的预测市场,让你们对于某个现实世界的事件进行对赌。一方面,用户在某个具体能够发生的事件上投注,一旦结果成真,它们赢得的代币有真正的价值。为了实现这个,你须要实现一个去中心化的先知协议,来输入现实世界中的信息,它使用REP协议代币来进行经济激励。
你能够看看Augur项目的合约代码,以及了解下Augur Master Plan。
Gnosis
Gnosis与Augur有相似的理念,也是一个去中心化的预测市场。这是项目的白皮书,以及与Augur项目的对比。
Golem
Golem是一个分布式的算力市场,以与IPFS同样的方式构建了一整套的提供算力市场。
你能够看看FAQ来更好的理解。
0xProject
0xProject建立了一个交换代币的协议,以及一个DApp来实现这个协议。开发者能够建立一个基于它们本身的分布式应用建立交易所(技术上叫中继层),而用户也不用信任这些app就可完成交易,结算在区块链上完成。0x协议旨在使用离线的第三方来广播交易和管理订单(能够建立/更新/删除订单,而不用直接向Ethereum发送缓慢/昂贵的交易),但最终会使用Ethereum进行结算。
它们实现了场外交易,一个DApp使用这个协议来在用户之间直接交换代币。你能够在github上查看他们的合约。
你还能够跳过这些酷炫的概念,直接阅读FAQ。
Swap
ConsenSys的Swap协议也是很是相似的,但更专一于p2p的直接交易(而不是基于订单表),这里有一个白皮书,能够看看,这里有一个关于Swap协议的介绍。
Bancor
代币的流动性是相对来讲在加密币的生态中是一个很是大的问题。在用户间的交易须要知足买方和卖方两边的想法。
Bancor是一个协议,可让你的代币1)能够根据订单自动给予价格2)能够经过持有其它的代币做为抵押器来即时创造流动性。
查看这里的白皮书。
Makerdao & Dai
以太坊区块链管理的代币价值每每会有巨大的波动。这个特性在现实生活中则很是很差,好比你的目标是用来保值。
Maker DAO是一个DAO来管理Dai稳定币。Dai如今还不存在,但他们已经发布了一个alpha的版本叫Sai来展现这门技术。
这里是DAI的白皮书。
Oraclize
若是咱们要向智能合约中输入一些信息,好比纽约今天的天气,我也许须要实现一个去中心化的先知协议询问一批人(花费高且慢),但若是写一个服务以中心化的方式来提供信息,又违背了去中心化应用的理念。
Oraclize尝试用如下方式来解决问题1)从一个外部数据源向你的智能合约发送数据。2)提供一个证实,数据来自某个数据源,且没有被修改过。由此若是你信任random.org,你可使用Oraclize来提供一个随机数生成合约。
他们的集成很是强大; 您能够获取URL,解析JSON和XPATH,查询Wolfram Alpha等。
BTCRelay
BTCRelay做为比特币区块链交易的先知机制,这意味着你能够在以太坊上编写智能合约来响应比特币区块链上的某个交易,进行触发后续的操做。好比,你可让人经过BTC为你的服务付费,使用BTCRelay在以太坊上校验付款成功后,继而在以太坊上提供对应的服务。
Open Zeppelin & zeppelinOS
Zeppelin Solutions是一个科技公司,在这个领域内正完成一些伟大,并且专业的事。它们实在作了太多事,太难一一说清了。
他们管理了Open Zeppelin,一系列通过审查的,最佳的智能合约实践,你能够继承并应用于你本身的DApp中。你能够查看他们的github资源来学习更多。你应该读一下里面的每个合约。
他们坚持代码复用的理念,而后进一步建立了Zeppelin OS。你能够忽略OS,它不是传统意义上的操做系统的概念。zeppelinOS特性,工具和服务的集合,旨在提供稳固的开发人员体验,同时最大限度地提升智能合同安全性。
zeppelinOS中的其中一部分是“zeppelinOS Kernel”。其实他们不是传统意义上的核心,并且是一组库。它们是经过库模型实现的可升级的智能合约,能够在出现安全问题时独立的进行更新。由于你在合约内包含的代码更少,部署也将花费更少的gas,而开发者也减小了代码的重复。
zeppelinOS还有一些其余整齐的规划,好比调度程序(智能合约的异步执行,由于默认合同通常不会主动触发某个行为),市场级的协议和链下开发者体验工具。
ENS - 以太坊的命名服务
ENS是一个去中心化的名称注册服务。并有一个描述性的项目名称。
BAT
基础注意力代币 & Brave浏览器
BAT尝试去中心化广告系统,经过监控你们的注意力,并在内容提供商,广告商和用户之间分发收益,切掉中间人。
Brave和BAT由JS创始人Brendan Eich建立,同时他也是Mozilla的联合创始人。
uPort
uPort在解决去中心化的身份识别问题。
district0x
district0x是一个更高层级的去中心化的市场和社区。核心是经过一系列的智能合约来管理用户发布信息,搜索,过滤信息,在社区内维护信誉,管理支付等等。它能够用来建议如Ethlance和NameBazaar这样的市场。
他们有很是棒的视觉设计。
Steem
Steem是区块链上的reddit,它使用协议代币(STEEM)来激励这个社交社区的参与度。
在这里查看白皮书。
有一些关于Steemit块链如何启动以及支持组织如何运做的反应。
参与者与领域内的玩家
ConsenSys
ConsenSys(有点像共识Consensus,但做为一个公司名称;它很聪明,巧妙的把u改为了s,但我通常念为“con-SEn-SIS”,避免读错)是一个“风险投资和产品工做室”。他们是一个(其实很是大)伞形组织,它赞助了一大堆项目和核心组件的开发。值得一提的是,它们资助了Truffle,Infura,MetaMask,Gnosis和uPort。
Zeppelin Solutions
Zeppelin Solutions在上面咱们有提到过,他也审查智能合约代码,提供咨询服务。他们的博客质量至关高。
Protocol Labs
Protocol Labs是一群让人印象深入的人,致力于IPFS,FileCoin,lip2p以及IPLD等其它项目的开发。浏览器

图片描述

相关文章
相关标签/搜索