What it does:
Allows players to register, trade, and manage ownership of in-game assets and NFTs securely on-chain, ensuring verifiable ownership and transferable assets.
Why it matters:
Prevents cheating, ensures transparency in asset ownership, enables real-world value for digital items, and allows automatic revenue sharing for creators or developers.
How it works:
Players register in-game items as tokenized assets (NFTs or ERC20/721)
Smart contracts manage ownership transfers, trading, and royalties
Developers or creators can receive automated revenue shares on secondary sales
Integrates with Gaming Marketplaces, Creator Collaboration Revenue Split, or NFT Tickets
Dashboards show owned items, trade history, and asset provenance
Supports in-game asset verification for authenticity and rarity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title GamingAssetOwnership
* @author Nam
* @notice Manages in-game asset ownership, transfers, and royalties on-chain
*/
contract GamingAssetOwnership is ERC721, Ownable {
struct Asset {
string metadataURI;
address creator;
uint256 royaltyPercent; // e.g., 5 for 5%
}
mapping(uint256 => Asset) public assets;
uint256 public assetCount;
// -------------------- EVENTS --------------------
event AssetMinted(uint256 indexed assetId, address owner, string metadataURI, uint256 royaltyPercent);
event AssetTransferred(uint256 indexed assetId, address from, address to, uint256 salePrice, uint256 royaltyPaid);
// -------------------- CONSTRUCTOR --------------------
constructor() ERC721("GameAsset", "GAST") {}
// -------------------- ASSET MANAGEMENT --------------------
function mintAsset(string calldata _metadataURI, uint256 _royaltyPercent) external {
require(_royaltyPercent 0) {
payable(a.creator).transfer(royaltyAmount);
}
// Transfer remaining to seller
payable(msg.sender).transfer(sellerAmount);
// Transfer NFT
_safeTransfer(msg.sender, _to, _assetId, "");
emit AssetTransferred(_assetId, msg.sender, _to, _salePrice, royaltyAmount);
}
// -------------------- VIEW FUNCTIONS --------------------
function getAsset(uint256 _assetId) external view returns (Asset memory) {
return assets[_assetId];
}
function tokenURI(uint256 tokenId) public view override returns (string memory) {
return assets[tokenId].metadataURI;
}
}
Build and Grow By Nam Le Thanh