Добрый день, господа разработчики
В настоящее время мы делаем сервис, который позволит вашим смарт-контрактам получать курсы криптовалют к фиатным валютам в рамках одной транзакции. Например, курс ETH/USD или BTC/RUB и т.д.
Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату
Мы бы хотели предложить вам потестировать данный сервис
Мы создали смарт-контракт
в тестовой сети rinkeby, который возвращает курс ETH/USD.
Курс обновляется приблизительно 1 раз в 3-7 минут на основании API Etherscan
Ниже расположен пример смарт-контракта, обращающийся к нашему сервису:
pragma solidity ^0.4.13;
contract AbstractDRate {
function getUSDRate() payable returns(uint);
}
contract Test2DRate {
uint public USDRate;
function test() payable returns(uint) {
address addressOfDRate = 0x0F196688e8289ceB6f3cF0A3F3e67f1e2B0F5E55;
USDRate = 0;
AbstractDRate my_DRate;
my_DRate = AbstractDRate(addressOfDRate);
USDRate = my_DRate.getUSDRate.value(msg.value)(); // 0.01 ETH minimum
}
}
В ваш смарт-контракт вам необходимо добавить абстрактный класс контракта:
contract AbstractDRate {
function getUSDRate() payable returns(uint);
}
Далее в коде вашего контракта вы создаете объект:
AbstractDRate my_DRate;
my_DRate = AbstractDRate(addressOfDRate);
где
addressOfDRate это адрес нашего контракта в тестовой сети rinkeby (0x0F196688e8289ceB6f3cF0A3F3e67f1e2B0F5E55)
Далее вы можете обращаться к методу
getUSDRate, который будет возвращать вам курс ETH/USD в центах
Вызов данного метода требует оплаты 0.01 ETH (тестовый эфир в rinkeby)
То есть вся строка вызова выглядит следующим образом:
my_DRate.getUSDRate.value(msg.value)();
где
msg.value это сумма в ETH, которая будет отправлена. Её вам надо передать при вызове функции
test данного смарт-контракта
Хотелось бы услышать ваши комментарии и замечания, а также интересен ли вам подобный сервис в основной сети Ethereum?