Skip to content

Commit a6f5644

Browse files
committed
track dogecoin
1 parent 2a4051e commit a6f5644

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

protocols/doge.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { manualLinear } from "../adapters/manual";
2+
import { LinearAdapterResult, Protocol } from "../types/adapters";
3+
4+
// Block 145000 occurred at UTC: 17.03.2014, 22:17:59
5+
const block145000Timestamp = new Date("2014-03-17T22:17:59Z").getTime() / 1000;
6+
const blockTime = 60;
7+
8+
function getTimestampForBlock(blockNumber: number): number {
9+
const blockDiff = blockNumber - 145000;
10+
return block145000Timestamp + (blockDiff * blockTime);
11+
}
12+
13+
interface BlockScheduleEntry {
14+
startBlock: number;
15+
endBlock: number;
16+
maxReward?: number;
17+
reward?: number;
18+
}
19+
20+
const blockSchedule: BlockScheduleEntry[] = [
21+
{ startBlock: 1, endBlock: 99999, maxReward: 1000000 },
22+
{ startBlock: 100000, endBlock: 144999, maxReward: 500000 },
23+
{ startBlock: 145000, endBlock: 199999, reward: 250000 },
24+
{ startBlock: 200000, endBlock: 299999, reward: 125000 },
25+
{ startBlock: 300000, endBlock: 399999, reward: 62500 },
26+
{ startBlock: 400000, endBlock: 499999, reward: 31250 },
27+
{ startBlock: 500000, endBlock: 599999, reward: 15625 },
28+
{ startBlock: 600000, endBlock: 12500000, reward: 10000 }
29+
];
30+
31+
function rewards(): LinearAdapterResult[] {
32+
const sections: LinearAdapterResult[] = [];
33+
34+
for (let i = 0; i < blockSchedule.length; i++) {
35+
const schedule = blockSchedule[i];
36+
const startTimestamp = getTimestampForBlock(schedule.startBlock);
37+
const endTimestamp = getTimestampForBlock(schedule.endBlock);
38+
39+
const blockCount = schedule.endBlock - schedule.startBlock + 1;
40+
let reward: number;
41+
if (schedule.reward !== undefined) {
42+
reward = schedule.reward;
43+
} else if (schedule.maxReward !== undefined) {
44+
reward = schedule.maxReward / 2;
45+
} else {
46+
throw new Error(`Missing reward info for block range ${schedule.startBlock}-${schedule.endBlock}`);
47+
}
48+
const totalEmission = blockCount * reward;
49+
50+
sections.push(manualLinear(
51+
startTimestamp,
52+
endTimestamp,
53+
totalEmission
54+
));
55+
}
56+
57+
return sections;
58+
}
59+
60+
const doge: Protocol = {
61+
"Mining rewards": rewards(),
62+
meta: {
63+
sources: [
64+
"https://github.com/dogecoin/dogecoin/blob/master/doc/FAQ.md",
65+
"https://github.com/dogecoin/dogecoin/blob/master/src/chainparams.cpp",
66+
],
67+
token: "coingecko:dogecoin",
68+
protocolIds: [],
69+
notes: [
70+
"Block rewards were initially random between 0-1,000,000 DOGE for blocks 1-99,999",
71+
"Block rewards were random between 0-500,000 DOGE for blocks 100,000-144,999",
72+
"Fixed block rewards were implemented from block 145,000 onwards",
73+
"Projected until block 12.5M"
74+
],
75+
},
76+
categories: {
77+
farming: ["Mining rewards"],
78+
},
79+
};
80+
81+
export default doge;

0 commit comments

Comments
 (0)