<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Alien Coin</title><subtitle>Telegram Channel - https://t.me/Alien_Coin
YouTube Channel - https://www.youtube.com/channel/UCJiYxYr3N3AP3xxdDiz4A7g</subtitle><author><name>Alien Coin</name></author><id>https://teletype.in/atom/alien_coin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/alien_coin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@alien_coin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alien_coin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/alien_coin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-01T18:45:11.413Z</updated><entry><id>alien_coin:Rukovodstvo-po-Connext-Network</id><link rel="alternate" type="text/html" href="https://teletype.in/@alien_coin/Rukovodstvo-po-Connext-Network?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alien_coin"></link><title>Руководство по Connext Network</title><published>2022-05-16T08:25:25.741Z</published><updated>2022-05-16T08:25:25.741Z</updated><summary type="html">В данной статье рассмотрим пошаговую инструкцию подключения пользовательского интерфейса или какого-либо серверного сервиса, который подключается к сети Connext, при помощи SDK Quickstart.</summary><content type="html">
  &lt;p id=&quot;firz&quot;&gt;&lt;strong&gt;В данной статье рассмотрим пошаговую инструкцию подключения пользовательского интерфейса или какого-либо серверного сервиса, который подключается к сети Connext, при помощи SDK Quickstart.&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Содержание&quot;&gt;&lt;br /&gt;Содержание&lt;/h2&gt;
  &lt;p id=&quot;H7PS&quot;&gt;1.&lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D1%8B-Quickstart&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Контракты Quickstart&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;TEiH&quot;&gt;   1.1 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A6%D0%B5%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82&quot; target=&quot;_blank&quot;&gt;Целевой контракт&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;zEwj&quot;&gt;   1.2 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%98%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82&quot; target=&quot;_blank&quot;&gt;Исходный контракт&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;fyrF&quot;&gt;   1.3 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A0%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5&quot; target=&quot;_blank&quot;&gt;Разрешенные&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;WPIo&quot;&gt;   1.4 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%94%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5%D0%B9%D1%88%D0%B8%D0%B5-%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F-%D1%81-%D1%86%D0%B5%D0%BB%D0%B5%D0%B2%D1%8B%D0%BC-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BE%D0%BC&quot; target=&quot;_blank&quot;&gt;Дальнейшие действия с целевым контрактом&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;AmQm&quot;&gt;2.&lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#SDK-Quickstart&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt; SDK Quickstart&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;I70H&quot;&gt;   2.1 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D1%86%D0%B5%D0%BF%D0%BD%D0%B0%D1%8F-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0&quot; target=&quot;_blank&quot;&gt;Кросс-цепная передача&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;qi5j&quot;&gt;   2.2 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BE%D1%87%D0%BD%D1%8B%D0%B9-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82&quot; target=&quot;_blank&quot;&gt;Установочный проект&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;wMP4&quot;&gt;   2.3 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9&quot; target=&quot;_blank&quot;&gt;Установка зависимостей&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;WNnN&quot;&gt;   2.4 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82&quot; target=&quot;_blank&quot;&gt;Импорт&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;dhqJ&quot;&gt;   2.5 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%B8&quot; target=&quot;_blank&quot;&gt;Создание подписи&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;rJ2j&quot;&gt;   2.6 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%82%D0%B5-NxtpSdkConfig&quot; target=&quot;_blank&quot;&gt;Постройте NxtpSdkConfig&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;9fU0&quot;&gt;   2.7 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%B9%D1%82%D0%B5-SDK&quot; target=&quot;_blank&quot;&gt;Создайте SDK&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;8djT&quot;&gt;   2.8 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%82%D0%B5-xCallArgs&quot; target=&quot;_blank&quot;&gt;Постройте xCallArgs&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;TmbU&quot;&gt;   2.9 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9E%D0%B4%D0%BE%D0%B1%D1%80%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B8-%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;Одобрение передачи активов&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;ruUo&quot;&gt;   2.10 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&quot; target=&quot;_blank&quot;&gt;Отправка&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Wo4l&quot;&gt;   2.11 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9A%D1%80%D0%BE%D1%81%D1%81-%D1%86%D0%B5%D0%BF%D1%8C&quot; target=&quot;_blank&quot;&gt;Кросс-цепь&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Q4Jg&quot;&gt;   2.12 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%97%D0%B0%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D1%83%D0%B9%D1%82%D0%B5-calldata&quot; target=&quot;_blank&quot;&gt;Закодируйте calldata&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Cfoe&quot;&gt;   2.13 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%82%D0%B5-xCallArgs&quot; target=&quot;_blank&quot;&gt;Постройте xCallArgs&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;do9q&quot;&gt;3.&lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%9E%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-xcall&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Отслеживание xcall&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;84Wu&quot;&gt;   3.1 &lt;a href=&quot;https://telegra.ph/Rukovodstvo-po-Connext-Network-05-15#%D0%97%D0%B0%D0%BF%D1%80%D0%BE%D1%81-%D0%BF%D0%BE%D0%B4%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2&quot; target=&quot;_blank&quot;&gt;Запрос подграфов&lt;/a&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Контракты-Quickstart&quot;&gt;&lt;br /&gt;Контракты Quickstart&lt;/h2&gt;
  &lt;p id=&quot;0lfB&quot;&gt;В этом быстром запуске будет рассказано о том, как писать смарт-контракты в Solidity, которые взаимодействуют с развернутыми контрактами Connext.&lt;/p&gt;
  &lt;p id=&quot;NTNN&quot;&gt;Эти примеры (и другие) можно найти в нашем xApp Starter Kit в разделе &lt;code&gt;src/contract-to-contract-interactions&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;0mgu&quot;&gt;An &lt;code&gt;xcall&lt;/code&gt;может быть инициирован из смарт-контракта, который позволяет произвольное выполнение &lt;em&gt;в разных доменах&lt;/em&gt;. Это позволяет использовать Connext в качестве базового кросс-цепного слоя, который может быть интегрирован в dApps, превращая их в xApps.&lt;/p&gt;
  &lt;p id=&quot;1t4Y&quot;&gt;&lt;strong&gt;Например, вот интересные варианты использования протокола:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;pjjr&quot;&gt;
    &lt;li id=&quot;y78G&quot;&gt;&lt;em&gt;Проведите голосование по управлению в одной цепочке и выполните его результат в другой (плюс другие операции DAO).&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;6kz4&quot;&gt;&lt;em&gt;Блокировка и монетный двор или burn-and-mint token bridging&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;38K6&quot;&gt;&lt;em&gt;Выполните своп и передайте полученные токены по цепочкам&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;fD26&quot;&gt;&lt;em&gt;Подключение ликвидности DEX по цепочкам в одной бесшовной транзакции&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;OueX&quot;&gt;&lt;em&gt;Crossch vault zaps и управление стратегией vault&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;ROnG&quot;&gt;&lt;em&gt;Критические операции протокола, такие как репликация/ синхронизация глобальных констант (например, PCV) по цепочкам&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;pi42&quot;&gt;&lt;em&gt;Включение UniV3 TWAPs в каждую цепочку без введения оракулов&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;MbC9&quot;&gt;&lt;em&gt;Цепно-агностическое управление Ветокеном&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;AEvQ&quot;&gt;&lt;em&gt;Взаимодействие между метавселенными&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Целевой-контракт&quot;&gt;&lt;br /&gt;Целевой контракт&lt;/h2&gt;
  &lt;p id=&quot;t98F&quot;&gt;Рассмотрим, что у нас есть целевой контракт в целевом домене следующим образом.&lt;/p&gt;
  &lt;p id=&quot;TZZT&quot;&gt;Target.sol&lt;/p&gt;
  &lt;pre id=&quot;xXOw&quot;&gt;import {ERC20} from &amp;quot;@solmate/tokens/ERC20.sol&amp;quot;;

