首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从智能合同中读取状态部署到权威认证网络

从智能合同中读取状态部署到权威认证网络
EN

Ethereum用户
提问于 2018-10-25 20:19:13
回答 2查看 220关注 0票数 1

我把一份智能合同部署到了一个天蓝色的权威证明网络(Ethereum)上。按照这里的说明( https://docs.microsoft.com/en-us/azure/blockchain/templates/ethereum-poa-deployment#tutorials ),我还能够向合同发送一个已签名的事务,我相信这是成功的,因为我返回了一个事务哈希。但我无法成功地查询合同中的状态。我不知道我错过了什么或者做错了什么。但是这里的示例代码需要更好地描述。

代码语言:javascript
复制
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,如下所示

代码语言:javascript
复制
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);})

然后,我尝试像这样查询这个帐户

代码语言:javascript
复制
MyContract.methods.GetAccount(newAddress).call({
    from: accountAddress,
  }, (error, result) => {
    if (error) {
      logger.error(`${errors}`);
    }
    logger.info(`${result}`);
  });

但是,此查询的结果总是返回错误的值。就像我无法得到我在第一次呼叫中发送的初始值一样。请问我做错了什么,或者我怎样才能做到这一点?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2018-11-15 07:50:10

原来我的问题与我用来签署交易的账户有关。不过,我不太清楚这个帐户到底出了什么问题。但是我创建了一个新的,并按照相同的步骤进行了尝试,事务成功了。现在可以查询并获得正确的值。

票数 0
EN

Ethereum用户

发布于 2018-10-26 02:26:27

我认为您在代码上犯了错误,数据应该具有正确的noncedata属性,如下所示。您的代码丢失了这两个属性,您只有它的值。

代码语言:javascript
复制
   var rawTx = {
     nonce: nonce,
     gasPrice: '0x00',
     gasLimit: '0x2FAF080',
     to: address,
     value: '0x00',
     data: data
   }

更改

代码语言:javascript
复制
const rawTx = {
  nonce,
  gasPrice: '0x00',
  gasLimit: '0x2FAF080',
  to: contractAddress,
  value: '0x00',
  data,
};

<#>到

代码语言:javascript
复制
const rawTx = {
  nonce: nonce,
  gasPrice: '0x00',
  gasLimit: '0x2FAF080',
  to: contractAddress,
  value: '0x00',
  data: data,
};
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/61200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档