From a88b28f17246e856b1ed2d3759e8a704437a3f7b Mon Sep 17 00:00:00 2001 From: Matej Poklemba Date: Tue, 16 Jan 2024 13:45:43 +0100 Subject: [PATCH 1/3] Update Solidity documentation --- .../200-solidity/200-generated-docs.mdx | 522 ++++++++++-------- 1 file changed, 281 insertions(+), 241 deletions(-) diff --git a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx index 3025b75c..fe96d8e4 100644 --- a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx +++ b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx @@ -2,24 +2,24 @@ import SolidityDetailBlock from '@site/src/components/SolidityDetailBlock'; import SolidityOutlineBlock from '@site/src/components/SolidityOutlineBlock'; import ContractHeader from '@site/src/components/ContractHeader'; -# Generated Docs +# Solidity Contracts -Solidity contracts provided as part of Paima Engine +Solidity contracts provided as part of Paima Engine. Core contracts State-annotated contracts Facilitating monetization ## Core contracts @@ -32,6 +32,8 @@ Facilitating monetization import "@paima/evm-contracts/contracts/PaimaL2Contract.sol"; ``` +The main L2 contract for a Paima L2. + - No description given + Sets the contract owner to `_owner` and payment fee to `_fee`. - No description given + Emits the `PaimaGameInteraction` event, logging the `msg.sender`, `data`, and `msg.value`. +Revert if `msg.value` is less than set `fee`. - No description given + Withdraws the contract balance to the `owner`. +Callable only by the contract owner. - No description given + Sets the `newOwner` as the contract owner. +Callable only by the contract owner. - No description given + Sets the `newFee` as the required payment fee. +Callable only by the contract owner. - No description given + Contract owner. - No description given + Amount in wei that is required to be paid when calling `paimaSubmitGameInput`. - No description given + Emitted when `paimaSubmitGameInput` function is called with `data`. +`userAddress` is the transaction sender and `value` is the transaction value. ## State-annotated contracts - - ### Nft + + ### AnnotatedMintNft ```solidity -import "@paima/evm-contracts/contracts/Nft.sol"; +import "@paima/evm-contracts/contracts/AnnotatedMintNft.sol"; ``` +A standard ERC721 that accepts calldata in the mint function for any initialization data needed in a Paima dApp. +Upon deployment only the contract owner (specified in constructor parameter) is able to mint tokens. Additional +minters (e.g. NativeNftSale contract) need to be added by using the `setMinter` function. + - No description given + Reverts if `msg.sender` is neither a minter nor the contract owner. - No description given + Reverts if the `tokenId` does not exist (has not been minted). - No description given + Reverts if `msg.sender` is not the specified token's owner. - contract constructor + Sets the NFT's `name`, `symbol`, `maxSupply` to `supply`, and transfers ownership to `owner`. +Also sets `currentTokenId` to 1 and `baseExtension` to `".json"`. - No description given + Returns true if this contract implements the interface defined by `interfaceID`. See EIP165. - No description given + Mints a new token to address `_to`, passing `initialData` to be emitted in the event. +Increases the `totalSupply` and `currentTokenId`. +Reverts if `totalSupply` is not less than `maxSupply` or if `_to` is a zero address. +Emits the `Minted` event. - No description given + Burns token of ID `_tokenId`. Callable only by the owner of the specified token. +Reverts if `_tokenId` is not existing. - No description given + Adds `_minter` to the mapping of allowed `minters` of this NFT. +Callable only by the contract owner. +Emits the `SetMinter` event. - No description given + Removes `_minter` from the mapping of allowed `minters` of this NFT. +Callable only by the contract owner. +Emits the `RemoveMinter` event. - Base URI for computing \{tokenURI\}. If set, the resulting URI for each -token will be the concatenation of the `baseURI` and the `tokenId`. Empty -by default, can be overridden in child contracts. + Returns the `baseURI` of this NFT. - See \{IERC721Metadata-tokenURI\}. + Returns the token URI of specified `tokenId`. - No description given + Sets `_URI` as the `baseURI` of the NFT. +Callable only by the contract owner. +Emits the `SetBaseURI` event. - No description given + Sets `_newBaseExtension` as the `baseExtension` of the NFT. +Callable only by the contract owner. - No description given + Sets `_maxSupply` as the `maxSupply` of the NFT. +Callable only by the contract owner. +Emits the `UpdateMaxSupply` event. - No description given + Returns true if specified `_tokenId` exists. - No description given + Returns true if `_account` is in the mapping of allowed `minters`. - No description given + The token ID that will be minted when calling the `mint` function. - No description given + Base URI that is used in the `tokenURI` function to form the start of the token URI. - No description given + Total token supply, increased by minting and decreased by burning. - No description given + Maximum amount of tokens that is allowed to exist. - No description given + Base extension that is used in the `tokenURI` function to form the end of the token URI. - No description given + Returns true for addresses that are allowed to mint this token. - No description given + Emitted when max supply is updated from `oldMaxSupply` to `newMaxSupply`. - No description given + Emitted when `newMinter` is added to the mapping of allowed `minters`. - No description given + Emitted when `oldMinter` is removed from the mapping of allowed `minters` - No description given + Emitted when `baseUri` is updated from `oldUri` to `newUri`. - No description given + Emitted when a new token with ID `tokenId` is minted, with `initialData` provided in the `mint` function parameters. ## Facilitating monetization @@ -769,6 +792,8 @@ by default, can be overridden in child contracts. import "@paima/evm-contracts/contracts/NativeNftSale.sol"; ``` +Facilitates selling NFTs that accepts extra data when buying for any initialization data needed in a Paima dApp. + - No description given + Initializes the contract with the requested price `_price` in native tokens for specified NFT `_nft`, +transferring ownership to the specified `owner`. +Callable only once. +Emits the `Initialized` event. - No description given + Purchases NFT for address `receiverAddress`, paying required price in native token. +This function calls the `mint` function on the `AnnotatedMintNft` contract, passing provided `initialData`. +Emits the `BuyNFT` event. - No description given + Changes the sale price to `_nftPrice`. +Callable only by the contract owner. +Emits the `UpdatePrice` event. - No description given + Withdraws the contract balance to `_account`. +Callable only by the contract owner. - No description given + Upgrades the contract implementation to `_newContract`. +Callable only by the contract owner. - No description given + Function allowing the contract to receive native tokens. - No description given + Emitted when the contract is initialized. - No description given - - - - No description given + Emitted when the NFT price is updated from `oldPrice` to `newPrice`. - No description given + Emitted when an NFT of `tokenId` is minted to `receiver` by `buyer` paying `PRICE` in native tokens. @@ -1009,6 +1030,8 @@ import "@paima/evm-contracts/contracts/NativeNftSale.sol"; import "@paima/evm-contracts/contracts/GenericPayment.sol"; ``` +Facilitates accepting payment that accepts extra data to know what the payment was for inside a Paima dApp. + - No description given + Initializes the contracts, transferring ownership to the specified `owner`. +Callable only once. +Emits the `Initialized` event. - No description given + Transfers native tokens to the contract, providing `message`. +Emits the `Pay` event. - No description given + Withdraws the contract balance to `_account`. +Callable only by the contract owner. - No description given + Upgrades the contract implementation to `_newContract`. +Callable only by the contract owner. - No description given + True if contract has been initialized via the `initialize` function. - No description given + Emitted when the contract is initialized. - No description given + Emitted when payment of `amount` if made by `payer` with `message`. @@ -1188,6 +1216,8 @@ import "@paima/evm-contracts/contracts/GenericPayment.sol"; import "@paima/evm-contracts/contracts/Erc20NftSale.sol"; ``` +Facilitates selling NFTs for specific ERC20s that accepts extra data when buying for any initialization data needed in a Paima dApp. + - No description given + Initializes the contract with the requested price `_price` in tokens of `currencies` for specified NFT `_nft`, +transferring ownership to the specified `owner`. +Callable only once. +Emits the `Initialized` event. - Purchases an NFT using approved token. NFTs are sold based on FIFO + Purchases NFT for address `receiverAddress`, paying required price in token of `_tokenAddress`, +if it is one of the `supportedCurrencies`. +This function calls the `mint` function on the `AnnotatedMintNft` contract, passing provided `initialData`. +Emits the `BuyWithToken` event. - No description given + Removes `_token` from the list of `supportedCurrencies`. +Callable only by the contract owner. +Emits the `RemoveWhitelistedToken` event. - No description given + Sets `_tokens` array as the `supportedCurrencies` array. +Callable only by the contract owner. +Emits the `WhitelistTokens` event. - No description given + Changes the sale price to `_nftPrice`. +Callable only by the contract owner. +Emits the `UpdatePrice` event. - No description given + Withdraws the contract balance of `depositedCurrencies` to `_account`. +Callable only by the contract owner. - No description given + Upgrades the contract implementation to `_newContract`. +Callable only by the contract owner. - No description given + Returns true if `_token` is part of the `supportedCurrencies`. - No description given + Returns the token addresses that have been used as a payment in the NFT purchases. - No description given + Returns an array of token addresses that are accepted as payment in the NFT purchase. - No description given + Emitted when the contract is initialized. - No description given - - - - No description given + Emitted when the NFT price is updated from `oldPrice` to `newPrice`. - No description given + Emitted when the `token` is removed from the list of `supportedCurrencies`. - No description given + Emitted when the `token` array is set as the `supportedCurrencies`. - No description given + Emitted when an NFT of `tokenId` is minted to `receiver` by `buyer` paying `PRICE` in tokens of `supportedCurrencies`. ## Utilities @@ -1550,7 +1581,7 @@ import "@paima/evm-contracts/contracts/BaseState.sol"; visibility="public" anchor="xref-BaseState-nftPrice-uint256" > - No description given + Required payment for the NFT in sale. - No description given + True if contract has been initialized via `initialize` function. - No description given + Address of the NFT for sale. @@ -1621,7 +1652,7 @@ import "@paima/evm-contracts/contracts/State.sol"; visibility="public" anchor="xref-State-nftPrice-uint256" > - No description given + Required payment for the NFT in sale. - No description given + True if contract has been initialized via `initialize` function. - No description given + Address of the NFT for sale. - No description given + Array of addresses of tokens that have been deposited to the contract via NFT sales. - No description given + Mapping that returns true for address of token that has been deposited to the contract via NFT sale. - No description given + Array of addresses of tokens that are accepted as payment for the NFT sale. @@ -1731,12 +1762,12 @@ Made as a small subset of https://github.com/OpenZeppelin/openzeppelin-contracts Stores a new address in the EIP1967 implementation slot. - - ### NativeProxy + + ### NativeNftSaleProxy ```solidity -import "@paima/evm-contracts/contracts/Proxy/NativeProxy.sol"; +import "@paima/evm-contracts/contracts/Proxy/NativeNftSaleProxy.sol"; ``` Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Proxy.sol @@ -1749,23 +1780,23 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont lines: [ { text: "constructor(implementation, owner, nftAddress, nftPrice)", - anchor: "xref-NativeProxy-constructor-address-address-address-uint256-" + anchor: "xref-NativeNftSaleProxy-constructor-address-address-address-uint256-" }, { text: "_delegate(target)", - anchor: "xref-NativeProxy-_delegate-address-" + anchor: "xref-NativeNftSaleProxy-_delegate-address-" }, { text: "_fallback()", - anchor: "xref-NativeProxy-_fallback--" + anchor: "xref-NativeNftSaleProxy-_fallback--" }, { text: "fallback()", - anchor: "xref-NativeProxy-fallback--" + anchor: "xref-NativeNftSaleProxy-fallback--" }, { text: "receive()", - anchor: "xref-NativeProxy-receive--" + anchor: "xref-NativeNftSaleProxy-receive--" }, ] }, @@ -1794,17 +1825,17 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont title="constructor" params="(address implementation, address owner, address nftAddress, uint256 nftPrice)" visibility="public" - anchor="xref-NativeProxy-constructor-address-address-address-uint256-" + anchor="xref-NativeNftSaleProxy-constructor-address-address-address-uint256-" > - this is normally not needed as runtime bytecode is deployed in -genesis file and implementation storage slot defined there too + Sets `implementation` address and calls the `NativeNftSale.initialize` function with the parameters +`owner`, `nftAddress`, `nftPrice`. Delegates the current call to `implementation`. This function does not return to its internal call site, it will return @@ -1815,35 +1846,38 @@ directly to the external caller. title="_fallback" params="()" visibility="internal" - anchor="xref-NativeProxy-_fallback--" + anchor="xref-NativeNftSaleProxy-_fallback--" > - No description given + Delegates the current call to the address returned by `_implementation()`. +This function does not return to its internal call site, it will return +directly to the external caller. - No description given + Fallback function that delegates calls to the address returned by `_implementation()`. +Will run if no other function in the contract matches the call data. - No description given + Called if this contract is receiving native tokens and `msg.data` is empty - - ### Proxy + + ### GenericPaymentProxy ```solidity -import "@paima/evm-contracts/contracts/Proxy/Proxy.sol"; +import "@paima/evm-contracts/contracts/Proxy/GenericPaymentProxy.sol"; ``` Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Proxy.sol @@ -1855,24 +1889,20 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont category: "", lines: [ { - text: "constructor(implementation, currencies, owner, nftAddress, nftPrice)", - anchor: "xref-Proxy-constructor-address-contract-ERC20---address-address-uint256-" + text: "constructor(implementation, owner)", + anchor: "xref-GenericPaymentProxy-constructor-address-address-" }, { text: "_delegate(target)", - anchor: "xref-Proxy-_delegate-address-" + anchor: "xref-GenericPaymentProxy-_delegate-address-" }, { text: "_fallback()", - anchor: "xref-Proxy-_fallback--" + anchor: "xref-GenericPaymentProxy-_fallback--" }, { text: "fallback()", - anchor: "xref-Proxy-fallback--" - }, - { - text: "receive()", - anchor: "xref-Proxy-receive--" + anchor: "xref-GenericPaymentProxy-fallback--" }, ] }, @@ -1899,19 +1929,19 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont - this is normally not needed as runtime bytecode is deployed in -genesis file and implementation storage slot defined there too + Sets `implementation` address and calls the `GenericPayment.initialize` function with the parameter +`owner`. Delegates the current call to `implementation`. This function does not return to its internal call site, it will return @@ -1922,35 +1952,29 @@ directly to the external caller. title="_fallback" params="()" visibility="internal" - anchor="xref-Proxy-_fallback--" + anchor="xref-GenericPaymentProxy-_fallback--" > - No description given + Delegates the current call to the address returned by `_implementation()`. +This function does not return to its internal call site, it will return +directly to the external caller. - No description given - - - - No description given + Fallback function that delegates calls to the address returned by `_implementation()`. +Will run if no other function in the contract matches the call data. - - ### GenericPaymentProxy + + ### Erc20NftSaleProxy ```solidity -import "@paima/evm-contracts/contracts/Proxy/GenericPaymentProxy.sol"; +import "@paima/evm-contracts/contracts/Proxy/Erc20NftSaleProxy.sol"; ``` Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/Proxy.sol @@ -1962,20 +1986,24 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont category: "", lines: [ { - text: "constructor(implementation, owner)", - anchor: "xref-GenericPaymentProxy-constructor-address-address-" + text: "constructor(implementation, currencies, owner, nftAddress, nftPrice)", + anchor: "xref-Erc20NftSaleProxy-constructor-address-contract-ERC20---address-address-uint256-" }, { text: "_delegate(target)", - anchor: "xref-GenericPaymentProxy-_delegate-address-" + anchor: "xref-Erc20NftSaleProxy-_delegate-address-" }, { text: "_fallback()", - anchor: "xref-GenericPaymentProxy-_fallback--" + anchor: "xref-Erc20NftSaleProxy-_fallback--" }, { text: "fallback()", - anchor: "xref-GenericPaymentProxy-fallback--" + anchor: "xref-Erc20NftSaleProxy-fallback--" + }, + { + text: "receive()", + anchor: "xref-Erc20NftSaleProxy-receive--" }, ] }, @@ -2002,19 +2030,19 @@ Proxy contract mostly based on https://github.com/OpenZeppelin/openzeppelin-cont - this is normally not needed as runtime bytecode is deployed in -genesis file and implementation storage slot defined there too + Sets `implementation` address and calls the `Erc20NftSale.initialize` function with the parameters +`currencies`, `owner`, `nftAddress`, `nftPrice`. Delegates the current call to `implementation`. This function does not return to its internal call site, it will return @@ -2025,17 +2053,29 @@ directly to the external caller. title="_fallback" params="()" visibility="internal" - anchor="xref-GenericPaymentProxy-_fallback--" + anchor="xref-Erc20NftSaleProxy-_fallback--" > - No description given + Delegates the current call to the address returned by `_implementation()`. +This function does not return to its internal call site, it will return +directly to the external caller. + Fallback function that delegates calls to the address returned by `_implementation()`. +Will run if no other function in the contract matches the call data. + + + - No description given + Called if this contract is receiving native tokens and `msg.data` is empty From bddd5538f6af58f55e6b4202db0a273113554275 Mon Sep 17 00:00:00 2001 From: Matej Poklemba Date: Wed, 17 Jan 2024 10:05:36 +0100 Subject: [PATCH 2/3] Update again --- .../100-evm-contracts/200-solidity/200-generated-docs.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx index fe96d8e4..9b746fec 100644 --- a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx +++ b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx @@ -1360,7 +1360,7 @@ Facilitates selling NFTs for specific ERC20s that accepts extra data when buying anchor: "xref-Erc20NftSale-RemoveWhitelistedToken-address-" }, { - text: "WhitelistTokens(token)", + text: "WhitelistTokens(tokens)", anchor: "xref-Erc20NftSale-WhitelistTokens-address---" }, { @@ -1433,7 +1433,7 @@ Emits the `RemoveWhitelistedToken` event. visibility="external" anchor="xref-Erc20NftSale-whitelistTokens-contract-ERC20---" > - Sets `_tokens` array as the `supportedCurrencies` array. + Adds `_tokens` to the `supportedCurrencies` array. Callable only by the contract owner. Emits the `WhitelistTokens` event. @@ -1525,11 +1525,11 @@ Callable only by the contract owner. - Emitted when the `token` array is set as the `supportedCurrencies`. + Emitted when the `tokens` are added as the `supportedCurrencies`. Date: Wed, 17 Jan 2024 21:38:53 +0900 Subject: [PATCH 3/3] Fix link references --- docs/home/1-setup/1-how-to-use-paima-engine.md | 2 +- .../10000-libraries/100-evm-contracts/1-introduction.md | 2 +- .../100-evm-contracts/200-solidity/200-generated-docs.mdx | 2 +- .../50-smart-contracts/200-evm/300-deploy-stateful-nft.md | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/home/1-setup/1-how-to-use-paima-engine.md b/docs/home/1-setup/1-how-to-use-paima-engine.md index 7af88a12..77e0f98b 100644 --- a/docs/home/1-setup/1-how-to-use-paima-engine.md +++ b/docs/home/1-setup/1-how-to-use-paima-engine.md @@ -158,7 +158,7 @@ These logs denote the block height numbers that the game node is syncing from th Now that your game node is syncing, we recommend testing to ensure that both the contract you deployed and the node itself are all in working order/configured properly. -Simply follow the [posting test game inputs to L2 contract tutorial](../200-read-write-L2-state/4-posting-test-game-inputs.md) and within a couple minutes you'll have experienced the end-to-end loop of using Paima Engine! +Simply follow the [posting test game inputs to L2 contract tutorial](../200-read-write-L2-state/20-write-data.md#writing-data-from-an-external-source) and within a couple minutes you'll have experienced the end-to-end loop of using Paima Engine! Of note, the above tutorial teaches you an easy way to manually submit custom-crafted game inputs, which is also useful when implementing new features as you develop your games/apps. diff --git a/docs/home/10000-libraries/100-evm-contracts/1-introduction.md b/docs/home/10000-libraries/100-evm-contracts/1-introduction.md index 90cf48a8..a1d1114e 100644 --- a/docs/home/10000-libraries/100-evm-contracts/1-introduction.md +++ b/docs/home/10000-libraries/100-evm-contracts/1-introduction.md @@ -7,7 +7,7 @@ NPM package: [@paima/evm-contracts](https://www.npmjs.com/package/@paima/evm-con This package contains 3 core folders: -- [`contracts`](./200-solidity/introduction.md) which holds all the Solidity contracts for Paima +- [`contracts`](./200-solidity/200-generated-docs.mdx) which holds all the Solidity contracts for Paima - `abi` which holds the ABI for all the contracts - [`plugin`](./300-hardhat-tasks.md) which contains a Hardhat plugin containing [Hardhat tasks](https://hardhat.org/hardhat-runner/docs/advanced/create-task) to easily interact with these contracts from the command line diff --git a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx index 9b746fec..0ee63742 100644 --- a/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx +++ b/docs/home/10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx @@ -2,7 +2,7 @@ import SolidityDetailBlock from '@site/src/components/SolidityDetailBlock'; import SolidityOutlineBlock from '@site/src/components/SolidityOutlineBlock'; import ContractHeader from '@site/src/components/ContractHeader'; -# Solidity Contracts +# Generated Docs Solidity contracts provided as part of Paima Engine. diff --git a/docs/home/50-smart-contracts/200-evm/300-deploy-stateful-nft.md b/docs/home/50-smart-contracts/200-evm/300-deploy-stateful-nft.md index 34af08ee..21a583cf 100644 --- a/docs/home/50-smart-contracts/200-evm/300-deploy-stateful-nft.md +++ b/docs/home/50-smart-contracts/200-evm/300-deploy-stateful-nft.md @@ -1,6 +1,6 @@ # Deploying a Stateful NFT -Paima Engine supports both standard NFT contracts (such as [ERC721](https://eips.ethereum.org/EIPS/eip-721)) and [Paima Extended ERC721 NFT](../../10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx#Nft) contracts for Stateful NFTs. +Paima Engine supports both standard NFT contracts (such as [ERC721](https://eips.ethereum.org/EIPS/eip-721)) and [Paima Extended ERC721 NFT](../../10000-libraries/100-evm-contracts/200-solidity/200-generated-docs.mdx#AnnotatedMintNft) contracts for Stateful NFTs. To provide developers more power in customizing how Stateful NFTs are initialized in their game, we have extended the ERC721 standard to allow selecting a pre-defined string when minting the NFT. This string gets routed through the Paima stack and ends up as a part of the scheduled input which your STF reads to initialize the NFT state (ex. "Warrior", "Mage", "Archer"). @@ -35,9 +35,9 @@ Add the following to your `hardhat.config.ts` config: ```ts dependencyCompiler: { paths: [ - '@paima/evm-contracts/contracts/Nft.sol', + '@paima/evm-contracts/contracts/AnnotatedMintNft.sol', '@paima/evm-contracts/contracts/NativeNftSale.sol', - '@paima/evm-contracts/contracts/Proxy/NativeProxy.sol', + '@paima/evm-contracts/contracts/Proxy/NativeNftSaleProxy.sol', ], }, ```