區塊鏈眾籌互助商城dapp系統開發合約技術詳情

nice1022發表於2023-03-13

智慧合約也是一個以太坊帳戶,開發I34-合約I633-定製53I9,我們稱之為合約帳戶。 這意味著它們有餘額,可以成為交易的物件。 但是,他們無法被人操控,他們是被部署在網路上作為程式執行著。 個人使用者可以透過提交交易執行智慧合約的某一個函式來與智慧合約進行互動。 智慧合約能像常規合約一樣定義規則,並透過程式碼自動強制執行。 預設情況下,您無法刪除智慧合約,與它們的互動是不可逆的。


配置檔案

配置檔案位於專案根目錄下,檔名為 truffle-config.js。

配置檔案內容如下:

module.exports = {

  networks: {

    development: {

  host: "127.0.0.1",     // Localhost (default: none)

  port: 7545,            // Standard Ethereum port (default: none)

  network_id: "*",    // Any network (default: none)

    }

  },


  compilers: {

    solc: {

      version: "0.8.13",      // Fetch exact version from solc-bin

    }

  }

};


這個配置檔案中,development 是我們要部署的區塊鏈配置,這裡指我們本地的 Ganache 區塊鏈節點。如果需要部署到其它區塊鏈節點,請修改此配置檔案。


智慧合約

合約原始碼

我們來看一下合約的原始碼,檔名是 MetaCoin.sol。


pragma solidity ^0.8.13;

import "./ConvertLib.sol";


contract MetaCoin {

mapping (address => uint) balances;


event Transfer(address indexed _from, address indexed _to, uint256 _value);


constructor() {

balances[tx.origin] = 10000;

}


function sendCoin(address receiver, uint amount) public returns(bool sufficient) {

if (balances[msg.sender] < amount) return false;

balances[msg.sender] -= amount;

balances[receiver] += amount;

emit Transfer(msg.sender, receiver, amount);

return true;

}


function getBalanceInEth(address addr) public view returns(uint){

return ConvertLib.convert(getBalance(addr),2);

}


function getBalance(address addr) public view returns(uint) {

return balances[addr];

}

}


這個合約包含一個建構函式、還定義了一個事件和三個函式。


constructor():合約的建構函式,在合約部署時自動存入一些 token 到發起者的賬戶。

event Transfer(...):事件。轉賬交易時觸發。

sendCoin(...):將 token 從一個賬戶轉賬到另一個賬戶。

getBalanceInEth(...):取經轉換後的賬戶餘額(賬戶餘額*2)。

getBalance(...):取賬戶餘額(單位:1wei)。

測試合約

這個示例定義了兩個測試檔案,儲存在 test 目錄下:


metacoin.js 用 JavaScript 編寫的測試指令碼

TestMetaCoin.sol:用 Solidity 編寫的測試指令碼

Truffle 自帶一個自動化測試框架,可以輕鬆測試合約,而不需要我們事先部署合約。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2939443/,如需轉載,請註明出處,否則將追究法律責任。

相關文章