SmartBillions kontrakt ulepszony: Wystartował Hackathon 2.0
Kontrakt SmartBillions został ulepszony i oficjalnie otwieramy drugą rundę hackathon-a.
1500 ETH zostało przelane na adres kontraktu, aby sprawdzić bezpieczeństwo poprawek, które zostały wprowadzone.
Adres kontraktu:
https://etherscan.io/address/0x103c2c150a2dbcc277ee084c59881978060c8c22Lista zmian:
1. Funkcja transferFrom: możesz wysyłać tylko posiadane tokeny
2. Funkcja addHashes: inicjacja bazy danych jest bezpieczniejsza
3. Funkcja hotStore: każdy może złożyć depozyt do kontraktu
4. Funkcja coldStore: w szczególnym wypadku admin może wyciągnąć pieniądze, kiedy ponad 50% tokenów zostanie wypłaconych. Kwota wypłaty przez admina jest zlimitowana to "niewykorzystanych środków", czyli nie może wyciągnąć środków inwestorów i zarejestrowanych dla wygranych
5. Funkcja won: w przypadku błędu bazy danych nie zostanie wywołana
6. Funkcja play: w bazie danych zostaje przechowywanych więcej informacji po stronie użytkownika
Nagroda Hackathon-a została przelana na smart kontrakt poprzez użycie funkcji hotStore z 6 różnych adresów ETH. Ta sama funkcja pozwala każdemu na zdeponowanie pieniędzy, a później ich wypłatę używając funkcji "won".
Nagroda 1500 ETH zostanie wypłacona przez admina w 2 przypadkach:
1. Jeżeli zostanie znaleziony kolejny błąd i Hacker nie wypłaci całości nagrody, pozostała część zostanie wypłacona przez admina.
2. Jeżeli nagroda zostanie nietknięta przed startem projektu, na to samo konto admin będzie mógł wypłacić dokładnie tą samą kwotę w późniejszej fazie.
Fundusz zebrany poczas ICO jest zabezpieczony przez smart kontrakt. Wypłata przez admina jest możliwa tylko w szczególnych wypadkach.
function coldStore(uint _amount) external onlyOwner
{
houseKeeping();
require(_amount > 0 && this.balance >= (investBalance * 9 / 10) + walletBalance + _amount);
if(investBalance >= investBalanceGot / 2){ // additional jackpot protection
require((_amount <= this.balance / 400) && coldStoreLast + 4 60 24 * 7 <= block.number);
}
msg.sender.transfer(_amount);
coldStoreLast = block.number;
}
Ta linijka kodu:
require(_amount > 0 && this.balance >= (investBalance * 9 / 10) + walletBalance + _amount);
gwarantuje, że admin nigdy nie będzie mógł wypłacić 90% funduszy zebranych w czasie fazy ICO.