...
This commit is contained in:
158
collections/projectinca/specs_blockchain/generator_token.md
Normal file
158
collections/projectinca/specs_blockchain/generator_token.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user