Skip to content

Commit

Permalink
Merge pull request #1216 from chainapsis/delivan/keplr-489
Browse files Browse the repository at this point in the history
Starknet QA - 4
  • Loading branch information
delivan authored Oct 10, 2024
2 parents 52bb87e + 56e1398 commit 053d345
Show file tree
Hide file tree
Showing 13 changed files with 102 additions and 36 deletions.
39 changes: 26 additions & 13 deletions apps/extension/src/components/dropdown/dropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const Dropdown: FunctionComponent<DropdownProps> = ({
menuContainerMaxHeight,
allowSearch,
searchExcludedKeys,
direction = "down",
}) => {
const [isOpen, setIsOpen] = React.useState(false);
const wrapperRef = useRef<HTMLInputElement>(null);
Expand Down Expand Up @@ -124,24 +125,36 @@ export const Dropdown: FunctionComponent<DropdownProps> = ({
</Styles.Text>
</Box>
<Column weight={1} />
<ArrowDropDownIcon width="1.25rem" height="1.25rem" />
<Box
style={{
transform: direction === "up" ? "scaleY(-1)" : undefined,
}}
>
<ArrowDropDownIcon width="1.25rem" height="1.25rem" />
</Box>
</Columns>
</Styles.SelectedContainer>
<Styles.MenuContainer isOpen={isOpen && filteredItems.length > 0}>
<Styles.MenuContainer
isOpen={isOpen && filteredItems.length > 0}
direction={direction}
size={size}
>
<Styles.MenuContainerScroll
menuContainerMaxHeight={menuContainerMaxHeight}
>
{filteredItems.map((item) => (
<Styles.MenuItem
key={item.key}
onClick={() => {
onSelect(item.key);
setIsOpen(false);
}}
>
{item.label}
</Styles.MenuItem>
))}
<Styles.MenuItemsContainer direction={direction}>
{filteredItems.map((item) => (
<Styles.MenuItem
key={item.key}
onClick={() => {
onSelect(item.key);
setIsOpen(false);
}}
>
{item.label}
</Styles.MenuItem>
))}
</Styles.MenuItemsContainer>
</Styles.MenuContainerScroll>
</Styles.MenuContainer>
</Styles.Container>
Expand Down
29 changes: 28 additions & 1 deletion apps/extension/src/components/dropdown/styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@ export const Styles = {
position: relative;
`,

DropdownContainer: styled.div<{
direction: "up" | "down";
}>`
display: flex;
flex-direction: ${(props) =>
props.direction === "down" ? "column" : "column-reverse"};
position: relative;
`,

SelectedContainer: styled.div<{
isOpen: boolean;
size: string;
Expand Down Expand Up @@ -68,6 +77,8 @@ export const Styles = {
`,
MenuContainer: styled.div.withConfig<{
isOpen: boolean;
direction: "up" | "down";
size: string;
}>({
shouldForwardProp: (prop) => {
if (prop === "isOpen") {
Expand All @@ -77,10 +88,19 @@ export const Styles = {
},
})`
position: absolute;
${({ direction, size }) =>
direction === "down"
? ""
: size === "small"
? "bottom: 2.5rem;"
: "bottom: 3.25rem;"}
width: 100%;
margin-top: 0.375rem;
${({ direction }) =>
direction === "down"
? "margin-top: 0.375rem"
: "margin-bottom: 0.375rem"};
z-index: 1;
Expand Down Expand Up @@ -115,6 +135,13 @@ export const Styles = {
}
}};
`,

MenuItemsContainer: styled.div<{ direction: "up" | "down" }>`
display: flex;
flex-direction: ${({ direction }) =>
direction === "down" ? "column" : "column-reverse"};
`,

MenuContainerScroll: styled(SimpleBar).withConfig<{
menuContainerMaxHeight?: string;
}>({
Expand Down
2 changes: 2 additions & 0 deletions apps/extension/src/components/dropdown/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,6 @@ export interface DropdownProps {

allowSearch?: boolean;
searchExcludedKeys?: string[];

direction?: "up" | "down";
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ import {
import { Button } from "../../../../components/button";
import { Column, Columns } from "../../../../components/column";
import {
GetStarknetKeyParamsMsg,
SubmitStarknetTxHashMsg,
GetStarknetKeyParamsSelectedMsg,
} from "@keplr-wallet/background";
import { InExtensionMessageRequester } from "@keplr-wallet/router-extension";
import { BACKGROUND_PORT } from "@keplr-wallet/router";
Expand Down Expand Up @@ -148,7 +148,7 @@ export const AccountActivationModal: FunctionComponent<{
}> => {
noop(gasSimulationRefresher.count);

const msg = new GetStarknetKeyParamsMsg(senderConfig.chainId);
const msg = new GetStarknetKeyParamsSelectedMsg(senderConfig.chainId);
const params = await new InExtensionMessageRequester().sendMessage(
BACKGROUND_PORT,
msg
Expand Down Expand Up @@ -275,7 +275,7 @@ export const AccountActivationModal: FunctionComponent<{
onClick={async () => {
if (feeConfig.maxFee && feeConfig.maxGasPrice) {
try {
const msg = new GetStarknetKeyParamsMsg(
const msg = new GetStarknetKeyParamsSelectedMsg(
senderConfig.chainId
);
const params =
Expand Down Expand Up @@ -359,7 +359,7 @@ export const AccountActivationModal: FunctionComponent<{
.waitFreshResponse();
if (res?.data) {
starknetAccount.setIsDeployingAccount(false);

if (feeConfig.fee != null) {
starknetQueries.queryStarknetERC20Balance
.getBalance(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,8 @@ export const FeeControl: FunctionComponent<{
align="bottom"
maxHeight="95vh"
close={() => setIsModalOpen(false)}
forceNotUseSimplebar={true}
forceNotOverflowAuto={true}
>
<TransactionFeeModal
close={() => setIsModalOpen(false)}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ export const TransactionFeeModal: FunctionComponent<{
feeConfig.setType(key as "ETH" | "STRK");
}}
size="large"
direction="up"
/>

{(() => {
Expand Down
2 changes: 1 addition & 1 deletion apps/extension/src/pages/starknet/sign/tx/view.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ export const SignStarknetTxView: FunctionComponent<{
calls: interactionData.data.transactions,
details: interactionData.data.details,
},
null,
(_, v) => (typeof v === "bigint" ? v.toString() : v),
2
)}
</Box>
Expand Down
14 changes: 7 additions & 7 deletions packages/background/src/keyring-starknet/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
RequestSignStarknetDeployAccountTx,
RequestJsonRpcToStarknetMsg,
GetStarknetKeysForEachVaultSettledMsg,
GetStarknetKeyParamsMsg,
GetStarknetKeyParamsSelectedMsg,
} from "./messages";
import { KeyRingStarknetService } from "./service";
import { PermissionInteractiveService } from "../permission-interactive";
Expand Down Expand Up @@ -56,10 +56,10 @@ export const getHandler: (
env,
msg as GetStarknetKeysForEachVaultSettledMsg
);
case GetStarknetKeyParamsMsg:
return handleGetStarknetKeyParamsMsg(service)(
case GetStarknetKeyParamsSelectedMsg:
return handleGetStarknetKeyParamsSelectedMsg(service)(
env,
msg as GetStarknetKeyParamsMsg
msg as GetStarknetKeyParamsSelectedMsg
);
default:
throw new KeplrError("keyring", 221, "Unknown msg type");
Expand Down Expand Up @@ -192,10 +192,10 @@ const handleGetStarknetKeysForEachVaultSettledMsg: (
};
};

const handleGetStarknetKeyParamsMsg: (
const handleGetStarknetKeyParamsSelectedMsg: (
service: KeyRingStarknetService
) => InternalHandler<GetStarknetKeyParamsMsg> = (service) => {
) => InternalHandler<GetStarknetKeyParamsSelectedMsg> = (service) => {
return async (_, msg) => {
return await service.getStarknetKeyParams(msg.chainId);
return await service.getStarknetKeyParamsSelected(msg.chainId);
};
};
4 changes: 2 additions & 2 deletions packages/background/src/keyring-starknet/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
RequestSignStarknetDeployAccountTx,
RequestJsonRpcToStarknetMsg,
GetStarknetKeysForEachVaultSettledMsg,
GetStarknetKeyParamsMsg,
GetStarknetKeyParamsSelectedMsg,
} from "./messages";
import { ROUTE } from "./constants";
import { getHandler } from "./handler";
Expand All @@ -24,7 +24,7 @@ export function init(
router.registerMessage(RequestSignStarknetDeployAccountTx);
router.registerMessage(RequestJsonRpcToStarknetMsg);
router.registerMessage(GetStarknetKeysForEachVaultSettledMsg);
router.registerMessage(GetStarknetKeyParamsMsg);
router.registerMessage(GetStarknetKeyParamsSelectedMsg);

router.addHandler(ROUTE, getHandler(service, permissionInteractionService));
}
6 changes: 3 additions & 3 deletions packages/background/src/keyring-starknet/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ export class GetStarknetKeysForEachVaultSettledMsg extends Message<
}
}

export class GetStarknetKeyParamsMsg extends Message<{
export class GetStarknetKeyParamsSelectedMsg extends Message<{
pubKey: Uint8Array;
address: Uint8Array;
salt: Uint8Array;
Expand All @@ -257,7 +257,7 @@ export class GetStarknetKeyParamsMsg extends Message<{
yHigh: Uint8Array;
}> {
public static type() {
return "get-starknet-key-params";
return "get-starknet-key-params-selected";
}

constructor(public readonly chainId: string) {
Expand All @@ -275,6 +275,6 @@ export class GetStarknetKeyParamsMsg extends Message<{
}

type(): string {
return GetStarknetKeyParamsMsg.type();
return GetStarknetKeyParamsSelectedMsg.type();
}
}
24 changes: 21 additions & 3 deletions packages/background/src/keyring-starknet/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ export class KeyRingStarknetService {
pubKey: Uint8Array;
address: Uint8Array;
}> {
const params = await this.getStarknetKeyParams(chainId);
const params = await this.getStarknetKeyParams(vaultId, chainId);
return {
name: this.keyRingService.getKeyRingName(vaultId),
hexAddress: `0x${Buffer.from(params.address).toString("hex")}`,
Expand All @@ -122,7 +122,26 @@ export class KeyRingStarknetService {
};
}

async getStarknetKeyParams(chainId: string): Promise<{
async getStarknetKeyParamsSelected(chainId: string): Promise<{
pubKey: Uint8Array;
address: Uint8Array;
salt: Uint8Array;
classHash: Uint8Array;
xLow: Uint8Array;
xHigh: Uint8Array;
yLow: Uint8Array;
yHigh: Uint8Array;
}> {
return await this.getStarknetKeyParams(
this.keyRingService.selectedVaultId,
chainId
);
}

async getStarknetKeyParams(
vaultId: string,
chainId: string
): Promise<{
pubKey: Uint8Array;
address: Uint8Array;
salt: Uint8Array;
Expand All @@ -136,7 +155,6 @@ export class KeyRingStarknetService {
if (!("starknet" in chainInfo)) {
throw new Error("Chain is not a starknet chain");
}
const vaultId = this.keyRingService.selectedVaultId;
const pubKey = await this.keyRingService.getPubKey(chainId, vaultId);

const vault = this.vaultService.getVault("keyRing", vaultId);
Expand Down
5 changes: 4 additions & 1 deletion packages/background/src/token-erc20/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,10 @@ export class TokenERC20Service {
// Validate contract Address
if (
!contractAddress.match(/^0x[0-9A-Fa-f]*$/) ||
(contractAddress.length !== 42 && contractAddress.length !== 66)
(contractAddress.length !== 42 &&
// For Starknet, contract address length can be 65 or 66.
contractAddress.length !== 65 &&
contractAddress.length !== 66)
) {
throw new Error("Contract address is not valid hex address");
}
Expand Down
2 changes: 1 addition & 1 deletion packages/chain-validator/src/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export const ERC20CurrencySchema = (
.keys({
type: Joi.string().equal("erc20").required(),
contractAddress: Joi.string()
.pattern(/(^(0x)[0-9a-fA-F]{40}$)|(^(0x)[0-9a-fA-F]{64}$)/)
.pattern(/(^(0x)[0-9a-fA-F]{40}$)|(^(0x)[0-9a-fA-F]{63,64}$)/)
.required(),
})
.custom((value: Secret20Currency) => {
Expand Down

0 comments on commit 053d345

Please sign in to comment.