# Solidity语言
Solidity是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。
[TOC]
## Solidity与其它语言相关的特点?
它的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:
- 以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的`Address`的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。
- 由于语言内嵌框架是支持支付的,所以提供了一些关键字,如`payable`,可以在语言层面直接支持支付,而且超级简单。
- 存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
- 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
- 最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
## Hello Wolrd!
听起来高大上,其实入手玩起来也可以很简单:
```
pragma solidity ^0.4.0;
contract HelloWorld{
uint balance;
function update(uint amount) returns (address, uint){
balance += amount;
return (msg.sender, balance);
}
}
```
通过读取参数输入的新值,并将之累加至合约的变量中,返回发送人的地址,和最终的累计值。
## 浏览器编译器Remix
使用无需安装的浏览器编译器[Remix](https://ethereum.github.io/browser-solidity/)可以立即看到效果。打开后,如下图所示:
![Remix](https://box.kancloud.cn/d4b1a7be2245783accfe70708a7e0323_1314x611.jpg)
输入上述代码,点击Create按钮,就能在浏览器中创建能调用函数的按钮。在`update`按钮旁输入入参,点击按钮,就能执行函数调用并打印出函数返回的结果了。
![image](https://box.kancloud.cn/4d3c3e5363180075f17a96ddd61340d3_584x425.jpg)
如果出现错误,可以等待浏览器资源加载完成,或强制刷新后再试。
- Solidity语言
- 入门说明
- Solidity智能合约文件结构
- 智能合约源文件的基本要素概览
- 值类型
- 类型
- 布尔
- 整型
- 地址
- 字节数组
- 小数
- 字符串
- 十六进制字面量
- 枚举
- 函数
- 引用类型
- 引用类型
- 数据位置
- 数组
- 数据结构
- 杂项
- 映射
- 左值运算符
- 类型间的转换
- 类型推断
- 单位
- 货币单位
- 时间单位
- 语言内置特性
- 特殊变量及函数
- 数学和加密函数
- 地址相关
- 进阶
- 入参和出参
- 控制结构
- 函数调用
- 创建合约实例
- 表达式的执行顺序
- 赋值
- 作用范围和声明
- 异常
- 内联汇编
- 合约详解
- 合约
- 可见性或权限控制
- 访问函数
- 函数修改器
- 常状态变量
- 回退函数
- 事件
- 继承
- 接口
- 其它
- 库
- 状态变量的存储模型
- 内存变量的存局
- 调用数据的布局