以太坊智能合约示例

目前的智能合约基本都是运行在以太坊上。本文将通过一个简单而具体的智能合约实例来帮助大家理解智能合约的编写、部署与调用。这个例子很简单,但通过它你可以了解开发一个以太坊的智能合约的完整过程。 在之后的教程中,我们将结合不同的场景案例,分别举出不同的例子例如投票、众筹、拍卖、ERC20/ERC721代币发行等,并实现相应的solidity示例代码。我们希望你能在实践中逐步理解学习智能合约的开发语言solidity,理解智能合约的运行原理,并掌握必要的以太坊智能合约编程技能。

如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程:

开发语言和开发环境选择

目前智能合约最受欢迎的编程语言为Solidity,但是并不只有Solidity。作为初学者,编写Solidity代码,我们可以使用Remix,它是一个基于浏览器的Soldity IDE,网址为:http://remix.ethereum.org/ 。Remix支持编写、测试和部署智能合约。

编写代码

学一门语言的第一个程序毋庸置疑都是HelloWorld,那么我们就来写一个HelloWorld的智能合约吧。合约代码如下。

pragma solidity ^0.4.21;

contract HelloWorld {
    string hello = "Hello World!!!";
    event say(string _value);
    
    function sayHello() public {
        emit say(hello);
    }
    
}

合约代码第一行指定该合约使用的Solidity版本为0.4.21,不支持高于0.4.21版本的Solidity特性。

在Solidity中,contract关键字包含的代码段即表示一个智能合约,它拥有一些成员变量,表示该合约的数据,如我们的HelloWorld中的hello,我们可以修改操作这些成员。同时它拥有一些function,可以被他人调用。

event是Solidity提供的一种事件和订阅机制,智能合约能够发出一些event,合约调用者能够监听这些事件并作出相应的反应。

这个合约没有做很多事情,它只会在有人调用它的sayHello方法时,发出一个say事件。接下来让我们来部署和执行它。

部署和运行合约

首先我们需要编译这段代码,在Remix的右边有一个Compile的tab,点击Start to compile,编译成功,如果失败会有错误提示,改正即可。

然后我们需要将其部署到区块链上,切换tab到Run。

Remix支持三种环境运行合约。其中如果为JavaScript VM,则合约会在浏览器JavaScript沙箱区块链中被执行,可以理解为Remix使用了浏览器的JS环境虚拟了一个区块链虚拟机。如果为Injected Provider,则Remix将会链接Matamask或者Mist这些区块链钱包,通过它们来间接部署和调用合约。最后为Web3 Provider,Remix会链接Geth等远程区款连节点,来部署和调用合约。

简单起见,我们将使用JavaScript VM,它将为我们初始化出五个区块链账号,使用默认账号即可。将Environment设置为JavaScript VM。

上图除了Environment和Account依次往下,我们将能够看到Gas Limit,这是执行一个Transaction我们能够接受的最大代价。Value表示下一次调用我们将向合约账户转账多少ether。

接下来的HelloWorld表示我们将创建的合约。点击Create既能够创建这个合约。

我们可以点击sayHello调用。可以看到已经调用成功,在logs中打印出了我们发出的event。

结语

在本文中,我们编写了一个最简单的智能合约,并部署和运行了该合约。我们并没有将合约部署到实际的链上,只是在JS 沙箱虚拟机中执行了它。后面的文章中我们将会继续讲解如何将合约部署到链上。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量化投资与机器学习

用Python实现一个基于RSA算法的区块链客户端(区块链系列4)

26550
来自专栏区块链大本营

为将傅恒与魏璎珞的爱情上链,作为技术小白的我读了EVM上百行代码,终于搞定了

延禧攻略最近大火,傅恒和魏璎珞求而不得的爱情也令很多人觉得惋惜。那么傅恒到底为什么爱上魏璎珞呢?有网友真相了。

19030
来自专栏圆方圆学院精选

【刘文彬】【精解】EOS智能合约演练

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eos-contract.html

15730
来自专栏极客编程

如何实现以太坊支付

在这篇文章中,我将实现一个简单但完整的以太坊支付通道。支付通道使用密码签名,以安全、即时、无交易费用重复地传送Ether。

37320
来自专栏区块链

从"什么是区块链"到一个小时内构建区块链

区块链是记录的数字账本, 以称作区块的块状数据排列. 这些区块随后通过称为哈希函数的加密验证相互链接.这些区块连在一起形成一个连续的链 - 区块链.

517100
来自专栏区块链入门

【易错概念】以太坊的交易(transaction),消息(message)和调用(call)

交易和消息是以太坊系统中很关键的两个概念,同时也是两个非常类似的概念,它们在形式上近乎相同,但是本质上却又完全不同。这篇博客会将交易(Transaction)、...

18330
来自专栏IT派

【程序员必看】如何用Python创建一个区块链?

IT派 - {技术青年圈} 持续关注互联网、区块链、人工智能领域 小编认为最快的学习区块链的方式是自己创建一个,本文就用Python来创建一个区块链。 对数...

44270
来自专栏区块链大本营

程序员们,只需三步,教你搭建一个区块链程序 | 经典好文

区块链,大家或许都不陌生,或多或少都对它有一些了解。不过,这些了解可能都是支离破碎的。当问及其中一些概念是如何实现的,你可能就「蒙圈」了。那想了解其中的实现细节...

17330
来自专栏蜉蝣禅修之道

以太坊DApp开发初探

关于“以太猫”的流行,相信不少人都有所耳闻,甚至入手养过几只。从游戏性来说,其本质就是一个简单的收集交换类游戏,然鹅,是区块链赋予了它魅力,让用户每一只猫永远不...

1.3K150
来自专栏华仔的技术笔记

一个真实区块链项目的演练:以太坊Voting Dapp

54070

扫码关注云+社区

领取腾讯云代金券