以太坊Solidity編程開發:使用Remix的基本流程
Hello World
先看一段代碼:
pragma solidity ^0.6.4; //指定所需編譯器版本
contract Hello{
function helloWorld() returns(string) {
return "Hello World";
}
}
異常1:security/enforce-explicit-visibility: No visibility specified explicitly for helloWorld function. No visibility specified. Did you intend to add “public”?
解決辦法,在returns前添加public
原因是:未指定可見性,採用默認public可見範圍,這裏需要說明的是有4種函數可見性:
- public:智能合約外部和內部都可使用的方法
- internal:智能合約(包括派生合約)內部可用調用的方法
- external:可通過其他合約和交易進行調用的方法
- private:只有在定義的合約種纔可以調用,即使派生的合約也無法調用
function helloWorld() public returns(string) {
異常2:Data location must be “memory” for return parameter in function, but none was given.
解決辦法:在string後追加memory
function helloWorld() public returns(string memory) {
異常3:Function state mutability can be restricted to pure
解決辦法:在public後添加pure
原因:功能狀態可變性可以限制爲pure。在之前的版本中使用constant來限制一個方法的制度性,當用constant修飾後,此方法在被調用時不會進行存儲的變更,同樣不會產生交易和gas花費。而pure正式constant的替代品。
function helloWorld() public pure returns(string memory) {
異常4:security/no-tx-origin: Consider using ‘msg.sender’ in place of ‘tx.origin’.
解決辦法:使用msg.sender替代tx.origin
constructor() public {
balances[msg.sender] = 10000;
}
使用Remix
加載合約文件
編譯合約文件
注意版本選擇。
運行/部署合約
查看調用結果
如果函數帶有參數,則測試參數輸入位置如下: