PolySwarmPolySwarmPolySwarmPolySwarm
帮助

(旧版)Testing Windows-Based Participants w/ VirtualBox

警告:

此文档已被删除,未维护。 它将在以后被删除。

我们强烈鼓励所有 Windows 开发者迁移到较新、更简单和更容易测试的 Windows + Docker 指示

概览

这些说明涵盖测试基于 Windows 的:

  • 微引擎
  • 仲裁者(即将到来)

不支持基于 Windows 的代表。

在此页,我们将使用 microengine-eicar 作为微引擎的目录名称。 而在您自己的测试中,您将使用您的微引擎目录名称。

此外,在这些指示中,我们已缩短 PowerShell 命令为 PS > 以使它更容易读取命令。 实际的 PowerShell 命令提示符将类似于:(polyswarmvenv) PS C:\Users\user\microengine-eicar>. 相同于 Linux 命令提示,我们已将其缩短为 $,而您的实际命令提示将会有更多的内容在 $ 左侧。

最后,确保在激活虚拟环境的 PowerShell 窗口中执行所有命令。


单元测试

安装您的微引擎要求:

PS > pip install -r requirements.txt

(重新)编译并安装您的微引擎库:

PS > python .\setup.py install

请确保每次您做更改时,重新编译并重新安装模块!

我们将使用 pytest 测试我们的微引擎。 pytest 运行您添加到 tests/scan_<your participant name>.py 的任何单元测试。

在微引擎目录的底部运行 pytest 命令。

PS > pytest -s

输出将类似于以下内容:

================================================= test session starts =================================================
platform win32 -- Python 3.6.5, pytest-3.9.2, py-1.8.0, pluggy-0.9.0
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('C:\\Users\\user\\microengine-eicar\\.hypothesis\\examples')
rootdir: C:\Users\user\microengine-eicar, inifile:
plugins: timeout-1.3.2, cov-2.6.0, asyncio-0.9.0, hypothesis-3.82.1
collected 1 item

tests\test_eicar.py .

================================================== warnings summary ===================================================
c:\users\user\polyswarmvenv\lib\site-packages\eth_utils\applicators.py:32: DeprecationWarning: combine_argument_formatters(formatter1, formatter2)([item1, item2])has been deprecated and will be removed in a subsequent major version release of the eth-utils library. Update your calls to use apply_formatters_to_sequence([formatter1, formatter2], [item1, item2]) instead.
  "combine_argument_formatters(formatter1, formatter2)([item1, item2])"

-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================================== 1 passed, 1 warnings in 3.15 seconds =========================================
_______________________________________________________ summary _______________________________________________________

你可以安全地忽略 combine_argument_formatters 警告。


集成测试

目前仅支持在 VirtualBox 配置内执行基于 Windows 的引擎上的集成测试。 有关详细信息,请参阅 Windows 开发环境

对一个基于 Windows 的参与者进行整合测试需要两个虚拟机(VM / Guest):

  1. 一个用于运行基于 Window 的参与者的 Windows Guest (我们已经完此任务)。
  2. 一个 Linux guest 来创建一个本地的 PolySwarm 测试网(我们将会在此构建)。

此处提出的建议来之不易。 我们强烈建议您使用此处提供的确切参数进行测试。 使用任何其他配置都会使我们难以为您提供支持。

创建一个 Linux Guest

创建虚拟机

使用以下参数创建 Linux VM:

  • 名称: polyswarm_lin
  • 类型:Linux
  • 版本:Ubuntu(64 位)
  • RAM:8GB+
  • CPU:4+ 核
  • 视频内存:128MB
  • 磁碟空间:50GB+

其他选项都使用默认设置。 特别是 “不允许 3D 加速”。

总的来说,你会想要向 Linux VM 提供额外的 RAM 和 CPU 资源,使测试网表现更好。

安裝 Xubuntu 18.04 amd64

对于 VirtualBox Guests,与其使用 Ubuntu,我们强烈建议使用 Xubuntu。 Ubuntu 会出现一系列的视觉滞后问题,并且安装了虚拟框工具,很容易被全部视觉锁定(visual lockup)。

