|
|
|
const main = require('../contracts/main');
|
|
|
|
const subcommand = require('subcommand');
|
|
|
|
const {Address} = require("ton");
|
|
|
|
const {keyPairFromSeed, getSecureRandomBytes, keyPairFromSecretKey} = require("ton-crypto");
|
|
|
|
const {Base64} = require('@tonconnect/protocol');
|
|
|
|
const BN = require("bn.js");
|
|
|
|
|
|
|
|
|
|
|
|
const argv = process.argv.slice(2);
|
|
|
|
let commands = [
|
|
|
|
{
|
|
|
|
name: 'buy-message',
|
|
|
|
options: [ // cliclopts options
|
|
|
|
// {
|
|
|
|
// name: 'loud',
|
|
|
|
// boolean: true,
|
|
|
|
// default: false,
|
|
|
|
// abbr: 'v',
|
|
|
|
// help: 'print out all output loudly'
|
|
|
|
// }
|
|
|
|
{
|
|
|
|
name: 'domain'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'collection'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'buyer',
|
|
|
|
help: 'Buyer\'s address'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'key',
|
|
|
|
help: 'Secret key, hex-encoded'
|
|
|
|
}
|
|
|
|
],
|
|
|
|
command: function message(args) {
|
|
|
|
let collection = Address.parse(args._[1]);
|
|
|
|
if (args._[2] !== '') {
|
|
|
|
let buyer = Address.parse(args._[2]);
|
|
|
|
let key = Buffer.from(args._[3], 'hex');
|
|
|
|
let signature = main.signBuy(args._[0], collection, buyer, key);
|
|
|
|
let msg = main.createItem({domain: args._[0], signature})
|
|
|
|
console.log(Base64.encode(msg.toBoc()) + ' ' + collection.toString());
|
|
|
|
} else {
|
|
|
|
let msg = main.createItem({domain: args._[0], signature: '0'})
|
|
|
|
console.log(Base64.encode(msg.toBoc()) + ' ' + collection.toString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'keygen',
|
|
|
|
command: async function keygen(args) {
|
|
|
|
let keypair = keyPairFromSeed(await getSecureRandomBytes(32));
|
|
|
|
console.log(keypair.secretKey.toString('hex'));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'getpub', // get public key as BN from b64 secret key
|
|
|
|
options: [
|
|
|
|
{
|
|
|
|
name: 'key',
|
|
|
|
help: 'Secret key, hex-encoded'
|
|
|
|
}
|
|
|
|
],
|
|
|
|
command: function getpub(args) {
|
|
|
|
let keypair = keyPairFromSecretKey(Buffer.from(args._[0], 'base64'));
|
|
|
|
console.log(new BN(keypair.publicKey))
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'content-message',
|
|
|
|
options: [
|
|
|
|
{
|
|
|
|
name: 'domain',
|
|
|
|
help: 'domain name to set content for (test for test.example.ton)'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'zone',
|
|
|
|
help: 'zone name to set content for (example.ton for test.example.ton)'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'address',
|
|
|
|
help: 'address of the collection contract'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: 'workchain',
|
|
|
|
help: '0 for mainnet, 1 for testnet'
|
|
|
|
}
|
|
|
|
],
|
|
|
|
command: function set_content(args) {
|
|
|
|
let msg = main.setContent({domain: args._[0], zone: args._[1]});
|
|
|
|
let addr = main.getItemAddr(Address.parse(args._[2]), args._[0], args._[3] === '1' ? -1 : 0);
|
|
|
|
console.log(Base64.encode(msg.toBoc()) + ' ' + addr.toString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
let match = subcommand(commands);
|
|
|
|
let opts = match(argv);
|