mirror of
https://github.com/status-im/contracts.git
synced 2025-02-24 04:28:51 +00:00
emoji board first version
This commit is contained in:
parent
ce466cd037
commit
e2d12e4b47
91
contracts/status/EmojiBoard.sol
Normal file
91
contracts/status/EmojiBoard.sol
Normal file
@ -0,0 +1,91 @@
|
||||
pragma solidity ^0.4.17;
|
||||
|
||||
import "../token/ERC20Token.sol";
|
||||
import "../util/EmojiTable.sol";
|
||||
import "../democracy/FeeRecycler.sol";
|
||||
|
||||
/**
|
||||
* @title EmojiBoard
|
||||
* @author Ricardo Guilherme Schmidt (Status Research & Development GmbH)
|
||||
* @dev Enables users recycling fees upon sending public emojis to addresses, causing a loose reputation board
|
||||
*/
|
||||
contract EmojiBoard {
|
||||
|
||||
EmojiTable public emojiTable;
|
||||
FeeRecycler public feeRecycler;
|
||||
mapping (address => EmojiMessage[]) public received;
|
||||
mapping (bytes32 => uint256) emojiRating;
|
||||
|
||||
struct EmojiMessage {
|
||||
address sender;
|
||||
uint256 value;
|
||||
uint32[] emojis;
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice Construct the EmojiBoard defining it's dependencies
|
||||
* @param _feeRecycler Contract that store recyclable fees
|
||||
* @param _emojiTable Contract that contain recognized unicode emoji ranges
|
||||
*/
|
||||
function EmojiBoard(FeeRecycler _feeRecycler, EmojiTable _emojiTable) public {
|
||||
feeRecycler = _feeRecycler;
|
||||
emojiTable = _emojiTable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @notice `msg.sender` writes a 5 emoji sequence to the board
|
||||
* @param _to whoever is getting the emojis
|
||||
* @param _value the value of 5 emojis being added
|
||||
* @param _emojiUnicode unicode values array represeting emoji sequence
|
||||
* @param _emojiType positions array of the emojis allowed ranges in `emojiTable`
|
||||
*/
|
||||
function write(
|
||||
address _to,
|
||||
uint256 _value,
|
||||
uint32[] _emojiUnicode,
|
||||
uint256[] _emojiType
|
||||
)
|
||||
external
|
||||
{
|
||||
write(
|
||||
msg.sender,
|
||||
_to,
|
||||
_value,
|
||||
_emojiUnicode,
|
||||
_emojiType
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev `_from` writes a 5 emoji sequence to the board
|
||||
* @param _from whoever is writing the emojis
|
||||
* @param _to whoever is getting the emojis
|
||||
* @param _value the value of 5 emojis being added
|
||||
* @param _emojiUnicode unicode values array represeting emoji sequence
|
||||
* @param _emojiType positions array of the emojis allowed ranges in `emojiTable`
|
||||
*/
|
||||
function write(
|
||||
address _from,
|
||||
address _to,
|
||||
uint256 _value,
|
||||
uint32[] _emojiUnicode,
|
||||
uint256[] _emojiType
|
||||
)
|
||||
internal
|
||||
{
|
||||
uint len = _emojiUnicode.length;
|
||||
require(_value > 0);
|
||||
require(len == 5);
|
||||
require(emojiTable.isEmojiOnly(_emojiUnicode, _emojiType));
|
||||
ERC20Token token = ERC20Token(feeRecycler.token());
|
||||
require(token.transferFrom(_from, address(this), _value));
|
||||
token.approve(feeRecycler, _value);
|
||||
feeRecycler.lock(_from, _value);
|
||||
|
||||
for (uint i; i < len; i++) {
|
||||
emojiRating[keccak256(_to,_emojiUnicode[i])] += _value; //divided by len? safeadd?
|
||||
}
|
||||
|
||||
received[_to].push(EmojiMessage(_from, _value, _emojiUnicode));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user