Source Code
Latest 25 from a total of 188 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Signature | 24560810 | 19 hrs ago | IN | 0 ETH | 0.00001027 | ||||
| Set Signature | 24557811 | 29 hrs ago | IN | 0 ETH | 0.00097183 | ||||
| Set Signature | 24557754 | 29 hrs ago | IN | 0 ETH | 0.0015773 | ||||
| Set Signature | 24557735 | 29 hrs ago | IN | 0 ETH | 0.00078632 | ||||
| Set Signature | 24557728 | 29 hrs ago | IN | 0 ETH | 0.00023339 | ||||
| Set Signature | 24557683 | 29 hrs ago | IN | 0 ETH | 0.001659 | ||||
| Set Signature | 24557675 | 29 hrs ago | IN | 0 ETH | 0.00273378 | ||||
| Set Signature | 24557670 | 29 hrs ago | IN | 0 ETH | 0.0006604 | ||||
| Set Signature | 24557659 | 29 hrs ago | IN | 0 ETH | 0.00025514 | ||||
| Set Signature | 24557654 | 29 hrs ago | IN | 0 ETH | 0.00291762 | ||||
| Set Signature | 24557649 | 29 hrs ago | IN | 0 ETH | 0.01043163 | ||||
| Set Signature | 24557637 | 29 hrs ago | IN | 0 ETH | 0.00074207 | ||||
| Set Signature | 24557623 | 29 hrs ago | IN | 0 ETH | 0.00043579 | ||||
| Set Signature | 24557607 | 29 hrs ago | IN | 0 ETH | 0.00095733 | ||||
| Set Signature | 24557601 | 29 hrs ago | IN | 0 ETH | 0.000172 | ||||
| Set Signature | 24557596 | 30 hrs ago | IN | 0 ETH | 0.00240236 | ||||
| Set Signature | 24557594 | 30 hrs ago | IN | 0 ETH | 0.00072143 | ||||
| Set Signature | 24557590 | 30 hrs ago | IN | 0 ETH | 0.00008874 | ||||
| Set Signature | 24557588 | 30 hrs ago | IN | 0 ETH | 0.00238994 | ||||
| Set Signature | 24557564 | 30 hrs ago | IN | 0 ETH | 0.00011151 | ||||
| Set Signature | 24557543 | 30 hrs ago | IN | 0 ETH | 0.0015634 | ||||
| Set Signature | 24557537 | 30 hrs ago | IN | 0 ETH | 0.00029481 | ||||
| Set Signature | 24557531 | 30 hrs ago | IN | 0 ETH | 0.00038235 | ||||
| Set Signature | 24557515 | 30 hrs ago | IN | 0 ETH | 0.00003382 | ||||
| Set Signature | 24557508 | 30 hrs ago | IN | 0 ETH | 0.00002711 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x61001980 | 24560810 | 19 hrs ago | Contract Creation | 0 ETH | |||
| 0x612c0380 | 24557811 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61568480 | 24557754 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x615eff80 | 24557735 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61006f80 | 24557728 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x610c9980 | 24557683 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61160980 | 24557675 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x613c8b80 | 24557670 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61028a80 | 24557659 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61116780 | 24557656 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x612d2280 | 24557654 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x6156a380 | 24557649 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x6104c980 | 24557637 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x614bc480 | 24557623 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x610eb880 | 24557615 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x6106a480 | 24557607 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x61187f80 | 24557601 | 29 hrs ago | Contract Creation | 0 ETH | |||
| 0x612da180 | 24557596 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x610ca780 | 24557594 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x61061c80 | 24557590 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x6112f680 | 24557588 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x610a2380 | 24557564 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x610c3580 | 24557543 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x61011480 | 24557537 | 30 hrs ago | Contract Creation | 0 ETH | |||
| 0x612d6380 | 24557531 | 30 hrs ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FundingWorksSignature
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
No with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
import {SSTORE2} from "solady/utils/SSTORE2.sol";
import {IFundingWorks} from "./Interfaces.sol";
/// @title FundingWorksSignature - Store SVG path signatures for FundingWorks tokens
/// @notice Allows token owners to associate an SVG path signature with their token
/// @dev Uses SSTORE2 for gas-efficient storage of signature bytes
contract FundingWorksSignature {
/// @notice The FundingWorks NFT contract
IFundingWorks public immutable fundingWorks;
/// @notice Mapping from tokenId to SSTORE2 pointer contract address
mapping(uint256 => address) public signaturePointers;
/// @notice Emitted when a signature is set for a token
event SignatureSet(uint256 indexed tokenId, address pointer);
/// @notice Error thrown when caller is not the token owner
error NotTokenOwner();
/// @notice Error thrown when signature data is empty
error EmptySignature();
/// @param _fundingWorks Address of the FundingWorks NFT contract
constructor(address _fundingWorks) {
fundingWorks = IFundingWorks(_fundingWorks);
}
/// @notice Set or update the signature for a token you own
/// @param tokenId The token ID to set the signature for
/// @param signature The SVG path bytes to store
function setSignature(uint256 tokenId, bytes calldata signature) external {
if (fundingWorks.ownerOf(tokenId) != msg.sender) revert NotTokenOwner();
if (signature.length == 0) revert EmptySignature();
address pointer = SSTORE2.write(signature);
signaturePointers[tokenId] = pointer;
emit SignatureSet(tokenId, pointer);
}
/// @notice Get the signature for a token
/// @param tokenId The token ID to get the signature for
/// @return The signature bytes, or empty bytes if not set
function getSignature(uint256 tokenId) external view returns (bytes memory) {
address pointer = signaturePointers[tokenId];
if (pointer == address(0)) return "";
return SSTORE2.read(pointer);
}
/// @notice Check if a token has a signature set
/// @param tokenId The token ID to check
/// @return True if a signature is set
function hasSignature(uint256 tokenId) external view returns (bool) {
return signaturePointers[tokenId] != address(0);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/// @notice Read and write to persistent storage at a fraction of the cost.
/// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/SSTORE2.sol)
/// @author Saw-mon-and-Natalie (https://github.com/Saw-mon-and-Natalie)
/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol)
/// @author Modified from 0xSequence (https://github.com/0xSequence/sstore2/blob/master/contracts/SSTORE2.sol)
/// @author Modified from SSTORE3 (https://github.com/Philogy/sstore3)
library SSTORE2 {
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CONSTANTS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev The proxy initialization code.
uint256 private constant _CREATE3_PROXY_INITCODE = 0x67363d3d37363d34f03d5260086018f3;
/// @dev Hash of the `_CREATE3_PROXY_INITCODE`.
/// Equivalent to `keccak256(abi.encodePacked(hex"67363d3d37363d34f03d5260086018f3"))`.
bytes32 internal constant CREATE3_PROXY_INITCODE_HASH =
0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f;
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* CUSTOM ERRORS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Unable to deploy the storage contract.
error DeploymentFailed();
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* WRITE LOGIC */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Writes `data` into the bytecode of a storage contract and returns its address.
function write(bytes memory data) internal returns (address pointer) {
/// @solidity memory-safe-assembly
assembly {
let n := mload(data) // Let `l` be `n + 1`. +1 as we prefix a STOP opcode.
/**
* ---------------------------------------------------+
* Opcode | Mnemonic | Stack | Memory |
* ---------------------------------------------------|
* 61 l | PUSH2 l | l | |
* 80 | DUP1 | l l | |
* 60 0xa | PUSH1 0xa | 0xa l l | |
* 3D | RETURNDATASIZE | 0 0xa l l | |
* 39 | CODECOPY | l | [0..l): code |
* 3D | RETURNDATASIZE | 0 l | [0..l): code |
* F3 | RETURN | | [0..l): code |
* 00 | STOP | | |
* ---------------------------------------------------+
* @dev Prefix the bytecode with a STOP opcode to ensure it cannot be called.
* Also PUSH2 is used since max contract size cap is 24,576 bytes which is less than 2 ** 16.
*/
// Do a out-of-gas revert if `n + 1` is more than 2 bytes.
mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
// Deploy a new contract with the generated creation code.
pointer := create(0, add(data, 0x15), add(n, 0xb))
if iszero(pointer) {
mstore(0x00, 0x30116425) // `DeploymentFailed()`.
revert(0x1c, 0x04)
}
mstore(data, n) // Restore the length of `data`.
}
}
/// @dev Writes `data` into the bytecode of a storage contract with `salt`
/// and returns its normal CREATE2 deterministic address.
function writeCounterfactual(bytes memory data, bytes32 salt)
internal
returns (address pointer)
{
/// @solidity memory-safe-assembly
assembly {
let n := mload(data)
// Do a out-of-gas revert if `n + 1` is more than 2 bytes.
mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
// Deploy a new contract with the generated creation code.
pointer := create2(0, add(data, 0x15), add(n, 0xb), salt)
if iszero(pointer) {
mstore(0x00, 0x30116425) // `DeploymentFailed()`.
revert(0x1c, 0x04)
}
mstore(data, n) // Restore the length of `data`.
}
}
/// @dev Writes `data` into the bytecode of a storage contract and returns its address.
/// This uses the so-called "CREATE3" workflow,
/// which means that `pointer` is agnostic to `data, and only depends on `salt`.
function writeDeterministic(bytes memory data, bytes32 salt)
internal
returns (address pointer)
{
/// @solidity memory-safe-assembly
assembly {
let n := mload(data)
mstore(0x00, _CREATE3_PROXY_INITCODE) // Store the `_PROXY_INITCODE`.
let proxy := create2(0, 0x10, 0x10, salt)
if iszero(proxy) {
mstore(0x00, 0x30116425) // `DeploymentFailed()`.
revert(0x1c, 0x04)
}
mstore(0x14, proxy) // Store the proxy's address.
// 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01).
// 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex).
mstore(0x00, 0xd694)
mstore8(0x34, 0x01) // Nonce of the proxy contract (1).
pointer := keccak256(0x1e, 0x17)
// Do a out-of-gas revert if `n + 1` is more than 2 bytes.
mstore(add(data, gt(n, 0xfffe)), add(0xfe61000180600a3d393df300, shl(0x40, n)))
if iszero(
mul( // The arguments of `mul` are evaluated last to first.
extcodesize(pointer),
call(gas(), proxy, 0, add(data, 0x15), add(n, 0xb), codesize(), 0x00)
)
) {
mstore(0x00, 0x30116425) // `DeploymentFailed()`.
revert(0x1c, 0x04)
}
mstore(data, n) // Restore the length of `data`.
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* ADDRESS CALCULATIONS */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Returns the initialization code hash of the storage contract for `data`.
/// Used for mining vanity addresses with create2crunch.
function initCodeHash(bytes memory data) internal pure returns (bytes32 hash) {
/// @solidity memory-safe-assembly
assembly {
let n := mload(data)
// Do a out-of-gas revert if `n + 1` is more than 2 bytes.
returndatacopy(returndatasize(), returndatasize(), gt(n, 0xfffe))
mstore(data, add(0x61000180600a3d393df300, shl(0x40, n)))
hash := keccak256(add(data, 0x15), add(n, 0xb))
mstore(data, n) // Restore the length of `data`.
}
}
/// @dev Equivalent to `predictCounterfactualAddress(data, salt, address(this))`
function predictCounterfactualAddress(bytes memory data, bytes32 salt)
internal
view
returns (address pointer)
{
pointer = predictCounterfactualAddress(data, salt, address(this));
}
/// @dev Returns the CREATE2 address of the storage contract for `data`
/// deployed with `salt` by `deployer`.
/// Note: The returned result has dirty upper 96 bits. Please clean if used in assembly.
function predictCounterfactualAddress(bytes memory data, bytes32 salt, address deployer)
internal
pure
returns (address predicted)
{
bytes32 hash = initCodeHash(data);
/// @solidity memory-safe-assembly
assembly {
// Compute and store the bytecode hash.
mstore8(0x00, 0xff) // Write the prefix.
mstore(0x35, hash)
mstore(0x01, shl(96, deployer))
mstore(0x15, salt)
predicted := keccak256(0x00, 0x55)
// Restore the part of the free memory pointer that has been overwritten.
mstore(0x35, 0)
}
}
/// @dev Equivalent to `predictDeterministicAddress(salt, address(this))`.
function predictDeterministicAddress(bytes32 salt) internal view returns (address pointer) {
pointer = predictDeterministicAddress(salt, address(this));
}
/// @dev Returns the "CREATE3" deterministic address for `salt` with `deployer`.
function predictDeterministicAddress(bytes32 salt, address deployer)
internal
pure
returns (address pointer)
{
/// @solidity memory-safe-assembly
assembly {
let m := mload(0x40) // Cache the free memory pointer.
mstore(0x00, deployer) // Store `deployer`.
mstore8(0x0b, 0xff) // Store the prefix.
mstore(0x20, salt) // Store the salt.
mstore(0x40, CREATE3_PROXY_INITCODE_HASH) // Store the bytecode hash.
mstore(0x14, keccak256(0x0b, 0x55)) // Store the proxy's address.
mstore(0x40, m) // Restore the free memory pointer.
// 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01).
// 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex).
mstore(0x00, 0xd694)
mstore8(0x34, 0x01) // Nonce of the proxy contract (1).
pointer := keccak256(0x1e, 0x17)
}
}
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
/* READ LOGIC */
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
/// @dev Equivalent to `read(pointer, 0, 2 ** 256 - 1)`.
function read(address pointer) internal view returns (bytes memory data) {
/// @solidity memory-safe-assembly
assembly {
data := mload(0x40)
let n := and(0xffffffffff, sub(extcodesize(pointer), 0x01))
extcodecopy(pointer, add(data, 0x1f), 0x00, add(n, 0x21))
mstore(data, n) // Store the length.
mstore(0x40, add(n, add(data, 0x40))) // Allocate memory.
}
}
/// @dev Equivalent to `read(pointer, start, 2 ** 256 - 1)`.
function read(address pointer, uint256 start) internal view returns (bytes memory data) {
/// @solidity memory-safe-assembly
assembly {
data := mload(0x40)
let n := and(0xffffffffff, sub(extcodesize(pointer), 0x01))
let l := sub(n, and(0xffffff, mul(lt(start, n), start)))
extcodecopy(pointer, add(data, 0x1f), start, add(l, 0x21))
mstore(data, mul(sub(n, start), lt(start, n))) // Store the length.
mstore(0x40, add(data, add(0x40, mload(data)))) // Allocate memory.
}
}
/// @dev Returns a slice of the data on `pointer` from `start` to `end`.
/// `start` and `end` will be clamped to the range `[0, args.length]`.
/// The `pointer` MUST be deployed via the SSTORE2 write functions.
/// Otherwise, the behavior is undefined.
/// Out-of-gas reverts if `pointer` does not have any code.
function read(address pointer, uint256 start, uint256 end)
internal
view
returns (bytes memory data)
{
/// @solidity memory-safe-assembly
assembly {
data := mload(0x40)
if iszero(lt(end, 0xffff)) { end := 0xffff }
let d := mul(sub(end, start), lt(start, end))
extcodecopy(pointer, add(data, 0x1f), start, add(d, 0x01))
if iszero(and(0xff, mload(add(data, d)))) {
let n := sub(extcodesize(pointer), 0x01)
returndatacopy(returndatasize(), returndatasize(), shr(40, n))
d := mul(gt(n, start), sub(d, mul(gt(end, n), sub(end, n))))
}
mstore(data, d) // Store the length.
mstore(add(add(data, 0x20), d), 0) // Zeroize the slot after the bytes.
mstore(0x40, add(add(data, 0x40), d)) // Allocate memory.
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.21;
/// @notice Interface for ENS registry
interface IENS {
function resolver(bytes32 node) external view returns (address);
}
/// @notice Interface for ENS name resolver
interface INameResolver {
function name(bytes32 node) external view returns (string memory);
}
/// @notice Interface for FW2Token
interface IFW2Token {
function start(address _hook) external payable;
function balanceOf(address account) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function lpTokenId() external view returns (uint256);
function loadingLiquidity() external view returns (bool);
}
/// @notice Interface for FW2Hook
interface IFW2Hook {
function swapCount() external view returns (uint256);
}
/// @notice Interface for FundingWorks
interface IFundingWorks {
function isSwapping() external view returns (bool);
function name() external view returns (string memory);
function ownerOf(uint256 tokenId) external view returns (address);
function MINT_PRICE() external view returns (uint256);
function VESTING_PERIOD() external view returns (uint256);
function vestingStarted() external view returns (bool);
function vestingStartTime() external view returns (uint256);
function getRemainingLockedEth(uint256 tokenId) external view returns (uint256);
function initialLockedPerToken() external view returns (uint256);
function mintHash(uint256 tokenId) external view returns (bytes32);
}
/// @notice Interface for on-chain metadata renderer
interface IRenderer {
function tokenURI(uint256 tokenId) external view returns (string memory);
function contractURI() external view returns (string memory);
}
/// @notice Interface for FundingWorksSignature
interface IFundingWorksSignature {
function getSignature(uint256 tokenId) external view returns (bytes memory);
function hasSignature(uint256 tokenId) external view returns (bool);
}{
"remappings": [
"solady/=lib/solady/src/",
"@uniswap/v4-core/=lib/v4-core/",
"@uniswap/v4-periphery/=lib/v4-periphery/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"v4-router/=lib/v4-router/src/",
"@v4/=lib/v4-core/",
"@ensdomains/=lib/v4-core/node_modules/@ensdomains/",
"@forge/=lib/v4-router/lib/forge-std/src/",
"@openzeppelin/uniswap-hooks/=lib/v4-router/lib/v4-template/lib/uniswap-hooks/",
"@permit2/=lib/v4-router/lib/permit2/src/",
"@solady/=lib/v4-router/lib/solady/",
"@uniswap/v2-core/=lib/v4-router/lib/universal-router/node_modules/@uniswap/v2-core/",
"@uniswap/v3-core/=lib/v4-router/lib/universal-router/node_modules/@uniswap/v3-core/",
"@uniswap/v3-periphery/=lib/v4-router/lib/universal-router/lib/v3-periphery/",
"@universal-router/=lib/v4-router/lib/universal-router/contracts/",
"@v4-periphery/=lib/v4-router/lib/v4-periphery/",
"@v4-template/=lib/v4-router/lib/v4-template/",
"ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-gas-snapshot/=lib/v4-router/lib/forge-gas-snapshot/src/",
"forge-std/=lib/forge-std/src/",
"hardhat/=lib/v4-core/node_modules/hardhat/",
"hookmate/=lib/v4-router/lib/v4-template/lib/hookmate/src/",
"openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/",
"openzeppelin/=lib/v4-router/lib/v4-template/lib/uniswap-hooks/lib/v4-core/lib/openzeppelin-contracts/contracts/",
"permit2/=lib/v4-periphery/lib/permit2/",
"solmate/=lib/v4-core/lib/solmate/",
"uniswap-hooks/=lib/v4-router/lib/v4-template/lib/uniswap-hooks/src/",
"universal-router/=lib/v4-router/lib/universal-router/",
"v3-periphery/=lib/v4-router/lib/universal-router/lib/v3-periphery/contracts/",
"v4-core/=lib/v4-core/src/",
"v4-periphery/=lib/v4-periphery/",
"v4-template/=lib/v4-router/lib/v4-template/",
"lib/permit2/test:openzeppelin-contracts/contracts/=lib/v4-router/lib/permit2/lib/openzeppelin-contracts/contracts/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_fundingWorks","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EmptySignature","type":"error"},{"inputs":[],"name":"NotTokenOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"pointer","type":"address"}],"name":"SignatureSet","type":"event"},{"inputs":[],"name":"fundingWorks","outputs":[{"internalType":"contract IFundingWorks","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getSignature","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"hasSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"setSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"signaturePointers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a060405234801561000f575f5ffd5b5060405161096e38038061096e833981810160405281019061003191906100c9565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506100f4565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100988261006f565b9050919050565b6100a88161008e565b81146100b2575f5ffd5b50565b5f815190506100c38161009f565b92915050565b5f602082840312156100de576100dd61006b565b5b5f6100eb848285016100b5565b91505092915050565b60805161085b6101135f395f81816101b60152610287015261085b5ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c806302a569e61461005957806302ea0dec1461008957806368f2b04b146100a7578063b2ec536e146100d7578063cb8cac0514610107575b5f5ffd5b610073600480360381019061006e9190610530565b610123565b60405161008091906105cb565b60405180910390f35b6100916101b4565b60405161009e9190610665565b60405180910390f35b6100c160048036038101906100bc9190610530565b6101d8565b6040516100ce919061069e565b60405180910390f35b6100f160048036038101906100ec9190610530565b610207565b6040516100fe91906106d1565b60405180910390f35b610121600480360381019061011c919061074b565b61026e565b005b60605f5f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101a25760405180602001604052805f8152509150506101af565b6101ab81610481565b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016102de91906107b7565b602060405180830381865afa1580156102f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031d91906107fa565b73ffffffffffffffffffffffffffffffffffffffff161461036a576040517f59dc379f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82829050036103a6576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6103f383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506104b1565b9050805f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550837f34144b541e1d3ee551cb8b0366199f9ef9daed89ced6993d34ab406f76a42f2c82604051610473919061069e565b60405180910390a250505050565b606060405190506001823b0364ffffffffff16602181015f601f8401853c80825260408201810160405250919050565b5f81518060401b6bfe61000180600a3d393df3000161fffe8211840152600b8101601584015ff09150816104ec5763301164255f526004601cfd5b80835250919050565b5f5ffd5b5f5ffd5b5f819050919050565b61050f816104fd565b8114610519575f5ffd5b50565b5f8135905061052a81610506565b92915050565b5f60208284031215610545576105446104f5565b5b5f6105528482850161051c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61059d8261055b565b6105a78185610565565b93506105b7818560208601610575565b6105c081610583565b840191505092915050565b5f6020820190508181035f8301526105e38184610593565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61062d610628610623846105eb565b61060a565b6105eb565b9050919050565b5f61063e82610613565b9050919050565b5f61064f82610634565b9050919050565b61065f81610645565b82525050565b5f6020820190506106785f830184610656565b92915050565b5f610688826105eb565b9050919050565b6106988161067e565b82525050565b5f6020820190506106b15f83018461068f565b92915050565b5f8115159050919050565b6106cb816106b7565b82525050565b5f6020820190506106e45f8301846106c2565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261070b5761070a6106ea565b5b8235905067ffffffffffffffff811115610728576107276106ee565b5b602083019150836001820283011115610744576107436106f2565b5b9250929050565b5f5f5f60408486031215610762576107616104f5565b5b5f61076f8682870161051c565b935050602084013567ffffffffffffffff8111156107905761078f6104f9565b5b61079c868287016106f6565b92509250509250925092565b6107b1816104fd565b82525050565b5f6020820190506107ca5f8301846107a8565b92915050565b6107d98161067e565b81146107e3575f5ffd5b50565b5f815190506107f4816107d0565b92915050565b5f6020828403121561080f5761080e6104f5565b5b5f61081c848285016107e6565b9150509291505056fea2646970667358221220843ad0226f5d09a30f590055f4445607807f9110287483f8a5aebc5aecfa16dc64736f6c634300081e0033000000000000000000000000b33d806a94b6770c9d309e0842a75f8e6edcd5a6
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c806302a569e61461005957806302ea0dec1461008957806368f2b04b146100a7578063b2ec536e146100d7578063cb8cac0514610107575b5f5ffd5b610073600480360381019061006e9190610530565b610123565b60405161008091906105cb565b60405180910390f35b6100916101b4565b60405161009e9190610665565b60405180910390f35b6100c160048036038101906100bc9190610530565b6101d8565b6040516100ce919061069e565b60405180910390f35b6100f160048036038101906100ec9190610530565b610207565b6040516100fe91906106d1565b60405180910390f35b610121600480360381019061011c919061074b565b61026e565b005b60605f5f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101a25760405180602001604052805f8152509150506101af565b6101ab81610481565b9150505b919050565b7f000000000000000000000000b33d806a94b6770c9d309e0842a75f8e6edcd5a681565b5f602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f73ffffffffffffffffffffffffffffffffffffffff165f5f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000b33d806a94b6770c9d309e0842a75f8e6edcd5a673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016102de91906107b7565b602060405180830381865afa1580156102f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031d91906107fa565b73ffffffffffffffffffffffffffffffffffffffff161461036a576040517f59dc379f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82829050036103a6576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6103f383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050506104b1565b9050805f5f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550837f34144b541e1d3ee551cb8b0366199f9ef9daed89ced6993d34ab406f76a42f2c82604051610473919061069e565b60405180910390a250505050565b606060405190506001823b0364ffffffffff16602181015f601f8401853c80825260408201810160405250919050565b5f81518060401b6bfe61000180600a3d393df3000161fffe8211840152600b8101601584015ff09150816104ec5763301164255f526004601cfd5b80835250919050565b5f5ffd5b5f5ffd5b5f819050919050565b61050f816104fd565b8114610519575f5ffd5b50565b5f8135905061052a81610506565b92915050565b5f60208284031215610545576105446104f5565b5b5f6105528482850161051c565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61059d8261055b565b6105a78185610565565b93506105b7818560208601610575565b6105c081610583565b840191505092915050565b5f6020820190508181035f8301526105e38184610593565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61062d610628610623846105eb565b61060a565b6105eb565b9050919050565b5f61063e82610613565b9050919050565b5f61064f82610634565b9050919050565b61065f81610645565b82525050565b5f6020820190506106785f830184610656565b92915050565b5f610688826105eb565b9050919050565b6106988161067e565b82525050565b5f6020820190506106b15f83018461068f565b92915050565b5f8115159050919050565b6106cb816106b7565b82525050565b5f6020820190506106e45f8301846106c2565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261070b5761070a6106ea565b5b8235905067ffffffffffffffff811115610728576107276106ee565b5b602083019150836001820283011115610744576107436106f2565b5b9250929050565b5f5f5f60408486031215610762576107616104f5565b5b5f61076f8682870161051c565b935050602084013567ffffffffffffffff8111156107905761078f6104f9565b5b61079c868287016106f6565b92509250509250925092565b6107b1816104fd565b82525050565b5f6020820190506107ca5f8301846107a8565b92915050565b6107d98161067e565b81146107e3575f5ffd5b50565b5f815190506107f4816107d0565b92915050565b5f6020828403121561080f5761080e6104f5565b5b5f61081c848285016107e6565b9150509291505056fea2646970667358221220843ad0226f5d09a30f590055f4445607807f9110287483f8a5aebc5aecfa16dc64736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b33d806a94b6770c9d309e0842a75f8e6edcd5a6
-----Decoded View---------------
Arg [0] : _fundingWorks (address): 0xb33d806a94B6770C9d309E0842a75f8E6edCd5A6
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b33d806a94b6770c9d309e0842a75f8e6edcd5a6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.