科普 | 小跑进入以太坊,Part-2

ETHButterfly2018-04-19 18:55:07  阅读 -评论 1  阅读原文

智能合约的交互

通过连接到以太坊节点,并用 JSON-RPC 调用接口执行函数,你可以与智能协议交互(也就是执行方法与读取状态)。有各种各样的以太坊节点客户端用开发者友好的方式实现这一功能。Geth 和 parity 都提供了控制台/浏览器实现与合约的交互。

如果你想以编程方式与合约交互,也有多种这样的以太坊客户端实现。比较流行的有JavaScript, web3.js, ethjs 和 ethers.js。对于go语言,在 go-ethereum(geth)中可执行的 abigen 工具提供了 go 语言版本的程序包来实现与合约的交互。从根本上说,它只不过是一个标准的 JSON RPC 协议调用接口,因此一旦不可用,你可以自己选择语言去编写你自己的转接器。有些客户端类库除了支持简单函数的执行,也支持便捷函数。

用 Ganache(以前叫做 ethereumjs-testrpc)运行一个本地以太坊节点来测试和开发。

当你要配置一个智能合约,你真正在做的其实就是用合约字节代码作为参数发送交易到零地址 ( 0x0 )。

下面更多有关于交易的信息:

以太坊交易的内情<https://medium.com/@codetractio/inside-an-ethereum-transaction-fa94ffca912f>

Truffle, Embark, Populous, Perigord 和其他编程语言开发框架

一旦你开始编写智能合约,你最终会反复做很多同样的事情,把你的源代码编译成字节代码和二进制接口,把它配置到网络上面,测试配置的合约等等。你兴许还想要一个好的办法去试一下你的新想法。

诸如 Truffle、Embark、Populous 和 Perigord 这些框架使很多琐碎的工作标准化与自动化,为合约编写、合约配置以及极其重要的合约测试提供了良好的开发体验。

Truffle(用Node写成)是采用率最高的开发框架,开发进程也是最活跃的。看看入门指南跟上大家的步子吧。

下面这个帖子有很多有用的信息,而且用truffle部署合约、与合约交互。

以太坊智能合约漫游指南(译者注:中译本见文末超链接)

Embark(Node 语言)与 Truffle 在开发者构建项目上有相似但又不同的理念。

Perigord (Go 语言)与 Truffle 非常相似。

Populous (Python 语言)是一种为满足相同群体需求的开发框架,由 Python 编写而成。

当你初次接触合约,你应该尽量不要使用框架,直到你能理解它所所带来的价值,这和你初学 HTML 时不要用 Rails 框架是同样的道理。你可以先试着用 Remix 来尝试编程语言和想法。

ETHPM & NPM


分享即关心,所以 ETHPM 是一个去中心化的智能合约包资源库。使用 ETHPM,你可以继承或连接到其他知名的合约或类库,减少代码重复,尽可能理想地为未来的合约开发提供坚实基础。

可以使用 NPM 提供智能合约代码来安装节点,很多人在做这个事情,比较有名的是Open Zeppelin。

读一下这个细则,里面有更多的相关信息和背景。

网络状态

Mainnet ——以太坊主网,通常是默认网络,无论你使用哪个客户端或者浏览器。

Ropsten ——以太坊使用工作量证明的主要测试网络。这个网络因为计算量低,很容易遭到DDOS攻击、网络分叉、以及其他的干扰。Ropsten 自被垃圾信息攻击以后暂时停用,最近才恢复使用。它一贯只有很低的gas上限,没有任何理由的,很多合约在这个网络上都部署失败。

Kovan ——仅由 parity 客户端组成的测试网络,使用权威证明来突出对垃圾信息攻击的免疫力,并且出块时间保持在4秒钟。

Rinkeby ——仅由 geth 客户端组成的测试网络,使用 Clique 共识算法,尽管计算量很低,但是对恶意行为更有抵抗力。(我个人最爱)

