Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
13512656 | 1179 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x696866ea...559182D38 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
Pile
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-12 */ // Verified using https://dapp.tools // hevm: flattened sources of src/borrower/pile.sol // SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.5.15 >=0.7.6; ////// lib/tinlake-auth/src/auth.sol // Copyright (C) Centrifuge 2020, based on MakerDAO dss https://github.com/makerdao/dss /* pragma solidity >=0.5.15; */ contract Auth { mapping (address => uint256) public wards; event Rely(address indexed usr); event Deny(address indexed usr); function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); } function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); } modifier auth { require(wards[msg.sender] == 1, "not-authorized"); _; } } ////// lib/tinlake-math/src/math.sol // Copyright (C) 2018 Rain <[email protected]> /* pragma solidity >=0.5.15; */ contract Math { uint256 constant ONE = 10 ** 27; function safeAdd(uint x, uint y) public pure returns (uint z) { require((z = x + y) >= x, "safe-add-failed"); } function safeSub(uint x, uint y) public pure returns (uint z) { require((z = x - y) <= x, "safe-sub-failed"); } function safeMul(uint x, uint y) public pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "safe-mul-failed"); } function safeDiv(uint x, uint y) public pure returns (uint z) { z = x / y; } function rmul(uint x, uint y) public pure returns (uint z) { z = safeMul(x, y) / ONE; } function rdiv(uint x, uint y) public pure returns (uint z) { require(y > 0, "division by zero"); z = safeAdd(safeMul(x, ONE), y / 2) / y; } function rdivup(uint x, uint y) internal pure returns (uint z) { require(y > 0, "division by zero"); // always rounds up z = safeAdd(safeMul(x, ONE), safeSub(y, 1)) / y; } } ////// lib/tinlake-math/src/interest.sol // Copyright (C) 2018 Rain <[email protected]> and Centrifuge, referencing MakerDAO dss => https://github.com/makerdao/dss/blob/master/src/pot.sol /* pragma solidity >=0.5.15; */ /* import "./math.sol"; */ contract Interest is Math { // @notice This function provides compounding in seconds // @param chi Accumulated interest rate over time // @param ratePerSecond Interest rate accumulation per second in RAD(10ˆ27) // @param lastUpdated When the interest rate was last updated // @param pie Total sum of all amounts accumulating under one interest rate, divided by that rate // @return The new accumulated rate, as well as the difference between the debt calculated with the old and new accumulated rates. function compounding(uint chi, uint ratePerSecond, uint lastUpdated, uint pie) public view returns (uint, uint) { require(block.timestamp >= lastUpdated, "tinlake-math/invalid-timestamp"); require(chi != 0); // instead of a interestBearingAmount we use a accumulated interest rate index (chi) uint updatedChi = _chargeInterest(chi ,ratePerSecond, lastUpdated, block.timestamp); return (updatedChi, safeSub(rmul(updatedChi, pie), rmul(chi, pie))); } // @notice This function charge interest on a interestBearingAmount // @param interestBearingAmount is the interest bearing amount // @param ratePerSecond Interest rate accumulation per second in RAD(10ˆ27) // @param lastUpdated last time the interest has been charged // @return interestBearingAmount + interest function chargeInterest(uint interestBearingAmount, uint ratePerSecond, uint lastUpdated) public view returns (uint) { if (block.timestamp >= lastUpdated) { interestBearingAmount = _chargeInterest(interestBearingAmount, ratePerSecond, lastUpdated, block.timestamp); } return interestBearingAmount; } function _chargeInterest(uint interestBearingAmount, uint ratePerSecond, uint lastUpdated, uint current) internal pure returns (uint) { return rmul(rpow(ratePerSecond, current - lastUpdated, ONE), interestBearingAmount); } // convert pie to debt/savings amount function toAmount(uint chi, uint pie) public pure returns (uint) { return rmul(pie, chi); } // convert debt/savings amount to pie function toPie(uint chi, uint amount) public pure returns (uint) { return rdivup(amount, chi); } function rpow(uint x, uint n, uint base) public pure returns (uint z) { assembly { switch x case 0 {switch n case 0 {z := base} default {z := 0}} default { switch mod(n, 2) case 0 { z := base } default { z := x } let half := div(base, 2) // for rounding. for { n := div(n, 2) } n { n := div(n,2) } { let xx := mul(x, x) if iszero(eq(div(xx, x), x)) { revert(0,0) } let xxRound := add(xx, half) if lt(xxRound, xx) { revert(0,0) } x := div(xxRound, base) if mod(n,2) { let zx := mul(z, x) if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) } let zxRound := add(zx, half) if lt(zxRound, zx) { revert(0,0) } z := div(zxRound, base) } } } } } } ////// src/borrower/pile.sol // Copyright (C) 2018 Rain <[email protected]>, Centrifuge /* pragma solidity >=0.7.6; */ /* import "tinlake-math/interest.sol"; */ /* import "tinlake-auth/auth.sol"; */ // ## Interest Group based Pile // The following is one implementation of a debt module. It keeps track of different buckets of interest rates and is optimized for many loans per interest bucket. It keeps track of interest // rate accumulators (chi values) for all interest rate categories. It calculates debt each // loan according to its interest rate category and pie value. contract Pile is Auth, Interest { // --- Data --- // stores all needed information of an interest rate group struct Rate { uint pie; // Total debt of all loans with this rate uint chi; // Accumulated rates uint ratePerSecond; // Accumulation per second uint48 lastUpdated; // Last time the rate was accumulated uint fixedRate; // fixed rate applied to each loan of the group } // Interest Rate Groups are identified by a `uint` and stored in a mapping mapping (uint => Rate) public rates; // mapping of all loan debts // the debt is stored as pie // pie is defined as pie = debt/chi therefore debt = pie * chi // where chi is the accumulated interest rate index over time mapping (uint => uint) public pie; // loan => rate mapping (uint => uint) public loanRates; // Events event IncreaseDebt(uint indexed loan, uint currencyAmount); event DecreaseDebt(uint indexed loan, uint currencyAmount); event SetRate(uint indexed loan, uint rate); event ChangeRate(uint indexed loan, uint newRate); event File(bytes32 indexed what, uint rate, uint value); constructor() { // pre-definition for loans without interest rates rates[0].chi = ONE; rates[0].ratePerSecond = ONE; wards[msg.sender] = 1; emit Rely(msg.sender); } // --- Public Debt Methods --- // increases the debt of a loan by a currencyAmount // a change of the loan debt updates the rate debt and total debt function incDebt(uint loan, uint currencyAmount) external auth { uint rate = loanRates[loan]; require(block.timestamp == rates[rate].lastUpdated, "rate-group-not-updated"); currencyAmount = safeAdd(currencyAmount, rmul(currencyAmount, rates[rate].fixedRate)); uint pieAmount = toPie(rates[rate].chi, currencyAmount); pie[loan] = safeAdd(pie[loan], pieAmount); rates[rate].pie = safeAdd(rates[rate].pie, pieAmount); emit IncreaseDebt(loan, currencyAmount); } // decrease the loan's debt by a currencyAmount // a change of the loan debt updates the rate debt and total debt function decDebt(uint loan, uint currencyAmount) external auth { uint rate = loanRates[loan]; require(block.timestamp == rates[rate].lastUpdated, "rate-group-not-updated"); uint pieAmount = toPie(rates[rate].chi, currencyAmount); pie[loan] = safeSub(pie[loan], pieAmount); rates[rate].pie = safeSub(rates[rate].pie, pieAmount); emit DecreaseDebt(loan, currencyAmount); } // returns the current debt based on actual block.timestamp (now) function debt(uint loan) external view returns (uint) { uint rate_ = loanRates[loan]; uint chi_ = rates[rate_].chi; if (block.timestamp >= rates[rate_].lastUpdated) { chi_ = chargeInterest(rates[rate_].chi, rates[rate_].ratePerSecond, rates[rate_].lastUpdated); } return toAmount(chi_, pie[loan]); } // returns the total debt of a interest rate group function rateDebt(uint rate) external view returns (uint) { uint chi_ = rates[rate].chi; uint pie_ = rates[rate].pie; if (block.timestamp >= rates[rate].lastUpdated) { chi_ = chargeInterest(rates[rate].chi, rates[rate].ratePerSecond, rates[rate].lastUpdated); } return toAmount(chi_, pie_); } // --- Interest Rate Group Implementation --- // set rate loanRates for a loan function setRate(uint loan, uint rate) external auth { require(pie[loan] == 0, "non-zero-debt"); // rate category has to be initiated require(rates[rate].chi != 0, "rate-group-not-set"); loanRates[loan] = rate; emit SetRate(loan, rate); } // change rate loanRates for a loan function changeRate(uint loan, uint newRate) external auth { require(rates[newRate].chi != 0, "rate-group-not-set"); uint currentRate = loanRates[loan]; drip(currentRate); drip(newRate); uint pie_ = pie[loan]; uint debt_ = toAmount(rates[currentRate].chi, pie_); rates[currentRate].pie = safeSub(rates[currentRate].pie, pie_); pie[loan] = toPie(rates[newRate].chi, debt_); rates[newRate].pie = safeAdd(rates[newRate].pie, pie[loan]); loanRates[loan] = newRate; emit ChangeRate(loan, newRate); } // set/change the interest rate of a rate category function file(bytes32 what, uint rate, uint value) external auth { if (what == "rate") { require(value != 0, "rate-per-second-can-not-be-0"); if (rates[rate].chi == 0) { rates[rate].chi = ONE; rates[rate].lastUpdated = uint48(block.timestamp); } else { drip(rate); } rates[rate].ratePerSecond = value; } else if (what == "fixedRate") { rates[rate].fixedRate = value; } else revert("unknown parameter"); emit File(what, rate, value); } // accrue needs to be called before any debt amounts are modified by an external component function accrue(uint loan) external { drip(loanRates[loan]); } // drip updates the chi of the rate category by compounding the interest and // updates the total debt function drip(uint rate) public { if (block.timestamp >= rates[rate].lastUpdated) { (uint chi,) = compounding(rates[rate].chi, rates[rate].ratePerSecond, rates[rate].lastUpdated, rates[rate].pie); rates[rate].chi = chi; rates[rate].lastUpdated = uint48(block.timestamp); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"loan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"ChangeRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"loan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"DecreaseDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"loan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"IncreaseDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"loan","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"}],"name":"SetRate","type":"event"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"}],"name":"accrue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"changeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interestBearingAmount","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"}],"name":"chargeInterest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"uint256","name":"pie","type":"uint256"}],"name":"compounding","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"}],"name":"debt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"decDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"drip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"currencyAmount","type":"uint256"}],"name":"incDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"loanRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"rateDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rates","outputs":[{"internalType":"uint256","name":"pie","type":"uint256"},{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"ratePerSecond","type":"uint256"},{"internalType":"uint48","name":"lastUpdated","type":"uint48"},{"internalType":"uint256","name":"fixedRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rdiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rmul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"},{"internalType":"uint256","name":"base","type":"uint256"}],"name":"rpow","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeAdd","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeDiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeMul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeSub","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"loan","type":"uint256"},{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"pie","type":"uint256"}],"name":"toAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"chi","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"toPie","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806386c1762a116100de578063b5931f7c11610097578063d7affae311610071578063d7affae314610777578063dd418ae2146107b9578063e4064a771461081f578063e6cb9013146108865761018e565b8063b5931f7c14610687578063bf353dbb146106d3578063d05c78da1461072b5761018e565b806386c1762a146104ef5780639717411d146105315780639c52a7f1146105735780639e1aaae6146105b7578063a293d1e814610603578063a883b0c41461064f5761018e565b806329a8f4f81161014b57806365fae35e1161012557806365fae35e146103db578063674570221461041f57806367b870af1461046b578063744f4cf6146104c15761018e565b806329a8f4f81461031f57806346df2ccb1461037557806358326b7a146103ad5761018e565b806301aa8a6e14610193578063071ffb3c146101d55780630e2286d31461020d5780631e0029c8146102595780632047a2671461029b57806328a7996f146102d3575b600080fd5b6101bf600480360360208110156101a957600080fd5b81019080803590602001909291905050506108d2565b6040518082815260200191505060405180910390f35b61020b600480360360408110156101eb57600080fd5b8101908080359060200190929190803590602001909291905050506108ea565b005b6102436004803603604081101561022357600080fd5b810190808035906020019092919080359060200190929190505050610b56565b6040518082815260200191505060405180910390f35b6102856004803603602081101561026f57600080fd5b8101908080359060200190929190505050610c07565b6040518082815260200191505060405180910390f35b6102d1600480360360408110156102b157600080fd5b810190808035906020019092919080359060200190929190505050610d02565b005b610309600480360360408110156102e957600080fd5b810190808035906020019092919080359060200190929190505050610f43565b6040518082815260200191505060405180910390f35b61035f6004803603606081101561033557600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610f57565b6040518082815260200191505060405180910390f35b6103ab6004803603604081101561038b57600080fd5b810190808035906020019092919080359060200190929190505050610f79565b005b6103d9600480360360208110156103c357600080fd5b8101908080359060200190929190505050611197565b005b61041d600480360360208110156103f157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112aa565b005b6104556004803603604081101561043557600080fd5b8101908080359060200190929190803590602001909291905050506113e8565b6040518082815260200191505060405180910390f35b6104ab6004803603606081101561048157600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611411565b6040518082815260200191505060405180910390f35b6104ed600480360360208110156104d757600080fd5b81019080803590602001909291905050506114d7565b005b61051b6004803603602081101561050557600080fd5b81019080803590602001909291905050506114f6565b6040518082815260200191505060405180910390f35b61055d6004803603602081101561054757600080fd5b81019080803590602001909291905050506115e1565b6040518082815260200191505060405180910390f35b6105b56004803603602081101561058957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115f9565b005b6105ed600480360360408110156105cd57600080fd5b810190808035906020019092919080359060200190929190505050611737565b6040518082815260200191505060405180910390f35b6106396004803603604081101561061957600080fd5b81019080803590602001909291908035906020019092919050505061174b565b6040518082815260200191505060405180910390f35b6106856004803603604081101561066557600080fd5b8101908080359060200190929190803590602001909291905050506117ce565b005b6106bd6004803603604081101561069d57600080fd5b810190808035906020019092919080359060200190929190505050611a8a565b6040518082815260200191505060405180910390f35b610715600480360360208110156106e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a9e565b6040518082815260200191505060405180910390f35b6107616004803603604081101561074157600080fd5b810190808035906020019092919080359060200190929190505050611ab6565b6040518082815260200191505060405180910390f35b6107b76004803603606081101561078d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050611b4b565b005b6107e5600480360360208110156107cf57600080fd5b8101908080359060200190929190505050611e48565b604051808681526020018581526020018481526020018365ffffffffffff1681526020018281526020019550505050505060405180910390f35b6108696004803603608081101561083557600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611e90565b604051808381526020018281526020019250505060405180910390f35b6108bc6004803603604081101561089c57600080fd5b810190808035906020019092919080359060200190929190505050611f52565b6040518082815260200191505060405180910390f35b60036020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008481526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610a5b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b610a8482610a7f8460016000868152602001908152602001600020600401546113e8565b611f52565b91506000610aa8600160008481526020019081526020016000206001015484610f43565b9050610ac7600260008681526020019081526020016000205482611f52565b6002600086815260200190815260200160002081905550610afe600160008481526020019081526020016000206000015482611f52565b6001600084815260200190815260200160002060000181905550837f4656f63d6d86ffd6679877563f6832dff83d72eb09acf31f29018beaad47ef0e846040518082815260200191505060405180910390a250505050565b6000808211610bcd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81610bf7610be7856b033b2e3c9fd0803ce8000000611ab6565b60028581610bf157fe5b04611f52565b81610bfe57fe5b04905092915050565b600080600360008481526020019081526020016000205490506000600160008381526020019081526020016000206001015490506001600083815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164210610cdc57610cd9600160008481526020019081526020016000206001015460016000858152602001908152602001600020600201546001600086815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff16610f57565b90505b610cf9816002600087815260200190815260200160002054611737565b92505050919050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610db6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b6000600360008481526020019081526020016000205490506001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff164214610e73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f726174652d67726f75702d6e6f742d757064617465640000000000000000000081525060200191505060405180910390fd5b6000610e95600160008481526020019081526020016000206001015484610f43565b9050610eb460026000868152602001908152602001600020548261174b565b6002600086815260200190815260200160002081905550610eeb60016000848152602001908152602001600020600001548261174b565b6001600084815260200190815260200160002060000181905550837fb8b26d9635bdf66575907fb44682641f476b48fb70ad5c2a630908bfcddf2143846040518082815260200191505060405180910390a250505050565b6000610f4f8284611fd5565b905092915050565b6000814210610f6f57610f6c84848442612086565b93505b8390509392505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b60006002600084815260200190815260200160002054146110b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f6e2d7a65726f2d646562740000000000000000000000000000000000000081525060200191505060405180910390fd5b600060016000838152602001908152602001600020600101541415611143576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b806003600084815260200190815260200160002081905550817f3a8f7e78fe36c54b4f888a309efa91eba128acb04cc1c2ffa0e5c4db7b4a8785826040518082815260200191505060405180910390a25050565b6001600082815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1642106112a757600061124e600160008481526020019081526020016000206001015460016000858152602001908152602001600020600201546001600086815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff166001600087815260200190815260200160002060000154611e90565b509050806001600084815260200190815260200160002060010181905550426001600084815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550505b50565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461135e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b60016000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a6060405160405180910390a250565b60006b033b2e3c9fd0803ce80000006114018484611ab6565b8161140857fe5b04905092915050565b600083600081146114b757600284066000811461143057859250611434565b8392505b50600283046002850494505b84156114b157858602868782041461145757600080fd5b8181018181101561146757600080fd5b858104975060028706156114a457878502858982041415891515161561148c57600080fd5b8381018181101561149c57600080fd5b878104965050505b5050600285049450611440565b506114cf565b83600081146114c957600092506114cd565b8392505b505b509392505050565b6114f36003600083815260200190815260200160002054611197565b50565b600080600160008481526020019081526020016000206001015490506000600160008581526020019081526020016000206000015490506001600085815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff1642106115ce576115cb600160008681526020019081526020016000206001015460016000878152602001908152602001600020600201546001600088815260200190815260200160002060030160009054906101000a900465ffffffffffff1665ffffffffffff16610f57565b91505b6115d88282611737565b92505050919050565b60026020528060005260406000206000915090505481565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146116ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff167f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b60405160405180910390a250565b600061174382846113e8565b905092915050565b60008282840391508111156117c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d7375622d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b60006001600083815260200190815260200160002060010154141561190f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f726174652d67726f75702d6e6f742d736574000000000000000000000000000081525060200191505060405180910390fd5b60006003600084815260200190815260200160002054905061193081611197565b61193982611197565b6000600260008581526020019081526020016000205490506000611973600160008581526020019081526020016000206001015483611737565b905061199560016000858152602001908152602001600020600001548361174b565b60016000858152602001908152602001600020600001819055506119cf600160008681526020019081526020016000206001015482610f43565b6002600087815260200190815260200160002081905550611a1960016000868152602001908152602001600020600001546002600088815260200190815260200160002054611f52565b6001600086815260200190815260200160002060000181905550836003600087815260200190815260200160002081905550847fe1033ddc4775544ccda3ab7eb50208593822f29f4e10be3f6b4616eeae5d810c856040518082815260200191505060405180910390a25050505050565b6000818381611a9557fe5b04905092915050565b60006020528060005260406000206000915090505481565b600080821480611ad35750828283850292508281611ad057fe5b04145b611b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6d756c2d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f6e6f742d617574686f72697a656400000000000000000000000000000000000081525060200191505060405180910390fd5b7f7261746500000000000000000000000000000000000000000000000000000000831415611d4c576000811415611c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f726174652d7065722d7365636f6e642d63616e2d6e6f742d62652d300000000081525060200191505060405180910390fd5b600060016000848152602001908152602001600020600101541415611d22576b033b2e3c9fd0803ce80000006001600084815260200190815260200160002060010181905550426001600084815260200190815260200160002060030160006101000a81548165ffffffffffff021916908365ffffffffffff160217905550611d2c565b611d2b82611197565b5b806001600084815260200190815260200160002060020181905550611e03565b7f6669786564526174650000000000000000000000000000000000000000000000831415611d9457806001600084815260200190815260200160002060040181905550611e02565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f756e6b6e6f776e20706172616d6574657200000000000000000000000000000081525060200191505060405180910390fd5b5b827f52e8bd81e873a93db0176f662695e3c80268d53323abc4a4d0fd0676be459d178383604051808381526020018281526020019250505060405180910390a2505050565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900465ffffffffffff16908060040154905085565b60008083421015611f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f74696e6c616b652d6d6174682f696e76616c69642d74696d657374616d70000081525060200191505060405180910390fd5b6000861415611f1757600080fd5b6000611f2587878742612086565b905080611f44611f3583876113e8565b611f3f8a886113e8565b61174b565b925092505094509492505050565b6000828284019150811015611fcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f736166652d6164642d6661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b92915050565b600080821161204c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6469766973696f6e206279207a65726f0000000000000000000000000000000081525060200191505060405180910390fd5b81612076612066856b033b2e3c9fd0803ce8000000611ab6565b61207185600161174b565b611f52565b8161207d57fe5b04905092915050565b60006120aa6120a4858585036b033b2e3c9fd0803ce8000000611411565b866113e8565b905094935050505056fea2646970667358221220cd894bd87538ff2171d0845e929cacf3f00072c5fedbd1474cb24ef38146203b64736f6c63430007060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.