Lev 2 years ago
parent
commit
dd9339a548
  1. 98
      sources/cli.js
  2. 6
      sources/foundation.deploy.ts
  3. 8
      sources/foundation.tact
  4. 4
      sources/jetton.deploy.ts
  5. 2
      sources/output/jetton_Foundation.abi
  6. BIN
      sources/output/jetton_Foundation.code.boc
  7. 8
      sources/output/jetton_Foundation.code.fc
  8. 16
      sources/output/jetton_Foundation.code.fif
  9. 14
      sources/output/jetton_Foundation.code.rev.fif
  10. 2
      sources/output/jetton_Foundation.md
  11. 2
      sources/output/jetton_Foundation.pkg
  12. 5
      sources/output/jetton_Foundation.ts
  13. 2
      sources/output/jetton_Linker.abi
  14. 2
      sources/output/jetton_Linker.code.fc
  15. 2
      sources/output/jetton_Linker.code.fif
  16. 2
      sources/output/jetton_Linker.pkg
  17. 1
      sources/output/jetton_Linker.ts
  18. 2
      sources/output/jetton_PseudoStaking.abi
  19. 2
      sources/output/jetton_PseudoStaking.code.fc
  20. 2
      sources/output/jetton_PseudoStaking.code.fif
  21. 2
      sources/output/jetton_PseudoStaking.pkg
  22. 1
      sources/output/jetton_PseudoStaking.ts
  23. 2
      sources/output/jetton_TONB.abi
  24. 2
      sources/output/jetton_TONB.code.fc
  25. 2
      sources/output/jetton_TONB.code.fif
  26. 2
      sources/output/jetton_TONB.pkg
  27. 1
      sources/output/jetton_TONB.ts
  28. 2
      sources/output/jetton_TONBWallet.abi
  29. 2
      sources/output/jetton_TONBWallet.code.fc
  30. 2
      sources/output/jetton_TONBWallet.code.fif
  31. 2
      sources/output/jetton_TONBWallet.pkg
  32. 1
      sources/output/jetton_TONBWallet.ts
  33. 44
      sources/pseudostaking.deploy.ts
  34. 9
      sources/utils/config.ts
  35. 52
      sources/utils/interactions.ts

98
sources/cli.js

@ -1,7 +1,7 @@
const subcommand = require('subcommand'); const subcommand = require('subcommand');
const { deployTONB, deposit, withdraw, transfer, blacklistAddress, getTONBOpen, getFoundationOpen, changeTONBOwner, createBlacklistVote } = require('./utils/interactions'); const { deployTONB, deposit, withdraw, transfer, blacklistAddress, getTONBOpen, getFoundationOpen, changeTONBOwner, createBlacklistVote, castVote, finishVote, requestUnstake, collectProfit } = require('./utils/interactions');
const { wallet_data, client, client4 } = require('./utils/config'); const { wallet_data, client, client4, staking_addr } = require('./utils/config');
const { randomAddress, TON } = require('./utils/helpers'); const { randomAddress, TON } = require('./utils/helpers');
const { toNano, Address } = require('ton'); const { toNano, Address } = require('ton');
const { TONB } = require('./output/jetton_TONB'); const { TONB } = require('./output/jetton_TONB');
@ -32,8 +32,8 @@ const match = subcommand([
} }
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts._[1])); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = await deployTONB(undefined, true); let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await deposit(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr); await deposit(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr);
} }
}, },
@ -54,8 +54,8 @@ const match = subcommand([
} }
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts._[1])); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = await deployTONB(undefined, true); let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await withdraw(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr); await withdraw(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr);
} }
}, },
@ -74,7 +74,7 @@ const match = subcommand([
}], }],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(); let { my_wallet, secretKey } = await wallet_data();
let tonb_addr = await deployTONB(undefined, true); let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
await transfer(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr, opts._[1]); await transfer(my_wallet, secretKey, parseFloat(opts._[0]) * 1000000000, tonb_addr, opts._[1]);
} }
}, },
@ -92,8 +92,8 @@ const match = subcommand([
} }
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts._[1])); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb_addr = await deployTONB(undefined, true); let tonb_addr = (await getTONBOpen(undefined, staking_addr)).address;
if (!opts._[0]) { if (!opts._[0]) {
opts._[0] = 'kQD7zbEMaWC2yMgSJXmIF7HbLr1yuBo2GnZF_CJNkUiGSVZ8'// my_wallet.address; opts._[0] = 'kQD7zbEMaWC2yMgSJXmIF7HbLr1yuBo2GnZF_CJNkUiGSVZ8'// my_wallet.address;
} }
@ -114,7 +114,7 @@ const match = subcommand([
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w)); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let tonb = await getTONBOpen(); let tonb = await getTONBOpen(undefined, staking_addr);
let addr = Address.parse(opts._[0]); let addr = Address.parse(opts._[0]);
if (opts._[1]) { if (opts._[1]) {
let tonb_addr = Address.parse(opts._[1]); let tonb_addr = Address.parse(opts._[1]);
@ -139,20 +139,15 @@ const match = subcommand([
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w)); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let foundation = await getFoundationOpen((await getTONBOpen()).address); let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[1]) { if (opts._[1]) {
let foundation_addr = Address.parse(opts._[1]); let foundation_addr = Address.parse(opts._[1]);
foundation = client.open(Foundation.fromAddress(foundation_addr)); foundation = client.open(Foundation.fromAddress(foundation_addr));
} }
let addr = Address.parse(opts._[0]); let addr = Address.parse(opts._[0]);
let adminIndex = BigInt(parseInt(opts.w)); let adminIndex = BigInt(parseInt(opts.w));
// let msg = {
// $$type: 'InitiateBlacklistVote', wallet: addr,
// vote_time: 10n, quorum_percent: 50n, adminIndex // An admin has to create the vote
// };
// await foundation.send(my_wallet, { value: toNano('1.1') }, msg);
await createBlacklistVote(my_wallet, secretKey, foundation.address, await createBlacklistVote(my_wallet, secretKey, foundation.address,
addr, 10n, adminIndex); addr, 40n, adminIndex);
} }
}, },
{ {
@ -167,7 +162,7 @@ const match = subcommand([
} }
], ],
async command(opts) { async command(opts) {
let foundation = await getFoundationOpen((await getTONBOpen()).address); let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[1]) { if (opts._[1]) {
let foundation_addr = Address.parse(opts._[1]); let foundation_addr = Address.parse(opts._[1]);
foundation = client4.open(Foundation.fromAddress(foundation_addr)); foundation = client4.open(Foundation.fromAddress(foundation_addr));
@ -195,14 +190,73 @@ const match = subcommand([
], ],
async command(opts) { async command(opts) {
let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w)); let { my_wallet, secretKey } = await wallet_data(parseInt(opts.w));
let foundation = await getFoundationOpen((await getTONBOpen()).address); let foundation = await getFoundationOpen((await getTONBOpen(undefined, staking_addr)).address);
if (opts._[2]) { if (opts._[2]) {
let foundation_addr = Address.parse(opts._[2]); let foundation_addr = Address.parse(opts._[2]);
foundation = client.open(Foundation.fromAddress(foundation_addr)); foundation = client.open(Foundation.fromAddress(foundation_addr));
} }
await foundation.send(my_wallet, { value: toNano('0.1') }, { let adminIndex = BigInt(parseInt(opts.w));
$$type: 'VoteMsg', voteId: opts._[0], vote: opts._[1], 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));
} }
} }
]); ]);

