介紹
Remix是一個開源的 用於 Solidity 智慧合約開發的Web端IDE,提供基本的編譯、部署至本地或測試網路、執行合約等功能。Solidity 是 Ethereum 官方設計和支援的程式語言,專門用於編寫智慧合約。
可以本地部署Remix,也可以直接使用官方部署好的,地址是:remix.ethereum.org。介面如下圖:
建立代幣合約
solidity官網上有一個最簡單的建立代幣合約Subcurrency Example。
pragma solidity >0.4.24;
contract Coin {
// The keyword "public" makes those variables
// easily readable from outside.
address public minter;
mapping (address => uint) public balances;
// Events allow light clients to react to
// changes efficiently.
event Sent(address from, address to, uint amount);
// This is the constructor whose code is
// run only when the contract is created.
// 合約的建構函式,建立合約的時候合約建立者即為鑄幣人
constructor() public {
minter = msg.sender;
}
//鑄幣,只有合約建立人才能鑄幣
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
//傳送代幣
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
複製程式碼
這是一個最簡單的代幣生成合約,主要就做了以下幾件事:
- 建立合約:約定建立者即為鑄幣者
- 生成代幣:合約建立者隨時可以呼叫mint方法建立指定數量的代幣
- 傳送代幣:只要自己擁有代幣,就可以給指定地址傳送代幣
編譯合約
- 建立.sol格式的合約檔案
- 編寫合約程式碼
- 開始編譯
- 編譯成功
編譯合約生成的Details
合約編譯成功之後,點選Details
按鈕,就能看到編譯之後的一些資訊,如下圖所示(內容比較多,沒有全部截圖):
NAME
:合約名METADATA
:一些編譯相關的資訊,比如版本、所用的語言、設定等BYTECODE
:寫入區塊的位元組碼ABI
:此智慧合約對應的 ABI ,也就是我們合約裡面定義的一些介面WEB3DEPLOY
:智慧合約編譯之後的釋出命令,這個就是比較重要的,之後的web3就是呼叫這段命令來部署合約的METADATAHASH
:上面2後設資料的一個雜湊值SWARMLOCATION
:Swarm網路的一個地址(到底什麼是Swarm)FUNCTIONHASHES
:合約定義的方法的hash,其實我們執行合約的時候就是通過這個hash去找到對應的方法進行執行的GASESTIMATES
:關於礦工費的一個預算,在ETH上進行合約的部署,執行等都是需要礦工費的。一般合約程式碼越多礦工費越高。
本地部署合約
- 點選右上角的Run
- 選中部署的環境為本地(也就是合約不會部署到公共的區塊鏈網路,只是部署到一個本地的測試區塊鏈網路)
- 選中部署的賬戶(本地環境預設會建立好幾個賬戶,每個賬戶預設有100個eth)
- 選擇要部署的合約
- 點選Deploy之後就會部署到本地了
- 部署完成之後的合約地址
或者在At Address
填寫已經部署好的合約地址,6中就會出現對應地址的合約。
測試網路部署合約
首先要安裝MetaMask外掛,到Chrome商店去下載。這是一個Chrome上的以太坊錢包外掛。具體的使用在這裡不做說明。
我這裡使用的測試網路是Rinkeby
,在Rinkeby上賬戶的eth代幣需要到www.rinkeby.io/#faucet獲取。
我們在測試網路上環境選擇Injected Web3
,Remix
會自動連結 MetaMask
。我們能看到賬號也變成了我們MetaMask
上面的賬號。
最後點選Deploy
部署,MetaMask
會彈出介面讓你進行一個確認,因為部署合約是需要一個礦工費的,這裡主要就是確認礦工費,確認之後就會發起廣播,礦工收取礦工費,合約部署到區塊上。
呼叫合約
合約部署完成之後,下面就會出現我們部署好的合約,或者我們直接在At Address
裡填入之前已經部署過的合約地址也可以。
展開合約,我們就能看到之前合約程式碼裡我們定義的一些方法和變數。這裡mint
和send
執行時是需要支付礦工費的。
- mint生成代幣:填入賬戶地址(需要是合約建立者的地址)和生成代幣的數量,點選
transact
執行合約程式碼。 - send傳送代幣:展開之後一樣填入接受者的賬戶地址和接收數量
- 檢視對應地址裡的代幣餘額
- 檢視鑄幣者(即合約建立者)
終端輸出器
檢視交易詳情
在合約部署、執行的過程中終端輸出器會輸出相應的內容資訊。如下圖,是一個合約部署的輸出內容(標有轉賬的雜湊,合約建立者,gas費用,輸入內容等):
Debug除錯
除錯需要在本地環境進行除錯,即合約部署時選擇JavaScript VM
,然後在我們上圖所示的終端輸出中點選對應交易右邊的Debug
按鈕,即可顯示如下圖所示的除錯介面:
PS:按道理這裡不是本地環境也可以,直接輸入Block number
和TxHash
即可檢視呼叫棧,但是我輸入之後發現是empty,不知道什麼原因。