区块链学堂——开发第一个智能合同

以太坊

在前一篇我们了解了学习以太坊的重要性,以及开发以太坊必须掌握的基础知识,这一篇我们通过开发一个简单的智能合同,循序渐进地掌握其开发流程。

学习目标:

1、以太坊开发环境搭建

2、准备账户

3、用Solidity开发一个智能合同

4、编译合同代码

5、部署运行合同代码

以太坊开发环境搭建

1、Solidity编译器,因为选择用Solidity语言来开发智能合同,官方提供了基于web的编译器Browser-Solidity,所以不需要进行单独的安装和配置。如果自己有兴趣安装独立的编译器,可参考官方教程

2、安装以太坊客户端——geth(官方还提供了以太坊钱包),为了体验以太坊开发的每一个流程的细节,我们选择命令行客户端,以Mac为例,执行以下命令——

brew tap ethereum/ethereum

brew install ethereum

其它平台类似(windows、linux),可参考官方教程

3、用geth启动客户端

在Mac下打开命令行终端,执行以下命令

geth --datadir testDir --dev console 2>>mytest.log

启动成功

出现上图运行结果,代表启动成功。

命令参数说明:

--dev 启用开发者网络(模式),在此模式下,默认预分配一个开发者账户并且会自动开启挖矿。

--datadir 后面的参数是区块数据及秘钥存放目录,这里指定目录名为 testDir。执行命令后,当前目录下新建一个testDir目录来存放数据。

console 表示进入控制台

2>> mytest.log 表示把控制台日志输出到mytest.log文件

如果想看到实时的运行日志,可以新开一个命令行终端,然后执行以下命令

tail -f mytest.log

准备账户

为了能够部署智能合同代码,需要一个外部账户(合约账户只能运行不能部署合同代码),在命令行控制台执行以下命令

查看账户

eth.accounts

查看账户余额

eth.getBalance(eth.accounts[0])

创建新账户

personal.newAccount("mima123")

再次查看账户列表,多出一个新账户,新账户的密码为mima123

查看新账户余额

eth.getBalance(eth.accounts[1])

账户转账

eth.sendTransaction({from: '0xff141bf97172f1b34882bc2a618ee94d08a85cf7', to: '0x2a054aa5137e7e05d68f7b3783f3b422542637e4', value: web3.toWei(1000, "ether")})

解锁账户

personal.unlockAccount(eth.accounts[1],"mima123")

用Solidity开发一个智能合同

使用文本编辑器或IDE,编写如下代码

编译智能合同代码

打开在线编译器Browser-Solidity,选择新建

复制粘贴编写好的合同代码,点击右边的Detatils按钮,进行编译

复制编译成功的字节码到文本编辑器,进行必要的修改

为了学习演示,进行以下四处修改

1-修改变量名称为Hello BlockChain

2-修改智能合同名称helloContract改为helloContract1

3-对外调用的回调函数名称hello改为hello1

4-修改部署账户,这里我们用新创建的账户来部署合同,所以索引改为1

部署运行合同代码

在部署运行合约之前,先查看一下账户余额

将修改后的代码,复制到geth控制台,回车执行,出现如下图中结果代表部署成功

再次查看账户余额

运行一下合约

大功告成,第一个智能合同开发、部署、运行成功了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

JAVAWEB如何集成银联网关支付(模拟环境测试)

首先登陆网站https://open.unionpay.com 这时候你就需要有一个账号了。 一、登陆后进入我的产品页面,点击未测试,选择网关测试,开始测试。这...

2855
来自专栏Jerry的SAP技术分享

用ABAP 生成二维码 QR Code

除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成...

2226
来自专栏pythonlove

Linux防火墙iptables(三)

我们前面两篇已经把iptables介绍的比较充分了,今天来说一个iptables对layer 7的实践。我们说过iptables/netfilter工作在内核空...

612
来自专栏云计算教程系列

如何保护您的服务器免受脏COW Linux漏洞

2016年10月19日,披露了Linux内核中的权限提升漏洞。该漏洞被昵称为Dirty COW,因为底层问题是内核处理写时复制(COW)的方式。Dirty CO...

40
来自专栏惨绿少年

setup 命令中防火墙配置选项无法打开

故障提示 ? 1.1 如何让setup 命令中防火墙配置生效 1.1.1 CentOS系统找不到setup命令工具的解决方法 yum -y install se...

2040
来自专栏谈补锅

免费真机调试 -- Xcode7

  刚新安装了Xcode7 Version 7.1 beta , 据说这个版本可以免费真机调试,于是用了一个新的AppID测试了,发现真的可以免费真机调试了呢!...

1113
来自专栏IT笔记

Grafana+Prometheus打造全方位立体监控系统

前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控。下面两张图分别是两台服务器: 服务器...

73613
来自专栏云计算教程系列

在你的电脑上运行Kubernetes

Kubernetes 是编配平台的首选。在开发过程中,您不妨在个人电脑上运行 Kubernetes,以便在本地启动和调试应用程序。本文提供了两种在 Mac OS...

1212
来自专栏小狼的世界

通过设置双网卡实现VirtualBox虚机上网及主宿互访

最近,经过一些研究,终于调通了VirtualBox虚拟机互连、主宿机互连、以及主宿机连接互联网。下面分享一下。

902
来自专栏极乐技术社区

干货 | 必看!从零接入微信小程序支付

小程序支付指南 微信小程序与php 实现微信支付 | 链接 微信小程序---设计支付密码的输入框| 链接 e玩转小程序支付之付款(统一下单)| 链接 小程序支付...

1.2K5

扫码关注云+社区