Ethereum 与部署的以太坊/仲裁协议交互
我正在尝试使用Ethereum 与部署的以太坊/仲裁协议交互,ethereum,web3js,quorum,Ethereum,Web3js,Quorum,我正在尝试使用solc版本0.5.1和web3版本1.0.0-beta.36在私有以太坊中部署合同(使用RAFT的Quorum,但只执行public tx)编号合同已部署,并且在收到收据时返回合同地址 虽然看起来很麻烦,但为了更容易再现,我已经在这里编写了所有代码。我遇到的问题是在最后一块(与合同交互) 这里的问题是,当您执行最后一块代码时,契约实际上尚未部署 您需要在on()块中执行对getNum()的调用,例如: .on('收据',(收据)=>{ console.log(“合同已创建,地址
solc版本0.5.1
和web3版本1.0.0-beta.36在私有以太坊中部署合同(使用RAFT的Quorum,但只执行public tx)<代码>编号
合同已部署,并且在收到收据时返回合同地址
虽然看起来很麻烦,但为了更容易再现,我已经在这里编写了所有代码。我遇到的问题是在最后一块(与合同交互)
这里的问题是,当您执行最后一块代码时,契约实际上尚未部署
您需要在on()
块中执行对getNum()的调用,例如:
.on('收据',(收据)=>{
console.log(“合同已创建,地址=”,receive.contractAddress)
performGetNum(收据.合同地址)
})
函数performGetNum(合同地址){
sampleContract.options.address=合同地址
sampleContract.methods.getNum()调用({
发件人:“0xed9d02e382b34818e88b88a309c7fe71e65f419d”,
气体:0x47b760
},(错误,数据)=>{
err?console.log(err):console.log(“getNum()返回值:”,数据)
})
}
const solc = require('solc');
const Web3 = require('web3');
const input = {
language: 'Solidity',
sources: {
solContract: {
content: `
pragma solidity ^0.5.1;
contract Number {
uint private num = 100;
function getNum() public view returns(uint) {
return num;
}
function setNum(uint _num) public returns(bool success) {
num = _num;
return true;
}
}`
}
},
settings: {
outputSelection: {
'*': {
'*': ['*']
}
}
}
}
const output = JSON.parse(solc.compile(JSON.stringify(input)))
const abi = output.contracts.solContract.Number.abi
const bytecode = `0x${output.contracts.solContract.Number.evm.bytecode.object}`
const web3 = new Web3('http://127.0.0.1:8555');
const privateKey = '0x82f74b773d7f948153d7eb8c192bd9819e3e94073d8bdc0e03d659aa42cd34ba';
// const account = web3.eth.accounts.privateKeyToAccount(privateKey);
const contract = new web3.eth.Contract(abi);
web3.eth.personal.unlockAccount('0x27f4cD26d7e4eAde2052ec5B61f6594D1481C4A2', 'passwordstring', 600)
.then(
contract.deploy({
data: bytecode,
arguments: []
})
.send({
from: '0x27f4cD26d7e4eAde2052ec5B61f6594D1481C4A2',
gas: 0x47b760
}, (error, transactionHash) => {
if (error) {
console.log(error)
} else if (transactionHash) {
web3.eth.getTransaction(transactionHash)
.then((data) => {
console.log(data)
})
}
})
.on('receipt', (receipt) => {
console.log(receipt.contractAddress)
}))
// Interacting with deployed contract
// contract address returned from above
// 0x101ea6703717Fa3CF70e96FD3C84FE74ddca50eB
contract.options.address = '0x101ea6703717Fa3CF70e96FD3C84FE74ddca50eB'
contract.methods.getNum().call({
from: 0x27f4cD26d7e4eAde2052ec5B61f6594D1481C4A2,
gas: 0x47b760
}, (err, data) => {
err ? console.log(err) : console.log(data)
})