# 👾NICE1

## About the NICE1 mentality

We develop services and applications based on Blockchain technology for video games, aimed at democratizing the video game industry by giving developers the necessary tools to implement all its advantages in licenses, assets or skins.

## 🧙‍♂️4 Gamedevs

{% hint style="info" %}
**NICE1 PLUGIN**

* [Introduction](/nice1-plugin/introduction)
* [Unity version](/nice1-plugin/unity) \[1.0.0] \[OpenSource] ***\[WIP]***
* [Unreal version](/nice1-plugin/unreal-plugin) \[1.0.0] \[OpenSource] ***\[WIP]***
  {% endhint %}

## 🌍4 All

{% hint style="info" %}
**JUNGLE4 (EOS TESTNET)**

* [Create EOS Jungle4 Account](/testnet-jungle4/create-testnet-eos-account)
* [Create NFT with SimpleAssets on Jungle4](/testnet-jungle4/create_nft_contract)
  {% endhint %}

## 🎮4 Gamers

{% hint style="info" %}
**NICE1 LINK**

* [Introduction](/nice1-link/introduction)
* *`Nice1.link`* 0.5.0 ***\[WIP]***
  {% endhint %}


# Introduction

We work on tools for developers through plugins for the main IDEs in the market ([UNITY](/nice1-plugin/unity) & [UNREAL](/nice1-plugin/unreal-plugin)). These tools provide developers with the possibility to implement NFT with free terms of use, simple integration and no fee transactions between players and creators.

The goal is to have a common source code written in C++ that can be compiled for the different IDEs. For each of them, it will be necessary to make the necessary adaptations according to their requirements.&#x20;

* [**Unity Plugin**](/nice1-plugin/unity)


# ChangeLogs

Last version (Stable):

{% hint style="success" %}

#### NICE1 PLUGIN SUIT | Version 0.X.0

{% endhint %}

* Version 0.5.0 (Initial version)


# Unity Plugin

In this Nice1 guide, you will learn how to import and set up Nice1 plugin for Unity (Windows and Mac).

{% hint style="info" %}
The functionality of this plugin is currently in beta. Its use is supported on the EOS tesnet network (jungle3).
{% endhint %}

### Getting Started

