Skip to content

feat(onramp): add settleIn function and onramp order settlement support#81

Open
onahprosper wants to merge 23 commits intomainfrom
onramp-processing
Open

feat(onramp): add settleIn function and onramp order settlement support#81
onahprosper wants to merge 23 commits intomainfrom
onramp-processing

Conversation

@onahprosper
Copy link
Copy Markdown
Collaborator

Description

This PR adds onramp support to the Gateway contract, enabling liquidity providers to settle inbound (crypto-to-fiat) orders directly on-chain. Previously the contract only supported offramp flows via settleOut. The following changes are introduced:

Gateway contract — contracts/Gateway.sol

  • Added settleIn function: accepts an order ID, token, amount, sender fee details, recipient, and rate. It validates the order, transfers funds from the caller, computes and routes the aggregator fee (for FX transfers via providerToAggregatorFx) or triggers local fee splitting (for local transfers at rate 100), records order state, transfers the net amount to the recipient, and emits SettleIn.
  • Renamed settlesettleOut for symmetry with the new settleIn.
  • Introduced _handleLocalTransferFeeSplitting and _handleFxTransferFeeSplitting for accurate fee distribution between the sender fee recipient, liquidity provider, and aggregator.
  • Migrated all token transfers to OpenZeppelin SafeERC20 (safeTransfer / safeTransferFrom) for secure ERC-20 handling.

IGateway interface — contracts/interfaces/IGateway.sol

  • Added SettleIn event with orderId, liquidityProvider, recipient, amount, token, aggregatorFee, and rate parameters.
  • Renamed OrderSettledSettleOut.
  • Added settleIn function signature with full NatSpec documentation.

New contract — contracts/ProviderBatchCallAndSponsor.sol

  • Allows liquidity providers to batch multiple settleIn calls in a single transaction, reducing gas overhead for high-volume onramp settlement.

Tooling and infrastructure

  • Updated Hardhat configuration with new network targets and task support.
  • Added custom tasks: accounts (list signers) and flatten (produce a flattened source).
  • Added Ignition deployment modules for Gateway, GatewayDeployProxy, GatewayUpgrade, and ProviderBatchCallAndSponsor across all supported chains: Ethereum, Optimism, Polygon, Arbitrum, Celo, BNB Chain, Base, Scroll, and Manta.
  • Regenerated all ABI artifacts and TypeScript ethers typings.

Tests

  • Updated test/gateway/gateway.settleOrder.test.js to cover settleIn scenarios including correct fee deductions, recipient transfers, event emission, and revert conditions.
  • Updated fixtures and utility helpers accordingly.

References

closes #73

Testing

  1. Install dependencies: npm install or yarn
  2. Compile the contracts: npx hardhat compile
  3. Run the full test suite: npx hardhat test
  4. Key test file: test/gateway/gateway.settleOrder.test.js

Manual end-to-end:

  1. Deploy via Ignition: npx hardhat ignition deploy ignition/modules/GatewayDeployProxy.ts --network <network>
  2. Call settleIn with a valid token, amount, and recipient address.
  3. Verify the SettleIn event is emitted with correct fee values and the recipient receives the net amount.

Environment: Hardhat · Solidity ^0.8.18 · Node.js 18+ · ethers v6

  • This change adds test coverage for new/changed/fixed functionality

Checklist

  • I have added documentation for new/changed functionality in this PR
  • All active GitHub checks for tests, formatting, and security are passing
  • The correct base branch is being used, if not main

By submitting a PR, I agree to Paycrest's Contributor Code of Conduct and Contribution Guide.

onahprosper and others added 16 commits January 24, 2026 00:59
…Out and implement settleIn for order processing
…ependencies and add license information for several packages
…tocol fees

- Changed the data structure in IGateway interface to replace senderFeeRecipient with aggregatorFee.
- Updated Gateway contract logic to calculate and transfer aggregator fees instead of protocol fees.
- Modified settleOrder tests to reflect changes in fee calculations and ensure correct amounts are transferred.
- Removed unused event SenderFeeTransferred from Events.
…regator address retrieval

