以太坊智能合约编程入门(一)

简介: 原文地址:https://medium.com/@ConsenSys/a-101-noob-intro-to-programming-smart-contracts-on-ethereum-695d15c1dab41-ABBewYWJfdIFhgwBt8mfGQ.png有些人说以太坊太难用了,现在就写一篇入门教程,讲一下怎么使用以太坊构建智能合约和应用。

原文地址:https://medium.com/@ConsenSys/a-101-noob-intro-to-programming-smart-contracts-on-ethereum-695d15c1dab4

1-ABBewYWJfdIFhgwBt8mfGQ.png

有些人说以太坊太难用了,现在就写一篇入门教程,讲一下怎么使用以太坊构建智能合约和应用。

  • 第一部分 总览关键的术语以及以太坊客户端和智能合约语言
  • 第二部分 讨论工作流以及dapp框架和工具
  • 第三部分 编程,快速编写测试,以及使用truffle开发一个智能合约dapp

第一部分 介绍

如果你还是加密货币行业的新手,不太了解比特币,更不知道它是怎么工作的,那么你应该先去看看Andreas Antonopoulos写的关于比特币的书,熟悉一下这个行业。然后再看看以太坊的白皮书。

如果你已经熟悉了加密货币,那么可以继续读下去了。在开始之前,你不需要知道加密经济学的所有计算机科学知识,也不必知道以太坊是如何改进比特币的那些论文。

起始示例

以太坊官方网站ethereum.org 上有一些示例。以及官方的文档。还有一个学习智能合约的好地方:dappsforbeginners,虽然这个网站可能已经过时了。

这篇文章的目的就是给这些示例做个补充,然后介绍一些有用的开发工具,帮助大家更容易地使用以太坊,智能合约,开发dapp。这篇文章只是从我个人的角度进行讲解,同时得到了ConsenSys的帮助。

基础概念

先看看一些术语:

公钥密码学。假设alice有一个公钥和一个私钥。她可以使用她的私钥来创建一个数字签名,然后bob可以使用alice的公钥来验证,看那个签名是不是真的是用alice的私钥发出的,是不是真的是alice发出的。当你创建了一个太坊或比特币钱包,那么那串长长的“0xdf…5f”地址就是公钥,而私钥保存在别的地方。像coinbase这样的比特币钱包服务商,替你保存着你钱包的私钥,当然你也可以自己保存私钥。如果你把钱包的私钥丢了,那么那个钱包里的所有资金就将永远丢失,所以,你最好备份好你的私钥。我曾经丢过私钥,那种感觉不好受。

点对点网络。像bittorrent一样,以太坊的所有节点都是分布式网络上的点,以太坊上没有中心服务器。[将来以太坊上将有一种混合的半中心服务器,这样能方便用户和开发者使用,这个后面再说]

区块链。区块链就像是一个公共账本,或是记录所有交易的数据库。

以太坊虚拟机。使用以太坊虚拟机你可以在以太坊上开发更强大的程序,比在比特币上开发的更强大。

节点。你可以运行一个节点,然后通过这个节点,使用以太坊虚拟机,可以读取以太坊区块链上的数据,或者向以太坊网络上写入数据。一个完全节点需要下载整个区块链。

矿工。网络上的节点的工作就是挖矿,处理区块链上的区块。你可以在这个地址查看当前以太坊的活跃矿工部分列表:stats.ethdev.com

工作量证明(proof of wor)。矿工之间需要竞争去完成一些数学题目。第一个算出数学题目答案(区块链的下一个区块)的矿工将赢得一笔奖励:一些以太。然后每个节点都更新到那个区块。每个矿工都想赢得下一个区块,因此这激励着它们持续地更新,然后所有人都保持着一个真实的区块链,整个网络也由此达成了共识。[以太坊计划从pow转成pow与pos混合的机制,不过这不在这篇文章的讨论范围]

以太。或者简称eth。它是一个真正的数字货币,你可以用它来买东西。在这个交易所,你可以在上面交易。

