* feat(core, abi): support shorthand functions
* simplify a bit but not much lol
* refactor a bit, beautify a lot
* fail on absent output parens for shorthand
* chore: fix clippy lints
* fix: parse shorthand functions in multiline parsing
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* fix(solc): normalize EVM version across solc versions
* fix: return semver::Version from solc::version instead of String
* fix off-by-1 error in solc version parsing
* 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
* chore: use ethabi with bumped ethereum-types
* fix: do not use internal type in human readable abi
* fix: do not use internal type in abigen
* feat(solc): save the runtime bytecode
* feat: implement serde for CompiledContract
* feat: allow overriding solc binary path
* feat: expose providing raw file paths
* feat: do not set evm versions on old solc
* chore: use upstream ethabi
* Correctly encode non-legacy mempool transactions
If a non-legacy transaction was fetched from the mempool and
then RLP-encoded for inclusion in e.g. a flashbots bundle,
then the bundle would fail because the encoding only worked
for legacy transactions.
* Add tests and fix encoding
* 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
* 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>
* 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
* add raw abi model
* feat: simplify struct representation
* feat: add struct generation
* use structs as function input
* fix: failing test
* add example
* rustfmt
* feat: support multiple addresses in filters
To support filtering of 1..n addresses we had to add the ValueOrArray
enum to the log types and refactor some ethers-contract code
Fixes: #240
Signed-off-by: Sebastian Martinez <sebastinez@me.com>
* chore: fmt
* fix: use legacy tx in unit test due to Ganache
Co-authored-by: Sebastian Martinez <sebastinez@me.com>
* 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
* feat: add eip2930 tx type
* feat: add typed transaction enum
* chore: rlp_opt take reference to option
* feat: add eip-1559 tx type
* feat: add eip-1559 to the typed tx enum
* fix: references to rlp_opt / add access list setter
* chore: ignore etherchain and ethgasstation
Their APIs had a breaking change
* fix(1559/2930): serialize properly
1. The AccessList struct should have used RlpEncodableWrapper, otherwise we get extra bytes
2. The 1559/2930 types do not use eip-155-style replay protection
* feat: add helpers for operating on the txs enum
* chore: cargo fmt / lints
* 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
* chore: update deps (#352)
* chore(deps): bump elliptic-curve from 0.10.4 to 0.10.5
Bumps [elliptic-curve](https://github.com/RustCrypto/traits) from 0.10.4 to 0.10.5.
- [Release notes](https://github.com/RustCrypto/traits/releases)
- [Commits](https://github.com/RustCrypto/traits/compare/elliptic-curve-v0.10.4...elliptic-curve-v0.10.5)
---
updated-dependencies:
- dependency-name: elliptic-curve
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
* chore: bump deps
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* fix(core): make chain id mandatory
* fix(signers): make chain id mandatory
* test: make chain id mandatory
* test: add missing chain id
* fix: add missing chain id
* chore(wallet): set chain_id by default to 1
* ci: run CI on master
* fix(yubi): add missing chain id
* chore: skip ganache test with celo features
* ci: run only on push to master
* fix: add missing chain id
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Update crypto deps for ethers
* Update version 0.4.0
* Missed a version
* Fix internal version dependencies
* chore: use published eth-keystore-rs
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* 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: make EthEvent name method a trait method
* refactor: make expand methods members of Context
* fix: make AbiParser parsing non consumeable
* feat: add struct expanding
* feat: use derive(EthEvent) in abigen workflow
* test: check EthEvent in abigen macro
* test: make test compile again
* refactor: simplify and optimize abi parsing from single str
* test: add human readable abigen tests
* 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
* feat: add support for encrypted json keystores
* fix: ignore gitkeep file from keystore tests
* feat: use tempfile crate for temporary test dir/files
* feat(providers): tokio 1.0
BREAKING: This removes async-std as a compatibility option
* feat: tokio 1.0 in rest of crates
* fix: patch Cargo.toml until deps are released
* fix(contract): load ws deps
* feat: bytes 1.0 (#121)
* feat(core): move to bytes::Bytes
* feat: adjust rest of crates to Bytes
* chore: bump deps
CI fails due to:
https://github.com/snapview/tokio-tungstenite/pull/142#discussion_r550445144
* chore: use latest tokio-tungstenite
* ci: split tests into jobs (#129)
* Switch to `hex` (#128)
* fix(core): replace rustc_hex with hex
* fix(providers): replace rustc_hex with hex
* chore: replace rustc-hex with hex
* chore: cargo fmt
* fix(ledger): copy address from string correctly
* chore: fix flaky tests
Fixes#105
* fix(block): fix block decoding from ws
* feat(pubsub): add pubsub traits and sub stream
Also use DeserializeOwned alias
* feat(transports): add notification type
* feat(ws): rewrite Ws for subscription support
* feat(provider): add eth_subscribe
* fix(celo): disable some celo tests due to ganache incompatibilities
* test(rinkeby): fix flaky test
* feat(contract): WS subscription bindings (#101)
* feat(middleware): add subscriptions to middleware methods
* feat(contract): add subscribe method to contracts
* feat: allow encoding/decoding function data
* feat: allow decoding event data
* feat: human readable abi
inspired from https://blog.ricmoo.com/human-readable-contract-abis-in-ethers-js-141902f4d917
* test: add event / fn decoding tests
* chore: fix clippy
* feat(abigen): allow providing args in human readable format
* feat: support for txpool API
* feat: add a geth spawner test helper
* fix(txpool): use TxRequest instead of new data struct
The `raw` field is no longer present in latest geth's response.
* fix(txpool): use proper api response format
ref: https://github.com/ethereum/go-ethereum/pull/21720
Also add a Geth test
* ci: install geth 1.9.23
Co-authored-by: Rohit Narurkar <rohit.narurkar@protonmail.com>
* feat: convert signing to k256
* fix: pass pre-hashed message to sig verification
* feat: wrap the hash to a Digest implementation
* refactor: cleanup and move digest impl to separate file
* chore: adjust abigen tests due to rust update
* test: add byte equality test between ethers-rs / web3.js signatures
* fix(keys): use 512 blocks for sha256
Co-authored-by: Rohit Narurkar <rohit.narurkar@protonmail.com>
Co-authored-by: Alex Vlasov <alex.m.vlasov@gmail.com>
* feat: ledger support
Adds support for Ledger Nano S Eth app (v1.3.7)
- sign message
- sign transaction
- get addresses
- get app version
* fix: fix eth docstring
* fix: take into account EIP155
* feat: convert Signer to async
* feat: implement Signer for Ledger
* ci: run celo-only tests explicitly
This is done to avoid using --all-features
* fix: remove async from with_signer
* chore: fix doctests
* fix: add Send/Sync to SignerError
* ci: update etherscan key
* test: disable etherscan abigen tests temporarily
* Implement Multicall functionality for batched calls
* Documentation, some modifications as suggested in the review
* (Abigen) handle single input arg and set output irrespective of mutability
* implement send functionality and allow clearing calls
* Fix detokenization, dont require pre-processing anymore
* panic when more than supported number of calls are pushed
* add doc for panics in case of add_call
* (multicall) eth_balance support, update bindings
* refactor: move multicall to its own directory
* fix: add infura api key
* ci: ensure CI runs on PRs from forks
* test(multicall): re-use aggregate call
* contract: make multicall docs compile and remove redundant clones
* ci: add public etherscan API key so that forks don't get rate limited
* chore: adjust test contract naming
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* test(tokens): ensure nested tuples tokenize properly
* test(contract): add failing test with 2 args
This happens because the args are serialized as Token::Tuple, while instead they should be just a vector
* fix(tokens): add token flattening method to fix non-nested tuples
* fix: do not export the flatten function
* feat(types): add optional Celo support
* feat: add Celo feature flags to all crates
* test(provider): add get_transaction celo test
* test(signer): add send_transaction celo test
* test(contract): add deploy and call contract function celo test
* fix(provider): ensure the Pending transaction calls the waker to get polled again
* feat(core): allow setting the blocktime in ganache
* test(provider): move pending txs test to integration tests + use block time
* fix(signers): make EIP-155 optional and fix sighash generation bug