- Renamed variables for clarity in fee calculations, changing `senderAmount` to `amountToSettle`.
- Updated logic to correctly handle aggregator fees during order settlements.
- Added a new function `getAggregator` in the IGateway interface to retrieve the aggregator address.
- Adjusted event emissions to reflect changes in fee handling.
…nt after deducting all fees

- Adjusted transfer logic to handle gross amount and subtract sender and protocol fees.
- Updated variable names for clarity, changing `senderAmount` to `recipientAmount`.
- Ensured that the correct amount is transferred to the recipient after all fees are deducted.
- Emitted settlement event with the updated recipient amount.
- Updated index files to export MockUSDT and its factory.
- Modified IGateway interface to include changes in event parameters for SettleIn.
- Updated hardhat types to include new contract factories and deployment methods for ProxyAdmin and TransparentUpgradeableProxy.
- Refactored existing index files to organize exports for better clarity and maintainability.
- Changed Mocha version from 11.7.5 to 11.3.0 in package.json and package-lock.json.
- Updated hardhat.config.ts to move Mocha timeout settings under the new test configuration structure.
- Adjusted TypeScript configuration to use ES2020 module syntax and bundler resolution.
…ening

- Implemented a new task to print available accounts and their ETH balances.
- Created a task to flatten specified contracts and their dependencies, with license handling.
- Changed RPC URLs for various networks in hardhat.config.ts to new endpoints.
- Added chainId for Celo network in the configuration.
- Updated package dependencies, including upgrading Hardhat to version 3.1.9 and adjusting related packages.
- Added license information for several packages in package-lock.json and yarn.lock.
- Removed autogenerated artifacts from the artifacts directory to clean up the project.
…ansfers

- Integrated SafeERC20 library to ensure safe token transfers in the Gateway contract.
- Replaced direct transfer calls with safeTransfer and safeTransferFrom methods to prevent potential issues with token transfers.
- Updated deployment addresses in the Ignition configuration for the Gateway contract.
- Adjusted README to reflect changes in deployment commands and network configurations.
@onahprosper onahprosper requested a review from chibie as a code owner April 8, 2026 12:17
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 8, 2026

Important

Review skipped

Too many files!

This PR contains 182 files, which is 32 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 36beaa20-fde2-4836-aac0-86f121449216

📥 Commits

Reviewing files that changed from the base of the PR and between 5e92b7f and b189c7a.

