Address Contract Verified
Address
0x6aFF2526D50fA742ca08Ed1cf6E3cf7987A30F5c
Balance
0 ETH
Nonce
1
Code Size
2999 bytes
Creator
0xB42fBa3D...6fD5 at tx 0x64055d66...028062
Indexed Transactions
0
Contract Bytecode
2999 bytes
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a0823111610097578063b60d428811610066578063b60d4288146102df578063c0a755b914610303578063dd5645b61461033b578063dd62ed3e14610371576100f5565b806370a082311461025957806395d89b411461027f578063a457c2d714610287578063a9059cbb146102b3576100f5565b806323b872dd116100d357806323b872dd146101d1578063313ce5671461020757806339509351146102255780636ebc0af114610251576100f5565b806306fdde03146100fa578063095ea7b31461017757806318160ddd146101b7575b600080fd5b61010261039f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561013c578181015183820152602001610124565b50505050905090810190601f1680156101695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a36004803603604081101561018d57600080fd5b506001600160a01b03813516906020013561042d565b604080519115158252519081900360200190f35b6101bf6104c6565b60408051918252519081900360200190f35b6101a3600480360360608110156101e757600080fd5b506001600160a01b0381358116916020810135909116906040013561057d565b61020f610634565b6040805160ff9092168252519081900360200190f35b6101a36004803603604081101561023b57600080fd5b506001600160a01b038135169060200135610639565b6101bf6106e7565b6101bf6004803603602081101561026f57600080fd5b50356001600160a01b031661070b565b6101026107d4565b6101a36004803603604081101561029d57600080fd5b506001600160a01b03813516906020013561082e565b6101a3600480360360408110156102c957600080fd5b506001600160a01b0381351690602001356108a7565b6102e761091f565b604080516001600160a01b039092168252519081900360200190f35b6103396004803603606081101561031957600080fd5b506001600160a01b03813581169160208101359091169060400135610943565b005b6103396004803603606081101561035157600080fd5b506001600160a01b038135811691602081013590911690604001356109fc565b6101bf6004803603604081101561038757600080fd5b506001600160a01b0381358116916020013516610ab5565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104255780601f106103fa57610100808354040283529160200191610425565b820191906000526020600020905b81548152906001019060200180831161040857829003601f168201915b505050505081565b604080516328e5429560e11b81523360048201526001600160a01b0384811660248301526044820184905291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa16916351ca852a916064808301928692919082900301818387803b1580156104a557600080fd5b505af11580156104b9573d6000803e3d6000fd5b5060019695505050505050565b60007f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa6001600160a01b0316630cde859c7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561054c57600080fd5b505afa158015610560573d6000803e3d6000fd5b505050506040513d602081101561057657600080fd5b5051905090565b60408051639ae1119f60e01b81523360048201526001600160a01b03858116602483015284811660448301526064820184905291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa1691639ae1119f91608480830192602092919082900301818787803b1580156105fe57600080fd5b505af1158015610612573d6000803e3d6000fd5b505050506040513d602081101561062857600080fd5b50600195945050505050565b601281565b60408051631027be2b60e01b81523360048201526001600160a01b0384811660248301526044820184905291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa1691631027be2b91606480830192602092919082900301818787803b1580156106b257600080fd5b505af11580156106c6573d6000803e3d6000fd5b505050506040513d60208110156106dc57600080fd5b506001949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa6001600160a01b031663d8e660627f0000000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b1580156107a257600080fd5b505afa1580156107b6573d6000803e3d6000fd5b505050506040513d60208110156107cc57600080fd5b505192915050565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104255780601f106103fa57610100808354040283529160200191610425565b6040805163f4db872b60e01b81523360048201526001600160a01b0384811660248301526044820184905291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa169163f4db872b91606480830192602092919082900301818787803b1580156106b257600080fd5b60408051635cef6e3560e11b81523360048201526001600160a01b0384811660248301526044820184905291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa169163b9dedc6a916064808301928692919082900301818387803b1580156104a557600080fd5b7f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa81565b336001600160a01b037f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa16146109ac576040805162461bcd60e51b815260206004820152600960248201526813db9b1e48199d5b9960ba1b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b336001600160a01b037f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa1614610a65576040805162461bcd60e51b815260206004820152600960248201526813db9b1e48199d5b9960ba1b604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60408051634ee3931760e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038481166024830152838116604483015291516000927f000000000000000000000000811c9dd8b7b670a78d02fac592ebbe465e5dd0fa1691639dc7262e916064808301926020929190829003018186803b158015610b4e57600080fd5b505afa158015610b62573d6000803e3d6000fd5b505050506040513d6020811015610b7857600080fd5b5051939250505056fea2646970667358221220019d2ac6e76689199ead23e4df44a402fe42da1bc8da87fba7151baac3e932ff64736f6c634300060c0033
Verified Source Code Full Match
Compiler: v0.6.12+commit.27d51765
EVM: istanbul
Optimization: Yes (200 runs)
ShareV2.sol 88 lines
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.10 <0.8.0;
import "../interfaces/IFundV3.sol";
import "../interfaces/IShareV2.sol";
contract ShareV2 is IShareV2 {
uint8 public constant decimals = 18;
IFundV3 public immutable fund;
uint256 public immutable tranche;
string public name;
string public symbol;
constructor(
string memory name_,
string memory symbol_,
address fund_,
uint256 tranche_
) public {
name = name_;
symbol = symbol_;
fund = IFundV3(fund_);
tranche = tranche_;
}
function totalSupply() external view override returns (uint256) {
return fund.trancheTotalSupply(tranche);
}
function balanceOf(address account) external view override returns (uint256) {
return fund.trancheBalanceOf(tranche, account);
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
fund.shareTransfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) external view override returns (uint256) {
return fund.trancheAllowance(tranche, owner, spender);
}
function approve(address spender, uint256 amount) external override returns (bool) {
fund.shareApprove(msg.sender, spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
fund.shareTransferFrom(msg.sender, sender, recipient, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
fund.shareIncreaseAllowance(msg.sender, spender, addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
fund.shareDecreaseAllowance(msg.sender, spender, subtractedValue);
return true;
}
modifier onlyFund() {
require(msg.sender == address(fund), "Only fund");
_;
}
function fundEmitTransfer(
address sender,
address recipient,
uint256 amount
) external override onlyFund {
emit Transfer(sender, recipient, amount);
}
function fundEmitApproval(
address owner,
address spender,
uint256 amount
) external override onlyFund {
emit Approval(owner, spender, amount);
}
}
IFundV3.sol 198 lines
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.10 <0.8.0;
pragma experimental ABIEncoderV2;
import "./ITwapOracleV2.sol";
interface IFundV3 {
/// @notice A linear transformation matrix that represents a rebalance.
///
/// ```
/// [ 1 0 0 ]
/// R = [ ratioB2Q ratioBR 0 ]
/// [ ratioR2Q 0 ratioBR ]
/// ```
///
/// Amounts of the three tranches `q`, `b` and `r` can be rebalanced by multiplying the matrix:
///
/// ```
/// [ q', b', r' ] = [ q, b, r ] * R
/// ```
struct Rebalance {
uint256 ratioB2Q;
uint256 ratioR2Q;
uint256 ratioBR;
uint256 timestamp;
}
function tokenUnderlying() external view returns (address);
function tokenQ() external view returns (address);
function tokenB() external view returns (address);
function tokenR() external view returns (address);
function tokenShare(uint256 tranche) external view returns (address);
function primaryMarket() external view returns (address);
function primaryMarketUpdateProposal() external view returns (address, uint256);
function strategy() external view returns (address);
function strategyUpdateProposal() external view returns (address, uint256);
function underlyingDecimalMultiplier() external view returns (uint256);
function twapOracle() external view returns (ITwapOracleV2);
function feeCollector() external view returns (address);
function endOfDay(uint256 timestamp) external pure returns (uint256);
function trancheTotalSupply(uint256 tranche) external view returns (uint256);
function trancheBalanceOf(uint256 tranche, address account) external view returns (uint256);
function trancheAllBalanceOf(address account) external view returns (uint256, uint256, uint256);
function trancheBalanceVersion(address account) external view returns (uint256);
function trancheAllowance(
uint256 tranche,
address owner,
address spender
) external view returns (uint256);
function trancheAllowanceVersion(
address owner,
address spender
) external view returns (uint256);
function trancheTransfer(
uint256 tranche,
address recipient,
uint256 amount,
uint256 version
) external;
function trancheTransferFrom(
uint256 tranche,
address sender,
address recipient,
uint256 amount,
uint256 version
) external;
function trancheApprove(
uint256 tranche,
address spender,
uint256 amount,
uint256 version
) external;
function getRebalanceSize() external view returns (uint256);
function getRebalance(uint256 index) external view returns (Rebalance memory);
function getRebalanceTimestamp(uint256 index) external view returns (uint256);
function currentDay() external view returns (uint256);
function splitRatio() external view returns (uint256);
function historicalSplitRatio(uint256 version) external view returns (uint256);
function fundActivityStartTime() external view returns (uint256);
function isFundActive(uint256 timestamp) external view returns (bool);
function getEquivalentTotalB() external view returns (uint256);
function getEquivalentTotalQ() external view returns (uint256);
function historicalEquivalentTotalB(uint256 timestamp) external view returns (uint256);
function historicalNavs(uint256 timestamp) external view returns (uint256 navB, uint256 navR);
function extrapolateNav(uint256 price) external view returns (uint256, uint256, uint256);
function doRebalance(
uint256 amountQ,
uint256 amountB,
uint256 amountR,
uint256 index
) external view returns (uint256 newAmountQ, uint256 newAmountB, uint256 newAmountR);
function batchRebalance(
uint256 amountQ,
uint256 amountB,
uint256 amountR,
uint256 fromIndex,
uint256 toIndex
) external view returns (uint256 newAmountQ, uint256 newAmountB, uint256 newAmountR);
function refreshBalance(address account, uint256 targetVersion) external;
function refreshAllowance(address owner, address spender, uint256 targetVersion) external;
function shareTransfer(address sender, address recipient, uint256 amount) external;
function shareTransferFrom(
address spender,
address sender,
address recipient,
uint256 amount
) external returns (uint256 newAllowance);
function shareIncreaseAllowance(
address sender,
address spender,
uint256 addedValue
) external returns (uint256 newAllowance);
function shareDecreaseAllowance(
address sender,
address spender,
uint256 subtractedValue
) external returns (uint256 newAllowance);
function shareApprove(address owner, address spender, uint256 amount) external;
function historicalUnderlying(uint256 timestamp) external view returns (uint256);
function getTotalUnderlying() external view returns (uint256);
function getStrategyUnderlying() external view returns (uint256);
function getTotalDebt() external view returns (uint256);
event RebalanceTriggered(
uint256 indexed index,
uint256 indexed day,
uint256 navSum,
uint256 navB,
uint256 navROrZero,
uint256 ratioB2Q,
uint256 ratioR2Q,
uint256 ratioBR
);
event Settled(uint256 indexed day, uint256 navB, uint256 navR, uint256 interestRate);
event InterestRateUpdated(uint256 baseInterestRate, uint256 floatingInterestRate);
event BalancesRebalanced(
address indexed account,
uint256 version,
uint256 balanceQ,
uint256 balanceB,
uint256 balanceR
);
event AllowancesRebalanced(
address indexed owner,
address indexed spender,
uint256 version,
uint256 allowanceQ,
uint256 allowanceB,
uint256 allowanceR
);
}
IShareV2.sol 10 lines
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.10 <0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IShareV2 is IERC20 {
function fundEmitTransfer(address sender, address recipient, uint256 amount) external;
function fundEmitApproval(address owner, address spender, uint256 amount) external;
}
ITwapOracle.sol 14 lines
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.10 <0.8.0;
interface ITwapOracle {
enum UpdateType {
PRIMARY,
SECONDARY,
OWNER,
CHAINLINK,
UNISWAP_V2
}
function getTwap(uint256 timestamp) external view returns (uint256);
}
ITwapOracleV2.sol 8 lines
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.6.10 <0.8.0;
import "./ITwapOracle.sol";
interface ITwapOracleV2 is ITwapOracle {
function getLatest() external view returns (uint256);
}
IERC20.sol 77 lines
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
fund 0xb60d4288 → address
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tranche 0x6ebc0af1 → uint256
Write Contract 7 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
fundEmitApproval 0xc0a755b9
address owner
address spender
uint256 amount
fundEmitTransfer 0xdd5645b6
address sender
address recipient
uint256 amount
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
Recent Transactions
No transactions found for this address