6
sources/foundation.deploy.ts

@ -1,8 +1,6 @@
import { beginCell, contractAddress, toNano, TonClient, TonClient4, Address, WalletContractV4, internal, fromNano, Cell} from "ton"; import { beginCell, contractAddress, toNano, TonClient, TonClient4, Address, WalletContractV4, internal, fromNano, Cell} from "ton";
import {mnemonicToPrivateKey} from "ton-crypto";
import {buildOnchainMetadata} from "./utils/helpers";
import {Foundation} from "./output/jetton_Foundation"; import {Foundation} from "./output/jetton_Foundation";
import {client, wallet_data, workchain} from "./utils/config"; import {client, staking_addr, wallet_data, workchain} from "./utils/config";
import { createDistribution, createAddressList, getTONBState } from './utils/interactions'; import { createDistribution, createAddressList, getTONBState } from './utils/interactions';
@ -20,7 +18,7 @@ import { createDistribution, createAddressList, getTONBState } from './utils/int
let init = await Foundation.init( let init = await Foundation.init(
createDistribution([my_wallet.address], [100n]), createDistribution([my_wallet.address], [100n]),
createAddressList([my_wallet.address]), createAddressList([my_wallet.address]),
contractAddress(workchain, await getTONBState())); contractAddress(workchain, await getTONBState(undefined, staking_addr)));
let destination_address = contractAddress(workchain, init); let destination_address = contractAddress(workchain, init);

8
sources/foundation.tact

