diff --git a/docs/build/_partials/_metamask_buttons.mdx b/docs/build/_partials/_metamask_buttons.mdx
index 52fec8cf14f..f4f28683502 100644
--- a/docs/build/_partials/_metamask_buttons.mdx
+++ b/docs/build/_partials/_metamask_buttons.mdx
@@ -3,7 +3,10 @@ import { Networks } from '@theme/constant';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
-
+
+
+
+
diff --git a/docs/build/_partials/_oracles_contract_data.md b/docs/build/_partials/_oracles_contract_data.md
new file mode 100644
index 00000000000..2c0183b08e1
--- /dev/null
+++ b/docs/build/_partials/_oracles_contract_data.md
@@ -0,0 +1,37 @@
+import { AddToMetaMaskButton } from '@theme/AddToMetaMaskButton';
+import { Networks } from '@theme/constant';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+| Contract Type | Contract Address |
+|:----------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
+| Pyth contract | [https://explorer.evm.iota.org/address/0x8D254a21b3C86D32F7179855531CE99164721933](https://explorer.evm.iota.org/address/0x8D254a21b3C86D32F7179855531CE99164721933) |
+| Supra Pull Contract | [https://explorer.evm.iota.org/address/0x2FA6DbFe4291136Cf272E1A3294362b6651e8517](https://explorer.evm.iota.org/address/0x2FA6DbFe4291136Cf272E1A3294362b6651e8517) |
+| Supra Storage Contract | [https://explorer.evm.iota.org/address/0xD02cc7a670047b6b012556A88e275c685d25e0c9](https://explorer.evm.iota.org/address/0xD02cc7a670047b6b012556A88e275c685d25e0c9) |
+| Supra Push Contract | [https://explorer.evm.iota.org/address/0xD02cc7a670047b6b012556A88e275c685d25e0c9](https://explorer.evm.iota.org/address/0xD02cc7a670047b6b012556A88e275c685d25e0c9) |
+
+
+
+
+| Contract Type | Contract Address |
+|:----------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------:|
+| Pyth contract | [https://explorer.evm.shimmer.network/address/0x290f23E4a034Db5237edCb5aA2D94Acb4DD19fD2](https://explorer.evm.shimmer.network/address/0x290f23E4a034Db5237edCb5aA2D94Acb4DD19fD2) |
+| Supra Pull Contract | [https://explorer.evm.shimmer.network/address/0xe41444462709484272F54371F3f53bBF900Ec49E](https://explorer.evm.shimmer.network/address/0xe41444462709484272F54371F3f53bBF900Ec49E) |
+| Supra Storage Contract | [https://explorer.evm.shimmer.network/address/0x3E5E89d14576cE9f20a8347aA682517fe65B4ACB](https://explorer.evm.shimmer.network/address/0x3E5E89d14576cE9f20a8347aA682517fe65B4ACB) |
+| Supra Push Contract | [https://explorer.evm.shimmer.network/address/0x3df842b27c997cEc63160E79CB4398c82645A1c3](https://explorer.evm.shimmer.network/address/0x3df842b27c997cEc63160E79CB4398c82645A1c3) |
+
+
+
+
+:::tip Oracle Documentation
+
+You can find detailed documentation on the Oracles in their official documentation:
+
+* [Pyth Oracle Docs](https://docs.pyth.network/price-feeds/contract-addresses/evm)
+* [Supra Pull Docs](https://gb-docs.supraoracles.com/docs/data-feeds/pull-model/networks)
+* [Supra Push Docs](https://gb-docs.supraoracles.com/docs/data-feeds/decentralized/networks)
+
+:::
diff --git a/docs/build/getting-started/blastAPI.md b/docs/build/getting-started/blastAPI.md
new file mode 100644
index 00000000000..2bd2e188ac9
--- /dev/null
+++ b/docs/build/getting-started/blastAPI.md
@@ -0,0 +1,42 @@
+---
+description: Blast API is a decentralized platform providing scalable node infrastructure for accessing blockchain data, supporting multiple networks including IOTA EVM.
+keywords:
+ - IOTA EVM
+ - blockchain API
+ - decentralized
+ - node infrastructure
+ - tools
+ - Blast api
+ - archive node
+image: /img/logo/WASP_logo_dark.png
+---
+
+# Blast API
+
+[Blast API](https://blastapi.io/) is a decentralized platform that provides reliable and scalable node infrastructure
+for accessing blockchain data. It supports multiple blockchain networks, offering seamless integration and
+high-performance API endpoints for cross-chain decentralized applications (dApps).
+
+## Enhanced Performance and Reliability
+
+Blast API uses a decentralized network of third-party node providers, that ensure high availability and fast response
+times. This architecture provides resilient infrastructure services crucial for dApps requiring real-time data access.
+
+## Multi-Blockchain Support
+
+Besides IOTA EVM, Blast API supports a wide range of blockchain networks, allowing access to multiple blockchains
+through a single unified platform, therefore simplifying the development process and expanding the potential use cases
+for dApps.
+
+## Archival Nodes
+
+Blast API includes archival nodes, which store all historical transaction data from the blockchain’s
+genesis block to the present. This allows developers to query and retrieve past information, which is essential for
+applications needing access to comprehensive blockchain histories.
+
+
+:::tip Blast API Endpoints
+
+You can find a full list of Blast API endpoints in the [Networks & Endpoints section](networks-endpoints.mdx).
+
+:::
diff --git a/docs/build/getting-started/multicall.md b/docs/build/getting-started/multicall.md
new file mode 100644
index 00000000000..820ad311581
--- /dev/null
+++ b/docs/build/getting-started/multicall.md
@@ -0,0 +1,194 @@
+---
+description: 'Multicall3 allows you to bundle multiple calls to various contracts, for both reading and writing data, into a single transaction.'
+image: /img/logo/WASP_logo_dark.png
+---
+
+# Multicall3
+## Powering Efficient Batch Transactions on L2 Networks
+
+Multicall3 is a smart contract on the Ethereum Virtual Machine (EVM) that streamlines transactions. It allows you to bundle multiple calls to various contracts, for both reading and writing data, into a single transaction.
+
+This can be particularly useful when working with decentralized applications that require multiple contract interactions or when batching multiple calls to save on gas costs. To use the Multicall3 contract on IOTA EVM, the Multicall3 contract is deployed at this address: [0xcA11bde05977b3631167028862bE2a173976CA11](https://explorer.evm.iota.org/address/0xcA11bde05977b3631167028862bE2a173976CA11?tab=write_contract).
+
+This contract offers significant advantages for optimizing transaction processing on L2 networks, also known as Layer 2 scaling solutions. Here's how Multicall3 enhances efficiency:
+
+- **Reduced Gas Costs:** By grouping calls together, Multicall3 minimizes the total gas fees associated with interacting with the blockchain. Gas refers to the computational effort required to execute a transaction on the network.
+
+- **Guaranteed Data Consistency:** Multicall3 fetches data from a single block on the blockchain, ensuring that all the information you receive reflects a consistent state. This eliminates discrepancies that might arise from fetching data across separate transactions.
+
+- **Faster Execution Speeds:** You no longer need to wait for individual transactions to be confirmed one by one. Multicall3 processes everything efficiently in a single transaction, significantly speeding up the overall process.
+
+- **Simplified Workflows:** Multicall3 removes the complexity of worrying about the order in which transactions are processed, eliminating potential issues caused by race conditions. Race conditions occur when multiple transactions compete for resources, and the outcome can depend on the order they are executed.
+
+- **All-or-Nothing Execution:** Multicall3 ensures data integrity by functioning on an all-or-nothing basis. This means that either all the calls within the Multicall3 transaction succeed, or none of them do. This prevents partial execution and maintains data consistency.
+
+:::tip
+
+You can find the ABI of the contract in the [Multicall3 website](https://www.multicall3.com/abi).
+
+:::
+
+
+## Contract Information
+
+### Function: aggregate
+
+#### Description:
+ This function aggregates the results of multiple function calls made to different contracts within a single transaction.
+
+```solidity
+function aggregate(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData);
+```
+
+
+|Parameter Name | Description|
+|-----------|---------------------------------------------------------------------
+| calls (Call[] calldata) | An array of Call structs. Each Call struct contains the target contract address (address) and the encoded function call data (bytes).|
+
+#### Return Values:
+ - blockNumber (uint256): The block number where the calls were executed.
+ - returnData (bytes[] memory): An array of bytes containing the return data from each call.
+
+### Function: tryAggregate
+
+#### Description:
+ This function performs a similar function to `aggregate` but allows individual calls to fail without halting the entire execution.
+
+
+```solidity
+function tryAggregate(bool requireSuccess, Call[] calldata calls) public payable returns (Result[] memory returnData);
+```
+
+| Parameter Name | Description |
+|----------------|-----------------------------------------------------------------------------|
+| requireSuccess (bool) | A boolean flag indicating whether all calls must succeed (true) or if failures are allowed (false). |
+| calls (Call[] calldata) | An array of Call structs. Each Call struct contains the target contract address (address) and the encoded function call data (bytes). |
+
+
+#### Return Values:
+returnData (Result[] memory): An array of Result structs. Each Result struct contains a bool indicating success (success) and the return data for the corresponding call (bytes returnData).
+
+### Function: tryBlockAndAggregate
+
+#### Description:
+ This function combines features of `tryAggregate` and retrieves additional block information.
+
+
+```solidity
+function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls)
+ public
+ payable
+ returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData);
+```
+
+| Parameter Name | Description |
+|----------------|-----------------------------------------------------------------------------|
+| requireSuccess (bool) | A boolean flag indicating whether all calls must succeed (true) or if failures are allowed (false). |
+| calls (Call[] calldata) | An array of Call structs. Each Call struct contains the target contract address (address) and the encoded function call data (bytes). |
+
+#### Return Values:
+ - blockNumber (uint256): The block number where the calls were executed.
+ - blockHash (bytes32): The hash of the block where the calls were executed.
+ - returnData (Result[] memory): An array of Result structs, as defined in tryAggregate.
+
+
+### Function: blockAndAggregate
+
+#### Description:
+This function is a simplified version of `tryBlockAndAggregate` that always requires all calls to succeed.
+
+```solidity
+function blockAndAggregate(Call[] calldata calls)
+ public
+ payable
+ returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData);
+```
+
+|Parameter Name | Description|
+|-----------|---------------------------------------------------------------------
+| calls (Call[] calldata) | An array of Call structs, as defined in aggregate.|
+
+#### Return Values:
+ - blockNumber (uint256): The block number where the calls were executed.
+ - blockHash (bytes32): The hash of the block where the calls were executed.
+ - returnData (Result[] memory): An array of Result structs, as defined in tryAggregate.
+
+
+### Function: aggregate3
+#### Description:
+This function aggregates calls similar to `aggregate` but allows specifying whether failures are allowed for each call individually.
+
+```solidity
+function aggregate3(Call3[] calldata calls) public payable returns (Result[] memory returnData);
+```
+
+|Parameter Name | Description|
+|-----------|---------------------------------------------------------------------
+| calls (Call[] calldata) | An array of Call3 structs. Each Call3 struct includes the target contract address (address), a flag indicating if failure is allowed (bool allowFailure), and the encoded function call data (bytes callData).|
+
+#### Return Values:
+ - returnData (Result[] memory): An array of Result structs, as defined in `tryAggregate`.
+
+
+### Function: aggregate3Value
+#### Description:
+This function aggregates calls with a specified value for each call, allowing sending funds along with the call data. It ensures the total sent value matches the sum of individual call values.
+
+
+```solidity
+function aggregate3Value(Call3Value[] calldata calls) public payable returns (Result[] memory returnData);
+```
+
+|Parameter Name | Description|
+|-----------|---------------------------------------------------------------------
+| calls (Call[] calldata) | An array of Call3Value structs. Each Call3Value struct includes the target contract address (address), a flag indicating if failure is allowed (bool allowFailure), the value to send along with the call (uint256 value), and the encoded function call data (bytes callData).
+
+#### Return Values:
+ - returnData (Result[] memory): An array of Result structs, as defined in `tryAggregate`.
+
+
+
+ ## Additional Functions
+The contract also includes several view functions that retrieve blockchain data without modifying the state:
+
+- `getBlockHash(uint256 blockNumber)`: Returns the block hash for a given block number.
+- `getBlockNumber()`: Returns the current block number.
+- `getCurrentBlockCoinbase()`: Returns the address of the block miner (coinbase).
+- `getCurrentBlockDifficulty()`: Returns the difficulty of the current block.
+- `getCurrentBlockGasLimit()`: Returns the gas limit of the current block.
+- `getCurrentBlockTimestamp()`: Returns
+
+## Structs
+
+- Call
+```solidity
+struct Call {
+ address target;
+ bytes callData;
+}
+```
+- Call3
+```solidity
+struct Call3 {
+ address target;
+ bool allowFailure;
+ bytes callData;
+}
+
+```
+- Call3 Value
+```solidity
+struct Call3Value {
+ address target;
+ bool allowFailure;
+ uint256 value;
+ bytes callData;
+}
+```
+- Result
+```solidity
+struct Result {
+ bool success;
+ bytes returnData;
+}
+```
\ No newline at end of file
diff --git a/docs/build/getting-started/networks-endpoints.mdx b/docs/build/getting-started/networks-endpoints.mdx
index 714c125449a..bb5632d2e93 100644
--- a/docs/build/getting-started/networks-endpoints.mdx
+++ b/docs/build/getting-started/networks-endpoints.mdx
@@ -16,7 +16,6 @@ tags:
import { AddToMetaMaskButton } from '@theme/AddToMetaMaskButton';
import { Networks } from '@theme/constant';
import NetworkInfo from '@theme/NetworkInfo';
-import { ChainId } from '@theme/ChainId';
# Networks & Endpoints
@@ -41,6 +40,18 @@ This network runs under a [Coordinator PoA scheme](/learn/protocols/coordinator/
+### IOTA EVM
+
+[IOTA EVM](https://explorer.evm.iota.org) is the L2 EVM running on top of the IOTA network.
+
+
+
+
+
+#### Additional Info
+
+
+
## IOTA Testnet
[The IOTA Testnet](https://explorer.iota.org/iota-testnet) acts as a test bed for builders without any real world value.
@@ -64,6 +75,7 @@ This network is subject to occasional resets (no data retention) which are usual
+
#### Additional Info
diff --git a/docs/build/getting-started/oracles.md b/docs/build/getting-started/oracles.md
index 2ababe9d917..4d1860fdd80 100644
--- a/docs/build/getting-started/oracles.md
+++ b/docs/build/getting-started/oracles.md
@@ -4,10 +4,15 @@ image: /img/logo/WASP_logo_dark.png
tags:
- Blockchain Oracles
- Smart Contracts
+- IOTA EVM
- Shimmer EVM
- Pyth Network
- Supra Oracles
---
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import OraclesContractData from '../_partials/_oracles_contract_data.md'
+
# Introduction to Oracles in Blockchain
@@ -36,52 +41,56 @@ multiple data points to validate the information's accuracy. This process ensure
contracts is relevant and timely, maintaining the integrity and deterministic nature of the blockchain
operations.
-## Oracles on Shimmer EVM
+## Oracle Providers in IOTA Ecosystem
-### Supra
+### Pyth
-Supra Oracles validate and report prices derived from up to 21 data sources with Byzantine Fault Tolerant algorithms
-for a wide array of assets and commodities using its own Distributed Oracle Agreement (DORA) to provide data for crypto
-prices, forex, equities, and even Web3 data from other blockchains. Its feed gets updated from a minimum of 3 to 8 sources; if a data pair fails to meet this criterion, it gets deprecated to ensure data reliability.
+The Pyth Network delivers real-time financial market data across multiple blockchains and can be used in off-chain applications.
+Pyth gets contributions from over 90 publishers, including several exchanges. It offers comprehensive and accurate price
+feeds for asset classes such as US equities, commodities, and cryptocurrencies. Its price feeds get updates
+multiple times per second, ensuring they are current and reliable.
:::tip
-You can learn more about Supra Oracles in their [official documentation](https://supraoracles.com/docs/overview).
+You can learn more about Pyth Oracles in their [official documentation](https://docs.pyth.network/documentation).
:::
-### Pyth
+### Supra
-The Pyth Network delivers real-time financial market data across multiple blockchains and can be used in off-chain applications.
-Pyth gets contributions from over 90 publishers, including several exchanges. It offers comprehensive and accurate price
-feeds for asset classes such as US equities, commodities, and cryptocurrencies. Its price feeds get updates
-multiple times per second, ensuring they are current and reliable.
+Supra Oracles validate and report prices derived from up to 21 data sources with Byzantine Fault Tolerant algorithms
+for a wide array of assets and commodities using its own Distributed Oracle Agreement (DORA) to provide data for crypto
+prices, forex, equities, and even Web3 data from other blockchains. Its feed gets updated from a minimum of 3 to 8 sources; if a data pair fails to meet this criterion, it gets deprecated to ensure data reliability.
:::tip
-You can learn more about Pyth Oracles in their [official documentation](https://docs.pyth.network/documentation).
+You can learn more about Supra Oracles in their [official documentation](https://supraoracles.com/docs/overview).
:::
+
+
#### Example Code
-You can use the following example code to get data from Pyth Oracles in Shimmer EVM:
+
+
+You can use the following example code to get data from Pyth Oracles in IOTA EVM:
```typescript
import {ethers} from "ethers";
import fetch from "node-fetch";
// Provider
-const providerURL = "https://json-rpc.evm.shimmer.network"
+const providerURL = "https://json-rpc.evm.iota.network"
const provider = new ethers.JsonRpcProvider(providerURL);
-// Pyth Oracle contract on ShimmerEVM Mainnet
-const contractAddress = '0xA2aa501b19aff244D90cc15a4Cf739D2725B5729';
+// Pyth Oracle contract on IOTA EVM Mainnet
+const contractAddress = '0x8D254a21b3C86D32F7179855531CE99164721933';
// Add Price Feed Ids obtained from https://pyth.network/developers/price-feed-ids#pyth-evm-stable
const priceFeedIds = [
- //SMR/USD
+ //IOTA/USD
'0xaf5b9ac426ae79591fde6816bc3f043b5e06d5e442f52112f76249320df22449',
//BTC/USD
'0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43'
@@ -120,4 +129,8 @@ async function main() {
}
}
-main();
\ No newline at end of file
+main();
+```
+
+
+
\ No newline at end of file
diff --git a/docs/build/getting-started/safe.md b/docs/build/getting-started/safe.md
new file mode 100644
index 00000000000..4cdc7cf6928
--- /dev/null
+++ b/docs/build/getting-started/safe.md
@@ -0,0 +1,78 @@
+---
+description: 'Multisig wallet refers to having multiple private keys for a single web3 wallet.'
+image: /img/logo/WASP_logo_dark.png
+---
+
+# MultiSig Wallet
+
+:::note TL;DR;
+
+[Safe Wallet](https://safe.iotaledger.net/welcome) is a multiSig wallet. The term “
+ multisig” is short for "multisignature".
+
+:::
+
+The security of cryptocurrency demands greater attention as digital assets gain traction. Individuals and organizations need robust strategies to safeguard their funds. Multisignature (multisig) wallets are emerging as a powerful cybersecurity tool in crypto.
+
+Decentralized digital assets require a different approach to security than traditional finance. Thankfully, innovative technologies like multisig wallets provide an extra layer of protection, allowing you to trade cryptocurrencies on chains like [Shimmer EVM](https://explorer.evm.shimmer.network/) or [IOTA EVM](https://explorer.evm.iota.org/).
+
+![IOTA Sandbox](/img/get-started/safe/safe.png)
+
+## Why Are Multisig Wallets More Secure?
+
+Traditional crypto wallets rely on a single signature for transactions, making them vulnerable if that key is compromised. Multisig wallets offer superior security by requiring multiple approvals before funds can be moved. This added layer of verification significantly reduces the risk of unauthorized transactions, even if a hacker gains access to one of your keys.
+
+## Use Cases for Multisig Wallet
+
+### Shared Asset Security
+
+#### Joint Ownership
+
+Securely manage crypto held jointly by couples, business partners, or organizations. Requires approval from all parties for transactions, preventing unauthorized spending.
+
+#### Company Funds
+
+ For businesses with substantial crypto holdings, enforce multi-approval workflows for withdrawals, minimizing internal theft risk.
+
+### Enhanced Threat Protection
+
+#### Lost/Compromised Keys
+
+ Mitigate the impact of lost or compromised keys. Remaining keys can still safeguard funds, unlike single-signature wallets.
+
+#### Hacking Defense
+
+ Add a significant hurdle for attackers. Even with access to one key, they cannot steal funds without additional signatures.
+
+#### Custodial Account Control
+
+ Maintain control over crypto held in exchanges or IRA providers. Multisig wallets ensure withdrawals require approval from both the - user and the custodian, preventing unauthorized access.
+
+### Important Considerations
+
+#### Technical Complexity
+
+ Setting up and using multisig wallets requires more technical expertise compared to traditional wallets.
+
+#### Signatory Balance
+
+Finding the optimal balance between security (more signatories) and practicality (fewer signatories) is crucial.
+
+#### Individual Suitability
+
+ For most individual users with smaller crypto holdings, a standard single-signature wallet might be sufficient.
+
+
+:::tip
+
+Learn more about safe accounts in the [Safe documentation](https://help.safe.global/en/articles/40835-what-safe-setup-should-i-use).
+
+:::
+
+## IOTA has its own dedicated MultiSig wallet - [safe(Wallet)](https://safe.iotaledger.net/welcome)
+
+:::info Set Up a Safe Account
+
+You can find instructions on setting up a safe account in the [Safe documentation](https://help.safe.global/en/articles/40868-creating-a-safe-on-a-web-browser).
+
+:::
\ No newline at end of file
diff --git a/docs/build/getting-started/sidebars.ts b/docs/build/getting-started/sidebars.ts
index 5c77fcf837d..d029cf66407 100644
--- a/docs/build/getting-started/sidebars.ts
+++ b/docs/build/getting-started/sidebars.ts
@@ -16,54 +16,157 @@ module.exports = {
},
items: [
{
- type: 'link',
- label: 'IOTA Sandbox',
- href: '/iota-sandbox/welcome',
- },
- {
- type: 'link',
- label: 'CLI Wallet',
- href: '/cli-wallet/welcome',
- },
- {
- type: 'link',
- label: 'WASP CLI',
- href: '/wasp/how-tos/wasp-cli',
- },
- {
- label: 'Schema Tool',
- type: 'link',
- href: '/isc/schema/introduction',
+ type: 'category',
+ label: 'EVM Tools',
+ collapsed: false,
+ link: {
+ type: 'generated-index',
+ title: 'EVM Tools',
+ slug: '/tools/evm',
+ },
+ items: [
+ {
+ type: 'category',
+ label: 'IOTA EVM',
+ collapsed: false,
+ link: {
+ type: 'generated-index',
+ title: 'IOTA EVM Tools',
+ slug: '/tools/evm/iota',
+ },
+ items: [
+ {
+ label: 'Explorer',
+ type: 'link',
+ href: 'https://explorer.evm.iota.org',
+ },
+ {
+ label: 'Toolkit',
+ type: 'link',
+ href: 'https://evm-toolkit.evm.iotaledger.net',
+ },
+ ],
+ },
+ {
+ type: 'category',
+ label: 'IOTA EVM Testnet',
+ collapsed: false,
+ link: {
+ type: 'generated-index',
+ title: 'IOTA Testnet EVM Tools',
+ slug: '/tools/evm/iota-testnet',
+ },
+ items: [
+ {
+ label: 'Explorer',
+ type: 'link',
+ href: 'https://explorer.evm.testnet.iota.org',
+ },
+ {
+ label: 'Toolkit & Faucet',
+ type: 'link',
+ href: 'https://evm-toolkit.evm.testnet.iotaledger.net',
+ },
+ ],
+ },
+ {
+ label: 'Blast API',
+ type: 'doc',
+ id: 'blastAPI',
+ },
+ {
+ label: 'Oracles',
+ type: 'doc',
+ id: 'oracles',
+ },
+ {
+ label: 'Subgraphs',
+ type: 'doc',
+ id: 'subgraphs',
+ },
+ {
+ label: 'IOTA Safe Wallet',
+ type: 'doc',
+ id: 'safe',
+ },
+ {
+ label: 'Multicall3',
+ type: 'doc',
+ id: 'multicall',
+ },
+ {
+ type: 'category',
+ label: 'ShimmerEVM',
+ collapsed: true,
+ link: {
+ type: 'generated-index',
+ title: 'ShimmerEVM Tools',
+ slug: '/tools/evm/shimmer',
+ },
+ items: [
+ {
+ label: 'Explorer',
+ type: 'link',
+ href: 'https://explorer.evm.shimmer.network',
+ },
+ {
+ label: 'Toolkit',
+ type: 'link',
+ href: 'https://evm-toolkit.evm.shimmer.network',
+ },
+ ],
+ },
+ {
+ type: 'category',
+ label: 'ShimmerEVM Testnet',
+ collapsed: true,
+ link: {
+ type: 'generated-index',
+ title: 'ShimmerEVM Testnet Tools',
+ slug: '/tools/evm/shimmer-testnet',
+ },
+ items: [
+ {
+ label: 'Explorer',
+ type: 'link',
+ href: 'https://explorer.evm.testnet.shimmer.network',
+ },
+ {
+ label: 'Toolkit & Faucet',
+ type: 'link',
+ href: 'https://evm-toolkit.evm.testnet.shimmer.network/',
+ },
+ ],
+ },
+ {
+ type: 'link',
+ label: 'WASP CLI',
+ description:
+ 'Wasp CLI is a command line tool for interacting with the Wasp node.',
+ href: '/wasp/how-tos/wasp-cli',
+ },
+ ],
},
+
{
label: 'Explorer',
type: 'link',
href: 'https://explorer.iota.org',
},
{
- label: 'Shimmer EVM Explorer',
- type: 'link',
- href: 'https://explorer.evm.shimmer.network/',
- },
- {
- label: 'Shimmer EVM Toolkit',
+ label: 'IOTA Testnet Faucet',
type: 'link',
- href: 'https://evm-toolkit.evm.shimmer.network/',
+ href: 'https://faucet.testnet.iotaledger.net',
},
{
- label: 'Shimmer EVM Testnet Toolkit & Faucet',
type: 'link',
- href: 'https://evm-toolkit.evm.testnet.shimmer.network/',
- },
- {
- label: 'Oracles for Shimmer EVM',
- type: 'doc',
- id: 'oracles',
+ label: 'CLI Wallet',
+ href: '/cli-wallet/welcome',
},
{
- label: 'Testnet Faucet',
type: 'link',
- href: 'https://faucet.testnet.shimmer.network',
+ label: 'IOTA Sandbox',
+ href: '/iota-sandbox/welcome',
},
],
},
diff --git a/docs/build/getting-started/subgraphs.md b/docs/build/getting-started/subgraphs.md
new file mode 100644
index 00000000000..0824882ea66
--- /dev/null
+++ b/docs/build/getting-started/subgraphs.md
@@ -0,0 +1,106 @@
+---
+description: 'Learn about the role of subgraphs in smart contracts and how they can provide indexed blockchain data to your smart contracts.'
+image: /img/logo/WASP_logo_dark.png
+tags:
+ - Blockchain subgraphs
+ - Smart Contracts
+ - Shimmer EVM
+ - IOTA EVM
+---
+
+# Subgraphs
+
+:::info tl;dr;
+
+Subgraphs provide a streamlined way for developers to access blockchain data relevant to their applications,
+significantly enhancing developer efficiency and user experience.
+
+:::
+
+Subgraphs collect and organize blockchain data by application needs, making it readily accessible for developers. Unlike
+blockchains that store data without application context, subgraphs allow you to quickly retrieve information pertinent
+to your application and simplify real-time data access, facilitating the creation of
+dynamic user interfaces and interactions in your applications.
+
+## Subgraph Components and Operations
+
+Subgraphs are built on [GraphQL](https://graphql.org/) APIs, enabling you to query on-chain transaction data
+efficiently.
+This feature is particularly useful for developers working with complex smart contracts requiring detailed frontend
+interfaces. For instance, querying transactions within a specific liquidity pool becomes straightforward with subgraphs.
+By defining a schema and indexing event data, you can utilize the generated GraphQL API for effective data querying.
+
+### Subgraph Manifest
+
+The manifest details the smart contracts your subgraph indexes, the events it tracks, and how event data is mapped to
+queryable entities. This foundational document ensures your subgraph accurately reflects the blockchain data your
+application needs.
+
+### Subgraph Schema
+
+The schema organizes your subgraph data, defining entities like pools in DeFi applications, and their attributes. It is
+crucial for structuring your data to support efficient queries.
+
+### Subgraph Mappings
+
+Mappings process incoming blockchain events, specified in your [manifest](#subgraph-manifest), and store them
+according to your [schema](#subgraph-schema).
+These [AssemblyScript](https://www.assemblyscript.org/) codes are essential for translating raw blockchain data into a
+format your application can easily query.
+
+## Popular Use Cases for Subgraphs
+
+Subgraphs have found widespread adoption in various blockchain applications, from DeFi to NFTs and DAOs, due to their
+ability to index and query data effectively.
+
+* **Custom Smart Contract Indexing**: Ideal for developers needing to index data for unique smart contracts, especially
+ those creating frontend interfaces.
+* **Decentralized Finance (DeFi)**: Subgraphs provide real-time data on token prices, liquidity, and more, enhancing
+ DeFi
+ applications.
+* **Non-fungible Tokens (NFTs)**: They allow for efficient querying of NFT ownership, transaction history, and off-chain
+ data.
+* **Decentralized Autonomous Organizations (DAOs)**: Subgraphs facilitate on-chain decision-making and data analysis for
+ DAOs.
+* **Gaming**: They support real-time data access, improving gameplay and in-game transactions.
+
+## Benefits of Using Subgraphs
+
+Subgraphs offer a developer-friendly approach to blockchain data indexing, compatible with various blockchains and
+enhancing application security and resilience.
+
+* **Ease of Use**: With familiar tools like AssemblyScript and GraphQL, subgraphs are accessible to developers,
+ simplifying
+ the backend data management.
+* **Cross-Blockchain Compatibility**: They work across multiple EVM-compatible networks, allowing applications to
+ operate
+ seamlessly on different blockchains.
+* **Security and Decentralization**: Opting for decentralized querying with subgraphs can reduce reliance on single data
+ sources, increasing application robustness.
+
+## Subgraph Providers
+
+### Goldsky
+
+[Goldsky](https://goldsky.com/products/subgraphs) [supports IOTA EVM](https://docs.goldsky.com/chains/iota).
+You can use their public API endpoints to access subgraph data.
+
+:::tip Run a Local Graph Node
+
+You can use [Nakama's Graph Node GitHub repository](https://github.com/nakamaio/graph-node) to run your own Graph Node.
+
+:::
+
+:::tip Blast API Archival Nodes
+
+You can use the convenient Blast API on IOTA EVM to access [archival nodes](blastAPI.md#archival-nodes).
+
+:::
+
+:::tip Wasp Access Nodes
+
+You can find more information on how to connect to an access node in the
+[#nodesharing channel](https://discordapp.com/channels/397872799483428865/398600007378272256) on the [IOTA Discord](https://discord.iota.org/).
+
+:::
+
diff --git a/docs/build/iota-sandbox/docs/welcome.md b/docs/build/iota-sandbox/docs/welcome.md
index ca37c427f08..4b4270a749a 100644
--- a/docs/build/iota-sandbox/docs/welcome.md
+++ b/docs/build/iota-sandbox/docs/welcome.md
@@ -21,10 +21,9 @@ It is not for creating production-ready networks.
:::
-:::tip Public Testnet
+:::tip Testnet
-If possible,
-you should use the [public testnet](https://wiki.iota.org/build/networks-endpoints/#public-testnet)
+If possible, you should use one of the testnets(/build/networks-endpoints)
where you can experiment with confidence and community support.
:::
diff --git a/docs/build/isc/v1.1/docs/_admonitions/_network_warning.md b/docs/build/isc/v1.1/docs/_admonitions/_network_warning.md
deleted file mode 100644
index e7a18ce4286..00000000000
--- a/docs/build/isc/v1.1/docs/_admonitions/_network_warning.md
+++ /dev/null
@@ -1,6 +0,0 @@
-:::caution Only Available on Shimmer
-
-At the moment, Smart Contracts are only available on [Shimmer](/build/networks-endpoints/#shimmer) and
-its [Public Testnet](/build/networks-endpoints/#public-testnet) network.
-
-:::
\ No newline at end of file
diff --git a/docs/build/isc/v1.1/docs/_partials/_hardhat_config.md b/docs/build/isc/v1.1/docs/_partials/_hardhat_config.md
index d6257484a0b..96b134330bb 100644
--- a/docs/build/isc/v1.1/docs/_partials/_hardhat_config.md
+++ b/docs/build/isc/v1.1/docs/_partials/_hardhat_config.md
@@ -3,7 +3,22 @@ import { Networks } from '@theme/constant';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
-
+
+
+
+
+{`
+networks: {
+ 'iotaevm-testnet': {
+ url: '${Networks['iota_testnet'].evm.rpcUrls[0]}',
+ chainId: ${parseInt(Networks['iota_testnet'].evm.chainId)},
+ accounts: [YOUR PRIVATE KEY],
+ },
+}
+`}
+
+
+
@@ -19,14 +34,14 @@ networks: {
-
+
{`
networks: {
- 'iotaevm-testnet': {
- url: '${Networks['iota_testnet'].evm.rpcUrls[0]}',
- chainId: ${parseInt(Networks['iota_testnet'].evm.chainId)},
+ 'iotaevm': {
+ url: '${Networks['iota'].evm.rpcUrls[0]}',
+ chainId: ${parseInt(Networks['iota'].evm.chainId)},
accounts: [YOUR PRIVATE KEY],
},
}
diff --git a/docs/build/isc/v1.1/docs/getting-started/languages-and-vms.md b/docs/build/isc/v1.1/docs/getting-started/languages-and-vms.md
index 64bacc1c8b4..1719a69053f 100644
--- a/docs/build/isc/v1.1/docs/getting-started/languages-and-vms.md
+++ b/docs/build/isc/v1.1/docs/getting-started/languages-and-vms.md
@@ -1,10 +1,7 @@
import EVMCompatibility from '../_admonitions/_EVM_compatibility.md'
-import NetworkWarning from '../_admonitions/_network_warning.md'
# Supported Virtual Machines & Languages
-
-
The current release of IOTA Smart Contracts has support for [EVM/Solidity](#evmsolidity-based-smart-contracts) smart
contracts, as well as experimental [Wasm](#wasm-vm-for-isc) smart contracts, providing compatibility with
existing smart contracts and tooling from other EVM based chains like Ethereum. This allows us to offer the existing
diff --git a/docs/build/isc/v1.1/docs/getting-started/networks-and-chains.mdx b/docs/build/isc/v1.1/docs/getting-started/networks-and-chains.mdx
index cd1d3902ea0..cc3796b00ed 100644
--- a/docs/build/isc/v1.1/docs/getting-started/networks-and-chains.mdx
+++ b/docs/build/isc/v1.1/docs/getting-started/networks-and-chains.mdx
@@ -4,7 +4,7 @@ tags:
- mainnet
- shimmer
- devnet
- - public testnet
+ - EVM Testnet
- reference
- Endpoints
---
@@ -35,6 +35,69 @@ The other values (network name and currency symbol) can be whatever value you li
:::
+## IOTA EVM
+
+[IOTA EVM](https://explorer.evm.iota.org) is the L2 EVM running on top of the IOTA network.
+
+
+
+
+
+### Additional Info
+
+
+
+## IOTA EVM Testnet
+
+
+
+[The IOTA EVM Testnet](https://explorer.evm.testnet.iotaledger.net/) runs as a layer 2 on top
+of the [IOTA Testnet](/build/networks-endpoints#iota-testnet). This network uses ISC to facilitate
+
+:::info
+
+This network is subject to occasional resets (no data retention) which are usually announced with a one-week grace period.
+
+:::
+
+
+
+:::note
+
+The other values (network name and currency symbol) can be whatever value you like.
+
+:::
+
+### Additional Info
+
+
+
+## ShimmerEVM Testnet
+
+
+
+[The ShimmerEVM Testnet](https://explorer.evm.testnet.shimmer.network/) runs as a layer 2 on top
+of the [Shimmer Testnet](/build/networks-endpoints#shimmer-testnet). This network uses ISC to facilitate
+an Ethereum Virtual Machine and has an enshrined bridge to layer 1.
+
+:::info
+
+This network is subject to occasional resets (no data retention) which are usually announced with a one-week grace period.
+
+:::
+
+
+
+:::note
+
+The other values (network name and currency symbol) can be whatever value you like.
+
+:::
+
+### Additional Info
+
+
+
## ShimmerEVM
[ShimmerEVM](https://explorer.evm.shimmer.network/) is the L2 EVM running on top of the Shimmer network.
@@ -43,6 +106,10 @@ The other values (network name and currency symbol) can be whatever value you li
+### Additional Info
+
+
+
## ShimmerEVM Testnet
@@ -65,8 +132,12 @@ The other values (network name and currency symbol) can be whatever value you li
:::
+### Additional Info
+
+
+
## Core Contracts
-[ShimmerEVM](#shimmerEVM) and the testnet networks have 7
+[IOTA EVM](#IOTAEVM), [ShimmerEVM](#shimmerEVM) and the testnet networks have 7
[core contracts](../reference/core-contracts/overview.md) deployed, as well as the
[Magic Contract](../reference/magic-contract/introduction.md).
diff --git a/docs/build/isc/v1.1/docs/getting-started/quick-start.mdx b/docs/build/isc/v1.1/docs/getting-started/quick-start.mdx
index b687e3b700d..4abc7e7b247 100644
--- a/docs/build/isc/v1.1/docs/getting-started/quick-start.mdx
+++ b/docs/build/isc/v1.1/docs/getting-started/quick-start.mdx
@@ -1,5 +1,5 @@
---
-description: This guide will help you quickly get started with the [Public Testnet](/build/networks-endpoints/#public-testnet)
+description: This guide will help you quickly get started with the EVM Testnets
image: /img/logo/WASP_logo_dark.png
tags:
- quickstart
@@ -62,11 +62,11 @@ You can now use your testnet tokens and simulated bridged tokens to deploy and i
Visit the corresponding Testnet Block Explorer to monitor the chain, track transactions, and explore deployed smart contracts.
-
-
+
+
Explorer
-
+
Explorer
diff --git a/docs/build/isc/v1.1/docs/getting-started/tools.mdx b/docs/build/isc/v1.1/docs/getting-started/tools.mdx
index 13709a276d4..d2150465845 100644
--- a/docs/build/isc/v1.1/docs/getting-started/tools.mdx
+++ b/docs/build/isc/v1.1/docs/getting-started/tools.mdx
@@ -24,6 +24,7 @@ import { Networks } from '@theme/constant';
import DeployAdmonition from '../_admonitions/_deploy_a_smart_contract.md';
import { ChainId } from '@theme/ChainId';
import NetworkInfo from '@theme/NetworkInfo';
+import OraclesContractData from '../../../../_partials/_oracles_contract_data.md';
# Compatible Tools
@@ -34,7 +35,8 @@ directly with an IOTA Smart Contracts chain running EVM as long as you take a co
1. Please make sure you use the correct JSON-RPC endpoint URL in your tooling for your chain. If you're running your own chain, you can find the JSON-RPC
endpoint URL in the Wasp dashboard (`[URL]/wasp/dashboard` when using `node-docker-setup`).
-2. Please ensure you use the correct `Chain ID` configured while starting the JSON-RPC service. If you did not explicitly define this while starting the service, the default Chain ID will be
+2. Please ensure you use the correct `Chain ID` configured while starting the JSON-RPC service. If you did not explicitly define this while starting the service, the default Chain ID will be
+for IOTA EVM,
for ShimmerEVM or for the EVM Testnet.
3. Fees are handled on the IOTA Smart Contracts chain level, not the EVM level. The chain will reject any requests with a different gas price than specified by the chain.
@@ -46,6 +48,66 @@ chain ID after deployment.**
:::
+## Network RPCs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## IOTA EVM Tools
+
+The following tools are **only available on IOTA EVM**.
+
+### Blast API
+
+The [Blast API](/build/blastAPI) is a decentralized platform that provides reliable and scalable node infrastructure
+for accessing blockchain data. You can find the Blast API URLs in the [Network RPCs](#network-rpcs)
+
+### EVM Toolkit
+
+You can use the [IOTA EVM Toolkit](https://evm-toolkit.evm.iotaledger.net) to withdraw assets from IOTA EVM to IOTA L1.
+It also includes a wrapper IOTA <-> wIOTA.
+
+### Multicall3
+
+If you need to aggregate results from multiple contract reads into a single JSON-RPC request or execute multiple
+state-changing calls in a single transaction, you can use the [Multicall3 contract](https://explorer.evm.iota.org/address/0xcA11bde05977b3631167028862bE2a173976CA11?tab=contract).
+
+## IOTA EVM and ShimmerEVM Tools
+
+The following tools are available on both IOTA EVM end ShimmerEVM.
+
+### MultiSig Wallets
+
+If you require and additional level of security, you can use the [Safe{} Wallet](https://safe.iotaledger.net/) as a
+Multisig solution on IOTA EVM.
+
+### Oracles
+
+If your project requires [Oracles](/build/oracles/) to provide data from the outside world, you find both Pyth and Supra have integrated IOTA EVM.
+
+
+
+### Subgraphs
+
+[Subgraphs](/build/subgraphs/) provide a streamlined way for developers to access blockchain data relevant to their applications,
+significantly enhancing developer efficiency and user experience. IOTA EVM subgraphs available via [Goldsky](https://goldsky.com).
+
## MetaMask
[MetaMask](https://metamask.io/) is a popular EVM wallet which runs in a browser extension that allows you to
@@ -55,16 +117,20 @@ To use your EVM chain with MetaMask, simply open up MetaMask and click on the ne
the bottom of this list, you will see the option `Add network`. On the new page you will see a list of popular network with the option `Add a network manually`.
For example this would be the configs to add our different [EVM chains](/build/networks-endpoints):
-
-
+
+
+
+
+
+
-
+
-
+
@@ -113,9 +179,9 @@ often offered through block explorer APIs.
## Ethers.js/Web3.js
-If you input the correct configuration parameters for the JSON-RPC endpoint to talk
-to, [Ethers.js](https://docs.ethers.io/) and [Web3.js](https://web3js.readthedocs.io/) are also compatible with EVM
-chains on IOTA Smart Contracts. Alternatively, you can let both interact through MetaMask instead so that it uses the
+If you input the correct configuration parameters for the JSON-RPC endpoint to talk to,
+[Ethers.js](https://docs.ethers.io/) and [Web3.js](https://web3js.readthedocs.io/) are also compatible with EVM chains on IOTA Smart Contracts.
+Alternatively, you can let both interact through MetaMask instead so that it uses the
network configured in MetaMask. For more information on this, read their documentation.
## Other Tooling
diff --git a/docs/build/isc/v1.1/docs/how-tos/ERC20.md b/docs/build/isc/v1.1/docs/how-tos/ERC20.md
index 9bbd6929beb..adf0a6ccfa1 100644
--- a/docs/build/isc/v1.1/docs/how-tos/ERC20.md
+++ b/docs/build/isc/v1.1/docs/how-tos/ERC20.md
@@ -74,8 +74,9 @@ Once you have deployed your contract, you can add your new custom token to your
1. Open Metamask, and click on the transaction that created the contract. From there, you can simply click
on `View on block explorer` to visit the transaction details. Alternatively, you can copy the transaction ID and
- visit the [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/)
- or [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/) and use the search bar to find transaction.
+ visit the [IOTA EVM Explorer](https://explorer.evm.iota.org),
+ [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/)
+ or [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/) and use the search bar to find transaction.
!['View on block explorer](/img/evm/how-tos/ERC20/metamask-get-transaction-or-go-to-block-explorer.png)
diff --git a/docs/build/isc/v1.1/docs/how-tos/ERC721.md b/docs/build/isc/v1.1/docs/how-tos/ERC721.md
index 0b66f129e59..767661dbff2 100644
--- a/docs/build/isc/v1.1/docs/how-tos/ERC721.md
+++ b/docs/build/isc/v1.1/docs/how-tos/ERC721.md
@@ -42,7 +42,7 @@ your smart contracts.
## Create the Smart Contract
-The following is an example NFT Smart Contract called "ShimmerEVMSampleNFT".
+The following is an example NFT Smart Contract called "IotaEVMSampleNFT".
```solidity
// SPDX-License-Identifier: MIT
@@ -51,11 +51,11 @@ pragma solidity ^0.8.20;
import "@openzeppelin/contracts@5.0.1/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@5.0.1/access/Ownable.sol";
-contract ShimmerEVMSampleNFT is ERC721, Ownable {
+contract IotaEVMSampleNFT is ERC721, Ownable {
uint256 private _nextTokenId;
constructor(address initialOwner)
- ERC721("ShimmerEVMSampleNFT", "SSNFT")
+ ERC721("IotaEVMSampleNFT", "SSNFT")
Ownable(initialOwner)
{}
@@ -73,9 +73,9 @@ contract ShimmerEVMSampleNFT is ERC721, Ownable {
As you can see above, the contract uses standard methods for the most part. You should pay attention to the following:
- `pragma solidity ^0.8.20;`: This line means the contract uses solidity compiler version `0.8.20` or above.
-- `contract ShimmerEVMSampleNFT is ERC721, ERC721URIStorage, Ownable`: This line defines the contract's name, and what
+- `contract IotaEVMSampleNFT is ERC721, ERC721URIStorage, Ownable`: This line defines the contract's name, and what
other contracts it implements.
-- `ERC721("ShimmerEVMSampleNFT", "SNFT") {}`: This line defines the token name and symbol. You can name it
+- `ERC721("IotaEVMSampleNFT", "SNFT") {}`: This line defines the token name and symbol. You can name it
whatever you want. We recommend using the same name for the token and the contract.
- `return "https://example.com/nft/";`: You should define the base URI of your NFTs. That means the URL you provide here
will be used for all your tokens. Since this contract uses auto-incremental token IDs, your token URI will look
@@ -101,7 +101,7 @@ directly.
:::note Set the Initial Owner
-Before you can deploy this contract, you will need to set the `Initial Owner` address; this can be your own ShimmerEVM address.
+Before you can deploy this contract, you will need to set the `Initial Owner` address; this can be your own IOTA EVM address.
!["Set the initial owner" img.png](/img/evm/how-tos/ERC721/set-initial-owner.png)
@@ -115,13 +115,15 @@ So far, you have [created](#create-the-smart-contract) and deployed the contract
To do, you should:
1. Open the contract (listed under `Deployed Contracts`).
-2. Insert your target ShimmerEVM in beside the `safeMint` button and then click the button.
+2. Insert your target IOTA EVM in beside the `safeMint` button and then click the button.
![Safe mint](/img/evm/how-tos/ERC721/safe-mint.png)
+
3. Confirm the transaction on Metamask.
![Confirm in metamask](/img/evm/how-tos/ERC721/confirm-in-metamask.png)
-If you visit your address in the [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/) or [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/)
+If you visit your address in the visit the [IOTA EVM Explorer](https://explorer.evm.iota.org),
+[ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/) or [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/)
you should see your NFTs listed under `Tokens`.
diff --git a/docs/build/isc/v1.1/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx b/docs/build/isc/v1.1/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
index 4fb8baa24da..a479d9bb2c1 100644
--- a/docs/build/isc/v1.1/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
+++ b/docs/build/isc/v1.1/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
@@ -18,7 +18,7 @@ import AboutAccounts from '../../../_admonitions/_about-accounts.md';
:::info
-ShimmerEVM has 18 decimal places, while Shimmer has 6. This means that any decimals beyond the 6th will be ignored by Shimmer, even though you can see them on ShimmerEVM. Please keep this in mind while sending your tokens to L1.
+IOTA EVM and ShimmerEVM have 18 decimal places, while IOTA and Shimmer have 6. This means that any decimals beyond the 6th will be ignored by IOTA and Shimmer, even though you can see them on IOTA EVM and ShimmerEVM. Please keep this in mind while sending your tokens to L1.
:::
diff --git a/docs/build/isc/v1.1/docs/how-tos/deploy-a-smart-contract.mdx b/docs/build/isc/v1.1/docs/how-tos/deploy-a-smart-contract.mdx
index c841f051a71..0a1860715ec 100644
--- a/docs/build/isc/v1.1/docs/how-tos/deploy-a-smart-contract.mdx
+++ b/docs/build/isc/v1.1/docs/how-tos/deploy-a-smart-contract.mdx
@@ -2,11 +2,12 @@
tags:
- Smart Contract Deployment
- Shimmer EVM
+- IOTA EVM
- Remix IDE
- Hardhat
-- Shimmer EVM Testnet
+- EVM Testnet
image: /img/logo/WASP_logo_dark.png
-description: 'Learn how to deploy smart contracts to Shimmer EVM and Shimmer EVM Testnet using popular tools like Remix and Hardhat.'
+description: 'Learn how to deploy smart contracts to IOTA EVM, Shimmer EVM and EVM Testnet using popular tools like Remix and Hardhat.'
---
import {AddToMetaMaskButton } from '@theme/AddToMetaMaskButton';
import HardhatConfig from '../_partials/_hardhat_config.md';
@@ -27,7 +28,7 @@ the [How to Create a Basic Solidity Contract Guide](create-a-basic-contract.md).
:::
-
+
Deploying a Solidity smart contract using Remix is a straightforward process that doesn't require any installation or
@@ -176,7 +177,7 @@ often offered through block explorer APIs.
3. If you have no compilation errors, you can deploy your contract by running the following command:
```bash
- npx hardhat run scripts/deploy.js --network shimmerevm-testnet
+ npx hardhat run scripts/deploy.js --network evm-testnet
```
**Expected output**:
@@ -187,7 +188,7 @@ often offered through block explorer APIs.
***** `0x123456789ABCDEFGHIJK123456789ABCDEFGHIJK` is the contract unlock address.
4. You can verify your contract by visiting
- the [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/),
+ the [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/),
and searching for the address from the previous step. If you access the `Contract` tab, you should be able to see
your code and interact with your contract.
diff --git a/docs/build/isc/v1.1/docs/how-tos/send-ERC20-across-chains.md b/docs/build/isc/v1.1/docs/how-tos/send-ERC20-across-chains.md
new file mode 100644
index 00000000000..af8cc67fa54
--- /dev/null
+++ b/docs/build/isc/v1.1/docs/how-tos/send-ERC20-across-chains.md
@@ -0,0 +1,297 @@
+# Send ERC20 Tokens Across Chains
+
+## Introduction
+
+[LayerZero OFT V2](https://docs.layerzero.network/v2) enables cross-chain transfers of existing ERC20 tokens, such as wSMR and wIOTA (wrapped versions of the native gas tokens SMR and IOTA on ShimmerEVM and IOTA EVM respectively). For testing purposes, Sepolia is chosen as the source chain, while the BNB Testnet is chosen as the destination chain.
+
+:::info Community Libs
+
+You can clone the Utilities for LayerZero OFT V2 from [IOTA Community GitHub Repository](https://github.com/iota-community/layerzero-oft-v2-utils).
+
+:::
+
+### Why Would a User Need to Send ERC20 Tokens Across Chains?
+
+Sending ERC20 tokens across chains allows users to leverage different blockchain networks' strengths and unique features, optimize costs, and manage risks more effectively. This flexibility is crucial as the blockchain ecosystem continues to grow and diversify.
+
+#### Send Existing ERC20 Tokens Across Chains
+
+You need both the [OFT Adapter](https://docs.layerzero.network/v2/developers/evm/oft/adapter) and OFT contracts to enable existing ERC20 tokens for cross-chain sending,
+
+#### Create New Cross-chain Fungible Tokens
+
+If you are about to launch a new ERC20 token, you can use the [OFT standard](https://docs.layerzero.network/v2/developers/evm/oft/quickstart) to enable cross-chain sending without the OFT Adapter.
+
+## How To Use IOTA's Utilities for LayerZero OFT V2
+
+The [Utilities for LayerZero OFT V2](https://github.com/iota-community/layerzero-oft-v2-utils) facilitate cross-chain sending of ERC20 tokens between a source chain (e.g., Sepolia or ShimmerEVM Testnet) and a destination chain (e.g., BNB Testnet or IOTA EVM Testnet).
+
+:::tip Further Information
+
+You can learn more about the available options in the [Layer Zero Documentation](https://docs.layerzero.network/v2/developers/evm/gas-settings/options#option-types.).
+
+:::
+
+### Send Tokens From One Source Chain to Another Destination Chain (and Vice Versa)
+
+To send existing ERC20 tokens, you will need both the OFT Adapter contract on the source chain and the OFT contract on the destination chain. You should then use the following procedure:
+
+#### 1. Approve the tokens
+
+The sender must approve their ERC20 tokens for the OFT Adapter contract.
+
+```typescript
+const approveTx = await erc20TokenContract.approve(oftAdapterContractAddress, amountInWei);
+```
+
+#### 2. Estimate the fee
+
+The sender calls the function `quoteSend()` of the OFT Adapter contract to estimate the cross-chain fee to be paid in native tokens on the source chain.
+
+```typescript
+ const sendParam = [
+ lzEndpointIdOnDestChain,
+ receiverAddressInBytes32,
+ amountInWei,
+ amountInWei,
+ options, // additional options
+ "0x", // composed message for the send() operation
+ "0x", // OFT command to be executed, unused in default OFT implementations
+ ];
+
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L127C60-L127C73
+ // false is set for _payInLzToken Flag indicating whether the caller is paying in the LZ token
+ const [nativeFee] = await myOFTAdapterContract.quoteSend(sendParam as any, false);
+```
+
+#### 3. Send the tokens
+
+The sender calls the function `send()` of the OFT Adapter contract to transfer tokens from the source chain to the destination chain.
+
+```typescript
+ const sendTx = await myOFTAdapterContract.send(
+ sendParam as any,
+ [nativeFee, 0] as any, // set 0 for lzTokenFee
+ sender.address, // refund address
+ {
+ value: nativeFee,
+ },
+ );
+ const sendTxReceipt = await sendTx.wait();
+ console.log("sendOFT - send tx on source chain:", sendTxReceipt?.hash);
+```
+
+#### 4. (Optional) Wait for Finalization
+
+The sender can wait for transaction finalization on the destination chain using the library [@layerzerolabs/scan-client](https://www.npmjs.com/package/@layerzerolabs/scan-client#example-usage).
+```typescript
+ const deliveredMsg = await waitForMessageReceived(
+ Number(lzEndpointIdOnDestChain),
+ sendTxReceipt?.hash as string,
+ );
+ console.log("sendOFT - received tx on destination chain:", deliveredMsg?.dstTxHash);
+```
+
+### Send the OFT-wrapped Tokens Back
+
+To send back the OFT-wrapped tokens on the destination chain to the source chain, the procedure is similar, except that the approval step is not needed:
+
+#### 1. Estimate the fee
+
+The sender calls the function `quoteSend()` of the OFT contract to estimate the cross-chain fee to be paid in native tokens on the sender chain.
+
+```typescript
+ // Set the send param
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L10
+ const sendParam = [
+ lzEndpointIdOnSrcChain, // Sepolia
+ receiverAddressInBytes32,
+ amountInWei,
+ amountInWei,
+ options, // additional options
+ "0x", // composed message for the send() operation
+ "0x", // OFT command to be executed, unused in default OFT implementations
+ ];
+
+ // Step 1: call the func quoteSend() to estimate cross-chain fee to be paid in native on the source chain
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L127C60-L127C73
+ // false is set for _payInLzToken Flag indicating whether the caller is paying in the LZ token
+ const [nativeFee] = await myOFTContract.quoteSend(sendParam as any, false);
+ console.log("sendOFTBack - estimated nativeFee:", ethers.formatEther(nativeFee));
+ ```
+
+#### 2. Send the tokens
+
+The sender calls the function `send()` of the OFT contract to transfer tokens from the destination chain back to the source chain.
+
+```typescript
+const sendTx = await myOFTContract.send(
+ sendParam as any,
+ [nativeFee, 0] as any, // set 0 for lzTokenFee
+ sender.address, // refund address
+ {
+ value: nativeFee,
+ },
+ );
+ const sendTxReceipt = await sendTx.wait();
+ console.log("sendOFTBack - send tx on source chain:", sendTxReceipt?.hash);
+ ```
+
+#### 3. (Optional) Wait for Finalization
+
+The sender can wait for transaction finalization on the destination chain using the library `@layerzerolabs/scan-client`.
+```typescript
+ const deliveredMsg = await waitForMessageReceived(
+ Number(lzEndpointIdOnDestChain),
+ sendTxReceipt?.hash as string,
+ );
+ console.log("sendOFTBack - received tx on destination chain:", deliveredMsg?.dstTxHash);
+ ```
+
+## Sample Solidity Code for OFT Adapter and OFT Contracts in the `contracts-standard` Folder
+
+The [contracts-standard](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-standard) contains scripts to:
+
+- [Deploy the OFT Adapter and OFT contracts](#deploy-the-oft-adapter-contract-on-the-source-chain).
+- [Set your trusted peers](#optional-set-the-trusted-peers).
+- Set enforced options.
+- [Send tokens from the source chain to the destination chain](#send-the-origin-tokens-from-the-source-chain-to-the-destination-chain),
+and [vice versa](#send-oft-wrapped-tokens-back-from-the-destination-chain-to-the-origin-chain).
+
+### Install the Library
+
+After you have cloned the [IOTA Community Utilities for LayerZero OFT V2 repository](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main), you should run the following command to install:
+
+```
+yarn
+```
+
+### Compile the Contracts
+
+If you want to use the standard implementation for ERC20, copy the [`contracts-standard`](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-standard) folder to `contracts`. If you want to use a custom implementation, copy the [`contracts-wiota`](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-wiota) to `contracts`. Then, run the following command to compile the contracts:
+
+```bash
+yarn compile
+```
+
+### Set Your Configuration
+
+You should copy the template [`.env.example`](https://github.com/iota-community/layerzero-oft-v2-utils/blob/main/.env.example) file to a file called `.env`, and edit any of the configuration options you see fit.
+
+```bash
+cp .env.example .env
+```
+
+### Deploy the Contracts
+
+#### Deploy the OFT Adapter Contract On the Source Chain
+
+The OFT Adapter facilitates the expansion of an existing token to any supported blockchain as a native token, maintaining a unified global supply and inheriting all features of the OFT Standard. This intermediary contract manages the sending and receiving of pre-deployed tokens.
+
+For instance, when an ERC20 token is transferred from the source chain (Chain A), it gets locked in the OFT Adapter. Consequently, a corresponding token is minted on the destination chain (Chain B) through the paired OFT Contract.
+
+```bash
+yarn deploy-oft-adapter-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_oft_adapter.ts --network sepolia
+Deployed MyOFTAdapter contract address: 0x4daa81978576cB91a2e1919960e90e46c2a6D586
+Done in 6.67s.
+```
+
+#### Deploy OFT on the Destination Chain
+
+You can use the following command to deploy OFT on destination chain (e.g. BNB Testnet):
+
+```bash
+yarn deploy-oft-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_oft.ts --network bnbTestnet
+Deployed MyOFT contract address: 0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1
+Done in 6.68s.
+```
+
+### (optional) Set the Trusted Peers
+
+#### On OFTAdapter
+
+You can set the trusted peer in the source chain's OFT Adapter (e.g., Sepolia) using the following command:
+
+```bash
+yarn set-peer-oft-adapter-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/set_peer_oft_adapter.ts --network sepolia
+setPeerMyOFTAdapter - oftAdapterContractAddress:0x4daa81978576cB91a2e1919960e90e46c2a6D586, lzEndpointIdOnDestChain:40102, oftContractAddress:0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1
+MyOFTAdapter - setPeer tx: 0xc17e7a54d96325768b6427ce893d9b6b7ed04bd920089b63a3f96c005073e9c2
+Done in 14.10s.
+```
+
+#### On OFT
+
+You can add a trusted peer in the destination chain (e.g. BNB Testnet) using the following command:
+
+```bash
+yarn set-peer-oft-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/set_peer_oft.ts --network bnbTestnet
+setPeerMyOFT - oftContractAddress:0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1, lzEndpointIdOnSrcChain:40161, oftAdapterContractAddress:0x4daa81978576cB91a2e1919960e90e46c2a6D586
+MyOFT - setPeer tx: 0xb0012378ee14c9df5c9f86980dd9c96fc8aedb3c19d92c1d91a4259f3981ac35
+Done in 4.66s.
+```
+
+### Send the Origin Tokens from the Source Chain to the Destination Chain
+
+
+You can use the following command to send tokens from the source chain to the destination chain:
+
+```bash
+yarn send-oft-from-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/send_oft.ts --network sepolia
+sendOFT - oftAdapterContractAddress:0x5D7Cbc05fc6df2832c40023f1Eb2755628C51D81, oftContractAddress:0x075e512E25b45a3EaF8b432220F0Ca8D4e3c6a58, lzEndpointIdOnSrcChain:40161, lzEndpointIdOnDestChain:40102, gasDropInWeiOnDestChain:1000000000000000, executorLzReceiveOptionMaxGas:200000, receivingAccountAddress:0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, sender: 0x57a4bd139fb673d364a6f12df9177a3f686625f3, amount:2
+sendOFT - approve tx: 0x8fa692edb47b1ad9d21f60b0fa30993e5cd3abd78c3c56fb4f38db5f9b8ac369
+sendOFT - estimated nativeFee: 0.000734209489447653
+sendOFT - send tx on source chain: 0xeb3e44310a09ae2ab2f0d6d6d3fdfd7c490f8ac536bb20a5e16999b23232ef67
+Wait for cross-chain tx finalization by LayerZero ...
+sendOFT - received tx on destination chain: 0xc2e5a4be8ae67718e817ff585a32765e393835880068f408fd7724667a25a46c
+```
+
+### Send Oft-Wrapped Tokens Back From the Destination Chain to the Origin Chain
+
+You can use the following command to send the OFT-wrapped tokens back to the origin chain:
+
+
+```bash
+yarn send-oft-back-from-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/send_oft_back.ts --network bnbTestnet
+sendOFTBack - oftAdapterContractAddress:0x5D7Cbc05fc6df2832c40023f1Eb2755628C51D81, oftContractAddress:0x075e512E25b45a3EaF8b432220F0Ca8D4e3c6a58, lzEndpointIdOnSrcChain:40161, lzEndpointIdOnDestChain:40102, gasDropInWeiOnDestChain:1000000000000000, executorLzReceiveOptionMaxGas:200000, receivingAccountAddress:0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, sender: 0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, amount:2
+sendOFTBack - estimated nativeFee: 0.054815809525020364
+sendOFTBack - send tx on source chain: 0x41bcf78b310dc1bbf9b4005f7412d995011c7815ad5af9cc26b37370e75bbfeb
+Wait for cross-chain tx finalization by LayerZero ...
+sendOFTBack - received tx on destination chain: 0xc1031694e92512a0189885ad6419e33196a65b8ae56baa9d555be8686d6d42fe
+```
+
diff --git a/docs/build/isc/v1.1/docs/how-tos/send-NFTs-across-chains.md b/docs/build/isc/v1.1/docs/how-tos/send-NFTs-across-chains.md
new file mode 100644
index 00000000000..273c11009b4
--- /dev/null
+++ b/docs/build/isc/v1.1/docs/how-tos/send-NFTs-across-chains.md
@@ -0,0 +1,365 @@
+# Send NFTs Across Chains
+
+## Introduction
+
+[LayerZero ONFT V1FV](https://docs.layerzero.network/V1) enables cross-chain transfers of existing ERC721 tokens. For
+testing purposes, the ShimmerEVM Testnet is chosen as the source chain, while the BNB Testnet is chosen as the destination
+chain.
+
+:::info Community Libs
+
+You can clone the Utilities for LayerZero ONFT V1
+from [IOTA Community GitHub Repository](https://github.com/iota-community/layerzero-onft-v1-utils).
+
+:::
+
+## Why Would a User Need to Send ERC721 Tokens Across Chains?
+
+By facilitating the movement of ERC721 tokens across chains, users gain flexibility and can optimize their NFT usage
+according to their specific needs, preferences, and circumstances.
+
+### Enable the Existing ERC721 Tokens for Cross-Chain Sending
+
+To enable the existing ERC721 tokens for cross-chain sending, you will need the `ProxyONFT` contract on the source
+chain,
+and the ONFT contract on the destination chain) are needed.
+
+The origin NFT token will be locked in the `ProxyONFT` contract so that the ONFT-wrapped tokens will be minted on the
+destination chain. If the NFT token already exists on the destination chain (i.e., when the ONFT-wrapped token on
+the destination chain is sent back to the source chain), no new token minting will happen. Instead, the NFT tokens will be
+transferred from the ONFT contract to the user's wallet address. Relevant code
+
+### Enable Cross-Chain Sending for Unloached ERC721 NFTs
+
+If you are launching a new ERC721 token, you can use the ONFT standard to enable cross-chain sending without the need of
+`ProxyONFT`. As with existing tokens, the NFT will be locked on the source chain and minted or transferred on the destination chain.
+
+:::info Contract Documentation
+
+- [ProxyONFT721](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/721#proxyonft721sol)
+- [ProxyONFT1155](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/1155#proxyonft1155sol)
+- [ONFT721](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/721#onft721sol)
+- [ONFT1155](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/1155#onft1155sol)
+
+:::
+
+## Scripts
+
+### Deploy the ProxyONFT and ONFT Contracts
+
+#### For ERC721
+
+- MyProxyONFT721.sol:
+ - CTOR:
+ - [`minGasToTransferAndStore`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/ONFT721Core.sol#L169):
+ The minimum gas needed to transfer and store your NFT is typically 100k for ERC721. This value would vary
+ depending on your contract complexity; it's recommended to test. If this value is set too low, the destination
+ tx will fail, and a manual retry is needed.
+ - `lzEndpoint`: LayerZero Endpoint on the source chain.
+ - `proxyToken`: deployed contract address of the NFT tokens on the source chain.
+
+- MyONFT721.sol:
+ - CTOR:
+ - `name`: name of the ONFT-wrapped tokens on the destination chain
+ - `symbol`: symbol of the ONFT-wrapped tokens on the destination chain
+ - [`minGasToTransferAndStore`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/ONFT721Core.sol#L169):
+ The minimum gas needed to transfer and store your NFT typically 100k for ERC721. This value would vary
+ depending on your contract complexity; it's recommended to test. If this value is set too low, the destination
+ tx will fail, and a manual retry is needed.
+ - `lzEndpoint`: - lzEndpoint: LayerZero Endpoint on the destination chain
+
+### Set the Trusted Remote
+
+For **existing ERC721 tokens**, the `ProxyONFT` and `ONFT` contract instances must be paired.
+
+For the **upcoming ERC721 tokens** that want to leverage the `ONFT` standard, the `ONFT` contract instance on the source chain
+needs to be paired with another `ONFT` contract instance on the destination chain.
+
+You can set this using the [`setTrustedRemote`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L138) method.
+
+### Set the `minGasLimit`
+
+Both the `ProxyONFT` and the `ONFT` contract instanceS need to be set for minimum gas on destination([`minGasLimit`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L85C37-L85C48)).
+
+You can set his using the [`setMinDstGas`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L159) method.
+
+:::info
+
+It is required that `minDstGas` <= `providedGasLimit`, which is to be set via `adapterParams` upon cross-chain sending on
+the source chain.
+
+:::
+
+### Set the Batch Size Limit
+
+Both the `ProxyONFT` and the `ONFT` contract instances need to set a limit for the batch size on the source
+chain to limit the number of tokens to be sent to another chain when using the
+[`sendBatchFrom`](https://github.com/LayerZero-Labs/solidity-examples/blob/c04e7d211b1b610f84761df943e6a38b0a53d304/contracts/token/onft721/ONFT721Core.sol#L67)
+method.
+
+You can set this using the [`setDstChainIdToBatchLimit`](https://github.com/LayerZero-Labs/solidity-examples/blob/c04e7d211b1b610f84761df943e6a38b0a53d304/contracts/token/onft721/ONFT721Core.sol#L194) method; the default value is 1.
+
+## How To Send Tokens From a Source Chain to a Destination Chain (and Vice-Versa)
+
+### Required Contracts
+
+#### From the Source Chain to the Destination Chain
+
+For the existing ERC721 tokens, you will need the `ProxyONFT` contract on the source chain and the `ONFT` contract on
+the destination chain. The procedure is as follows:
+
+1. The sender approves his ERC721 tokens for the `ProxyONFT` contract.
+2. The sender calls the function [`estimateSendFee()`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/interfaces/IONFT721Core.sol#L70) of the ProxyONFT contract to estimate cross-chain fee to be paid in
+ native on the source chain.
+3. The sender calls the function [`sendFrom()`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/interfaces/IONFT721Core.sol#L36) of the ProxyONFT contract to transfer tokens on source chain to destination
+ chain.
+4. (Optional) Wait for the transaction finalization on the destination chain by using the
+ [@layerzerolabs/scan-client](https://www.npmjs.com/package/@layerzerolabs/scan-client#example-usage) library.
+
+#### From the Destination Chain Back to the Source Chain
+
+To send back the ONFT-wrapped tokens on the destination chain to the source chain, the procedure is similar as the
+approve step is also required, but the operations will happen on the `ONFT` contract.
+
+#### References and Tools
+
+##### `AdapterParams`
+
+- You can use the [LayerZero Repository](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/libs/LzLib.sol#L44) as a reference to set gas drop on the destination in `adapterParams`.
+ - The provided gas drop must be `<=` the config one. Otherwise, you will get [`dstNativeAmt` too large](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/mocks/LZEndpointMock.sol#L413) error.
+- You can use the [LayerZero Repository](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/libs/LzLib.sol#L34) as a refernce to set default `adapterParams` without needing a gas drop.
+
+##### LayerZero
+
+- [LayerZero Endpoint V1](https://docs.layerzero.network/v1/developers/technical-reference/mainnet/mainnet-addresses)
+- [LayerZero explorer](https://Testnet.layerzeroscan.com/)
+
+### Install the Library
+
+After you have cloned
+the [IOTA Community Utilities for LayerZero ONFT V2 repository](https://github.com/iota-community/layerzero-onft-v1-utils),
+you should run the following command to install:
+
+```bash
+yarn
+```
+
+### Compile the Contracts
+
+If you want to use the standard implementation for ERC20, copy
+the [`contracts-standard`](https://github.com/iota-community/layerzero-oft-V1-utils/tree/main/contracts-standard) folder
+to `contracts`. If you want to use a custom implementation, copy
+the [`contracts-wiota`](https://github.com/iota-community/layerzero-oft-V1-utils/tree/main/contracts-wiota)
+to `contracts`. Then, run the following command to compile the contracts:
+
+```bash
+yarn compile
+```
+
+### Set Your Configuration
+
+You should copy the
+template [`.env.example`](https://github.com/iota-community/layerzero-oft-V1-utils/blob/main/.env.example) file to a
+file called `.env`, and edit any of the configuration options you see fit.
+
+```bash
+cp .env.example .env
+```
+
+### Deploy the Contracts
+
+#### Deploy a mock ERC721
+
+```bash
+yarn deploy-ERC721-mock-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_ERC721.ts --network shimmerEvmTestnet
+Deployed ERC721Mock contract address:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+Done in 4.49s.
+```
+
+#### Deploy `ProxyONFT721` on the source chain
+
+You can use the following command to deploy ProxyONFT721 on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn deploy-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_proxy_onft721.ts --network shimmerEvmTestnet
+Deployed MyProxyONFT721 contract address:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2
+Done in 4.50s.
+```
+
+#### Deploy `ProxyONFT721` on the destination chain
+
+You can use the following command to deploy ProxyONFT721 on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-min-dest-gas-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_min_destination_gas.ts --network bnbTestnet
+setMinDstGas - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xce044ded17daa77a8aefc3d39b99c5381216eb4057ddce6253affde6cda2091c
+setMinDstGas (packetType 1) tx: 0x3a26ae40ac058099bfd8b85910009a5e5e8b03f16a5f032b572827d48be8f2b0
+Done in 9.34s.
+```
+
+### Set the Minimum Destination Gas
+
+#### On the source chain
+
+You can use the following command to set the minimum destination gas on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-min-dest-gas-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_min_destination_gas.ts --network shimmerEvmTestnet
+setMinDstGas - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xcab06e9989448153a4bbc1bb166fc2d33467f3311d1851bf2ff719d982daa613
+setMinDstGas (packetType 1) tx: 0xe78fd3f0bf668fafbc423decd2cf14a27d74543af3ac9daf031f0b278c22ea78
+Done in 6.07s.
+```
+
+#### On the destination chain
+
+You can use the following command to set the minimum destination gas on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-min-dest-gas-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_min_destination_gas.ts --network bnbTestnet
+setMinDstGas - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xce044ded17daa77a8aefc3d39b99c5381216eb4057ddce6253affde6cda2091c
+setMinDstGas (packetType 1) tx: 0x3a26ae40ac058099bfd8b85910009a5e5e8b03f16a5f032b572827d48be8f2b0
+Done in 9.34s.
+```
+
+### Set the batch size limit
+
+#### On the source chain
+
+You can use the following command to set batch size limits on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-batch-size-limit-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_batch_size_limit.ts --network shimmerEvmTestnet
+setBatchSizeLimit - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102, batchSizeLimit:1
+setBatchSizeLimit tx: 0x70c23b3d3d5e94ef82e50944f7eba93fa1fe8db3a5487ac371015e7a14482e75
+Done in 4.28s.
+```
+
+#### On the destination chain
+
+You can use the following command to set batch size limits on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-batch-size-limit-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_batch_size_limit.ts --network bnbTestnet
+setBatchSizeLimit - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, batchSizeLimit:1
+setBatchSizeLimit tx: 0x8cb44c2195ac93da552c646677e6585c95ab172df19463637541933ec70dc9b8
+Done in 4.26s.
+```
+
+### Set the Trusted Remote
+
+#### On the source chain
+
+You can use the following command to set a trusted remote on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-remote-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_trusted_remote.ts --network shimmerEvmTestnet
+setTrustedRemote - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102
+setTrustedRemote tx: 0xce52c0f25090ef7c1668ef04ff2f6098551c9f56b3ce881d17181bf106457016
+Done in 4.24s.
+```
+
+##### On the destination chain
+
+You can use the following command to set a trusted remote on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-remote-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_trusted_remote.ts --network bnbTestnet
+setTrustedRemote - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230
+setTrustedRemote tx: 0x311a0568b5afce7d601df2613f8ff80428d8a4d2f2c91012e0e4a8cbc0aedf59
+Done in 4.88s.
+```
+
+### Send Origin Tokens From the Source Chain To the Destination Chain
+
+```bash
+yarn send-onft-from-smr-Testnet
+```
+
+Expected log output:
+
+```bash
+npx hardhat run scripts/send_onft.ts --network shimmerEvmTestnet
+sendONFT - proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnSrcChain:10230, lzEndpointIdOnDestChain:10102, gasDropInWeiOnDestChain:0, providedGasLimit:200000, receivingAccountAddress:0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, sender: 0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, nftTokenId:2, nftTokenAddress:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+sendONFT - approve tx: 0xa871bc79e45bf20f33c626044d6e208460c5745ab1f13d476dcbe04e1da7e592
+sendONFT - estimated nativeFee: 158.319172348046094655
+sendONFT - send tx on source chain: 0x72779c7549053194e42bcc78f78cf65e876867f0516dc91f28986c854e652596
+Wait for cross-chain tx finalization by LayerZero ...
+sendONFT - received tx on destination chain: 0x2700a9d35c139eb84ba07b75490e6627a30e00bde130e3cb7c1cbb81c0326138
+Done in 53.50s.
+```
+
+### Send ONFT-Wrapped Tokens Back From the Destination Chain Back To the Origin Chain
+
+```bash
+yarn send-onft-back-from-bnb-Testnet
+```
+
+Expected log output:
+
+```bash
+npx hardhat run scripts/send_onft_back.ts --network bnbTestnet
+sendONFTBack - proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnSrcChain:10230, lzEndpointIdOnDestChain:10102, gasDropInWeiOnDestChain:0, providedGasLimit:200000, receivingAccountAddress:0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, sender: 0x60917645A28258a75836aF63633850c5F3561C1b, nftTokenId:2, nftTokenAddress:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+sendONFTBack - approve tx: 0xe5bfff108528efdc67e72896845f0ad3e0186b4ed64835e7c5f3552eaab69d99
+sendONFTBack - estimated nativeFee: 0.000498452810033053
+sendONFTBack - send tx on source chain: 0xa43bb5547a5a35730fe183b4d554416a4ea34852e510d21f24d173db75db4e79
+Wait for cross-chain tx finalization by LayerZero ...
+sendONFTBack - received tx on destination chain: 0xb05fa2de194153819b26d17893278c485abbaf355fa24f26fbc7a4c759994cde
+Done in 212.16s.
+```
diff --git a/docs/build/isc/v1.1/docs/how-tos/send-funds-from-L1-to-L2.mdx b/docs/build/isc/v1.1/docs/how-tos/send-funds-from-L1-to-L2.mdx
index 1a9a469d7ea..0b1b47dec7f 100644
--- a/docs/build/isc/v1.1/docs/how-tos/send-funds-from-L1-to-L2.mdx
+++ b/docs/build/isc/v1.1/docs/how-tos/send-funds-from-L1-to-L2.mdx
@@ -36,14 +36,14 @@ If you want to fund your EVM Testnet account using the EVM Toolkit, please refer
To send EVM transactions, you need to have an Ethereum address that owns tokens on the ISC chain (L2). These tokens will
be used to cover gas fees.
-
+
-You can use your [Firefly Wallet](https://firefly.iota.org/) to easily send L1 SMR to your L2 ShimmerEVM account.
+You can use your [Firefly Wallet](https://firefly.iota.org/) to easily send L1 IOTA or SMR to your L2 IOTA EVM or ShimmerEVM account.
#### Requirements
-* [Shimmer Tokens](/get-started/introduction/shimmer/shimmer-token/) or [IOTA Tokens](/get-started/introduction/iota/iota-token/)
+* [IOTA Tokens](/get-started/introduction/iota/iota-token/) or [Shimmer Tokens](/get-started/introduction/shimmer/shimmer-token/)
* [Firefly Wallet](https://firefly.iota.org/)
* [Metamask](https://metamask.io/)
diff --git a/docs/build/isc/v1.1/docs/how-tos/test-smart-contracts.md b/docs/build/isc/v1.1/docs/how-tos/test-smart-contracts.md
index 7b032b6d9bf..c3f2a8aa344 100644
--- a/docs/build/isc/v1.1/docs/how-tos/test-smart-contracts.md
+++ b/docs/build/isc/v1.1/docs/how-tos/test-smart-contracts.md
@@ -5,9 +5,9 @@ keywords:
- Unit Tests
- Integration Tests
- Testing Frameworks
-- ShimmerEVM Testnet
+- EVM Testnet
- Solidity Testing
-description: Learn how to test smart contracts before deploying them on public networks to avoid vulnerabilities and ensure functionality aligns with requirements using unit, and integration testing, alongside frameworks and testing with the IOTA Sandbox and the ShimmerEVM Testnet.
+description: Learn how to test smart contracts before deploying them on public networks to avoid vulnerabilities and ensure functionality aligns with requirements using unit, and integration testing, alongside frameworks and testing with the IOTA Sandbox and the EVM Testnet.
---
# Testing Smart Contracts
@@ -91,18 +91,18 @@ expected.
#### Tools
-You can use the [ShimmerEVM Testnet](/build/networks-endpoints/#testnet-evm) to conduct integration tests without
+You can use the [EVM Testnet](/build/networks-endpoints/#shimmerevm-testnet) to conduct integration tests without
incurring any fees or the [IOTA Sandbox](/iota-sandbox/getting-started/) if you want to run the tests locally.
## Manual Testing
Once you have a complete batch of [automated tests](#automated-testing), manually testing your contract to ensure it
behaves as expected in the real world is still good practice. However, to avoid incurring fees or deploying a faulty
-contract, you can manually test your contract using a sandboxed local network and the Shimmer EVM Testnet.
+contract, you can manually test your contract using a sandboxed local network and the EVM Testnet.
Testing using the [IOTA Sandbox](/iota-sandbox/getting-started/) serves well for the first stage of automated and manual
integration tests, as you have complete control over the entire local network. Once you are confident about how your
-contract behaves locally, you can deploy and test on the [ShimmerEVM Testnet](/build/networks-endpoints/#testnet-evm),
-which replicates the ShimmerEVM network but also enables cost and risk-free interactions.
+contract behaves locally, you can deploy and test on the [EVM Testnet](/build/networks-endpoints/#shimmerevm-testnet),
+which replicates the IOTA EVM and ShimmerEVM networks, but also enables cost and risk-free interactions.
diff --git a/docs/build/isc/v1.1/docs/introduction.md b/docs/build/isc/v1.1/docs/introduction.md
index c644eb4da1a..b3811792692 100644
--- a/docs/build/isc/v1.1/docs/introduction.md
+++ b/docs/build/isc/v1.1/docs/introduction.md
@@ -11,13 +11,10 @@ tags:
- explanation
---
-import NetworkWarning from './_admonitions/_network_warning.md'
import OnOffLedgerRequest from './_partials/_on_off_ledger_request.md';
# Introduction
-
-
Smart contracts are deterministic applications that run on a distributed network with multiple
[validators](explanations/validators.md) that execute and validate the same code.
Their deterministic and distributed nature makes them predictable, stable and trustworthy.
diff --git a/docs/build/isc/v1.1/sidebars.js b/docs/build/isc/v1.1/sidebars.js
index a01017561cc..9d07b38ff0b 100644
--- a/docs/build/isc/v1.1/sidebars.js
+++ b/docs/build/isc/v1.1/sidebars.js
@@ -84,11 +84,21 @@ module.exports = {
label: 'Create Custom Tokens - ERC20',
id: 'how-tos/ERC20',
},
+ {
+ type: 'doc',
+ label: 'Send ERC20 Tokens Across Chains',
+ id: 'how-tos/send-ERC20-across-chains',
+ },
{
type: 'doc',
label: 'Create NFTs - ERC721',
id: 'how-tos/ERC721',
},
+ {
+ type: 'doc',
+ label: 'Send NFTs Across Chains',
+ id: 'how-tos/send-NFTs-across-chains',
+ },
{
type: 'doc',
label: 'Test Smart Contracts',
diff --git a/docs/build/isc/v1.3-alpha/docs/_admonitions/_network_warning.md b/docs/build/isc/v1.3-alpha/docs/_admonitions/_network_warning.md
deleted file mode 100644
index e7a18ce4286..00000000000
--- a/docs/build/isc/v1.3-alpha/docs/_admonitions/_network_warning.md
+++ /dev/null
@@ -1,6 +0,0 @@
-:::caution Only Available on Shimmer
-
-At the moment, Smart Contracts are only available on [Shimmer](/build/networks-endpoints/#shimmer) and
-its [Public Testnet](/build/networks-endpoints/#public-testnet) network.
-
-:::
\ No newline at end of file
diff --git a/docs/build/isc/v1.3-alpha/docs/_partials/_hardhat_config.md b/docs/build/isc/v1.3-alpha/docs/_partials/_hardhat_config.md
index d6257484a0b..96b134330bb 100644
--- a/docs/build/isc/v1.3-alpha/docs/_partials/_hardhat_config.md
+++ b/docs/build/isc/v1.3-alpha/docs/_partials/_hardhat_config.md
@@ -3,7 +3,22 @@ import { Networks } from '@theme/constant';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
-
+
+
+
+
+{`
+networks: {
+ 'iotaevm-testnet': {
+ url: '${Networks['iota_testnet'].evm.rpcUrls[0]}',
+ chainId: ${parseInt(Networks['iota_testnet'].evm.chainId)},
+ accounts: [YOUR PRIVATE KEY],
+ },
+}
+`}
+
+
+
@@ -19,14 +34,14 @@ networks: {
-
+
{`
networks: {
- 'iotaevm-testnet': {
- url: '${Networks['iota_testnet'].evm.rpcUrls[0]}',
- chainId: ${parseInt(Networks['iota_testnet'].evm.chainId)},
+ 'iotaevm': {
+ url: '${Networks['iota'].evm.rpcUrls[0]}',
+ chainId: ${parseInt(Networks['iota'].evm.chainId)},
accounts: [YOUR PRIVATE KEY],
},
}
diff --git a/docs/build/isc/v1.3-alpha/docs/getting-started/languages-and-vms.md b/docs/build/isc/v1.3-alpha/docs/getting-started/languages-and-vms.md
index 64bacc1c8b4..1719a69053f 100644
--- a/docs/build/isc/v1.3-alpha/docs/getting-started/languages-and-vms.md
+++ b/docs/build/isc/v1.3-alpha/docs/getting-started/languages-and-vms.md
@@ -1,10 +1,7 @@
import EVMCompatibility from '../_admonitions/_EVM_compatibility.md'
-import NetworkWarning from '../_admonitions/_network_warning.md'
# Supported Virtual Machines & Languages
-
-
The current release of IOTA Smart Contracts has support for [EVM/Solidity](#evmsolidity-based-smart-contracts) smart
contracts, as well as experimental [Wasm](#wasm-vm-for-isc) smart contracts, providing compatibility with
existing smart contracts and tooling from other EVM based chains like Ethereum. This allows us to offer the existing
diff --git a/docs/build/isc/v1.3-alpha/docs/getting-started/networks-and-chains.mdx b/docs/build/isc/v1.3-alpha/docs/getting-started/networks-and-chains.mdx
index cd1d3902ea0..cc3796b00ed 100644
--- a/docs/build/isc/v1.3-alpha/docs/getting-started/networks-and-chains.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/getting-started/networks-and-chains.mdx
@@ -4,7 +4,7 @@ tags:
- mainnet
- shimmer
- devnet
- - public testnet
+ - EVM Testnet
- reference
- Endpoints
---
@@ -35,6 +35,69 @@ The other values (network name and currency symbol) can be whatever value you li
:::
+## IOTA EVM
+
+[IOTA EVM](https://explorer.evm.iota.org) is the L2 EVM running on top of the IOTA network.
+
+
+
+
+
+### Additional Info
+
+
+
+## IOTA EVM Testnet
+
+
+
+[The IOTA EVM Testnet](https://explorer.evm.testnet.iotaledger.net/) runs as a layer 2 on top
+of the [IOTA Testnet](/build/networks-endpoints#iota-testnet). This network uses ISC to facilitate
+
+:::info
+
+This network is subject to occasional resets (no data retention) which are usually announced with a one-week grace period.
+
+:::
+
+
+
+:::note
+
+The other values (network name and currency symbol) can be whatever value you like.
+
+:::
+
+### Additional Info
+
+
+
+## ShimmerEVM Testnet
+
+
+
+[The ShimmerEVM Testnet](https://explorer.evm.testnet.shimmer.network/) runs as a layer 2 on top
+of the [Shimmer Testnet](/build/networks-endpoints#shimmer-testnet). This network uses ISC to facilitate
+an Ethereum Virtual Machine and has an enshrined bridge to layer 1.
+
+:::info
+
+This network is subject to occasional resets (no data retention) which are usually announced with a one-week grace period.
+
+:::
+
+
+
+:::note
+
+The other values (network name and currency symbol) can be whatever value you like.
+
+:::
+
+### Additional Info
+
+
+
## ShimmerEVM
[ShimmerEVM](https://explorer.evm.shimmer.network/) is the L2 EVM running on top of the Shimmer network.
@@ -43,6 +106,10 @@ The other values (network name and currency symbol) can be whatever value you li
+### Additional Info
+
+
+
## ShimmerEVM Testnet
@@ -65,8 +132,12 @@ The other values (network name and currency symbol) can be whatever value you li
:::
+### Additional Info
+
+
+
## Core Contracts
-[ShimmerEVM](#shimmerEVM) and the testnet networks have 7
+[IOTA EVM](#IOTAEVM), [ShimmerEVM](#shimmerEVM) and the testnet networks have 7
[core contracts](../reference/core-contracts/overview.md) deployed, as well as the
[Magic Contract](../reference/magic-contract/introduction.md).
diff --git a/docs/build/isc/v1.3-alpha/docs/getting-started/quick-start.mdx b/docs/build/isc/v1.3-alpha/docs/getting-started/quick-start.mdx
index b687e3b700d..4abc7e7b247 100644
--- a/docs/build/isc/v1.3-alpha/docs/getting-started/quick-start.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/getting-started/quick-start.mdx
@@ -1,5 +1,5 @@
---
-description: This guide will help you quickly get started with the [Public Testnet](/build/networks-endpoints/#public-testnet)
+description: This guide will help you quickly get started with the EVM Testnets
image: /img/logo/WASP_logo_dark.png
tags:
- quickstart
@@ -62,11 +62,11 @@ You can now use your testnet tokens and simulated bridged tokens to deploy and i
Visit the corresponding Testnet Block Explorer to monitor the chain, track transactions, and explore deployed smart contracts.
-
-
+
+
Explorer
-
+
Explorer
diff --git a/docs/build/isc/v1.3-alpha/docs/getting-started/tools.mdx b/docs/build/isc/v1.3-alpha/docs/getting-started/tools.mdx
index 13709a276d4..d2150465845 100644
--- a/docs/build/isc/v1.3-alpha/docs/getting-started/tools.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/getting-started/tools.mdx
@@ -24,6 +24,7 @@ import { Networks } from '@theme/constant';
import DeployAdmonition from '../_admonitions/_deploy_a_smart_contract.md';
import { ChainId } from '@theme/ChainId';
import NetworkInfo from '@theme/NetworkInfo';
+import OraclesContractData from '../../../../_partials/_oracles_contract_data.md';
# Compatible Tools
@@ -34,7 +35,8 @@ directly with an IOTA Smart Contracts chain running EVM as long as you take a co
1. Please make sure you use the correct JSON-RPC endpoint URL in your tooling for your chain. If you're running your own chain, you can find the JSON-RPC
endpoint URL in the Wasp dashboard (`[URL]/wasp/dashboard` when using `node-docker-setup`).
-2. Please ensure you use the correct `Chain ID` configured while starting the JSON-RPC service. If you did not explicitly define this while starting the service, the default Chain ID will be
+2. Please ensure you use the correct `Chain ID` configured while starting the JSON-RPC service. If you did not explicitly define this while starting the service, the default Chain ID will be
+for IOTA EVM,
for ShimmerEVM or for the EVM Testnet.
3. Fees are handled on the IOTA Smart Contracts chain level, not the EVM level. The chain will reject any requests with a different gas price than specified by the chain.
@@ -46,6 +48,66 @@ chain ID after deployment.**
:::
+## Network RPCs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## IOTA EVM Tools
+
+The following tools are **only available on IOTA EVM**.
+
+### Blast API
+
+The [Blast API](/build/blastAPI) is a decentralized platform that provides reliable and scalable node infrastructure
+for accessing blockchain data. You can find the Blast API URLs in the [Network RPCs](#network-rpcs)
+
+### EVM Toolkit
+
+You can use the [IOTA EVM Toolkit](https://evm-toolkit.evm.iotaledger.net) to withdraw assets from IOTA EVM to IOTA L1.
+It also includes a wrapper IOTA <-> wIOTA.
+
+### Multicall3
+
+If you need to aggregate results from multiple contract reads into a single JSON-RPC request or execute multiple
+state-changing calls in a single transaction, you can use the [Multicall3 contract](https://explorer.evm.iota.org/address/0xcA11bde05977b3631167028862bE2a173976CA11?tab=contract).
+
+## IOTA EVM and ShimmerEVM Tools
+
+The following tools are available on both IOTA EVM end ShimmerEVM.
+
+### MultiSig Wallets
+
+If you require and additional level of security, you can use the [Safe{} Wallet](https://safe.iotaledger.net/) as a
+Multisig solution on IOTA EVM.
+
+### Oracles
+
+If your project requires [Oracles](/build/oracles/) to provide data from the outside world, you find both Pyth and Supra have integrated IOTA EVM.
+
+
+
+### Subgraphs
+
+[Subgraphs](/build/subgraphs/) provide a streamlined way for developers to access blockchain data relevant to their applications,
+significantly enhancing developer efficiency and user experience. IOTA EVM subgraphs available via [Goldsky](https://goldsky.com).
+
## MetaMask
[MetaMask](https://metamask.io/) is a popular EVM wallet which runs in a browser extension that allows you to
@@ -55,16 +117,20 @@ To use your EVM chain with MetaMask, simply open up MetaMask and click on the ne
the bottom of this list, you will see the option `Add network`. On the new page you will see a list of popular network with the option `Add a network manually`.
For example this would be the configs to add our different [EVM chains](/build/networks-endpoints):
-
-
+
+
+
+
+
+
-
+
-
+
@@ -113,9 +179,9 @@ often offered through block explorer APIs.
## Ethers.js/Web3.js
-If you input the correct configuration parameters for the JSON-RPC endpoint to talk
-to, [Ethers.js](https://docs.ethers.io/) and [Web3.js](https://web3js.readthedocs.io/) are also compatible with EVM
-chains on IOTA Smart Contracts. Alternatively, you can let both interact through MetaMask instead so that it uses the
+If you input the correct configuration parameters for the JSON-RPC endpoint to talk to,
+[Ethers.js](https://docs.ethers.io/) and [Web3.js](https://web3js.readthedocs.io/) are also compatible with EVM chains on IOTA Smart Contracts.
+Alternatively, you can let both interact through MetaMask instead so that it uses the
network configured in MetaMask. For more information on this, read their documentation.
## Other Tooling
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/ERC20.md b/docs/build/isc/v1.3-alpha/docs/how-tos/ERC20.md
index 9bbd6929beb..adf0a6ccfa1 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/ERC20.md
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/ERC20.md
@@ -74,8 +74,9 @@ Once you have deployed your contract, you can add your new custom token to your
1. Open Metamask, and click on the transaction that created the contract. From there, you can simply click
on `View on block explorer` to visit the transaction details. Alternatively, you can copy the transaction ID and
- visit the [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/)
- or [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/) and use the search bar to find transaction.
+ visit the [IOTA EVM Explorer](https://explorer.evm.iota.org),
+ [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/)
+ or [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/) and use the search bar to find transaction.
!['View on block explorer](/img/evm/how-tos/ERC20/metamask-get-transaction-or-go-to-block-explorer.png)
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/ERC721.md b/docs/build/isc/v1.3-alpha/docs/how-tos/ERC721.md
index 0b66f129e59..767661dbff2 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/ERC721.md
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/ERC721.md
@@ -42,7 +42,7 @@ your smart contracts.
## Create the Smart Contract
-The following is an example NFT Smart Contract called "ShimmerEVMSampleNFT".
+The following is an example NFT Smart Contract called "IotaEVMSampleNFT".
```solidity
// SPDX-License-Identifier: MIT
@@ -51,11 +51,11 @@ pragma solidity ^0.8.20;
import "@openzeppelin/contracts@5.0.1/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@5.0.1/access/Ownable.sol";
-contract ShimmerEVMSampleNFT is ERC721, Ownable {
+contract IotaEVMSampleNFT is ERC721, Ownable {
uint256 private _nextTokenId;
constructor(address initialOwner)
- ERC721("ShimmerEVMSampleNFT", "SSNFT")
+ ERC721("IotaEVMSampleNFT", "SSNFT")
Ownable(initialOwner)
{}
@@ -73,9 +73,9 @@ contract ShimmerEVMSampleNFT is ERC721, Ownable {
As you can see above, the contract uses standard methods for the most part. You should pay attention to the following:
- `pragma solidity ^0.8.20;`: This line means the contract uses solidity compiler version `0.8.20` or above.
-- `contract ShimmerEVMSampleNFT is ERC721, ERC721URIStorage, Ownable`: This line defines the contract's name, and what
+- `contract IotaEVMSampleNFT is ERC721, ERC721URIStorage, Ownable`: This line defines the contract's name, and what
other contracts it implements.
-- `ERC721("ShimmerEVMSampleNFT", "SNFT") {}`: This line defines the token name and symbol. You can name it
+- `ERC721("IotaEVMSampleNFT", "SNFT") {}`: This line defines the token name and symbol. You can name it
whatever you want. We recommend using the same name for the token and the contract.
- `return "https://example.com/nft/";`: You should define the base URI of your NFTs. That means the URL you provide here
will be used for all your tokens. Since this contract uses auto-incremental token IDs, your token URI will look
@@ -101,7 +101,7 @@ directly.
:::note Set the Initial Owner
-Before you can deploy this contract, you will need to set the `Initial Owner` address; this can be your own ShimmerEVM address.
+Before you can deploy this contract, you will need to set the `Initial Owner` address; this can be your own IOTA EVM address.
!["Set the initial owner" img.png](/img/evm/how-tos/ERC721/set-initial-owner.png)
@@ -115,13 +115,15 @@ So far, you have [created](#create-the-smart-contract) and deployed the contract
To do, you should:
1. Open the contract (listed under `Deployed Contracts`).
-2. Insert your target ShimmerEVM in beside the `safeMint` button and then click the button.
+2. Insert your target IOTA EVM in beside the `safeMint` button and then click the button.
![Safe mint](/img/evm/how-tos/ERC721/safe-mint.png)
+
3. Confirm the transaction on Metamask.
![Confirm in metamask](/img/evm/how-tos/ERC721/confirm-in-metamask.png)
-If you visit your address in the [ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/) or [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/)
+If you visit your address in the visit the [IOTA EVM Explorer](https://explorer.evm.iota.org),
+[ShimmerEVM Explorer](https://explorer.evm.testnet.shimmer.network/) or [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/)
you should see your NFTs listed under `Tokens`.
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx b/docs/build/isc/v1.3-alpha/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
index 4fb8baa24da..a479d9bb2c1 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/core-contracts/basics/send-assets-to-l1.mdx
@@ -18,7 +18,7 @@ import AboutAccounts from '../../../_admonitions/_about-accounts.md';
:::info
-ShimmerEVM has 18 decimal places, while Shimmer has 6. This means that any decimals beyond the 6th will be ignored by Shimmer, even though you can see them on ShimmerEVM. Please keep this in mind while sending your tokens to L1.
+IOTA EVM and ShimmerEVM have 18 decimal places, while IOTA and Shimmer have 6. This means that any decimals beyond the 6th will be ignored by IOTA and Shimmer, even though you can see them on IOTA EVM and ShimmerEVM. Please keep this in mind while sending your tokens to L1.
:::
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/deploy-a-smart-contract.mdx b/docs/build/isc/v1.3-alpha/docs/how-tos/deploy-a-smart-contract.mdx
index c841f051a71..0a1860715ec 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/deploy-a-smart-contract.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/deploy-a-smart-contract.mdx
@@ -2,11 +2,12 @@
tags:
- Smart Contract Deployment
- Shimmer EVM
+- IOTA EVM
- Remix IDE
- Hardhat
-- Shimmer EVM Testnet
+- EVM Testnet
image: /img/logo/WASP_logo_dark.png
-description: 'Learn how to deploy smart contracts to Shimmer EVM and Shimmer EVM Testnet using popular tools like Remix and Hardhat.'
+description: 'Learn how to deploy smart contracts to IOTA EVM, Shimmer EVM and EVM Testnet using popular tools like Remix and Hardhat.'
---
import {AddToMetaMaskButton } from '@theme/AddToMetaMaskButton';
import HardhatConfig from '../_partials/_hardhat_config.md';
@@ -27,7 +28,7 @@ the [How to Create a Basic Solidity Contract Guide](create-a-basic-contract.md).
:::
-
+
Deploying a Solidity smart contract using Remix is a straightforward process that doesn't require any installation or
@@ -176,7 +177,7 @@ often offered through block explorer APIs.
3. If you have no compilation errors, you can deploy your contract by running the following command:
```bash
- npx hardhat run scripts/deploy.js --network shimmerevm-testnet
+ npx hardhat run scripts/deploy.js --network evm-testnet
```
**Expected output**:
@@ -187,7 +188,7 @@ often offered through block explorer APIs.
***** `0x123456789ABCDEFGHIJK123456789ABCDEFGHIJK` is the contract unlock address.
4. You can verify your contract by visiting
- the [ShimmerEVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/),
+ the [EVM Testnet Explorer](https://explorer.evm.testnet.shimmer.network/),
and searching for the address from the previous step. If you access the `Contract` tab, you should be able to see
your code and interact with your contract.
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/send-ERC20-across-chains.md b/docs/build/isc/v1.3-alpha/docs/how-tos/send-ERC20-across-chains.md
new file mode 100644
index 00000000000..af8cc67fa54
--- /dev/null
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/send-ERC20-across-chains.md
@@ -0,0 +1,297 @@
+# Send ERC20 Tokens Across Chains
+
+## Introduction
+
+[LayerZero OFT V2](https://docs.layerzero.network/v2) enables cross-chain transfers of existing ERC20 tokens, such as wSMR and wIOTA (wrapped versions of the native gas tokens SMR and IOTA on ShimmerEVM and IOTA EVM respectively). For testing purposes, Sepolia is chosen as the source chain, while the BNB Testnet is chosen as the destination chain.
+
+:::info Community Libs
+
+You can clone the Utilities for LayerZero OFT V2 from [IOTA Community GitHub Repository](https://github.com/iota-community/layerzero-oft-v2-utils).
+
+:::
+
+### Why Would a User Need to Send ERC20 Tokens Across Chains?
+
+Sending ERC20 tokens across chains allows users to leverage different blockchain networks' strengths and unique features, optimize costs, and manage risks more effectively. This flexibility is crucial as the blockchain ecosystem continues to grow and diversify.
+
+#### Send Existing ERC20 Tokens Across Chains
+
+You need both the [OFT Adapter](https://docs.layerzero.network/v2/developers/evm/oft/adapter) and OFT contracts to enable existing ERC20 tokens for cross-chain sending,
+
+#### Create New Cross-chain Fungible Tokens
+
+If you are about to launch a new ERC20 token, you can use the [OFT standard](https://docs.layerzero.network/v2/developers/evm/oft/quickstart) to enable cross-chain sending without the OFT Adapter.
+
+## How To Use IOTA's Utilities for LayerZero OFT V2
+
+The [Utilities for LayerZero OFT V2](https://github.com/iota-community/layerzero-oft-v2-utils) facilitate cross-chain sending of ERC20 tokens between a source chain (e.g., Sepolia or ShimmerEVM Testnet) and a destination chain (e.g., BNB Testnet or IOTA EVM Testnet).
+
+:::tip Further Information
+
+You can learn more about the available options in the [Layer Zero Documentation](https://docs.layerzero.network/v2/developers/evm/gas-settings/options#option-types.).
+
+:::
+
+### Send Tokens From One Source Chain to Another Destination Chain (and Vice Versa)
+
+To send existing ERC20 tokens, you will need both the OFT Adapter contract on the source chain and the OFT contract on the destination chain. You should then use the following procedure:
+
+#### 1. Approve the tokens
+
+The sender must approve their ERC20 tokens for the OFT Adapter contract.
+
+```typescript
+const approveTx = await erc20TokenContract.approve(oftAdapterContractAddress, amountInWei);
+```
+
+#### 2. Estimate the fee
+
+The sender calls the function `quoteSend()` of the OFT Adapter contract to estimate the cross-chain fee to be paid in native tokens on the source chain.
+
+```typescript
+ const sendParam = [
+ lzEndpointIdOnDestChain,
+ receiverAddressInBytes32,
+ amountInWei,
+ amountInWei,
+ options, // additional options
+ "0x", // composed message for the send() operation
+ "0x", // OFT command to be executed, unused in default OFT implementations
+ ];
+
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L127C60-L127C73
+ // false is set for _payInLzToken Flag indicating whether the caller is paying in the LZ token
+ const [nativeFee] = await myOFTAdapterContract.quoteSend(sendParam as any, false);
+```
+
+#### 3. Send the tokens
+
+The sender calls the function `send()` of the OFT Adapter contract to transfer tokens from the source chain to the destination chain.
+
+```typescript
+ const sendTx = await myOFTAdapterContract.send(
+ sendParam as any,
+ [nativeFee, 0] as any, // set 0 for lzTokenFee
+ sender.address, // refund address
+ {
+ value: nativeFee,
+ },
+ );
+ const sendTxReceipt = await sendTx.wait();
+ console.log("sendOFT - send tx on source chain:", sendTxReceipt?.hash);
+```
+
+#### 4. (Optional) Wait for Finalization
+
+The sender can wait for transaction finalization on the destination chain using the library [@layerzerolabs/scan-client](https://www.npmjs.com/package/@layerzerolabs/scan-client#example-usage).
+```typescript
+ const deliveredMsg = await waitForMessageReceived(
+ Number(lzEndpointIdOnDestChain),
+ sendTxReceipt?.hash as string,
+ );
+ console.log("sendOFT - received tx on destination chain:", deliveredMsg?.dstTxHash);
+```
+
+### Send the OFT-wrapped Tokens Back
+
+To send back the OFT-wrapped tokens on the destination chain to the source chain, the procedure is similar, except that the approval step is not needed:
+
+#### 1. Estimate the fee
+
+The sender calls the function `quoteSend()` of the OFT contract to estimate the cross-chain fee to be paid in native tokens on the sender chain.
+
+```typescript
+ // Set the send param
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L10
+ const sendParam = [
+ lzEndpointIdOnSrcChain, // Sepolia
+ receiverAddressInBytes32,
+ amountInWei,
+ amountInWei,
+ options, // additional options
+ "0x", // composed message for the send() operation
+ "0x", // OFT command to be executed, unused in default OFT implementations
+ ];
+
+ // Step 1: call the func quoteSend() to estimate cross-chain fee to be paid in native on the source chain
+ // https://github.com/LayerZero-Labs/LayerZero-v2/blob/main/oapp/contracts/oft/interfaces/IOFT.sol#L127C60-L127C73
+ // false is set for _payInLzToken Flag indicating whether the caller is paying in the LZ token
+ const [nativeFee] = await myOFTContract.quoteSend(sendParam as any, false);
+ console.log("sendOFTBack - estimated nativeFee:", ethers.formatEther(nativeFee));
+ ```
+
+#### 2. Send the tokens
+
+The sender calls the function `send()` of the OFT contract to transfer tokens from the destination chain back to the source chain.
+
+```typescript
+const sendTx = await myOFTContract.send(
+ sendParam as any,
+ [nativeFee, 0] as any, // set 0 for lzTokenFee
+ sender.address, // refund address
+ {
+ value: nativeFee,
+ },
+ );
+ const sendTxReceipt = await sendTx.wait();
+ console.log("sendOFTBack - send tx on source chain:", sendTxReceipt?.hash);
+ ```
+
+#### 3. (Optional) Wait for Finalization
+
+The sender can wait for transaction finalization on the destination chain using the library `@layerzerolabs/scan-client`.
+```typescript
+ const deliveredMsg = await waitForMessageReceived(
+ Number(lzEndpointIdOnDestChain),
+ sendTxReceipt?.hash as string,
+ );
+ console.log("sendOFTBack - received tx on destination chain:", deliveredMsg?.dstTxHash);
+ ```
+
+## Sample Solidity Code for OFT Adapter and OFT Contracts in the `contracts-standard` Folder
+
+The [contracts-standard](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-standard) contains scripts to:
+
+- [Deploy the OFT Adapter and OFT contracts](#deploy-the-oft-adapter-contract-on-the-source-chain).
+- [Set your trusted peers](#optional-set-the-trusted-peers).
+- Set enforced options.
+- [Send tokens from the source chain to the destination chain](#send-the-origin-tokens-from-the-source-chain-to-the-destination-chain),
+and [vice versa](#send-oft-wrapped-tokens-back-from-the-destination-chain-to-the-origin-chain).
+
+### Install the Library
+
+After you have cloned the [IOTA Community Utilities for LayerZero OFT V2 repository](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main), you should run the following command to install:
+
+```
+yarn
+```
+
+### Compile the Contracts
+
+If you want to use the standard implementation for ERC20, copy the [`contracts-standard`](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-standard) folder to `contracts`. If you want to use a custom implementation, copy the [`contracts-wiota`](https://github.com/iota-community/layerzero-oft-v2-utils/tree/main/contracts-wiota) to `contracts`. Then, run the following command to compile the contracts:
+
+```bash
+yarn compile
+```
+
+### Set Your Configuration
+
+You should copy the template [`.env.example`](https://github.com/iota-community/layerzero-oft-v2-utils/blob/main/.env.example) file to a file called `.env`, and edit any of the configuration options you see fit.
+
+```bash
+cp .env.example .env
+```
+
+### Deploy the Contracts
+
+#### Deploy the OFT Adapter Contract On the Source Chain
+
+The OFT Adapter facilitates the expansion of an existing token to any supported blockchain as a native token, maintaining a unified global supply and inheriting all features of the OFT Standard. This intermediary contract manages the sending and receiving of pre-deployed tokens.
+
+For instance, when an ERC20 token is transferred from the source chain (Chain A), it gets locked in the OFT Adapter. Consequently, a corresponding token is minted on the destination chain (Chain B) through the paired OFT Contract.
+
+```bash
+yarn deploy-oft-adapter-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_oft_adapter.ts --network sepolia
+Deployed MyOFTAdapter contract address: 0x4daa81978576cB91a2e1919960e90e46c2a6D586
+Done in 6.67s.
+```
+
+#### Deploy OFT on the Destination Chain
+
+You can use the following command to deploy OFT on destination chain (e.g. BNB Testnet):
+
+```bash
+yarn deploy-oft-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_oft.ts --network bnbTestnet
+Deployed MyOFT contract address: 0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1
+Done in 6.68s.
+```
+
+### (optional) Set the Trusted Peers
+
+#### On OFTAdapter
+
+You can set the trusted peer in the source chain's OFT Adapter (e.g., Sepolia) using the following command:
+
+```bash
+yarn set-peer-oft-adapter-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/set_peer_oft_adapter.ts --network sepolia
+setPeerMyOFTAdapter - oftAdapterContractAddress:0x4daa81978576cB91a2e1919960e90e46c2a6D586, lzEndpointIdOnDestChain:40102, oftContractAddress:0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1
+MyOFTAdapter - setPeer tx: 0xc17e7a54d96325768b6427ce893d9b6b7ed04bd920089b63a3f96c005073e9c2
+Done in 14.10s.
+```
+
+#### On OFT
+
+You can add a trusted peer in the destination chain (e.g. BNB Testnet) using the following command:
+
+```bash
+yarn set-peer-oft-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/set_peer_oft.ts --network bnbTestnet
+setPeerMyOFT - oftContractAddress:0xCc337C2e69F4Eb8EaBcf632a1fC5B8F729dC47F1, lzEndpointIdOnSrcChain:40161, oftAdapterContractAddress:0x4daa81978576cB91a2e1919960e90e46c2a6D586
+MyOFT - setPeer tx: 0xb0012378ee14c9df5c9f86980dd9c96fc8aedb3c19d92c1d91a4259f3981ac35
+Done in 4.66s.
+```
+
+### Send the Origin Tokens from the Source Chain to the Destination Chain
+
+
+You can use the following command to send tokens from the source chain to the destination chain:
+
+```bash
+yarn send-oft-from-sepolia
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/send_oft.ts --network sepolia
+sendOFT - oftAdapterContractAddress:0x5D7Cbc05fc6df2832c40023f1Eb2755628C51D81, oftContractAddress:0x075e512E25b45a3EaF8b432220F0Ca8D4e3c6a58, lzEndpointIdOnSrcChain:40161, lzEndpointIdOnDestChain:40102, gasDropInWeiOnDestChain:1000000000000000, executorLzReceiveOptionMaxGas:200000, receivingAccountAddress:0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, sender: 0x57a4bd139fb673d364a6f12df9177a3f686625f3, amount:2
+sendOFT - approve tx: 0x8fa692edb47b1ad9d21f60b0fa30993e5cd3abd78c3c56fb4f38db5f9b8ac369
+sendOFT - estimated nativeFee: 0.000734209489447653
+sendOFT - send tx on source chain: 0xeb3e44310a09ae2ab2f0d6d6d3fdfd7c490f8ac536bb20a5e16999b23232ef67
+Wait for cross-chain tx finalization by LayerZero ...
+sendOFT - received tx on destination chain: 0xc2e5a4be8ae67718e817ff585a32765e393835880068f408fd7724667a25a46c
+```
+
+### Send Oft-Wrapped Tokens Back From the Destination Chain to the Origin Chain
+
+You can use the following command to send the OFT-wrapped tokens back to the origin chain:
+
+
+```bash
+yarn send-oft-back-from-bnb-testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/send_oft_back.ts --network bnbTestnet
+sendOFTBack - oftAdapterContractAddress:0x5D7Cbc05fc6df2832c40023f1Eb2755628C51D81, oftContractAddress:0x075e512E25b45a3EaF8b432220F0Ca8D4e3c6a58, lzEndpointIdOnSrcChain:40161, lzEndpointIdOnDestChain:40102, gasDropInWeiOnDestChain:1000000000000000, executorLzReceiveOptionMaxGas:200000, receivingAccountAddress:0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, sender: 0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, amount:2
+sendOFTBack - estimated nativeFee: 0.054815809525020364
+sendOFTBack - send tx on source chain: 0x41bcf78b310dc1bbf9b4005f7412d995011c7815ad5af9cc26b37370e75bbfeb
+Wait for cross-chain tx finalization by LayerZero ...
+sendOFTBack - received tx on destination chain: 0xc1031694e92512a0189885ad6419e33196a65b8ae56baa9d555be8686d6d42fe
+```
+
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/send-NFTs-across-chains.md b/docs/build/isc/v1.3-alpha/docs/how-tos/send-NFTs-across-chains.md
new file mode 100644
index 00000000000..273c11009b4
--- /dev/null
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/send-NFTs-across-chains.md
@@ -0,0 +1,365 @@
+# Send NFTs Across Chains
+
+## Introduction
+
+[LayerZero ONFT V1FV](https://docs.layerzero.network/V1) enables cross-chain transfers of existing ERC721 tokens. For
+testing purposes, the ShimmerEVM Testnet is chosen as the source chain, while the BNB Testnet is chosen as the destination
+chain.
+
+:::info Community Libs
+
+You can clone the Utilities for LayerZero ONFT V1
+from [IOTA Community GitHub Repository](https://github.com/iota-community/layerzero-onft-v1-utils).
+
+:::
+
+## Why Would a User Need to Send ERC721 Tokens Across Chains?
+
+By facilitating the movement of ERC721 tokens across chains, users gain flexibility and can optimize their NFT usage
+according to their specific needs, preferences, and circumstances.
+
+### Enable the Existing ERC721 Tokens for Cross-Chain Sending
+
+To enable the existing ERC721 tokens for cross-chain sending, you will need the `ProxyONFT` contract on the source
+chain,
+and the ONFT contract on the destination chain) are needed.
+
+The origin NFT token will be locked in the `ProxyONFT` contract so that the ONFT-wrapped tokens will be minted on the
+destination chain. If the NFT token already exists on the destination chain (i.e., when the ONFT-wrapped token on
+the destination chain is sent back to the source chain), no new token minting will happen. Instead, the NFT tokens will be
+transferred from the ONFT contract to the user's wallet address. Relevant code
+
+### Enable Cross-Chain Sending for Unloached ERC721 NFTs
+
+If you are launching a new ERC721 token, you can use the ONFT standard to enable cross-chain sending without the need of
+`ProxyONFT`. As with existing tokens, the NFT will be locked on the source chain and minted or transferred on the destination chain.
+
+:::info Contract Documentation
+
+- [ProxyONFT721](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/721#proxyonft721sol)
+- [ProxyONFT1155](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/1155#proxyonft1155sol)
+- [ONFT721](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/721#onft721sol)
+- [ONFT1155](https://docs.layerzero.network/v1/developers/evm-guides/contract-standards/1155#onft1155sol)
+
+:::
+
+## Scripts
+
+### Deploy the ProxyONFT and ONFT Contracts
+
+#### For ERC721
+
+- MyProxyONFT721.sol:
+ - CTOR:
+ - [`minGasToTransferAndStore`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/ONFT721Core.sol#L169):
+ The minimum gas needed to transfer and store your NFT is typically 100k for ERC721. This value would vary
+ depending on your contract complexity; it's recommended to test. If this value is set too low, the destination
+ tx will fail, and a manual retry is needed.
+ - `lzEndpoint`: LayerZero Endpoint on the source chain.
+ - `proxyToken`: deployed contract address of the NFT tokens on the source chain.
+
+- MyONFT721.sol:
+ - CTOR:
+ - `name`: name of the ONFT-wrapped tokens on the destination chain
+ - `symbol`: symbol of the ONFT-wrapped tokens on the destination chain
+ - [`minGasToTransferAndStore`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/ONFT721Core.sol#L169):
+ The minimum gas needed to transfer and store your NFT typically 100k for ERC721. This value would vary
+ depending on your contract complexity; it's recommended to test. If this value is set too low, the destination
+ tx will fail, and a manual retry is needed.
+ - `lzEndpoint`: - lzEndpoint: LayerZero Endpoint on the destination chain
+
+### Set the Trusted Remote
+
+For **existing ERC721 tokens**, the `ProxyONFT` and `ONFT` contract instances must be paired.
+
+For the **upcoming ERC721 tokens** that want to leverage the `ONFT` standard, the `ONFT` contract instance on the source chain
+needs to be paired with another `ONFT` contract instance on the destination chain.
+
+You can set this using the [`setTrustedRemote`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L138) method.
+
+### Set the `minGasLimit`
+
+Both the `ProxyONFT` and the `ONFT` contract instanceS need to be set for minimum gas on destination([`minGasLimit`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L85C37-L85C48)).
+
+You can set his using the [`setMinDstGas`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/LzApp.sol#L159) method.
+
+:::info
+
+It is required that `minDstGas` <= `providedGasLimit`, which is to be set via `adapterParams` upon cross-chain sending on
+the source chain.
+
+:::
+
+### Set the Batch Size Limit
+
+Both the `ProxyONFT` and the `ONFT` contract instances need to set a limit for the batch size on the source
+chain to limit the number of tokens to be sent to another chain when using the
+[`sendBatchFrom`](https://github.com/LayerZero-Labs/solidity-examples/blob/c04e7d211b1b610f84761df943e6a38b0a53d304/contracts/token/onft721/ONFT721Core.sol#L67)
+method.
+
+You can set this using the [`setDstChainIdToBatchLimit`](https://github.com/LayerZero-Labs/solidity-examples/blob/c04e7d211b1b610f84761df943e6a38b0a53d304/contracts/token/onft721/ONFT721Core.sol#L194) method; the default value is 1.
+
+## How To Send Tokens From a Source Chain to a Destination Chain (and Vice-Versa)
+
+### Required Contracts
+
+#### From the Source Chain to the Destination Chain
+
+For the existing ERC721 tokens, you will need the `ProxyONFT` contract on the source chain and the `ONFT` contract on
+the destination chain. The procedure is as follows:
+
+1. The sender approves his ERC721 tokens for the `ProxyONFT` contract.
+2. The sender calls the function [`estimateSendFee()`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/interfaces/IONFT721Core.sol#L70) of the ProxyONFT contract to estimate cross-chain fee to be paid in
+ native on the source chain.
+3. The sender calls the function [`sendFrom()`](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/token/onft721/interfaces/IONFT721Core.sol#L36) of the ProxyONFT contract to transfer tokens on source chain to destination
+ chain.
+4. (Optional) Wait for the transaction finalization on the destination chain by using the
+ [@layerzerolabs/scan-client](https://www.npmjs.com/package/@layerzerolabs/scan-client#example-usage) library.
+
+#### From the Destination Chain Back to the Source Chain
+
+To send back the ONFT-wrapped tokens on the destination chain to the source chain, the procedure is similar as the
+approve step is also required, but the operations will happen on the `ONFT` contract.
+
+#### References and Tools
+
+##### `AdapterParams`
+
+- You can use the [LayerZero Repository](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/libs/LzLib.sol#L44) as a reference to set gas drop on the destination in `adapterParams`.
+ - The provided gas drop must be `<=` the config one. Otherwise, you will get [`dstNativeAmt` too large](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/mocks/LZEndpointMock.sol#L413) error.
+- You can use the [LayerZero Repository](https://github.com/LayerZero-Labs/solidity-examples/blob/main/contracts/lzApp/libs/LzLib.sol#L34) as a refernce to set default `adapterParams` without needing a gas drop.
+
+##### LayerZero
+
+- [LayerZero Endpoint V1](https://docs.layerzero.network/v1/developers/technical-reference/mainnet/mainnet-addresses)
+- [LayerZero explorer](https://Testnet.layerzeroscan.com/)
+
+### Install the Library
+
+After you have cloned
+the [IOTA Community Utilities for LayerZero ONFT V2 repository](https://github.com/iota-community/layerzero-onft-v1-utils),
+you should run the following command to install:
+
+```bash
+yarn
+```
+
+### Compile the Contracts
+
+If you want to use the standard implementation for ERC20, copy
+the [`contracts-standard`](https://github.com/iota-community/layerzero-oft-V1-utils/tree/main/contracts-standard) folder
+to `contracts`. If you want to use a custom implementation, copy
+the [`contracts-wiota`](https://github.com/iota-community/layerzero-oft-V1-utils/tree/main/contracts-wiota)
+to `contracts`. Then, run the following command to compile the contracts:
+
+```bash
+yarn compile
+```
+
+### Set Your Configuration
+
+You should copy the
+template [`.env.example`](https://github.com/iota-community/layerzero-oft-V1-utils/blob/main/.env.example) file to a
+file called `.env`, and edit any of the configuration options you see fit.
+
+```bash
+cp .env.example .env
+```
+
+### Deploy the Contracts
+
+#### Deploy a mock ERC721
+
+```bash
+yarn deploy-ERC721-mock-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_ERC721.ts --network shimmerEvmTestnet
+Deployed ERC721Mock contract address:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+Done in 4.49s.
+```
+
+#### Deploy `ProxyONFT721` on the source chain
+
+You can use the following command to deploy ProxyONFT721 on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn deploy-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+npx hardhat run scripts/deploy_proxy_onft721.ts --network shimmerEvmTestnet
+Deployed MyProxyONFT721 contract address:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2
+Done in 4.50s.
+```
+
+#### Deploy `ProxyONFT721` on the destination chain
+
+You can use the following command to deploy ProxyONFT721 on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-min-dest-gas-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_min_destination_gas.ts --network bnbTestnet
+setMinDstGas - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xce044ded17daa77a8aefc3d39b99c5381216eb4057ddce6253affde6cda2091c
+setMinDstGas (packetType 1) tx: 0x3a26ae40ac058099bfd8b85910009a5e5e8b03f16a5f032b572827d48be8f2b0
+Done in 9.34s.
+```
+
+### Set the Minimum Destination Gas
+
+#### On the source chain
+
+You can use the following command to set the minimum destination gas on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-min-dest-gas-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_min_destination_gas.ts --network shimmerEvmTestnet
+setMinDstGas - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xcab06e9989448153a4bbc1bb166fc2d33467f3311d1851bf2ff719d982daa613
+setMinDstGas (packetType 1) tx: 0xe78fd3f0bf668fafbc423decd2cf14a27d74543af3ac9daf031f0b278c22ea78
+Done in 6.07s.
+```
+
+#### On the destination chain
+
+You can use the following command to set the minimum destination gas on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-min-dest-gas-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_min_destination_gas.ts --network bnbTestnet
+setMinDstGas - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, minDstGas:150000
+setMinDstGas (packetType 0) tx: 0xce044ded17daa77a8aefc3d39b99c5381216eb4057ddce6253affde6cda2091c
+setMinDstGas (packetType 1) tx: 0x3a26ae40ac058099bfd8b85910009a5e5e8b03f16a5f032b572827d48be8f2b0
+Done in 9.34s.
+```
+
+### Set the batch size limit
+
+#### On the source chain
+
+You can use the following command to set batch size limits on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-batch-size-limit-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_batch_size_limit.ts --network shimmerEvmTestnet
+setBatchSizeLimit - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102, batchSizeLimit:1
+setBatchSizeLimit tx: 0x70c23b3d3d5e94ef82e50944f7eba93fa1fe8db3a5487ac371015e7a14482e75
+Done in 4.28s.
+```
+
+#### On the destination chain
+
+You can use the following command to set batch size limits on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-batch-size-limit-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_batch_size_limit.ts --network bnbTestnet
+setBatchSizeLimit - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230, batchSizeLimit:1
+setBatchSizeLimit tx: 0x8cb44c2195ac93da552c646677e6585c95ab172df19463637541933ec70dc9b8
+Done in 4.26s.
+```
+
+### Set the Trusted Remote
+
+#### On the source chain
+
+You can use the following command to set a trusted remote on the `ProxyONFT` contract on the source chain (e.g., ShimmerEVM Testnet):
+
+```bash
+yarn set-remote-proxy-onft-smr-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=true && npx hardhat run scripts/set_trusted_remote.ts --network shimmerEvmTestnet
+setTrustedRemote - isForProxy:true, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10102
+setTrustedRemote tx: 0xce52c0f25090ef7c1668ef04ff2f6098551c9f56b3ce881d17181bf106457016
+Done in 4.24s.
+```
+
+##### On the destination chain
+
+You can use the following command to set a trusted remote on the `ONFT` contract on the destination chain (e.g., BNB Testnet):
+
+```bash
+yarn set-remote-onft-bnb-Testnet
+```
+
+Expected log output :
+
+```bash
+export isForProxy=false && npx hardhat run scripts/set_trusted_remote.ts --network bnbTestnet
+setTrustedRemote - isForProxy:false, proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnRemoteChain:10230
+setTrustedRemote tx: 0x311a0568b5afce7d601df2613f8ff80428d8a4d2f2c91012e0e4a8cbc0aedf59
+Done in 4.88s.
+```
+
+### Send Origin Tokens From the Source Chain To the Destination Chain
+
+```bash
+yarn send-onft-from-smr-Testnet
+```
+
+Expected log output:
+
+```bash
+npx hardhat run scripts/send_onft.ts --network shimmerEvmTestnet
+sendONFT - proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnSrcChain:10230, lzEndpointIdOnDestChain:10102, gasDropInWeiOnDestChain:0, providedGasLimit:200000, receivingAccountAddress:0x5e812d3128D8fD7CEac08CEca1Cd879E76a6E028, sender: 0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, nftTokenId:2, nftTokenAddress:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+sendONFT - approve tx: 0xa871bc79e45bf20f33c626044d6e208460c5745ab1f13d476dcbe04e1da7e592
+sendONFT - estimated nativeFee: 158.319172348046094655
+sendONFT - send tx on source chain: 0x72779c7549053194e42bcc78f78cf65e876867f0516dc91f28986c854e652596
+Wait for cross-chain tx finalization by LayerZero ...
+sendONFT - received tx on destination chain: 0x2700a9d35c139eb84ba07b75490e6627a30e00bde130e3cb7c1cbb81c0326138
+Done in 53.50s.
+```
+
+### Send ONFT-Wrapped Tokens Back From the Destination Chain Back To the Origin Chain
+
+```bash
+yarn send-onft-back-from-bnb-Testnet
+```
+
+Expected log output:
+
+```bash
+npx hardhat run scripts/send_onft_back.ts --network bnbTestnet
+sendONFTBack - proxyONFTContractAddress:0x7B0D46219C915e7Ff503C7F83a805c0b2F4ab2F2, onftContractAddress:0xC617A0Bd9DC6093a304515d3dbFF4244333fDeBB, lzEndpointIdOnSrcChain:10230, lzEndpointIdOnDestChain:10102, gasDropInWeiOnDestChain:0, providedGasLimit:200000, receivingAccountAddress:0x57A4bD139Fb673D364A6f12Df9177A3f686625F3, sender: 0x60917645A28258a75836aF63633850c5F3561C1b, nftTokenId:2, nftTokenAddress:0xFddbA8928a763679fb8C99d12541B7c6177e9c3c
+sendONFTBack - approve tx: 0xe5bfff108528efdc67e72896845f0ad3e0186b4ed64835e7c5f3552eaab69d99
+sendONFTBack - estimated nativeFee: 0.000498452810033053
+sendONFTBack - send tx on source chain: 0xa43bb5547a5a35730fe183b4d554416a4ea34852e510d21f24d173db75db4e79
+Wait for cross-chain tx finalization by LayerZero ...
+sendONFTBack - received tx on destination chain: 0xb05fa2de194153819b26d17893278c485abbaf355fa24f26fbc7a4c759994cde
+Done in 212.16s.
+```
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/send-funds-from-L1-to-L2.mdx b/docs/build/isc/v1.3-alpha/docs/how-tos/send-funds-from-L1-to-L2.mdx
index 1a9a469d7ea..0b1b47dec7f 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/send-funds-from-L1-to-L2.mdx
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/send-funds-from-L1-to-L2.mdx
@@ -36,14 +36,14 @@ If you want to fund your EVM Testnet account using the EVM Toolkit, please refer
To send EVM transactions, you need to have an Ethereum address that owns tokens on the ISC chain (L2). These tokens will
be used to cover gas fees.
-
+
-You can use your [Firefly Wallet](https://firefly.iota.org/) to easily send L1 SMR to your L2 ShimmerEVM account.
+You can use your [Firefly Wallet](https://firefly.iota.org/) to easily send L1 IOTA or SMR to your L2 IOTA EVM or ShimmerEVM account.
#### Requirements
-* [Shimmer Tokens](/get-started/introduction/shimmer/shimmer-token/) or [IOTA Tokens](/get-started/introduction/iota/iota-token/)
+* [IOTA Tokens](/get-started/introduction/iota/iota-token/) or [Shimmer Tokens](/get-started/introduction/shimmer/shimmer-token/)
* [Firefly Wallet](https://firefly.iota.org/)
* [Metamask](https://metamask.io/)
diff --git a/docs/build/isc/v1.3-alpha/docs/how-tos/test-smart-contracts.md b/docs/build/isc/v1.3-alpha/docs/how-tos/test-smart-contracts.md
index 7b032b6d9bf..c3f2a8aa344 100644
--- a/docs/build/isc/v1.3-alpha/docs/how-tos/test-smart-contracts.md
+++ b/docs/build/isc/v1.3-alpha/docs/how-tos/test-smart-contracts.md
@@ -5,9 +5,9 @@ keywords:
- Unit Tests
- Integration Tests
- Testing Frameworks
-- ShimmerEVM Testnet
+- EVM Testnet
- Solidity Testing
-description: Learn how to test smart contracts before deploying them on public networks to avoid vulnerabilities and ensure functionality aligns with requirements using unit, and integration testing, alongside frameworks and testing with the IOTA Sandbox and the ShimmerEVM Testnet.
+description: Learn how to test smart contracts before deploying them on public networks to avoid vulnerabilities and ensure functionality aligns with requirements using unit, and integration testing, alongside frameworks and testing with the IOTA Sandbox and the EVM Testnet.
---
# Testing Smart Contracts
@@ -91,18 +91,18 @@ expected.
#### Tools
-You can use the [ShimmerEVM Testnet](/build/networks-endpoints/#testnet-evm) to conduct integration tests without
+You can use the [EVM Testnet](/build/networks-endpoints/#shimmerevm-testnet) to conduct integration tests without
incurring any fees or the [IOTA Sandbox](/iota-sandbox/getting-started/) if you want to run the tests locally.
## Manual Testing
Once you have a complete batch of [automated tests](#automated-testing), manually testing your contract to ensure it
behaves as expected in the real world is still good practice. However, to avoid incurring fees or deploying a faulty
-contract, you can manually test your contract using a sandboxed local network and the Shimmer EVM Testnet.
+contract, you can manually test your contract using a sandboxed local network and the EVM Testnet.
Testing using the [IOTA Sandbox](/iota-sandbox/getting-started/) serves well for the first stage of automated and manual
integration tests, as you have complete control over the entire local network. Once you are confident about how your
-contract behaves locally, you can deploy and test on the [ShimmerEVM Testnet](/build/networks-endpoints/#testnet-evm),
-which replicates the ShimmerEVM network but also enables cost and risk-free interactions.
+contract behaves locally, you can deploy and test on the [EVM Testnet](/build/networks-endpoints/#shimmerevm-testnet),
+which replicates the IOTA EVM and ShimmerEVM networks, but also enables cost and risk-free interactions.
diff --git a/docs/build/isc/v1.3-alpha/docs/introduction.md b/docs/build/isc/v1.3-alpha/docs/introduction.md
index c644eb4da1a..b3811792692 100644
--- a/docs/build/isc/v1.3-alpha/docs/introduction.md
+++ b/docs/build/isc/v1.3-alpha/docs/introduction.md
@@ -11,13 +11,10 @@ tags:
- explanation
---
-import NetworkWarning from './_admonitions/_network_warning.md'
import OnOffLedgerRequest from './_partials/_on_off_ledger_request.md';
# Introduction
-
-
Smart contracts are deterministic applications that run on a distributed network with multiple
[validators](explanations/validators.md) that execute and validate the same code.
Their deterministic and distributed nature makes them predictable, stable and trustworthy.
diff --git a/docs/build/isc/v1.3-alpha/sidebars.js b/docs/build/isc/v1.3-alpha/sidebars.js
index a01017561cc..9d07b38ff0b 100644
--- a/docs/build/isc/v1.3-alpha/sidebars.js
+++ b/docs/build/isc/v1.3-alpha/sidebars.js
@@ -84,11 +84,21 @@ module.exports = {
label: 'Create Custom Tokens - ERC20',
id: 'how-tos/ERC20',
},
+ {
+ type: 'doc',
+ label: 'Send ERC20 Tokens Across Chains',
+ id: 'how-tos/send-ERC20-across-chains',
+ },
{
type: 'doc',
label: 'Create NFTs - ERC721',
id: 'how-tos/ERC721',
},
+ {
+ type: 'doc',
+ label: 'Send NFTs Across Chains',
+ id: 'how-tos/send-NFTs-across-chains',
+ },
{
type: 'doc',
label: 'Test Smart Contracts',
diff --git a/docs/get-started/tools/legacy-migration-tool.mdx b/docs/get-started/tools/legacy-migration-tool.mdx
index 04051f80f75..66672900915 100644
--- a/docs/get-started/tools/legacy-migration-tool.mdx
+++ b/docs/get-started/tools/legacy-migration-tool.mdx
@@ -6,7 +6,7 @@ import ThemedImage from '@theme/ThemedImage';
The [IOTA Legacy Migration Tool](https://github.com/iotaledger/legacy-migration-tool/releases) is a standalone app to
help you migrate your tokens from the legacy IOTA network to the
-current [IOTA Mainnet](/build/networks-endpoints/#iota-mainnet) running the Stardust protocol.
+current [IOTA Mainnet](/build/networks-endpoints/#iota) running the Stardust protocol.
The new tool allows users to migrate from
an [81-character seed](#restore-a-text-backup), [a Trinity seed vault file](#restore-a-file-backup), or a
[Ledger device](#users-with-ledger-devices).
diff --git a/docs/get-started/wallets/bloom.md b/docs/get-started/wallets/bloom.md
index cfdb2de997d..bd2f7a9e3d9 100644
--- a/docs/get-started/wallets/bloom.md
+++ b/docs/get-started/wallets/bloom.md
@@ -12,7 +12,7 @@ tags:
---
Bloom is a desktop wallet with first-class security developed by former members of the Firefly team.
-Bloom supports the [IOTA](https://wiki.iota.org/build/networks-endpoints/#iota-mainnet) and
+Bloom supports the [IOTA](https://wiki.iota.org/build/networks-endpoints/#iota) and
[Shimmer](https://wiki.iota.org/build/networks-endpoints/#shimmer) networks, as well as
[ShimmerEVM](https://wiki.iota.org/build/networks-endpoints/#shimmerevm) in the same application. This means you can
seamlessly transfer assets back and forth between Shimmer and ShimmerEVM without other tooling.
diff --git a/docs/maintain/wasp/v1.1/docs/how-tos/running-an-access-node.md b/docs/maintain/wasp/v1.1/docs/how-tos/running-an-access-node.md
index f0baa0b5429..a12240bda0a 100644
--- a/docs/maintain/wasp/v1.1/docs/how-tos/running-an-access-node.md
+++ b/docs/maintain/wasp/v1.1/docs/how-tos/running-an-access-node.md
@@ -32,6 +32,20 @@ You can then download the historical state using the following command (this wil
+
+
+```sh
+wget https://files.stardust-mainnet.iotaledger.net/dbs/wasp/latest-wasp_chains_wal.tgz -O - | tar xzv -C data/wasp
+```
+
+
+
+
+```sh
+wget https://files.iota-testnet.iotaledger.net/dbs/wasp/latest-wasp_chains_wal.tgz -O - | tar xzv -C data/wasp
+```
+
+
```sh
@@ -148,6 +162,20 @@ Now you can add your peer as trusted peer.
Add the chain with its chain id and name:
+
+
+```sh
+./wasp-cli chain add iota-evm iota1pzt3mstq6khgc3tl0mwuzk3eqddkryqnpdxmk4nr25re2466uxwm28qqxu5
+```
+
+
+
+
+```sh
+./wasp-cli chain add iota-evm-testnet tst1pzxsrr7apqkdzz633dyntmvxwtyvk029p39te5j0m33q6946h7akzv663zu
+```
+
+
```sh
@@ -170,6 +198,20 @@ Activate the chain using its name:
+
+
+```sh
+./wasp-cli chain activate --chain iota-evm
+```
+
+
+
+
+```sh
+./wasp-cli chain activate --chain iota-evm-testnet
+```
+
+
```sh
@@ -209,19 +251,32 @@ You can follow the progress using `docker logs -f wasp`. If you chose to create
You should have a working EVM JSON-RPC endpoint on:
+
+
+```
+/wasp/api/v1/chains/iota1pzt3mstq6khgc3tl0mwuzk3eqddkryqnpdxmk4nr25re2466uxwm28qqxu5/evm
+```
+
+
+
+
+```
+/wasp/api/v1/chains/tst1pzxsrr7apqkdzz633dyntmvxwtyvk029p39te5j0m33q6946h7akzv663zu/evm
+```
+
+
+
```
-/wasp/api/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s
-/evm
+/wasp/api/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s/evm
```
```
-/wasp/api/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex
-/evm
+/wasp/api/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex/evm
```
diff --git a/docs/maintain/wasp/v1.1/docs/reference/metrics.md b/docs/maintain/wasp/v1.1/docs/reference/metrics.md
index 385ec322f55..0e816a696e0 100644
--- a/docs/maintain/wasp/v1.1/docs/reference/metrics.md
+++ b/docs/maintain/wasp/v1.1/docs/reference/metrics.md
@@ -9,7 +9,7 @@ tags:
# Exposed Metrics
-Refer to the [testnet endpoints description](/build/networks-endpoints/#testnet-evm) for access details.
+Refer to the [testnet endpoints description](/build/networks-endpoints/#shimmerevm-testnet) for access details.
| Metric | Description |
| ------------------------------------------ | ---------------------------------------------------- |
diff --git a/docs/maintain/wasp/v1.3-alpha/docs/how-tos/running-an-access-node.md b/docs/maintain/wasp/v1.3-alpha/docs/how-tos/running-an-access-node.md
index f0baa0b5429..a12240bda0a 100644
--- a/docs/maintain/wasp/v1.3-alpha/docs/how-tos/running-an-access-node.md
+++ b/docs/maintain/wasp/v1.3-alpha/docs/how-tos/running-an-access-node.md
@@ -32,6 +32,20 @@ You can then download the historical state using the following command (this wil
+
+
+```sh
+wget https://files.stardust-mainnet.iotaledger.net/dbs/wasp/latest-wasp_chains_wal.tgz -O - | tar xzv -C data/wasp
+```
+
+
+
+
+```sh
+wget https://files.iota-testnet.iotaledger.net/dbs/wasp/latest-wasp_chains_wal.tgz -O - | tar xzv -C data/wasp
+```
+
+
```sh
@@ -148,6 +162,20 @@ Now you can add your peer as trusted peer.
Add the chain with its chain id and name:
+
+
+```sh
+./wasp-cli chain add iota-evm iota1pzt3mstq6khgc3tl0mwuzk3eqddkryqnpdxmk4nr25re2466uxwm28qqxu5
+```
+
+
+
+
+```sh
+./wasp-cli chain add iota-evm-testnet tst1pzxsrr7apqkdzz633dyntmvxwtyvk029p39te5j0m33q6946h7akzv663zu
+```
+
+
```sh
@@ -170,6 +198,20 @@ Activate the chain using its name:
+
+
+```sh
+./wasp-cli chain activate --chain iota-evm
+```
+
+
+
+
+```sh
+./wasp-cli chain activate --chain iota-evm-testnet
+```
+
+
```sh
@@ -209,19 +251,32 @@ You can follow the progress using `docker logs -f wasp`. If you chose to create
You should have a working EVM JSON-RPC endpoint on:
+
+
+```
+/wasp/api/v1/chains/iota1pzt3mstq6khgc3tl0mwuzk3eqddkryqnpdxmk4nr25re2466uxwm28qqxu5/evm
+```
+
+
+
+
+```
+/wasp/api/v1/chains/tst1pzxsrr7apqkdzz633dyntmvxwtyvk029p39te5j0m33q6946h7akzv663zu/evm
+```
+
+
+
```
-/wasp/api/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s
-/evm
+/wasp/api/v1/chains/smr1prxvwqvwf7nru5q5xvh5thwg54zsm2y4wfnk6yk56hj3exxkg92mx20wl3s/evm
```
```
-/wasp/api/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex
-/evm
+/wasp/api/v1/chains/rms1ppp00k5mmd2m8my8ukkp58nd3rskw6rx8l09aj35984k74uuc5u2cywn3ex/evm
```
diff --git a/docs/maintain/wasp/v1.3-alpha/docs/reference/metrics.md b/docs/maintain/wasp/v1.3-alpha/docs/reference/metrics.md
index 385ec322f55..0e816a696e0 100644
--- a/docs/maintain/wasp/v1.3-alpha/docs/reference/metrics.md
+++ b/docs/maintain/wasp/v1.3-alpha/docs/reference/metrics.md
@@ -9,7 +9,7 @@ tags:
# Exposed Metrics
-Refer to the [testnet endpoints description](/build/networks-endpoints/#testnet-evm) for access details.
+Refer to the [testnet endpoints description](/build/networks-endpoints/#shimmerevm-testnet) for access details.
| Metric | Description |
| ------------------------------------------ | ---------------------------------------------------- |
diff --git a/docs/tutorials/shimmerevm-testnet-hardhat.md b/docs/tutorials/shimmerevm-testnet-hardhat.md
index b39d38a66f0..3e59a76cd89 100644
--- a/docs/tutorials/shimmerevm-testnet-hardhat.md
+++ b/docs/tutorials/shimmerevm-testnet-hardhat.md
@@ -128,9 +128,9 @@ Some important things to note are data types. `event` means that we can subscrib
```js
module.exports = {
solidity: '0.8.18',
- defaultNetwork: 'shimmerevm-testnet',
+ defaultNetwork: 'evm-testnet',
networks: {
- 'shimmerevm-testnet': {
+ 'evm-testnet': {
url: 'https://json-rpc.evm.testnet.shimmer.network',
chainId: 1073,
accounts: [priv_key],
@@ -190,21 +190,21 @@ npx hardhat compile
Run this command in root of the project directory:
```sh
-npx hardhat run scripts/deploy.js --network shimmerevm-testnet
+npx hardhat run scripts/deploy.js --network evm-testnet
```
-The contract will be deployed on ShimmerEVM Testnet, and you can check the deployment status here on the [explorer](https://explorer.evm.testnet.shimmer.network/).
+The contract will be deployed on EVM Testnet, and you can check the deployment status here on the [explorer](https://explorer.evm.testnet.shimmer.network/).
If you want to further verify your contract, add the following to your `hardhat.config.js`:
```js
etherscan: {
apiKey: {
- 'shimmerevm-testnet': 'ABCDE12345ABCDE12345ABCDE123456789',
+ 'evm-testnet': 'ABCDE12345ABCDE12345ABCDE123456789',
},
customChains: [
{
- network: 'shimmerevm-testnet',
+ network: 'evm-testnet',
chainId: 1073,
urls: {
apiURL: 'https://explorer.evm.testnet.shimmer.network/api',
@@ -218,7 +218,7 @@ etherscan: {
Then you can verify by running:
```sh
-npx hardhat verify --network shimmerevm-testnet
+npx hardhat verify --network evm-testnet
```
:::tip Address and unlock time
diff --git a/docs/tutorials/shimmerevm-testnet-setup.mdx b/docs/tutorials/shimmerevm-testnet-setup.mdx
index 5124e19576d..8e5a385a672 100644
--- a/docs/tutorials/shimmerevm-testnet-setup.mdx
+++ b/docs/tutorials/shimmerevm-testnet-setup.mdx
@@ -1,10 +1,10 @@
import { AddToMetaMaskButton } from '@theme/AddToMetaMaskButton';
import { Networks } from '@theme/constant';
-# Connect to ShimmerEVM Testnet and deploy a Solidity Smart Contract
+# Connect to EVM Testnet and deploy a Solidity Smart Contract
:::info
-In this tutorial, we will connect to ShimmerEVM Testnet, connect Metamask to it, get funded and deploy a smart contract in Solidity.
+In this tutorial, we will connect to EVM Testnet, connect Metamask to it, get funded and deploy a smart contract in Solidity.
:::
## Prerequisites
@@ -12,16 +12,16 @@ In this tutorial, we will connect to ShimmerEVM Testnet, connect Metamask to it,
- [Metamask](https://metamask.io/) or any other wallet of your choice.
- [Remix](https://remix-project.org/) or any other development environment of your choice.
-## Connect to ShimmerEVM Testnet
+## Connect to EVM Testnet
-You can either just use the following button to add the ShimmerEVM Testnet network to Metamask
+You can either just use the following button to add the EVM Testnet network to Metamask
or enter the information manually.
-To add the ShimmerEVM Testnet network manually to your Metamask use following info:
+To add the EVM Testnet network manually to your Metamask use following info:
-- Network Name: `ShimmerEVM Testnet`
+- Network Name: `EVM Testnet`
- New RPC URL: `https://json-rpc.evm.testnet.shimmer.network`
- Chain ID: `1073`
- Currency Symbol: `SMR`
@@ -81,7 +81,7 @@ And voila—it's done!
width='560'
height='315'
src='https://www.youtube.com/embed/0_rmmprEKrM'
- title='ShimmerEVM Tutorial: Connect to ShimmerEVM Testnet & Deploy a Solidity Smart Contract'
+ title='ShimmerEVM Tutorial: Connect to EVM Testnet & Deploy a Solidity Smart Contract'
frameborder='0'
allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'
allowfullscreen
diff --git a/docusaurus.config.js b/docusaurus.config.js
index e9ac41d4bd7..102fbebf552 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -145,6 +145,15 @@ module.exports = async () => {
defaultMode: 'dark',
},
switcher: switcherConfig,
+
+ announcementBar: {
+ id: 'support_us',
+ content:
+ 'Experience seamless dApp development with IOTA EVM.',
+ backgroundColor: 'var(--ifm-color-primary)',
+ textColor: 'var(--ifm-font-color-base-inverse);',
+ isCloseable: true,
+ },
},
};
diff --git a/src/components/HomeLayout/index.tsx b/src/components/HomeLayout/index.tsx
index 93d79f53f17..4d75af6b9ff 100644
--- a/src/components/HomeLayout/index.tsx
+++ b/src/components/HomeLayout/index.tsx
@@ -18,7 +18,7 @@ const {
IntegrationServices,
IotaCore,
PickAWallet,
- Shimmer,
+ IotaEVM,
Search,
Tips,
Tutorials,
@@ -85,6 +85,12 @@ export default function HomeLayout() {
>
Start building
+
+ Build your dApp on IOTA EVM
+
@@ -106,18 +112,16 @@ export default function HomeLayout() {
-
+
-
+
-
What is Shimmer?
+
Build on IOTA EVM
- A scalable and feeless network enabling frictionless
- decentralized and scalable Web3 economies.
+ Experience seamless dApp development with IOTA EVM's
+ oracles, subgraphs, Layer 0 interoperability, and robust Blast
+ API endpoints.
diff --git a/src/icons/iota/index.ts b/src/icons/iota/index.ts
index 5b096a14155..0c2b8d46a30 100644
--- a/src/icons/iota/index.ts
+++ b/src/icons/iota/index.ts
@@ -6,6 +6,7 @@ import { default as Identity } from '@site/static/icons/iota/identity.svg';
import { default as IntegrationServices } from '@site/static/icons/iota/integration_services.svg';
import { default as Iota20 } from '@site/static/icons/iota/iota_20.svg';
import { default as IotaCore } from '@site/static/icons/iota/iota_core.svg';
+import { default as IotaEVM } from '@site/static/icons/iota/iota_evm.svg';
import { default as IotaToken } from '@site/static/icons/iota/iota_token.svg';
import { default as Next } from '@site/static/icons/iota/next.svg';
import { default as PickAWallet } from '@site/static/icons/iota/pick_a_wallet.svg';
@@ -29,6 +30,7 @@ export default {
IntegrationServices,
Iota20,
IotaCore,
+ IotaEVM,
IotaToken,
Next,
PickAWallet,
diff --git a/src/theme/NetworkInfo/index.tsx b/src/theme/NetworkInfo/index.tsx
index 15735129435..3cf243df9f0 100644
--- a/src/theme/NetworkInfo/index.tsx
+++ b/src/theme/NetworkInfo/index.tsx
@@ -2,43 +2,48 @@ import React from 'react';
import { ChainId } from '../ChainId';
import { NetworkProps } from '../constant';
import CodeBlock from '@theme/CodeBlock';
+import Admonition from '@theme/Admonition';
function L1(props: NetworkProps) {
return (