pragma solidity ^0.4.23;
import'./ID.sol';
import'./Whitelisted.sol';
contract IDFactory is Ownable {
Whitelisted whitelist;
event IDCreated(uint id, address idContractAddress);
mapping (uint => address) public ids;
modifier idExists(uint id) {
require(ids[id]);
_;
}
constructor() public {
owner = msg.sender;
whitelist = new Whitelisted(owner);
whitelist.addToWhitelist(owner);
}
}
Hola, estoy tratando de compilar un contrato de solidez usando trufa. El contrato se llama IDFactory.sol. Cuando ejecuto la compilación de trufas, aparece este error:
MacBook-Pro-de-Alicia-2:a alicialombarte$ truffle compile
TypeError: Error parsing /Users/alicialombarte/notary-contract/a/contracts/IDFactory.sol: Cannot read property '2' of null
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:171:1
at Array.map (<anonymous>)
at Object.parseImports (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/parser.js:167:6)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-core/~/truffle-compile/profiler.js:302:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:79:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/onlyOnce.js:12:1
at next (/usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/whilst.js:68:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/index.js:64:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/fs.js:85:1
at /usr/local/lib/node_modules/truffle/build/webpack:/~/truffle-resolver/~/async/internal/once.js:12:1
No tengo ningún '2' en mi contrato.
¡Gracias!
Aquí están los otros 2 contratos:
pragma solidity ^0.4.23;
import'./Whitelisted.sol';
contract ID{
uint id;
Whitelisted whitelist;
mapping (string => MessageData) public messages;
event MessageSaved(string messageHash);
constructor(uint _id, address _whitelist) public {
owner = msg.sender;
id = _id;
whitelist = Whitelisted(_whitelist);
}
struct MessageData {
string messageSender;
uint64 timestamp;
}
}
pragma solidity ^0.4.23;
import 'Ownable.sol';
contract Whitelisted is Ownable {
constructor(_owner) public {
owner = _owner;
}
mapping(address => bool) internal whitelistedAddresses;
function isWhitelisted(address addr) internal view returns (bool) {
return whitelistedAddresses[addr];
}
function addToWhitelist(address addr) public onlyOwner {
require(!isWhitelisted(addr));
whitelistedAddresses[addr] = true;
}
function removeFromWhitelist(address addr) public onlyOwner {
require(isWhitelisted(addr));
whitelistedAddresses[addr] = false;
}
modifier onlyWhitelisted {
require(isWhitelisted(msg.sender));
_;
}
}
Pongo todos los contratos en remix y se muestran algunos errores:
En Whitelisted
contrato:
constructor(_owner) public {
owner = _owner;
}
Debiera ser:
constructor(address _owner) public {
owner = _owner;
}
El contrato de identificación debe ser Ownable
para usar la owner
variable o puede ser Whitelisted
.
Además, tienes un mapeo
mapping (string => MessageData)
Esto usa una cadena como clave, y esto aún no está implementado en Solidity. podría definir esto como bytes32 si sus cadenas encajan. No puede usar variables de matriz dinámica como clave.
Espero esta ayuda.
Este error no es un problema con su código Solidity.
Este tipo de error lo da React.js. Parece que está modelando algún objeto e intentando acceder a su segunda propiedad. Entonces, probablemente la adquisición del objeto no esté bien hecha y el var/object sea nulo.
Por eso, cuando intenta acceder a sus propiedades, no puede hacerlo, porque no puede acceder a una propiedad nula, simplemente no tiene ninguna propiedad.
Vuelva a verificar su código React e intente encontrar el objeto nulo al que está accediendo a su segunda propiedad. Luego, intente obtenerlo de la cadena de bloques correctamente para no obtener un valor nulo en lugar de los datos correctos.
Espero eso ayude.
Jaime
alicia
Jaime