ocn-registry
Version:
Oli-systems OCN registry smart contracts
356 lines (353 loc) • 17.9 kB
JavaScript
#!/usr/bin/env node
"use strict";
/*
Copyright 2019-2020 eMobilify GmbH
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const yargs_1 = __importDefault(require("yargs"));
const registry_1 = require("./lib/registry");
const ocnPaymentManager_1 = require("./lib/ocnPaymentManager");
const builders_1 = require("./cli/builders");
const types_1 = require("./lib/types");
const networks_1 = require("./networks");
const ethers_1 = require("ethers");
const helpers_1 = require("./lib/helpers");
const oracle_1 = require("./lib/oracle");
yargs_1.default
.option("network", {
alias: ["net", "n"],
choices: Object.keys(networks_1.networks),
describe: "Specifies the target network.",
default: "localhost",
})
.option("network-file", {
alias: ["net-file", "nf"],
string: true,
describe: "Specify a custom JSON network file instead of a default network.",
})
.option("signer", {
alias: "s",
string: true,
describe: "Data owner's private key. Required for modifying contract state.",
})
.option("ocn-registry", {
alias: "a",
string: true,
describe: "Specific contract address of a pre deployed Ocn Registry. By default it uses the one from deployments folder",
})
.option("ocn-payment-manager", {
alias: "pm",
string: true,
describe: "Specific contract address of a pre deployed Ocn Payment Manager. By default it uses the one from deployments folder",
})
.option("spender", {
alias: "x",
string: true,
describe: "Spender's private key. Required for sending raw transactions.",
})
.option("no-verbose", {
alias: "nv",
boolean: true,
describe: "Set to disable verbose output",
})
.command("get-registry-contract-address", "Get the current OcnRegistry contract address deployed in the current network", () => { }, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]));
console.log(registry.getAddress());
})
.command("get-payment-contract-address", "Get the current OcnPaymentManager contract address deployed in the current network", () => { }, async (args) => {
const ocnPayment = new ocnPaymentManager_1.OcnPaymentManagerCli(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]));
console.log(ocnPayment.getAddress());
})
.command("get-node <address>", "Get OCN Node operator entry by their wallet address", (yargs) => {
return yargs.positional("address", {
type: "string",
describe: "The address of the node operator",
});
}, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getNode(args.address);
console.log(result || "Node operator not listed in registry.");
})
.command("list-nodes", "Get all OCN Nodes listed in registry", () => { }, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getAllNodes();
console.log(JSON.stringify(result, null, 2));
})
.command("is-signer-registered-as-node", "Get all OCN Nodes listed in registry contract and verify if the address of current signer is contained |", () => { }, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getAllNodes();
const signerPrivateKey = process.env.SIGNER || args.signer;
if (signerPrivateKey) {
const wallet = new ethers_1.ethers.Wallet(signerPrivateKey);
const signerAddress = wallet.address;
const isRegistered = result.some((node) => node.operator.toLowerCase() === signerAddress.toLowerCase());
if (isRegistered) {
console.log(`true`);
}
else {
console.log(`false`);
}
}
else {
console.log("No signer private key provided.");
}
})
.command("is-node-registered <address>", "Get OCN Node operator entry by their wallet address", (yargs) => {
return yargs.positional("address", {
type: "string",
describe: "The address of the node operator",
});
}, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getNode(args.address);
if (result) {
console.log(`true`);
}
else {
console.log(`false`);
}
})
.command("get-signer-address", "Get address of the signer ", () => { }, async (args) => {
const signerPrivateKey = process.env.SIGNER || args.signer;
if (signerPrivateKey) {
const wallet = new ethers_1.ethers.Wallet(signerPrivateKey);
const signerAddress = wallet.address;
console.log(signerAddress);
}
else {
console.log("No signer private key provided.");
}
})
.command("is-signer-registered-as-party", "Get all OCN Parties listed in registry contract and verify if the address of current signer is contained |", () => { }, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getAllParties();
const signerPrivateKey = process.env.SIGNER || args.signer;
if (signerPrivateKey) {
const wallet = new ethers_1.ethers.Wallet(signerPrivateKey);
const signerAddress = wallet.address;
const isRegistered = result.some((details) => details.partyAddress.toLowerCase() === signerAddress.toLowerCase());
if (isRegistered) {
console.log(`true`);
}
else {
console.log(`false`);
}
}
else {
console.log("No signer private key provided.");
}
})
.command("set-node <domain>", "Create or update OCN Node operator entry", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const registry = new registry_1.Registry(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.setNode(args.domain);
console.log(result);
})
.command("set-node-raw <domain>", "Create or update OCN Node operator entry using raw transaction", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const spender = process.env.SPENDER || args.spender;
const registry = new registry_1.Registry(args.network, spender, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.setNodeRaw(args.domain, signer);
console.log(result);
})
.command("delete-node", "Delete OCN Node operator entry", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const registry = new registry_1.Registry(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.deleteNode();
console.log(result);
})
.command("delete-node-raw", "Delete OCN Node operator entry using raw transaction", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const spender = process.env.SPENDER || args.spender;
const registry = new registry_1.Registry(args.network, spender, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.deleteNodeRaw(signer);
console.log(result);
})
.command("get-party [address]", "Get OCPI party entry listed in the registry", builders_1.getPartyBuilder, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
let result;
if (args.address) {
result = await registry.getPartyByAddress(args.address);
}
else {
const [countryCode, partyId] = args.credentials;
result = await registry.getPartyByOcpi(countryCode, partyId);
}
console.log(result ? JSON.stringify(result, helpers_1.bigIntToString, 2) : "OCPI Party not listed in registry.");
})
.command("is-party-registered [address]", "Get OCPI party entry listed in the registry", builders_1.getPartyBuilder, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
let result;
if (args.address) {
result = await registry.getPartyByAddress(args.address);
}
else {
const [countryCode, partyId] = args.credentials;
result = await registry.getPartyByOcpi(countryCode, partyId);
}
if (result) {
console.log(`true`);
}
else {
console.log(`false`);
}
})
.command("list-parties", "List all OCPI parties listed in registry", () => { }, async (args) => {
const registry = new registry_1.Registry(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.getAllParties();
console.log(JSON.stringify(result, helpers_1.bigIntToString, 2));
})
.command("set-party", "Create or update OCPI party entry", builders_1.setPartyBuilder, async (args) => {
const signer = process.env.SIGNER || args.signer;
const registry = new registry_1.Registry(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const [countryCode, partyId] = args.credentials;
const certificatePaths = args.certificates;
const certificates = await (0, helpers_1.readJsonCertificates)(certificatePaths);
const roleDetails = certificates.map((certificate) => {
if (certificate.role === "EMSP") {
let { role, ...certificateData } = certificate;
return {
certificateData: (0, helpers_1.encodeEmpCertificate)(certificateData.certificate),
signature: (0, helpers_1.encodeCertificateSignature)(certificateData.signature),
role: types_1.Role.EMSP,
};
}
else {
let { role, ...certificateData } = certificate;
return {
certificateData: (0, helpers_1.encodeCpoCertificate)(certificateData.certificate),
signature: (0, helpers_1.encodeCertificateSignature)(certificateData.signature),
role: types_1.Role[role],
};
}
});
const name = args.name;
const url = args.url;
const result = await registry.setParty(countryCode, partyId, roleDetails, args.operator, name, url);
console.log(result);
})
.command("set-party-raw", "Create or update OCPI party entry using raw transaction", builders_1.setPartyBuilder, async (args) => {
const signer = process.env.SIGNER || args.signer;
const spender = process.env.SPENDER || args.spender;
const registry = new registry_1.Registry(args.network, spender, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const [countryCode, partyId] = args.credentials;
const certificatePaths = args.certificates;
const certificates = await (0, helpers_1.readJsonCertificates)(certificatePaths);
const roleDetails = certificates.map((certificate) => {
if (certificate.role === "EMSP") {
let { role, ...certificateData } = certificate;
return {
certificateData: (0, helpers_1.encodeEmpCertificate)(certificateData.certificate),
signature: (0, helpers_1.encodeCertificateSignature)(certificateData.signature),
role: types_1.Role.EMSP,
};
}
else {
let { role, ...certificateData } = certificate;
return {
certificateData: (0, helpers_1.encodeCpoCertificate)(certificateData.certificate),
signature: (0, helpers_1.encodeCertificateSignature)(certificateData.signature),
role: types_1.Role[role],
};
}
});
const name = args.name;
const url = args.url;
const result = await registry.setPartyRaw(countryCode, partyId, roleDetails, args.operator, name, url, signer);
console.log(result);
})
.command("delete-party", "Remove OCPI party entry", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const registry = new registry_1.Registry(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.deleteParty();
console.log(result);
})
.command("delete-party-raw", "Remove OCPI party entry by raw transaction", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const spender = process.env.SPENDER || args.spender;
const registry = new registry_1.Registry(args.network, spender, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"]);
const result = await registry.deletePartyRaw(signer);
console.log(result);
})
.command("get-payment-status", "Get payment status of the party", builders_1.getPaymentStatusBuilder, async (args) => {
const ocnPaymentManager = new ocnPaymentManager_1.OcnPaymentManagerCli(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-payment-manager"]);
const result = await ocnPaymentManager.getPaymentStatus(args.address);
console.log(result);
})
.command("get-funding-yearly-amount", "Get funding yearly amount", () => { }, async (args) => {
const ocnPaymentManager = new ocnPaymentManager_1.OcnPaymentManagerCli(args.network, undefined, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-payment-manager"]);
const result = await ocnPaymentManager.getFundingYearlyAmount();
console.log(result);
})
.command("pay", "Pay the funding yearly amount", builders_1.getPayBuilder, async (args) => {
const signer = process.env.SIGNER || args.signer;
const partyAddress = args.partyAddress;
const ocnPaymentManager = new ocnPaymentManager_1.OcnPaymentManagerCli(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-payment-manager"]);
const result = await ocnPaymentManager.pay(partyAddress);
console.log(result);
})
.command("withdraw", "Withdraw yearly funding from party to OCN operator", builders_1.getWithdrawBuilder, async (args) => {
const signer = process.env.SIGNER || args.signer;
const partyAddress = args.partyAddress;
const ocnPaymentManager = new ocnPaymentManager_1.OcnPaymentManagerCli(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]));
const result = await ocnPaymentManager.withdraw(partyAddress);
console.log(result);
})
.command("get-ocn-payment-manager", "Check the address of the OCN payment manager", () => { }, async (args) => {
const signer = process.env.SIGNER || args.signer;
const registry = new registry_1.Registry(args.network, signer, (0, helpers_1.getOverrides)(args["network-file"]), args["ocn-registry"], !args["no-verbose"]);
const result = await registry.getOcnPaymentManager();
console.log(result);
})
.command("get-all-providers", "Check all provider status from the oracle", builders_1.getOracleProvidersBuilder, async (args) => {
const role = args.role;
const oracle = new oracle_1.OracleCli(args.network, role, undefined, (0, helpers_1.getOverrides)(args["network-file"]));
const details = await oracle.getAllProviders();
console.log(details);
})
.command("get-provider", "Check provider status from the oracle", builders_1.getOracleProviderBuilder, async (args) => {
const role = args.role;
const oracle = new oracle_1.OracleCli(args.network, role, undefined, (0, helpers_1.getOverrides)(args["network-file"]));
const [countryCode, partyId] = args.credentials;
const details = await oracle.getProvider(countryCode + " " + partyId);
console.log(details);
})
.command("set-provider", "Set provider status from the oracle", builders_1.setOracleProviderBuilder, async (args) => {
const role = args.role;
const signer = process.env.SIGNER || args.signer;
const [countryCode, partyId] = args.credentials;
const tag = args.tag;
const oracle = new oracle_1.OracleCli(args.network, role, signer, (0, helpers_1.getOverrides)(args["network-file"]));
const details = await oracle.setProvider(countryCode + " " + partyId, tag);
console.log(details);
})
.demandCommand(1, "You need to specify at least one command.")
.strict()
.fail((msg, err, yargs) => {
if (err) {
console.error(err.message);
}
else {
console.error(`Error: ${msg}`);
console.log(yargs.help());
}
process.exit(1);
})
.completion()
.group(["version", "help"], "Information:")
.group(["signer", "spender"], "Transactions:")
.help()
.parse();
//# sourceMappingURL=cli.js.map