¿Cómo se crea una nueva instancia de contrato con una dirección *y* argumentos?

Existe la forma estándar de crear instancias de contrato con la newpalabra clave donde pasa argumentos como:

MyContract mine = new MyContract(arg1, arg2);

Luego hay otra forma, como en este ejemplo donde se crea una instancia de contrato en una dirección determinada, sin la newpalabra clave, pero sin argumentos, así:

MyContract mine = MyContract(address);

¿Cómo creo una instancia de contrato en una dirección determinada (como el segundo ejemplo) y con los argumentos que quiero (como el primer ejemplo)?

Soy nuevo en esto, lo siento si estoy malinterpretando algo aquí. `

Respuestas (2)

no puedes

En el primer ejemplo, no está simplemente instanciando un contrato que está allí. Está implementando una nueva instancia y pasando argumentos a la función constructora. Los constructores se ejecutan una sola vez, por diseño, y ni siquiera se incluyen en el código de bytes implementado (porque no se pueden ejecutar de nuevo).

En el segundo ejemplo, está instanciando un contrato que ya existe. No hay necesidad ni posible uso de argumentos porque el contrato ya está implementado y el constructor no se puede ejecutar nuevamente.

Espero eso ayude.

El segundo ejemplo es crear una instancia del contrato en una dirección específica que ya existe en la cadena de bloques. Pasas el addressto MyContractpara decirle al EVM dónde buscar al ejecutar el código.

Para llamar a una función en este contrato, hará referencia al nombre que le dio (en este caso, mine) y llamará a la función usando eso. Aquí es donde puede pasar los parámetros deseados.

Entonces un ejemplo sería:

MyContract mine = MyContract(0x1234)
uint256 number = mine.squareTheNumber(2) // number = 4

En este ejemplo, está llamando a la squareTheNumber(uint256)función en mine.