从本质上看,区块链是以分布式数据存储、点对点传输、共识机制、加密算法、,智能合约等计算机技术集成创新而产生的分布式账本技术,是基于互联网的分布式数据库,具有去中心化、共识机制、不可篡改、可以追溯、规则透明等特点,
区块链的可追溯性来源于区块链数据结构的特殊性。在区块链系统中,它的链式结构是从创世区块开始的,其后系统产生的所有区块都通过父区块的哈希值前后相连,并最终能追溯到创世区块。
由于每个区块都包含一段时间内系统进行的所有交易数据,因此完整的区块链数据包含了自创世区块以来,系统所有进行的交易及交易前后的关联信息。同时,得益于区块链信息的不可篡改特性,使得这种可追溯性是可靠可信的。
web3.0的发展趋势是创建分散的网络、协议和应用程序,以无信任和安全的方式促进价值和信息的交换。
///notice Get the user expires of an NFT
///dev The zero value indicates that there is no user
///param tokenId The NFT to get the user expires for
///return The user expires for this NFT
function userExpires(uint256 tokenId)public view virtual override returns(uint256){
return _users[tokenId].expires;
}
///dev See{IERC165-supportsInterface}.
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override
returns(bool)
{
return
interfaceId==type(IERC4907).interfaceId||
super.supportsInterface(interfaceId);
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId,
uint256 batchSize
)internal virtual override{
super._beforeTokenTransfer(from,to,tokenId,batchSize);
if(from!=to&&_users[tokenId].user!=address(0)){
delete _users[tokenId];
emit UpdateUser(tokenId,address(0),0);
}
}
//SPDX-License-Identifier:MIT
pragma solidity>=0.4.22<0.9.0;
import"./ERC4907.sol";
import"openzeppelin/contracts/utils/Counters.sol";
contract RentablePets is ERC4907{
using Counters for Counters.Counter;
Counters.Counter private _tokenIds;
constructor()ERC4907("RentablePets","RP"){}
function mint(string memory _tokenURI)public{
_tokenIds.increment();
uint256 newTokenId=_tokenIds.current();
_safeMint(msg.sender,newTokenId);
_setTokenURI(newTokenId,_tokenURI);
}
function burn(uint256 tokenId)public{
_burn(tokenId);
}
}