Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
VeArtProxy
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 100000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.24; import { Base64 } from "./libraries/Base64.sol"; import { IVeArtProxy } from "./interfaces/IVeArtProxy.sol"; /// @title VeArtProxy /// @author Rings Protocol /// @notice VeArtProxy is a contract for generating SVG images for VeArt NFTs /// it is a fork of Thena's VeArtProxy contract contract VeArtProxy is IVeArtProxy { /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor() { } /*////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ /** * @notice Returns the SVG image for a given token * @param _tokenId The token ID * @param _balanceOf The balance of the token * @param _locked_end The end of the lock period * @param _value The value of the token * @return output The SVG image */ function _tokenURI(uint256 _tokenId, uint256 _balanceOf, uint256 _locked_end, uint256 _value) external pure returns (string memory output) { output = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'; output = string(abi.encodePacked(output, "token ", toString(_tokenId), '</text><text x="10" y="40" class="base">')); output = string( abi.encodePacked(output, "balanceOf ", toString(_balanceOf), '</text><text x="10" y="60" class="base">') ); output = string( abi.encodePacked(output, "locked_end ", toString(_locked_end), '</text><text x="10" y="80" class="base">') ); output = string(abi.encodePacked(output, "value ", toString(_value), "</text></svg>")); string memory json = Base64.encode( bytes( string( abi.encodePacked( '{"name": "lock #', toString(_tokenId), '", "description": "Rings locks, can be used to boost gauge yields, vote on token emission, and receive bribes", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}' ) ) ) ); output = string(abi.encodePacked("data:application/json;base64,", json)); } /*////////////////////////////////////////////////////////////// INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.24; /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.24; interface IVeArtProxy { function _tokenURI(uint256 _tokenId, uint256 _balanceOf, uint256 _locked_end, uint256 _value) external pure returns (string memory output); }
{ "remappings": [ "ds-test/=lib/solmate/lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "solmate/=lib/solmate/src/", "solady/=lib/solady/src/", "src/=src/", "test/=test/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 100000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "none", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_balanceOf","type":"uint256"},{"internalType":"uint256","name":"_locked_end","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"_tokenURI","outputs":[{"internalType":"string","name":"output","type":"string"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
6080806040523461001657610ba8908161001b8239f35b5f80fdfe6040608081526004361015610012575f80fd5b5f3560e01c63dd9ec14914610025575f80fd5b346104a95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104a95760043590610060610604565b9161006a816108b4565b8251809160209586830161007d9161075a565b7f746f6b656e20000000000000000000000000000000000000000000000000000081526006016100ac9161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737381527f3d2262617365223e000000000000000000000000000000000000000000000000602082015260280103917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092838101835261012b9083610566565b6101366024356108b4565b9184519283918783016101489161075a565b7f62616c616e63654f6620000000000000000000000000000000000000000000008152600a016101779161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2236302220636c61737381527f3d2262617365223e00000000000000000000000000000000000000000000000060208201526028010383810183526101d39083610566565b6101de6044356108b4565b9184519283918783016101f09161075a565b7f6c6f636b65645f656e64200000000000000000000000000000000000000000008152600b0161021f9161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2238302220636c61737381527f3d2262617365223e000000000000000000000000000000000000000000000000602082015260280103838101835261027b9083610566565b6102866064356108b4565b9184519283918783016102989161075a565b7f76616c756520000000000000000000000000000000000000000000000000000081526006016102c79161075a565b7f3c2f746578743e3c2f7376673e000000000000000000000000000000000000008152600d010383810183526102fd9083610566565b610306906108b4565b9061031090610a2b565b83517f7b226e616d65223a20226c6f636b202300000000000000000000000000000000868201908152909283929160100161034a9161075a565b7f222c20226465736372697074696f6e223a202252696e6773206c6f636b732c2081527f63616e206265207573656420746f20626f6f7374206761756765207969656c6460208201527f732c20766f7465206f6e20746f6b656e20656d697373696f6e2c20616e64207260408201527f65636569766520627269626573222c2022696d616765223a2022646174613a6960608201527f6d6167652f7376672b786d6c3b6261736536342c00000000000000000000000060808201526094016104119161075a565b7f227d00000000000000000000000000000000000000000000000000000000000081526002010382810182526104479082610566565b61045090610a2b565b82517f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000094810194855293849190601d016104899161075a565b0390810183526104999083610566565b516104a58192826104ce565b0390f35b5f80fd5b5f5b8381106104be5750505f910152565b81810151838201526020016104af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040936020845261051181518092816020880152602088880191016104ad565b0116010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761056157604052565b610518565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761056157604052565b67ffffffffffffffff811161056157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b604051906020820182811067ffffffffffffffff821117610561576040525f8252565b60405190610120820182811067ffffffffffffffff8211176105615760405260fd82527f7420783d2231302220793d2232302220636c6173733d2262617365223e000000610100837f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208201527f30302f73766722207072657365727665417370656374526174696f3d22784d6960408201527f6e594d696e206d656574222076696577426f783d22302030203335302033353060608201527f223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f60808201527f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a2031347060a08201527f783b207d3c2f7374796c653e3c726563742077696474683d223130302522206860c08201527f65696768743d2231303025222066696c6c3d22626c61636b22202f3e3c74657860e08201520152565b9061076d602092828151948592016104ad565b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107cb5760010190565b610771565b906107da826105a7565b6107e76040519182610566565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061081582946105a7565b0190602036910137565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116107cb57565b60300190816030116107cb57565b90600282018092116107cb57565b90602082018092116107cb57565b908151811015610887570160200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b801561095157805f81805b61093957506108cd816107d0565b925b6108d857505090565b6108e19061081f565b90600a906109246108fc6108f684840661084c565b60ff1690565b60f81b7fff000000000000000000000000000000000000000000000000000000000000001690565b5f1a6109308486610876565b530490816108cf565b9150610946600a9161079e565b9104808392916108bf565b5060405161095e81610545565b600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036107cb57565b604051906060820182811067ffffffffffffffff82111761056157604052604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b8051908115610b8e57610a4f610a4a610a438461085a565b6003900490565b61098b565b91610a61610a5c84610868565b6107d0565b90610a6a6109bb565b925f92602081015b8484811015610ad6579060049160038091019685010151600180603f81818560121c168c0101518b60089160ff9586918282878b600c1c16860101511690851b01841b92858960061c160101511601901b93168a010151160160e01b815201610a72565b509350949350506003900680600114610b4257600214610af7575b50815290565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f3d000000000000000000000000000000000000000000000000000000000000009101525f610af1565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3d3d0000000000000000000000000000000000000000000000000000000000009101525f610af1565b5050610b986105e1565b9056fea164736f6c6343000818000a
Deployed Bytecode
0x6040608081526004361015610012575f80fd5b5f3560e01c63dd9ec14914610025575f80fd5b346104a95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104a95760043590610060610604565b9161006a816108b4565b8251809160209586830161007d9161075a565b7f746f6b656e20000000000000000000000000000000000000000000000000000081526006016100ac9161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737381527f3d2262617365223e000000000000000000000000000000000000000000000000602082015260280103917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe092838101835261012b9083610566565b6101366024356108b4565b9184519283918783016101489161075a565b7f62616c616e63654f6620000000000000000000000000000000000000000000008152600a016101779161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2236302220636c61737381527f3d2262617365223e00000000000000000000000000000000000000000000000060208201526028010383810183526101d39083610566565b6101de6044356108b4565b9184519283918783016101f09161075a565b7f6c6f636b65645f656e64200000000000000000000000000000000000000000008152600b0161021f9161075a565b7f3c2f746578743e3c7465787420783d2231302220793d2238302220636c61737381527f3d2262617365223e000000000000000000000000000000000000000000000000602082015260280103838101835261027b9083610566565b6102866064356108b4565b9184519283918783016102989161075a565b7f76616c756520000000000000000000000000000000000000000000000000000081526006016102c79161075a565b7f3c2f746578743e3c2f7376673e000000000000000000000000000000000000008152600d010383810183526102fd9083610566565b610306906108b4565b9061031090610a2b565b83517f7b226e616d65223a20226c6f636b202300000000000000000000000000000000868201908152909283929160100161034a9161075a565b7f222c20226465736372697074696f6e223a202252696e6773206c6f636b732c2081527f63616e206265207573656420746f20626f6f7374206761756765207969656c6460208201527f732c20766f7465206f6e20746f6b656e20656d697373696f6e2c20616e64207260408201527f65636569766520627269626573222c2022696d616765223a2022646174613a6960608201527f6d6167652f7376672b786d6c3b6261736536342c00000000000000000000000060808201526094016104119161075a565b7f227d00000000000000000000000000000000000000000000000000000000000081526002010382810182526104479082610566565b61045090610a2b565b82517f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000094810194855293849190601d016104899161075a565b0390810183526104999083610566565b516104a58192826104ce565b0390f35b5f80fd5b5f5b8381106104be5750505f910152565b81810151838201526020016104af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040936020845261051181518092816020880152602088880191016104ad565b0116010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761056157604052565b610518565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761056157604052565b67ffffffffffffffff811161056157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b604051906020820182811067ffffffffffffffff821117610561576040525f8252565b60405190610120820182811067ffffffffffffffff8211176105615760405260fd82527f7420783d2231302220793d2232302220636c6173733d2262617365223e000000610100837f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208201527f30302f73766722207072657365727665417370656374526174696f3d22784d6960408201527f6e594d696e206d656574222076696577426f783d22302030203335302033353060608201527f223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f60808201527f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a2031347060a08201527f783b207d3c2f7374796c653e3c726563742077696474683d223130302522206860c08201527f65696768743d2231303025222066696c6c3d22626c61636b22202f3e3c74657860e08201520152565b9061076d602092828151948592016104ad565b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107cb5760010190565b610771565b906107da826105a7565b6107e76040519182610566565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061081582946105a7565b0190602036910137565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116107cb57565b60300190816030116107cb57565b90600282018092116107cb57565b90602082018092116107cb57565b908151811015610887570160200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b801561095157805f81805b61093957506108cd816107d0565b925b6108d857505090565b6108e19061081f565b90600a906109246108fc6108f684840661084c565b60ff1690565b60f81b7fff000000000000000000000000000000000000000000000000000000000000001690565b5f1a6109308486610876565b530490816108cf565b9150610946600a9161079e565b9104808392916108bf565b5060405161095e81610545565b600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116036107cb57565b604051906060820182811067ffffffffffffffff82111761056157604052604082527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040837f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208201520152565b8051908115610b8e57610a4f610a4a610a438461085a565b6003900490565b61098b565b91610a61610a5c84610868565b6107d0565b90610a6a6109bb565b925f92602081015b8484811015610ad6579060049160038091019685010151600180603f81818560121c168c0101518b60089160ff9586918282878b600c1c16860101511690851b01841b92858960061c160101511601901b93168a010151160160e01b815201610a72565b509350949350506003900680600114610b4257600214610af7575b50815290565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f3d000000000000000000000000000000000000000000000000000000000000009101525f610af1565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f3d3d0000000000000000000000000000000000000000000000000000000000009101525f610af1565b5050610b986105e1565b9056fea164736f6c6343000818000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,417.66 | 0.00021229 | $0.7255 |
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.