This repository contains the rotki assets database and all the asset addition upgrades.
Assets are pulled from the master branch for releases and from develop for all other ways of running rotki.
So when we make a new release develop should be merged to master.
Updates are organized in the appropriate directories under updates
. Each updates has its own directory and sql file. For example update 1 would be: updates/1/updates.sql
.
Each sql file contains a number of statements. For each changes introduced we need to have two lines. The first line is the actual change such as
UPDATE assets SET swapped_for="eip155:1/erc20:0x1B175474E89094C44Da98b954EedeAC495271d0F" WHERE identifier="eip155:1/erc20:0xC2FEC534c461c45533e142f724d0e3930650929c";
or
INSERT INTO assets(identifier,type, started, swapped_for) VALUES("eip155:1/erc20:0xC2FEC534c461c45533e142f724d0e3930650929c", "C", 123, NULL); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES("eip155:1/erc20:0xC2FEC534c461c45533e142f724d0e3930650929c", "A", "A", "0xC2FEC534c461c45533e142f724d0e3930650929c", 18, NULL); INSERT INTO common_asset_details(identifier, name, symbol, coingecko, cryptocompare, forked) VALUES("eip155:1/erc20:0xC2FEC534c461c45533e142f724d0e3930650929c", "AKB token", "AKB", NULL, "AIDU", NULL);
and the second line needs to be a simple insertion statement. If the first line, the actual change, is also just inserting a new asset then the seconde line can simply be an *
which means "the same thing".
Make sure that the updates/info.json
file is always kept up to date with the updates, the amount of changes in each update and what's the min/max schema that each update can be applied to.
Only the last one needs to be done manually. The rest can be taken care of by running the populate_infojson.py
script.
INSERT INTO assets(identifier,type, started, swapped_for) VALUES("eip155:1/erc20:0x422866a8F0b032c5cf1DfBDEf31A20F4509562b0", "C", 123, NULL); INSERT INTO evm_tokens(identifier, token_kind, chain, address, decimals, protocol) VALUES("eip155:1/erc20:0xC2FEC534c461c45533e142f724d0e3930650929c", "A", "A", "0xC2FEC534c461c45533e142f724d0e3930650929c", 18, NULL); INSERT INTO common_asset_details(identifier, name, symbol, coingecko, cryptocompare, forked) VALUES("eip155:1/erc20:0x422866a8F0b032c5cf1DfBDEf31A20F4509562b0", "Adshares", "ADST", "adshares", "ADS", NULL);
An evm token addition needs to look like the above. First an insertion into the assets
table:
- identifier: The asset identifier.
- asset_type: The type of the asset. Must be one of the characters from here.
- swapped_for: Optional, can be
NULL
. A string representing the identifier of the asset this asset can be swapped for. For example GLM for GNT. - started: Optional, can be
NULL
. An integer representing a Unix timestamp for when the asset started existing.
Second insertion into the common_asset_details
table:
- identifier: The asset identifier.
- name: The name of the asset. Can also technically be
NULL
but should be avoided. - symbol: The symbol of the asset. Can also technically be
NULL
but should be avoided. - coingecko: Optional, can be
NULL
. A string representing the coingecko identifier for the asset. - cryptocompare: Optional, can be
NULL
. A string representing the cryptocompare identifier for the asset. - forked: Optional value representing another asset out of which this asset is forked from.
And then insert into the evm_tokens
table:
- identifier: The asset identifier.
- token_kind: Type of the token. Supports values can be found here
- chain: Chain of the token. Supported values can be found here
- address: A valid AND checksummed evm address
- decimals: The decimals of the ethereum token. An integer. 0-18. Can also technically be
NULL
but should be avoided. - protocol: Optional. Can be
NULL
. The protocol of the ethereum token. For example"uniswap"
for uniswap LP tokens e.t.c.
INSERT INTO assets(identifier,type, started, swapped_for) VALUES("121-ada-FADS-as", "F", NULL, NULL); INSERT INTO common_asset_details(identifier, name, symbol, coingecko, cryptocompare, forked) VALUES("121-ada-FADS-as", "A name", "SYMBOL", "", "", "BTC");
A non evm token addition needs to look like the above. It should be an insertion to the assets
and common_asset_details
table for exactly the same fields as outlined in the previous section.
To detect some errors we have a test that checks every entry:
-
Install the dependencies with
pip install -r requirements.txt
-
Run the tests with
pytest tests
To generate a list of changes for a specific version use
python -m tools.generate_changelog -v 1