Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xE575cC6EC0B5d176127ac61aD2D3d9d19d1aa4a0
Balance 0 ETH
Nonce 1
Code Size 4463 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

4463 bytes
0x608060408181526004918236101561001657600080fd5b600092833560e01c91826306fdde0314610b7957508163095ea7b314610b0757816318160ddd14610a4b57816323b872dd14610881578163313ce56714610865578163447b15f4146108425781634c84c1c8146107b35781635aa6e6751461073e57816370a082311461068d57816395d89b41146105ed578163a59f3e0c146105cf578163a9059cbb14610458578163c717823014610435578163ce7c2ac2146103fe578163d848dee714610314578163dd62ed3e146102cb57838263de0e9a3e1461014257508163ea598cb014610125575063f893d346146100f857600080fd5b346101215736600319011261011e5761011b610112610c7f565b60243590610eca565b80f35b80fd5b5080fd5b8390346101215760203660031901126101215761011b9035610d76565b929150346102c7576020806003193601126102c25781353385526002825283852061016e828254610d44565b90556001600160a01b038086541683865180927fa9059cbb000000000000000000000000000000000000000000000000000000008252818a816101ca89338d8401602090939291936001600160a01b0360408201951681520152565b03925af19081156102b857879161028b575b501561028757829086541685519485809263111ec57d60e21b82525afa92831561027d578593610248575b5061023c7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef93670de0b6b3a764000092610cb0565b0492519283523392a380f35b92508183813d8311610276575b61025f8183610c14565b810103126102725791519161023c610207565b8480fd5b503d610255565b84513d87823e3d90fd5b8580fd5b6102ab9150843d86116102b1575b6102a38183610c14565b810190610d5e565b386101dc565b503d610299565b86513d89823e3d90fd5b505050fd5b5050fd5b505034610121578060031936011261012157806020926102e9610c7f565b6102f1610c9a565b6001600160a01b0391821683526003865283832091168252845220549051908152f35b919050346103fa5760203660031901126103fa578135908115158092036103f6576001600160a01b0383602082875416845192838092635aa6e67560e01b82525afa9081156103ec5786916103be575b5016330361037c575060ff8019835416911617905580f35b5162461bcd60e51b8152602081840152600e60248201527f4e4f545f474f5645524e414e43450000000000000000000000000000000000006044820152606490fd5b6103df915060203d81116103e5575b6103d78183610c14565b81019061111a565b38610364565b503d6103cd565b83513d88823e3d90fd5b8380fd5b8280fd5b50503461012157602036600319011261012157806020926001600160a01b03610425610c7f565b1681526002845220549051908152f35b82843461011e578060031936011261011e575060ff602092541690519015158152f35b82843461011e578160031936011261011e57610472610c7f565b6024356001600160a01b038092169130831415806105c6575b61049490610cf9565b83541692845195869463111ec57d60e21b865285826020998a935afa9485156105bc57829561058d575b50670de0b6b3a76400009081840291848304148415171561057a5750918693918661053961050e887f4ca06b5be113a9e02d5495e4a0b4bf1126ee9976c2a2bc0901188caff9137bc69997610cd9565b338452600288526105228184862054610d44565b338552600289528385205585845282842054610d51565b9184815260028752205585519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef843392a38351908152a15160018152f35b826011602492634e487b7160e01b835252fd5b9094508681813d83116105b5575b6105a58183610c14565b81010312610121575193876104be565b503d61059b565b86513d84823e3d90fd5b5082151561048b565b8390346101215760203660031901126101215761011b903533610eca565b9050346103fa57826003193601126103fa575461064e925060ff161561065257805161061881610bf8565b600f81527f73746b57414c4c45544c656761637900000000000000000000000000000000006020820152905b5191829182610c36565b0390f35b805161065d81610bf8565b600981527f73746b57414c4c45540000000000000000000000000000000000000000000000602082015290610644565b9050346103fa576020928360031936011261011e576001600160a01b0391826106b4610c7f565b1682526002855284848320549383541685519283809263111ec57d60e21b82525afa918215610733578092610701575b50506106f990670de0b6b3a764000092610cb0565b049051908152f35b9091508482813d831161072c575b6107198183610c14565b8101031261011e575051816106f96106e4565b503d61070f565b8451903d90823e3d90fd5b919050346103fa57826003193601126103fa576001600160a01b0390602082855416825194858092635aa6e67560e01b82525afa9283156107a9576020949361078a575b505191168152f35b6107a2919350843d81116103e5576103d78183610c14565b9138610782565b81513d86823e3d90fd5b919050346103fa57826003193601126103fa5760206001600160a01b038454169260248351809581936370a0823160e01b835233908301525afa90811561083957508290610806575b61011b9150610d76565b506020813d8211610831575b8161081f60209383610c14565b810103126101215761011b90516107fc565b3d9150610812565b513d84823e3d90fd5b50503461012157816003193601126101215760209051670de0b6b3a76400008152f35b5050346101215781600319360112610121576020905160128152f35b82843461011e57606036600319011261011e5761089c610c7f565b906108a5610c9a565b916044356001600160a01b03809416923084141580610a42575b6108c890610cf9565b8481541694865197889663111ec57d60e21b8852878260209b8c935afa968715610a38578397610a09575b50670de0b6b3a7640000908185029185830414851517156109f65750889593879593896109b67fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef956109677f4ca06b5be113a9e02d5495e4a0b4bf1126ee9976c2a2bc0901188caff9137bc69c8c97610cd9565b9716968784526002865261097e8184862054610d44565b8885526002875283852055600386528284203385528652828420548560001982106109d3575b50508884526002865282842054610d51565b918781526002855220558851908152a38351908152a15160018152f35b6109dc91610d44565b888552600387528385203386528752838520558e856109a4565b836011602492634e487b7160e01b835252fd5b9096508881813d8311610a31575b610a218183610c14565b810103126103fa575195896108f3565b503d610a17565b88513d85823e3d90fd5b508315156108bf565b9050346103fa57826003193601126103fa576001600160a01b03835416928251916370a0823160e01b835230818401526020948584602481845afa938415610afd579086918495610acc575b5085519283809263111ec57d60e21b82525afa9182156107335780926107015750506106f990670de0b6b3a764000092610cb0565b8281939296503d8311610af6575b610ae48183610c14565b810103126103fa578590519338610a97565b503d610ada565b85513d85823e3d90fd5b50503461012157806003193601126101215760209181610b25610c7f565b91602435918291338152600387526001600160a01b038282209516948582528752205582519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925843392a35160018152f35b849084346103fa57826003193601126103fa5761064e9250610b9a82610bf8565b600e82527f5374616b6564202457414c4c455400000000000000000000000000000000000060208301525191829182610c36565b67ffffffffffffffff8111610be257604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff821117610be257604052565b90601f8019910116810190811067ffffffffffffffff821117610be257604052565b6020808252825181830181905290939260005b828110610c6b57505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501610c49565b600435906001600160a01b0382168203610c9557565b600080fd5b602435906001600160a01b0382168203610c9557565b81810292918115918404141715610cc357565b634e487b7160e01b600052601160045260246000fd5b8115610ce3570490565b634e487b7160e01b600052601260045260246000fd5b15610d0057565b606460405162461bcd60e51b815260206004820152600b60248201527f4241445f414444524553530000000000000000000000000000000000000000006044820152fd5b91908203918211610cc357565b91908201809211610cc357565b90816020910312610c9557518015158103610c955790565b600080546040516323b872dd60e01b815233600482015230602482015260448101849052906020908290606490829086906001600160a01b03165af1908115610df1578291610dd3575b501561011e5750610dd19033610dfc565b565b610deb915060203d81116102b1576102a38183610c14565b38610dc0565b6040513d84823e3d90fd5b906001600160a01b03809216916004600092848452602080936002825260408620610e28848254610d51565b90558554166040519384809263111ec57d60e21b82525afa918215610ebf578492610e8e575b50610e847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9392670de0b6b3a764000092610cb0565b04604051908152a3565b9091508281813d8311610eb8575b610ea68183610c14565b810103126103f6575190610e84610e4e565b503d610e9c565b6040513d86823e3d90fd5b600154604080516323b872dd60e01b8152336004820152306024820152604481018590529293929091600091602090818180606481010381876001600160a01b038098165af19081156111105784916110f3575b50156103fa5781835416918451956370a0823160e01b938488523060048901528388602481845afa9788156110b65786986110c4575b50826001541690813b156110c05787517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602481018390529086908290604490829084905af180156110b6576110a3575b508185541690813b1561028757859160248392895194859384927fa59f3e0c00000000000000000000000000000000000000000000000000000000845260048401525af18015611099578392918691611080575b50541692602486518095819382523060048301525afa93841561083957508293611050575b50508282111561011e5750610dd1929161104a91610d44565b90610dfc565b9080929350813d8311611079575b6110688183610c14565b81010312610c955751903880611031565b503d61105e565b61108c91929350610bce565b6103f6578190843861100c565b86513d87823e3d90fd5b6110af90959195610bce565b9338610fb8565b87513d88823e3d90fd5b8680fd5b9097508381813d83116110ec575b6110dc8183610c14565b8101031261028757519638610f54565b503d6110d2565b61110a9150823d84116102b1576102a38183610c14565b38610f1e565b85513d86823e3d90fd5b90816020910312610c9557516001600160a01b0381168103610c95579056fea2646970667358221220c473c3c8e7cbd7e4c411223a543a0fb508492eea2c8083dcbfc25bf0ee56deda64736f6c63430008130033

