跳到主要内容

使用 mytonctrl

提示

建议在阅读本教程之前先熟悉一下 单一提名池

准备验证者

警告

开始前,请确保已充值并 激活 验证器的钱包。

  1. 下载安装脚本:
MyTonCtrl> enable_mode single-nominator
  1. 运行安装脚本:
MyTonCtrl> status_modes
Name Status Description
single-nominator enabled Orbs's single nominator pools.
  1. 创建池
MyTonCtrl> new_single_pool <pool-name> <owner_address>

如果您已经创建了池,可以导入它:

MyTonCtrl> import_pool <pool-name> <pool-addr>
  1. 创建池
MyTonCtrl> pools_list
Name Status Balance Version Address
test-pool empty 0.0 spool_r2 kf_JcC5pn3etTAdwOnc16_tyMmKE8-ftNUnf0OnUjAIdDJpX
  1. 输入 pools_list 以显示池地址
MyTonCtrl> activate_single_pool <pool-name>

现在,你可以通过 mytonctrl 像使用标准提名池一样使用这个提名池。

MyTonCtrl> pools_list
Name Status Balance Version Address
test-pool active 0.99389 spool_r2 kf_JcC5pn3etTAdwOnc16_tyMmKE8-ftNUnf0OnUjAIdDJpX

现在,你可以通过 mytonctrl 像使用标准提名池一样使用这个提名池。

信息

如果资金池的余额足以参加两轮投票 (balance > min_stake_amount * 2) ,那么 MyTonCtrl 将使用 stake = balance / 2 自动参加两轮投票,除非用户使用命令set stake手动设置质押。这种行为与使用提名池不同,但与使用验证器钱包设置质押类似。

不使用 mytonctrl 启动

从一开始就做好准备

如果之前没有验证器,请执行以下操作:

  1. 运行验证器并确保同步。

准备single_nominator

如果之前没有验证器,请执行以下操作:

  1. 运行验证器 并确保同步。
  2. 停止验证并提取所有资金。

准备单一提名人

  1. 安装 nodejs v.16 及更高版本和 npm ( 详细说明 )

  2. 安装 ts-nodearg 模块

$ sudo apt install ts-node
$ sudo npm i arg -g
  1. 为编译器创建符号链接:
$ sudo ln -s /usr/bin/ton/crypto/fift /usr/local/bin/fift
$ sudo ln -s /usr/bin/ton/crypto/func /usr/local/bin/func
  1. 运行测试,确保一切设置正确:
$ npm run test
  1. 替换 mytonctrl 提名池脚本: https://raw.githubusercontent.com/orbs-network/single-nominator/main/mytonctrl-scripts/install-pool-scripts.sh

创建单一提名库

  1. 从 Telegram @tonapibot 获取 Toncenter API 密钥
  2. 设置环境变量:
export OWNER_ADDRESS=<owner_address>
export VALIDATOR_ADDRESS=<validator_wallet_address>
export TON_ENDPOINT=https://toncenter.com/api/v2/jsonRPC
export TON_API_KEY=<toncenter api key>
  1. 创建部署者地址:
$ npm run init-deploy-wallet
Insufficient Deployer [EQAo5U...yGgbvR] funds 0
  1. 为部署者地址充值 2.1 TON
  2. 部署池合约,您将获得池地址:Ef-kC0..._WLqgs
$ npm run deploy
  1. 备份部署器私钥"./build/deploy.config.json "和 "single-nominator.addr "文件
$ fift -s ./scripts/fift/str-to-addr.fif Ef-kC0..._WLqgs

使用钱包从single_nominator提取 Fift:

  1. 创建包含金额的 "withdraw.boc "申请:
  2. 将 "single-nominator.addr "复制到 "mytoncore/spool/single-nominator-1.addr"。
  3. 将质押从所有者地址发送至单一提名人地址

单一提名人的提款

使用钱包从单一提名人 Fift 提取资金:

  1. 创建包含金额的 "withdraw.boc" 申请:
$ fift -s ./scripts/fift/withdraw.fif <withdraw_amount>
  1. 从所有者的钱包创建和签署请求:
$ fift -s wallet-v3.fif <my-wallet> <single_nominator_address> <sub_wallet_id> <seqno> <amount=1> -B withdraw.boc
  1. 广播查询:
$ lite-client -C global.config.json -c 'sendfile wallet-query.boc'
tons
  1. 创建包含金额的 "withdraw.boc" 申请:
$ fift -s ./scripts/fift/withdraw.fif <withdraw_amount>
  1. 将申请发送至单一提名人地址:

a.

$ tons wallet transfer <my-wallet> <single_nominator_address> <amount=1> --body withdraw.boc
tonkeeper

b.

npm link typescript

c.

npx ts-node scripts/ts/withdraw-deeplink.ts <single-nominator-addr> <withdraw-amount>

d. 打开机主手机上的 deeplink

存款池

您可以使用 MyTonCtrl,使用以下命令存款:

MyTonCtrl> mg <from-wallet-name> <pool-account-addr> <amount>

MyTonCtrl> deposit_to_pool <pool-addr> <amount>

从验证器钱包中存入资金池。

或者使用以下步骤:

  1. 请访问池的网页 https://tonscan.org/nominator/{pool_address}。

  2. 确保完全显示池的相关信息,如果池中的智能合约不对,就不会有任何信息。

  3. ADD STAKE 按钮,或使用 Tonkeeper 或任何其他 TON 钱包扫描 QR 码。

  4. 转入钱包后,请输入 TON 的金额,然后发送交易。之后,TON 币将被添加到质押中。

如果钱包没有自动打开,您可以通过复制池地址手动发送交易。通过任何 TON 钱包发送。从发送的交易中,将扣除 1 TON 作为处理存款的佣金。

