* fix(abigen): contract names can be reserve words
* update changelog
* clippy warning
* module names consistent with other safe_*
* update refs to generated abis
* move reserved words tests to their own fn
* added note to changelog re: module name changes
* 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(middleware): fetch chainid from middleware
Require SignerMiddleware to fetch the inner middleware's to set for the
signer. SignerMiddleware now requires an instantiated middleware with
an accessible get_chainid method.
* ci: update ganache
newer ganache version is needed to specify the ganache provider chain id
in tests
* set SignerMiddleware constructor return to result
* create new method for pulling chainid
* add consistent chainid CHANGELOG entry
* remove awaits
* switch test_derive_eip712 to use consistent signer
* remove gas estimation equality assert in deploy_and_call_contract -
updated version of ganache no longer returns the same value for gas
estimation and gas_used
* revert with_signer to non-async non-result
* cargo fmt
* expand SignerMiddleware::new comment
* remove doc indent
* Add `call_raw` method that forgoes detokenization for MultiCall. Have `call` wrap around `call_raw` permitting user to handle detokenization themselves if they wish
* Improve documentation: Add details to the documentation example that informs the user of their responsibility to detokenize results
* feat(ethers-contract): add `send_with_receipt` to `Deployer`
The `Deployer` is used to deploy contracts and its `send`
function returns an attached instance of a `Contract`.
There is no way to know the transaction hash of the
deployment transaction, so this commit adds another
method `send_with_receipt` that returns an attached
`Contract` as well as a `TransactionReceipt`.
* changelog: update
* tests: call `send_with_receipt` in tests
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>
* 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
* contract: add .call() method to Deployer
It is now possible to dry run a contract deployment.
* add .call() method of Deployer to unreleased
* add PR to changelog
* fix: eip712 signing with ledger hw
This commit fixes the way a EIP712 derived struct is sent to the
Ledger HW to obtain the signature.
It also checks if the Ledger ETH app is at least 1.6.0 since this
is a requirement.
* fix: apply cargo fmt
* fix: revert ledger eip712 test
* refactor: remove unused code
* test: add ledger eip712 test
* fix: cargo fmt
* fix: move the logic to app.rs
* feat: make sign_typed_data take a reference
* chore: ensure abigen is enabled in ledger tests
we need this to compile ethers-contract as a standalone package
* test: ensure that the ledger sig verifies
* test: pass foo_bar by ref
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>
* 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
* 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
* 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>
* Add support for EIP-234
* Add support for EIP-1898
* Remove redundant field names
* Remove useless conversion
* Change `unwrap_or` to `unwrap_or_else`
* 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
* feat(providers): return a PendingTransaction from send_tx calls
* feat(providers): expose the internal provider to all middlewares
* fix(middleware): use the returned PendingTx instead of using a hash
* fix(contract): use the pending tx returned value
Note1: To support that, we need to clone the tx when sending in order to make lifetimes work out
Note2: Multicall does not support that feature
* fix(ethers): adjust examples
* chore: fix provider test
* chore: fix celo test
BREAKING CHANGE
* 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
* refactor: extract minimal features of Contract into BaseContract
* refactor: move BaseContract to own file
* chore: ensure celo test passes
* chore: fix clippy
Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
* fix(signers): make Signer send by blocking on Ledger calls
* fix(providers): use Arc in WS impl to allow cloning
* feat(middleware): add geometric gas price escalator
* test(middleware): ensure that we can still stack everything up
* fix(middleware): default to tokio/async-std
* chore: fix clippy
* docs(middleware): add docs and rename middlewares
* chore: fix doctests
* feat: add linear gas escalator
https://github.com/makerdao/pymaker/blob/master/tests/test_gas.py\#L107https://github.com/makerdao/pymaker/blob/master/pymaker/gas.py\#L129
* feat: add constructors to gas escalators
* fix(BREAKING): return Option for txs/receipts/blocks
Otherwise if a user asks for a transaction hash or block that does not exist yet they'll get an Error
* test: ensure that unmined txs return None receipts
* test: fix remaining tests
* chore: re-enable sparkpool gas oracle
* chore: fix celo tests
* fix: run the non-existing data against infura
* fix: fix etherscan gas oracle tests
* 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(provider): allow specifying a default polling interval param
This parameter is going to be used for all subsequent client calls by default. It can still be overriden with the internal
`interval` calls
* feat(contract): replace reference to Client with Arc
* feat(abigen): adjusts codegen to use Arcs
* fix(ethers): adjust examples to new apis
* fix(provider): return TxHash instead of PendingTransaction on tx submission
Returning a PendingTransaction allowed us to have nice ethers.js-like syntax where you submit
a transaction and then can immediately await it. Unfortunately, now that we use Arcs and not lifetimes
this meant that we would need to bind the function call in a variable, and then await on it, which is pretty
bad UX.
To fix this, we revert back to returning a TxHash and introduce a convenience method on the provider and the
contract which takes a tx_hash and returns a PendingTransaction object. The syntax ends up being slightly
more verbose (although more explicit), but the issue is fixed.
* 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
* feat(provider): implement Streamed logs
This utilizes eth_getFilterChanges. The stream struct must be instantiated with a factory that yields logs/hashes.
Consumers are expected to use the `FilterStream` trait in order to simplify their type definitions
* feat(provider): expose streaming methods
* test(provider): add new blocks/pending txs test
* feat(contract): allow events to be streamed
* test(contract): add integration test for streaming event logs
* perf(contract-factory): take abi and bytecode by value instead of reference
The abi, bytecode and the factory's deploy method now consume the structs instead of being passed by reference. While this means that
consumers might need to clone before using them, this gives us some more flexiblity around factories inside helper functions
* refactor(contract): use test helpers to reduce code dup
* chore: make clippy happy