# Etherex Changelog

## Legend

- `[+]` Added: for new features
- `[-]` Removed: for now removed features
- `[C]` Changed: for changes in existing functionality
- `[F]` Fixed: for any bug fixes
- `[O]` Obsolete: for soon-to-be removed features
- `[T]` Technical: change that doesn't affect the API (eg. refactoring, tooling, etc.)

## Next release

- [T]

## 1.0.0-rc18

- [T] Refactor of tests in order to test different nodes (Geth, Openethereum, Ethnode, etc.).
- [F] Some fixed decoding errors (decode_json_rpc_error).
- [+] Extracting the hash from errors when a hash exists.
- [+] A bit of inverse engineering for discovering some formats in different networks (Openethereum or Geth).

## 1.0.0-rc17

- [F] Fix: decoding Events from logs fails when events in the log are not events from the given contract.
- [C] Fix: decoding RPC errors stopped working after upgrading ex_abi.
- [T] Library ex_abi updated to 5.6
- [+] New operations added: minor_start, minor_stop and evm_snapshot (in Etherex.Time)

## 1.0.0-rc16

- [T] More tests: contracts as components of contracts.
- [F] Error decoding improved.
- [+] Default block parameter improved and added to all functions where it is relevant.
- [+] Etherex.syncing function added.

## 1.0.0-rc15

- [F] Error fixed extracting events of a contract.

## 1.0.0-rc14

- [C] Removed flag allowUnlimitedContractSize in GanacheCLI.
- [F] gasLimit flag in Ganache limited to max safe integer (9007199254740991).
- [+] Case {:error, :timeout} added to decode_json_rpc_error.
- [T] Command line in lib/etherex/client.ex constructed at compile time.

## 1.0.0-rc13

- [C] Flag --optimize added to Solidity compiler.

## 1.0.0-rc12

- [+] New clients: Openethereum and Geth (not with ethnode).
- [T] Specific arguments for starting Ethereum clients.
- [T] Tests for Etherex.Time.mine

## 1.0.0-rc11

- [C] EthNode removed as a client, Openethereum and Geth are now
  clients (although for the moment both are started with ethnode).
- [C] Some error messages in logs when starting a client are now warnings.

## 1.0.0-rc10

- [F] Some functions to return {:ok, nil} when the request does not
  fail but information is not processed yet. Eg. functions to get
  receipts, gas consumption, etc.
- [T] New interesting tests to check that development clients mine the
  block after transactions.
- [F] If Contract.get_events and Contract.get_contract_address to
  return {:ok, nil} if transaction is pending.
- [F] Fixing some error decodings in order to honor the type error().

## 1.0.0-rc9

- [F] Avoiding match error when a client is started and start fails.

## 1.0.0-rc8

- [C] Function renamed: Etherex.get_creation_hash -> Etherex.get_contract_creation_hash
- [C] Function renamed: Etherex.get_creation_address -> Etherex.get_contract_address
- [C] Function renamed: Contract.get_creation_address -> Contract.get_address

## 1.0.0-rc7

- [+] Functions related to contracts to get bytecode, creator, the has
  of the creationg transaction and address of the contract.
- [C] The names of some types has changed: compiled_code() -> bytecode()
- [T] Very strong refactor: Etherex.CompiledCode moved to Contract,
  bytecode and contract instance are now actually opaque (includes
  some accessor).
- [T] Added a new module Etherex.Type with the basic types: address,
  hash, hex, tag, quantity, and unit.

## 1.0.0-rc6

- [T] Tests added for gas cost and gas cost estimation.
- [+] Convenient function added: Etherex.estimate_gas_cost.

## 1.0.0-rc5

- [+] Convenient function added: Etherex.gas_cost
- [+] Added methods Etherex.estimate_gas
- [T] README improved, mainly TODO entries added.

## 1.0.0-rc4

- [+] New public module Etherex.Time with functions to simulate time
  events, for the moment "mine" to force a block to be mined.
- [T] Refactoring: moving some private functions from Etherex to
  Etherex.Helpers (to be used by other modules).
- [+] :latests as default parameter of Etherex.get_block/1.

## 1.0.0-rc3

- [C] Minor change in solidity version to compile examples.
- [+] Ethereum clients as gen servers: API changed.
- [F] Added a case of error when the RPC error cannot be JSON decoded.

## 1.0.0-rc2

- [+] Modules to start/stop Ethereum clients: Etherex.Client.{EthNode, GanacheCLI}

## 1.0.0-rc1

- [+] Initial release with the following types and functions in module `Etherex`:
    - Types:
        address/0
        compiled_code/0
        contract/0
        error/0
        event/0
        hash/0
        quantity/0
        tag/0
        unit/0
    - Functions
        accounts/0
        accounts!/0
        block_number/0
        block_number!/0
        call/5
        call!/5
        call_transaction/5
        call_transaction!/5
        client_version/0
        client_version!/0
        compile_solidity/1
        compile_solidity!/1
        deploy/4
        deploy!/4
        gas_price/0
        gas_price!/0
        get_balance/1
        get_balance!/1
        get_block/1
        get_block!/1
        get_events/2
        get_events!/2
        get_transaction/1
        get_transaction!/1
        get_transaction_receipt/1
        get_transaction_receipt!/1
        net_listening/0
        net_listening!/0
        net_version/0
        net_version!/0
        protocol_version/0
        protocol_version!/0
        transfer/4
        wei_to_decimal/2
        wei_to_string/2
