* Add call builder and eth_call state overrides
* Fix <Caller as Future>::poll impl
* Move call overrides to ethers_provider::call_raw
* Add example for call_raw overrides
* Add support for contract call overrides
* Documentation and convenience impls for call_raw types
* Test for eth_call state overrides
* ci: install geth
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* ci: install anvil
* test: use anvil instead of ganache
* ci: fix anvil ver
* ci: re-enable example tests
* test: remove unnecessary assertions
* test: enable anvil launch test
* docs: typo
* test: fix anvil chain id
* ci: install ganache
Ganache is needed for the Ganache tests
* chore: remove legacy feature from some examples
* ci: correctly build examples
* test: use correct account balance for anvil
* chore: remove sub_id == 1 check
this was only possible in ganache because it gives serial
sub ids, but in every other reasonable client the ids are generated
randomly, so we cannot test for its value
* test: ensure txs are different
There is a bug in Ganache's mempool which accepts duplicate transactions (here with the same nonce), whereas here we pre-set all the nonces so that they end up having a different transaction hash.
* test: ignore ganache tests
* fix: terzor api changes
* ci(examples): install Anvil, remove geth/ganache
* test(provider): Anvil instead of Geth
some tests start to fail now
* fix: revert usage of Anvil in ipc tests
Anvil does not support IPC yet
* fix: update examples script
* ci: use anvil for wasm example
* replace last ganache usage
Co-authored-by: Oliver Nordbjerg <hi@notbjerg.me>
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feat(providers): load previous logs before subscribing
Load previous logs and stream it back to the user before establishing
a new stream for streaming future logs.
Closes#988
* docs: add subscribe_logs example
* fix clippy errors
* refactor: use VecDeque and address review
* refactors ipc transport internals
ran cargo +nightly fmt
fixes typo
remove some commented out code
* remove one unnecessary return stmt
Co-authored-by: Oliver Giersch <oliver.giersch@b-tu.de>
Co-authored-by: Oliver Giersch <oliver.giersch@gmail.com>
In tungstenite 0.17 a change was introduced considering the logic of
`IntoClientRequest`. When using this trait on a `HttpRequest` it just
uses the request without any changes to inititate the websocket
connection.
This makes it necessary for the consumer of the api to supply the
correct http headers for initiating a websocket connection when using
`IntoClientRequest` on `HttpRequest`.
This commit adapts the logic in `connect_with_auth` to this new
behavior.
* fix(providers): Propogate gas price with access list
* Update CHANGELOG.md
* Fix clippy lint
* Clarify fill_transaction comments
* Fill tx gas price before gas limit
Updates Provider::fill_transaction() to fill the gas price of a
transaction before filling the gas limit. There are cases where the gas
used by a transaction may be dependent on the gas price. For example,
the following contract bytecode branches based on the result of the GASPRICE
opcode:
GASPRICE PUSH1 0xff GT PUSH1 {label} JUMPI
* Cleanup
* Propogate eth_estimateGas failure
* Add ENS avatar resolution
As well as arbitrary fields.
* Use try_join
* Improve reqwest's error passing
* Split avatar resolution in ERC token parsing and resolution
* no_run examples
* Rename token to NFT
* A bit more documentation
* Nightly cargo fmt
* Use different ERC-721 test
* Update CHANGELOG
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* Added basic and bearer authentication for http and websocket transport
* Improved api for websocket `connect_with_auth`
* Bugfix in doc
* Moved use statement into non-wasm imports
* Adapted changelog
* Fixed doc test
* Added constructors for Authorization
* Improved code quality and implemented feedback
* Made bas64 crate for basic auth encoding non-optional
* Added `Display` for `Authorization` instead of `into_auth_string`
* fix(ws): propagate error when deserialization fails
* fix(ws): tolerate case-insensitive match on the jsonrpc field
Infura streams notifications with jsonrpc all capitalized. This fails to
deserialize on our end because serde expect a precise match ressembling
the Notification jsonrpc field.
Fixes#684.
* chore(fmt): use nightly rustfmt
* chore: fmt
* chore: fix failing celo test
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* Implement trace_callMany
* cargo fix and ignore flaky test for now
* Update ethers-providers/src/provider.rs
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feature: set nonce in fill transaction
* chore: update changelog
* refactor: remove nonce_setting in fill_transaction
* refactor: set nonce in send_escalating
* ci: test on windows targets
* make ipc optional
* fix: only activate ipc on unix families
* add cfg
* only check default members
* no parallel limits
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* Serialize eth_feeHistory block count as QUANTITY
* update changelog
* Make sure to first convert to U256 :face_palm:
* Fix issue with move of `block_count` value.
* fix merge issue
* Revert changelog
* Add dev-rpc middleware
* Dont run dev-rpc tests with celo
* providers: clean up match statement
* providers: fix clippy lint
* doc(providers) doctest and changelog for DevRpcMiddleware
* feature: pending_escalator
* feature: send_escalating in Middleware
* bug: don't drop unready futures in escalator.poll
* chore: docs and must_use
* chores: lints, clippies, wasm fixes, dedup pinboxfut
* chore: more lints
* refactor: use Delay in polling interval to ensure re-waking
* refactor: simplify Sleeping state transition as last will never be None again
* bug: properly set last when broadcasts resolve
* feature: debug implementation for EscalatingPending
* refactor: with_ setters and escalations argument
* refactor: use FuturesUnOrdered instead of a vec of futures
* chore: update CHANGELOG with recent PR info
* chore: update all comments on pending escalator
* chore: run rustfmt
* fix: ensure gas estimation includes the access list in 1559/2930 txs
* feat: add gas_price to typed tx
* feat: add access list to typed tx
* chore(providers): cleanup fill_transaction
* chore: fmt
* chore: enable 712 on ethers-contract at top level crate
* fix: do not error if eth_createAccessList is not available
* feat: only use access list if needed
* Add getProof to provider
* Format updates
* Add docs
* Remove fill_tx method, not sure how it got there
* Fix removed Trace type
* Remove test, eth_getProof not supported by ganache
* test: fix duplicate tx flakes by rotating through a list of wallets
* fix: make typed_txs test more robust
* fix: ensure wallets are loaded in a thread-safe way
without fetch_add, it's possible that 2 loads happen for the same id before the `store` mutex is acquired'
* ci: run examples in CI
* fix(ens): set the resolved ens addr for gas estimation
* fix(contract-examples): use legacy sends with ganache
* fix(ens-example): ensure test runs when forking from mainnet
* fix(watch-blocks-example): run our own provider with preset blocktime
* chore(core): remove ethers dep
* chore(providers): remove ethers dep
tests using higher-rank crates are temporarily disabled
* chore(middleware): remove ethers dep and move tests over from providers
* chore(signers): remove ethers dep
* fix(contracts): correctly determine ethers sub-crates & remove ethers
* fix: re-enable tests for all members
* fix: make contract compile without middleware dep
move over the test using middleware to ethers-middleware
* chore: cargo fmt
* chore(contract): add missing import
* WIP
* WIP
* fix(middleware): use rustls as dev dep
* chore: cargo fmt
* fix: use different key for nonce manager to avoid nonce conflicts
* chore: fix celo test ported over to middlewares
the test had the same private key with an existing middleware test,
causing potential nonce reuses
it now also uses a different storage contract, so we had to change
it to use u256 instead of string
* fix(middleware): enable contracts/celo feature
* chore: ignore non-eip2718 txs to rinkeby
* fix: use on wasm only
* feat: enable http provider in wasm
* add http example
* chore: add more verbosity to example
* fix: double webpack issue
* use mnemonic builder
* feat: partial wasm32 support
* make compile for wasm32
* feat: att async-trait attr
* make compatible with wasm
* add type alias for archs
* rustfmt
* add wasm ci
* make compile with wasm-pack test
* make compile with wasm-pack test
* make compile with wasm-pack test
* make compile with wasm-pack test
* ci: disable wasmpack
* feat: use wasm timer delay
* feat: add wasm provider
* rustfmt
* misc refactor
* add wasm example
* make example a directory
* untrack error log
* move profile to root
* fix unused imports
* ci: enable wasm-pack test
* style: unify websocket implementations
* fix: typos
* fix: make policy compatible with wasm target
* chore: do not include ethers-wasm example as top level workspace member
* chore: modify wasm32 dependencies
* chore: make note about getrandom
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feature: drop WS server on when WS connection closes
* feature: ready function on WS
* feature: ws now handles all message types
* bug: SubscriptionStream ends if its sender drops
* feat: fee estimation with custom/default fn
* fix: clippy and percentage calc fix
* calculate priority fee only if base fee above threshold
* chore: some comments
* fix: use legacy tx for ganache
* test: test a few cases for fee estimation using utils
* feat(contract): use eip-1559 txs by default
This may break any tests which use Ganache, since it only supports legacy transactions.
We should replace Ganache with hardhat where possible
* fix(providers): always try setting default_sender
* chore: make all test transactions legacy
* feat(multicall): allow submitting legacy txs
* chore: default to legacy txs via feature flag
This is useful for chains like Celo that do not support the Typed Envelope
* fix: use legacy txs in ds proxy deployment / tests
* chore: fix review comments
* feat(providers): add eth_feeHistory api
* add access list
* feat: fill transactions with access list / default sender info
* feat: add helpers for operating on the txs enum
* feat: send_transaction takes TypedTransaction now
* fix(contract): temp wrap all contract txs as Legacy txs
* feat(middleware): use TypedTransaction in Transformer
* feat(signers): use TypedTransaction in Wallet/Ledger
* feat(core): add helpers for setting typed tx fields
* feat(signer): use typed transactions
* fix(middleware): adjust nonce/gas/escalators for TypedTxs
The GPO and the Escalators will throw an error if they are provided an EIP1559 transaction
* fix(providers): ensure the correct account's nonce is filled
* fix: add .into() to txs until we make the fn call more generic
* Revert "fix: add .into() to txs until we make the fn call more generic"
This reverts commit 04dc34b26d0e3f418ed3fc69ea35ad538b83dd50.
* feat: generalize send_transaction interface
* fix: only set the nonce manually in the Signer middleware
* fix(transformer): fill the transaction after transformation
* chore: fix compilation errors & lints
* fix(signer): set the correct account's nonce
* feat: make trace_call / call take TypedTransaction
* fix: set sender to transaction in signer
* chore: ethgasstation broke
* chore: cargo fmt / lints
* Fix(signer): pass the chain id
* fix: final tx encoding fixes
1. Normalize v values for eip1559/2730
2. Make access lists mandatory for 1559
3. do not double-rlp on rlp_signed
* fix: set access list only if available
* test: check 1559 / 2930 txs
* fix: do not prepend a 0 for Legacy txs & test
* chore: code review comments
* chore: fix aws signer signature
* refactor: move tx types to subdirectory
* feat(receipt): add tx-type and effective gas price for eip1559
* feat: add base_fee_per_gas to Block
* feat(tx): add eip1559/2930/2718 ret values
* fix(middleware): return signed raw rlp from tx signer / adjust tests
* chore: remove unused vars
* chore(core): remove funty lock from Cargo.toml
* chore: rename json var / cargo fmt
* add more context on eip1559 fees
* feat: add support for `eth_getBlockReceipts`
* Add comment to the `get_block_receipts` function
* Add `client_version()` function
* Refactor `Provider` into a proper struct
* feature: initial delay in PendingTransaction
* bug: missing wake and add tracing::debug
* chore: fmt
* feature: set initial delay from PendingTransaction interval