Wie kann mit web3.py festgestellt werden, wann die Token dieses Vertrags entsperrt sind? (Vertragscode beigefügt)

Derzeit sind die Token dieses Vertrags gesperrt. Ich möchte herausfinden können, wann die Token dieses Vertrags in meinem Python-Skript übertragbar geworden sind. Ich verwende web3.py für diese Arbeit.

Link zum Vertrag: https://etherscan.io/address/0x971d048e737619884f2df75e31c7eb6412392328#code

Es scheint ein transferLockArgument im Vertrag zu geben, das die Übertragung der Token verhindert. Es gibt auch wenige andere Argumente und Funktionen, die etwas Ähnliches zu tun scheinen.

Kann mir jemand dabei helfen herauszufinden, wie ich feststellen kann, wann der Vertragsinhaber die Tokens entsperrt hat?

Ich würde empfehlen, die relevanten Funktionen/Variablen in diese Frage zu kopieren. Außerdem wurden die Python-Tags entfernt, da dies wirklich eine Frage der Solidität ist.
@carver Eigentlich versuche ich herauszufinden, ob die Token aus meinem Python-Skript übertragbar sind. Ich verwende zu diesem Zweck eine Python-Bibliothek namens web3.py. Da der Sperrmechanismus jedoch programmiererabhängig ist, muss ich das Vertragsskript verstehen. Das ist der Grund für die Verknüpfung mit dem Vertragscode. In jedem Fall muss die Lösung Python-Code mit der web3.py-Schnittstelle sein. Ich habe die Tags erneut hinzugefügt und die Frage ein wenig geändert, um sie klarer zu machen. Lassen Sie mich wissen, wenn Sie immer noch ein Problem damit sehen.

Antworten (1)

Es scheint zwei verschiedene Schlösser in diesem Vertrag zu geben.

Die erste ist eine globale Sperre namens transferLock, die in diesem Modifikator verwendet wird:

modifier canTransfer() {
    if (msg.sender != owner) {
        require(!transferLock);
    }
    _;
}

Auf jede Funktion mit dem canTransferModifikator kann der Eigentümer nur zugreifen, wenn transferLock = true.

Es gibt eine weitere Eigenschaft unlocked, die auf dem Gruppenobjekt lebt und überprüfen soll, ob die Token in dieser Gruppe gesperrt sind. Ich sehe jedoch keine relevante Verwendung.

Außerdem scheint es einen Fehler im Code für diese Eigenschaft zu geben:

function relockGroup(uint256 groupNumber) public onlyOwner returns(bool success) {
    groups[groupNumber].unlocked = true;
    return true;
}

Fühlt sich an, als ob diese Funktion gesetzt werden sollte groups[groupNumber].unlocked = false, und ich sehe keine Möglichkeit, eine Gruppe "zurückzusperren", nachdem sie entsperrt wurde.

Diese beiden Eigenschaften können hier auf Etherscan abgefragt oder gefunden werden:

https://etherscan.io/address/0x971d048e737619884f2df75e31c7eb6412392328#readContract

Eigentlich möchte ich mein Python-Skript einchecken, wenn dieses Token entsperrt ist. Ich verwende web3.py. Ich hatte dies in meiner Frage mit relevanten Tags erwähnt, die später entfernt wurden. Da die Verträge nur gelesen werden sollen, bin ich mir über den Entsperrvorgang nicht sicher. Und wie bestimme ich nach dem Entsperren den Status des Tokens aus meinem Python-Skript? Danke schön.
Sie können die Vertrags-ABI und die Vertragsadresse verwenden, um die Eigenschaft von zu lesen transferLock. Sie sollten den Code teilen, wie weit Sie gekommen sind, und dann können wir Ihnen leicht helfen, den Rest auszufüllen.
Danke schön. Das musste ich wissen. Wenn es Ihnen nichts ausmacht, können Sie mir sagen, wie das Entsperren in diesem Fall möglich ist, obwohl der Smart Contract unveränderlich sein soll? Der Code, der besagt, dass transferLockTrue ist, sollte also nicht in False geändert werden können, ist das nicht das, was unveränderlich bedeutet?
Es gibt eine Funktion im aufgerufenen Vertrag setGlobalLock(bool value), die es dem Eigentümer ermöglicht, den Sperrwert entweder auf trueoder zu setzen false. Der Vertragscode ist unveränderlich, aber die darin enthaltenen Variablen können den Status ändern, sonst wäre es keine sehr nützliche Plattform zum Schreiben von Programmen, oder?