gas。在以太坊网络上运行和存储数据需要耗费一定数量的eth。这样以太坊才能有效率。

dapp。去中心化的app,使用了智能合约的应用。dapp的目标是(应该是)拥有一个漂亮的智能合约界面,以及任意额外的功能,比如ipfs(一种在去中心化网络上存储和服务的方式,不过不是以太坊创建的)。dapp也能在一台中心服务器上运行,如果这台服务器能跟以太坊节点通信的话,它们也可以在本地的以太坊节点上运行。[与普通的webapp不同的是,dapp或许不是在服务器上的。它们或许使用区块链来提交交易然后获取数据,而不是通过一个中心化的数据库。用户使用一个钱包地址,把数据保存在本地,而不是使用典型的用户登录系统。很多方面的架构都与现在的web不一样]。

关于以上这些概念,可以看一看这篇好文章:https://media.consensys.net/time-sure-does-fly-ed4518792679

以太坊客户端,智能合约语言

开发和部署智能合约,不需要运行一个以太坊节点。可以查看下面的ide和api列表。但是如果你正在学如何运行一个以太坊节点,那么可以看一下这些基础部分,这也不难。

运行一个以太坊节点的客户端

以太坊有多个不同的客户端实现(这意味着你可以有多种方式与以太坊网络进行交互),包括c++,go,python,java,haskell,等等。为什么要这么多实现呢?因为不同的语言面向不同的人。而且这也拓展了以太坊网络的安全性和生态系统。还有一个基于gui的客户端,alethzero。

在写这篇文章的时候,我用的一直都是geth,go语言版本,有时候用一个叫做testrpc的工具,这个工具用的是python版本的客户端,pyethereum。现在我们用的是新工具ethersim,ethersim用的是ethereumjs。ethereumjs是一个javascript客户端,它不支持真正的区块链挖矿,所以它不是一个完整客户端,但是开发和测试的时候可以模拟挖矿。后面的例子会使用这些工具。

交互控制台。一旦你用了这些客户端,就有了一个节点,那么你就能和区块链进行同步,创建钱包以及发送接收eth了。在geth上,你可以通过javascript console来实现。或者通过json rpc(远程处理调用),使用一个命令比如cURL来通过url获取数据。不过本文的目的不涉及dapp开发,所以这个问题不多说。不过这些工具在debug,配置节点,使用命令行使用钱包的时候很有用。

在测试网络上运行一个节点。如果你安装了客户端,比如geth,然后在正在的网络上运行的话,它需要花一点时间来下载整个区块链,并与网络同步。(你可以在stats.ethdev.com 上查看最新的区块信息,然后把它跟你的客户端的节点log对比,看看你是否完全同步了)

但是在真正的网络上运行智能合约的话,你需要花费一些eth。不过你可以在本地的测试网络上免费地运行客户端。这样也不需要下载整个区块链,而且会创建以太坊网络的一个私有实例,因此对于开发来说就更快。

testrpc。你可以用geth来运行一个测试网络,但是有其他快速的方法,比如使用testrpc。testrpc会为你创建一批预存资金的账号。而且它也非常快,而且更易于开发和测试。你可以先用testrpc开始,然后等到你的合约像模像样了,在使用geth,要开始使用geth,只需要指定一个networkid就可以:geth-----netwokid“12345”。后面我会在例子中介绍testrpc的用法。[现在testrpc的开发者把重心都放在ethersim上了,把ethersim当作testrpc的替代品,我会更新这个实例,最终也使用ethersim。如果你想的话也可以一开始就使用ethersim]。

下面让我们谈谈编程语言,然后再进行真正的编程。

智能合约编程语言

使用solidity。开发智能合约的语言有好几种:solidity,有点像javascript;serpernt,类python语言;还有一个LLL,基于lisp的语言。以前serpent流行过一段时间,不过现在最流行的是solidity,solidity也更健壮,所以,我们用solidity。你跟喜欢python?那还是用solidity。