contract Target {
  mapping(address =&amp;gt; mapping(address =&amp;gt; uint256)) public balances;

  function deposit(
    address asset,
    uint256 amount,
    address onBehalfOf
  ) public payable returns (uint256) {
    ERC20 token = ERC20(asset);
    balances[asset][onBehalfOf] += amount;
    token.transferFrom(msg.sender, address(this), amount);

    return balances[asset][onBehalfOf];
  }
}&lt;/pre&gt;
  &lt;p id=&quot;eUE7&quot;&gt;&lt;br /&gt;Надо хотим вызвать &lt;code&gt;deposit&lt;/code&gt;функцию через смарт-контракт в другом исходном домене. Любой желающий может вызвать &lt;code&gt;deposit&lt;/code&gt;функцию пополнения счета от имени любого адреса. Вот тут-то и вступает в игру термин &amp;quot;неиспользованный&amp;quot;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Исходный-контракт&quot;&gt;&lt;br /&gt;Исходный контракт&lt;/h2&gt;
  &lt;p id=&quot;wKu3&quot;&gt;Исходный контракт инициирует кросс-цепное взаимодействие с Connext.&lt;/p&gt;
  &lt;p id=&quot;f794&quot;&gt;Во-первых, вы импортируете &lt;code&gt;IConnextHandler&lt;/code&gt;интерфейс и используем &lt;code&gt;ERC20&lt;/code&gt;реализацию solmate для обработки токена, который вы намерены &lt;code&gt;deposit&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;IA8p&quot;&gt;Source.sol&lt;/p&gt;
  &lt;pre id=&quot;XFSr&quot;&gt;import {IConnextHandler} from &amp;quot;nxtp/interfaces/IConnextHandler.sol&amp;quot;;
import {ERC20} from &amp;quot;@solmate/tokens/ERC20.sol&amp;quot;;
&lt;/pre&gt;
  &lt;p id=&quot;jUQ1&quot;&gt;Контракт будет принимать адрес &lt;code&gt;ConnextHandler.sol&lt;/code&gt;в качестве аргумента конструктора.&lt;/p&gt;
  &lt;pre id=&quot;YjuV&quot;&gt;contract Source {
  IConnextHandler public immutable connext;

  constructor(IConnextHandler _connext) {
    connext = _connext;
  }
&lt;/pre&gt;
  &lt;p id=&quot;Baww&quot;&gt;Затем мы определяем функцию этого контракта на стороне источника&lt;code&gt;deposit&lt;/code&gt;, которая требует набора аргументов, необходимых для &lt;code&gt;xcall&lt;/code&gt;последующего.&lt;/p&gt;
  &lt;pre id=&quot;YTfQ&quot;&gt;  function deposit(
    address to, // the address of the destination contract (UnpermissionedTarget.sol)
    address asset, // the address of the token to bridge and deposit
    uint32 originDomain, // from Kovan (2111)
    uint32 destinationDomain, // to Rinkeby (1111)
    uint256 amount // amount of tokens to deposit
  ) external payable {
&lt;/pre&gt;
  &lt;p id=&quot;TUuI&quot;&gt;В теле &lt;code&gt;deposit&lt;/code&gt;мы сначала убеждаемся, что пользователь одобрил сумму для отправки по этому контракту. Токены передаются , а затем этот контракт сам должен одобрить передачу &lt;code&gt;ConnextHandler.sol&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;ZLZ5&quot;&gt;    ERC20 token = ERC20(asset);
    require(
      token.allowance(msg.sender, address(this)) &amp;gt;= amount,
      &amp;quot;User must approve amount&amp;quot;
    );

    token.transferFrom(msg.sender, address(this), amount);
    token.approve(address(connext), amount);
&lt;/pre&gt;
  &lt;p id=&quot;NRFZ&quot;&gt;Мы создаем &lt;code&gt;calldata&lt;/code&gt;его, кодируя функцию целевого контракта &lt;code&gt;deposit&lt;/code&gt;правильными аргументами. Напомним, что сигнатура целевой функции &lt;code&gt;deposit(address asset, uint256 amount, address onBehalfOf)&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;Y9bL&quot;&gt;Здесь мы указываем, что хотим отправить &lt;code&gt;deposit&lt;/code&gt;некоторые &lt;code&gt;amount&lt;/code&gt;токены на тот же адрес кошелька, который инициирует этот вызов, но в целевом домене.&lt;/p&gt;
  &lt;pre id=&quot;PuHa&quot;&gt;    bytes4 selector = bytes4(keccak256(&amp;quot;deposit(address,uint256,address)&amp;quot;));

    bytes memory callData = abi.encodeWithSelector(
      selector,
      asset,
      amount,
      msg.sender
    );
&lt;/pre&gt;
  &lt;p id=&quot;aDR6&quot;&gt;Наконец, мы строим &lt;code&gt;XCallArgs&lt;/code&gt;и вызываем &lt;code&gt;xcall&lt;/code&gt;контракт Connext.&lt;/p&gt;
  &lt;pre id=&quot;jqrz&quot;&gt;    IConnextHandler.CallParams memory callParams = IConnextHandler.CallParams({
      to: to,
      callData: callData,
      originDomain: originDomain,
      destinationDomain: destinationDomain,
      forceSlow: false,
      receiveLocal: false
    });

    IConnextHandler.XCallArgs memory xcallArgs = IConnextHandler.XCallArgs({
      params: callParams,
      transactingAssetId: asset,
      amount: amount,
      relayerFee: 0
    });

    connext.xcall(xcallArgs);
  }
}&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Разрешенные&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;QGXT&quot;&gt;Разрешенные&lt;/h2&gt;
  &lt;p id=&quot;tNPs&quot;&gt;Наиболее интересные кросс-цепочечные варианты использования могут быть реализованы только с помощью разрешенных вызовов в целевом домене. С требованиями к разрешениям разработчик xapp должен тщательно выполнять проверки разрешений. Мы увидим, как это делается в следующем примере.&lt;/p&gt;
  &lt;p id=&quot;eUzN&quot;&gt;Допустим, наш целевой контракт содержит функцию, которую &lt;em&gt;должен вызывать только наш исходный контракт&lt;/em&gt;. Для простоты мы нацелимся на надуманную функцию:&lt;/p&gt;
  &lt;pre id=&quot;PN49&quot;&gt;  function updateValue(uint256 newValue) external onlyExecutor {
    value = newValue;
  }
