Commit Graph

206 Commits

Author SHA1 Message Date
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 0549800af6 version 0.1.6 2022-05-17 19:28:52 +02: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 8c45babcdf version 0.1.5 2022-04-19 17:57:16 +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 a0dca2674d version 0.1.4 2022-04-13 10:10:53 +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 ac74b91f11 version 0.1.3 2022-03-29 10:48:00 +02:00
Mark Spanbroek c49a9cbae9 Decode indexed event parameters bytes1 up to bytes32 2022-03-29 10:48:00 +02:00
Mark Spanbroek fc8af1117c version 0.1.2 2022-03-17 10:30:42 +01: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 acc4fc25e6 version 0.1.1 2022-03-16 14:20:56 +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 5cc1f4b71d Add documentation about events 2022-02-09 14:50:51 +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 27d6e89672 Fix CI 2022-01-27 10:07:52 +01:00
Mark Spanbroek 3940233bc9 Add Readme 2022-01-26 17:58: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 d4d0925c3e Add CI script 2022-01-26 17:58:51 +01:00
Mark Spanbroek 062b367f32 Ensure that tests run on Nim 1.2.x 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 e833c08303 Additional tests for contract macro 2022-01-26 10:38:17 +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 609578190b Ethereum test node deploys ERC20 token 2022-01-20 12:44:35 +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