* Parsing U256 from base10_parse::<u64>() instead of directly to U256
This fixes a bug for chain_ids that are > 10, base10_parse::<U256>() was
somehow parsing into hex.
When using the derive macro, chain_id = 10 was parsed as chain_id = 0x10 = 16,
causing an issue for some chains like Polygon.
* chore: fmt
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
The U256 priority fees were being coerced into u32, which was not big
enough for actual values. The overflow was happening but not checked.
This led to a possible divide-by-zero panic in this code as well.
This change does the math as I256 -- overkill, but it works.
* feat(chain): map Chain enum to values
* feat(chain): support TryFrom<u64>
* chore: use parsechain error for the try_from impl
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feat: macro and token (simplest form)
* fix: better structure to fetch token by string symbol
* chore: add tokenlist to prelude
* fix: from current dir
* fix: dir refactoring
* fix: clippy
* chore: refactor tokenlist to addressbook
* fix: do not panic on invalid units conversion
This is done by switching the From implementations to TryFrom and
making the conversion functions return a thiserror Error instead of
the previous Boxed error object
* chore: update changelog
* feat(etherscan, middleware): implement gas-related endpoints and use them in gas oracle
* cleanup deps
* better comment
* revertme: add debug print
* Revert "revertme: add debug print"
This reverts commit 63993642c4.
* make etherscan tests serial
* run each etherscan test at least 200ms
* 200ms -> 250ms
* Revert "200ms -> 250ms"
This reverts commit 29c7f6ed9a.
* add separate etherscan key for celo tests
* 200ms -> 250ms
* add Chain::Sepolia to match
* fix: unit8 encoding
* feat: use ethers::types::Bytes for solidity bytes type
* feat: add const generic from impls
* fix: failing tests
* fix: make compatible with bytes
* update changelog
* make compatible with encoding changes
* chore rm write to file
* feat(ethers-solc): deserialize bytecode as bytes
* feat(ethers-solc): add method to fetch compact contract
* feat(ethers-solc): use Abi type instead of Vec<serde_json::Value>
* test(contract): use new Solc bindings
* test(middleware): use new Solc bindings
* chore: remove solc from ethers-core
* chore: remove concurrent setup code from ethers-core
* feat(ethers-solc): add ArtifactOutput::Nothing as a no-op artifact logger
* feat: add ethers-solc to top level crate
* examples: use new solc building pattern
* chore(solc): re-use opt str impl for error code decoding
* fix abigen example
* chore: fix doctests
* chore: remove setup feature
* fix: decode string to bytes correctly
* chore: clippy lints
* feat: use const generics for array tokenize
* feat: add abi encode decode impls
* test: add some tests
* chore: move abi codec to core
* update changelog
* 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
* fix: do not sort event variants
* style: use deref over clone
* style: refactor some stuff
* feat: add ethcall trait
* feat: include in abigen
* feat: add bare bones eth call derive
* feat: impl EthCall derive
* feat: support enums
* feat: use abigen enum derive
* fix: concrete abi and map errors
* test: first call test
* rustfmt
* chore: use correct trait name on error
* feat: derive display for call structs
* feat: add from conversion
* test: add convert test
* chore: docs and test
* chore: update changelog
* cargo fix
* feat: add unit type derive support and more test
* chore: patch ethabi
* chore: rm ethabi patch
* feat: add encode/decode trait impls
* style: use AsRef<[u8]>
* Update ethers-contract/ethers-contract-abigen/src/contract/methods.rs
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* style: reindent macro body
* test: add tuple event test
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* derive-eip712: initial implementation of eip712 derive macro
This commit provides an initial implementation for a derive macro
to encode typed data according to EIP-712, https://eips.ethereum.org/EIPS/eip-712
Additionally, this commit introduces a new signer trait method:
async fn sign_typed_data<T: Eip712 + Send + Sync>(
&self,
payload: &T,
) -> Result<Signature, Self::Error>;
And implements the new method for each of the signers (wallet, ledger,
aws).
Additionally, these changes include using `WalletError` for the Wallet
signer error type
At the moment, derive does not recurse the primary type to find nested
Eip712 structs. This is something that is noted in the source and
currently responds with an error regarding custom types.
A subsequent PR should be opened once this issue becomes needed. For the
moment, the current implementation should satisfy non-nested, basic struct types.
* rename to ethers-derive-eip712; move to ethers-core
* refactor of derive-eip712 macro; use ParamType and EthAbiToken
* macro updates; add byte array checker for paramtype; use literal constant for domain type hash
* replace std::convert::Infallible with WalletError as Wallet signer error type
* update workspace members and dev dependencies for examples folder
* add example for eip712 and test against contract
* remove extraneous backward slash in '\x19\x01' prefix; example tests pass
* update unreleased change log
* remove print statements
* use parse_macro_input macro; remove dead code; handle nest struct not implemented error
* move eip712 example to solidity-contract tests folder; update cargo workspace dependencies
* allow optional EIP712Domain parameter when encoding eip712 struct and signing typed data
* add documentation for eip712 feature
* Update ethers-signers/src/ledger/mod.rs
Co-authored-by: Sebastian Martinez <me@sebastinez.dev>
* add error enum for Eip712Error; use sign_payload for ledger signer
* add EIP712WithDomain type for providing a wrapper around custom setting of the domain
* make LedgerWallet sign_payload public
* use optional feature gated dependencies for eip712; add default method for encode_eip712
* add default domain_separator method, pre-compute separator hash
* move derive-eip712 deps to dev deps
* remove invalid sign payload parameter, add await on async method
* remove deprecated comment
* debugging 'bad key handle' error for ledger signer
try using 'sign_message'
* await sign digest for aws signer
* remove extra space, fix fmt warning
* fix test, fmt errors
* use gt 0.6.0 pragma compiler version
* enable ABIEncoderV2 for solidity test contract
* chore: make test constructor public
Co-authored-by: Sebastian Martinez <me@sebastinez.dev>
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* feat: keep track of custom types in abi parser
* feat: use internal structs for abi parsers
* test: add human readable struct input test
* chore: update changelog
* fix conflicts
* fix: remove eprintln
* make clippy happy
* make clippy happy
* rustfmt
* make clippy happy
* 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
* 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