Traté de compilar el siguiente contrato dentro de geth
:
pragma solidity ^0.4.8;
contract Test {
uint256 public value;
function Test() {
value = 123;
}
}
usando los siguientes comandos en la fuente aplanada:
> var testSource = "pragma solidity ^0.4.8; contract Test { uint256 public value; function Test() { value = 123; } }";
undefined
> var testCompiled = web3.eth.compile.solidity(testSource);
Error: The method eth_compileSolidity does not exist/is not available
at web3.js:3104:20
at web3.js:6191:15
at web3.js:5004:36
at <anonymous>:1:20
Como se describe en eth_compilers, eth_compileSolidity desaparecieron en go-ethereum 1.6.0 #3793 , la capacidad de compilar la fuente de Solidity se eliminó desde dentro geth
.
¿Cómo puedo compilar mi código fuente de Solidity?
Use Remix de https://ethereum.github.io/browser-solidity :
Copie las instrucciones de implementación de Web3 de la página de Remix:
var untitled_testContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]);
var untitled_test = untitled_testContract.new(
{
from: web3.eth.accounts[0],
data: '0x60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820a4fac284b98d43538f802082b0db8c67ddd6d72df4e8d9fbccb4cec0e52ea0df0029',
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
Y pégalo en el geth console
con una cuenta desbloqueada:
> personal.unlockAccount(eth.accounts[0], "{top secret password}");
true
> var untitled_testContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]);
"0xe22dc29e3e05d3206d9636ae7cba87a2827e7b3ef28c6e8e6d2ad49a14ba3ce9"
var untitled_test = untitled_testContract.new(
{
from: web3.eth.accounts[0],
data: '0x60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820a4fac284b98d43538f802082b0db8c67ddd6d72df4e8d9fbccb4cec0e52ea0df0029',
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
$ more Test.sol
pragma solidity ^0.4.8;
contract Test {
uint256 public value;
function Test() {
value = 123;
}
}
Compile Test.sol en formato .json, asigne los datos a una variable de JavaScript y envíe el resultado a un archivo:
$ echo "var testOutput=`solc --optimize --combined-json abi,bin,interface Test.sol`" > test.js
$ cat test.js
var testOutput={"contracts":{"Test.sol:Test":{"abi":"[{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"}]","bin":"60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820d0e71d151634ac6ae7626860a17881104022e5cd6d3a088eb8f941d9aa8e3bd20029"}},"version":"0.4.9+commit.364da425.Darwin.appleclang"}
En geth
, cargue el contenido de test.js:
$ geth console
...
> loadScript("test.js")
true
> testOutput
{
contracts: {
Test.sol:Test: {
abi: "[{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"}]",
bin: "60606040523415600b57fe5b5b607b6000819055505b5b608f806100246000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514603a575bfe5b3415604157fe5b6047605d565b6040518082815260200191505060405180910390f35b600054815600a165627a7a72305820d0e71d151634ac6ae7626860a17881104022e5cd6d3a088eb8f941d9aa8e3bd20029"
}
},
version: "0.4.9+commit.364da425.Darwin.appleclang"
}
> testOutput.contracts
{
abi: "[{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"}]",
...
> var testContract = web3.eth.contract(JSON.parse(testOutput.contracts["Test.sol:Test"].abi));
undefined
> personal.unlockAccount(eth.accounts[0], "{top secret password}");
true
> var test = testContract.new({ from: eth.accounts[0], data: "0x" + testOutput.contracts["Test.sol:Test"].bin, gas: 4700000},
function (e, contract) {
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
}
);
...
WEB3DEPLOY
secciónMe he encontrado con el mismo problema recientemente. Hay una variedad de soluciones, pero este es el método que he empleado. Este no es necesariamente el mejor enfoque.
Para generar código de bytes:
> solc --bin soliditySource.sol
Para generar ABI:
> solc --abi soliditySource.sol
Luego, con su recién generado bytecode
y abi
, en geth 1.6:
var abi = <abi from solc>;
var myContract = eth.contract(abi);
var bytecode = '0x' + <bytecode from solc>;
var txDeploy = {from:eth.coinbase, data: bytecode, gas: 1000000};
var myContractPartialInstance = myContract.new(txDeploy);
// Mine block containing transaction...
var myContractInstance = myContract.at(myContractPartialInstance.address);
JSON.parse
. Además, es posible que la cuenta deba desbloquearse primero con, por ejemplo. personal.unlockAccount(eth.accounts[0])
.Tal vez considere descargar el truffle
marco en su lugar. Con el framework truffle, puedo compilar pero también almacenar mis archivos fácilmente (lo hace por mí).
Una vez que haya descargado truffle
con el comando
npm i -g truffle
puede compilar fácilmente usando el comando truffle compile
.
Después de golpearme la cabeza con documentos desactualizados durante unos días, hice una versión súper simple aquí que podría ayudar: https://alanbuxton.wordpress.com/2017/07/19/first-steps-with-ethereum -redes-privadas-y-contratos-inteligentes-en-ubuntu-16-04/
Debido a que geth desaprobó la interfaz del compilador de línea de comandos después de la versión 1.6, estuve desconcertado durante mucho tiempo. Escribí un tutorial simple para describir cómo compilar e implementar un contrato después de geth1.6. Espero que este tutorial te ayude. Contrato de depoly en la cadena privada
Construyendo un contrato inteligente usando la línea de comando https://www.ethereum.org/greeter
sunil kumar
privacidadisahumanright.eth