Skip to content

Commit

Permalink
working
Browse files Browse the repository at this point in the history
Signed-off-by: Pablo Maldonado <pablo@umaproject.org>
  • Loading branch information
md0x committed May 16, 2024
1 parent da4e998 commit 7ab11ab
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 1,048 deletions.
1 change: 1 addition & 0 deletions getRedstonePayload.log.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
An error occurred: this.signedDataPackages.map is not a function or its return value is not iterableAn error occurred: this.signedDataPackages.map is not a function or its return value is not iterableAn error occurred: this.signedDataPackages.map is not a function or its return value is not iterableAn error occurred: this.signedDataPackages.map is not a function or its return value is not iterableAn error occurred: this.signedDataPackages.map is not a function or its return value is not iterableAn error occurred: this.signedDataPackages.map is not a function or its return value is not iterableYou have to provide at least one dataFeedAn error occurred: provided input is not valid bytes value
101 changes: 65 additions & 36 deletions redstone/getRedstonePayload.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const {
RedstonePayload,
} = require("@redstone-finance/protocol");
const web3 = require("web3");

const sdk = require("@redstone-finance/sdk");
const args = process.argv.slice(2);

const exit = (code, message) => {
Expand All @@ -14,53 +14,82 @@ const exit = (code, message) => {
process.exit(code);
};

if (args.length === 0) {
exit(1, "You have to provide at least on dataFeed");
}
const parsePrice = (value) => {
const hexString = web3.utils.bytesToHex(value);
const bigNumberPrice = BigInt(hexString);
return Number(bigNumberPrice);
};

const dataFeeds = args[0].split(",");
const main = async () => {
if (args.length === 0) {
exit(1, "You have to provide at least on dataFeed");
}

if (dataFeeds.length === 0) {
exit(2, "You have to provide at least on dataFeed");
}
const dataFeeds = args[0].split(",");

const timestampMilliseconds = Date.now();
if (dataFeeds.length === 0) {
exit(2, "You have to provide at least on dataFeed");
}

const PRIVATE_KEY_1 =
"0x548e7c2fae09cc353ffe54ed40609d88a99fab24acfc81bfbf5cd9c11741643d";
const timestampMilliseconds = Date.now();

const dataPoints = dataFeeds.map((arg) => {
const [dataFeedId, value, decimals] = arg.split(":");
const PRIVATE_KEY_1 =
"0x548e7c2fae09cc353ffe54ed40609d88a99fab24acfc81bfbf5cd9c11741643d";

if (!dataFeedId || !value || !decimals) {
exit(
3,
"Input should have format: dataFeedId:value:decimals (example: BTC:120:8)"
);
}
const dataPoints = dataFeeds.map((arg) => {
const [dataFeedId, value, decimals] = arg.split(":");

if (!dataFeedId || !value || !decimals) {
exit(
3,
"Input should have format: dataFeedId:value:decimals (example: BTC:120:8)"
);
}

return new NumericDataPoint({
dataFeedId,
value: parseInt(value),
decimals: parseInt(decimals),
return new NumericDataPoint({
dataFeedId,
value: parseInt(value),
decimals: parseInt(decimals),
});
});
});

// Prepare unsigned data package
const dataPackage = new DataPackage(dataPoints, timestampMilliseconds);
// Prepare unsigned data package
const dataPackage = new DataPackage(dataPoints, timestampMilliseconds);

// Prepare signed data packages
const signedDataPackages = [dataPackage.sign(PRIVATE_KEY_1)];
// Prepare signed data packages
const signedDataPackages = [dataPackage.sign(PRIVATE_KEY_1)];

const payload = RedstonePayload.prepare(signedDataPackages, "");
const getLatestSignedPrice = await sdk.requestDataPackages({
dataServiceId: "redstone-primary-prod",
uniqueSignersCount: 3,
dataFeeds: ["BTC"],
urls: ["https://oracle-gateway-1.a.redstone.finance"],
});

// const payload = RedstonePayload.prepare(signedDataPackages, "");
const payload = RedstonePayload.prepare(getLatestSignedPrice["BTC"], "");

// process.stdout.write("0x" + payload)

// process.stdout.write("0x" + payload)
const timestampMS =
getLatestSignedPrice["BTC"][0].dataPackage.timestampMilliseconds;

const encodedData = web3.eth.abi.encodeParameters(
["bytes", "uint256"],
["0x" + payload, timestampMilliseconds]
);
const encodedData = web3.eth.abi.encodeParameters(
["bytes", "uint256", "uint256"],
[
"0x" + payload,
timestampMS,
parsePrice(
getLatestSignedPrice["BTC"][0].dataPackage.dataPoints[0].value
),
]
);

process.stdout.write(encodedData);
process.stdout.write(encodedData);

process.exit(0);
process.exit(0);
};

main().catch((error) => {
exit(4, `An error occurred: ${error.message}`);
});
2 changes: 1 addition & 1 deletion redstone/getRedstonePayload.log.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
You have to provide at least on dataFeed
You have to provide at least on dataFeedYou have to provide at least on dataFeedYou have to provide at least one dataFeedAn error occurred: Cannot read properties of undefined (reading 'split')You have to provide at least one dataFeedYou have to provide at least one dataFeedYou have to provide at least one dataFeed
1 change: 1 addition & 0 deletions redstone/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"license": "ISC",
"dependencies": {
"@redstone-finance/protocol": "^0.5.1",
"@redstone-finance/sdk": "^0.5.1",
"web3": "^4.8.0"
}
}
Loading

0 comments on commit 7ab11ab

Please sign in to comment.