@ -38,7 +38,7 @@ contract Foundation {
require(msg.voteId < self.n_votes, "Invalid vote id"); require(msg.voteId < self.n_votes, "Invalid vote id");
let vote: Vote = self.votes.get(msg.voteId)!!; let vote: Vote = self.votes.get(msg.voteId)!!;
require(vote.ended == false, "Vote already ended"); require(vote.ended == false, "Vote already ended");
require(vote.vote_end >= now(), "Vote is not finished yet"); require(vote.vote_end <= now(), "Vote is not finished yet");
let n_yes: Int = 0; let n_yes: Int = 0;
let n_no: Int = 0; let n_no: Int = 0;
let n_abstain: Int = 0; let n_abstain: Int = 0;
@ -98,7 +98,7 @@ contract Foundation {
require(msg.voteId < self.n_votes, "Invalid vote id"); require(msg.voteId < self.n_votes, "Invalid vote id");
let vote: Vote = self.votes.get(msg.voteId)!!; let vote: Vote = self.votes.get(msg.voteId)!!;
require(vote.ended == false, "Vote already ended"); require(vote.ended == false, "Vote already ended");
// require(vote.vote_end > now(), "Vote is finished"); require(vote.vote_end > now(), "Vote is finished");
require(msg.vote >= 0 && msg.vote <= 2, "Invalid vote"); require(msg.vote >= 0 && msg.vote <= 2, "Invalid vote");
vote.votes.set(msg.adminIndex, msg.vote); vote.votes.set(msg.adminIndex, msg.vote);
self.votes.set(msg.voteId, vote); self.votes.set(msg.voteId, vote);
@ -235,11 +235,11 @@ contract Foundation {
let profit: Int? = self.profits.get(ctx.sender); let profit: Int? = self.profits.get(ctx.sender);
require(profit != null, "No profit to collect"); require(profit != null, "No profit to collect");
let amount: Int = profit!!; let amount: Int = profit!!;
require(amount > withdraw_gas_consumption, "No profit to collect");
self.profits.set(ctx.sender, 0); self.profits.set(ctx.sender, 0);
send(SendParameters{ send(SendParameters{
to: ctx.sender, to: ctx.sender,
value: amount - withdraw_gas_consumption, value: amount - withdraw_gas_consumption
mode: SendRemainingValue
}); });
} }

4
sources/jetton.deploy.ts

@ -2,7 +2,7 @@ import { beginCell, contractAddress, toNano, TonClient, TonClient4, Address, Wa
import {mnemonicToPrivateKey} from "ton-crypto"; import {mnemonicToPrivateKey} from "ton-crypto";
import {buildOnchainMetadata} from "./utils/helpers"; import {buildOnchainMetadata} from "./utils/helpers";
import {TONB} from "./output/jetton_TONB"; import {TONB} from "./output/jetton_TONB";
import {client, wallet_data, workchain, owner, jettonParams, default_content} from "./utils/config"; import {client, wallet_data, workchain, owner, jettonParams, default_content, staking_addr} from "./utils/config";
import { getTONBState } from "./utils/interactions"; import { getTONBState } from "./utils/interactions";
@ -17,7 +17,7 @@ import { getTONBState } from "./utils/interactions";
// Get deployment wallet balance // Get deployment wallet balance
let balance: bigint = await my_wallet.getBalance(); let balance: bigint = await my_wallet.getBalance();
// Compute init data for deployment // Compute init data for deployment
let init = await getTONBState(); let init = await getTONBState(undefined, staking_addr);
let destination_address = contractAddress(workchain, init); let destination_address = contractAddress(workchain, init);

2
sources/output/jetton_Foundation.abi

File diff suppressed because one or more lines are too long

BIN
sources/output/jetton_Foundation.code.boc

Binary file not shown.

8
sources/output/jetton_Foundation.code.fc

@ -482,7 +482,7 @@ _ $__gen_get_AdminPercents() method_id(87676) {
throw_unless(46931, ($msg'voteId < $self'n_votes)); throw_unless(46931, ($msg'voteId < $self'n_votes));
var ($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result) = __gen_Vote_not_null(__gen_readopt_Vote(__tact_dict_get_int_cell($self'votes, 257, $msg'voteId))); var ($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result) = __gen_Vote_not_null(__gen_readopt_Vote(__tact_dict_get_int_cell($self'votes, 257, $msg'voteId)));
throw_unless(30386, ($vote'ended == false)); throw_unless(30386, ($vote'ended == false));
throw_unless(34326, ($vote'vote_end >= now())); throw_unless(34326, ($vote'vote_end <= now()));
int $n_yes = 0; int $n_yes = 0;
int $n_no = 0; int $n_no = 0;
int $n_abstain = 0; int $n_abstain = 0;
@ -532,6 +532,7 @@ _ $__gen_get_AdminPercents() method_id(87676) {
throw_unless(46931, ($msg'voteId < $self'n_votes)); throw_unless(46931, ($msg'voteId < $self'n_votes));
var ($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result) = __gen_Vote_not_null(__gen_readopt_Vote(__tact_dict_get_int_cell($self'votes, 257, $msg'voteId))); var ($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result) = __gen_Vote_not_null(__gen_readopt_Vote(__tact_dict_get_int_cell($self'votes, 257, $msg'voteId)));
throw_unless(30386, ($vote'ended == false)); throw_unless(30386, ($vote'ended == false));
throw_unless(16994, ($vote'vote_end > now()));
throw_unless(29720, (($msg'vote >= 0) & ($msg'vote <= 2))); throw_unless(29720, (($msg'vote >= 0) & ($msg'vote <= 2)));
$vote'votes~__tact_dict_set_int_int(257, $msg'adminIndex, $msg'vote, 257); $vote'votes~__tact_dict_set_int_int(257, $msg'adminIndex, $msg'vote, 257);
$self'votes~__tact_dict_set_int_cell(257, $msg'voteId, __gen_writecell_Vote(($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result))); $self'votes~__tact_dict_set_int_cell(257, $msg'voteId, __gen_writecell_Vote(($vote'id, $vote'votes, $vote'vote_end, $vote'quorum_percent, $vote'ended, $vote'result)));
@ -641,8 +642,9 @@ _ $__gen_get_AdminPercents() method_id(87676) {
int $profit = __tact_dict_get_slice_int($self'profits, 267, $ctx'sender, 257); int $profit = __tact_dict_get_slice_int($self'profits, 267, $ctx'sender, 257);
throw_unless(42983, (~ null?($profit))); throw_unless(42983, (~ null?($profit)));
int $amount = __tact_not_null($profit); int $amount = __tact_not_null($profit);
throw_unless(42983, ($amount > 150000000));
$self'profits~__tact_dict_set_slice_int(267, $ctx'sender, 0, 257); $self'profits~__tact_dict_set_slice_int(267, $ctx'sender, 0, 257);
$send((true, $ctx'sender, ($amount - 150000000), 64, null(), null(), null())); $send((true, $ctx'sender, ($amount - 150000000), 0, null(), null(), null()));
return ((($self'founders'addresses, $self'founders'length), (($self'admins'addresses'addresses, $self'admins'addresses'length), $self'admins'percents), $self'tonb, $self'votes, $self'profits, $self'proposals, $self'n_votes), ()); return ((($self'founders'addresses, $self'founders'length), (($self'admins'addresses'addresses, $self'admins'addresses'length), $self'admins'percents), $self'tonb, $self'votes, $self'profits, $self'proposals, $self'n_votes), ());
} }
@ -761,5 +763,5 @@ _ supported_interfaces() method_id {
} }
_ get_abi_ipfs() { _ get_abi_ipfs() {
return "ipfs://QmTpahMZ5QmQr9Tr28bzZjVXyrZDoiJu5wUsDtQignQvds"; return "ipfs://QmNQiJe7zoeswirUzh8ypebXAuUtah51gawoLn9oLTwpeL";
} }