你也可以创建你自己的私人以太坊网络。go-ethereum 团队开发了 puppeth 来配置整个网络,配有定制的 bootnode 工具、 创世块与共识规则,推动了 Rinkeby 网络的搭建。你也可以搭建你自己的网络基础设施,可以用 kubernetes 或者 docker-compose。但是你很可能近期都不会需要搭建私人网络的。

比较"Accounts(账户)"和"Wallet(钱包)"

以太坊账号是一个私钥和地址对。它主要只是为了储存以太币,创建账号无需花费gas(因为每一个可能的地址都是自动存在的)。所有以太坊网络上的交易都是从账户发起的,合约无法发起交易。

只要满足以下两点之一的,都可以称为钱包。

  1. 它是一个特制的交互界面,能用你的账号创建交易并发送交易(如MyEtherWallet)。
  2. 它只是一个发送及接收以太币的智能合约(这里又提起了,就是一些代码)。

这不是一个原生的概念。这里是一个 GitHub 平台上钱包的 Solidity 实现,通过 Mist 浏览器使用。它们能以很多风格出现,像多重签名,纸面形式,等等。

既然我们准确定义了这两个概念,留意一下,人们到处混淆这两个术语,把所有能够 发出/接收 以太币的东西贴上钱包的标签,并把所有东西为账户。

EVM 和智能合约产物的状态


你的智能合约代码在 EVM(以太坊虚拟机)中运行于网络里每一个完整节点上。除了需要特殊地与网络、文件系统与进程中隔离开来,EVM 就是执行字节码的标准虚拟机。没人愿意去写字节码,因此我们用一些高等语言编译成 EVM 字节码。

Solidity 语言


Solidity 是第一款描述智能合约的语言。它也是当前最流行的语言,因此有最多的例子、参考文献和教程。你应该学习这种语言,除非你有其他更好的理由。

你可以在 Remix 下使用 Solidity 语言,Remix 是一种基于浏览器的 Solidity 合约代码编辑器。下面是一段 Solidity 语言的合约:

pragma solidity ^0.4.11; contract BasicToken { mapping(address => uint256) balances; function transfer(address _to, uint256 _value) returns () { balances[msg.sender] = balances[msg.sender] - _value; balances[_to] = balances[_to] + _value; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } }

LLL(Lisp 语言家族)

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 是一种可以编译成 EVM 字节码的类似 python 的高等语言。因为 Zeppelin 发现的大量严重且危险的漏洞,这种语言实际上已经被弃用了。对这种语言的入门,参照下文的 Vyper。

Serpent 编译器的审核<https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929>


Vyper 语言(以前写作Viper)

Vyper 也是一种由 python 灵感启发的编程语言,着重于安全、简洁、和稳定性。目前这种语言还在开发当中。

Bamboo 语言


Bamboo 是一种将智能合约描述为有限状态机器的语言,把智能合约看成一个状态和交易的函数,同时生成一个新的状态。这种语言目前也在开发当中。

其他语言


有大量的其他高等语言在不同程度使用或者开发当中。而且,肯定还有更多类似的语言陆续开发出来。为了更广泛为大家所接纳,编程语言和编译器必须充分审查和测试,这都是很花时间的。

智能合约的反编译/反汇编

我们用 prosity 反编译或者用 evmdis 反汇编以太坊智能合约字节码。这是一个不断进化的领域,开发新工具的速度相当快。了不起的以太坊虚拟机资源库里面包含更多的相关信息。

pirapira/awesome-ethereum-virtual-machine<https://github.com/pirapira/awesome-ethereum-virtual-machine>

智能合约安全


智能合约一旦部署到了以太坊上,就不可改变,也将永远存在。如果你写了带有漏洞的代码,是无法这个有问题的版本从以太坊上拿下来的,那么你就只能持续修复了 *。

因为很多为以太坊和其他智能合约平台做开发工作的工程师都是来自于 web 开发领域,所以这个概念可能比较新颖,也比较疯狂。

无论是在在语言层面,还是在高层逻辑视角上,你的代码都可能会陷入各种不同的安全陷阱。当你部署了一个投产的智能合约,它将管理真正的资金,你需要对合约的运作 100% 信任。


