fix(contract): relax Middleware trait bound for getters (#1728)
* wip * fix(contract): relax Middleware trait bound for getters * chore: clippy * move * fix: multicall
This commit is contained in:
parent
dc68de8cdc
commit
733c5d3dfd
|
@ -95,7 +95,6 @@ pub(crate) fn struct_declaration(cx: &Context) -> TokenStream {
|
||||||
let abi_name = cx.inline_abi_ident();
|
let abi_name = cx.inline_abi_ident();
|
||||||
|
|
||||||
let ethers_core = ethers_core_crate();
|
let ethers_core = ethers_core_crate();
|
||||||
let ethers_providers = ethers_providers_crate();
|
|
||||||
let ethers_contract = ethers_contract_crate();
|
let ethers_contract = ethers_contract_crate();
|
||||||
|
|
||||||
let abi_parse = if !cx.human_readable {
|
let abi_parse = if !cx.human_readable {
|
||||||
|
@ -144,7 +143,7 @@ pub(crate) fn struct_declaration(cx: &Context) -> TokenStream {
|
||||||
fn deref(&self) -> &Self::Target { &self.0 }
|
fn deref(&self) -> &Self::Target { &self.0 }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<M: #ethers_providers::Middleware> std::fmt::Debug for #name<M> {
|
impl<M> std::fmt::Debug for #name<M> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
f.debug_tuple(stringify!(#name))
|
f.debug_tuple(stringify!(#name))
|
||||||
.field(&self.address())
|
.field(&self.address())
|
||||||
|
|
|
@ -152,9 +152,16 @@ use std::{fmt::Debug, marker::PhantomData, sync::Arc};
|
||||||
/// [`method`]: method@crate::Contract::method
|
/// [`method`]: method@crate::Contract::method
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct Contract<M> {
|
pub struct Contract<M> {
|
||||||
|
address: Address,
|
||||||
base_contract: BaseContract,
|
base_contract: BaseContract,
|
||||||
client: Arc<M>,
|
client: Arc<M>,
|
||||||
address: Address,
|
}
|
||||||
|
|
||||||
|
impl<M> std::ops::Deref for Contract<M> {
|
||||||
|
type Target = BaseContract;
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.base_contract
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<M> Clone for Contract<M> {
|
impl<M> Clone for Contract<M> {
|
||||||
|
@ -167,10 +174,31 @@ impl<M> Clone for Contract<M> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<M> Contract<M> {
|
||||||
|
/// Returns the contract's address
|
||||||
|
pub fn address(&self) -> Address {
|
||||||
|
self.address
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a reference to the contract's ABI
|
||||||
|
pub fn abi(&self) -> &Abi {
|
||||||
|
&self.base_contract.abi
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns a reference to the contract's client
|
||||||
|
pub fn client(&self) -> &M {
|
||||||
|
&self.client
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<M: Middleware> Contract<M> {
|
impl<M: Middleware> Contract<M> {
|
||||||
/// Creates a new contract from the provided client, abi and address
|
/// Creates a new contract from the provided client, abi and address
|
||||||
pub fn new(address: Address, abi: impl Into<BaseContract>, client: impl Into<Arc<M>>) -> Self {
|
pub fn new(
|
||||||
Self { base_contract: abi.into(), client: client.into(), address }
|
address: impl Into<Address>,
|
||||||
|
abi: impl Into<BaseContract>,
|
||||||
|
client: impl Into<Arc<M>>,
|
||||||
|
) -> Self {
|
||||||
|
Self { base_contract: abi.into(), client: client.into(), address: address.into() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns an [`Event`](crate::builders::Event) builder for the provided event.
|
/// Returns an [`Event`](crate::builders::Event) builder for the provided event.
|
||||||
|
@ -277,26 +305,4 @@ impl<M: Middleware> Contract<M> {
|
||||||
{
|
{
|
||||||
Contract { base_contract: self.base_contract.clone(), client, address: self.address }
|
Contract { base_contract: self.base_contract.clone(), client, address: self.address }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the contract's address
|
|
||||||
pub fn address(&self) -> Address {
|
|
||||||
self.address
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns a reference to the contract's ABI
|
|
||||||
pub fn abi(&self) -> &Abi {
|
|
||||||
&self.base_contract.abi
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns a reference to the contract's client
|
|
||||||
pub fn client(&self) -> &M {
|
|
||||||
&self.client
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<M: Middleware> std::ops::Deref for Contract<M> {
|
|
||||||
type Target = BaseContract;
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.base_contract
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ pub mod multicall_3 {
|
||||||
&self.0
|
&self.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl<M: ethers_providers::Middleware> std::fmt::Debug for Multicall3<M> {
|
impl<M> std::fmt::Debug for Multicall3<M> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||||
f.debug_tuple(stringify!(Multicall3)).field(&self.address()).finish()
|
f.debug_tuple(stringify!(Multicall3)).field(&self.address()).finish()
|
||||||
}
|
}
|
||||||
|
|
|
@ -339,13 +339,7 @@ impl I256 {
|
||||||
/// Returns an `i64` representing the sign of the number.
|
/// Returns an `i64` representing the sign of the number.
|
||||||
fn signum64(self) -> i64 {
|
fn signum64(self) -> i64 {
|
||||||
match self.sign() {
|
match self.sign() {
|
||||||
Sign::Positive => {
|
Sign::Positive => (!self.is_zero()) as i64,
|
||||||
if self.is_zero() {
|
|
||||||
0
|
|
||||||
} else {
|
|
||||||
1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Sign::Negative => -1,
|
Sign::Negative => -1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,11 +141,7 @@ impl LedgerEthereum {
|
||||||
|
|
||||||
signature.v = match tx {
|
signature.v = match tx {
|
||||||
TypedTransaction::Eip2930(_) | TypedTransaction::Eip1559(_) => {
|
TypedTransaction::Eip2930(_) | TypedTransaction::Eip1559(_) => {
|
||||||
if ecc_parity % 2 == 1 {
|
(ecc_parity % 2 != 1) as u64
|
||||||
0
|
|
||||||
} else {
|
|
||||||
1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
TypedTransaction::Legacy(_) => eip155_chain_id + ecc_parity,
|
TypedTransaction::Legacy(_) => eip155_chain_id + ecc_parity,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue