Was verhindert, dass ein unerwünschter Smart Contract vom Empfänger ausgeführt wird

Ich habe online danach gesucht, aber ich kann anscheinend keine wirkliche Antwort finden.

Angenommen, jemand sendet einen Smart Contract an eine Adresse. Was ist, wenn der Empfänger diesen Vertrag nicht annehmen möchte? Wie „leugnen“ sie den Vertrag oder verhindern dessen Ausführung?

Beispielsweise wird bei Finanzderivaten ein Handel für eine Call-Option zwischen zwei Parteien vereinbart. Wenn der Käufer den Kontrakt mit dem falschen Ausübungspreis einleitet, was hindert die Gegenpartei daran, diesen Preis zu akzeptieren?

Antworten (2)

Sie können nicht "einen Vertrag an jemanden senden". Sie können einen Vertrag auf der Blockchain bereitstellen, aber die Leute müssen mit dem Vertrag von ihrem Konto aus interagieren, damit der Vertrag sie betrifft. Das Einzige, was Sie ohne die Zustimmung des Empfängers tun können, ist, ihm Ether zu schicken, aber dann werfen Sie nur Ihr Geld weg.

Woher weiß der Empfänger, dass die Daten im Vertrag korrekt sind, bevor er damit interagiert?
Wenn ich mich nicht irre, können Sie das standardmäßige Zahlungsverhalten tatsächlich überschreiben und throwin einem Empfangsvertrag eine Zahlung sperren. Ein Vertrag kann auch einen Benutzer betreffen, der nicht an ihm beteiligt ist. Ich könnte (wenn ich wüsste, wie man Verträge schreibt) einen ERC20-Token-Vertrag schreiben, der Anteile an einer realen Organisation darstellt, und eine Gruppe von Aktionären initialisieren. Eine Person, die als Eigentümer (über acnt) genannt wird, kann theoretisch einen Kredit von jemandem erhalten, der die Token als Sicherheit verwendet, ohne mit dem Vertrag zu interagieren. Sie könnten einem Benutzer sogar eine Schuld in dem Token geben. Daher denke ich, dass 2/3 der obigen Aussagen nicht wahr sind.
(Mir ist auch klar, dass das zweite Beispiel in die physische Welt ausbricht, aber es ist ein Grund, warum eine Partei die Gültigkeit eines Vertrags leugnen möchte, ohne online damit interagiert zu haben.)
@lungj Ich bezog mich auf Benutzerkonten im Gegensatz zu Verträgen. AFAIK, Sie können niemanden daran hindern, Ether an ein persönliches Konto zu senden (dh ein Konto, dem kein Code zugeordnet ist). Nicht, dass es einen Grund dafür gäbe. Und sicher, jemand kann Ihnen zufällige ERC20-Token zuweisen, aber wenn Sie nicht darauf reagieren, sitzen sie einfach da. Sie können nachweisen, dass Sie nie daran beteiligt waren. Und Sie können sicherlich niemandem „eine Schuld geben“. Meine Antwort sollte das OP beruhigen, da ich verstand, dass er besorgt war, gegen seinen Willen an einigen Transaktionen beteiligt zu sein.
Ich denke, Sie haben Recht - Sie können niemanden daran hindern, Ether an ein Konto zu senden. Ich kann mir jedoch einen Grund dafür vorstellen: Wenn Sie eine strenge KYC-Richtlinie haben, möchten Sie nicht von allen Benutzern Ether akzeptieren und Sie möchten nicht aus eigener Tasche für Gas bezahlen, um den Betrag zu erstatten . Beim erneuten Lesen der Frage von OP denke ich, dass Ihre Interpretation besser ist als die, die ich zuvor hatte. Ich dachte, der Empfänger sei ein Angreifer, kein Opfer. (Außerdem können Sie jemandem über blckchn Schulden machen. Sie können viele Dinge in legalen Verträgen tun. Ob sie durchsetzbar sind oder nicht, ist eine andere Frage.)
Wie kann man jemandem über Blockchain Schulden machen? Ich meine, Sie können einen falschen Vertrag mit einem balanceFeld schreiben und ein beliebiges Konto ins Negative schreiben, aber das ist gleichbedeutend damit, dass ich "Sie schulden mir 1 Milliarde $" auf ein Stück Papier schreibe, es bedeutet nicht wirklich etwas und es hat keine Rechtswirkung. Wenn Sie eine Möglichkeit kennen, dies zu tun, teilen Sie es mir bitte mit und wir können reich werden :p