⛔ Files ignored due to path filters (3)
  • .DS_Store is excluded by !**/.DS_Store
  • package-lock.json is excluded by !**/package-lock.json
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (182)
  • .github/workflows/hardhat.yml
  • GatewayFlattened.sol
  • README.md
  • artifacts/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol/Ownable2StepUpgradeable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json
  • artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json
  • artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json
  • artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json
  • artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json
  • artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json
  • artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json
  • artifacts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/artifacts.d.ts
  • artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.json
  • artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json
  • artifacts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/artifacts.d.ts
  • artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json
  • artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json
  • artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json
  • artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.json
  • artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json
  • artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.json
  • artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json
  • artifacts/@openzeppelin/contracts/utils/Context.sol/Context.json
  • artifacts/artifacts.d.ts
  • artifacts/build-info/0fd1142d7618bca75338f2d6daf62308.json
  • artifacts/build-info/b310d8456b8a7c6a93c7198e95945bed.json
  • artifacts/build-info/solc-0_8_20-5932920006877773a4e6f81980380273c6f2fa80.json
  • artifacts/build-info/solc-0_8_20-5932920006877773a4e6f81980380273c6f2fa80.output.json
  • artifacts/build-info/solc-0_8_20-b0db7bfee97a65cd73d88f8fb2491a0ad1723288.json
  • artifacts/build-info/solc-0_8_20-b0db7bfee97a65cd73d88f8fb2491a0ad1723288.output.json
  • artifacts/build-info/solc-0_8_20-d502f832d8a4de84be69d81299d6fc290a5daede.json
  • artifacts/build-info/solc-0_8_20-d502f832d8a4de84be69d81299d6fc290a5daede.output.json
  • artifacts/contracts/Gateway.sol/Gateway.dbg.json
  • artifacts/contracts/Gateway.sol/Gateway.json
  • artifacts/contracts/Gateway.sol/artifacts.d.ts
  • artifacts/contracts/GatewaySettingManager.sol/GatewaySettingManager.dbg.json
  • artifacts/contracts/GatewaySettingManager.sol/GatewaySettingManager.json
  • artifacts/contracts/GatewaySettingManager.sol/artifacts.d.ts
  • artifacts/contracts/ProviderBatchCallAndSponsor.sol/ProviderBatchCallAndSponsor.json
  • artifacts/contracts/ProviderBatchCallAndSponsor.sol/artifacts.d.ts
  • artifacts/contracts/interfaces/IGateway.sol/IGateway.dbg.json
  • artifacts/contracts/interfaces/IGateway.sol/IGateway.json
  • artifacts/contracts/interfaces/IGateway.sol/artifacts.d.ts
  • artifacts/contracts/mocks/MockUSDC.sol/MockUSDT.dbg.json
  • artifacts/contracts/mocks/MockUSDC.sol/MockUSDT.json
  • artifacts/contracts/mocks/MockUSDC.sol/artifacts.d.ts
  • contracts/Gateway.sol
  • contracts/ProviderBatchCallAndSponsor.sol
  • contracts/interfaces/IGateway.sol
  • flattened/Gateway.sol
  • hardhat.config.ts
  • ignition/deployments/chain-1/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-1/build-info/solc-0_8_20-8979367c2573a0b32e8ae5915cce028a5faae714.json
  • ignition/deployments/chain-1/deployed_addresses.json
  • ignition/deployments/chain-1/journal.jsonl
  • ignition/deployments/chain-10/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-10/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-10/deployed_addresses.json
  • ignition/deployments/chain-10/journal.jsonl
  • ignition/deployments/chain-1135/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-1135/artifacts/ProviderBatchCallAndSponsor#ProviderBatchCallAndSponsor.json
  • ignition/deployments/chain-1135/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-1135/build-info/solc-0_8_20-ac89416d23dc73b4d7b4132cc0fb4bb5746fa9da.json
  • ignition/deployments/chain-1135/deployed_addresses.json
  • ignition/deployments/chain-1135/journal.jsonl
  • ignition/deployments/chain-137/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-137/artifacts/ProviderBatchCallAndSponsor#ProviderBatchCallAndSponsor.json
  • ignition/deployments/chain-137/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-137/build-info/solc-0_8_20-ac89416d23dc73b4d7b4132cc0fb4bb5746fa9da.json
  • ignition/deployments/chain-137/deployed_addresses.json
  • ignition/deployments/chain-137/journal.jsonl
  • ignition/deployments/chain-42161/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-42161/artifacts/ProviderBatchCallAndSponsor#ProviderBatchCallAndSponsor.json
  • ignition/deployments/chain-42161/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-42161/build-info/solc-0_8_20-ac89416d23dc73b4d7b4132cc0fb4bb5746fa9da.json
  • ignition/deployments/chain-42161/deployed_addresses.json
  • ignition/deployments/chain-42161/journal.jsonl
  • ignition/deployments/chain-42220/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-42220/artifacts/ProviderBatchCallAndSponsor#ProviderBatchCallAndSponsor.json
  • ignition/deployments/chain-42220/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-42220/build-info/solc-0_8_20-ac89416d23dc73b4d7b4132cc0fb4bb5746fa9da.json
  • ignition/deployments/chain-42220/deployed_addresses.json
  • ignition/deployments/chain-42220/journal.jsonl
  • ignition/deployments/chain-534352/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-534352/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-534352/deployed_addresses.json
  • ignition/deployments/chain-534352/journal.jsonl
  • ignition/deployments/chain-56/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-56/artifacts/ProviderBatchCallAndSponsor#ProviderBatchCallAndSponsor.json
  • ignition/deployments/chain-56/build-info/solc-0_8_20-8a0c96454463046c2bb073cb3dc5bd0ce7430cb1.json
  • ignition/deployments/chain-56/build-info/solc-0_8_20-ac89416d23dc73b4d7b4132cc0fb4bb5746fa9da.json
  • ignition/deployments/chain-56/deployed_addresses.json
  • ignition/deployments/chain-56/journal.jsonl
  • ignition/deployments/chain-8453/artifacts/Gateway#Gateway.json
  • ignition/deployments/chain-8453/build-info/solc-0_8_20-8979367c2573a0b32e8ae5915cce028a5faae714.json
  • ignition/deployments/chain-8453/deployed_addresses.json
  • ignition/deployments/chain-8453/journal.jsonl
  • ignition/modules/Gateway.ts
  • ignition/modules/GatewayDeployProxy.ts
  • ignition/modules/GatewayUpgrade.ts
  • ignition/modules/ProviderBatchCallAndSponsor.ts
  • package.json
  • tasks/accounts.ts
  • tasks/flatten.ts
  • test/fixtures/gateway.js
  • test/fixtures/mockUSDT.js
  • test/gateway/gateway.createorder.test.js
  • test/gateway/gateway.ownable.test.js
  • test/gateway/gateway.settleOrder.test.js
  • test/setup.js
  • test/utils/utils.manager.js
  • tsconfig.json
  • types/ethers-contracts/@openzeppelin/contracts/index.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/index.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.ts
  • types/ethers-contracts/@openzeppelin/contracts/proxy/transparent/index.ts
  • types/ethers-contracts/@openzeppelin/index.ts
  • types/ethers-contracts/Gateway.ts
  • types/ethers-contracts/GatewaySettingManager.ts
  • types/ethers-contracts/ProviderBatchCallAndSponsor.sol/IGateway.ts
  • types/ethers-contracts/ProviderBatchCallAndSponsor.sol/ProviderBatchCallAndSponsor.ts
  • types/ethers-contracts/ProviderBatchCallAndSponsor.sol/index.ts
  • types/ethers-contracts/common.ts
  • types/ethers-contracts/contracts/Gateway.ts
  • types/ethers-contracts/contracts/GatewaySettingManager.ts
  • types/ethers-contracts/contracts/ProviderBatchCallAndSponsor.sol/IGateway.ts
  • types/ethers-contracts/contracts/ProviderBatchCallAndSponsor.sol/ProviderBatchCallAndSponsor.ts
  • types/ethers-contracts/contracts/ProviderBatchCallAndSponsor.sol/index.ts
  • types/ethers-contracts/contracts/ProviderBatchCallAndSponsor.ts
  • types/ethers-contracts/contracts/index.ts
  • types/ethers-contracts/contracts/interfaces/IGateway.ts
  • types/ethers-contracts/contracts/interfaces/index.ts
  • types/ethers-contracts/contracts/mocks/MockUSDC.sol/MockUSDT.ts
  • types/ethers-contracts/contracts/mocks/MockUSDC.sol/index.ts
  • types/ethers-contracts/contracts/mocks/index.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/index.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/index.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/transparent/ProxyAdmin__factory.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/ITransparentUpgradeableProxy__factory.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy__factory.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/index.ts
  • types/ethers-contracts/factories/@openzeppelin/contracts/proxy/transparent/index.ts
  • types/ethers-contracts/factories/@openzeppelin/index.ts
  • types/ethers-contracts/factories/GatewaySettingManager__factory.ts
  • types/ethers-contracts/factories/Gateway__factory.ts
  • types/ethers-contracts/factories/ProviderBatchCallAndSponsor.sol/IGateway__factory.ts
  • types/ethers-contracts/factories/ProviderBatchCallAndSponsor.sol/ProviderBatchCallAndSponsor__factory.ts
  • types/ethers-contracts/factories/ProviderBatchCallAndSponsor.sol/index.ts
  • types/ethers-contracts/factories/contracts/GatewaySettingManager__factory.ts
  • types/ethers-contracts/factories/contracts/Gateway__factory.ts
  • types/ethers-contracts/factories/contracts/ProviderBatchCallAndSponsor.sol/IGateway__factory.ts
  • types/ethers-contracts/factories/contracts/ProviderBatchCallAndSponsor.sol/ProviderBatchCallAndSponsor__factory.ts
  • types/ethers-contracts/factories/contracts/ProviderBatchCallAndSponsor.sol/index.ts
  • types/ethers-contracts/factories/contracts/ProviderBatchCallAndSponsor__factory.ts
  • types/ethers-contracts/factories/contracts/index.ts
  • types/ethers-contracts/factories/contracts/interfaces/IGateway__factory.ts
  • types/ethers-contracts/factories/contracts/interfaces/index.ts
  • types/ethers-contracts/factories/contracts/mocks/MockUSDC.sol/MockUSDT__factory.ts
  • types/ethers-contracts/factories/contracts/mocks/MockUSDC.sol/index.ts
  • types/ethers-contracts/factories/contracts/mocks/index.ts
  • types/ethers-contracts/factories/index.ts
  • types/ethers-contracts/factories/interfaces/IGateway__factory.ts
  • types/ethers-contracts/factories/interfaces/index.ts
  • types/ethers-contracts/factories/mocks/MockUSDC.sol/MockUSDT__factory.ts
  • types/ethers-contracts/factories/mocks/MockUSDC.sol/index.ts
  • types/ethers-contracts/factories/mocks/TestGateway__factory.ts
  • types/ethers-contracts/factories/mocks/index.ts
  • types/ethers-contracts/hardhat.d.ts
  • types/ethers-contracts/index.ts
  • types/ethers-contracts/interfaces/IGateway.ts
  • types/ethers-contracts/interfaces/index.ts
  • types/ethers-contracts/mocks/MockUSDC.sol/MockUSDT.ts
  • types/ethers-contracts/mocks/MockUSDC.sol/index.ts
  • types/ethers-contracts/mocks/TestGateway.ts
  • types/ethers-contracts/mocks/index.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch onramp-processing

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

