* 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
* Initial IPC setup
* Cleanup
* Oops
* change futures dependency reference
* Document, add prints, cleanup
* Fix logic
* Make result type consistent with crate
* Setup geth ipc config and tests
* Cleanup subscription test
* Switch hash function to siphash
* Update dep usage for ordering
* Use tempfile for better cleanup (and OS support)
* Replace prints with tracing logs
* Ignore test with Celo feat
* chore: remove debug logs and use default geth ipc path
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feat: mnemonic phrase support for wallet
* refactor: better error handling and clippy linting
* fix: derive from path and tests
* chore: renamed package coins-bip39
* refactor: convenient builder API to setup mnemonic wallet
* refactor: re-export coins-bip39 for convenience
* clippy: fix warnings for multiple complex types in provider
* feat: randomly generated mnemonic phrase can be written to storage
* Add support for EIP-234
* Add support for EIP-1898
* Remove redundant field names
* Remove useless conversion
* Change `unwrap_or` to `unwrap_or_else`
* fix(abigen): correctly parse params in human readable abi
* chore: make clippy happy
* test: remove unwrap
* chore: make clippy happy again
* chore: fix contract.rs example
* chore: rename to contract using human readable format
* examples: add abigen example with path to abi
* fix: pin funty version to fix bitvec error
* chore: remove unused import
* chore: fix deps