&lt;/pre&gt;
  &lt;p id=&quot;KcDV&quot;&gt;Вы заметите, что у нас есть пользовательский модификатор &lt;code&gt;onlyExecutor&lt;/code&gt;для этой функции. Это сигнализирует о каком-то требовании разрешения - мы немного углубимся в это. Для разрешенного потока на самом деле проще сначала рассмотреть исходный контракт.&lt;/p&gt;
  &lt;p id=&quot;VnDK&quot;&gt;Существует небольшая разница между этим исходным контрактом и контрактом из примера unpermissioned . Единственное важное замечание заключается в том, что мы не отправляем средства с &lt;code&gt;xcall&lt;/code&gt;таким танцем утверждения не требуется.&lt;/p&gt;
  &lt;p id=&quot;QJBF&quot;&gt;Внутри &lt;code&gt;update&lt;/code&gt;функции мы просто создаем&lt;code&gt;calldata&lt;/code&gt;, чтобы соответствовать сигнатуре целевой функции, строим &lt;code&gt;XCallArgs&lt;/code&gt;и вызываем &lt;code&gt;xcall&lt;/code&gt;ее.&lt;/p&gt;
  &lt;p id=&quot;EcqO&quot;&gt;Source.sol&lt;/p&gt;
  &lt;pre id=&quot;gvsx&quot;&gt;import {IConnextHandler} from &amp;quot;nxtp/interfaces/IConnextHandler.sol&amp;quot;;

contract Source {
  IConnextHandler public immutable connext;

  constructor(IConnextHandler _connext) {
    connext = _connext;
  }

  function update(
    address to,
    address asset,
    uint32 originDomain,
    uint32 destinationDomain,
    uint256 newValue
  ) external payable {

    bytes4 selector = bytes4(keccak256(&amp;quot;updateValue(uint256)&amp;quot;));
    bytes memory callData = abi.encodeWithSelector(selector, newValue);

    IConnextHandler.CallParams memory callParams = IConnextHandler.CallParams({
      to: to,
      callData: callData,
      originDomain: originDomain,
      destinationDomain: destinationDomain,
      forceSlow: false,
      receiveLocal: false
    });

    IConnextHandler.XCallArgs memory xcallArgs = IConnextHandler.XCallArgs({
      params: callParams,
      transactingAssetId: asset,
      amount: 0,
      relayerFee: 0
    });

    connext.xcall(xcallArgs);
  }
}
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Дальнейшие-действия-с-целевым-контрактом&quot;&gt;&lt;br /&gt;Дальнейшие действия с целевым контрактом&lt;/h2&gt;
  &lt;p id=&quot;Mpd3&quot;&gt;Теперь целевой контракт должен быть тщательно написан с учетом наших требований к разрешению. Помните, что &lt;em&gt;только наш исходный контракт должен иметь возможность вызывать&lt;/em&gt; целевую функцию.&lt;/p&gt;
  &lt;p id=&quot;tMHd&quot;&gt;Имея это в виду, давайте погрузимся.&lt;/p&gt;
  &lt;p id=&quot;GTwY&quot;&gt;Во-первых, мы импортируем то же &lt;code&gt;IConnextHandler&lt;/code&gt;самое, что и &lt;code&gt;ERC20&lt;/code&gt;раньше. Теперь нам также нужно импортировать &lt;code&gt;IExecutor &lt;/code&gt;интерфейс.&lt;/p&gt;
  &lt;p id=&quot;d1iT&quot;&gt;Target.sol&lt;/p&gt;
  &lt;pre id=&quot;Ic1s&quot;&gt;import {IExecutor} from &amp;quot;nxtp/interfaces/IExecutor.sol&amp;quot;;
import {IConnextHandler} from &amp;quot;nxtp/interfaces/IConnextHandler.sol&amp;quot;;
import {ERC20} from &amp;quot;@solmate/tokens/ERC20.sol&amp;quot;;
&lt;/pre&gt;
  &lt;p id=&quot;T8ie&quot;&gt;В конструкторе мы передаем адрес исходного контракта и идентификатор домена исходного домена. Мы также передаем адрес контракта Connext Executor, который должен быть единственным разрешенным вызывающим абонентом целевой функции. Это важнейшая информация, которую мы будем проверять, чтобы выполнить наше требование о допуске.&lt;/p&gt;
  &lt;pre id=&quot;PqJv&quot;&gt;contract Target {
  uint256 public value;
  address public originContract; // The address of Source.sol
  uint32 public originDomain; // The origin Domain ID
  address public executor; // The address of Executor.sol
  
  constructor(
    address _originContract, 
    uint32 _originDomain, 
    address payable _connext
  ) {
    originContract = _originContract;
    originDomain = _originDomain;
    executor = ConnextHandler(_connext).getExecutor(); 
  }
&lt;/pre&gt;
  &lt;p id=&quot;djz8&quot;&gt;Вот &lt;code&gt;onlyExecutor&lt;/code&gt;модификатор, который мы видели ранее. В нем мы используем &lt;code&gt;IExecutor&lt;/code&gt;служебные функции &lt;code&gt;originSender()&lt;/code&gt;и &lt;code&gt;origin()&lt;/code&gt;проверяем, что исходящий вызов пришел из ожидаемого исходного контракта и домена. Как уже упоминалось выше, нам также необходимо проверить, что &lt;code&gt;msg.sender&lt;/code&gt;это контракт исполнителя Connext - в противном случае любой вызывающий контракт может просто вернуть контракт и домен, которые мы ожидаем.&lt;/p&gt;
  &lt;pre id=&quot;a4YW&quot;&gt;  modifier onlyExecutor() {
    require(
      IExecutor(msg.sender).originSender() == originContract &amp;amp;&amp;amp; 
      IExecutor(msg.sender).origin() == originDomain &amp;amp;&amp;amp; 
      msg.sender == executor,
      &amp;quot;Expected origin contract on origin domain called by Executor&amp;quot;
    );
    _;
  } 
&lt;/pre&gt;
  &lt;p id=&quot;z48Z&quot;&gt;С &lt;code&gt;onlyExecutor&lt;/code&gt;модификатором на месте наша разрешенная функция защищена.&lt;/p&gt;
  &lt;pre id=&quot;FuVH&quot;&gt;  function updateValue(uint256 newValue) external onlyExecutor {
    value = newValue;
  }
}
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;SDK-Quickstart&quot;&gt;&lt;br /&gt;SDK Quickstart&lt;/h2&gt;
  &lt;p id=&quot;6v6V&quot;&gt;Connext SDK позволяет разработчикам взаимодействовать с протоколом Connext в стандарте Node.js или веб-среды. В этом quickstart будет рассказано о том, как построить поверх Connext с помощью TypeScript SDK.&lt;/p&gt;
  &lt;h2 id=&quot;Кросс-цепная-передача&quot;&gt;&lt;br /&gt;Кросс-цепная передача&lt;/h2&gt;
  &lt;p id=&quot;zvIc&quot;&gt;В этом быстром запуске мы продемонстрируем, как выполнить &lt;code&gt;xcall&lt;/code&gt;перевод средств с кошелька на Kovan на адрес назначения на Rinkeby.&lt;/p&gt;
  &lt;h2 id=&quot;Установочный-проект&quot;&gt;&lt;br /&gt;Установочный проект&lt;/h2&gt;
  &lt;p id=&quot;VY71&quot;&gt;Если у вас есть существующий проект, вы можете пропустить &lt;a href=&quot;https://docs.connext.network/Developers/sdk/sdk-quickstart#2-install-dependencies&quot; target=&quot;_blank&quot;&gt;установку зависимостей&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;kvaa&quot;&gt;Создайте папку проекта и инициализируйте пакет.&lt;/p&gt;
  &lt;pre id=&quot;lNL2&quot;&gt;mkdir node-examples &amp;amp;&amp;amp; cd node-examples
