Data Types¶
Brownie uses custom data types to simplify working with common represented values.
Wei¶
The Wei
class is used when a value is meant to represent an amount of Ether. It is a subclass of int
capable of converting strings, scientific notation and hex strings into wei denominated integers:
>>> Wei("1 ether")
1000000000000000000
>>> Wei("12.49 gwei")
12490000000
>>> Wei("0.029 shannon")
29000000
>>> Wei(8.38e32)
838000000000000000000000000000000
It also converts other values to Wei
before performing comparisons, addition or subtraction:
>>> Wei(1e18) == "1 ether"
True
>>> Wei("1 ether") < "2 ether"
True
>>> Wei("1 ether") - "0.75 ether"
250000000000000000
Whenever a Brownie method takes an input referring to an amount of ether, the given value is converted to Wei
. Balances and uint
/int
values returned in contract calls and events are given in Wei
.
>>> accounts[0].balance()
100000000000000000000
>>> type(accounts[0].balance())
<class 'brownie.convert.Wei'>
Fixed¶
The Fixed
class is used to handle Vyper decimal values. It is a subclass of decimal.Decimal
that allows comparisons, addition and subtraction against strings, integers and Wei
.
>>> Fixed(1)
Fixed('1')
>>> Fixed("3.1337")
Fixed('3.1337')
>>> Fixed("12.49 gwei")
Fixed('12490000000')
>>> Fixed("-1.23") == "-1.2300"
True
Attempting to assign, compare or perform arithmetic against a float raises a TypeError
.
>>> Fixed(3.1337)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: Cannot convert float to decimal - use a string instead
>>> Fixed("-1.23") == -1.2300
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: Cannot compare to floating point - use a string instead