使用您下载的 ISO 来安装 Xubuntu 在 VM 中。

(可選)安装 VirtualBox Guest Additions

Guest Additions 对于 Guest 和 Host 之间的共享剪贴板/复制及粘贴功能是必要的。

请参阅 VirtualBox 的使用手册

配置 Inter-Guest 网络

我们需要建立一个“内部”网络,我们的 Linux 和 Windows VM 将使用它来相互联系。

在我们开始之前,关闭 Linux Guests 和 Windows Guests。

在您的 Windows Host 上,打开 PowerShell 窗口,更改为 VirtualBox 安装目录:

PS > pushd $Env:Programfiles\Oracle\VirtualBox

您现在应该看到您的命令提示长得类似于此:

PS C:\Program Files\Oracle\VirtualBox>

建立 PolySwarm 内部网路

为每一个 VM 创建并分配一个专门的 PolySwarm 内部网路。

这些命令将在您的虚拟机上重新配置网络适配器 #5。 如果您已经在使用此适配器(非常不可能),更改命令中的数字。

PS > .\VBoxManage.exe modifyvm "polyswarm_win" --nic5 intnet
PS > .\VBoxManage.exe modifyvm "polyswarm_win" --intnet5 "polyswarm_net"
PS > .\VBoxManage.exe modifyvm "polyswarm_lin" --nic5 intnet
PS > .\VBoxManage.exe modifyvm "polyswarm_lin" --intnet5 "polyswarm_net"

关于 VirtualBox 中的内部网络的更多信息,请参考他们的官方文档

您将不会在您的虚拟机设置或虚拟机内看到有“适配器 #5”列出。 您会看到,您的虚拟机将至少有两个活动网络适配器,并且通过将“polyswarm_net”添加到适配器 5,将更容易找到它,因为它将成为您的虚拟机中编号最高的网络接口。

使用静态 IP 地址配置虚拟机

启动 polyswarm_lin VM,并编辑网络设置,将以下静态 IPv4 信息分配给新适配器:

  • 地址:10.10.42.101
  • 网络掩码:255.255.255.0
  • 网关:10.10.42.1

如果不清楚应将这些设置应用到哪个网络接口,请运行 ifconfig -a 命令,在输出中应看到以 enp0s 开头的多个网络接口。 该前缀后的编号最大的接口通常就是要修改的接口。

启动 polyswarm_win VM,并编辑网络设置,为这些静态 IPv4 设置配置新适配器:

  • 地址:10.10.42.102
  • 网络掩码:255.255.255.0
  • 网关:10.10.42.1

如果不清楚应将这些设置应用到哪个网络接口,请运行 ipconfig /all 命令,在输出中应看到以 Ethernet adapter Ethernet 开头的多个网络接口。 该前缀后的编号最大的接口通常就是要修改的接口。

polyswarmd DNS 解析配置 Windows VM

最后,您的 Windows VM 需要知道您的 Linux VM 是 polyswarmd 的宿主。 打开一个提升的记事本实例,并将 polyswarmd 添加到 C:\Windows\System32\Drivers\etc\hosts 的底部 :

# Copyright (c) 1993-2009 Microsoft Corp.
#
# 这是 Microsoft TCP/IP for Windows 使用的一个示例性 HOSTS 文件。
#
# 此文件包含 IP 地址到主机名的映射。 应将每个
# 条目保留在单独的行上。 IP 地址应
# 放置在第一列中,后面跟相应的主机名。
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

localhost name resolution is handled within DNS itself.

127.0.0.1 localhost

::1 localhost

10.10.42.101 polyswarmd

  <h4>
    确认设置
  </h4>
  
  <p>
    最后, 验证 Windows 可将 <code>polyswarmd</code> 解析到您的 Linux VM, 并能够到达该 VM。 首先执行如下方所示的 DNS 测试:
  </p>
  
  <pre><code class="powershell">PS &gt; Resolve-DnsName -name polyswarmd

  <p>
    输出应该像这样:
  </p>
  
  <pre><code class="powershell">Name                                           Type   TTL   Section    IPAddress

