160 lines
4.2 KiB
JavaScript
160 lines
4.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
const shell = require("shelljs");
|
|
const { exec, spawn, execSync, spawnSync } = require("child_process");
|
|
const web3 = require("@solana/web3.js");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const projectRoot = path.join(__dirname, "..");
|
|
const targetDir = path.join(projectRoot, "target");
|
|
const idlDir = path.join(targetDir, "idl");
|
|
const anchorToml = path.join(projectRoot, "Anchor.toml");
|
|
|
|
const anchorClientGen = path.join(
|
|
projectRoot,
|
|
"node_modules",
|
|
".bin",
|
|
"anchor-client-gen"
|
|
);
|
|
const shx = path.join(projectRoot, "node_modules", ".bin", "shx");
|
|
|
|
const anchorVrfKeypairPath = path.join(
|
|
targetDir,
|
|
"deploy",
|
|
"anchor_vrf_parser-keypair.json"
|
|
);
|
|
|
|
const anchorFeedKeypairPath = path.join(
|
|
targetDir,
|
|
"deploy",
|
|
"anchor_feed_parser-keypair.json"
|
|
);
|
|
|
|
const splFeedKeypairPath = path.join(
|
|
targetDir,
|
|
"deploy",
|
|
"spl_feed_parser-keypair.json"
|
|
);
|
|
|
|
async function main() {
|
|
shell.cd(projectRoot);
|
|
|
|
if (!shell.which("solana")) {
|
|
shell.echo(
|
|
"Sorry, this script requires 'solana' to be installed in your $PATH"
|
|
);
|
|
shell.exit(1);
|
|
}
|
|
|
|
if (!shell.which("anchor")) {
|
|
shell.echo(
|
|
"Sorry, this script requires 'anchor' to be installed in your $PATH"
|
|
);
|
|
shell.exit(1);
|
|
}
|
|
|
|
if (!fs.existsSync(path.join(targetDir, "deploy"))) {
|
|
shell.echo("Missing program deploy keypairs, building projects");
|
|
const anchorBuildSpawn = spawn("anchor", ["build"]);
|
|
anchorBuildSpawn.stdout.on("data", function (msg) {
|
|
console.log(msg.toString());
|
|
});
|
|
await new Promise((resolve) => {
|
|
anchorBuildSpawn.on("close", resolve);
|
|
});
|
|
}
|
|
|
|
const anchorVrfParserPid = web3.Keypair.fromSecretKey(
|
|
new Uint8Array(JSON.parse(fs.readFileSync(anchorVrfKeypairPath, "utf8")))
|
|
).publicKey;
|
|
const anchorFeedParserPid = web3.Keypair.fromSecretKey(
|
|
new Uint8Array(JSON.parse(fs.readFileSync(anchorFeedKeypairPath, "utf8")))
|
|
).publicKey;
|
|
const splFeedParserPid = web3.Keypair.fromSecretKey(
|
|
new Uint8Array(JSON.parse(fs.readFileSync(splFeedKeypairPath, "utf8")))
|
|
).publicKey;
|
|
|
|
// REPLACE ANCHOR-VRF-PROGRAM IDS
|
|
console.log(`Anchor VRF Parser PID: ${anchorVrfParserPid}`);
|
|
shell.sed(
|
|
"-i",
|
|
/declare_id!(.*);/,
|
|
`declare_id!("${anchorVrfParserPid.toString()}");`,
|
|
path.join(projectRoot, "programs", "anchor-vrf-parser", "src", "lib.rs")
|
|
);
|
|
shell.sed(
|
|
"-i",
|
|
/anchor_vrf_parser = "(.*)"/,
|
|
`anchor_vrf_parser = "${anchorVrfParserPid.toString()}"`,
|
|
anchorToml
|
|
);
|
|
|
|
console.log(`Anchor Feed Parser PID: ${anchorFeedParserPid}`);
|
|
shell.sed(
|
|
"-i",
|
|
/declare_id!(.*);/,
|
|
`declare_id!("${anchorFeedParserPid.toString()}");`,
|
|
path.join(projectRoot, "programs", "anchor-feed-parser", "src", "lib.rs")
|
|
);
|
|
shell.sed(
|
|
"-i",
|
|
/anchor_feed_parser = "(.*)"/,
|
|
`anchor_feed_parser = "${anchorFeedParserPid.toString()}"`,
|
|
anchorToml
|
|
);
|
|
|
|
console.log(`SPL Feed Parser PID: ${splFeedParserPid}`);
|
|
shell.sed(
|
|
"-i",
|
|
/declare_id!(.*);/,
|
|
`declare_id!("${splFeedParserPid.toString()}");`,
|
|
path.join(projectRoot, "programs", "spl-feed-parser", "src", "lib.rs")
|
|
);
|
|
shell.sed(
|
|
"-i",
|
|
/spl_feed_parser = "(.*)"/,
|
|
`spl_feed_parser = "${splFeedParserPid.toString()}"`,
|
|
anchorToml
|
|
);
|
|
|
|
// Build Anchor APIs
|
|
const vrfClientPath = path.join(
|
|
projectRoot,
|
|
"programs",
|
|
"anchor-vrf-parser",
|
|
"client"
|
|
);
|
|
shell.rm("-rf", vrfClientPath);
|
|
fs.mkdirSync(vrfClientPath, { recursive: true });
|
|
execSync(
|
|
`node ${anchorClientGen} ${path.join(
|
|
idlDir,
|
|
"anchor_vrf_parser.json"
|
|
)} ${vrfClientPath} --program-id ${anchorVrfParserPid.toString()}`
|
|
);
|
|
const feedClientPath = path.join(
|
|
projectRoot,
|
|
"programs",
|
|
"anchor-feed-parser",
|
|
"client"
|
|
);
|
|
shell.rm("-rf", feedClientPath);
|
|
fs.mkdirSync(feedClientPath, { recursive: true });
|
|
execSync(
|
|
`node ${anchorClientGen} ${path.join(
|
|
idlDir,
|
|
"anchor_feed_parser.json"
|
|
)} ${feedClientPath} --program-id ${anchorFeedParserPid.toString()}`
|
|
);
|
|
}
|
|
|
|
main()
|
|
.then(() => {
|
|
// console.log("Executed successfully");
|
|
})
|
|
.catch((err) => {
|
|
console.error(err);
|
|
});
|