Ethereum 在Geth中复制合同代码时未定义
我正在尝试在以太坊专用网络中创建一个合同 我尝试的是: 在浏览器solidity中创建了以下合同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) {
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….
返回“未定义”是正常行为吗?