yarn init
&lt;/pre&gt;
  &lt;p id=&quot;UcOp&quot;&gt;Мы будем использовать TypeScript / Node.js в этом примере.&lt;/p&gt;
  &lt;pre id=&quot;iErS&quot;&gt;yarn add @types/node typescript 
yarn add -D @types/chain
yarn tsc --init
&lt;/pre&gt;
  &lt;p id=&quot;i5hK&quot;&gt;Мы хотим использовать await верхнего уровня, поэтому мы установим параметры компилятора соответствующим образом.&lt;/p&gt;
  &lt;p id=&quot;EGOE&quot;&gt;tsconfig.json&lt;/p&gt;
  &lt;pre id=&quot;JRgo&quot;&gt;{
  &amp;quot;compilerOptions&amp;quot;: {
    &amp;quot;outDir&amp;quot;: &amp;quot;./dist&amp;quot;,
    &amp;quot;target&amp;quot;: &amp;quot;es2017&amp;quot;,
    &amp;quot;module&amp;quot;: &amp;quot;esnext&amp;quot;,
    &amp;quot;moduleResolution&amp;quot;: &amp;quot;node&amp;quot;
  },
  &amp;quot;exclude&amp;quot;: [&amp;quot;node_modules&amp;quot;]
}
&lt;/pre&gt;
  &lt;p id=&quot;0PcH&quot;&gt;И добавьте следующее в&lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
  &lt;p id=&quot;V1NP&quot;&gt;package.json&lt;/p&gt;
  &lt;pre id=&quot;GiM5&quot;&gt;&amp;quot;type&amp;quot;: &amp;quot;module&amp;quot;,
&amp;quot;scripts&amp;quot;: {
  &amp;quot;build&amp;quot;: &amp;quot;tsc&amp;quot;,
  &amp;quot;xtransfer&amp;quot;: &amp;quot;node dist/xtransfer.js&amp;quot;
}
&lt;/pre&gt;
  &lt;p id=&quot;pubZ&quot;&gt;Создать &lt;code&gt;xtransfer.ts&lt;/code&gt;в каталоге проекта, куда мы напишем весь код в этом примере.&lt;/p&gt;
  &lt;pre id=&quot;g63R&quot;&gt;mkdir src &amp;amp;&amp;amp; touch src/xtransfer.ts
&lt;/pre&gt;
  &lt;h2 id=&quot;Установка-зависимостей&quot;&gt;&lt;br /&gt;Установка зависимостей&lt;/h2&gt;
  &lt;p id=&quot;WRzl&quot;&gt;Установите SDK.&lt;/p&gt;
  &lt;pre id=&quot;Ze9k&quot;&gt;yarn add @connext/nxtp-sdk
&lt;/pre&gt;
  &lt;p id=&quot;ZCxt&quot;&gt;Кроме того, установите&lt;code&gt;ethers&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;N2ON&quot;&gt;yarn add ethers
&lt;/pre&gt;
  &lt;h2 id=&quot;Импорт&quot;&gt;&lt;br /&gt;Импорт&lt;/h2&gt;
  &lt;p id=&quot;duRh&quot;&gt;src/xtransfer.ts&lt;/p&gt;
  &lt;pre id=&quot;YoWB&quot;&gt;import { create, NxtpSdkConfig } from &amp;quot;@connext/nxtp-sdk&amp;quot;;
import { ethers } from &amp;quot;ethers&amp;quot;;
&lt;/pre&gt;
  &lt;h2 id=&quot;Создание-подписи&quot;&gt;&lt;br /&gt;Создание подписи&lt;/h2&gt;
  &lt;p id=&quot;0q8J&quot;&gt;Используйте кошелек (т.е. MetaMask) в качестве &lt;a href=&quot;https://docs.ethers.io/v5/api/signer/&quot; target=&quot;_blank&quot;&gt;подписанта&lt;/a&gt;.&lt;/p&gt;
  &lt;pre id=&quot;qq0C&quot;&gt;const privateKey = &amp;quot;&amp;lt;wallet_private_key&amp;gt;&amp;quot;;
let signer = new ethers.Wallet(privateKey);
&lt;/pre&gt;
  &lt;p id=&quot;NyP4&quot;&gt;И подключите его к &lt;a href=&quot;https://docs.ethers.io/v5/api/providers/&quot; target=&quot;_blank&quot;&gt;поставщику&lt;/a&gt; в цепочке отправки (&lt;a href=&quot;https://infura.io/&quot; target=&quot;_blank&quot;&gt;Infura&lt;/a&gt;, &lt;a href=&quot;https://www.alchemy.com/&quot; target=&quot;_blank&quot;&gt;Alchemy&lt;/a&gt;и т. Д.).&lt;/p&gt;
  &lt;pre id=&quot;3mqv&quot;&gt;const provider = new ethers.providers.JsonRpcProvider(&amp;quot;&amp;lt;kovan_rpc_url&amp;gt;&amp;quot;);
signer = signer.connect(provider);
const signerAddress = await signer.getAddress();
&lt;/pre&gt;
  &lt;h2 id=&quot;Постройте-NxtpSdkConfig&quot;&gt;&lt;br /&gt;Постройте NxtpSdkConfig&lt;/h2&gt;
  &lt;p id=&quot;G5Vp&quot;&gt;Заполните заполнители соответствующими URL-адресами поставщиков.&lt;/p&gt;
  &lt;pre id=&quot;V9we&quot;&gt;const nxtpConfig: NxtpSdkConfig = {
  logLevel: &amp;quot;info&amp;quot;,
  signerAddress: signerAddress,
  chains: {
    &amp;quot;1111&amp;quot;: {
      providers: [&amp;quot;&amp;lt;rinkeby_rpc_url&amp;gt;&amp;quot;],
      assets: [
        {
          name: &amp;quot;TEST&amp;quot;,
          address: &amp;quot;0xB7b1d3cC52E658922b2aF00c5729001ceA98142C&amp;quot;,
        },
      ],
    },
    &amp;quot;2221&amp;quot;: {
      providers: [&amp;quot;&amp;lt;kovan_rpc_url&amp;gt;&amp;quot;],
      assets: [
        {
          name: &amp;quot;TEST&amp;quot;,
          address: &amp;quot;0xB5AabB55385bfBe31D627E2A717a7B189ddA4F8F&amp;quot;,
        },
      ],
    },
  },
};
&lt;/pre&gt;
  &lt;blockquote id=&quot;J2jX&quot;&gt;Не знаете, откуда взялись эти удостоверения личности? Они относятся к идентификаторам &lt;a href=&quot;https://docs.connext.network/Developers/testing-against-testnet#nomad-domain-ids&quot; target=&quot;_blank&quot;&gt;доменов Nomad&lt;/a&gt;, которые представляют собой пользовательское сопоставление ID с конкретной средой выполнения (не всегда эквивалентно &amp;quot;цепочке&amp;quot;, поэтому у нас есть идентификаторы доменов).&lt;/blockquote&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Создайте-SDK&quot;&gt;&lt;br /&gt;Создайте SDK&lt;/h2&gt;
  &lt;p id=&quot;5NLy&quot;&gt;Просто позвоните &lt;code&gt;create()&lt;/code&gt;с конфигурацией сверху.&lt;/p&gt;
  &lt;pre id=&quot;RGK7&quot;&gt;const {nxtpSdkBase} = await create(nxtpConfig);