Verified Source Code Full Match

Compiler: v0.8.19+commit.7dd6d404 EVM: paris Optimization: Yes (1000 runs)
stkWALLET.sol 146 lines
// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.8.19;

interface IXWallet {
	function balanceOf(address owner) external view returns (uint256);
	function shareValue() external view returns (uint256);
	function transfer(address to, uint256 amount) external returns (bool);
	function transferFrom(address from, address to, uint256 amount) external returns (bool);
	function enter(uint256 amount) external;
	function enterTo(address recipient, uint256 amount) external;
	function governance() external view returns (address);
}

interface IWallet {
	function transferFrom(address from, address to, uint256 amount) external returns (bool);
	function approve(address, uint) external;
}

contract stkWALLET is IXWallet {
	// ERC20 stuff
	// Constants
	string public constant name = "Staked $WALLET";
	uint8 public constant decimals = 18;
	string private constant normalSymbol = "stkWALLET";
	string private constant legacySymbol = "stkWALLETLegacy";
	// Immutables
	IXWallet xWallet;
	IWallet wallet;

	// Mutable variables
	mapping(address => uint256) public shares;
	mapping(address => mapping(address => uint256)) private allowed;
	bool public isDeprecated;

	// ERC20 events
	event Approval(address indexed owner, address indexed spender, uint256 amount);
	event Transfer(address indexed from, address indexed to, uint256 amount);
	// Custom events
	event ShareValueUpdate(uint256 xwalletValue);

	// ERC20 methods
	function symbol() external view returns (string memory) {
		return isDeprecated ? legacySymbol : normalSymbol;
	}

	// Note: any xWALLET sent to this contract will be burned as there's nothing that can be done with it. Expected behavior.
	function totalSupply() external view returns (uint256) {
		return (xWallet.balanceOf(address(this)) * xWallet.shareValue()) / 1e18;
	}

	function balanceOf(address owner) external view returns (uint256 balance) {
		return (shares[owner] * xWallet.shareValue()) / 1e18;
	}

	function transfer(address to, uint256 amount) external returns (bool success) {
		require(to != address(this) && to != address(0), "BAD_ADDRESS");
		uint256 xwalletValue = xWallet.shareValue();
		uint256 sharesAmount = (amount * 1e18) / xwalletValue;
		shares[msg.sender] = shares[msg.sender] - sharesAmount;
		shares[to] = shares[to] + sharesAmount;
		emit Transfer(msg.sender, to, amount);
		emit ShareValueUpdate(xwalletValue);
		return true;
	}

	function transferFrom(address from, address to, uint256 amount) external returns (bool success) {
		require(to != address(this) && to != address(0), "BAD_ADDRESS");
		uint256 xwalletValue = xWallet.shareValue();
		uint256 sharesAmount = (amount * 1e18) / xwalletValue;
		shares[from] = shares[from] - sharesAmount;
		uint256 prevAllowance = allowed[from][msg.sender];
		if (prevAllowance < type(uint256).max) allowed[from][msg.sender] = prevAllowance - amount;
		shares[to] = shares[to] + sharesAmount;
		emit Transfer(from, to, amount);
		emit ShareValueUpdate(xwalletValue);
		return true;
	}

	function approve(address spender, uint256 amount) external returns (bool success) {
		allowed[msg.sender][spender] = amount;
		emit Approval(msg.sender, spender, amount);
		return true;
	}

	function allowance(address owner, address spender) external view returns (uint256 remaining) {
		return allowed[owner][spender];
	}

	constructor(IWallet _wallet, IXWallet _xWallet) {
		wallet = _wallet;
		xWallet = _xWallet;
	}

	// convert xWALLET to stkWALLET
	function wrapAll() external {
		wrap(xWallet.balanceOf(msg.sender));
	}

	function innerMintTo(address to, uint shareAmount) internal {
		shares[to] += shareAmount;
		emit Transfer(address(0), to, (shareAmount * xWallet.shareValue()) / 1e18);
	}

	function wrap(uint256 shareAmount) public {
		require(xWallet.transferFrom(msg.sender, address(this), shareAmount));
		innerMintTo(msg.sender, shareAmount);
	}

	// this is used to trigger unstaking
	function unwrap(uint256 shareAmount) external {
		shares[msg.sender] -= shareAmount;
		require(xWallet.transfer(msg.sender, shareAmount));
		emit Transfer(msg.sender, address(0), (shareAmount * xWallet.shareValue()) / 1e18);
	}

	// convert WALLET to stkWALLET
	function enterTo(address recipient, uint256 amount) public {
		require(wallet.transferFrom(msg.sender, address(this), amount));
		uint256 balanceBefore = xWallet.balanceOf(address(this));
		wallet.approve(address(xWallet), amount);
		xWallet.enter(amount);
		uint256 balanceAfter = xWallet.balanceOf(address(this));

		require(balanceAfter > balanceBefore);
		innerMintTo(recipient, balanceAfter - balanceBefore);
	}

	function enter(uint256 amount) external {
		enterTo(msg.sender, amount);
	}

	// xWALLET interface compat
	function shareValue() external pure returns (uint256) {
		return 1e18;
	}

	function governance() external view returns (address) {
		return xWallet.governance();
	}

	// set deprecated flag
	function setDeprecated(bool _isDeprecated) external {
		require(msg.sender == xWallet.governance(), "NOT_GOVERNANCE");
		isDeprecated = _isDeprecated;
	}
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
governance 0x5aa6e675 → address
isDeprecated 0xc7178230 → bool
name 0x06fdde03 → string
shareValue 0x447b15f4 → uint256
shares 0xce7c2ac2 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256

Write Contract 9 functions

These functions modify contract state and require a wallet transaction to execute.

approve 0x095ea7b3
address spender
uint256 amount
returns: bool
enter 0xa59f3e0c
uint256 amount
enterTo 0xf893d346
address recipient
uint256 amount
setDeprecated 0xd848dee7
bool _isDeprecated
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
unwrap 0xde0e9a3e
uint256 shareAmount
wrap 0xea598cb0
uint256 shareAmount
wrapAll 0x4c84c1c8
No parameters

Recent Transactions

No transactions found for this address