Open TonDNS opened 2 years ago
Hi @TonDNS this is under review
Hi @TonDNS this is under review
Thank you. The tool is useful and convenient. Works on large collections. Verified by our team. We publish in open source. If you like it and support, we will continue.
Summary
๐งจ TNT
TNT is an all-in-one command line tool to query, edit, and mint new Non-Fungible Tokens on The Open Network. Written in Kotlin it enables fully cross-platform experience with no extra dependencies and does not rely on any third-party services. Out-of-the-box multiple network configurations are provided, for easy use in mainnet (live TON network) as well as testnet, and sandbox for experiments and development.
Team: NFT Marketplace Libermall https://github.com/LiberMall
Installation
Currently, only JVM-based builds are available. Any JDK supporting Java 11+ is sufficient to run and use TNT.
./bin/tnt
to run commands.Getting Started
TNT features multiple commands to query, modify, and create new NFT items and collections on The Open Network blockchain.
It is important to note use of
--network=mainnet|testnet|sandbox
option in following examples to explicitly specify target network, as attempting to call an operation on a contract residing in a different network will inevitably fail. This option defaults totestnet
.Getting NFT Collection Information
In order to get NFT collection info, such as number of items in it or its owner account,
tnt collection
command is used as follows:Getting NFT Item Information
To get information about a particular NFT item, whether or not it belongs to any specific collection, use
tnt item
:Minting items and collections
Unlike other tools used for mint of NFT items and collections, TNT deploys a single-use wallet contract for each invocation of
tnt mint
command. Main reason for this is security, as it eliminates the need of passing around secret keys or mnemonic seed phrases. Whenever an NFT entity is deployed, ownership is then transferred to an actual owner account, that is assumed to have its secrets stored in a secure place. Another big reason is the ability to use more efficient contracts for deployment, such as high-load wallets, speeding up deployment of large collections. Importantly for testing, it also means that mint of the same entity multiple times will result in a new address being generated each time.On the other hand, because a new account is used each time, insufficient balance or any failure during TNT's run may result in funds being permanently locked in an inaccessible contract. Failure recovery functionality is planned to be implemented in the future, when this tool reaches its first stable release.
It is also important to note that at the moment there is no way to estimate processing fees required to run smart-contracts on TON, and because of this it is up to the user to provide sufficient amount of funds for this tool to operate. Approximate amounts are currently specified as constants, and can be modified by the user. As a general rule of thumb, minting a single item, whether standalone or in collection, will cost about ~0.3 TON. This amount includes worst case scenario blockchain fees and was choosen to be a safe default, in reality it costs less than 0.2 TON.
Specification file
For better portability, TNT reads desired item/collection properties from a specification JSON file. This means that the same collection may be deployed in testing network during development, and then simply minted according to the same specification in mainnet.
Please note, before TNT reaches stable version, specification format is a subject to change. Original files of the following examples can be found in the
examples
directory.Standalone item example specification
Here's an example of a specification, that will mint a standalone (meaning it does not belong to any collection) item when passed to
tnt mint
entities - an array of NFT entities (standalone items/collections) to mint. Single specification may contain multiple entities of any kind.
type - must be "item" for standalone items.
index - index of an item in the collection. Makes no difference for standalone items, and it is recommended to set it to "0" in this case.
owner - contract to be assigned as the owner of this item. After successful mint a transaction will be sent to this address. Base64(url) and raw addresses are supported, with special value
"none"
indicating empty owner. This will essentially "burn" this item, as it will not be possible to ever change its owner again.content - item content, its metadata. In this case it is a
"full_snake"
content kind, meaning it is a string containing a URL to off-chain JSON file that is encoded in "snake data" format.For more advanced users,
"cell"
kind of data may be used, where value is's a base64-encoded Bag-of-Cells with a single root cell that will be used as item's content.To mint this standalone item, use the following command:
And proceed with the instructions. You will have to send at least 0.3 TON to the newly generated wallet address in testnet.
Collection of items
For this, a slightly different specification is used:
entities - same as before, single specification may contain multiple items and collections to mint.
type - must be
"collection"
collection_content - metadata of this particular collection contract. Note the use of
"full_snake"
kind, it is important as wrong encoding may result in client applications not being able to read collection content properly.common_content - part of metadata that is common between all items of this collection. Usually this is the longest common part of URL to item metadata. Note the use of
"naked_snake"
kind, it is important because collection smart contract concatenates common content, with individual item content via its get method, producing valid "full_snake" snake data for the clients.owner - an address of account that will be able to modify collection metadata as well as mint more items.
royalty - this section contains information about royalties from each sale of any item in the collection.
royalty.numerator, royalty.denominator - these two properties specify percentage that will be sent to royalty holder on a sale. Maximum is 15% Percentage is computed as numerator/denominator, in this case it is 6.9%.
royalty.destination - address of an account that will receive the royalty. It is possible to set it to "none", as well as setting numerator and denominator to 0, which will essentially disable royalty functionality of the smart-contract.
items - an array of every item in the collection, specifying item's owner and content. Note that item order matters, first item is assigned index of 0, next has index of 1, and so on. TNT always obeys the original order of items.
In order to mint this collection, use the following command:
Proceed according to instructions, you will have to send at least 3 TON to the newly generated single-use address in testnet.
Reporting Issues
Please, use issues page to report any bugs, ask questions or suggest new features.
When reporting bus, make sure to provide as much helpful information as you can: operating system and its version, JDK version used to run TNT, exact command line you used and program's output you got.
TNT also creates log files for each invocation in system's temporary path, which is usually
/tmp
on Unix-like systems and%TEMP%
on Windows. Files are named astnt.<yyyyMMdd'T'HHmmss>.log
, middle part being the exact time of program startup. These log files are immensely helpful when troubleshooting.In future versions, this behaviour will be changed.
Budget estimation
2000
Context
(T)ON (N)FT (T)ool - All-in-One command-line utility to query, modify, and mint new NFTs on TON blockchain
KPI
Open-source
Suggested form of support
Financial support is not required. We are working for the benefit of TON.