Skip to content

Commit b007d08

Browse files
feat(docs): add fdc by hand guide
1 parent 38da202 commit b007d08

22 files changed

+734
-19
lines changed

docs/fdc/guides/fdc-by-hand.mdx

Lines changed: 465 additions & 0 deletions
Large diffs are not rendered by default.

examples/developer-hub-javascript/GaslessApp.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { useState } from "react";
1+
import React, { useState } from "react";
22
import { ethers, Eip1193Provider } from "ethers";
33
import USD0Abi from "./USD0.json";
4+
import Heading from "@theme/Heading";
45

56
// Environment variables
67
const USD0_ADDRESS = import.meta.env.VITE_USD0_ADDRESS!;
@@ -92,7 +93,7 @@ export default function App() {
9293

9394
return (
9495
<div style={{ padding: 20, maxWidth: 400 }}>
95-
<h1>Gasless USD₮0 Demo</h1>
96+
<Heading as="h1">Gasless USD₮0 Demo</Heading>
9697
<input
9798
placeholder="Recipient address"
9899
value={to}

sidebars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ const sidebars: SidebarsConfig = {
181181
},
182182
],
183183
},
184+
"fdc/guides/fdc-by-hand",
184185
],
185186
},
186187
{
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import React, { useState } from "react";
2+
import "@site/src/css/custom.css";
3+
import classes from "../HomepageFeatures/featureCard.module.css";
4+
import Heading from "@theme/Heading";
5+
6+
export default function ToHexConverter() {
7+
const [data, setData] = useState("");
8+
const [encodedData, setEncodedData] = useState("");
9+
10+
function toHex(data) {
11+
let result = "";
12+
for (let i = 0; i < data.length; i++) {
13+
result += data.charCodeAt(i).toString(16);
14+
}
15+
return "0x" + result.padEnd(64, "0");
16+
}
17+
18+
async function handleClick() {
19+
const result = await toHex(data);
20+
setEncodedData(result);
21+
}
22+
23+
return (
24+
<div className={`${classes.card} input-card`}>
25+
<Heading as="h3" className="input-card-title">
26+
To Hex Converter
27+
</Heading>
28+
<input
29+
type="text"
30+
placeholder="Enter string to convert to hex"
31+
value={data}
32+
onChange={(e) => setData(e.target.value)}
33+
className="input-card-input"
34+
/>
35+
<button
36+
onClick={handleClick}
37+
className="input-card-button"
38+
aria-label="Encode to hex"
39+
title="Encode to hex"
40+
>
41+
Encode
42+
</button>
43+
<p className="input-card-result">
44+
Encoded string: <b>{encodedData}</b>
45+
</p>
46+
</div>
47+
);
48+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import React, { useState } from "react";
2+
import "@site/src/css/custom.css";
3+
import classes from "../HomepageFeatures/featureCard.module.css";
4+
import Heading from "@theme/Heading";
5+
6+
export default function RoundCalculator() {
7+
const [timestamp, setTimestamp] = useState("");
8+
const [roundId, setRoundId] = useState("");
9+
10+
async function calculateRoundId(blockTimestamp) {
11+
const firsVotingRoundStartTs = 1658430000;
12+
const votingEpochDurationSeconds = 90;
13+
return Math.floor(
14+
(blockTimestamp - firsVotingRoundStartTs) / votingEpochDurationSeconds,
15+
);
16+
}
17+
18+
async function handleClick() {
19+
const result = await calculateRoundId(parseInt(timestamp));
20+
setRoundId(result.toString());
21+
}
22+
23+
return (
24+
<div className={`${classes.card} input-card`}>
25+
<Heading as="h3" className="input-card-title">
26+
Voting Round ID Calculator
27+
</Heading>
28+
<input
29+
type="number"
30+
placeholder="Enter block timestamp"
31+
value={timestamp}
32+
onChange={(e) => setTimestamp(e.target.value)}
33+
className="input-card-input"
34+
/>
35+
<button
36+
onClick={handleClick}
37+
className="input-card-button"
38+
aria-label="Calculate Round ID"
39+
title="Calculate Round ID"
40+
>
41+
Calculate Round ID
42+
</button>
43+
<p className="input-card-result">
44+
Round ID: <b>{roundId}</b>
45+
</p>
46+
</div>
47+
);
48+
}

0 commit comments

Comments
 (0)