Repository: eth-brownie/brownie
Issue: KeyError: 'language' when allow_revert: True

### Environment information

* `brownie` Version: Brownie v1.13.1
* `ganache-cli` Version: Ganache CLI v6.12.2 (ganache-core: 2.13.2)
* `solc` Version: 0.6.12+commit.27d51765.Linux.g++
* Python Version: 3.6.9
* OS: linux

### What was wrong?
When a transaction revert, an error occurs when allow_revert is True.

Command
```
tx = x.create(2, params, {'from':accounts[-1], "gas":3000000, "allow_revert": True})
```

Error Msg
```
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 495, in _await_confirmation
    print(self._confirm_output())
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 545, in _confirm_output
    revert_msg = self.revert_msg if web3.supports_traces else None
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 44, in wrapper
    return fn(self)
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 253, in revert_msg
    self._get_trace()
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 607, in _get_trace
    self._reverted_trace(trace)
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 658, in _reverted_trace
    self._expand_trace()
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 783, in _expand_trace
    last_map[trace[i]["depth"]] = _get_last_map(address, sig)
  File "/home/sanghyun/.local/pipx/venvs/eth-brownie/lib/python3.6/site-packages/brownie/network/transaction.py", line 1326, in _get_last_map
    if contract._build["language"] == "Solidity":
KeyError: 'language'
```

contract._build
```
{'abi': [{'inputs': [{'internalType': 'string', 'name': '_name', 'type': 'string'}, {'internalType': 'string', 'name': '_symbol', 'type': 'string'}, {'internalType': 'uint8', 'name': '_decimals', 'type': 'uint8'}], 'stateMutability': 'nonpayable', 'type': 'constructor', 'name': 'constructor'}, {'anonymous': False, 'inputs': [{'indexed': False, 'internalType': 'address', 'name': '_from', 'type': 'address'}, {'indexed': False, 'internalType': 'address', 'name': '_to', 'type': 'address'}, {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}], 'name': 'Approval', 'type': 'event'}, {'anonymous': False, 'inputs': [{'indexed': False, 'internalType': 'address', 'name': '_from', 'type': 'address'}, {'indexed': False, 'internalType': 'address', 'name': '_to', 'type': 'address'}, {'indexed': False, 'internalType': 'uint256', 'name': 'amount', 'type': 'uint256'}], 'name': 'Transfer', 'type': 'event'}, {'inputs': [{'internalType': 'address', 'name': '_owner', 'type': 'address'}, {'internalType': 'address', 'name': '_spender', 'type': 'address'}], 'name': 'allowance', 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'internalType': 'address', 'name': '_spender', 'type': 'address'}, {'internalType': 'uint256', 'name': '_value', 'type': 'uint256'}], 'name': 'approve', 'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}], 'stateMutability': 'nonpayable', 'type': 'function'}, {'inputs': [{'internalType': 'address', 'name': '_owner', 'type': 'address'}], 'name': 'balanceOf', 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'decimals', 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'name', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'symbol', 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [], 'name': 'totalSupply', 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], 'stateMutability': 'view', 'type': 'function'}, {'inputs': [{'internalType': 'address', 'name': '_to', 'type': 'address'}, {'internalType': 'uint256', 'name': '_value', 'type': 'uint256'}], 'name': 'transfer', 'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}], 'stateMutability': 'nonpayable', 'type': 'function'}, {'inputs': [{'internalType': 'address', 'name': '_from', 'type': 'address'}, {'internalType': 'address', 'name': '_to', 'type': 'address'}, {'internalType': 'uint256', 'name': '_value', 'type': 'uint256'}], 'name': 'transferFrom', 'outputs': [{'internalType': 'bool', 'name': '', 'type': 'bool'}], 'stateMutability': 'nonpayable', 'type': 'function'}], 'address': '0x2791BfD60D232150Bff86b39B7146c0eaAA2BA81', 'contractName': 'ERC20', 'type': 'contract'}
```

Compile list
```
...
...
...
 - SupportsInterface
 - Address
 - ERC20
 - LowGasSafeMath
 - SafeERC20
```


### How can it be fixed?
in my case
Original
```
if contract._build["language"] == "Solidity":
```

Fixed
```
if True or contract._build["language"] == "Solidity":
```

But I don't think this is a fundamental solution.

Changed files:
brownie/network/transaction.py

diff --git a/brownie/network/transaction.py b/brownie/network/transaction.py
index 96d2116d..ebb554ae 100644
--- a/brownie/network/transaction.py
+++ b/brownie/network/transaction.py
@@ -1363,7 +1363,7 @@ def _get_last_map(address: EthAddress, sig: str) -> Dict:
         if isinstance(contract._project, project_main.Project):
             # only evaluate coverage for contracts that are part of a `Project`
             last_map["coverage"] = True
-            if contract._build["language"] == "Solidity":
+            if contract._build.get("language") == "Solidity":
                 last_map["active_branches"] = set()
     else:
         last_map.update(contract=None, internal_calls=[f"<UnknownContract>.{sig}"], pc_map=None)