&lt;/pre&gt;
  &lt;h2 id=&quot;Постройте-xCallArgs&quot;&gt;&lt;br /&gt;Постройте xCallArgs&lt;/h2&gt;
  &lt;p id=&quot;rfdl&quot;&gt;Теперь мы построим аргументы, которые будут переданы в &lt;code&gt;xcall&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;X2Dc&quot;&gt;const callParams = {
  to: &amp;quot;&amp;lt;destination_address&amp;gt;&amp;quot;, // the address that should receive the funds
  callData: &amp;quot;0x&amp;quot;, // empty calldata for a simple transfer
  originDomain: &amp;quot;2221&amp;quot;, // send from Kovan
  destinationDomain: &amp;quot;1111&amp;quot;, // to Rinkeby
};

const xCallArgs = {
  params: callParams,
  transactingAssetId: &amp;quot;0xB5AabB55385bfBe31D627E2A717a7B189ddA4F8F&amp;quot;, // the Kovan Test Token
  amount: &amp;quot;1000000000000000000&amp;quot;, // amount to send (1 TEST)
  relayerFee: &amp;quot;0&amp;quot;, // relayers on testnet don&amp;#x27;t take a fee
};
&lt;/pre&gt;
  &lt;h2 id=&quot;Одобрение-передачи-активов&quot;&gt;&lt;br /&gt;Одобрение передачи активов&lt;/h2&gt;
  &lt;p id=&quot;SeUL&quot;&gt;Это необходимо, потому что средства сначала будут отправлены в контракт ConnextHandler перед соединением.&lt;/p&gt;
  &lt;p id=&quot;8Ep0&quot;&gt;&lt;code&gt;approveIfNeeded()&lt;/code&gt; это вспомогательная функция, которая находит правильный адрес контракта и выполняет стандартный поток &amp;quot;увеличение резерва&amp;quot; для актива.&lt;/p&gt;
  &lt;pre id=&quot;UOK8&quot;&gt;const approveTxReq = await nxtpSdkBase.approveIfNeeded(
  xCallArgs.params.originDomain,
  xCallArgs.transactingAssetId,
  xCallArgs.amount
)
const approveTxReceipt = await signer.sendTransaction(approveTxReq);
const approveResult = await approveTxReceipt.wait();
&lt;/pre&gt;
  &lt;h2 id=&quot;Отправка&quot;&gt;&lt;br /&gt;Отправка&lt;/h2&gt;
  &lt;p id=&quot;IIYB&quot;&gt;Присылайте &lt;code&gt;xcall &lt;/code&gt;свои:&lt;/p&gt;
  &lt;pre id=&quot;JK3E&quot;&gt;const xcallTxReq = await nxtpSdkBase.xcall(xCallArgs);
xcallTxReq.gasLimit = ethers.BigNumber.from(&amp;quot;30000000&amp;quot;); 
const xcallTxReceipt = await signer.sendTransaction(xcallTxReq);
console.log(xcallTxReceipt); // so we can see the transaction hash
const xcallResult = await xcallTxReceipt.wait();
&lt;/pre&gt;
  &lt;p id=&quot;mXNR&quot;&gt;Наконец, выполните следующее, чтобы запустить кросс-цепную передачу!&lt;/p&gt;
  &lt;pre id=&quot;G0le&quot;&gt;yarn build
yarn xtransfer
&lt;/pre&gt;
  &lt;h2 id=&quot;Кросс-цепь&quot;&gt;&lt;br /&gt;Кросс-цепь&lt;/h2&gt;
  &lt;p id=&quot;6y9Q&quot;&gt;Команда также может отправить произвольный &lt;code&gt;calldata&lt;/code&gt;файл вместе с тем&lt;code&gt;xcall&lt;/code&gt;, который будет выполнен в домене назначения.&lt;/p&gt;
  &lt;p id=&quot;R019&quot;&gt;В этом примере мы создадим некоторую &lt;code&gt;calldata&lt;/code&gt;целевую функцию существующего контракта, чтобы избежать развертывания нового контракта. Мы будем стремиться к &lt;code&gt;mint&lt;/code&gt;функции &lt;a href=&quot;https://rinkeby.etherscan.io/address/0xB7b1d3cC52E658922b2aF00c5729001ceA98142C#writeContract&quot; target=&quot;_blank&quot;&gt;тестового токена ERC20 (TEST)&lt;/a&gt;, чтобы продемонстрировать это.&lt;/p&gt;
  &lt;blockquote id=&quot;dx2z&quot;&gt;Чеканка обычно требует разрешения, но тестовый токен имеет публичную &lt;code&gt;mint&lt;/code&gt;функцию (вызываемую кем угодно!) это мы можем использовать для этого примера. Следовательно, это &amp;quot;unpermissioned&amp;quot; &lt;code&gt;xcall&lt;/code&gt;с calldata - ничего лишнего не нужно делать на стороне назначения.&lt;/blockquote&gt;
  &lt;h2 id=&quot;Закодируйте-calldata&quot;&gt;&lt;br /&gt;Закодируйте calldata&lt;/h2&gt;
  &lt;p id=&quot;qpMV&quot;&gt;После создания SDK (шаги 1-6 выше) мы должны создать и закодировать &lt;code&gt;calldata&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;QRxC&quot;&gt;Для этого мы просто возьмем ABI контракта тестового токена (здесь мы заботимся только о &lt;code&gt;mint&lt;/code&gt;функции) и закодируем &lt;code&gt;calldata&lt;/code&gt;его правильными аргументами.&lt;/p&gt;
  &lt;pre id=&quot;VslZ&quot;&gt;const contractABI = [
  &amp;quot;function mint(address account, uint256 amount)&amp;quot;
];
const iface = new ethers.utils.Interface(contractABI);

const calldata = iface.encodeFunctionData(
  &amp;quot;mint&amp;quot;, 
  [
    &amp;quot;0x6d2A06543D23Cc6523AE5046adD8bb60817E0a94&amp;quot;, // address to mint tokens for
    ethers.BigNumber.from(&amp;quot;100000000000000000000&amp;quot;) // amount to mint (100 TEST)
  ]
)
&lt;/pre&gt;
  &lt;h2 id=&quot;Постройте-xCallArgs&quot;&gt;&lt;br /&gt;Постройте xCallArgs&lt;/h2&gt;
  &lt;p id=&quot;IdYf&quot;&gt;Теперь&lt;code&gt;calldata&lt;/code&gt;, когда все готово, мы поставляем его &lt;code&gt;xCallArgs&lt;/code&gt;своим.&lt;/p&gt;
  &lt;pre id=&quot;UHl0&quot;&gt;const callParams = {
  to: &amp;quot;0xB7b1d3cC52E658922b2aF00c5729001ceA98142C&amp;quot;, // Rinkeby Test Token - this is the contract we are targeting
  callData: calldata, 
  originDomain: &amp;quot;2221&amp;quot;, // send from Kovan
  destinationDomain: &amp;quot;1111&amp;quot;, // to Rinkeby
};

