# 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/)可以立即看到效果。打開后,如下圖所示:

輸入上述代碼,點擊Create按鈕,就能在瀏覽器中創建能調用函數的按鈕。在`update`按鈕旁輸入入參,點擊按鈕,就能執行函數調用并打印出函數返回的結果了。

如果出現錯誤,可以等待瀏覽器資源加載完成,或強制刷新后再試。
- Solidity語言
- 入門說明
- Solidity智能合約文件結構
- 智能合約源文件的基本要素概覽
- 值類型
- 類型
- 布爾
- 整型
- 地址
- 字節數組
- 小數
- 字符串
- 十六進制字面量
- 枚舉
- 函數
- 引用類型
- 引用類型
- 數據位置
- 數組
- 數據結構
- 雜項
- 映射
- 左值運算符
- 類型間的轉換
- 類型推斷
- 單位
- 貨幣單位
- 時間單位
- 語言內置特性
- 特殊變量及函數
- 數學和加密函數
- 地址相關
- 進階
- 入參和出參
- 控制結構
- 函數調用
- 創建合約實例
- 表達式的執行順序
- 賦值
- 作用范圍和聲明
- 異常
- 內聯匯編
- 合約詳解
- 合約
- 可見性或權限控制
- 訪問函數
- 函數修改器
- 常狀態變量
- 回退函數
- 事件
- 繼承
- 接口
- 其它
- 庫
- 狀態變量的存儲模型
- 內存變量的存局
- 調用數據的布局