我把一份智能合同部署到了一个天蓝色的权威证明网络(Ethereum)上。按照这里的说明( https://docs.microsoft.com/en-us/azure/blockchain/templates/ethereum-poa-deployment#tutorials ),我还能够向合同发送一个已签名的事务,我相信这是成功的,因为我返回了一个事务哈希。但我无法成功地查询合同中的状态。我不知道我错过了什么或者做错了什么。但是这里的示例代码需要更好地描述。
contract MyContract {
struct Account {
address owner;
boolean active;
}
mapping( address => Account) allAccounts;
function AddAccount(address newAddress) public returns (bool success ) {
allAccounts[newAddress].owner = newAddress;
allAccounts[newAddress].active = true;
return true;
}
function GetAccount(address _address) public view returns( address owner, boolean active) {
return (allAccounts[_address].owner, allAccounts[_address].active);
}
}我通过发送一个签名的事务执行AddAccount method.above,如下所示
web3.eth.getTransactionCount(accountAddress, (err, nonce) => {
const data = MyContract.methods.AddAccount(
newAddress ).encodeABI();
const rawTx = {
nonce,
gasPrice: '0x00',
gasLimit: '0x2FAF080',
to: contractAddress,
value: '0x00',
data,
};
const tx = new ethereumjs(rawTx);
tx.sign(privateKey);
// var serializedTx = tx.serialize();
const raw = '0x' + tx.serialize().toString('hex');
web3.eth.sendSignedTransaction(raw, (txErr, transactionHash) => {
console.log("TX Hash: " + transactionHash);
console.log("Error: " + txErr);})然后,我尝试像这样查询这个帐户
MyContract.methods.GetAccount(newAddress).call({
from: accountAddress,
}, (error, result) => {
if (error) {
logger.error(`${errors}`);
}
logger.info(`${result}`);
});但是,此查询的结果总是返回错误的值。就像我无法得到我在第一次呼叫中发送的初始值一样。请问我做错了什么,或者我怎样才能做到这一点?
发布于 2018-11-15 07:50:10
原来我的问题与我用来签署交易的账户有关。不过,我不太清楚这个帐户到底出了什么问题。但是我创建了一个新的,并按照相同的步骤进行了尝试,事务成功了。现在可以查询并获得正确的值。
发布于 2018-10-26 02:26:27
我认为您在代码上犯了错误,数据应该具有正确的nonce和data属性,如下所示。您的代码丢失了这两个属性,您只有它的值。
var rawTx = {
nonce: nonce,
gasPrice: '0x00',
gasLimit: '0x2FAF080',
to: address,
value: '0x00',
data: data
}更改
const rawTx = {
nonce,
gasPrice: '0x00',
gasLimit: '0x2FAF080',
to: contractAddress,
value: '0x00',
data,
};<#>到
const rawTx = {
nonce: nonce,
gasPrice: '0x00',
gasLimit: '0x2FAF080',
to: contractAddress,
value: '0x00',
data: data,
};https://ethereum.stackexchange.com/questions/61200
复制相似问题