200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 区块链实验九 :智能合约开发

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

时间:2023-03-26 04:47:38

相关推荐

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

实验报告09orz

实验目的及要求实验基本原理实验实施环境实验概述实验内容在remix网页中,编译部署简单投票合约(选作)深入理解solidity

实验目的及要求

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

实验基本原理

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

实验实施环境

Firefox & Metamask插件扩展

Remix网页:

实验概述

在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; } } } }

运行结果截图:

(选作)深入理解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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。