From e9ef66d978bda1be2dcd4d6659d1cedae785152d Mon Sep 17 00:00:00 2001 From: nikolay Date: Wed, 13 Aug 2025 16:30:42 +0300 Subject: [PATCH 01/10] chore: add contracts Signed-off-by: nikolay --- ...ampleStargateHTSConnectorExistingToken.sol | 18 + .../contracts/stargate/StargateBase.sol | 717 ++++++++++++++++++ .../StargateHTSConnectorExistingToken.sol | 60 ++ .../contracts/stargate/StargateOFT.sol | 85 +++ .../stargate/interfaces/ICreditMessaging.sol | 35 + .../interfaces/ICreditMessagingHandler.sol | 16 + .../stargate/interfaces/IERC20Minter.sol | 16 + .../stargate/interfaces/IStargate.sol | 33 + .../stargate/interfaces/IStargateFeeLib.sol | 23 + .../stargate/interfaces/IStargatePool.sol | 56 ++ .../stargate/interfaces/ITokenMessaging.sol | 79 ++ .../interfaces/ITokenMessagingHandler.sol | 23 + .../contracts/stargate/libs/Path.sol | 106 +++ .../contracts/stargate/libs/Transfer.sol | 153 ++++ tools/layer-zero-example/hardhat.config.js | 16 + 15 files changed, 1436 insertions(+) create mode 100644 tools/layer-zero-example/contracts/stargate/ExampleStargateHTSConnectorExistingToken.sol create mode 100644 tools/layer-zero-example/contracts/stargate/StargateBase.sol create mode 100644 tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol create mode 100644 tools/layer-zero-example/contracts/stargate/StargateOFT.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol create mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol create mode 100644 tools/layer-zero-example/contracts/stargate/libs/Path.sol create mode 100644 tools/layer-zero-example/contracts/stargate/libs/Transfer.sol diff --git a/tools/layer-zero-example/contracts/stargate/ExampleStargateHTSConnectorExistingToken.sol b/tools/layer-zero-example/contracts/stargate/ExampleStargateHTSConnectorExistingToken.sol new file mode 100644 index 0000000000..f178b64a39 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/ExampleStargateHTSConnectorExistingToken.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "../hts/HederaTokenService.sol"; +import "../hts/IHederaTokenService.sol"; +import "../hts/KeyHelper.sol"; +import "../HTSConnectorExistingToken.sol"; +import "./StargateHTSConnectorExistingToken.sol"; + +contract ExampleStargateHTSConnectorExistingToken is Ownable, StargateHTSConnectorExistingToken { + constructor( + address _tokenAddress, + uint8 _sharedDecimals, + address _lzEndpoint, + address _delegate + ) payable StargateHTSConnectorExistingToken(_tokenAddress, _sharedDecimals, _lzEndpoint, _delegate) Ownable(_delegate) {} +} diff --git a/tools/layer-zero-example/contracts/stargate/StargateBase.sol b/tools/layer-zero-example/contracts/stargate/StargateBase.sol new file mode 100644 index 0000000000..03b1919327 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/StargateBase.sol @@ -0,0 +1,717 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.22; + +import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol"; + +import { ILayerZeroEndpointV2 } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/interfaces/IOAppCore.sol"; +import { Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; +// Solidity does not support splitting import across multiple lines +// solhint-disable-next-line max-line-length +import { OFTLimit, OFTFeeDetail, OFTReceipt, SendParam, MessagingReceipt, MessagingFee, IOFT } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; +import { OFTComposeMsgCodec } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/libs/OFTComposeMsgCodec.sol"; + +import { IStargate, Ticket } from "./interfaces/IStargate.sol"; +import { IStargateFeeLib, FeeParams } from "./interfaces/IStargateFeeLib.sol"; +import { ITokenMessaging, RideBusParams, TaxiParams } from "./interfaces/ITokenMessaging.sol"; +import { ITokenMessagingHandler } from "./interfaces/ITokenMessagingHandler.sol"; +import { ICreditMessagingHandler, Credit, TargetCredit } from "./interfaces/ICreditMessagingHandler.sol"; +import { Path } from "./libs/Path.sol"; +import { Transfer } from "./libs/Transfer.sol"; + +/// @title The base contract for StargateOFT, StargatePool, StargatePoolMigratable, and StargatePoolNative. +abstract contract StargateBase is Transfer, IStargate, ITokenMessagingHandler, ICreditMessagingHandler { + using SafeCast for uint256; + + // Stargate status + uint8 internal constant NOT_ENTERED = 1; + uint8 internal constant ENTERED = 2; + uint8 internal constant PAUSED = 3; + + /// @dev The token for the Pool or OFT. + /// @dev address(0) indicates native coin, such as ETH. + address public immutable override token; + /// @dev The shared decimals (lowest common decimals between chains). + uint8 public immutable override sharedDecimals; + /// @dev The rate between local decimals and shared decimals. + uint256 internal immutable convertRate; + + /// @dev The local LayerZero EndpointV2. + ILayerZeroEndpointV2 public immutable endpoint; + /// @dev The local LayerZero endpoint ID + uint32 public immutable localEid; + + address internal feeLib; + /// @dev The StargateBase status. Options include 1. NOT_ENTERED 2. ENTERED and 3. PAUSED. + uint8 public status = NOT_ENTERED; + /// @dev The treasury accrued fees, stored in SD. + uint64 public treasuryFee; + + address internal creditMessaging; + address internal lzToken; + address internal planner; + address internal tokenMessaging; + address internal treasurer; + + /// @dev Mapping of paths from this chain to other chains identified by their endpoint ID. + mapping(uint32 eid => Path path) public paths; + + /// @dev A store for tokens that could not be delivered because _outflow() failed. + /// @dev retryReceiveToken() can be called to retry the receive. + mapping(bytes32 guid => mapping(uint8 index => bytes32 hash)) public unreceivedTokens; + + modifier onlyCaller(address _caller) { + if (msg.sender != _caller) revert Stargate_Unauthorized(); + _; + } + + modifier nonReentrantAndNotPaused() { + // On the first call to nonReentrant, _status will be _NOT_ENTERED + if (status != NOT_ENTERED) { + if (status == ENTERED) revert Stargate_ReentrantCall(); + revert Stargate_Paused(); + } + // Any calls to nonReentrant after this point will fail + status = ENTERED; + _; + status = NOT_ENTERED; + } + + error Stargate_ReentrantCall(); + error Stargate_InvalidTokenDecimals(); + error Stargate_Unauthorized(); + error Stargate_SlippageTooHigh(); + error Stargate_UnreceivedTokenNotFound(); + error Stargate_OutflowFailed(); + error Stargate_InvalidAmount(); + error Stargate_InsufficientFare(); + error Stargate_InvalidPath(); + error Stargate_LzTokenUnavailable(); + error Stargate_Paused(); + error Stargate_RecoverTokenUnsupported(); + + event AddressConfigSet(AddressConfig config); + event CreditsSent(uint32 dstEid, Credit[] credits); + event CreditsReceived(uint32 srcEid, Credit[] credits); + event UnreceivedTokenCached( + bytes32 guid, + uint8 index, + uint32 srcEid, + address receiver, + uint256 amountLD, + bytes composeMsg + ); + event OFTPathSet(uint32 dstEid, bool oft); + event PauseSet(bool paused); + event PlannerFeeWithdrawn(uint256 amount); + event TreasuryFeeAdded(uint64 amountSD); + event TreasuryFeeWithdrawn(address to, uint64 amountSD); + + struct AddressConfig { + address feeLib; + address planner; + address treasurer; + address tokenMessaging; + address creditMessaging; + address lzToken; + } + + /// @notice Create a new Stargate contract + /// @dev Reverts with InvalidTokenDecimals if the token decimals are smaller than the shared decimals. + /// @param _token The token for the pool or oft. If the token is address(0), it is the native coin + /// @param _tokenDecimals The number of decimals for this tokens implementation on this chain + /// @param _sharedDecimals The number of decimals shared between all implementations of the OFT + /// @param _endpoint The LZ endpoint contract + /// @param _owner The owner of this contract + constructor(address _token, uint8 _tokenDecimals, uint8 _sharedDecimals, address _endpoint, address _owner) { + token = _token; + if (_tokenDecimals < _sharedDecimals) revert Stargate_InvalidTokenDecimals(); + convertRate = 10 ** (_tokenDecimals - _sharedDecimals); + sharedDecimals = _sharedDecimals; + + endpoint = ILayerZeroEndpointV2(_endpoint); + localEid = endpoint.eid(); + _transferOwnership(_owner); + } + + // ---------------------------------- Only Owner ------------------------------------------ + + /// @notice Configure the roles for this contract. + /// @param _config An AddressConfig object containing the addresses for the different roles used by Stargate. + function setAddressConfig(AddressConfig calldata _config) external onlyOwner { + feeLib = _config.feeLib; + planner = _config.planner; + treasurer = _config.treasurer; + tokenMessaging = _config.tokenMessaging; + creditMessaging = _config.creditMessaging; + lzToken = _config.lzToken; + emit AddressConfigSet(_config); + } + + /// @notice Sets a given Path as using OFT or resets it from OFT. + /// @dev Set the path as OFT if the remote chain is using OFT. + /// @dev When migrating from OFT to pool on remote chain (e.g. migrate USDC to circles), reset the path to non-OFT. + /// @dev Reverts with InvalidPath if the destination chain is the same as local. + /// @param _dstEid The destination chain endpoint ID + /// @param _oft Whether to set or reset the path + function setOFTPath(uint32 _dstEid, bool _oft) external onlyOwner { + if (_dstEid == localEid) revert Stargate_InvalidPath(); + paths[_dstEid].setOFTPath(_oft); + emit OFTPathSet(_dstEid, _oft); + } + + // ---------------------------------- Only Treasurer ------------------------------------------ + + /// @notice Withdraw from the accrued fees in the treasury. + /// @param _to The destination account + /// @param _amountSD The amount to withdraw in SD + function withdrawTreasuryFee(address _to, uint64 _amountSD) external onlyCaller(treasurer) { + treasuryFee -= _amountSD; + _safeOutflow(_to, _sd2ld(_amountSD)); + emit TreasuryFeeWithdrawn(_to, _amountSD); + } + + /// @notice Add tokens to the treasury, from the senders account. + /// @dev Only used for increasing the overall budget for transaction rewards + /// @dev The treasuryFee is essentially the reward pool. + /// @dev Rewards are capped to the treasury amount, which limits exposure so + /// @dev Stargate does not pay beyond what it's charged. + /// @param _amountLD The amount to add in LD + function addTreasuryFee(uint256 _amountLD) external payable onlyCaller(treasurer) { + _assertMsgValue(_amountLD); + uint64 amountSD = _inflow(msg.sender, _amountLD); + treasuryFee += amountSD; + emit TreasuryFeeAdded(amountSD); + } + + /// @dev Recover tokens sent to this contract by mistake. + /// @dev Only the treasurer can recover the token. + /// @dev Reverts with Stargate_RecoverTokenUnsupported if the treasurer attempts to withdraw StargateBase.token(). + /// @param _token the token to recover. if 0x0 then it is native token + /// @param _to the address to send the token to + /// @param _amount the amount to send + function recoverToken( + address _token, + address _to, + uint256 _amount + ) public virtual nonReentrantAndNotPaused onlyCaller(treasurer) returns (uint256) { + /// @dev Excess native is considered planner accumulated fees. + if (_token == address(0)) revert Stargate_RecoverTokenUnsupported(); + Transfer.safeTransfer(_token, _to, _amount, false); + return _amount; + } + + // ---------------------------------- Only Planner ------------------------------------------ + + /// @notice Pause or unpause a Stargate + /// @dev Be careful with this call, as it unsets the re-entry guard. + /// @param _paused Whether to pause or unpause the stargate + function setPause(bool _paused) external onlyCaller(planner) { + if (status == ENTERED) revert Stargate_ReentrantCall(); + status = _paused ? PAUSED : NOT_ENTERED; + emit PauseSet(_paused); + } + + function _plannerFee() internal view virtual returns (uint256) { + return address(this).balance; + } + + function plannerFee() external view returns (uint256 available) { + available = _plannerFee(); + } + + /// @notice Withdraw planner fees accumulated in StargateBase. + /// @dev The planner fee is accumulated in StargateBase to avoid the cost of passing msg.value to TokenMessaging. + function withdrawPlannerFee() external virtual onlyCaller(planner) { + uint256 available = _plannerFee(); + Transfer.safeTransferNative(msg.sender, available, false); + emit PlannerFeeWithdrawn(available); + } + + // ------------------------------- Public Functions --------------------------------------- + + /// @notice Send tokens through the Stargate + /// @dev Emits OFTSent when the send is successful + /// @param _sendParam The SendParam object detailing the transaction + /// @param _fee The MessagingFee object describing the fee to pay + /// @param _refundAddress The address to refund any LZ fees paid in excess + /// @return msgReceipt The receipt proving the message was sent + /// @return oftReceipt The receipt proving the OFT swap + function send( + SendParam calldata _sendParam, + MessagingFee calldata _fee, + address _refundAddress + ) external payable override returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt) { + (msgReceipt, oftReceipt, ) = sendToken(_sendParam, _fee, _refundAddress); + } + + function sendToken( + SendParam calldata _sendParam, + MessagingFee calldata _fee, + address _refundAddress + ) + public + payable + override + nonReentrantAndNotPaused + returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt, Ticket memory ticket) + { + // step 1: assets inflows and apply the fee to the input amount + (bool isTaxi, uint64 amountInSD, uint64 amountOutSD) = _inflowAndCharge(_sendParam); + + // step 2: generate the oft receipt + oftReceipt = OFTReceipt(_sd2ld(amountInSD), _sd2ld(amountOutSD)); + + // step 3: assert the messaging fee + MessagingFee memory messagingFee = _assertMessagingFee(_fee, oftReceipt.amountSentLD); + + // step 4: send the token depending on the mode Taxi or Bus + if (isTaxi) { + msgReceipt = _taxi(_sendParam, messagingFee, amountOutSD, _refundAddress); + } else { + (msgReceipt, ticket) = _rideBus(_sendParam, messagingFee, amountOutSD, _refundAddress); + } + + emit OFTSent( + msgReceipt.guid, + _sendParam.dstEid, + msg.sender, + oftReceipt.amountSentLD, + oftReceipt.amountReceivedLD + ); + } + + /// @notice Retry receiving a token that initially failed. + /// @dev The message has been delivered by the Messaging layer, so it is ok for anyone to retry. + /// @dev try to receive the token if the previous attempt failed in lzReceive + /// @dev Reverts with UnreceivedTokenNotFound if the message is not found in the cache + /// @dev Emits OFTReceived if the receive succeeds + /// @param _guid The global unique ID for the message that failed + /// @param _index The index of the message that failed + /// @param _srcEid The source endpoint ID for the message that failed + /// @param _receiver The account receiver for the message that failed + /// @param _amountLD The amount of tokens in LD to transfer to the account + /// @param _composeMsg The bytes representing the compose message in the message that failed + function retryReceiveToken( + bytes32 _guid, + uint8 _index, + uint32 _srcEid, + address _receiver, + uint256 _amountLD, + bytes calldata _composeMsg + ) external nonReentrantAndNotPaused { + if (unreceivedTokens[_guid][_index] != keccak256(abi.encodePacked(_srcEid, _receiver, _amountLD, _composeMsg))) + revert Stargate_UnreceivedTokenNotFound(); + delete unreceivedTokens[_guid][_index]; + + _safeOutflow(_receiver, _amountLD); + _postOutflow(_ld2sd(_amountLD)); + if (_composeMsg.length > 0) { + endpoint.sendCompose(_receiver, _guid, 0, _composeMsg); + } + emit OFTReceived(_guid, _srcEid, _receiver, _amountLD); + } + + // ------------------------------- Only Messaging --------------------------------------- + + /// @notice Entrypoint for receiving tokens + /// @dev Emits OFTReceived when the OFT token is correctly received + /// @dev Emits UnreceivedTokenCached when the OFT token is not received + /// @param _origin The Origin struct describing the origin, useful for composing + /// @param _guid The global unique ID for this message, useful for composing + function receiveTokenBus( + Origin calldata _origin, + bytes32 _guid, + uint8 _seatNumber, + address _receiver, + uint64 _amountSD + ) external nonReentrantAndNotPaused onlyCaller(tokenMessaging) { + uint256 amountLD = _sd2ld(_amountSD); + + bool success = _outflow(_receiver, amountLD); + if (success) { + _postOutflow(_amountSD); + emit OFTReceived(_guid, _origin.srcEid, _receiver, amountLD); + } else { + /** + * @dev The busRide mode does not support composeMsg in any form. Thus we hardcode it to "" + */ + unreceivedTokens[_guid][_seatNumber] = keccak256(abi.encodePacked(_origin.srcEid, _receiver, amountLD, "")); + emit UnreceivedTokenCached(_guid, _seatNumber, _origin.srcEid, _receiver, amountLD, ""); + } + } + + // taxi mode + function receiveTokenTaxi( + Origin calldata _origin, + bytes32 _guid, + address _receiver, + uint64 _amountSD, + bytes calldata _composeMsg + ) external nonReentrantAndNotPaused onlyCaller(tokenMessaging) { + uint256 amountLD = _sd2ld(_amountSD); + bool hasCompose = _composeMsg.length > 0; + bytes memory composeMsg; + if (hasCompose) { + composeMsg = OFTComposeMsgCodec.encode(_origin.nonce, _origin.srcEid, amountLD, _composeMsg); + } + + bool success = _outflow(_receiver, amountLD); + if (success) { + _postOutflow(_amountSD); + // send the composeMsg to the endpoint + if (hasCompose) { + endpoint.sendCompose(_receiver, _guid, 0, composeMsg); + } + emit OFTReceived(_guid, _origin.srcEid, _receiver, amountLD); + } else { + /** + * @dev We use the '0' index to represent the seat number. This is because for a type 'taxi' msg, + * there is only ever one corresponding receiveTokenTaxi function per GUID. + */ + unreceivedTokens[_guid][0] = keccak256(abi.encodePacked(_origin.srcEid, _receiver, amountLD, composeMsg)); + emit UnreceivedTokenCached(_guid, 0, _origin.srcEid, _receiver, amountLD, composeMsg); + } + } + + function sendCredits( + uint32 _dstEid, + TargetCredit[] calldata _credits + ) external nonReentrantAndNotPaused onlyCaller(creditMessaging) returns (Credit[] memory) { + Credit[] memory credits = new Credit[](_credits.length); + uint256 index = 0; + for (uint256 i = 0; i < _credits.length; i++) { + TargetCredit calldata c = _credits[i]; + uint64 decreased = paths[c.srcEid].tryDecreaseCredit(c.amount, c.minAmount); + if (decreased > 0) credits[index++] = Credit(c.srcEid, decreased); + } + // resize the array to the actual number of credits + assembly { + mstore(credits, index) + } + emit CreditsSent(_dstEid, credits); + return credits; + } + + /// @notice Entrypoint for receiving credits into paths + /// @dev Emits CreditsReceived when credits are received + /// @param _srcEid The endpoint ID of the source of credits + /// @param _credits An array indicating to which paths and how much credits to add + function receiveCredits( + uint32 _srcEid, + Credit[] calldata _credits + ) external nonReentrantAndNotPaused onlyCaller(creditMessaging) { + for (uint256 i = 0; i < _credits.length; i++) { + Credit calldata c = _credits[i]; + paths[c.srcEid].increaseCredit(c.amount); + } + emit CreditsReceived(_srcEid, _credits); + } + + // ---------------------------------- View Functions ------------------------------------------ + + /// @notice Provides a quote for sending OFT to another chain. + /// @dev Implements the IOFT interface + /// @param _sendParam The parameters for the send operation + /// @return limit The information on OFT transfer limits + /// @return oftFeeDetails The details of OFT transaction cost or reward + /// @return receipt The OFT receipt information, indicating how many tokens would be sent and received + function quoteOFT( + SendParam calldata _sendParam + ) external view returns (OFTLimit memory limit, OFTFeeDetail[] memory oftFeeDetails, OFTReceipt memory receipt) { + // cap the transfer to the paths limit + limit = OFTLimit(_sd2ld(1), _sd2ld(paths[_sendParam.dstEid].credit)); + + // get the expected amount in the destination chain from FeeLib + uint64 amountInSD = _ld2sd(_sendParam.amountLD > limit.maxAmountLD ? limit.maxAmountLD : _sendParam.amountLD); + FeeParams memory params = _buildFeeParams(_sendParam.dstEid, amountInSD, _isTaxiMode(_sendParam.oftCmd)); + uint64 amountOutSD = IStargateFeeLib(feeLib).applyFeeView(params); + + // fill in the FeeDetails if there is a fee or reward + if (amountOutSD != amountInSD) { + oftFeeDetails = new OFTFeeDetail[](1); + if (amountOutSD < amountInSD) { + // fee + oftFeeDetails[0] = OFTFeeDetail(-1 * _sd2ld(amountInSD - amountOutSD).toInt256(), "protocol fee"); + } else if (amountOutSD > amountInSD) { + // reward + uint64 reward = amountOutSD - amountInSD; + (amountOutSD, reward) = _capReward(amountOutSD, reward); + if (amountOutSD == amountInSD) { + // hide the Fee detail if the reward is capped to 0 + oftFeeDetails = new OFTFeeDetail[](0); + } else { + oftFeeDetails[0] = OFTFeeDetail(_sd2ld(reward).toInt256(), "reward"); + } + } + } + + receipt = OFTReceipt(_sd2ld(amountInSD), _sd2ld(amountOutSD)); + } + + /// @notice Provides a quote for the send() operation. + /// @dev Implements the IOFT interface. + /// @dev Reverts with InvalidAmount if send mode is drive but value is specified. + /// @param _sendParam The parameters for the send() operation + /// @param _payInLzToken Flag indicating whether the caller is paying in the LZ token + /// @return fee The calculated LayerZero messaging fee from the send() operation + /// @dev MessagingFee: LayerZero message fee + /// - nativeFee: The native fee. + /// - lzTokenFee: The LZ token fee. + function quoteSend( + SendParam calldata _sendParam, + bool _payInLzToken + ) external view returns (MessagingFee memory fee) { + uint64 amountSD = _ld2sd(_sendParam.amountLD); + if (amountSD == 0) revert Stargate_InvalidAmount(); + + bool isTaxi = _isTaxiMode(_sendParam.oftCmd); + if (isTaxi) { + fee = ITokenMessaging(tokenMessaging).quoteTaxi( + TaxiParams({ + sender: msg.sender, + dstEid: _sendParam.dstEid, + receiver: _sendParam.to, + amountSD: amountSD, + composeMsg: _sendParam.composeMsg, + extraOptions: _sendParam.extraOptions + }), + _payInLzToken + ); + } else { + bool nativeDrop = _sendParam.extraOptions.length > 0; + fee = ITokenMessaging(tokenMessaging).quoteRideBus(_sendParam.dstEid, nativeDrop); + } + } + + /// @notice Returns the current roles configured. + /// @return An AddressConfig struct containing the current configuration + function getAddressConfig() external view returns (AddressConfig memory) { + return + AddressConfig({ + feeLib: feeLib, + planner: planner, + treasurer: treasurer, + tokenMessaging: tokenMessaging, + creditMessaging: creditMessaging, + lzToken: lzToken + }); + } + + /// @notice Get the OFT version information + /// @dev Implements the IOFT interface. + /// @dev 0 version means the message encoding is not compatible with the default OFT. + /// @return interfaceId The ERC165 interface ID for this contract + /// @return version The cross-chain compatible message encoding version. + function oftVersion() external pure override returns (bytes4 interfaceId, uint64 version) { + return (type(IOFT).interfaceId, 0); + } + + /// @notice Indicates whether the OFT contract requires approval of the 'token()' to send. + /// @dev Implements the IOFT interface. + /// @return Whether approval of the underlying token implementation is required + function approvalRequired() external pure override returns (bool) { + return true; + } + + // ---------------------------------- Internal Functions ------------------------------------------ + + /// @notice Ingest value into the contract and charge the Stargate fee. + /// @dev This is triggered when value is transferred from an account into Stargate to execute a swap. + /// @param _sendParam A SendParam struct containing the swap information + function _inflowAndCharge( + SendParam calldata _sendParam + ) internal returns (bool isTaxi, uint64 amountInSD, uint64 amountOutSD) { + isTaxi = _isTaxiMode(_sendParam.oftCmd); + amountInSD = _inflow(msg.sender, _sendParam.amountLD); + + FeeParams memory feeParams = _buildFeeParams(_sendParam.dstEid, amountInSD, isTaxi); + + amountOutSD = _chargeFee(feeParams, _ld2sd(_sendParam.minAmountLD)); + + paths[_sendParam.dstEid].decreaseCredit(amountOutSD); // remove the credit from the path + _postInflow(amountOutSD); // post inflow actions with the amount deducted by the fee + } + + /// @notice Consult the FeeLib the fee/reward for sending this token + /// @dev Reverts with SlippageTooHigh when the slippage amount sent would be below the desired minimum or zero. + /// @return amountOutSD The actual amount that would be sent after applying fees/rewards + function _chargeFee(FeeParams memory _feeParams, uint64 _minAmountOutSD) internal returns (uint64 amountOutSD) { + // get the output amount from the fee library + amountOutSD = IStargateFeeLib(feeLib).applyFee(_feeParams); + + uint64 amountInSD = _feeParams.amountInSD; + if (amountOutSD < amountInSD) { + // fee + treasuryFee += amountInSD - amountOutSD; + } else if (amountOutSD > amountInSD) { + // reward + uint64 reward = amountOutSD - amountInSD; + (amountOutSD, reward) = _capReward(amountOutSD, reward); + if (reward > 0) treasuryFee -= reward; + } + + if (amountOutSD < _minAmountOutSD || amountOutSD == 0) revert Stargate_SlippageTooHigh(); // 0 not allowed + } + + function _taxi( + SendParam calldata _sendParam, + MessagingFee memory _messagingFee, + uint64 _amountSD, + address _refundAddress + ) internal returns (MessagingReceipt memory receipt) { + if (_messagingFee.lzTokenFee > 0) _payLzToken(_messagingFee.lzTokenFee); // handle lz token fee + + receipt = ITokenMessaging(tokenMessaging).taxi{ value: _messagingFee.nativeFee }( + TaxiParams({ + sender: msg.sender, + dstEid: _sendParam.dstEid, + receiver: _sendParam.to, + amountSD: _amountSD, + composeMsg: _sendParam.composeMsg, + extraOptions: _sendParam.extraOptions + }), + _messagingFee, + _refundAddress + ); + } + + function _rideBus( + SendParam calldata _sendParam, + MessagingFee memory _messagingFee, + uint64 _amountSD, + address _refundAddress + ) internal virtual returns (MessagingReceipt memory receipt, Ticket memory ticket) { + if (_messagingFee.lzTokenFee > 0) revert Stargate_LzTokenUnavailable(); + + (receipt, ticket) = ITokenMessaging(tokenMessaging).rideBus( + RideBusParams({ + sender: msg.sender, + dstEid: _sendParam.dstEid, + receiver: _sendParam.to, + amountSD: _amountSD, + nativeDrop: _sendParam.extraOptions.length > 0 + }) + ); + + uint256 busFare = receipt.fee.nativeFee; + uint256 providedFare = _messagingFee.nativeFee; + + // assert sufficient nativeFee was provided to cover the fare + if (busFare == providedFare) { + // return; Do nothing in this case + } else if (providedFare > busFare) { + uint256 refund; + unchecked { + refund = providedFare - busFare; + } + Transfer.transferNative(_refundAddress, refund, false); // no gas limit to refund + } else { + revert Stargate_InsufficientFare(); + } + } + + /// @notice Pay the LZ fee in LZ tokens. + /// @dev Reverts with LzTokenUnavailable if the LZ token OFT has not been set. + /// @param _lzTokenFee The fee to pay in LZ tokens + function _payLzToken(uint256 _lzTokenFee) internal { + address lzTkn = lzToken; + if (lzTkn == address(0)) revert Stargate_LzTokenUnavailable(); + Transfer.safeTransferTokenFrom(lzTkn, msg.sender, address(endpoint), _lzTokenFee); + } + + /// @notice Translate an amount in SD to LD + /// @dev Since SD <= LD by definition, convertRate >= 1, so there is no rounding errors in this function. + /// @param _amountSD The amount in SD + /// @return amountLD The same value expressed in LD + function _sd2ld(uint64 _amountSD) internal view returns (uint256 amountLD) { + unchecked { + amountLD = _amountSD * convertRate; + } + } + + /// @notice Translate an value in LD to SD + /// @dev Since SD <= LD by definition, convertRate >= 1, so there might be rounding during the cast. + /// @param _amountLD The value in LD + /// @return amountSD The same value expressed in SD + function _ld2sd(uint256 _amountLD) internal view returns (uint64 amountSD) { + unchecked { + amountSD = SafeCast.toUint64(_amountLD / convertRate); + } + } + + /// @dev if _cmd is empty, Taxi mode. Otherwise, Bus mode + function _isTaxiMode(bytes calldata _oftCmd) internal pure returns (bool) { + return _oftCmd.length == 0; + } + + // ---------------------------------- Virtual Functions ------------------------------------------ + + /// @notice Limits the reward awarded when withdrawing value. + /// @param _amountOutSD The amount of expected on the destination chain in SD + /// @param _reward The initial calculated reward by FeeLib + /// @return newAmountOutSD The actual amount to be delivered on the destination chain + /// @return newReward The actual reward after applying any caps + function _capReward( + uint64 _amountOutSD, + uint64 _reward + ) internal view virtual returns (uint64 newAmountOutSD, uint64 newReward); + + /// @notice Hook called when there is ingress of value into the contract. + /// @param _from The account from which to obtain the value + /// @param _amountLD The amount of tokens to get from the account in LD + /// @return amountSD The actual amount of tokens in SD that got into the Stargate + function _inflow(address _from, uint256 _amountLD) internal virtual returns (uint64 amountSD); + + /// @notice Hook called when there is egress of value out of the contract. + /// @return success Whether the outflow was successful + function _outflow(address _to, uint256 _amountLD) internal virtual returns (bool success); + + /// @notice Hook called when there is egress of value out of the contract. + /// @dev Reverts with OutflowFailed when the outflow hook fails + function _safeOutflow(address _to, uint256 _amountLD) internal virtual { + bool success = _outflow(_to, _amountLD); + if (!success) revert Stargate_OutflowFailed(); + } + + /// @notice Ensure that the value passed through the message equals the native fee + /// @dev the native fee should be the same as msg value by default + /// @dev Reverts with InvalidAmount if the native fee does not match the value passed. + /// @param _fee The MessagingFee object containing the expected fee + /// @return The messaging fee object + function _assertMessagingFee( + MessagingFee memory _fee, + uint256 /*_amountInLD*/ + ) internal view virtual returns (MessagingFee memory) { + if (_fee.nativeFee != msg.value) revert Stargate_InvalidAmount(); + return _fee; + } + + /// @notice Ensure the msg.value is as expected. + /// @dev Override this contract to provide a specific validation. + /// @dev This implementation will revert if value is passed, because we do not expect value except for + /// @dev the native token when adding to the treasury. + /// @dev Reverts with InvalidAmount if msg.value > 0 + function _assertMsgValue(uint256 /*_amountLD*/) internal view virtual { + if (msg.value > 0) revert Stargate_InvalidAmount(); + } + + /// @dev Build the FeeParams object for the FeeLib + /// @param _dstEid The destination endpoint ID + /// @param _amountInSD The amount to send in SD + /// @param _isTaxi Whether this send is riding the bus or taxing + function _buildFeeParams( + uint32 _dstEid, + uint64 _amountInSD, + bool _isTaxi + ) internal view virtual returns (FeeParams memory); + + /// @notice Hook called after the inflow of value into the contract by sendToken(). + /// Function meant to be overridden + // solhint-disable-next-line no-empty-blocks + function _postInflow(uint64 _amountSD) internal virtual {} + + /// @notice Hook called after the outflow of value out of the contract by receiveToken(). + /// Function meant to be overridden + // solhint-disable-next-line no-empty-blocks + function _postOutflow(uint64 _amountSD) internal virtual {} +} diff --git a/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol new file mode 100644 index 0000000000..7dbd149720 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.22; + +import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; +import {StargateType} from "./interfaces/IStargate.sol"; +import {IERC20Minter} from "./interfaces/IERC20Minter.sol"; +import {FeeParams, StargateBase} from "./StargateBase.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import "../hts/HederaTokenService.sol"; +import "../hts/IHederaTokenService.sol"; +import "../hts/KeyHelper.sol"; +import "./StargateOFT.sol"; + +/// @title A Stargate contract representing an OFT. This contract will burn OFTs when sending tokens +/// @title to other chains and mint tokens when receiving them from other chains. +abstract contract StargateHTSConnectorExistingToken is StargateOFT, KeyHelper, HederaTokenService { + address public htsTokenAddress; + + /// @notice Create a StargateOFT contract administering an OFT. + /// @param _token The OFT to administer + /// @param _sharedDecimals The minimum number of decimals used to represent value in this OFT + /// @param _endpoint The LZ endpoint address + /// @param _owner The account owning this contract + constructor( + address _token, + uint8 _sharedDecimals, + address _endpoint, + address _owner + ) StargateOFT(_token, _sharedDecimals, _endpoint, _owner) { + htsTokenAddress = _token; + } + + /// @notice Burn tokens to represent their removal from the local chain + /// @param _from The address to burn tokens from + /// @param _amount How many tokens to burn in LD + /// @return amountSD The amount burned in SD + function _inflow(address _from, uint256 _amount) internal virtual override returns (uint64 amountSD) { + amountSD = _ld2sd(_amount); + + int256 transferResponse = HederaTokenService.transferToken(htsTokenAddress, _from, address(this), int64(uint64(_sd2ld(amountSD)))); + require(transferResponse == HederaTokenService.SUCCESS_CODE, "HTS: Transfer failed"); + + (int256 response,) = HederaTokenService.burnToken(htsTokenAddress, int64(uint64(_sd2ld(amountSD))), new int64[](0)); + require(response == HederaTokenService.SUCCESS_CODE, "HTS: Burn failed"); + } + + /// @notice Mint tokens to represent their lading into the local chain + /// @param _to The account to mint tokens for + /// @param _amount The amount of tokens to mint + /// @return success Whether the minting was successful + function _outflow(address _to, uint256 _amount) internal virtual override returns (bool success) { + (int256 response, ,) = HederaTokenService.mintToken(htsTokenAddress, int64(uint64(_amount)), new bytes[](0)); + require(response == HederaTokenService.SUCCESS_CODE, "HTS: Mint failed"); + + int256 transferResponse = HederaTokenService.transferToken(htsTokenAddress, address(this), _to, int64(uint64(_amount))); + require(transferResponse == HederaTokenService.SUCCESS_CODE, "HTS: Transfer failed"); + + return true; + } +} diff --git a/tools/layer-zero-example/contracts/stargate/StargateOFT.sol b/tools/layer-zero-example/contracts/stargate/StargateOFT.sol new file mode 100644 index 0000000000..085c09ead2 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/StargateOFT.sol @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.22; + +import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; + +import { StargateType } from "./interfaces/IStargate.sol"; +import { IERC20Minter } from "./interfaces/IERC20Minter.sol"; +import { StargateBase, FeeParams } from "./StargateBase.sol"; + +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +/// @title A Stargate contract representing an OFT. This contract will burn OFTs when sending tokens +/// @title to other chains and mint tokens when receiving them from other chains. +abstract contract StargateOFT is StargateBase { + /// @notice Create a StargateOFT contract administering an OFT. + /// @param _token The OFT to administer + /// @param _sharedDecimals The minimum number of decimals used to represent value in this OFT + /// @param _endpoint The LZ endpoint address + /// @param _owner The account owning this contract + constructor( + address _token, + uint8 _sharedDecimals, + address _endpoint, + address _owner + ) StargateBase(_token, IERC20Metadata(_token).decimals(), _sharedDecimals, _endpoint, _owner) {} + + /// @notice Transfer ownership of the token to a new owner. + /// @param _newOwner The account to set as owner + function transferTokenOwnership(address _newOwner) external onlyOwner { + Ownable(token).transferOwnership(_newOwner); + } + + /// @notice Burn tokens to represent their removal from the local chain + /// @param _from The address to burn tokens from + /// @param _amount How many tokens to burn in LD + /// @return amountSD The amount burned in SD + function _inflow(address _from, uint256 _amount) internal virtual override returns (uint64 amountSD) { + amountSD = _ld2sd(_amount); + IERC20Minter(token).burnFrom(_from, _sd2ld(amountSD)); // remove dust and burn + } + + /// @notice Mint tokens to represent their lading into the local chain + /// @param _to The account to mint tokens for + /// @param _amount The amount of tokens to mint + /// @return success Whether the minting was successful + function _outflow(address _to, uint256 _amount) internal virtual override returns (bool success) { + try IERC20Minter(token).mint(_to, _amount) { + success = true; + } catch {} // solhint-disable-line no-empty-blocks + } + + /// @notice Limits the reward awarded when withdrawing value. + /// @dev Concretes the StargateBase contract. + /// @dev Reward is not allowed for OFT, so 0 is returned. + /// @dev reward is calculated as amountOut - amountIn, so amountIn = amountOut - reward, + /// @dev this removes the reward and sets the exchange rate to 1:1 local:remote + /// @param _amountOutSD The amount of tokens expected on the destination chain in SD + /// @param _reward The initially calculated reward by FeeLib + /// @return newAmountOutSD The actual amount to be withdrawn expected on the destination chain + /// @return newReward The actual reward after applying any caps + function _capReward( + uint64 _amountOutSD, + uint64 _reward + ) internal pure override returns (uint64 newAmountOutSD, uint64 newReward) { + unchecked { + newAmountOutSD = _amountOutSD - _reward; + } + newReward = 0; + } + + /// @notice Returns the type of Stargate contract. + /// @dev Fulfills the IStargate interface. + /// @return The type of Stargate contract + function stargateType() external pure override returns (StargateType) { + return StargateType.OFT; + } + + function _buildFeeParams( + uint32 _dstEid, + uint64 _amountInSD, + bool _isTaxi + ) internal view override returns (FeeParams memory) { + return FeeParams(msg.sender, _dstEid, _amountInSD, 0, paths[_dstEid].isOFTPath(), _isTaxi); + } +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol new file mode 100644 index 0000000000..45d7bd591e --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { MessagingFee } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; + +/// @notice Stores the information related to a batch of credit transfers. +struct TargetCreditBatch { + uint16 assetId; + TargetCredit[] credits; +} + +/// @notice Stores the information related to a single credit transfer. +struct TargetCredit { + uint32 srcEid; + uint64 amount; // the amount of credits to intended to send + uint64 minAmount; // the minimum amount of credits to keep on local chain after sending +} + +/// @title Credit Messaging API +/// @dev This interface defines the API for quoting and sending credits to other chains. +interface ICreditMessaging { + /// @notice Sends credits to the destination endpoint. + /// @param _dstEid The destination LayerZero endpoint ID. + /// @param _creditBatches The credit batch payloads to send to the destination LayerZero endpoint ID. + function sendCredits(uint32 _dstEid, TargetCreditBatch[] calldata _creditBatches) external payable; + + /// @notice Quotes the fee for sending credits to the destination endpoint. + /// @param _dstEid The destination LayerZero endpoint ID. + /// @param _creditBatches The credit batch payloads to send to the destination LayerZero endpoint ID. + /// @return fee The fee for sending the credits to the destination endpoint. + function quoteSendCredits( + uint32 _dstEid, + TargetCreditBatch[] calldata _creditBatches + ) external view returns (MessagingFee memory fee); +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol new file mode 100644 index 0000000000..e9d80719cb --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { TargetCredit } from "./ICreditMessaging.sol"; + +struct Credit { + uint32 srcEid; + uint64 amount; +} + +/// @dev This is an internal interface, defining functions to handle messages/calls from the credit messaging contract. +interface ICreditMessagingHandler { + function sendCredits(uint32 _dstEid, TargetCredit[] calldata _credits) external returns (Credit[] memory); + + function receiveCredits(uint32 _srcEid, Credit[] calldata _credits) external; +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol new file mode 100644 index 0000000000..5123ad9142 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +/// @title An interface for minting and burning ERC20s. +/// @dev Implemented by OFT contracts. +interface IERC20Minter { + /// @notice Mint tokens and transfer them to the given account. + /// @param _to The account to mint the tokens to + /// @param _amount How many tokens to mint + function mint(address _to, uint256 _amount) external; + + /// @notice Burn tokens from a given account. + /// @param _from The account to burn tokens from + /// @param _amount How many tokens to burn + function burnFrom(address _from, uint256 _amount) external; +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol new file mode 100644 index 0000000000..2a7afeb77e --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +// Solidity does not support splitting import across multiple lines +// solhint-disable-next-line max-line-length +import { IOFT, SendParam, MessagingFee, MessagingReceipt, OFTReceipt } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; + +/// @notice Stargate implementation type. +enum StargateType { + Pool, + OFT +} + +/// @notice Ticket data for bus ride. +struct Ticket { + uint72 ticketId; + bytes passengerBytes; +} + +/// @title Interface for Stargate. +/// @notice Defines an API for sending tokens to destination chains. +interface IStargate is IOFT { + /// @dev This function is same as `send` in OFT interface but returns the ticket data if in the bus ride mode, + /// which allows the caller to ride and drive the bus in the same transaction. + function sendToken( + SendParam calldata _sendParam, + MessagingFee calldata _fee, + address _refundAddress + ) external payable returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt, Ticket memory ticket); + + /// @notice Returns the Stargate implementation type. + function stargateType() external pure returns (StargateType); +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol new file mode 100644 index 0000000000..925b21ba38 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +/// @notice Parameters used to assess fees to send tokens to a destination endpoint. +struct FeeParams { + address sender; + uint32 dstEid; + uint64 amountInSD; + uint64 deficitSD; + bool toOFT; + bool isTaxi; +} + +/// @title Interface for assessing fees to send tokens to a destination endpoint. +interface IStargateFeeLib { + /// @notice Apply a fee for a given request, allowing for state modification. + /// @dev This is included for future proofing potential implementations + /// @dev where state is modified in the feeLib based on a FeeParams + + function applyFee(FeeParams calldata _params) external returns (uint64 amountOutSD); + /// @notice Apply a fee for a given request, without modifying state. + function applyFeeView(FeeParams calldata _params) external view returns (uint64 amountOutSD); +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol new file mode 100644 index 0000000000..af9fecd398 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { IStargate, SendParam, MessagingReceipt, MessagingFee, OFTReceipt } from "./IStargate.sol"; + +/// @title An interface for Stargate Pools +/// @notice Stargate Pools are a type of IStargate that allows users to pool token liquidity. +interface IStargatePool is IStargate { + /// @notice Deposit token into the pool + /// @param _receiver The account to mint the LP tokens to + /// @param _amountLD The amount of tokens to deposit in LD + /// @return amountLD The actual amount of tokens deposited in LD + function deposit(address _receiver, uint256 _amountLD) external payable returns (uint256 amountLD); + + /// @notice Redeem an amount of LP tokens from the senders account, claiming rewards. + /// @param _amountLD The amount of LP tokens to redeem + /// @param _receiver The account to transfer the + function redeem(uint256 _amountLD, address _receiver) external returns (uint256 amountLD); + + /// @notice Get how many LP tokens are redeemable for a given account + /// @param _owner The address of the account to check + /// @return amountLD The amount of LP tokens redeemable, in LD + function redeemable(address _owner) external view returns (uint256 amountLD); + + /// @notice Redeem LP tokens and send the withdrawn tokens to a destination endpoint. + /// @param _sendParam The SendParam payload describing the redeem and send + /// @param _fee The MessagingFee to perform redeemSend + /// @param _refundAddress The address to refund excess LayerZero messaging fees. + /// @return receipt The MessagingReceipt describing the result of redeemSend + /// @return oftReceipt The OFTReceipt describing the result of redeemSend + function redeemSend( + SendParam calldata _sendParam, + MessagingFee calldata _fee, + address _refundAddress + ) external payable returns (MessagingReceipt memory receipt, OFTReceipt memory oftReceipt); + + /// @notice Quote the messaging fee for a redeemSend operation + /// @param _sendParam The SendParam payload describing the redeem and send + /// @param _payInLzToken Whether to pay the fee in LZ token + /// @return messagingFee The MessagingFee for the redeemSend operation + function quoteRedeemSend( + SendParam calldata _sendParam, + bool _payInLzToken + ) external view returns (MessagingFee memory messagingFee); + + /// @notice Get the Total Value Locked in the pool. + /// @return The total value locked + function tvl() external view returns (uint256); + + /// @notice Get the available balance of the pool + function poolBalance() external view returns (uint256); + + /// @notice Get the address of the LP token + /// @return The address of the LP token contract. + function lpToken() external view returns (address); +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol new file mode 100644 index 0000000000..4dc20ad3cd --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { MessagingReceipt, MessagingFee, Ticket } from "./IStargate.sol"; + +/// @notice Payload for sending a taxi message. +/// @dev A taxi message is sent immediately and is not stored on the bus. +struct TaxiParams { + address sender; + uint32 dstEid; + bytes32 receiver; + uint64 amountSD; + bytes composeMsg; + bytes extraOptions; +} + +/// @notice Payload for riding the bus. +/// @dev Riding the bus is a two-step process: +/// @dev - The message is sent to the bus, +/// @dev - The bus is driven to the destination. +struct RideBusParams { + address sender; + uint32 dstEid; + bytes32 receiver; + uint64 amountSD; + bool nativeDrop; +} + +/// @title Token Messaging API. +/// @notice This interface defines the API for sending a taxi message, riding the bus, and driving the bus, along with +/// corresponding quote functions. +interface ITokenMessaging { + /// @notice Sends a taxi message + /// @param _params The taxi message payload + /// @param _messagingFee The messaging fee for sending a taxi message + /// @param _refundAddress The address to refund excess LayerZero MessagingFees + /// @return receipt The MessagingReceipt resulting from sending the taxi + function taxi( + TaxiParams calldata _params, + MessagingFee calldata _messagingFee, + address _refundAddress + ) external payable returns (MessagingReceipt memory receipt); + + /// @notice Quotes the messaging fee for sending a taxi message + /// @param _params The taxi message payload + /// @param _payInLzToken Whether to pay the fee in LZ token + /// @return fee The MessagingFee for sending the taxi message + function quoteTaxi(TaxiParams calldata _params, bool _payInLzToken) external view returns (MessagingFee memory fee); + + /// @notice Sends a message to ride the bus, queuing the passenger in preparation for the drive. + /// @notice The planner will later driveBus to the destination endpoint. + /// @param _params The rideBus message payload + /// @return receipt The MessagingReceipt resulting from sending the rideBus message + /// @return ticket The Ticket for riding the bus + function rideBus( + RideBusParams calldata _params + ) external returns (MessagingReceipt memory receipt, Ticket memory ticket); + + /// @notice Quotes the messaging fee for riding the bus + /// @param _dstEid The destination LayerZero endpoint ID. + /// @param _nativeDrop Whether to pay for a native drop on the destination. + /// @return fee The MessagingFee for riding the bus + function quoteRideBus(uint32 _dstEid, bool _nativeDrop) external view returns (MessagingFee memory fee); + + /// @notice Drives the bus to the destination. + /// @param _dstEid The destination LayerZero endpoint ID. + /// @param _passengers The passengers to drive to the destination. + /// @return receipt The MessagingReceipt resulting from driving the bus + function driveBus( + uint32 _dstEid, + bytes calldata _passengers + ) external payable returns (MessagingReceipt memory receipt); + + /// @notice Quotes the messaging fee for driving the bus to the destination. + /// @param _dstEid The destination LayerZero endpoint ID. + /// @param _passengers The passengers to drive to the destination. + /// @return fee The MessagingFee for driving the bus + function quoteDriveBus(uint32 _dstEid, bytes calldata _passengers) external view returns (MessagingFee memory fee); +} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol new file mode 100644 index 0000000000..7b771647f8 --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; + +import { Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; + +/// @dev This is an internal interface, defining the function to handle token message from the token messaging contract. +interface ITokenMessagingHandler { + function receiveTokenBus( + Origin calldata _origin, + bytes32 _guid, + uint8 _seatNumber, + address _receiver, + uint64 _amountSD + ) external; + + function receiveTokenTaxi( + Origin calldata _origin, + bytes32 _guid, + address _receiver, + uint64 _amountSD, + bytes calldata _composeMsg + ) external; +} diff --git a/tools/layer-zero-example/contracts/stargate/libs/Path.sol b/tools/layer-zero-example/contracts/stargate/libs/Path.sol new file mode 100644 index 0000000000..4b2151d53b --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/libs/Path.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.22; + +/// @dev The Path struct contains the bus base fare multiplier bps and the credit in the same slot for gas saving. +struct Path { + uint64 credit; // available credit for the path, in SD +} + +using PathLib for Path global; + +/** + * @title A library to operate on Paths. + * @dev A Path is a route through which value can be sent. It entails the local chain and a destination chain, and has + * a given amount of credit associated with it. Every time the value is sent from A to B, the credit on A is + * decreased and credit on B is increased. If credit hits 0 then the path can no longer be used. + */ +library PathLib { + uint64 internal constant UNLIMITED_CREDIT = type(uint64).max; + + // solhint-disable-next-line event-name-camelcase + event Path_CreditBurned(uint64 amountSD); + + error Path_InsufficientCredit(); + error Path_AlreadyHasCredit(); + error Path_UnlimitedCredit(); + + /// @notice Increase credit for a given Path. + /// @dev Reverts with Path_UnlimitedCredit if the increase would hit the maximum amount of credit (reserved value) + /// @param _path The Path for which to increase credit + /// @param _amountSD The amount by which to increase credit + function increaseCredit(Path storage _path, uint64 _amountSD) internal { + uint64 credit = _path.credit; + if (credit == UNLIMITED_CREDIT) return; + credit += _amountSD; + if (credit == UNLIMITED_CREDIT) revert Path_UnlimitedCredit(); + _path.credit = credit; + } + + /// @notice Decrease credit for a given Path. + /// @dev Reverts with InsufficientCredit if there is not enough credit + /// @param _path The Path for which to decrease credit + /// @param _amountSD The amount by which to decrease credit + function decreaseCredit(Path storage _path, uint64 _amountSD) internal { + uint64 currentCredit = _path.credit; + if (currentCredit == UNLIMITED_CREDIT) return; + if (currentCredit < _amountSD) revert Path_InsufficientCredit(); + unchecked { + _path.credit = currentCredit - _amountSD; + } + } + + /// @notice Decrease credit for a given path, even if only a partial amount is possible. + /// @param _path The Path for which to decrease credit + /// @param _amountSD The amount by which try to decrease credit + /// @param _minKept The minimum amount of credit to keep after the decrease + /// @return decreased The actual amount of credit decreased + function tryDecreaseCredit( + Path storage _path, + uint64 _amountSD, + uint64 _minKept + ) internal returns (uint64 decreased) { + uint64 currentCredit = _path.credit; + // not allowed to try to decrease unlimited credit + if (currentCredit == UNLIMITED_CREDIT) revert Path_UnlimitedCredit(); + if (_minKept < currentCredit) { + unchecked { + uint64 maxDecreased = currentCredit - _minKept; + decreased = _amountSD > maxDecreased ? maxDecreased : _amountSD; + _path.credit = currentCredit - decreased; + } + } + } + + /// @notice Set a given path as OFT or reset an OFT path to 0 credit. + /// @dev A Path for which the asset is using an OFT on destination gets unlimited credit because value transfers + /// @dev do not spend value. + /// @dev Such a path is expected to not have credit before. + /// @dev Reverts with AlreadyHasCredit if the Path already had credit assigned to it + /// @param _path The Path to set + /// @param _oft Whether to set it as OFT or reset it from OFT + function setOFTPath(Path storage _path, bool _oft) internal { + uint64 currentCredit = _path.credit; + if (_oft) { + // only allow un-limiting from 0 + if (currentCredit != 0) revert Path_AlreadyHasCredit(); + _path.credit = UNLIMITED_CREDIT; + } else { + // only allow resetting from unlimited + if (currentCredit != UNLIMITED_CREDIT) revert Path_AlreadyHasCredit(); + _path.credit = 0; + } + } + + /// @notice Check whether a given Path is set as OFT. + /// @param _path The path to examine + /// @return whether the Path is set as OFT + function isOFTPath(Path storage _path) internal view returns (bool) { + return _path.credit == UNLIMITED_CREDIT; + } + + /// @notice Burn credit for a given Path during bridged token migration. + function burnCredit(Path storage _path, uint64 _amountSD) internal { + decreaseCredit(_path, _amountSD); + emit Path_CreditBurned(_amountSD); + } +} diff --git a/tools/layer-zero-example/contracts/stargate/libs/Transfer.sol b/tools/layer-zero-example/contracts/stargate/libs/Transfer.sol new file mode 100644 index 0000000000..96550086ba --- /dev/null +++ b/tools/layer-zero-example/contracts/stargate/libs/Transfer.sol @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.22; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; + +/// @dev WARNING: Transferring tokens, when the token address is wrong, will fail silently. +abstract contract Transfer is Ownable { + error Transfer_TransferFailed(); + error Transfer_ApproveFailed(); + + // @dev default this to 2300, but it is modifiable + // @dev this is intended to provide just enough gas to receive native tokens. + // @dev ie. empty fallbacks or EOA addresses + uint256 internal transferGasLimit = 2300; + + function getTransferGasLimit() external view returns (uint256) { + return transferGasLimit; + } + + function setTransferGasLimit(uint256 _gasLimit) external onlyOwner { + transferGasLimit = _gasLimit; + } + + /// @notice Transfer native coin to an account + /// @dev If gas is unlimited, we pass 63/64 of the gasleft() + /// @dev This call may revert due to out of gas instead of returning false. + /// @param _to The account to transfer native coin to + /// @param _value The amount of native coin to transfer + /// @param _gasLimited Whether to limit gas available for the 'fall-back' + /// @return success Whether the transfer was successful + function transferNative(address _to, uint256 _value, bool _gasLimited) internal returns (bool success) { + uint256 gasForCall = _gasLimited ? transferGasLimit : gasleft(); + + // @dev We dont care about the data returned here, only success or not. + assembly { + success := call(gasForCall, _to, _value, 0, 0, 0, 0) + } + } + + /// @notice Transfer an ERC20 token from the sender to an account + /// @param _token The address of the ERC20 token to send + /// @param _to The receiving account + /// @param _value The amount of tokens to transfer + /// @return success Whether the transfer was successful or not + function transferToken(address _token, address _to, uint256 _value) internal returns (bool success) { + success = _call(_token, abi.encodeWithSelector(IERC20(_token).transfer.selector, _to, _value)); + } + + /// @notice Transfer an ERC20 token from one account to another + /// @param _token The address of the ERC20 token to send + /// @param _from The source account + /// @param _to The destination account + /// @param _value The amount of tokens to transfer + /// @return success Whether the transfer was successful or not + function transferTokenFrom( + address _token, + address _from, + address _to, + uint256 _value + ) internal returns (bool success) { + success = _call(_token, abi.encodeWithSelector(IERC20(_token).transferFrom.selector, _from, _to, _value)); + } + + /// @notice Transfer either native coin or ERC20 token from the sender to an account + /// @param _token The ERC20 address or 0x0 if native is desired + /// @param _to The destination account + /// @param _value the amount to transfer + /// @param _gasLimited Whether to limit the amount of gas when doing a native transfer + /// @return success Whether the transfer was successful or not + function transfer(address _token, address _to, uint256 _value, bool _gasLimited) internal returns (bool success) { + if (_token == address(0)) { + success = transferNative(_to, _value, _gasLimited); + } else { + success = transferToken(_token, _to, _value); + } + } + + /// @notice Approve a given amount of token for an account + /// @param _token The OFT contract to use for approval + /// @param _spender The account to approve + /// @param _value The amount of tokens to approve + /// @return success Whether the approval succeeded + function approveToken(address _token, address _spender, uint256 _value) internal returns (bool success) { + success = _call(_token, abi.encodeWithSelector(IERC20(_token).approve.selector, _spender, _value)); + } + + /// @notice Transfer native coin to an account or revert + /// @dev Reverts with TransferFailed if the transfer failed + /// @param _to The account to transfer native coin to + /// @param _value The amount of native coin to transfer + /// @param _gasLimited Whether to limit the amount of gas to 2300 + function safeTransferNative(address _to, uint256 _value, bool _gasLimited) internal { + if (!transferNative(_to, _value, _gasLimited)) revert Transfer_TransferFailed(); + } + + /// @notice Transfer an ERC20 token from one account to another or revert + /// @dev Reverts with TransferFailed when the transfer fails + /// @param _token The address of the ERC20 token to send + /// @param _to The destination account + /// @param _value The amount of tokens to transfer + function safeTransferToken(address _token, address _to, uint256 _value) internal { + if (!transferToken(_token, _to, _value)) revert Transfer_TransferFailed(); + } + + /// @notice Transfer an ERC20 token from one account to another + /// @dev Reverts with TransferFailed when the transfer fails + /// @param _token The address of the ERC20 token to send + /// @param _from The source account + /// @param _to The destination account + /// @param _value The amount of tokens to transfer + function safeTransferTokenFrom(address _token, address _from, address _to, uint256 _value) internal { + if (!transferTokenFrom(_token, _from, _to, _value)) revert Transfer_TransferFailed(); + } + + /// @notice Transfer either native coin or ERC20 token from the sender to an account + /// @dev Reverts with TransferFailed when the transfer fails + /// @param _token The ERC20 address or 0x0 if native is desired + /// @param _to The destination account + /// @param _value the amount to transfer + /// @param _gasLimited Whether to limit the amount of gas when doing a native transfer + function safeTransfer(address _token, address _to, uint256 _value, bool _gasLimited) internal { + if (!transfer(_token, _to, _value, _gasLimited)) revert Transfer_TransferFailed(); + } + + /// @notice Approve a given amount of token for an account or revert + /// @dev Reverts with ApproveFailed if the approval failed + /// @dev Consider using forceApproveToken(...) to ensure the approval is set correctly. + /// @param _token The OFT contract to use for approval + /// @param _spender The account to approve + /// @param _value The amount of tokens to approve + function safeApproveToken(address _token, address _spender, uint256 _value) internal { + if (!approveToken(_token, _spender, _value)) revert Transfer_ApproveFailed(); + } + + /// @notice Force approve a given amount of token for an account by first resetting the approval + /// @dev Some tokens that require the approval to be set to zero before setting it to a non-zero value, e.g. USDT. + /// @param _token The OFT contract to use for approval + /// @param _spender The account to approve + /// @param _value The amount of tokens to approve + function forceApproveToken(address _token, address _spender, uint256 _value) internal { + if (!approveToken(_token, _spender, _value)) { + safeApproveToken(_token, _spender, 0); + safeApproveToken(_token, _spender, _value); + } + } + + function _call(address _token, bytes memory _data) private returns (bool success) { + // solhint-disable-next-line avoid-low-level-calls + (bool s, bytes memory returndata) = _token.call(_data); + success = s ? returndata.length == 0 || abi.decode(returndata, (bool)) : false; + } +} diff --git a/tools/layer-zero-example/hardhat.config.js b/tools/layer-zero-example/hardhat.config.js index 314627b8f9..50d43780dd 100644 --- a/tools/layer-zero-example/hardhat.config.js +++ b/tools/layer-zero-example/hardhat.config.js @@ -137,6 +137,22 @@ task('deploy-hts-connector-existing-token', 'Deploy HTS connector for existing t console.log(`(${hre.network.name}) ExampleHTSConnectorExistingToken deployed to ${contract.address} txHash ${contract.deployTransaction.hash}`); }); +task('deploy-stargate-hts-connector-existing-token', 'Deploy Stargate HTS connector for existing token contract') + .addParam('token', 'Already existing token address') + .setAction(async (taskArgs, hre) => { + const ethers = hre.ethers; + const signers = await ethers.getSigners(); + const ENDPOINT_V2 = getEndpointAddress(hre.network.name); + + const contractFactory = await ethers.getContractFactory('ExampleStargateHTSConnectorExistingToken'); + const contract = await contractFactory.deploy(taskArgs.token, 8, ENDPOINT_V2, signers[0].address, { + gasLimit: 10_000_000 + }); + await contract.deployTransaction.wait(); + + console.log(`(${hre.network.name}) StargateHTSConnectorExistingToken deployed to ${contract.address} txHash ${contract.deployTransaction.hash}`); + }); + task('create-hts-token', 'Create a HTS token') .setAction(async (taskArgs, hre) => { const ethers = hre.ethers; From 17981174926ecbaeab692a719eaeca1ecb2dfaed Mon Sep 17 00:00:00 2001 From: nikolay Date: Wed, 13 Aug 2025 17:14:22 +0300 Subject: [PATCH 02/10] chore: fix codacy Signed-off-by: nikolay --- tools/layer-zero-example/hardhat.config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/layer-zero-example/hardhat.config.js b/tools/layer-zero-example/hardhat.config.js index 50d43780dd..12992ce136 100644 --- a/tools/layer-zero-example/hardhat.config.js +++ b/tools/layer-zero-example/hardhat.config.js @@ -1,5 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 +/* global task */ + require('dotenv').config(); require('@nomicfoundation/hardhat-toolbox'); const CONSTANTS = require('./test/constants'); @@ -146,7 +148,7 @@ task('deploy-stargate-hts-connector-existing-token', 'Deploy Stargate HTS connec const contractFactory = await ethers.getContractFactory('ExampleStargateHTSConnectorExistingToken'); const contract = await contractFactory.deploy(taskArgs.token, 8, ENDPOINT_V2, signers[0].address, { - gasLimit: 10_000_000 + gasLimit: 10_000_000, }); await contract.deployTransaction.wait(); From 33c120529a328d7a64e2101e690cf78603cbb182 Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 19 Aug 2025 15:28:52 +0300 Subject: [PATCH 03/10] chore: add tests Signed-off-by: nikolay --- tools/layer-zero-example/.env.example | 5 + tools/layer-zero-example/README.md | 56 +++++++ .../StargateHTSConnectorExistingToken.sol | 4 +- tools/layer-zero-example/hardhat.config.js | 18 ++- .../stargateHtsConnectorExistingTokenTests.js | 142 ++++++++++++++++++ 5 files changed, 222 insertions(+), 3 deletions(-) create mode 100644 tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js diff --git a/tools/layer-zero-example/.env.example b/tools/layer-zero-example/.env.example index a17e1c51c6..0e9b9bdc5f 100644 --- a/tools/layer-zero-example/.env.example +++ b/tools/layer-zero-example/.env.example @@ -35,6 +35,11 @@ HTS_CONNECTOR_CREATE_HTS_CONTRACT=0x HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT=0x HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT=0x +# Stargate HTS Connector for existing token config +STARGATE_HTS_CONNECTOR_CREATE_HTS_CONTRACT=0x +STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT=0x +STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT=0x + # HTS Adapter config HTS_ADAPTER_HTS_HEDERA_CONTRACT=0x HTS_ADAPTER_ERC20_BSC_CONTRACT=0x diff --git a/tools/layer-zero-example/README.md b/tools/layer-zero-example/README.md index 5e85e24a01..8ba5d984f3 100644 --- a/tools/layer-zero-example/README.md +++ b/tools/layer-zero-example/README.md @@ -279,6 +279,62 @@ npx hardhat test --grep "HTSConnectorExistingToken @hedera @test" --network hede npx hardhat test --grep "HTSConnectorExistingToken @bsc @test" --network bsc_testnet ``` +### Stargate HTS Connector for existing HTS token + +That's a variant of OFT but using an already existing HTS token. Keep in mind that "supply key" of the token must contains the Stargate HTS Connector contract's address. + +- Create an HTS token +```typescript +npx hardhat create-hts-token --network hedera_testnet +``` + +- Deploying OFT on an EVM chain and Stargate HTS Connector on the Hedera chain. The Starget HTS Connector for existing token extends StargateHTSConnectorExistingToken and receives the HTS tokens address as constructor parameter. Also, overrides StargateOFT _inflow and _outflow with related HTS mint and burn precompile calls +``` +npx hardhat deploy-stargate-hts-connector-existing-token --token --network hedera_testnet +npx hardhat deploy-oft --decimals 8 --mint 1000 --network bsc_testnet +``` + +- In order to connect OFTs together, we need to set the peer of the target OFT, more info can be found here https://docs.layerzero.network/v2/developers/evm/getting-started#connecting-your-contracts +```typescript +npx hardhat set-peer --source --target --network bsc_testnet +``` + +- In order to connect OFTs together, we need to set the oft path of the Stargate HTS Connector +```typescript +npx hardhat set-stargate-oft-path --source --network hedera_testnet +``` + +- Fill the .env + +- Adding the StargateHTSConnectorExistingToken contract's address as a supply key of the existing HTS token +```typescript +npx hardhat test --grep "StargateHTSConnectorExistingToken @hedera @update-keys" --network hedera_testnet +``` + +- Funding the StargateHTSConnectorExistingToken contract +```typescript +npx hardhat test --grep "StargateHTSConnectorExistingToken @hedera @fund" --network hedera_testnet +``` + +- Approving Stargate HTS Connector to use some signer's tokens +```typescript +npx hardhat test --grep "StargateHTSConnectorExistingToken @hedera @approve" --network hedera_testnet +``` + +- On these steps, we're sending tokens from an EVM chain to Hedera and receiving HTS tokens and vice versa +```typescript +npx hardhat test --grep "StargateHTSConnectorExistingToken @bsc @send" --network bsc_testnet +npx hardhat test --grep "StargateHTSConnectorExistingToken @hedera @send" --network hedera_testnet +``` + +- Wait a couple of minutes, the LZ progress can be tracked on https://testnet.layerzeroscan.com/tx/ + +- Finally we're checking whether the balances are expected on both source and destination chains +```typescript +npx hardhat test --grep "StargateHTSConnectorExistingToken @hedera @test" --network hedera_testnet +npx hardhat test --grep "StargateHTSConnectorExistingToken @bsc @test" --network bsc_testnet +``` + ### WHBAR flow Wrap and transfer HBARs across different chains. diff --git a/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol index 7dbd149720..235f059fbb 100644 --- a/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol +++ b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol @@ -37,10 +37,10 @@ abstract contract StargateHTSConnectorExistingToken is StargateOFT, KeyHelper, H function _inflow(address _from, uint256 _amount) internal virtual override returns (uint64 amountSD) { amountSD = _ld2sd(_amount); - int256 transferResponse = HederaTokenService.transferToken(htsTokenAddress, _from, address(this), int64(uint64(_sd2ld(amountSD)))); + int256 transferResponse = HederaTokenService.transferToken(htsTokenAddress, _from, address(this), int64(uint64(_amount))); require(transferResponse == HederaTokenService.SUCCESS_CODE, "HTS: Transfer failed"); - (int256 response,) = HederaTokenService.burnToken(htsTokenAddress, int64(uint64(_sd2ld(amountSD))), new int64[](0)); + (int256 response,) = HederaTokenService.burnToken(htsTokenAddress, int64(uint64(_amount)), new int64[](0)); require(response == HederaTokenService.SUCCESS_CODE, "HTS: Burn failed"); } diff --git a/tools/layer-zero-example/hardhat.config.js b/tools/layer-zero-example/hardhat.config.js index 12992ce136..5d1cec0d3e 100644 --- a/tools/layer-zero-example/hardhat.config.js +++ b/tools/layer-zero-example/hardhat.config.js @@ -147,7 +147,7 @@ task('deploy-stargate-hts-connector-existing-token', 'Deploy Stargate HTS connec const ENDPOINT_V2 = getEndpointAddress(hre.network.name); const contractFactory = await ethers.getContractFactory('ExampleStargateHTSConnectorExistingToken'); - const contract = await contractFactory.deploy(taskArgs.token, 8, ENDPOINT_V2, signers[0].address, { + const contract = await contractFactory.deploy(taskArgs.token, 6, ENDPOINT_V2, signers[0].address, { gasLimit: 10_000_000, }); await contract.deployTransaction.wait(); @@ -241,3 +241,19 @@ task('set-peer', 'Set peer') console.log(`(${hre.network.name}) Peer for network with EID ${EID} was successfully set, txHash ${tx.hash}`); }); + +task('set-stargate-oft-path', 'Set stargate oft path') + .addParam('source', 'Source contract address') + .setAction(async (taskArgs, hre) => { + const ethers = hre.ethers; + + const contract = await ethers.getContractAt('StargateBase', taskArgs.source); + const tx = await contract.setOFTPath(CONSTANTS.BSC_EID, true, {gasLimit: 10_000_000}); + const receipt = await tx.wait(); + + if (!receipt.status) { + process.exit('Execution of setPeer failed. Tx hash: ' + tx.hash); + } + + console.log(`(${hre.network.name}) OFT Path for network with EID ${CONSTANTS.BSC_EID} was successfully set, txHash ${tx.hash}`); + }); diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js new file mode 100644 index 0000000000..d5ab6e3f94 --- /dev/null +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: Apache-2.0 + +const hre = require('hardhat'); +const { ethers } = hre; +const { Options, addressToBytes32 } = require('@layerzerolabs/lz-v2-utilities'); +const { expect } = require('chai'); +const CONSTANTS = require('./constants'); + +const { HEDERA_EID, BSC_EID, RECEIVER_ADDRESS } = CONSTANTS; +const amount = '100'; + +describe('StargateHTSConnectorExistingToken', function() { + it('@hedera @update-keys', async () => { + const contract = await ethers.getContractAt('CreateHTS', process.env.STARGATE_HTS_CONNECTOR_CREATE_HTS_CONTRACT); + const updatedKey = [ + false, + process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT, + '0x', + '0x', + '0x0000000000000000000000000000000000000000' + ]; + const tx = await contract.updateTokenKeysPublic( + [ + [16, updatedKey] + ] + ); + const receipt = await tx.wait(); + + console.log(`(${hre.network.name}) successfully sent to Hedera via tx: ${tx.hash}`); + + expect(receipt.status).to.equal(1); + }); + + it('@hedera @fund', async () => { + const oftHts = await ethers.getContractAt('ExampleStargateHTSConnectorExistingToken', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT); + const tokenAddress = await oftHts.htsTokenAddress(); + + const contract = await ethers.getContractAt('ERC20', tokenAddress); + const txTransfer = await contract.transfer(process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT, '200'); + const receipt = await txTransfer.wait(); + console.log(`(${hre.network.name}) successfully sent to Hedera via tx: ${txTransfer.hash}`); + + expect(receipt.status).to.equal(1); + }); + + it('@hedera @approve oft hts contract', async () => { + const oftHts = await ethers.getContractAt('ExampleStargateHTSConnectorExistingToken', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT); + const tokenAddress = await oftHts.htsTokenAddress(); + + const contract = await ethers.getContractAt('ERC20', tokenAddress); + const txApprove = await contract.approve(process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT, amount); + const receipt = await txApprove.wait(); + console.log(`(${hre.network.name}) successfully sent to Hedera via tx: ${txApprove.hash}`); + + expect(receipt.status).to.equal(1); + }); + + it('@hedera @send to bsc', async () => { + const signers = await ethers.getSigners(); + + const sendParam = { + dstEid: BSC_EID, + to: addressToBytes32(RECEIVER_ADDRESS), + amountLD: amount, + minAmountLD: amount, + extraOptions: Options.newOptions().addExecutorLzReceiveOption(3000000, 0).toBytes(), + composeMsg: ethers.utils.arrayify('0x'), + oftCmd: ethers.utils.arrayify('0x') + }; + + const contract = await ethers.getContractAt('ExampleStargateHTSConnectorExistingToken', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT); + const tx = await contract.send(sendParam, { nativeFee: '500000000', lzTokenFee: 0 }, signers[0].address, { + gasLimit: 10_000_000, + value: '5000000000000000000' + }); + + const receipt = await tx.wait(); + if (!receipt.status) { + process.exit(`Execution failed. Tx hash: ${tx.hash}`); + } + + console.log(`(${hre.network.name}) successfully sent to BSC via tx: ${tx.hash}`); + }); + + it('@bsc @send to hedera', async () => { + const signers = await ethers.getSigners(); + + const sendParam = { + dstEid: HEDERA_EID, + to: addressToBytes32(RECEIVER_ADDRESS), + amountLD: amount, + minAmountLD: amount, + extraOptions: Options.newOptions().addExecutorLzReceiveOption(3000000, 0).toBytes(), + composeMsg: ethers.utils.arrayify('0x'), + oftCmd: ethers.utils.arrayify('0x') + }; + + const contract = await ethers.getContractAt('ExampleOFT', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT); + const tx = await contract.send(sendParam, { nativeFee: '1000000000000000', lzTokenFee: 0 }, signers[0].address, { + gasLimit: 1_000_000, + value: '1000000000000000' + }); + + const receipt = await tx.wait(); + if (!receipt.status) { + process.exit(`Execution failed. Tx hash: ${tx.hash}`); + } + + console.log(`(${hre.network.name}) successfully sent to Hedera via tx: ${tx.hash}`); + }); + + it('@hedera @test balance', async () => { + const signers = await ethers.getSigners(); + + const oftHts = await ethers.getContractAt('ExampleStargateHTSConnectorExistingToken', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT); + const tokenAddress = await oftHts.htsTokenAddress(); + + const contract = await ethers.getContractAt('ERC20', tokenAddress); + const receiverBalance = await contract.balanceOf(RECEIVER_ADDRESS); + + console.log(`(${hre.network.name}) oft contract balance: ${await contract.balanceOf(process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT)}`); + console.log(`(${hre.network.name}) signer balance: ${await contract.balanceOf(signers[0].address)}`); + console.log(`(${hre.network.name}) total supply: ${await contract.totalSupply()}`); + console.log(`(${hre.network.name}) receiver balance: ${receiverBalance}`); + + expect(receiverBalance).to.equal(amount); + }); + + it('@bsc @test balance', async () => { + const signers = await ethers.getSigners(); + + const contract = await ethers.getContractAt('ERC20', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT); + const receiverBalance = await contract.balanceOf(RECEIVER_ADDRESS); + + console.log(`(${hre.network.name}) oft contract balance: ${await contract.balanceOf(process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT)}`); + console.log(`(${hre.network.name}) signer balance: ${await contract.balanceOf(signers[0].address)}`); + console.log(`(${hre.network.name}) total supply: ${await contract.totalSupply()}`); + console.log(`(${hre.network.name}) receiver balance: ${receiverBalance}`); + + expect(receiverBalance).to.equal(amount); + }); +}); From 9596919692165b709a3caa79920f6355b7d59d7b Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 19 Aug 2025 16:55:06 +0300 Subject: [PATCH 04/10] chore: fix codacy Signed-off-by: nikolay --- .../stargateHtsConnectorExistingTokenTests.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js index d5ab6e3f94..c66ce8c547 100644 --- a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -1,10 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -const hre = require('hardhat'); +import hre from 'hardhat'; const { ethers } = hre; -const { Options, addressToBytes32 } = require('@layerzerolabs/lz-v2-utilities'); -const { expect } = require('chai'); -const CONSTANTS = require('./constants'); +import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'; +import { expect } from 'chai'; +import CONSTANTS from './constants.js'; const { HEDERA_EID, BSC_EID, RECEIVER_ADDRESS } = CONSTANTS; const amount = '100'; @@ -17,12 +17,12 @@ describe('StargateHTSConnectorExistingToken', function() { process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT, '0x', '0x', - '0x0000000000000000000000000000000000000000' + '0x0000000000000000000000000000000000000000', ]; const tx = await contract.updateTokenKeysPublic( [ - [16, updatedKey] - ] + [16, updatedKey], + ], ); const receipt = await tx.wait(); @@ -65,13 +65,13 @@ describe('StargateHTSConnectorExistingToken', function() { minAmountLD: amount, extraOptions: Options.newOptions().addExecutorLzReceiveOption(3000000, 0).toBytes(), composeMsg: ethers.utils.arrayify('0x'), - oftCmd: ethers.utils.arrayify('0x') + oftCmd: ethers.utils.arrayify('0x'), }; const contract = await ethers.getContractAt('ExampleStargateHTSConnectorExistingToken', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_HEDERA_CONTRACT); const tx = await contract.send(sendParam, { nativeFee: '500000000', lzTokenFee: 0 }, signers[0].address, { gasLimit: 10_000_000, - value: '5000000000000000000' + value: '5000000000000000000', }); const receipt = await tx.wait(); @@ -92,7 +92,7 @@ describe('StargateHTSConnectorExistingToken', function() { minAmountLD: amount, extraOptions: Options.newOptions().addExecutorLzReceiveOption(3000000, 0).toBytes(), composeMsg: ethers.utils.arrayify('0x'), - oftCmd: ethers.utils.arrayify('0x') + oftCmd: ethers.utils.arrayify('0x'), }; const contract = await ethers.getContractAt('ExampleOFT', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT); From 4e59b64e7eb90670fd3d6b0ed45d8dbda9654c5c Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 19 Aug 2025 17:17:16 +0300 Subject: [PATCH 05/10] chore: fix codacy Signed-off-by: nikolay --- .../test/stargateHtsConnectorExistingTokenTests.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js index c66ce8c547..85b658fbab 100644 --- a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 +/* global describe, it */ + import hre from 'hardhat'; -const { ethers } = hre; import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'; import { expect } from 'chai'; import CONSTANTS from './constants.js'; +const { ethers } = hre; const { HEDERA_EID, BSC_EID, RECEIVER_ADDRESS } = CONSTANTS; const amount = '100'; @@ -98,7 +100,7 @@ describe('StargateHTSConnectorExistingToken', function() { const contract = await ethers.getContractAt('ExampleOFT', process.env.STARGATE_HTS_CONNECTOR_EXISTING_TOKEN_BSC_CONTRACT); const tx = await contract.send(sendParam, { nativeFee: '1000000000000000', lzTokenFee: 0 }, signers[0].address, { gasLimit: 1_000_000, - value: '1000000000000000' + value: '1000000000000000', }); const receipt = await tx.wait(); From f150675df1655ca7ce4be3c0bc6ddcffd55cf71d Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 19 Aug 2025 17:22:59 +0300 Subject: [PATCH 06/10] chore: fix codacy Signed-off-by: nikolay --- .../test/stargateHtsConnectorExistingTokenTests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js index 85b658fbab..7891252cdf 100644 --- a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -2,9 +2,9 @@ /* global describe, it */ -import hre from 'hardhat'; import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'; import { expect } from 'chai'; +import hre from 'hardhat'; import CONSTANTS from './constants.js'; const { ethers } = hre; From 0385544cdf485b30a9cea65993f0bded6f3517ab Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 19 Aug 2025 17:38:03 +0300 Subject: [PATCH 07/10] chore: fix codacy Signed-off-by: nikolay --- .../test/stargateHtsConnectorExistingTokenTests.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js index 7891252cdf..ed718809e2 100644 --- a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -5,6 +5,7 @@ import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'; import { expect } from 'chai'; import hre from 'hardhat'; + import CONSTANTS from './constants.js'; const { ethers } = hre; From 1a5293f4e5e91af0367cfbc0dd754c06efee77e9 Mon Sep 17 00:00:00 2001 From: nikolay Date: Wed, 20 Aug 2025 10:56:07 +0300 Subject: [PATCH 08/10] chore: resolve comments Signed-off-by: nikolay --- tools/layer-zero-example/README.md | 2 +- .../contracts/stargate/StargateBase.sol | 12 +- .../StargateHTSConnectorExistingToken.sol | 4 +- .../contracts/stargate/StargateOFT.sol | 4 +- .../stargate/interfaces/ICreditMessaging.sol | 35 - .../interfaces/ICreditMessagingHandler.sol | 16 - .../stargate/interfaces/IERC20Minter.sol | 16 - .../stargate/interfaces/IStargate.sol | 33 - .../stargate/interfaces/IStargateFeeLib.sol | 23 - .../stargate/interfaces/IStargatePool.sol | 56 - .../stargate/interfaces/ITokenMessaging.sol | 79 - .../interfaces/ITokenMessagingHandler.sol | 23 - .../contracts/stargate/libs/Path.sol | 106 - tools/layer-zero-example/package-lock.json | 5098 +++++++++++++++-- tools/layer-zero-example/package.json | 1 + 15 files changed, 4565 insertions(+), 943 deletions(-) delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol delete mode 100644 tools/layer-zero-example/contracts/stargate/libs/Path.sol diff --git a/tools/layer-zero-example/README.md b/tools/layer-zero-example/README.md index 8ba5d984f3..15f3639215 100644 --- a/tools/layer-zero-example/README.md +++ b/tools/layer-zero-example/README.md @@ -288,7 +288,7 @@ That's a variant of OFT but using an already existing HTS token. Keep in mind th npx hardhat create-hts-token --network hedera_testnet ``` -- Deploying OFT on an EVM chain and Stargate HTS Connector on the Hedera chain. The Starget HTS Connector for existing token extends StargateHTSConnectorExistingToken and receives the HTS tokens address as constructor parameter. Also, overrides StargateOFT _inflow and _outflow with related HTS mint and burn precompile calls +- Deploying OFT on an EVM chain and Stargate HTS Connector on the Hedera chain. The Stargate HTS Connector for existing token extends StargateHTSConnectorExistingToken and receives the HTS tokens address as constructor parameter. Also, overrides StargateOFT _inflow and _outflow with related HTS mint and burn precompile calls ``` npx hardhat deploy-stargate-hts-connector-existing-token --token --network hedera_testnet npx hardhat deploy-oft --decimals 8 --mint 1000 --network bsc_testnet diff --git a/tools/layer-zero-example/contracts/stargate/StargateBase.sol b/tools/layer-zero-example/contracts/stargate/StargateBase.sol index 03b1919327..c5352711f0 100644 --- a/tools/layer-zero-example/contracts/stargate/StargateBase.sol +++ b/tools/layer-zero-example/contracts/stargate/StargateBase.sol @@ -10,12 +10,12 @@ import { Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; import { OFTLimit, OFTFeeDetail, OFTReceipt, SendParam, MessagingReceipt, MessagingFee, IOFT } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; import { OFTComposeMsgCodec } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/libs/OFTComposeMsgCodec.sol"; -import { IStargate, Ticket } from "./interfaces/IStargate.sol"; -import { IStargateFeeLib, FeeParams } from "./interfaces/IStargateFeeLib.sol"; -import { ITokenMessaging, RideBusParams, TaxiParams } from "./interfaces/ITokenMessaging.sol"; -import { ITokenMessagingHandler } from "./interfaces/ITokenMessagingHandler.sol"; -import { ICreditMessagingHandler, Credit, TargetCredit } from "./interfaces/ICreditMessagingHandler.sol"; -import { Path } from "./libs/Path.sol"; +import { IStargate, Ticket } from "@stargatefinance/stg-evm-v2/src/interfaces/IStargate.sol"; +import { IStargateFeeLib, FeeParams } from "@stargatefinance/stg-evm-v2/src/interfaces/IStargateFeeLib.sol"; +import { ITokenMessaging, RideBusParams, TaxiParams } from "@stargatefinance/stg-evm-v2/src/interfaces/ITokenMessaging.sol"; +import { ITokenMessagingHandler } from "@stargatefinance/stg-evm-v2/src/interfaces/ITokenMessagingHandler.sol"; +import { ICreditMessagingHandler, Credit, TargetCredit } from "@stargatefinance/stg-evm-v2/src/interfaces/ICreditMessagingHandler.sol"; +import { Path } from "@stargatefinance/stg-evm-v2/src/libs/Path.sol"; import { Transfer } from "./libs/Transfer.sol"; /// @title The base contract for StargateOFT, StargatePool, StargatePoolMigratable, and StargatePoolNative. diff --git a/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol index 235f059fbb..cfd70d09a2 100644 --- a/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol +++ b/tools/layer-zero-example/contracts/stargate/StargateHTSConnectorExistingToken.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.22; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {StargateType} from "./interfaces/IStargate.sol"; -import {IERC20Minter} from "./interfaces/IERC20Minter.sol"; +import {StargateType} from "@stargatefinance/stg-evm-v2/src/interfaces/IStargate.sol"; +import {IERC20Minter} from "@stargatefinance/stg-evm-v2/src/interfaces/IERC20Minter.sol"; import {FeeParams, StargateBase} from "./StargateBase.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import "../hts/HederaTokenService.sol"; diff --git a/tools/layer-zero-example/contracts/stargate/StargateOFT.sol b/tools/layer-zero-example/contracts/stargate/StargateOFT.sol index 085c09ead2..70c5c61aa1 100644 --- a/tools/layer-zero-example/contracts/stargate/StargateOFT.sol +++ b/tools/layer-zero-example/contracts/stargate/StargateOFT.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.22; import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import { StargateType } from "./interfaces/IStargate.sol"; -import { IERC20Minter } from "./interfaces/IERC20Minter.sol"; +import { StargateType } from "@stargatefinance/stg-evm-v2/src/interfaces/IStargate.sol"; +import { IERC20Minter } from "@stargatefinance/stg-evm-v2/src/interfaces/IERC20Minter.sol"; import { StargateBase, FeeParams } from "./StargateBase.sol"; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol deleted file mode 100644 index 45d7bd591e..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessaging.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -import { MessagingFee } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; - -/// @notice Stores the information related to a batch of credit transfers. -struct TargetCreditBatch { - uint16 assetId; - TargetCredit[] credits; -} - -/// @notice Stores the information related to a single credit transfer. -struct TargetCredit { - uint32 srcEid; - uint64 amount; // the amount of credits to intended to send - uint64 minAmount; // the minimum amount of credits to keep on local chain after sending -} - -/// @title Credit Messaging API -/// @dev This interface defines the API for quoting and sending credits to other chains. -interface ICreditMessaging { - /// @notice Sends credits to the destination endpoint. - /// @param _dstEid The destination LayerZero endpoint ID. - /// @param _creditBatches The credit batch payloads to send to the destination LayerZero endpoint ID. - function sendCredits(uint32 _dstEid, TargetCreditBatch[] calldata _creditBatches) external payable; - - /// @notice Quotes the fee for sending credits to the destination endpoint. - /// @param _dstEid The destination LayerZero endpoint ID. - /// @param _creditBatches The credit batch payloads to send to the destination LayerZero endpoint ID. - /// @return fee The fee for sending the credits to the destination endpoint. - function quoteSendCredits( - uint32 _dstEid, - TargetCreditBatch[] calldata _creditBatches - ) external view returns (MessagingFee memory fee); -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol deleted file mode 100644 index e9d80719cb..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/ICreditMessagingHandler.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -import { TargetCredit } from "./ICreditMessaging.sol"; - -struct Credit { - uint32 srcEid; - uint64 amount; -} - -/// @dev This is an internal interface, defining functions to handle messages/calls from the credit messaging contract. -interface ICreditMessagingHandler { - function sendCredits(uint32 _dstEid, TargetCredit[] calldata _credits) external returns (Credit[] memory); - - function receiveCredits(uint32 _srcEid, Credit[] calldata _credits) external; -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol deleted file mode 100644 index 5123ad9142..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/IERC20Minter.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -/// @title An interface for minting and burning ERC20s. -/// @dev Implemented by OFT contracts. -interface IERC20Minter { - /// @notice Mint tokens and transfer them to the given account. - /// @param _to The account to mint the tokens to - /// @param _amount How many tokens to mint - function mint(address _to, uint256 _amount) external; - - /// @notice Burn tokens from a given account. - /// @param _from The account to burn tokens from - /// @param _amount How many tokens to burn - function burnFrom(address _from, uint256 _amount) external; -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol deleted file mode 100644 index 2a7afeb77e..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/IStargate.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -// Solidity does not support splitting import across multiple lines -// solhint-disable-next-line max-line-length -import { IOFT, SendParam, MessagingFee, MessagingReceipt, OFTReceipt } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oft/interfaces/IOFT.sol"; - -/// @notice Stargate implementation type. -enum StargateType { - Pool, - OFT -} - -/// @notice Ticket data for bus ride. -struct Ticket { - uint72 ticketId; - bytes passengerBytes; -} - -/// @title Interface for Stargate. -/// @notice Defines an API for sending tokens to destination chains. -interface IStargate is IOFT { - /// @dev This function is same as `send` in OFT interface but returns the ticket data if in the bus ride mode, - /// which allows the caller to ride and drive the bus in the same transaction. - function sendToken( - SendParam calldata _sendParam, - MessagingFee calldata _fee, - address _refundAddress - ) external payable returns (MessagingReceipt memory msgReceipt, OFTReceipt memory oftReceipt, Ticket memory ticket); - - /// @notice Returns the Stargate implementation type. - function stargateType() external pure returns (StargateType); -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol deleted file mode 100644 index 925b21ba38..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/IStargateFeeLib.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -/// @notice Parameters used to assess fees to send tokens to a destination endpoint. -struct FeeParams { - address sender; - uint32 dstEid; - uint64 amountInSD; - uint64 deficitSD; - bool toOFT; - bool isTaxi; -} - -/// @title Interface for assessing fees to send tokens to a destination endpoint. -interface IStargateFeeLib { - /// @notice Apply a fee for a given request, allowing for state modification. - /// @dev This is included for future proofing potential implementations - /// @dev where state is modified in the feeLib based on a FeeParams - - function applyFee(FeeParams calldata _params) external returns (uint64 amountOutSD); - /// @notice Apply a fee for a given request, without modifying state. - function applyFeeView(FeeParams calldata _params) external view returns (uint64 amountOutSD); -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol b/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol deleted file mode 100644 index af9fecd398..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/IStargatePool.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -import { IStargate, SendParam, MessagingReceipt, MessagingFee, OFTReceipt } from "./IStargate.sol"; - -/// @title An interface for Stargate Pools -/// @notice Stargate Pools are a type of IStargate that allows users to pool token liquidity. -interface IStargatePool is IStargate { - /// @notice Deposit token into the pool - /// @param _receiver The account to mint the LP tokens to - /// @param _amountLD The amount of tokens to deposit in LD - /// @return amountLD The actual amount of tokens deposited in LD - function deposit(address _receiver, uint256 _amountLD) external payable returns (uint256 amountLD); - - /// @notice Redeem an amount of LP tokens from the senders account, claiming rewards. - /// @param _amountLD The amount of LP tokens to redeem - /// @param _receiver The account to transfer the - function redeem(uint256 _amountLD, address _receiver) external returns (uint256 amountLD); - - /// @notice Get how many LP tokens are redeemable for a given account - /// @param _owner The address of the account to check - /// @return amountLD The amount of LP tokens redeemable, in LD - function redeemable(address _owner) external view returns (uint256 amountLD); - - /// @notice Redeem LP tokens and send the withdrawn tokens to a destination endpoint. - /// @param _sendParam The SendParam payload describing the redeem and send - /// @param _fee The MessagingFee to perform redeemSend - /// @param _refundAddress The address to refund excess LayerZero messaging fees. - /// @return receipt The MessagingReceipt describing the result of redeemSend - /// @return oftReceipt The OFTReceipt describing the result of redeemSend - function redeemSend( - SendParam calldata _sendParam, - MessagingFee calldata _fee, - address _refundAddress - ) external payable returns (MessagingReceipt memory receipt, OFTReceipt memory oftReceipt); - - /// @notice Quote the messaging fee for a redeemSend operation - /// @param _sendParam The SendParam payload describing the redeem and send - /// @param _payInLzToken Whether to pay the fee in LZ token - /// @return messagingFee The MessagingFee for the redeemSend operation - function quoteRedeemSend( - SendParam calldata _sendParam, - bool _payInLzToken - ) external view returns (MessagingFee memory messagingFee); - - /// @notice Get the Total Value Locked in the pool. - /// @return The total value locked - function tvl() external view returns (uint256); - - /// @notice Get the available balance of the pool - function poolBalance() external view returns (uint256); - - /// @notice Get the address of the LP token - /// @return The address of the LP token contract. - function lpToken() external view returns (address); -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol deleted file mode 100644 index 4dc20ad3cd..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessaging.sol +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -import { MessagingReceipt, MessagingFee, Ticket } from "./IStargate.sol"; - -/// @notice Payload for sending a taxi message. -/// @dev A taxi message is sent immediately and is not stored on the bus. -struct TaxiParams { - address sender; - uint32 dstEid; - bytes32 receiver; - uint64 amountSD; - bytes composeMsg; - bytes extraOptions; -} - -/// @notice Payload for riding the bus. -/// @dev Riding the bus is a two-step process: -/// @dev - The message is sent to the bus, -/// @dev - The bus is driven to the destination. -struct RideBusParams { - address sender; - uint32 dstEid; - bytes32 receiver; - uint64 amountSD; - bool nativeDrop; -} - -/// @title Token Messaging API. -/// @notice This interface defines the API for sending a taxi message, riding the bus, and driving the bus, along with -/// corresponding quote functions. -interface ITokenMessaging { - /// @notice Sends a taxi message - /// @param _params The taxi message payload - /// @param _messagingFee The messaging fee for sending a taxi message - /// @param _refundAddress The address to refund excess LayerZero MessagingFees - /// @return receipt The MessagingReceipt resulting from sending the taxi - function taxi( - TaxiParams calldata _params, - MessagingFee calldata _messagingFee, - address _refundAddress - ) external payable returns (MessagingReceipt memory receipt); - - /// @notice Quotes the messaging fee for sending a taxi message - /// @param _params The taxi message payload - /// @param _payInLzToken Whether to pay the fee in LZ token - /// @return fee The MessagingFee for sending the taxi message - function quoteTaxi(TaxiParams calldata _params, bool _payInLzToken) external view returns (MessagingFee memory fee); - - /// @notice Sends a message to ride the bus, queuing the passenger in preparation for the drive. - /// @notice The planner will later driveBus to the destination endpoint. - /// @param _params The rideBus message payload - /// @return receipt The MessagingReceipt resulting from sending the rideBus message - /// @return ticket The Ticket for riding the bus - function rideBus( - RideBusParams calldata _params - ) external returns (MessagingReceipt memory receipt, Ticket memory ticket); - - /// @notice Quotes the messaging fee for riding the bus - /// @param _dstEid The destination LayerZero endpoint ID. - /// @param _nativeDrop Whether to pay for a native drop on the destination. - /// @return fee The MessagingFee for riding the bus - function quoteRideBus(uint32 _dstEid, bool _nativeDrop) external view returns (MessagingFee memory fee); - - /// @notice Drives the bus to the destination. - /// @param _dstEid The destination LayerZero endpoint ID. - /// @param _passengers The passengers to drive to the destination. - /// @return receipt The MessagingReceipt resulting from driving the bus - function driveBus( - uint32 _dstEid, - bytes calldata _passengers - ) external payable returns (MessagingReceipt memory receipt); - - /// @notice Quotes the messaging fee for driving the bus to the destination. - /// @param _dstEid The destination LayerZero endpoint ID. - /// @param _passengers The passengers to drive to the destination. - /// @return fee The MessagingFee for driving the bus - function quoteDriveBus(uint32 _dstEid, bytes calldata _passengers) external view returns (MessagingFee memory fee); -} diff --git a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol b/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol deleted file mode 100644 index 7b771647f8..0000000000 --- a/tools/layer-zero-example/contracts/stargate/interfaces/ITokenMessagingHandler.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.0; - -import { Origin } from "@layerzerolabs/lz-evm-oapp-v2/contracts/oapp/OApp.sol"; - -/// @dev This is an internal interface, defining the function to handle token message from the token messaging contract. -interface ITokenMessagingHandler { - function receiveTokenBus( - Origin calldata _origin, - bytes32 _guid, - uint8 _seatNumber, - address _receiver, - uint64 _amountSD - ) external; - - function receiveTokenTaxi( - Origin calldata _origin, - bytes32 _guid, - address _receiver, - uint64 _amountSD, - bytes calldata _composeMsg - ) external; -} diff --git a/tools/layer-zero-example/contracts/stargate/libs/Path.sol b/tools/layer-zero-example/contracts/stargate/libs/Path.sol deleted file mode 100644 index 4b2151d53b..0000000000 --- a/tools/layer-zero-example/contracts/stargate/libs/Path.sol +++ /dev/null @@ -1,106 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.22; - -/// @dev The Path struct contains the bus base fare multiplier bps and the credit in the same slot for gas saving. -struct Path { - uint64 credit; // available credit for the path, in SD -} - -using PathLib for Path global; - -/** - * @title A library to operate on Paths. - * @dev A Path is a route through which value can be sent. It entails the local chain and a destination chain, and has - * a given amount of credit associated with it. Every time the value is sent from A to B, the credit on A is - * decreased and credit on B is increased. If credit hits 0 then the path can no longer be used. - */ -library PathLib { - uint64 internal constant UNLIMITED_CREDIT = type(uint64).max; - - // solhint-disable-next-line event-name-camelcase - event Path_CreditBurned(uint64 amountSD); - - error Path_InsufficientCredit(); - error Path_AlreadyHasCredit(); - error Path_UnlimitedCredit(); - - /// @notice Increase credit for a given Path. - /// @dev Reverts with Path_UnlimitedCredit if the increase would hit the maximum amount of credit (reserved value) - /// @param _path The Path for which to increase credit - /// @param _amountSD The amount by which to increase credit - function increaseCredit(Path storage _path, uint64 _amountSD) internal { - uint64 credit = _path.credit; - if (credit == UNLIMITED_CREDIT) return; - credit += _amountSD; - if (credit == UNLIMITED_CREDIT) revert Path_UnlimitedCredit(); - _path.credit = credit; - } - - /// @notice Decrease credit for a given Path. - /// @dev Reverts with InsufficientCredit if there is not enough credit - /// @param _path The Path for which to decrease credit - /// @param _amountSD The amount by which to decrease credit - function decreaseCredit(Path storage _path, uint64 _amountSD) internal { - uint64 currentCredit = _path.credit; - if (currentCredit == UNLIMITED_CREDIT) return; - if (currentCredit < _amountSD) revert Path_InsufficientCredit(); - unchecked { - _path.credit = currentCredit - _amountSD; - } - } - - /// @notice Decrease credit for a given path, even if only a partial amount is possible. - /// @param _path The Path for which to decrease credit - /// @param _amountSD The amount by which try to decrease credit - /// @param _minKept The minimum amount of credit to keep after the decrease - /// @return decreased The actual amount of credit decreased - function tryDecreaseCredit( - Path storage _path, - uint64 _amountSD, - uint64 _minKept - ) internal returns (uint64 decreased) { - uint64 currentCredit = _path.credit; - // not allowed to try to decrease unlimited credit - if (currentCredit == UNLIMITED_CREDIT) revert Path_UnlimitedCredit(); - if (_minKept < currentCredit) { - unchecked { - uint64 maxDecreased = currentCredit - _minKept; - decreased = _amountSD > maxDecreased ? maxDecreased : _amountSD; - _path.credit = currentCredit - decreased; - } - } - } - - /// @notice Set a given path as OFT or reset an OFT path to 0 credit. - /// @dev A Path for which the asset is using an OFT on destination gets unlimited credit because value transfers - /// @dev do not spend value. - /// @dev Such a path is expected to not have credit before. - /// @dev Reverts with AlreadyHasCredit if the Path already had credit assigned to it - /// @param _path The Path to set - /// @param _oft Whether to set it as OFT or reset it from OFT - function setOFTPath(Path storage _path, bool _oft) internal { - uint64 currentCredit = _path.credit; - if (_oft) { - // only allow un-limiting from 0 - if (currentCredit != 0) revert Path_AlreadyHasCredit(); - _path.credit = UNLIMITED_CREDIT; - } else { - // only allow resetting from unlimited - if (currentCredit != UNLIMITED_CREDIT) revert Path_AlreadyHasCredit(); - _path.credit = 0; - } - } - - /// @notice Check whether a given Path is set as OFT. - /// @param _path The path to examine - /// @return whether the Path is set as OFT - function isOFTPath(Path storage _path) internal view returns (bool) { - return _path.credit == UNLIMITED_CREDIT; - } - - /// @notice Burn credit for a given Path during bridged token migration. - function burnCredit(Path storage _path, uint64 _amountSD) internal { - decreaseCredit(_path, _amountSD); - emit Path_CreditBurned(_amountSD); - } -} diff --git a/tools/layer-zero-example/package-lock.json b/tools/layer-zero-example/package-lock.json index 2efed5290f..477d376611 100644 --- a/tools/layer-zero-example/package-lock.json +++ b/tools/layer-zero-example/package-lock.json @@ -10,6 +10,7 @@ "@layerzerolabs/lz-v2-utilities": "^3.0.22", "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/onft-evm": "^0.1.0", + "@stargatefinance/stg-evm-v2": "^3.0.0", "dotenv": "^16.4.7" }, "devDependencies": { @@ -17,6 +18,20 @@ "hardhat": "^2.12.4" } }, + "node_modules/@aptos-labs/aptos-client": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@aptos-labs/aptos-client/-/aptos-client-0.1.1.tgz", + "integrity": "sha512-kJsoy4fAPTOhzVr7Vwq8s/AUg6BQiJDa7WOqRzev4zsuIS3+JCuIZ6vUd7UBsjnxtmguJJulMRs9qWCzVBt2XA==", + "deprecated": "<1.0.0 is no longer supported please upgrade to the latest version", + "license": "Apache-2.0", + "dependencies": { + "axios": "1.7.4", + "got": "^11.8.6" + }, + "engines": { + "node": ">=15.10.0" + } + }, "node_modules/@axelar-network/axelar-gmp-sdk-solidity": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-gmp-sdk-solidity/-/axelar-gmp-sdk-solidity-5.10.0.tgz", @@ -27,6 +42,39 @@ "node": ">=18" } }, + "node_modules/@babel/runtime": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bitcoinerlab/secp256k1": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@bitcoinerlab/secp256k1/-/secp256k1-1.2.0.tgz", + "integrity": "sha512-jeujZSzb3JOZfmJYI0ph1PVpCRV5oaexCgy+RvCXV8XlY+XFB/2n3WOcvBsKLsOw78KYgnQrQWb2HrKE4be88Q==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^1.7.0" + } + }, + "node_modules/@bitcoinerlab/secp256k1/node_modules/@noble/curves": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", + "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@chainlink/contracts-ccip": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/@chainlink/contracts-ccip/-/contracts-ccip-0.7.6.tgz", @@ -878,6 +926,110 @@ "node": ">=14" } }, + "node_modules/@improbable-eng/grpc-web": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.15.0.tgz", + "integrity": "sha512-ERft9/0/8CmYalqOVnJnpdDry28q+j+nAlFFARdjyxXDJ+Mhgv9+F600QC8BR9ygOfrXRlAk6CvST2j+JCpQPg==", + "license": "Apache-2.0", + "dependencies": { + "browser-headers": "^0.4.1" + }, + "peerDependencies": { + "google-protobuf": "^3.14.0" + } + }, + "node_modules/@initia/initia.js": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@initia/initia.js/-/initia.js-1.0.4.tgz", + "integrity": "sha512-oFfj8heWUFxK/OFAAa8A9NzcBB3M7r6hG1lMLHwGbMLPRbhK4iVY/V1FxcBjspKAuLNsdsb/k+Oc/JUl0iyixQ==", + "license": "Apache-2.0", + "dependencies": { + "@bitcoinerlab/secp256k1": "^1.1.1", + "@initia/initia.proto": "^0.2.6", + "@initia/opinit.proto": "^0.0.11", + "@ledgerhq/hw-transport": "^6.31.4", + "@ledgerhq/hw-transport-webhid": "^6.29.4", + "@ledgerhq/hw-transport-webusb": "^6.29.4", + "@mysten/bcs": "^1.1.0", + "axios": "^1.7.7", + "bech32": "^2.0.0", + "bignumber.js": "^9.1.2", + "bip32": "^5.0.0-rc.0", + "bip39": "^3.1.0", + "jscrypto": "^1.0.3", + "keccak256": "^1.0.6", + "ripemd160": "^2.0.2", + "secp256k1": "^5.0.1", + "semver": "^7.6.3", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@initia/initia.js/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "license": "MIT" + }, + "node_modules/@initia/initia.js/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" + }, + "node_modules/@initia/initia.js/node_modules/secp256k1": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz", + "integrity": "sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@initia/initia.js/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@initia/initia.proto": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@initia/initia.proto/-/initia.proto-0.2.6.tgz", + "integrity": "sha512-khiCPUxZTkyAl+SQbQCOlcJId/a0ToUhG+ChrVXN9a+1ypPz5355j2UP2IvnUf+lAix/+zzdekcqO/Lig7htAQ==", + "license": "Apache-2.0", + "dependencies": { + "@improbable-eng/grpc-web": "^0.15.0", + "google-protobuf": "^3.21.4", + "long": "^5.2.3", + "protobufjs": "^7.3.2" + } + }, + "node_modules/@initia/opinit.proto": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/@initia/opinit.proto/-/opinit.proto-0.0.11.tgz", + "integrity": "sha512-Op9GIlXiV1xhUIjVQ2TFE9a3X8iyFVNtJNHCM34gwLQHJktDNm2KCoW4eHh6pkn4//ECRVH7zuKgV8TdZWogCw==", + "license": "Apache-2.0", + "dependencies": { + "@improbable-eng/grpc-web": "^0.15.0", + "google-protobuf": "^3.21.4", + "long": "^5.2.3", + "protobufjs": "^7.3.2" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -909,172 +1061,2270 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@layerzerolabs/lz-evm-messagelib-v2": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-3.0.27.tgz", - "integrity": "sha512-cUj8/aBqklvi0B2rKtBcpbJAhELcnJVJ9Le905NKRLwzfsajEdyTWC+uWNdVSU7oKSB970O0c2m87jPXdEj71g==", - "license": "LZBL-1.2", - "peer": true, - "peerDependencies": { - "@arbitrum/nitro-contracts": "^1.1.0", - "@axelar-network/axelar-gmp-sdk-solidity": "^5.6.4", - "@chainlink/contracts-ccip": "^0.7.6", - "@eth-optimism/contracts": "^0.6.0", - "@layerzerolabs/lz-evm-protocol-v2": "^3.0.27", - "@layerzerolabs/lz-evm-v1-0.7": "^3.0.27", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", - "hardhat-deploy": "^0.12.4", - "solidity-bytes-utils": "^0.8.0" - }, - "peerDependenciesMeta": { - "@arbitrum/nitro-contracts": { - "optional": true - } + "node_modules/@layerzerolabs/evm-sdks-core": { + "version": "3.0.125", + "resolved": "https://registry.npmjs.org/@layerzerolabs/evm-sdks-core/-/evm-sdks-core-3.0.125.tgz", + "integrity": "sha512-DmK5dyOwPPrSFFXPlF4x5JvrjHyzzYkBE2caNQzRt4ccTT0JlI5NTZsmD+fTTX4tJzCeuv/9TNznWxtA4vI/eQ==", + "license": "BUSL-1.1", + "dependencies": { + "ethers": "^5.8.0" } }, - "node_modules/@layerzerolabs/lz-evm-oapp-v2": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-oapp-v2/-/lz-evm-oapp-v2-3.0.27.tgz", - "integrity": "sha512-Ob27UmueD4Lgec/riCH5q15eJKEj/kJkNR8+gW0+5Y6d273UT6upILzzRpE51qLFvSVBi0iuOH6xyXulIRqGIw==", + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "peerDependencies": { - "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.27", - "@layerzerolabs/lz-evm-protocol-v2": "^3.0.27", - "@layerzerolabs/lz-evm-v1-0.7": "^3.0.27", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", - "hardhat-deploy": "^0.12.4", - "solidity-bytes-utils": "^0.8.0" - } - }, - "node_modules/@layerzerolabs/lz-evm-protocol-v2": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-3.0.27.tgz", - "integrity": "sha512-TnKjq7oiDPusVxJ5F66Mak7yoDk2T3JKOJxI9yfSisLBiWA6W/0jrE4iShHYt5c9kx6WgSdHpDwLJ3zmeimdCQ==", - "license": "LZBL-1.2", - "peer": true, - "peerDependencies": { - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", - "hardhat-deploy": "^0.12.4", - "solidity-bytes-utils": "^0.8.0" - } - }, - "node_modules/@layerzerolabs/lz-evm-v1-0.7": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-v1-0.7/-/lz-evm-v1-0.7-3.0.27.tgz", - "integrity": "sha512-cF6NnXkWGXM76bpPBZViSyi9kDsWI43mFByQHnAq65u+Js6zI63gZbwCRLJ3IdrSWbZZwC1T3m6NnDLPgX3ipQ==", - "license": "BUSL-1.1", - "peer": true, - "peerDependencies": { - "@openzeppelin/contracts": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", - "hardhat-deploy": "^0.12.4" + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, - "node_modules/@layerzerolabs/lz-v2-utilities": { - "version": "3.0.27", - "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.27.tgz", - "integrity": "sha512-Gv7lSuFb5BMWpdX5YA9sxTDCJCXuNlimzFJrMn5++pHCLpX9T03QwNqNjUoU26gJUmjU7nESkL10uB6PZQbYAw==", - "license": "BUSL-1.1", + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/solidity": "^5.7.0", - "bs58": "^5.0.0", - "tiny-invariant": "^1.3.1" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, - "node_modules/@layerzerolabs/oapp-evm": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/oapp-evm/-/oapp-evm-0.3.0.tgz", - "integrity": "sha512-eP0zqNx72TQE11exObw7eYt5uwGuUv0kKtatYO/+dZuEjfhUdR9H6dj1CIbn/ozeKT56rZwj9LtSkDGl7FnqVw==", + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "ethers": "^5.7.2" - }, - "peerDependencies": { - "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", - "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", - "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@layerzerolabs/onft-evm": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@layerzerolabs/onft-evm/-/onft-evm-0.1.0.tgz", - "integrity": "sha512-hopKC1pw/5Bph3h+sRf1kLkCXs2j1Z/2xRU8Zwq3GmGp5R+MKjVc4eUMy4PvqWXBPEkUAapPoMehuV+q+gTa1g==", + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "peerDependencies": { - "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", - "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", - "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", - "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", - "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "license": "ISC", + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" + "@ethersproject/bytes": "^5.8.0" } }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@types/node": "*" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/evm-sdks-core/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-definitions": { + "version": "3.0.125", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-definitions/-/lz-definitions-3.0.125.tgz", + "integrity": "sha512-i6IJLX+L3Yym8vFN1Z2ojF/Dnigujlys4+ez6fU2xNcl1X3F0cZyUZR6BWCLw2GW23LgR8SCAyT0fUzsjBTBtg==", + "license": "BUSL-1.1", + "dependencies": { + "tiny-invariant": "^1.3.1" + } + }, + "node_modules/@layerzerolabs/lz-evm-messagelib-v2": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-3.0.27.tgz", + "integrity": "sha512-cUj8/aBqklvi0B2rKtBcpbJAhELcnJVJ9Le905NKRLwzfsajEdyTWC+uWNdVSU7oKSB970O0c2m87jPXdEj71g==", + "license": "LZBL-1.2", + "peer": true, + "peerDependencies": { + "@arbitrum/nitro-contracts": "^1.1.0", + "@axelar-network/axelar-gmp-sdk-solidity": "^5.6.4", + "@chainlink/contracts-ccip": "^0.7.6", + "@eth-optimism/contracts": "^0.6.0", + "@layerzerolabs/lz-evm-protocol-v2": "^3.0.27", + "@layerzerolabs/lz-evm-v1-0.7": "^3.0.27", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + }, + "peerDependenciesMeta": { + "@arbitrum/nitro-contracts": { + "optional": true + } + } + }, + "node_modules/@layerzerolabs/lz-evm-oapp-v2": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-oapp-v2/-/lz-evm-oapp-v2-3.0.27.tgz", + "integrity": "sha512-Ob27UmueD4Lgec/riCH5q15eJKEj/kJkNR8+gW0+5Y6d273UT6upILzzRpE51qLFvSVBi0iuOH6xyXulIRqGIw==", + "license": "MIT", + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.27", + "@layerzerolabs/lz-evm-protocol-v2": "^3.0.27", + "@layerzerolabs/lz-evm-v1-0.7": "^3.0.27", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + } + }, + "node_modules/@layerzerolabs/lz-evm-protocol-v2": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-3.0.27.tgz", + "integrity": "sha512-TnKjq7oiDPusVxJ5F66Mak7yoDk2T3JKOJxI9yfSisLBiWA6W/0jrE4iShHYt5c9kx6WgSdHpDwLJ3zmeimdCQ==", + "license": "LZBL-1.2", + "peer": true, + "peerDependencies": { + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + } + }, + "node_modules/@layerzerolabs/lz-evm-sdk-v2": { + "version": "3.0.30", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-sdk-v2/-/lz-evm-sdk-v2-3.0.30.tgz", + "integrity": "sha512-UMP/Z8MWrKeklK7zjjbjn+GS9dPUcZsa1Y70uFXGq1j9V/xkLGIH+T9IltKndLR/W+Z/t3UhgjswUVMPd+OSsw==", + "license": "LZBL-1.2", + "dependencies": { + "@layerzerolabs/evm-sdks-core": "^3.0.30", + "ethers": "^5.7.2" + } + }, + "node_modules/@layerzerolabs/lz-evm-v1-0.7": { + "version": "3.0.27", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-v1-0.7/-/lz-evm-v1-0.7-3.0.27.tgz", + "integrity": "sha512-cF6NnXkWGXM76bpPBZViSyi9kDsWI43mFByQHnAq65u+Js6zI63gZbwCRLJ3IdrSWbZZwC1T3m6NnDLPgX3ipQ==", + "license": "BUSL-1.1", + "peerDependencies": { + "@openzeppelin/contracts": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "3.4.2-solc-0.7 || ^3.4.2 || ^4.0.0 || ^5.0.0", + "hardhat-deploy": "^0.12.4" + } + }, + "node_modules/@layerzerolabs/lz-utilities": { + "version": "3.0.125", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-utilities/-/lz-utilities-3.0.125.tgz", + "integrity": "sha512-dx4+B2mAFBXXthz/owotb9yU+RM45bFZ29MvDNdTdv9tKC5jjd0xvAB5kqsxDqTrqZb5BAhjgPTfAw8bYgyXxQ==", + "license": "BUSL-1.1", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@initia/initia.js": "1.0.4", + "@layerzerolabs/lz-definitions": "^3.0.125", + "@solana/web3.js": "1.95.8", + "@ton/core": "^0.59.0", + "@ton/crypto": "^3.3.0", + "@ton/ton": "15.1.0", + "aptos": "^1.20.0", + "bip39": "^3.1.0", + "dayjs": "^1.11.13", + "ed25519-hd-key": "^1.3.0", + "ethers": "^5.8.0", + "memoizee": "^0.4.17", + "picocolors": "1.0.0", + "pino": "^8.16.2" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/basex": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/contracts": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/hdnode": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/json-wallets": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/pbkdf2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/providers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", + "bech32": "1.1.4", + "ws": "8.18.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/random": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/units": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/wallet": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/@ethersproject/wordlists": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/ethers": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-utilities/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "license": "ISC" + }, + "node_modules/@layerzerolabs/lz-v2-utilities": { + "version": "3.0.125", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-v2-utilities/-/lz-v2-utilities-3.0.125.tgz", + "integrity": "sha512-dyHiy+tKl8l3F2xxM3rhME24Y5YXo3wG1tCL9OumQVdwIq4dALD0zWDs9oz6+WQEs1JL3Nq/alxAU2oxCRZFYQ==", + "license": "BUSL-1.1", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/solidity": "^5.8.0", + "bs58": "^5.0.0", + "tiny-invariant": "^1.3.1" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/sha2": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/solidity": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/lz-v2-utilities/node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@layerzerolabs/oapp-evm": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/oapp-evm/-/oapp-evm-0.3.0.tgz", + "integrity": "sha512-eP0zqNx72TQE11exObw7eYt5uwGuUv0kKtatYO/+dZuEjfhUdR9H6dj1CIbn/ozeKT56rZwj9LtSkDGl7FnqVw==", + "license": "MIT", + "dependencies": { + "ethers": "^5.7.2" + }, + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", + "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", + "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + } + }, + "node_modules/@layerzerolabs/onft-evm": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@layerzerolabs/onft-evm/-/onft-evm-0.1.0.tgz", + "integrity": "sha512-hopKC1pw/5Bph3h+sRf1kLkCXs2j1Z/2xRU8Zwq3GmGp5R+MKjVc4eUMy4PvqWXBPEkUAapPoMehuV+q+gTa1g==", + "license": "MIT", + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^3.0.12", + "@layerzerolabs/lz-evm-protocol-v2": "^3.0.12", + "@layerzerolabs/lz-evm-v1-0.7": "^3.0.12", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0" + } + }, + "node_modules/@ledgerhq/devices": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-8.5.0.tgz", + "integrity": "sha512-zDB6Pdk6NYYbYis8cWoLLkL9k/IvjhC3hkuuz2lhpJ2AxIs3/PDMUKoyK4DpjPtRyKk1W1lwsnpc6J1i87r4/Q==", + "license": "Apache-2.0", + "dependencies": { + "@ledgerhq/errors": "^6.24.0", + "@ledgerhq/logs": "^6.13.0", + "rxjs": "^7.8.1", + "semver": "^7.3.5" + } + }, + "node_modules/@ledgerhq/devices/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@ledgerhq/errors": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.24.0.tgz", + "integrity": "sha512-UMy+nGH4hmlaML7vPiSwGQ/mOoq/rwExYGEZVpb9TPoG0AcSfzpG43LAdAemvCTX/gK0MUO+int4FpNkD1ZrtQ==", + "license": "Apache-2.0" + }, + "node_modules/@ledgerhq/hw-transport": { + "version": "6.31.9", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.31.9.tgz", + "integrity": "sha512-HqB2Whl2qbrzyvs9gC/GmLhIy8RO4CWzjqHS4k0bPWDZRqKa8m6H32vjrbXGO//pUL1Mlu87UwvxvLyuICdjwg==", + "license": "Apache-2.0", + "dependencies": { + "@ledgerhq/devices": "8.5.0", + "@ledgerhq/errors": "^6.24.0", + "@ledgerhq/logs": "^6.13.0", + "events": "^3.3.0" + } + }, + "node_modules/@ledgerhq/hw-transport-webhid": { + "version": "6.30.5", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.30.5.tgz", + "integrity": "sha512-dEUrV7afbw1HIAz4NrcstihtiVEZ7osmigjWhHR1kcBvkP9JKFUjplQkCGshfhocgTVasA8RzUF9lgTDMR6VOw==", + "license": "Apache-2.0", + "dependencies": { + "@ledgerhq/devices": "8.5.0", + "@ledgerhq/errors": "^6.24.0", + "@ledgerhq/hw-transport": "^6.31.9", + "@ledgerhq/logs": "^6.13.0" + } + }, + "node_modules/@ledgerhq/hw-transport-webusb": { + "version": "6.29.9", + "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webusb/-/hw-transport-webusb-6.29.9.tgz", + "integrity": "sha512-/VdyLPJPTyGb0+/HyaM/RiirFQh5g2J7G52b7TS3WWNSE8M24SQAyX9vCT+qB4XWesRXJMnXz4oVbQ6lMHDrFA==", + "license": "Apache-2.0", + "dependencies": { + "@ledgerhq/devices": "8.5.0", + "@ledgerhq/errors": "^6.24.0", + "@ledgerhq/hw-transport": "^6.31.9", + "@ledgerhq/logs": "^6.13.0" + } + }, + "node_modules/@ledgerhq/logs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.13.0.tgz", + "integrity": "sha512-4+qRW2Pc8V+btL0QEmdB2X+uyx0kOWMWE1/LWsq5sZy3Q5tpi4eItJS6mB0XL3wGW59RQ+8bchNQQ1OW/va8Og==", + "license": "Apache-2.0" + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, "license": "MPL-2.0", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@mysten/bcs": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@mysten/bcs/-/bcs-1.7.0.tgz", + "integrity": "sha512-8zE2Jzj2ai55RlVXx2pEMbbq+X3vB+uPGBvZr0F79IdTwuwcu4QdFG3PT/zHsytsvATkn+z0f2YDWhM5916u2A==", + "license": "Apache-2.0", + "dependencies": { + "@mysten/utils": "0.1.1", + "@scure/base": "^1.2.6" + } + }, + "node_modules/@mysten/bcs/node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@mysten/utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@mysten/utils/-/utils-0.1.1.tgz", + "integrity": "sha512-jvhJC6/2la1QHltukQXzfyTZ+VVHxe187JjPx+mEXRUWyAo6jCSdioOQJIfaGu4K4i+37KeiydXRwV/bq/7UJQ==", + "license": "Apache-2.0", + "dependencies": { + "@scure/base": "^1.2.6" + } + }, + "node_modules/@mysten/utils/node_modules/@scure/base": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz", + "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", - "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@noble/hashes": "1.4.0" }, @@ -1086,9 +3336,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 16" }, @@ -1097,12 +3345,10 @@ } }, "node_modules/@noble/hashes": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", - "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", - "dev": true, + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", - "peer": true, "engines": { "node": "^14.21.3 || >=16" }, @@ -1190,553 +3436,1015 @@ "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", + "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", + "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", + "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", + "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", + "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", + "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", + "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", + "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", + "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", + "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", + "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz", - "integrity": "sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", + "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 18" + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz", - "integrity": "sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", + "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 18" + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz", - "integrity": "sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", + "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 18" + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz", - "integrity": "sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", + "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 18" + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz", - "integrity": "sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", + "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">= 18" + "node": ">= 12" } }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz", - "integrity": "sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A==", + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 18" + "peer": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" } }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", + "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" } }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" + "node_modules/@openzeppelin/contracts": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.3.0.tgz", + "integrity": "sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==", + "license": "MIT", + "peer": true + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz", + "integrity": "sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==", + "license": "MIT", + "peer": true + }, + "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { + "name": "@openzeppelin/contracts-upgradeable", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", + "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", + "license": "MIT", + "peer": true + }, + "node_modules/@openzeppelin/contracts-v0.7": { + "name": "@openzeppelin/contracts", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", + "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==", + "license": "MIT", + "peer": true + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, - "license": "MPL-2.0", + "license": "MIT", + "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" + "node": ">= 16" }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, - "license": "MPL-2.0", + "license": "MIT", + "peer": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" + "node": ">= 16" }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" + "engines": { + "node": ">=6" } }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", - "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "ethereumjs-util": "^7.1.4" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, - "peerDependencies": { - "hardhat": "^2.9.5" + "engines": { + "node": ">=6" } }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", - "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, - "license": "MIT", - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "chai": "^4.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.1.0", - "typescript": ">=4.5.0" + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", - "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + "engines": { + "node": ">=6" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", - "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "dev": true, - "license": "MIT", - "optional": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 12" + "node": ">=6" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", - "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, - "license": "MIT", - "optional": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, "engines": { - "node": ">= 12" + "node": ">=6" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", - "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", - "dev": true, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "license": "MIT", - "optional": true, "engines": { - "node": ">= 12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", - "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", - "dev": true, + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", "license": "MIT", - "optional": true, + "dependencies": { + "buffer": "~6.0.3" + }, "engines": { - "node": ">= 12" + "node": ">=5.10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", - "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", - "dev": true, + "node_modules/@solana/web3.js": { + "version": "1.95.8", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.95.8.tgz", + "integrity": "sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "dependencies": { + "@babel/runtime": "^7.25.0", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", - "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", - "dev": true, + "node_modules/@solana/web3.js/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "dependencies": { + "safe-buffer": "^5.0.1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", - "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", - "dev": true, + "node_modules/@solana/web3.js/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", "dev": true, "license": "MIT", "peer": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.8.tgz", - "integrity": "sha512-v5F6IzQhrsjHh6kQz4uNrym49brK9K5bYCq2zQZ729RYRaifI9hHbtmK+KkIVevfhut7huQFEQ77JLRMAzWYjQ==", - "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/@stargatefinance/stg-definitions-v2": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stargatefinance/stg-definitions-v2/-/stg-definitions-v2-3.0.0.tgz", + "integrity": "sha512-CPmjlVEdlgjzp2C+uZ6XOoKP1RpfEk2zHIFthCKRS53es8HwQCOCNnJZgxk67M9aZOwQ+tALQbDqVyyfrUwx0Q==" + }, + "node_modules/@stargatefinance/stg-evm-v1": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/@stargatefinance/stg-evm-v1/-/stg-evm-v1-1.0.33.tgz", + "integrity": "sha512-funR7QssJn+9m8tAO+2nMB2+9ke1FplY5/Jt1RGReFR4ZXhlMKWvbos4KNh7L6k6tu2c+9oQOjn8bPiGnGwmew==", + "license": "GPL-3.0-only", "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" + "exponential-backoff": "^3.1.1" } }, - "node_modules/@openzeppelin/contracts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.3.0.tgz", - "integrity": "sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==", - "license": "MIT", - "peer": true + "node_modules/@stargatefinance/stg-evm-v2": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stargatefinance/stg-evm-v2/-/stg-evm-v2-3.0.0.tgz", + "integrity": "sha512-qoeN9uFHd/ToDfVOlTfRgDVALuhQHpnrQLJnHj7f+PHCsQ359N9N58/hk0SC3AEBmKDx9U7knw4NQGc1EaVeTQ==", + "license": "BUSL-1.1", + "dependencies": { + "@layerzerolabs/lz-definitions": "~3.0.30", + "@layerzerolabs/lz-evm-messagelib-v2": "2.0.11", + "@layerzerolabs/lz-evm-oapp-v2": "~2.3.25", + "@layerzerolabs/lz-evm-protocol-v2": "2.0.11", + "@layerzerolabs/lz-evm-sdk-v2": "3.0.30", + "@layerzerolabs/lz-evm-v1-0.7": "~3.0.7", + "@layerzerolabs/lz-utilities": "~3.0.30", + "@layerzerolabs/lz-v2-utilities": "~3.0.30", + "@stargatefinance/stg-definitions-v2": "~3.0.0", + "@stargatefinance/stg-evm-v1": "~1.0.31", + "@types/sinon": "~17.0.3", + "ethers": "^5.7.2" + } }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.1.0.tgz", - "integrity": "sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==", - "license": "MIT", - "peer": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/@layerzerolabs/lz-evm-messagelib-v2": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-messagelib-v2/-/lz-evm-messagelib-v2-2.0.11.tgz", + "integrity": "sha512-i6nZvzxzH+3bMzGRxIzf6fFXTzxQIZ1vyduAoFTy3U2zK9xZUHunKFfpC+vqCY1goNzjBquX4VnClWMWlc5ZIA==", + "license": "LZBL-1.2", "peerDependencies": { - "@openzeppelin/contracts": "5.1.0" + "@axelar-network/axelar-gmp-sdk-solidity": "^5.6.3", + "@chainlink/contracts-ccip": "^0.7.6", + "@layerzerolabs/lz-evm-protocol-v2": "^2.0.11", + "@layerzerolabs/lz-evm-v1-0.7": "^2.0.11", + "@openzeppelin/contracts": "^4.8.1", + "@openzeppelin/contracts-upgradeable": "^4.8.1", + "hardhat-deploy": "^0.11.44", + "solidity-bytes-utils": "^0.8.0" } }, - "node_modules/@openzeppelin/contracts-upgradeable-4.7.3": { - "name": "@openzeppelin/contracts-upgradeable", - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz", - "integrity": "sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A==", - "license": "MIT", - "peer": true - }, - "node_modules/@openzeppelin/contracts-v0.7": { - "name": "@openzeppelin/contracts", - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz", - "integrity": "sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA==", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/@layerzerolabs/lz-evm-oapp-v2": { + "version": "2.3.44", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-oapp-v2/-/lz-evm-oapp-v2-2.3.44.tgz", + "integrity": "sha512-FNm9+OFKOl+/5JvpV6rMUoHZSePOcLtNJ+GHJuf38xPmEe0ehxFVQBw3iIfaH2dsWzRn/T7ZizV5ouId35FLdg==", "license": "MIT", - "peer": true + "peerDependencies": { + "@layerzerolabs/lz-evm-messagelib-v2": "^2.3.44", + "@layerzerolabs/lz-evm-protocol-v2": "^2.3.44", + "@layerzerolabs/lz-evm-v1-0.7": "^2.3.44", + "@openzeppelin/contracts": "^4.8.1 || ^5.0.0", + "@openzeppelin/contracts-upgradeable": "^4.8.1 || ^5.0.0", + "hardhat-deploy": "^0.12.4", + "solidity-bytes-utils": "^0.8.0" + } }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@stargatefinance/stg-evm-v2/node_modules/@layerzerolabs/lz-evm-protocol-v2": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@layerzerolabs/lz-evm-protocol-v2/-/lz-evm-protocol-v2-2.0.11.tgz", + "integrity": "sha512-hkcNheUjTOYNxoAnBTSatLLzLe71Y7kcmw1+56aazezyUb6SCu330V4sJg+jsp8Ag6Sb7y1tLLYn1Sa5EWgCxg==", + "license": "LZBL-1.2", + "peerDependencies": { + "@openzeppelin/contracts": "^4.8.1", + "hardhat-deploy": "^0.11.44", + "solidity-bytes-utils": "^0.8.0" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", - "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", - "dev": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "peer": true, "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 16" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", - "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", - "dev": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "peer": true, "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" }, "funding": { "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "peer": true, - "engines": { - "node": ">= 16" + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "peer": true + }, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/hardhat-deploy": { + "version": "0.11.45", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", + "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.14.3" + } + }, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=6" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=6" + "node": ">=8.10.0" } }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, + "node_modules/@stargatefinance/stg-evm-v2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@stargatefinance/stg-evm-v2/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@ton/core": { + "version": "0.59.1", + "resolved": "https://registry.npmjs.org/@ton/core/-/core-0.59.1.tgz", + "integrity": "sha512-SxFBAvutYJaIllTkv82vbHTJhJI6NxzqUhi499CDEjJEZ9i6i9lHJiK2df4dlLAb/4SiWX6+QUzESkK4DEdnCw==", + "license": "MIT", "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "symbol.inspect": "1.0.1" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@ton/crypto": ">=3.2.0" } }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, + "node_modules/@ton/crypto": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@ton/crypto/-/crypto-3.3.0.tgz", + "integrity": "sha512-/A6CYGgA/H36OZ9BbTaGerKtzWp50rg67ZCH2oIjV1NcrBaCK9Z343M+CxedvM7Haf3f/Ee9EhxyeTp0GKMUpA==", "license": "MIT", - "peer": true, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "@ton/crypto-primitives": "2.1.0", + "jssha": "3.2.0", + "tweetnacl": "1.0.3" + } + }, + "node_modules/@ton/crypto-primitives": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ton/crypto-primitives/-/crypto-primitives-2.1.0.tgz", + "integrity": "sha512-PQesoyPgqyI6vzYtCXw4/ZzevePc4VGcJtFwf08v10OevVJHVfW238KBdpj1kEDQkxWLeuNHEpTECNFKnP6tow==", + "license": "MIT", + "dependencies": { + "jssha": "3.2.0" + } + }, + "node_modules/@ton/ton": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@ton/ton/-/ton-15.1.0.tgz", + "integrity": "sha512-almetcfTu7jLjcNcEEPB7wAc8yl90ES1M//sOr1QE+kv7RbmEvMkaPSc7kFxzs10qrjIPKxlodBJlMSWP5LuVQ==", + "license": "MIT", + "dependencies": { + "axios": "^1.6.7", + "dataloader": "^2.0.0", + "symbol.inspect": "1.0.1", + "teslabot": "^1.3.0", + "zod": "^3.21.4" + }, + "peerDependencies": { + "@ton/core": ">=0.59.0", + "@ton/crypto": ">=3.2.0" } }, "node_modules/@tsconfig/node10": { @@ -1861,6 +4569,18 @@ "@types/node": "*" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/chai": { "version": "4.3.20", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", @@ -1891,6 +4611,15 @@ "@types/node": "*" } }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/form-data": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", @@ -1914,6 +4643,21 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", @@ -1941,7 +4685,6 @@ "version": "22.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -1972,6 +4715,15 @@ "license": "MIT", "peer": true }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/secp256k1": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", @@ -1982,6 +4734,36 @@ "@types/node": "*" } }, + "node_modules/@types/sinon": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", + "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -1990,6 +4772,18 @@ "license": "ISC", "peer": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -2047,6 +4841,18 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2170,6 +4976,63 @@ "node": ">= 8" } }, + "node_modules/aptos": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/aptos/-/aptos-1.21.0.tgz", + "integrity": "sha512-PRKjoFgL8tVEc9+oS7eJUv8GNxx8n3+0byH2+m7CP3raYOD6yFKOecuwjVMIJmgfpjp6xH0P0HDMGZAXmSyU0Q==", + "deprecated": "Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk", + "license": "Apache-2.0", + "dependencies": { + "@aptos-labs/aptos-client": "^0.1.0", + "@noble/hashes": "1.3.3", + "@scure/bip39": "1.2.1", + "eventemitter3": "^5.0.1", + "form-data": "4.0.0", + "tweetnacl": "1.0.3" + }, + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/aptos/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/aptos/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/aptos/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2259,8 +5122,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -2273,12 +5135,20 @@ "node": ">= 4.0.0" } }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/axios": { "version": "1.8.4", "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "license": "MIT", - "peer": true, "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2298,12 +5168,54 @@ "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", "license": "MIT" }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -2316,6 +5228,40 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip32": { + "version": "5.0.0-rc.0", + "resolved": "https://registry.npmjs.org/bip32/-/bip32-5.0.0-rc.0.tgz", + "integrity": "sha512-5hVFGrdCnF8GB1Lj2eEo4PRE7+jp+3xBLnfNjydivOkMvKmUKeJ9GG8uOy8prmWl3Oh154uzgfudR1FRkNBudA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.2.0", + "@scure/base": "^1.1.1", + "uint8array-tools": "^0.0.8", + "valibot": "^0.37.0", + "wif": "^5.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "license": "ISC", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -2329,6 +5275,35 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "license": "MIT" }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "license": "Apache-2.0", + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/borsh/node_modules/base-x": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/borsh/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -2469,6 +5444,12 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "license": "MIT" }, + "node_modules/browser-headers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/browser-headers/-/browser-headers-0.4.1.tgz", + "integrity": "sha512-CA9hsySZVo9371qEHjHZtYxV2cFtVj5Wj/ZHi8ooEsrtm4vOnl9Y9HmyYWk9q+05d7K3rdoAE0j3MVEFVvtQtg==", + "license": "Apache-2.0" + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -2532,6 +5513,30 @@ "base-x": "^3.0.2" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -2546,6 +5551,20 @@ "dev": true, "license": "MIT" }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/bufio": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bufio/-/bufio-1.2.2.tgz", @@ -2566,6 +5585,33 @@ "node": ">= 0.8" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2734,7 +5780,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -2848,6 +5893,18 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2883,7 +5940,6 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", - "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3047,7 +6103,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", @@ -3061,7 +6116,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", @@ -3088,9 +6142,34 @@ "license": "BSD-3-Clause", "peer": true, "engines": { - "node": "*" + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, + "node_modules/dataloader": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.3.tgz", + "integrity": "sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==", + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -3128,6 +6207,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-eql": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", @@ -3160,6 +6266,15 @@ "license": "MIT", "peer": true }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -3178,12 +6293,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.4.0" } @@ -3268,6 +6394,16 @@ "node": ">= 0.4" } }, + "node_modules/ed25519-hd-key": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ed25519-hd-key/-/ed25519-hd-key-1.3.0.tgz", + "integrity": "sha512-IWwAyiiuJQhgu3L8NaHb68eJxTu2pgCwxIBdgpLJdKpYZM46+AXePSVTr7fkNKaUOfOL4IrjEUaQvyVRIDP7fg==", + "license": "MIT", + "dependencies": { + "create-hmac": "1.1.7", + "tweetnacl": "1.0.3" + } + }, "node_modules/elliptic": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", @@ -3303,6 +6439,15 @@ "license": "MIT", "peer": true }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", @@ -3346,6 +6491,73 @@ "node": ">= 0.4" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -3391,6 +6603,21 @@ "source-map": "~0.2.0" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", @@ -3708,6 +6935,40 @@ "npm": ">=3" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -3719,6 +6980,29 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "license": "Apache-2.0" + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3753,6 +7037,21 @@ "license": "MIT", "peer": true }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", @@ -3772,6 +7071,12 @@ "reusify": "^1.0.4" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3867,7 +7172,6 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "license": "MIT", - "peer": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3914,6 +7218,20 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3978,6 +7296,21 @@ "node": ">=4" } }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ghost-testrpc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", @@ -4126,6 +7459,12 @@ "node": "*" } }, + "node_modules/google-protobuf": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", + "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==", + "license": "(BSD-3-Clause AND Apache-2.0)" + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -4139,6 +7478,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4550,7 +7914,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.4", @@ -4630,6 +7993,12 @@ "node": ">=6.0.0" } }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -4666,6 +8035,19 @@ "license": "MIT", "peer": true }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -4680,6 +8062,15 @@ "node": ">= 6" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4693,6 +8084,26 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4851,6 +8262,12 @@ "node": ">=8" } }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "license": "MIT" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -4880,6 +8297,53 @@ "license": "ISC", "peer": true }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jayson": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.2.0.tgz", + "integrity": "sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "stream-json": "^1.9.1", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "license": "MIT" + }, + "node_modules/jayson/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -4899,6 +8363,21 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jscrypto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/jscrypto/-/jscrypto-1.0.3.tgz", + "integrity": "sha512-lryZl0flhodv4SZHOqyb1bx5sKcJxj0VBo0Kzb4QMAg3L021IC9uGpl0RCZa+9KJwlRGSK2C80ITcwbe19OKLQ==", + "license": "MIT", + "bin": { + "jscrypto": "bin/cli.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -4917,6 +8396,12 @@ "node": ">=7.10.1" } }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -4938,11 +8423,19 @@ "node": "*" } }, + "node_modules/jssha": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-3.2.0.tgz", + "integrity": "sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/keccak": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -4954,6 +8447,26 @@ "node": ">=10.0.0" } }, + "node_modules/keccak256": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/keccak256/-/keccak256-1.0.6.tgz", + "integrity": "sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==", + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.0", + "buffer": "^6.0.3", + "keccak": "^3.0.2" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -5112,6 +8625,12 @@ "node": ">=8" } }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -5122,6 +8641,15 @@ "get-func-name": "^2.0.1" } }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -5129,6 +8657,15 @@ "dev": true, "license": "MIT" }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -5156,7 +8693,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -5164,6 +8700,25 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -5212,7 +8767,6 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -5222,7 +8776,6 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5230,6 +8783,15 @@ "node": ">= 0.6" } }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -5429,11 +8991,16 @@ "license": "MIT", "peer": true }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, "license": "MIT" }, "node_modules/node-emoji": { @@ -5447,11 +9014,30 @@ "lodash": "^4.17.21" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-gyp-build": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, "license": "MIT", "bin": { "node-gyp-build": "bin.js", @@ -5493,6 +9079,18 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/number-to-bn": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", @@ -5548,11 +9146,19 @@ "dev": true, "license": "MIT" }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -5595,6 +9201,15 @@ "node": ">=0.10.0" } }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5746,6 +9361,60 @@ "node": ">=6" } }, + "node_modules/pino": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz", + "integrity": "sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.2.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.6.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", + "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "license": "MIT", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/pino-abstract-transport/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==", + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -5773,6 +9442,15 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -5781,6 +9459,12 @@ "license": "MIT", "peer": true }, + "node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "license": "MIT" + }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -5792,12 +9476,45 @@ "asap": "~2.0.6" } }, + "node_modules/protobufjs": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", - "peer": true + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } }, "node_modules/qs": { "version": "6.13.1", @@ -5837,6 +9554,24 @@ "license": "MIT", "peer": true }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -5867,7 +9602,6 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -5892,6 +9626,15 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -6018,6 +9761,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, "node_modules/resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -6029,6 +9778,18 @@ "node": ">=4" } }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6045,7 +9806,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, "license": "MIT", "dependencies": { "hash-base": "^3.0.0", @@ -6065,6 +9825,38 @@ "rlp": "bin/rlp" } }, + "node_modules/rpc-websockets": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.1.3.tgz", + "integrity": "sha512-I+kNjW0udB4Fetr3vvtRuYZJS0PcSPyyvBcH5sDdoV8DFs5E4W2pTr7aiMlKfPxANTClP9RlqCPolj9dd5MsEA==", + "license": "LGPL-3.0-only", + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, + "node_modules/rpc-websockets/node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6090,11 +9882,25 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -6111,6 +9917,15 @@ ], "license": "MIT" }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6349,7 +10164,6 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", @@ -6646,6 +10460,15 @@ "node": ">=10" } }, + "node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -6681,6 +10504,15 @@ "node": ">=0.10.0" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6722,11 +10554,25 @@ "node": ">= 0.8" } }, + "node_modules/stream-chain": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/stream-chain/-/stream-chain-2.2.5.tgz", + "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", + "license": "BSD-3-Clause" + }, + "node_modules/stream-json": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.9.1.tgz", + "integrity": "sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==", + "license": "BSD-3-Clause", + "dependencies": { + "stream-chain": "^2.2.5" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -6794,6 +10640,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6808,6 +10663,12 @@ "node": ">=4" } }, + "node_modules/symbol.inspect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol.inspect/-/symbol.inspect-1.0.1.tgz", + "integrity": "sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==", + "license": "ISC" + }, "node_modules/sync-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", @@ -6892,6 +10753,17 @@ "node": ">=8" } }, + "node_modules/teslabot": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/teslabot/-/teslabot-1.5.0.tgz", + "integrity": "sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==", + "license": "MIT" + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -6941,6 +10813,28 @@ "node": ">= 0.12" } }, + "node_modules/thread-stream": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", + "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -7024,6 +10918,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, "node_modules/ts-command-line-args": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", @@ -7208,7 +11108,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true, "license": "Unlicense" }, "node_modules/tweetnacl-util": { @@ -7218,6 +11117,12 @@ "dev": true, "license": "Unlicense" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -7356,7 +11261,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "peer": true, "bin": { @@ -7393,6 +11298,15 @@ "node": ">=0.8.0" } }, + "node_modules/uint8array-tools": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.8.tgz", + "integrity": "sha512-xS6+s8e0Xbx++5/0L+yyexukU7pz//Yg6IHg3BKhXotg1JcYtgxVcUctQ0HxLByiJzpAkNFawz1Nz5Xadzo82g==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/undici": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", @@ -7410,7 +11324,6 @@ "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, "license": "MIT" }, "node_modules/universalify": { @@ -7433,6 +11346,20 @@ "node": ">= 0.8" } }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", @@ -7445,14 +11372,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -7466,6 +11391,20 @@ "license": "MIT", "peer": true }, + "node_modules/valibot": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.37.0.tgz", + "integrity": "sha512-FQz52I8RXgFgOHym3XHYSREbNtkgSjF9prvMFH1nBsRyfL6SfCzoT1GuSDTlbsuPubM7/6Kbw0ZMQb8A+V+VsQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/web3-utils": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", @@ -7515,6 +11454,22 @@ "@scure/bip39": "1.3.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7542,6 +11497,40 @@ "node": ">=8" } }, + "node_modules/wif": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/wif/-/wif-5.0.0.tgz", + "integrity": "sha512-iFzrC/9ne740qFbNjTZ2FciSRJlHIXoxqk/Y5EnE08QOXu1WjJyCCswwDTYbohAOEnlCtLaAAQBhyaLRFh2hMA==", + "license": "MIT", + "dependencies": { + "bs58check": "^4.0.0" + } + }, + "node_modules/wif/node_modules/base-x": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-5.0.1.tgz", + "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==", + "license": "MIT" + }, + "node_modules/wif/node_modules/bs58": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-6.0.0.tgz", + "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", + "license": "MIT", + "dependencies": { + "base-x": "^5.0.0" + } + }, + "node_modules/wif/node_modules/bs58check": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-4.0.0.tgz", + "integrity": "sha512-FsGDOnFg9aVI9erdriULkd/JjEWONV/lQE5aYziB5PoBsXRind56lh8doIZIc9X4HoxT5x4bLjMWN1/NB8Zp5g==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^6.0.0" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -7652,7 +11641,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/ws": { @@ -7770,6 +11758,26 @@ "peerDependencies": { "ethers": "~5.7.0" } + }, + "node_modules/zksync-web3": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", + "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", + "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", + "license": "MIT", + "peer": true, + "peerDependencies": { + "ethers": "^5.7.0" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/tools/layer-zero-example/package.json b/tools/layer-zero-example/package.json index 1f2077c1ea..c4873df8f2 100644 --- a/tools/layer-zero-example/package.json +++ b/tools/layer-zero-example/package.json @@ -10,6 +10,7 @@ "@layerzerolabs/lz-v2-utilities": "^3.0.22", "@layerzerolabs/oapp-evm": "^0.3.0", "@layerzerolabs/onft-evm": "^0.1.0", + "@stargatefinance/stg-evm-v2": "^3.0.0", "dotenv": "^16.4.7" }, "overrides": { From 41c1b9910f9d197421482c4e045dfd1dacb12c15 Mon Sep 17 00:00:00 2001 From: nikolay Date: Wed, 20 Aug 2025 11:04:58 +0300 Subject: [PATCH 09/10] chore: fix codacy Signed-off-by: nikolay --- .../test/stargateHtsConnectorExistingTokenTests.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js index ed718809e2..df286fe88c 100644 --- a/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js +++ b/tools/layer-zero-example/test/stargateHtsConnectorExistingTokenTests.js @@ -2,7 +2,7 @@ /* global describe, it */ -import { Options, addressToBytes32 } from '@layerzerolabs/lz-v2-utilities'; +import { addressToBytes32, Options } from '@layerzerolabs/lz-v2-utilities'; import { expect } from 'chai'; import hre from 'hardhat'; From 4d67e4c712e8d6a076ac5f80bc785cf61c0aa39e Mon Sep 17 00:00:00 2001 From: nikolay Date: Thu, 21 Aug 2025 09:34:06 +0300 Subject: [PATCH 10/10] chore: edit readme Signed-off-by: nikolay --- tools/layer-zero-example/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/layer-zero-example/README.md b/tools/layer-zero-example/README.md index 15f3639215..5bb178adb6 100644 --- a/tools/layer-zero-example/README.md +++ b/tools/layer-zero-example/README.md @@ -384,6 +384,7 @@ npx hardhat test --grep "WHBARTests @bsc @test" --network bsc_testnet ### Useful information: - The addresses of endpoints [here](https://github.com/hiero-ledger/hiero-json-rpc-relay/blob/1030-lz-setup/tools/layer-zero-example/hardhat.config.js#L60) are the official LZ endpoints. A entire list of LZ supported endpoints can be found on https://docs.layerzero.network/v2/developers/evm/technical-reference/deployed-contracts. +- Creating an HTS token with `create-hts-token` command executes token transfer under the hood, and the signer must have enabled "Max. Auto. Associations". This can be achieved using AccountUpdateTransaction via the Hedera SDK. More info can be found [here](https://docs.hedera.com/hedera/sdks-and-apis/sdks/accounts-and-hbar/update-an-account). ### HTS Adapter vs HTS Connector - You could use a HTS Adapter when you already have an existing HTS token on the fly.