Ich habe eine ähnliche Struktur wie diese typische Fabrik.
contract Factory {
bytes32[] Names;
address[] newContracts;
function createContract (bytes32 name) {
address newContract = new Contract(name);
newContracts.push(newContract);
}
function getName (uint i) {
Contract con = Contract(newContracts[i]);
Names[i] = con.Name();
}
}
contract Contract {
bytes32 public Name;
string public numberString;
function Contract (bytes32 name) {
Name = name;
}
function setNumberString (string time){
numberString = time;
}
}
setNumberString
Ich habe dieser Struktur die Funktion und die Variable hinzugefügt numberString
, mit Web3 js habe ich dies definiert:
myContract = web3.eth.contract(ABIArray).at(contractAddress);
myContract.setNumberString(state, function(error, result){
if(!error)
console.log(result)
else
console.error(error);
})
Die ABIArray
und contractAddress
werden von „contract Contract“ erstellt, und wenn ich versuche die Funktion aufzurufen, erhalte ich diese Meldung im Browser der Dapp:
Uncaught TypeError: myContract.setNumberString is not a function
Wenn ich versuche, dies mit einem normalen Vertrag zu tun, habe ich kein Problem, was mache ich falsch? Ist es möglich, die Funktion dieses erstellten Vertrags aufzurufen?
Dies kann vorkommen, weil setNumberString
in Ihrer ABI nicht definiert ist.
Versuchen Sie, dies zu verwenden
ABIArray=[{"constant":false,"inputs":[{"name":"time","type":"string"}],"name":"setNumberString","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"Name","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numberString","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"name","type":"bytes32"}],"payable":false,"type":"constructor"}];
Gawey
string public numberString;
? mitmyContract.numberString
? oder muss ich das ABI-Array erneut ändern?Badr Bellaj