Skip to content

Commit

Permalink
chore: add prefix to ERC interfaces (vyperlang#3804)
Browse files Browse the repository at this point in the history
change ERC20 etc to IERC<...> to follow standard conventions
  • Loading branch information
tserg authored Feb 24, 2024
1 parent 977ad79 commit f97f4eb
Show file tree
Hide file tree
Showing 19 changed files with 78 additions and 78 deletions.
8 changes: 4 additions & 4 deletions docs/interfaces.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ The ``default_return_value`` parameter can be used to handle ERC20 tokens affect

.. code-block:: vyper
ERC20(USDT).transfer(msg.sender, 1, default_return_value=True) # returns True
ERC20(USDT).transfer(msg.sender, 1) # reverts because nothing returned
IERC20(USDT).transfer(msg.sender, 1, default_return_value=True) # returns True
IERC20(USDT).transfer(msg.sender, 1) # reverts because nothing returned
.. warning::

Expand Down Expand Up @@ -164,9 +164,9 @@ Vyper includes common built-in interfaces such as `ERC20 <https://eips.ethereum.

.. code-block:: vyper
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
implements: ERC20
implements: IERC20
You can see all the available built-in interfaces in the `Vyper GitHub <https://github.com/vyperlang/vyper/tree/master/vyper/builtins/interfaces>`_ repo.

Expand Down
6 changes: 3 additions & 3 deletions examples/factory/Exchange.vy
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
#pragma version >0.3.10

from ethereum.ercs import ERC20
from ethereum.ercs import IERC20


interface Factory:
def register(): nonpayable


token: public(ERC20)
token: public(IERC20)
factory: Factory


@deploy
def __init__(_token: ERC20, _factory: Factory):
def __init__(_token: IERC20, _factory: Factory):
self.token = _token
self.factory = _factory

Expand Down
8 changes: 4 additions & 4 deletions examples/factory/Factory.vy
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
#pragma version >0.3.10

from ethereum.ercs import ERC20
from ethereum.ercs import IERC20

interface Exchange:
def token() -> ERC20: view
def token() -> IERC20: view
def receive(_from: address, _amt: uint256): nonpayable
def transfer(_to: address, _amt: uint256): nonpayable


exchange_codehash: public(bytes32)
# Maps token addresses to exchange addresses
exchanges: public(HashMap[ERC20, Exchange])
exchanges: public(HashMap[IERC20, Exchange])


@deploy
Expand Down Expand Up @@ -39,7 +39,7 @@ def register():


@external
def trade(_token1: ERC20, _token2: ERC20, _amt: uint256):
def trade(_token1: IERC20, _token2: IERC20, _amt: uint256):
# Perform a straight exchange of token1 to token 2 (1:1 price)
# NOTE: Any practical implementation would need to solve the price oracle problem
self.exchanges[_token1].receive(msg.sender, _amt)
Expand Down
6 changes: 3 additions & 3 deletions examples/market_maker/on_chain_market_maker.vy
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#pragma version >0.3.10

from ethereum.ercs import ERC20
from ethereum.ercs import IERC20


totalEthQty: public(uint256)
totalTokenQty: public(uint256)
# Constant set in `initiate` that's used to calculate
# the amount of ether/tokens that are exchanged
invariant: public(uint256)
token_address: ERC20
token_address: IERC20
owner: public(address)

# Sets the on chain market maker with its owner, initial token quantity,
Expand All @@ -17,7 +17,7 @@ owner: public(address)
@payable
def initiate(token_addr: address, token_quantity: uint256):
assert self.invariant == 0
self.token_address = ERC20(token_addr)
self.token_address = IERC20(token_addr)
self.token_address.transferFrom(msg.sender, self, token_quantity)
self.owner = msg.sender
self.totalEthQty = msg.value
Expand Down
4 changes: 2 additions & 2 deletions examples/tokens/ERC1155ownable.vy
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"""

############### imports ###############
from ethereum.ercs import ERC165
from ethereum.ercs import IERC165

############### variables ###############
# maximum items in a batch call. Set to 128, to be determined what the practical limits are.
Expand Down Expand Up @@ -100,7 +100,7 @@ event URI:
id: indexed(uint256)

############### interfaces ###############
implements: ERC165
implements: IERC165

interface IERC1155Receiver:
def onERC1155Received(
Expand Down
8 changes: 4 additions & 4 deletions examples/tokens/ERC20.vy
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
# @author Takayuki Jimba (@yudetamago)
# https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md

from ethereum.ercs import ERC20
from ethereum.ercs import ERC20Detailed
from ethereum.ercs import IERC20
from ethereum.ercs import IERC20Detailed

implements: ERC20
implements: ERC20Detailed
implements: IERC20
implements: IERC20Detailed

event Transfer:
sender: indexed(address)
Expand Down
12 changes: 6 additions & 6 deletions examples/tokens/ERC4626.vy
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
## THIS IS EXAMPLE CODE, NOT MEANT TO BE USED IN PRODUCTION! CAVEAT EMPTOR!
###########################################################################

from ethereum.ercs import ERC20
from ethereum.ercs import ERC4626
from ethereum.ercs import IERC20
from ethereum.ercs import IERC4626

implements: ERC20
implements: ERC4626
implements: IERC20
implements: IERC4626

##### ERC20 #####

Expand All @@ -36,7 +36,7 @@ event Approval:

##### ERC4626 #####

asset: public(ERC20)
asset: public(IERC20)

event Deposit:
depositor: indexed(address)
Expand All @@ -53,7 +53,7 @@ event Withdraw:


@deploy
def __init__(asset: ERC20):
def __init__(asset: IERC20):
self.asset = asset


Expand Down
8 changes: 4 additions & 4 deletions examples/tokens/ERC721.vy
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
# @author Ryuya Nakamura (@nrryuya)
# Modified from: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy

from ethereum.ercs import ERC165
from ethereum.ercs import ERC721
from ethereum.ercs import IERC165
from ethereum.ercs import IERC721

implements: ERC721
implements: ERC165
implements: IERC721
implements: IERC165

# Interface for the contract called by safeTransferFrom()
interface ERC721Receiver:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2375,14 +2375,14 @@ def transfer(receiver: address, amount: uint256):
"""

code = """
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
@external
def safeTransfer(erc20: ERC20, receiver: address, amount: uint256) -> uint256:
def safeTransfer(erc20: IERC20, receiver: address, amount: uint256) -> uint256:
assert erc20.transfer(receiver, amount, default_return_value=True)
return 7
@external
def transferBorked(erc20: ERC20, receiver: address, amount: uint256):
def transferBorked(erc20: IERC20, receiver: address, amount: uint256):
assert erc20.transfer(receiver, amount)
"""
bad_erc20 = get_contract(bad_erc20_code)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def qux() -> library.SomeStruct:
# test calls to library functions in statement position
def test_library_statement_calls(get_contract, make_input_bundle, tx_failed):
library_source = """
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
@internal
def check_adds_to_ten(x: uint256, y: uint256):
assert x + y == 10
Expand Down
10 changes: 5 additions & 5 deletions tests/functional/codegen/test_interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ def test(_owner: address): nonpayable

def test_basic_interface_implements(assert_compile_failed):
code = """
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
implements: ERC20
implements: IERC20
@external
def test() -> bool:
Expand Down Expand Up @@ -382,15 +382,15 @@ def transfer(to: address, amount: uint256) -> bool:
"""

code = """
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
token_address: ERC20
token_address: IERC20
@deploy
def __init__(_token_address: address):
self.token_address = ERC20(_token_address)
self.token_address = IERC20(_token_address)
@external
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,9 @@ def bar()->DynArray[uint16,3]:
return self.a # return [1,2]
""",
"""
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
token: ERC20
token: IERC20
@external
@view
Expand Down
6 changes: 3 additions & 3 deletions tests/functional/syntax/test_functions_call.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ def foo(x: int128) -> uint256:
return convert(x, uint256)
""",
"""
from ethereum.ercs import ERC20
from ethereum.ercs import IERC20
interface Factory:
def getExchange(token_addr: address) -> address: view
token: ERC20
token: IERC20
factory: Factory
@external
def setup(token_addr: address):
self.token = ERC20(token_addr)
self.token = IERC20(token_addr)
assert self.factory.getExchange(self.token.address) == self
""",
]
Expand Down
Loading

0 comments on commit f97f4eb

Please sign in to comment.