Skip to content

Commit

Permalink
feat: sepolia
Browse files Browse the repository at this point in the history
  • Loading branch information
tabaktoni committed Dec 18, 2023
1 parent 2c2658e commit 26d7044
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 16 deletions.
26 changes: 18 additions & 8 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,19 @@ export const ADDR_BOUND = 2n ** 251n - MAX_STORAGE_ITEM_SIZE;
export enum BaseUrl {
SN_MAIN = 'https://alpha-mainnet.starknet.io',
SN_GOERLI = 'https://alpha4.starknet.io',
SN_SEPOLIA = 'https://alpha-sepolia.starknet.io',
}

export enum NetworkName {
SN_MAIN = 'SN_MAIN',
SN_GOERLI = 'SN_GOERLI',
SN_SEPOLIA = 'SN_SEPOLIA',
}

export enum StarknetChainId {
SN_MAIN = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),
SN_GOERLI = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI')
SN_SEPOLIA = '0x534e5f5345504f4c4941', // encodeShortString('SN_SEPOLIA')
}

export enum TransactionHashPrefix {
Expand All @@ -48,12 +51,19 @@ export const UDC = {
ENTRYPOINT: 'deployContract',
};

export const RPC_GOERLI_NODES = [
'https://starknet-testnet.public.blastapi.io/rpc/v0.5',
'https://limited-rpc.nethermind.io/goerli-juno/v0_5',
];
export const RPC_DEFAULT_VERSION = 'v0_5';

export const RPC_MAINNET_NODES = [
'https://starknet-mainnet.public.blastapi.io/rpc/v0.5',
'https://limited-rpc.nethermind.io/mainnet-juno/v0_5',
];
export const RPC_NODES = {
SN_GOERLI: [
`https://starknet-testnet.public.blastapi.io/rpc/`,
`https://free-rpc.nethermind.io/goerli-juno/`,
],
SN_MAIN: [
`https://starknet-mainnet.public.blastapi.io/rpc/`,
`https://free-rpc.nethermind.io/mainnet-juno/`,
],
SN_SEPOLIA: [
`https://starknet-sepolia.public.blastapi.io/rpc/`,
`https://free-rpc.nethermind.io/sepolia-juno/`,
],
};
31 changes: 23 additions & 8 deletions src/provider/rpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import {
HEX_STR_TRANSACTION_VERSION_1,
HEX_STR_TRANSACTION_VERSION_2,
NetworkName,
RPC_GOERLI_NODES,
RPC_MAINNET_NODES,
RPC_DEFAULT_VERSION,
RPC_NODES,
StarknetChainId,
} from '../constants';
import {
Expand Down Expand Up @@ -42,13 +42,23 @@ import { ProviderInterface } from './interface';
import { getAddressFromStarkName, getStarkName } from './starknetId';
import { Block } from './utils';

export const getDefaultNodeUrl = (networkName?: NetworkName, mute: boolean = false): string => {
/**
* Return randomly select available public node
* @param networkName NetworkName
* @param mute mute public node warning
* @returns default node url
*/
export const getDefaultNodeUrl = (
networkName?: NetworkName,
mute: boolean = false,
version: 'v0_5' | 'v0_6' = RPC_DEFAULT_VERSION

This comment has been minimized.

Copy link
@avimak

avimak Dec 25, 2023

Collaborator

specs use semver versioning, for example, 0.5, not 0_5. It's acceptable for the node to request this suffix path formatting, but shouldn't we adhere to the specifications' versioning? i.e., the client will request v0.5, and snjs will convert it to v0_5 when formatting the URL...

): string => {
if (!mute)
// eslint-disable-next-line no-console
console.warn('Using default public node url, please provide nodeUrl in provider options!');
const nodes = networkName === NetworkName.SN_MAIN ? RPC_MAINNET_NODES : RPC_GOERLI_NODES;
const nodes = RPC_NODES[networkName ?? NetworkName.SN_GOERLI];
const randIdx = Math.floor(Math.random() * nodes.length);
return nodes[randIdx];
return `${nodes[randIdx]}${version}`;
};

const defaultOptions = {
Expand All @@ -71,16 +81,21 @@ export class RpcProvider implements ProviderInterface {
private chainId?: StarknetChainId;

constructor(optionsOrProvider?: RpcProviderOptions) {
const { nodeUrl, retries, headers, blockIdentifier, chainId } = optionsOrProvider || {};
const { nodeUrl, retries, headers, blockIdentifier, chainId, rpcVersion } =
optionsOrProvider || {};
if (Object.values(NetworkName).includes(nodeUrl as NetworkName)) {
// Network name provided for nodeUrl
this.nodeUrl = getDefaultNodeUrl(nodeUrl as NetworkName, optionsOrProvider?.default);
this.nodeUrl = getDefaultNodeUrl(
nodeUrl as NetworkName,
optionsOrProvider?.default,
rpcVersion
);
} else if (nodeUrl) {
// NodeUrl provided
this.nodeUrl = nodeUrl;
} else {
// none provided fallback to default testnet
this.nodeUrl = getDefaultNodeUrl(undefined, optionsOrProvider?.default);
this.nodeUrl = getDefaultNodeUrl(undefined, optionsOrProvider?.default, rpcVersion);
}
this.retries = retries || defaultOptions.retries;
this.headers = { ...defaultOptions.headers, ...headers };
Expand Down
1 change: 1 addition & 0 deletions src/types/provider/configuration.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export type RpcProviderOptions = {
blockIdentifier?: BlockIdentifier;
chainId?: StarknetChainId;
default?: boolean;
rpcVersion?: 'v0_5' | 'v0_6';
};

export type SequencerHttpMethod = 'POST' | 'GET';
Expand Down

0 comments on commit 26d7044

Please sign in to comment.