# Mina--质押&Snarking

By [chezhe](https://paragraph.com/@v2y3x4) · 2021-11-12

---

让我们把注意力转向我们可以与 Mina 网络互动的其他方式--即参与共识，并通过生成 zk-SNARKs 帮助压缩数据。通过操作一个帮助确保网络安全的节点，你可以为你的努力获得 MINA。

加入共识
====

Mina 网络是由 [Proof-of-Stake 共识](https://docs.minaprotocol.com/en/glossary#proof-of-stake)保证的。通过这种共识模式，你不需要像比特币挖矿那样拥有复杂的设备。只要我们的钱包里有 Mina，我们就可以选择自己入股，或者委托给另一个节点。让我们先来看看如何自己抵押 Mina。

> 警告：为了正确地与网络保持同步并参与共识，你的服务器必须运行某种形式的[时钟同步协议](https://en.wikipedia.org/wiki/Clock_synchronization)。我们推荐使用[NTP](https://en.wikipedia.org/wiki/Network_Time_Protocol)，它的设置相对容易，而且已经作为默认服务安装在许多流行的Linux发行版上。

### 质押 mina

我们可以通过发出以下命令来尝试用我们的 Mina 进行抵押。

    mina client set-staking --public-key $MINA_PUBLIC_KEY
    

或者，你可以用 `-block-producer-pubkey` 标志来重新启动守护进程：

    mina daemon \
        -peer-list ~/peers.txt \
        -block-producer-pubkey $MINA_PUBLIC_KEY
    

我们可以通过使用 `mina client status` 命令，随时检查我们目前正在用哪些账户做赌注：

    mina client status
    
    Mina daemon status
    -----------------------------------
    
    Global number of accounts:  372
    Block height:               20
    Max observed block length:  20
    Local uptime:               1m48s
    Ledger Merkle root:         ...
    Protocol state hash:        ...
    Staged Hash:                ...
    Git SHA-1:                  ...
    Configuration directory:    ...
    Peers:                      5 (...)
    User_commands sent:         0
    SNARK worker:               None
    SNARK work fee:             1
    Sync status:                Synced
    Block producers running:    1 (...)
    Best tip consensus time:    epoch=0, slot=133
    Next proposal:              None this epoch… checking at in 5.284h
    Consensus time now:         epoch=0, slot=134
    Consensus mechanism:        proof_of_stake
    Consensus configuration:    ...
    Addresses and ports:        ...
    Libp2p PeerID:              ...
    

上述响应中的 `Block producers running` 字段会返回当前押注的账户数量，以及相关的密钥。

> 警告：请记住，如果你是用账户中的资金独立下注，你需要一直保持与网络的连接，以成功产生区块。如果你需要经常下线，那么委托你的赌注可能会更好。

如果你想把你的 coinbase 发送到一个不是赌注的账户，你可以在启动守护程序时使用 `-coinbase-receiver` 标志。你甚至可以将 coinbase 指向一个冷钱包。

委派 mina
=======

委托 mina 是直接押注的另一种选择，其好处是不必维护一个始终连接到网络的节点。

首先确保你已经解锁了你的账户：

    mina account unlock --public-key $MINA_PUBLIC_KEY
    

然后运行这个命令来委托你的股权：

    mina client delegate-stake \
        --receiver <DELEGATE-PUBLIC-KEY> \
        --sender $MINA_PUBLIC_KEY \
        --fee 0.1
    

该命令中的字段：

*   `receiver` 标志是你的股权委托的接收者的公钥
    
*   `sender` 是你想委托的账户的公钥。
    
*   `fee` 是发送交易的成本。它被支付给网络的区块生产商。
    
*   请注意，没有金额参数。你的全部米娜余额将被自动委托。
    

你会注意到，这个命令看起来很像一个支付交易。这是因为股权委托也是一种交易! 这就是为什么我们必须支付小额交易费才能改变这一设置。

如果你对以下方面感兴趣，委托你的股权可能是有用的：

*   运行你自己的赌注节点，使用来自 "冷钱包 "的资金
    
*   委托给一个 "赌注池"，它将定期提供代币报酬
    
*   或者，如果你没有足够的代币让你全职管理一个区块链生产者是值得的
    

> 在你的新股权授权生效之前，会有一个2-4周的潜伏期。

在 Mina 网络中压缩数据
==============

Mina 协议的独特之处在于，它不像其他加密货币协议那样要求节点维护区块链的全部历史。通过递归地使用加密证明，Mina 协议有效地将区块链压缩到恒定大小。我们称之为压缩，因为它将TB级的数据减少到几千字节。

然而，这并不是传统意义上的数据编码或压缩--而是节点通过生成加密证明在网络中 "压缩 "数据。节点运营商在这个过程中发挥了关键作用，他们将自己指定为 "snark-workers"，为已经添加到区块的交易生成zk-SNARKs。

你可以用这些命令启动一个snark-worker：

    mina client set-snark-work-fee <FEE>
    mina client set-snark-worker --address $MINA_PUBLIC_KEY
    

另外，你也可以用这些标志重启守护进程。

    mina daemon \
        -peer-list ~/peers.txt \
        -run-snark-worker $MINA_PUBLIC_KEY \
        -snark-worker-fee <fee>
    

作为一个snark工作者，你可以分享你的压缩交易进入的每个区块的部分区块奖励。区块生产者负责收集压缩的交易，然后将其纳入区块，并将受到协议的激励，以奖励Snark工作者。

Snark工作者可能是相当密集的计算，所以如果你需要限制他们的CPU使用率，你可以用 `-snark-worker-parallelism` 标志指定snark工作者使用的线程数量。如果你试图在同一台机器上运行一个区块生产者和snark工作者，并且在及时生产区块方面有问题，这可能特别有用。

这大约涵盖了作为Mina节点操作员的角色和责任。由于Mina是一个无许可的点对点网络，一切都由世界各地的节点以去中心化的方式管理和运行。同样，Mina项目也是分布式的，无许可加入。代码都是开源的，而且有很多工作要做，包括技术和非技术方面。要了解更多关于你如何参与Mina的信息，请查看为[Mina做贡献部分](https://docs.minaprotocol.com/en/developers/contributing)。

使用daemon.json来配置你的mina守护程序
--------------------------

通过在 `~/.mina-config/daemon.json` 创建一个文件，你可以配置你的mina守护程序，而不需要在命令行上提供选项。这对于将mina作为一个服务来运行是非常有用的，同时也可以避免重复输入。

大多数可以在命令行上传递给 `mina daemon` 的选项也可以在配置文件中作为选项提供。参见 `mina daemon -help` 获取更多的选项文档。下面是一个所有可用配置参数的使用例子（在你的文件中，你只需要指定你想改变的参数）。

    {
      "daemon": {
        "client-port": 1000,
        "external-port": 1001,
        "rest-port": 1002,
        "block-producer-key": "/path/to/privkey-file",
        "block-producer-password": "mypassword",
        "block-producer-pubkey": "<MY PUBLICKEY>",
        "coinbase-receiver": "<MY PUBLICKEY>",
        "log-block-creation": false,
        "log-received-blocks": false,
        "log-snark-work-gossip": false,
        "log-txn-pool-gossip": false,
        "peers": ["seed-one.o1test.net", "seed-two.o1test.net"],
        "run-snark-worker": "<MY PUBLICKEY>",
        "snark-worker-fee": 10,
        "snark-worker-parallelism": 1,
        "work-reassignment-wait": 420000,
        "work-selection": "seq"
      }
    }

---

*Originally published on [chezhe](https://paragraph.com/@v2y3x4/mina-snarking)*
