Ich möchte, dass eine Funktion für eine bestimmte Zeit gesperrt wird. Was ist der sicherste Weg, dies zu erreichen?

tokenOwnerIch möchte einen Laden, in dem jemand für eine bestimmte Zeit werden kann . Die folgenden Lösungen scheinen die einfachsten zu sein:

pragma solidity ^0.4.24;

import "../node_modules/zeppelin-solidity/contracts/ownership/Ownable.sol";

contract PromotedDapp is Ownable{

    uint price;
    address tokenOwner;
    uint nextOwnerAllowed;

    constructor() public {
        owner = msg.sender;
    }

    function becomeOwner() public {
        require(now >= nextOwner);
        nextOwnerAllowed = now + 604800; // In a week
        tokenOwner = msg.sender;
    }

}

Ich weiß, dass eine andere Option darin besteht, mit blockHeight zu arbeiten, da ein Block +/- alle 10 Sekunden geprägt wird. Was wäre ein Grund, blockHeight im Laufe der Zeit in Sekunden zu wählen?

Korrektur: Etwa alle 10 Sekunden wird ein Block abgebaut .
Du hast vollkommen recht, editiert.

Antworten (1)

Zeit ist eine interessante Sache in der Blockchain. Die beiden Möglichkeiten sind die Verwendung der Zeit (oder des Zeitstempels) und der Blockhöhe.

Die Blocknummer wird im Allgemeinen nicht empfohlen, da die durchschnittliche Blockzeit 15 Sekunden beträgt. Da es sich um einen Durchschnitt handelt, bedeutet dies, dass Blöcke kürzer (1 s) oder länger (1 min+) sein können. Abhängig von Ihrer Anwendung kann diese Abweichung Ihre Berechnungen durcheinander bringen. Während die Blockzeiten jetzt ~15 Sekunden betragen, kann sich dies in Zukunft aufgrund der Eiszeit oder möglicher zukünftiger Upgrades ändern, die diese Zahl reduzieren. Auch hier ist es fast nie eine gute Idee, die Blocknummer zu verwenden.

Zeitstempel werden im Allgemeinen in Code wie diesem empfohlen. Zeitstempel auf Ethereum werden von den Bergleuten in jedem Block gesendet, den sie abbauen. Es gibt diesbezügliche Regeln, um böswillige Aktionen zu vermeiden: Bergleute können keinen Zeitstempel senden, der kleiner als der im vorherigen Block ist, und sie können keinen Zeitstempel senden, der größer als 15 Sekunden in der Zukunft ist. Aufgrund dieser Grenzen ist die Verwendung eines soliden Zeitstempels eine viel bessere Wahl.

Es hört sich so an, als wären Zeitstempel für meine App sicher der beste Weg, ein Spielraum von 15 Sekunden würde keine Rolle spielen. Vielen Dank Shane :)