Skip to content

Commit 98b2276

Browse files
authored
Merge pull request #227 from etherspot/develop
2 parents f028108 + 3c6c89e commit 98b2276

30 files changed

+4218
-2467
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"Etherspot",
55
"sidechains",
66
"Sparknet"
7-
]
7+
],
8+
"claudeCodeChat.permissions.yoloMode": false
89
}

backend/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
11
# Changelog
2+
## [4.2.0] - 2025-09-19
3+
- Removed unused code in the repository
4+
- Removed the mode 'erc20' on paymaster routes since it used pimlico paymaster(v1)
5+
- Removed the usage on ethers for the paymaster routes and the usage on ethers is limited to only utils section
6+
- Added viem package to replace ethers
7+
- Changed the build version to use bun instead of node.js
8+
- Changed the docker file to use bun image and build the arka backend
9+
210
## [4.1.2] - 2025-06-05
311
- Fetch from coingecko only if coingecko-token-repository records are available else skip calling the api
412

backend/Dockerfile

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
FROM node:18-alpine AS deps
2-
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
3-
RUN apk add --no-cache libc6-compat
1+
FROM oven/bun:1-alpine AS deps
2+
RUN apk update && apk add --no-cache g++ nodejs npm musl make musl-dev python3 git py3-setuptools && rm -rf /var/cache/apk/*
43
WORKDIR /app
5-
COPY package.json ./
6-
RUN npm install
4+
COPY package.json bun.lock* ./
5+
RUN bun install --frozen-lockfile
76

8-
FROM node:18-alpine AS builder
7+
FROM oven/bun:1-alpine AS builder
98
ARG APP_ENV
109
WORKDIR /app
1110
COPY . .
1211
COPY --from=deps /app/node_modules ./node_modules
13-
RUN npm run build
12+
RUN bun run build
1413

15-
FROM node:18-alpine AS runner
14+
FROM oven/bun:1-alpine AS runner
1615
WORKDIR /usr/app
1716
ARG APP_ENV
1817
COPY --from=builder /app/build ./build
19-
COPY ./migrations ./build/migrations
18+
COPY ./migrations ./migrations
19+
COPY ./scripts ./scripts
2020
COPY package.json ./
2121
COPY --from=builder /app/config.json.default /usr/app/config.json
22-
RUN npm install
2322
USER root
2423
ENV NODE_ENV="production"
25-
CMD ["npm", "start"]
24+
CMD ["bun", "start"]

backend/bun.lock

Lines changed: 3300 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/indexer/ponder.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createConfig } from "@ponder/core";
22
import { http } from "viem";
3-
import SupportedNetworks from "../config.json" assert { type: "json" };
3+
import SupportedNetworks from "../config.json";
44
import { EtherspotPaymasterAbi } from "./EtherspotAbi";
55

66
export default createConfig({
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require('dotenv').config();
2+
const viem = require('viem');
3+
4+
async function up({ context: queryInterface }) {
5+
await queryInterface.sequelize.query(`INSERT INTO "${process.env.DATABASE_SCHEMA_NAME}".multi_token_paymaster ("TOKEN_ADDRESS", "PAYMASTER_ADDRESS", "ORACLE_ADDRESS", "CHAIN_ID", "DECIMALS", "CREATED_AT", "UPDATED_AT", "EP_VERSION") VALUES ('${viem.getAddress('0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85')}', '0x6Ad5796A4B5385bB3A1573C56115BF292Fb78d2F', '0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3', 10, 6, NOW(), NOW(), 'EPV_08')`);
6+
await queryInterface.sequelize.query(`INSERT INTO "${process.env.DATABASE_SCHEMA_NAME}".multi_token_paymaster ("TOKEN_ADDRESS", "PAYMASTER_ADDRESS", "ORACLE_ADDRESS", "CHAIN_ID", "DECIMALS", "CREATED_AT", "UPDATED_AT", "EP_VERSION") VALUES ('${viem.getAddress('0x94b008aA00579c1307B0EF2c499aD98a8ce58e58')}', '0x6Ad5796A4B5385bB3A1573C56115BF292Fb78d2F', '0xECef79E109e997bCA29c1c0897ec9d7b03647F5E', 10, 6, NOW(), NOW(), 'EPV_08')`);
7+
await queryInterface.sequelize.query(`INSERT INTO "${process.env.DATABASE_SCHEMA_NAME}".multi_token_paymaster ("TOKEN_ADDRESS", "PAYMASTER_ADDRESS", "ORACLE_ADDRESS", "CHAIN_ID", "DECIMALS", "CREATED_AT", "UPDATED_AT", "EP_VERSION") VALUES ('${viem.getAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')}', '0x6Ad5796A4B5385bB3A1573C56115BF292Fb78d2F', '0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6', 1, 6, NOW(), NOW(), 'EPV_08')`);
8+
await queryInterface.sequelize.query(`INSERT INTO "${process.env.DATABASE_SCHEMA_NAME}".multi_token_paymaster ("TOKEN_ADDRESS", "PAYMASTER_ADDRESS", "ORACLE_ADDRESS", "CHAIN_ID", "DECIMALS", "CREATED_AT", "UPDATED_AT", "EP_VERSION") VALUES ('${viem.getAddress('0xdAC17F958D2ee523a2206206994597C13D831ec7')}', '0x6Ad5796A4B5385bB3A1573C56115BF292Fb78d2F', '0x3E7d1eAB13ad0104d2750B8863b489D65364e32D', 1, 6, NOW(), NOW(), 'EPV_08')`);
9+
}
10+
11+
async function down({ context: queryInterface }) {
12+
await queryInterface.sequelize.query(`DELETE IF EXISTS FROM "${process.env.DATABASE_SCHEMA_NAME}".multi_token_paymaster;`);
13+
}
14+
15+
module.exports = { up, down }

backend/package.json

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "arka",
3-
"version": "4.1.2",
3+
"version": "4.2.1",
44
"description": "ARKA - (Albanian for Cashier's case) is the first open source Paymaster as a service software",
55
"type": "module",
66
"directories": {
@@ -10,16 +10,17 @@
1010
"lint": "eslint .",
1111
"lint:fix": "eslint . --fix",
1212
"check:types": "tsc --noEmit",
13-
"build": "esbuild `find src \\( -name '*.ts' \\)` --platform=node --outdir=build --resolve-extensions=.js && cp -r ./migrations ./build/",
13+
"build": "bun build src/index.ts --outdir build --target node && cp -r ./migrations ./build/",
1414
"build:docker:prod": "docker build . -t my-fastify-app --build-arg APP_ENV=production",
15-
"start": "node build",
16-
"migrate": "node scripts/migration.cjs",
17-
"dev": "tsx watch src | pino-pretty --colorize",
18-
"pretest": "npm run build",
19-
"test": "jest"
15+
"start": "bun build/index.js",
16+
"migrate": "bun run scripts/migration.cjs",
17+
"dev": "tsx watch src/index.ts | pino-pretty --colorize",
18+
"pretest": "bun run build",
19+
"test": "bun test",
20+
"postinstall": "node -e \"try { require('esbuild/install') } catch (e) { console.log('Using JS fallback for esbuild') }\""
2021
},
2122
"engines": {
22-
"node": ">=16.0.0"
23+
"bun": ">=1.0.0"
2324
},
2425
"keywords": [
2526
"nodejs",
@@ -39,7 +40,6 @@
3940
"crypto": "^1.0.1",
4041
"dotenv": "16.0.3",
4142
"env-schema": "5.1.1",
42-
"ethers": "5.7.2",
4343
"fastify": "4.24.3",
4444
"fastify-cron": "1.3.1",
4545
"fastify-healthcheck": "4.4.0",
@@ -49,14 +49,15 @@
4949
"node-fetch": "3.3.2",
5050
"node-pg-migrate": "^7.4.0",
5151
"pg": "^8.12.0",
52+
"pg-hstore": "^2.3.4",
5253
"postgrator": "^7.2.0",
5354
"sequelize": "^6.37.3",
5455
"sqlite": "5.1.1",
5556
"sqlite3": "5.1.7-rc.0",
5657
"ts-node": "^10.9.2",
5758
"typescript": "^5.4.5",
5859
"umzug": "^3.8.1",
59-
"viem": "2.7.6"
60+
"viem": "2.27.0"
6061
},
6162
"devDependencies": {
6263
"@babel/core": "7.23.2",

backend/src/abi/VerifyingPaymasterAbiV3.ts

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

backend/src/constants/MultiTokenPaymasterCronJob.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export const MULTI_TOKEN_PAYMASTERS: Record<string, Record<string, string>> = {
7575
"0xF8A0BF9cF54Bb92F17374d9e9A321E6a111a51bD": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
7676
"0xf7DE7E8A6bd59ED41a4b5fe50278b3B7f31384dF": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
7777
"0x7Ddc52c4De30e94Be3A6A0A2b259b2850f421989": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
78-
"0xAD29AbB318791D579433D831ed122aFeAf29dcfe": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
7978
"0xaEC945e04baF28b135Fa7c640f624f8D90F1C3a6": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8079
"0x715D400F88C167884bbCc41C5FeA407ed4D2f8A0": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8180
"0x90C97F71E18723b0Cf0dfa30ee176Ab653E89F40": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
@@ -84,7 +83,6 @@ export const MULTI_TOKEN_PAYMASTERS: Record<string, Record<string, string>> = {
8483
"0x4691937a7508860F876c9c0a2a617E7d9E945D4B": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8584
"0x16939ef78684453bfDFb47825F8a5F714f12623a": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8685
"0x8F0528cE5eF7B51152A59745bEfDD91D97091d2F": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
87-
"0x762539b45A1dCcE3D36d080F74d1AED37844b878": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8886
"0x67ee3Cb086F8a16f34beE3ca72FAD36F7Db929e2": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
8987
"0xFd7B3A77848f1C2D67E05E54d78d174a0C850335": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
9088
"0x1Fa4a73a3F0133f0025378af00236f3aBDEE5D63": "0x386eD13Ba07E1C409693b299BbB9839d05aF20c3",
@@ -199,7 +197,6 @@ export const MULTI_TOKEN_ORACLES: Record<string, Record<string, string>> = {
199197
"0xF8A0BF9cF54Bb92F17374d9e9A321E6a111a51bD": "0xca236E327F629f9Fc2c30A4E95775EbF0B89fac8",
200198
"0xf7DE7E8A6bd59ED41a4b5fe50278b3B7f31384dF": "0x20123C6ebd45c6496102BeEA86e1a6616Ca547c6",
201199
"0x7Ddc52c4De30e94Be3A6A0A2b259b2850f421989": "0x8b0D36ae4CF8e277773A7ba5F35c09Edb144241b",
202-
"0xAD29AbB318791D579433D831ed122aFeAf29dcfe": "0xe2A47e87C0f4134c8D06A41975F6860468b2F925",
203200
"0xaEC945e04baF28b135Fa7c640f624f8D90F1C3a6": "0x889158E39628C0397DC54B84F6b1cbe0AaEb7FFc",
204201
"0x715D400F88C167884bbCc41C5FeA407ed4D2f8A0": "0x7B49524ee5740c99435f52d731dFC94082fE61Ab",
205202
"0x90C97F71E18723b0Cf0dfa30ee176Ab653E89F40": "0x13A9c98b07F098c5319f4FF786eB16E22DC738e1",
@@ -208,7 +205,6 @@ export const MULTI_TOKEN_ORACLES: Record<string, Record<string, string>> = {
208205
"0x4691937a7508860F876c9c0a2a617E7d9E945D4B": "0x02Bfe714e78E2Ad1bb1C2beE93eC8dc5423B66d4",
209206
"0x16939ef78684453bfDFb47825F8a5F714f12623a": "0x9A18137ADCF7b05f033ad26968Ed5a9cf0Bf8E6b",
210207
"0x8F0528cE5eF7B51152A59745bEfDD91D97091d2F": "0xe0073b60833249ffd1bb2af809112c2fbf221DF6",
211-
"0x762539b45A1dCcE3D36d080F74d1AED37844b878": "0x38393201952f2764E04B290af9df427217D56B41",
212208
"0x67ee3Cb086F8a16f34beE3ca72FAD36F7Db929e2": "0x87701B15C08687341c2a847ca44eCfBc8d7873E1",
213209
"0xFd7B3A77848f1C2D67E05E54d78d174a0C850335": "0x887f177CBED2cf555a64e7bF125E1825EB69dB82",
214210
"0x1Fa4a73a3F0133f0025378af00236f3aBDEE5D63": "0x0Fe4D87883005fCAFaF56B81d09473D9A29dCDC3",

backend/src/constants/MultitokenPaymaster.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { BigNumber } from "ethers";
1+
import { toHex } from 'viem';
22

3-
export const UnaccountedCost = BigNumber.from("45000").toHexString();
3+
export const UnaccountedCost = toHex(45000n);
44

55
interface TokenInfo {
66
decimals: number;

0 commit comments

Comments
 (0)