tonweb
Version:
TonWeb - JavaScript API for TON blockchain
157 lines (131 loc) • 6.69 kB
JavaScript
const TonWeb = require("./index");
const {toNano} = require("./utils");
const BN = TonWeb.utils.BN;
const fromNano = TonWeb.utils.fromNano;
async function init() {
const tonweb = new TonWeb(new TonWeb.HttpProvider('https://toncenter.com/api/v2/jsonRPC', {apiKey: '319256218218ff3c53398474375d0781cd81c1c9d1936ee992372845f8ebadb1'}));
// Create private key
const seed = TonWeb.utils.base64ToBytes('vt58J2v6FaBuXFGcyGtqT5elpVxcZ+I1zgu/GUfA5uY=');
const keyPair = TonWeb.utils.nacl.sign.keyPair.fromSeed(seed);
const seed2 = TonWeb.utils.base64ToBytes('vt59J2v6FaBuXFGcyGtqT5elpVxcZ+I1zgu/GUfA5uY=');
const keyPair2 = TonWeb.utils.nacl.sign.keyPair.fromSeed(seed2);
console.log('pubkey', TonWeb.utils.bytesToHex(keyPair.publicKey));
const senderWallet = new (tonweb.wallet.all.v3R2)(tonweb.provider, {
publicKey: keyPair.publicKey
});
const senderAddress = (await senderWallet.getAddress()).toString(true, true, true);
console.log('sender address', senderAddress)
const userWallet = new (tonweb.wallet.all.v4R2)(tonweb.provider, {
publicKey: keyPair.publicKey
});
const userAddress = (await userWallet.getAddress()).toString(true, true, false);
console.log('user address', userAddress)
const MIN = 60;
const HOUR = 60 * 60;
const DAY = 60 * 60 * 24;
const MONTH = 60 * 60 * 24 * 30;
const VestingWalletClass = tonweb.lockupWallet.VestingWalletV1;
const vestingParams = {
publicKey: keyPair.publicKey,
wc: 0,
vestingStartTime: 1691562371, // 9:26
vestingTotalDuration: HOUR, // 10:26
unlockPeriod: 5 * MIN, // 9:41 (1 / 12 = 0.08 TON )
cliffDuration: 10 * MIN, // 9:36 (1 * 2/12 = 0.16 TON)
vestingTotalAmount: new TonWeb.utils.BN(1e9),
vestingSenderAddress: new TonWeb.utils.Address(senderAddress),
ownerAddress: new TonWeb.utils.Address(userAddress),
};
// console.log(VestingWalletClass.codeHex);
// console.log(VestingWalletClass.WALLET_ID_BASE);
const vestingWallet = new VestingWalletClass(tonweb.provider, vestingParams);
const vestingWalletAddress = (await vestingWallet.getAddress()).toString(true, true, true);
console.log('vesting address', vestingWalletAddress, 'non-bounce:', (await vestingWallet.getAddress()).toString(true, true, false))
const SINGLE_NOMINATOR_POOL = 'Ef8GA8bh6WzeDmSq_rrZnpkuA0eZ-X7Bb4XGLJowKFQjoAHq';
const NOMINATOR_POOL = 'Ef8LwnWMF502lcxlywkN3FJu0t10OYbulpWCWs1uS_HqleIy';
const ELECTOR = 'Ef8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM0vF';
const CONFIG = 'Ef9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVbxn';
const TON_STAKERS_POOL_TESTNET = 'kQANFsYyYn-GSZ4oajUJmboDURZU-udMHf9JxzO4vYM_hFP3';
const BEMO = 'EQDNhy-nxYFgUqzfUzImBEP67JqsyMIcyk2S5_RwNNEYku0k';
const WHALES = 'EQCkR1cGmnsE45N4K0otPl5EnxnRakmGqeJUNua5fkWhales';
// console.log(await vestingWallet.deploy(keyPair.secretKey).send());
// console.log(await vestingWallet.methods.seqno().call());
// console.log(await vestingWallet.getWalletId());
// console.log(await vestingWallet.methods.getWalletId());
// console.log(await vestingWallet.getPublicKey());
// console.log(await vestingWallet.methods.getPublicKey());
//
// console.log(await vestingWallet.methods.getVestingData());
// const lockupData = await vestingWallet.getVestingData();
// lockupData.vestingSenderAddress = lockupData.vestingSenderAddress.toString(true, true, true);
// lockupData.ownerAddress = lockupData.ownerAddress.toString(true, true, true);
// console.log(lockupData);
// console.log((await vestingWallet.methods.getWhitelist()).map(a => a.toString(true, true, true)));
// console.log((await vestingWallet.getWhitelist()).map(a => a.toString(true, true, true)));
// console.log((await vestingWallet.methods.getLockedAmount(Math.floor(Date.now() / 1000))).toString());
// console.log((await vestingWallet.methods.getLockedAmount(1684414982)).toString());
// console.log((await vestingWallet.methods.getLockedAmount(1684414982 + 1 * 60)).toString());
// console.log((await vestingWallet.methods.getLockedAmount(1684414982 + 5 * 60)).toString());
// console.log((await vestingWallet.methods.getLockedAmount(1684414982 + 10 * 60)).toString());
// add whitelist
//
// const seqno = (await senderWallet.methods.seqno().call()) || 0;
// console.log({seqno});
//
// const transfer = senderWallet.methods.transfer({
// secretKey: keyPair.secretKey,
// toAddress: vestingWalletAddress,
// amount: TonWeb.utils.toNano('0.2'),
// seqno: seqno,
// payload: vestingWallet.createAddWhitelistBody({
// addresses: [
// new TonWeb.Address('EQBWt81tpIeWGQYhBickYFBn6B-25RrGLzzZEYpNXXmbJERU'),
// // new TonWeb.Address('EQBWt81tpIeWGQYhBickYFBn6B-25RrGLzzZEYpNXXmbJERU'),
// ]
// })
// });
// //
// console.log(await transfer.send());
// internal transfer
const seqno = (await userWallet.methods.seqno().call()) || 0;
console.log({seqno});
const transfer = userWallet.methods.transfer({
secretKey: keyPair.secretKey,
toAddress: vestingWalletAddress,
amount: TonWeb.utils.toNano('0.05'),
seqno: seqno,
stateInit: (await vestingWallet.createStateInit()).stateInit
});
console.log(await transfer.send());
// external transfer
// const seqno = (await vestingWallet.methods.seqno().call()) || 0;
// console.log({seqno});
//
// const payload = new TonWeb.boc.Cell();
// payload.bits.writeUint(0x595f07bc, 32); // burn op
// payload.bits.writeUint(0, 64);
// payload.bits.writeCoins(toNano('0.9'));
// payload.bits.writeAddress(new TonWeb.Address('EQA42bC_BKd9ulc2y5bus34B6g2nyaa6S7vC0SLaOv4OMbOD'));
// payload.bits.writeUint(0, 1)
// payload.bits.writeUint(0, 1)
// //
// const transfer = vestingWallet.methods.transfers({
// secretKey: keyPair.secretKey,
// seqno: seqno,
// messages: [
// {
// toAddress: 'EQA0i8-CdGnF_DhUHHf92R1ONH6sIA9vLZ_WLcCIhfBBXwtG',
// amount: TonWeb.utils.toNano('0.05'),
// // payload
// },
// // {
// // toAddress: 'Ef-gJfrz9hYaXnxfvO7OMNmxfysCYY7cW2lVxJymVtMvkayU',
// // amount: TonWeb.utils.toNano('0.01'),
// // }
// ]
// // payload: payload.bits.array.slice(0, payload.bits.getUsedBytes())
// });
//
// console.log(await transfer.send());
}
init();