Mark Spanbroek
4e4a55b13e
Cleanup
2023-07-04 12:58:48 +02:00
Mark Spanbroek
cb95cbc15a
Make BlockHandler callback synchronous (breaking change)
...
Refactored the confirm() implementation to work
with a synchronous callback
2023-07-04 12:58:48 +02:00
Mark Spanbroek
82f6449374
Move JsonRpcSubscription type to jsonrpc module
...
Allows it to insert convertError to ensure that
any errors are re-raised as JsonRpcProviderError
2023-07-03 13:09:09 +02:00
Mark Spanbroek
738c6a87e2
Stop polling when provider is closed
2023-07-03 13:09:09 +02:00
Mark Spanbroek
a27c2de41c
Close provider by unsubscribing and closing client
2023-07-03 13:09:09 +02:00
Mark Spanbroek
2481bda6e4
Subscribe to logs with polling
2023-07-03 13:09:09 +02:00
Mark Spanbroek
0aea16047c
Ignore errors when retrieving block by hash
2023-07-03 13:09:09 +02:00
Mark Spanbroek
1b151d589d
Add polling interval to constructor of provider
2023-07-03 13:09:09 +02:00
Mark Spanbroek
0322ae1451
Ignore errors while polling
2023-07-03 13:09:09 +02:00
Mark Spanbroek
50cfd9d9dd
`untilCancelled` template
2023-07-03 13:09:09 +02:00
Mark Spanbroek
3a76fa74f1
Make polling interval configurable
2023-07-03 13:09:09 +02:00
Mark Spanbroek
6a034870f8
Polling block subscriptions for non-websocket connections
2023-07-03 13:09:09 +02:00
Mark Spanbroek
127c9c9b0d
Formatting
2023-07-03 13:09:09 +02:00
Mark Spanbroek
16fa0cfcf8
Use new subscription handling in JSON RPC provider
2023-07-03 13:09:09 +02:00
Mark Spanbroek
a7dc0ac9eb
Move subscription handling to its own module
2023-07-03 13:09:09 +02:00
Mark Spanbroek
0b951ce146
Set correct content-type for JSON-RPC
2023-07-03 11:29:31 +02:00
Eric Mastro
34b7a82565
fix: pending blocks may not contains block hash
...
Pending blocks may not contain a block hash and therefore Block.hash should be optional.
2023-07-03 11:29:09 +02:00
Adam Uhlíř
0321e6d7bd
fix: dont export json conversions of jsonrpc ( #44 )
2023-06-19 14:13:44 +02:00
Adam Uhlíř
18e225607c
fix: eth_call use signers address ( #43 )
2023-06-13 16:24:59 +02:00
Mark Spanbroek
1ca90d0b3c
Allow contract calls to override the block tag
2023-04-19 10:03:50 +02:00
Adam Uhlíř
3c12a65769
feat: erc20 module ( #38 )
...
Co-authored-by: Eric Mastro <github@egonat.me>
2023-03-29 13:41:44 +02:00
Ben Bierens
577e02b8a2
enables stylecheck ( #36 )
...
* enables stylecheck
* applies style check
* Applying style check
* uses alias to fix ambiguity
2023-03-09 10:58:54 +01:00
Mark Spanbroek
e8592bb922
Remove unnecessary error check
2022-09-21 10:29:31 +02:00
Mark Spanbroek
7d2acd65e8
Fix imports
2022-09-21 10:29:31 +02:00
Mark Spanbroek
a62ea4fb8f
Ensure that `reverts` works with functions with a return type
2022-09-21 10:29:31 +02:00
Mark Spanbroek
c5a40e5f9d
Remove dependency on json-rpc provider for `reverts`
2022-09-21 10:29:31 +02:00
Mark Spanbroek
f545169331
Remove JSON wrapper from error in JSON RPC provider
2022-09-21 10:29:31 +02:00
Mark Spanbroek
cac6026b34
Change `reverts` API
...
- Enables postfix syntax: `call().reverts(reason)`
- Removes doesNotRevert etc; uses `check not` instead
- Removes waitFor(); return Future instead
2022-09-21 10:29:31 +02:00
Mark Spanbroek
d001ee8e01
Use `solidityType()` to check indexed event parameter
2022-09-21 10:27:45 +10:00
Eric Mastro
31ffc8992f
Update compile time check to use when
2022-09-21 10:27:45 +10:00
Eric Mastro
ae2d33aacd
Support 1.2.16 distinctBase compilation error
2022-09-21 10:27:45 +10:00
Eric Mastro
0adf56c65b
Support distinct types for Event fields
...
Add support for indexed (and non-indexed) Event fields types that are distinct `ValueType` or `SmallByteArray`. For example,
```nim
type
DistinctAlias = distinct array[32, byte]
MyEvent = object of Event
a {.indexed.}: DistinctAlias
b: DistinctAlias # also allowed for non-indexed fields
## The below funcs generally need to be included for ABI
## encoding/decoding purposes when implementing distinct types.
func toArray(value: DistinctAlias): array[32, byte] =
array[32, byte](value)
func encode*(encoder: var AbiEncoder, value: DistinctAlias) =
encoder.write(value.toArray)
func decode*(decoder: var AbiDecoder,
T: type DistinctAlias): ?!T =
let d = ?decoder.read(type array[32, byte])
success DistinctAlias(d)
```
2022-09-21 10:27:45 +10:00
Eric Mastro
5fe41a76ab
PR comments
...
1. rename helpers to testing and expose externally via `import pkg/ethers/testing`
2. Change detection of revert from `EthersError` to `JsonRpcProviderError`
3, Remove catch of `CatchableError` from revert detection as this would swallow errors. Update tests accordingly.
2022-09-20 13:15:15 +10:00
Eric Mastro
f8ba91a297
Catch ValueError from nim-json-rpc
2022-09-20 13:15:15 +10:00
Mark Spanbroek
c72cdc5573
[wallet] cleanup
2022-08-08 15:07:41 +02:00
Mark Spanbroek
a2d688e34e
[wallet] Avoid Option.get() which can raise UnpackDefect
2022-08-08 15:07:41 +02:00
Mark Spanbroek
1a8ca0bcad
[wallet] Use questionable to deal with optionals
2022-08-08 15:07:41 +02:00
Mark Spanbroek
0483e1676a
[provider] Rename sendRawTransaction -> sendTransaction
...
To be consistent with ethers.js
2022-08-08 15:07:41 +02:00
Jackie
1af3ab1a0a
Make wallet use Provider not JsonRpcProvider
2022-08-08 12:40:36 +02:00
Jackie
b72fbb0ed9
small fixes
2022-08-08 12:40:36 +02:00
Jackie
39005a09be
Add TODOs
2022-08-08 12:40:36 +02:00
Jackie
456d454f2f
Fix bug in wallet
2022-08-08 12:40:36 +02:00
Jackie
ac7785dd04
Add new method to wallet
2022-08-08 12:40:36 +02:00
Jackie
4c047fd997
Changes to TransactionOverrides to support EIP1559
2022-08-08 12:40:36 +02:00
Jackie
2c9eb595d2
Add sendRawTransaction
2022-08-08 12:40:36 +02:00
Jackie
671d42889a
Add Wallet functionality
2022-08-08 12:40:36 +02:00
Jackie
abda8493b0
Change Transaction type to support EIP1559
2022-08-08 12:40:36 +02:00
Mark Spanbroek
16a3d25419
Remove duplication
2022-08-08 12:26:09 +02:00
Jackie
52f57894f5
Fix block subscription
2022-08-08 12:26:09 +02:00
Mark Spanbroek
083af80dcc
Introduce separate type for transaction overrides
2022-07-13 09:04:48 +02:00
Mark Spanbroek
a7d1944406
Allow for custom transaction properties
2022-07-13 09:04:48 +02:00
Mark Spanbroek
95c5282b8a
Raise EthersError when JSON-RPC fails
2022-06-30 10:52:12 +02:00
Mark Spanbroek
9ef6c08072
Handle multiple return types on a contract call
2022-06-14 16:27:43 +02:00
Mark Spanbroek
e61c70f5ba
Fix: handle dynamically sized return values
...
Dynamically sized return values such as strings and
sequences were not decoded as part of a tuple, leading
to a difference in byte representation.
2022-06-08 11:23:01 +02:00
Mark Spanbroek
801bf19157
Remove calls to Option.get
2022-05-25 09:28:15 +02:00
Mark Spanbroek
33df1e759d
Move `confirm` from `jsonrpc` to `provider`
2022-05-25 09:28:15 +02:00
Mark Spanbroek
2653610b6b
Raise EthersError instead of JsonRpcProviderError
2022-05-25 09:28:15 +02:00
Mark Spanbroek
346053e3f2
Turn `confirm` into proc instead of method
2022-05-25 09:28:15 +02:00
Mark Spanbroek
fff0d189a5
Ensure that `confirm` future is only finished once
...
Should fix CI failure
https://github.com/status-im/nim-ethers/runs/6557104597
2022-05-25 09:13:44 +02:00
Mark Spanbroek
649dc8efd0
Allow types that are equivalent to Confirmable
...
Allows ?TransactionResponse, Option[TransactionResponse] etc
to be used instead of Confirmable.
2022-05-25 09:13:44 +02:00
Eric Mastro
c5c9534876
Refactor based on PR comments
...
- `TransactionReceipt.blockHash` is optional
- Block.number is optional (in case node doesn’t return this in the event)
- Refactor confirmations waiting such that there is no polling for a receipt at the start
- Make BlockHandler and SubscriptionHandler async
- change casing of constants
- change return type checking of contract method to check for `Confirmable` instead of `?TransactionRepsonse`
- Reduce miner sleep to 10ms
- Change `wait` and `Waitable` to `confirm` and `Confirmable` to avoid conflict with chrono’s `.wait`.
- Update params on `.confirm` so that the compiler can restrict values of the `int` to `Positive` and `Natural`.
- Add `Block` and `TransactionReceipt` conversion tests to test for missing block number and block hash.
- Add tests for confirmation calculations and determining if a tx has been mined from its receipt.
- Assume that blockNumber returned from node will be null or empty string, in which case we can parse as 0 and test for that condition.
2022-05-23 11:27:26 +10:00
Eric Mastro
a3e888128c
feat: Allow contract transactions to be waited on
...
Allow waiting for a specified number of confirmations for contract transactions.
This change only requires an optional TransactionResponse return type to be added to the contract function. This allows the transaction hash to be passed to `.wait`.
For example, previously the `mint` method looked like this without a return value:
```
method mint(token: TestToken, holder: Address, amount: UInt256) {.base, contract.}
```
it still works without a return value, but if we want to wait for a 3 confirmations, we can now define it like this:
```
method mint(token: TestToken, holder: Address, amount: UInt256): ?TransactionResponse {.base, contract.}
```
and use like this:
```
let receipt = await token.connect(signer0)
.mint(accounts[1], 100.u256)
.wait(3) # wait for 3 confirmations
```
2022-05-23 11:27:26 +10:00
Eric Mastro
2f97a03fe2
feat: Can wait for transaction confirmations
...
Allows specified number of transaction confirmations to be awaited before a transaction is considered finalised. Polls for a transaction receipt then listens for new blocks and calculates the number of blocks between the receipt and the new block.
Notes
1. Only works with websockets currently
2. Replaced transaction not supported yet
2022-05-23 11:27:26 +10:00
Mark Spanbroek
fc0d5c4121
Release memory when unsubscribe fails
...
Ensures that even when a call to the ethereum node to
unsubscribe fails, it will release the memory associated
with the subscription, including the subscription handler
closure.
2022-05-17 19:28:37 +02:00
Mark Spanbroek
bbf133725f
Subscribe to new blocks
2022-05-17 09:08:02 +02:00
Mark Spanbroek
82043c2fcc
Generalize JSON-RPC subscription table
...
Allows for other types of subscriptions, not just logs.
2022-05-17 09:08:02 +02:00
Mark Spanbroek
60f8749ca3
Fix crash when connection fails
...
Removes asyncSpawn call to handleSubscriptions(), to ensure
that when the RpcClient can't connect, we don't crash.
2022-04-19 17:57:16 +02:00
Mark Spanbroek
e3d5ce5122
Fix decoding of events with dynamic arguments
...
Such as byte sequences or strings.
2022-04-13 10:10:53 +02:00
Michael Bradley, Jr
073924d3f5
supply block parameter to eth_call, default being BlockTag.latest
2022-04-11 09:56:49 +02:00
Mark Spanbroek
c49a9cbae9
Decode indexed event parameters bytes1 up to bytes32
2022-03-29 10:48:00 +02:00
Mark Spanbroek
f3cf1c722e
Export JSON conversions
...
Invoking JsonRpcProvider.send() requires
conversion of arguments to JSON and conversion
of result from JSON.
2022-03-17 10:30:42 +01:00
Mark Spanbroek
c53d2235e6
Fix method signature
2022-03-17 10:30:42 +01:00
Mark Spanbroek
ce435f8791
Add Provider.getBlock()
...
Only returns hash, number and timestamp for now.
2022-03-16 14:20:00 +01:00
Mark Spanbroek
72ccb57b98
Fix for Nim 1.2.x
2022-02-09 14:50:51 +01:00
Mark Spanbroek
08becf42bf
Fix for Nim 1.4.x
2022-02-09 14:50:51 +01:00
Mark Spanbroek
3e507af8cc
Move JSON RPC related modules into providers/jsonrpc
2022-02-09 14:50:51 +01:00
Mark Spanbroek
ff5a35aac0
Define and subscribe to solidity events
2022-02-09 14:50:51 +01:00
Mark Spanbroek
21f98c4086
Event decoding from data and topics
2022-02-09 14:50:51 +01:00
Mark Spanbroek
3505149381
Remove {.constant.} pragma
...
Has not been allowed in Solidity since 0.5.0.
2022-01-26 17:58:51 +01:00
Mark Spanbroek
9eee20e49d
Add Contract.connect()
2022-01-26 12:23:30 +01:00
Mark Spanbroek
1e767b2107
Add Signer.signMessage()
2022-01-26 11:21:28 +01:00
Mark Spanbroek
fec6bdc581
Cleanup
2022-01-26 10:31:54 +01:00
Mark Spanbroek
e4224a1241
Allow calls to non-constant functions
2022-01-25 17:29:01 +01:00
Mark Spanbroek
82116d3b14
Add eth_sendTransaction()
2022-01-25 15:08:35 +01:00
Mark Spanbroek
b639e367c0
Reset EVM in between tests
2022-01-25 15:08:35 +01:00
Mark Spanbroek
6bd3e27e38
Add Signer.populateTransaction()
2022-01-25 10:25:09 +01:00
Mark Spanbroek
4acc6ef45c
Add Signer.getChainId()
2022-01-24 17:29:25 +01:00
Mark Spanbroek
7e32f5ee51
Add Signer.estimateGas()
2022-01-24 14:40:47 +01:00
Mark Spanbroek
30bea4759c
Adds Signer.getTransactionCount()
2022-01-24 12:14:31 +01:00
Mark Spanbroek
54c66db827
Adds Signer.getGasPrice()
2022-01-24 12:12:52 +01:00
Mark Spanbroek
94dcc171af
Introduces JsonRpcSigner
2022-01-20 14:39:37 +01:00
Mark Spanbroek
2140084d97
Allow contract procs to be exported
2022-01-20 14:00:28 +01:00
Mark Spanbroek
04ff046553
Introduce Contract abstraction
2022-01-20 12:56:18 +01:00
Mark Spanbroek
b965599a47
Use Address implementation from contractabi
2022-01-20 12:55:14 +01:00
Mark Spanbroek
177ed78d65
Ensure that no unexpected exceptions are raised
2022-01-18 14:51:53 +01:00
Mark Spanbroek
7bc102a421
Provider.getBlockNumber()
2022-01-18 14:26:41 +01:00
Mark Spanbroek
bd20199f87
Send raw messages to the provider
2022-01-18 14:24:46 +01:00
Mark Spanbroek
8dd84b0622
Use Address type in RPC call signature
2022-01-18 12:42:58 +01:00
Mark Spanbroek
05366c4a49
Introduce JsonRpcProvider
2022-01-18 12:10:20 +01:00
Mark Spanbroek
fe688bde79
Introduce Address type
2022-01-18 12:09:20 +01:00