##1. TVToken
https://etherscan.io/address/0xf3e693175db47264c99eca0f1c1c4a2c1aed3bd7
Основной контракт токена ERC20 (TV), токен используется как валюта во всех остальных контрактах проекта.
Перевод токенов с одного адреса на другой, адрес доставки может быть контрактом, если у него есть метод function onTokenReceived(address _from, uint256 _value, bytes _data) public returns (bytes4) для приема токенов.
function safeTransferFrom(address _from, address _to, uint256 _value, bytes _data)Метод для возврата токенов вслучае ошибок. Owner контракта может перевести токены с любого адреса на любой.
function revertFunds(address _from, address _to, uint256 _value) onlyOwner public returns (bool) ##2. TVCrowdsale
https://etherscan.io/address/0xaae1be740222fb3f1125a7326fce947bbdb62b7e
Контракт AllowanceCrowdsale для продажи TV . При продаже токены берутся с адреса _tokenWallet эфир поступает на адрес _wallet.
В связи с этим владелец адреса _tokenWallet должен установить allowance для контракта. Если он закончится, купить токены будет невозможно.
Устанавливает цену на TV. _rate это сколько полных TV (не units) покупатель получит за 1 эфир
function setRate(uint256 _rate) public onlyOwnerOrManager returns (bool) ##3. TVRefCrowdsale
https://etherscan.io/address/0x446fcf7b4bae4ae8d22bfb9d2b8c7e14f01aa211
Контракт для покупки TV через реферальную ссылку. Дополнительные токены беруться с адреса holder, поэтому необходим allowance для контракта.
Если у refAddress баланс TV больше TVThreshold или он добавлен в список исключений exceptAddresses,
при покупке токенов через этот метод дополнительный процент refPercentage идет на адрес refAddress.
function buyTokens(address refAddress) public payable##4. TVCoupon
https://etherscan.io/address/0x8f3061739ee46a2ad4e3a6967902c2e4c3aaf894
Контракт ERC721, имитирует бесплатный купон.
Функция для получения купона. Получить купон можно только адреса на котором есть TV. Один купон на один адрес.
function getToken() public ##5. TVPremium
https://etherscan.io/address/0x659777fa17fabed00c66358436bf62a0c9563fb7
Контракт ERC721, имитирует премиум аккаунт. При покупки можно использовать купон и получить скидку.
Покупка за эфир.
function changeAndBuyPremium(uint couponId) public payableВ случае перевода TV на адрес контракта будет вызван этот метод. Тем самым будет совершена покупка за TV.
function onTokenReceived(address _from, uint256 _value, bytes _data) public returns (bytes4)##6. TVArtWork
https://etherscan.io/address/0x589da521a764e977005a4fbd7a0e1b9593c1c62d
Контракт ERC721, имитирует авторский контент.
Покупка за эфир.
function changeAndBuy(uint tokenId) public payableВ случае перевода TV на адрес контракта будет вызван этот метод. Тем самым будет совершена покупка за TV.
function onTokenReceived(address _from, uint256 _value, bytes _data) public returns (bytes4)##7. TVNewYearPack
https://etherscan.io/address/0xaf02e195e68e3967fecde7d484ddba19dec55677
Контракт ERC721 праздничных токенов и их раздачи.
Получить праздничные токены. Один набор на один адрес.
function getPack() public##7. TVKey
https://etherscan.io/address/0x39643925006a9a0767eb2e10ce5df0ce1ee386ab
Контракт ERC721 (TVK), токен нужный для получения выигрыша в лотерее (TVLottery).
##8. TVLottery
https://etherscan.io/address/0xac851fd3c969f24acb688abba158703279fe6856
Контракт лотереи.
-
Сундук По сути, приз в лотереи. Можно получить приз если у тебя есть соответствующий токен ключа
struct Chest { uint id; uint lotteryId; uint percentage; - процент от банка в этом сундуке uint count; - количество этих сундуков uint keysCount; - количество оставшихся ключей (TVK) от сундука uint openedCount; - количество открытых сундуков bool created; } -
Коллекция Набор токенов, который нужно собрать. Токен должен быть ERC721 и иметь тип.
struct Collection { uint id; uint[] typeIds; - массив типов токенов в коллеции address[] tokens; - адреса контрактов токенов в коллекции uint chestId; - сундук, ключ (TVK) от которого получаешь, если собирешь коллекцию uint lotteryId; bool created; } -
Лоттерея Набор токенов, который нужно собрать. Токен должен быть ERC721 и иметь тип.
struct Lottery { uint id; address bank; - адрес с призовыми токенами (TV) uint[] collections; - коллекции, участвующие в данной лотереи uint bankPercentage; - остаток банка в процентах bool isActive; bool created; }
Создание и редактирование сундука
function setChest(
uint lotteryId,
uint id,
uint percentage,
uint count,
uint keysCount,
uint openedCount,
bool created
) public onlyOwnerOrManagerСоздание и редактирование коллекции
function setCollection(
uint id,
uint[] typeIds,
address[] tokens,
uint chestId,
uint lotteryId,
bool created
) public onlyOwnerOrManager Создание и редактирование лотереи
function setLottery(
uint id,
address bank,
uint[] _collections,
uint bankPercentage,
bool isActive,
bool created
) public onlyOwnerOrManagerПри передаче ключа TVK на адрес контракта будет вызван этот метод. На адрес с которого был послан ключ, будет переведен выигрыш в TV
function onERC721Received(
address _from,
uint256 _tokenId,
bytes
) public returns (bytes4)Метод для получения ключа TVK за собранную коллекцию. ТОкены коллекции не забираются, но использование помечаются.
function getKey(uint lotteryId, uint collectionId, uint[] elementIds) public returns (uint)