Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 307 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 19925140 | 188 days ago | IN | 0 ETH | 0.00098075 | ||||
Redeem | 19321668 | 272 days ago | IN | 0 ETH | 0.00455753 | ||||
Redeem | 19243378 | 283 days ago | IN | 0 ETH | 0.0017491 | ||||
Redeem | 19229781 | 285 days ago | IN | 0 ETH | 0.00199443 | ||||
Redeem | 18899786 | 332 days ago | IN | 0 ETH | 0.00298464 | ||||
Redeem | 18894127 | 332 days ago | IN | 0 ETH | 0.00170705 | ||||
Redeem | 18893171 | 333 days ago | IN | 0 ETH | 0.00219024 | ||||
Redeem | 18848554 | 339 days ago | IN | 0 ETH | 0.00213056 | ||||
Redeem | 18822626 | 342 days ago | IN | 0 ETH | 0.00515913 | ||||
Redeem | 18808480 | 344 days ago | IN | 0 ETH | 0.00340996 | ||||
Redeem | 18806904 | 345 days ago | IN | 0 ETH | 0.00437945 | ||||
Redeem | 18777126 | 349 days ago | IN | 0 ETH | 0.00321265 | ||||
Redeem | 18746163 | 353 days ago | IN | 0 ETH | 0.00266111 | ||||
Redeem | 18731944 | 355 days ago | IN | 0 ETH | 0.00298728 | ||||
Redeem | 18719754 | 357 days ago | IN | 0 ETH | 0.00447699 | ||||
Redeem | 18699808 | 360 days ago | IN | 0 ETH | 0.00339009 | ||||
Redeem | 18622212 | 371 days ago | IN | 0 ETH | 0.00513381 | ||||
Redeem | 18582681 | 376 days ago | IN | 0 ETH | 0.00227864 | ||||
Redeem | 18573658 | 377 days ago | IN | 0 ETH | 0.00314423 | ||||
Redeem | 18529663 | 383 days ago | IN | 0 ETH | 0.00343312 | ||||
Redeem | 18450683 | 395 days ago | IN | 0 ETH | 0.0023209 | ||||
Redeem | 18351512 | 408 days ago | IN | 0 ETH | 0.00049789 | ||||
Redeem | 18343487 | 410 days ago | IN | 0 ETH | 0.00075185 | ||||
Redeem | 18336587 | 410 days ago | IN | 0 ETH | 0.0009014 | ||||
Redeem | 18229268 | 425 days ago | IN | 0 ETH | 0.00241627 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BasicSingleRecordedRedeemer
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 99999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Copyright 2023 PROOF Holdings Inc pragma solidity ^0.8.0; import {IVoucherToken} from "./interfaces/IVoucherToken.sol"; import {BasicSingleRedeemer} from "./BasicSingleRedeemer.sol"; /** * @notice Basic redeemer contract with internal bookkeeping. */ contract BasicSingleRecordedRedeemer is BasicSingleRedeemer { /** * @notice Keeps track of who redeemed which voucher. */ mapping(address => mapping(IVoucherToken => uint256[])) internal _redeemedVouchers; /** * @notice Redeems a voucher and emits an event as proof. */ function redeem(IVoucherToken voucher, uint256 tokenId) public virtual override { _redeemedVouchers[msg.sender][voucher].push(tokenId); super.redeem(voucher, tokenId); } /** * @notice Returns the number of vouchers redeemed by a given address. */ function numVouchersRedeemed(address sender, IVoucherToken voucher) public view returns (uint256) { return _redeemedVouchers[sender][voucher].length; } /** * @notice Returns the voucher tokenIds redeemed by a given address. */ function redeemedVoucherIds(address sender, IVoucherToken voucher) public view returns (uint256[] memory) { return _redeemedVouchers[sender][voucher]; } /** * @notice Returns the voucher tokenId redeemed by a given address at a * given index. */ function redeemedVoucherIdAt( address sender, IVoucherToken voucher, uint256 idx ) public view returns (uint256) { return _redeemedVouchers[sender][voucher][idx]; } }
// SPDX-License-Identifier: MIT // Copyright 2023 PROOF Holdings Inc pragma solidity ^0.8.0; import {IVoucherToken} from "./interfaces/IVoucherToken.sol"; import {ISingleRedeemer} from "./interfaces/ISingleRedeemer.sol"; interface BasicSingleRedeemerEvents { /** * @notice Emitted on redemption. */ event VoucherRedeemed( address indexed sender, IVoucherToken indexed voucher, uint256 tokenId ); } /** * @notice Basic redeemer contract without any internal bookkeeping. */ contract BasicSingleRedeemer is ISingleRedeemer, BasicSingleRedeemerEvents { /** * @notice Redeems a voucher and emits an event as proof. */ function redeem(IVoucherToken voucher, uint256 tokenId) public virtual { emit VoucherRedeemed(msg.sender, voucher, tokenId); voucher.redeem(msg.sender, tokenId); } }
// SPDX-License-Identifier: MIT // Copyright 2023 PROOF Holdings Inc pragma solidity ^0.8.0; import {IVoucherToken} from "./IVoucherToken.sol"; /** * @notice Interface for a contract that should allow users to redeem a given * voucher token. */ interface ISingleRedeemer { /** * @notice Redeems a given voucher. * @dev This MUST inform the voucher contract about the redemption by * calling its `redeem` method. */ function redeem(IVoucherToken token, uint256 tokenId) external; }
// SPDX-License-Identifier: MIT // Copyright 2023 PROOF Holdings Inc pragma solidity ^0.8.0; /** * @notice Interface for a redeemable Voucher token preventing double spending * through internal book-keeping (e.g. burning the token, token property, etc.). * @dev Voucher tokens are intendent to be redeemed through a redeemer contract. */ interface IVoucherToken { /** * @notice Thrown if the redemption caller is not allowed to spend a given * voucher. */ error RedeemerCallerNotAllowedToSpendVoucher( address sender, uint256 tokenId ); /** * @notice Thrown if a redeemer contract is not allowed to redeem this * voucher. */ error RedeemerNotApproved(address); /** * @notice Interface through which a `IRedeemer` contract informs the * voucher about its redemption. * @param sender The address that initiate the redemption on the * redeemer contract. * @param tokenId The voucher token to be redeemed. * @dev This function MUST be called by redeemer contracts. * @dev MUST revert with `RedeemerNotApproved` if the calling redeemer * contract is not approved to spend this voucher. * @dev MUST revert with `RedeemerCallerNotAllowedToSpendVoucher` if * sender is not allowed to spend tokenId. */ function redeem(address sender, uint256 tokenId) external; }
{ "remappings": [ "@divergencetech/ethier/=lib/ethier-v0.27.0/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ERC721A/=lib/ERC721A/contracts/", "constants/=../constants/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc721a/=lib/ERC721A/", "ethier/=lib/ethier/contracts/", "ethier_root/=lib/ethier/", "forge-std/=lib/forge-std/src/", "moonbirds-contract/=lib/moonbirds-contract/", "moonbirds/=lib/moonbirds-contract/contracts/", "openzeppelin-contracts-upgradeable/=lib/operator-filter-registry/lib/openzeppelin-contracts-upgradeable/contracts/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "operator-filter-registry/=lib/operator-filter-registry/", "payment-conduit_root/=../payment-conduit/", "redeemable-voucher/=src/" ], "optimizer": { "enabled": true, "runs": 99999 }, "metadata": { "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"contract IVoucherToken","name":"voucher","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"VoucherRedeemed","type":"event"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IVoucherToken","name":"voucher","type":"address"}],"name":"numVouchersRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVoucherToken","name":"voucher","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IVoucherToken","name":"voucher","type":"address"},{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"redeemedVoucherIdAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"contract IVoucherToken","name":"voucher","type":"address"}],"name":"redeemedVoucherIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610467806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631e9a69501461005157806328d6a61214610066578063cb26d1fe1461008f578063e3ef19e2146100b0575b600080fd5b61006461005f366004610318565b6100f4565b005b610079610074366004610344565b610140565b604051610086919061037d565b60405180910390f35b6100a261009d3660046103c1565b6101c4565b604051908152602001610086565b6100a26100be366004610344565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845282528220805460018101825590835291200181905561013c828261021c565b5050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352928152908290208054835181840281018401909452808452606093928301828280156101b757602002820191906000526020600020905b8154815260200190600101908083116101a3575b5050505050905092915050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260208181526040808320938616835292905290812080548390811061020857610208610402565b906000526020600020015490509392505050565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fb936c844cd542ac20938a5230b08dec69708081712a30c2b354c119e49acac269060200160405180910390a36040517f1e9a69500000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff831690631e9a695090604401600060405180830381600087803b1580156102d757600080fd5b505af11580156102eb573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461031557600080fd5b50565b6000806040838503121561032b57600080fd5b8235610336816102f3565b946020939093013593505050565b6000806040838503121561035757600080fd5b8235610362816102f3565b91506020830135610372816102f3565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156103b557835183529284019291840191600101610399565b50909695505050505050565b6000806000606084860312156103d657600080fd5b83356103e1816102f3565b925060208401356103f1816102f3565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b42a4485f74458b9396544dafd3b3a6c20365207389a6966a68e404d32fab41364736f6c63430008120033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631e9a69501461005157806328d6a61214610066578063cb26d1fe1461008f578063e3ef19e2146100b0575b600080fd5b61006461005f366004610318565b6100f4565b005b610079610074366004610344565b610140565b604051610086919061037d565b60405180910390f35b6100a261009d3660046103c1565b6101c4565b604051908152602001610086565b6100a26100be366004610344565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845282528220805460018101825590835291200181905561013c828261021c565b5050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352928152908290208054835181840281018401909452808452606093928301828280156101b757602002820191906000526020600020905b8154815260200190600101908083116101a3575b5050505050905092915050565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260208181526040808320938616835292905290812080548390811061020857610208610402565b906000526020600020015490509392505050565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907fb936c844cd542ac20938a5230b08dec69708081712a30c2b354c119e49acac269060200160405180910390a36040517f1e9a69500000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff831690631e9a695090604401600060405180830381600087803b1580156102d757600080fd5b505af11580156102eb573d6000803e3d6000fd5b505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461031557600080fd5b50565b6000806040838503121561032b57600080fd5b8235610336816102f3565b946020939093013593505050565b6000806040838503121561035757600080fd5b8235610362816102f3565b91506020830135610372816102f3565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156103b557835183529284019291840191600101610399565b50909695505050505050565b6000806000606084860312156103d657600080fd5b83356103e1816102f3565b925060208401356103f1816102f3565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220b42a4485f74458b9396544dafd3b3a6c20365207389a6966a68e404d32fab41364736f6c63430008120033
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.