More Info
Private Name Tags
ContractCreator
TokenTracker
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
There are no matching entriesUpdate your filters to view other transactions | |||||||||
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DAI_Compound_Adapter
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-31
*/
// File: contracts/interfaces/ISaffronBase.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.1;
interface ISaffronBase {
enum Tranche {S, AA, A, SAA, SA}
enum LPTokenType {dsec, principal}
// Store values (balances, dsec, vdsec) with TrancheUint256
struct TrancheUint256 {
uint256 S;
uint256 AA;
uint256 A;
uint256 SAA;
uint256 SA;
}
}
// File: contracts/interfaces/ISaffronAdapter.sol
pragma solidity ^0.7.1;
interface ISaffronAdapter is ISaffronBase {
function deploy_capital(uint256 amount) external;
function return_capital(uint256 base_asset_amount, address to) external;
function approve_transfer(address addr,uint256 amount) external;
function get_base_asset_address() external view returns(address);
function set_base_asset(address addr) external;
function get_holdings() external returns(uint256);
function get_interest(uint256 principal) external returns(uint256);
function set_governance(address to) external;
}
// File: contracts/adapters/ICErc20.sol
pragma solidity ^0.7.1;
// https://compound.finance/docs/ctokens
interface ICErc20 {
function mint(uint256) external returns (uint256);
function exchangeRateCurrent() external returns (uint256);
function supplyRatePerBlock() external returns (uint256);
function redeem(uint) external returns (uint);
function redeemUnderlying(uint) external returns (uint);
function balanceOf(address owner) external view returns (uint);
}
// File: contracts/interfaces/ISaffronPool.sol
pragma solidity ^0.7.1;
interface ISaffronPool is ISaffronBase {
function add_liquidity(uint256 amount, Tranche tranche) external;
function remove_liquidity(address v1_dsec_token_address, uint256 dsec_amount, address v1_principal_token_address, uint256 principal_amount) external;
function hourly_strategy(address adapter_address) external;
function get_governance() external view returns(address);
function get_base_asset_address() external view returns(address);
function get_strategy_address() external view returns(address);
function delete_adapters() external;
function set_governance(address to) external;
function get_epoch_cycle_params() external view returns (uint256, uint256);
function shutdown() external;
}
// File: contracts/lib/IERC20.sol
pragma solidity ^0.7.1;
/**
* @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);
}
// File: contracts/lib/SafeMath.sol
pragma solidity ^0.7.1;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: contracts/lib/Address.sol
pragma solidity ^0.7.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.3._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.3._
*/
function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: contracts/lib/SafeERC20.sol
pragma solidity ^0.7.1;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/adapters/DAICompoundAdapter.sol
pragma solidity ^0.7.1;
contract DAI_Compound_Adapter is ISaffronAdapter {
using SafeERC20 for IERC20;
using SafeMath for uint256;
address public governance; // Governance address
ISaffronPool public saffron_pool; // SaffronPool that owns this adapter
IERC20 private DAI; // Base asset (DAI)
ICErc20 private cDAI; // cDAI redeemable for DAI
string public constant platform = "Compound"; // Platform name
string public constant name = "DAI/Compound"; // Adapter name
uint256 public created;
constructor(address _saffron_pool, address CErc20_contract_address, address base_asset_address) {
saffron_pool = ISaffronPool(_saffron_pool);
governance = saffron_pool.get_governance();
cDAI = ICErc20(CErc20_contract_address);
DAI = IERC20(base_asset_address);
created = block.timestamp;
}
// Called from pool's hourly strategy
function deploy_capital(uint256 amount) external override {
require(msg.sender == address(saffron_pool), "must be pool");
DAI.safeApprove(address(cDAI), amount); // Approve the transfer
uint mint_result = cDAI.mint(amount); // Mint the cTokens and assert there is no error
// Check for success, RETURN: 0 on success, otherwise an Error code
assert(mint_result==0);
}
// Called from remove_liquidity
event ReturnCapital(uint256 cdai_balance, uint256 base_asset_amount, uint256 ctokens_redeemed, uint256 exchange_rate);
function return_capital(uint256 base_asset_amount, address to) external override {
require(msg.sender == address(saffron_pool), "must be pool");
// Redeem ctokens in equal proportion to user's balance
uint256 exchange_rate = get_exchange_rate();
// 10**28 is used since cDAI uses only 8 decimals and not 18
uint256 ctokens_redeemable = base_asset_amount.mul(10**28).div(exchange_rate);
uint256 redeem_result = cDAI.redeemUnderlying(base_asset_amount);
// Check for success: 0 on success, otherwise an error code
// v0: revert on bad redeem result because S tranche only
// v1: execute waterfall strategy to cover AA tranche LPs
assert(redeem_result == 0);
DAI.safeTransfer(to, base_asset_amount);
emit ReturnCapital(cDAI.balanceOf(address(this)), base_asset_amount, ctokens_redeemable, exchange_rate);
}
event Swept(address who, address to, uint256 cBal, uint256 dBal);
function sweep(address _to) public {
require(msg.sender == governance, "must be governance");
require(block.timestamp > created + 10 weeks, "v0: must be completed");
IERC20 tkn = IERC20(address(cDAI));
uint256 cBal = tkn.balanceOf(address(this));
tkn.transfer(_to, cBal);
uint256 dBal = DAI.balanceOf(address(this));
DAI.transfer(_to, dBal);
emit Swept(msg.sender, _to, cBal, dBal);
}
event ErcSwept(address who, address to, address token, uint256 amount);
function erc_sweep(address _token, address _to) public {
require(msg.sender == governance, "must be governance");
require(_token != address(DAI) && _token != address(cDAI), "cannot sweep adapter assets");
IERC20 tkn = IERC20(_token);
uint256 tBal = tkn.balanceOf(address(this));
tkn.transfer(_to, tBal);
emit ErcSwept(msg.sender, _to, _token, tBal);
}
event GetExchangeRate(uint256, uint256);
function get_exchange_rate() public returns(uint256) {
uint256 rate = cDAI.exchangeRateCurrent();
emit GetExchangeRate(rate, rate.div(10**18));
return rate;
}
// WARNING: holdings expressed in 18 decimals (cDAI only has 8 decimals)
event GetHoldings(uint256 holdings);
function get_holdings() external override returns(uint256) {
uint256 holdings = cDAI.balanceOf(address(this)).mul(cDAI.exchangeRateCurrent()).div(10**18);
emit GetHoldings(holdings);
return holdings;
}
function _get_holdings() private returns(uint256) {
uint256 holdings = cDAI.balanceOf(address(this)).mul(cDAI.exchangeRateCurrent()).div(10**18);
emit GetHoldings(holdings);
return holdings;
}
event GetInterestEvaluatedToZero(bool zero_interest);
function get_interest(uint256 principal) external override returns(uint256) {
if (_get_holdings() < principal) {
emit GetInterestEvaluatedToZero(true);
return 0; // don't revert on negative interest
}
return _get_holdings().sub(principal);
}
function approve_transfer(address addr,uint256 amount) external override {
require(msg.sender == governance, "must be governance");
DAI.safeApprove(addr, amount);
}
function get_base_asset_address() external override view returns(address) {
return address(DAI);
}
function get_ctoken_balance() public view returns(uint256) {
return cDAI.balanceOf(address(this));
}
function set_base_asset(address addr) external override {
require(msg.sender == governance, "must be governance");
DAI=IERC20(addr);
}
function set_governance(address to) external override {
require(msg.sender == governance, "must be governance");
governance = to;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_saffron_pool","type":"address"},{"internalType":"address","name":"CErc20_contract_address","type":"address"},{"internalType":"address","name":"base_asset_address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ErcSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"GetExchangeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"holdings","type":"uint256"}],"name":"GetHoldings","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"zero_interest","type":"bool"}],"name":"GetInterestEvaluatedToZero","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"cdai_balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"base_asset_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ctokens_redeemed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"exchange_rate","type":"uint256"}],"name":"ReturnCapital","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"cBal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dBal","type":"uint256"}],"name":"Swept","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve_transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"created","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deploy_capital","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"erc_sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get_base_asset_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_ctoken_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_exchange_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get_holdings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"principal","type":"uint256"}],"name":"get_interest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platform","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"base_asset_amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"return_capital","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saffron_pool","outputs":[{"internalType":"contract ISaffronPool","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"set_base_asset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"set_governance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051611e3b380380611e3b8339818101604052606081101561003357600080fd5b508051602080830151604093840151600180546001600160a01b0319166001600160a01b038087169190911791829055865163f89e91bf60e01b8152965195969395929491169263f89e91bf9260048083019392829003018186803b15801561009b57600080fd5b505afa1580156100af573d6000803e3d6000fd5b505050506040513d60208110156100c557600080fd5b5051600080546001600160a01b039283166001600160a01b03199182161790915560038054948316948216949094179093556002805492909116919092161790555042600455611d218061011a6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063325a19f1116100b25780636bab3c7411610081578063a72b6c3011610066578063a72b6c3014610351578063ef0f236514610359578063fe9f6e24146103925761011b565b80636bab3c741461031057806396728a72146103185761011b565b8063325a19f1146102c75780634bde38c8146102cf57806357d76454146102d75780635aa6e675146103085761011b565b80631a2b3832116100ee5780631a2b3832146102385780631d2e62d9146102675780631f472254146102845780632b666fcf1461028c5761011b565b806301681a621461012057806306fdde0314610155578063070313fa146101d25780630bac232014610205575b600080fd5b6101536004803603602081101561013657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661039a565b005b61015d610788565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019757818101518382015260200161017f565b50505050905090810190601f1680156101c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610153600480360360208110156101e857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107c1565b6101536004803603602081101561021b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661088e565b6102556004803603602081101561024e57600080fd5b503561095b565b60408051918252519081900360200190f35b6101536004803603602081101561027d57600080fd5b50356109c2565b610255610b1f565b610153600480360360408110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610bc1565b610255610ea0565b61015d610ea6565b6102df610edf565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102df610efb565b610255610f17565b6101536004803603604081101561032e57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166110a4565b6102df61130d565b6101536004803603604081101561036f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611329565b6102556113d3565b60005473ffffffffffffffffffffffffffffffffffffffff16331461042057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600454625c490001421161049557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f76303a206d75737420626520636f6d706c657465640000000000000000000000604482015290519081900360640190fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169160009183916370a0823191602480820192602092909190829003018186803b15801561050b57600080fd5b505afa15801561051f573d6000803e3d6000fd5b505050506040513d602081101561053557600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b1580156105b357600080fd5b505af11580156105c7573d6000803e3d6000fd5b505050506040513d60208110156105dd57600080fd5b5050600254604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561065057600080fd5b505afa158015610664573d6000803e3d6000fd5b505050506040513d602081101561067a57600080fd5b5051600254604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b505050506040513d602081101561072457600080fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201528082018490526060810183905290517f8496dda4d04919fec296be83f4d7d178dafb7c0d3abe1553c092f1466e8f29289181900360800190a150505050565b6040518060400160405280600c81526020017f4441492f436f6d706f756e64000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461084757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081610966610f17565b10156109a857604080516001815290517fca0749872d39e09c4518033fa5a7468af8c9d967db231fc74771ba76a2a892aa9181900360200190a15060006109bd565b6109ba826109b4610f17565b906114bf565b90505b919050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a4857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d75737420626520706f6f6c0000000000000000000000000000000000000000604482015290519081900360640190fd5b600354600254610a729173ffffffffffffffffffffffffffffffffffffffff91821691168361150a565b600354604080517fa0712d6800000000000000000000000000000000000000000000000000000000815260048101849052905160009273ffffffffffffffffffffffffffffffffffffffff169163a0712d6891602480830192602092919082900301818787803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b505190508015610b1b57fe5b5050565b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d6020811015610bba57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b60025473ffffffffffffffffffffffffffffffffffffffff838116911614801590610c8d575060035473ffffffffffffffffffffffffffffffffffffffff838116911614155b610cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f742073776565702061646170746572206173736574730000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610d6957600080fd5b505afa158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff80861660208301528616818301526060810183905290517f2c4e64c7c0957a81c0076a0a3f3c7d9f0a5d6158292071c794436f829d12cfb79181900360800190a150505050565b60045481565b6040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080611068670de0b6b3a7640000611062600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f9357600080fd5b505af1158015610fa7573d6000803e3d6000fd5b505050506040513d6020811015610fbd57600080fd5b5051600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561103057600080fd5b505afa158015611044573d6000803e3d6000fd5b505050506040513d602081101561105a57600080fd5b50519061169d565b90611710565b6040805182815290519192507f5c24768b1cbbc7ca660ecfb0fb197f0b650fd29e2cc97590c785df0562a9d379919081900360200190a1905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331461112a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d75737420626520706f6f6c0000000000000000000000000000000000000000604482015290519081900360640190fd5b60006111346113d3565b9050600061115282611062866b204fce5e3e2502611000000061169d565b600354604080517f852a12e300000000000000000000000000000000000000000000000000000000815260048101889052905192935060009273ffffffffffffffffffffffffffffffffffffffff9092169163852a12e39160248082019260209290919082900301818787803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b50519050801561120157fe5b6002546112259073ffffffffffffffffffffffffffffffffffffffff168587611752565b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290517f275b45d9f9eb96f72224e8e07151c3e7a793ef35205b44c8512d78d150d6388e9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d60208110156112df57600080fd5b5051604080519182526020820188905281810185905260608201869052519081900360800190a15050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600254610b1b9073ffffffffffffffffffffffffffffffffffffffff16838361150a565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561144057600080fd5b505af1158015611454573d6000803e3d6000fd5b505050506040513d602081101561146a57600080fd5b505190507f5cbc07272c83481bc23ef50fd3551981db4987f6576b59f44818413a484becf9816114a281670de0b6b3a7640000611710565b6040805192835260208301919091528051918290030190a1905090565b600061150183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117df565b90505b92915050565b8015806115b65750604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561158857600080fd5b505afa15801561159c573d6000803e3d6000fd5b505050506040513d60208110156115b257600080fd5b5051155b61160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180611cb66036913960400191505060405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611698908490611895565b505050565b6000826116ac57506000611504565b828202828482816116b957fe5b0414611501576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c6b6021913960400191505060405180910390fd5b600061150183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061196d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611698908490611895565b60008184841115611888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561184d578181015183820152602001611835565b50505050905090810190601f16801561187a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b60606118f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119ec9092919063ffffffff16565b8051909150156116985780806020019051602081101561191657600080fd5b5051611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611c8c602a913960400191505060405180910390fd5b600081836119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561184d578181015183820152602001611835565b5060008385816119e257fe5b0495945050505050565b60606119fb8484600085611a03565b949350505050565b606082471015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c456026913960400191505060405180910390fd5b611a6785611bbe565b611ad257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611b3c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b9e576040519150601f19603f3d011682016040523d82523d6000602084013e611ba3565b606091505b5091509150611bb3828286611bc4565b979650505050505050565b3b151590565b60608315611bd357508161188e565b825115611be35782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561184d57818101518382015260200161183556fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220ff4ca33c108cf2456d7957ab8c2058b17a12e1489fc0d903699f26228deac89e64736f6c63430007040033000000000000000000000000dc41bbb87200d4e28a244e008cfe39a459a87fde0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c8063325a19f1116100b25780636bab3c7411610081578063a72b6c3011610066578063a72b6c3014610351578063ef0f236514610359578063fe9f6e24146103925761011b565b80636bab3c741461031057806396728a72146103185761011b565b8063325a19f1146102c75780634bde38c8146102cf57806357d76454146102d75780635aa6e675146103085761011b565b80631a2b3832116100ee5780631a2b3832146102385780631d2e62d9146102675780631f472254146102845780632b666fcf1461028c5761011b565b806301681a621461012057806306fdde0314610155578063070313fa146101d25780630bac232014610205575b600080fd5b6101536004803603602081101561013657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661039a565b005b61015d610788565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019757818101518382015260200161017f565b50505050905090810190601f1680156101c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610153600480360360208110156101e857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166107c1565b6101536004803603602081101561021b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661088e565b6102556004803603602081101561024e57600080fd5b503561095b565b60408051918252519081900360200190f35b6101536004803603602081101561027d57600080fd5b50356109c2565b610255610b1f565b610153600480360360408110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610bc1565b610255610ea0565b61015d610ea6565b6102df610edf565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102df610efb565b610255610f17565b6101536004803603604081101561032e57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff166110a4565b6102df61130d565b6101536004803603604081101561036f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611329565b6102556113d3565b60005473ffffffffffffffffffffffffffffffffffffffff16331461042057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600454625c490001421161049557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f76303a206d75737420626520636f6d706c657465640000000000000000000000604482015290519081900360640190fd5b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9092169160009183916370a0823191602480820192602092909190829003018186803b15801561050b57600080fd5b505afa15801561051f573d6000803e3d6000fd5b505050506040513d602081101561053557600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b1580156105b357600080fd5b505af11580156105c7573d6000803e3d6000fd5b505050506040513d60208110156105dd57600080fd5b5050600254604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b15801561065057600080fd5b505afa158015610664573d6000803e3d6000fd5b505050506040513d602081101561067a57600080fd5b5051600254604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201859052915193945091169163a9059cbb916044808201926020929091908290030181600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b505050506040513d602081101561072457600080fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff861660208201528082018490526060810183905290517f8496dda4d04919fec296be83f4d7d178dafb7c0d3abe1553c092f1466e8f29289181900360800190a150505050565b6040518060400160405280600c81526020017f4441492f436f6d706f756e64000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff16331461084757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461091457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081610966610f17565b10156109a857604080516001815290517fca0749872d39e09c4518033fa5a7468af8c9d967db231fc74771ba76a2a892aa9181900360200190a15060006109bd565b6109ba826109b4610f17565b906114bf565b90505b919050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a4857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d75737420626520706f6f6c0000000000000000000000000000000000000000604482015290519081900360640190fd5b600354600254610a729173ffffffffffffffffffffffffffffffffffffffff91821691168361150a565b600354604080517fa0712d6800000000000000000000000000000000000000000000000000000000815260048101849052905160009273ffffffffffffffffffffffffffffffffffffffff169163a0712d6891602480830192602092919082900301818787803b158015610ae557600080fd5b505af1158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b505190508015610b1b57fe5b5050565b600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d6020811015610bba57600080fd5b5051905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c4757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b60025473ffffffffffffffffffffffffffffffffffffffff838116911614801590610c8d575060035473ffffffffffffffffffffffffffffffffffffffff838116911614155b610cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f63616e6e6f742073776565702061646170746572206173736574730000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610d6957600080fd5b505afa158015610d7d573d6000803e3d6000fd5b505050506040513d6020811015610d9357600080fd5b5051604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301526024820184905291519293509084169163a9059cbb916044808201926020929091908290030181600087803b158015610e1157600080fd5b505af1158015610e25573d6000803e3d6000fd5b505050506040513d6020811015610e3b57600080fd5b50506040805133815273ffffffffffffffffffffffffffffffffffffffff80861660208301528616818301526060810183905290517f2c4e64c7c0957a81c0076a0a3f3c7d9f0a5d6158292071c794436f829d12cfb79181900360800190a150505050565b60045481565b6040518060400160405280600881526020017f436f6d706f756e6400000000000000000000000000000000000000000000000081525081565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b600080611068670de0b6b3a7640000611062600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f9357600080fd5b505af1158015610fa7573d6000803e3d6000fd5b505050506040513d6020811015610fbd57600080fd5b5051600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561103057600080fd5b505afa158015611044573d6000803e3d6000fd5b505050506040513d602081101561105a57600080fd5b50519061169d565b90611710565b6040805182815290519192507f5c24768b1cbbc7ca660ecfb0fb197f0b650fd29e2cc97590c785df0562a9d379919081900360200190a1905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331461112a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d75737420626520706f6f6c0000000000000000000000000000000000000000604482015290519081900360640190fd5b60006111346113d3565b9050600061115282611062866b204fce5e3e2502611000000061169d565b600354604080517f852a12e300000000000000000000000000000000000000000000000000000000815260048101889052905192935060009273ffffffffffffffffffffffffffffffffffffffff9092169163852a12e39160248082019260209290919082900301818787803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b50519050801561120157fe5b6002546112259073ffffffffffffffffffffffffffffffffffffffff168587611752565b600354604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290517f275b45d9f9eb96f72224e8e07151c3e7a793ef35205b44c8512d78d150d6388e9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156112b557600080fd5b505afa1580156112c9573d6000803e3d6000fd5b505050506040513d60208110156112df57600080fd5b5051604080519182526020820188905281810185905260608201869052519081900360800190a15050505050565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113af57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6d75737420626520676f7665726e616e63650000000000000000000000000000604482015290519081900360640190fd5b600254610b1b9073ffffffffffffffffffffffffffffffffffffffff16838361150a565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561144057600080fd5b505af1158015611454573d6000803e3d6000fd5b505050506040513d602081101561146a57600080fd5b505190507f5cbc07272c83481bc23ef50fd3551981db4987f6576b59f44818413a484becf9816114a281670de0b6b3a7640000611710565b6040805192835260208301919091528051918290030190a1905090565b600061150183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117df565b90505b92915050565b8015806115b65750604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561158857600080fd5b505afa15801561159c573d6000803e3d6000fd5b505050506040513d60208110156115b257600080fd5b5051155b61160b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180611cb66036913960400191505060405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052611698908490611895565b505050565b6000826116ac57506000611504565b828202828482816116b957fe5b0414611501576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611c6b6021913960400191505060405180910390fd5b600061150183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061196d565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611698908490611895565b60008184841115611888576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561184d578181015183820152602001611835565b50505050905090810190601f16801561187a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50508183035b9392505050565b60606118f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166119ec9092919063ffffffff16565b8051909150156116985780806020019051602081101561191657600080fd5b5051611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611c8c602a913960400191505060405180910390fd5b600081836119d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561184d578181015183820152602001611835565b5060008385816119e257fe5b0495945050505050565b60606119fb8484600085611a03565b949350505050565b606082471015611a5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180611c456026913960400191505060405180910390fd5b611a6785611bbe565b611ad257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611b3c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aff565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b9e576040519150601f19603f3d011682016040523d82523d6000602084013e611ba3565b606091505b5091509150611bb3828286611bc4565b979650505050505050565b3b151590565b60608315611bd357508161188e565b825115611be35782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561184d57818101518382015260200161183556fe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a2646970667358221220ff4ca33c108cf2456d7957ab8c2058b17a12e1489fc0d903699f26228deac89e64736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dc41bbb87200d4e28a244e008cfe39a459a87fde0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e36430000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
-----Decoded View---------------
Arg [0] : _saffron_pool (address): 0xDC41BBB87200D4e28A244e008CFE39a459A87FDe
Arg [1] : CErc20_contract_address (address): 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643
Arg [2] : base_asset_address (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000dc41bbb87200d4e28a244e008cfe39a459a87fde
Arg [1] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [2] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Deployed Bytecode Sourcemap
22146:5225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24635:433;;;;;;;;;;;;;;;;-1:-1:-1;24635:433:0;;;;:::i;:::-;;22633:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27224:144;;;;;;;;;;;;;;;;-1:-1:-1;27224:144:0;;;;:::i;27071:147::-;;;;;;;;;;;;;;;;-1:-1:-1;27071:147:0;;;;:::i;26383:273::-;;;;;;;;;;;;;;;;-1:-1:-1;26383:273:0;;:::i;:::-;;;;;;;;;;;;;;;;23117:398;;;;;;;;;;;;;;;;-1:-1:-1;23117:398:0;;:::i;26957:108::-;;;:::i;25149:388::-;;;;;;;;;;;;;;;;-1:-1:-1;25149:388:0;;;;;;;;;;;:::i;22700:22::-;;;:::i;22567:44::-;;;:::i;22335:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22264:25;;;:::i;25885:219::-;;;:::i;23678:882::-;;;;;;;;;;;;;;;;-1:-1:-1;23678:882:0;;;;;;;;;:::i;26845:106::-;;;:::i;26662:177::-;;;;;;;;;;;;;;;;-1:-1:-1;26662:177:0;;;;;;;;;:::i;25587:176::-;;;:::i;24635:433::-;24699:10;;;;24685;:24;24677:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24765:7;;24775:8;24765:18;24747:15;:36;24739:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24846:4;;24874:28;;;;;;24896:4;24874:28;;;;;;24846:4;;;;;24818:10;;24846:4;;24874:13;;:28;;;;;;;;;;;;;;;24846:4;24874:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24874:28:0;24909:23;;;;;;:12;:23;;;;;;;;;;;;;;;24874:28;;-1:-1:-1;24909:12:0;;;;;;:23;;;;;24874:28;;24909:23;;;;;;;;-1:-1:-1;24909:12:0;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;24956:3:0;;:28;;;;;;24978:4;24956:28;;;;;;24941:12;;24956:3;;;:13;;:28;;;;;24909:23;;24956:28;;;;;;;:3;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24956:28:0;24991:3;;:23;;;;;;:3;:23;;;;;;;;;;;;;;;24956:28;;-1:-1:-1;24991:3:0;;;:12;;:23;;;;;24956:28;;24991:23;;;;;;;;:3;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25028:34:0;;;25034:10;25028:34;;;;;24991:23;25028:34;;;;;;;;;;;;;;;;;;;;;;;;;;24635:433;;;;:::o;22633:44::-;;;;;;;;;;;;;;;;;;;:::o;27224:144::-;27307:10;;;;27293;:24;27285:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27347:10;:15;;;;;;;;;;;;;;;27224:144::o;27071:147::-;27156:10;;;;27142;:24;27134:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27196:3;:16;;;;;;;;;;;;;;;27071:147::o;26383:273::-;26450:7;26488:9;26470:15;:13;:15::i;:::-;:27;26466:141;;;26513:32;;;26540:4;26513:32;;;;;;;;;;;;;-1:-1:-1;26561:1:0;26554:8;;26466:141;26620:30;26640:9;26620:15;:13;:15::i;:::-;:19;;:30::i;:::-;26613:37;;26383:273;;;;:::o;23117:398::-;23212:12;;;;23190:10;:35;23182:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23273:4;;23249:3;;:38;;23273:4;23249:3;;;;23273:4;23280:6;23249:15;:38::i;:::-;23337:4;;:17;;;;;;;;;;;;;;23318:16;;23337:4;;;:9;;:17;;;;;;;;;;;;;;23318:16;23337:4;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23337:17:0;;-1:-1:-1;23494:14:0;;23487:22;;;;23117:398;;:::o;26957:108::-;27030:4;;:29;;;;;;27053:4;27030:29;;;;;;27007:7;;27030:4;;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27030:29:0;;-1:-1:-1;26957:108:0;:::o;25149:388::-;25233:10;;;;25219;:24;25211:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25299:3;;;25281:22;;;25299:3;;25281:22;;;;:49;;-1:-1:-1;25325:4:0;;;25307:23;;;25325:4;;25307:23;;25281:49;25273:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25420:28;;;;;;25442:4;25420:28;;;;;;25391:6;;25371:10;;25420:13;;;;;;:28;;;;;;;;;;;;;;:13;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25420:28:0;25455:23;;;;;;:12;:23;;;;;;;;;;;;;;;25420:28;;-1:-1:-1;25455:12:0;;;;;;:23;;;;;25420:28;;25455:23;;;;;;;;-1:-1:-1;25455:12:0;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25492:39:0;;;25501:10;25492:39;;;;;;25455:23;25492:39;;;;;;;;;;;;;;;;;;;;;;;;;;25149:388;;;;:::o;22700:22::-;;;;:::o;22567:44::-;;;;;;;;;;;;;;;;;;;:::o;22335:32::-;;;;;;:::o;22264:25::-;;;;;;:::o;25885:219::-;25935:7;25951:16;25970:73;26036:6;25970:61;26004:4;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26004:26:0;25970:4;;:29;;;;;;25993:4;25970:29;;;;;;:4;;;;;:14;;:29;;;;;26004:26;;25970:29;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25970:29:0;;:33;:61::i;:::-;:65;;:73::i;:::-;26055:21;;;;;;;;25951:92;;-1:-1:-1;26055:21:0;;;;;;;;;;26090:8;-1:-1:-1;25885:219:0;:::o;23678:882::-;23796:12;;;;23774:10;:35;23766:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23896:21;23925:19;:17;:19::i;:::-;23896:48;-1:-1:-1;24017:26:0;24046:48;23896;24046:29;:17;24068:6;24046:21;:29::i;:48::-;24130:4;;:40;;;;;;;;;;;;;;24017:77;;-1:-1:-1;24101:21:0;;24130:4;;;;;:21;;:40;;;;;;;;;;;;;;;24101:21;24130:4;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24130:40:0;;-1:-1:-1;24377:18:0;;24370:26;;;;24403:3;;:39;;:3;;24420:2;24424:17;24403:16;:39::i;:::-;24470:4;;:29;;;;;;24493:4;24470:29;;;;;;24456:98;;24470:4;;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24470:29:0;24456:98;;;;;;24470:29;24456:98;;;;;;;;;;;;;;;;;;;;;;;;;;23678:882;;;;;:::o;26845:106::-;26941:3;;;;26845:106;:::o;26662:177::-;26764:10;;;;26750;:24;26742:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26804:3;;:29;;:3;;26820:4;26826:6;26804:15;:29::i;25587:176::-;25631:7;25647:12;25662:4;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25662:26:0;;-1:-1:-1;25700:39:0;25662:26;25722:16;25662:26;25731:6;25722:8;:16::i;:::-;25700:39;;;;;;;;;;;;;;;;;;;;;;25753:4;-1:-1:-1;25587:176:0;:::o;6493:136::-;6551:7;6578:43;6582:1;6585;6578:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6571:50;;6493:136;;;;;:::o;19751:586::-;20101:10;;;20100:62;;-1:-1:-1;20117:39:0;;;;;;20141:4;20117:39;;;;:15;:39;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20117:39:0;:44;20100:62;20092:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20268:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20291:22;20268:62;;;20241:90;;20261:5;;20241:19;:90::i;:::-;19751:586;;;:::o;7383:471::-;7441:7;7686:6;7682:47;;-1:-1:-1;7716:1:0;7709:8;;7682:47;7753:5;;;7757:1;7753;:5;:1;7777:5;;;;;:10;7769:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8330:132;8388:7;8415:39;8419:1;8422;8415:39;;;;;;;;;;;;;;;;;:3;:39::i;19122:171::-;19228:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19251:23;19228:58;;;19201:86;;19221:5;;19201:19;:86::i;6932:192::-;7018:7;7054:12;7046:6;;;;7038:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7090:5:0;;;6932:192;;;;;;:::o;21323:723::-;21731:23;21757:69;21785:4;21757:69;;;;;;;;;;;;;;;;;21765:5;21757:27;;;;:69;;;;;:::i;:::-;21837:17;;21731:95;;-1:-1:-1;21837:21:0;21833:208;;21967:10;21956:30;;;;;;;;;;;;;;;-1:-1:-1;21956:30:0;21948:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8958:278;9044:7;9079:12;9072:5;9064:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9103:9;9119:1;9115;:5;;;;;;;8958:278;-1:-1:-1;;;;;8958:278:0:o;14155:195::-;14258:12;14290:52;14312:6;14320:4;14326:1;14329:12;14290:21;:52::i;:::-;14283:59;14155:195;-1:-1:-1;;;;14155:195:0:o;15207:530::-;15334:12;15392:5;15367:21;:30;;15359:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15459:18;15470:6;15459:10;:18::i;:::-;15451:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15585:12;15599:23;15626:6;:11;;15646:5;15654:4;15626:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15584:75;;;;15677:52;15695:7;15704:10;15716:12;15677:17;:52::i;:::-;15670:59;15207:530;-1:-1:-1;;;;;;;15207:530:0:o;11235:422::-;11602:20;11641:8;;;11235:422::o;17747:742::-;17862:12;17891:7;17887:595;;;-1:-1:-1;17922:10:0;17915:17;;17887:595;18036:17;;:21;18032:439;;18299:10;18293:17;18360:15;18347:10;18343:2;18339:19;18332:44;18247:148;18435:20;;;;;;;;;;;;;;;;;;;;18442:12;;18435:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://ff4ca33c108cf2456d7957ab8c2058b17a12e1489fc0d903699f26228deac89e
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.