Estoy intentando compilar el siguiente contrato usando la consola geth adjunta a una instancia de testrpc:
contract UnitCounter {
mapping (address => uint256) public UnitsFrom;
uint256 public TotalUnits;
function submitUnits(uint256 Units) {
UnitsFrom[msg.sender] = Units;
TotalUnits += Units;
}
}
Después de ejecutar testrpc y conectar:
testrpc -a 1000
Adjunté una cosole geth
geth attach rpc:http://localhost:8545
e hizo lo siguiente:
> eth.getCompilers()
["solidity"]
> co=eth.compile.solidity("contract UnitCounter {mapping (address => uint256) public UnitsFrom;uint256 public TotalUnits;function SubmitUnits(uint256 Units) {UnitsFrom[msg.sender] = Units;TotalUnits += Units;}}")
Lo que da este error:
Error: Invalid JSON RPC response: {"error":{"code":-32603,"json: cannot unmarshal array into Go value of type string":"json: cannot unmarshal array into Go value of type string"},"id":11,"version":"2.0"}
at web3.js:3119:20
at web3.js:6023:15
at web3.js:4995:36
at <anonymous>:1:4
¿Qué significa este error? ¿Qué pasos debo seguir para depurar?
Puede utilizar tcpdump
para interceptar la comunicación entre geth
y testrpc
.
Esto volcará todos los paquetes que pasan por la interfaz loopback lo
desde/hacia el puerto 8545:
$ sudo tcpdump -A -i lo port 8545
Ahora puede ejecutar el eth.compile.solidity(..)
comando en la consola geth y obtener una solicitud y respuesta JSON-RPC:
solicitud
{
"jsonrpc": "2.0",
"id": 14,
"method": "eth_compileSolidity",
"params": [
"contract UnitCounter {mapping (address => uint256) public UnitsFrom;uint256 public TotalUnits;function SubmitUnits(uint256 Units) {UnitsFrom[msg.sender] = Units;TotalUnits += Units;}}"
]
}
respuesta
{
"id": 14,
"jsonrpc": "2.0",
"error": {
"message": [
":1:1: Warning: Source file does not specify required compiler version!Consider adding \"pragma solidity ^0.4.4\ncontract UnitCounter {mapping (address => uint256) public UnitsFrom;uint256 public TotalUnits;function SubmitUnits(uint256 Units) {UnitsFrom[msg.sender] = Units;TotalUnits += Units;}}\n^-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^\n"
],
"code": -32000
}
}
Formulario aquí se puede ver que:
pragma solidity ^0.4.4;
en su códigotestrpc
devuelve una respuesta mal formada ( error.message
debe ser una cadena pero se proporciona una matriz, consulte la especificación JSON-RPC )
mikko ohtamaa
solc
la versión de línea de comando para compilar su contrato localmente. Aquí hay algunos ejemplos: tokenmarket.net/blog/…