Bitcoin Forum
November 07, 2024, 08:21:18 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Получение курсов USD, RUB, EUR в смарт-контракт  (Read 671 times)
paramedic (OP)
Member
**
Offline Offline

Activity: 134
Merit: 10


View Profile
October 26, 2017, 04:32:05 PM
Last edit: October 26, 2017, 09:11:52 PM by paramedic
 #1

Добрый день, господа разработчики


В настоящее время мы делаем сервис, который позволит вашим смарт-контрактам получать курсы криптовалют к фиатным валютам в рамках одной транзакции. Например, курс ETH/USD или BTC/RUB и т.д.

Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату

Мы бы хотели предложить вам потестировать данный сервис

Мы создали смарт-контракт в тестовой сети rinkeby, который возвращает курс ETH/USD.
Курс обновляется приблизительно 1 раз в 3-7 минут на основании API Etherscan

Ниже расположен пример смарт-контракта, обращающийся к нашему сервису:


Code:
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
  }
}


В ваш смарт-контракт вам необходимо добавить абстрактный класс контракта:

Code:
contract AbstractDRate { 
 
    function getUSDRate() payable returns(uint);
}

Далее в коде вашего контракта вы создаете объект:

Code:
AbstractDRate my_DRate;  
my_DRate = AbstractDRate(addressOfDRate);
   
где addressOfDRate это адрес нашего контракта в тестовой сети rinkeby (0x0F196688e8289ceB6f3cF0A3F3e67f1e2B0F5E55)

Далее вы можете обращаться к методу getUSDRate, который будет возвращать вам курс ETH/USD в центах
Вызов данного метода требует оплаты 0.01 ETH (тестовый эфир в rinkeby)

То есть вся строка вызова выглядит следующим образом:

Code:
my_DRate.getUSDRate.value(msg.value)();

где msg.value это сумма в ETH, которая будет отправлена. Её вам надо передать при вызове функции test данного смарт-контракта


Хотелось бы услышать ваши комментарии и замечания, а также интересен ли вам подобный сервис в основной сети Ethereum?

liafloor
Full Member
***
Offline Offline

Activity: 364
Merit: 102


[Proof-of-contract protocol]


View Profile
October 26, 2017, 05:41:14 PM
 #2

Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату
   ----- пока такого не встречал, чтобы цена во время ICO привязывалась к фиату. Первична всегда крипта - например, за 1 эфир дают 400 каких-то токенов. Хотя где-то может и проводят подобные ICO, за всем не уследишь)

paramedic (OP)
Member
**
Offline Offline

Activity: 134
Merit: 10


View Profile
October 26, 2017, 06:24:29 PM
 #3

пока такого не встречал, чтобы цена во время ICO привязывалась к фиату. Первична всегда крипта - например, за 1 эфир дают 400 каких-то токенов. Хотя где-то может и проводят подобные ICO, за всем не уследишь)

Мы такой сервис и сделали, потому что у заказчиков смарт-контрактов в последнее время наметилась тенденция указывать стоимость токена в USD или RUB. Это сделано чтобы, избежать высокой волатильности криптовалют, особенно если ICO проводится на длинной дистанции.

Paymon
Full Member
***
Offline Offline

Activity: 378
Merit: 101



View Profile
October 28, 2017, 11:30:42 AM
 #4

пока такого не встречал, чтобы цена во время ICO привязывалась к фиату. Первична всегда крипта - например, за 1 эфир дают 400 каких-то токенов. Хотя где-то может и проводят подобные ICO, за всем не уследишь)

Мы такой сервис и сделали, потому что у заказчиков смарт-контрактов в последнее время наметилась тенденция указывать стоимость токена в USD или RUB. Это сделано чтобы, избежать высокой волатильности криптовалют, особенно если ICO проводится на длинной дистанции.

Хм, интересно. Вероятно протестим, спасибо.
paramedic (OP)
Member
**
Offline Offline

Activity: 134
Merit: 10


View Profile
October 30, 2017, 06:19:44 PM
 #5


Хм, интересно. Вероятно протестим, спасибо.

Если есть вопросы по использованию, задавайте. С радостью поможем!

satrum
Full Member
***
Offline Offline

Activity: 252
Merit: 101



View Profile
October 31, 2017, 06:07:38 AM
 #6

Если хотите знать про ICO где такое нужно - это наш проект sintez.global. На втором этапе смарт-контракт учитывает цену токена за предудущий период, сначала в эфирах, потом когда он появиться на бирже - в курсах к баксу. Так что вы полезную штуку делаете - подтверждаю. Только вот ваш оракул если он один - является точкой отказа, нужно создавать сеть оракулов, построенную тоже на децентрализованных принципах, правда консенсус конечно не на блокчейне придеться пилить.
satrum
Full Member
***
Offline Offline

Activity: 252
Merit: 101



