Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x61083a51 | 19927892 | 113 days ago | IN | 0 ETH | 0.01076594 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | ||||
---|---|---|---|---|---|---|---|
20738883 | 9 hrs ago | 0 ETH | |||||
20738883 | 9 hrs ago | 0 ETH | |||||
20738883 | 9 hrs ago | 0 ETH | |||||
20738883 | 9 hrs ago | 0 ETH | |||||
20733199 | 28 hrs ago | 0 ETH | |||||
20733199 | 28 hrs ago | 0 ETH | |||||
20733199 | 28 hrs ago | 0 ETH | |||||
20733199 | 28 hrs ago | 0 ETH | |||||
20727052 | 2 days ago | 0 ETH | |||||
20727052 | 2 days ago | 0 ETH | |||||
20727052 | 2 days ago | 0 ETH | |||||
20727052 | 2 days ago | 0 ETH | |||||
20726895 | 2 days ago | 0 ETH | |||||
20726895 | 2 days ago | 0 ETH | |||||
20726895 | 2 days ago | 0 ETH | |||||
20726895 | 2 days ago | 0 ETH | |||||
20726029 | 2 days ago | 0 ETH | |||||
20726029 | 2 days ago | 0 ETH | |||||
20726029 | 2 days ago | 0 ETH | |||||
20726029 | 2 days ago | 0 ETH | |||||
20715480 | 3 days ago | 0 ETH | |||||
20715480 | 3 days ago | 0 ETH | |||||
20715480 | 3 days ago | 0 ETH | |||||
20715480 | 3 days ago | 0 ETH | |||||
20714481 | 3 days ago | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Secondary monetary policy
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10 """ @title Secondary monetary policy @notice Monetary policy to calculate borrow rates in lending markets depending on "mint" borrow rate and utilization. Calculated as: rate = rate_from_amm * (r_minf + A / (u_inf - utilization)) Depending on target utilization (u0), rate ratio at 0 (alpha) and at max utilization (beta) one can calculate coefficients for the hyperbolic dependency: u_inf = (beta - 1) * u0 / ((beta - 1) * u0 - (1 - u0) * (1 - alpha)) A = (1 - alpha) * (u_inf - u0) * u_inf / u0 r_minf = alpha - A / u_inf The function reaches rate_from_amm at u0 utilization, alpha*rate_from_amm at 0 utilization and beta*rate_from_amm at 100% utilization. @author Curve.fi @license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved """ from vyper.interfaces import ERC20 interface Controller: def total_debt() -> uint256: view interface IAMM: def rate() -> uint256: view interface Factory: def admin() -> address: view event SetParameters: u_inf: uint256 A: uint256 r_minf: uint256 shift: uint256 struct Parameters: u_inf: uint256 A: uint256 r_minf: uint256 shift: uint256 MIN_UTIL: constant(uint256) = 10**16 MAX_UTIL: constant(uint256) = 99 * 10**16 MIN_LOW_RATIO: constant(uint256) = 10**16 MAX_HIGH_RATIO: constant(uint256) = 100 * 10**18 MAX_RATE_SHIFT: constant(uint256) = 100 * 10**18 BORROWED_TOKEN: public(immutable(ERC20)) FACTORY: public(immutable(Factory)) AMM: public(immutable(IAMM)) parameters: public(Parameters) @external def __init__(factory: Factory, amm: IAMM, borrowed_token: ERC20, target_utilization: uint256, low_ratio: uint256, high_ratio: uint256, rate_shift: uint256): """ @param factory Factory contract @param amm AMM to take borrow rate from as a basis @param borrowed_token Borrowed token in the market (e.g. crvUSD) @param target_utilization Utilization at which borrow rate is the same as in AMM @param low_ratio Ratio rate/target_rate at 0% utilization @param high_ratio Ratio rate/target_rate at 100% utilization @param rate_shift Shift all the rate curve by this rate """ assert target_utilization >= MIN_UTIL assert target_utilization <= MAX_UTIL assert low_ratio >= MIN_LOW_RATIO assert high_ratio <= MAX_HIGH_RATIO assert low_ratio < high_ratio assert rate_shift <= MAX_RATE_SHIFT FACTORY = factory AMM = amm BORROWED_TOKEN = borrowed_token p: Parameters = self.get_params(target_utilization, low_ratio, high_ratio, rate_shift) self.parameters = p log SetParameters(p.u_inf, p.A, p.r_minf, p.shift) @internal def get_params(u_0: uint256, alpha: uint256, beta: uint256, rate_shift: uint256) -> Parameters: p: Parameters = empty(Parameters) p.u_inf = (beta - 10**18) * u_0 / (((beta - 10**18) * u_0 - (10**18 - u_0) * (10**18 - alpha)) / 10**18) p.A = (10**18 - alpha) * p.u_inf / 10**18 * (p.u_inf - u_0) / u_0 p.r_minf = alpha - p.A * 10**18 / p.u_inf p.shift = rate_shift return p @internal @view def calculate_rate(_for: address, d_reserves: int256, d_debt: int256) -> uint256: p: Parameters = self.parameters total_debt: int256 = convert(Controller(_for).total_debt(), int256) total_reserves: int256 = convert(BORROWED_TOKEN.balanceOf(_for), int256) + total_debt + d_reserves total_debt += d_debt assert total_debt >= 0, "Negative debt" assert total_reserves >= total_debt, "Reserves too small" u: uint256 = 0 if total_reserves > 0: u = convert(total_debt * 10**18 / total_reserves, uint256) r0: uint256 = AMM.rate() return r0 * p.r_minf / 10**18 + p.A * r0 / (p.u_inf - u) + p.shift @view @external def rate(_for: address = msg.sender) -> uint256: return self.calculate_rate(_for, 0, 0) @external def rate_write(_for: address = msg.sender) -> uint256: return self.calculate_rate(_for, 0, 0) @external def set_parameters(target_utilization: uint256, low_ratio: uint256, high_ratio: uint256, rate_shift: uint256): """ @param target_utilization Utilization at which borrow rate is the same as in AMM @param low_ratio Ratio rate/target_rate at 0% utilization @param high_ratio Ratio rate/target_rate at 100% utilization @param rate_shift Shift all the rate curve by this rate """ assert msg.sender == FACTORY.admin() assert target_utilization >= MIN_UTIL assert target_utilization <= MAX_UTIL assert low_ratio >= MIN_LOW_RATIO assert high_ratio <= MAX_HIGH_RATIO assert low_ratio < high_ratio assert rate_shift <= MAX_RATE_SHIFT p: Parameters = self.get_params(target_utilization, low_ratio, high_ratio, rate_shift) self.parameters = p log SetParameters(p.u_inf, p.A, p.r_minf, p.shift) @view @external def future_rate(_for: address, d_reserves: int256, d_debt: int256) -> uint256: return self.calculate_rate(_for, d_reserves, d_debt)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"SetParameters","inputs":[{"name":"u_inf","type":"uint256","indexed":false},{"name":"A","type":"uint256","indexed":false},{"name":"r_minf","type":"uint256","indexed":false},{"name":"shift","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"factory","type":"address"},{"name":"amm","type":"address"},{"name":"borrowed_token","type":"address"},{"name":"target_utilization","type":"uint256"},{"name":"low_ratio","type":"uint256"},{"name":"high_ratio","type":"uint256"},{"name":"rate_shift","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"rate","inputs":[{"name":"_for","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"rate_write","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"rate_write","inputs":[{"name":"_for","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_parameters","inputs":[{"name":"target_utilization","type":"uint256"},{"name":"low_ratio","type":"uint256"},{"name":"high_ratio","type":"uint256"},{"name":"rate_shift","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"future_rate","inputs":[{"name":"_for","type":"address"},{"name":"d_reserves","type":"int256"},{"name":"d_debt","type":"int256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"BORROWED_TOKEN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"FACTORY","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"AMM","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"parameters","inputs":[],"outputs":[{"name":"","type":"tuple","components":[{"name":"u_inf","type":"uint256"},{"name":"A","type":"uint256"},{"name":"r_minf","type":"uint256"},{"name":"shift","type":"uint256"}]}]}]
Contract Creation Code
61083a515034610363576020610b765f395f518060a01c61036357610140526020610b965f395f518060a01c61036357610160526020610bb65f395f518060a01c6103635761018052662386f26fc100006020610bd65f395f511061036357670dbd2fc137a300006020610bd65f395f511161036357662386f26fc100006020610bf65f395f51106103635768056bc75e2d631000006020610c165f395f5111610363576020610c165f395f516020610bf65f395f5110156103635768056bc75e2d631000006020610c365f395f5111610363576101405161081a526101605161083a52610180516107fa526080610bd66040396100fe610220610197565b61022080516101a05260208101516101c05260408101516101e052606081015161020052506101a0515f556101c0516001556101e051600255610200516003557fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f6101a051610220526101c051610240526101e0516102605261020051610280526080610220a16107fa6103676100003961085a610000f35b60803660c037608051670de0b6b3a764000081038181116103635790506040518082028115838383041417156103635790509050608051670de0b6b3a76400008103818111610363579050604051808202811583838304141715610363579050905060405180670de0b6b3a764000003670de0b6b3a7640000811161036357905060605180670de0b6b3a764000003670de0b6b3a7640000811161036357905080820281158383830414171561036357905090508082038281116103635790509050670de0b6b3a7640000810490508015610363578082049050905060c05260605180670de0b6b3a764000003670de0b6b3a7640000811161036357905060c0518082028115838383041417156103635790509050670de0b6b3a76400008104905060c051604051808203828111610363579050905080820281158383830414171561036357905090506040518015610363578082049050905060e05260605160e051670de0b6b3a7640000810281670de0b6b3a764000082041861036357905060c0518015610363578082049050905080820382811161036357905090506101005260a0516101205260c051815260e051602082015261010051604082015261012051606082015250565b5f80fd5f3560e01c60026009820660011b6107e801601e395f51565b6382f75cee811861031d57346107e45760206107fa60403960206040f361031d565b632dd31000811460033611161561031d57346107e457602061081a60403960206040f361031d565b6344a70686811861031d57346107e457602061083a60403960206040f361031d565b638903573081186100b157346107e4575f5460405260015460605260025460805260035460a05260806040f35b639f3118d9811861031d576064361034176107e4576004358060a01c6107e4576101e05260206101e051604052604060246060376100f06102006104ed565b610200f361031d565b632c4e722e811861011357346107e457336101e052610156565b63e91f2f4c811861031d57346107e457336101e05261019e5661031d565b630ba9d8ca811861031d576024361034176107e4576004358060a01c6107e4576101e0525b60206101e0516040526040366060376101706102006104ed565b610200f361031d565b63bdb09f2e81186101bd576024361034176107e4576004358060a01c6107e4576101e0525b60206101e0516040526040366060376101b86102006104ed565b610200f35b6330d5f4ec811861031d576084361034176107e457602061081a5f395f5163f851a440610140526020610140600461015c845afa6101fd573d5f5f3e3d5ffd5b60203d106107e457610140518060a01c6107e4576101805261018090505133186107e457662386f26fc10000600435106107e457670dbd2fc137a30000600435116107e457662386f26fc10000602435106107e45768056bc75e2d63100000604435116107e45760443560243510156107e45768056bc75e2d63100000606435116107e457608060046040376102946101c0610321565b6101c080516101405260208101516101605260408101516101805260608101516101a05250610140515f5561016051600155610180516002556101a0516003557fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f610140516101c052610160516101e05261018051610200526101a0516102205260806101c0a1005b5f5ffd5b60803660c037608051670de0b6b3a764000081038181116107e45790506040518082028115838383041417156107e45790509050608051670de0b6b3a764000081038181116107e45790506040518082028115838383041417156107e4579050905060405180670de0b6b3a764000003670de0b6b3a764000081116107e457905060605180670de0b6b3a764000003670de0b6b3a764000081116107e45790508082028115838383041417156107e457905090508082038281116107e45790509050670de0b6b3a76400008104905080156107e4578082049050905060c05260605180670de0b6b3a764000003670de0b6b3a764000081116107e457905060c0518082028115838383041417156107e45790509050670de0b6b3a76400008104905060c0516040518082038281116107e457905090508082028115838383041417156107e4579050905060405180156107e4578082049050905060e05260605160e051670de0b6b3a7640000810281670de0b6b3a76400008204186107e457905060c05180156107e457808204905090508082038281116107e457905090506101005260a0516101205260c051815260e051602082015261010051604082015261012051606082015250565b5f5460a05260015460c05260025460e052600354610100526040516331dc3ca8610140526020610140600461015c845afa61052a573d5f5f3e3d5ffd5b60203d106107e4576101409050518060ff1c6107e4576101205260206107fa5f395f516370a0823161016052604051610180526020610160602461017c845afa610576573d5f5f3e3d5ffd5b60203d106107e4576101609050518060ff1c6107e457610120518082018281125f8312186107e457905090506060518082018281125f8312186107e4579050905061014052610120516080518082018281125f8312186107e45790509050610120525f61012051121561064857600d610160527f4e656761746976652064656274000000000000000000000000000000000000006101805261016050610160518061018001601f825f031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b610120516101405112156106bb576012610160527f526573657276657320746f6f20736d616c6c00000000000000000000000000006101805261016050610160518061018001601f825f031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b5f610160526001610140511261071d5761012051670de0b6b3a7640000810281670de0b6b3a76400008205186107e45790506101405180156107e457808205600160ff1b8314155f1983141517156107e457905090505f81126107e457610160525b602061083a5f395f51632c4e722e6101a05260206101a060046101bc845afa610748573d5f5f3e3d5ffd5b60203d106107e4576101a0905051610180526101805160e0518082028115838383041417156107e45790509050670de0b6b3a76400008104905060c051610180518082028115838383041417156107e4579050905060a051610160518082038281116107e4579050905080156107e457808204905090508082018281106107e45790509050610100518082018281106107e45790509050815250565b5f80fd00620131003a00f9031d00840179031d0018841907fa81121860a16576797065728300030a0015000000000000000000000000ea6876dde9e3467564acbee1ed5bac88783205e00000000000000000000000001681195c176239ac5e72d9aebacf5b2492e0c4ee000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e0000000000000000000000000000000000000000000000000bcbce7f1b15000000000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000004b9a1eff
Deployed Bytecode
0x5f3560e01c60026009820660011b6107e801601e395f51565b6382f75cee811861031d57346107e45760206107fa60403960206040f361031d565b632dd31000811460033611161561031d57346107e457602061081a60403960206040f361031d565b6344a70686811861031d57346107e457602061083a60403960206040f361031d565b638903573081186100b157346107e4575f5460405260015460605260025460805260035460a05260806040f35b639f3118d9811861031d576064361034176107e4576004358060a01c6107e4576101e05260206101e051604052604060246060376100f06102006104ed565b610200f361031d565b632c4e722e811861011357346107e457336101e052610156565b63e91f2f4c811861031d57346107e457336101e05261019e5661031d565b630ba9d8ca811861031d576024361034176107e4576004358060a01c6107e4576101e0525b60206101e0516040526040366060376101706102006104ed565b610200f361031d565b63bdb09f2e81186101bd576024361034176107e4576004358060a01c6107e4576101e0525b60206101e0516040526040366060376101b86102006104ed565b610200f35b6330d5f4ec811861031d576084361034176107e457602061081a5f395f5163f851a440610140526020610140600461015c845afa6101fd573d5f5f3e3d5ffd5b60203d106107e457610140518060a01c6107e4576101805261018090505133186107e457662386f26fc10000600435106107e457670dbd2fc137a30000600435116107e457662386f26fc10000602435106107e45768056bc75e2d63100000604435116107e45760443560243510156107e45768056bc75e2d63100000606435116107e457608060046040376102946101c0610321565b6101c080516101405260208101516101605260408101516101805260608101516101a05250610140515f5561016051600155610180516002556101a0516003557fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f610140516101c052610160516101e05261018051610200526101a0516102205260806101c0a1005b5f5ffd5b60803660c037608051670de0b6b3a764000081038181116107e45790506040518082028115838383041417156107e45790509050608051670de0b6b3a764000081038181116107e45790506040518082028115838383041417156107e4579050905060405180670de0b6b3a764000003670de0b6b3a764000081116107e457905060605180670de0b6b3a764000003670de0b6b3a764000081116107e45790508082028115838383041417156107e457905090508082038281116107e45790509050670de0b6b3a76400008104905080156107e4578082049050905060c05260605180670de0b6b3a764000003670de0b6b3a764000081116107e457905060c0518082028115838383041417156107e45790509050670de0b6b3a76400008104905060c0516040518082038281116107e457905090508082028115838383041417156107e4579050905060405180156107e4578082049050905060e05260605160e051670de0b6b3a7640000810281670de0b6b3a76400008204186107e457905060c05180156107e457808204905090508082038281116107e457905090506101005260a0516101205260c051815260e051602082015261010051604082015261012051606082015250565b5f5460a05260015460c05260025460e052600354610100526040516331dc3ca8610140526020610140600461015c845afa61052a573d5f5f3e3d5ffd5b60203d106107e4576101409050518060ff1c6107e4576101205260206107fa5f395f516370a0823161016052604051610180526020610160602461017c845afa610576573d5f5f3e3d5ffd5b60203d106107e4576101609050518060ff1c6107e457610120518082018281125f8312186107e457905090506060518082018281125f8312186107e4579050905061014052610120516080518082018281125f8312186107e45790509050610120525f61012051121561064857600d610160527f4e656761746976652064656274000000000000000000000000000000000000006101805261016050610160518061018001601f825f031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b610120516101405112156106bb576012610160527f526573657276657320746f6f20736d616c6c00000000000000000000000000006101805261016050610160518061018001601f825f031636823750506308c379a061012052602061014052601f19601f61016051011660440161013cfd5b5f610160526001610140511261071d5761012051670de0b6b3a7640000810281670de0b6b3a76400008205186107e45790506101405180156107e457808205600160ff1b8314155f1983141517156107e457905090505f81126107e457610160525b602061083a5f395f51632c4e722e6101a05260206101a060046101bc845afa610748573d5f5f3e3d5ffd5b60203d106107e4576101a0905051610180526101805160e0518082028115838383041417156107e45790509050670de0b6b3a76400008104905060c051610180518082028115838383041417156107e4579050905060a051610160518082038281116107e4579050905080156107e457808204905090508082018281106107e45790509050610100518082018281106107e45790509050815250565b5f80fd00620131003a00f9031d00840179031d0018000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e000000000000000000000000ea6876dde9e3467564acbee1ed5bac88783205e00000000000000000000000001681195c176239ac5e72d9aebacf5b2492e0c4ee
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ea6876dde9e3467564acbee1ed5bac88783205e00000000000000000000000001681195c176239ac5e72d9aebacf5b2492e0c4ee000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e0000000000000000000000000000000000000000000000000bcbce7f1b15000000000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000004b9a1eff
-----Decoded View---------------
Arg [0] : factory (address): 0xeA6876DDE9e3467564acBeE1Ed5bac88783205E0
Arg [1] : amm (address): 0x1681195C176239ac5E72d9aeBaCf5b2492E0C4ee
Arg [2] : borrowed_token (address): 0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E
Arg [3] : target_utilization (uint256): 850000000000000000
Arg [4] : low_ratio (uint256): 500000000000000000
Arg [5] : high_ratio (uint256): 3000000000000000000
Arg [6] : rate_shift (uint256): 1268391679
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000ea6876dde9e3467564acbee1ed5bac88783205e0
Arg [1] : 0000000000000000000000001681195c176239ac5e72d9aebacf5b2492e0c4ee
Arg [2] : 000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e
Arg [3] : 0000000000000000000000000000000000000000000000000bcbce7f1b150000
Arg [4] : 00000000000000000000000000000000000000000000000006f05b59d3b20000
Arg [5] : 00000000000000000000000000000000000000000000000029a2241af62c0000
Arg [6] : 000000000000000000000000000000000000000000000000000000004b9a1eff
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
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.