(Ich nehme an, Sie meinen mit "sendet einen Smart Contract an eine Adresse", "ruft einen Vertrag an einer Adresse an") Angenommen, zwei Konten, A und B, haben beide 10 Ether in sich. Wenn jemand eine Funktion in einem Smart Contract nach den Regeln von Ethereum aufruft, die beispielsweise 1 Ether von Konto A auf Konto B verschiebt, dann werden alle, die die Ethereum-Regeln befolgen, zustimmen, dass Konto A jetzt 9 Ether und Konto B 11 hat Wenn jemand den Funktionsaufruf ignorieren würde, der die Überweisung durchführt, würde er immer noch denken, dass Konto A 10 Ether und Konto B 10 hat.

Dies unterscheidet sich im Grunde nicht davon, dass der Besitzer von Konto A seinen Ethereum-Kunden einfach so ändert, dass er Konto A aus dem Nichts eine Million Ether gutschreibt. Das Ergebnis ist, dass Konto A eine andere subjektive Realität hat als alle anderen.

Warum ist das wichtig? Stellen Sie sich vor, ich würde alleine glauben, dass kanadische Dollar (CAD) den US-Dollar (USD) ebenbürtig sind, und ich ginge in ein US-Restaurant und bezahlte mit CAD zum Nennwert. Das Ergebnis war, wie zu erwarten, dass das Restaurant meine Zahlung nicht akzeptierte. Das Ergebnis wäre ganz anders, wenn das Restaurant auch an USD=CAD glauben würde. Dann würden sie meine Zahlung akzeptieren, aber niemand sonst würde unseren CAD auf Augenhöhe akzeptieren. Das ist also ein starker Hemmschuh für das Restaurant, zu glauben, dass USD = CAD – dass niemand außer mir diesen Glauben haben würde. Sie sind stark motiviert, sich an das zu halten, woran die Mehrheit der Menschen glaubt, denn das bringt ihnen, wenn alle anderen gleich sind, den größten Nutzen für ihren CAD und USD. Für jeden beschränkt rationalen Denker gilt dies ebenfalls. Daher würden Sie erwarten, dass sich alle auf einen einheitlichen Glauben an den Wert von USD und CAD einigenaus egoistischen Gründen . Siehe auch diese Frage , warum ein bestimmter Wert für CAD und USD konvergiert werden kann.

Wenn also Konto B den Funktionsaufruf ignoriert, wie wird Konto A benachrichtigt, dass die Funktion nicht aufgerufen wurde? Und woher weiß der Rest der Blockchain, dass die Funktion nicht von Konto B aufgerufen wurde und das Geld nie überwiesen wurde?
Es ist kein Konto , das entscheiden kann, den Kontostand zu ändern, es sind die Ethereum-Knoten. Oben gehe ich davon aus, dass der Besitzer jedes Kontos seinen eigenen Knoten betreibt. Stellen Sie sich vor, dass jeder Knoten ein Buchhalter ist. Ich kann schreien: „Übertrage 1 Äther von Konto A (das ich kontrolliere) auf Konto B, wenn Konto A mehr als 3 Äther hat.“ Das ist ein Funktionsaufruf, der an das Netzwerk gesendet wird. Und da ich in diesem Beispiel Konto A kontrolliere, habe ich die Berechtigung, diese Überweisung vorzunehmen.
Sicher, ein Buchhalter könnte die Tatsache ignorieren, dass ich es herausgeschrien habe, aber jetzt sind die Bücher des Buchhalters falsch (wenn sie aus der Perspektive aller anderen betrachtet werden). Wenn ich schreien würde: „Add a million ether to account A“, ist das nach den Regeln von Ethereum nicht erlaubt und nur ein korrupter Buchhalter (wie einer, den ich kontrolliere) würde diese Transaktion aufzeichnen. Aber wenn ich versuchen würde, etwas davon auszugeben (vorausgesetzt, ich hätte nicht bereits rechtmäßig eine Million Ether), würden andere Buchhalter sagen: „Hey, warte! Das kannst du nicht tun!“ Und jeder, der seine Buchhalter fragt, ob sie eine Zahlung erhalten haben, würde ein „Nein“ hören.