1. 程式人生 > >Solidity學習::(7)智慧合約案例-1

Solidity學習::(7)智慧合約案例-1

智慧合約案例-1

一、開啟remix-ide

二、 先導內容

  • payable:函式上增加payable標識,即可接收ether,並會把ether存在當前合約。一般在建構函式上加payable,那麼部署合約時就可以通過發起賬戶給合約地址一併傳送以太幣。另外發送以太幣到合約的方法還有:address.call(某個方法).value(要傳送的ether)
  • send:address.send(ether to send)向某個地址轉帳【address為要轉賬的目的地址】

  • this.balance:查詢當前合約賬戶的餘額

 四、案例合約功能

  1. 部署時可接收發起賬戶的以太幣
  2. 可傳送指定數量的以太幣到指定賬戶地址

五、合約程式碼: 

pragma solidity ^0.4.0;

contract SendAndReceiveByContract{
    
  function SendAndReceiveByContract() payable{}
  //fallback函式對應記錄事件
  event fallbackTrigged(bytes data);
  //合約接收send()的 ether時,必須存在
  function() payable{fallbackTrigged(msg.data);}

  //存入一些ether用於後面的測試
  //function deposit() payable{
  //}

  //查詢當前的餘額
  function getBalance() constant returns(uint){
      return this.balance;
  }

  event SendEvent(address to, uint value, bool result);
  //使用send()傳送ether
  function sendEther(address contract_add,uint eth_num){
        //使用this來模擬從另一個合約傳送
      bool result = contract_add.send(eth_num);
      SendEvent(contract_add, eth_num, result);
  }
}

六、操作展示

1、編譯程式碼

2、選擇賬戶部署合約,value值為要傳送以太幣到合約賬戶的數量,點選下圖的Deploy即可部署

3、 這裡我們部署兩個,一個value值填100,一個為0

4、部署成功後,可以看到右下角多出了兩個合約,兩個合約的地址不同:

5、下面點選getBalance就會執行 return this.balance; 返回當前賬戶的以太幣(wei)

6、下面進行send操作,我們選擇以太幣為0的合約,複製它的地址

7、貼上到另一個合約的sendEther函式引數框中,然後填入想傳送的數量

8、點選transact,即可發起交易。

9、從控制檯返回的事件記錄中,可以看到result為true,即傳送成功

10、再次檢視合約賬戶以太幣數量: