Skip to content

Commit

Permalink
feature (oracle): added rudimentary oracle functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
H34D committed Feb 5, 2024
1 parent db79cd3 commit e8ca52f
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 0 deletions.
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -16,6 +16,7 @@
"doc": "ts-node ./src/doc.ts"
},
"dependencies": {
"@masa-finance/masa-contracts-oracle": "^0.2.0",
"@masa-finance/masa-sdk": "^3.17.0",
"@types/clear": "^0.1.4",
"@types/figlet": "^1.5.8",
Expand Down
16 changes: 16 additions & 0 deletions src/cli.ts
Expand Up @@ -27,6 +27,8 @@ import {
identityShow,
login,
logout,
oracleStake,
oracleWithdraw,
sbtBurn,
sbtInfo,
sbtList,
Expand Down Expand Up @@ -571,6 +573,20 @@ program
.action((contractAddress: string) => dynamicSSSBTMint(contractAddress));
}

{
const oracle = program.command("oracle").description("Oracle commands");

oracle
.command("stake")
.argument("<amount>", "Amount to stake")
.action((amount: string) => oracleStake(amount));

oracle
.command("withdraw")
.argument("<amount>", "Amount to withdraw")
.action((amount: string) => oracleWithdraw(amount));
}

{
const settings = program
.command("settings")
Expand Down
1 change: 1 addition & 0 deletions src/commands/index.ts
Expand Up @@ -7,4 +7,5 @@ export { account } from "./account";
export { login } from "./login";
export { logout } from "./logout";
export * from "./settings";
export * from "./oracle";
export { version } from "./version";
2 changes: 2 additions & 0 deletions src/commands/oracle/index.ts
@@ -0,0 +1,2 @@
export { stake as oracleStake } from "./stake";
export { withdraw as oracleWithdraw } from "./withdraw";
74 changes: 74 additions & 0 deletions src/commands/oracle/stake.ts
@@ -0,0 +1,74 @@
import addressesRaw from "@masa-finance/masa-contracts-oracle/addresses.json";
import { masa } from "../../helpers";
import { NetworkName } from "@masa-finance/masa-sdk";
import {
MasaToken,
MasaToken__factory,
OracleNodeStaking,
OracleNodeStaking__factory,
} from "@masa-finance/masa-contracts-oracle";
import { BigNumber } from "ethers";

// todo moe this to the masa sdk
const addresses = addressesRaw as Partial<{
[key in NetworkName]: { [key: string]: string };
}>;

export const stake = async (amount: string | BigNumber) => {
amount = BigNumber.from(amount);
const address = await masa.config.signer.getAddress();

const networkAddresses = addresses[masa.config.networkName];

if (networkAddresses) {
const oracleNodeStaking: OracleNodeStaking =
OracleNodeStaking__factory.connect(
networkAddresses.OracleNodeStaking,
masa.config.signer,
);

try {
const tokenAddress = await oracleNodeStaking.masaToken();
// console.log({ tokenAddress });

const masaToken: MasaToken = MasaToken__factory.connect(
tokenAddress,
masa.config.signer,
);

const currentBalance = await masaToken.balanceOf(address);

// console.log("currentBalance", currentBalance.toString());

if (amount.lt(currentBalance)) {
console.error("Not enough balance.");
} else {
const allowance = await masaToken.allowance(
address,
oracleNodeStaking.address,
);

const requiredAllowance = amount.sub(allowance);

// console.log("requiredAllowance", requiredAllowance.toString());

if (requiredAllowance.gt(BigNumber.from(0))) {
const { wait } = await masaToken.increaseAllowance(
oracleNodeStaking.address,
requiredAllowance,
);
await wait();
}

const { wait } = await oracleNodeStaking.stake(amount);
await wait();

console.log(`Staked ${amount}.`);
}
} catch (error: unknown) {
if (error instanceof Error) {
console.error("Staking failed!", error.message);
}
}
}
};
38 changes: 38 additions & 0 deletions src/commands/oracle/withdraw.ts
@@ -0,0 +1,38 @@
import addressesRaw from "@masa-finance/masa-contracts-oracle/addresses.json";
import { masa } from "../../helpers";
import { NetworkName } from "@masa-finance/masa-sdk";
import {
OracleNodeStaking,
OracleNodeStaking__factory,
} from "@masa-finance/masa-contracts-oracle";
import { BigNumber } from "ethers";

// todo moe this to the masa sdk
const addresses = addressesRaw as Partial<{
[key in NetworkName]: { [key: string]: string };
}>;

export const withdraw = async (amount: string | BigNumber) => {
amount = BigNumber.from(amount);

const networkAddresses = addresses[masa.config.networkName];

if (networkAddresses) {
const oracleNodeStaking: OracleNodeStaking =
OracleNodeStaking__factory.connect(
networkAddresses.OracleNodeStaking,
masa.config.signer,
);

try {
const { wait } = await oracleNodeStaking.withdraw(amount);
await wait();

console.log(`Withdrawn ${amount}.`);
} catch (error: unknown) {
if (error instanceof Error) {
console.error("Withdrawing failed!", error.message);
}
}
}
};
7 changes: 7 additions & 0 deletions yarn.lock
Expand Up @@ -407,6 +407,13 @@
dependencies:
ethers "~5.7.2"

"@masa-finance/masa-contracts-oracle@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@masa-finance/masa-contracts-oracle/-/masa-contracts-oracle-0.2.0.tgz#468ba1c8ebbaefb8d51a0ec7a51f6923a43b3931"
integrity sha512-u/kkpAxj4CGeAcRcXCV8kDMG+YuC5/8sM9mgGo4uynd5lV5x5ury13j1cenfK/C+otsXsBlXZX5R/YDyP6ztjw==
dependencies:
ethers "~5.7.2"

"@masa-finance/masa-sdk@^3.17.0":
version "3.17.0"
resolved "https://registry.yarnpkg.com/@masa-finance/masa-sdk/-/masa-sdk-3.17.0.tgz#bb24c3ea9ce0a14c43dc9b8501d9fd16a2fd0d9b"
Expand Down

0 comments on commit e8ca52f

Please sign in to comment.