📜  以太坊-编制合同(1)

📅  最后修改于: 2023-12-03 14:49:31.140000             🧑  作者: Mango

以太坊 - 编写合同

以太坊是一个分布式的区块链平台,这里的智能合约可以被编写成可执行的计算机程序,在区块链上运行,从而自动化执行合同。以太坊智能合约用的是 Solidity 编程语言。

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 编写的智能合约的部署示例:

  • 首先,在 Remix 或 Visual Studio Code 等 Solidity 编辑器中编写 Solidity 代码。
  • 接下来,将代码部署到以太坊网络上。有很多种方法可以完成这个步骤,您可以使用以太坊官方的 Solidity 编辑器 Remix,或其他替代品如 Truffle 或 Embark。
  • 一旦您的智能合约部署成功,它就可以被其他人使用,包括您自己。