Qué impide que el receptor ejecute un contrato inteligente no deseado

He buscado en línea sobre esto, pero parece que no puedo encontrar una respuesta real.

Digamos que alguien envía un contrato inteligente a alguna dirección. ¿Qué pasa si el receptor no quiere aceptar ese contrato? ¿Cómo "niegan" el contrato o impiden su ejecución?

Por ejemplo, en los derivados financieros, dos partes acuerdan una negociación por una opción de compra. Si el comprador inicia el contrato con un precio de ejercicio incorrecto, ¿qué impide que la contraparte se vea obligada a aceptar ese precio?

Respuestas (2)

No se puede "enviar un contrato a alguien". Puede implementar un contrato en la cadena de bloques, pero las personas deben interactuar con el contrato desde su cuenta para que el contrato les afecte. Lo único que puede hacer sin el consentimiento de la parte receptora es enviarles ether, pero entonces solo está tirando su dinero.

¿Cómo sabe el receptor que los datos del contrato son correctos antes de interactuar con él?
Si no me equivoco, en realidad puede anular el comportamiento predeterminado de pago y throwen un contrato de recepción para bloquear un pago. Asimismo, un contrato puede afectar a un usuario que no sea parte del mismo. Podría escribir (si supiera cómo escribir contratos) un contrato de token ERC20 que represente acciones en una organización del mundo real e inicializar un conjunto de accionistas. Una persona, nombrada como propietario (a través de acnt), puede, en teoría, obtener un préstamo de alguien que use los tokens como garantía sin interactuar con el contrato. Incluso podría otorgar una deuda a un usuario en el token. Por lo tanto, creo que 2/3 de las declaraciones anteriores no son ciertas.
(Además, me doy cuenta de que el segundo ejemplo irrumpe en el mundo físico, pero es una razón por la que a una de las partes le gustaría negar la validez de un contrato sin haber interactuado con él en línea)
@lungj Me refería a cuentas de usuario en lugar de contratos. AFAIK, no puede evitar que alguien envíe ether a una cuenta personal (es decir, una cuenta que no tiene un código asociado). No es que haya ninguna razón para que lo haga. Y claro, alguien puede asignarle tokens ERC20 aleatorios, pero si no actúa en consecuencia, simplemente se quedarán allí. Puedes probar que nunca estuviste involucrado en ellos. Y ciertamente no puedes "darle una deuda" a alguien. Mi respuesta tenía la intención de tranquilizar al OP, ya que entendí que estaba preocupado por estar involucrado en algunas transacciones en contra de su voluntad.
Creo que tienes razón: no puedes evitar que alguien envíe ether a una cuenta. Sin embargo, puedo pensar en una razón para que lo haga: si tiene una política estricta de KYC, no querrá aceptar éter de todos los usuarios y no querrá pagar la gasolina de su bolsillo para reembolsar el monto. . Al releer la pregunta de OP, creo que tu interpretación es mejor que la que tenía antes; Pensé que el destinatario estaba siendo un agresor, no una víctima. (Además, puede otorgarle una deuda a alguien a través de blckchn. Puede hacer muchas cosas en los contratos legales. Si son ejecutables o no es otra cuestión).
¿Cómo puedes darle una deuda a alguien a través de blockchain? Quiero decir, puedes escribir un contrato falso con un balancecampo y poner una cuenta aleatoria en negativo, pero eso es equivalente a que yo escriba "me debes 1 billón de $" en una hoja de papel, en realidad no significa nada y no tiene ningún efecto legal. Si conoces una forma de hacer esto, compártela conmigo y podemos enriquecernos :p

(Supongo que por "envía un contrato inteligente a alguna dirección", quiere decir "llama a un contrato a alguna dirección") Supongamos que dos cuentas, A y B, tienen 10 éter en ellas. Si alguien llama a una función en un contrato inteligente de acuerdo con las reglas de Ethereum que, digamos, mueve 1 éter de la cuenta A a la cuenta B, entonces todos los que siguen las reglas de Ethereum estarán de acuerdo en que la cuenta A ahora tiene 9 éter y la cuenta B tiene 11 Si alguien ignorara la llamada de función que realiza la transferencia, aún pensaría que la cuenta A tiene 10 ether y la cuenta B tiene 10.

Básicamente, esto no es diferente del propietario de la cuenta A que simplemente modifica su cliente Ethereum para acreditar la cuenta A con un millón de éter de la nada. El resultado es que la cuenta A tiene una realidad subjetiva diferente a la de todos los demás.

¿Por qué importa esto? Imagínese si yo, solo, creyera que los dólares canadienses (CAD) están a la par con los dólares estadounidenses (USD) y fuera a un restaurante estadounidense y pagara con CAD al valor nominal. El resultado, como era de esperar, es que el restaurante no aceptó mi pago. El resultado sería muy diferente si el restaurante también creyera USD=CAD. Entonces aceptarían mi pago, pero nadie más aceptaría nuestro CAD a la par. Así que esto es un fuerte desincentivo para que el restaurante crea que USD = CAD, que nadie más que yo tendría esa creencia. Están fuertemente motivados para ir con lo que sea que la mayoría de la gente crea porque eso, en igualdad de condiciones, les da la mayor utilidad para su CAD y USD. Para cualquier pensador racional acotado, esto también es cierto. Por lo tanto, esperaría que todos convergieran en una creencia unificada en el valor de USD y CADpor razones egoístas . Consulte también esta pregunta sobre por qué se puede converger un valor particular para CAD y USD.

Entonces, si la cuenta B ignora la llamada a la función, ¿cómo se notifica a la cuenta A que no se llamó a la función? ¿Y cómo sabe el resto de la cadena de bloques que la cuenta B no llamó a la función y que los fondos nunca se transfirieron?
No es una cuenta la que puede decidir cambiar el registro de saldo, son los nodos de Ethereum. En lo anterior, asumo que el propietario de cada cuenta ejecuta su propio nodo. Imagina que cada nodo es un tenedor de libros. Puedo gritar "transferir 1 éter de la cuenta A (que controlo) a la cuenta B si la cuenta A tiene más de 3 éteres". Esa es una llamada de función que se transmite a la red. Y, como yo, en este ejemplo, controlo la cuenta A, tengo autorización para hacer esta transferencia.
Claro, un tenedor de libros podría optar por ignorar el hecho de que lo grité, pero ahora los libros de ese tenedor de libros están equivocados (cuando se ven desde la perspectiva de todos los demás). Si grité "agregue un millón de éter a la cuenta A", eso no está permitido por las reglas de Ethereum y solo un tenedor de libros corrupto (como uno que controlo) registraría esa transacción. Pero si intentaba gastar algo de eso (suponiendo que no tuviera un millón de éteres legítimos), otros tenedores de libros dirían: "¡Oye, espera! ¡No puedes hacer eso!" Y cualquiera que pregunte a sus tenedores de libros si recibieron el pago escuchará "no".