Source Code
Overview
ETH Balance
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
FlowNFTDescriptor
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 10000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.8.22;
import { IERC721Metadata } from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import { Base64 } from "@openzeppelin/contracts/utils/Base64.sol";
import { IFlowNFTDescriptor } from "./interfaces/IFlowNFTDescriptor.sol";
/// @title FlowNFTDescriptor
/// @notice See the documentation in {IFlowNFTDescriptor}.
contract FlowNFTDescriptor is IFlowNFTDescriptor {
/// @inheritdoc IFlowNFTDescriptor
function tokenURI(
IERC721Metadata, /* sablierFlow */
uint256 /* streamId */
)
external
pure
override
returns (string memory uri)
{
// solhint-disable max-line-length,quotes
string memory svg =
'<svg width="500" height="500" style="background-color: #14161F;" xmlns="http://www.w3.org/2000/svg" viewBox="20 -400 200 1000"><path id="Logo" fill="#fff" fill-opacity="1" d="m133.559,124.034c-.013,2.412-1.059,4.848-2.923,6.402-2.558,1.819-5.168,3.439-7.888,4.996-14.44,8.262-31.047,12.565-47.674,12.569-8.858.036-17.838-1.272-26.328-3.663-9.806-2.766-19.087-7.113-27.562-12.778-13.842-8.025,9.468-28.606,16.153-35.265h0c2.035-1.838,4.252-3.546,6.463-5.224h0c6.429-5.655,16.218-2.835,20.358,4.17,4.143,5.057,8.816,9.649,13.92,13.734h.037c5.736,6.461,15.357-2.253,9.38-8.48,0,0-3.515-3.515-3.515-3.515-11.49-11.478-52.656-52.664-64.837-64.837l.049-.037c-1.725-1.606-2.719-3.847-2.751-6.204h0c-.046-2.375,1.062-4.582,2.726-6.229h0l.185-.148h0c.099-.062,.222-.148,.37-.259h0c2.06-1.362,3.951-2.621,6.044-3.842C57.763-3.473,97.76-2.341,128.637,18.332c16.671,9.946-26.344,54.813-38.651,40.199-6.299-6.096-18.063-17.743-19.668-18.811-6.016-4.047-13.061,4.776-7.752,9.751l68.254,68.371c1.724,1.601,2.714,3.84,2.738,6.192Z" transform="scale(1.5, 1.5)" /></svg>';
string memory json = string.concat(
'{"description": "This NFT represents a payment stream in Sablier Flow",',
'"external_url": "https://sablier.com",',
'"name": "Sablier Flow",',
'"image": "data:image/svg+xml;base64,',
Base64.encode(bytes(svg)),
'"}'
);
uri = string.concat("data:application/json;base64,", Base64.encode(bytes(json)));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.20;
import {IERC721} from "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.2) (utils/Base64.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides a set of functions to operate with Base64 strings.
*/
library Base64 {
/**
* @dev Base64 Encoding/Decoding Table
*/
string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/**
* @dev Converts a `bytes` to its Bytes64 `string` representation.
*/
function encode(bytes memory data) internal pure returns (string memory) {
/**
* Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
* https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
*/
if (data.length == 0) return "";
// Loads the table into memory
string memory table = _TABLE;
// Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
// and split into 4 numbers of 6 bits.
// The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
// - `data.length + 2` -> Round up
// - `/ 3` -> Number of 3-bytes chunks
// - `4 *` -> 4 characters for each chunk
string memory result = new string(4 * ((data.length + 2) / 3));
/// @solidity memory-safe-assembly
assembly {
// Prepare the lookup table (skip the first "length" byte)
let tablePtr := add(table, 1)
// Prepare result pointer, jump over length
let resultPtr := add(result, 0x20)
let dataPtr := data
let endPtr := add(data, mload(data))
// In some cases, the last iteration will read bytes after the end of the data. We cache the value, and
// set it to zero to make sure no dirty bytes are read in that section.
let afterPtr := add(endPtr, 0x20)
let afterCache := mload(afterPtr)
mstore(afterPtr, 0x00)
// Run over the input, 3 bytes at a time
for {
} lt(dataPtr, endPtr) {
} {
// Advance 3 bytes
dataPtr := add(dataPtr, 3)
let input := mload(dataPtr)
// To write each character, shift the 3 byte (24 bits) chunk
// 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
// and apply logical AND with 0x3F to bitmask the least significant 6 bits.
// Use this as an index into the lookup table, mload an entire word
// so the desired character is in the least significant byte, and
// mstore8 this least significant byte into the result and continue.
mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
resultPtr := add(resultPtr, 1) // Advance
mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
resultPtr := add(resultPtr, 1) // Advance
mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
resultPtr := add(resultPtr, 1) // Advance
mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
resultPtr := add(resultPtr, 1) // Advance
}
// Reset the value that was cached
mstore(afterPtr, afterCache)
// When data `bytes` is not exactly 3 bytes long
// it is padded with `=` characters at the end
switch mod(mload(data), 3)
case 1 {
mstore8(sub(resultPtr, 1), 0x3d)
mstore8(sub(resultPtr, 2), 0x3d)
}
case 2 {
mstore8(sub(resultPtr, 1), 0x3d)
}
}
return result;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity >=0.8.22;
import { IERC721Metadata } from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
/// @title IFlowNFTDescriptor
/// @notice This contract generates the URI describing the Sablier Flow stream NFTs.
interface IFlowNFTDescriptor {
/// @notice Produces the URI describing a particular stream NFT.
///
/// @dev Currently it returns the Sablier logo as an SVG. In the future, it will return an NFT SVG.
///
/// @param sablierFlow The address of the Sablier Flow the stream was created in.
/// @param streamId The ID of the stream for which to produce a description.
///
/// @return uri The URI of the ERC721-compliant metadata.
function tokenURI(IERC721Metadata sablierFlow, uint256 streamId) external view returns (string memory uri);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
* {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"remappings": [
"@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
"@prb/math/=node_modules/@prb/math/",
"forge-std/=node_modules/forge-std/",
"solady/=node_modules/solady/"
],
"optimizer": {
"enabled": true,
"runs": 10000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": true,
"libraries": {}
}Contract ABI
API[{"inputs":[{"internalType":"contract IERC721Metadata","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
60808060405234601557610af0908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63e9dc63751461002757600080fd5b346107d95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d95760043573ffffffffffffffffffffffffffffffffffffffff8116036107d9576107d0604061073f61059861044061008f84519182610801565b61041c81527f3c7376672077696474683d2235303022206865696768743d223530302220737460208201527f796c653d226261636b67726f756e642d636f6c6f723a20233134313631463b22848201527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608201527f7667222076696577426f783d223230202d343030203230302031303030223e3c60808201527f706174682069643d224c6f676f222066696c6c3d2223666666222066696c6c2d60a08201527f6f7061636974793d22312220643d226d3133332e3535392c3132342e3033346360c08201527f2d2e3031332c322e3431322d312e3035392c342e3834382d322e3932332c362e60e08201527f3430322d322e3535382c312e3831392d352e3136382c332e3433392d372e38386101008201527f382c342e3939362d31342e34342c382e3236322d33312e3034372c31322e35366101208201527f352d34372e3637342c31322e3536392d382e3835382e3033362d31372e3833386101408201527f2d312e3237322d32362e3332382d332e3636332d392e3830362d322e3736362d6101608201527f31392e3038372d372e3131332d32372e3536322d31322e3737382d31332e38346101808201527f322d382e3032352c392e3436382d32382e3630362c31362e3135332d33352e326101a08201527f3635683063322e3033352d312e3833382c342e3235322d332e3534362c362e346101c08201527f36332d352e323234683063362e3432392d352e3635352c31362e3231382d322e6101e08201527f3833352c32302e3335382c342e31372c342e3134332c352e3035372c382e38316102008201527f362c392e3634392c31332e39322c31332e373334682e30333763352e3733362c6102208201527f362e3436312c31352e3335372d322e3235332c392e33382d382e34382c302c306102408201527f2d332e3531352d332e3531352d332e3531352d332e3531352d31312e34392d316102608201527f312e3437382d35322e3635362d35322e3636342d36342e3833372d36342e38336102808201527f376c2e3034392d2e303337632d312e3732352d312e3630362d322e3731392d336102a08201527f2e3834372d322e3735312d362e3230346830632d2e3034362d322e3337352c316102c08201527f2e3036322d342e3538322c322e3732362d362e32323968306c2e3138352d2e316102e08201527f34386830632e3039392d2e3036322c2e3232322d2e3134382c2e33372d2e32356103008201527f39683063322e30362d312e3336322c332e3935312d322e3632312c362e3034346103208201527f2d332e3834324335372e3736332d332e3437332c39372e37362d322e3334312c6103408201527f3132382e3633372c31382e3333326331362e3637312c392e3934362d32362e336103608201527f34342c35342e3831332d33382e3635312c34302e3139392d362e3239392d362e6103808201527f3039362d31382e3036332d31372e3734332d31392e3636382d31382e3831312d6103a08201527f362e3031362d342e3034372d31332e3036312c342e3737362d372e3735322c396103c08201527f2e3735316c36382e3235342c36382e33373163312e3732342c312e3630312c326103e08201527f2e3731342c332e38342c322e3733382c362e3139325a22207472616e73666f726104008201527f6d3d227363616c6528312e352c20312e352922202f3e3c2f7376673e000000006104208201526108ab565b61073a600260c8855180947f7b226465736372697074696f6e223a202254686973204e46542072657072657360208301527f656e74732061207061796d656e742073747265616d20696e205361626c696572888301527f20466c6f77222c0000000000000000000000000000000000000000000000000060608301527f2265787465726e616c5f75726c223a202268747470733a2f2f7361626c69657260678301527f2e636f6d222c000000000000000000000000000000000000000000000000000060878301527f226e616d65223a20225361626c69657220466c6f77222c000000000000000000608d8301527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a48301527f6536342c0000000000000000000000000000000000000000000000000000000060c48301526106e581518092602086860191016107de565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182610801565b6108ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351926107b5603d8560208101937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000085526107a681518092602086860191016107de565b81010301848101865285610801565b845195869460208652518092816020880152878701906107de565b01168101030190f35b600080fd5b60005b8381106107f15750506000910152565b81810151838201526020016107e1565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161084257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90815115610acc57604051916108c2606084610801565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040840152805160028101809111610a9d5760039004908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610a9d5761097361095d83610871565b9261096b6040519485610801565b808452610871565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237908081518201956020870190815192600083525b888110610a4f5750506003939495965052510680600114610a00576002146109d7575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff603d91015390565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81603d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81940153015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c16870101516002850153168401015160038201530194976109b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9050604051610adc602082610801565b600081529056fea164736f6c634300081a000a
Deployed Bytecode
0x6080604052600436101561001257600080fd5b60003560e01c63e9dc63751461002757600080fd5b346107d95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107d95760043573ffffffffffffffffffffffffffffffffffffffff8116036107d9576107d0604061073f61059861044061008f84519182610801565b61041c81527f3c7376672077696474683d2235303022206865696768743d223530302220737460208201527f796c653d226261636b67726f756e642d636f6c6f723a20233134313631463b22848201527f20786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7360608201527f7667222076696577426f783d223230202d343030203230302031303030223e3c60808201527f706174682069643d224c6f676f222066696c6c3d2223666666222066696c6c2d60a08201527f6f7061636974793d22312220643d226d3133332e3535392c3132342e3033346360c08201527f2d2e3031332c322e3431322d312e3035392c342e3834382d322e3932332c362e60e08201527f3430322d322e3535382c312e3831392d352e3136382c332e3433392d372e38386101008201527f382c342e3939362d31342e34342c382e3236322d33312e3034372c31322e35366101208201527f352d34372e3637342c31322e3536392d382e3835382e3033362d31372e3833386101408201527f2d312e3237322d32362e3332382d332e3636332d392e3830362d322e3736362d6101608201527f31392e3038372d372e3131332d32372e3536322d31322e3737382d31332e38346101808201527f322d382e3032352c392e3436382d32382e3630362c31362e3135332d33352e326101a08201527f3635683063322e3033352d312e3833382c342e3235322d332e3534362c362e346101c08201527f36332d352e323234683063362e3432392d352e3635352c31362e3231382d322e6101e08201527f3833352c32302e3335382c342e31372c342e3134332c352e3035372c382e38316102008201527f362c392e3634392c31332e39322c31332e373334682e30333763352e3733362c6102208201527f362e3436312c31352e3335372d322e3235332c392e33382d382e34382c302c306102408201527f2d332e3531352d332e3531352d332e3531352d332e3531352d31312e34392d316102608201527f312e3437382d35322e3635362d35322e3636342d36342e3833372d36342e38336102808201527f376c2e3034392d2e303337632d312e3732352d312e3630362d322e3731392d336102a08201527f2e3834372d322e3735312d362e3230346830632d2e3034362d322e3337352c316102c08201527f2e3036322d342e3538322c322e3732362d362e32323968306c2e3138352d2e316102e08201527f34386830632e3039392d2e3036322c2e3232322d2e3134382c2e33372d2e32356103008201527f39683063322e30362d312e3336322c332e3935312d322e3632312c362e3034346103208201527f2d332e3834324335372e3736332d332e3437332c39372e37362d322e3334312c6103408201527f3132382e3633372c31382e3333326331362e3637312c392e3934362d32362e336103608201527f34342c35342e3831332d33382e3635312c34302e3139392d362e3239392d362e6103808201527f3039362d31382e3036332d31372e3734332d31392e3636382d31382e3831312d6103a08201527f362e3031362d342e3034372d31332e3036312c342e3737362d372e3735322c396103c08201527f2e3735316c36382e3235342c36382e33373163312e3732342c312e3630312c326103e08201527f2e3731342c332e38342c322e3733382c362e3139325a22207472616e73666f726104008201527f6d3d227363616c6528312e352c20312e352922202f3e3c2f7376673e000000006104208201526108ab565b61073a600260c8855180947f7b226465736372697074696f6e223a202254686973204e46542072657072657360208301527f656e74732061207061796d656e742073747265616d20696e205361626c696572888301527f20466c6f77222c0000000000000000000000000000000000000000000000000060608301527f2265787465726e616c5f75726c223a202268747470733a2f2f7361626c69657260678301527f2e636f6d222c000000000000000000000000000000000000000000000000000060878301527f226e616d65223a20225361626c69657220466c6f77222c000000000000000000608d8301527f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360a48301527f6536342c0000000000000000000000000000000000000000000000000000000060c48301526106e581518092602086860191016107de565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182610801565b6108ab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351926107b5603d8560208101937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000085526107a681518092602086860191016107de565b81010301848101865285610801565b845195869460208652518092816020880152878701906107de565b01168101030190f35b600080fd5b60005b8381106107f15750506000910152565b81810151838201526020016107e1565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161084257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90815115610acc57604051916108c2606084610801565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f6040840152805160028101809111610a9d5760039004908160021b917f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610a9d5761097361095d83610871565b9261096b6040519485610801565b808452610871565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019101368237908081518201956020870190815192600083525b888110610a4f5750506003939495965052510680600114610a00576002146109d7575090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff603d91015390565b507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81603d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81940153015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c16870101516002850153168401015160038201530194976109b1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9050604051610adc602082610801565b600081529056fea164736f6c634300081a000a
Loading...
Loading
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.