随着 Web3 和 NFT 领域的繁荣发展,越来越多的开发者涌进了 Web3 行业。大部分的 Web3 项目在开发过程中,都需要使用一部分 NFT 相关的数据,由此也产生了对 NFT API 数据服务的需求。
函数修饰符,实践和状态变量
现在实现函数修饰符,事件以及这个 App 的存储数据的状态变量。以下代码中的评论会说明这些东西都使用在了哪里,或者你可以参考 GitHub 代码仓库。
代码语言:javascript复制contract NftMarketplace is ReentrancyGuard {
struct Listing {
uint256 price;
address seller;
}
event ItemListed(
address indexed seller,
address indexed nftAddress,
uint256 indexed tokenId,
uint256 price
);
// State Variables
mapping(address => mapping(uint256 => Listing)) private s_listings;
mapping(address => uint256) private s_proceeds;
// Function modifiers
modifier notListed(
address nftAddress,
uint256 tokenId,
address owner
) {
Listing memory listing = s_listings[nftAddress][tokenId];
if (listing.price > 0) {
revert AlreadyListed(nftAddress, tokenId);
}
_;
}
编写可升级合约
代码语言:javascript复制// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
contract OpenProxy is Initializable {
uint public value;
function initialize(uint _value) public initializer {
value = _value;
}
function increaseValue() external {
value;
}
}