第3課

編寫基本智能合約

在第三課中,您將通過實踐了解如何編寫基本的智能合約。本課將涵蓋變量、函數和修飾符等基本概念,併以實現一個簡單的代幣合約舉例説明。

在本節中,我們將討論如何使用Solidity編寫基本的智能合約。課程將涵蓋變量、函數和修飾符等基本內容,併以一個簡單的代幣合約示例來詳細介紹實現過程。

變量、函數和修飾符

  • 變量:Solidity包含兩種類型的變量:狀態變量和局部變量。狀態變量永久存儲在區塊鏈上,局部變量則是臨時的,隻存在於函數的作用域內。
  • 函數:函數是智能合約的構建塊,用於執行特定任務,如創建交易和執行自定義邏輯。函數可以有輸入參數和返回值,從而實現更大的自定義性和靈活性。
  • 修飾符:修飾符是Solidity所獨有的,用於修改函數的行爲。修飾符可以提高代碼的可讀性和可管理性,併可用於驗證傳入值或有條件地執行被調用的函數。
    示例1:實現一個簡單的代幣合約

我們用Solidity來創建一個簡單的代幣合約,允許用戶在多個賬戶之間轉移代幣併查看任一賬戶的代幣餘額。

TypeScript
pragma solidity ^0.8.0;

contract SimpleToken {
    // Declare state variables
    address public owner;
    mapping(address => uint256) public balances;

    // Initialize the token contract
    constructor(uint256 initialSupply) {
        owner = msg.sender;
        balances[owner] = initialSupply;
    }

    // Function to transfer tokens
    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }

    // Function to check the token balance of an account
    function balanceOf(address account) public view returns (uint256) {
        return balances[account];
    }
}

該合約包含:

  • 狀態變量ownerbalances,分別用於存儲合約所有者的地址和所有地址的代幣餘額。
  • 一個constructor構造函數,用於設置代幣的初始供應併將其分配給合約所有者。
  • 一個transfer函數,允許用戶將代幣轉移到其他賬戶。它使用require語句來確保髮送者有足夠的代幣可以轉移。
  • 一個balanceOf函數,用於返回指定帳戶的代幣餘額。
  • 這一基本的代幣合約演示了如何在Solidity中使用變量、函數和修飾符來創建一個簡單實用的智能合約。
    示例2:實現簡單的投票繫統
TypeScript
pragma solidity ^0.8.0;

contract VotingSystem {
    mapping (bytes32 => uint256) public votesReceived;
    bytes32[] public candidateList;

    constructor(bytes32[] memory candidateNames) {
        candidateList = candidateNames;
    }

    function voteForCandidate(bytes32 candidate) public {
        require(validCandidate(candidate), "Invalid candidate.");
        votesReceived[candidate] += 1;
    }

    function totalVotesFor(bytes32 candidate) public view returns (uint256) {
        require(validCandidate(candidate), "Invalid candidate.");
        return votesReceived[candidate];
    }

    function validCandidate(bytes32 candidate) public view returns (bool) {
        for (uint256 i = 0; i < candidateList.length; i++) {
            if (candidateList[i] == candidate) {
                return true;
            }
        }
        return false;
    }
}

在此示例中,VotingSystem合約允許用戶通過調用voteForCandidate函數爲候選人投票。合約使用voteForCandidate映射統計每個候選人收到的票數,統計基於候選人的名稱,值則是票數。CandateList變量存儲有效候選人列錶。可以調用totalVotesFor函數來查看特定候選人穫得的票數,併通過validCandidate函數檢查候選人是否有效。通過這一示例,我們學習了如何使用Solidity構建具有覆雜邏輯的去中心化應用。

要點

  • 變量、函數和修飾符是Solidity智能合約的重要組成部分。
  • Solidity有兩種類型的變量:狀態變量和局部變量。
  • 函數用於執行任務,可以有輸入參數和返回值。
  • 修飾符用於修改函數的行爲,提高代碼的可讀性和可管理性。
  • SimpleToken合約允許用戶轉移代幣併查看代幣餘額。
  • SimpleToken合約演示了狀態變量、構造函數以及transfer和balanceOf等函數的使用。
  • VotingSystem合約允許用戶爲候選人投票併統計投票數。
  • VotingSystem合約展示了映射、數組和voteForCandidate、totalVotesFor和validCandidate等函數的使用方法。
免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第3課

