Holen Sie sich die Zeit, zu der ein Block abgebaut wurde

Mein Frontend zeigt die Zeitstempel verschiedener Vertragsaktionen an, die stattgefunden haben.

block.timestampDer verwendete Strom ist jedoch nicht sehr genau, da der Miner einen gewissen Spielraum bei der Einstellung hat.

Kann ein Front-End einen genauen Zeitstempel eines Blocks erhalten, der bereits abgebaut wurde? Anstatt uns also auf einen Vertrag zu verlassen, um block.timestampbei einer Veranstaltung auszutreten, können wir einfach einen Dritten nach getTimestampForBlock(blockNumber)?

Scheint verschwenderisch block.timestampin einem Ereignis ausgegeben zu werden, wenn diese Daten nachträglich abgefragt werden sollten ... Gibt es eine andere Möglichkeit, Zeitstempel für Transaktionen aufzuzeichnen / darauf zuzugreifen?

Antworten (1)

Dies beantwortet Ihre Frage nicht wirklich, sondern erklärt, warum ich nicht denke, dass die Alternativen nicht viel besser sind als block.timestamp.

Der block.timestampWert wird, wie Sie wissen, vom Miner festgelegt. Der Zeitstempel darf jedoch nicht zu weit aus dem Gleichgewicht geraten, da er sonst vom Netzwerk abgelehnt wird. Nehmen wir also an, dass die Uhr eines Miners langsam läuft (so dass die Zeit auf dem Zeitstempel in der Vergangenheit liegt) und einen Block schürft. Die meisten Knoten, die diesen Block empfangen, haben keine Möglichkeit zu wissen, ob sie einfach zu spät von dem Block hören (weil es viele Hops brauchte, um anzukommen) oder ob die Uhr des anderen Knotens langsam ist. Nur eine Einheit, die in der Lage ist, fast die gesamten Knoten des Netzwerks zu überwachen, kann feststellen, woher ein Block stammt und ob der Zeitstempel etwas hinterherhinkt.

Umgekehrt, wenn die Uhr des Bergmanns etwas schnell ist, können einige Knoten sehen, dass der Zeitstempel in der Zukunft liegt. Aber andere werden es erhalten, wenn es ein bisschen abgestanden ist. Aber Miner, die es schnell erhalten, wissen nicht wirklich, ob sie es schnell erhalten haben. Sie müssten also andere Knoten abfragen, um zu wissen, ob sie es zu einem früheren Zeitstempel als ihrer eigenen Zeit erhalten haben. Und so weiter. Durch diese Logik wird der Knoten, der die früheste Sichtung des Knotens meldet, als derjenige angesehen, der den Block zuerst empfangen hat. Aber die Uhr dieses Knotens könnte langsam gelaufen sein. Das ist also fast nicht mehr von dem Fall zu unterscheiden, in dem Miner sehen, dass der Block in der Vergangenheit angekommen ist (außer in diesem Fall wissen sie, dass die Uhr des Miners vorgeht).

Daher können einige Nodes, weil sie ihren eigenen Uhren vertrauen, nur wissen, dass die Uhr eines Miners schnell ist, aber nicht um wie viel. Sie können nicht mit Sicherheit wissen, ohne allgegenwärtig zu sein, ob die Uhr eines Bergmanns nachgeht. Leider bedeutet dies, dass Sie als Benutzer des von einem Drittanbieter bereitgestellten Zeitstempels auf genau das gleiche Problem stoßen, es sei denn, Sie können seinen Uhren vertrauen! Das Beste, was Sie tun können, ist, eine maximale Untergrenze für die Zeit festzulegen, zu der ein Block abgebaut wurde, indem Sie Ihren eigenen Knoten ausführen.