polyswarmd A 86400 Answer 10.10.42.101

  <p>
    接下来,让我们来做一个 ping 测试:
  </p>
  
  <pre><code class="powershell">PS &gt; ping polyswarmd

  <p>
    输出应该像这样:
  </p>
  
  <pre><code class="powershell">Pinging polyswarmd [10.10.42.101] with 32 bytes of data:

Reply from 10.10.42.101: bytes=32 time<1ms TTL=64

  <p>
    如果您得到一样的输出,代表一个都设置正确,就让我们继续设置。
  </p>
  
  <h3>
    设置 Linux VM 来托管一个本地 Testnet
  </h3>
  
  <h4>
    安裝 Docker
  </h4>
  
  <p>
    我们已经把 PolySwarm 平台的测试版本 Docker 化了。 您需要安装 Docker-CE(base)和 Docker Compose 来使用它。 若您还没有一个近期版本的 Docker 设置好,请参照 <a href="https://www.docker.com/community-edition">立即安装 Docker</a>。
  </p>
  
  <p>
    在 Xubuntu 上:
  </p>
  
  <pre><code class="bash">$ sudo apt-get update && sudo apt-get install -y curl

$ curl -fsSL https://get.docker.com -o get-docker.sh $ chmod +x get-docker.sh $ ./get-docker.sh $ sudo usermod -aG docker $USER

  <p>
    登出,再登入。
  </p>
  
  <p>
    安装完毕后,请执行以下命令来验证安装是否正常:
  </p>
  
  <pre><code class="bash">$ docker ps

  <p>
    应输出:
  </p>
  
  <pre><code>CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

  <p>
    还要 <a href="https://docs.docker.com/compose/install/">安装 <code>docker-compose</code> </a>
  </p>
  
  <p>
    在 Xubuntu 上:
  </p>
  
  <pre><code class="bash">$ curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o docker-compose

$ sudo mv docker-compose /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose

  <p>
    安装完毕后,请验证安装是否正常。
  </p>
  
  <pre><code class="bash">$ docker-compose -v

  <p>
    输出至少应该包含:<code>docker-compose version 1.21.1, build 5a3f1a3</code>
  </p>
  
  <blockquote>
    <p>
      如果您在运行 docker 或 docker-compose 命令时收到权限错误消息,<a href="https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user">请配置您的用户帐户,以获得 docker 权限</a>。
    </p>
  </blockquote>
  
  <h4>
    安装 Git
  </h4>
  
  <p>
    我们会需要抓取一些代码库,此时使用 Git 会是最简单的选择。 请在您的开发环境中 <a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git">安装 Git </a>。
  </p>
  
  <p>
    在 Xubuntu 18.04 上:
  </p>
  
  <pre><code class="bash">$ sudo apt update && sudo apt install -y git

  <h4>
    下载 <code>orchestration</code> :
  </h4>
  
  <p>
    我们将使用 PolySwarm <a href="https://github.com/polyswarm/orchestration"><code>orchestration</code></a> 项目来启动我们的开发 Testnet。 我们在内部使用同一项目来执行端到端 (集成) 测试。
  </p>
  
  <p>
    复制 <code>orchestration</code> :
  </p>
  
  <pre><code class="bash">$ git clone https://github.com/polyswarm/orchestration

  <h3>
    测试您的微引擎
  </h3>
  
  <p>
    我们将必须在我们的 VM 之间做一些切换。 我们将首先在 Linux VM 中启动 Testnet。 然后,我们将在 Windows VM 中启动您的微引擎。 最后, 我们将在 Linux 虚拟机中启动代表。
  </p>
  
  <h4>
    Linux VM:启动 Testnet
  </h4>
  
  <p>
    创建 <code>orchestration_default</code> 网络,如果您还没有:
  </p>
  
  <pre><code class="bash">$ docker 网络创建 orchestration_default

  <div class="warning">
    <blockquote>
      <p>
        总是确保在开始集成测试之前,您更新到最新的核心 PolySwarm Docker 映像。 <code>docker-compose ... up</code> 命令必需始终使用 <code>docker-compose ... pull</code> 命令进行。
      </p>
    </blockquote>
  </div>
  
  <p>
    启动基本网络 + 仲裁者(从 <code>orchestration</code> 目录):
  </p>
  
  <pre><code class="bash">$ docker-compose -f base.yml -f arbiter-verbatim.yml pull