16
sources/output/jetton_Foundation.code.fif

@ -766,7 +766,7 @@ PROGRAM{
34326 PUSHINT 34326 PUSHINT
s2 PUSH s2 PUSH
NOW NOW
GEQ LEQ
THROWANYIFNOT THROWANYIFNOT
0 PUSHINT 0 PUSHINT
s0 s0 s0 PUSH3 s0 s0 s0 PUSH3
@ -928,6 +928,11 @@ PROGRAM{
s2 PUSH s2 PUSH
0 EQINT 0 EQINT
THROWANYIFNOT THROWANYIFNOT
16994 PUSHINT
s4 PUSH
NOW
GREATER
THROWANYIFNOT
29720 PUSHINT 29720 PUSHINT
s7 PUSH s7 PUSH
-1 GTINT -1 GTINT
@ -1290,6 +1295,11 @@ PROGRAM{
NOT NOT
THROWANYIFNOT THROWANYIFNOT
__tact_not_null INLINECALLDICT __tact_not_null INLINECALLDICT
42983 PUSHINT
OVER
150000000 PUSHINT
GREATER
THROWANYIFNOT
s0 s4 XCHG s0 s4 XCHG
267 PUSHINT 267 PUSHINT
s2 PUSH s2 PUSH
@ -1301,7 +1311,7 @@ PROGRAM{
150000000 PUSHINT 150000000 PUSHINT
SUB SUB
s5 s5 s0 XCHG3 s5 s5 s0 XCHG3
64 PUSHINT 0 PUSHINT
PUSHNULL PUSHNULL
PUSHNULL PUSHNULL
PUSHNULL PUSHNULL
@ -1526,6 +1536,6 @@ PROGRAM{
209801025412363888721030803524359905849 PUSHINT 209801025412363888721030803524359905849 PUSHINT
}> }>
get_abi_ipfs PROC:<{ get_abi_ipfs PROC:<{
x{697066733a2f2f516d547061684d5a35516d51723954723238627a5a6a565879725a446f694a753577557344745169676e51766473} PUSHSLICE x{697066733a2f2f516d4e51694a65377a6f6573776972557a6838797065625841755574616835316761776f4c6e396f4c547770654c} PUSHSLICE
}> }>
}END>c }END>c

14
sources/output/jetton_Foundation.code.rev.fif

@ -150,7 +150,7 @@ SETCP0
34326 PUSHINT 34326 PUSHINT
s2 PUSH s2 PUSH
NOW NOW
GEQ LEQ
THROWANYIFNOT THROWANYIFNOT
0 PUSHINT 0 PUSHINT
0 0 0 PUSH3 0 0 0 PUSH3
@ -522,6 +522,11 @@ SETCP0
s2 PUSH s2 PUSH
0 EQINT 0 EQINT
THROWANYIFNOT THROWANYIFNOT
16994 PUSHINT
s4 PUSH
NOW
GREATER
THROWANYIFNOT
29720 PUSHINT 29720 PUSHINT
s7 PUSH s7 PUSH
-1 GTINT -1 GTINT
@ -2135,6 +2140,11 @@ SETCP0
s0 PUSH s0 PUSH
ISNULL ISNULL
128 THROWIF 128 THROWIF
42983 PUSHINT
s1 PUSH
150000000 PUSHINT
GREATER
THROWANYIFNOT
s0 s4 XCHG s0 s4 XCHG
267 PUSHINT 267 PUSHINT
s2 PUSH s2 PUSH
@ -2146,7 +2156,7 @@ SETCP0
150000000 PUSHINT 150000000 PUSHINT
SUB SUB
s5 s5 s0 XCHG3 s5 s5 s0 XCHG3
64 PUSHINT 0 PUSHINT
PUSHNULL PUSHNULL
PUSHNULL PUSHNULL
PUSHNULL PUSHNULL

2
sources/output/jetton_Foundation.md

@ -1,6 +1,6 @@
# TACT Compilation Report # TACT Compilation Report
Contract: Foundation Contract: Foundation
BOC Size: 3554 bytes BOC Size: 3576 bytes
# Types # Types
Total Types: 36 Total Types: 36

2
sources/output/jetton_Foundation.pkg

File diff suppressed because one or more lines are too long

5
sources/output/jetton_Foundation.ts

@ -1806,8 +1806,8 @@ function dictValueParserWithdraw(): DictionaryValue<Withdraw> {
} }
async function Foundation_init(admins: Distribution, founders: AddressList, tonb: Address) { async function Foundation_init(admins: Distribution, founders: AddressList, tonb: Address) {
const __init = 'te6ccgEBBgEAdQABFP8A9KQT9LzyyAsBAgFiAgMCAswEBQAnoUrcBN5EAt5EsAbeRCBqgggH4BEAAdwAhdtra2uAVkZgUINK8SiCslTAF6AECAgOeAZCMJqCoqkAF6AECAgOeAegAA54sJegACZHoACfoAQICA54BkrGZkgOZkw='; const __init = 'te6ccgEBBgEAdQABFP8A9KQT9LzyyAsBAgFiAgMCAswEBQAnoUrcBN5EAt5EsAbeRCBqgggH4BEAAdwAhdtra2uAVkZgUINK8SiCslTAF6AECAgOeAZCMJqCoqkAF6AECAgOeAegAA54sJegACZHoACfoAQICA54BkrGZkgOZkw=';
const __code = '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'; const __code = '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';
const __system = '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'; const __system = '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';
let systemCell = Cell.fromBase64(__system); let systemCell = Cell.fromBase64(__system);
let builder = new TupleBuilder(); let builder = new TupleBuilder();
builder.writeCell(systemCell); builder.writeCell(systemCell);
@ -1862,6 +1862,7 @@ const Foundation_errors: { [key: number]: { message: string } } = {
6873: { message: `Only an admin can initiate a vote` }, 6873: { message: `Only an admin can initiate a vote` },
13650: { message: `Invalid bounced message` }, 13650: { message: `Invalid bounced message` },
16059: { message: `Invalid value` }, 16059: { message: `Invalid value` },
16994: { message: `Vote is finished` },
18474: { message: `only the owner can set a new owner` }, 18474: { message: `only the owner can set a new owner` },
19362: { message: `Invalid quorum percent` }, 19362: { message: `Invalid quorum percent` },
29720: { message: `Invalid vote` }, 29720: { message: `Invalid vote` },

2
sources/output/jetton_Linker.abi

File diff suppressed because one or more lines are too long

2
sources/output/jetton_Linker.code.fc

@ -229,5 +229,5 @@ _ supported_interfaces() method_id {
} }
_ get_abi_ipfs() { _ get_abi_ipfs() {
return "ipfs://QmT6MF61LUeoFNCvMjWniLYhTxNcuqbdymD4hwdqxuPN7t"; return "ipfs://QmYJH6pt4rAboUzZWHtn1mrnbty3vb3SYvYRtmj25FMSGZ";
} }

2
sources/output/jetton_Linker.code.fif

@ -354,6 +354,6 @@ PROGRAM{
209801025412363888721030803524359905849 PUSHINT 209801025412363888721030803524359905849 PUSHINT
}> }>
get_abi_ipfs PROC:<{ get_abi_ipfs PROC:<{
x{697066733a2f2f516d54364d4636314c55656f464e43764d6a576e694c596854784e6375716264796d4434687764717875504e3774} PUSHSLICE x{697066733a2f2f516d594a48367074347241626f557a5a5748746e316d726e627479337662335359765952746d6a3235464d53475a} PUSHSLICE
}> }>
}END>c }END>c

