使用 mytonctrl
建议在阅读本教程之前先熟悉一下 单一提名池。
准备验证者
开始前,请确保已充值并 激活 验证器的钱包。
- 下载安装脚本:
MyTonCtrl> enable_mode single-nominator
- 运行安装脚本:
MyTonCtrl> status_modes
Name Status Description
single-nominator enabled Orbs's single nominator pools.
- 创建池
MyTonCtrl> new_single_pool <pool-name> <owner_address>
如果您已经创建了池,可以导入它:
MyTonCtrl> import_pool <pool-name> <pool-addr>
- 创建池
MyTonCtrl> pools_list
Name Status Balance Version Address
test-pool empty 0.0 spool_r2 kf_JcC5pn3etTAdwOnc16_tyMmKE8-ftNUnf0OnUjAIdDJpX
- 输入
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 启动
从一开始就做好准备
如果之前没有验证器,请执行以下操作:
- 运行验证器并确保同步。
准备single_nominator
如果之前没有验证器,请执行以下操作:
- 运行验证器 并确保同步。
- 停止验证并提取所有资金。
准备单一提名人
$ sudo apt install ts-node
$ sudo npm i arg -g
- 为编译器创建符号链接:
$ sudo ln -s /usr/bin/ton/crypto/fift /usr/local/bin/fift
$ sudo ln -s /usr/bin/ton/crypto/func /usr/local/bin/func
- 运行测试,确保一切设置正确:
$ npm run test
- 替换 mytonctrl 提名池脚本: https://raw.githubusercontent.com/orbs-network/single-nominator/main/mytonctrl-scripts/install-pool-scripts.sh
创建单一提名库
- 从 Telegram @tonapibot 获取 Toncenter API 密钥
- 设置环境变量:
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>
- 创建部署者地址:
$ npm run init-deploy-wallet
Insufficient Deployer [EQAo5U...yGgbvR] funds 0
- 为部署者地址充值 2.1 TON
- 部署池合约,您将获得池地址:
Ef-kC0..._WLqgs
:
$ npm run deploy
- 备份部署器私钥"./build/deploy.config.json "和 "single-nominator.addr "文件
$ fift -s ./scripts/fift/str-to-addr.fif Ef-kC0..._WLqgs
使用钱包从single_nominator提取 Fift:
- 创建包含金额的 "withdraw.boc "申请:
- 将 "single-nominator.addr "复制到 "mytoncore/spool/single-nominator-1.addr"。
- 将质押从所有者地址发送至单一提名人地址
单一提名人的提款
使用钱包从单一提名人 Fift 提取资金:
- 创建包含金额的 "withdraw.boc" 申请:
$ fift -s ./scripts/fift/withdraw.fif <withdraw_amount>
- 从所有者的钱包创建和签署请求:
$ fift -s wallet-v3.fif <my-wallet> <single_nominator_address> <sub_wallet_id> <seqno> <amount=1> -B withdraw.boc
- 广播查询:
$ lite-client -C global.config.json -c 'sendfile wallet-query.boc'
tons
- 创建包含金额的 "withdraw.boc" 申请:
$ fift -s ./scripts/fift/withdraw.fif <withdraw_amount>
- 将申请发送至单一提名人地址:
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>
从验证器钱包中存入资金池。
或者使用以下步骤:
-
确保完全显示池的相关信息,如果池中的智能合约不对,就不会有任何信息。
-
按
ADD STAKE
按钮,或使用 Tonkeeper 或任何其他 TON 钱包扫描 QR 码。 -
转入钱包后,请输入 TON 的金额,然后发送交易。之后,TON 币将被添加到质押中。
如果钱包没有自动打开,您可以通过复制池地址手动发送交易。通过任何 TON 钱包发送。从发送的交易中,将扣除 1 TON 作为处理存款的佣金。
提取资金
您还可以使用以下命令提取资金:
MyTonCtrl> withdraw_from_pool <pool-addr> <amount>
您也可以手动创建和发送交易:
- JS (@ton)
- Golang
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
});
}
func WithdrawSingleNominatorMessage(single_nominator_address string, query_id, amount uint64) (*tonconnect.Message, error) {
const WITHDRAW_OP = 0x1000
payload, _ := cell.BeginCell().
MustStoreUInt(WITHDRAW_OP, 32). // op code for withdrawal
MustStoreUInt(query_id, 64). // query_id
MustStoreCoins(amount). // amount to withdraw
EndCell().MarshalJSON()
msg, err := tonconnect.NewMessage(
single_nominator_address,
tlb.MustFromTON("1").Nano().String(), // nanocoins to transfer/compute message
tonconnect.WithPayload(payload))
if err != nil {
return nil, err
}
return msg, nil
}
选举过程
建立单一提名库
使用 如下 说明配置单一提名人资料库合约。
参加选举
存款 向单一提名人奖池注入的最低投注额。
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 验证器的状态。
您可以通过检查以下条件来确认您的节点是否已成为完全验证器:
- ** 验证器效率** - 本地验证器的效率应为绿色,而不是 "n/a"。
- ** 验证器索引** - 验证器索引应大于-1。
检查利润
在回合结束时,MyTonCtrl 向选举人合约发送 ElectorRecoverStakeRequest 消息。它将向您的单个提名人池回复 stake + profit
数额的 Toncoin 。
您还可以使用 vas
命令查看池的事务历史记录: