Skip to content

Commit f51175c

Browse files
committed
fix/client: translate both testnet and mainnet address
1 parent c66d50c commit f51175c

File tree

2 files changed

+56
-35
lines changed

2 files changed

+56
-35
lines changed

client/src/pages/Rewards/index.tsx

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ import "./index.scss";
2828
import { useCallback } from "react";
2929
import { useDispatch } from "react-redux";
3030
import { showModal } from "src/reducers/modalSlice";
31-
import {
32-
Address,
33-
BaseAddress,
34-
RewardAddress,
35-
} from "@emurgo/cardano-serialization-lib-asmjs";
31+
import { getStakeKey } from "./utils/common.function";
3632

3733
let Buffer = require("buffer").Buffer;
3834

@@ -84,28 +80,8 @@ function Rewards({ connectedWallet, wrongNetwork }: Params) {
8480
* we want the stake address
8581
* if it is cardano address, get the staking address
8682
*/
87-
88-
let address = searchAddress;
89-
90-
if (searchAddress.includes("addr")) {
91-
const addressObject = Address.from_bech32(searchAddress);
92-
const stakeAddress =
93-
BaseAddress.from_address(addressObject);
94-
let rewardAddressBytes = new Uint8Array(29);
95-
rewardAddressBytes.set([0xe0], 0);
96-
97-
if (stakeAddress == null) return;
98-
rewardAddressBytes.set(
99-
stakeAddress.stake_cred().to_bytes().slice(4, 32),
100-
1
101-
);
102-
let rewardAddress = RewardAddress.from_address(
103-
Address.from_bytes(rewardAddressBytes)
104-
);
105-
106-
if (rewardAddress == null) return;
107-
address = rewardAddress?.to_address().to_bech32();
108-
}
83+
let address = getStakeKey(searchAddress);
84+
if (address == null) throw new Error();
10985

11086
const rewards = await getRewards(address);
11187

@@ -125,14 +101,16 @@ function Rewards({ connectedWallet, wrongNetwork }: Params) {
125101
setRewardsLoader(false);
126102
}
127103
} catch (ex: any) {
128-
if (ex?.response?.status === 404) {
129-
dispatch(
130-
showModal({
131-
text: "Account not found.",
132-
type: ModalTypes.info,
133-
})
134-
);
135-
setRewardsLoader(false);
104+
switch (true) {
105+
case ex?.response?.status === 404:
106+
default:
107+
dispatch(
108+
showModal({
109+
text: "Account not found.",
110+
type: ModalTypes.info,
111+
})
112+
);
113+
setRewardsLoader(false);
136114
}
137115
}
138116
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {
2+
Address,
3+
BaseAddress,
4+
RewardAddress,
5+
} from "@emurgo/cardano-serialization-lib-asmjs";
6+
7+
export const getStakeKey = (searchAddress: string): string | null => {
8+
const prefix = searchAddress.slice(0, 5);
9+
const addressObject = Address.from_bech32(searchAddress);
10+
const baseAddress = BaseAddress.from_address(addressObject);
11+
let rewardAddressBytes = new Uint8Array(29);
12+
13+
switch (true) {
14+
/**
15+
* check if testnet address
16+
*/
17+
case prefix === "addr_":
18+
rewardAddressBytes.set([0xe0], 0);
19+
break;
20+
/**
21+
* check if mainnet address
22+
*/
23+
case prefix === "addr1":
24+
rewardAddressBytes.set([0xe1], 0);
25+
break;
26+
/**
27+
* check if not receive address
28+
*/
29+
default:
30+
return searchAddress;
31+
}
32+
33+
if (baseAddress == null) return null;
34+
rewardAddressBytes.set(baseAddress.stake_cred().to_bytes().slice(4, 32), 1);
35+
36+
let rewardAddress = RewardAddress.from_address(
37+
Address.from_bytes(rewardAddressBytes)
38+
);
39+
40+
if (rewardAddress == null) return null;
41+
42+
return rewardAddress.to_address().to_bech32();
43+
};

0 commit comments

Comments
 (0)