namillum
Version:
Bubble Protocol SDK
78 lines (66 loc) • 2.18 kB
text/typescript
import * as chalk from "chalk";
import * as shell from "shelljs";
import * as Listr from "listr";
import * as yargs from "yargs";
import ZilTest from "zilliqa-testing-library";
import * as fs from "fs";
import * as path from "path";
const CURR_DIR = process.cwd();
async function postProcessNode() {
const config = require(CURR_DIR + "/zilliqa.config.js");
// Initialize Zilliqa RPC Provider
const ZT = new ZilTest({ network: config.networkUrl });
// Import the wallet from PRIVATE KEY that wa provided
await ZT.importAccounts([config.accountPrivateKey]);
// Read contract code from root directory of the project and store it for deployment.
const contractCode = fs.readFileSync(
path.join(CURR_DIR, config.contractFile),
"utf8"
);
// Load contract into the Zilliqa Testing Library.
// This function will also run scilla-checker on the contract.
// More informations cn be found on the Zilliqa Testing Library documentation.
const contract = await ZT.loadContract(contractCode);
if (contract !== undefined && contract.deploy !== undefined) {
// helloWorld.deploy return a tuple containing transaction object and a contract object
return await contract.deploy(ZT.accounts[0].address, config.init);
} else {
throw new Error(
"Contract could not be imported. Maybe scilla-checker failed"
);
}
}
const deploy = () => {
const tasks = new Listr([
{
title: "Run tests",
task: async () => shell.exec("mocha --timeout=10000"),
},
{
title: "Deploy contract",
task: async (ctx) => {
const response = await postProcessNode();
ctx.tx = response[0];
ctx.contract = response[1];
},
},
]);
tasks
.run()
.then((ctx) => {
console.log("\nTransaction receipt: ", ctx.tx.receipt, "\n");
console.log(
"Contract address: ",
chalk.yellow(ctx.contract.address),
"\n\n"
);
if (yargs.argv.verbose && yargs.argv.verbose === true) {
console.log("Init params: ", ctx.contract.init);
}
})
.catch((err) => {
console.error(err);
});
};
export default deploy;