Децентрализованный ценовой поток и веб-сайт поставщик данных для смарт-контрактов, которые нуждаются в финансовой, спортивной и другой разнообразной полезной информации, которую можно найти: On-
, and/or
или Off-Chain
.
Высоконадежный oracle агрегатор для приложений DeFi на базе Ethereum, которым требуются финансовые данные внешнего мира.
Вебсайт и общая информация: orfeed.org
Камень реальности блокчейна (отсылка к фильму марвел) блог
Пример использования блог
OrFeed DAO блог с предложением
Интерфейс Etherscan Smart Contract: https://etherscan.io/dapp/0x8316b082621cfedab95bf4a44a1d4b64a6ffc336 (getExchangeRate это хорошее место для начала)
Регистр приложений Oracle dApp
Вставьте этот интерфейс в начало вашего smart-contract или в выбранный вами файл в вашем проекте dApp.
interface OrFeedInterface {
function getExchangeRate ( string fromSymbol, string toSymbol, string venue, uint256 amount ) external view returns ( uint256 );
function getTokenDecimalCount ( address tokenAddress ) external view returns ( uint256 );
function getTokenAddress ( string symbol ) external view returns ( address );
function getSynthBytes32 ( string symbol ) external view returns ( bytes32 );
function getForexAddress ( string symbol ) external view returns ( address );
function requestAsyncEvent(string eventName, string source) external returns(string);
function getAsyncEventResult(string eventName, string source, string referenceId) external view returns (string);
}
Чтобы инициализировать OrFeed, просто включите этот код:
OrFeedInterface orfeed= OrFeedinterface(0x8316b082621cfedab95bf4a44a1d4b64a6ffc336);
Одна из лучших особенностей OrFeed заключается в том, что OrFeed автоматически определяет, какой тип актива вы ищете (хотя данные могут поступать от разных поставщиков), в качестве параметра "venue" при выполнении вызова getExchangeRate
. Например, вы можете получить цену для ETH / USD так же, как вы получаете цену для JPY / ETH. Третий параметр - venue. Используйте пустой ('') для обозревания по умолчанию. В будущем вы можете ссылаться на несколько venues/providers(мест / поставщиков), чтобы получить их данные и убрать любые, которые слишком сильно отличаются от средних.
uint jpyusdPrice = orfeed.getExchangeRate("JPY", "USD", "DEFAULT", 100000);
// returns 920 (or $920.00)
Примечание: Замените "DEFAULT" провайдером оракула, от которого вы хотите получать данные. Например, если вы хотите узнать цену Uniswap на стороне покупки, используйте "BUY-UNISWAP-EXCHANGE". Если вы хотите, чтобы данные о продажах в Kyber были одинаковыми, вы можете использовать "SELL-KYBER-EXCHANGE". Поскольку у ERC-20 много, много целых чисел, при получении цены от токена к токену обязательно используйте очень большие суммы ... 1000000000 DAI меньше, чем, например, один пенни из-за делимости на 1018.
Больше примеров:
uint price = orfeed.getExchangeRate("ETH", "USDC", "BUY-KYBER-EXCHANGE", 100000000000000);
uint price = orfeed.getExchangeRate("BTC", "DAI", "SELL-UNISWAP-EXCHANGE", 100);
uint price = orfeed.getExchangeRate("MKR", "EUR", "", 100000000000000);
Экспериментально:
uint price = orfeed.getExchangeRate("AAPL", "USD", "PROVIDER1", 1);
Кроме того, вы можете создавать хитрые вещи, например генерировать случайное число между двумя числами, используя метод getExchangeRate, который вызывает 'random'(«случайное») пространство имен oracle в реестре oracle, а затем вычисляет число на основе метки времени блока, сложности блока, а также динамическая цена BTC, ETH и DAI на Kyber (часто изменяется во время синтаксического анализа блока, поэтому будет сложнее в реализации, чем обычный метод хэша блока-времени / сложности):
uint price = orfeed.getExchangeRate("10", "50", "random", 0);
Вы можете получить доступ к функциональности getExchangeRate через вызовы RESTful API, например:
https://api.orfeed.org/getExchangeRate?fromSymbol=JPY&toSymbol=USD&venue=DEFAULT&amount=10000000000000000
В ближайшее время в RESTful будут добавлены дополнительные функции умного контракта OrFeed. Вы можете найти исходный код для АПИ приложения Node.js в /nodeJSAppExamples/orfeedapi
Вы можете зарегистрировать имя провайдера и подключить его к своему заказному oracle договору (в стиле DNS) через реестр Oracle OrFeed: [здесь] (https://etherscan.io/dapp/0x74b5ce2330389391cc61bf2287bdc9ac73757891), вызвав функцию registerOracle. Так же, вы можете передать имя оракула, предоставить контактную информацию на случай, если вы планируете его продать, и найти других поставщиков оракула с помощью смарт-контракта. Пример умного контракта oracle, который будет совместим с прокси-контрактом OrFeed, доступен в /contracts/examples/ProvideDataExamples/userGeneratedOracleExample.sol (очень простой пример, который возвращает 500 или 2) Как только вы развернете свой договор и зарегистрируете его в реестре (заплатив небольшую сумму ETH, чтобы предотвратить рассылку имен), вы можете проверить/подтвердить свою регистрацию, вызвав функцию getOracleAddress.
Поскольку в реестре OrFeed регистрируются более авторитетные, а также ненадежные интеллектуальные контракты Oracle, мы обновим новый список в качестве справочного.
Asset | Example Provider (Venue) | Type |
---|---|---|
ETH | DEFAULT | Cryptocurrency |
BTC | DEFAULT | Cryptocurrency |
DAI | BUY-KYBER-EXCHANGE | Token |
USDC | SELL-UNISWAP-EXCHANGE | Token |
MKR | DEFAULT | Token |
KNC | DEFAULT | Token |
ZRX | DEFAULT | Token |
TUSD | DEFAULT | Token |
SNX | DEFAULT | Token |
CUSDC | DEFAULT | Token |
BAT | DEFAULT | Token |
OMG | DEFAULT | Token |
SAI | DEFAULT | Token |
JPY | DEFAULT | Forex |
EUR | DEFAULT | Forex |
CHF | DEFAULT | Forex |
USD | DEFAULT | Forex |
GBP | DEFAULT | Forex |
AAPL | PROVIDER1 | Equity |
MSFT | PROVIDER1 | Equity |
GOOGL | PROVIDER1 | Equity |
NFLX | PROVIDER1 | Equity |
BRK.A | PROVIDER1 | Equity |
FB | PROVIDER1 | Equity |
BABA | PROVIDER1 | Equity |
V | PROVIDER1 | Equity |
JNJ | PROVIDER1 | Equity |
TSLA | PROVIDER1 | Equity |
JPM | PROVIDER1 | Equity |
DIS | PROVIDER1 | Equity |
SPX | PROVIDER1 | ETF |
VOO | PROVIDER1 | ETF |
QQQ | PROVIDER1 | ETF |
GLD | PROVIDER1 | ETF |
VXX | PROVIDER1 | ETF |
contract/pegTokenExample.sol содержит код шаблона и ссылку на действующий контракт для токена, использующего данные OrFeed, которые привязаны к значению off-chain актива (в примере Alibaba Stock). Мы с нетерпением ждем менее примитивных примеров, которые используют DAO, передовые методы обеспечения итд. Кроме того, contract/levFacility.sol находится на очень ранних стадиях написания и является началом создания токена, который имеет встроенную кредитную линию для коротких/длинных кредитов. для маржинальной торговли фьючерсами, рассчитанными по данным OrFeed (очень рано).
Примечание: "PROVIDER1" был первым внешним поставщиком финансовых данных для системы oracle, и вы можете проверить обновления с этого адреса в сети: 0xc807bef0cc81911a34b1a9a0dad29fd78fa7e703
. Пример кода для запуска собственного оракула внешних данных находится в /contracts/examples/ProvideDataExamples/stockETFPriceContract.sol (smart contract) и /contract/examples/oraclenodeExampleApp (для приложения узла для взаимодействия с этим умным контрактом)
Папка contract/examples содержит контракты как для записи данных в качестве поставщика oracle, так и для использования данных в качестве потребителя oracle.
Папка /nodeJSAppExamples содержит приложения Node.js, которые взаимодействуют со смарт-контрактами, которые либо читают, либо записывают данные oracle.
Получение данных от [Chainlink] (https://chain.link/) с помощью OrFeed
Вы можете получать данные с веб-сайта (off-chain) асинхронно через интеграцию Chainlink. Чтобы использовать эту функцию, выполните следующие действия:
-
Убедитесь, что в кошельке, с которого вы делаете запрос, есть [LINK] (https://etherscan.io/token/0x514910771af9ca656af840dff83e8264ecf986ca) монеты. Если у вас нет LINK, вы можете посетить Uniswap.io или Kyberswap, чтобы конвертировать Ether в LINK. Вам потребуется .1 LINK на запрос.
-
Утвердите контракт с прокси-сервером OrFeed Chainlink, чтобы использовать монеты LINK для оплаты комиссий Chainlink. Перейдите на страницу https://etherscan.io/token/0x514910771af9ca656af840dff83e8264ecf986ca#writeContract и используйте "Approve" функцию. В поле "_spender" вставьте этот адрес:
0xa0f806d435f6acaf57c60d034e57666d21294c47
. В поле "_amount" введите:100000000000000000000000000
. Кроме того, в верхней части страницы, прямо над функцией подтверждения, обязательно нажмите «Подключиться к Web3».
Дополнительно, для субсидированных комиссий LINK, вы можете использовать токен PRFT для оплаты сборов (.01 PRFT за запрос). Перейдите на страницу https://etherscan.io/token/0xc5cea8292e514405967d958c2325106f2f48da77#writeContract и воспользуйтесь "Approve" функцией так же, как вы сделали бы с LINK, в примере выше.
Теперь вы готовы!
string status = orfeed.requestAsyncEvent("https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD", "CHAINLINK");
После 1-3 блоков Chainlink отправит данные веб-сайта в OrFeed, и вы сможете получить доступ к этим данным без проведения транзакции (синхронно). Кроме того, вы можете получить доступ к данным с веб-сайтов, за которые уже заплатили другие, введя их URL.
string result = orfeed.getAsyncEventResult("https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD", "CHAINLINK", "");
Подобные интеграции с Augur, Provable и Band Protocol скоро появятся.
Как только ваша транзакция будет подтверждена в блокчейне, Chainlink ожидает 1-3 блока и отправляет ответ от их smart contract.
Чтобы проверить, хорошо ли работают контракты в соответствующих сетях, выполните следующие действия:
- Установите
node.js
в вашей системе / среде, если он еще не установлен. - Установите truffle and globall, как только
node.js
закончит установку, т.е.yarn global add truffle
, а затем установите проект dev-dependencies, то естьyarn install
- Создайте файл
.secrets
в корневой папке этого проекта и вставьте в негомнемоническую фразу
кошелька, который вы хотите использовать для тестирования в соответствующей сети, например: mainnet, kovan или rinkeby. - Введите infura
project-ID
для проекта infura, который вы используете для тестирования в любой из сетей, в файлеtruffle-config.js
. - Убедитесь, что в кошельке достаточно eth для тестирования. Примерно
5$
должно быть достаточно как для развертывания контракта, так и для тестирования. - Наконец, выполните одну из следующих команд для проверки контрактов, в зависимости от сети:
truffle test --mainnet
для основной сети ethereum будьте осторожны, так как это будет стоить вам реальных денег.truffle test --kovan
для тестовой сети kovan.truffle test --rinkeby
для тестовой сети rinkeby.
Прочитайте полную документацию orfeed.org/docs
Распространенными поставщиками данных по умолчанию, когда параметры места остаются пустыми, являются Kyber, Uniswap, Chainlink и Synthetix.
Будущие частные/премиум-данные могут быть предоставлены следующим образом (хотя мы ожидаем предложений и приглашаем вас присоединиться к OrFeed DAO, где мы будем голосовать за будущие управленческие решения):
Они часто могут устаревать, так как мы используем подход MainNet-first, так как большая часть функциональности OrFeed не требует gas, поскольку OrFeed служит прокси для многих других контрактов.
Kovan: 0x31a29958301c407d4b4bf0d53dac1f2d154d9d8d
Rinkeby: 0x97875355ef55ae35613029df8b1c8cf8f89c9066
Vitalik Buterin: Minimal Anti-Collusion Infrastructure
Исходный код OrFeed licensed under the Apache 2.0 license, и мы рады новым разработчикам. (Таким как тот, который перевёл всё это на русский :-))
Предпочтительной ветвью для пул реквестов является ветвь develop
. Кроме того, мы часто добавляем небольшие денежные бонусы на Gitcoin для критически важных инициатив.
Спасибо вам большое!