-
Notifications
You must be signed in to change notification settings - Fork 1
/
presale.sol
91 lines (69 loc) · 2.53 KB
/
presale.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";
contract FenToken is ERC20, Ownable {
constructor (string memory name_, string memory symbol_, uint amount) ERC20(name_,symbol_) {
_mint(tx.origin,amount);
}
function decimals() public pure override returns (uint8) {
return 0;
}
}
contract PatoCompany {
FenToken public token;
struct propuesta {
string texto;
uint votoFavor;
uint votoContra;
bool cerrada;
}
mapping(uint=>propuesta) public propuestas;
mapping(uint=>mapping(address=>bool)) registroVotos;
constructor(address _token) public {
token = FenToken(_token);
}
function proponer(uint _codigo, string memory _texto) public {
propuestas[_codigo] = propuesta(_texto,0,0,false);
}
function votarSi(uint codigo) public {
require(!registroVotos[codigo][msg.sender],"ya votaste");
registroVotos[codigo][msg.sender]=true;
propuestas[codigo].votoFavor+=token.balanceOf(msg.sender);
}
function votarNo(uint codigo) public {
require(!registroVotos[codigo][msg.sender],"ya votaste");
registroVotos[codigo][msg.sender]=true;
propuestas[codigo].votoContra+=token.balanceOf(msg.sender);
}
}
contract PreSale is Ownable {
uint public saldo;
mapping(address=>uint) public aporte;
FenToken public token;
bool public liquidando;
address public empresa;
constructor(uint amount) {
FenToken _token = new FenToken("PatoSale","PTT",amount);
token = _token;
saldo=0;
liquidando=false;
PatoCompany _empresa = new PatoCompany(address(_token));
empresa= address(_empresa);
}
function aportar() payable public {
require(!liquidando,"Los aportes estan cerrados");
aporte[msg.sender] += msg.value;
saldo += msg.value;
}
function liquidar() public onlyOwner {
liquidando=true;
payable(owner()).transfer(address(this).balance);
}
function retirar() public {
require(aporte[msg.sender]>=1 ether,"No tiene voto para retirar");
uint votos = (this.saldo() / aporte[msg.sender])*100;
aporte[msg.sender]=0;
token.transfer(msg.sender,votos);
}
}