Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 1,023 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Batch Transfer | 18491539 | 866 days ago | IN | 0 ETH | 0.00212402 | ||||
| Batch Transfer | 18461496 | 870 days ago | IN | 0 ETH | 0.00105021 | ||||
| Batch Transfer | 18180687 | 909 days ago | IN | 0 ETH | 0.00124137 | ||||
| Batch Transfer | 18097709 | 921 days ago | IN | 0 ETH | 0.00099382 | ||||
| Batch Transfer | 18097708 | 921 days ago | IN | 0 ETH | 0.00104538 | ||||
| Batch Transfer | 18045940 | 928 days ago | IN | 0 ETH | 0.0012582 | ||||
| Batch Transfer | 18045929 | 928 days ago | IN | 0 ETH | 0.00108584 | ||||
| Batch Transfer | 17964276 | 940 days ago | IN | 0 ETH | 0.00267321 | ||||
| Batch Transfer | 17904347 | 948 days ago | IN | 0 ETH | 0.00138484 | ||||
| Batch Transfer | 17904346 | 948 days ago | IN | 0 ETH | 0.00124116 | ||||
| Batch Transfer | 17895013 | 949 days ago | IN | 0 ETH | 0.00175965 | ||||
| Batch Transfer | 17895012 | 949 days ago | IN | 0 ETH | 0.00199497 | ||||
| Batch Transfer | 17885842 | 951 days ago | IN | 0 ETH | 0.00496267 | ||||
| Batch Transfer | 17879511 | 952 days ago | IN | 0 ETH | 0.00216917 | ||||
| Batch Transfer | 17879510 | 952 days ago | IN | 0 ETH | 0.00230484 | ||||
| Batch Transfer | 17872448 | 953 days ago | IN | 0 ETH | 0.00315146 | ||||
| Batch Transfer | 17872447 | 953 days ago | IN | 0 ETH | 0.00307669 | ||||
| Batch Transfer | 17872438 | 953 days ago | IN | 0 ETH | 0.00269774 | ||||
| Batch Transfer | 17872437 | 953 days ago | IN | 0 ETH | 0.00304336 | ||||
| Batch Transfer | 17865341 | 954 days ago | IN | 0 ETH | 0.00292481 | ||||
| Batch Transfer | 17865340 | 954 days ago | IN | 0 ETH | 0.00318816 | ||||
| Batch Transfer | 17865325 | 954 days ago | IN | 0 ETH | 0.00319408 | ||||
| Batch Transfer | 17865324 | 954 days ago | IN | 0 ETH | 0.0033986 | ||||
| Batch Transfer | 17865088 | 954 days ago | IN | 0 ETH | 0.00323623 | ||||
| Batch Transfer | 17844849 | 956 days ago | IN | 0 ETH | 0.0005928 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Transfer From | 18491539 | 866 days ago | 0 ETH | |||||
| Supports Interfa... | 18491539 | 866 days ago | 0 ETH | |||||
| Supports Interfa... | 18491539 | 866 days ago | 0 ETH | |||||
| Supports Interfa... | 18491539 | 866 days ago | 0 ETH | |||||
| Transfer From | 18461496 | 870 days ago | 0 ETH | |||||
| Supports Interfa... | 18461496 | 870 days ago | 0 ETH | |||||
| Supports Interfa... | 18461496 | 870 days ago | 0 ETH | |||||
| Supports Interfa... | 18461496 | 870 days ago | 0 ETH | |||||
| Transfer From | 18180687 | 909 days ago | 0 ETH | |||||
| Supports Interfa... | 18180687 | 909 days ago | 0 ETH | |||||
| Supports Interfa... | 18180687 | 909 days ago | 0 ETH | |||||
| Supports Interfa... | 18180687 | 909 days ago | 0 ETH | |||||
| Safe Transfer Fr... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097709 | 921 days ago | 0 ETH | |||||
| Transfer From | 18097708 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097708 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097708 | 921 days ago | 0 ETH | |||||
| Supports Interfa... | 18097708 | 921 days ago | 0 ETH | |||||
| Transfer From | 18045940 | 928 days ago | 0 ETH | |||||
| Supports Interfa... | 18045940 | 928 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BoredBoxBatchSender
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// vim: textwidth=119
pragma solidity 0.8.11;
import { IERC721 } from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import { IERC721Receiver } from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import { IERC721Metadata } from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import { IERC1155 } from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";
import { IERC1155Receiver } from "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol";
import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import { IBoredBoxBatchSender_Functions } from "./interfaces/IBoredBoxBatchSender.sol";
/// @title Contract for sending ERC721 and/or ERC1155 assets en masse
/// @author S0AndS0
/// @custom:link https://boredbox.io/
contract BoredBoxBatchSender is IBoredBoxBatchSender_Functions {
/// Mapping account to authorized state
mapping(address => bool) public isAuthorized;
/// Mapping `boxTokenId` to `contractAddress` _claimed state
/// @dev See {IBoredBoxBatchSender_Functions-claimed}
mapping(uint256 => mapping(address => uint256)) internal _claimed;
/// @dev See {ERC165Checker-supportsInterface}
///> 0x80ac58cd
bytes4 constant _ERC721_CONTRACT = type(IERC721).interfaceId;
/// @dev See {ERC165Checker-supportsInterface}
///> 0xd9b67a26
bytes4 constant _ERC1155_CONTRACT = type(IERC1155).interfaceId;
/// @dev See {IERC721Receiver-onERC721Received}
///
/// ```javascript
/// web3.eth.abi.encodeFunctionSignature('onERC721Received(address,address,uint256,bytes)')
/// //> 0x150b7a02
/// ```
///
/// address operator
/// address from
/// uint256 tokenId
/// bytes calldata data
bytes4 constant _ERC721_RECEIVER = bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
/// @dev See {IERC1155Receiver-onERC1155Received}
///
/// ```javascript
/// web3.eth.abi.encodeFunctionSignature('onERC1155Received(address,address,uint256,uint256,bytes)')
/// //> 0xf23a6e61
/// ```
///
/// address operator
/// address from
/// uint256 id
/// uint256 value
/// bytes calldata data
bytes4 constant _ERC1155_RECEIVER = bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"));
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ↑ Storage ↑ */
/* ↓ Modifiers and constructor ↓ */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
modifier onlyAuthorized() {
require(isAuthorized[msg.sender], "Not authorized");
_;
}
///
constructor(address owner) {
isAuthorized[owner] = true;
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ↑ Modifiers and constructor ↑ */
/* ↓ off-chain external ↓ */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/// @dev See {IBoredBoxBatchSender_Functions-batchTransfer}
function batchTransfer(
address tokenContract,
uint256[] calldata boxes,
uint256[] calldata tokenIds,
address[] calldata recipients
) external payable onlyAuthorized {
uint256 boxes_length = boxes.length;
require(boxes_length > 0, "Insufficient boxes provided");
require(
boxes_length == tokenIds.length && boxes_length == recipients.length,
"Length missmatch between; boxes, tokenIds, and/or recipients"
);
if (ERC165Checker.supportsInterface(tokenContract, _ERC721_CONTRACT)) {
uint256 box;
uint256 tokenId;
for (uint256 i; i < boxes_length; ) {
box = boxes[i];
if (_claimed[box][tokenContract] == 0) {
tokenId = tokenIds[i];
IERC721(tokenContract).transferFrom(msg.sender, recipients[i], tokenId);
_claimed[box][tokenContract] = ++tokenId;
}
unchecked {
++i;
}
}
} else if (ERC165Checker.supportsInterface(tokenContract, _ERC1155_CONTRACT)) {
uint256 box;
uint256 tokenId;
for (uint256 i; i < boxes_length; ) {
box = boxes[i];
if (_claimed[box][tokenContract] == 0) {
tokenId = tokenIds[i];
IERC1155(tokenContract).safeTransferFrom(msg.sender, recipients[i], tokenId, 1, "");
_claimed[box][tokenContract] = ++tokenId;
}
unchecked {
++i;
}
}
} else {
revert("Failed to recognize tokenContract");
}
}
///
function setAuthorized(address key, bool value) external payable onlyAuthorized {
isAuthorized[key] = value;
}
/// @dev See {IBoredBoxBatchSender_Functions-withdraw}
function withdraw(address payable to, uint256 amount) external payable onlyAuthorized {
(bool success, ) = to.call{ value: amount }("");
require(success, "Transfer failed");
}
/// @dev See {IBoredBoxBatchSender_Functions-canRecieve}
function canReceive(address to) external pure returns (uint256) {
uint256 result;
if (IERC721Receiver(to).onERC721Received.selector == _ERC721_RECEIVER) {
result += 1;
}
if (IERC1155Receiver(to).onERC1155Received.selector == _ERC1155_RECEIVER) {
result += 2;
}
return result;
}
/// @dev See {IBoredBoxBatchSender_Functions-claimed}
function claimed(uint256 box, address tokenContract) external view returns (uint256) {
uint256 tokenId = _claimed[box][tokenContract];
require(tokenId > 0, "Not claimed");
return --tokenId;
}
}// SPDX-License-Identifier: MIT
// vim: textwidth=119
pragma solidity 0.8.11;
///
interface IBoredBoxBatchSender_Functions {
/// Transfer many tokens from contract to many recipients
/// @param tokenContract Address to smart contract with tokens
/// @param boxes Array of BoredBoxNFT token IDs
/// @param tokenIds Array of numbers for token IDs to transfer from `tokenContracts`
/// @param recipients Array of addresses to receive `tokenIds` assets
/// @custom:throw "Not authorized"
/// @custom:throw "Insufficient boxes provided"
/// @custom:throw "Length missmatch between; boxes, tokenIds, and/or recipients"
/// @custom:throw "Failed to recognize tokenContract"
function batchTransfer(
address tokenContract,
uint256[] calldata boxes,
uint256[] calldata tokenIds,
address[] calldata recipients
) external payable;
/// @param key Address to set `value` within `isAuthorized` mapping
/// @param value Boolean state to set for given `key` within `isAuthorized` mapping
/// @custom:throw "Not authorized"
function setAuthorized(address key, bool value) external payable;
/// Send amount of Ether from `this.balance` to some address
/// @custom:throw "Not authorized"
/// @custom:throw "Transfer failed"
function withdraw(address payable to, uint256 amount) external payable;
/// @param to Address to check for ERC721Receiver and onERC1155Receiver compatibility
/// @return what receiver(s) are implemented for `to` address
/// - `0` if not compatible
/// - `1` if compatible with ERC721Receiver only
/// - `2` if compatible with ERC1155Receiver only
/// - `3` if compatible with both ERC721Receiver and ERC1155Receiver
function canReceive(address to) external view returns (uint256);
/// @param box BoredBoxNFT Token ID
/// @param tokenContract Address to ERC{721,1155} contract
/// @custom:throw "Not claimed"
function claimed(uint256 box, address tokenContract) external view returns (uint256);
}
///
interface IBoredBoxBatchSender_Variables {
/// @param account Address to check if authorized
/// @return authorized Boolean authorization status
function isAuthorized(address account) external view returns (bool authorized);
}
/* For external callers */
interface IBoredBoxBatchSender is IBoredBoxBatchSender_Variables, IBoredBoxBatchSender_Functions {
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Library used to query support of an interface declared via {IERC165}.
*
* Note that these functions return the actual result of the query: they do not
* `revert` if an interface is not supported. It is up to the caller to decide
* what to do in these cases.
*/
library ERC165Checker {
// As per the EIP-165 spec, no interface should ever match 0xffffffff
bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
/**
* @dev Returns true if `account` supports the {IERC165} interface,
*/
function supportsERC165(address account) internal view returns (bool) {
// Any contract that implements ERC165 must explicitly indicate support of
// InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid
return
_supportsERC165Interface(account, type(IERC165).interfaceId) &&
!_supportsERC165Interface(account, _INTERFACE_ID_INVALID);
}
/**
* @dev Returns true if `account` supports the interface defined by
* `interfaceId`. Support for {IERC165} itself is queried automatically.
*
* See {IERC165-supportsInterface}.
*/
function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
// query support of both ERC165 as per the spec and support of _interfaceId
return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);
}
/**
* @dev Returns a boolean array where each value corresponds to the
* interfaces passed in and whether they're supported or not. This allows
* you to batch check interfaces for a contract where your expectation
* is that some interfaces may not be supported.
*
* See {IERC165-supportsInterface}.
*
* _Available since v3.4._
*/
function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)
internal
view
returns (bool[] memory)
{
// an array of booleans corresponding to interfaceIds and whether they're supported or not
bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);
// query support of ERC165 itself
if (supportsERC165(account)) {
// query support of each interface in interfaceIds
for (uint256 i = 0; i < interfaceIds.length; i++) {
interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);
}
}
return interfaceIdsSupported;
}
/**
* @dev Returns true if `account` supports all the interfaces defined in
* `interfaceIds`. Support for {IERC165} itself is queried automatically.
*
* Batch-querying can lead to gas savings by skipping repeated checks for
* {IERC165} support.
*
* See {IERC165-supportsInterface}.
*/
function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
// query support of ERC165 itself
if (!supportsERC165(account)) {
return false;
}
// query support of each interface in _interfaceIds
for (uint256 i = 0; i < interfaceIds.length; i++) {
if (!_supportsERC165Interface(account, interfaceIds[i])) {
return false;
}
}
// all interfaces supported
return true;
}
/**
* @notice Query if a contract implements an interface, does not check ERC165 support
* @param account The address of the contract to query for support of an interface
* @param interfaceId The interface identifier, as specified in ERC-165
* @return true if the contract at account indicates support of the interface with
* identifier interfaceId, false otherwise
* @dev Assumes that account contains a contract that supports ERC165, otherwise
* the behavior of this method is undefined. This precondition can be checked
* with {supportsERC165}.
* Interface identification is specified in ERC-165.
*/
function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {
bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);
(bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);
if (result.length < 32) return false;
return success && abi.decode(result, (bool));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
import "../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 v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* 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 caller.
*
* 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 v4.5.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC1155 token type. This function is
* called at the end of a `safeTransferFrom` after the balance has been updated.
*
* NOTE: To accept the transfer, this must return
* `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
* (i.e. 0xf23a6e61, or its own function selector).
*
* @param operator The address which initiated the transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param id The ID of the token being transferred
* @param value The amount of tokens being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
* @dev Handles the receipt of a multiple ERC1155 token types. This function
* is called at the end of a `safeBatchTransferFrom` after the balances have
* been updated.
*
* NOTE: To accept the transfer(s), this must return
* `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
* (i.e. 0xbc197c81, or its own function selector).
*
* @param operator The address which initiated the batch transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param ids An array containing ids of each token being transferred (order and length must match values array)
* @param values An array containing amounts of each token being transferred (order and length must match ids array)
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(
address indexed operator,
address indexed from,
address indexed to,
uint256[] ids,
uint256[] values
);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
external
view
returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes calldata data
) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] calldata ids,
uint256[] calldata amounts,
bytes calldata data
) external;
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 10000
},
"evmVersion": "london",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256[]","name":"boxes","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"canReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"box","type":"uint256"},{"internalType":"address","name":"tokenContract","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"key","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAuthorized","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610fec380380610fec83398101604081905261002f91610056565b6001600160a01b03166000908152602081905260409020805460ff19166001179055610086565b60006020828403121561006857600080fd5b81516001600160a01b038116811461007f57600080fd5b9392505050565b610f57806100956000396000f3fe6080604052600436106100655760003560e01c806390d370ba1161004357806390d370ba146100c5578063f3fef3a3146100e5578063fe9fbb80146100f857600080fd5b8063120aa8771461006a5780632e324dcf1461009d578063711bf9b2146100b2575b600080fd5b34801561007657600080fd5b5061008a610085366004610c37565b610138565b6040519081526020015b60405180910390f35b6100b06100ab366004610cb3565b6101e7565b005b6100b06100c0366004610d6e565b61081d565b3480156100d157600080fd5b5061008a6100e0366004610d9c565b6108ec565b6100b06100f3366004610db9565b61090e565b34801561010457600080fd5b50610128610113366004610d9c565b60006020819052908152604090205460ff1681565b6040519015158152602001610094565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806101d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420636c61696d656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6101dd81610e14565b9150505b92915050565b3360009081526020819052604090205460ff16610260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b84806102c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e73756666696369656e7420626f7865732070726f7669646564000000000060448201526064016101cb565b80841480156102d657508082145b610362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c656e677468206d6973736d61746368206265747765656e3b20626f7865732c60448201527f20746f6b656e4964732c20616e642f6f7220726563697069656e74730000000060648201526084016101cb565b61038c887f80ac58cd00000000000000000000000000000000000000000000000000000000610a56565b156105705760008060005b83811015610568578989828181106103b1576103b1610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156105605787878281811061042557610425610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3388888581811061045d5761045d610e49565b90506020020160208101906104729190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101859052606401600060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050508161050890610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600101610397565b505050610813565b61059a887fd9b67a2600000000000000000000000000000000000000000000000000000000610a56565b1561078b5760008060005b83811015610568578989828181106105bf576105bf610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156107835787878281811061063357610633610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff1663f242432a3388888581811061066b5761066b610e49565b90506020020160208101906106809190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018590526001606482015260a06084820152600060a482015260c401600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b505050508161072b90610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001016105a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4661696c656420746f207265636f676e697a6520746f6b656e436f6e7472616360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016101cb565b5050505050505050565b3360009081526020819052604090205460ff16610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000806108fa600182610eb1565b9050610907600282610eb1565b9392505050565b3360009081526020819052604090205460ff16610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146109e1576040519150601f19603f3d011682016040523d82523d6000602084013e6109e6565b606091505b5050905080610a51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c6564000000000000000000000000000000000060448201526064016101cb565b505050565b6000610a6183610a72565b801561090757506109078383610ad6565b6000610a9e827f01ffc9a700000000000000000000000000000000000000000000000000000000610ad6565b80156101e15750610acf827fffffffff00000000000000000000000000000000000000000000000000000000610ad6565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610b90908690610ec9565b6000604051808303818686fa925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5091509150602081511015610bec57600093505050506101e1565b818015610c08575080806020019051810190610c089190610f04565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610c3457600080fd5b50565b60008060408385031215610c4a57600080fd5b823591506020830135610c5c81610c12565b809150509250929050565b60008083601f840112610c7957600080fd5b50813567ffffffffffffffff811115610c9157600080fd5b6020830191508360208260051b8501011115610cac57600080fd5b9250929050565b60008060008060008060006080888a031215610cce57600080fd5b8735610cd981610c12565b9650602088013567ffffffffffffffff80821115610cf657600080fd5b610d028b838c01610c67565b909850965060408a0135915080821115610d1b57600080fd5b610d278b838c01610c67565b909650945060608a0135915080821115610d4057600080fd5b50610d4d8a828b01610c67565b989b979a50959850939692959293505050565b8015158114610c3457600080fd5b60008060408385031215610d8157600080fd5b8235610d8c81610c12565b91506020830135610c5c81610d60565b600060208284031215610dae57600080fd5b813561090781610c12565b60008060408385031215610dcc57600080fd5b8235610dd781610c12565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081610e2357610e23610de5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eaa57610eaa610de5565b5060010190565b60008219821115610ec457610ec4610de5565b500190565b6000825160005b81811015610eea5760208186018101518583015201610ed0565b81811115610ef9576000828501525b509190910192915050565b600060208284031215610f1657600080fd5b815161090781610d6056fea264697066735822122098172db9bdce6c98359e10bf282b6bd74e0e4cc76e5c3d9040e4e8bcb9b6481a64736f6c634300080b0033000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
Deployed Bytecode
0x6080604052600436106100655760003560e01c806390d370ba1161004357806390d370ba146100c5578063f3fef3a3146100e5578063fe9fbb80146100f857600080fd5b8063120aa8771461006a5780632e324dcf1461009d578063711bf9b2146100b2575b600080fd5b34801561007657600080fd5b5061008a610085366004610c37565b610138565b6040519081526020015b60405180910390f35b6100b06100ab366004610cb3565b6101e7565b005b6100b06100c0366004610d6e565b61081d565b3480156100d157600080fd5b5061008a6100e0366004610d9c565b6108ec565b6100b06100f3366004610db9565b61090e565b34801561010457600080fd5b50610128610113366004610d9c565b60006020819052908152604090205460ff1681565b6040519015158152602001610094565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152812054806101d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e6f7420636c61696d656400000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6101dd81610e14565b9150505b92915050565b3360009081526020819052604090205460ff16610260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b84806102c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f496e73756666696369656e7420626f7865732070726f7669646564000000000060448201526064016101cb565b80841480156102d657508082145b610362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603c60248201527f4c656e677468206d6973736d61746368206265747765656e3b20626f7865732c60448201527f20746f6b656e4964732c20616e642f6f7220726563697069656e74730000000060648201526084016101cb565b61038c887f80ac58cd00000000000000000000000000000000000000000000000000000000610a56565b156105705760008060005b83811015610568578989828181106103b1576103b1610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156105605787878281811061042557610425610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3388888581811061045d5761045d610e49565b90506020020160208101906104729190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff92831660048201529116602482015260448101859052606401600060405180830381600087803b1580156104e657600080fd5b505af11580156104fa573d6000803e3d6000fd5b505050508161050890610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600101610397565b505050610813565b61059a887fd9b67a2600000000000000000000000000000000000000000000000000000000610a56565b1561078b5760008060005b83811015610568578989828181106105bf576105bf610e49565b9050602002013592506001600084815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600014156107835787878281811061063357610633610e49565b9050602002013591508a73ffffffffffffffffffffffffffffffffffffffff1663f242432a3388888581811061066b5761066b610e49565b90506020020160208101906106809190610d9c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604481018590526001606482015260a06084820152600060a482015260c401600060405180830381600087803b15801561070957600080fd5b505af115801561071d573d6000803e3d6000fd5b505050508161072b90610e78565b9150816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001016105a5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4661696c656420746f207265636f676e697a6520746f6b656e436f6e7472616360448201527f740000000000000000000000000000000000000000000000000000000000000060648201526084016101cb565b5050505050505050565b3360009081526020819052604090205460ff16610896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000806108fa600182610eb1565b9050610907600282610eb1565b9392505050565b3360009081526020819052604090205460ff16610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016101cb565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146109e1576040519150601f19603f3d011682016040523d82523d6000602084013e6109e6565b606091505b5050905080610a51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c6564000000000000000000000000000000000060448201526064016101cb565b505050565b6000610a6183610a72565b801561090757506109078383610ad6565b6000610a9e827f01ffc9a700000000000000000000000000000000000000000000000000000000610ad6565b80156101e15750610acf827fffffffff00000000000000000000000000000000000000000000000000000000610ad6565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff87169061753090610b90908690610ec9565b6000604051808303818686fa925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5091509150602081511015610bec57600093505050506101e1565b818015610c08575080806020019051810190610c089190610f04565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610c3457600080fd5b50565b60008060408385031215610c4a57600080fd5b823591506020830135610c5c81610c12565b809150509250929050565b60008083601f840112610c7957600080fd5b50813567ffffffffffffffff811115610c9157600080fd5b6020830191508360208260051b8501011115610cac57600080fd5b9250929050565b60008060008060008060006080888a031215610cce57600080fd5b8735610cd981610c12565b9650602088013567ffffffffffffffff80821115610cf657600080fd5b610d028b838c01610c67565b909850965060408a0135915080821115610d1b57600080fd5b610d278b838c01610c67565b909650945060608a0135915080821115610d4057600080fd5b50610d4d8a828b01610c67565b989b979a50959850939692959293505050565b8015158114610c3457600080fd5b60008060408385031215610d8157600080fd5b8235610d8c81610c12565b91506020830135610c5c81610d60565b600060208284031215610dae57600080fd5b813561090781610c12565b60008060408385031215610dcc57600080fd5b8235610dd781610c12565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081610e2357610e23610de5565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610eaa57610eaa610de5565b5060010190565b60008219821115610ec457610ec4610de5565b500190565b6000825160005b81811015610eea5760208186018101518583015201610ed0565b81811115610ef9576000828501525b509190910192915050565b600060208284031215610f1657600080fd5b815161090781610d6056fea264697066735822122098172db9bdce6c98359e10bf282b6bd74e0e4cc76e5c3d9040e4e8bcb9b6481a64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
-----Decoded View---------------
Arg [0] : owner (address): 0x935A6162F6830ED6b67715194a2702C5b4F8D115
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000935a6162f6830ed6b67715194a2702c5b4f8d115
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 ]
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.