Existe la forma estándar de crear instancias de contrato con la new
palabra 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 new
palabra 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í. `
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 address
to MyContract
para 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
.