Diferencia entre crear contrato con y sin usar nuevo

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();
    }
}

Respuestas (2)

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 adel 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.