You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

266 lines
8.9 KiB

const subcommand = require('subcommand');
const { deployTONB, deposit, withdraw, transfer, blacklistAddress, getTONBOpen, getFoundationOpen, changeTONBOwner, createBlacklistVote, castVote, finishVote, requestUnstake, collectProfit } = require('./utils/interactions');
const { wallet_data, client, client4, staking_addr } = require('./utils/config');
const { randomAddress, TON } = require('./utils/helpers');
const { toNano, Address } = require('ton');
const { TONB } = require('./output/jetton_TONB');
const { Foundation } = require('./output/jetton_Foundation');
const wal_opt = {
name: 'wallet',
abbr: 'w',
default: '0',
required: false
};
const match = subcommand([
{
name: 'deposit',
options: [
{
name: 'amount',
help: 'Amount of TON to deposit',
default: '0.45'
},
{
name: 'wallet',
abbr: 'w',
default: '0',
required: false
}
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await deposit(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr);
}
},
{
name: 'withdraw',
options: [
{
name: 'amount',
abbr: 'a',
help: 'Amount of TON to withdraw',
default: '0.2'
},
{
name: 'wallet',
abbr: 'w',
default: '0',
required: false
}
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await withdraw(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr);
}
},
{
name: 'transfer',
options: [
{
name: 'amount',
help: 'Amount of TON to transfer',
default: '0.2'
},
{
name: 'address',
help: 'Address to transfer TON to',
default: randomAddress()
}],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data();
let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await transfer(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr, opts._[1]);
}
},
{
name: 'blacklist',
options: [
{
name: 'address',
},
{
name: 'wallet',
abbr: 'w',
default: '0',
required: false
}
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
if (!opts._[0]) {
opts._[0] = 'kQD7zbEMaWC2yMgSJXmIF7HbLr1yuBo2GnZF_CJNkUiGSVZ8'// my_wallet.address;
}
let addr = Address.parse(opts._[0]);
await blacklistAddress(my_wallet, secretKey, tonb_addr, addr);
}
},
{
name: 'change-tonb-owner',
options: [
{
name: 'address',
},
{
name: 'tonb',
required: false
}, wal_opt
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb = await getTONBOpen(undefined, staking_addr);
let addr = Address.parse(opts._[0]);
if (opts._[1]) {
let tonb_addr = Address.parse(opts._[1]);
tonb = client4.open(TONB.fromAddress(tonb_addr));
}
await changeTONBOwner(my_wallet, secretKey, tonb.address, addr);
// await tonb.send(my_wallet, { value: toNano('0.1') }, {
// $$type: 'SetOwner', owner: addr });
}
},
{
name: 'create-blacklist-vote',
options: [
{
name: 'address',
},
{
name: 'foundation-address',
required: false
},
wal_opt
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[1]) {
let foundation_addr = Address.parse(opts._[1]);
foundation = client.open(Foundation.fromAddress(foundation_addr));
}
let addr = Address.parse(opts._[0]);
let adminIndex = BigInt(parseInt(opts.w));
await createBlacklistVote(my_wallet, secretKey, foundation.address,
addr, 40n, adminIndex);
}
},
{
name: 'get-vote',
options: [
{
name: 'vote-id'
},
{
name: 'foundation-address',
required: false
}
],
async command(opts) {
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[1]) {
let foundation_addr = Address.parse(opts._[1]);
foundation = client4.open(Foundation.fromAddress(foundation_addr));
}
let vote = await foundation.getNthVote(opts._[0]);
console.log(vote);
}
},
{
name: 'vote',
options: [
{
name: 'vote-id'
},
{
name: 'vote',
abbr: 'v',
help: 'Vote for or against the proposal (1 - for, 2 - against)',
},
{
name: 'foundation-address',
required: false
},
wal_opt
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[2]) {
let foundation_addr = Address.parse(opts._[2]);
foundation = client.open(Foundation.fromAddress(foundation_addr));
}
let adminIndex = BigInt(parseInt(opts.w));
await castVote(my_wallet, secretKey, foundation.address, parseInt(opts._[0]), parseInt(opts._[1]), adminIndex);
}
},
{
name: 'finish-vote',
options: [
{
name: 'vote-id'
},
{
name: 'foundation-address',
required: false
},
wal_opt
],
async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[1]) {
let foundation_addr = Address.parse(opts._[1]);
foundation = client.open(Foundation.fromAddress(foundation_addr));
}
let adminIndex = BigInt(parseInt(opts.w));
await finishVote(my_wallet, secretKey, foundation.address, parseInt(opts._[0]), adminIndex);
}
},
{
name: 'request-unstake',
options: [
{
name: 'foundation-address',
required: false
}
],
async command(opts) {
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[0]) {
let foundation_addr = Address.parse(opts._[0]);
foundation = client.open(Foundation.fromAddress(foundation_addr));
}
let { my_wallet, secretKey } = await wallet_data();
await requestUnstake(my_wallet, secretKey, foundation.address, 0);
}
},
{
name: 'collect-profit',
options: [
{
name: 'foundation-address',
required: false
},
wal_opt
],
async command(opts) {
let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[0]) {
let foundation_addr = Address.parse(opts._[0]);
foundation = client.open(Foundation.fromAddress(foundation_addr));
}
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
await collectProfit(my_wallet, secretKey, foundation.address, parseInt(opts.w));
}
}
]);
const argv = process.argv.slice(2);
let opts = match(argv);