作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是代码片段:-
while (block_no >= 0) {
List<EthBlock.TransactionResult> txs = web3
.ethGetBlockByNumber(DefaultBlockParameter.valueOf(BigInteger.valueOf(block_no)), true).send()
.getBlock().getTransactions();
txs.forEach(tx -> {
int i = 0;
EthBlock.TransactionObject transaction = (EthBlock.TransactionObject) tx.get();
if ((transaction.getFrom().toLowerCase()).equals(address.toLowerCase())) {
// System.out.println("***************GETTING INSDIE OF IF LOOP***********");
ts[i] = new TransactionHistory();
ts[i].setFrom(transaction.getFrom());
ts[i].setTo(transaction.getTo());//not getting exact address except contract deployed address
ts[i].setBlockNumber("" + transaction.getBlockNumber());
ts[i].setGasPrice("" + transaction.getGasPrice());
ts[i].setNonce("" + transaction.getNonce());
history.add(ts[i]);
i++;
System.out.println("*******" + "\nValue Getting zero value" +
transaction.getvalue() + "\nBlockNumber: "
+ transaction.getBlockNumber() + "\n From: " +
transaction.getFrom() + "\n To:"
+ transaction.getTo() + "\n Nonce: " +
transaction.getNonce() + "\n BlockHash:"
+ transaction.getBlockHash() + "\n GasPrice:" +
transaction.getGasPrice());
//getting '0' instead of real value
System.out.println(transaction.getValue());
}
如何使用 java 和 web3js eth 交易对象获取交易值(value)和发件人地址?
最佳答案
你必须监听你的智能合约事件。事件作为日志存储在以太坊虚拟机中。 Web3j 和您的 Contract 包装器提供了一些方法来读取过去的日志和/或监听新的日志。
如果你想读取过去发生的所有事件,可以使用Web3j提供的ethGetLogs
方法。结果包含一个日志列表,其中包含有关事务的一些属性。对于您来说,有趣的字段是主题字段,它是一个字符串列表,并且应包含发送者和接收者 strong> 如果该事件是某个传输事件,则为地址。
YourContract contract // init contract
Web3j web3j // init web3j
EthFilter ethFilter = new EthFilter(DefaultBlockParameterName.EARLIEST,
DefaultBlockParameterName.LATEST, contract.getContractAddress());
ethFilter.addSingleTopic(EventEncoder.encode(contract.YOUR_EVENT));
EthLog eventLog = web3j.ethGetLogs(ethFilter).send();
另一种方法是订阅事件日志。因此,您的契约(Contract)包装器和 web3j 提供了一些可能性。
yourContract.xxxEventFlowable(ethFilter).subscribe(/*doSomthing*/);
或
web3j.ethLogFlowable(ethFilter).subscribe(/*doSomthing*/);
关于java - 无法在 java web3j 的 EthBlock.transactionObject 中获取交易值和发送者地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260811/
下面是代码片段:- while (block_no >= 0) { List txs = web3 .ethGetBlockByNumber(Defau
我是一名优秀的程序员,十分优秀!