Envía el 1% de Ethereum vendido por una cuenta a otra

Hice un arreglo con un amigo en el que accedió a darme el 1% de todo el Ethereum que venda en el momento de la venta. Así que posee 100 Ether hoy; en 1 año va a vender 10 Ether, me enviarían 0.1 Ether de su cuenta en ese momento.

¿Cómo haría para capturar esto en un contrato de Ethereum? no me queda claro:

  1. Cómo "alcanzar" su cuenta para obtener el 1% de su venta; ¿Supongo que necesitaría colocar el 1% de su Ethereum en alguna cuenta de "fideicomiso" por adelantado?
  2. Cómo "activar" un contrato de Ethereum sobre la base de algún otro evento en la cadena de bloques (en particular, el envío de Ether desde alguna dirección en particular).

Soy totalmente nuevo en Ethereum, así que disculpe si me equivoco en algunas de las palabras/conceptos.

Respuestas (1)

Su mejor apuesta sería crear un contrato que divida el dinero a medida que se retira. Para hacer esto, básicamente crearía un contrato que solo le permite a su amigo retirar dinero, pero cada vez que lo hace, envía el 1% del monto del retiro a su dirección.

Luego enviaría sus 100 ETH al contrato, sabiendo que puede recuperarlos en cualquier momento, pero al hacerlo le paga el 1% que acordó.

Probablemente se vería algo como esto:

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 {}
}

No usaría ese código directamente, ya que probablemente haya algunos casos extremos en los que valga la pena pensar. Tomé nota de uno, al menos. Es posible que tampoco se ajuste a sus necesidades, pero se debe aplicar el concepto central: para hacer cumplir tal restricción en el desembolso de ETH, el ETH debe ser propiedad del contrato y los eventos que le interesan (en particular) , también deben ser gestionados por el contrato.

Esto es lo que yo propondría. Pero también recuerda que esto resta beneficiaryAmountpor lo que el amigo recibirá 9.9 ETH. Tampoco esto le impide hacer la venta fuera del contrato.
El punto sería que los 100 ETH que posee su amigo entran en este contrato tan pronto como se hace el acuerdo, por lo que la única forma en que puede recuperarlos es tomando la penalización del 1% en cada retiro. Es probable que los dos puedan hacer arreglos para que se reembolse ese 1% si el retiro no es para vender ETH.
Sí, la comisión se puede manejar de múltiples maneras. Pero el mayor problema aquí es rastrear la venta de Ether. ¿Qué sucede cuando finaliza el 100ETH y pasan a nuevas ventas? Necesitamos un mecanismo adicional para obligar al amigo a depositar nuevos éteres en el contrato también, o hacer que los destinatarios solo acepten transacciones -internas- del contrato. De todos modos, estos son problemas relacionados con el arreglo en sí, y no su respuesta. Tampoco tengo ninguna respuesta para esto :)
El arreglo original parecía ser solo por 100 ETH; además, el contrato que escribí permite que depositar más ETH esté sujeto a las mismas reglas. El arbitraje del contrato y la ejecución de circunstancias fuera de su definición se encuentran fuera del ámbito de la cadena de bloques, como cualquier otro contrato.