solidity通过 event返回结构体数据

本文介绍了如何使用Solidity编写智能合约,并通过Web3.js在前端进行交互。着重讲解了如何创建event事件和在事件请求中处理数据,以及如何通过事件过滤和调用历史查询来获取特定交易的数据结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • Solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract eventRequest {
// 结构体
    struct request_data {
        uint code;
        string message;
    }
    // event事件
    event EventRequest(string _desc,request_data);

    // 方法
    function addUser() public {
        emit EventRequest("register",request_data({
            code:200,
            message:"ok"
        }));
    }
}
  • Web3js
contract.methods.register().send({from:'钱包地址'})
	.on('receipt',receipt=>{
		contract.getPastEvents('EventRequest', {
			filter: {},
			fromBlock: receipt.blockNumber - 4000,
			toBlock: 'latest'
		}, function(error, events){ })
		.then(function(events){
			console.log('events',events)
			if(events.length > 0){
				let obj = {};
				let temp = events.find(v=>v.transactionHash === receipt.transactionHash)
				obj.code = temp.returnValues[1].code;
				obj.message = temp.returnValues[1].message;
				console.log('eventRequest',obj) //最终的结果
			}
		});
	})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值