Руководство по API зеркального узла Hedera.

Технологии блокчейн и пространство web3 в последние годы переживают огромный рост. Многие считают, что блокчейн способен забрать власть у корпораций и передать ее в руки частных лиц, позволяя им контролировать свои данные в Интернете.

Эта общая мысль, вера и видение привели к разработке различных блокчейнов, таких как Bitcoin, Ethereum и Solana. Хотя они остаются самыми популярными технологиями блокчейн на данный момент, есть и другие компании, создающие технологии блокчейн, чтобы действительно вернуть власть человеку, и одна из них — Hedera.

Итак, что же такое Hedera?

Hedera — это публичная сеть и орган управления с открытым исходным кодом, доказательством доли, для создания и развертывания децентрализованных приложений. Она предлагает разработчикам три основных сервиса: смарт-контракты на базе Solidity, консенсус и услуги токенов. Уникальность Hedera заключается в том, что она невероятно быстрая, энергоэффективная (углеродно-негативная) и безопасная — эти преимущества можно отнести к алгоритму консенсуса на основе хэшграфа. — hedera.com

Говоря простым языком, цель сети Hedera — дать каждому человеку возможность создавать и контролировать то, что происходит в его онлайн-пространстве, не обменивая ничего взамен, например, свое время. Эта сеть — не просто платформа для обработки транзакций и разработки смарт-контрактов; она стремится помочь вам сделать ваш цифровой мир таким, каким вы хотите его видеть.

Теперь, когда вы поняли, что представляет собой Hedera, что такое API Mirror Node?

API зеркального узла

API зеркального узла Hedera — это как дневник или база данных, в которой хранится история всех транзакций, произошедших в основной сети, тестовой сети и сети предварительного просмотра. Если вы не знакомы с этими терминами, вот что они означают:

  • Mainnet (основная сеть): Основная сеть — это полностью разработанная, стабильная и развернутая сеть Hedera. Это рабочая часть сети.
  • Testnet (тестовая сеть): Тестовая сеть — это сеть, которая позволяет разработчикам проводить различные эксперименты, не рискуя реальными средствами (или $HBAR в данном случае) и не нарушая работу реальной сети.
  • Previewnet (сеть предварительного просмотра): Разработчики Hedera хотели иметь возможность тестировать новые функции до того, как они будут развернуты в основной сети или тестовой сети. С этой целью Hedera создала сеть предварительного просмотра, где разработчики могли видеть новые функции и вносить вклады/исправления до их развертывания в основных сетях.

API Mirror Node для каждой сети (mainnet, testnet и previewnet) состоит из девяти различных конечных точек для получения различной информации, которые перечислены ниже:

  • Счета.
  • Балансы.
  • Блоки.
  • Контракты.
  • Сети.
  • Расписания.
  • Токены.
  • Темы.
  • Транзакции.

В этой статье мы рассмотрим конечные точки API Mirror Node: Accounts, Balances, Networks и Transactions. Поскольку API Mirror Node используется для получения информации, все вызовы API должны быть в форме GET-запроса. В учебнике также будет сделан запрос к сети mainnet, поскольку именно там происходят реальные транзакции.

Для того чтобы легко написать код и понять, как работают API, вам понадобятся:

  • Базовые знания JavaScript
  • Понимание того, как вызывать API с помощью функции ‘fetch’ из пакета ‘node-fetch’. Вы можете узнать больше о пакете ‘node-fetch’ здесь.

Конечная точка учетных записей.

API учетных записей Mirror Node получает информацию, относящуюся к учетным записям пользователей, с помощью конечной точки учетных записей в сети. С помощью этого API можно получить следующую информацию:

  • Списки всех учетных записей в сети.
  • Информация о конкретном аккаунте.
  • Доступные на аккаунте криптовалюты.
  • Доступные на счете разрешения на покупку токенов.
  • NFT, доступные на счете.

Список всех счетов в сети.

Эта конечная точка возвращает данные обо всех счетах, созданных в сети Hedera. Сделайте запрос на получение данных о счетах, используя приведенный ниже код.

Код.

Конечная точка: /api/v1/accounts

import fetch from "node-fetch";

let url = "https://mainnet-public.mirrornode.hedera.com/api/v1/accounts"

const response = await fetch(url)
const json_reponse = await response.json();

