Estoy tratando de implementar un contrato a través de mi front-end a través de la API web3. Sin embargo, nada parece compilarse y no hay una dirección de contrato o ABI para interactuar con el contrato implementado (si está implementado) y recuperar información (es decir, la cadena "petros"). También probé el código fuente como una cadena de una línea. A continuación se muestra mi código:
var source = "" +
"contract demo {\n" +
" string public name = 'Petros';\n" +
" function changeName(string _newName){\n" +
" name = _newName;\n" +
" }\n" +
"}\n";
var compiled = web3.eth.compile.solidity(source,
function(err,res){ //necessary callback function
console.log(JSON.stringify(res));
});
Primero verifique si ha instalado Solc: solc --version
luego, si su código no funciona, intente usar el siguiente en su lugar:
var source = 'contract demo {string public name = "Petros"; function changeName(string _newName){name = _newName; } }';
var compiled = web3.eth.compile.solidity(source);
console.log(compiled);
Ahora el web3.eth.compile.solidity
ha sido eliminado. No funciona. Hay un error si lo llamas.
Error: The method eth_compileSolidity does not exist/is not available
Por favor revise la página. https://github.com/ethereum/web3.js/issues/1000 Y puede usar Remix, o solcjs en nodejs, o solc binary. Consulte el documento, http://solidity.readthedocs.io/en/develop/installing-solidity.html
RESPONDER:
var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));
var source = 'contract demo {string public name = "Petros"; function changeName(string _newName){name = _newName; } }';
var compiled = web3.eth.compile.solidity(source);
var abi = compiled['<stdin>:demo'].info.abiDefinition;
Dado que web3.eth.compile.solidity ha quedado obsoleto, necesitamos implementar nuestros contratos inteligentes fuera de geth. Esto se puede lograr mediante el uso de solc.
Desplegando contrato usando solc:
npm i solc
Cree un archivo para implementar: deployment_Hello_World.js
const fs = require('fs');
const solc = require('solc');
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider(http://localhost:8545));
const input = fs.readFileSync('/path/to/HelloWorld.sol');
const output = solc.compile(input.toString(), 1);
const bytecode = output.contracts[':HelloWorld'].bytecode;
const abi = JSON.parse(output.contracts[':HelloWorld'].interface);
const gasEstimate = web3.eth.estimateGas({ data: '0x' + bytecode });
const contract = web3.eth.contract(abi);
contract.new({ data: '0x' + bytecode, from: web3.eth.coinbase, gas: gasEstimate }, (err, res) => {
if (err) {
console.log(err);
return;
} else {
if (res.address) {
console.log('Deployed contract address: ' + res.address);
}
}
});
Narendranath Reddy
PetrosM