实验报告09orz
实验目的及要求
了解以太坊的基本逻辑,理解以太坊的运行机理。能正确进行智能合约设计开发和部署。
实验基本原理
了解智能合约设计开发和部署。熟悉工具。
实验实施环境
实验概述
在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)
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qkl-kf/7531.html