cuando desarrollo mi contrato inteligente con solidez, me encuentro con un problema. Y debajo está mi código de solidez.
pragma solidity ^0.4.0;
contract RegisterContract{
event setNewUser(bytes32 name,address etherAddr, address contractAddr,uint now);
address owner;
struct User{
bytes32 name;
address etherAddr;
address contractAddr;
}
User[] private users;
constructor() public{
owner = msg.sender;
}
modifier checkOwner(){
require(msg.sender == owner);
_;
}
function getOwner() public view returns (address){
return owner;
}
// for a new user create a contract
function registerUser(bytes32 name,address etherAddr, address contractAddr) public checkOwner{
User memory newUser;
newUser.name = name;
newUser.etherAddr = etherAddr;
newUser.contractAddr = contractAddr;
users.push(newUser);
emit setNewUser(name,etherAddr,contractAddr,now);
}
//
function setAddress(bytes32 name,address etherAddr, address contractAddr) public checkOwner{
for(uint8 i=0;i<users.length;i++){
if(users[i].name==name){
users[i].etherAddr=etherAddr;
users[i].contractAddr=contractAddr;
}
}
}
// when systems assess all user
function getUsers() public checkOwner view returns (bytes32[],address[],address[]) {
bytes32[] memory names= new bytes32[](users.length);
address[] memory etherAddr = new address[](users.length);
address[] memory contractAddr = new address[](users.length);
for(uint8 i=0;i<users.length;i++){
names[i]= users[i].name;
etherAddr[i] = users[i].etherAddr;
contractAddr[i] = users[i].contractAddr;
}
return (names,etherAddr,contractAddr);
}
//for a user who import contract
function getContractAddress(address etherAddr) public checkOwner view returns (bytes32,address) {
for(uint8 i=0;i<users.length;i++){
if(users[i].etherAddr==etherAddr){
return (users[i].name,users[i].contractAddr);
}
}
}
}
La pregunta es cuándo quiero llamar a registerUser y cuando uso web3.js llamando a registerContract.methods.registerUser(name,ethaddress,contractaddress) Se produce un error en la consola geth. el error es
Error: Transaction has been reverted by the EVM: { "blockHash": "0x45fe755c8c1f600108b55a12fa3bdf59dac0fe76d39883f23d15b2f9603d868d", "blockNumber": 22339, "contractAddress": null, "cumulativeGasUsed": 90000, "from": "0x5869c2317ce2df31cb1269d8028e9062ff470749", "gasUsed": 90000 , "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "status": false, "to": "0xc249fa432a1c659e7aa4ad57e24e405215461afa", "transactionHash": "0xb52e0fabe160070597bd40192658b6f84779d52d4b295b39295d381eb0856f2d", "transactionIndex": 0, "events": {} }falso, "a": "0xc249fa432a1c659e7aa4ad57e24e405215461afa", "transactionHash": "0xb52e0fabe160070597bd40192658b6f84779d52d4b295b39295d381eb0856f2d", "transactionIndex": 0, "transactionIndex":falso, "a": "0xc249fa432a1c659e7aa4ad57e24e405215461afa", "transactionHash": "0xb52e0fabe160070597bd40192658b6f84779d52d4b295b39295d381eb0856f2d", "transactionIndex": 0, "transactionIndex":
¿Hay algún problema cuando me dirigí a struct User y array push? ¿O hay algún problema del que no estaba al tanto en el momento en que lo desarrollé?
Mi suposición es que está configurando el límite de gas demasiado bajo: intente aumentarlo de 90000 a 1000000 y vea si la transacción se lleva a cabo.
El razonamiento es que si estaba fallando debido a:
require(msg.sender == owner);
vería que la función consumía menos gas (ya que este es el primer código que se ejecuta, y require reembolsará el gas no utilizado). El hecho de que esté usando toda su asignación de gasolina de 90,000 implica que o está golpeando una afirmación (que no tiene) o se está quedando sin gasolina.
cuando
Águila
Richard Horrocks
Hermes Keng
Rob Hitchens
for
bucles ilimitados, que es un antipatrón muy conocido.cuando
Hermes Keng