solc编译器。用solidity写好智能合约后,就用solc来编译。可以在这里进行安装。如果你想用solc,你也可以用一些机遇浏览器的编译器,比如solidiy real-time 编译器或者cosmo,不过后面的编程的例子是使用solc进行编译的。

web3.js api。在智能合约编译好,发送到网络上之后,你就可以通过以太坊web3.js javascript api来调用它了,并且可以创建跟这些合约互动的web app。

这些就是在以太坊上开发智能合约,构建dapp的基本工具。

未完待续。。。。。

推荐一个区块链新手入门的以太坊DApp开发教程:

http://xc.hubwiz.com/course/5a952991adb3847553d205d1?affid=20180408csdnw

相关文章
|
存储 前端开发 JavaScript
区块链智能合约编程语言 Solidity
上文介绍了[区块链生态发展](https://wangbinguang.blog.csdn.net/article/details/131440404),我们知道以太坊的到来可以使开发人员基于区块链开发DApp,本文介绍 Solidity 编程语言的使用,然后基于 Solidity 编写一个简单的智能合约。
124 1
|
安全 区块链 数据安全/隐私保护
基于以太坊的智能合约Fomo3D游戏开发规则部署
基于以太坊的智能合约Fomo3D游戏开发规则部署
|
区块链
DAPP智能合约系统丨DAPP智能合约系统开发成功案例分析丨DAPP智能合约源码平台
QueryContract(contractName,method string,kvs[]*common.KeyValuePair,timeout int64)(*common.TxResponse,error)
|
Web App开发 开发框架 安全
以太坊–智能合约开发介绍及环境搭建
智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由Nick Szabo首次提出。 智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。...
978 0
以太坊–智能合约开发介绍及环境搭建
|
存储 机器学习/深度学习 人工智能
智能合约简介
智能合约远胜于传统交易流程,因为它们有可能实现自动化,在某些情况下,甚至可以完全取代整个行业。同时,智能合约使交易更加公平、透明和安全。但是,除了实现自动化和改进单一的交易过程之外,智能合约还能发挥更大的作用。
461 0
智能合约简介
|
存储 JavaScript 前端开发
【智能合约】Solidity 基础知识 | 以太坊智能合约编程语言
目录 注意事项 编译器选择 一些说明 1. 变量 1.1 状态变量 1.2 局部变量 2. 数据类型 2.1 值类型 2.1.1 布尔类型(Booleans): 2.1.2 整型(Integers): 2.1.3 定长浮点型(Fixed Point Numbers): 2.1.4 定长字节数组(Fixed-size byte arrays) 2.1.5 有理数和整型常量(Rational and Integer Literals) 2.1.6 枚举(Enums) 2.1.7 函数类型(Function Types) 修饰符 函数定义 函数返回值 构造函数 2.1.8 地址类型(Address)
413 0
【智能合约】Solidity 基础知识 | 以太坊智能合约编程语言
|
JavaScript 算法 前端开发
以太坊教程:入门学习开发以太坊dapp
一、区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量。既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链上的行为(包括比特币的运营,亦或是运行在区块链上的其他业务),这种机制就是共识机制。
2709 0
|
存储 Java 区块链
6分钟以太坊实战 - 智能合约与Solidity高级语言(一)
1. 简介 合约是存放在以太坊区块链具有特定地址的代码和数据集合。 合约账户之间可以相互传递消息以实现图灵完备运算。 合约以以太坊特定的二进制字节码通过以太坊虚拟机(EVM)运行于区块链上。目前,合约通常是以Solidity(一门长得很像js的语言)高级语言编写,编译后传到区块链上运行。
9604 0
|
存储 区块链 编译器
以太坊智能合约简介(Solidity)
本文略过了冗杂介绍,直接下沉到代码示例。本文中包含一个存储实例和生成极简单 subcurrency 的实例
|
区块链 API 编译器
《区块链DAPP开发入门、代码实现、场景应用》笔记2——Solidity实现简单的智能合约
通过阐述Solidity编程语言的API以及使用方式,使读者对智能合约编程有一个初步印象
1210 0