Skip to content

Commit

Permalink
refactor: migrate Web3Provider to JsonRpcProvider and update related …
Browse files Browse the repository at this point in the history
…imports
  • Loading branch information
Ben-Rey committed Dec 31, 2024
1 parent bd09601 commit 31f4659
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 251 deletions.
File renamed without changes.
3 changes: 2 additions & 1 deletion src/provider/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './types'
export * from './constants'
export * from './interface'
export * from './web3Provider'
export * from './jsonRpcProvider'
4 changes: 2 additions & 2 deletions src/provider/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
ReadSCParams,
} from './'

export type PublicProviderT = {
export type PublicProvider = {
balanceOf(
addresses: string[],
final?: boolean
Expand All @@ -38,7 +38,7 @@ export type PublicProviderT = {
/**
* Defines the expected structure for a provider.
*/
export type Provider = PublicProviderT & {
export type Provider = PublicProvider & {
/** Retrieves the account's address. */
get address(): string

Expand Down
2 changes: 2 additions & 0 deletions src/provider/jsonRpcProvider/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './jsonRpcProvider'
export * from './jsonRpcPublicProvider'
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// a Web3Provider is the combination of a clientAPI and an private key account
import {
CallSCParams,
DeploySCParams,
Expand Down Expand Up @@ -38,47 +37,47 @@ import {
import { execute } from '../../basicElements/bytecode'
import { U64_t } from '../../basicElements/serializers/number/u64'
import { ErrorMaxGas, ErrorInsufficientBalance } from '../../errors'
import { PublicProvider } from './publicProvider'
import { JsonRpcPublicProvider } from './jsonRpcPublicProvider'

export class Web3Provider extends PublicProvider implements Provider {
export class JsonRpcProvider extends JsonRpcPublicProvider implements Provider {
constructor(
public client: PublicAPI,
public account: Account
) {
super(client)
}

static fromRPCUrl(url: string, account: Account): Web3Provider
static fromRPCUrl(url: string): PublicProvider
static fromRPCUrl(url: string, account: Account): JsonRpcProvider
static fromRPCUrl(url: string): JsonRpcPublicProvider
static fromRPCUrl(
url: string,
account?: Account
): Web3Provider | PublicProvider {
): JsonRpcProvider | JsonRpcPublicProvider {
const client = new PublicAPI(url)
if (account) {
return new Web3Provider(client, account)
return new JsonRpcProvider(client, account)
}
return new PublicProvider(client)
return new JsonRpcPublicProvider(client)
}

static mainnet(account: Account): Web3Provider
static mainnet(): PublicProvider
static mainnet(account?: Account): Web3Provider | PublicProvider {
static mainnet(account: Account): JsonRpcProvider
static mainnet(): JsonRpcPublicProvider
static mainnet(account?: Account): JsonRpcProvider | JsonRpcPublicProvider {
return account
? Web3Provider.fromRPCUrl(PublicApiUrl.Mainnet, account)
: Web3Provider.fromRPCUrl(PublicApiUrl.Mainnet)
? JsonRpcProvider.fromRPCUrl(PublicApiUrl.Mainnet, account)
: JsonRpcProvider.fromRPCUrl(PublicApiUrl.Mainnet)
}

static buildnet(account: Account): Web3Provider
static buildnet(): PublicProvider
static buildnet(account?: Account): Web3Provider | PublicProvider {
static buildnet(account: Account): JsonRpcProvider
static buildnet(): JsonRpcPublicProvider
static buildnet(account?: Account): JsonRpcProvider | JsonRpcPublicProvider {
return account
? Web3Provider.fromRPCUrl(PublicApiUrl.Buildnet, account)
: Web3Provider.fromRPCUrl(PublicApiUrl.Buildnet)
? JsonRpcProvider.fromRPCUrl(PublicApiUrl.Buildnet, account)
: JsonRpcProvider.fromRPCUrl(PublicApiUrl.Buildnet)
}

// eslint-disable-next-line @typescript-eslint/naming-convention
private readonly _providerName: string = 'Massa web3 provider'
private readonly _providerName: string = 'Massa Json Rpc provider'

get accountName(): string {
return this.account.address.toString()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// a Web3Provider is the combination of a clientAPI and an private key account
import { NodeStatusInfo, PublicProviderT, ReadSCData, ReadSCParams } from '..'
import { NodeStatusInfo, PublicProvider, ReadSCData, ReadSCParams } from '..'
import {
Account,
CHAIN_ID,
Expand All @@ -15,19 +14,19 @@ import { rpcTypes as t } from '../../generated'
import { OperationStatus } from '../../operation'
import { formatNodeStatusObject } from '../../client/formatObjects'

export class PublicProvider implements PublicProviderT {
export class JsonRpcPublicProvider implements PublicProvider {
constructor(public client: PublicAPI) {}

static fromRPCUrl(url: string): PublicProvider {
return new PublicProvider(new PublicAPI(url))
return new JsonRpcPublicProvider(new PublicAPI(url))
}

static mainnet(): PublicProvider {
return PublicProvider.fromRPCUrl(PublicApiUrl.Mainnet)
return JsonRpcPublicProvider.fromRPCUrl(PublicApiUrl.Mainnet)
}

static buildnet(): PublicProvider {
return PublicProvider.fromRPCUrl(PublicApiUrl.Buildnet)
return JsonRpcPublicProvider.fromRPCUrl(PublicApiUrl.Buildnet)
}

async balanceOf(
Expand Down
4 changes: 0 additions & 4 deletions src/provider/web3Provider/index.ts

This file was deleted.

209 changes: 0 additions & 209 deletions src/provider/web3Provider/smartContracts.ts

This file was deleted.

14 changes: 7 additions & 7 deletions test/integration/setup.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import 'dotenv/config'
import { Account } from '../../src/account'
import { Mas } from '../../src/basicElements'
import { PublicProvider, Web3Provider } from '../../src/provider'
import { JsonRpcPublicProvider, JsonRpcProvider } from '../../src/provider'

export let account: Account
export let provider: Web3Provider
export let publicProvider: PublicProvider
export let mainnetProvider: Web3Provider
export let provider: JsonRpcProvider
export let publicProvider: JsonRpcPublicProvider
export let mainnetProvider: JsonRpcProvider

jest.setTimeout(120_000)

beforeAll(async () => {
account = await Account.fromEnv()
provider = Web3Provider.buildnet(account)
publicProvider = Web3Provider.buildnet()
mainnetProvider = Web3Provider.mainnet(account)
provider = JsonRpcProvider.buildnet(account)
publicProvider = JsonRpcProvider.buildnet()
mainnetProvider = JsonRpcProvider.mainnet(account)

// eslint-disable-next-line no-console
console.log(
Expand Down
6 changes: 3 additions & 3 deletions test/unit/sign-message.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Account, Web3Provider, Signature } from '../../src'
import { Account, JsonRpcProvider, Signature } from '../../src'

describe('signMessage', () => {
test('should correctly process Buffer data', async () => {
Expand All @@ -9,7 +9,7 @@ describe('signMessage', () => {
const secretKey = 'S12XuWmm5jULpJGXBnkeBsuiNmsGi2F4rMiTvriCzENxBR4Ev7vd'

const account = await Account.fromPrivateKey(secretKey)
const provider = Web3Provider.buildnet(account)
const provider = JsonRpcProvider.buildnet(account)
const signedMessage = await provider.sign(data)

expect(signedMessage.signature).toEqual(expected)
Expand All @@ -30,7 +30,7 @@ describe('signMessage', () => {
const secretKey = 'S12XuWmm5jULpJGXBnkeBsuiNmsGi2F4rMiTvriCzENxBR4Ev7vd'

const account = await Account.fromPrivateKey(secretKey)
const provider = Web3Provider.buildnet(account)
const provider = JsonRpcProvider.buildnet(account)
const signedMessage = await provider.sign(data)

expect(signedMessage.signature).toEqual(expected)
Expand Down

0 comments on commit 31f4659

Please sign in to comment.