$ docker-compose -f base.yml -f arbiter-verbatim.yml up

  <p>
    等待 <code>polyswarmd</code> 变得可用。 <code>polyswarmd</code> 可能需要过几分钟才会完整运行。 在此期间,您将看到许多消息,例如 <code>Problem with dial... dial tcp connection refused.</code> 和 <code>chain for config not available in consul yet</code>。 在 Testnet 初始化过程中,发生这些错误是正常的,请耐心等待。
  </p>
  
  <p>
    在新的 shell 会话中查看 <code>polyswarmd</code> 日志(从 <code>orchestration</code> 目录):
  </p>
  
  <pre><code class="bash">docker-compose -f base.yml logs --follow polyswarmd

  <p>
    在此新 shell 中等待 <code>polyswarmd</code>:
  </p>
  
  <pre><code>Attaching to orchestration_polyswarmd_1_c1d732ac5355

polyswarmd1c1d732ac5355 | [2019-05-13 20:52:36 +0000] [1] [INFO] Starting gunicorn 19.9.0 polyswarmd1c1d732ac5355 | [2019-05-13 20:52:36 +0000] [1] [INFO] Listening at: http://0.0.0.0:31337 (1) ... polyswarmd1c1d732ac5355 | CRITICAL:polyswarmd.wsgi:polyswarmd is ready! polyswarmd1c1d732ac5355 | CRITICAL:polyswarmd.wsgi:polyswarmd is ready! polyswarmd1c1d732ac5355 | CRITICAL:polyswarmd.wsgi:polyswarmd is ready! polyswarmd1c1d732ac5355 | CRITICAL:polyswarmd.wsgi:polyswarmd is ready!

  <p>
    准备就绪时,<code>polyswarmd</code> 将为每个 <code>polyswarmd</code> 线程(默认为 4)显示 <code>polyswarmd is ready!</code> 一次。
  </p>
  
  <h4>
    Windows VM:测试到 <code>polyswarmd</code> 的连接
  </h4>
  
  <p>
    在您的 Windows VM 上,确认 <code>多swarmd</code> 可用,且做好了对您的微引擎作出响应的准备。 为此,请在 PowerShell 中运行以下命令:
  </p>
  
  <pre><code class="powershell">PS &gt; curl -UseBasicParsing http://polyswarmd:31337/status

  <p>
    应该有如以下的输出:
  </p>
  
  <pre><code class="powershell">StatusCode        : 200

StatusDescription : OK Content : {"result":{"home":{"block":189,"reachable":true,"syncing":false},"ipfs":{"reachable":true},"side":{ "block":191,"reachable":true,"syncing":false}},"status":"OK"} ...

  <p>
    重点是找寻 <code>"status":"OK"</code>
  </p>
  
  <h4>
    Windows VM:启动 <code>balancemanager</code> 和您的引擎
  </h4>
  
  <p>
    启动一个新的 PowerShell 窗口,并激活您的虚拟环境。 然后更改为您的微引擎目录。
  </p>
  
  <p>
    安装您的微引擎要求:
  </p>
  
  <pre><code class="powershell">PS &gt; pip install -r requirements.txt

  <p>
    (重新)编译并安装您的微引擎库:
  </p>
  
  <pre><code class="powershell">PS &gt; python .\setup.py install

  <p>
    请确保每次您做更改时,重新编译并重新安装模块!
  </p>
  
  <p>
    <code>balancemanager</code> 是一个实用程序(基于 <code>polyswarm-client</code>),将帮助我们在我们本地 Testnet 的侧链上保持(虚假)PolySwarm Nectar (NCT) 余额,所有的交易都将在此进行。
  </p>
  
  <p>
    在同一 PowerShell 窗口中,启动 <code>balancemanager</code>,如下所示:
  </p>
  
  <pre><code class="powershell">PS &gt; balancemanager --log INFO maintain --keyfile microengine_keyfile --password password --polyswarmd-addr polyswarmd:31337 --insecure-transport 100000 500000

  <p>
    其输出类似于如下所示:
  </p>
  
  <pre><code class="powershell">INFO:balancemanager:2019-04-23 16:46:54,787 Logging in text format.

