¿Qué pasa con las llamadas que puede hacer de manera segura en el constructor?

De hecho, hay más de una discusión sobre cuáles son las llamadas que puede hacer de manera segura en el constructor.

Alguien piensa "evitar todas las llamadas externas", otros dicen "evitar usar 'esto' o dirección (esto)" en el constructor, otros están preocupados por usar 'esto' después de 'nuevo', otros quieren introducir advertencias y errores para el uso 'esto' y así sucesivamente.

En GitHub/Ethereum existen páginas y páginas sobre esto, pero faltan conclusiones verdaderas.

¿Cuál es la práctica recomendada en Solidity? ¿Existe alguna lista/hoja de trucos sobre eso?

EDITAR: se agregaron algunos ejemplos de tales discusiones según la sugerencia de Smarx

https://github.com/ethereum/solidity/issues/583

https://github.com/ethereum/solidity/pull/3875

https://github.com/ethereum/solidity/issues/3843

https://github.com/ethereum/solidity/issues/3861

https://github.com/ethereum/solidity/pull/1646#issuecomment-305026348

Sería de ayuda si pudieras vincular a donde lees esas cosas.
Tienes razón, lo haré lo antes posible.

Respuestas (1)

en una solidez constructor:

  • thises la dirección del contrato que se está construyendo. (incluso después de usar newo llamar a una función externa de otro contrato)

  • msg.senderes la dirección de quien o lo que sea que esté desplegando el contrato. (cuenta de usuario u otro contrato usando new)

  • No puede llamar a funciones externas en un contrato que se está construyendo (por ejemplo, this.foo();dentro de la función constructora se revertirá la transacción de creación del contrato)

  • Puede llamar funciones internas del contrato que se está construyendo. Dentro de esa función interna, thisy msg.sendertendrá los mismos valores que tenían en el constructor.

En un constructor, puede implementar de forma segura nuevos contratos o llamar a funciones externas en otros contratos que ya se han construido.

Parte de la confusión en las discusiones que vinculó se basa en this.foo();que la función constructora falla silenciosamente. Este ya no es el caso.

Gracias. Este tipo de respuesta operativa es muy útil aquí. ¿Podemos agregar algo sobre la necesidad de usar () en modificadores sin argumentos usados ​​en el constructor? ¿Todavía es necesario?
@RickPark No necesita agregar ()un modificador con 0 argumentos cuando lo usa en constructoro en un function. Sin embargo, puedes hacerlo si quieres. ahora es opcional
@RickPark Sí, la ()llamada a un constructor base sin argumentos también es opcional, al igual que los modificadores. El constructor base se ejecutará de la misma forma en ambos casos, con o sin el()
La discusión fue porque, por el contrario, el error de sintaxis sale cuando los () no se usaban en modificadores sin argumentos cuando se aplicaban al constructor. Por supuesto, si el error de sintaxis no aparece, el código no puede ser diferente...