test(abigen): ensure structs in events work (#1235)

* test(abigen): ensure structs in events work

* chore: rename vars

* chore: use ganache chain id

* chore: disable ganache test on celo
This commit is contained in:
Matthias Seitz 2022-05-09 18:26:36 +02:00 committed by GitHub
parent fd994d7fde
commit 4b462e6ef2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 94 additions and 0 deletions

View File

@ -4,8 +4,11 @@ use ethers_contract::{abigen, EthCall, EthEvent};
use ethers_core::{ use ethers_core::{
abi::{AbiDecode, AbiEncode, Address, Tokenizable}, abi::{AbiDecode, AbiEncode, Address, Tokenizable},
types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest, U256}, types::{transaction::eip2718::TypedTransaction, Eip1559TransactionRequest, U256},
utils::Ganache,
}; };
use ethers_middleware::SignerMiddleware;
use ethers_providers::{MockProvider, Provider}; use ethers_providers::{MockProvider, Provider};
use ethers_signers::{LocalWallet, Signer};
use ethers_solc::Solc; use ethers_solc::Solc;
use std::{convert::TryFrom, sync::Arc}; use std::{convert::TryFrom, sync::Arc};
@ -566,3 +569,24 @@ fn can_handle_overloaded_events() {
}; };
let _ev2 = ActionPaused2Filter { action: "action".to_string(), pause_state: false }; let _ev2 = ActionPaused2Filter { action: "action".to_string(), pause_state: false };
} }
#[tokio::test]
#[cfg(not(feature = "celo"))]
async fn can_send_struct_param() {
abigen!(StructContract, "./tests/solidity-contracts/StructContract.json");
let server = Ganache::default().spawn();
let wallet: LocalWallet = server.keys()[0].clone().into();
let provider = Provider::try_from(server.endpoint()).unwrap();
let client = Arc::new(SignerMiddleware::new(provider, wallet.with_chain_id(1337u64)));
let contract = StructContract::deploy(client, ()).unwrap().legacy().send().await.unwrap();
let point = Point { x: 1337u64.into(), y: 0u64.into() };
let tx = contract.submit_point(point).legacy();
let tx = tx.send().await.unwrap().await.unwrap().unwrap();
assert_eq!(tx.logs.len(), 1);
let logs: Vec<NewPointFilter> = contract.event().from_block(0u64).query().await.unwrap();
assert_eq!(logs.len(), 1);
}

View File

@ -0,0 +1,55 @@
{
"abi": [
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
}
],
"indexed": false,
"internalType": "struct MyContract.Point",
"name": "x",
"type": "tuple"
}
],
"name": "NewPoint",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
}
],
"internalType": "struct MyContract.Point",
"name": "_point",
"type": "tuple"
}
],
"name": "submitPoint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bin": "608060405234801561001057600080fd5b50610268806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b3c67bb814610030575b600080fd5b61004a600480360381019061004591906101ac565b61004c565b005b7f0a10caaea7ac3c68834bca5fb5f42a10cb68bc3866ed86e6379d62bea6d591668160405161007b9190610217565b60405180910390a150565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100e38261009a565b810181811067ffffffffffffffff82111715610102576101016100ab565b5b80604052505050565b6000610115610086565b905061012182826100da565b919050565b6000819050919050565b61013981610126565b811461014457600080fd5b50565b60008135905061015681610130565b92915050565b60006040828403121561017257610171610095565b5b61017c604061010b565b9050600061018c84828501610147565b60008301525060206101a084828501610147565b60208301525092915050565b6000604082840312156101c2576101c1610090565b5b60006101d08482850161015c565b91505092915050565b6101e281610126565b82525050565b6040820160008201516101fe60008501826101d9565b50602082015161021160208501826101d9565b50505050565b600060408201905061022c60008301846101e8565b9291505056fea2646970667358221220ca9c95aa57bcabfe8405dcd5d993ab0920ed1e768884cae607c1b47d5c127f9564736f6c634300080a0033"
}

View File

@ -0,0 +1,15 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.10;
contract MyContract {
struct Point {
uint256 x;
uint256 y;
}
event NewPoint(Point x);
function submitPoint(Point memory _point) public {
emit NewPoint(_point);
}
}