curve-token-v2
The implementation for a Curve Token V2 may be viewed on GitHub.
note
Compared to Curve Token v1, the following changes have been made to the API:
minterattribute is public and therefore amintergetter has been generatednameandsymbolattributes can be set viaset_namemintmethod returnsboolburnFrommethod returnsboolburnmethod has been removed
warning
For Curve LP Tokens V1 and V2, non-zero to non-zero approvals are prohibited. Instead, after every non-zero approval,
the allowance for the spender must be reset to 0.
CurveToken.minter
CurveToken.minter() → address: viewGetter for the address of the minter of the token.
<>Source code▼
minter: public(address)
@external
def __init__(_name: String[64], _symbol: String[32], _decimals: uint256, _supply: uint256):
init_supply: uint256 = _supply * 10 **_decimals
self.name = _name
self.symbol = _symbol
self.decimals = _decimals
self.balanceOf[msg.sender] = init_supply
self.total_supply = init_supply
self.minter = msg.sender
log Transfer(ZERO_ADDRESS, msg.sender, init_supply)
▶Example▼
>>> lp_token.minter()
""
CurveToken.set_name
CurveToken.set_name(_name: String[64], _symbol: String[32])Set the name and symbol of the token. This method can only be called by minter.
| Input | Type | Description |
|---|---|---|
name | String[64] | New name of token |
symbol | String[32] | New symbol of token |
<>Source code▼
@external
def set_name(_name: String[64], _symbol: String[32]):
assert Curve(self.minter).owner() == msg.sender
self.name = _name
self.symbol = _symbol
▶Example▼
>>> lp_token.minter()
todo: ""
CurveToken.mint
CurveToken.mint(_to: address, _value: uint256) → boolMint an amount of the token and assign it to an account. This encapsulates the modification of balances such that
the proper events are emitted. Returns True if not reverted.
| Input | Type | Description |
|---|---|---|
_to | address | Receiver of minted tokens |
_value | uint256 | Amount of tokens minted |
Emits: Transfer
<>Source code▼
@external
def mint(_to: address, _value: uint256) -> bool:
"""
@dev Mint an amount of the token and assigns it to an account.
This encapsulates the modification of balances such that the
proper events are emitted.
@param _to The account that will receive the created tokens.
@param _value The amount that will be created.
"""
assert msg.sender == self.minter
assert _to != ZERO_ADDRESS
self.total_supply += _value
self.balanceOf[_to] += _value
log Transfer(ZERO_ADDRESS, _to, _value)
return True
▶Example▼
>>> lp_token.mint()
todo: ""
CurveToken.burnFrom
CurveToken.burnFrom(_to: address, _value: uint256) → boolBurn an amount of the token from a given account. Returns True if not reverted.
| Input | Type | Description |
|---|---|---|
_to | address | Account whose tokens will be burned |
_value | uint256 | Amount that will be burned |
Emits: Transfer
<>Source code▼
@external
def burnFrom(_to: address, _value: uint256) -> bool:
"""
@dev Burn an amount of the token from a given account.
@param _to The account whose tokens will be burned.
@param _value The amount that will be burned.
"""
assert msg.sender == self.minter
assert _to != ZERO_ADDRESS
self.total_supply -= _value
self.balanceOf[_to] -= _value
log Transfer(_to, ZERO_ADDRESS, _value)
return True
▶Example▼
>>> lp_token.burnFrom()
todo: ""