- Deleted package-lock.json to eliminate outdated dependency locks and ensure a fresh installation of packages.
- This change may require reinstallation of dependencies to generate a new lock file.
- Upgraded Node.js version from 18.16.0 to 22.22.0 in the GitHub Actions workflow for Hardhat.
- This change ensures compatibility with the latest features and improvements in Node.js.
- Updated buildInfoId for TransparentUpgradeableProxy and ProxyAdmin to reflect the latest Solidity compiler version.
- Removed outdated build-info files to clean up the artifacts directory.
- Adjusted bytecode and deployedBytecode in the respective JSON and TypeScript files to ensure consistency with the latest contract implementations.
- Commented out the hardhat-mocha plugin in hardhat.config.ts to streamline the configuration.
- Adjusted the plugins array to exclude the commented-out Mocha plugin for clarity.
…i Matchers plugin

- Commented out the hardhat-ethers-chai-matchers import in hardhat.config.ts to simplify the configuration.
- Updated the plugins array to exclude the commented-out Ethers Chai Matchers plugin for better clarity.
- Introduced package-lock.json to lock down the project's dependencies for consistent installations.
- Added @nomicfoundation/hardhat-ethers-chai-matchers as a new dependency in package.json.
- Updated several dependencies in yarn.lock, including hardhat and its related packages, to their latest versions for improved stability and features.
- Introduced several new dependencies including hardhat-ignition, hardhat-ignition-ethers, hardhat-keystore, hardhat-mocha, and ignition-core to package.json.
- These additions aim to improve the development experience and expand the capabilities of the Hardhat environment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update smart contract to support onramp

2 participants