¿Por qué mi primer contrato original que contiene setters y gettters no aparece cuando pulso implementar?

pragma solidity ^0.4.24;

contract Bank{
    uint private value;

    constructor(uint amount) public{
        value = amount;
    }
    function deposit(uint amount) public{
        value += amount;
    }

    function withdraw(uint amount) public{
        value -= amount;
    }

    function balance()view public returns (uint){
        return value;
    }
}

contract MyFirstContract is Bank(10){
    string private name;
    uint8 private age;

    function setName(string _name) public {
        name = _name;
    }

    function getName()view public returns(string){
        return name;
    }

    function setAge(uint8 _age) public{
        age = _age;
    }

    function getAge() view public returns (uint8){
        return age;
    }

}
¿Puede describir los pasos que toma para implementar, el resultado esperado y cómo el resultado real difiere del esperado?
@Rob Hitchens B9lab Antes de crear el "banco de contratos{", creé "MyFirstContract" y todo se mostró perfectamente. El objetivo es mostrar el saldo del banco y tener "contrato MyFirstContract" dentro de "contrato bancario". En este momento, mi saldo bancario se muestra como 10 "contrato Miprimercontrato es banco (10)". aparece todo el saldo. El depósito y el retiro se pueden cambiar como se esperaba, pero mi saldo bancario no aparece como 10, sino que dice 0. Soy bastante nuevo en solidity, así que si me disculpo con anticipación si mi respuesta es confusa.

Respuestas (1)

Según su comentario, creo que está confundiendo herencia e interacción.

Parece que espera MyFirstContractinteractuar con una Bankinteracción entre dos contratos independientes. Este es un error común porque la sintaxis es similar. Para que la interacción funcione, MyFirstContractserá necesario conocer la ABI del Bankcontrato, así como su dirección para poder interactuar con ella.

Su código usa herencia para asignar las propiedades de a Banka MyFirstContract. MyFirstContracttiene todas las funciones Banke ignora el otro Bankcontrato que implementó.

El siguiente código lo cambia a una interacción. He eliminado preocupaciones no relacionadas para mayor claridad. Puedes verlo funcionando por:

  1. Implementar un banco (una vez)
  2. Implemente un MyFirstContract y pase la dirección del paso 1.
  3. invocar depositInBank()enMyFirstContract
  4. Compruébalo Bank.value()y verás que se actualiza.

-

pragma solidity ^0.4.24;

contract Bank{
    uint private value;

    constructor(uint amount) public{
        value = amount;
    }
    function deposit(uint amount) public{
        value += amount;
    }

    function withdraw(uint amount) public{
        value -= amount;
    }

    function balance()view public returns (uint){
        return value;
    }
}

contract MyFirstContract { // No inheritance. This client is not a Bank.

    Bank b; // But it needs knowledge of the Bank, so cast b as a contract, Bank. This is how this contract learns the ABI for the Bank

    constructor(address bankAddress) public {
        b = Bank(bankAddress); // instantiate b at the deployed address. Now we can interact with it. 
    }

    // invoke a function in the other contract

    function depositInBank(uint amount) public {
        b.deposit(amount);
    }

}

Espero eso ayude.