ConsenSys 有一个出色的智能合约最佳实践资源库,你应该去深入了解。

Parity 钱包被黑的解释<https://blog.zeppelin.solutions/on-the-parity-wallet-multisig-hack-405a8c12e8f7>


Parity 钱包被黑解释第二篇:Electric Boogaloos<https://hackernoon.com/parity-wallet-hack-2-electric-boogaloo-e493f2365303>


在你部署一个将要操作真正资金的智能合约之前,你应该开一个 bug 悬赏,进行渗透测试。如果你正在管理着真正的资金,你的代码应该已经通过了专业的审查。

*可以用 selfdestruct() 函数把合约从网络上解除掉。

Whisper(耳语协议)

Whisper 是一个集成进以太坊的消息系统。它允许 dApp 发布小量的信息进行非实时的通信。

它使用的是 shh 协议,这是一个相当聪明的协议。出人意料的是,这个协议的相关文件极少,采纳率也很低。

虽然它有一段时间没有更新了,这里有个 dapp 例子,是个用 Whisper 实施的聊天客户端。

Whisper 是否在进行有效的开发,有待讨论。



去中心化自治组织(DAOs)


这是一个组织(比如一群人),在这个组织里,他们使用一堆智能合约强制执行,而非法律文件。 这群人用这些合约做一个组织能做的所有常见的事情,如就某事进行投票,决定所有本地合作社建筑物涂成什么颜色。

这样做的副作用就是,决策、管理以及建筑物涂成什么颜色等问题将不可更改地储存在区块链上(以合约状态的形式)。很酷吧!

以太坊经典与 DAO 的攻击事件

你可能听说过 "DAO hack",也听说过它有多么严重。这个漏洞的发生是由于一个如今受到高度重视的重入bug,一个恶意的合约可以引起对合约非无限的、循环的访问,导致其错误地更新内部状态。如果这个错误发生在 DAO 合约下,这就意味着把很多钱送给某个人,而这个人本来只应该得到很少数量的钱。社区作为绝大多数投票决定将网络硬分叉,把资金归还给 DAO 资助者。这样的结果就是促成了Ethereum Classic (以太坊经典)的诞生,以太坊经典没有返还被黑掉的资金,以前编写的代码就是这个领域的法律,而且不可恢复。


Aragon


Aragon 也在应对构建一个根据智能合约逻辑运行的公司的挑战,着眼于创建一个可以接受投资、管理财务、支付雇员工资、分配股权以及完成我们现在所知业务的公司,而非一个组织。他们也在开发一个优秀的 dApp 客户端以便让他们的协议用起来尽可能的简单。

查看一下 Aragon 核心合约,更好地理解它是如何运作的。

Swarm(蜂群协议)

Swarm 是一个去中心化的存储网络,它作为第一批项目在以太坊生态系统内部被开发出来。看一下这个维基百科的文章:主要的 Swarm 开发者比较/对比这两个项目(Swarm 与 IPFS)。要旨是:它们本质上是相同的,除了哲学有些稍微不同还有后台使用不用的协议。

原文链接: https://medium.com/@mattcondon/getting-up-to-speed-on-ethereum-63ed28821bbe
作者: Matt Condon
翻译&校对: 浩哥 Lucky & Elisa


本文由作者授权 EthFans 翻译及再出版。

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们kefu@lianshijie.com

参与讨论 (1 人参与讨论)

相关推荐

以太坊2.0新测试网将“彩排”3天

9月22日,以太坊 2.0 的核心开发者Danny Ryan 撰文宣布,新测试网Spadina将在9月29日正式上线,为期三天,目前助力这个快速测试网启动的平台Spadina Launchpad已经上线。

比特币有什么缺点?

1.交易平台的脆弱性。比特币网络很健壮,但比特币交易平台很脆弱。交易平台通常是一个网站,而网站会遭到黑客攻击,或者遭到主管部门的关闭。2.交易确认时间长。比特币钱包初次安装时,会消耗大量时间下载历史交易数据块。而比特币交易时,为了确认数据准确性,会消耗一些时间,与p2p网络进行交互,得到全网确认后,交易才算完成。3.价格波动极大。由于大量炒家介入,导致比特币兑换现金的价格如过山车一般起伏。使得比

