Testen Sie automatisch, wer Ether aus einem Smart Contract abheben kann

Gibt es eine Möglichkeit, automatisch zu testen, wer Ether aus einem Smart Contract abheben kann? Ich muss diesen Test automatisch durchführen. Daher kann ich die Anweisungen nicht manuell überprüfen.

Kann ich einen Smart Contract so gestalten, dass er einfach zu testen ist? Ich möchte sicherstellen, dass nur der Ersteller des Smart Contracts Ether über eine bestimmte Funktion abheben kann. Ich kann leicht testen, ob diese Funktion existiert, aber wie teste ich automatisch , dass keine andere Funktion existiert, durch die der Ersteller (oder eine andere Person) des Smart Contracts Ether abheben kann?

Aktualisieren :

Mir ist bewusst, wie man einen intelligenten Vertrag so gestaltet, dass nur der Ersteller Ether abheben kann. Ich muss jedoch automatisch testen, wer Ether aus einem Smart Contract abheben kann, der mir gegeben wurde.

Antworten (2)

Ein Smart Contract kann viele Funktionen haben, also müssten Sie jede davon unabhängig testen, um das zu erreichen, was Sie wollen. Sie müssten über alle möglichen Eingaben nachdenken, die den Funktionen gegeben werden können.

Einfaches TypeScript-Beispiel in einer Mocha-Testsuite:

describe("my exhaustive test suite", function() {
  it("checks that foo doesn't change the contract balance", async function() {
    const currentBalance: BigNumber = ...
    await myContract.foo();
    const balanceAfterContractCall: BigNumber = ... 
    expect(currentBalance).to.equal(balanceAfterContractCall);
  });
});

Beachten Sie, dass der Test im obigen Beispiel nicht speziell prüft, ob fookeine Auszahlungen möglich sind – er prüft nur die Gleichheit der Guthaben. Der Vertragsaufrufer könnte zwar zurücktreten, aber sofort einen entsprechenden Betrag zurücksenden. Um dies gründlich zu überprüfen, müssten Sie interne Transaktionen belauschen .

In jedem Fall suchen Sie wahrscheinlich nach formaler Überprüfung und symbolischer Ausführung, nicht nach automatisierten Methoden, um zu überprüfen, ob eine Funktion etwas tut oder nicht. Dies ist fortschrittliche Sicherheitstechnologie, die mathematisch beweisen kann, dass ein Programm das tut, was es verspricht. Weitere Einzelheiten finden Sie unter awesome-ethereum-security .

Erstellen Sie einen Eigentümer einer privaten Adressvariablen. Weisen Sie in Ihrem Konstruktor Ihre Adresse als Eigentümer zu. Erstellen Sie einen Modifikator namens isOwner. Verwenden Sie diesen Modifikator für die Abhebungsfunktion. Dadurch wird automatisch überprüft, ob die Person, die den Betrag abhebt, Eigentümer ist oder nicht.

Dies sollte in Trüffel leicht zu testen sein.

Wie teste ich automatisch, dass keine andere Funktion existiert, durch die der Ersteller (oder eine andere Person) des Smart Contracts Ether abheben kann?

Machen Sie einfach keine solche Funktion. Wenn Sie dies getan haben, verwenden Sie den Modifikator.

Ich hoffe es hilft.

Danke. Zur Klarstellung: Ich bin nicht immer der Vertragsersteller. Also muss ich testen, ob es solche anderen Auszahlungsmethoden gibt. Einfach keine solche Funktion zu erstellen, löst das Problem nicht. Daher beantwortet Ihre Antwort leider nicht meine Frage.