INFO:polyswarmclient:2019-04-23 16:46:54,787 Logging in text format. INFO:balancemanager.main:2019-04-23 16:46:54,787 Maintaining the minimum balance by depositing 500000.0 NCT when it falls below 100000.0 NCT INFO:polyswarmclient:2019-04-23 16:46:56,474 Using account: 0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8 INFO:polyswarmclient:2019-04-23 16:46:57,175 Received connected on chain side: {'starttime': '1556063097.7256606'} INFO:polyswarmclient:2019-04-23 16:46:57,176 Connected to event socket at: 1556063097.7256606 INFO:polyswarmclient:2019-04-23 16:46:57,178 Received connected on chain home: {'starttime': '1556063097.7256606'} INFO:polyswarmclient:2019-04-23 16:46:57,178 Connected to event socket at: 1556063097.7256606 INFO:balancemanager:2019-04-23 16:46:57,487 Sidechain balance (0 NCT) is below minimum (100000000000000000000000 NCT). Depositing 500000000000000000000000 NCT WARNING:polyswarmclient.transaction:2019-04-23 16:46:58,568 Updated nonce to 1 on home INFO:balancemanager:2019-04-23 16:47:00,571 Waiting for 26 more blocks INFO:balancemanager:2019-04-23 16:47:00,583 Waiting for 25 more blocks ... INFO:balancemanager:2019-04-23 16:47:23,136 Waiting for 1 more blocks INFO:balancemanager:2019-04-23 16:47:24,280 Waiting for 0 more blocks INFO:balancemanager:2019-04-23 16:47:25,436 Checking NCT balance INFO:balancemanager:2019-04-23 16:47:25,436 Balance increased to 500000000000000000000000 NCT

  <p>
    <code>balancemanager</code> 成功转发代币后,将显示 <code>Balance increased to X NCT</code>。 发生这种情况后,就可以启动您的微引擎了。
  </p>
  
  <p>
    启动另一个新的 PowerShell 窗口,并激活您的虚拟环境。 然后更改为您的微引擎目录。
  </p>
  
  <p>
    使用类似于以下命令的命令运行微引擎。 请确保更新 <code>--backend</code> 参数的值,以与您的微引擎包目录(即 <code>src/</code> 中的目录)的名称匹配:
  </p>
  
  <pre><code class="powershell">PS &gt; microengine --log INFO --keyfile microengine_keyfile --password password --polyswarmd-addr polyswarmd:31337 --insecure-transport --testing 2 --backend polyswarm_eicar

  <p>
    其输出类似于如下所示:
  </p>
  
  <pre><code class="powershell">INFO:microengine:2019-04-23 17:01:04,224 Logging in text format.

INFO:polyswarmeicar:2019-04-23 17:01:04,224 Logging in text format. INFO:polyswarmclient:2019-04-23 17:01:04,240 Logging in text format. INFO:polyswarmclient:2019-04-23 17:01:06,100 Using account: 0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8 INFO:polyswarmeicar:2019-04-23 17:01:06,100 Loading eicar scanner... INFO:polyswarmclient:2019-04-23 17:01:06,539 Received connected on chain side: {'start_time': '1556063097.7256606'} INFO:polyswarmclient:2019-04-23 17:01:06,539 Connected to event socket at: 1556063097.7256606

  <p>
    用 <code>--testing 2</code> 运行意味着您的微引擎将响应 2 个悬赏, 然后关闭自己,拒绝响应更多悬赏。 如果您想要在测试中处理更多的悬赏,您可以调整此数字。
  </p>
  
  <p>
    但是,您的微引擎将无悬赏可供处理,直到代表向测试网发送悬赏。
  </p>
  
  <h4>
    Linux VM: 启动 Ambassador(代表)
  </h4>
  
  <p>
    返回 Linux VM 中,启动将在测试网(在 <code>orchestration</code> 目录中)上放置悬赏的代表:
  </p>
  
  <pre><code class="bash">$ docker-compose -f ambassador-eicar.yml pull

