Hola, ¿alguien puede decirme la diferencia entre crear un contrato usando un nuevo operador y crear un contrato pasando la dirección?
Ejemplo:
contract A{
uint256 public num = 10;
function get() returns(uint){
return num;
}
}
contract B{
function get() returns(uint){
A a = new A();
a.get();
}
}
y
contract B{
function get(address add) returns(uint){
A a = A(add);
a.get();
}
}
Si desea implementar un contrato con una nueva dirección que no existía en la red antes, podemos usar
Aa = nuevo A();
Genera la dirección a
del contract A
. Aquí a contiene la dirección del contrato que se acaba de implementar.
Si tiene una dirección de contrato que ya se implementó en la red y desea usarla en el contrato actual, debe convertirla address to contract type
. Después de esto, se reconocerá que esta dirección en particular es del tipo de dirección de contrato.
A a = A(dirección_del_contrato_A);
Esto evitará la confusión de que la dirección sea EOA
(cuenta de propiedad externa) o CA
(cuenta de contrato).
En el primer escenario, cada vez que llame B.get()
, implementará una nueva instancia de A. Si lo llama 10 veces, habrá 1 contrato B y 10 contratos A.
En el segundo escenario, el contrato A ya está implementado en algún lugar y simplemente pasa su dirección a la llamada de obtención. En este escenario, una sola instancia de A se puede usar varias veces.