Senden Sie 1 % des von einem Konto verkauften Ethereum an ein anderes

Ich habe mit einem Freund eine Vereinbarung getroffen, in der er zugestimmt hat, mir 1 % aller Ethereum zu geben, die er zum Zeitpunkt des Verkaufs verkauft. Er besitzt also heute 100 Ether; In 1 Jahr verkauft er 10 Ether, ich würde in diesem Moment 0,1 Ether von seinem Konto erhalten.

Wie würde ich vorgehen, um dies in einem Ethereum-Vertrag festzuhalten? Mir ist unklar:

  1. Wie man sein Konto "erreicht", um 1 % seines Umsatzes zu erhalten; Ich vermute, dass er 1 % seines Ethereums im Voraus auf ein „Treuhandkonto“ hinterlegen müsste?
  2. Wie man einen Ethereum-Vertrag auf der Grundlage eines anderen Ereignisses in der Blockchain „auslöst“ (insbesondere das Senden von Ether von einer bestimmten Adresse).

Ich bin völlig neu bei Ethereum, also verzeihen Sie mir, wenn ich einige Formulierungen/Konzepte falsch verstehe.

Antworten (1)

Am besten erstellen Sie einen Vertrag, der das Geld bei der Auszahlung aufteilt. Um dies zu tun, würden Sie im Grunde einen Vertrag erstellen, der nur Ihrem Freund die Auszahlung erlaubt – aber jedes Mal, wenn er dies tut, sendet er 1 % des Auszahlungsbetrags an Ihre Adresse.

Er würde dann seine 100 ETH an den Vertrag senden, wissend, dass er sie jederzeit abrufen kann, aber dabei zahlt er Ihnen die 1%, die er vereinbart hat.

Das würde vermutlich so aussehen:

contract Siphon {
  address private _owner;
  address private _beneficiary;

  modifier onlyOwner {
    if (msg.sender != owner) {
      throw;
    }
    _;
  }

  // alternatively, use the sender to be the owner, so the owner
  // is the deployer.
  function Siphon(address owner, address beneficiary) payable {
    _owner = owner;
    _beneficiary = beneficiary;
  }

  function withdraw(uint256 amount) onlyOwner {
    // note that integer division means amounts less than 100
    // would have no payout
    uint256 beneficiaryAmount = amount / 100;
    if (beneficiaryAmount > 0) {
      if (!_beneficiary.send(beneficiaryAmount)) {
        throw;
      }
    }
    if (!owner.send(amount - beneficiaryAmount)) {
      throw;
    }
  }

  // allow deposits
  function () payable onlyOwner {}
}

Ich würde diesen Code nicht sofort verwenden, da es wahrscheinlich einige Grenzfälle gibt, über die es sich lohnt nachzudenken. Ich habe mir zumindest einen notiert. Es passt möglicherweise auch nicht ganz zu Ihren Bedürfnissen, aber das Kernkonzept sollte gelten: Um eine solche Beschränkung der Auszahlung von ETH durchzusetzen, muss die ETH im Besitz des Vertrags sein, und die Veranstaltungen, an denen Sie interessiert sind (insbesondere) , müssen ebenfalls vertraglich geregelt werden.

Das würde ich vorschlagen. Denken Sie aber auch daran, dass dies abgezogen wird, beneficiaryAmountsodass der Freund 9,9 ETH erhält. Auch dies hindert ihn nicht daran, den Verkauf außerhalb des Vertrages zu tätigen.
Der Punkt wäre, dass die 100 ETH, die sein Freund besitzt, in diesen Vertrag eingehen, sobald die Vereinbarung getroffen wurde – die einzige Möglichkeit, sie wieder herauszuholen, besteht darin, die Strafe von 1 % bei jeder Auszahlung zu übernehmen. Die beiden können wahrscheinlich veranlassen, dass diese 1% zurückerstattet werden, wenn die Auszahlung nicht dem Zweck des Verkaufs der ETH dient.
Ja, die Provision kann auf verschiedene Weise abgewickelt werden. Aber das größere Problem hier ist, den Verkauf von Ether zu verfolgen. Was passiert, wenn die 100 ETH fertig sind und sie zu neuen Verkäufen übergehen? Wir brauchen einen zusätzlichen Mechanismus, um den Freund zu zwingen, auch neue Ether in den Vertrag einzuzahlen, oder die Empfänger dazu zu bringen, nur -interne- Transaktionen aus dem Vertrag zu akzeptieren. Wie auch immer, dies sind Probleme im Zusammenhang mit der Anordnung selbst und nicht Ihre Antwort. Darauf habe ich auch keine Antwort :)
Die ursprüngliche Vereinbarung schien nur für 100 ETH zu gelten – plus, der Vertrag, den ich geschrieben habe, erlaubt es, mehr ETH einzuzahlen, um den gleichen Regeln zu unterliegen. Die Schlichtung des Vertrags und die Durchsetzung von Umständen außerhalb seiner Definition liegen außerhalb des Bereichs der Blockchain – wie jeder andere Vertrag.