diff --git a/api-reference/spl-api/introduction-per.mdx b/api-reference/spl-api/introduction-per.mdx
index 09ea9f8..63d732d 100644
--- a/api-reference/spl-api/introduction-per.mdx
+++ b/api-reference/spl-api/introduction-per.mdx
@@ -9,7 +9,7 @@ The Private Ephemeral SPL Token API allows you to build transactions with SPL to
### Health & Configuration
-- [**Root**](/api-reference/spl-api/root) - Check API health
+- **Root** - Check API health
- [**Get Config**](/api-reference/spl-api/get-config) - Retrieve API configuration settings
### Setup & Initialization
@@ -23,7 +23,7 @@ The Private Ephemeral SPL Token API allows you to build transactions with SPL to
- [**Initialize Ephemeral ATA**](/api-reference/spl-api/initialize-ephemeral-ata) - Initialize an ephemeral token account required for sender and receiver
- [**Deposit SPL Tokens**](/api-reference/spl-api/deposit-spl-tokens) - Deposit tokens into an ephemeral account
- [**Delegate Ephemeral ATA**](/api-reference/spl-api/delegate-ephemeral-ata) - Delegate an ephemeral account to a Delegation Program
-- [**Transfer SPL Tokens**](/api-reference/spl-api/transfer-ephemeral-ata) - Transfer tokens between accounts using SPL checked transfer (**Note:** Ephemeral ATA must be initialized and delegated before transfer)
+- [**Transfer SPL Tokens**](/api-reference/spl-api/checked-transfer) - Transfer tokens between accounts using SPL checked transfer (**Note:** Ephemeral ATA must be initialized and delegated before transfer)
- [**Undelegate Ephemeral ATA**](/api-reference/spl-api/undelegate-ephemeral-ata) - Remove delegation from an ephemeral account
- [**Withdraw SPL Tokens**](/api-reference/spl-api/withdraw-spl-tokens) - Withdraw tokens from an ephemeral account
diff --git a/cn/api-reference/spl-api/introduction-per.mdx b/cn/api-reference/spl-api/introduction-per.mdx
index c152186..9e45204 100644
--- a/cn/api-reference/spl-api/introduction-per.mdx
+++ b/cn/api-reference/spl-api/introduction-per.mdx
@@ -9,7 +9,7 @@ Private Ephemeral SPL Token API 允许你在 MagicBlock 的 Ephemeral Rollup 上
### 健康检查与配置
-- [**Root**](/cn/api-reference/spl-api/root) - 检查 API 健康状态
+- **Root** - 检查 API 健康状态
- [**Get Config**](/cn/api-reference/spl-api/get-config) - 获取 API 配置设置
### 设置与初始化
@@ -23,7 +23,7 @@ Private Ephemeral SPL Token API 允许你在 MagicBlock 的 Ephemeral Rollup 上
- [**Initialize Ephemeral ATA**](/cn/api-reference/spl-api/initialize-ephemeral-ata) - 初始化发送方和接收方所需的临时 token 账户
- [**Deposit SPL Tokens**](/cn/api-reference/spl-api/deposit-spl-tokens) - 将 token 存入临时账户
- [**Delegate Ephemeral ATA**](/cn/api-reference/spl-api/delegate-ephemeral-ata) - 将临时账户委托给 Delegation Program
-- [**Transfer SPL Tokens**](/cn/api-reference/spl-api/transfer-ephemeral-ata) - 使用 SPL checked transfer 在账户之间转移 token(**注意:** 转账前必须先初始化并委托 Ephemeral ATA)
+- [**Transfer SPL Tokens**](/cn/api-reference/spl-api/checked-transfer) - 使用 SPL checked transfer 在账户之间转移 token(**注意:** 转账前必须先初始化并委托 Ephemeral ATA)
- [**Undelegate Ephemeral ATA**](/cn/api-reference/spl-api/undelegate-ephemeral-ata) - 移除临时账户的委托
- [**Withdraw SPL Tokens**](/cn/api-reference/spl-api/withdraw-spl-tokens) - 从临时账户提取 token
diff --git a/cn/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx b/cn/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
new file mode 100644
index 0000000..60893f2
--- /dev/null
+++ b/cn/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
@@ -0,0 +1,280 @@
+---
+title: "Anchor 示例"
+description: "学习如何编写一个在 Solana 上递增计数器的简单 Anchor 程序"
+---
+
+import Endpoints from "/cn/snippets/endpoints.mdx";
+
+
+ VIDEO
+
+
+本指南将带你编写一个简单的 Anchor 程序,用来递增计数器。你将学习如何把这个程序部署到 Solana 上,并通过 React 客户端与之交互。
+
+## 软件包
+
+该程序使用以下软件包开发和测试。其他软件版本也可能兼容。
+
+| 软件 | 版本 | 安装指南 |
+| ---------- | ------ | --------------------------------------------------------------- |
+| **Solana** | 3.1.9 | [安装 Solana](https://docs.anza.xyz/cli/install) |
+| **Rust** | 1.89.0 | [安装 Rust](https://www.rust-lang.org/tools/install) |
+| **Anchor** | 1.0.2 | [安装 Anchor](https://www.anchor-lang.com/docs/installation) |
+
+## 快速查看源代码
+
+如果你想直接进入代码:
+
+
+
+
+
+
+## 编写 Anchor 程序
+
+下面我们来拆解这个计数器程序的关键组成部分:
+
+## 核心功能
+
+该程序实现了两个主要 instruction:
+
+1. `initialize`:将计数器设为 0
+2. `increment`:将计数器加 1
+
+下面是程序的核心结构:
+
+```rust
+#[ephemeral]
+#[program]
+pub mod public_counter {
+ use super::*;
+
+ /// Initialize the counter.
+ pub fn initialize(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count = 0;
+ Ok(())
+ }
+
+ /// Increment the counter.
+ pub fn increment(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ Ok(())
+ }
+
+ // ... Additional instructions will be added here
+}
+```
+
+这里没有什么特别之处,只是一个简单的、用于递增计数器的 Anchor 程序。唯一的区别是我们引入了 `delegate` 宏,用来注入与委托程序交互所需的逻辑。
+
+### 委托 Counter PDA
+
+为了将 counter PDA 委托出去,使其在 Ephemeral Rollup 会话中变为可写,我们需要添加一个内部调用 `delegate_account` 函数的 instruction。`delegate_account` 会通过 CPI 调用委托程序,验证通过后会接管该账户的所有权。
+完成这一步后,临时验证者就可以开始处理 counter PDA 上的交易,并通过委托程序提交状态差异。
+
+
+ 在 Solana Explorer 上查看交易详情
+
+```rust
+/// Add delegate function to the context
+#[delegate]
+#[derive(Accounts)]
+pub struct DelegateInput<'info> {
+ pub payer: Signer<'info>,
+ /// CHECK The pda to delegate
+ #[account(mut, del)]
+ pub pda: AccountInfo<'info>,
+}
+````
+
+```rust
+/// Delegate the account to the delegation program
+/// Set specific validator based on ER, see https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/local-development
+pub fn delegate(ctx: Context) -> Result<()> {
+ ctx.accounts.delegate_pda(
+ &ctx.accounts.payer,
+ &[COUNTER_SEED],
+ DelegateConfig {
+ // Optionally set a specific validator from the first remaining account
+ validator: ctx.remaining_accounts.first().map(|acc| acc.key()),
+ ..Default::default()
+ },
+ )?;
+ Ok(())
+}
+```
+
+### 在 PDA 已被委托时进行 commit
+
+Ephemeral 运行时允许在 PDA 处于委托状态时提交其状态。这通过构建一个带有 `commit` intent 的 `MagicIntentBundleBuilder` 并执行它来完成。
+
+
+
+ 在 Solana Explorer 上查看交易详情
+
+
+ 在 Solana Explorer 上查看交易详情
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Increment the counter and manually commit the account in the Ephemeral Rollup session.
+pub fn increment_and_commit(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ // Serialize the Anchor account before the CPI sees it
+ counter.exit(&crate::ID)?;
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+````
+
+### 解除 PDA 的委托
+
+解除 PDA 委托是通过构建一个带有 `commit_and_undelegate` intent 的 `MagicIntentBundleBuilder` 来完成的。
+该操作会提交最新状态,并将 PDA 的所有权交还给所属程序。
+
+
+
+ 在 Solana Explorer 上查看交易详情
+
+
+ 在 Solana Explorer 上查看交易详情
+
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Undelegate the account from the delegation program
+pub fn undelegate(ctx: Context) -> Result<()> {
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit_and_undelegate(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+```
+
+## 接入 React 客户端
+
+React 客户端是一个简单的界面,让你可以与 Anchor 程序进行交互。
+它使用 Anchor 绑定与程序通信,并通过 MagicBlock SDK 与 Ephemeral Rollup 会话交互。源代码与程序放在一起,位于 [`anchor-counter/app`](https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/anchor-counter/app)。
+
+{" "}
+
+
+
+
+
+
+ iframe 仅适用于部分钱包(如 Backpack)。如果遇到问题,可在此直接体验在线 demo:https://counter-example.magicblock.app/
+
+
+### Ephemeral 端点配置
+
+要与 Ephemeral Rollup 会话进行交互,你需要配置正确的端点:
+
+- 对于 devnet,使用以下 ephemeral 端点:
+
+ https://devnet.magicblock.app
+
+- 对于 mainnet,请联系 MagicBlock 团队获取相应端点。
+- 对于 localhost ,请下载并安装 ephemeral validator,并使用相应的环境变量在本地运行。
+
+请确保根据你的开发或生产环境,将客户端配置更新为正确的端点。
+
+
+
+
+
+
+
diff --git a/cn/pages/get-started/introduction/ephemeral-rollup.mdx b/cn/pages/get-started/introduction/ephemeral-rollup.mdx
index 6e23879..97006a2 100644
--- a/cn/pages/get-started/introduction/ephemeral-rollup.mdx
+++ b/cn/pages/get-started/introduction/ephemeral-rollup.mdx
@@ -84,7 +84,7 @@ Ephemeral rollup 作为一个 **专用 SVM runtime** 运行,能够显著提升
了解 Magic Router 的工作方式
@@ -92,7 +92,7 @@ Ephemeral rollup 作为一个 **专用 SVM runtime** 运行,能够显著提升
使用 Rust、Anchor 和 Typescript 进行实践
diff --git a/cn/pages/get-started/introduction/why-magicblock.mdx b/cn/pages/get-started/introduction/why-magicblock.mdx
index 300a464..94d5353 100644
--- a/cn/pages/get-started/introduction/why-magicblock.mdx
+++ b/cn/pages/get-started/introduction/why-magicblock.mdx
@@ -72,7 +72,7 @@ MagicBlock 以专用的 **Solana Virtual Machine (SVM) runtime** 形式运行,
了解 Magic Router 的工作方式
@@ -80,7 +80,7 @@ MagicBlock 以专用的 **Solana Virtual Machine (SVM) runtime** 形式运行,
使用 Rust、Anchor 和 Typescript 进行实践
diff --git a/cn/pages/tools/solana-unity-sdk/guides/host-your-game.mdx b/cn/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
index 7e20665..d975344 100644
--- a/cn/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
+++ b/cn/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
@@ -36,7 +36,7 @@ git push origin
- 你的仓库现在应与 SDK 的 [gp-pages](https://github.com/garbles-labs/Solana.Unity-SDK/tree/gh-pages) 分支类似
- 在仓库设置中启用 gh-pages 部署
- 
+ 
Github 会为线上部署提供一个 URL: [garbles-labs.github.io/Solana.Unity-SDK](https://garbles-labs.github.io/Solana.Unity-SDK/)
@@ -45,7 +45,7 @@ Github 会为线上部署提供一个 URL: [garbles-labs.github.io/Solana.Unit
- 按照[此指南](/Build/SolanaUnitySDK/guides/publishing-a-game)操作,你可以在不到 2 分钟内将游戏发布为 xNFT。
+ 按照[此指南](/cn/pages/tools/solana-unity-sdk/guides/publishing-a-game)操作,你可以在不到 2 分钟内将游戏发布为 xNFT。
祝你游戏开发顺利,也别忘了给仓库点个 ⭐
diff --git a/cn/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx b/cn/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
index 71b7056..91d9ea8 100644
--- a/cn/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
+++ b/cn/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
@@ -17,7 +17,7 @@ title: "将你的游戏发布为 xNFT"
icon="lightbulb"
iconType="duotone"
>
- 按照[这份指南](/Build/SolanaUnitySDK/guides/host-your-game)将游戏编译为 WebGL,并把构建结果托管到 Github Pages
+ 按照[这份指南](/cn/pages/tools/solana-unity-sdk/guides/host-your-game)将游戏编译为 WebGL,并把构建结果托管到 Github Pages
### (可选)使用 xNFT WebGL 模板
diff --git a/docs.json b/docs.json
index bcf3e39..d08ee3c 100644
--- a/docs.json
+++ b/docs.json
@@ -201,6 +201,7 @@
"pages": [
"pages/ephemeral-rollups-ers/how-to-guide/quickstart",
"pages/ephemeral-rollups-ers/how-to-guide/local-development",
+ "pages/ephemeral-rollups-ers/how-to-guide/anchor",
{
"group": "Rust Example",
"pages": [
@@ -393,7 +394,7 @@
"language": "cn",
"tabs": [
{ "tab": "概览", "pages": ["cn/pages/overview/products", { "group": "更多信息", "pages": ["cn/pages/overview/additional-information/whitepaper", "cn/pages/overview/additional-information/security-and-audits", "cn/pages/overview/additional-information/pricing", "cn/pages/overview/additional-information/system-status", "cn/pages/overview/additional-information/request-for-products", "cn/pages/overview/additional-information/ai-dev-skill"] }] },
- { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "操作指南", "pages": ["cn/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "cn/pages/ephemeral-rollups-ers/how-to-guide/local-development", { "group": "Rust 示例", "pages": ["cn/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "cn/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "参考资料", "pages": ["cn/pages/ephemeral-rollups-ers/introduction/why", { "group": "工作原理", "pages": ["cn/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "cn/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "cn/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["cn/pages/ephemeral-rollups-ers/magic-actions/overview", "cn/pages/ephemeral-rollups-ers/magic-actions/implementation", "cn/pages/ephemeral-rollups-ers/magic-actions/client", "cn/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "cn/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/er/introduction", "cn/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "cn/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "cn/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "cn/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "cn/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "方法", "expanded": false, "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
+ { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "操作指南", "pages": ["cn/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "cn/pages/ephemeral-rollups-ers/how-to-guide/local-development", "cn/pages/ephemeral-rollups-ers/how-to-guide/anchor", { "group": "Rust 示例", "pages": ["cn/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "cn/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "参考资料", "pages": ["cn/pages/ephemeral-rollups-ers/introduction/why", { "group": "工作原理", "pages": ["cn/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "cn/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "cn/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["cn/pages/ephemeral-rollups-ers/magic-actions/overview", "cn/pages/ephemeral-rollups-ers/magic-actions/implementation", "cn/pages/ephemeral-rollups-ers/magic-actions/client", "cn/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "cn/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/er/introduction", "cn/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "cn/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "cn/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "cn/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "cn/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "方法", "expanded": false, "pages": ["cn/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "cn/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
{ "tab": "Private Ephemeral Rollup", "icon": "shield-check", "groups": [{ "group": "操作指南", "pages": ["cn/pages/private-ephemeral-rollups-pers/how-to-guide/quickstart", "cn/pages/private-ephemeral-rollups-pers/how-to-guide/access-control"] }, { "group": "参考资料", "pages": ["cn/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy", "cn/pages/private-ephemeral-rollups-pers/introduction/authorization", "cn/pages/private-ephemeral-rollups-pers/introduction/compliance-framework"] }, { "group": "Private Payments API", "pages": ["cn/pages/private-ephemeral-rollups-pers/api-reference/per/introduction", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/health", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/challenge", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/login", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/deposit", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/transfer", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/withdraw", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/initialize-mint", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/balance", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/private-balance", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/is-mint-initialized", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/quote", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/swap", "cn/pages/private-ephemeral-rollups-pers/api-reference/per/mcp"] }] },
{ "tab": "Solana VRF", "icon": "dice", "groups": [{ "group": "操作指南", "pages": ["cn/pages/verifiable-randomness-functions-vrfs/how-to-guide/quickstart", "cn/pages/verifiable-randomness-functions-vrfs/how-to-guide/best-practices"] }, { "group": "参考资料", "pages": ["cn/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf", "cn/pages/verifiable-randomness-functions-vrfs/introduction/pricing", { "group": "工作原理", "pages": ["cn/pages/verifiable-randomness-functions-vrfs/introduction/technical-details", "cn/pages/verifiable-randomness-functions-vrfs/introduction/security", "cn/pages/verifiable-randomness-functions-vrfs/introduction/faq"] }] }] },
{ "tab": "模板", "icon": "book", "pages": ["cn/pages/templates/private-payments", "cn/pages/templates/rock-paper-scissors", "cn/pages/templates/real-time-price-feed", "cn/pages/templates/gachapon", "cn/pages/templates/random-character-generator", "cn/pages/templates/onchain-dice", "cn/pages/templates/counter"] },
@@ -404,7 +405,7 @@
"language": "jp",
"tabs": [
{ "tab": "概要", "pages": ["jp/pages/overview/products", { "group": "追加情報", "pages": ["jp/pages/overview/additional-information/whitepaper", "jp/pages/overview/additional-information/security-and-audits", "jp/pages/overview/additional-information/pricing", "jp/pages/overview/additional-information/system-status", "jp/pages/overview/additional-information/request-for-products", "jp/pages/overview/additional-information/ai-dev-skill"] }] },
- { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "ガイド", "pages": ["jp/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "jp/pages/ephemeral-rollups-ers/how-to-guide/local-development", { "group": "Rust 例", "pages": ["jp/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "jp/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "参考資料", "pages": ["jp/pages/ephemeral-rollups-ers/introduction/why", { "group": "仕組み", "pages": ["jp/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "jp/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "jp/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["jp/pages/ephemeral-rollups-ers/magic-actions/overview", "jp/pages/ephemeral-rollups-ers/magic-actions/implementation", "jp/pages/ephemeral-rollups-ers/magic-actions/client", "jp/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "jp/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/er/introduction", "jp/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "jp/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "jp/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "jp/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "jp/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "メソッド", "expanded": false, "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
+ { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "ガイド", "pages": ["jp/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "jp/pages/ephemeral-rollups-ers/how-to-guide/local-development", "jp/pages/ephemeral-rollups-ers/how-to-guide/anchor", { "group": "Rust 例", "pages": ["jp/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "jp/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "参考資料", "pages": ["jp/pages/ephemeral-rollups-ers/introduction/why", { "group": "仕組み", "pages": ["jp/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "jp/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "jp/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["jp/pages/ephemeral-rollups-ers/magic-actions/overview", "jp/pages/ephemeral-rollups-ers/magic-actions/implementation", "jp/pages/ephemeral-rollups-ers/magic-actions/client", "jp/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "jp/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/er/introduction", "jp/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "jp/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "jp/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "jp/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "jp/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "メソッド", "expanded": false, "pages": ["jp/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "jp/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
{ "tab": "Private Ephemeral Rollup", "icon": "shield-check", "groups": [{ "group": "ガイド", "pages": ["jp/pages/private-ephemeral-rollups-pers/how-to-guide/quickstart", "jp/pages/private-ephemeral-rollups-pers/how-to-guide/access-control"] }, { "group": "参考資料", "pages": ["jp/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy", "jp/pages/private-ephemeral-rollups-pers/introduction/authorization", "jp/pages/private-ephemeral-rollups-pers/introduction/compliance-framework"] }, { "group": "Private Payments API", "pages": ["jp/pages/private-ephemeral-rollups-pers/api-reference/per/introduction", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/health", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/challenge", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/login", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/deposit", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/transfer", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/withdraw", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/initialize-mint", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/balance", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/private-balance", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/is-mint-initialized", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/quote", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/swap", "jp/pages/private-ephemeral-rollups-pers/api-reference/per/mcp"] }] },
{ "tab": "Solana VRF", "icon": "dice", "groups": [{ "group": "ガイド", "pages": ["jp/pages/verifiable-randomness-functions-vrfs/how-to-guide/quickstart", "jp/pages/verifiable-randomness-functions-vrfs/how-to-guide/best-practices"] }, { "group": "参考資料", "pages": ["jp/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf", "jp/pages/verifiable-randomness-functions-vrfs/introduction/pricing", { "group": "仕組み", "pages": ["jp/pages/verifiable-randomness-functions-vrfs/introduction/technical-details", "jp/pages/verifiable-randomness-functions-vrfs/introduction/security", "jp/pages/verifiable-randomness-functions-vrfs/introduction/faq"] }] }] },
{ "tab": "テンプレート", "icon": "book", "pages": ["jp/pages/templates/private-payments", "jp/pages/templates/rock-paper-scissors", "jp/pages/templates/real-time-price-feed", "jp/pages/templates/gachapon", "jp/pages/templates/random-character-generator", "jp/pages/templates/onchain-dice", "jp/pages/templates/counter"] },
@@ -415,7 +416,7 @@
"language": "ko",
"tabs": [
{ "tab": "개요", "pages": ["ko/pages/overview/products", { "group": "추가 정보", "pages": ["ko/pages/overview/additional-information/whitepaper", "ko/pages/overview/additional-information/security-and-audits", "ko/pages/overview/additional-information/pricing", "ko/pages/overview/additional-information/system-status", "ko/pages/overview/additional-information/request-for-products", "ko/pages/overview/additional-information/ai-dev-skill"] }] },
- { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "가이드", "pages": ["ko/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "ko/pages/ephemeral-rollups-ers/how-to-guide/local-development", { "group": "Rust 예제", "pages": ["ko/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "ko/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "참고 자료", "pages": ["ko/pages/ephemeral-rollups-ers/introduction/why", { "group": "작동 방식", "pages": ["ko/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "ko/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "ko/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["ko/pages/ephemeral-rollups-ers/magic-actions/overview", "ko/pages/ephemeral-rollups-ers/magic-actions/implementation", "ko/pages/ephemeral-rollups-ers/magic-actions/client", "ko/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "ko/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/er/introduction", "ko/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "ko/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "ko/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "ko/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "ko/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "메서드", "expanded": false, "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
+ { "tab": "Ephemeral Rollup", "icon": "bolt", "groups": [{ "group": "가이드", "pages": ["ko/pages/ephemeral-rollups-ers/how-to-guide/quickstart", "ko/pages/ephemeral-rollups-ers/how-to-guide/local-development", "ko/pages/ephemeral-rollups-ers/how-to-guide/anchor", { "group": "Rust 예제", "pages": ["ko/pages/ephemeral-rollups-ers/how-to-guide/rust-program", "ko/pages/ephemeral-rollups-ers/how-to-guide/rust-tests"] }] }, { "group": "참고 자료", "pages": ["ko/pages/ephemeral-rollups-ers/introduction/why", { "group": "작동 방식", "pages": ["ko/pages/ephemeral-rollups-ers/introduction/ephemeral-rollup", "ko/pages/ephemeral-rollups-ers/introduction/ephemeral-accounts", "ko/pages/ephemeral-rollups-ers/introduction/magic-router", { "group": "Magic Actions", "pages": ["ko/pages/ephemeral-rollups-ers/magic-actions/overview", "ko/pages/ephemeral-rollups-ers/magic-actions/implementation", "ko/pages/ephemeral-rollups-ers/magic-actions/client", "ko/pages/ephemeral-rollups-ers/magic-actions/troubleshooting"] }] }, "ko/pages/ephemeral-rollups-ers/introduction/faq"] }, { "group": "ROUTER API", "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/er/introduction", "ko/pages/ephemeral-rollups-ers/api-reference/er/getRoutes", "ko/pages/ephemeral-rollups-ers/api-reference/er/getIdentity", "ko/pages/ephemeral-rollups-ers/api-reference/er/getBlockhashForAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/er/getSignatureStatuses", "ko/pages/ephemeral-rollups-ers/api-reference/er/getAccountInfo", "ko/pages/ephemeral-rollups-ers/api-reference/er/getDelegationStatus"] }, { "group": "RPC API", "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/rpc/introduction", { "group": "메서드", "expanded": false, "pages": ["ko/pages/ephemeral-rollups-ers/api-reference/rpc/getAccountInfo", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBalance", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlock", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockCommitment", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockHeight", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocks", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlocksWithLimit", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getBlockTime", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getFirstAvailableBlock", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getGenesisHash", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getHealth", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getIdentity", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLargestAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLatestBlockhash", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getLeaderSchedule", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getMinimumBalanceForRentExemption", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getMultipleAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getProgramAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getRecentPerformanceSamples", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSignaturesForAddress", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSignatureStatuses", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getSlot", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountBalance", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByDelegate", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenAccountsByOwner", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenLargestAccounts", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTokenSupply", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTransaction", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getTransactionCount", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/getVersion", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/isBlockhashValid", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/sendTransaction", "ko/pages/ephemeral-rollups-ers/api-reference/rpc/simulateTransaction"] }] }] },
{ "tab": "Private Ephemeral Rollup", "icon": "shield-check", "groups": [{ "group": "가이드", "pages": ["ko/pages/private-ephemeral-rollups-pers/how-to-guide/quickstart", "ko/pages/private-ephemeral-rollups-pers/how-to-guide/access-control"] }, { "group": "참고 자료", "pages": ["ko/pages/private-ephemeral-rollups-pers/introduction/onchain-privacy", "ko/pages/private-ephemeral-rollups-pers/introduction/authorization", "ko/pages/private-ephemeral-rollups-pers/introduction/compliance-framework"] }, { "group": "Private Payments API", "pages": ["ko/pages/private-ephemeral-rollups-pers/api-reference/per/introduction", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/health", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/challenge", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/login", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/deposit", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/transfer", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/withdraw", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/initialize-mint", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/balance", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/private-balance", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/is-mint-initialized", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/quote", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/swap", "ko/pages/private-ephemeral-rollups-pers/api-reference/per/mcp"] }] },
{ "tab": "Solana VRF", "icon": "dice", "groups": [{ "group": "가이드", "pages": ["ko/pages/verifiable-randomness-functions-vrfs/how-to-guide/quickstart", "ko/pages/verifiable-randomness-functions-vrfs/how-to-guide/best-practices"] }, { "group": "참고 자료", "pages": ["ko/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf", "ko/pages/verifiable-randomness-functions-vrfs/introduction/pricing", { "group": "작동 방식", "pages": ["ko/pages/verifiable-randomness-functions-vrfs/introduction/technical-details", "ko/pages/verifiable-randomness-functions-vrfs/introduction/security", "ko/pages/verifiable-randomness-functions-vrfs/introduction/faq"] }] }] },
{ "tab": "템플릿", "icon": "book", "pages": ["ko/pages/templates/private-payments", "ko/pages/templates/rock-paper-scissors", "ko/pages/templates/real-time-price-feed", "ko/pages/templates/gachapon", "ko/pages/templates/random-character-generator", "ko/pages/templates/onchain-dice", "ko/pages/templates/counter"] },
diff --git a/images/Web3.png b/images/Web3.png
new file mode 100644
index 0000000..ef80a79
Binary files /dev/null and b/images/Web3.png differ
diff --git a/images/drop_manifest.png b/images/drop_manifest.png
new file mode 100644
index 0000000..a510eef
Binary files /dev/null and b/images/drop_manifest.png differ
diff --git a/images/gh-pages-deply.png b/images/gh-pages-deply.png
new file mode 100644
index 0000000..60ec410
Binary files /dev/null and b/images/gh-pages-deply.png differ
diff --git a/images/select_xnft_template.png b/images/select_xnft_template.png
new file mode 100644
index 0000000..5544043
Binary files /dev/null and b/images/select_xnft_template.png differ
diff --git a/images/switch_platform.png b/images/switch_platform.png
new file mode 100644
index 0000000..6a5a6d9
Binary files /dev/null and b/images/switch_platform.png differ
diff --git a/images/webgl.png b/images/webgl.png
new file mode 100644
index 0000000..f644ade
Binary files /dev/null and b/images/webgl.png differ
diff --git a/images/xnft_webgl_template_imported.png b/images/xnft_webgl_template_imported.png
new file mode 100644
index 0000000..0276337
Binary files /dev/null and b/images/xnft_webgl_template_imported.png differ
diff --git a/jp/api-reference/spl-api/introduction-per.mdx b/jp/api-reference/spl-api/introduction-per.mdx
index 6f14ef1..b9cf0d7 100644
--- a/jp/api-reference/spl-api/introduction-per.mdx
+++ b/jp/api-reference/spl-api/introduction-per.mdx
@@ -9,7 +9,7 @@ Private Ephemeral SPL Token API を使うと、MagicBlock の Ephemeral Rollup
### ヘルスチェックと設定
-- [**Root**](/jp/api-reference/spl-api/root) - API のヘルス状態を確認する
+- **Root** - API のヘルス状態を確認する
- [**Get Config**](/jp/api-reference/spl-api/get-config) - API の設定情報を取得する
### セットアップと初期化
@@ -23,7 +23,7 @@ Private Ephemeral SPL Token API を使うと、MagicBlock の Ephemeral Rollup
- [**Initialize Ephemeral ATA**](/jp/api-reference/spl-api/initialize-ephemeral-ata) - 送信者と受信者に必要な ephemeral token アカウントを初期化する
- [**Deposit SPL Tokens**](/jp/api-reference/spl-api/deposit-spl-tokens) - token を ephemeral アカウントへ入金する
- [**Delegate Ephemeral ATA**](/jp/api-reference/spl-api/delegate-ephemeral-ata) - ephemeral アカウントを Delegation Program に委任する
-- [**Transfer SPL Tokens**](/jp/api-reference/spl-api/transfer-ephemeral-ata) - SPL checked transfer を使ってアカウント間で token を転送する(**注意:** 転送前に Ephemeral ATA を初期化し、委任しておく必要があります)
+- [**Transfer SPL Tokens**](/jp/api-reference/spl-api/checked-transfer) - SPL checked transfer を使ってアカウント間で token を転送する(**注意:** 転送前に Ephemeral ATA を初期化し、委任しておく必要があります)
- [**Undelegate Ephemeral ATA**](/jp/api-reference/spl-api/undelegate-ephemeral-ata) - ephemeral アカウントの委任を解除する
- [**Withdraw SPL Tokens**](/jp/api-reference/spl-api/withdraw-spl-tokens) - ephemeral アカウントから token を引き出す
diff --git a/jp/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx b/jp/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
new file mode 100644
index 0000000..5b96890
--- /dev/null
+++ b/jp/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
@@ -0,0 +1,280 @@
+---
+title: "Anchor サンプル"
+description: "Solana 上で counter をインクリメントするシンプルな Anchor プログラムの書き方を学びます"
+---
+
+import Endpoints from "/jp/snippets/endpoints.mdx";
+
+
+ VIDEO
+
+
+このガイドでは、counter をインクリメントするシンプルな Anchor プログラムの書き方を順を追って説明します。Solana 上にデプロイし、React クライアントから対話する方法も学びます。
+
+## ソフトウェアパッケージ
+
+このプログラムは以下のソフトウェアパッケージで開発・テストされています。他のバージョンでも互換性がある場合があります。
+
+| ソフトウェア | バージョン | インストールガイド |
+| ------------ | ---------- | --------------------------------------------------------------- |
+| **Solana** | 3.1.9 | [Install Solana](https://docs.anza.xyz/cli/install) |
+| **Rust** | 1.89.0 | [Install Rust](https://www.rust-lang.org/tools/install) |
+| **Anchor** | 1.0.2 | [Install Anchor](https://www.anchor-lang.com/docs/installation) |
+
+## ソースコードへのクイックアクセス
+
+すぐにコードを確認したい場合:
+
+
+
+
+
+
+## Anchor プログラムを書く
+
+counter プログラムの主要な構成要素を順に見ていきましょう:
+
+## コア機能
+
+このプログラムは 2 つの主要な instruction を実装します:
+
+1. `initialize`:counter を 0 にセット
+2. `increment`:counter を 1 だけ加算
+
+プログラムの中核構造は以下のとおりです:
+
+```rust
+#[ephemeral]
+#[program]
+pub mod public_counter {
+ use super::*;
+
+ /// Initialize the counter.
+ pub fn initialize(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count = 0;
+ Ok(())
+ }
+
+ /// Increment the counter.
+ pub fn increment(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ Ok(())
+ }
+
+ // ... Additional instructions will be added here
+}
+```
+
+特別な点はなく、counter をインクリメントするだけのシンプルな Anchor プログラムです。唯一の違いは、委任プログラムと連携するための便利なロジックを注入する `delegate` マクロを追加していることです。
+
+### Counter PDA を委任する
+
+counter PDA を委任し、Ephemeral Rollup セッション内で書き込み可能にするには、内部的に `delegate_account` 関数を呼び出す instruction を追加する必要があります。`delegate_account` は委任プログラムへ CPI を行い、検証が通るとそのアカウントの所有権を取得します。
+このステップが完了すると、ephemeral validator が counter PDA に対するトランザクションの処理を開始し、委任プログラムを通じて状態差分を提案できるようになります。
+
+
+ Solana Explorer でトランザクション詳細を確認
+
+```rust
+/// Add delegate function to the context
+#[delegate]
+#[derive(Accounts)]
+pub struct DelegateInput<'info> {
+ pub payer: Signer<'info>,
+ /// CHECK The pda to delegate
+ #[account(mut, del)]
+ pub pda: AccountInfo<'info>,
+}
+````
+
+```rust
+/// Delegate the account to the delegation program
+/// Set specific validator based on ER, see https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/local-development
+pub fn delegate(ctx: Context) -> Result<()> {
+ ctx.accounts.delegate_pda(
+ &ctx.accounts.payer,
+ &[COUNTER_SEED],
+ DelegateConfig {
+ // Optionally set a specific validator from the first remaining account
+ validator: ctx.remaining_accounts.first().map(|acc| acc.key()),
+ ..Default::default()
+ },
+ )?;
+ Ok(())
+}
+```
+
+### PDA が委任されている間に commit する
+
+ephemeral ランタイムでは、PDA が委任されている間にその状態を commit できます。これは `commit` intent を持つ `MagicIntentBundleBuilder` を構築して呼び出すことで実現します。
+
+
+
+ Solana Explorer でトランザクション詳細を確認
+
+
+ Solana Explorer でトランザクション詳細を確認
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Increment the counter and manually commit the account in the Ephemeral Rollup session.
+pub fn increment_and_commit(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ // Serialize the Anchor account before the CPI sees it
+ counter.exit(&crate::ID)?;
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+````
+
+### PDA の委任を解除する
+
+PDA の委任解除は、`commit_and_undelegate` intent を持つ `MagicIntentBundleBuilder` を構築することで行います。
+これにより最新状態がコミットされ、PDA の所有権が所有者プログラムへ戻されます。
+
+
+
+ Solana Explorer でトランザクション詳細を確認
+
+
+ Solana Explorer でトランザクション詳細を確認
+
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Undelegate the account from the delegation program
+pub fn undelegate(ctx: Context) -> Result<()> {
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit_and_undelegate(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+```
+
+## React クライアントの接続
+
+React クライアントは Anchor プログラムと対話するためのシンプルなインターフェースです。
+Anchor バインディングを使ってプログラムと通信し、MagicBlock SDK で Ephemeral Rollup セッションとやり取りします。ソースはプログラムと同じ場所、[`anchor-counter/app`](https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/anchor-counter/app) にあります。
+
+{" "}
+
+
+
+
+
+
+ iframe は一部のウォレット(例:Backpack)でのみ動作します。代わりに以下のデプロイ済みデモを試してください:https://counter-example.magicblock.app/
+
+
+### Ephemeral エンドポイントの設定
+
+Ephemeral Rollup セッションと対話するには、適切なエンドポイントを設定する必要があります:
+
+- devnet では、以下の ephemeral エンドポイントを使用してください:
+
+ https://devnet.magicblock.app
+
+- mainnet については、適切なエンドポイントを得るために MagicBlock チームへお問い合わせください。
+- localhost の場合は、ephemeral validator をダウンロード・インストールし、適切な環境変数を指定してローカルで実行してください。
+
+開発環境または本番環境に応じて、クライアントの設定を正しいエンドポイントに更新してください。
+
+
+
+
+
+
+
diff --git a/jp/pages/get-started/introduction/ephemeral-rollup.mdx b/jp/pages/get-started/introduction/ephemeral-rollup.mdx
index fe715a5..cdf82f9 100644
--- a/jp/pages/get-started/introduction/ephemeral-rollup.mdx
+++ b/jp/pages/get-started/introduction/ephemeral-rollup.mdx
@@ -87,7 +87,7 @@ ephemeral rollup は **専用の SVM runtime** として機能し、トランザ
Magic Router の仕組みを学ぶ
@@ -95,7 +95,7 @@ ephemeral rollup は **専用の SVM runtime** として機能し、トランザ
Rust、Anchor、Typescript で試してみる
diff --git a/jp/pages/get-started/introduction/why-magicblock.mdx b/jp/pages/get-started/introduction/why-magicblock.mdx
index 3900a13..2b2d277 100644
--- a/jp/pages/get-started/introduction/why-magicblock.mdx
+++ b/jp/pages/get-started/introduction/why-magicblock.mdx
@@ -73,7 +73,7 @@ MagicBlock は専用の **Solana Virtual Machine (SVM) runtime** として動作
Magic Router の仕組みを学ぶ
@@ -81,7 +81,7 @@ MagicBlock は専用の **Solana Virtual Machine (SVM) runtime** として動作
Rust、Anchor、Typescript で試してみる
diff --git a/jp/pages/tools/solana-unity-sdk/guides/host-your-game.mdx b/jp/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
index ec541df..033ffe9 100644
--- a/jp/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
+++ b/jp/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
@@ -36,7 +36,7 @@ git push origin
- リポジトリの内容は、SDK の [gp-pages](https://github.com/garbles-labs/Solana.Unity-SDK/tree/gh-pages) ブランチに近い状態になります
- リポジトリ設定から gh-pages デプロイを有効にする
- 
+ 
Github は公開用 URL を提供します: [garbles-labs.github.io/Solana.Unity-SDK](https://garbles-labs.github.io/Solana.Unity-SDK/)
@@ -45,7 +45,7 @@ Github は公開用 URL を提供します: [garbles-labs.github.io/Solana.Unity
- [このガイド](/Build/SolanaUnitySDK/guides/publishing-a-game) に従えば、2 分以内にゲームを xNFT として公開できます。
+ [このガイド](/jp/pages/tools/solana-unity-sdk/guides/publishing-a-game) に従えば、2 分以内にゲームを xNFT として公開できます。
楽しいゲーム開発を。そしてリポジトリへの ⭐ もお忘れなく
diff --git a/jp/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx b/jp/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
index 58dbc79..5871403 100644
--- a/jp/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
+++ b/jp/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
@@ -17,7 +17,7 @@ title: "ゲームを xNFT として公開する"
icon="lightbulb"
iconType="duotone"
>
- [このガイド](/Build/SolanaUnitySDK/guides/host-your-game)に従ってゲームを WebGL にビルドし、Github Pages にホストしてください
+ [このガイド](/jp/pages/tools/solana-unity-sdk/guides/host-your-game)に従ってゲームを WebGL にビルドし、Github Pages にホストしてください
### (任意)xNFT WebGL テンプレートを使う
diff --git a/ko/api-reference/spl-api/introduction-per.mdx b/ko/api-reference/spl-api/introduction-per.mdx
index 2e48ade..79252c9 100644
--- a/ko/api-reference/spl-api/introduction-per.mdx
+++ b/ko/api-reference/spl-api/introduction-per.mdx
@@ -9,7 +9,7 @@ Private Ephemeral SPL Token API를 사용하면 MagicBlock의 Ephemeral Rollup
### 상태 확인 및 설정
-- [**Root**](/ko/api-reference/spl-api/root) - API 상태 확인
+- **Root** - API 상태 확인
- [**Get Config**](/ko/api-reference/spl-api/get-config) - API 설정 정보 조회
### 설정 및 초기화
@@ -23,7 +23,7 @@ Private Ephemeral SPL Token API를 사용하면 MagicBlock의 Ephemeral Rollup
- [**Initialize Ephemeral ATA**](/ko/api-reference/spl-api/initialize-ephemeral-ata) - 송신자와 수신자에게 필요한 ephemeral token 계정 초기화
- [**Deposit SPL Tokens**](/ko/api-reference/spl-api/deposit-spl-tokens) - token을 ephemeral 계정에 예치
- [**Delegate Ephemeral ATA**](/ko/api-reference/spl-api/delegate-ephemeral-ata) - ephemeral 계정을 Delegation Program에 위임
-- [**Transfer SPL Tokens**](/ko/api-reference/spl-api/transfer-ephemeral-ata) - SPL checked transfer로 계정 간 token 전송 (**참고:** 전송 전에 Ephemeral ATA를 초기화하고 위임해야 함)
+- [**Transfer SPL Tokens**](/ko/api-reference/spl-api/checked-transfer) - SPL checked transfer로 계정 간 token 전송 (**참고:** 전송 전에 Ephemeral ATA를 초기화하고 위임해야 함)
- [**Undelegate Ephemeral ATA**](/ko/api-reference/spl-api/undelegate-ephemeral-ata) - ephemeral 계정의 위임 제거
- [**Withdraw SPL Tokens**](/ko/api-reference/spl-api/withdraw-spl-tokens) - ephemeral 계정에서 token 출금
diff --git a/ko/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx b/ko/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
new file mode 100644
index 0000000..d731482
--- /dev/null
+++ b/ko/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
@@ -0,0 +1,280 @@
+---
+title: "Anchor 예제"
+description: "Solana에서 counter를 증가시키는 간단한 Anchor 프로그램을 작성하는 방법을 배워봅니다"
+---
+
+import Endpoints from "/ko/snippets/endpoints.mdx";
+
+
+ VIDEO
+
+
+이 가이드에서는 counter를 증가시키는 간단한 Anchor 프로그램을 작성하는 과정을 안내합니다. 이 프로그램을 Solana에 배포하고 React 클라이언트와 상호작용하는 방법을 함께 살펴봅니다.
+
+## 소프트웨어 패키지
+
+이 프로그램은 다음 소프트웨어 패키지로 개발 및 테스트되었습니다. 다른 버전도 호환될 수 있습니다.
+
+| 소프트웨어 | 버전 | 설치 가이드 |
+| ---------- | ------ | --------------------------------------------------------------- |
+| **Solana** | 3.1.9 | [Solana 설치](https://docs.anza.xyz/cli/install) |
+| **Rust** | 1.89.0 | [Rust 설치](https://www.rust-lang.org/tools/install) |
+| **Anchor** | 1.0.2 | [Anchor 설치](https://www.anchor-lang.com/docs/installation) |
+
+## 소스 코드 빠른 접근
+
+코드를 바로 살펴보고 싶다면:
+
+
+
+
+
+
+## Anchor 프로그램 작성하기
+
+이 counter 프로그램의 핵심 구성 요소를 차례로 살펴보겠습니다:
+
+## 핵심 기능
+
+이 프로그램은 두 개의 주요 instruction을 구현합니다:
+
+1. `initialize`: counter를 0으로 설정
+2. `increment`: counter를 1만큼 증가
+
+프로그램의 핵심 구조는 다음과 같습니다:
+
+```rust
+#[ephemeral]
+#[program]
+pub mod public_counter {
+ use super::*;
+
+ /// Initialize the counter.
+ pub fn initialize(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count = 0;
+ Ok(())
+ }
+
+ /// Increment the counter.
+ pub fn increment(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ Ok(())
+ }
+
+ // ... Additional instructions will be added here
+}
+```
+
+특별한 점은 없으며, counter를 증가시키는 간단한 Anchor 프로그램입니다. 유일한 차이는 위임 프로그램과 상호작용하는 데 필요한 로직을 주입하기 위해 `delegate` 매크로를 추가했다는 것입니다.
+
+### Counter PDA 위임하기
+
+counter PDA를 위임하여 Ephemeral Rollup 세션 안에서 쓰기 가능하게 만들려면, 내부적으로 `delegate_account` 함수를 호출하는 instruction을 추가해야 합니다. `delegate_account`는 위임 프로그램에 CPI를 수행하고, 검증이 통과되면 해당 계정의 소유권을 가져옵니다.
+이 단계 이후에는 ephemeral validator가 counter PDA에 대한 트랜잭션 처리를 시작하고, 위임 프로그램을 통해 상태 변경 사항을 제안할 수 있게 됩니다.
+
+
+ Solana Explorer에서 트랜잭션 상세 보기
+
+```rust
+/// Add delegate function to the context
+#[delegate]
+#[derive(Accounts)]
+pub struct DelegateInput<'info> {
+ pub payer: Signer<'info>,
+ /// CHECK The pda to delegate
+ #[account(mut, del)]
+ pub pda: AccountInfo<'info>,
+}
+````
+
+```rust
+/// Delegate the account to the delegation program
+/// Set specific validator based on ER, see https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/local-development
+pub fn delegate(ctx: Context) -> Result<()> {
+ ctx.accounts.delegate_pda(
+ &ctx.accounts.payer,
+ &[COUNTER_SEED],
+ DelegateConfig {
+ // Optionally set a specific validator from the first remaining account
+ validator: ctx.remaining_accounts.first().map(|acc| acc.key()),
+ ..Default::default()
+ },
+ )?;
+ Ok(())
+}
+```
+
+### PDA가 위임된 상태에서 commit 하기
+
+ephemeral 런타임은 PDA가 위임된 동안에도 그 상태를 commit할 수 있게 해줍니다. 이는 `commit` intent를 가진 `MagicIntentBundleBuilder`를 구성하고 호출함으로써 수행됩니다.
+
+
+
+ Solana Explorer에서 트랜잭션 상세 보기
+
+
+ Solana Explorer에서 트랜잭션 상세 보기
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Increment the counter and manually commit the account in the Ephemeral Rollup session.
+pub fn increment_and_commit(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ // Serialize the Anchor account before the CPI sees it
+ counter.exit(&crate::ID)?;
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+````
+
+### PDA의 위임 해제
+
+PDA의 위임 해제는 `commit_and_undelegate` intent를 가진 `MagicIntentBundleBuilder`를 구성함으로써 수행됩니다.
+이 작업은 최신 상태를 commit하고 PDA의 소유권을 소유자 프로그램에게 돌려줍니다.
+
+
+
+ Solana Explorer에서 트랜잭션 상세 보기
+
+
+ Solana Explorer에서 트랜잭션 상세 보기
+
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Undelegate the account from the delegation program
+pub fn undelegate(ctx: Context) -> Result<()> {
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit_and_undelegate(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+```
+
+## React 클라이언트 연결
+
+React 클라이언트는 Anchor 프로그램과 상호작용할 수 있게 해주는 간단한 인터페이스입니다.
+Anchor 바인딩을 사용해 프로그램과 통신하고, MagicBlock SDK로 Ephemeral Rollup 세션과 상호작용합니다. 소스는 프로그램과 같은 위치인 [`anchor-counter/app`](https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/anchor-counter/app)에 있습니다.
+
+{" "}
+
+
+
+
+
+
+ iframe은 일부 지갑(예: Backpack)에서만 동작합니다. 다음의 배포된 데모를 사용해보세요: https://counter-example.magicblock.app/
+
+
+### Ephemeral 엔드포인트 설정
+
+Ephemeral Rollup 세션과 상호작용하려면 적절한 엔드포인트를 설정해야 합니다:
+
+- devnet의 경우, 다음 ephemeral 엔드포인트를 사용하세요:
+
+ https://devnet.magicblock.app
+
+- mainnet의 경우, 적절한 엔드포인트를 받으려면 MagicBlock 팀에 문의해주세요.
+- localhost 의 경우, ephemeral validator를 다운로드, 설치 후 적절한 환경 변수를 사용해 로컬에서 실행하세요.
+
+개발 또는 프로덕션 환경에 따라 클라이언트 설정을 올바른 엔드포인트로 업데이트해야 합니다.
+
+
+
+
+
+
+
diff --git a/ko/pages/get-started/introduction/ephemeral-rollup.mdx b/ko/pages/get-started/introduction/ephemeral-rollup.mdx
index 524a5f4..9bc2443 100644
--- a/ko/pages/get-started/introduction/ephemeral-rollup.mdx
+++ b/ko/pages/get-started/introduction/ephemeral-rollup.mdx
@@ -87,7 +87,7 @@ ephemeral rollup은 **특화된 SVM runtime** 으로 동작하며 트랜잭션
Magic Router의 작동 방식을 알아보세요
@@ -95,7 +95,7 @@ ephemeral rollup은 **특화된 SVM runtime** 으로 동작하며 트랜잭션
Rust, Anchor, Typescript로 직접 시도해 보세요
diff --git a/ko/pages/get-started/introduction/why-magicblock.mdx b/ko/pages/get-started/introduction/why-magicblock.mdx
index a77f873..12aeaaf 100644
--- a/ko/pages/get-started/introduction/why-magicblock.mdx
+++ b/ko/pages/get-started/introduction/why-magicblock.mdx
@@ -73,7 +73,7 @@ MagicBlock는 특화된 **Solana Virtual Machine (SVM) runtime** 으로 동작
Magic Router의 작동 방식을 알아보세요
@@ -81,7 +81,7 @@ MagicBlock는 특화된 **Solana Virtual Machine (SVM) runtime** 으로 동작
Rust, Anchor, Typescript로 직접 시도해 보세요
diff --git a/ko/pages/tools/solana-unity-sdk/guides/host-your-game.mdx b/ko/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
index 10d65d4..979c292 100644
--- a/ko/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
+++ b/ko/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
@@ -36,7 +36,7 @@ git push origin
- 이제 저장소는 SDK의 [gp-pages](https://github.com/garbles-labs/Solana.Unity-SDK/tree/gh-pages) 브랜치와 비슷한 모습이어야 합니다
- 저장소 설정에서 gh-pages 배포를 활성화합니다
- 
+ 
Github는 실제 배포용 URL을 제공합니다: [garbles-labs.github.io/Solana.Unity-SDK](https://garbles-labs.github.io/Solana.Unity-SDK/)
@@ -45,7 +45,7 @@ Github는 실제 배포용 URL을 제공합니다: [garbles-labs.github.io/Solan
- [이 가이드](/Build/SolanaUnitySDK/guides/publishing-a-game)를 따르면 2분 안에 게임을 xNFT로 배포할 수 있습니다.
+ [이 가이드](/ko/pages/tools/solana-unity-sdk/guides/publishing-a-game)를 따르면 2분 안에 게임을 xNFT로 배포할 수 있습니다.
즐거운 게임 개발 되시길 바랍니다. 저장소에 ⭐도 잊지 마세요
diff --git a/ko/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx b/ko/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
index 2e8699b..c32bc36 100644
--- a/ko/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
+++ b/ko/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
@@ -17,7 +17,7 @@ title: "게임을 xNFT로 게시하기"
icon="lightbulb"
iconType="duotone"
>
- [이 가이드](/Build/SolanaUnitySDK/guides/host-your-game)를 따라 게임을 WebGL로 빌드하고 Github Pages에 호스팅하세요
+ [이 가이드](/ko/pages/tools/solana-unity-sdk/guides/host-your-game)를 따라 게임을 WebGL로 빌드하고 Github Pages에 호스팅하세요
### (선택 사항) xNFT WebGL 템플릿 사용하기
diff --git a/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx b/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
new file mode 100644
index 0000000..adb05ec
--- /dev/null
+++ b/pages/ephemeral-rollups-ers/how-to-guide/anchor.mdx
@@ -0,0 +1,282 @@
+---
+title: "Anchor Example"
+description: "Learn how to write a simple Anchor program that increments a counter on Solana"
+---
+
+import Endpoints from "/snippets/endpoints.mdx";
+
+
+ VIDEO
+
+
+This guide will walk you through the process of writing a simple Anchor program that increments a counter. You'll learn how to deploy this program on Solana and interact with it using a React client.
+
+## Software Packages
+
+This program is developed and tested with the following software packages. Other versions may also be compatible.
+
+| Software | Version | Installation Guide |
+| ------------------------------ | ------- | --------------------------------------------------------------- |
+| **Solana** | 3.1.9 | [Install Solana](https://docs.anza.xyz/cli/install) |
+| **Rust** | 1.89.0 | [Install Rust](https://www.rust-lang.org/tools/install) |
+| **Anchor** | 1.0.2 | [Install Anchor](https://www.anchor-lang.com/docs/installation) |
+
+## Quick Access to Source Code
+
+If you prefer to dive straight into the code:
+
+
+
+
+
+
+## Writing the Anchor Program
+
+Let's break down the key components of our counter program:
+
+## Core Functionality
+
+The program implements two main instructions:
+
+1. `initialize`: Sets the counter to 0
+2. `increment`: Increments the counter by 1
+
+Here's the core structure of our program:
+
+```rust
+#[ephemeral]
+#[program]
+pub mod public_counter {
+ use super::*;
+
+ /// Initialize the counter.
+ pub fn initialize(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count = 0;
+ Ok(())
+ }
+
+ /// Increment the counter.
+ pub fn increment(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ Ok(())
+ }
+
+ // ... Additional instructions will be added here
+}
+```
+
+Nothing special here, just a simple Anchor program that increments a counter. The only difference is that we're adding the `delegate` macro to inject some useful logic to interact with the delegation program.
+
+### Delegating the Counter PDA
+
+In order to delegate the counter PDA, and make it writable in an Ephemeral Rollup session, we need to add an instruction which
+internally calls the `delegate_account` function. `delegate_account` will CPI to the delegation program, which upon validation will gain ownership of the account.
+After this step, an ephemeral validator can start processing transactions on the counter PDA and propose state diff trough the delegation program.
+
+
+ Inspect transactions details on Solana Explorer
+
+```rust
+/// Add delegate function to the context
+#[delegate]
+#[derive(Accounts)]
+pub struct DelegateInput<'info> {
+ pub payer: Signer<'info>,
+ /// CHECK The pda to delegate
+ #[account(mut, del)]
+ pub pda: AccountInfo<'info>,
+}
+````
+
+```rust
+/// Delegate the account to the delegation program
+/// Set specific validator based on ER, see https://docs.magicblock.gg/pages/ephemeral-rollups-ers/how-to-guide/local-development
+pub fn delegate(ctx: Context) -> Result<()> {
+ ctx.accounts.delegate_pda(
+ &ctx.accounts.payer,
+ &[COUNTER_SEED],
+ DelegateConfig {
+ // Optionally set a specific validator from the first remaining account
+ validator: ctx.remaining_accounts.first().map(|acc| acc.key()),
+ ..Default::default()
+ },
+ )?;
+ Ok(())
+}
+```
+
+### Committing while the PDA is delegated
+
+The ephemeral runtime allows committing the state of the PDA while it is delegated. This is done by building a `MagicIntentBundleBuilder` with the `commit` intent and invoking it.
+
+
+
+ Inspect transaction details on Solana Explorer
+
+
+ Inspect transaction details on Solana Explorer
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Increment the counter and manually commit the account in the Ephemeral Rollup session.
+pub fn increment_and_commit(ctx: Context) -> Result<()> {
+ let counter = &mut ctx.accounts.counter;
+ counter.count += 1;
+ // Serialize the Anchor account before the CPI sees it
+ counter.exit(&crate::ID)?;
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+````
+
+### Undelegating the PDA
+
+Undelegating the PDA is done by building a `MagicIntentBundleBuilder` with the `commit_and_undelegate` intent.
+This commits the latest state and returns ownership of the PDA to the owner program.
+
+
+
+ Inspect transaction details on Solana Explorer
+
+
+ Inspect transaction details on Solana Explorer
+
+
+
+```rust
+use ephemeral_rollups_sdk::ephem::MagicIntentBundleBuilder;
+
+/// Undelegate the account from the delegation program
+pub fn undelegate(ctx: Context) -> Result<()> {
+ MagicIntentBundleBuilder::new(
+ ctx.accounts.payer.to_account_info(),
+ ctx.accounts.magic_context.to_account_info(),
+ ctx.accounts.magic_program.to_account_info(),
+ )
+ .commit_and_undelegate(&[ctx.accounts.counter.to_account_info()])
+ .build_and_invoke()?;
+ Ok(())
+}
+```
+
+## Connecting the React Client
+
+The React client is a simple interface that allows you to interact with the Anchor program.
+It uses the Anchor bindings to interact with the program and the MagicBlock SDK to interact with the Ephemeral Rollup session. Source lives alongside the program at [`anchor-counter/app`](https://github.com/magicblock-labs/magicblock-engine-examples/tree/main/anchor-counter/app).
+
+{" "}
+
+
+
+
+
+
+ Iframes only work with some wallets (e.g. Backpack). Alternatively, try the
+ deployed demo here: https://counter-example.magicblock.app/
+
+
+### Ephemeral Endpoint Configuration
+
+To interact with the Ephemeral Rollup session, you need to configure the appropriate endpoint:
+
+- For devnet, use the following ephemeral endpoint:
+
+ https://devnet.magicblock.app
+
+- For mainnet, please reach out to the MagicBlock team to receive the appropriate endpoint.
+- For localhost , download, install, and run the ephemeral validator locally with the appropriate environment variables.
+
+Make sure to update your client configuration to use the correct endpoint based on your development or production environment.
+
+
+
+
+
+
+
diff --git a/pages/get-started/introduction/ephemeral-rollup.mdx b/pages/get-started/introduction/ephemeral-rollup.mdx
index 28cfd63..b3f94a9 100644
--- a/pages/get-started/introduction/ephemeral-rollup.mdx
+++ b/pages/get-started/introduction/ephemeral-rollup.mdx
@@ -87,7 +87,7 @@ Once transactions are submitted via specialized RPCs, the provisioner detects de
Learn how Magic Router works
@@ -95,7 +95,7 @@ Once transactions are submitted via specialized RPCs, the provisioner detects de
Try out with Rust, Anchor, and Typescript
diff --git a/pages/get-started/introduction/why-magicblock.mdx b/pages/get-started/introduction/why-magicblock.mdx
index c793779..7c41d21 100644
--- a/pages/get-started/introduction/why-magicblock.mdx
+++ b/pages/get-started/introduction/why-magicblock.mdx
@@ -73,7 +73,7 @@ Traditional rollups and Solana’s current execution model have inherent constra
Learn how Magic Router works
@@ -81,7 +81,7 @@ Traditional rollups and Solana’s current execution model have inherent constra
Try out with Rust, Anchor, and Typescript
diff --git a/pages/tools/solana-unity-sdk/guides/host-your-game.mdx b/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
index 1c1b48d..97c5740 100644
--- a/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
+++ b/pages/tools/solana-unity-sdk/guides/host-your-game.mdx
@@ -36,7 +36,7 @@ git push origin
- You repository should now looks similar to the SDK [gp-pages](https://github.com/garbles-labs/Solana.Unity-SDK/tree/gh-pages) branch.
- Enable gh-pages deployment from the repository settings
- 
+ 
Github will provide a url for the live deployment: [garbles-labs.github.io/Solana.Unity-SDK](https://garbles-labs.github.io/Solana.Unity-SDK/)
@@ -47,7 +47,7 @@ Github will provide a url for the live deployment: [garbles-labs.github.io/Solan
- Follow [this guide](/Build/SolanaUnitySDK/guides/publishing-a-game) to publish your game as an xNFT
+ Follow [this guide](/pages/tools/solana-unity-sdk/guides/publishing-a-game) to publish your game as an xNFT
in less than 2 minutes.
diff --git a/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx b/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
index 1a1fbc9..a685778 100644
--- a/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
+++ b/pages/tools/solana-unity-sdk/guides/publishing-a-game.mdx
@@ -18,7 +18,7 @@ Deploy your game as a normal WebGL game as you will need the url for publishing
icon="lightbulb"
iconType="duotone"
>
- Follow [this guide](/Build/SolanaUnitySDK/guides/host-your-game) to compile your game to WebGL and
+ Follow [this guide](/pages/tools/solana-unity-sdk/guides/host-your-game) to compile your game to WebGL and
host the build on Github pages