# 挖矿

## 挖矿入门

### SCDO主网简介

SCDO主网由四个分片组成，使用PoW工作量证明共识算法。每个分片的的行为类似一个区块链。尽管用户可以在一个分片内或两个不同的分片之间发送交易和事务，但挖矿节点（一个计算机程序）只能在一个分片中挖掘。为了挖掘SCDO token，您需要一个名为node的计算机程序和一个json格式的配置文件。配置文件包含两个关键元素：接收通证（token）奖励的地址-coinbase，以及用于SCDO p2p网络连接的唯一的私钥-privateKey。在接下来的几节中，我们将说明如何生成coinbase ，privateKey和编写一个配置文件。这些完成后，您就可以挖掘SCDO token了。

挖矿详细说明，请参考[挖矿指南](https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/pages/-MQKk8Bxqb9kButR1X0l#挖矿详细指南)

### 下载

下载最新的[可执行程序和配置文件模板](https://github.com/scdoproject/go-scdo/releases)。所提取的目录具有以下结构：

```
    mac/linux/windows 
    ├── node1.json //shard1 config template
    ├── node2.json //shard2 config template
    ├── node3.json //shard3 config template
    ├── node4.json //shard4 config template
    └── build 
        ├── client //client executable for getting info
        ├── discovery
        ├── light
        ├── node //node executable for running a SCDO network node
        ├── tool
        └── vm
```

在下一节中，我们的重点是如何通过编辑json配置模板，创建一个配置文件。该文件对于运行挖矿节点是必需的。我们使用linux环境和分片1（node1.json配置模板）作为示例（Mac / windows环境非常相似）。

我们用 $PATH\_TO\_NODE\_CLIENT 表示到这些配置文件模板和可执行程序"node","client" 所在目录的路径。

### 创建配置文件

在文本编辑器中打开配置模板node1.json。其内容与以下同或类似：

```
 "basic": {
        "name": "scdo node1",
        "version": "1.0",
        "dataDir": "Snode1",
        "address": "0.0.0.0:8027",
        "coinbase": "1S01cf0b32593068f2ace7c472d5f127d3422d3b61",
        "algorithm": "zpow"
    },
    "p2p": {
        "privateKey": "0xf65e40c6809643b25ce4df33153da2f3338876f181f83d2281c6ac4a987b1479",
        "staticNodes": [
            "74.208.207.184:8057",
            "74.208.207.184:8058",
            "74.208.207.184:8059",
            "74.208.207.184:8056",
            "74.208.136.152:8056",
            "74.208.136.152:8057",
            "74.208.136.152:8058",
            "74.208.136.152:8059"
        ],
        "address": "0.0.0.0:8057",
        "networkID": "scdo"
    },
    "log": {
        "isDebug": false,
        "printLog": true
    },
    "httpServer": {
        "address": "0.0.0.0:8037",
        "crossorigins": [
            "*"
        ],
        "whiteHost": [
            "*"
        ]
    },
    "wsserver": {
        "address": "0.0.0.0:8047",
        "crossorigins": [
            "*"
        ]
    },
    "ipcconfig": {
        "name": "scdo1.ipc"
    },
    "metrics": {
        "address": "0.0.0.0:8087",
        "duration": 10,
        "database": "influxdb",
        "username": "test",
        "password": "test123"
    },
    "genesis": {
        "difficult": 1900000,
        "shard": 1,
        "timestamp": 1596942480
    }
}
```

目前为了创建一个配置文件，我们只需要替换basic部分中的coinbase和p2p部分中的privateKey即可.

为了生成coinbase 和 privateKey, 我们需要执行下面的命令行：

```
$ $PATH_TO_NODE_CLIENT/client key --shard 1
```

输出是:

```
Account:  1S0113339046e140620a05ab98abdfadedbbd88191
Private key: 0x75b032e8c53aea77288d46a7e2b508292d4b41a2b4f8ef265220535bb0012c45
```

用 1S0113339046e140620a05ab98abdfadedbbd99191 替换 basic 的 “coinbase”： 后面的字符串。 **请保存私钥 0x75b032e8c53aea77288d46a7e2b508292d4b41a2b4f8ef265220535bb0012c45 在一个安全的地方，避免丢失或被盗**. 你未来发送交易和事务时需要用到它。

再次执行相同的命令

```
$ $PATH_TO_NODE_CLIENT/client key --shard 1
```

输出是:

```
Account:  1S018274d26bea7144a3d235620bc2ac6094e4f9d1
Private key: 0x442603781c5ea6993aa880cd991fefb167bc4fe9e68c25d9e7148b9872f07d5b
```

用  0x442603781c5ea6993aa880cd991fefb167bc4fe9e68c25d9e7148b9872f07d5b 替换p2p部分的 “privateKey”： 后面的字符串。 丢弃Account 字符串 1S018274d26bea7144a3d235620bc2ac6094e4f9d1。

我们得到下面的：

```
     "basic": {
            "name": "scdo node1",
            "version": "1.0",
            "dataDir": "Snode1",
            "address": "0.0.0.0:8027",
            "coinbase": "1S0113339046e140620a05ab98abdfadedbbd88191",
            "algorithm": "zpow"
        },
        "p2p": {
            "privateKey": "0x442603781c5ea6993aa880cd991fefb167bc4fe9e68c25d9e7148b9872f07d5b",
            "staticNodes": [
                "74.208.207.184:8057",
                "74.208.207.184:8058",
                "74.208.207.184:8059",
                "74.208.207.184:8056",
                "74.208.136.152:8056",
                "74.208.136.152:8057",
                "74.208.136.152:8058",
                "74.208.136.152:8059"
            ],
            "address": "0.0.0.0:8057",
            "networkID": "scdo"
        },
        "log": {
            "isDebug": false,
            "printLog": true
        },
        "httpServer": {
            "address": "0.0.0.0:8037",
            "crossorigins": [
                "*"
            ],
            "whiteHost": [
                "*"
            ]
        },
        "wsserver": {
            "address": "0.0.0.0:8047",
            "crossorigins": [
                "*"
            ]
        },
        "ipcconfig": {
            "name": "scdo1.ipc"
        },
        "metrics": {
            "address": "0.0.0.0:8087",
            "duration": 10,
            "database": "influxdb",
            "username": "test",
            "password": "test123"
        },
        "genesis": {
            "difficult": 1900000,
            "shard": 1,
            "timestamp": 1596942480
        }
    }
```

把它存到一个文件如 node1\_1.json 或用个你喜欢的文件名字，但一定保留“json"文件格式。为了简单起见，我们还把这个文件存到 $PATH\_TO\_NODE\_CLIENT目录之下。

你可能注意到每次执行 *./client key --shard #* 都会给出不同的结果。这是对的。

你可用类似方式创建挖掘其他分片的配置文件。有关更多详细说明，请参看[创建配置文件](https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/pages/-MQKk8Bxqb9kButR1X0l#创建配置文件)

### 运行挖矿节点

在启动挖矿节点之前，您的计算机必须连接到Internet。

执行下列命令:

```
$ $PATH_TO_NODE_CLIENT/node start -c $PATH_TO_NODE_CLIENT/node1_1.json --threads 8
```

在挖矿节点启动和运行之后, 日志信息将显示在计算机屏幕上。

注：数字8表示有8个线程并行挖掘。用户可以根据自己的机器性能更改此数。例如，如果你的计算机的CPU有16个内核，则可设此数16或更大的数。

当节点启动运行并已连接到SCDO网络时，可能需要几个小时才能将SCDO网络数据同步到该节点。 在节点的数据与SCDO网络的数据同步之后，该节点将开始挖掘区块并与SCDO网络中的其他节点竞争。

### 检查与SCDO网络的连接

节点启动并运行后，你可能需要检查该节点是否已连接到SCDO网络以便赢得SCDO通证。以下命令将执行此操作：

```
$ $PATH_TO_NODE_CLIENT/client getinfo --address ip:port
```

“ - -address”后面的字符串表示节点的IP和端口。在此示例中，你可以使用“ - -address localhost：8027”。分片1的默认端口是8027，分片2的默认端口是8028，分片3的默认端口是8029，分片4的默认端口是8026。由于节点在分片1中进行挖掘，下面是输出消息。

如果“ PeerCnt”不为零，则该节点已连接到SCDO网络。 数组（3 3 1 3）表示每个分片中来自SCDO网络的多少个节点连接到你的挖矿节点。例如，分片1中有3个节点，分片3中有1个节点连接到你的节点。

```
{
        "BlockAge": 23,
        "Coinbase": "1S011c9dab11f953875fafc374a641bdaf58488771",
        "CurrentBlockHeight": 3339035,
        "HeaderHash": "0x53edbf3f80e3ffeefcb28cf6070939df7ea46926e94502f5e60a96e7459790b0",
        "MinerStatus": "Running",
        "PeerCnt": "10 (3 3 1 3)",
        "Shard": 1,
        "Version": "Scdo_V1.0.0"
    }
```

在挖矿节点已连接到同一分片中的至少一个其他节点之后，与SCDO网络/区块链数据的同步将开始。完成数据同步可能需要花费几个小时，具体取决于你的Internet连接速度。此后，将开始真正的挖掘。当你看到正在运行的节点的输出消息时，你会理解。

稍后，我们将显示仅用于运行数据同步的节点的选项。

### 查看账户余额

在挖矿节点启动一段时间后，你想看看你是否挖到SCDO通证（SCDO）。在本节中，我们说明如何查看。

配置文件中“ coinbase：”之后的十六进制格式字符串是你的挖矿帐户的地址。在我们的示例中，它是1S0113339046e140620a05ab98abdfadedbbd88191。

请执行如下命令：

```
$ $PATH_TO_NODE_CLIENT/client getbalance --account  1S0113339046e140620a05ab98abdfadedbbd88191 --address 0.0.0.0:8027
```

输出如下面的样子:

```
{
        "Account": "1S0113339046e140620a05ab98abdfadedbbd88191",
        "Balance": 400000000
}
```

实际的输出余额可能不同。

注： 余额单位是文（Wen)。 100,000,000 Wen = 1 SCDO. 因此在上面的输出了 400,000,000 Wen = 4 SCDO。

## 挖矿详细指南

### SCDO网络和挖矿基本说明

SCDO网络是点对点（p2p）网络，网络所有节点分为4个分片。 SCDO区块链使用自己独特的工作量证明共识算法（命名为ZPoW)。该算法基于随机矩阵生成和行列式计算。 ZPoW是CPU友好的。从ZPoW的测试结果来看，我们没有发现GPU / ASIC芯片具有特殊优势。因此，任何拥有计算机的个体/组织可以挖掘SCDO区块链。奖励通证命名为SCDO。 SCDO的最小单位为WEN，1 SCDO = 100,000,000 WEN。

对于分片 *n* 中的每个挖矿节点：它保留一条局部链和3条轻链，用于存储信息或数据。挖矿节点将所有涉及本片账户的交易数据存储在局部链里。每条轻链存储其相关片的局部链的每个块的哈希值。例如，如果挖掘节点位于分片1中，则有一条局部链来存储所有与分片1中的帐户有关的交易数据（区块），使用三条轻链记录其他3个分片的局部链的区块哈希值。例如，轻链2存储了分片2的局部链中所有块的哈希值，等等。借助局部链和轻链，SCDO区块链可正常运行。

由于SCDO网络节点被划分为4个分片，帐户也是如此划分。帐户具有一对唯一的地址和私钥。该地址用于持有账户余额，私钥用于签署发出的交易。

为了挖掘SCDO，你需要创建一个（或多个）帐户。

一个挖矿节点只能在一个分片中运行，使用json文件来配置。

综上所述，为了运行一个挖矿节点，你需要：

1. 账户 (一个地址和私钥匙对),
2. 配置文件

同样，以下所有演示均是linux / unix环境。我们假设读者对操作系统有基本的了解。 MAC和Windows中命令的执行与linux / unix非常相似。

### 下载可执行文件（程序）

下载最新的 [可执行文件和配置文件模板](https://github.com/scdoproject/go-scdo/build) 。提取的目录具有以下结构：

```
    mac/linux/windows 
    ├── node1.json //shard1 config template
    ├── node2.json //shard2 config template 
    ├── node3.json //shard3 config template
    ├── node4.json //shard4 config template
    └── build 
        ├── client //client executable for getting info
        ├── discovery
        ├── light
        ├── node //node executable for running a node
        ├── tool
        └── vm
```

对于挖矿，只需要可执行文件 *node* 和 *client*，并根据这些模板创建自己的配置文件。如果在分片1中挖矿，请使用node1.json作为模板。node2.json用于分片2，node3.json用于分片3，依此类推。

### 下载 SCDO 源码和编译

你可能需要根据源代码自行构建可执行文件。 从 [源代码](https://github.com/scdoproject/go-scdo.git) 下载源代码。按照 README.md 文件里的指示操作或转到 [编译节点](https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/pages/-MQKk8Bxqb9kButR1X0l#编译可执行文件) 一节.

配置文件模板应位于项目源代码目录中 *$PROJECTRDIR/scdoproject/go-scdo/cmd/node/config*, 这里 $PROJECTRDIR 是你机器上通往 scdoproject 的路径。

### 创建账户

帐户由一对唯一的地址和私钥标识。地址的前4个字符表示该帐户属于哪个分片。

假设我们已经在包含可执行文件 *node* 和 *client* 的目录之下。

通过执行命令，

```
$ ./client key --shard [option shard number]
```

片数可以是 1,2,3,4 中的任何一个，例如 执行:

```
$ ./client key --shard 1
```

得输出,

> Account: 1S014f574f8b5749eff6d24f18640d820327c5daf1
>
> Private key:0x1c18aaa42429e903aa4aba753e500e3e0061f7dbca6d1a2c6499b2226b72a0ec

注：地址（address）在输出里用 "Account" 标识。 前面4个字符标识账户（地址）属于哪个片。而且上述命令每一次的执行都会给出不同的结果。

执行 $ ./client keys --shard 2

输出是

> Account: 2S0215ac0412394ec2fa4215b72602a70724bf9b11
>
> Private key: 0x4e19191ed142c5fb9af0425b16399a09e35ef1e913d68e4fd1cbbb538de74d7d

你按自己的意愿可以生成多个账户。

通常，地址和私钥具有一一对应关系。由于SCDO有4个分片，因此允许你使用一个私钥来控制四个不同的帐户/地址，每个分片一个。也就是说有四个账户地址可以用同一个私钥。这四个账户（地址）是按如下方法生成的：

执行不带分片选项的上述命令行，将始终给出分片1中的一对地址和私钥：

```
$ ./client key  
```

输出为：

> Account: 1S01f18fd1317001c81d9cb8346521cdd9f486bb41
>
> Private key: 0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f

我们前面提到过，“帐户”字符串中的前4个字符表示该帐户属于哪个分片。

如果编辑帐户字符串：>1S01f18fd1317001c81d9cb8346521cdd9f486bb41 的前四个字符，你可以得到如下三个不同的地址

> 2S02f18fd1317001c81d9cb8346521cdd9f486bb41
>
> 3S03f18fd1317001c81d9cb8346521cdd9f486bb41
>
> 4S04f18fd1317001c81d9cb8346521cdd9f486bb41

加上先前的一个，将有四对:

> Account: 1S01f18fd1317001c81d9cb8346521cdd9f486bb41
>
> Private key: 0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f
>
> Account:2S02f18fd1317001c81d9cb8346521cdd9f486bb41
>
> Private key: 0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f
>
> Account: 3S03f18fd1317001c81d9cb8346521cdd9f486bb41
>
> Private key: 0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f
>
> Account: 4S04f18fd1317001c81d9cb8346521cdd9f486bb41
>
> Private key: 0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f

这些都是SCDO中的有效帐户，并且具有相同的私钥0xa94c7bb78579585a8b1d3346034fc124ace2e79ba80c3107fbb3d72be86dcb8f。

不过，我们推荐每次通过执行下述命令行来生成不同帐户。

```
$ ./client key --shard [option]
```

现在你知道如何生成一对地址（又称公钥）和私钥了。让我们继续下一个任务-创建配置文件。

### 创建配置文件

启动挖矿节点，必须有配置文件。我们将从配置模板开始，解释关键部分。然后，用户可通过编辑模板文件创建自己的配置文件。

#### 配置文件模板

> { "basic": { "name": "scdo node1", // "version": "1.0", "dataDir": "Snode1", "address": "0.0.0.0:8027", "coinbase": "1S01cf0b32593068f2ace7c472d5f127d3422d3b61", "algorithm": "zpow" }, "p2p": { "privateKey": "0xf65e40c6809643b25ce4df33153da2f3338876f181f83d2281c6ac4a987b1479", "staticNodes": \[ "74.208.207.184:8057", "74.208.207.184:8058", "74.208.207.184:8059", "74.208.207.184:8056", "74.208.136.152:8056", "74.208.136.152:8057", "74.208.136.152:8058", "74.208.136.152:8059" ],
>
> ```
>            "address": "0.0.0.0:8057",
>            "networkID": "scdo"
>        },
>        "log": {
>            "isDebug": false,
>            "printLog": true
>        },
>        "httpServer": {
>            "address": "0.0.0.0:8037",
>            "crossorigins": [
>                "*"
>            ],
>            "whiteHost": [
>                "*"
>            ]
>        },
>        "wsserver": {
>            "address": "0.0.0.0:8047",
>            "crossorigins": [
>                "*"
>            ]
>        },
>        "ipcconfig": {
>            "name": "scdo1.ipc"
>        },
>        "metrics": {
>            "address": "0.0.0.0:8087",
>            "duration": 10,
>            "database": "influxdb",
>            "username": "test",
>            "password": "test123"
>        },
>        "genesis": {
>            "difficult": 1900000,
>            "shard": 1,
>            "timestamp": 1596942480
>        }
>    }
>    
> ```
>
> #### 配置模板文件的说明

**basic 部分**

> "basic": { "name": "scdo node1", // "version": "1.0", "dataDir": "Snode1", "address": "0.0.0.0:8027", "coinbase": "1S01cf0b32593068f2ace7c472d5f127d3422d3b61", "algorithm": "zpow" }

"name": 节点名称, 标记. 你可使用任何名称，不过最好根据所在的片选择名称。这里表示是个片1的节点。

"version": SCDO发行版的版本号。它是你运行的*node* 的版本号。

"dataDir": 目录名字。该目录用于存储节点产生的数据，例如区块链数据，网络连接数据文件等。可以使用与“name”后面的字符串类似的名称。

"address": IP地址和端口号-节点的本地IP地址和端口号。执行 “client”命令时将使用此信息。对于分片1中的挖掘节点，端口号设置为8027（实际上，它可以是任何端口号，只要没有冲突即可）

"coinbase": 你的帐户地址。请参考 [创建账户](https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/pages/-MQKk8Bxqb9kButR1X0l#创建账户) 如何生成地址（账户）和私钥. 然后用自己的账户替代coinbase后面的字符串。

"algorithm": "zpow" -- 不需要修改.

**p2p 部分**

"p2p": {

> "privateKey": "0xf65e40c6809643b25ce4df33153da2f3338876f181f83d2281c6ac4a987b1479", "staticNodes": \[ "74.208.207.184:8057", "74.208.207.184:8058", "74.208.207.184:8059", "74.208.207.184:8056", "74.208.136.152:8056", "74.208.136.152:8057", "74.208.136.152:8058", "74.208.136.152:8059" ], "address": "0.0.0.0:8057", "networkID": "scdo" },

The "privatekey": 它是你的节点的唯一网络标识符。你要通过命令“ *./client key* ” 生成一个”Private key", 用它替换示例中”privateKey"后面的字符串。此私钥与你的帐户私钥无关。。另请参见 [创建账户](https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/pages/-MQKk8Bxqb9kButR1X0l#创建账户).

"staticNodes": 这些ip地址是你的挖矿节点尝试连接SCDO网络的起始节点。通常，你无需从模板中替换它们（以后可以添加更多）。端口号：8057用于分片1，8058分片2，8059分片3，8056分片4。这些静态节点通常由SCDO项目团队管理。它们用于SCDO区块链的数据同步。

"address": 节点的本地IP地址和端口号。如果你在分片1中挖矿，则端口号应为8057，依此类推。 如果其他挖掘节点想要连接你分片1的节点，使用的是这个端口号。

"networkID": 这是SCDO网络的ID。无需修改，否则将阻止你的挖矿节点加入SCDO网络。

#### 配置模板其他部分

不需做任何修改。

编辑配置模板后，你可以将其保存为json格式的文件，例如node1\_1.json（或不同名称，只是要记住是那个分片的即可）。

### 运行挖矿节点

执行下述命令

```
 $ ./node start -c [配置文件名] --threads [线程数] 
```

例如，使用我们前面一节创建的配置文件 node1\_1.json，选取线程数为10， 命令将为：

```
$ ./node start -c ./node1_1.json --threads 10 
```

如果这是你第一次执行该命令，则可能需要花费几个小时来同步所有SCDO 区块链的数据。如果使用以下选项，则效果会更好：

```
       $ ./node start -c ./node1_1.json --threads 10 -m stop
```

这样可以加快数据同步。

日志信息将逐行显示在屏幕上，你可以“pipe”这些到一个文件里，并将其保存，如果需要的话。如果你的节点和SCDO网络的连接已建立，它将很快开始与SCDO网络同步数据。

当同步数据完成后，你需要关停node, 然后把 “-m stop" 移除，重新开始。如果你的机器速度较快，CPU i7以上，网络宽带链接良好，应该有很大机会争得SCDO通证奖励。

### 检查与SCDO网络连接

在你的挖矿节点启动并运行之后，为了有机会赢得一些SCDO奖励，该节点必需连接到SCDO网络。另外，它应与每个分片中的节点建立连接，以保持与网络的稳定连接。

为了查看连接状况信息，请使用

```
$ ./client getinfo [--address ip:port]
```

”- -address” 之后的字符串表示节点的ip和端口。在此示例中，你可以省略它，因为默认值为0.0.0.0:8027（对于分片1）， 你的节点在片1挖矿。输出结果与下面的类似：

```
    {
        "BlockAge": 23,
        "Coinbase": "1S011c9dab11f953875fafc374a641bdaf58488771",
        "CurrentBlockHeight": 3339035,
        "HeaderHash": "0x53edbf3f80e3ffeefcb28cf6070939df7ea46926e94502f5e60a96e7459790b0",
        "MinerStatus": "Running",
        "PeerCnt": "10 (3 3 1 3)",
        "Shard": 1,
        "Version": "Scdo_V1.0.0"
    }
```

"BlockAge": 23表示局部链最新区块挖出至今的时间。

"Coinbase": "1S011c9dab11f953875fafc374a641bdaf58488771", 你的挖矿账户地址.

"CurrentBlockHeight": 3339035, 局部链最新区块的高度。

"HeaderHash": "0x53edbf3f80e3ffeefcb28cf6070939df7ea46926e94502f5e60a96e7459790b0", 局部链的最新区块的哈希值，在我们的示例中为分片1的局部链块头。

"MinerStatus": "Running", 挖矿节点状态。

"PeerCnt": "10 (3 3 1 3)", 表示连接的节点总数为10。其中在片1，片2各三个，片3 一个、片4 三个。如果没有零，那非常好！

"Shard": 1, 表示片1挖矿。

如果你想了解有关连接的更多信息，请执行以下操作：

```
$ ./client p2p peersinfo [--address ip:port]
```

因为我们的节点在片1挖，可以省略ip 地址和port. 输出结果将类似于以下内容：

```
[
        {
            "caps": [
                "lightScdo_3/1",
                "lightScdo_4/1",
                "scdo/1",
                "lightScdo_1/1",
                "lightScdo_2/1"
            ],
            "id": "1S01759e0cbd1b801508924e90e35dc9c70bd601e1",
            "network": {
                "localAddress": "192.168.1.38:44056",
                "remoteAddress": "74.208.207.184:8057"
            },
            "protocols": {
                "lightScdo_1": "handshake",
                "lightScdo_2": "handshake",
                "lightScdo_3": "handshake",
                "lightScdo_4": "handshake",
                "scdo": {
                    "difficulty": 1696077961295,
                    "head": "f7b699259bca687a4760d96e8ea08a4ccf607bbdc99cd4432aaf1f534a60e471",
                    "version": 1
                }
            },
            "shard": 1
        },
        {
            "caps": [
                "lightScdo_4/1",
                "scdo/1",
                "lightScdo_1/1",
                "lightScdo_2/1",
                "lightScdo_3/1"
            ],
            "id": "2S024fdf4e2f59eb5fc16837c8419d971e17f99551",
            "network": {
                "localAddress": "192.168.1.38:47118",
                "remoteAddress": "74.208.136.152:8058"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1687915773901,
                    "head": "5128f82743db7b3d9dc9a45cb4ff717fa3dae9c796f65daa83c28da41fd6f14b",
                    "version": 1
                },
                "lightScdo_2": {
                    "difficulty": 1714829896315,
                    "head": "5a2f49eaf3e144f514b68be0e7c4924448404429cb0e966e803ab560",
                    "version": 1
                },
                "lightScdo_3": "handshake",
                "lightScdo_4": "handshake",
                "scdo": {
                    "difficulty": 1714829896315,
                    "head": "be33c8405a2f49eaf3e144f514b68be0e7c4924448404429cb0e966e803ab560",
                    "version": 1
                }
            },
            "shard": 2
        },
        {
            "caps": [
                "lightScdo_1/1",
                "lightScdo_2/1",
                "lightScdo_3/1",
                "lightScdo_4/1",
                "scdo/1"
            ],
            "id": "2S02b486bcfdc07ea6417225721dbfe0246325c7a1",
            "network": {
                "localAddress": "192.168.1.38:57300",
                "remoteAddress": "74.208.207.184:8058"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1687784917421,
                    "head": "6ddd3de03021a3aecbdd3dbd286d743d394b0d6a20f15dbc7c32b0699edd46ba",
                    "version": 1
                },
                "lightScdo_2": {
                    "difficulty": 1714824520587,
                    "head": "fe904ca61847dad5182e8b6dc95303db5b33b84048d47528b44aa0a32911af79",
                    "version": 1
                },
                "lightScdo_3": "handshake",
                "lightScdo_4": "handshake",
                "scdo": {
                    "difficulty": 1714824520587,
                    "head": "fe904ca61847dad5182e8b6dc95303db5b33b84048d47528b44aa0a32911af79",
                    "version": 1
                }
            },
            "shard": 2
        },
        {scdorand_linux_amd64.a
            "caps": [
                "lightScdo_2/1",
                "lightScdo_3/1",
                "lightScdo_4/1",
                "scdo/1",
                "lightScdo_1/1"
            ],
            "id": "2S02d83dc671800300f80546b8cacd266bca9cab41",
            "network": {
                "localAddress": "192.168.1.38:47876",
                "remoteAddress": "109.228.36.218:8058"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1687759712020,
                    "head": "8d1fca279d826d85eba52a9f38fdac73390aa549853451a489b2729734bb0369",
                    "version": 1
                },
                "lightScdo_2": {
                    "difficulty": 1714829896315,
                    "head": "be33c8405a2f49eaf3e144f514b68be0e7c4924448404429cb0e966e803ab560",
                    "version": 1
                },
                "lightScdo_3": "handshake",
                "lightScdo_4": "handshake",
                "scdo": {
                    "difficulty": 1714829896315,
                    "head": "be33c8405a2f49eaf3e144f514b68be0e7c4924448404429cb0e966e803ab560",
                    "version": 1
                }
            },
            "shard": 2
        },
        {
            "caps": [
                "lightScdo_4/1",
                "scdo/1",
                "lightScdo_1/1",
                "lightScdo_2/1",
                "lightScdo_3/1"
            ],
            "id": "3S03c3fe4ba31da9246c065c4e15a93e9ae71c67b1",
            "network": {
                "localAddress": "192.168.1.38:41990",
                "remoteAddress": "74.208.207.184:8059"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1687794976919,
                    "head": "16f4a62b766dd6c1b6ba9324993d2f6b883fb4e21e57da117955ee8ed98ee5fc",
                    "version": 1
                },
                "lightScdo_2": "handshake",
                "lightScdo_3": {
                    "difficulty": 1701944364685,
                    "head": "1399e67ef78aa19d3a4ffa99784fc276675d9906e8a837f29ae2bd4b520fe4a1",
                    "version": 1
                },
                "lightScdo_4": "handshake",
                "scdo": {
                    "difficulty": 1701944364685,
                    "head": "1399e67ef78aa19d3a4ffa99784fc276675d9906e8a837f29ae2bd4b520fe4a1",
                    "version": 1
                }
            },
            "shard": 3
        },
        {
            "caps": [
                "lightScdo_1/1",
                "lightScdo_2/1",
                "lightScdo_3/1",
                "lightScdo_4/1",
                "scdo/1"
            ],
            "id": "4S04f17b6fc55cc58017aad9c5b33abeee5b1dbb41",
            "network": {
                "localAddress": "192.168.1.38:42890",
                "remoteAddress": "104.254.244.44:8056"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1685204026183,
                    "head": "c704b010291d3a2c25ebfe8f7123c088a177feed77c7d55c06a78d02bc62ca3d",
                    "version": 1
                },
                "lightScdo_2": "handshake",
                "lightScdo_3": "handshake",
                "lightScdo_4": {
                    "difficulty": 1704245912720,
                    "head": "0017ced433cb1fa47045110f7fffca291291c33b0e842057f4fc2cbc33e42c83",
                    "version": 1
                },
                "scdo": {
                    "difficulty": 1704245912720,
                    "head": "0017ced433cb1fa47045110f7fffca291291c33b0e842057f4fc2cbc33e42c83",
                    "version": 1
                }
            },
            "shard": 4
        }
]
```

挖掘节点位于分片1中。让我们尝试理解上面的信息。输出结果由数据结构相同的多个部分组成。\
这是其中之一：

```
{
                "caps": [
                    "lightScdo_3/1",
                    "lightScdo_4/1",
                    "scdo/1",
                    "lightScdo_1/1",
                    "lightScdo_2/1"
                ],
                "id": "1S01759e0cbd1b801508924e90e35dc9c70bd601e1",
                "network": {
                    "localAddress": "192.168.1.38:44056",
                    "remoteAddress": "74.208.207.184:8057"
                },
                "protocols": {
                    "lightScdo_1": "handshake",
                    "lightScdo_2": "handshake",
                    "lightScdo_3": "handshake",
                    "lightScdo_4": "handshake",
                    "scdo": {
                        "difficulty": 1696077961295,
                        "head": "f7b699259bca687a4760d96e8ea08a4ccf607bbdc99cd4432aaf1f534a60e471",
                        "version": 1
                    }
                },
                "shard": 1
            },
```

上面告诉我们连接的远程节点属于分片1，其IP地址为“ 74.208.207.184:8057”。你现在可以忽略上述其他部分。

下节说明连接的远程节点属于分片4。

```
{
            "caps": [
                "lightScdo_1/1",
                "lightScdo_2/1",
                "lightScdo_3/1",
                "lightScdo_4/1",
                "scdo/1"
            ],
            "id": "4S04f17b6fc55cc58017aad9c5b33abeee5b1dbb41",
            "network": {
                "localAddress": "192.168.1.38:42890",
                "remoteAddress": "104.254.244.44:8056"
            },
            "protocols": {
                "lightScdo_1": {
                    "difficulty": 1685204026183,
                    "head": "c704b010291d3a2c25ebfe8f7123c088a177feed77c7d55c06a78d02bc62ca3d",
                    "version": 1
                },
                "lightScdo_2": "handshake",
                "lightScdo_3": "handshake",
                "lightScdo_4": {
                    "difficulty": 1704245912720,
                    "head": "0017ced433cb1fa47045110f7fffca291291c33b0e842057f4fc2cbc33e42c83",
                    "version": 1
                },
                "scdo": {
                    "difficulty": 1704245912720,
                    "head": "0017ced433cb1fa47045110f7fffca291291c33b0e842057f4fc2cbc33e42c83",
                    "version": 1
                }
            },
            "shard": 4
        }
```

其他相似的部分具有类似的解释。

### 查账户余额

即使你的挖矿节点已完全连接到SCDO网络，也无法保证一定能赢得一些回报。您赢得的SCDO数量将取决于计算机的算力。例如，Intel i5处理器会比Intel i9慢。

执行以下命令查看余额：

```
$ ./client getbalance --account 1S01cf0b32593068f2ace7c472d5f127d3422d3b61 --address 0.0.0.0:8027  
```

你会从输出结果中看到余额。

注: 1S01cf0b32593068f2ace7c472d5f127d3422d3b61 -- 这将由您的配置文件中的coinbase替换。 0.0.0.0:8027 -- 这是分片1中你的挖矿节点的默认IP地址。它可以用分片1中的静态节点的IP地址代替。

## 编译可执行文件

首先，你需要在计算机上安装git，gcc和go（linux / mac / windows）软件包。

git 版本 2.17.1 或更新的版本.

gcc 版本 7.3.0 或更新的版本

go 版本 1.12.7 (这个版号不能变，因为SCDO使用了某些链接函数库）。

在主目录中创建路径 *go/src/github.com/scdoproject*。

### 下载 go-scdo

```
~$ cd 
~$ cd go/src/github.com/scdoproject
~$ git clone https://github.com/scdoproject/go-scdo.git

Cloning into 'go-scdo'...
remote: Enumerating objects: 53, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (48/48), done.
remote: Total 10032 (delta 13), reused 15 (delta 4), pack-reused 9979
Receiving objects: 100% (10032/10032), 12.25 MiB | 18.45 MiB/s, done.
Resolving deltas: 100% (5804/5804), done.
```

### 编译 go-scdo：

linux/mac环境：

```
~$ cd go-scdo
~$ make all

go build -o ./build/discovery ./cmd/discovery
Done discovery building
go build -o ./build/node ./cmd/node 
Done node building
go build -o ./build/client ./cmd/client
Done full node client building
go build -o ./build/light ./cmd/client/light
Done light node client building
go build -o ./build/tool ./cmd/tool
Done tool building
go build -o ./build/vm ./cmd/vm
Done vm building
```

所有可执行文件在 ./build 目录下。

对于Windows，在命令提示符下执行“ buildall.bat”，而不是“ make all”。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://scdo-project.gitbook.io/scdo-wiki/zhong-wen/wa-kuang.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
