首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有字符串参数的事件不起作用(未编入索引)

具有字符串参数的事件不起作用(未编入索引)
EN

Ethereum用户
提问于 2017-10-11 17:33:48
回答 2查看 952关注 0票数 0

我正在尝试听一个在本地运行的rinkeby测试事件。当我的参数是int时,比如event EventTester(int values);,当我将事件参数更改为string (它没有被索引)时,每件事情都正常工作,它不工作,我也看不到日志。event EventTester(string values);。知道为什么吗?在https://rinkeby.etherscan.io上检查事务时,我没有看到Events选项卡。

谢谢

代码语言:javascript
复制
var fs = require('fs');
var Web3 = require('web3');
var util = require('ethereumjs-util');
var tx = require('ethereumjs-tx');
var lightwallet = require('eth-lightwallet');
var txutils = lightwallet.txutils;
var web3 = new Web3(
    new Web3.providers.HttpProvider('http://localhost:8545')
);
var address = '0x.....';
var key = '';
var bytecode = '6060...90029';
var interface = [{"constant":false,"inputs":[{"name":"input","type":"string"}],"name":"getOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"values","type":"string"}],"name":"EventTester","type":"event"}]

function sendRaw(rawTx) {
    var privateKey = new Buffer(key, 'hex');
    var transaction = new tx(rawTx);
    transaction.sign(privateKey);
    var serializedTx = transaction.serialize().toString('hex');
    web3.eth.sendRawTransaction(
    '0x' + serializedTx, function(err, result) {
        if(err) {
            console.log("ERROR HAPPENED:" +err);
        } 
    });
}

var contractAddress = '0x...';

strInterface='[{"constant":false,"inputs":[{"name":"input","type":"string"}],"name":"getOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"values","type":"string"}],"name":"EventTester","type":"event"}]'
abiDefinition = JSON.parse(strInterface)
myContract = web3.eth.contract(abiDefinition)
var contractInstance = myContract.at(contractAddress)

var txOptions = {
    nonce: web3.toHex(web3.eth.getTransactionCount(address)),
    gasLimit: web3.toHex(700000),
    gasPrice: web3.toHex(10000000000),
    to: contractAddress
};
var rawTx = txutils.functionTx(interface, 'getOut', ["hi"], txOptions);
sendRaw(rawTx);
EN

回答 2

Ethereum用户

发布于 2017-10-11 18:42:15

我只是在罗普斯滕身上试了一试,看起来很管用。下面是事务:https://gist.github.com/pabloruiz55/d73fabb23677f146c58d8c4d3950c0fa

你可以在日志上看到我发送了一个字符串"hola“。

我使用的代码与您编写的代码完全相同,并在Remix上进行了测试。

(无法在Rinkeby上测试它,因为我刚刚用完了以太,但如果您给我寄来一些,我很乐意尝试一下:0x0fC20E774EA6674087494a36F8F8F8f09a4Ee3a131)

更新:在Rinkeby上工作也很好。https://rinkeby.etherscan.io/tx/0x5cf1cfd9c401b9b2d2c0d7a7d967f50e33aaa9bf9cfc97afad9f90b247a93ee9#eventlog

这是Remix的屏幕截图,以防万一。

票数 0
EN

Ethereum用户

发布于 2018-05-10 00:27:16

如果这不是使用web3的约束,我建议您使用它来调用该方法,这将避免大量常见错误(已在包装器中解决)。

与web3@^0.20.6:

代码语言:javascript
复制
contractInstance.getOut.sendTransaction('hi', (err, result) => {
  if (err) {
    console.error(err);
  }

  console.log(result);
});

与web3@^1.0.0

代码语言:javascript
复制
contractInstance.methods.getOut('hi').send({ from: address }).then((result) => {
  console.log(result);
})
.catch((err) => {
  console.error(err);
});
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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