Tener problemas con un contrato creando otro contrato utilizando el entorno de desarrollo de Truffle. Aquí están mis pasos -
truffle console
var node = Node.deployed()
node.then(function(instance){node=instance})
var relay = node.createRelay()
Obtener esta respuesta después de createRelay
:
{ tx:
'0x5172bd954f72d31bb73278a10343ddfbd613c4938162b5ae9574b2e173271d03',
receipt:
{ transactionHash:
'0x5172bd954f72d31bb73278a10343ddfbd613c4938162b5ae9574b2e173271d03',
transactionIndex: 0,
blockHash:
'0xcae09bb248baf2bc0cd9065c629958336874c2ae8c5b1e5fbd5f867600d63c56',
blockNumber: 40,
gasUsed: 159039,
cumulativeGasUsed: 159039,
contractAddress: null,
logs: [] },
logs: [] }
Como puedes ver, contractAddress
es null
.
Estos son mis contratos:
pragma solidity ^0.4.2;
import "./Relay.sol";
contract Node {
uint public fee;
address public owner;
address[] activeRelays;
function Node() {
owner = msg.sender;
fee = 10;
}
function createRelay () returns (address) {
address relay = new Relay();
activeRelays.push(relay);
return relay;
}
}
Relé:
pragma solidity ^0.4.2;
contract Relay {
address public owner;
function Relay() {
owner = msg.sender;
}
function fundRelay() payable returns (bool) {
}
function releaseFunds () {
}
}
Gracias por cualquier ayuda.
Falta un paso. Camino sencillo a seguir:
Primero ,address[] public publicRelays; // easy access with free getter using "public"
En segundo lugar , es normal obtener un hash de transacción cuando envía una transacción. No esperamos un resultado. Ergo, no obtendremos la dirección del contrato de esa manera.
En su lugar, espere a que se extraiga la transacción. Al principio, solo observe su nodo/minero. Cuando esté seguro de que se ha minado un bloque, entonces debería poder:
> var relay;
> node.publicRelays.call(0).then(function(response) { relay=response; });
> relay
0x123...
Es decir, 1) interrogar al publicRelay()
captador y preguntar o fila 0 (porque es una matriz). 2) Esperar la respuesta... 3) Ver la respuesta.
Espero eso ayude.
Nikita Fuchs