-
Notifications
You must be signed in to change notification settings - Fork 16
/
playerscore.sol
61 lines (50 loc) · 1.72 KB
/
playerscore.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
pragma solidity ^0.4.10
contract PlayerScore {
uint maxTopScores = 5;
address owner;
struct TopScore{
address addr;
int score;
}
function PlayerScore(){
owner = msg.sender;
}
TopScore[] public topScores;
mapping (address=>int) public userTopScores;
function setTopScore(int256 score, uint8 v, bytes32 r, bytes32 s) {
var hash = sha3(msg.sender, owner, score);
var addressCheck = ecrecover(hash, v, r, s);
if(addressCheck != owner) throw;
var currentTopScore = userTopScores[msg.sender];
if(currentTopScore < score){
userTopScores[msg.sender] = score;
}
if(topScores.length < maxTopScores){
var topScore = TopScore(msg.sender, score);
topScores.push(topScore);
}else{
int lowestScore = 0;
uint lowestScoreIndex = 0;
for (uint i = 0; i < topScores.length; i++)
{
TopScore currentScore = topScores[i];
if(i == 0){
lowestScore = currentScore.score;
lowestScoreIndex = i;
}else{
if(lowestScore > currentScore.score){
lowestScore = currentScore.score;
lowestScoreIndex = i;
}
}
}
if(score > lowestScore){
var newtopScore = TopScore(msg.sender, score);
topScores[lowestScoreIndex] = newtopScore;
}
}
}
function getCountTopScores() returns(uint) {
return topScores.length;
}
}