const xCallArgs = {
  params: callParams,
  transactingAssetId: &amp;quot;0xB5AabB55385bfBe31D627E2A717a7B189ddA4F8F&amp;quot;, // the Kovan Test Token
  amount: &amp;quot;0&amp;quot;, // not sending any funds
  relayerFee: &amp;quot;0&amp;quot;, // relayers on testnet don&amp;#x27;t take a fee
};
&lt;/pre&gt;
  &lt;p id=&quot;bUaL&quot;&gt;Обратите внимание, что вы указали &lt;code&gt;amount: &amp;quot;0&amp;quot;&lt;/code&gt;выше, поэтому команда не отправляем никаких средств с этим&lt;code&gt;xcall&lt;/code&gt;. Поэтому команда может пропустить утверждение и просто отправить транзакцию.&lt;/p&gt;
  &lt;p id=&quot;gasL&quot;&gt;* тот же код*&lt;/p&gt;
  &lt;pre id=&quot;pw2y&quot;&gt;const xcallTxReq = await nxtpSdkBase.xcall(xCallArgs);
xcallTxReq.gasLimit = ethers.BigNumber.from(&amp;quot;30000000&amp;quot;); 
const xcallTxReceipt = await signer.sendTransaction(xcallTxReq);
console.log(xcallTxReceipt); // so we can see the transaction hash
const xcallResult = await xcallTxReceipt.wait();
&lt;/pre&gt;
  &lt;p id=&quot;iZpi&quot;&gt;Добавить новый скрипт в&lt;code&gt;package.json&lt;/code&gt;:&lt;/p&gt;
  &lt;p id=&quot;rL1k&quot;&gt;package.json&lt;/p&gt;
  &lt;pre id=&quot;GjAG&quot;&gt;&amp;quot;scripts&amp;quot;: {
  &amp;quot;xmint&amp;quot;: &amp;quot;node dist/xmint.js&amp;quot;
}
&lt;/pre&gt;
  &lt;p id=&quot;bHVU&quot;&gt;Наконец, запустите следующее, чтобы запустить кросс-цепной монетный двор!&lt;/p&gt;
  &lt;pre id=&quot;anV3&quot;&gt;yarn build
yarn xmint
&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Отслеживание-xcall&quot;&gt;&lt;br /&gt;Отслеживание xcall&lt;/h2&gt;
  &lt;p id=&quot;1Vqt&quot;&gt;Примечание: Будут создаваться дополнительные утилиты, чтобы упростить отслеживание полного потока &lt;code&gt;xcall&lt;/code&gt;s в ближайшем будущем.&lt;br /&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Запрос-подграфов&quot;&gt;Запрос подграфов&lt;/h2&gt;
  &lt;p id=&quot;qvoL&quot;&gt;На данный момент рекомендуется запрашивать размещенные подграфы в каждой цепочке, чтобы проверить статус транзакции.&lt;/p&gt;
  &lt;p id=&quot;iEWq&quot;&gt;Обратите внимание на хэш транзакции, который взаимодействовал с контрактом Connext&lt;/p&gt;
  &lt;pre id=&quot;RU1U&quot;&gt;Перейдите к размещенному подграфу для цепочки отправки (Kovan)Запрос по хэшу транзакции{
  originTransfers(
    where: {
      transactionHash: &amp;quot;&amp;lt;your_transaction_hash&amp;gt;&amp;quot;
    }
  ) {
    transferId
    caller
    to
    originDomain
    destinationDomain
    transactingAsset
    transactingAmount
    bridgedAsset
    bridgedAmount
    # other fields if desired
  }
}
Перейдите к размещенному подграфу для получения цепочки (Rinkeby).Запрос по идентификатору передачи, полученному из подграфа отправляющей цепочки{
  destinationTransfers(
    where: {
      transferId: &amp;quot;&amp;lt;your_transfer_id&amp;gt;&amp;quot;
    }
  ) {
    to
    originDomain
    destinationDomain
    transactingAsset
    transactingAmount
    localAsset
    localAmount
    executedCaller
    reconciledCaller
    # other fields if desired
  }
}
&lt;/pre&gt;