$ docker-compose -f ambassador-eicar.yml up

  <p>
    启动后不久,微引擎的 PowerShell 窗口会在处理悬赏时显示消息。
  </p>
  
  <pre><code class="powershell">INFO:microengine:2019-04-23 17:01:04,224 Logging in text format.

INFO:polyswarmeicar:2019-04-23 17:01:04,224 Logging in text format. INFO:polyswarmclient:2019-04-23 17:01:04,240 Logging in text format. INFO:polyswarmclient:2019-04-23 17:01:06,100 Using account: 0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8 INFO:polyswarmeicar:2019-04-23 17:01:06,100 Loading eicar scanner... INFO:polyswarmclient:2019-04-23 17:01:06,539 Received connected on chain side: {'starttime': '1556063097.7256606'} INFO:polyswarmclient:2019-04-23 17:01:06,539 Connected to event socket at: 1556063097.7256606 INFO:polyswarmclient:2019-04-23 17:09:04,484 Received bounty on chain side: {'uri': 'QmVoLQJ2nm4V6XiZXC9vEUrCaTHdkXS7y3crztZ5HwC9iK', 'author': '0x4B1867c484871926109E3C47668d5C0938CA3527', 'expiration': '1553', 'guid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76', 'amount': '62500000000000000'} INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:04,487 Testing mode, 1 bounties remaining INFO:polyswarmclient:2019-04-23 17:09:04,490 Received bounty on chain side: {'uri': 'QmVoLQJ2nm4V6XiZXC9vEUrCaTHdkXS7y3crztZ5HwC9iK', 'author': '0x4B1867c484871926109E3C47668d5C0938CA3527', 'expiration': '1553', 'guid': '1679c36f-1cec-49b6-9e4f-147e5b90cbf7', 'amount': '62500000000000000'} INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:04,490 Testing mode, 0 bounties remaining INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:04,599 Responding to bounty: 1679c36f-1cec-49b6-9e4f-147e5b90cbf7 INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:04,663 Responding to bounty: 1a913ea7-57d8-4116-ae8c-58a85d5fcb76 ... INFO:polyswarmclient:2019-04-23 17:09:06,068 Received bounty on chain side: {'uri': 'QmVjWbqv8aXEPE53vDYS9r3wG7odJjrHXf7ci1xfLyNAEU', 'author': '0x4B1867c484871926109E3C47668d5C0938CA3527', 'expiration': '1554', 'guid': '20eb7c80-112e-4112-b734-3227c55eb012', 'amount': '62500000000000000'} WARNING:polyswarmclient.abstractmicroengine:2019-04-23 17:09:06,068 Received new bounty, but finished with testing mode ... INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:11,115 Testing mode, 1 reveals remaining INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:11,115 Testing mode, 0 reveals remaining ... INFO:polyswarmclient:2019-04-23 17:09:12,990 Received reveal on chain side: {'author': '0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8', 'verdicts': [True], 'metadata': '', 'nonce': '56767235630862803906216335683404829506335438585994501133003213337802994149740', 'index': 0, 'bountyguid': '1679c36f-1cec-49b6-9e4f-147e5b90cbf7'} INFO:polyswarmclient:2019-04-23 17:09:12,990 Received reveal on chain side: {'author': '0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8', 'verdicts': [True], 'metadata': '', 'nonce': '98106466135750482350647664260206061365588390261131053926036201654979653772814', 'index': 0, 'bountyguid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76'} INFO:polyswarmclient.events:2019-04-23 17:09:13,288 OnRevealAssertionDueCallback callback results: [[{'author': '0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8', 'bountyguid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76', 'index': 0, 'metadata': '', 'nonce': '98106466135750482350647664260206061365588390261131053926036201654979653772814', 'verdicts': [True]}]] ... INFO:polyswarmclient:2019-04-23 17:09:39,718 Received vote on chain side: {'bountyguid': '1679c36f-1cec-49b6-9e4f-147e5b90cbf7', 'votes': [True], 'voter': '0xF870491ea0F53F67846Eecb57855284D8270284D'} INFO:polyswarmclient:2019-04-23 17:09:39,718 Received vote on chain side: {'bountyguid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76', 'votes': [True], 'voter': '0xF870491ea0F53F67846Eecb57855284D8270284D'} ... INFO:polyswarmclient:2019-04-23 17:09:39,790 Received quorum on chain side: {'bountyguid': '1679c36f-1cec-49b6-9e4f-147e5b90cbf7'} INFO:polyswarmclient:2019-04-23 17:09:39,790 Received quorum on chain side: {'bountyguid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76'} ... INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:39,802 Testing mode, 1 settles remaining INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:39,802 Testing mode, 0 settles remaining ... WARNING:polyswarmclient.abstractmicroengine:2019-04-23 17:09:41,162 Scheduled settle, but finished with testing mode ... INFO:polyswarmclient:2019-04-23 17:09:41,194 Received settledbounty on chain side: {'bountyguid': '1679c36f-1cec-49b6-9e4f-147e5b90cbf7', 'payout': 0, 'settler': '0x4B1867c484871926109E3C47668d5C0938CA3527'} INFO:polyswarmclient:2019-04-23 17:09:41,194 Received settledbounty on chain side: {'bountyguid': '1a913ea7-57d8-4116-ae8c-58a85d5fcb76', 'payout': 0, 'settler': '0x4B1867c484871926109E3C47668d5C0938CA3527'} INFO:polyswarmclient.abstractmicroengine:2019-04-23 17:09:42,193 All testing bounties complete, exiting INFO:polyswarmclient.events:2019-04-23 17:09:42,193 OnQuorumReachedCallback callback results: [[{'from': '0x6aDf0cDB042588Ec4a88393871Ddede57cC168E3', 'to': '0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8', 'value': '125000000000000000'}]] Task exception was never retrieved future: <Task finished coro=<OnQuorumReachedCallback.run() done, defined at c:\users\user\polyswarmvenv\lib\site-packages\polyswarmclient\events.py:162> exception=CancelledError()> concurrent.futures._base.CancelledError INFO:polyswarmclient:2019-04-23 17:09:42,522 Clean exit requested, exiting

  <p>
    <!-- TODO from pm: move the above and below to a platform-agnostic breakdown section -->
    
    <!-- TODO from pm: debug by payout is listed as 0 in the above -->
  </p>
  
  <p>
    以上日志中的要点:
  </p>
  
  <ol start="1">
    <li>
      微引擎启动时记录 (<code>1556063097.7256606</code>)
    </li>
    
    <li>
      微型引擎提示,其接收到了 2 个悬赏(两者都用于相同的工件)。
    </li>
    
    <li>
      微型引擎提示,其仅回应了 2 个悬赏(上述 <code>--testing 2</code> 参数)。
    </li>
    
    <li>
      微引擎回应 2 个悬赏。
    </li>
    
    <li>
      我已经接收到第三赏金,并提示,其将不会回应此赏金。
    </li>
    
    <li>
      微引擎等待断言窗口关闭,以便它可以提交其显示。
    </li>
    
    <li>
      微引擎显示其 2 个断言。
    </li>
    
    <li>
      微引擎对其回应的 2 个悬赏进行仲裁表决(除了对其不作出回应的悬赏的表决外)。
    </li>
    
    <li>
      微引擎试图解决悬赏问题,但 <code>--testing 2</code> 限制了它这样做的能力,并在它声称 <code>payout</code> 之前退出。
    </li>
  </ol>
  
  <blockquote>
    <p>
      微引擎在测试模式下,在妥善结算悬赏(和支付取回)之前退出,是一个已知的问题。 解决这个问题后,上述输出将发生变化。
    </p>
  </blockquote>
  
  <h3>
    全部完成
  </h3>
  
  <p>
    恭喜!
  </p>
  
  <p>
    基于 Windows 的参与者现在应该正响应放在 Linux VM 中的本地测试网上的悬赏。
  </p>
  
  <p>
    让您的微型引擎运行,直到其自行关闭。
  </p>
  
  <p>
    仔细查看参与者的输出,以确保其当前工作状态符合您的预期。
  </p>