Releases: bcnmy/biconomy-client-sdk
v4.6.2
What's Changed
- feat: gas offset param for sendTransaction and sendUserOp by @VGabriel45 in #474
- feat: transfer ownership by @VGabriel45 in #484
- feat: transfer_ownership_v2 by @VGabriel45 in #488
- chore: release v4.3.0 by @VGabriel45 in #491
- fix: process.env errors by @joepegler in #494
- chore: tests counterfactual address by @joepegler in #485
- chore: v4.4.1 by @joepegler in #495
- v4.4.1 by @joepegler in #496
- fix: reference value by @joepegler in #498
- v4.4.2 by @joepegler in #499
- chore: improve session dx by @joepegler in #502
- feat: simulate user op tests + ts doc by @VGabriel45 in #503
- feat: custom chains support by @joepegler in #500
- chore: release v4.4.4 by @joepegler in #504
- chore: add test concurrency using nonceOptions by @VGabriel45 in #506
- chore: batch session with token gas payments by @joepegler in #505
- chore: release v4.4.5 by @joepegler in #511
- chore: skip transfer tests by @joepegler in #514
- fix: remove file storage by @joepegler in #515
- chore: release v4.5.6 by @joepegler in #512
- ci: fix by @joepegler in #517
- chore: add hooks to readme by @joepegler in #518
- feat: signTypedData draft by @VGabriel45 in #519
- fix: rpc by @joepegler in #522
- feat: skip chain checks flag by @VGabriel45 in #526
- fix: replace broken doc links by @veljkovranic in #525
- feat: revoke sessions by @VGabriel45 in #528
- chore: v.4.5.0 by @VGabriel45 in #529
- chore: v.4.5.0 by @VGabriel45 in #530
- chore: version bump to 4.5.2 by @VGabriel45 in #533
- test: safe by @joepegler in #527
- feat: sessions dx improvements by @joepegler in #540
- fix: cjs build by @joepegler in #549
- chore: release v4.5.4 by @joepegler in #541
- fix: remove sign typed data by @VGabriel45 in #548
- chore: get signer address by @joepegler in #551
- chore: distributed session keys by @joepegler in #555
- chore: nurse verification gas limit in tests by @joepegler in #557
- chore: release v4.6.0 by @joepegler in #556
- fix: taiko by @joepegler in #559
- chore: remove dan by @joepegler in #577
- chore: release v4.6.2 by @joepegler in #579
- chore: release v4.6.1 by @joepegler in #578
Full Changelog: v4.4.0...v4.6.2
v4.4.0
What's Changed
- Improved DevEx related to the creating and using of sessions
- added transferOwnerhsip() method on the Smart Account
- Added gasOffsets parameter to increase gas values
Full Changelog: v4.2.0...v4.4.0
v4.2.0
What's Changed
Minor Changes
Features:
- Improved getBalances utility helper (da340f)
- Added 1271 Signature support (fd832fe)
- Added withdrawal utility helper (7a93d87)
- Reduce bundle size (7c594fa)
- Integrate AAErrors (7c594fa)
- Added 6492 Signature support (fd832fe)
- Added Token Balances to getSupportedTokens payload (869436)
- Added gas estimates utility helper (950a521)
- Added dummy pnd override (8d34d14)
Chores:
- Modernise tooling (7c594fa)
- Add changesets
- Migrate tests to Amoy
- Add pr lint
- Add size report
- Add tree shaking
- Add code of conduct
- Update README (table of contents)
- Add SECURITY.md
- Replace prettier with biome
- Replace yarn with bun
- Remove deprecated Base class
- Added "NEXT_PUBLIC_BICONOMY_SDK_DEBUG" to support NextJS debugging information
- Replace jest with vitest
- Added size threshold checks to PRs
- Added test coverage checks to PRs
- Added tsdoc auto-deploy
Fixes:
- Fix wrong falsy check for user op nonce (f2567)
Biconomy SDK release 9
Features:
- Added Speed optimisation, removing redundant gasEstimate call to bundler (2371b2)
- Added smartAccount.getBalances() method (4b8bae)
- Added smartAccount.getSupportedTokens() method (6d2fb27)
- Added smartAccount.deploy() method (be9dc4)
- Increased checking of the chainId from the bundler, paymaster and the provider (5d2f3)
- Added entity name to Logger calls (9278ec)
- Export a 'getChain' by id helper, which returns a viem chain (ab2ba)
- Add "stateOverride" optional param (20fd54)
Fixes:
- Fix for encodeAbiParameters inside batched session module (b27061)
- added flag to skip calldata approval patch (75698)
- Fixed the particle auth build
Chores:
Biconomy SDK release 8
Features
- Export bundler / paymaster instances + helpers from master package (1d1f9d)
- Export modules aliases from master package (d6205c)
- Added sendTransaction abstraction for buildUserOp + sendUserOp (335c6e)
- Reduced bundle size (765a3e3)
- Added bundler abstraction during SmartAccount init (591bbb4)
- Added e2e tests that speak with prod bundler / paymasters (4b4a53a)
- Added support for simultaneous ethers + viem signers (8e4b2c8)
- E2E tests for multichain modules (ecc86e2)
- E2E tests for session validation modules (4ad7ea7)
- Added TSDoc (638dae)
- Make txs more typesafe and default with valueOrData (b1e5b5e)
- Added createSmartAccountClient alias (232472)
- Improve dx of using paymster to build userOps (bb54888)
- Add ethers v6 signer support (9727fd)
- Improved dx of using gas payments with erc20 (741806)
- Abstract away chainId: 0fefb35
Chores
- Removed SmartAccount Base class (be82732)
- Migrate to viem v2 (8ce04a)
- Remove common + core-types dependencies (673514)
- Reincluded simulation flags (25d2be)
Bug Fixes
Biconomy SDK Release 7
What's Changed
Smart Account Abstraction
Abstracted the smart account creation process to improve UX and reduce boilerplate code.
Example of creating a smart a smart account and sending user gasless user op.
Before
import { ethers } from "ethers";
import { BiconomySmartAccountV2, DEFAULT_ENTRYPOINT_ADDRESS} from "@biconomy/account";
import { Bundler } from "@biconomy/bundler";
import { BiconomyPaymaster } from "@biconomy/paymaster";
import { PaymasterMode } from "@biconomy/paymaster";
import {
DEFAULT_ECDSA_OWNERSHIP_MODULE,
ECDSAOwnershipValidationModule,
} from "@biconomy/modules";
let provider = new ethers.providers.JsonRpcProvider("rpcUrl");
let signer = new ethers.Wallet("private key", provider);
const bundler = new Bundler({
bundlerUrl: "bundler url",
chainId: 80001,
entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS,
});
const paymaster = new BiconomyPaymaster({
paymasterUrl: "paymaster url",
strictMode: false,
});
const ecdsaModule = await ECDSAOwnershipValidationModule.create({
signer: signer,
moduleAddress: DEFAULT_ECDSA_OWNERSHIP_MODULE,
});
const biconomySmartAccountConfig = {
signer: signer,
chainId: 80001,
paymaster: paymaster,
bundler: bundler,
entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS,
defaultValidationModule: ecdsaModule,
activeValidationModule: ecdsaModule,
};
const biconomySmartAccount = await BiconomySmartAccountV2.create(
biconomySmartAccountConfig
);
const transaction = {
to: "0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020221",
data: "0x"
}
let partialUserOp = await biconomySmartAccount.buildUserOp([transaction],
paymasterServiceData: {
mode: PaymasterMode.SPONSORED,
},
});
const userOpResponse = await biconomySmartAccount.sendUserOp(partialUserOp);
await userOpResponse.wait();
After
import { ethers } from "ethers";
import { BiconomySmartAccountV2} from "@biconomy/account";
import { PaymasterMode } from "@biconomy/paymaster";
let provider = new ethers.providers.JsonRpcProvider("rpcUrl");
let signer = new ethers.Wallet("private key", provider);
const biconomySmartAccountConfig = {
signer: signer,
chainId: 80001
biconomyPaymasterApiKey: "paymaster api key",
bundlerUrl: "bundler url"
};
const biconomySmartAccount = await BiconomySmartAccountV2.create(
biconomySmartAccountConfig
);
const transaction = {
to: "0xd3C85Fdd3695Aee3f0A12B3376aCD8DC54020221",
data: "0x"
}
let partialUserOp = await biconomySmartAccount.buildUserOp([transaction],
paymasterServiceData: {
mode: PaymasterMode.SPONSORED,
},
);
const userOpResponse = await biconomySmartAccount.sendUserOp(partialUserOp);
await userOpResponse.wait();
The smart account uses ECDSA by default, entry point address is also set by default by the SDK.
-
Abstracted Bundler
Bundler is now required, this will help us remove the need of providing a chainId as a param in the create method in the future because we can get it from bundler instance or bundler url. Making sure a smart account has a bundler is essential as the smart account is not functional without the bundler.
The user can now skip creating the instance of the bundler and provide just the bundler url instead to the “create” method of BiconomySmartAccountV2.
Example of creating a smart account and sending a user op.
const provider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai"); const signer = new ethers.Wallet("private key", provider); const bundlerUrl = "bundler url"; const biconomyPaymasterApiKey = "paymaster api key"; const chainId = 80001; let smartAccount = await BiconomySmartAccountV2.create({ signer, chainId, bundlerUrl })
-
Abstracted Paymaster
Paymaster is now abstracted, added a new optional param, “biconomyPaymasterApiKey” which can be provided instead of having to manually create the instance of paymaster by the user.
const provider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai"); const signer = new ethers.Wallet("private key", provider); const bundlerUrl = "bundler url"; const biconomyPaymasterApiKey = "paymaster api key"; const chainId = 80001; let smartAccount = await BiconomySmartAccountV2.create({ signer, chainId, biconomyPaymasterApiKey })
-
Default validation module to ECDSA
User does not need to provide a “defaultValidationModule” and “activeValidationModule” if the module that he wants to use is ECDSA, this will be set by default on the smart accounts.
const provider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai"); const signer = new ethers.Wallet("private key", provider); const bundlerUrl = "bundler url"; const chainId = 80001; // ECDSA validation module is assigned by the SDK by default let smartAccount = await BiconomySmartAccountV2.create({ signer, chainId, bundlerUrl })
-
Abstracted entry point address
The “entryPointAddress” is now optional. User can skip providing an entry point address and the SDK will set it to “DEFAULT_ENTRYPOINT_ADDRESS” by default.
const provider = new ethers.providers.JsonRpcProvider("https://rpc.ankr.com/polygon_mumbai"); const signer = new ethers.Wallet("private key", provider); const bundlerUrl = "bundler url"; const chainId = 80001; // Entry point address is automatically set to **DEFAULT_ENTRYPOINT_ADDRESS** let smartAccount = await BiconomySmartAccountV2.create({ signer, chainId, bundlerUrl })
Support for WalletClientSigner
Our smart accounts now supports WalletClientSigner from “@alchemy/aa-core”.
User can now pass WalletClientSigner instead of ethers.Signer or keep using ethers.Signer if preferred.
import { WalletClientSigner } from "@alchemy/aa-core"; import { privateKeyToAccount } from "viem/accounts"; import { createWalletClient, http } from "viem"; import { polygonMumbai } from "viem/chains"; import { BiconomySmartAccountV2 } from "../src/BiconomySmartAccountV2"; import { ChainId } from "@biconomy/core-types"; const wallet = privateKeyToAccount(`0x${privKey}`); const walletClient = createWalletClient({ account: wallet, chain: polygonMumbai, transport: http("https://rpc-mumbai.maticvigil.com"), }); const ecdsaSigner: WalletClientSigner = new WalletClientSigner(walletClient, "json-rpc"); const account = await BiconomySmartAccountV2.create({ chainId: ChainId.POLYGON_MUMBAI, signer: ecdsaSigner, bundlerUrl: "https://bundler.biconomy.io/api/v2/80001/..." });
What's Changed
- Merge main into develop by @livingrockrises in #330
- Update import paths by @AmanRaj1608 in #332
- Made entryPointAddress optional by @VGabriel45 in #336
- Feat/devx 336 abstract paymaster by @VGabriel45 in #334
- fix: misleading error when paymaster policy check fails by @livingrockrises in #335
- Added check for entryPointAddress field by @VGabriel45 in #337
- Feat/devx 337 abstract module by @VGabriel45 in #333
- Feat/devx 349 wallet client signer support by @VGabriel45 in #339
- Fix: Receipt status type by @joepegler in #342
- Feat/devx 362 abstract required bundler by @VGabriel45 in #341
- Release/r7 by @livingrockrises in #345
New Contributors
- @joepegler made their first contribution in #342
Full Changelog: r6...r7
Biconomy SDK Release 6
What's Changed
-
Security Fix 🐞: Batched Session Router Module signing method and address are updated. Please update to this latest batched session router version. Necessary fix has been done in Batched Session Router module. the module has been redeployed at the address :
0x00000D09967410f8C76752A104c9848b57ebba55
-
Major latency 💨: improvements in 3.1.1 🎉
-
buildUserOp
is updated with default skipBundlerGasEstimation as true. -
buildUserOp now calls the paymaster by default and add completes the userOp.
Code sample before
let partialUserOp = await biconomySmartAccount.buildUserOp([transaction]);
let paymasterServiceData: SponsorUserOperationDto = {
mode: PaymasterMode.SPONSORED,
smartAccountInfo: {
name: "BICONOMY",
version: "2.0.0",
},
// optional params...
calculateGasLimits: true,
};
const paymasterAndDataResponse =
await biconomyPaymaster.getPaymasterAndData(
partialUserOp,
paymasterServiceData
);
partialUserOp.paymasterAndData = paymasterAndDataResponse.paymasterAndData;
Code sample Now
let partialUserOp = await biconomySmartAccount.buildUserOp(
[transaction],
{
paymasterServiceData: {
mode: PaymasterMode.SPONSORED,
}
}
);
Here we are not passing SmartAccount version as default version is set to 2.0.0
- In paymaster package, the default Smart Account version used is 2.0.0. Earlier it was 1.0.0. So if you are using Smart Account V1 and upgrading to this package, you need to explicitly pass the Smart account version as 1.0.0 as mentioned below:
let partialUserOp = await biconomySmartAccount.buildUserOp([transaction], {}, true, {
mode: PaymasterMode.SPONSORED,
smartAccountInfo: {
name: "BICONOMY",
version: "1.0.0",
},
});
-
New Chains support added:
Chiliz (88888, 88882), Astar (592, 81)
-
Helpers method added to update the implementation of Smart Account from V1 to V2 modular smart account
Full example code can be found here bcnmy/sdk-examples@d4c395e
// create the V1 instance
const biconomySmartAccount = await biconomyAccount.init( {accountIndex: config.accountIndex} );
// create partial userOp to update implementation
const tx = await biconomySmartAccount.getUpdateImplementationData();
const moduleSetupData = await biconomySmartAccount.getModuleSetupData();
const partialUserOp = await biconomySmartAccount.updateImplementationUserOp()
console.log('requiredUserOp', partialUserOp);
// send the userOp on chain
// initialize V2 instance and use the flag `scanForUpgradedAccountsFromV1` to set the upgraded address instead of default V2 address generated
const biconomySmartAccountConfigV2 = {
chainId: config.chainId,
rpcUrl: config.rpcUrl,
paymaster: paymaster,
bundler: bundler,
entryPointAddress: DEFAULT_ENTRYPOINT_ADDRESS,
defaultValidationModule: ecdsaModule,
activeValidationModule: ecdsaModule,
scanForUpgradedAccountsFromV1: true, // <----------------- important
senderAddress: await biconomySmartAccount.getSmartAccountAddress(config.accountIndex)
};
const biconomySmartAccountV2 = await BiconomySmartAccountV2.create(biconomySmartAccountConfigV2);
- Added
waitForTxHash
hook in UserOperation response. Devs can optionally just rely onbiconomy_getUserOpStatus
to reduce overall time just to get userOpHash or transactionHash and not wait for transaction mined (receipt).
let userOpResponse = await biconomySmartAccount.sendUserOp(userOp)
const transactionDetails1: UserOpStatus = await userOpResponse.waitForTxHash();
console.log('transachion hash', transactionDetails1.transactionHash)
-
Add simulation param. If someone wants to have this call data check on their end for every transaction we have enabled more parameters in our
eth_sendUserOperation
.simulationType
can be:validation (default - only does validation checks)
validation_and_execution
(performs validation & execution checks) former with improved latency
-
Custom session storage client for Session Key Manager module. Anyone can make their own implementation of Session Storage by implementing ISessionStorage interface and pass it to the SessionKeyManager module instance.
-
Internal dependencies version bump for particle-auth.
-
web3-auth
andweb3-auth-native
packages are being deprecated from this release. You can still use the web3Auth directly using the web3Auth packages. Go to the web3Auth dashboard and setup a account and integrate directly for web/native.
Note: Biconomy SDK just takes a signer to initialise the SmartAccount instance for your smart contract wallets. This signer can be anything you pass in the params, web3Auth, privy, particle-auth or any.
auto generated release notes
What's Changed
- Latency Optimisations for buildUserOp by @ankurdubey521 in #307
- add simulation type param by @AmanRaj1608 in #304
- Enable custom session storage client by @innovation-stack in #309
- remove web3auth packages by @livingrockrises in #310
- Add void signer to support smart account address overrides by @livingrockrises in #311
- feat paymaster call for buildUserOp by @AmanRaj1608 in #305
- setup: devs can optionally just rely on biconomy_getUserOpStatus by @livingrockrises in #315
- SMA 294 features/chain-integration by @AmanRaj1608 in #318
- update eoaAddress -> address in Balances Dto by @livingrockrises in #319
- fix/update batched session router address and signing logic by @livingrockrises in #320
- init update readme and keywords in packages by @livingrockrises in #317
- fix/bump particle auth packages by @livingrockrises in #322
- Upgrades methods in Account V1 by @livingrockrises in #306
- default storage client by @livingrockrises in #324
- version bump and changelog by @livingrockrises in #325
- release r6 by @livingrockrises in #326
- chore/update simulation types and names for bundler by @livingrockrises in #327
- Refactor/estimation of userop by @livingrockrises in #329
New Contributors
- @ankurdubey521 made their first contribution in #307
- @innovation-stack made their first contribution in #309
Full Changelog: r5...r6
Biconomy SDK Release 5
Successfully published:
- @biconomy/account@3.1.0
- @biconomy/bundler@3.1.0
- @biconomy/common@3.1.0
- @biconomy/core-types@3.1.0
- @biconomy/modules@3.1.0
- @biconomy/node-client@3.1.0
- @biconomy/particle-auth@3.1.0
- @biconomy/paymaster@3.1.0
- @biconomy/transak@3.1.0
- @biconomy/web3-auth@3.1.0
- @biconomy/web3-auth-native@3.1.0
Includes access to modular smart account (BiconomySmartAccountV2)
What's Changed
- chore: add new empty packages + dev notes + initial setup by @livingrockrises in #251
- Sma 42 modules specs by @livingrockrises in #253
- session manager module init + dev notes + module versions by @livingrockrises in #254
- Adding Session Storage Interface by @tomarsachin2271 in #256
- Adding Session Local storage class by @tomarsachin2271 in #259
- Sma 46 multichain validation module by @livingrockrises in #257
- account V2 implementation first version + dev notes by @livingrockrises in #255
- Session Key Manager module implementation by @AmanRaj1608 in #258
- fix: session manager changes by @AmanRaj1608 in #260
- setters for validation modules + refactor by @livingrockrises in #261
- fix: incorrect data merkleRoot length by @AmanRaj1608 in #262
- Set merkle root in session storage while creating session by @tomarsachin2271 in #265
- Feat/update signing methods and flows by @livingrockrises in #263
- Add isModuleEnabled method by @tomarsachin2271 in #266
- use proof instead of root in signUserOpHash by @protodev-rage in #264
- update constants + update dummy sig by @livingrockrises in #272
- Features/sma 85 fix prettier by @Aboudjem in #274
- get dummy sig implementation for session key manager module by @livingrockrises in #276
- Update README.md by @rhicc in #267
- added session router + updated existing session manager module + dev … by @livingrockrises in #275
- update signature logic + current addresses constants by @livingrockrises in #278
- Features/sma 85 GitHub actions by @Aboudjem in #273
- SMA-44 Add ERC20 implementation and interface for SessionValidationModule by @tomarsachin2271 in #281
- buildUserOp: force encode for batch by @livingrockrises in #283
- Features/sma 86 code style by @Aboudjem in #280
- init with nonce options for account V2 by @livingrockrises in #285
- Sma 121 batched router dummysig by @livingrockrises in #284
- Features/SMA-81-testing-framework by @Aboudjem in #277
- Features/sma 84 readme by @Aboudjem in #271
- Features/sma 84 readme by @Aboudjem in #287
- review dev notes + account added api specs + updated jest config by @livingrockrises in #289
- accept and return session id - createSession by @livingrockrises in #290
- fix: build errors by @AmanRaj1608 in #291
- fix: lint warning and errors by @AmanRaj1608 in #292
- feat: chain integration by @AmanRaj1608 in #295
- fix: gitInitCode cache issue by @AmanRaj1608 in #294
- 📝 add contributing.md by @Aboudjem in #293
- Fix/v1 compatibility and improve latency by @livingrockrises in #296
- all instances use create pattern by @livingrockrises in #297
- address todo and review comments by @livingrockrises in #298
- Modular SA V2 Integration by @livingrockrises in #286
- Release r5 by @livingrockrises in #300
- add delay in/after beforeAll by @livingrockrises in #301
- Modular Account V2 Integration by @livingrockrises in #299
New Contributors
- @tomarsachin2271 made their first contribution in #256
- @protodev-rage made their first contribution in #264
- @Aboudjem made their first contribution in #274
- @rhicc made their first contribution in #267
Full Changelog: r4...r5
Biconomy SDK Release 4
What's Changed
- forward flow code scrapping by @talhamalik883 in #159
- Bundler Package by @talhamalik883 in #163
- M sdk modularity pm by @livingrockrises in #174
- feat: particle auth integration by @AmanRaj1608 in #175
- chore: finalise package version for publishing particle-auth by @livingrockrises in #177
- Publish package for particle-auth by @livingrockrises in #178
- fix: clean web3-auth-native by @kquirapas in #181
- fix: linting issue in social login by @livingrockrises in #182
- Fix/state issue by @talhamalik883 in #180
- fix: rpc url for polygon zkevm by @livingrockrises in #184
- account package implementation by @talhamalik883 in #173
- Fix/current forward flow fixes optimise by @livingrockrises in #183
- chore: version bump for necessary packages + changelog by @livingrockrises in #186
- Forward flow bug fixes and minor optimisations by @livingrockrises in #187
- Feat/versioning by @talhamalik883 in #188
- feat: get fee quote or data method in biconomy paymaster by @livingrockrises in #190
- packages scrapping by @talhamalik883 in #191
- fix for acme as relayer need this as string by @talhamalik883 in #192
- Feat: Biconomy Paymaster by @livingrockrises in #193
- lint fixes by @talhamalik883 in #195
- removed unncessary function by @talhamalik883 in #196
- feat: update responses to support calculateGasLimits flag by @livingrockrises in #198
- error handling in paymaster by @livingrockrises in #200
- multi smart account creation and acme dapp support by @talhamalik883 in #201
- Merge branch 'sdk_modularity' into acme_dapp_support by @livingrockrises in #202
- feat/improve dtos and reduce amount of information passed by @livingrockrises in #224
- fix userOp estimate gas overrides by @talhamalik883 in #227
- Readme files for account, paymaster and bundler package by @talhamalik883 in #229
- development sdk v3 by @livingrockrises in #231
- bump package version and add changelog by @livingrockrises in #233
- test command run fixes by @livingrockrises in #232
- feat: chain integration by @AmanRaj1608 in #226
- update versions and README by @livingrockrises in #235
- Biconomy Modular SDK V3 by @livingrockrises in #234
- fix: avoid sending populated values of gas prices when estimating by @livingrockrises in #237
- verify account deployment even when nonce is 0 by @talhamalik883 in #238
- finalUserOp replaced with userOp for overrides proper usage by @talhamalik883 in #239
- Publish alpha.1 by @livingrockrises in #240
- SDK v2 fixes by @livingrockrises in #241
- feat: base mainnet integration by @AmanRaj1608 in #243
- Feat/pm rpc compatibility calcgaslimits by @livingrockrises in #245
- Publish alpha.2 by @livingrockrises in #246
- fix: update broken docs link by @sudotx in #244
- attach signer function call by @talhamalik883 in #248
- Paymaster service gas limits compatibility by @livingrockrises in #247
- Stable release 3.0.0 by @livingrockrises in #250
- update changelog and package version by @livingrockrises in #268
- r4 by @livingrockrises in #269
New Contributors
- @kquirapas made their first contribution in #181
- @sudotx made their first contribution in #244
Full Changelog: r3...r4