</content></entry><entry><id>alien_coin:Obzor-Connext-Network</id><link rel="alternate" type="text/html" href="https://teletype.in/@alien_coin/Obzor-Connext-Network?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alien_coin"></link><title>Обзор Connext Network</title><published>2022-05-16T07:49:44.802Z</published><updated>2022-05-16T08:29:07.426Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/0d/88/0d883701-abf1-41a9-9295-28c5b8d67a1a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://telegra.ph/file/ad9bd088c3b4080c8d036.jpg&quot;&gt;Connext - это первый протокол межцепочечной связи с минимальным уровнем доверия, чтобы сделать блокчейн совместимым.</summary><content type="html">
  &lt;figure id=&quot;3JbO&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/ad9bd088c3b4080c8d036.jpg&quot; width=&quot;1881&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2ZRk&quot;&gt;&lt;a href=&quot;https://www.connext.network/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Connext&lt;/strong&gt;&lt;/a&gt; - это первый протокол межцепочечной связи с минимальным уровнем доверия, чтобы сделать блокчейн совместимым.&lt;/p&gt;
  &lt;p id=&quot;pymu&quot;&gt;&lt;em&gt;В проекте выражена цель осуществить возможности децентрализованных сетей, дабы трансформировать финансы и перераспределить другого вида материальные ценности в руки людей.&lt;/em&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Содержание&quot;&gt;&lt;br /&gt;Содержание&lt;/h2&gt;
  &lt;ol id=&quot;zovQ&quot;&gt;
    &lt;li id=&quot;5UZI&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Описание&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;5jfe&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D1%81%D0%BE%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Модульная совместимость&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;SOkg&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9C%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Мобильность&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;rWtZ&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9D%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Независимость&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;gbBW&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9C%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8-%22%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE%22&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Маршрутизация и «строительство»&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;wnpG&quot;&gt;&lt;a href=&quot;https://telegra.ph/Obzor-Connext-Network-05-15#%D0%9A%D0%B0%D0%BA-%D0%B2%D1%81%D1%82%D1%83%D0%BF%D0%B8%D1%82%D1%8C-%D0%B2-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82?&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Как вступить в проект?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Описание&quot;&gt;&lt;br /&gt;Описание&lt;/h2&gt;
  &lt;figure id=&quot;6VX9&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/edbc3acacc45291837946.jpg&quot; width=&quot;1776&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Rk6B&quot;&gt;Connext&lt;strong&gt; обеспечивает быструю и минимизированную связь между блокчейнами.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7QwH&quot;&gt;Вы можете использовать Connext для создания приложений crossch (xapps), таких как:&lt;/p&gt;
  &lt;ul id=&quot;J7BQ&quot;&gt;
    &lt;li id=&quot;jrwo&quot;&gt;&lt;strong&gt;&lt;em&gt;Мосты для передачи стоимости между блокчейнами&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;sB6N&quot;&gt;&lt;em&gt;&lt;strong&gt;Протоколы &lt;/strong&gt;Interchain DeFi&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;1ePx&quot;&gt;&lt;em&gt;Chain-agnostic NFT&lt;strong&gt; и многое другое!&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;F1hf&quot;&gt;&lt;strong&gt;Цель команды проекта:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;2k55&quot;&gt;
    &lt;li id=&quot;bmhH&quot;&gt;&lt;strong&gt;&lt;em&gt;Пользователям никогда не нужно знать, в какой цепочке или свертке они находятся (если они этого не хотят!)&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;y6iG&quot;&gt;&lt;strong&gt;&lt;em&gt;Разработчики могут создавать приложения, которые используют ресурсы из многих цепочек / сверток одновременно&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Модульная-совместимость&quot;&gt;&lt;br /&gt;Модульная совместимость&lt;/h2&gt;
  &lt;figure id=&quot;tlMM&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/e24b8f1906d39846be974.jpg&quot; width=&quot;1821&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2V9w&quot;&gt;Amarok&lt;strong&gt; представляет концепцию стека протоколов межцепочечной связи с NXTP в качестве уровня ликвидности&lt;/strong&gt;, Nomad в качестве уровня обмена сообщениями и маршрутизаторами Connext в качестве транспортного уровня.&lt;/p&gt;
  &lt;p id=&quot;k7zq&quot;&gt;&lt;em&gt;Слои &lt;/em&gt;                                                                             &lt;em&gt;Протоколы и заинтересованные&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;e9zj&quot;&gt;&lt;strong&gt;Прикладной уровень                                                            Кроссчейн-приложения (Xapps)&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;v65U&quot;&gt;&lt;strong&gt;Уровень ликвидности                                                           Nxtp&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;LLva&quot;&gt;&lt;strong&gt;Уровень шлюза/Маршрутизации                                    Протокол межцепного шлюза &lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;MVxE&quot;&gt;&lt;strong&gt;Уровень обмена сообщениями                                         Nomad, IBC, XCMP, Rollup AMBs&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;8hmp&quot;&gt;&lt;strong&gt;Транспортный уровень                                                          Маршрутизаторы Connext&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Мобильность&quot;&gt;&lt;br /&gt;Мобильность&lt;/h2&gt;
  &lt;p id=&quot;uymH&quot;&gt;Connext сотрудничает с Nomad.&lt;/p&gt;
  &lt;blockquote id=&quot;2iYH&quot;&gt;&lt;strong&gt;Nomad&lt;/strong&gt; - протокол межцепочечной связи, который использует доказательства мошенничества в стиле ORU для обеспечения безопасности.&lt;/blockquote&gt;
  &lt;p id=&quot;ZqzM&quot;&gt;В тандеме стек, построенный поверх Connext и Nomad, обеспечивает одни и те же мгновенные передачи, где это возможно, а также позволяет обобщать операции с кроссчейнами, используя оптимистичное окно задержки в 30 минут для &lt;em&gt;некоторых&lt;/em&gt; вызовов.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Независимость&quot;&gt;&lt;br /&gt;Независимость&lt;/h2&gt;
  &lt;p id=&quot;N9H3&quot;&gt;Внешний механизм доказательства больше не нужен. Вместо этого маршрутизатор может просто перенести капитал в цепочку назначения, а затем дождаться, пока данные из исходной цепочки будут перенесены через уровень обмена сообщениями в пункт назначения.&lt;/p&gt;
  &lt;p id=&quot;itEi&quot;&gt;Где транзакции пользователя и маршрутизатора можно сравнить на предмет достоверности (и маршрутизатор может пополнить свой капитал). Это позволяет разрабатывать только контрактные процессы, что значительно упрощает DevX.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Маршрутизация-и-&amp;quot;строительство&amp;quot;&quot;&gt;&lt;br /&gt;Маршрутизация и &amp;quot;строительство&amp;quot;&lt;/h2&gt;
  &lt;p id=&quot;3dbF&quot;&gt;Важным шагом является достижение внебиржевого консенсуса между маршрутизаторами для &lt;strong&gt;завершения транзакций&lt;/strong&gt;. В конечном итоге это будет использовать &lt;strong&gt;консенсус Tendermint&lt;/strong&gt; и начнется процесс с централизованного секвенсора на первом этапе запуска.&lt;/p&gt;
  &lt;p id=&quot;u5hZ&quot;&gt;&lt;strong&gt;Хотите начать работу с перекрестными взаимодействиями в вашем DApp?&lt;/strong&gt; У вас есть возможность создавать и интегрировать кросс-цепную функциональность Connext в свой проект.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Как-вступить-в-проект?&quot;&gt;&lt;br /&gt;Как вступить в проект?&lt;/h2&gt;
  &lt;p id=&quot;qpD7&quot;&gt;Если есть желание поддержать проект своей деятельностью: Вам всего-то нужно заполнить &lt;a href=&quot;https://jobs.lever.co/connext-network&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;анкету&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;kPAM&quot;&gt;Далее вы увидите следующую картину:&lt;/p&gt;
  &lt;figure id=&quot;z0KB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/4f4b94100b262f4eb0e1b.jpg&quot; width=&quot;1895&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;juVP&quot;&gt;&lt;em&gt;После этого просто выбираете направление и следуете дальнейшей инструкции.&lt;/em&gt;&lt;/p&gt;

