智能合約編程語言
Solidity
Solidity是第一批的描述智能合約的語言。當(dāng)前是最流行的語言,因此也有最多的例子,文檔,和教程。你應(yīng)該學(xué)習(xí)這個,除非你有要學(xué)習(xí)其它的理由。
你可以使用基于瀏覽器的Remix IDE來進(jìn)行快速驗(yàn)證。
下面是一個Solidity的合約:
pragma solidity ^0.4.11;
contract BasicToken {
mapping(address => uint256) balances;
function transfer(address _to, uint256 _value) returns () {
balances[msg.sender] = balances[msg.sender] - _value;
balances[_to] = balances[_to] + _value;
}
function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
}
LLL
LLL是一門Lisp風(fēng)格的底層編程語言,就像語言名稱看到的這樣。雖然以太坊官方并沒有將它作為主要需要支持的語言,但它仍舊持續(xù)進(jìn)行著更新,且與solidity在同一個資源庫。
這是一個使用LLL語言寫的一個ERC20代幣的合約,鏈接:https://github.com/benjaminion/LLL_erc20/blob/1c659e890e2b30408555b9467a8dfd8988211b3b/erc20.lll
如果你正在學(xué)習(xí),也許不是那么的容易習(xí)慣LLL語言的寫法。
Serpent
Serpent是一個類Python的高級語言,最終也會被編譯為EVM字節(jié)碼。它主要被Augur團(tuán)隊(duì)使用。
但最近Zeppelin Solution團(tuán)隊(duì)發(fā)現(xiàn)其編譯器有一個嚴(yán)重的bug,鏈接:https://blog.zeppelin.solutions/serpent-compiler-audit-3095d1257929在這個問題被修復(fù)之前都不建議繼續(xù)使用。
如果你對Augur如何解決這些漏洞感興趣,你可以閱讀Zeppelin Solution的這篇文章。鏈接:https://blog.zeppelin.solutions/augur-rep-token-critical-vulnerability-disclosure-3d8bdffd79d2
Serpent的合約看起來如下:
def register(key, value): # Key not yet claimed if not
self.storage[key]: self.storage[key] = value return(1) else: return(0)
# Key already claimeddef ask(key): return(self.storage[key])
