Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,580 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 17149634 | 517 days ago | IN | 0 ETH | 0.00256715 | ||||
Redeem | 17135896 | 519 days ago | IN | 0 ETH | 0.00489134 | ||||
Redeem | 17135894 | 519 days ago | IN | 0 ETH | 0.00273926 | ||||
Redeem | 17135890 | 519 days ago | IN | 0 ETH | 0.00282673 | ||||
Redeem | 17135890 | 519 days ago | IN | 0 ETH | 0.00282772 | ||||
Redeem | 17135886 | 519 days ago | IN | 0 ETH | 0.00296546 | ||||
Redeem | 17135885 | 519 days ago | IN | 0 ETH | 0.00286653 | ||||
Redeem | 17135885 | 519 days ago | IN | 0 ETH | 0.00286653 | ||||
Redeem | 17135882 | 519 days ago | IN | 0 ETH | 0.00276521 | ||||
Redeem | 17135878 | 519 days ago | IN | 0 ETH | 0.00322134 | ||||
Redeem | 17135877 | 519 days ago | IN | 0 ETH | 0.00643968 | ||||
Redeem | 17135872 | 519 days ago | IN | 0 ETH | 0.0032267 | ||||
Redeem | 17135867 | 519 days ago | IN | 0 ETH | 0.00316103 | ||||
Redeem | 17135857 | 519 days ago | IN | 0 ETH | 0.00315296 | ||||
Redeem | 17135854 | 519 days ago | IN | 0 ETH | 0.00292025 | ||||
Redeem | 17135854 | 519 days ago | IN | 0 ETH | 0.00299532 | ||||
Redeem | 17135853 | 519 days ago | IN | 0 ETH | 0.00288716 | ||||
Redeem | 17135848 | 519 days ago | IN | 0 ETH | 0.00293002 | ||||
Redeem | 17135845 | 519 days ago | IN | 0 ETH | 0.00301679 | ||||
Redeem | 17135843 | 519 days ago | IN | 0 ETH | 0.00336797 | ||||
Redeem | 17135839 | 519 days ago | IN | 0 ETH | 0.00265723 | ||||
Redeem | 17135838 | 519 days ago | IN | 0 ETH | 0.00279139 | ||||
Redeem | 17135837 | 519 days ago | IN | 0 ETH | 0.00362314 | ||||
Redeem | 17135835 | 519 days ago | IN | 0 ETH | 0.00271703 | ||||
Redeem | 17135828 | 519 days ago | IN | 0 ETH | 0.00488514 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
RankingRedeemer
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 9999 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 {IRedeemableToken} from "./interfaces/IRedeemableToken.sol"; interface RankingRedeemerEvents { /** * @notice Emitted on redemption. */ event VoucherRedeemedAndRankingCommited( address indexed sender, IRedeemableToken indexed voucher, uint256 indexed tokenId, uint8[] ranking ); } /** * @notice Redeemes a token with a submitted ranking of choices, emitting an event containing the ranking as proof. * @dev The choices are numbered from 0 to `numChoices - 1`. */ contract RankingRedeemer is RankingRedeemerEvents { /** * @notice Thrown when the ranking length is not equal to the number of choices. */ error InvalidRankingLength(Redemption, uint256 actual, uint256 expected); /** * @notice Thrown if not all choices were included in a given ranking. */ error InvalidRanking(Redemption, uint256 choicesBitmask); /** * @notice The number of choices. */ uint8 internal immutable _numChoices; /** * @notice The bitmask containing all choices. */ uint256 internal immutable _happyBitmask; constructor(uint8 numChoices) { _numChoices = numChoices; _happyBitmask = (1 << numChoices) - 1; } /** * @notice Redeems a redeemable voucher and emits an event containing the ranking of choices as proof. * @dev The ranking must contain all choices exactly once, reverts otherwise. */ function _redeem(Redemption calldata r) internal virtual { if (r.ranking.length != _numChoices) { revert InvalidRankingLength(r, r.ranking.length, _numChoices); } uint256 choicesBitmask; for (uint256 i; i < r.ranking.length; ++i) { choicesBitmask |= 1 << r.ranking[i]; } if (choicesBitmask != _happyBitmask) { revert InvalidRanking(r, choicesBitmask); } emit VoucherRedeemedAndRankingCommited(msg.sender, r.redeemable, r.tokenId, r.ranking); r.redeemable.redeem(msg.sender, r.tokenId); } struct Redemption { IRedeemableToken redeemable; uint256 tokenId; uint8[] ranking; } /** * @notice Redeems multiple vouchers and emits events containing the rankings as proof. */ function redeem(Redemption[] calldata redemptions) public virtual { for (uint256 i; i < redemptions.length; ++i) { _redeem(redemptions[i]); } } }
// 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 IRedeemableToken { /** * @notice Thrown if the redemption caller is not allowed to spend a given * voucher. */ error RedeemerCallerNotAllowedToSpendVoucher(address sender, uint256 tokenId); /** * @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/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/", "@openzeppelin-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/", "@openzeppelin-4.7/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/", "@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/", "ERC721A/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/contracts/", "ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/", "artblocks-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/contracts/", "artblocks-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/", "delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/src/", "delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/", "ds-test/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/src/", "ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/", "erc721a/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/", "ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/contracts/", "ethier_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/", "forge-std/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/forge-std_1-4-0/src/", "openzeppelin-contracts-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/contracts/", "openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/", "openzeppelin-contracts/contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/", "openzeppelin-contracts_root-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/", "openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/", "operator-filter-registry/src/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/src/", "operator-filter-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/", "proof/artblocks/=/home/dave/proof/proof-seller/contracts/artblocks/src/", "proof/constants/=/home/dave/proof/proof-seller/contracts/constants/src/", "proof/redemption/=/home/dave/proof/proof-seller/contracts/redemption/src/", "proof/sellers/=/home/dave/proof/proof-seller/contracts/sellers/src/" ], "optimizer": { "enabled": true, "runs": 9999 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint8","name":"numChoices","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"components":[{"internalType":"contract IRedeemableToken","name":"redeemable","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8[]","name":"ranking","type":"uint8[]"}],"internalType":"struct RankingRedeemer.Redemption","name":"","type":"tuple"},{"internalType":"uint256","name":"choicesBitmask","type":"uint256"}],"name":"InvalidRanking","type":"error"},{"inputs":[{"components":[{"internalType":"contract IRedeemableToken","name":"redeemable","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8[]","name":"ranking","type":"uint8[]"}],"internalType":"struct RankingRedeemer.Redemption","name":"","type":"tuple"},{"internalType":"uint256","name":"actual","type":"uint256"},{"internalType":"uint256","name":"expected","type":"uint256"}],"name":"InvalidRankingLength","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"contract IRedeemableToken","name":"voucher","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8[]","name":"ranking","type":"uint8[]"}],"name":"VoucherRedeemedAndRankingCommited","type":"event"},{"inputs":[{"components":[{"internalType":"contract IRedeemableToken","name":"redeemable","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8[]","name":"ranking","type":"uint8[]"}],"internalType":"struct RankingRedeemer.Redemption[]","name":"redemptions","type":"tuple[]"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b5060405161079c38038061079c83398101604081905261002f91610050565b60ff811660808190526100479060019081901b61007a565b60a052506100a1565b60006020828403121561006257600080fd5b815160ff8116811461007357600080fd5b9392505050565b8181038181111561009b57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a0516106d06100cc60003960006101a10152600081816095015261010501526106d06000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b3f903e014610030575b600080fd5b61004361003e366004610304565b610045565b005b60005b8181101561008c5761007c83838381811061006557610065610379565b905060200281019061007791906103a8565b610091565b610085816103e6565b9050610048565b505050565b60ff7f0000000000000000000000000000000000000000000000000000000000000000166100c26040830183610445565b90501461013657806100d76040820182610445565b6040517f02e75c0b00000000000000000000000000000000000000000000000000000000815261012d9392507f0000000000000000000000000000000000000000000000000000000000000000906004016105c9565b60405180910390fd5b6000805b6101476040840184610445565b905081101561019e5761015d6040840184610445565b8281811061016d5761016d610379565b905060200201602081019061018291906105f5565b60ff166001901b8217915080610197906103e6565b905061013a565b507f000000000000000000000000000000000000000000000000000000000000000081146101fc5781816040517f1504f8ec00000000000000000000000000000000000000000000000000000000815260040161012d929190610617565b6020820180359061020d9084610639565b73ffffffffffffffffffffffffffffffffffffffff16337f5d91ab0394e910ccee855e471cfcd5400990911bf127ed49def138b610711c1b6102526040870187610445565b604051610260929190610654565b60405180910390a46102756020830183610639565b6040517f1e9a69500000000000000000000000000000000000000000000000000000000081523360048201526020840135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690631e9a695090604401600060405180830381600087803b1580156102e857600080fd5b505af11580156102fc573d6000803e3d6000fd5b505050505050565b6000806020838503121561031757600080fd5b823567ffffffffffffffff8082111561032f57600080fd5b818501915085601f83011261034357600080fd5b81358181111561035257600080fd5b8660208260051b850101111561036757600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126103dc57600080fd5b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361043e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261047a57600080fd5b83018035915067ffffffffffffffff82111561049557600080fd5b6020019150600581901b36038213156104ad57600080fd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104d857600080fd5b919050565b803560ff811681146104d857600080fd5b60006060830173ffffffffffffffffffffffffffffffffffffffff610512846104b4565b1684526020808401358186015260408401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261055457600080fd5b8401818101903567ffffffffffffffff81111561057057600080fd5b8060051b360382131561058257600080fd5b606060408801529283905291600090608087015b818310156105be5760ff6105a9866104dd565b16815293830193600192909201918301610596565b979650505050505050565b6060815260006105dc60608301866104ee565b905083602083015260ff83166040830152949350505050565b60006020828403121561060757600080fd5b610610826104dd565b9392505050565b60408152600061062a60408301856104ee565b90508260208301529392505050565b60006020828403121561064b57600080fd5b610610826104b4565b60208082528181018390526000908460408401835b8681101561068f5760ff61067c846104dd565b1682529183019190830190600101610669565b50969550505050505056fea2646970667358221220cbc0a64fb70fe47594aa7cd534be34aaca041471fac3af551038327bc8c6eac764736f6c634300081100330000000000000000000000000000000000000000000000000000000000000015
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063b3f903e014610030575b600080fd5b61004361003e366004610304565b610045565b005b60005b8181101561008c5761007c83838381811061006557610065610379565b905060200281019061007791906103a8565b610091565b610085816103e6565b9050610048565b505050565b60ff7f0000000000000000000000000000000000000000000000000000000000000015166100c26040830183610445565b90501461013657806100d76040820182610445565b6040517f02e75c0b00000000000000000000000000000000000000000000000000000000815261012d9392507f0000000000000000000000000000000000000000000000000000000000000015906004016105c9565b60405180910390fd5b6000805b6101476040840184610445565b905081101561019e5761015d6040840184610445565b8281811061016d5761016d610379565b905060200201602081019061018291906105f5565b60ff166001901b8217915080610197906103e6565b905061013a565b507f00000000000000000000000000000000000000000000000000000000001fffff81146101fc5781816040517f1504f8ec00000000000000000000000000000000000000000000000000000000815260040161012d929190610617565b6020820180359061020d9084610639565b73ffffffffffffffffffffffffffffffffffffffff16337f5d91ab0394e910ccee855e471cfcd5400990911bf127ed49def138b610711c1b6102526040870187610445565b604051610260929190610654565b60405180910390a46102756020830183610639565b6040517f1e9a69500000000000000000000000000000000000000000000000000000000081523360048201526020840135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690631e9a695090604401600060405180830381600087803b1580156102e857600080fd5b505af11580156102fc573d6000803e3d6000fd5b505050505050565b6000806020838503121561031757600080fd5b823567ffffffffffffffff8082111561032f57600080fd5b818501915085601f83011261034357600080fd5b81358181111561035257600080fd5b8660208260051b850101111561036757600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126103dc57600080fd5b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361043e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261047a57600080fd5b83018035915067ffffffffffffffff82111561049557600080fd5b6020019150600581901b36038213156104ad57600080fd5b9250929050565b803573ffffffffffffffffffffffffffffffffffffffff811681146104d857600080fd5b919050565b803560ff811681146104d857600080fd5b60006060830173ffffffffffffffffffffffffffffffffffffffff610512846104b4565b1684526020808401358186015260408401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261055457600080fd5b8401818101903567ffffffffffffffff81111561057057600080fd5b8060051b360382131561058257600080fd5b606060408801529283905291600090608087015b818310156105be5760ff6105a9866104dd565b16815293830193600192909201918301610596565b979650505050505050565b6060815260006105dc60608301866104ee565b905083602083015260ff83166040830152949350505050565b60006020828403121561060757600080fd5b610610826104dd565b9392505050565b60408152600061062a60408301856104ee565b90508260208301529392505050565b60006020828403121561064b57600080fd5b610610826104b4565b60208082528181018390526000908460408401835b8681101561068f5760ff61067c846104dd565b1682529183019190830190600101610669565b50969550505050505056fea2646970667358221220cbc0a64fb70fe47594aa7cd534be34aaca041471fac3af551038327bc8c6eac764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000015
-----Decoded View---------------
Arg [0] : numChoices (uint8): 21
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000015
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.