</content></entry><entry><id>alien_coin:aptosnode</id><link rel="alternate" type="text/html" href="https://teletype.in/@alien_coin/aptosnode?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alien_coin"></link><title>Установка Ноды APTOS TESTNET ( 2 ФАЗА )</title><published>2022-05-14T14:12:22.813Z</published><updated>2022-07-06T10:27:15.857Z</updated><category term="aptos" label="Aptos"></category><summary type="html">&lt;img src=&quot;https://miro.medium.com/max/1400/0*1QPBZhIrgVi-_UwG&quot;&gt;Наш Telegram канал - https://t.me/Alien_Coin </summary><content type="html">
  &lt;figure id=&quot;as1r&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/max/1400/0*1QPBZhIrgVi-_UwG&quot; width=&quot;1400&quot; /&gt;
  &lt;/figure&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;ore5&quot;&gt;Наш Telegram канал - &lt;a href=&quot;https://t.me/Alien_Coin&quot; target=&quot;_blank&quot;&gt;https://t.me/Alien_Coin&lt;/a&gt; &lt;/p&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;ADn1&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;nRAs&quot;&gt;Видео-гайд&lt;/h2&gt;
  &lt;figure id=&quot;OEfz&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/s1jdn7C0SmQ?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;KxNa&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;gOSm&quot;&gt;Требования к серверу:&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;JDLY&quot;&gt;• 4 CPU&lt;/p&gt;
    &lt;p id=&quot;PJ3r&quot;&gt;• 8 ГБ ОЗУ&lt;/p&gt;
    &lt;p id=&quot;wY2T&quot;&gt;• 300 ГБ Диск&lt;/p&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;J5tR&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;PNww&quot;&gt;Установка&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;CZwn&quot;&gt;&lt;strong&gt;1. Установка докера&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- 1.1 &lt;code&gt;wget -O get-docker.sh https://get.docker.com &lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;nVJw&quot;&gt;- 1.2 &lt;code&gt;sudo sh get-docker.sh&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;mxei&quot;&gt;- 1.3 &lt;code&gt;rm -f get-docker.sh&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;- 1.4 &lt;code&gt;sudo curl -L &amp;quot;https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)&amp;quot; -o /usr/local/bin/docker-compose&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;g0dE&quot;&gt;- 1.5 &lt;code&gt;sudo chmod +x /usr/local/bin/docker-compose&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YUCY&quot;&gt;&lt;strong&gt;2. Установка Aptos CLI&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;CfZw&quot;&gt;- 2.1 &lt;code&gt;sudo wget &lt;a href=&quot;https://github.com/aptos-labs/aptos-core/releases/download/aptos-cli-0.2.0/aptos-cli-0.2.0-Ubuntu-x86_64.zip&quot; target=&quot;_blank&quot;&gt;https://github.com/aptos-labs/aptos-core/releases/download/aptos-cli-0.2.0/aptos-cli-0.2.0-Ubuntu-x86_64.zip&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;DsXl&quot;&gt;- 2.2 &lt;code&gt;sudo apt-get install unzip&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;NUtJ&quot;&gt;- 2.3 &lt;code&gt;sudo unzip aptos-cli-0.2.0-Ubuntu-x86_64.zip&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;OHUy&quot;&gt;- 2.4 &lt;code&gt;sudo mv aptos /usr/local/bin/ &lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;sBcI&quot;&gt;- 2.5 &lt;code&gt;sudo chmod +x /usr/local/bin/aptos&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;W4lV&quot;&gt;- 2.6 &lt;code&gt;sudo ln -s /usr/local/bin/aptos /usr/bin/aptos&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;zksH&quot;&gt;&lt;strong&gt;3. Создаем каталог для композиции узла Aptos&lt;/strong&gt;&lt;br /&gt;- 3.1 &lt;code&gt;export WORKSPACE=testnet&lt;/code&gt;&lt;br /&gt;- 3.2 &lt;code&gt;mkdir ~/$WORKSPACE&lt;/code&gt;&lt;br /&gt;- 3.3 &lt;code&gt;cd ~/$WORKSPACE&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Bexg&quot;&gt;&lt;strong&gt;4. Загружаем validator.yaml, fullnode.yaml и docker-compose.yaml в этот каталог&lt;/strong&gt;&lt;br /&gt;- 4.1 wget https://raw.githubusercontent.com/aptos-labs/aptos-core/main/docker/compose/aptos-node/docker-compose.yaml&lt;br /&gt;- 4.2 wget https://raw.githubusercontent.com/aptos-labs/aptos-core/main/docker/compose/aptos-node/validator.yaml&lt;br /&gt;- 4.3 &lt;code&gt;wget https://raw.githubusercontent.com/aptos-labs/aptos-core/main/docker/compose/aptos-node/fullnode.yaml&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;THR5&quot;&gt;&lt;strong&gt;5. Создаем ключи (ключ владельца узла, консенсусный ключ и сетевой ключ)&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;WYZk&quot;&gt;- 5.1 &lt;code&gt;aptos genesis generate-keys --output-dir ~/$WORKSPACE&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;VqFl&quot;&gt;&lt;strong&gt;6. Настройка валидатора&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;bCr8&quot;&gt;&lt;code&gt;aptos genesis set-validator-configuration \&lt;br /&gt;    --keys-dir ~/$WORKSPACE --local-repository-dir ~/$WORKSPACE \&lt;br /&gt;    --username Имя_Ноды \&lt;br /&gt;    --validator-host Ваш_айпи:6180 \&lt;br /&gt;    --full-node-host Ваш_айпи:6182&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;DAQ9&quot;&gt;&lt;strong&gt;7. Создаем макет YAML-файла, который определяет узел в наборе валидаторов&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;PJip&quot;&gt;- 7.1 &lt;code&gt;nano layout.yaml&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;AZVH&quot;&gt;- 7.2 Добавляем в него:&lt;/p&gt;
    &lt;p id=&quot;pfdM&quot;&gt;-— &lt;/p&gt;
    &lt;p id=&quot;ubOS&quot;&gt;root_key: &amp;quot;F22409A93D1CD12D2FC92B5F8EB84CDCD24C348E32B3E7A720F3D2E288E63394&amp;quot;&lt;br /&gt;users:&lt;br /&gt; - &amp;quot;имя_ноды&amp;quot;&lt;br /&gt;chain_id: 40&lt;br /&gt;min_stake: 0&lt;br /&gt;max_stake: 100000&lt;br /&gt;min_lockup_duration_secs: 0&lt;br /&gt;max_lockup_duration_secs: 2592000&lt;br /&gt;epoch_duration_secs: 86400&lt;br /&gt;initial_lockup_timestamp: 1656615600&lt;br /&gt;min_price_per_gas_unit: 1&lt;br /&gt;allow_new_validators: true&lt;/p&gt;
    &lt;p id=&quot;89O7&quot;&gt;Сохраняем ( Ctrl+S ) и выходим ( Ctrl + X )&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;QsFG&quot;&gt;&lt;strong&gt;8. Скачиваем ФреймВорк&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;GyW5&quot;&gt;- 8.1 wget https://github.com/aptos-labs/aptos-core/releases/download/aptos-framework-v0.2.0/framework.zip&lt;/p&gt;
    &lt;p id=&quot;lF9s&quot;&gt;- 8 .2 &lt;code&gt;unzip framework.zip&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;IkS8&quot;&gt;&lt;strong&gt;9. Компиляция genesis blob и waypoint&lt;/strong&gt;&lt;/p&gt;
    &lt;p id=&quot;vvhR&quot;&gt;- 9.1 &lt;code&gt;aptos genesis generate-genesis --local-repository-dir ~/$WORKSPACE --output-dir ~/$WORKSPACE&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;mgek&quot;&gt;&lt;strong&gt;10. Запускаем: &lt;/strong&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/p&gt;
    &lt;p id=&quot;tiMB&quot;&gt;&lt;strong&gt;11. Делаем рестарт:&lt;/strong&gt; docker compose restart&lt;strong&gt;Посмотреть логи:&lt;/strong&gt; &lt;code&gt;docker logs -f testnet_fullnode_1 --tail 5000&lt;/code&gt;&lt;br /&gt;&lt;strong&gt;Посмотреть логи валидатора:&lt;/strong&gt; &lt;code&gt;docker logs -f testnet_validator_1 --tail 5000&lt;/code&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;geug&quot;&gt;&lt;strong&gt;Explorer ( проверка ноды )&lt;/strong&gt; - &lt;a href=&quot;https://www.aptos-node.info/&quot; target=&quot;_blank&quot;&gt;https://www.aptos-node.info/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Регистрацию проходим тут&lt;/strong&gt; - &lt;a href=&quot;https://community.aptoslabs.com/&quot; target=&quot;_blank&quot;&gt;https://community.aptoslabs.com/&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;

</content></entry></feed>