在本節中,我們將討論如何使用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];
}
}
該合約包含:
狀態變量owner 和 balances,分別用於存儲合約所有者的地址和所有地址的代幣餘額。
一個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構建具有覆雜邏輯的去中心化應用。
要點
免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐 Gate Learn 的作者創作,觀點僅代表作者本人,絕不代表 Gate Learn 讚同其觀點或證實其描述。