Javascript 我得到了这个错误;错误:无效地址……”;在运行我的dapp时

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

我正在为我的私有区块链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

我的智能合约是这样的:

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“