当前位置:网站首页 > 智能合约开发 > 正文

区块链实验九 :智能合约开发

实验目的及要求

了解以太坊的基本逻辑,理解以太坊的运行机理。能正确进行智能合约设计开发和部署。

实验基本原理

了解智能合约设计开发和部署。熟悉工具。

实验实施环境

实验概述

在remix中编写智能合约,并进行合约的测试。

实验内容

在remix网页中,编译部署简单投票合约
pragma solidity ^0.4.0; contract Ballot{ 
    struct Voter{ 
    uint weight; bool voted; uint8 vote; address delegate; } struct Proposal{ 
    uint voteCount; } address public chairperson; Proposal[] proposals; mapping(address=>Voter) voters; constructor(uint _numberProposals){ 
    chairperson = msg.sender; voters[chairperson].weight = 1; proposals.length = _numberProposals; } function giveRightToVote(address voter) public { 
    require(msg.sender == chairperson); require(!voters[voter].voted); require(voters[voter].weight == 0); voters[voter].weight = 1; } function delegate(address to)public { 
    Voter storage sender = voters[msg.sender]; require(!sender.voted); while(voters[to].delegate!=address(0) && voters[to].delegate != msg.sender){ 
    to = voters[to].delegate; } require(to != msg.sender); sender.voted = true; sender.delegate = to; Voter storage delegateTo = voters[to]; if(delegateTo.voted){ 
    proposals[delegateTo.vote].voteCount += sender.weight; } else { 
    delegateTo.weight += sender.weight; } } function vote(uint8 proposal) public { 
    Voter storage sender = voters[msg.sender]; require(!sender.voted); sender.voted = true; sender.vote = proposal; proposals[proposal].voteCount += sender.weight; } function winningProposal() public view returns(uint8 _winningProposal){ 
    uint winningCount = 0; for(uint8 prop = 0;prop < proposals.length; prop ++){ 
    if(proposals[prop].voteCount > winningCount){ 
    winningCount = proposals[prop].voteCount; _winningProposal = prop; } } } } 

运行结果截图:
1

(选作)深入理解solidity

学习地址👉点击直达

Pragma(版本杂注)
源文件可以被版本杂注pragma所注解,表明要求的编译器的版本,例如:pragma solidity ^0.4.0;
源文件将既不允许低于0.4.0版本的编译器编译,也不允许高于(包含)0.5.0版本的编译器编译(第二个条件因使用^添加)

Import
Solidity所支持的导入语句import,语法同js(从ES6 起)非常类似

  • Import(导入)
  • Import “filename”:从filename中导入所有的全局符号到当前全局作用域中
  • Import * as symbolName from “filename”:创建一个新的全局符号symbolname,其成员均来自“filename”中全局符号
  • Import {symbol1 as alias,symbol2} from “filename”:创建新的全局符号alias和symbol2,分别从“filename”引用symbol1和symbol2;
  • Import “filename” as symbolName:这条语句等同于import * as symbolName from “filename”;

Solidity值类型

  • 布尔(Booleans)
  • 整型(Integer)
  • 地址(Address)
  • 定长字节数组(fixed byte arrays)
  • 有理数和整型(Rational and Integer Literals,String literals)
  • 枚举类型(Enums)
  • 函数(Function Types)

Solidity引用类型

  • 不定长字节数组(bytes)
  • 字符串(string)
  • 数组(Array)
  • 结构体(Struts)
到此这篇区块链实验九 :智能合约开发的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 基于以太坊的智能合约开发Solidity(基础篇)2024-10-30 21:41:45
  • 智能合约笔记_区块链的智能合约2024-10-30 21:41:45
  • solidity 智能合约从入门到发币_智能合约链2024-10-30 21:41:45
  • 智能合约开发过程2024-10-30 21:41:45
  • 详述TON的技术特点与智能合约开发范式2024-10-30 21:41:45
  • 【智能合约】智能合约开发指南_智能合约开发教程2024-10-30 21:41:45
  • 区块链2——Solidity智能合约开发_区块链智能合约项目能玩多久?2024-10-30 21:41:45
  • 区块链智能合约开发_区块链智能合约开发与保障问题2024-10-30 21:41:45
  • EOS智能合约开发-智能合约编写_智能合约 eos2024-10-30 21:41:45
  • 探秘SMARTS:华为打造的智能移动机器人仿真平台2024-10-30 21:41:45
  • 全屏图片