业务中使用区块链的四种方式

业务中使用区块链的四种方式

暴走时评:区块链是一种支持像比特币这样的数字货币的公共分类帐本,并且正改变着我们的业务方式。一旦那些对匿名交易,甚至是秘密交易感兴趣的人接纳了这样一种鲜为人知的工具,加密货币就会日趋成为主流。 区块链是一种支持像比特币这样的数字货币的公共分类帐本,并且正改变着我们的业务方式。一旦那些对匿名交易,甚至是秘密交易感兴趣的人接纳了这样一种鲜为人知的工具,加密货币就会日趋成为主流。越来越多的个人和企

区块链:法定数字货币技术路线的必然选择

区块链:法定数字货币技术路线的必然选择

在人类发展史上,货币的进化从未停止。从物物交换,到金属铸币,再到纸质货币,以及当前正在发展的数字货币正在向着越来越便捷的方向进化。 比特币的出世起初并未带来轰动,但是最近几年其价格惊人的爬高创造出了一个个造富神话,引起各国政府及监管机构的关注。虽然金融专家普遍认为它只是一种资产,而非货币,但是,其背后的区块链(Blockchain)技术引起了包括各大金融机构、政府、企业及学术界的浓厚兴趣,未

用区块链记录证书,证明真伪,墨尔本大学迈出了第一步

用区块链记录证书,证明真伪,墨尔本大学迈出了第一步

墨尔本大学宣布发起区块链认证和审核计划,允许通过一种隐私、安全且持久的方式验证学生的证书。 墨尔本大学正在试验一个区块链记录维护项目,允许接收者(即学生)存储他们的证书,出于核验目的,第三方也能访问这个系统。Learning Machine是这个发布系统的开发者,他们采用的是麻省理工媒体实验室(MIT Media Lab)在2016年提交的Blockcerts开源代码。 墨尔本大学副校长格雷

日本IT巨头富士通联合日本“三大行”开发区块链p2p资金转移系统

日本IT巨头富士通(Fujitsu)与三家大型银行已经宣布计划试点一项基于区块链创建的点对点资金转移系统。 通过与日本三大行——瑞穗金融集团,三井住友金融集团和三菱UFJ金融集团——的合作,富士通将现场试验一种基于云的区块链平台,用于在个体之间发送资金,并开发一款智能手机APP来提高这个系统的可用性。 从理论上讲,这个平台将把三大行的客户法定货币账户与这个区块链系统相连接。客户然后将能够使用这

动画科普:什么是比特币?

动画科普:什么是比特币?

比特币(Bitcoin,简写BTC)概念由中本聪(化名)提出,是一种点对点、去中心化的数字资产;2009年,中本聪打包了第一个区块,并获得50枚比特币的挖矿奖励,挖矿奖励每4年减半一次,按此计算,比特币预计2140年发行完毕,总量为2100万枚。 随着比特币的发展,比特币逐渐受到认可:德国为全球首个接受比特币支付的国家;微软、戴尔等知名企业也纷纷接受比特币支付。 举个栗子,你能直接用比特币买到

3分钟理解什么是公有链、私有链、联盟链、许可链

不同的区块链有着不同的内涵和功能,在区块链领域经常出现的公有链、私有链、联盟链、许可链,这些又都代表什么意思呢? 公有链 公有链是指全世界任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是完全去中心化的,因为没有任何人或机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制鼓励参与者竞争记账,来确保数据的安全性。比特币、以太坊都是典型的公有链。 私

麦妖榜
更新日期 2019-09-03
排名用户贡献值
1牛市来了30910
2BitettFan24187
3等待的宿命23810
4区块大康20369
5六叶树20310
6linjm122719429
7天下无双16192
8lizhen00215280
9让时间淡忘14586
10yelanyi050511349
返回顶部 ↑