Environment Variables and Constants¶
Environment Variables¶
Environment variables always exist in the namespace and are primarily used to provide information about the blockchain or current transaction.
Block and Transaction Properties¶
| Name | Type | Value |
|---|---|---|
block.coinbase |
address |
Current block miner’s address |
block.difficulty |
uint256 |
Current block difficulty |
block.number |
uint256 |
Current block number |
block.prevhash |
bytes32 |
Equivalent to blockhash(block.number - 1) |
block.timestamp |
uint256 |
Current block epoch timestamp |
chain.id |
uint256 |
Chain ID |
msg.gas |
uint256 |
Remaining gas |
msg.sender |
address |
Sender of the message (current call) |
msg.value |
uint256 |
Number of wei sent with the message |
tx.origin |
address |
Sender of the transaction (full call chain) |
Note
msg.sender and msg.value can only be accessed from external functions. If you require these values within a private function they must be passed as parameters.
The self Variable¶
self is an environment variable used to reference a contract from within itself. Along with the normal address members, self allows you to read and write to state variables and to call private functions within the contract.
| Name | Type | Value |
|---|---|---|
self |
address |
Current contract’s address |
self.balance |
uint256 |
Current contract’s balance |
Accessing State Variables¶
self is used to access a contract’s state variables, as shown in the following example:
state_var: uint256
@external
def set_var(value: uint256) -> bool:
self.state_var = value
return True
@external
@view
def get_var() -> uint256:
return self.state_var
Calling Internal Functions¶
self is also used to call internal functions within a contract:
@internal
def _times_two(amount: uint256) -> uint256:
return amount * 2
@external
def calculate(amount: uint256) -> uint256:
return self._times_two(amount)
Built In Constants¶
Vyper has a few convenience constants builtin.
| Name | Type | Value |
|---|---|---|
ZERO_ADDRESS |
address |
0x0000000000000000000000000000000000000000 |
EMPTY_BYTES32 |
bytes32 |
0x0000000000000000000000000000000000000000000000000000000000000000 |
MAX_INT128 |
int128 |
2**127 - 1 |
MIN_INT128 |
int128 |
-2**127 |
MAX_DECIMAL |
decimal |
(2**127 - 1) |
MIN_DECIMAL |
decimal |
(-2**127) |
MAX_UINT256 |
uint256 |
2**256 - 1 |
Custom Constants¶
Custom constants can be defined at a global level in Vyper. To define a constant make use of the constant keyword.
TOTAL_SUPPLY: constant(uint256) = 10000000
total_supply: public(uint256)
@external
def __init__():
self.total_supply = TOTAL_SUPPLY