2
sources/output/jetton_Linker.pkg

File diff suppressed because one or more lines are too long

1
sources/output/jetton_Linker.ts

@ -1862,6 +1862,7 @@ const Linker_errors: { [key: number]: { message: string } } = {
6873: { message: `Only an admin can initiate a vote` }, 6873: { message: `Only an admin can initiate a vote` },
13650: { message: `Invalid bounced message` }, 13650: { message: `Invalid bounced message` },
16059: { message: `Invalid value` }, 16059: { message: `Invalid value` },
16994: { message: `Vote is finished` },
18474: { message: `only the owner can set a new owner` }, 18474: { message: `only the owner can set a new owner` },
19362: { message: `Invalid quorum percent` }, 19362: { message: `Invalid quorum percent` },
29720: { message: `Invalid vote` }, 29720: { message: `Invalid vote` },

2
sources/output/jetton_PseudoStaking.abi

File diff suppressed because one or more lines are too long

2
sources/output/jetton_PseudoStaking.code.fc

@ -284,5 +284,5 @@ _ supported_interfaces() method_id {
} }
_ get_abi_ipfs() { _ get_abi_ipfs() {
return "ipfs://Qmd2r7TFbd5yEF7FuvHJJGMr438Yefi1v8tSa9QgS8sf32"; return "ipfs://QmdoULq5gDK4DSXmexrZT7UjZ4Es75uDjT4QtSJsCmF8DD";
} }

2
sources/output/jetton_PseudoStaking.code.fif

@ -490,6 +490,6 @@ PROGRAM{
209801025412363888721030803524359905849 PUSHINT 209801025412363888721030803524359905849 PUSHINT
}> }>
get_abi_ipfs PROC:<{ get_abi_ipfs PROC:<{
x{697066733a2f2f516d64327237544662643579454637467576484a4a474d7234333859656669317638745361395167533873663332} PUSHSLICE x{697066733a2f2f516d646f554c713567444b344453586d6578725a5437556a5a344573373575446a54345174534a73436d46384444} PUSHSLICE
}> }>
}END>c }END>c

2
sources/output/jetton_PseudoStaking.pkg

File diff suppressed because one or more lines are too long

1
sources/output/jetton_PseudoStaking.ts