提取资金

您还可以使用以下命令提取资金:

MyTonCtrl> withdraw_from_pool <pool-addr> <amount>

您也可以手动创建和发送交易:

import { Address, beginCell, internal, storeMessageRelaxed, toNano } from "@ton/core";

async function main() {
const single_nominator_address = Address.parse('single nominator address');
const WITHDRAW_OP = 0x1000
const amount = 50000

const messageBody = beginCell()
.storeUint(WITHDRAW_OP, 32) // op code for withdrawal
.storeUint(0, 64) // query_id
.storeCoins(amount) // amount to withdraw
.endCell();

const internalMessage = internal({
to: single_nominator_address,
value: toNano('1'),
bounce: true,
body: messageBody
});
}

选举过程

建立单一提名库

使用 如下 说明配置单一提名人资料库合约。

参加选举

存款 向单一提名人奖池注入的最低投注额。

MyTonCtrl 将自动加入选举。您可以设置 mytonctrl 发送给 Elector 合约 的质押金额 ~ 在 Mainnet 上每 18 小时发送一次,在 Testnet 上每 2 小时发送一次。

MyTonCtrl> set stake 90000

使用 status 命令可以找到最低质押金额。

您可以将 stake 设置为 null,它将根据 stakePercent 值计算(可以用 status_settings 命令检查)。

可以查看选举是否已经开始:

MyTonCtrl> status

和 Testnet:

MyTonCtrl> status fast

例如

如果选举已经开始,且单提名池已激活,验证器应在下一轮选举开始时自动向选举人合约发送选举人新投票信息。

检查验证器钱包:

MyTonCtrl> wl
Name Status Balance Ver Wch Address
validator_wallet_001 active 995.828585374 v1 -1 kf_dctjwS4tqWdeG4GcCLJ53rkgxZOGGrdDzHJ_mxPkm_Xct

然后查看交易记录:

MyTonCtrl> vas kf_dctjwS4tqWdeG4GcCLJ53rkgxZOGGrdDzHJ_mxPkm_Xct
Address Status Balance Version
kf_dctjwS4tqWdeG4GcCLJ53rkgxZOGGrdDzHJ_mxPkm_Xct active 995.828585374 v1r3

Code hash
c3b9bb03936742cfbb9dcdd3a5e1f3204837f613ef141f273952aa41235d289e

Time Coins From/To
39 minutes ago >>> 1.3 kf_hz3BIXrn5npis1cPX5gE9msp1nMTYKZ3l4obzc8phrBfF

在 Tonviewer 的单一提名人合约历史记录中,该 ElectorNewStake 交易:

在上述示例中,MyTonCtrl 会自动在 Elector 合约上投入 90000 个 Toncoin 。

检查校验器状态

在下一轮开始时,使用 status 命令(Testnet 上的 status fast 命令)检查 MyTonCtrl 验证器的状态。

您可以通过检查以下条件来确认您的节点是否已成为完全验证器:

  1. ** 验证器效率** - 本地验证器的效率应为绿色,而不是 "n/a"。
  2. ** 验证器索引** - 验证器索引应大于-1。

检查利润

在回合结束时,MyTonCtrl 向选举人合约发送 ElectorRecoverStakeRequest 消息。它将向您的单个提名人池回复 stake + profit 数额的 Toncoin 。

您还可以使用 vas 命令查看池的事务历史记录:

停止参与

如果用户不想再参与验证:

  1. 禁用验证模式:
MyTonCtrl> disable_mode validator
  1. 提取 单一提名人合约中的所有资金到所有者钱包。

将常规校验器过渡到提名器池模式

  1. 禁用 "验证器 "模式,停止参与选举。
  2. 等待选举人归还你们的质押。
  3. 执行以下 步骤

单一提名池客户端

使用 Vesting 合约运行单个提名池。

从一开始,归属合约的所有者就可以用自己的钱包合约来管理它。 在此方案中,我们将管理多个合约的交互。

合约管理界面
validator_walletMytonctrl
vestingvesting.ton.org
owner_wallet应用程序,例如:Tonkeeper、MyTonWallet
single_nominator_poolMyTonctrl
  • owners_wallet - 拥有 vesting 的TON Wallet
警告

请确保您已完全备份了 Vesting owner_wallet 的恢复解析。一旦 owner_wallet 的访问权限丢失,管理 vesting 资金的访问权限也会丢失,并且无法恢复。

  1. 运行全节点,等待同步节点。
  2. 启用验证器模式,获取安装时创建的 wallet_v1 地址 - 通过 Mytonctrl wl 获取。
  3. validator_wallet 发送 200 TON (每月支出)。
  4. 创建 single_nominator_pool
MyTonCtrl> new_single_pool <pool-name> <vesting>

例如

MyTonCtrl> new_single_pool my_s_pool EQD...lme-D
  1. 激活 single_nominator_pool
MyTonCtrl> activate_single_pool <pool-name>

例如

MyTonCtrl> activate_single_pool my_s_pool
  1. 收到链上的 single_nominator_pool 地址后,请求将向您发送 Vesting 合约的 single_nominator_pool 人员列入白名单。
  2. 一旦您的 single_nominator_pool 列入白名单,您就可以通过 vesting.ton.orgvesting 合约向 single_nominator_pool 发送锁定的代币。
    • a.在 vesting.ton.org 连接 owner_wallet
    • b.从 vesting 中进行测试存款 向 single_nominator_pool 发送 10 TON 。
    • c.从vesting.ton.org接口将剩余(~8 TON)资金返还给 "vesting",并发送信息 [金额为 0,注释为w]。
    • d.确保您已收到 vesting 中的剩余资金。
  3. 将两个周期所需的 TON 数从 vesting 合约转入 single_nominator_pool
  4. 等待验证者投票。