Skip to content
This repository has been archived by the owner on Oct 4, 2024. It is now read-only.

Commit

Permalink
Merge pull request #128 from nearprotocol/repl
Browse files Browse the repository at this point in the history
Add interactive `near repl` with auto-injected `nearlib`, `near` and `account`
  • Loading branch information
vgrichina authored Nov 4, 2019
2 parents 54f6486 + 3f08a1b commit b934223
Show file tree
Hide file tree
Showing 10 changed files with 3,402 additions and 297 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,3 @@ node_modules
tmp-project
neardev/*
package-lock.json
yarn.lock
21 changes: 0 additions & 21 deletions .gitlab-ci.yml

This file was deleted.

10 changes: 10 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
language: node_js
node_js: 12
env:
- NODE_ENV=ci
- NODE_ENV=ci-staging
cache: yarn
script:
- yarn lint
- yarn test

263 changes: 263 additions & 0 deletions bin/cli.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
const yargs = require('yargs');
const main = require('../');

const exitOnError = async function(promise) {
try {
await promise;
} catch (e) {
console.log('Error: ', e);
process.exit(1);
}
};

const deploy = {
command: 'deploy',
desc: 'deploy your smart contract',
builder: (yargs) => yargs
.option('wasmFile', {
desc: 'Path to wasm file to deploy',
type: 'string',
default: './out/main.wasm'
})
.alias({
'accountId': ['account_id', 'contractName', 'contract_name'],
}),
handler: (argv) => exitOnError(main.deploy(argv))
};

const scheduleFunctionCall = {
command: 'call <contractName> <methodName> [args]',
desc: 'schedule smart contract call which can modify state',
builder: (yargs) => yargs
.option('amount', {
desc: 'Number of tokens to attach',
type: 'string',
default: '1000000000'
}),
handler: (argv) => exitOnError(main.scheduleFunctionCall(argv))
};

const callViewFunction = {
command: 'view <contractName> <methodName> [args]',
desc: 'make smart contract call which can view state',
builder: (yargs) => yargs,
handler: (argv) => exitOnError(main.callViewFunction(argv))
};

const sendMoney = {
command: 'send <sender> <receiver> <amount>',
desc: 'send tokens to given receiver',
builder: (yargs) => yargs,
handler: (argv) => exitOnError(main.sendMoney(argv))
};

const { spawn } = require('child_process');
const build = {
command: 'build',
desc: 'build your smart contract',
handler: () => {
const gulp = spawn('gulp');
gulp.stdout.on('data', function (data) {
console.log(data.toString());
});
gulp.stderr.on('data', function (data) {
console.log(data.toString());
});
gulp.on('exit', function (code) {
process.exit(code);
});
}
};

const createAccount = {
command: 'create_account <accountId>',
desc: 'create a developer account',
builder: (yargs) => yargs
.option('accountId', {
desc: 'Unique identifier for the newly created account',
type: 'string',
required: true
})
.option('masterAccount', {
desc: 'Account used to create requested account.',
type: 'string',
required: true
})
.option('publicKey', {
desc: 'Public key to initialize the account with',
type: 'string',
required: false
})
.option('initialBalance', {
desc: 'Number of tokens to transfer to newly created account',
type: 'string',
default: '1000000000000000000'
}),
handler: (argv) => exitOnError(main.createAccount(argv))
};

const login = {
command: 'login',
desc: 'create a developer account',
builder: (yargs) => yargs,
handler: (argv) => exitOnError(main.login(argv))
};

const viewAccount = {
command: 'state <accountId>',
desc: 'view account',
builder: (yargs) => yargs
.option('accountId', {
desc: 'Account to view',
type: 'string',
required: true
}),
handler: (argv) => exitOnError(main.viewAccount(argv))
};

const deleteAccount = {
command: 'delete_account <accountId> <beneficiaryId>',
desc: 'delete an account and transfer funds to beneficiary account.',
builder: (yargs) => yargs
.option('accountId', {
desc: 'Account to view',
type: 'string',
required: true
})
.option('beneficiaryId', {
desc: 'Account to transfer funds to',
type: 'string',
required: true
}),
handler: (argv) => exitOnError(main.deleteAccount(argv))
};

const keys = {
command: 'keys <accountId>',
desc: 'view account public keys',
builder: (yargs) => yargs
.option('accountId', {
desc: 'Account to view',
type: 'string',
required: true
}),
handler: (argv) => exitOnError(main.keys(argv))
};

const txStatus = {
command: 'tx-status <hash>',
desc: 'lookup transaction status by hash',
builder: (yargs) => yargs
.option('hash', {
desc: 'base58-encoded hash',
type: 'string',
required: true
}),
handler: (argv) => exitOnError(main.txStatus(argv))
};

const clean = {
command: 'clean',
desc: 'clean the build environment',
builder: (yargs) => yargs
.option('outDir', {
desc: 'build directory',
type: 'string',
default: './out'
}),
handler: (argv) => exitOnError(main.clean(argv))
};

const newProject = {
command: 'new_project [projectDir]',
desc: 'create a new blank project',
builder: (yargs) => yargs
.option('projectDir', {
desc: 'project directory',
type: 'string',
default: '.'
}),
handler: (argv) => exitOnError(main.newProject(argv))
};

const stake = {
command: 'stake [accountId] [publicKey] [amount]',
desc: 'create staking transaction',
builder: (yargs) => yargs
.option('accountId', {
desc: 'Account to stake on',
type: 'string',
required: true,
})
.option('publicKey', {
descr: 'Public key to stake with (base58 encoded)',
type: 'string',
required: true,
})
.option('amount', {
descr: 'Amount to stake',
type: 'string',
required: true,
}),
handler: (argv) => exitOnError(main.stake(argv))
};

let config = require('../get-config')();
yargs // eslint-disable-line
.scriptName('near')
.option('nodeUrl', {
desc: 'NEAR node URL',
type: 'string',
default: 'http://localhost:3030'
})
.option('networkId', {
desc: 'NEAR network ID, allows using different keys based on network',
type: 'string',
default: 'default'
})
.option('helperUrl', {
desc: 'NEAR contract helper URL',
type: 'string',
})
.option('keyPath', {
desc: 'Path to master account key',
type: 'string',
})
.option('homeDir', {
desc: 'Where to look for master account, default is ~/.near',
type: 'string',
default: `${process.env.HOME}/.near`,
})
.option('accountId', {
desc: 'Unique identifier for the account',
type: 'string',
})
.command(createAccount)
.command(viewAccount)
.command(deleteAccount)
.command(keys)
.command(txStatus)
.command(build)
.command(deploy)
.command(scheduleFunctionCall)
.command(callViewFunction)
.command(viewAccount)
.command(sendMoney)
.command(clean)
.command(newProject)
.command(stake)
.command(login)
.command(require('../commands/repl'))
.config(config)
.alias({
'accountId': ['account_id'],
'nodeUrl': 'node_url',
'networkId': ['network_id'],
'wasmFile': 'wasm_file',
'projectDir': 'project_dir',
'outDir': 'out_dir'
})
.showHelpOnFail(true)
.demandCommand(1, 'Please enter a command')
.argv;

Loading

0 comments on commit b934223

Please sign in to comment.