@ -1859,6 +1859,7 @@ const PseudoStaking_errors: { [key: number]: { message: string } } = {
6873: { message: `Only an admin can initiate a vote` }, 6873: { message: `Only an admin can initiate a vote` },
13650: { message: `Invalid bounced message` }, 13650: { message: `Invalid bounced message` },
16059: { message: `Invalid value` }, 16059: { message: `Invalid value` },
16994: { message: `Vote is finished` },
18474: { message: `only the owner can set a new owner` }, 18474: { message: `only the owner can set a new owner` },
19362: { message: `Invalid quorum percent` }, 19362: { message: `Invalid quorum percent` },
29720: { message: `Invalid vote` }, 29720: { message: `Invalid vote` },

2
sources/output/jetton_TONB.abi

File diff suppressed because one or more lines are too long

2
sources/output/jetton_TONB.code.fc

@ -825,5 +825,5 @@ _ supported_interfaces() method_id {
} }
_ get_abi_ipfs() { _ get_abi_ipfs() {
return "ipfs://QmaCsDf34Xaxg6RGCy1BqUwKzksQBKWiYMbsGQHRtkYiEi"; return "ipfs://QmNNPCWJbjhcLqsDHWv4fBUrP2q6uZWXYhHdCHLCiqoPHJ";
} }

2
sources/output/jetton_TONB.code.fif

@ -1564,6 +1564,6 @@ PROGRAM{
86142586315491086060343270784266291122 PUSHINT 86142586315491086060343270784266291122 PUSHINT
}> }>
get_abi_ipfs PROC:<{ get_abi_ipfs PROC:<{
x{697066733a2f2f516d6143734466333458617867365247437931427155774b7a6b7351424b5769594d627347514852746b59694569} PUSHSLICE x{697066733a2f2f516d4e4e5043574a626a68634c717344485776346642557250327136755a57585968486443484c4369716f50484a} PUSHSLICE
}> }>
}END>c }END>c

2
sources/output/jetton_TONB.pkg

File diff suppressed because one or more lines are too long

1
sources/output/jetton_TONB.ts

@ -1862,6 +1862,7 @@ const TONB_errors: { [key: number]: { message: string } } = {
6873: { message: `Only an admin can initiate a vote` }, 6873: { message: `Only an admin can initiate a vote` },
13650: { message: `Invalid bounced message` }, 13650: { message: `Invalid bounced message` },
16059: { message: `Invalid value` }, 16059: { message: `Invalid value` },
16994: { message: `Vote is finished` },
18474: { message: `only the owner can set a new owner` }, 18474: { message: `only the owner can set a new owner` },
19362: { message: `Invalid quorum percent` }, 19362: { message: `Invalid quorum percent` },
29720: { message: `Invalid vote` }, 29720: { message: `Invalid vote` },

2
sources/output/jetton_TONBWallet.abi

File diff suppressed because one or more lines are too long

2
sources/output/jetton_TONBWallet.code.fc

@ -514,5 +514,5 @@ _ supported_interfaces() method_id {
} }
_ get_abi_ipfs() { _ get_abi_ipfs() {
return "ipfs://QmRzLCb5R2UswBfZBwdXxRm4MWmH4xYWfkxPfFmWZUAkQ6"; return "ipfs://QmYcmZHijG5Y8MNwToij96MARENtUjPXwBhB7QA6dvDCGV";
} }

2
sources/output/jetton_TONBWallet.code.fif

@ -1011,6 +1011,6 @@ PROGRAM{
209778528950190195973528115415557644819 PUSHINT 209778528950190195973528115415557644819 PUSHINT
}> }>
get_abi_ipfs PROC:<{ get_abi_ipfs PROC:<{
x{697066733a2f2f516d527a4c436235523255737742665a4277645878526d344d576d4834785957666b785066466d575a55416b5136} PUSHSLICE x{697066733a2f2f516d59636d5a48696a473559384d4e77546f696a39364d4152454e74556a50587742684237514136647644434756} PUSHSLICE
}> }>
}END>c }END>c

2
sources/output/jetton_TONBWallet.pkg

File diff suppressed because one or more lines are too long

1
sources/output/jetton_TONBWallet.ts

