info_tfgrid/collections/projectinca/specs_blockchain/generator_token.md

158 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

2024-08-17 11:22:25 +00:00
# Generator Token
A Generator token is a token which mints tokens over a certain period following well defined properties and the tokens are then sent fo the destination_address as specified by the owner
### Properties
The properties:
- name e.g. INCAG in case of ThreeFold
- owner_address, is the person who owns the generator token
- dest_token_name e.g. INCA in case of ThreeFold
- dest_chain e.g. SOLANA
- dest_address, where the minted tokens will be sent too
- owner can change the dest address
- description
- code = smart contract related
- smart_contract_addr: address of the smart contract
- this smart contract executes the code as needed to execute this contract, this smart contract will ask the minter code to create tokens as needed.
- minter related
- minter_contract_addr: address of the smart contract which generates the tokens (minting)
- info about minter, the minter creates the Generator Tokens as well as the Destination Tokens
- source related
- can be empty if there is no source token
- source_token_name e.g. TFT (can also be address)
- source_token_chain e.g. STELLAR
- sourcetable
- list of the sourcetokens (amount, src_address) e.g. 1000 TFT was input of this INCAG token.
- mintingtable
- nr of $dest_token_name e.g. INCA to be minted over which time
- is a table with date + minting amount of our specific "dest_token" which is generated (minted) over time
- acceleration_table
- accelerated minting rules
- per row we find a date, oracleaddress, minimum, maximum, nrminted e.g. if oracle about INCA price is higher than 0.5 USD, there is no max, then we mint e.g. 1000 INCA on a specific Date
the INCAG
- if not specified then the owner of the INCAG can freely define the destination
- clawback (stop the minting and if any incoming tokens, send them back to the originator)
- clawback_multisig_accounts e.g. accounts which can instantiate a clawback
- clawback_multisig_min_signature e.g. nr of signatures needed for clawback
- clawback_address (*is only relevant if the originating tokens come from somewhere*)
- when clawback is executed it basically means the generator token no longer exists
### Example Generator Token
```json
{
"name": "INCAG",
"owner_address": "0x9876543210987654321098765432109876543210",
"dest_token_name": "INCA",
"dest_chain": "SOLANA",
"dest_address": "0x9876543210987654321098765432109876543210",
"description": "INCA-G token for generating INCA (Internet Capacity token) over time",
"smart_contract_addr": "0x1234567890123456789012345678901234567890",
"minter_contract_addr": "0x1234567890123456789012345678901234567890",
"source": {
"source_token_name": "TFT",
"source_token_chain": "STELLAR",
"sourcetable": [
{
"amount": 1000,
"src_address": "GDFZ...STELLAR...ADDRESS"
}
]
},
"mintingtable": [
{
"date": "2026-08-17",
"minting_amount": 100
},
{
"date": "2026-09-17",
"minting_amount": 200
},
{
"date": "2026-10-17",
"minting_amount": 700
}
],
"acceleration_table": [
{
"date": "2025-08-17",
"oracle_address": "0xABCDEF1234567890ABCDEF1234567890ABCDEF12",
"minimum": 0.5,
"maximum": null,
"nr_minted": 500
},
{
"date": "2025-12-17",
"oracle_address": "0xABCDEF1234567890ABCDEF1234567890ABCDEF12",
"minimum": 0.75,
"maximum": null,
"nr_minted": 500
}
],
"clawback": {
"clawback_multisig_accounts": [
"GABC...STELLAR...ADDRESS1",
"GDEF...STELLAR...ADDRESS2",
"GHIJ...STELLAR...ADDRESS3",
"GKLM...STELLAR...ADDRESS4",
"GNOP...STELLAR...ADDRESS5"
],
"clawback_multisig_min_signature": 3
}
}
```
```mermaid
sequenceDiagram
participant Owner
participant GeneratorToken
participant SmartContract
participant MinterContract
participant DestChain
participant Oracle
Owner->>GeneratorToken: Create Generator Token
GeneratorToken->>SmartContract: Initialize
loop For each date in mintingtable
SmartContract->>SmartContract: Check current date
alt Current date matches mintingtable date
SmartContract->>MinterContract: Request minting
MinterContract->>DestChain: Mint tokens
DestChain->>Owner: Transfer minted tokens to dest_address
end
end
loop For each date in acceleration_table
SmartContract->>SmartContract: Check current date
alt Current date matches acceleration_table date
SmartContract->>Oracle: Request price data
Oracle-->>SmartContract: Return price data
alt Price meets acceleration criteria
SmartContract->>MinterContract: Request accelerated minting
MinterContract->>DestChain: Mint additional tokens
DestChain->>Owner: Transfer additional minted tokens to dest_address
end
end
end
alt Clawback initiated
Owner->>GeneratorToken: Request clawback
loop Until clawback_multisig_min_signature reached
GeneratorToken->>GeneratorToken: Collect signatures
end
GeneratorToken->>SmartContract: Execute clawback
SmartContract->>SmartContract: Stop minting
alt Source tokens exist
SmartContract->>Owner: Return source tokens
end
SmartContract->>GeneratorToken: Deactivate Generator Token
end
Owner->>GeneratorToken: Change dest_address
GeneratorToken->>SmartContract: Update dest_address
```