Javascript 我得到了这个错误;错误:无效地址……”;在运行我的dapp时
我正在为我的私有区块链Quorum开发一个简单的dapp。我用Solidity和JavaScript编写了智能合约 在运行区块链和JavaScript控制台后,我做了以下工作: 我得到了一个错误: 错误:无效地址 在web3.js:3930:15 在web3.js:3756:20 在web3.js:5025:28 at映射(Javascript 我得到了这个错误;错误:无效地址……”;在运行我的dapp时,javascript,blockchain,smartcontracts,quorum,Javascript,Blockchain,Smartcontracts,Quorum,我正在为我的私有区块链Quorum开发一个简单的dapp。我用Solidity和JavaScript编写了智能合约 在运行区块链和JavaScript控制台后,我做了以下工作: 我得到了一个错误: 错误:无效地址 在web3.js:3930:15 在web3.js:3756:20 在web3.js:5025:28 at映射() 在web3.js:5024:12 在web3.js:5050:18 在web3.js:5075:23 在web3.js:4137:16 我的智能合约是这样的: prag
pragma solidity >=0.4.0 <0.7.5;
contract MyContract {
int value;
constructor() public{
value=10;
}
function get() public view returns(int) {
return value;
}
function set(int value2) public {
value=value2;
}
}
a = eth.accounts[0]
web3.eth.defaultAccount = a;
// Risultato del comando > solcjs --bin --abi MyContract.sol
var abi = [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"get","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"value2","type":"int256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}];
var bytecode = "0x60806040523480156100115760006000fd5b505b600a60006000508190909055505b610026565b60db806100346000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c80636d4ce63c14603c578063e5c19b2d146058576036565b60006000fd5b60426084565b6040518082815260200191505060405180910390f35b608260048036036020811015606d5760006000fd5b81019080803590602001909291905050506095565b005b600060006000505490506092565b90565b8060006000508190909055505b5056fea264697066735822122032710d493b7bc22bd80599320435533d8a94bf485e2b4c09f9ba2b0dd44acb4964736f6c63430007040033";
// Creazione del nuovo contratto con nome MyContract
var simpleContract = web3.eth.contract(abi);
var simple = simpleContract.new({from:web3.eth.accounts[0], data: bytecode, gas: 0x47b760, privateFor: ["QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc="]}, function(e, contract) {
if (e) {
console.log("Error creating contract", e);
} else {
if (!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
}
});
我可以试着解决这个问题吗?我认为问题在于ABI中有一个小错误,
get()
函数应该在ABI中有“常量”:true
,因为该函数被标记为视图
如果没有这一点,get()
函数需要为事务定义from
地址(即,您必须使用private.get({“from”:fromAddress})
或使用web3.eth.defaultAccount=accountAddress
设置默认帐户)
如果您纠正了ABI,那么它应该可以工作。如果您将智能合约和脚本粘贴为文本而不是图像,那么任何人都可以更轻松地尝试找到问题。是的,这是真的!我使用以下命令计算我的abi:solcjs--bin--abi MyContract.sol是否正确?好的,您正在使用的solidity编译器版本和geth之间似乎不兼容。我使用的是solcjs版本0.5.0,我在abi中看到了
常量
关键字。这里有更多信息:我怀疑您使用的是0.6*或更高版本。您可以将solcj版本降级为0.5.*或者在编译时指定目标EVM,例如:“solcjs--EVM version伊斯坦布尔--bin--abi MyContract.sol”我尝试使用命令“solcjs--EVM version伊斯坦布尔--bin--abi MyContract.sol”,但结果是一样的!:失望:同样的错误只是在这里添加了松弛对话的结果:解决方案是在编译合同时将evm版本设置为constantinople
。所以下面的命令修复了它:solcjs--evm版本君士坦丁堡--bin--abi MyContract.sol“