@ -1861,6 +1861,7 @@ const TONBWallet_errors: { [key: number]: { message: string } } = {
6873: { message: `Only an admin can initiate a vote` }, 6873: { message: `Only an admin can initiate a vote` },
13650: { message: `Invalid bounced message` }, 13650: { message: `Invalid bounced message` },
16059: { message: `Invalid value` }, 16059: { message: `Invalid value` },
16994: { message: `Vote is finished` },
18474: { message: `only the owner can set a new owner` }, 18474: { message: `only the owner can set a new owner` },
19362: { message: `Invalid quorum percent` }, 19362: { message: `Invalid quorum percent` },
29720: { message: `Invalid vote` }, 29720: { message: `Invalid vote` },

44
sources/pseudostaking.deploy.ts

@ -0,0 +1,44 @@
import { beginCell, contractAddress, toNano, TonClient, TonClient4, Address, WalletContractV4, internal, fromNano, Cell} from "ton";
import {mnemonicToPrivateKey} from "ton-crypto";
import {buildOnchainMetadata} from "./utils/helpers";
import {client, wallet_data, workchain, owner, jettonParams, default_content} from "./utils/config";
import { PseudoStaking } from "./output/jetton_PseudoStaking";
(async () => {
let {my_wallet, secretKey} = await wallet_data(1);
// Get deployment wallet balance
let balance: bigint = await my_wallet.getBalance();
// Compute init data for deployment
let init = await PseudoStaking.init();
let destination_address = contractAddress(workchain, init);
let deployAmount = toNano('7');
// send a message on new address contract to deploy it
let seqno: number = await my_wallet.getSeqno();
console.log('🛠Preparing new outgoing massage from deployment wallet. Seqno = ', seqno);
console.log('Current deployment wallet balance = ', fromNano(balance).toString(), '💎TON');
await my_wallet.sendTransfer({
seqno,
secretKey,
messages: [internal({
value: deployAmount,
to: destination_address,
init: {
code : init.code,
data : init.data
},
body:
})]
});
console.log('======deployment message sent to ', destination_address, ' ======');
})();

9
sources/utils/config.ts

@ -16,6 +16,8 @@ let mnemonics = "basic security merge opera inject core melody polar become forc
let mnemonics2 = "road learn slow crucial mixed grunt copy ribbon coyote shrimp onion pledge any tornado rebel three glimpse winner bless thunder immune february coin egg" let mnemonics2 = "road learn slow crucial mixed grunt copy ribbon coyote shrimp onion pledge any tornado rebel three glimpse winner bless thunder immune february coin egg"
// read more about wallet apps https://ton.org/docs/participate/wallets/apps#tonhub-test-environment // read more about wallet apps https://ton.org/docs/participate/wallets/apps#tonhub-test-environment
export const staking_addr = Address.parse('EQC5Y865mUcSTsSpJYbli0KmSiriJUBFHlKmvNqkS7T5V567');
export async function wallet_data(w: number = 0) { export async function wallet_data(w: number = 0) {
let keyPair = await mnemonicToPrivateKey(mnemonics.split(" ")); let keyPair = await mnemonicToPrivateKey(mnemonics.split(" "));
let secretKey = keyPair.secretKey; let secretKey = keyPair.secretKey;
@ -40,15 +42,16 @@ export let workchain = 0; //we are working in basechain.
// - Data is stored on-chain (except for the image data itself) // - Data is stored on-chain (except for the image data itself)
export const jettonParams = { export const jettonParams = {
name: "TONB DEMO", name: "TON Banking",
description: "TON Banking", description: "TON Banking (demo-1)",
// image: "https://ipfs.io/ipfs/QmbPZjC1tuP6ickCCBtoTCQ9gc3RpkbKx7C1LMYQdcLwti" // Image url // image: "https://ipfs.io/ipfs/QmbPZjC1tuP6ickCCBtoTCQ9gc3RpkbKx7C1LMYQdcLwti" // Image url
image: "https://cache.tonapi.io/imgproxy/gZXLNT_UkpFUSUUbTQsilCqwq_tXa4Kgmf55b5SmVQo/rs:fill:200:200:1/g:no/aHR0cHM6Ly90b24ub3JnL2Rvd25sb2FkL3Rvbl9zeW1ib2wucG5n.webp", image: "https://cache.tonapi.io/imgproxy/gZXLNT_UkpFUSUUbTQsilCqwq_tXa4Kgmf55b5SmVQo/rs:fill:200:200:1/g:no/aHR0cHM6Ly90b24ub3JnL2Rvd25sb2FkL3Rvbl9zeW1ib2wucG5n.webp",
symbol: "TONB" symbol: "TONB"
}; };
// Owner should usually be the deploying wallet's address. // Owner should usually be the deploying wallet's address.
export let owner = Address.parse('EQAuAiFGgkxoQvBWXjXQcLYb8BW4fO6UJkt6_uCONJ2y5VUk'); // export let owner = Address.parse('EQAuAiFGgkxoQvBWXjXQcLYb8BW4fO6UJkt6_uCONJ2y5VUk');
export let owner = Address.parse('EQD7zbEMaWC2yMgSJXmIF7HbLr1yuBo2GnZF_CJNkUiGSe32')
// Create content Cell // Create content Cell

52
sources/utils/interactions.ts

@ -1,13 +1,13 @@
import { Cell, Address, internal, beginCell, contractAddress, toNano, fromNano, SendMode } from "ton"; import { Cell, Address, internal, beginCell, contractAddress, toNano, fromNano, SendMode } from "ton";
import { storeDeposit, storeWithdraw, storeTokenTransfer, storeBlacklistWallet } from "../output/jetton_TONB"; import { storeDeposit, storeWithdraw, storeTokenTransfer, storeBlacklistWallet, storeVoteMsg } from "../output/jetton_TONB";
import { TON } from "./helpers"; import { TON } from "./helpers";
import { wallet_data, owner, default_content, workchain, client } from './config'; import { wallet_data, owner, default_content, workchain, client } from './config';
import { TONB } from "../output/jetton_TONB"; import { TONB } from "../output/jetton_TONB";
import { TONBWallet } from '../output/jetton_TONBWallet'; import { TONBWallet } from '../output/jetton_TONBWallet';
import { Distribution, AddressList } from '../output/jetton_TONBWallet'; import { Distribution, AddressList } from '../output/jetton_TONBWallet';
import { Dictionary } from 'ton-core'; import { Dictionary } from 'ton-core';
import { PseudoStaking, storeSetOwner, storeInitiateBlacklistVote } from '../output/jetton_PseudoStaking'; import { PseudoStaking, storeSetOwner, storeInitiateBlacklistVote, storeFinishVote, RequestUnstake } from '../output/jetton_PseudoStaking';
import { Foundation } from '../output/jetton_Foundation'; import { Foundation, storeCollectProfit, storeRequestUnstake } from '../output/jetton_Foundation';
export async function sendMessage(wallet: any, secretKey: Buffer, msg: { value: string | bigint, to: Address, bounce?: boolean, init?: { code?: Cell, data?: Cell }, body?: any }) { export async function sendMessage(wallet: any, secretKey: Buffer, msg: { value: string | bigint, to: Address, bounce?: boolean, init?: { code?: Cell, data?: Cell }, body?: any }) {
let seqno: number = await wallet.getSeqno(); let seqno: number = await wallet.getSeqno();
@ -24,7 +24,7 @@ export async function deposit(wallet: any, secretKey: Buffer, value_: bigint | n
console.log('📤Sending deposit message to ', tonb, ' with value ', value_, '💎TON'); console.log('📤Sending deposit message to ', tonb, ' with value ', value_, '💎TON');
let value = BigInt(value_); let value = BigInt(value_);
let msg_body_b = beginCell(); let msg_body_b = beginCell();
storeDeposit({amount: value as bigint, $$type: 'Deposit'})(msg_body_b); storeDeposit({ amount: value as bigint, $$type: 'Deposit' })(msg_body_b);
let msg_body = msg_body_b.endCell(); let msg_body = msg_body_b.endCell();
// let msg_body = msg_body_b.storeUint(0x8999b164, 32).storeUint(value, 257).endCell(); // let msg_body = msg_body_b.storeUint(0x8999b164, 32).storeUint(value, 257).endCell();
let msg_value = value as bigint + toNano('0.1'); let msg_value = value as bigint + toNano('0.1');
@ -38,7 +38,7 @@ export async function withdraw(wallet: any, secretKey: Buffer, value_: bigint |
let msg_body_b = beginCell(); let msg_body_b = beginCell();
storeWithdraw({ amount: value as bigint, $$type: 'Withdraw' })(msg_body_b); storeWithdraw({ amount: value as bigint, $$type: 'Withdraw' })(msg_body_b);
let msg_body = msg_body_b.endCell(); let msg_body = msg_body_b.endCell();
let msg_value = toNano('0.11'); let msg_value = toNano('0.2');
await sendMessage(wallet, secretKey, { value: msg_value, to: tonb, body: msg_body }); await sendMessage(wallet, secretKey, { value: msg_value, to: tonb, body: msg_body });
} }
@ -97,7 +97,7 @@ export async function getTONB(owner2?: Address, tonb_content?: any, add_staking:
} }
export async function getTONBOpen(tonb_content?: any, add_staking: boolean | Address = false) { export async function getTONBOpen(tonb_content?: any, add_staking: boolean | Address = false) {
let tonb = await getTONB(tonb_content, add_staking); let tonb = await getTONB(undefined, tonb_content, add_staking);
return client.open(tonb); return client.open(tonb);
} }
@ -106,7 +106,7 @@ export async function getFoundation(
admins?: Address[], admins?: Address[],
admin_percents?: bigint[], admin_percents?: bigint[],
founders?: Address[], founders?: Address[],
) { ) {
if (!admins) { if (!admins) {
admins = [owner]; admins = [owner];
admin_percents = [100n]; admin_percents = [100n];
@ -125,7 +125,7 @@ export async function getFoundationOpen(
admins?: Address[], admins?: Address[],
admin_percents?: bigint[], admin_percents?: bigint[],
founders?: Address[], founders?: Address[],
) { ) {
let foundation = await getFoundation(tonb_address, admins, admin_percents, founders); let foundation = await getFoundation(tonb_address, admins, admin_percents, founders);
return client.open(foundation); return client.open(foundation);
} }
@ -218,3 +218,39 @@ export async function createBlacklistVote(
let msg_value = toNano('1.01'); let msg_value = toNano('1.01');
await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body }); await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body });
} }
export async function castVote(
wallet: any, secretKey: Buffer, foundation: Address, voteId: bigint, vote: bigint, adminIndex: bigint) {
let msg_body_b = beginCell();
storeVoteMsg({ $$type: 'VoteMsg', voteId, vote, adminIndex })(msg_body_b);
let msg_body = msg_body_b.endCell();
let msg_value = toNano('0.05');
await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body });
}
export async function finishVote(
wallet: any, secretKey: Buffer, foundation: Address, voteId: bigint) {
let msg_body_b = beginCell();
storeFinishVote({ $$type: 'FinishVote', voteId })(msg_body_b);
let msg_body = msg_body_b.endCell();
let msg_value = toNano('1.05');
await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body });
}
export async function requestUnstake(
wallet: any, secretKey: Buffer, foundation: Address, founderIndex: bigint) {
let msg_body_b = beginCell();
storeRequestUnstake({ $$type: 'RequestUnstake', founderIndex })(msg_body_b);
let msg_body = msg_body_b.endCell();
let msg_value = toNano('0.05');
await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body });
}
export async function collectProfit(
wallet: any, secretKey: Buffer, foundation: Address, adminIndex: bigint) {
let msg_body_b = beginCell();
storeCollectProfit({ $$type: 'CollectProfit', adminIndex })(msg_body_b);
let msg_body = msg_body_b.endCell();
let msg_value = toNano('0.05');
await sendMessage(wallet, secretKey, { value: msg_value, to: foundation, body: msg_body });
}
Loading…
Cancel
Save