編寫基本智能合約

在第三課中,您將通過實踐了解如何編寫基本的智能合約。本課將涵蓋變量、函數和修飾符等基本概念,併以實現一個簡單的代幣合約舉例説明。

在本節中,我們將討論如何使用Solidity編寫基本的智能合約。課程將涵蓋變量、函數和修飾符等基本內容,併以一個簡單的代幣合約示例來詳細介紹實現過程。

變量、函數和修飾符

  • 變量:Solidity包含兩種類型的變量:狀態變量和局部變量。狀態變量永久存儲在區塊鏈上,局部變量則是臨時的,隻存在於函數的作用域內。
  • 函數:函數是智能合約的構建塊,用於執行特定任務,如創建交易和執行自定義邏輯。函數可以有輸入參數和返回值,從而實現更大的自定義性和靈活性。
  • 修飾符:修飾符是Solidity所獨有的,用於修改函數的行爲。修飾符可以提高代碼的可讀性和可管理性,併可用於驗證傳入值或有條件地執行被調用的函數。
    示例1:實現一個簡單的代幣合約

我們用Solidity來創建一個簡單的代幣合約,允許用戶在多個賬戶之間轉移代幣併查看任一賬戶的代幣餘額。

TypeScript
pragma solidity ^0.8.0;

contract SimpleToken {
    // Declare state variables
    address public owner;
    mapping(address => uint256) public balances;

    // Initialize the token contract
    constructor(uint256 initialSupply) {
        owner = msg.sender;
        balances[owner] = initialSupply;
    }

    // Function to transfer tokens
    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "Insufficient balance");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }

    // Function to check the token balance of an account
    function balanceOf(address account) public view returns (uint256) {
        return balances[account];
    }
}

該合約包含:

  • 狀態變量ownerbalances,分別用於存儲合約所有者的地址和所有地址的代幣餘額。
  • 一個constructor構造函數,用於設置代幣的初始供應併將其分配給合約所有者。
  • 一個transfer函數,允許用戶將代幣轉移到其他賬戶。它使用require語句來確保髮送者有足夠的代幣可以轉移。
  • 一個balanceOf函數,用於返回指定帳戶的代幣餘額。
  • 這一基本的代幣合約演示了如何在Solidity中使用變量、函數和修飾符來創建一個簡單實用的智能合約。
    示例2:實現簡單的投票繫統
TypeScript
pragma solidity ^0.8.0;

contract VotingSystem {
    mapping (bytes32 => uint256) public votesReceived;
    bytes32[] public candidateList;

    constructor(bytes32[] memory candidateNames) {
        candidateList = candidateNames;
    }

    function voteForCandidate(bytes32 candidate) public {
        require(validCandidate(candidate), "Invalid candidate.");
        votesReceived[candidate] += 1;
    }

    function totalVotesFor(bytes32 candidate) public view returns (uint256) {
        require(validCandidate(candidate), "Invalid candidate.");
        return votesReceived[candidate];
    }

    function validCandidate(bytes32 candidate) public view returns (bool) {
        for (uint256 i = 0; i < candidateList.length; i++) {
            if (candidateList[i] == candidate) {
                return true;
            }
        }
        return false;
    }
}

在此示例中,VotingSystem合約允許用戶通過調用voteForCandidate函數爲候選人投票。合約使用voteForCandidate映射統計每個候選人收到的票數,統計基於候選人的名稱,值則是票數。CandateList變量存儲有效候選人列錶。可以調用totalVotesFor函數來查看特定候選人穫得的票數,併通過validCandidate函數檢查候選人是否有效。通過這一示例,我們學習了如何使用Solidity構建具有覆雜邏輯的去中心化應用。

要點

  • 變量、函數和修飾符是Solidity智能合約的重要組成部分。
  • Solidity有兩種類型的變量:狀態變量和局部變量。
  • 函數用於執行任務,可以有輸入參數和返回值。
  • 修飾符用於修改函數的行爲,提高代碼的可讀性和可管理性。
  • SimpleToken合約允許用戶轉移代幣併查看代幣餘額。
  • SimpleToken合約演示了狀態變量、構造函數以及transfer和balanceOf等函數的使用。
  • VotingSystem合約允許用戶爲候選人投票併統計投票數。
  • VotingSystem合約展示了映射、數組和voteForCandidate、totalVotesFor和validCandidate等函數的使用方法。
免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。