Ethereum 在Geth中复制合同代码时未定义

Ethereum 在Geth中复制合同代码时未定义,ethereum,solidity,smartcontracts,geth,Ethereum,Solidity,Smartcontracts,Geth,我正在尝试在以太坊专用网络中创建一个合同 我尝试的是: 在浏览器solidity中创建了以下合同 pragma solidity ^0.4.19; contract SingleNumRegister { uint storedData; function set(uint x) public { storedData = x; } function get() public constant returns (uint retVal) {

我正在尝试在以太坊专用网络中创建一个合同

我尝试的是:

在浏览器solidity中创建了以下合同

pragma solidity ^0.4.19;

contract SingleNumRegister {
    uint storedData;
    function set(uint x) public {
        storedData = x;
    }
    function get() public constant returns (uint retVal)  {
        return storedData;
    }
}
并复制了web3部署代码,如下所示

var singlenumregisterContract = 
web3.eth.contract([{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]);
var singlenumregister = singlenumregisterContract.new(
{
     from: web3.eth.accounts[0], 
     data: '0x6060604052341561000f57600080fd5b60d38061001d6000396000f3006060604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c14606e575b600080fd5b3415605857600080fd5b606c60048080359060200190919050506094565b005b3415607857600080fd5b607e609e565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820cc0de7aa0d676f08b124d9f878aeecd0c305703a9d59ccde63b557dd8585dfcb0029', 
     gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
     console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
然后,在控制台中复制

> personal.unlockAccount(eth.accounts[0])
Unlock account 0x24636f1423f131f5441fbee83323c53c59af247d
Passphrase: 
true
> var singlenumregisterContract = 
web3.eth.contract([{"constant":false,"inputs":
[{"name":"x","type":"uint256"}],"name":"set","outputs":
[],"payable":false,"stateMutability":"nonpayable","type":"function"},
{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]);
undefined
>
> var singlenumregister = singlenumregisterContract.new(
...    {
......      from: web3.eth.accounts[0], 
......      data: '0x6060604052341561000f57600080fd5b60d38061001d6000396000f3006060604052600436106049576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806360fe47b114604e5780636d4ce63c14606e575b600080fd5b3415605857600080fd5b606c60048080359060200190919050506094565b005b3415607857600080fd5b607e609e565b6040518082815260200191505060405180910390f35b8060008190555050565b600080549050905600a165627a7a72305820cc0de7aa0d676f08b124d9f878aeecd0c305703a9d59ccde63b557dd8585dfcb0029', 
......      gas: '4700000'
......    }, function (e, contract){
......     console.log(e, contract);
......     if (typeof contract.address !== 'undefined') {
.........          console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
.........     }
......  })
null [object Object]
undefined
> 
如上所述,两个脚本都没有定义

我怎样才能解决这个问题

我使用以下环境:

  • MacOSX 10.12.6
  • Geth:1.7.3-稳定
  • Solc:0.4.19+commit.c4cbbb05.Darwin.appleclang

您需要
JSON.parse()
您的ABI

var jsonAbi = JSON.parse('[{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]');

var singlenumregisterContract = web3.eth.contract(jsonAbi);

谢谢你的回答。我尝试并意识到我甚至不能定义
var=“test”
。我在网上搜索了一下,但没有找到任何答案。我不理解你的评论。什么是var=“test”?在添加JSON解析后,我在控制台中运行了您的代码,它运行得很好。合同地雷!地址:0xc39b2048db8c32677f8a7739dbd591363651552b事务哈希:0xbd14e36069196d4d004c03b577c99735159fe293f363092f4b82ab87a9a065aeI意思是
>var jsonAbi=JSON。Geth控制台中的parse…
也返回未定义的。所以我尝试了
>var x=“test”
,它也返回undefined。我做错了吗?有点。“undefined”是变量声明的结果,而不是变量本身的值。键入
x
。您应该会看到“测试”返回。再次感谢。我可以成功获得合同地址!但是
var….
返回“未定义”是正常行为吗?