View Profile
October 31, 2017, 06:08:24 AM
 #7

А и да еще гляньте в сторону проекта LINK - они тоже хотят котировки и всякие внешние данные в блокчейн писать.
paramedic (OP)
Member
**
Offline Offline

Activity: 134
Merit: 10


View Profile
October 31, 2017, 03:50:49 PM
 #8

А и да еще гляньте в сторону проекта LINK - они тоже хотят котировки и всякие внешние данные в блокчейн писать.

Вы говорите про ChainLink?

Cryptomania12
Full Member
***
Offline Offline

Activity: 490
Merit: 103



View Profile
November 01, 2017, 01:24:20 AM
 #9

Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату
   ----- пока такого не встречал, чтобы цена во время ICO привязывалась к фиату. Первична всегда крипта - например, за 1 эфир дают 400 каких-то токенов. Хотя где-то может и проводят подобные ICO, за всем не уследишь)

были такие проекты бетон, точно видел и не один. Да взять тот же red pulse, за NEO в эквиваленте 50$ давали 1000 токенов.
Coin-1
Legendary
*
Offline Offline

Activity: 2618
Merit: 2304



View Profile
November 01, 2017, 03:57:48 AM
 #10

Code:
my_DRate.getUSDRate.value(msg.value)();
Лишь бы команды выдавали реальные и актуальные значения, а не выдуманные или устаревшие.
vasay.ru
Newbie
*
Offline Offline

Activity: 1
Merit: 0


View Profile
November 01, 2017, 05:08:05 PM
 #11

Лишь бы команды выдавали реальные и актуальные значения, а не выдуманные или устаревшие.

На данный момент мы думаем над способом подтверждения верности данных.

Пока, это видится как создание некоего аналога PageSigner ( https://tlsnotary.org/pagesigner.html ), через который бы шло обращение нашего сервиса к API бирж, являющихся источником данных о курсах.

TRexx
Member
**
Offline Offline

Activity: 183
Merit: 10


View Profile
November 02, 2017, 10:16:48 PM
 #12

Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату
   ----- пока такого не встречал, чтобы цена во время ICO привязывалась к фиату. Первична всегда крипта - например, за 1 эфир дают 400 каких-то токенов. Хотя где-то может и проводят подобные ICO, за всем не уследишь)

были такие проекты бетон, точно видел и не один. Да взять тот же red pulse, за NEO в эквиваленте 50$ давали 1000 токенов.

 Даже к кубометру песка видел привязку  Grin
paramedic (OP)
Member
**
Offline Offline

Activity: 134
Merit: 10


View Profile
November 03, 2017, 01:21:04 PM
 #13

Лишь бы команды выдавали реальные и актуальные значения, а не выдуманные или устаревшие.

Данные о курсе ETH/USD сейчас берутся с Etherscan

deh222
Copper Member
Jr. Member
*
Offline Offline

Activity: 76
Merit: 1


View Profile
February 23, 2018, 12:49:37 PM
 #14

Добрый день. Очень интересно. Такой вопрос. Мы хотим привязать свои токены к Usd (не ICO) взаиморасчеты. Подойдет?


Добрый день, господа разработчики


В настоящее время мы делаем сервис, который позволит вашим смарт-контрактам получать курсы криптовалют к фиатным валютам в рамках одной транзакции. Например, курс ETH/USD или BTC/RUB и т.д.

Для чего это нужно?
Например, для проведения ICO где стоимость токена привязана к фиату

Мы бы хотели предложить вам потестировать данный сервис

Мы создали смарт-контракт в тестовой сети rinkeby, который возвращает курс ETH/USD.
Курс обновляется приблизительно 1 раз в 3-7 минут на основании API Etherscan

Ниже расположен пример смарт-контракта, обращающийся к нашему сервису:


Code:
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
  }
}


В ваш смарт-контракт вам необходимо добавить абстрактный класс контракта:

Code:
contract AbstractDRate { 
 
    function getUSDRate() payable returns(uint);
}

Далее в коде вашего контракта вы создаете объект:

Code:
AbstractDRate my_DRate;  
my_DRate = AbstractDRate(addressOfDRate);
   
где addressOfDRate это адрес нашего контракта в тестовой сети rinkeby (0x0F196688e8289ceB6f3cF0A3F3e67f1e2B0F5E55)

Далее вы можете обращаться к методу getUSDRate, который будет возвращать вам курс ETH/USD в центах
Вызов данного метода требует оплаты 0.01 ETH (тестовый эфир в rinkeby)

То есть вся строка вызова выглядит следующим образом:

Code:
my_DRate.getUSDRate.value(msg.value)();

где msg.value это сумма в ETH, которая будет отправлена. Её вам надо передать при вызове функции test данного смарт-контракта


Хотелось бы услышать ваши комментарии и замечания, а также интересен ли вам подобный сервис в основной сети Ethereum?

Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!