Commit Graph

17 Commits

Author SHA1 Message Date
Mark Spanbroek a7d1944406 Allow for custom transaction properties 2022-07-13 09:04:48 +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 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
Michael Bradley, Jr 073924d3f5 supply block parameter to eth_call, default being BlockTag.latest 2022-04-11 09:56:49 +02: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 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 6bd3e27e38 Add Signer.populateTransaction() 2022-01-25 10:25:09 +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