螞蟻區塊鏈合約平臺支持 Solidity 語言來實現合約的編寫和編譯,本目錄的文檔主要介紹在螞蟻區塊鏈合約平臺中支持的 Solidity 合約的語法、語義、函數庫和一些平臺提供的接口功能等,其它具體說明可以 參考 Solidity 官方文檔(英文)。
這些文檔核心介紹螞蟻區塊鏈合約平臺與原生 Solidity 不一樣的特性。
使用智能合約開發功能,應具有合理性與合規性,符合相關監管規則和要求,嚴禁將合約開發用于發代幣等不法行為上。
Solidity合約暫時不支持隱私API,如果需要使用零知識證明,同態加密等密碼學API,請使用WASM合約。
螞蟻鏈平臺 Solidity 合約語言 vs. 以太坊官方 Solidity 合約語言
螞蟻鏈平臺中,solidity合約使用identity替代官方solidity的address關鍵字。identity表示的合約地址或賬戶地址,均為32字節,而官方solidity中address表示的地址是20字節。
螞蟻鏈合約不支持 suicide,也不支持 selfdestruct。
螞蟻鏈合約不支持在合約內創建合約,因此不要在合約內使用
new
來創建合約。在螞蟻鏈平臺上,如果嘗試在合約內向一個不存在的地址轉賬,合約會異常終止,并返回錯誤碼 10303;而在以太坊官方 Solidity 合約內向不存在的地址轉賬時,系統會自動以該地址創建賬戶。
對于
<identity>.balance (uint256)
語句,如果identity
代表的賬戶不存在,則在螞蟻鏈平臺中該語句會造成合約異常終止,并返回錯誤碼 10300;而在以太坊官方 Solidity 合約中,該語句會返回 0,不會造成合約異常終止。在螞蟻鏈平臺中,合約內的
block.number
、block.timestamp
分別指最新已形成的區塊(即本交易所在區塊的上一個區塊)的高度和時間戳(毫秒);而在官方 Solidity 合約中,這兩個參數分別指的是本交易所在區塊的高度和時間戳。螞蟻鏈平臺不提供 ripemd160 這個散列算法。
螞蟻鏈平臺中,solidity合約內不支持 CHAINID 指令
螞蟻鏈平臺中,如果solidity合約執行過程中異常終止,終止之前產生的Event Log依然會出現在交易回執中。