console.log(json_reponse)
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
      account: '0.0.1',
      alias: null,
      auto_renew_period: 17775,
      balance: [Object],
      decline_reward: true,
      deleted: false,
      ethereum_nonce: 0,
      evm_address: null,
      expiry_timestamp: null,
      key: [Object],
      max_automatic_token_associations: 0,
      memo: '',
      receiver_sig_required: null,
      staked_account_id: null,
      staked_node_id: 10,
      stake_period_start: '1658966400.000000000'
    }
Войти в полноэкранный режим Выйти из полноэкранного режима

API отвечает первыми 25 аккаунтами и API-ссылкой на следующие 25 аккаунтов. В приведенном выше ответе отображаются пары ключ-значение для отдельного аккаунта. Каждый ответ включает идентификатор счета, который однозначно идентифицирует пользователя.

Информация о конкретном аккаунте.

Вы можете запросить информацию о конкретном аккаунте, используя идентификатор аккаунта. Именно это и делает приведенный ниже код.

Код

Конечная точка: /api/v1/accounts?account.id={какой-то номер счета}

import fetch from "node-fetch";

let url = "https://mainnet-public.mirrornode.hedera.com/api/v1/accounts?account.id=0.0.1000"

const response = await fetch(url)
const json_reponse = await response.json();

const account_balance = json_reponse["accounts"][0]["balance"]["balance"]

console.log(account_balance+ " Tiny HBARS")
Вход в полноэкранный режим Выйти из полноэкранного режима

Параметр account.id со значением ‘0.0.1000’, номер счета пользователя, присоединяется к URL. Этот API возвращает конкретную информацию об учетной записи пользователя. Приведенный выше код просто индексирует баланс счета в ответе. Конечный результат?

Ответ.

236804813479 Tiny HBARS
Вход в полноэкранный режим Выход из полноэкранного режима

Пользователь с идентификатором счета ‘0.0.1000’ имеет 236804813479 HBARS.

Разрешения на криптовалюту на аккаунте

Разрешения на Hedera позволяют пользователям предоставлять другим пользователям доступ к средствам своего кошелька. Это похоже на обычный банковский счет, но с более чем одной подписью. В этом случае владелец счета разрешает транжире использовать определенную сумму.

Приведенный ниже код запрашивает информацию о криптовалютных разрешениях на счете с идентификатором ‘1001’.

Код.

Конечная точка: /api/v1/accounts/{idOrAliasOrEvmAddress}/allowances/crypto

