Pelajaran 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等函数的使用方法。
Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili Gate Learn.
Katalog
Pelajaran 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等函数的使用方法。
Pernyataan Formal
* Investasi Kripto melibatkan risiko besar. Lanjutkan dengan hati-hati. Kursus ini tidak dimaksudkan sebagai nasihat investasi.
* Kursus ini dibuat oleh penulis yang telah bergabung dengan Gate Learn. Setiap opini yang dibagikan oleh penulis tidak mewakili 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.