Wie werden Aufrufe und Transaktionen von web3-Vertragsfunktionen durchgeführt?

Tut mir leid, wenn das wie eine Anfängerfrage klingt, aber nachdem ich viel Material durchgelesen habe, habe ich einige Fragen.

Erstens, wenn ein Vertrag bereits erstellt wurde, kann ich seine Funktionen aufrufen, wenn ich seine ABI & Adresse kenne? Ich denke, contract(ABI).at(contractAddress)tut dies, aber ich fand die Beschreibung eher zweideutig.

Zweitens, wenn ich web3 durch direkten Bibliotheksimport ohne MetaMask oder Mist ausführe, wenn ich einen Funktionsaufruf initiiere, wer ist der msg.sender? Wenn MetaMask oder Mist ausgeführt werden, ist die msg.senderWallet derzeit angemeldet?

Wenn ich schließlich eine Browser-DApp erstellen möchte, wie stelle ich sicher, dass einige Funktionen nur von der DApp und von niemand anderem aufgerufen werden können (nicht einmal vom Eigentümer)?

Vielen Dank im Voraus!

Antworten (1)

1- Wenn Sie die Adresse und die ABI kennen, können Sie die Vertragsfunktion aufrufen, wie im offiziellen Dokument beschrieben:

// creation of contract object
var MyContract = web3.eth.contract(abi);

// initiate contract for an address
var myContractInstance = MyContract.at('0x78e97bcc5b5dd9ed228fed7a4887c0d7287344a9');

var result = myContractInstance.myConstantMethod('myParam');
console.log(result) // '0x25434534534'

myContractInstance.myStateChangingMethod('someParam1', 23, {value: 200, gas: 2000}, function(err, result){ ... });

2-msg sender ist die Adresse des Nachrichten-//Anrufabsenders. Wenn Sie also eine Ethereum-Brieftasche verwenden, wird die Kontoadresse mit Ihrer Nachricht gesendet (wie eine IP).

3-dazu einen Modifikator verwenden:

modifier isAllowed() {
   if (msg.sender != allowed_address) {
        throw;
    }

    _;
}
Vielen Dank für die Lösung meiner ersten beiden Fragen. In Bezug auf die dritte bedeutet das auch, dass ich mich als Inhaber der Adresse anmelden und die Methode ebenfalls verwenden könnte, richtig? Gibt es eine Möglichkeit sicherzustellen, dass nur die App die Funktionen aufrufen kann? Wenn nicht, würden Investoren immer noch auf die Integrität der App vertrauen, wenn eine Adresse, die mit den Dapps verwendet werden soll, in der Lage wäre, einen signifikanten Funktionsaufruf zu tätigen? (können ihre Bilanzen nicht negativ, sondern nur positiv verändern)
Sie müssen die erlaubte Adresse definieren, von der aus Sie die Funktionen aufrufen können, sonst schlägt der Aufruf fehl. Normalerweise schreiben wir solche Fähigkeiten der Person zu, die den Vertrag bereitgestellt hat (eine Art Administrator), aber nur um einige grundlegende Aktionen auszuführen, wie z. B. das Beenden des Vertrags (im Falle von Sicherheitslücken). Wenn Sie über Token-Kontrakte sprechen, rate ich Ihnen, sich über das ERC20-Konzept zu informieren.
Mein Token ist bereits ERC 223-konform, das Problem ist, dass der Betrag, den ein bestimmter Benutzer von der „Bank“ abheben darf, nur von den Dapps vorgegeben werden sollte. Wenn nicht, gibt es keine Gewissheit, dass der Besitzer es nicht böswillig verwenden kann.
Tut mir leid, aber ich habe nicht verstanden, was Sie brauchen. Würden Sie das näher erläutern?
Nehmen wir an, Sie haben eine Bank. Sie zahlen Geld darauf ein. Dies kann über den Vertrag selbst erfolgen. Nachdem Sie das Geld eingezahlt haben, verwenden Sie ein Dapp, das ändern kann, wie viel Geld Sie "eingezahlt" haben (Die Einzahlung bezieht sich hier auf den Betrag, der von der ERC20-Standardzuschussfunktion (Adresse, Adresse) zurückgegeben wird, wobei die erste Adresse die des Vertrags ist Adresse.). Ich möchte, dass nur der Dapp ändern kann, wie viel Geld Sie eingezahlt haben (was bedeutet, dass nur der Dapp und der Vertrag die Genehmigungsfunktion des Vertrags aufrufen können).
Es geht nicht um die Dapp, sondern um das Konto, auf dem sie ausgeführt wird. Jeder kann Ihren Vertrag verwenden und die Funktionen aufrufen, aber die Modifikatoren, die auf der Anruferadresse basieren, könnten Ihnen helfen, die Zugriffskontrollrichtlinie zu definieren.