[Download](https://github.com/nice1-blockchain/nice1-plugin/releases/tag/0.0.2b) or [clone](https://github.com/nice1-blockchain/nice1-plugin/tree/develop) our latest version of the Nice1 Unity package.&#x20;

Next, open up the Unity project you want to use or a blank project. When your Unity project is open, you can import the package from the top Unity Editor toolbar via <mark style="background-color:blue;">Assets -> Import Package -> Custom Package</mark>

Then from the file explorer select the Nice1 Unity package and import. A window will pop up, hit "OK" to start importing the package into the project.&#x20;

You can also import the Unity package by dragging and dropping it into the Project tab in the Unity window.&#x20;

### Any questions?

For those users who have questions, we are working on the [FAQs](/nice1-plugin/frequently-asked-questions) section. Feel free to contact us on our [Discord](https://discord.gg/TeybrwHuna) server too.

{% hint style="warning" %}
**⏳ Documentation under revision, to be published soon.**\
**🙏Thank you for your patience.**
{% endhint %}


# How to use

The Unity package contains the following elements:

<figure><img src="/files/FFt7H5utCdADLgQM7HpT" alt=""><figcaption></figcaption></figure>

## Nice1 folder

Contains the Demos, Plugins, Prefabs, Scripts and UI folders.

* Demos: contains three samples:
  * A sample main scene called *CanvasAnchorExampleScene 1* (inherits from project <https://github.com/liquiidio/UniversalAuthenticatorLibraryUnity>) It has all you need to create a Login functionality using EOSIO Blockchain Network.&#x20;
  * A sample scene called *Nice1sample* with a configuration of panels, buttons and the prefabs needed to use the login part of the plugin.
  * A sample scene called *Nice1CharacterSelectorSample* with a configuration of a set of elements (panels, buttons, prefabs, etc.) required to use the character selector part of the plugin.
* Plugin: contains the plugin, Mac, iOS, Android, WebGL and Windows libraries.
* Prefabs: contains various prefabs:
  * LoginPanelAnchor: the login panel to launch Anchor Wallet.
  * UserPanel: a panel to display the name of the logged in user.
  * WalletManager: contains the scripts for authentication management, license parameters configuration and UI management.
  * Character: a button used in the character selection part of the plugin.
  * CharacterSelectionScreen: a panel used in the character selection part of the plugin.
  * CharacterSelector: a GameObject that contains the necessary elements to configure the componentes of the character selector.
* Scripts: where the different scripts used in the prefabs are stored. It also contains a ScriptableObject with the stored data for the character selector configurator.
* UI: sprites for the login panel.

{% hint style="warning" %}
**⏳ Documentation under revision, to be published soon.**\
**🙏Thank you for your patience.**
{% endhint %}

## Nice1 Login Demo Scene

![](/files/vz6cbH5ecbo1XYgcvSzw)

This demo scene contains the necessary configuration to see how the login part of the plugin works. Due to current restrictions, its operation depends on the incorporation of third-party plugins. The following section explains how to perform the configuration.

## Nice1 Character Selector Demo Scene:

<figure><img src="/files/oPRvWIxITy144FoSUGMa" alt=""><figcaption></figcaption></figure>

This demo scene contains the necessary configuration to see how the character selector part of the plugin works.


# Play Login!!!!

Open the *CanvasAnchorExampleScene 1* scene and click on Play to see the demo running.

<figure><img src="/files/dc7iqIuH0OtgXLmQCazb" alt=""><figcaption></figcaption></figure>

We have a simple button that when clicked will open your wallet. This web view connects with the Anchor Wallet API and will let us log in and check our NFTs.

<figure><img src="/files/RQaAUBpq9oGXbzTlhrbA" alt=""><figcaption></figcaption></figure>

We can launch the Anchor Wallet program if it's installed or scan the QR code with the mobile app.

<figure><img src="/files/4VuVq5LbEddHRebJyn0h" alt=""><figcaption></figcaption></figure>

I


# How Login works

For Windows, Mac and Linux, use *UnityCanvasTransport* from *AnchorLinkTransportSharp* described in <https://github.com/liquiidio/UniversalAuthenticatorLibraryUnity>

For WebGL, Android and iOS use WebVIew option.


# Play CharacterSelector!!!!

Once the dependencies are configured, open the scene and run it to see the demo in action.

<figure><img src="/files/0M78LKGNq64VXxmzhJxB" alt=""><figcaption></figcaption></figure>

As you can see, initially, it is the same as the Login scene.

The same web view is opened after clicking the Login button.

<figure><img src="/files/dk3rLNTPW6bMqUN3jBT2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/hXTvqELD7iDWtsAQPzHU" alt=""><figcaption></figcaption></figure>

If the query didn't find the specified license, we'll get a "No License" text.

<figure><img src="/files/LEdgyj76jSbUACxLXBXR" alt=""><figcaption></figcaption></figure>

Otherwise, a character selection panel will appear for us.

<figure><img src="https://lh5.googleusercontent.com/Bf3SsTgVxhIx-IES7yI4HybFynALsTALODoc-oKTemhRzrm76B-kOJW1WdNfeWTCwbe2zot2s0QN-LDEqtMvmNJUNPttFqIM1zpjE1yLjGVZmCqbYcFZCSxFARKvzO_aqr8R2bRmnZxhgZDY_s2BS6M" alt=""><figcaption></figcaption></figure>

The character licenses are configured from the CharacterSelector in the scene.

<figure><img src="https://lh3.googleusercontent.com/tO2tLsunf2oVUJNWYo9shxOi2g6OtlIO1qE1QhvoWvgalWDfRNoNDE7UrZB8C6jwstZK7uRBduxu33FVIQhHuQWgTwI063o7_iUe8iuR6XNZdKjrl_sfUHkXb48ZEf_yw8SEAOwMvTfPSpk5kPpH-0o" alt=""><figcaption></figcaption></figure>

Its default data is as follows.

<figure><img src="https://lh5.googleusercontent.com/70ENmn125UYWGMVx6d3-5vyjiaxBhQB188NTXWRDpOG6x-ACvThLOK6OJSDmPe-ncBVJs88riur7gEDtvTdFVzKl0RAzoRSxKJQ6tXGbRUBorAj3wJs7x4HGpWs65crq78Ias78fLWxBeFJl-S2ezTM" alt=""><figcaption></figcaption></figure>

If we click on the green button on the panel in the scene, the licenses will be reloaded. So, for example, if we change the last license to free and update.

<figure><img src="https://lh5.googleusercontent.com/WMZwqE--SlU79P0sMZIrt7Mg8zguSiShKlezM1ElTqSnQmHgiBtkfkF0DaVVBvqpAzETYQv1bzz8Yy_-oBWMjZ2aP8rSr9lD-PTtDmhN-poEON3gFVK1OskRQvjJ81Ajqkmh6owGrVTmkXX-OpR8cfE" alt=""><figcaption></figcaption></figure>

Now, we will be able to click the "Capsule" character.

<figure><img src="https://lh3.googleusercontent.com/zq1PaM92D6GH1QEO0M-bNDVo0qB1C2q5rmOHeW7C_Lk6XBcdhvdiwUi9TzXMVlWWsbNamIOgcoEAOIe60peMcScfaEONWqWczuy_PO6yehCS0oByi1U7s6EYgXH-2E7qyLj2-iL9ITGaol1SyyFWpR0" alt=""><figcaption></figcaption></figure>

If we click on a button,for example, *Circle*, a message will appear in the console:

<figure><img src="/files/3lZpnUooVyOCyPBG4Y3z" alt=""><figcaption></figcaption></figure>

Note: To configure the behaviour of each button after clicking on one of them, while the scene is not running from the inspector, you should click on it an add a function in the *OnClick()* method.

<figure><img src="/files/UYKfXBeFyS29ubG8x9mS" alt=""><figcaption></figcaption></figure>


# How CharacterSelector works

The demo scene is similar to the login one, but with some additions.

In the scene, we have replaced the WalletManager GameObject with the CharacterSelector, which holds the WalletManager as a child.

<figure><img src="/files/5w2CiFcuNorNXH3j5lJy" alt=""><figcaption></figcaption></figure>

It contains the ElementsConfigurator script.

<figure><img src="/files/Hm05sheLi0DmSRYm9WUm" alt=""><figcaption></figcaption></figure>

Inside the canvas panel, it also contains the CharacterSelectionScreen GameObject.

<figure><img src="/files/RyErCRcrQJWZJSoVuNxv" alt=""><figcaption></figcaption></figure>

Which contains the UISelectorPanel script.

<figure><img src="/files/xnOXVrVGgp9Hsbi6DMa5" alt=""><figcaption></figcaption></figure>

Let's explain each script.

### ElementsConfigurator

It has the information of the components which will appear on the panel. Its sections are as follows:

* Data & elements: It contains information regarding the data to be displayed on the screen, as well as a reference to a ScriptableObject from which to load or to which to save the defined data, and the necessary WalletManager to establish a connection with the server.
* Settings: Within it, the display mode is defined, an owner is set for testing from the inspector without the need to run the scene or perform a login; the UI element where the buttons will be created is specified, along with the prefab of the button to be created for each data (the Character prefab is used).
* Some buttons:
  * Load data from scriptable data list: Load the data from the ScriptableDataList into the list of elements that we need to define.
  * Save data into scriptable data list: Save the defined data in the list of elements within the ScriptableDataList.
  * Create elements in the UI: Remove the elements within the Target component to create a set of prefabs in it using the data entered in the list of elements.\
    Note: Once created, these elements should be arranged in the panel.
  * Refresh licenses: Verify the licenses to check them and show or hide each button based on whether their corresponding license is owned or not.

### UISelectorPanel

It contains the following references:

* Configurator: The ElementsConfigurator script of the scene.
* User Panel: The panel which will be displayed in case a license is not available.
* Text User Account: Text with the username if the license is available or with the text "No license" if the license is not available.


# Troubleshooting

Troubleshooting common problems with the Nice1 Plugin Unity and known issues/limitations.

{% hint style="warning" %}
**⏳ Documentation under revision, to be published soon.**\
**🙏Thank you for your patience.**
{% endhint %}


# Unreal Plugin

In this Nice1 guide, you will learn how to import and set up Nice1 plugin for your Unreal project.

### Getting Started

To add the Nice1 Plugin into your Unreal project you just need to download or clone our latest version of the Nice1 Unreal plugin and put its content into the `Plugins` folder in your project's root diretory (were your .uproject file is located). You can manually create a `Plugins` folder if it does not exists already.

### Setup

To ensure the Nice1 plugin functions correctly, you need to provide the necessary license and blockchain network information.

1. Launch Unreal Editor: Open your project in Unreal Engine.
2. Navigate to Settings: Go to Edit -> Project Settings -> Nice1 Settings.
3. Enter Required Information: Fill out all the fields with

### Blueprint example

![alt tex](https://github.com/nice1-blockchain/nice1-plugin/blob/develop/UE-Plugin/Nice1Plugin/Documentation/BlueprintExample.jpg?raw=true)

{% hint style="warning" %}
**⏳ Documentation under revision.**
{% endhint %}


# Frequently Asked Questions

**We will answer all your questions at:**

<https://discord.gg/DhZRMXeQVM>


# Compile the plugin for iOS

1. Plugin XCode Project File Lists

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc4kkK-Lwd5ftjihTFSwlvlNQlvKVH4Aj3aIVWu8RJKjeMJ_i7pYuhDGrkLOhHJJqHkpphcID10KvOOwa2U7DTF6ombzzT74E35k4AHXhey3GnehHJZCad3C1m4F6kkc_fKRXjeeQ?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

2. Everything except the Curl framework can be found in the plugin repository. To install it, download the latest release (zip file) from <https://github.com/greatfire/curl-apple> or <https://github.com/tls-inspector/curl-ios/>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe9CqNqKKjm1ouC59PiPXT6VZQUo51xk36zp3SklC-z2BenwM21jW3r6RSI-5O9MJ7qvHYRUgYz1OJ5gXV6Dr-b4GBRwtU2rdcU1cO2TPJqd9hqXDN4Xr2Zytq5kNr_xWVj1w4vnA?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\
3\. Unzip:

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdD7F5Srm2ALb8PuCG3GEc66sflaA0Sx-ncDCWgZYrlGWX0zrs50JW5wJ6N2IttVPBQMvbGK3fAkmzMoXznwM-AUu5849yemc2s3AiS23SCtMuImM9BXRzTjB4tzoCk7iifymAErg?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption><p>Release file content</p></figcaption></figure>

4. Incorporate Curl into the project as a framework (follow instructions from the source repository). The XCode project configuration should look like this:<br>

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd_Leok3wHflULKA2j9FlZhrlrZhTohJ5Mh-UTAKi1hhucbFLDewKc2kjAS9ZWI9Wv_uCG6CCAtC1RnIafCILee0mtkvLCnetJNSacu71W1rbC0ZNLORQo0LAREhcI0tCV0jWgZ8A?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdwA5iKoSq4P1l0i5QSa5EHtmi5RTXYTqx5p6XNbJTSkFEGo-RUR73uQGtdx06glD7KcPQS7Lkv-WNKGwCzPZrAZRFPgmopTeBTiLUndhzkzQIG-hk7b2v3ondrfUMb2ZdcEHJYuA?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

5. Add, for both Project and Target, in the “Header Search Paths” property the path where the downloaded curl files are located, checking the recursion option. For example: User/user/curl.framework/\*\*


# Add the plugin to the Unity XCode project.

1. In the Unity project, copy the files resulting from the compilation of the iOS plugin. The output files are:

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdR_ZxRMsBDEfWj7MTWwemaYCCtG6pkQJfzRqrsdsZ2mIezoBlN6llWBIzt5nFwxwqJzx1gYiFXherdz70B2cvLMgdEylluG3vhVO6IxbB7y16-MXvmEw9wtWrl1RaLw9ERjub13Q?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\
\
2\. Copy them to the Assets/Plugin/iOS path

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdIM_QiWIqVr4KYXNt-ho_5t1Vybrm6IjCD0pFpG7ECdP8Mabb-TrOc6ZVp28cHOJWHlwN7osIsEw-hpP08e5Psu0GqCNui1TVdq3CTIQFnbLkxqSWmy4q_b8eIPDpX1GBVHuvzZA?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

<br>

3. Once the build is done, open the resulting XCode project. Curl must be in the frameworks section and in the Target Membership only UnityFramework appears.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcDfa2xmXwLjNKEW-tDanZt6DSXXRakVHGwojNs_Yb58jpDw8CJwAhWnZ9U8EbpjD-PdxXKgacLXHVk7WsO5YxFVfPOvAo1vzOOaeNoocbvOXWmg3TkmsFvj0jogBGrLRBM9SS13A?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\
\
4\. For both Target Unity-iPhone and UnityFramework, the Search Path properties must include the directory where the Curl library is located recursively. The library will be found in the relative directory Frameworks/Plugins/iOS/curl.framework

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd0O56PikTACIgsCvggSfCzTcqZBdyP1GsfP1ru3kw9M3DV1Gohor2A77XHPlQKThRve6ZycxhZetldKSdXqOKb2fxDv63OpdwylAbHTqx6HEgMIMja4DmmzC688zBRUzxFm86aXw?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\ <br>

5. For UnityFramework, in the “Other Linker Flags” property, add -lz

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcDVATg4PbvLRazT4X7vtm6GHvr-0Vjmm_DnJa_wxw8mgNLwOxYwOEMd6VgZrSbHVSJMhqwsFfWieYRDdHgFApdXGx_UPa7lVJHeOGVV8d1nXomH8THpZWu_5avDxY7p6xW5qrj2w?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\ <br>

6. Configuring Build Phases for Unity-iPhone

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdjaIvqYVvkL2W4Wkr_iAWqH6pbrjFmT6unR5Z8jTGM1DsbjE7D_O1io3eHqfTPB3_8H8qnIc-UsLNbUv3S1KYCRmZ65ECELW_oG7wtKtNk1lrDLF7mZNPvGYY8vLQ3CPrVCC60?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>

\
\ <br>

7. Configuring Build Phases for UnityFramework. Check that the libraries are found: libz.tbd, curl.framework and libiosBasicPlugin.a

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXepSzDuIW4FGvKpMfLCRUdg-OzhPN3ATJVOHmq74kacCY2IR5jR5INQXgowZjhoSJzSyRQNLigp9m3WFyFWOk1a5HgZUga3hFXIU2G5AcH4OA0goMOyruE1f8U2YiGgXj0oAXIUWw?key=z8t1k_LqDtHisw9gw3H4DGJQ" alt=""><figcaption></figcaption></figure>


# Introduction

Soon!


# nice1swapper&#x20;

Introduction: **An easy way to offer swap between tokens**, valid for EOSio (antelope) blockchains.

With support of PomeloGrants

Github repo: <https://github.com/nice1-blockchain/nice1swapper/>

## Use cases

This contract offers the possibility of exchanging fungible items in video games (backed by tokens), this can be represented with several examples such as the exchange of "10 Apples for 1 apple juice" and vice versa this exchange can be executed in the game processed on the network itself.

It also offers the possibility to acquire special tokens like "fornitebuks" in web3 games in exchange for any token that is required.

As another example of use not focused on web3 gaming, it also allows the exchange of tokens for projects that wish to offer their tokens to users in exchange for other tokens on the chain.

### How it works

As a contract administrator you will be able to run an action that will allow you to configure a swap option with a unique identifier.

In this action you will be able to configure fields such as, the token contract you want to offer and the amount of tokens on one side and on the other side how many tokens you expect to receive for the amount of tokens and from which contract.

You can make different configurations with different ratios according to your needs.

> Example 1: 1EOS = 10Gold , 5EOS = 50 Gold , 10 EOS = 100 Gold\
> Example > 2: 1EOS = 10Gold , 5EOS = 60 Gold , 10 EOS = 150 Gold

Users will only need to make a standard transfer to the contract and will instantly receive the counterpart.


# nice1staking&#x20;

Introduction: **Offer Rewards to your users for staking!** (Tokens and NFT's)

Github repo: <https://github.com/nice1-blockchain/nice1staking/>

## Use cases

You have a collection of NFT's and you are thinking of launching a token? reward the holders of your NFT, offering an equal distribution to all of them in exchange for blocking their NFT for X amount of time.

Or you have your own token and you want to launch a new collection of NFT's for your community members.

The limit is set by you.

### How it works

With these 2 contracts you will be able to offer staking campaigns to your users and offer both NFT's and tokens as rewards.

*The 2 versions work independently:*

**n1nfttotoken:** In this version users will be able to lock a specific NFT in the contract for the time needed to receive the reward, once that time is up, the user will be able to claim his NFT and also the tokens offered as a reward for staking. If the user wishes to withdraw from the campaign before the time for the reward is up, his NFT will be returned.

> As an administrator, you can create a campaign in which you can set the start date, the end date, the time required to block the NFT, which NFT you accept for this campaign, maximum number of participants and how many tokens the user will receive for participating.

***

**n1tokentonft:** In this version users will be able to block tokens of any type in the contract for the time necessary to receive the reward, once this time is over, the user will be able to claim his tokens and will receive the NFT offered as a staking reward. If the user wishes to withdraw from the campaign before the time for the reward is up, his tokens will be returned.

> As an administrator, you can create a campaign in which you can set the start date, end date, time required for blocking tokens, which tokens you accept for this campaign, maximum number of participants, whether you want to return the tokens to the participant or take them as payment and what NFT the user will receive for participating.


# n1licensepos

Introduction: **Sell your licenses and assets quickly and independently.** Powered by Nice1

Github repo: <https://github.com/nice1-blockchain/n1licensepos>

## Use cases

Are you using Nice1 plugins to add the NFT license verification system to the games you have created (BTL-BlochainTrustedLicense)?

With this contract you can easily create your PointOfSale and sell your licenses and assets by accepting as payment any kind of token from the network. You choose!

### How it works

Very similar to a store!

First you will have to register your product, specifying what it is, the price it will have and its internal and external reference if you need it.

Once you have your product registered, you only have to replenish the stock, this is as easy as sending the licenses to the contract and it will automatically manage the remaining units as well as a detailed report of the units sold.

For your users buying your licenses has never been so easy! They only have to send the required amount of tokens to the contract attaching in the memo the reference of the product they want to purchase and in the same transfer in which the payment arrives the license will be sent to your account.


# Create EOS Account (Testnet)

## 📋 Here is step by step how to create an "EOS Account" on the Jungle4 Testnet and thus be able to test on the EOSio network without consuming resources on the mainnet.

In this document we will go through all the steps from <https://monitor.jungletestnet.io/>

## 1️⃣ Create public and private key.

**Click on "Create Key" and it will generate a public and private key:**

<figure><img src="/files/FzSuzexXSywaIYeGHRmg" alt=""><figcaption></figcaption></figure>

![](/files/-McnnpJEeQRdp1HXS0nM)

{% hint style="warning" %}
We will save both keys and we can close the pop-up.
{% endhint %}

## 2️⃣ Create account.

<figure><img src="/files/aAEXre1SaGBxYVIiY6jJ" alt=""><figcaption></figcaption></figure>

**Click on "Create Account" and a pop-up will open where we will be asked for a user name for our account (It must have 12 characters) and 2 fields where we will have to paste our public key.**

![](/files/-McnpZvyNeJT6MJH6j_p)

{% hint style="success" %}
Once filled in with the account name and the public key in both fields, we complete the captcha and click on create. This will automatically create the account with the name "demosniceone" as shown in the example.

If everything has worked correctly we will receive the following message:
{% endhint %}

![](/files/-McnqG03tJKgEuuwvgiL)

***-*****To confirm that the account has already been created, you can click on the "Account Info" link.**

<figure><img src="/files/4KcmLepU7dcz8ZyhWGEX" alt=""><figcaption></figcaption></figure>

*We must enter the name of the account that we have created and it will return a log with detailed information about it.*

![](/files/-Mcnr_8GQHv5Ty4BDsY8)

## 3️⃣ Add resources: EOS, RAM, CPU, NET.

**In order to be able to execute contract transactions and other functionalities, we will need to have EOS (Testnet) balance in our account as well as available CPU, NET and RAM resources.**

For them we will use the following functions **"Faucet & PowerUp"**

<figure><img src="/files/WQulvJjvXqu1pDH12HrY" alt=""><figcaption></figcaption></figure>

**-In the "Faucet" section we will simply put the name of the account in which we want to receive the EOS and then EOS will be sent to that account.**&#x20;

![A log will inform us that 100 EOS have been sent to the assigned account.](/files/-McntemqnYWpZUJg4eNT)

**-We will do the same process in the "PowerUp" section and this will assign a quota of CPU, NET and RAM to our account.**

![](/files/-McnueGqcsjDuYTDgJEx)

{% hint style="info" %}
Resources can be claimed as many times as necessary.
{% endhint %}

## ✅Your Jungle4 Testnet account will be ready with the necessary resources to start using it.

If you visit [Jungle4 Explorer](https://local.bloks.io/?nodeUrl=http%3A%2F%2Fjungle4.greymass.com\&systemDomain=eosio) and enter your account name, you will be able to see graphically the current resources available.


# Create NFT (contract)

## CONTRACT

**To start we will access the** [**SimpleAssets (Jungle4)**](https://local.bloks.io/account/simpleassets?nodeUrl=http%3A%2F%2Fjungle4.greymass.com\&systemDomain=eosio\&tab=Actions\&action=create)

Below we will see all the actions allowed by the contract.

![](/files/-McoV-_Klcqop5iGnsHq)

{% hint style="info" %}
To create the NFT we will use the "Create" action which will display the following form at the bottom of the pag&#x65;**.**
{% endhint %}

## FIELDS & VALUES

![](/files/-McoUbbgx6N2jOacF_cm)

These fields are in charge of filling in the information needed to compose the NFT and display it properly in its sections as shown in the example of the finished NFT.&#x20;

**-Author Field:** Here we will put the name of the creator's account, we will use the same one from which we coined the NFT, in this case "niceonedemos". (This will apply the Author information from section 2).

**-Category:** We must assign a category in which our NFT will be classified together with others that we create in the future and we want them to be under a specific category. In this case we have used "niconetest" because we want that all the NFT of test, are grouped in the same category. (This hata that in the section 2 the field "Category" is assigned and it is possible to access to all the NFT that contains this category).\
\
**-Owner:** Here we will put the account name that must be the actual owner of the NFT, not to be confused with the creator. In this case we have put our own account "niceonedemos" because we want to receive the NFT once it is minted. (This field will define in section 2 the NFT owner).\
\
**-iData:** Here we can add as much immutable information as we wish. This means that once the NFT is created this information cannot be modified again, not even by the creator of the NFT itself. (We will use this field to assign the name of the NFT in section 3, which will serve to assign a name to the NFT itself).

```
To assign a Name field and its corresponding value, we will use:

 {"name":"Test NFT"} 
```

**-mData:** Here we will have fields and values that can be modified and updated by the NFT creator at any time. (This will specify the fields and values of the section 4, )

```
Example of data structure to create fields and values used in the example.

{"img":"QmQBJXYeDmyR1QMcPrgtV54mrTeLL4kDyT58mhxBe2i5Zt","Data1":"1","Data2":"2"} 

```

Field "img" we can assign an image from IPFS which will be the one shown in section 1, as the representative image of the NFT. (In this case we add the "img" as mdata, in case it is necessary to update it in the future).

{% hint style="warning" %}
In both the iData and mData sections you can add as many fields and values as necessary following the structure shown, fields such as "name" and "img" are required for the NFT to have all the necessary information.

The value of section 2 "Product ID" is generated automatically and is a unique identifier of the NFT in question. (There are no 2 NFTs with the same "Product ID" even if they have the same fields and values.
{% endhint %}

**-Requireclaim:** If this option is checked, the specified owner must claim the NFT to have it in his account, otherwise he will receive the NFT in his account once it is minted.

{% hint style="success" %}
In this way we will have generated an NFT with all the basic information and belonging to a collection of 1/1 , since only 1 NFT has been created as this one.
{% endhint %}


