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;
}
}
Según su comentario, creo que está confundiendo herencia e interacción.
Parece que espera MyFirstContract
interactuar con una Bank
interacción entre dos contratos independientes. Este es un error común porque la sintaxis es similar. Para que la interacción funcione, MyFirstContract
será necesario conocer la ABI del Bank
contrato, así como su dirección para poder interactuar con ella.
Su código usa herencia para asignar las propiedades de a Bank
a MyFirstContract
. MyFirstContract
tiene todas las funciones Bank
e ignora el otro Bank
contrato que implementó.
El siguiente código lo cambia a una interacción. He eliminado preocupaciones no relacionadas para mayor claridad. Puedes verlo funcionando por:
depositInBank()
enMyFirstContract
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.
Rob Hitchens
xavi