智能合约从入门到精通:用Solidity开发一个“Hello World”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能合约从入门到精通:用Solidity开发一个“Hello World”相关的知识,希望对你有一定的参考价值。

简介:上一章中我们聊到了智能合约的应用场景,在了解区块链技术目前的发展情况、智能合约的概念以及其应用场景之后,我们将在后续的文章中共同学习智能合约的编成语言。今天,我们就来简单地谈一谈用于编写智能合约的语言——Solidity语言。

那么,什么是Solidity语言呢?在前面的文章中我们反复提到过以太坊,以太坊做区块链2.0的典型代表,Solidity在以太坊中是撰写智能合约最受欢迎的语言,因此今天我们就和大家介绍一下这个作为智能合约开发中最主流的语言。

Solidity是运行于Ethereum虚拟机(EVM)上的一种智能合约高级语言。它的语法与javascript相似,是一种面向对象的语言。但其作为一种真正意义于网络上运行中的去中心合约,它又有着各种各样的特别之处,以下我们列举了其中的一部分,以便大家能够更直观地去理解Solidity语言的特点。

1.Solidity语言中,以太坊的底层构造是基于帐户而非UTXO的,所以它有一个特殊的Address的类型,用于用户、合约以及合约代码的定位(而合约其本身也是一个帐户)。

2.Solidity语言具备着语言内嵌框架支持支付的特点,它提供了一系列诸如payable的关键字,可以在语言的层面上直接进行支付,在运用上快捷简便。

3.存储。Solidity语言的存储使用的是网络上现有的区块链,数据的每一个阶段、状态都可以得到永久的存储,所以需要明确变量使用内存还是区块链。

4.关于Solidity的运行环境,其运行环境是建立在去中心化的网络上的,强调的是合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络中节点的代码执行,有着分布式的特点。

5.最后,Solidity语言有着一个十分特殊的异常处理机制。在过程中一旦出现任何异常,所有的执行都将会被强制回撤,这一机制有效避免了中间状态突然出现数据不一致的情况,从而保证合约执行的原子性。

Hello World作为在《The C Programme Language》中使用的第一个演示程序,在编程的世界里听起来也许非常高端,但实际上想要上手玩转其实非常地简单:

pragma solidity ^0.4.0;
contract HelloWorld{
uint balance;
function update(uint amount) returns (address, uint){
balance += amount;
return (msg.sender, balance);
}
}

如上所示,通过读取参数输入的新值,并将其累加至合约的变量中,返回发送人的地址,和最终的累计值。

最后,在这里给大家介绍一款浏览器编译器——Remix。

浏览器编译器Remix可谓称得上是Solidity语言的开发神器,是一个无需安装即可使用的在线编译器。只需打开其网址,即可在线使用并看到具体效果。打开后,如下图所示:
技术分享图片
输入上述代码,点击Create按钮,就能在浏览器中创建能调用函数的按钮。在update按钮旁输入入参,点击就能执行函数调用并打印出函数返回的结果了。
技术分享图片
(如果出现错误,可以等待浏览器资源加载完成,或强制刷新后再试。)

除了Remix,今天我们还将介绍一款国内的编译器:JIDE。

JIDE是JUICE开放服务平台提供用来编写智能合约及DApp的免费开发工具,JIDE集成了JUICE底层测试链、编辑器和Solidity运行时环境,用户无需搭建任何环境就可以快速地编写、编译、部署、运行智能合约。

与Remix相同,JIDE也是一个无需安装即可使用的在线编译器。只需打开其网址,即可在线使用并看到具体效果。http://www.juzix.net/

JIDE提供了完整了中文开发文档,对于初学者来讲,这是非常方便的。技术分享图片
Solidity的完整语法,敬请期待后续文章。
部分资料来源: www.tryblockchain.org

以上是关于智能合约从入门到精通:用Solidity开发一个“Hello World”的主要内容,如果未能解决你的问题,请参考以下文章

智能合约从入门到精通:Solidity语言的开发规范和开发流程

智能合约从入门到精通:Solidity语言的开发规范和开发流程

智能合约从入门到精通:Solidity汇编语言

智能合约从入门到精通:Solidity的特性与内部机制

智能合约从入门到精通:Solidity的特性与内部机制

智能合约从入门到精通:Solidity语法之内存变量的布局和状态变量的存储模型