Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 44 additions & 41 deletions packages/ethereum-contracts/contracts/superfluid/SuperToken.sol
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ contract SuperToken is
string calldata s
)
external
virtual
override
initializer // OpenZeppelin Initializable
{
Expand All @@ -142,11 +143,11 @@ contract SuperToken is
emit Transfer(address(0), address(0), 0);
}

function proxiableUUID() public pure override returns (bytes32) {
function proxiableUUID() public pure virtual override returns (bytes32) {
return keccak256("org.superfluid-finance.contracts.SuperToken.implementation");
}

function updateCode(address newAddress) external override {
function updateCode(address newAddress) external virtual override {
if (msg.sender != address(_host)) revert SUPER_TOKEN_ONLY_HOST();
UUPSProxiable._updateCodeAddress(newAddress);

Expand All @@ -167,15 +168,15 @@ contract SuperToken is
* ERC20 Token Info
*************************************************************************/

function name() external view override returns (string memory) {
function name() external view virtual override returns (string memory) {
return _name;
}

function symbol() external view override returns (string memory) {
function symbol() external view virtual override returns (string memory) {
return _symbol;
}

function decimals() external pure override returns (uint8) {
function decimals() external pure virtual override returns (uint8) {
return _STANDARD_DECIMALS;
}

Expand Down Expand Up @@ -233,7 +234,7 @@ contract SuperToken is
bytes memory operatorData,
bool requireReceptionAck
)
private
internal
{
if (from == address(0)) {
revert SUPER_TOKEN_TRANSFER_FROM_ZERO_ADDRESS();
Expand Down Expand Up @@ -421,7 +422,7 @@ contract SuperToken is
*************************************************************************/

function totalSupply()
public view override returns (uint256)
public view virtual override returns (uint256)
{
return _totalSupply;
}
Expand All @@ -431,6 +432,7 @@ contract SuperToken is
)
public
view
virtual
override
returns(uint256 balance)
{
Expand All @@ -440,39 +442,39 @@ contract SuperToken is
}

function transfer(address recipient, uint256 amount)
public override returns (bool)
public virtual override returns (bool)
{
return _transferFrom(msg.sender, msg.sender, recipient, amount);
}

function allowance(address account, address spender)
public view override returns (uint256)
public view virtual override returns (uint256)
{
return _allowances[account][spender];
}

function approve(address spender, uint256 amount)
public override
public virtual override
returns (bool)
{
_approve(msg.sender, spender, amount);
return true;
}

function transferFrom(address holder, address recipient, uint256 amount)
public override returns (bool)
public virtual override returns (bool)
{
return _transferFrom(msg.sender, holder, recipient, amount);
}

function increaseAllowance(address spender, uint256 addedValue)
public override returns (bool) {
public virtual override returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
return true;
}

function decreaseAllowance(address spender, uint256 subtractedValue)
public override returns (bool) {
public virtual override returns (bool) {
_approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue,
"SuperToken: decreased allowance below zero"));
return true;
Expand All @@ -482,33 +484,33 @@ contract SuperToken is
* ERC-777 functions
*************************************************************************/

function granularity() external pure override returns (uint256) { return 1; }
function granularity() external pure virtual override returns (uint256) { return 1; }

function send(address recipient, uint256 amount, bytes calldata data) external override {
function send(address recipient, uint256 amount, bytes calldata data) external virtual override {
_send(msg.sender, msg.sender, recipient, amount, data, "", true);
}

function burn(uint256 amount, bytes calldata data) external override {
function burn(uint256 amount, bytes calldata data) external virtual override {
_downgrade(msg.sender, msg.sender, msg.sender, amount, data, "");
}

function isOperatorFor(address operator, address tokenHolder) external override view returns (bool) {
function isOperatorFor(address operator, address tokenHolder) external virtual override view returns (bool) {
return _operators.isOperatorFor(operator, tokenHolder);
}

function authorizeOperator(address operator) external override {
function authorizeOperator(address operator) external virtual override {
address holder = msg.sender;
_operators.authorizeOperator(holder, operator);
emit AuthorizedOperator(operator, holder);
}

function revokeOperator(address operator) external override {
function revokeOperator(address operator) external virtual override {
address holder = msg.sender;
_operators.revokeOperator(holder, operator);
emit RevokedOperator(operator, holder);
}

function defaultOperators() external override view returns (address[] memory) {
function defaultOperators() external virtual override view returns (address[] memory) {
return ERC777Helper.defaultOperators(_operators);
}

Expand All @@ -518,7 +520,7 @@ contract SuperToken is
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external override {
) external virtual override {
address operator = msg.sender;
if (!_operators.isOperatorFor(operator, sender)) revert SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER();
_send(operator, sender, recipient, amount, data, operatorData, true);
Expand All @@ -529,7 +531,7 @@ contract SuperToken is
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external override {
) external virtual override {
address operator = msg.sender;
if (!_operators.isOperatorFor(operator, account)) revert SUPER_TOKEN_CALLER_IS_NOT_OPERATOR_FOR_HOLDER();
_downgrade(operator, account, account, amount, data, operatorData);
Expand All @@ -548,7 +550,7 @@ contract SuperToken is
uint256 amount,
bytes memory userData
)
external override
external virtual override
onlySelf
{
_mint(msg.sender, account, amount,
Expand All @@ -560,7 +562,7 @@ contract SuperToken is
uint256 amount,
bytes memory userData
)
external override
external virtual override
onlySelf
{
_burn(msg.sender, account, amount, userData, new bytes(0));
Expand All @@ -571,7 +573,7 @@ contract SuperToken is
address spender,
uint256 amount
)
external override
external virtual override
onlySelf
{
_approve(account, spender, amount);
Expand All @@ -583,7 +585,7 @@ contract SuperToken is
address recipient,
uint256 amount
)
external override
external virtual override
onlySelf
{
_transferFrom(spender, holder, recipient, amount);
Expand All @@ -594,7 +596,7 @@ contract SuperToken is
*************************************************************************/

function transferAll(address recipient)
external override
external virtual override
{
_transferFrom(msg.sender, msg.sender, recipient, balanceOf(msg.sender));
}
Expand All @@ -604,27 +606,27 @@ contract SuperToken is
*************************************************************************/

/// @dev ISuperfluidGovernance.getUnderlyingToken implementation
function getUnderlyingToken() external view override returns(address) {
function getUnderlyingToken() external view virtual override returns(address) {
return address(_underlyingToken);
}

/// @dev ISuperToken.upgrade implementation
function upgrade(uint256 amount) external override {
function upgrade(uint256 amount) external virtual override {
_upgrade(msg.sender, msg.sender, msg.sender, amount, "", "");
}

/// @dev ISuperToken.upgradeTo implementation
function upgradeTo(address to, uint256 amount, bytes calldata data) external override {
function upgradeTo(address to, uint256 amount, bytes calldata data) external virtual override {
_upgrade(msg.sender, msg.sender, to, amount, data, "");
}

/// @dev ISuperToken.downgrade implementation
function downgrade(uint256 amount) external override {
function downgrade(uint256 amount) external virtual override {
_downgrade(msg.sender, msg.sender, msg.sender, amount, "", "");
}

/// @inheritdoc ISuperToken
function downgradeTo(address to, uint256 amount) external override {
function downgradeTo(address to, uint256 amount) external virtual override {
_downgrade(msg.sender, msg.sender, to, amount, "", "");
}

Expand All @@ -635,7 +637,7 @@ contract SuperToken is
uint256 amount,
bytes memory userData,
bytes memory operatorData
) private {
) internal {
if (address(_underlyingToken) == address(0)) revert SUPER_TOKEN_NO_UNDERLYING_TOKEN();

(uint256 underlyingAmount, uint256 adjustedAmount) = _toUnderlyingAmount(amount);
Expand All @@ -659,7 +661,8 @@ contract SuperToken is
address to, // the account receiving the underlying tokens
uint256 amount,
bytes memory data,
bytes memory operatorData) private {
bytes memory operatorData
) internal {
if (address(_underlyingToken) == address(0)) revert SUPER_TOKEN_NO_UNDERLYING_TOKEN();

(uint256 underlyingAmount, uint256 adjustedAmount) = _toUnderlyingAmount(amount);
Expand Down Expand Up @@ -711,7 +714,7 @@ contract SuperToken is
address spender,
uint256 amount
)
external override
external virtual override
onlyHost
{
_approve(account, spender, amount);
Expand All @@ -722,7 +725,7 @@ contract SuperToken is
address spender,
uint256 addedValue
)
external override
external virtual override
onlyHost
{
_approve(account, spender, _allowances[account][spender] + addedValue);
Expand All @@ -733,7 +736,7 @@ contract SuperToken is
address spender,
uint256 subtractedValue
)
external override
external virtual override
onlyHost
{
_approve(account, spender, _allowances[account][spender].sub(subtractedValue,
Expand All @@ -746,7 +749,7 @@ contract SuperToken is
address recipient,
uint256 amount
)
external override
external virtual override
onlyHost
{
_transferFrom(account, spender, recipient, amount);
Expand All @@ -758,21 +761,21 @@ contract SuperToken is
uint256 amount,
bytes memory userData
)
external override
external virtual override
onlyHost
{
_send(msg.sender, spender, recipient, amount, userData, "", true);
}

function operationUpgrade(address account, uint256 amount)
external override
external virtual override
onlyHost
{
_upgrade(msg.sender, account, account, amount, "", "");
}

function operationDowngrade(address account, uint256 amount)
external override
external virtual override
onlyHost
{
_downgrade(msg.sender, account, account, amount, "", "");
Expand Down
Loading