Commit Graph

485 Commits

Author SHA1 Message Date
Georgios Konstantopoulos fb8f5a8ec9
Nonce manager (#59)
* feat: first stab at a NonceManager

* test: adjust the test

* fix: reset nonce if nonce manager errors

* feat: make nonce manager opt in

* fix: add read-only nonce call

* feat: improve http provider errors

* feat: convert to Atomic datatypes

* refactor: move to own file

* chore: remove tokio dep

* fix: improve nonce retry logic readability

* fix: use other privkey to avoid nonce races with other tests
2020-09-07 13:26:42 +03:00
Georgios Konstantopoulos 6197d8bb12
fix(core): serialize filters properly and always rewake (#61)
* fix: serialize filters properly

* test: add filter log tests

* fix(stream): always re-wake
2020-08-31 23:40:49 +03:00
Georgios Konstantopoulos cff6eb45a5
fix: make multicall work by reference (#58)
* fix: make multicall work by reference

* chore: update readme with solc / ganache requirements

* chore: cargo fmt

* chore: fix doctests

* fix: disable sparkpool gasnow test
2020-08-21 15:54:23 +03:00
Rohit Narurkar 237f011259
(feat) gas oracle support (#56)
* (feat) gas oracle support

* (refactor) make a separate module | fix clippy warning

* add gas oracle to client using dynamic dispatch

* fix doc build in multicall module

* gas oracle returns U256

* support gas price fetching from client

* avoid querying for unsupported gas categories

* changes based on PR review

* add support for gasnow API, refactor gwei to wei
2020-08-18 21:47:56 +03:00
James Prestwich ca2ec0aadd
bug #55: prevent request from serializing ZSTs as null (#57)
* bug #55: prevent request from serializing ZSTs as null

* chore: cargo fmt

Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
2020-08-18 17:12:47 +03:00
Rohit Narurkar 516b431a48
add support for gas estimate and calldata from ContractCall (#53)
* add support for gas estimate and calldata from ContractCall

* fix celo tests for get_block and get_tx
2020-08-12 11:35:33 +03:00
Brock Elmore 34550d9211 Add get_storage_at 2020-07-30 22:56:28 -04:00
James Prestwich 6f02bb5436
bug: reschedule rewaking when unpausing pending tx future (#50) 2020-07-13 20:52:33 +03:00
James Prestwich 320ab276de
refactor: pending txns don't wait to poll futures until interval elapses (#49) 2020-07-10 09:59:29 +03:00
Georgios Konstantopoulos d0f1752db0
feat(core/block): add epochSnarkData to the celo block (#46)
* feat(core/block): add epochSnarkData to the celo block

* test(block): add celo celo snark data test
2020-07-09 10:07:44 +03:00
Rohit Narurkar a9bb98b5a7
Implement Multicall functionality for batched calls (#43)
* 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>
2020-07-03 19:52:09 +03:00
Georgios Konstantopoulos 41998d6d2d
fix(tokens): make token decoding abiencoderv2 friendly 2020-07-03 18:51:19 +03:00
Georgios Konstantopoulos 3d2d40699f
Fix buggy non-nested tuples (#48)
* 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
2020-07-03 17:37:38 +03:00
Ali Atiia 04aefeb160
Update README.md (#47)
error when `cargo build` unless https prefix ("relative path without base") error
2020-07-03 13:25:28 +03:00
Georgios Konstantopoulos da20a042d7
chore(provider): make websockets optional (#45) 2020-07-02 18:33:16 +03:00
Georgios Konstantopoulos 1cbd86dbd3
fix(block): add Randomness when using celo (#44)
* fix(block): add Randomness when using celo

Also do not compile the fields which were removed in https://github.com/celo-org/celo-blockchain/pull/913/

* test(block): add celo block test
2020-07-02 16:05:27 +03:00
Rohit Narurkar f88f0129f9
feat(tokens): tokenize tuples
* tuples impl Tokenizable instead of impl Tokenize/Detokenize

* uncomment the abigen for DyDxLimitOrders contract (nested tuples)
2020-06-29 11:03:01 +03:00
James Prestwich d218dba6df
feature: ethers-core wasm32 arch compatibility (#38)
* feature: ethers-core wasm32 arch compatibility

* fix(core): set U256 array in correct order

Co-authored-by: Georgios Konstantopoulos <me@gakonst.com>
2020-06-23 10:15:33 +03:00
Georgios Konstantopoulos c1430fa04e
fix(provider): Add Send trait bound to PendingTx state future (#39) 2020-06-23 10:05:04 +03:00
Georgios Konstantopoulos bb1ac9c666
Improve Ganache Flexibility (#37)
* feat(core): add more features to ganache

* test(provider): choose endpoint dynamically

* test(signer): choose endpoint and accounts dynamically

* test(contract): choose endpoint and accounts dynamically

* fix: dynamic port / accounts in examples

* core(chore): fix doctest
2020-06-22 16:42:34 +03:00
Georgios Konstantopoulos 1cfbc7b3c3
Replace contract client references with Arc (#35)
* 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.
2020-06-22 11:44:08 +03:00
Georgios Konstantopoulos 7a17e54fbd
feat(contract): add helper to query events w/ metadata (block num + tx hash) (#33)
* feat(contract): add helper to query events w/ metadata (block num + tx hash)
2020-06-22 01:08:40 +03:00
Georgios Konstantopoulos 833ca33f60
feat(signers): make Signer on Client optional (#34)
This allows using Contract either in read-only mode (e.g. for fetching data/events)
or for using the accounts on the node as senders
2020-06-21 21:19:59 +03:00
Georgios Konstantopoulos 9a0c97286b
feat(provider): introduce a pending tx polling delay so that we do not spam the chain (#31) 2020-06-21 11:09:19 +03:00
Georgios Konstantopoulos 0cfeadadf4
Websockets + TLS for Async-Std / Tokio (#30)
* fix: relax trait bounds on JsonRpcClient

* refactor(provider): move http client to separate dir

* feat(provider): add initial Websocket support over Stream/Sink + Tungstenite

* test(provider): add websocket test

* feat(provider): add convenience method using tokio/async-std behind a feature flag

* test(provider): add websocket ssl test

* feat(provider): add TLS websockets for tokio/async-std

* docs(provider): add websocket docs / examples

* fix(provider): make tokio an optional dep
2020-06-21 10:17:11 +03:00
Georgios Konstantopoulos ded8f50ef4
chore: remove leftover file
This got checked in by accident
2020-06-20 18:50:40 +03:00
Georgios Konstantopoulos 3459b1d350
docs: add missing attribution to Althea for the lean JSON RPC client 2020-06-20 17:15:00 +03:00
Georgios Konstantopoulos 8240b26a80
docs: add missing attribution to Gnosis for codegen & macros 2020-06-20 17:02:57 +03:00
Georgios Konstantopoulos 4ff466a593
fix intradoc links and add missing cargo metadata (#29) 2020-06-20 16:55:07 +03:00
Georgios Konstantopoulos 7ff8b8222c
Dual license under MIT/Apache 2 (#28)
* fix: dual license MIT / Apache 2

* provider: add missing license
2020-06-18 08:20:20 +03:00
Georgios Konstantopoulos a9d1be4def
Improve Stream performance (#25)
* perf(provider): remove infinite loop and rely on the runtime to poll the stream

* chore: cargo fmt
2020-06-17 21:01:20 +03:00
Georgios Konstantopoulos a558a4237b
docs: add ethers.js as a reference 2020-06-17 19:18:46 +03:00
Georgios Konstantopoulos 771c55175f
ci: cargo fmt 2020-06-17 16:36:09 +03:00
Georgios Konstantopoulos 4fd656bce1
Provider Fixes on filters and gas estimation (#23)
* fix(provider): do not pass a param to estimate_gas

* fix(provider): pass correct number of args to new_filter

* test(signer): add test to ensure that the Pending block number works

* docs: fix links
2020-06-17 16:09:41 +03:00
Georgios Konstantopoulos ba5ae5a894
Add Celo support (#8)
* 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
2020-06-17 12:22:01 +03:00
Georgios Konstantopoulos 20493e0190
Fix Pending Transactions and EIP-155 (#22)
* 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
2020-06-17 11:02:03 +03:00
Georgios Konstantopoulos 2c734f0d61
fix(core): make Signature.v a u64 instead of a u8 and expose `verify` (#21)
u8 would not work if a large chain_id was used
2020-06-17 09:45:15 +03:00
Georgios Konstantopoulos 1a47e933ae
feat(signers): implement Serde and make Wallet API smaller (#20)
* feat(signers): implement Serde and make API smaller

* fix: add abigen as a dev-dependency feature
2020-06-17 09:38:04 +03:00
Georgios Konstantopoulos 570b45eb10
ABI Encoder v2 + ABI Spec v6.6 (#17)
* feat(core): update ethabi and enable more Toeknize impls

* feat(contract/abigen): implement simple AbiEncoderV2

* tests(ethers): add abigen example

* fix(core): fix abi tests

* chore: make clippy happy
2020-06-16 15:08:42 +03:00
Georgios Konstantopoulos 5629c1f25e
ci: switch to github actions (#18)
Switching to Github actions since Circle would often run out of memory while linking, e.g. https://app.circleci.com/pipelines/github/gakonst/ethers-rs/63/workflows/0eb4236c-ba46-46ab-af9f-21878101434b/jobs/65
2020-06-16 14:36:45 +03:00
Rohit Narurkar 5d92e72882
add json rpc bindings for eth_getCode (#15) 2020-06-15 23:10:27 +03:00
Georgios Konstantopoulos 636762d464
docs: add contributing.md 2020-06-15 18:05:29 +03:00
Georgios Konstantopoulos a52dd9a277
docs: add some templates (#14) 2020-06-15 17:43:32 +03:00
Georgios Konstantopoulos 1d7bdef0bd
feat(utils): add various new utility methods (#13) 2020-06-15 17:16:14 +03:00
Georgios Konstantopoulos 79b21b9ea0
add pending tx type to wait for tx confirmations (#11)
* feat: add pending tx type

* feat(pending-txs): implement the full state machine

* tests(ethers): fix transfer eth example

* feat: use the pending transaction struct when deploying a contract

* ci: skip the pending tx test

* chore: fix doctests
2020-06-15 15:40:06 +03:00
Sebastian Bolaños 20da946aa2
Update docs path (#12)
* Change docs url from local modules to docs.rs
2020-06-15 14:29:50 +03:00
Georgios Konstantopoulos 57d8efd7cc
fix(provider): pass array arguments (#10)
ganache would accept malformed requests, but geth is more strict
2020-06-15 13:53:40 +03:00
Georgios Konstantopoulos d90b03da06
Add streamed logs to the provider (#9)
* 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
2020-06-15 11:46:07 +03:00
Georgios Konstantopoulos beb480f22b
chore(abigen-macro): do not run the doctests since the abi paths cannot be found 2020-06-11 12:33:09 +03:00
Georgios Konstantopoulos a1096f8705
chore(abigen): fix doctest 2020-06-11 12:16:36 +03:00