Solidity 是以太坊(Ethereum)指定用於智能合約開發的程式語言。
其語法類似於 JavaScript,擁有強型別、var 型別推論等特性。
列出幾種常件的開發工具,比較推薦的是 browser-solidity,可以解決不同以太坊版本與 Solidity 之間差異問題。
npm install solc -g
solcjs --help
solcjs contract.sol
Solidity 基本由三個架構組成:
contract HelloWorld 
{
    string public greeting = "";
    
    function setHelloWorld() 
    {
        greeting = "hello, world";
    }
}
Solidity 為了結合智能合約帳戶及數位貨幣概念,設計了一些特殊型別,以便於進行如帳戶餘額的資料存取。
uint constant HEX_NUM = 0x123A1;
bytes32[5]	nicknames;	//靜態陣列
bytes32[]	names;		//動態陣列
names.length;			//陣列長度
T[]		t;	//動態長度陣列
T[N]	t;	//N 長度陣列
T[N][M]	t;	//M x N 陣列
//K, V 為泛型,其中 K 不可以為 Mapping 型別
//當 K 不存在時,V 為 0
//Ktype 為使用 SHA3 產生的哈希值
mapping (Ktype => Vtype) myMap;	
地址(address):以哈希值作為為ㄧ的合約或帳戶代碼
address public owner;
mapping (string => uint) public balances;
balances["Bob"] = 10 ether;
Structs 範例:
struct Bank 
{
    address owner;
    uint balance;
}
Bank bank = Bank
(
    {
        owner: "0x692a70d2e424a56d2c6c27aa97d1a86395877b3a"
        ,balance: 5
    }
);
自訂型別範例:使用 enums
enum Direction { Left, Right, Up, Down };
Direction myDirection = Direction.Up;
block.blockhash(uint blockNumber) returns (bytes32) 
block.coinbase;  // 挖礦者的地址
block.gaslimit;  // 現在區塊的 gas 限制
block.number;    // 現在區塊的編號
block.timestamp; // 現在區塊的時間,不等於確認(commit)時間
msg.sender;      // 訊息的發送者
msg.value;       // 隨著訊息攜帶了多少貨幣 - wei
tx.origin;       // 交易的發送者
block.timestamp; //等同於 block.timestamp
#### 流程控制
return;
return VALUE,..;
function NAME(ARG,..) VISIBILITY returns (TYPE,...) {}
Solidity 線上文件:https://solidity.readthedocs.io