¿Necesita publicar el contrato ABI y la dirección para que otros interactúen con el contrato?

Suponga que escribe un contrato con el que desea que otros interactúen. Tengo entendido que si desea que otros interactúen con su contrato, debe proporcionar el ABI y la dirección del contrato. ¿Es esto correcto?

Si es así, ¿publicaría el ABI y la dirección del contrato en un lugar específico para que las personas lo usen, de modo que puedan interactuar con él? ¿Publicarías el código para que la gente pudiera compilar el contrato y obtener el ABI?

O , ¿es posible interactuar con un contrato simplemente sabiendo su dirección/hash?

pero ¿por qué algunos otros contratos... podemos interactuar simplemente sin conocer su ABI? por ejemplo, contrato de dados donde podríamos simplemente enviar ether a su contrato?

Respuestas (1)

Sí, para que las personas interactúen con su contrato, querrá publicar el ABI y la dirección del contrato.

Para ser más confiable, también publicaría el código fuente de su contrato (y la versión del compilador y las banderas del compilador utilizadas), para que las personas puedan verificar por sí mismas que lo que se implementa en la dirección coincide con el código fuente. Al proporcionar el código fuente y la versión del compilador que usó, las personas también podrán generar la ABI por sí mismas.

Si no proporciona la ABI (o el código fuente y los detalles del compilador), las personas no podrán interactuar con su contrato fácilmente: tendrían que aplicar ingeniería inversa a su contrato desde el código de bytes para tratar de averiguar cuál es su función. nombres y parámetros son.

¿Cómo verifica que un contrato se creó realmente con un código fuente determinado? Hasta donde yo sé, la ABI solo contiene los métodos, sus entradas y salidas y los eventos definidos. Entonces, incluso si el ABI coincide, aún podría haber cambios en lo que realmente hacen los métodos, ¿verdad? ¿Hay alguna forma de verificar lo que sucede dentro de los métodos?
@Max: Tienes razón, el ABI es limitado, pero con el código fuente puedes compilarlo y compararlo con la cadena de bloques como en ethereum.stackexchange.com/questions/195/…