contrato invocar otra función de contrato

  • Versión de paridad : 1.6.8
  • Sistema operativo : Mac OS
  • E instalado : ventana acoplable

comienza en

--desarrollo de cadena

aquí está el contrato de prueba A

contract A {
    mapping (address => uint256) balances;
    function testFunc1(address _to, uint256 _value) {
        balances[_to] += _value;
    }
    function testFunc2(address _to, uint256 _value) {
        balances[_to] += 1;
        balances[_to] += 1;
    }
    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }
}

aquí está el contrato de invocador B

contract B {
    function testSend1(address _contract, address _to, uint256 _value) {
        _contract.call.gas(400000)(bytes4(keccak256("testFunc1(address,uint256)")), _to, _value);
    }
    function testSend2(address _contract, address _to, uint256 _value) {
        _contract.call.gas(400000)(bytes4(keccak256("testFunc2(address,uint256)")), _to, _value);
    }
}
  • ejecutar testFunc1 y testFunc2 de A funciona
  • ejecutar testSend1 de B es trabajo
  • ¿Por qué ejecutar testSend2 de B no pasó nada? 【en realidad, la dirección seleccionada debería hacer +2 en los saldos】

¿Qué tiene de malo mi código de contrato?

Respuestas (1)

Oh lo tengo.

contract_A_address.call

debería ser:

A a = A(contrato_A_dirección);

a.testFunc2(_a, _valor);

No olvides marcar tu pregunta como aceptada.