レッスン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を代表するものではありません。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.