async function getCryptoAllowances(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/accounts/1001/allowances/crypto")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getCryptoAllowances())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{ allowances: [], links: { next: null } }
Войти в полноэкранный режим Выход из полноэкранного режима

Этот пользователь еще не одобрил ни одной надбавки ни для одного транжиры.

Разрешения на покупку жетонов на аккаунте

Вы также можете использовать конечную точку счета для просмотра разрешений на использование жетонов пользователя. Для примера смотрите код ниже.

Код.

Конечная точка: /api/v1/accounts/{idOrAliasOrEvmAddress}/allowances/tokens

async function getTokenAllowances(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/accounts/8/allowances/tokens")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getTokenAllowances())
Вход в полноэкранный режим Выйти из полноэкранного режима

Этот API запрашивает разрешения на токены для пользователя с идентификатором учетной записи 8. Конечный результат?

Ответ.

{ allowances: [], links: { next: null } }
Войти в полноэкранный режим Выход из полноэкранного режима

У этого пользователя нет никаких разрешений на токены.

НМТ, доступные на счете.

Эта конечная точка счета также предоставляет информацию о НМТ, к которым пользователь имеет доступ.

Код.

Конечная точка: /api/v1/accounts/{idOrAliasOrEvmAddress}/nfts

async function getNFTs(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/accounts/1000/nfts")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getNfts())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{ nfts: [], links: { next: null } }
Войти в полноэкранный режим Выйти из полноэкранного режима

Приведенный выше результат показывает, что пользователь с идентификатором счета ‘1000’ не имеет NFTs.

Конечная точка «Остатки».

Конечная точка balances — это простая конечная точка, которая возвращает баланс счета. Под балансом здесь понимается количество крошечных хбаров на счете в любой момент времени. Приведенный ниже код использует этот API для получения баланса счета с идентификатором ‘0.0.1001’.

Код.

Конечная точка: /api/v1/balances

async function getBalances(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/balances?account.id=1001")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getBalances())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
  timestamp: '1661265000.265552000',
  balances: [ { account: '0.0.1001', balance: 571916653506, tokens: [Array] } ],
  links: { next: null }
}
Войти в полноэкранный режим Выход из полноэкранного режима

В ответе API отображается время запроса, идентификатор счета, баланс и доступные токены. На момент запроса баланс этого пользователя составлял 571916653506 крошечных HBARs.

Конечная точка сети.

Конечная точка сети предоставляет информацию о текущем состоянии сети Hedera. С помощью этой конечной точки вы можете получить:

  • Курс обмена в сети.
  • Сборы сети.
  • Узлы сети.
  • Ставка сети.
  • предложение сети.

Обменный курс сети

Эта конечная точка возвращает текущее значение обменного курса сети в центах, хбарах и время истечения курса сети в Unix epoch (количество секунд, прошедших с 1 января 1970 года). Он также возвращает следующие курсы, а также время истечения курса. Отправьте запрос к курсу сети, используя приведенный ниже код.

Код.

Конечная точка: /api/v1/network/exchangerate

async function getExchangeRate(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/network/exchangerate")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}


console.log(await getExchangeRate())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
  current_rate: {
    cent_equivalent: 198916,
    expiration_time: 1661266800,
    hbar_equivalent: 30000
  },
  next_rate: {
    cent_equivalent: 201309,
    expiration_time: 1661270400,
    hbar_equivalent: 30000
  },
  timestamp: '1661263273.013587691'
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Ответ возвращает текущий и следующий тарифы, а также время истечения срока действия и текущее время, все в Unix epoch.

Плата за пользование сетью

Конечная точка «Плата за пользование сетью» возвращает предполагаемую плату за газ в крошечных hbars в данный момент времени.

  • Вызвать контракт.
  • Создать контракт.
  • Выполните транзакцию ethereum.

Чтобы получить доступ к сборам сети, используйте приведенный ниже код.

Код.

Конечная точка: /api/v1/network/fees

async function getNetworkFees(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/network/fees")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getNetworkFees())
Войдите в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
  fees: [
    { gas: 127, transaction_type: 'ContractCall' },      
    { gas: 127, transaction_type: 'ContractCreate' },    
    { gas: 127, transaction_type: 'EthereumTransaction' }
  ],
  timestamp: '1660671750.212501966'
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Согласно ответу, выполнение всех трех операций обойдется в 127 крошечных хбаров каждая.

Узлы сети.

В контексте блокчейна узел — это компьютер, на котором работает программное обеспечение блокчейна и хранится история всех транзакций, произошедших в сети. Конечная точка узла сети возвращает список всех узлов, на которых запущено программное обеспечение блокчейна Hedera.

Чтобы получить список всех узлов сети, используйте приведенный ниже код.

Код.

Конечная точка: /api/v1/network/nodes

async function getNetworkNodes(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/network/nodes")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getNetworkNodes())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
      description: '',
      file_id: '0.0.102',
      max_stake: 192307692307692320,
      memo: '',
      min_stake: 96153846153846160,
      node_id: 2,
      node_account_id: '0.0.5',
      node_cert_hash: '0xe55c559975c1c9285c5262d6c94262287e5d501c66a0c770f0c9a88f7234e0435c5643e03664eb9c8ce2d9f94de717ec',
      public_key: '0x308201a2300d06092a864886f70d01010105000382018f003082018a0282018100b2ccac65ad0fc7645a817bfabc487ad7e41311e7a3198b37fb842d84c395b3f67d6bd848f10c6f03c290e8f7daa8d001a8441dc352a19160a3193e68b82edf19ae67693a9a33d4cb87e789a1070715515ea772caa8b86a569b91c5450835d9c354f0dacec97fe77091b45b147698b7f8601422dcd2261e928de4dac9c42dcbafdf96c07233ba3027076f37c969e8ed30b6b5d8f5034be7d92c596f8be861e51fcc3a242bf9d8be9e2a9e8e0f155ebcff23effa7cd57c10542811d80776c9585526fdb0eaa34ee1955d51119390fe873e4c04dedd29165884b98b46308788ae7fc4d4aa4a8fc9bc2674ba321493b624455ad410c1de71bc95d1d91fa0f201418a795e309eaf297b699bf27c9fa2763cd59ceb021e16b8200c1060f2817fd83cfc767183489461e3599291b380d6e939baa4b19232a6a272dde651f8046fdc34db276a777d6fb2bec3255b2cc244b4af566b105f30c6506ddae0eb3deddcf947bcb9c60e000984f3b4a8c6c4ed4bf90bc1932b7f94dc3ae6b360008eb902040f9b0203010001',
      reward_rate_start: 0,
      service_endpoints: [Array],
      stake: 0,
      stake_not_rewarded: 0,
      stake_rewarded: 57349500000000,
      stake_total: 0,
      staking_period: [Object],
      timestamp: [Object]
    }
Войти в полноэкранный режим Выйти из полноэкранного режима

Приведенный выше ответ предоставляет информацию об узле, такую как его ID, открытый ключ, ставка, ставка не вознаграждена, ставка вознаграждена и т.д.

Ставка сети

Ставка — это процесс хранения ваших средств в блокчейне в течение определенного периода времени для облегчения обмена токенами в сети. Пользователи, размещающие свои средства на блокчейне, могут получать вознаграждения. Вознаграждение обычно составляет процент от комиссии за транзакцию.

Чтобы получить информацию о ставках в сети Hedera, используйте приведенный ниже код.

Код.

Конечная точка: api/v1/network/stake

async function getNetworkStake(){

    try {
        const response = await fetch("https://testnet.mirrornode.hedera.com/api/v1/network/stake")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getNetworkStake())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
  max_staking_reward_rate_per_hbar: 0,
  node_reward_fee_fraction: 0,
  stake_total: 0,
  staking_period: { from: '1661212800.000000000', to: '1661299200.000000000' },
  staking_period_duration: 0,
  staking_periods_stored: 0,
  staking_reward_fee_fraction: 0,
  staking_reward_rate: 0,
  staking_start_threshold: 0
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Ответ содержит информацию об общей ставке в сети, например, максимальную ставку вознаграждения за хбар, общую ставку в сети и период ставки.

Примечание: Нули для различных значений ставок обусловлены ответом, полученным от API testnet. Причина использования тестовой сети, а не основной сети, как было указано ранее, заключается в том, что она возвращает «undefined» в качестве ответа.

Снабжение сети

Предложение сети — это общее количество токенов, находящихся в обращении в любой момент времени. Токен — это виртуальная валюта, используемая для транзакций и платежей в сети блокчейн.

Чтобы узнать предложение токенов на Hedera, отправьте запрос на конечную точку сети. Чтобы узнать это, используйте приведенный ниже код.

Код.

Конечная точка: /api/v1/network/supply

async function getNetworkSupply(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/network/supply")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
  released_supply: '2281892368795344266',
  timestamp: '1661282100.971360000',
  total_supply: '5000000000000000000'
}
Войти в полноэкранный режим Выход из полноэкранного режима

В ответе API отображается количество токенов, находящихся в обращении в настоящее время, а также общее количество токенов, которое когда-либо будет у сети.

Конечная точка транзакций.

Конечная точка транзакций предоставляет данные об успешных и неудачных транзакциях в сети Hedera. С помощью этой конечной точки вы можете узнать следующее:

  • Список транзакций в сети.
  • Конкретную транзакцию по ее идентификатору.
  • Доказательство состояния транзакции.

Список транзакций в сети.

Используя конечную точку транзакций, вы можете получить список транзакций в сети Hedera. Используйте приведенный ниже код для получения списка транзакций.

Код.

Конечная точка: /api/v1/transactions

async function getTransactions(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/transactions")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}

console.log(await getTransactions())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

{
      bytes: null,
      charged_tx_fee: 254623,
      consensus_timestamp: '1661282256.222567283',
      entity_id: '0.0.120438',
      max_fee: '4000000',
      memo_base64: '',
      name: 'CONSENSUSSUBMITMESSAGE',
      node: '0.0.3',
      nonce: 0,
      parent_consensus_timestamp: null,
      result: 'SUCCESS',
      scheduled: false,
      transaction_hash: 'p1NxpoQQeEHwZMrWeTmJiubyB6YOvYkb/J/lOocolWwzQX3fNRh/MGI0oyB2JvA1',
      transaction_id: '0.0.41104-1661282245-644008944',
      transfers: [Array],
      valid_duration_seconds: '120',
      valid_start_timestamp: '1661282245.644008944'
    }
Войти в полноэкранный режим Выход из полноэкранного режима

В ответ API предоставляет такие детали транзакции, как комиссия за транзакцию, хэш, идентификатор, результат, имя и др.

Конкретная транзакция с использованием ее идентификатора транзакции

Используя идентификатор транзакции, вы можете получить информацию о транзакции. Следующий код извлекает информацию о транзакции с идентификатором ‘0.0.34776-1661282245-906570926’. Идентификатор транзакции имеет формат «shard.realm.num-sss-nnn». Это:

  • «shard.realm.num» означает идентификатор учетной записи пользователя.
  • «sss» означает время в секундах.
  • «nnn» означает время в наносекундах.

Код.

Конечная точка: /api/v1/transaction/{transactionId}.

async function getTransactionWithId(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/transactions/0.0.34776-1661282245-906570926?nonce=0")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}


console.log(await getTransactionWithId())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

transactions: [
    {
      bytes: null,
      charged_tx_fee: 178785,
      consensus_timestamp: '1661282256.328057987',
      entity_id: '0.0.145780',
      max_fee: '200000000',
      memo_base64: '',
      name: 'CONSENSUSSUBMITMESSAGE',
      node: '0.0.14',
      nonce: 0,
      parent_consensus_timestamp: null,
      result: 'SUCCESS',
      scheduled: false,
      transaction_hash: 'ds1CHgOa+9+IxNiuXNwgwba+Y4xima3Mw4s1JTiKyufRza/VCVyEgZMerGxKy3rb',
      transaction_id: '0.0.34776-1661282245-906570926',
      transfers: [Array],
      valid_duration_seconds: '120',
      valid_start_timestamp: '1661282245.906570926'
    }
  ]
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот ответ указывает на то, что транзакция стоимостью 178785 tiny hbars, произошла во вторник, 23 августа 2022 года, 7:17:25.906 PM GMT, и была успешной.

Транзакции Stateproof.

Что такое доказательство состояния?

Доказательство состояния — это криптографически защищенная и переносимая структура данных, которая по желанию возвращается как часть ответа на запрос. Доказательство состояния доказывает, что возвращенные данные действительны, то есть являются частью состояния Hedera. Проще говоря, это позволяет любому субъекту, получившему данные и соответствующее доказательство состояния, проверить эти данные. — Hedera.com

Доказательства состояния помогают проверить достоверность информации в сети Hedera. Используйте приведенный ниже код, чтобы получить доказательство состояния для транзакции, запрошенной в предыдущем разделе.

Код.

Конечная точка: /api/v1/transaction/{transactionId}/stateproof

async function getTransactionStateproof(){

    try {
        const response = await fetch("https://mainnet-public.mirrornode.hedera.com/api/v1/transactions/0.0.34776-1661282245-906570926/stateproof")

        if (!response.ok) {
            throw new Error(`Error status ${response.status}`)
        }

        const result = await response.json()
        return result
    } catch (err) {
        console.log(err)
    }
}


console.log(await getTransactionStateproof())
Вход в полноэкранный режим Выйти из полноэкранного режима

Ответ.

Ответ очень длинный (занимает 30 страниц в документе word), и полная версия доступна здесь. Он содержит длинный код, который служит валидатором транзакции.

Подведение итогов.

В этой статье мы рассмотрели:

  • Миссия Hedera.
  • API зеркального узла.
  • Типы API зеркального узла.
  • Конечная точка Accounts.
  • Конечная точка баланса.
  • Конечная точка сети.
  • Конечная точка транзакций.

Чтобы узнать больше о сети, посетите документацию Hedera. Вы также можете получать регулярные обновления о состоянии сети, следя за ней в Twitter и LinkedIn.

Спасибо, что прочитали эту статью. Если она вам понравилась, пожалуйста, поделитесь ею.

Вы можете следить за мной в Twitter и LinkedIn, и, пожалуйста, оставьте комментарий ниже, если у вас есть вопросы. А пока — до свидания.

Обложка изображения: Hedera.com

Оцените статью
devanswers.ru
Добавить комментарий