- Updated
Nethereum
to3.3.0
. - Updated
Protobuf
to3.9.0
. - Added full support for subscribing to specific event topics for Go contracts. Previously, this had to be done through the
IRpcClient
directly, which was error-prone and ignored the order of calls. Now, subscribing/unsubscribing are separate operations. SeeDAppChainClient.SubscribeToEvents/UnsubscribeFromAllEvents/SubscribeToEvents/UnsubscribeFromEvents
. - Added
RawChainEventContract
, which is similar toRawChainEventContract
, but isn't expecting the event data to be in JSON-RPC format. - Fixed fetching EVM logs with a filter applied not working in some cases.
- Fixed link.xml to work on AOT platform with bytecode stripping enabled.
- Prioritize write client for getting nonce.
- Implemented speculative nonce.
- Fixed concurrency issues in
CryptoUtils
. - Increment retry delay on invalid nonce exponentially instead.
- Fixed tests to compile with Solidity 0.5.0 compiler.
- Fixed building in Unity 2019.1.
- Use
DAppChainClientConfiguration
class forDAppChainClient
options instead of having multiple properties inside ofDAppChainClient
.timeout
optional parameter is now gone fromContract.Call*
methods, modifyCallTimeout
andStaticCallTimeout
inDAppChainClient.Configuration
now. - Modified
Loom.Nethereum.Minimal.Packed.dll
to not use PublicKey when referencingLoom.Newtonsoft.Json
(was causing assembly reference mismatch in Unity in some cases). - Fixed an issue in
WebSocketRpcClient
that caused timeouts when multiple calls were going on at the same time. - Added
Address.FromBytes
convenience method. - Added
EvmContract.GetEvent
andEvmEvent
, allows getting past event with filters (covers #50 and #12). - Added
EvmContract.GetBlockHeight
. - Added
IDAppChainClientCallExecutor
, a layer that controls the blockchain calls flow. All calls made from insideDAppChainClient
must be wrapped inIDAppChainClientCallExecutor
methods calls. CallingIRpcClient.SendAsync
directly on an instance ofIRpcClient
should now be considered unsafe. - Implemented
DefaultDAppChainClientCallExecutor
:- Calls throw a
TimeoutException
if the calls receives no response for too long. - Calls are queued, there can be only one active call at any given moment.
- If the blockchain reports an invalid nonce, the call will be retried a number of times.
- Calls throw a