Solo traté de configurar un proyecto de trufas y traté de compilar un contrato que ya había escrito.
Cuando lo hago me sale el siguiente mensaje de error:
/usr/lib/node_modules/truffle/node_modules/solidity-parser/index.js:39
throw e;
^
SyntaxError: Expected "contract", "import", "library", comment, end of input, end of line or whitespace but "p" found. Line: 1, Column: 1
at peg$buildException (/usr/lib/node_modules/truffle/node_modules/solidity-parser/build/imports_parser.js:423:14)
at Object.peg$parse [as parse] (/usr/lib/node_modules/truffle/node_modules/solidity-parser/build/imports_parser.js:3355:13)
at Object.module.exports.parse (/usr/lib/node_modules/truffle/node_modules/solidity-parser/index.js:34:23)
at /usr/lib/node_modules/truffle/lib/profiler.js:134:36
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)
La primera línea de la que se queja el compilador es:
pragma solidity ^0.4.0;
Hasta donde yo sé, no hay forma de que pueda dejar salir esa línea. ¿Hay alguna solución que me permita usar Truffle con la versión más reciente de solidity?
Gracias de antemano.
Acabo de agregar support solidity 0.4.x y lancé una nueva versión de Truffle. Puede leer el anuncio aquí: https://www.reddit.com/r/ethereum/comments/574rvr/truffle_v210_now_with_solc_04x_support/
¡Salud!
Tuve el mismo problema, así que pregunté en el canal Gitter de Truffle, y esta es la respuesta que recibí:
Truffle no admitirá solc 0.4.x hasta que se lance Truffle 3.0, ya que se requieren cambios significativos en Truffle.
¡Espero que esto ayude!
No puedo saber sin el código de contexto, pero apostaría a que esto está en un modificador de función y la línea de arriba es _
.
En Solidity >= 0.4, el _
debe tener un punto y coma después.
es decir_;
También debe agregar la línea pragma sugerida en la parte superior de sus archivos, solo para que deje de quejarse.
Consulte las notas de la versión para obtener más información.
EDITAR: La solución de trabajo más corta es usar Browser Solidity ( https://ethereum.github.io/browser-solidity/ ) y simplemente decirle que use Solidity 0.3.6, luego las cosas volverán a funcionar en truffle.
Estoy luchando con el mismo problema y, finalmente , hay una solución alternativa: aún no lo he probado:
truffle migrate
y truffle build
en su proyecto de trufas sin el pragma solidity ^0.4.0;
en su contratoContract.all_networks
y cambie la dirección a la de su contrato implementado manualmente.De esta manera, podría engañar a su compilación de trufas para usar el contrato previamente bien compilado. Absolutamente ninguna garantía, tal vez alguien con una comprensión más profunda de todo esto pueda decir, si esto es completamente absurdo o una solución viable.
PD: compilar e implementar de la manera difícil: 1. $ sudo apt-get install -y solc
2. Elimine todos los saltos de línea de su código de contrato (las herramientas en línea pueden ayudar) 3. En geth
: > var myContractSource = *paste contract source without linebreaks here*
4. > var myContractCompiled = eth.compile.solidity(myContractSource)
5. > var myContract = eth.contract(myContractCompiled.theContractNameInTheSolidityCode.info.abiDefinition);
6. de nuevo sin saltos de línea y con la minería activada:
var myContractTransaction = myContract.new({
from: eth.coinbase,
data: myContractCompiled.theContractNameInTheSolidityCode.code,
value: 1000000000000000000,
gas: 1000000
},
function(err, contract) {
if (err) {
console.error(err);
} else {
console.log(contract);
console.log(contract.address);
}
});
la última dirección devuelta es la dirección de su contrato.
PPS: Nuevamente, no estoy seguro, pero tal vez a medida app.js
también deba reemplazar unlinked_binary
(bajo contract.all_networks) con lo que encuentra code:
cuando hace solo > myContractCompiled
en geth después de definir esta var. esos valores me parecen de alguna manera relacionados con la identificación de contratos.
Espero poder ser de ayuda. Esperemos la actualización de trufa..
zyam
Aniket
Robot X
Xavier Leprêtre B9lab
solc --version
da? Si uso v0.3.6, obtengo el mismo error en lapragma
línea.Robot X