📅  最后修改于: 2023-12-03 14:49:31.140000             🧑  作者: Mango
以太坊是一个分布式的区块链平台,这里的智能合约可以被编写成可执行的计算机程序,在区块链上运行,从而自动化执行合同。以太坊智能合约用的是 Solidity 编程语言。
Solidity 是一种现代化基于合约的编程语言,用于实现智能合约。它被用于以太坊上的智能合约,遵循 ECMAScript 的语法规范。Solidity支持元组、继承、结构体和各种内置和自定义数据类型,可以进行算术、逻辑运算并支持像常规编程语言一样的if/else语句和循环。
以下是一个简单的 Solidity 编写的智能合约:
pragma solidity ^0.8.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
在开始编写智能合约之前,你需要知道以下内容:
以下是一个示例:
pragma solidity ^0.8.0;
contract Voting {
mapping(address => bool) hasVoted;
mapping(bytes32 => uint8) votesReceived;
bytes32[] candidateList;
constructor(bytes32[] memory candidateNames) {
candidateList = candidateNames;
}
function totalVotesFor(bytes32 candidate) public view returns (uint8) {
return votesReceived[candidate];
}
function voteForCandidate(bytes32 candidate) public {
require(hasVoted[msg.sender] == false, "You have already voted.");
require(validCandidate(candidate), "Invalid candidate.");
votesReceived[candidate] += 1;
hasVoted[msg.sender] = true;
}
function validCandidate(bytes32 candidate) public view returns (bool) {
for(uint i = 0; i < candidateList.length; i++) {
if (candidateList[i] == candidate) {
return true;
}
}
return false;
}
}
这是一个简单的投票合约示例,其中有一个候选人名称的列表,用户可以投票给其中的一个。在这个合约中,投票人只能投一次票,所以我们使用一个 hasVoted
映射来跟踪用户是否已经投过票了。每一候选人的投票结果由一个 votesReceived
映射记录,这个映射的 key 是这位候选人的名字,对应的 value 是这位候选人获得的票数总和。函数 validCandidate
负责判断一个给定的候选人名字是否是列表中的候选人。如果一个用户试图在已经投过票的合约中投票,voteForCandidate
就会提示他他已经投过票了。
当你完成合约编写之后,你需要将它部署到以太坊网络上。你需要一些以太币来支付燃气费用。一旦部署成功,你的智能合约就可以在区块链上运行了。
以下是 Solidity 编写的智能合约的部署示例: