本报告详细记录了一个小型区块链应用的实验过程,旨在探索区块链技术在解决特定实际问题中的可行性与优势,实验内容为设计并实现一个基于以太坊区块链的去中心化投票系统,报告涵盖了实验背景、目标、技术选型、系统设计、实现步骤、测试结果、遇到的问题与解决方案,以及对实验的总结与展望,通过本次实验,我们深入理解了智能合约的编写与部署流程,体验了区块链应用的构建方法,并对区块链的去中心化、透明性和不可篡改性等特性有了直观的认识。

实验背景与目标

1 实验背景 随着区块链技术的快速发展,其去中心化、数据不可篡改、透明可追溯等特性使其在金融、供应链、物联网、版权保护等多个领域展现出巨大潜力,对于初学者而言,区块链技术仍存在一定的入门门槛,为了更好地理解和掌握区块链技术的核心原理与应用开发方法,我们决定进行一个小型区块链应用实验。

2 实验目标

技术选型与工具

系统设计

1 需求分析 本去中心化投票系统主要需求如下:

  1. 创建投票: 指定用户(如投票发起人)可以创建一个新的投票主题,包含投票描述、选项列表、投票截止时间等。
  2. 参与投票: 系统中的用户(拥有以太坊账户)可以对已开放的投票进行投票,每个用户对每个选项只能投票一次。
  3. 查询投票: 任何人都可以查询当前所有投票的详细信息,包括投票主题、选项、各选项得票数、投票状态(进行中/已结束)等。
  4. 投票结果: 投票截止后,系统自动公布最终投票结果,且结果不可篡改。

2 智能合约设计 我们将核心逻辑封装在一个名为 VotingSystem 的智能合约中,合约主要功能模块及状态变量设计如下:

实现步骤

  1. 环境搭建:

    • 安装并配置MetaMask浏览器插件,切换到以太坊测试网络(如Sepolia),获取测试ETH。
    • 打开Remix IDE(https://remix.ethereum.org/)。
  2. 智能合约编写:

    • 在Remix IDE中创建一个新的.sol文件(如VotingSystem.sol)。
    • 根据上述系统设计,使用Solidity语言编写VotingSystem智能合约的代码,注意处理边界条件,如投票选项索引越界、重复投票、投票已截止等。
  3. 编译合约:

    在Remix IDE的“Compile”标签页,选择合适的Solidity编译版本(如0.8.7),点击“Compile VotingSystem.sol”按钮,确保编译无错误。

  4. 部署合约:

    • 切换到“Deploy & Run Transactions”标签页。
    • 在“ENVIRONMENT”下拉菜单中选择“Injected Provider - MetaMask”,此时Remix会连接到MetaMask钱包。
    • 确认MetaMask显示的是正确的测试网络和账户。
    • 点击“Deploy”按钮,MetaMask会弹出交易确认窗口,确认并支付少量 gas 费用,合约部署成功后,会显示合约地址。
  5. 测试合约功能:

    • 在部署成功的合约实例下,使用Remix IDE的“Deployed Contracts”区域调用合约的各个函数进行测试。
    • 创建投票: 调用createVoting函数,输入投票标题、描述、选项数组(如["选项A", "选项B"])和截止时间(当前时间戳+一定秒数)。
    • 参与投票: 切换到另一个MetaMask账户(或使用同一账户但确保未投过票),调用vote函数,输入投票ID和选项索引。
    • 查询投票: 调用getVoting函数,输入投票ID,查看返回的投票信息,包括标题、选项、得票数等。
    • 验证防篡改: 尝试修改已结束投票的结果(如果逻辑允许),观察是否成功,观察投票截止后是否还能投票。

测试结果与分析

经过上述步骤,我们成功部署并测试了去中心化投票系统。

遇到的问题与解决方案

  1. Gas费用消耗
    • 描述: 在测试网络上,每次部署合约和调用函数都需要消耗gas,虽然测试ETH免费获取,但频繁操作可能导致测试ETH不足。
    • 解决方案: 优化智能合约代码,减少不必要的计算和存储;合理设置gas limit,避免因gas limit过高导致浪费;

返回栏目