申明:本文转自学习视频bilibiliUp主:夏夜書
参考文章:
[1].https://blog.csdn.net/aaa19890808/article/details/79342259/
[2]https://blog.csdn.net/qq_33829547/article/details/80459480?utm_source=blogxgwz0
源码取自:https://github.com/xieyueshu/Billboard/blob/master/Billboard_test.sol
基于新版的remix开发Remix-Ethereum
一.代码讲解
pragma solidity >=0.4.22 <0.7.0;//solidity版本👌
/**
* @title Billboard
* @dev App Billboard
*/
contract Billboard {
struct App {
//定义一个app的结构体包含app的名字,开发者地址,评分的星星数
string name;
address owner;
uint8[] stars;
mapping(address => uint256) starOf;//难点【1】mapping
uint totalStar;//打分总数
}
App[] public apps;
/**
* @dev Publish an app.
* 发布一个app的方法
*/
function publish(string memory name) public {
//难点【2】memory*函数中声明并创建结构体需要使用memory关键字
apps.push(
App(
name,
msg.sender,
new uint8[](1),0));//注意点,这里把数组第一个占有可以避免同一个用户打分两次原因暂时没搞懂
}
/**
* @dev Star an app.
* 给app打分的方法
*/
function star(uint appId,uint8 num) public {
//传入评分的id号,和评分的星星数
require(num>=1 && num <=5);//设置两个要求来判断打分的合法性。1.打分必须在1-5
require(apps[appId].starOf[msg.sender]==0);//没有理解
App storage app = apps[appId];
app.stars.push(num);
app.totalStar += num;
app.starOf[msg.sender]=app.stars.length-1;
}
function top() public view returns (uint[