Przeglądaj źródła

100% coverage on ko and ja. renamed from country codes to langauge codes

Tony Boyle 1 miesiąc temu
rodzic
commit
5cabdb3503
100 zmienionych plików z 10978 dodań i 81 usunięć
  1. 223 0
      SEO_EXAMPLE.md
  2. 181 0
      SEO_IMPLEMENTATION.md
  3. 359 0
      TRANSLATION_STATUS.md
  4. 7 7
      src/components/LanguageSwitcher.jsx
  5. 121 0
      src/components/SEOHead.jsx
  6. 2 2
      src/components/products/amman/index.js
  7. 2 2
      src/components/products/aura/index.js
  8. 2 2
      src/components/products/bubblegum-v2/index.js
  9. 2 2
      src/components/products/bubblegum/index.js
  10. 2 2
      src/components/products/candyMachine/index.js
  11. 2 2
      src/components/products/cli/index.js
  12. 44 1
      src/components/products/core/index.js
  13. 2 2
      src/components/products/coreCandyMachine/index.js
  14. 2 2
      src/components/products/das-api/index.js
  15. 2 2
      src/components/products/fusion/index.js
  16. 2 2
      src/components/products/global/index.js
  17. 17 2
      src/components/products/guides/index.js
  18. 2 2
      src/components/products/hydra/index.js
  19. 2 2
      src/components/products/inscription/index.js
  20. 2 2
      src/components/products/legacyDocumentation/index.js
  21. 2 2
      src/components/products/mpl-hybrid/index.js
  22. 2 2
      src/components/products/shank/index.js
  23. 2 2
      src/components/products/sugar/index.js
  24. 2 2
      src/components/products/tokenAuthRules/index.js
  25. 2 2
      src/components/products/tokenMetadata/index.js
  26. 2 2
      src/components/products/umi/index.js
  27. 82 0
      src/config/languages.js
  28. 8 8
      src/contexts/LocaleContext.js
  29. 1 1
      src/i18n.js
  30. 7 24
      src/pages/_app.jsx
  31. 124 0
      src/pages/ja/core-candy-machine/guards/address-gate.md
  32. 275 0
      src/pages/ja/core-candy-machine/guards/allocation.md
  33. 412 0
      src/pages/ja/core-candy-machine/guards/allow-list.md
  34. 148 0
      src/pages/ja/core-candy-machine/guards/asset-burn-multi.md
  35. 143 0
      src/pages/ja/core-candy-machine/guards/asset-burn.md
  36. 146 0
      src/pages/ja/core-candy-machine/guards/asset-gate.md
  37. 160 0
      src/pages/ja/core-candy-machine/guards/asset-mint-limit.md
  38. 170 0
      src/pages/ja/core-candy-machine/guards/asset-payment-multi.md
  39. 166 0
      src/pages/ja/core-candy-machine/guards/asset-payment.md
  40. 105 0
      src/pages/ja/core-candy-machine/guards/edition.md
  41. 112 0
      src/pages/ja/core-candy-machine/guards/end-date.md
  42. 659 0
      src/pages/ja/core-candy-machine/guards/freeze-sol-payment.md
  43. 682 0
      src/pages/ja/core-candy-machine/guards/freeze-token-payment.md
  44. 173 0
      src/pages/ja/core-candy-machine/guards/gatekeeper.md
  45. 156 0
      src/pages/ja/core-candy-machine/guards/mint-limit.md
  46. 147 0
      src/pages/ja/core-candy-machine/guards/nft-burn.md
  47. 143 0
      src/pages/ja/core-candy-machine/guards/nft-gate.md
  48. 160 0
      src/pages/ja/core-candy-machine/guards/nft-mint-limit.md
  49. 168 0
      src/pages/ja/core-candy-machine/guards/nft-payment.md
  50. 103 0
      src/pages/ja/core-candy-machine/guards/program-gate.md
  51. 136 0
      src/pages/ja/core-candy-machine/guards/redeemed-amount.md
  52. 141 0
      src/pages/ja/core-candy-machine/guards/sol-fixed-fee.md
  53. 99 0
      src/pages/ja/core-candy-machine/guards/start-date.md
  54. 137 0
      src/pages/ja/core-candy-machine/guards/third-party-signer.md
  55. 139 0
      src/pages/ja/core-candy-machine/guards/token-burn.md
  56. 141 0
      src/pages/ja/core-candy-machine/guards/token-gate.md
  57. 176 0
      src/pages/ja/core-candy-machine/guards/token-payment.md
  58. 184 0
      src/pages/ja/core-candy-machine/guards/token2022-payment.md
  59. 119 0
      src/pages/ja/core-candy-machine/guards/vanity-mint.md
  60. 791 0
      src/pages/ja/core-candy-machine/guides/create-a-core-candy-machine-ui.md
  61. 320 0
      src/pages/ja/core-candy-machine/guides/create-a-core-candy-machine-with-hidden-settings.md
  62. 49 0
      src/pages/ja/core-candy-machine/sdk/javascript.md
  63. 45 0
      src/pages/ja/core-candy-machine/sdk/rust.md
  64. 66 0
      src/pages/ja/das-api/core-extension/methods/get-assets-by-authority.md
  65. 67 0
      src/pages/ja/das-api/core-extension/methods/get-assets-by-collection.md
  66. 67 0
      src/pages/ja/das-api/core-extension/methods/get-assets-by-owner.md
  67. 67 0
      src/pages/ja/das-api/core-extension/methods/get-collection.md
  68. BIN
      src/pages/ja/das-api/core-extension/methods/search-assets.md
  69. BIN
      src/pages/ja/das-api/core-extension/methods/search-collections.md
  70. 40 0
      src/pages/ja/das-api/core-extension/plugin-derivation.md
  71. 276 0
      src/pages/ja/das-api/guides/get-fungible-assets.md
  72. 255 0
      src/pages/ja/das-api/guides/get-nfts-by-owner.md
  73. 124 0
      src/pages/ja/das-api/guides/owner-and-collection.md
  74. BIN
      src/pages/ja/das-api/guides/search-by-criteria.md
  75. 18 0
      src/pages/ja/das-api/methods/get-asset-proofs.md
  76. 26 0
      src/pages/ja/das-api/methods/get-asset-signatures.md
  77. 24 0
      src/pages/ja/das-api/methods/get-assets-by-authority.md
  78. 19 0
      src/pages/ja/das-api/methods/get-assets.md
  79. 35 0
      src/pages/ja/das-api/methods/get-nft-editions.md
  80. 42 0
      src/pages/ja/das-api/methods/get-token-accounts.md
  81. 30 0
      src/pages/ja/guides/translated/japanese.md
  82. 24 0
      src/pages/ja/legacy-documentation/auction-house/auctioneer.md
  83. 102 0
      src/pages/ja/legacy-documentation/auction-house/buyer-escrow.md
  84. 56 0
      src/pages/ja/legacy-documentation/auction-house/faq.md
  85. 140 0
      src/pages/ja/legacy-documentation/auction-house/find.md
  86. 76 0
      src/pages/ja/legacy-documentation/auction-house/getting-started.md
  87. 163 0
      src/pages/ja/legacy-documentation/auction-house/index.md
  88. 259 0
      src/pages/ja/legacy-documentation/auction-house/manage-using-cli.md
  89. 186 0
      src/pages/ja/legacy-documentation/auction-house/manage.md
  90. 63 0
      src/pages/ja/legacy-documentation/auction-house/receipts.md
  91. 190 0
      src/pages/ja/legacy-documentation/auction-house/settings.md
  92. 244 0
      src/pages/ja/legacy-documentation/auction-house/trading-assets.md
  93. 14 0
      src/pages/ja/legacy-documentation/developer-tools/beet.md
  94. 14 0
      src/pages/ja/legacy-documentation/developer-tools/cusper.md
  95. 13 0
      src/pages/ja/legacy-documentation/developer-tools/rust-bin.md
  96. 12 0
      src/pages/ja/legacy-documentation/developer-tools/solita.md
  97. 24 0
      src/pages/ja/legacy-documentation/fixed-price-sale/index.md
  98. 281 0
      src/pages/ja/legacy-documentation/fixed-price-sale/tech-description.md
  99. 21 0
      src/pages/ja/legacy-documentation/gumdrop.md
  100. 23 0
      src/pages/ja/legacy-documentation/index.md

+ 223 - 0
SEO_EXAMPLE.md

@@ -0,0 +1,223 @@
+# SEO Implementation Example
+
+## What Gets Generated
+
+When a user visits any page on the Metaplex Developer Hub, the SEOHead component automatically generates comprehensive SEO tags.
+
+### Example Page: Core Documentation
+
+For a Core documentation page at `/core`, here's what gets generated for each language:
+
+---
+
+## English Version (`/core`)
+
+```html
+<head>
+  <!-- Primary Meta Tags -->
+  <title>Core | Metaplex Developer Hub</title>
+  <meta name="description" content="Learn about Metaplex Core NFT standard" />
+
+  <!-- Canonical URL - points to itself -->
+  <link rel="canonical" href="https://developers.metaplex.com/core" />
+
+  <!-- Language Alternates (hreflang) -->
+  <link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
+  <link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
+  <link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
+  <link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
+
+  <!-- Open Graph -->
+  <meta property="og:title" content="Core | Metaplex Developer Hub" />
+  <meta property="og:description" content="Learn about Metaplex Core NFT standard" />
+  <meta property="og:url" content="https://developers.metaplex.com/core" />
+  <meta property="og:type" content="website" />
+  <meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="og:locale" content="en_US" />
+  <meta property="og:locale:alternate" content="ja_JP" />
+  <meta property="og:locale:alternate" content="ko_KR" />
+
+  <!-- Twitter Card -->
+  <meta name="twitter:card" content="summary_large_image" />
+  <meta name="twitter:title" content="Core | Metaplex Developer Hub" />
+  <meta name="twitter:description" content="Learn about Metaplex Core NFT standard" />
+  <meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="twitter:domain" content="developers.metaplex.com" />
+</head>
+```
+
+---
+
+## Japanese Version (`/ja/core`)
+
+```html
+<head>
+  <!-- Primary Meta Tags -->
+  <title>Core | Metaplex 開発者向け</title>
+  <meta name="description" content="Metaplex Core NFT標準について学ぶ" />
+
+  <!-- Canonical URL - points to ITSELF (Japanese version) -->
+  <link rel="canonical" href="https://developers.metaplex.com/ja/core" />
+
+  <!-- Language Alternates (hreflang) - SAME for all versions -->
+  <link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
+  <link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
+  <link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
+  <link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
+
+  <!-- Open Graph -->
+  <meta property="og:title" content="Core | Metaplex 開発者向け" />
+  <meta property="og:description" content="Metaplex Core NFT標準について学ぶ" />
+  <meta property="og:url" content="https://developers.metaplex.com/ja/core" />
+  <meta property="og:type" content="website" />
+  <meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="og:locale" content="ja_JP" />
+  <meta property="og:locale:alternate" content="en_US" />
+  <meta property="og:locale:alternate" content="ko_KR" />
+
+  <!-- Twitter Card -->
+  <meta name="twitter:card" content="summary_large_image" />
+  <meta name="twitter:title" content="Core | Metaplex 開発者向け" />
+  <meta name="twitter:description" content="Metaplex Core NFT標準について学ぶ" />
+  <meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="twitter:domain" content="developers.metaplex.com" />
+</head>
+```
+
+---
+
+## Korean Version (`/ko/core`)
+
+```html
+<head>
+  <!-- Primary Meta Tags -->
+  <title>Core | Metaplex 개발자 허브</title>
+  <meta name="description" content="Metaplex Core NFT 표준에 대해 알아보기" />
+
+  <!-- Canonical URL - points to ITSELF (Korean version) -->
+  <link rel="canonical" href="https://developers.metaplex.com/ko/core" />
+
+  <!-- Language Alternates (hreflang) - SAME for all versions -->
+  <link rel="alternate" hreflang="en" href="https://developers.metaplex.com/core" />
+  <link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/core" />
+  <link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/core" />
+  <link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/core" />
+
+  <!-- Open Graph -->
+  <meta property="og:title" content="Core | Metaplex 개발자 허브" />
+  <meta property="og:description" content="Metaplex Core NFT 표준에 대해 알아보기" />
+  <meta property="og:url" content="https://developers.metaplex.com/ko/core" />
+  <meta property="og:type" content="website" />
+  <meta property="og:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="og:locale" content="ko_KR" />
+  <meta property="og:locale:alternate" content="en_US" />
+  <meta property="og:locale:alternate" content="ja_JP" />
+
+  <!-- Twitter Card -->
+  <meta name="twitter:card" content="summary_large_image" />
+  <meta name="twitter:title" content="Core | Metaplex 개발자 허브" />
+  <meta name="twitter:description" content="Metaplex Core NFT 표준에 대해 알아보기" />
+  <meta name="twitter:image" content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg" />
+  <meta property="twitter:domain" content="developers.metaplex.com" />
+</head>
+```
+
+---
+
+## Key SEO Principles
+
+### 1. Self-Referential Canonicals ✅
+Each language version points to **itself** as canonical:
+- English canonical → English URL
+- Japanese canonical → Japanese URL
+- Korean canonical → Korean URL
+
+**Why?** Tells Google these are all equally important, just in different languages.
+
+### 2. Identical hreflang Tags ✅
+**All three versions have the exact same hreflang tags** pointing to all alternates.
+
+**Why?** Creates a complete bidirectional relationship between language versions.
+
+### 3. Proper og:locale ✅
+Each version declares its own locale and lists others as alternates:
+- English: `og:locale="en_US"` + alternates for ja_JP, ko_KR
+- Japanese: `og:locale="ja_JP"` + alternates for en_US, ko_KR
+- Korean: `og:locale="ko_KR"` + alternates for en_US, ja_JP
+
+**Why?** Social media platforms serve the right version when shared.
+
+### 4. x-default for Fallback ✅
+All versions include `hreflang="x-default"` pointing to English.
+
+**Why?** If user's language isn't available, Google serves the default (English).
+
+---
+
+## How Search Engines Use This
+
+### Google Search
+1. **User in Japan searches in Japanese** → Serves `/ja/core`
+2. **User in Korea searches in Korean** → Serves `/ko/core`
+3. **User in US searches in English** → Serves `/core`
+4. **User in France searches** → Serves `/core` (x-default)
+
+### Social Media Sharing
+1. **Tweet link to `/core`** → Shows English title/description
+2. **Tweet link to `/ja/core`** → Shows Japanese title/description
+3. **Tweet link to `/ko/core`** → Shows Korean title/description
+
+### No Duplicate Content Penalty
+Google understands these are **translations**, not duplicates, because:
+- ✅ Self-referential canonicals (each points to itself)
+- ✅ Complete hreflang annotations
+- ✅ Proper og:locale declarations
+- ✅ Different content language in actual page
+
+---
+
+## Validation Tools
+
+After deployment, test with:
+
+1. **Google Rich Results Test**
+   - https://search.google.com/test/rich-results
+   - Check each language version
+
+2. **Facebook Sharing Debugger**
+   - https://developers.facebook.com/tools/debug/
+   - Verify og:locale tags work
+
+3. **Twitter Card Validator**
+   - https://cards-dev.twitter.com/validator
+   - Confirm Twitter cards appear correctly
+
+4. **Google Search Console**
+   - Submit all language versions
+   - Monitor for hreflang errors
+   - Check international targeting
+
+---
+
+## Component Usage
+
+All of this is handled automatically by the `SEOHead` component:
+
+```jsx
+// In _app.jsx
+<SEOHead
+  title={page.title}           // From markdown frontmatter
+  description={page.description}
+  metaTitle={page.metaTitle}
+  locale={page.locale}          // Auto-detected from URL
+/>
+```
+
+The component:
+1. Detects current language from URL path
+2. Generates all alternate URLs automatically
+3. Creates proper canonical URL
+4. Sets all Open Graph and Twitter tags
+5. Handles hreflang bidirectional links
+
+**Zero manual configuration needed per page!** 🎉

+ 181 - 0
SEO_IMPLEMENTATION.md

@@ -0,0 +1,181 @@
+# SEO Implementation for Multilingual Documentation
+
+**Date:** 2025-10-12
+**Status:** ✅ Complete
+
+## Overview
+
+This document outlines the SEO implementation for the Metaplex Developer Hub's multilingual documentation, following international best practices for language-specific content.
+
+## Changes Made
+
+### 1. Language Code Standardization
+
+Updated from custom codes to ISO 639-1 standard:
+
+| Old Code | New Code | Language | Reason |
+|----------|----------|----------|--------|
+| `/jp/` | `/ja/` | Japanese | ISO 639-1 standard for Japanese |
+| `/kr/` | `/ko/` | Korean | ISO 639-1 standard for Korean |
+
+**Why This Matters:**
+- hreflang tags require ISO 639-1 language codes
+- Improves international SEO
+- Aligns with web standards
+- Prevents confusion with search engines
+
+### 2. New SEO Components
+
+#### Language Configuration (`src/config/languages.js`)
+Central configuration for all language settings:
+- ISO 639-1 language codes
+- URL path mappings
+- Native language names
+- Helper functions for path generation
+
+#### SEOHead Component (`src/components/SEOHead.jsx`)
+Comprehensive SEO meta tags including:
+- **Title and Description**: Translated for each language
+- **Canonical URLs**: Self-referential (each language version points to itself)
+- **hreflang Tags**: Proper alternate language links
+- **Open Graph**: Language-aware OG tags with locale alternates
+- **Twitter Card**: Complete social media meta tags
+
+### 3. File Migrations
+
+#### Directories Renamed
+- `/src/pages/jp/` → `/src/pages/ja/` (437 files)
+- `/src/pages/kr/` → `/src/pages/ko/` (437 files)
+
+#### Locale Files Renamed
+- `/src/locales/jp.json` → `/src/locales/ja.json`
+- `/src/locales/kr.json` → `/src/locales/ko.json`
+
+### 4. Configuration Updates
+
+#### Updated Files
+1. **`src/contexts/LocaleContext.js`**
+   - Changed locale detection from `jp`/`kr` to `ja`/`ko`
+   - Updated import paths for locale JSON files
+
+2. **`src/components/LanguageSwitcher.jsx`**
+   - Updated language codes to `ja` and `ko`
+   - Updated path detection logic
+
+3. **`src/shared/localizedSections.js`**
+   - Changed translation keys from `jp`/`kr` to `ja`/`ko`
+
+4. **`src/shared/productTranslations.js`**
+   - Added Korean (`ko`) translations
+   - Changed Japanese key from `jp` to `ja`
+
+5. **`src/i18n.js`**
+   - Updated locale array: `['en', 'ja', 'ko']`
+
+6. **`src/pages/_app.jsx`**
+   - Replaced custom Head implementation with new SEOHead component
+   - Now automatically generates all SEO tags
+
+## SEO Features Implemented
+
+### ✅ Canonical URLs
+Each language version has a self-referential canonical URL:
+- English: `https://developers.metaplex.com/page`
+- Japanese: `https://developers.metaplex.com/ja/page`
+- Korean: `https://developers.metaplex.com/ko/page`
+
+### ✅ hreflang Tags
+Every page includes alternate language links:
+```html
+<link rel="alternate" hreflang="en" href="https://developers.metaplex.com/page" />
+<link rel="alternate" hreflang="ja" href="https://developers.metaplex.com/ja/page" />
+<link rel="alternate" hreflang="ko" href="https://developers.metaplex.com/ko/page" />
+<link rel="alternate" hreflang="x-default" href="https://developers.metaplex.com/page" />
+```
+
+### ✅ Open Graph Localization
+- `og:locale` set to proper format (e.g., `ja_JP`, `ko_KR`)
+- `og:locale:alternate` tags for other languages
+- Prevents duplicate content issues
+
+### ✅ Translated Meta Tags
+- Page titles translated in frontmatter
+- Meta descriptions translated
+- All social media cards properly localized
+
+## URL Structure
+
+### Final URL Pattern
+- **English (default):** `developers.metaplex.com/[page]`
+- **Japanese:** `developers.metaplex.com/ja/[page]`
+- **Korean:** `developers.metaplex.com/ko/[page]`
+
+### Example Pages
+| English | Japanese | Korean |
+|---------|----------|--------|
+| `/core` | `/ja/core` | `/ko/core` |
+| `/candy-machine` | `/ja/candy-machine` | `/ko/candy-machine` |
+| `/umi` | `/ja/umi` | `/ko/umi` |
+
+## Adding New Languages
+
+To add a new language in the future:
+
+1. **Update Language Config** (`src/config/languages.js`):
+   ```js
+   es: {
+     code: 'es',           // ISO 639-1 code
+     urlPath: '/es',       // URL prefix
+     name: 'Spanish',
+     nativeName: 'Español',
+     isDefault: false,
+   }
+   ```
+
+2. **Create Locale File**: `/src/locales/es.json`
+
+3. **Update i18n Config** (`src/i18n.js`):
+   ```js
+   const locales = ['en', 'ja', 'ko', 'es'];
+   ```
+
+4. **Add Translations** to:
+   - `src/shared/localizedSections.js`
+   - `src/shared/productTranslations.js`
+
+5. **Create Pages Directory**: `/src/pages/es/`
+
+The SEO system will automatically:
+- Generate hreflang tags
+- Create canonical URLs
+- Add Open Graph locale tags
+- Handle language switching
+
+## Testing SEO
+
+### Verify Implementation
+1. **Check hreflang tags**: View page source and look for `<link rel="alternate" hreflang="..."`
+2. **Test canonical URLs**: Ensure each language version has correct self-referential canonical
+3. **Validate Open Graph**: Use [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/)
+4. **Check Twitter Cards**: Use [Twitter Card Validator](https://cards-dev.twitter.com/validator)
+
+### Google Search Console
+After deployment:
+1. Submit all language versions to Search Console
+2. Monitor for any hreflang errors
+3. Verify language targeting is working correctly
+
+## Benefits
+
+✅ **No Duplicate Content Penalties**: Each language version properly identified
+✅ **Improved International SEO**: Search engines serve correct language to users
+✅ **Better User Experience**: Users see content in their preferred language
+✅ **Future-Proof**: Easy to add more languages
+✅ **Standards Compliant**: Follows W3C and Google best practices
+
+## References
+
+- [Google Search Central - Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)
+- [ISO 639-1 Language Codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)
+- [hreflang Best Practices](https://developers.google.com/search/docs/specialty/international/localized-versions#html)
+- [Open Graph Protocol](https://ogp.me/)

+ 359 - 0
TRANSLATION_STATUS.md

@@ -0,0 +1,359 @@
+# Translation Status Report
+
+**Last Updated:** 2025-10-12
+
+## Overview
+
+This document tracks the translation status of the Metaplex Developer Hub documentation into Japanese (ja) and Korean (ko).
+
+**Important:** Language codes have been updated to ISO 639-1 standard:
+- Japanese: `jp` → `ja` (ISO 639-1)
+- Korean: `kr` → `ko` (ISO 639-1)
+
+This ensures proper SEO with hreflang tags and follows web standards.
+
+### Summary Statistics
+
+| Language | Files Translated | Total Files | Coverage | Missing |
+|----------|-----------------|-------------|----------|---------|
+| English  | 437 (baseline)  | 437         | 100%     | 0       |
+| Japanese (ja) | 437             | 437         | 🎉 **100%** | 0       |
+| Korean (ko)   | 437             | 437         | 🎉 **100%** | 0       |
+
+## Japanese Translation Status (437/437 - 100%) ✅
+
+### 🎉 COMPLETE - All Files Translated!
+
+#### High Priority - Active Products
+
+##### Core Candy Machine Guards (2 files) - 🎉 MOSTLY COMPLETE
+Remaining guard documentation pages:
+- `core-candy-machine/guards/freeze-sol-payment.md`
+- `core-candy-machine/guards/freeze-token-payment.md`
+
+**Recently Completed (27 files):**
+- ✅ address-gate.md
+- ✅ allocation.md
+- ✅ allow-list.md
+- ✅ asset-burn-multi.md
+- ✅ asset-burn.md
+- ✅ asset-gate.md
+- ✅ asset-mint-limit.md
+- ✅ asset-payment-multi.md
+- ✅ asset-payment.md
+- ✅ edition.md
+- ✅ end-date.md
+- ✅ gatekeeper.md
+- ✅ mint-limit.md
+- ✅ nft-burn.md
+- ✅ nft-gate.md
+- ✅ nft-mint-limit.md
+- ✅ nft-payment.md
+- ✅ program-gate.md
+- ✅ redeemed-amount.md
+- ✅ sol-fixed-fee.md
+- ✅ start-date.md
+- ✅ third-party-signer.md
+- ✅ token-burn.md
+- ✅ token-gate.md
+- ✅ token-payment.md
+- ✅ token2022-payment.md
+- ✅ vanity-mint.md
+
+##### DAS API - ✅ COMPLETE
+**Recently Completed (11 files):**
+- ✅ All core-extension methods (6 files)
+- ✅ das-api/core-extension/plugin-derivation.md
+- ✅ das-api/guides/get-fungible-assets.md
+- ✅ das-api/guides/get-nfts-by-owner.md
+- ✅ das-api/guides/owner-and-collection.md
+- ✅ All other guide files (pagination, search-by-criteria, etc.)
+
+##### Core Candy Machine Documentation - ✅ COMPLETE
+**Recently Completed (4 files):**
+- ✅ core-candy-machine/sdk/javascript.md
+- ✅ core-candy-machine/sdk/rust.md
+- ✅ core-candy-machine/guides/create-a-core-candy-machine-ui.md
+- ✅ core-candy-machine/guides/create-a-core-candy-machine-with-hidden-settings.md
+
+##### MPL Hybrid - ✅ COMPLETE
+**Recently Completed (2 files):**
+- ✅ mpl-hybrid/sdk/index.md
+- ✅ mpl-hybrid/sdk/javascript.md
+(Note: rust.md doesn't exist in source)
+
+#### Medium Priority
+
+##### Guides - ✅ COMPLETE
+**Recently Completed (4 files):**
+- ✅ guides/candy-machine/index.md
+- ✅ guides/candy-machine/airdrop-mint-to-another-wallet.md
+- ✅ guides/candy-machine/mint-to-another-wallet.md
+- ✅ guides/candy-machine/create-an-nft-collection-on-solana-with-candy-machine.md
+(Note: how-to-use-pinata-with-umi.md doesn't exist in source)
+
+#### Low Priority - Legacy Content
+
+##### Legacy Documentation (22 files)
+**Auction House** (11 files):
+- `legacy-documentation/auction-house/auctioneer/index.md`
+- `legacy-documentation/auction-house/auctioneer/endpoints.md`
+- `legacy-documentation/auction-house/auctioneer/installation.md`
+- `legacy-documentation/auction-house/index.md`
+- `legacy-documentation/auction-house/create.md`
+- `legacy-documentation/auction-house/delegate.md`
+- `legacy-documentation/auction-house/execute-sale.md`
+- `legacy-documentation/auction-house/getting-started.md`
+- `legacy-documentation/auction-house/list.md`
+- `legacy-documentation/auction-house/make-offer.md`
+- `legacy-documentation/auction-house/settings.md`
+
+**Developer Tools** (4 files):
+- `legacy-documentation/developer-tools/cli/index.md`
+- `legacy-documentation/developer-tools/cli/auctioneer.md`
+- `legacy-documentation/developer-tools/cli/candy-machine-v2.md`
+- `legacy-documentation/developer-tools/cli/token-metadata.md`
+
+**Fixed Price Sale** (2 files):
+- `legacy-documentation/fixed-price-sale/index.md`
+- `legacy-documentation/fixed-price-sale/creating-a-market.md`
+
+**Mobile SDKs** (2 files):
+- `legacy-documentation/mobile-sdks/android.md`
+- `legacy-documentation/mobile-sdks/ios.md`
+
+**Other** (3 files):
+- `legacy-documentation/index.md`
+- `legacy-documentation/gumdrop.md`
+- `legacy-documentation/nft-standard.md`
+
+---
+
+## Korean Translation Status (437/437 - 100%) ✅
+
+### 🎉 COMPLETE - All Files Translated!
+
+#### High Priority - Active Products
+
+##### DAS API Core Extension - ✅ COMPLETE
+**Recently Completed (10 files):**
+- ✅ das-api/core-extension/index.md
+- ✅ das-api/core-extension/convert-das-asset-to-core.md
+- ✅ das-api/core-extension/plugin-derivation.md
+- ✅ das-api/core-extension/methods/get-asset.md
+- ✅ das-api/core-extension/methods/get-assets-by-authority.md
+- ✅ das-api/core-extension/methods/get-assets-by-collection.md
+- ✅ das-api/core-extension/methods/get-assets-by-owner.md
+- ✅ das-api/core-extension/methods/get-collection.md
+- ✅ das-api/core-extension/methods/search-assets.md
+- ✅ das-api/core-extension/methods/search-collections.md
+
+##### Bubblegum v1 - ✅ COMPLETE
+**Recently Completed (17 files):**
+- ✅ bubblegum/index.md
+- ✅ bubblegum/create-trees.md
+- ✅ bubblegum/mint-cnfts.md
+- ✅ bubblegum/transfer-cnfts.md
+- ✅ bubblegum/update-cnfts.md
+- ✅ bubblegum/burn-cnfts.md
+- ✅ bubblegum/decompress-cnfts.md
+- ✅ bubblegum/delegate-cnfts.md
+- ✅ bubblegum/delegate-trees.md
+- ✅ bubblegum/verify-collections.md
+- ✅ bubblegum/verify-creators.md
+- ✅ bubblegum/guides/index.md
+- ✅ bubblegum/guides/javascript/how-to-create-1000000-nfts-on-solana.md
+- ✅ bubblegum/guides/javascript/how-to-interact-with-cnfts-on-other-svms.md
+- ✅ bubblegum/sdk/index.md
+- ✅ bubblegum/sdk/javascript.md
+- ✅ bubblegum/sdk/rust.md
+
+##### Candy Machine Sugar - ✅ COMPLETE
+**Recently Completed (23 files):**
+- ✅ All 19 command files (airdrop, bundlr, collection, config, deploy, freeze, guard, hash, launch, mint, reveal, show, sign, update, upload, validate, verify, withdraw, thaw/unfreeze)
+- ✅ Core files: bring-your-own-uploader.md, cache.md, getting-started.md, installation.md
+
+##### DAS API - ✅ COMPLETE
+**Recently Completed (24 files):**
+- ✅ All 13 methods files (get-asset, get-assets, search-assets, etc.)
+- ✅ All 11 guide files:
+  - collection-statistics.md, find-compressed-nfts.md, find-token-holders.md
+  - get-collection-nfts.md, get-fungible-assets.md, get-nfts-by-owner.md
+  - get-wallet-tokens.md, owner-and-collection.md, search-by-criteria.md
+  - index.md, pagination.md
+
+##### Candy Machine Guards (2 files) - 🎉 MOSTLY COMPLETE
+Remaining files:
+- `candy-machine/guards/freeze-sol-payment.md`
+- `candy-machine/guards/freeze-token-payment.md`
+
+**Recently Completed (15 files):**
+- ✅ address-gate.md, allocation.md, end-date.md, gatekeeper.md, mint-limit.md
+- ✅ nft-burn.md, nft-gate.md, nft-payment.md, program-gate.md, redeemed-amount.md
+- ✅ third-party-signer.md, token-burn.md, token-gate.md, token-payment.md, token2022-payment.md
+
+##### MPL Hybrid - ✅ COMPLETE
+**Recently Completed (2 files):**
+- ✅ mpl-hybrid/sdk/index.md
+- ✅ mpl-hybrid/sdk/javascript.md
+(Note: rust.md doesn't exist in source)
+
+#### Medium Priority
+
+##### Candy Machine Guides - ✅ COMPLETE
+**Recently Completed (4 files):**
+- ✅ guides/candy-machine/index.md
+- ✅ guides/candy-machine/airdrop-mint-to-another-wallet.md
+- ✅ guides/candy-machine/mint-to-another-wallet.md
+- ✅ guides/candy-machine/create-an-nft-collection-on-solana-with-candy-machine.md
+
+#### Low Priority - Legacy Content
+
+##### Legacy Documentation (22 files)
+Same structure as Japanese - entire section missing:
+- Auction House (11 files)
+- Developer Tools (4 files)
+- Fixed Price Sale (2 files)
+- Mobile SDKs (2 files)
+- Other (3 files)
+
+---
+
+## Products with Complete Coverage ✓
+
+The following products have 100% translation coverage in both Japanese and Korean:
+
+- **Core** - Complete NFT standard documentation
+- **Bubblegum v2** - Compressed NFTs (latest version)
+- **UMI** - JavaScript framework
+- **Token Metadata** - Legacy NFT standard
+- **Inscription** - On-chain data storage
+- **Fusion** - NFT combination system
+- **Token Auth Rules** - Authorization framework
+- **Shank** - IDL generation
+- **Hydra** - Fanout wallet
+- **Amman** - Local validator setup
+- **Aura** - Indexing network
+- **CLI** - Command-line interface
+
+---
+
+## Translation Priority Recommendations
+
+### Critical (Start Here)
+
+1. **Core Candy Machine Guards** (JP: 29 files, KR: 17 files)
+   - Actively used features for NFT drops
+   - Essential for developers launching collections
+
+2. **DAS API** (JP: 10 files, KR: 34 files)
+   - Critical API documentation
+   - Required for reading digital asset data
+
+3. **Bubblegum v1** (KR: 17 files only)
+   - Entire product section missing in Korean
+   - Still used by some projects
+
+### High Priority
+
+4. **Candy Machine Sugar CLI** (KR: 23 files only)
+   - Important CLI tool for NFT launches
+   - Missing command documentation
+
+5. **MPL Hybrid SDK** (JP: 3 files, KR: 3 files)
+   - SDK documentation for token-NFT swaps
+
+6. **Core Candy Machine SDK & Guides** (JP: 4 files)
+   - Implementation guides and SDK docs
+
+### Medium Priority
+
+7. **Candy Machine Guides** (KR: 3 files)
+8. **General Guides** (JP: 1 file, KR: 1 file)
+
+### Low Priority
+
+9. **Legacy Documentation** (JP: 22 files, KR: 22 files)
+   - Deprecated products
+   - Lower usage/relevance
+
+---
+
+## Progress Tracking
+
+### Recent Completions
+
+**2025-10-12 (Session 1):**
+- ✅ Completed all 11 root-level Korean pages
+  - community-guides.md, contact.md, developer-tools.md, official-links.md
+  - programs-and-tools.md, protocol-fees.md, rpc-providers.md
+  - security.md, stability-index.md, storage-providers.md, understanding-programs.md
+
+**2025-10-12 (Session 2):**
+- ✅ Completed Core Candy Machine Guards (Japanese) - 27 of 29 files
+  - All guards except freeze-sol-payment and freeze-token-payment
+- ✅ Completed DAS API Core Extension (Korean) - 10 files
+  - Full core-extension section including all methods
+- ✅ Completed Bubblegum v1 (Korean) - 17 files
+  - Entire product section: core docs, guides, and SDK
+
+**2025-10-12 (Session 3):**
+- ✅ Completed DAS API (Japanese) - 8 files
+  - Core extension methods and search guide
+- ✅ Completed Candy Machine Sugar CLI (Korean) - 23 files
+  - All commands and core documentation
+- ✅ Completed Candy Machine Guards (Korean) - 15 of 17 files
+  - All guards except freeze-sol-payment and freeze-token-payment
+
+**2025-10-12 (Session 4):**
+- ✅ Completed Core Candy Machine SDK & Guides (Japanese) - 4 files
+- ✅ Completed MPL Hybrid SDK (Japanese) - 2 files
+- ✅ Completed MPL Hybrid SDK (Korean) - 2 files
+- ✅ Completed Candy Machine Guides (Japanese) - 4 files
+- ✅ Completed Candy Machine Guides (Korean) - 4 files
+- ✅ Completed DAS API Methods & Guides (Korean) - 15 files (all methods + 2 guides)
+
+**2025-10-12 (Session 5):**
+- ✅ Completed DAS API Guides (Korean) - 9 files
+- ✅ Completed DAS API Guides (Japanese) - 3 files
+
+**2025-10-12 (Session 6 - FINAL):**
+- ✅ Completed Freeze Payment Guards (Japanese) - 2 files
+- ✅ Completed Freeze Payment Guards (Korean) - 2 files
+- ✅ Completed Legacy Documentation (Japanese) - 22 files
+- ✅ Completed Legacy Documentation (Korean) - 22 files
+- ✅ Completed remaining DAS API methods (Japanese) - 7 files
+- ✅ Completed remaining guides (Korean) - 1 file
+
+**🎉 FINAL TOTAL PROGRESS:**
+- Japanese: +73 files (364 → 437) - Coverage increased from 83.3% to **100%** ✅
+- Korean: +118 files (319 → 437) - Coverage increased from 73.0% to **100%** ✅
+- **Combined: +191 files translated to 100% completion**
+
+## 🎉 Translation Complete!
+
+**Status: 100% coverage achieved for both Japanese (ja) and Korean (ko)**
+
+All 437 documentation files have been successfully translated into both languages. The Metaplex Developer Hub now offers complete multilingual support.
+
+**URLs:**
+- English: `developers.metaplex.com/`
+- Japanese: `developers.metaplex.com/ja/`
+- Korean: `developers.metaplex.com/ko/`
+
+---
+
+## Notes
+
+- All file paths are relative to `src/pages/`
+- Translation coverage percentages are based on total markdown files
+- Legacy documentation has lower priority due to deprecated status
+- Focus on high-traffic, actively maintained products first
+
+## How to Update This Document
+
+When translations are completed:
+1. Move files from "Missing" lists to a "Recently Completed" section
+2. Update the summary statistics
+3. Update the "Last Updated" date
+4. Commit changes to track progress over time

+ 7 - 7
src/components/LanguageSwitcher.jsx

@@ -5,8 +5,8 @@ import { useLocale } from '@/contexts/LocaleContext'
 
 const languages = [
   { code: 'en', name: 'English', flag: '🇺🇸' },
-  { code: 'jp', name: '日本語', flag: '🇯🇵' },
-  { code: 'kr', name: '한국어', flag: '🇰🇷' },
+  { code: 'ja', name: '日本語', flag: '🇯🇵' },
+  { code: 'ko', name: '한국어', flag: '🇰🇷' },
 ]
 
 export function LanguageSwitcher() {
@@ -30,16 +30,16 @@ export function LanguageSwitcher() {
   const getLocalizedPath = (targetLocale) => {
     if (targetLocale === 'en') {
       // For English, remove any locale prefix and return root path
-      if (pathname.startsWith('/jp')) {
-        return pathname.replace(/^\/jp/, '') || '/'
+      if (pathname.startsWith('/ja')) {
+        return pathname.replace(/^\/ja/, '') || '/'
       }
-      if (pathname.startsWith('/kr')) {
-        return pathname.replace(/^\/kr/, '') || '/'
+      if (pathname.startsWith('/ko')) {
+        return pathname.replace(/^\/ko/, '') || '/'
       }
       return pathname
     } else {
       // For other locales, add the locale prefix
-      if (pathname.startsWith('/jp') || pathname.startsWith('/kr')) {
+      if (pathname.startsWith('/ja') || pathname.startsWith('/ko')) {
         // Replace existing locale prefix
         return pathname.replace(/^\/[a-z]{2}/, `/${targetLocale}`)
       } else {

+ 121 - 0
src/components/SEOHead.jsx

@@ -0,0 +1,121 @@
+import Head from 'next/head'
+import { useRouter } from 'next/router'
+import { LANGUAGES, generateAlternateUrls } from '@/config/languages'
+
+/**
+ * SEOHead Component
+ *
+ * Handles all SEO-related meta tags including:
+ * - Title and description
+ * - Open Graph tags
+ * - Twitter Card tags
+ * - Canonical URLs
+ * - hreflang tags for internationalization
+ *
+ * Usage:
+ * <SEOHead
+ *   title="Page Title"
+ *   description="Page description"
+ *   metaTitle="Custom Meta Title (optional)"
+ *   locale="en"
+ * />
+ */
+
+const SITE_URL = 'https://developers.metaplex.com'
+const DEFAULT_OG_IMAGE = `${SITE_URL}/assets/social/dev-hub-preview.jpg`
+
+export function SEOHead({ title, description, metaTitle, locale = 'en' }) {
+  const router = useRouter()
+  const { pathname } = router
+
+  // Use metaTitle if provided, otherwise use title
+  const finalMetaTitle = metaTitle || title
+
+  // Get current language config
+  const currentLang = LANGUAGES[locale] || LANGUAGES.en
+
+  // Normalize pathname (remove any existing language prefix to avoid duplication)
+  let normalizedPath = pathname
+  for (const lang of Object.values(LANGUAGES)) {
+    if (lang.urlPath && pathname.startsWith(lang.urlPath)) {
+      normalizedPath = pathname.slice(lang.urlPath.length) || '/'
+      break
+    }
+  }
+
+  // Generate canonical URL (always points to the current language version)
+  const canonicalUrl = `${SITE_URL}${currentLang.urlPath}${normalizedPath === '/' ? '' : normalizedPath}`
+
+  // Generate alternate URLs for hreflang
+  const alternateUrls = generateAlternateUrls(pathname)
+
+  return (
+    <Head>
+      {/* Primary Meta Tags */}
+      <title>{finalMetaTitle}</title>
+      {description && <meta name="description" content={description} />}
+
+      {/* Canonical URL - points to current language version */}
+      <link rel="canonical" href={canonicalUrl} />
+
+      {/* hreflang tags for language alternates */}
+      {alternateUrls.map(({ hreflang, url }) => (
+        <link
+          key={hreflang}
+          rel="alternate"
+          hrefLang={hreflang}
+          href={`${SITE_URL}${url}`}
+        />
+      ))}
+
+      {/* x-default hreflang (points to English version) */}
+      <link
+        rel="alternate"
+        hrefLang="x-default"
+        href={`${SITE_URL}${alternateUrls.find(alt => alt.hreflang === 'en')?.url || '/'}`}
+      />
+
+      {/* Open Graph */}
+      <meta property="og:title" content={finalMetaTitle} />
+      {description && <meta property="og:description" content={description} />}
+      <meta property="og:url" content={canonicalUrl} />
+      <meta property="og:type" content="website" />
+      <meta property="og:image" content={DEFAULT_OG_IMAGE} />
+      <meta property="og:locale" content={getOGLocale(locale)} />
+
+      {/* Add og:locale:alternate for other languages */}
+      {Object.keys(LANGUAGES)
+        .filter(lang => lang !== locale)
+        .map(lang => (
+          <meta
+            key={`og-locale-${lang}`}
+            property="og:locale:alternate"
+            content={getOGLocale(lang)}
+          />
+        ))}
+
+      {/* Twitter Card */}
+      <meta name="twitter:card" content="summary_large_image" />
+      <meta name="twitter:title" content={finalMetaTitle} />
+      {description && <meta name="twitter:description" content={description} />}
+      <meta name="twitter:image" content={DEFAULT_OG_IMAGE} />
+      <meta property="twitter:domain" content="developers.metaplex.com" />
+    </Head>
+  )
+}
+
+/**
+ * Convert locale code to Open Graph locale format
+ * en -> en_US
+ * ja -> ja_JP
+ * ko -> ko_KR
+ */
+function getOGLocale(localeCode) {
+  const ogLocaleMap = {
+    en: 'en_US',
+    ja: 'ja_JP',
+    ko: 'ko_KR',
+  }
+
+  return ogLocaleMap[localeCode] || 'en_US'
+}

+ 2 - 2
src/components/products/amman/index.js

@@ -47,7 +47,7 @@ export const amman = {
         'Pre-made Configs': 'Pre-made Configs'
       }
     },
-    jp: {
+    ja: {
       headline: 'ローカルバリデーターツールキット',
       description: 'Solanaプログラムとアプリケーションをテストするためのローカルバリデーターツールキット。',
       sections: {
@@ -61,7 +61,7 @@ export const amman = {
         'Pre-made Configs': '事前作成済み設定'
       }
     },
-    kr: {
+    ko: {
       headline: '로컬 밸리데이터 툴킷',
       description: 'Solana 프로그램과 애플리케이션을 테스트하기 위한 로컬 밸리데이터 툴킷입니다.',
       sections: {

+ 2 - 2
src/components/products/aura/index.js

@@ -59,7 +59,7 @@ export const aura = {
         'Reading Solana and SVM Data': 'Reading Solana and SVM Data'
       }
     },
-    jp: {
+    ja: {
       headline: 'インデックス作成・データ可用性ネットワーク',
       description: 'SolanaとSolana Virtual Machine(SVM)を拡張するデータネットワーク',
       sections: {
@@ -72,7 +72,7 @@ export const aura = {
         'Reading Solana and SVM Data': 'SolanaとSVMデータの読み取り'
       }
     },
-    kr: {
+    ko: {
       headline: '인덱싱 및 데이터 가용성 네트워크',
       description: 'Solana와 Solana Virtual Machine(SVM)을 확장하는 데이터 네트워크',
       sections: {

+ 2 - 2
src/components/products/bubblegum-v2/index.js

@@ -123,7 +123,7 @@ export const bubblegumv2 = {
         'Merkle Tree Canopy': 'Merkle Tree Canopy'
       }
     },
-    jp: {
+    ja: {
       headline: '改良された圧縮NFT',
       description: '新たな桁のスケールを実現するNFT。',
       sections: {
@@ -155,7 +155,7 @@ export const bubblegumv2 = {
         'Merkle Tree Canopy': 'マークルツリーキャノピー'
       }
     },
-    kr: {
+    ko: {
       headline: '개선된 압축 NFT',
       description: '새로운 차원의 확장성을 제공하는 NFT입니다.',
       sections: {

+ 2 - 2
src/components/products/bubblegum/index.js

@@ -149,7 +149,7 @@ export const bubblegum = {
         'How to Interact with cNFTs on Other SVMs': 'How to Interact with cNFTs on Other SVMs'
       }
     },
-    jp: {
+    ja: {
       headline: '圧縮NFT',
       description: 'スケールするNFT。',
       sections: {
@@ -185,7 +185,7 @@ export const bubblegum = {
         'How to Interact with cNFTs on Other SVMs': '他のSVMでcNFTと相互作用する方法'
       }
     },
-    kr: {
+    ko: {
       headline: '압축 NFT',
       description: '확장 가능한 NFT입니다.',
       sections: {

+ 2 - 2
src/components/products/candyMachine/index.js

@@ -229,7 +229,7 @@ export const candyMachine = {
         'Programmable NFTs': 'Programmable NFTs'
       }
     },
-    jp: {
+    ja: {
       headline: 'TM NFTローンチパッド',
       description: 'Solana上で次のNFTコレクションを立ち上げましょう。',
       sections: {
@@ -252,7 +252,7 @@ export const candyMachine = {
         'Programmable NFTs': 'プログラマブルNFT'
       }
     },
-    kr: {
+    ko: {
       headline: 'TM NFT 런치패드',
       description: '솔라나에서 다음 NFT 컬렉션을 출시하세요.',
       sections: {

+ 2 - 2
src/components/products/cli/index.js

@@ -119,7 +119,7 @@ export const cli = {
         'Explorer': 'Explorer'
       }
     },
-    jp: {
+    ja: {
       headline: 'MPLX CLI',
       description: 'MPLXエコシステム用のCLI',
       sections: {
@@ -136,7 +136,7 @@ export const cli = {
         'Explorer': 'エクスプローラー'
       }
     },
-    kr: {
+    ko: {
       headline: 'MPLX CLI',
       description: 'MPLX 에코시스템을 위한 CLI',
       sections: {

+ 44 - 1
src/components/products/core/index.js

@@ -361,7 +361,7 @@ export const core = {
         'Appdata Plugin Example': 'Appdata Plugin Example',
       }
     },
-    jp: {
+    ja: {
       headline: '次世代NFT標準',
       description: '次世代Solana NFT標準。',
       sections: {
@@ -403,6 +403,49 @@ export const core = {
         'Oracle Plugin Example': 'Oracleプラグインの例',
         'Appdata Plugin Example': 'Appdataプラグインの例',
       }
+    },
+    ko: {
+      headline: '차세대 NFT 표준',
+      description: '차세대 Solana NFT 표준.',
+      sections: {
+        'Introduction': '소개',
+        'SDK': 'SDK',
+        'Features': '기능',
+        'Plugins': '플러그인',
+        'External Plugins': '외부 플러그인',
+        'General': '일반',
+        'JavaScript': 'JavaScript',
+        'Program Concepts': '프로그램 개념',
+        'Anchor': 'Anchor',
+      },
+      links: {
+        'Overview': '개요',
+        'What is an Asset?': '에셋이란?',
+        'JSON Schema': 'JSON 스키마',
+        'Token Metadata Differences': 'Token Metadata 차이점',
+        'Ecosystem Support': '생태계 지원',
+        'Anchor': 'Anchor',
+        'FAQ': '자주 묻는 질문',
+        'Javascript SDK': 'JavaScript SDK',
+        'Rust SDK': 'Rust SDK',
+        'Creating Assets': '에셋 생성',
+        'Fetching Assets': '에셋 가져오기',
+        'Updating Assets': '에셋 업데이트',
+        'Transferring Assets': '에셋 전송',
+        'Burning Assets': '에셋 소각',
+        'Collection Management': '컬렉션 관리',
+        'Execute Asset Signing': '에셋 서명 실행',
+        'Helpers': '헬퍼',
+        'Deserializing Assets': '에셋 역직렬화',
+        'Adding Plugins': '플러그인 추가',
+        'Removing Plugins': '플러그인 제거',
+        'Delegating and Revoking Plugins': '플러그인 위임 및 취소',
+        'Immutability': '불변성',
+        'Soulbound Assets': '소울바운드 에셋',
+        'Print Editions': '프린트 에디션',
+        'Oracle Plugin Example': 'Oracle 플러그인 예제',
+        'Appdata Plugin Example': 'Appdata 플러그인 예제',
+      }
     }
   }
 }

+ 2 - 2
src/components/products/coreCandyMachine/index.js

@@ -354,7 +354,7 @@ export const coreCandyMachine = {
         'Create a Core Candy Machine with Hidden Settings': 'Create a Core Candy Machine with Hidden Settings'
       }
     },
-    jp: {
+    ja: {
       headline: 'Core Assetローンチパッド',
       description: 'Solana上で次のMPL Core Assetコレクションを立ち上げましょう。',
       sections: {
@@ -385,7 +385,7 @@ export const coreCandyMachine = {
         'Create a Core Candy Machine with Hidden Settings': '隠し設定でCore Candy Machineを作成'
       }
     },
-    kr: {
+    ko: {
       headline: 'Core Asset 런치패드',
       description: '솔라나에서 다음 MPL Core Asset 컬렉션을 출시하세요.',
       sections: {

+ 2 - 2
src/components/products/das-api/index.js

@@ -131,7 +131,7 @@ export const das = {
         'Type Conversion': 'Type Conversion'
       }
     },
-    jp: {
+    ja: {
       headline: 'デジタルアセットデータの取得',
       description: 'オンチェーンデジタルアセットデータにアクセスするDAS APIクライアント',
       sections: {
@@ -181,7 +181,7 @@ export const das = {
         'Type Conversion': '型変換'
       }
     },
-    kr: {
+    ko: {
       headline: '디지털 에셋 데이터 가져오기',
       description: '온체인 디지털 에셋 데이터에 접근하는 DAS API 클라이언트',
       sections: {

+ 2 - 2
src/components/products/fusion/index.js

@@ -50,7 +50,7 @@ export const fusion = {
         'Transfer Effects': 'Transfer Effects'
       }
     },
-    jp: {
+    ja: {
       headline: 'NFT内のNFT',
       description: '合成可能なNFTを作成。',
       sections: {
@@ -64,7 +64,7 @@ export const fusion = {
         'Transfer Effects': '転送効果'
       }
     },
-    kr: {
+    ko: {
       headline: 'NFT 안의 NFT',
       description: '구성 가능한 NFT를 만드세요.',
       sections: {

+ 2 - 2
src/components/products/global/index.js

@@ -80,7 +80,7 @@ export const global = {
         'Contact Us': 'Contact Us',
       }
     },
-    jp: {
+    ja: {
       headline: 'デベロッパーハブ',
       description: 'Metaplexの全開発者リソースを一箇所にまとめたハブ。',
       sections: {
@@ -105,7 +105,7 @@ export const global = {
         'Contact Us': 'お問い合わせ',
       }
     },
-    kr: {
+    ko: {
       headline: '개발자 허브',
       description: '모든 Metaplex 개발자 리소스를 한 곳에 모은 허브입니다.',
       sections: {

+ 17 - 2
src/components/products/guides/index.js

@@ -256,10 +256,15 @@ export const guides = {
         'CPI into a Metaplex Program': 'CPI into a Metaplex Program',
         'NextJs Template': 'NextJs Template',
         'MPL-404 Hybrid UI Template': 'MPL-404 Hybrid UI Template',
+        'Bubblegum': 'Bubblegum',
+        'Core': 'Core',
+        'Candy Machine': 'Candy Machine',
+        'Core Candy Machine': 'Core Candy Machine',
+        'MPL-Hybrid / MPL-404': 'MPL-Hybrid / MPL-404',
         'Japanese 日本語': 'Japanese 日本語'
       }
     },
-    jp: {
+    ja: {
       headline: 'Solanaブロックチェーンのガイド',
       description: 'Solanaブロックチェーンのガイド。',
       sections: {
@@ -295,10 +300,15 @@ export const guides = {
         'CPI into a Metaplex Program': 'MetaplexプログラムへのCPI',
         'NextJs Template': 'NextJSテンプレート',
         'MPL-404 Hybrid UI Template': 'MPL-404ハイブリッドUIテンプレート',
+        'Bubblegum': 'Bubblegum',
+        'Core': 'Core',
+        'Candy Machine': 'Candy Machine',
+        'Core Candy Machine': 'Core Candy Machine',
+        'MPL-Hybrid / MPL-404': 'MPL-Hybrid / MPL-404',
         'Japanese 日本語': '日本語'
       }
     },
-    kr: {
+    ko: {
       headline: 'Solana 블록체인 가이드',
       description: 'Solana 블록체인을 위한 가이드.',
       sections: {
@@ -334,6 +344,11 @@ export const guides = {
         'CPI into a Metaplex Program': 'Metaplex 프로그램으로 CPI',
         'NextJs Template': 'NextJS 템플릿',
         'MPL-404 Hybrid UI Template': 'MPL-404 하이브리드 UI 템플릿',
+        'Bubblegum': 'Bubblegum',
+        'Core': 'Core',
+        'Candy Machine': 'Candy Machine',
+        'Core Candy Machine': 'Core Candy Machine',
+        'MPL-Hybrid / MPL-404': 'MPL-Hybrid / MPL-404',
         'Japanese 日本語': '일본어 日本語'
       }
     }

+ 2 - 2
src/components/products/hydra/index.js

@@ -46,7 +46,7 @@ export const hydra = {
         'Quick Start': 'Quick Start'
       }
     },
-    jp: {
+    ja: {
       headline: 'ファンアウトウォレット',
       description: '複数の株主間で分割された共有ウォレットを作成。',
       sections: {
@@ -57,7 +57,7 @@ export const hydra = {
         'Quick Start': 'クイックスタート'
       }
     },
-    kr: {
+    ko: {
       headline: '팬아웃 지갑',
       description: '여러 주주 간에 분할된 공유 지갑을 만드세요.',
       sections: {

+ 2 - 2
src/components/products/inscription/index.js

@@ -88,7 +88,7 @@ export const inscription = {
         'Inscription Sharding': 'Inscription Sharding'
       }
     },
-    jp: {
+    ja: {
       headline: 'Solanaに刻印されたNFT',
       description: 'Solanaステートにデータを刻印。',
       sections: {
@@ -109,7 +109,7 @@ export const inscription = {
         'Inscription Sharding': 'Inscriptionシャーディング'
       }
     },
-    kr: {
+    ko: {
       headline: 'Solana에 새겨진 NFT',
       description: 'Solana 상태에 데이터를 새기세요.',
       sections: {

+ 2 - 2
src/components/products/legacyDocumentation/index.js

@@ -113,11 +113,11 @@ export const legacyDocumentation = {
       headline: 'Products from our old docs',
       description: 'A collection of documentation of older Programs and Tools which might not be used anymore or deprecated. Migrated from our old docs for documentation for completeness.'
     },
-    jp: {
+    ja: {
       headline: '旧ドキュメントの製品',
       description: '現在使用されていないか非推奨の古いプログラムやツールのドキュメントコレクション。完全性のために旧ドキュメントから移行。'
     },
-    kr: {
+    ko: {
       headline: '기존 문서의 제품',
       description: '더 이상 사용되지 않거나 사용되지 않을 수 있는 이전 프로그램 및 도구의 문서 모음입니다. 완전성을 위해 기존 문서에서 마이그레이션되었습니다.'
     }

+ 2 - 2
src/components/products/mpl-hybrid/index.js

@@ -124,7 +124,7 @@ export const mplHybrid = {
         'MPL-404 Hybrid UI Template': 'MPL-404 Hybrid UI Template'
       }
     },
-    jp: {
+    ja: {
       headline: 'ハイブリッドアセット',
       description: 'ハイブリッドアセット用のフレームワークとオンチェーンプロトコル。',
       sections: {
@@ -150,7 +150,7 @@ export const mplHybrid = {
         'MPL-404 Hybrid UI Template': 'MPL-404ハイブリッドUIテンプレート'
       }
     },
-    kr: {
+    ko: {
       headline: '하이브리드 에셋',
       description: '하이브리드 에셋을 위한 프레임워크 및 온체인 프로토콜입니다.',
       sections: {

+ 2 - 2
src/components/products/shank/index.js

@@ -54,7 +54,7 @@ export const shank = {
         'Macros Reference': 'Macros Reference'
       }
     },
-    jp: {
+    ja: {
       headline: 'SolanaプログラムのIDL抽出',
       description: '属性マクロを使用してRust SolanaプログラムコードからIDLを抽出',
       sections: {
@@ -67,7 +67,7 @@ export const shank = {
         'Macros Reference': 'マクロリファレンス'
       }
     },
-    kr: {
+    ko: {
       headline: 'Solana 프로그램용 IDL 추출',
       description: '속성 매크로를 사용하여 Rust Solana 프로그램 코드에서 IDL을 추출',
       sections: {

+ 2 - 2
src/components/products/sugar/index.js

@@ -18,11 +18,11 @@ export const sugar = {
       headline: 'Create Candy Machines easily',
       description: 'Create Candy Machines easily'
     },
-    jp: {
+    ja: {
       headline: 'Candy Machineを簡単に作成',
       description: 'Candy Machineを簡単に作成'
     },
-    kr: {
+    ko: {
       headline: 'Candy Machine 쉽게 만들기',
       description: 'Candy Machine을 쉽게 만들 수 있습니다'
     }

+ 2 - 2
src/components/products/tokenAuthRules/index.js

@@ -135,7 +135,7 @@ export const tokenAuthRules = {
         'Rule Set Buffers': 'Rule Set Buffers'
       }
     },
-    jp: {
+    ja: {
       headline: 'NFT権限',
       description: 'NFTのカスタム認証ルールを設計。',
       sections: {
@@ -163,7 +163,7 @@ export const tokenAuthRules = {
         'Rule Set Buffers': 'ルールセットバッファ'
       }
     },
-    kr: {
+    ko: {
       headline: 'NFT 권한',
       description: 'NFT에 대한 사용자 정의 인증 규칙을 설계하세요.',
       sections: {

+ 2 - 2
src/components/products/tokenMetadata/index.js

@@ -143,7 +143,7 @@ export const tokenMetadata = {
         'Create an NFT': 'Create an NFT',
       }
     },
-    jp: {
+    ja: {
       headline: 'デジタル所有権標準',
       description: 'SPL Token ProgramでトークンとNFTを作成',
       sections: {
@@ -177,7 +177,7 @@ export const tokenMetadata = {
         'Create an NFT': 'NFTの作成',
       }
     },
-    kr: {
+    ko: {
       headline: '디지털 소유권 표준',
       description: 'SPL Token Program으로 토큰과 NFT를 생성',
       sections: {

+ 2 - 2
src/components/products/umi/index.js

@@ -160,7 +160,7 @@ export const umi = {
         'Transactions': 'Transactions'
       }
     },
-    jp: {
+    ja: {
       headline: 'クライアントラッパー',
       description: 'アプリケーション用のコアプログラムのコレクション。',
       sections: {
@@ -198,7 +198,7 @@ export const umi = {
         'Serializing and Deserializing Transactions': 'トランザクションのシリアライズとデシリアライズ'
       }
     },
-    kr: {
+    ko: {
       headline: '클라이언트 래퍼',
       description: '애플리케이션을 위한 핵심 프로그램 모음집입니다.',
       sections: {

+ 82 - 0
src/config/languages.js

@@ -0,0 +1,82 @@
+/**
+ * Language configuration for i18n and SEO
+ *
+ * This configuration is used for:
+ * - hreflang tags
+ * - Language detection
+ * - URL path generation
+ * - Locale imports
+ */
+
+export const LANGUAGES = {
+  en: {
+    code: 'en',           // ISO 639-1 language code (used in hreflang)
+    urlPath: '',          // URL path prefix (empty for default language)
+    name: 'English',
+    nativeName: 'English',
+    isDefault: true,
+  },
+  ja: {
+    code: 'ja',           // ISO 639-1 language code
+    urlPath: '/ja',       // URL path prefix
+    name: 'Japanese',
+    nativeName: '日本語',
+    isDefault: false,
+  },
+  ko: {
+    code: 'ko',           // ISO 639-1 language code
+    urlPath: '/ko',       // URL path prefix
+    name: 'Korean',
+    nativeName: '한국어',
+    isDefault: false,
+  },
+}
+
+// Helper to get language config by URL path
+export function getLanguageByPath(pathname) {
+  // Check if pathname starts with any language prefix
+  for (const [key, lang] of Object.entries(LANGUAGES)) {
+    if (lang.urlPath && pathname.startsWith(lang.urlPath)) {
+      return lang
+    }
+  }
+
+  // Default to English
+  return LANGUAGES.en
+}
+
+// Helper to get language config by locale code
+export function getLanguageByCode(code) {
+  return LANGUAGES[code] || LANGUAGES.en
+}
+
+// Helper to generate alternate URLs for hreflang
+export function generateAlternateUrls(pathname) {
+  const alternates = []
+
+  // Normalize pathname (remove any existing language prefix)
+  let normalizedPath = pathname
+  for (const lang of Object.values(LANGUAGES)) {
+    if (lang.urlPath && pathname.startsWith(lang.urlPath)) {
+      normalizedPath = pathname.slice(lang.urlPath.length) || '/'
+      break
+    }
+  }
+
+  // Generate alternate URLs for each language
+  for (const lang of Object.values(LANGUAGES)) {
+    const url = lang.urlPath ? `${lang.urlPath}${normalizedPath}` : normalizedPath
+    alternates.push({
+      hreflang: lang.code,
+      url: url,
+    })
+  }
+
+  return alternates
+}
+
+// Get all supported language codes
+export const SUPPORTED_LANGUAGES = Object.keys(LANGUAGES)
+
+// Get default language
+export const DEFAULT_LANGUAGE = Object.values(LANGUAGES).find(lang => lang.isDefault)

+ 8 - 8
src/contexts/LocaleContext.js

@@ -2,15 +2,15 @@ import { createContext, useContext, useMemo, useEffect, useState } from 'react'
 import { useRouter } from 'next/router'
 
 import enMessages from '@/locales/en.json'
-import jpMessages from '@/locales/jp.json'
-import krMessages from '@/locales/kr.json'
+import jaMessages from '@/locales/ja.json'
+import koMessages from '@/locales/ko.json'
 
 const LocaleContext = createContext()
 
 const messages = {
   en: enMessages,
-  jp: jpMessages,
-  kr: krMessages,
+  ja: jaMessages,
+  ko: koMessages,
 }
 
 export function LocaleProvider({ children }) {
@@ -27,14 +27,14 @@ export function LocaleProvider({ children }) {
   // Detect locale from pathname, with fallback to client path for 404 pages
   const locale = useMemo(() => {
     let pathToCheck = pathname
-    
+
     // For 404 pages, use different strategies
     if (pathname === '/404') {
       pathToCheck = asPath || clientPath
     }
-    
-    if (pathToCheck.startsWith('/jp')) return 'jp'
-    if (pathToCheck.startsWith('/kr')) return 'kr'
+
+    if (pathToCheck.startsWith('/ja')) return 'ja'
+    if (pathToCheck.startsWith('/ko')) return 'ko'
     return 'en' // Default to English for root paths
   }, [pathname, asPath, clientPath])
 

+ 1 - 1
src/i18n.js

@@ -2,7 +2,7 @@ import { getRequestConfig } from 'next-intl/server';
 import { notFound } from 'next/navigation';
 
 // Can be imported from a shared config
-const locales = ['en', 'jp'];
+const locales = ['en', 'ja', 'ko'];
 
 export default getRequestConfig(async ({ locale }) => {
   // Validate that the incoming `locale` parameter is valid

+ 7 - 24
src/pages/_app.jsx

@@ -1,9 +1,9 @@
-import Head from 'next/head'
 import Script from 'next/script'
 
 import { DialectProvider } from '@/components/DialectContext'
 import { LocaleProvider } from '@/contexts/LocaleContext'
 import { Layout } from '@/components/Layout'
+import { SEOHead } from '@/components/SEOHead'
 import { usePage } from '@/shared/usePage'
 
 import '@/styles/extra.css'
@@ -29,29 +29,12 @@ function AppContent({ Component, pageProps }) {
 
   return (
     <>
-      <Head>
-        <title>{page.metaTitle}</title>
-        <meta property="og:title" content={page.metaTitle} />
-        <meta name="twitter:title" content={page.metaTitle} />
-        <meta name="twitter:card" content="summary_large_image" />
-        <meta property="twitter:domain" content="developers.metaplex.com" />
-        <meta
-          property="og:image"
-          content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg"
-        />
-        <meta
-          name="twitter:image"
-          content="https://developers.metaplex.com/assets/social/dev-hub-preview.jpg"
-        />
-
-        {page.description && (
-          <>
-            <meta name="description" content={page.description} />
-            <meta property="og:description" content={page.description} />
-            <meta name="twitter:description" content={page.description} />
-          </>
-        )}
-      </Head>
+      <SEOHead
+        title={page.title}
+        description={page.description}
+        metaTitle={page.metaTitle}
+        locale={page.locale}
+      />
 
       <DialectProvider>
         <Layout page={page}>

+ 124 - 0
src/pages/ja/core-candy-machine/guards/address-gate.md

@@ -0,0 +1,124 @@
+---
+title: Address Gate ガード
+metaTitle: Address Gate ガード | Core Candy Machine
+description: "Core Candy Machine の 'Address Gate' は、指定された単一のアドレスにミントを制限します。"
+---
+
+## 概要
+
+**Address Gate** ガードは、ミントを単一のアドレスに制限し、そのアドレスはミント実行ウォレットのアドレスと一致する必要があります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #addressGate label="AddressGate" /%}
+{% node #address label="- Address" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="address" x="270" y="-9" %}
+{% node #payer label="Payer" theme="indigo" /%}
+{% node theme="dimmed" %}
+Owner: Any Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    Mint from
+
+    _Candy Guard Program_{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  Access Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-10" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Candy Machine Program_{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="72" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="address" to="payer" arrow="none" dashed=true /%}
+{% edge from="payer" to="mint-candy-guard" arrow="none" dashed=true%}
+if the payer does not match the address on the guard
+
+Minting will fail
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" /%}
+
+
+{% /diagram %}
+
+## ガード設定
+
+Address Gate ガードには以下の設定が含まれます:
+
+- **Address**: Core Candy Machine からミントすることが許可されている唯一のアドレス。
+
+{% dialect-switcher title="Address Gate ガードを使用した Core Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    addressGate: some({ address: someWallet.publicKey }),
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AddressGate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AddressGate.html)
+
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+config.json ファイルの guard セクションに以下のオブジェクトを追加してください:
+
+```json
+"addressGate" : {
+    "address": "<PUBKEY>"
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+これで、定義された公開鍵のみがこの Core Candy Machine からミントできるようになります。
+
+## ミント設定
+
+_Address Gate ガードはミント設定を必要としません。_
+
+## Route 命令
+
+_Address Gate ガードは route 命令をサポートまたは必要としません。_

+ 275 - 0
src/pages/ja/core-candy-machine/guards/allocation.md

@@ -0,0 +1,275 @@
+---
+title: Allocation ガード
+metaTitle: Mint Allocation ガード | Core Candy Machine
+description: "Core Candy Machine の 'Allocation' ガードでは、各ガードグループがミントできるアセット数の上限を指定できます。"
+---
+
+## 概要
+
+**Allocation** ガードは、各ガードグループがミントできるアセット数の上限を指定できます。
+
+上限は設定で提供される識別子ごとに設定され、同じ Core Candy Machine 内で複数の割り当てを可能にします。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #allocation label="Allocation" /%}
+{% node label="- id" /%}
+{% node label="- limit" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="allocation" x="270" y="-9" %}
+{% node #pda theme="indigo" %}
+Allocation Tracker PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Candy Guard Program_ {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  Access Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Candy Machine Program_ {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="71" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="allocation" to="pda" arrow="none" /%}
+{% edge from="pda" to="mint-candy-guard" arrow="none" fromPosition="top" dashed=true%}
+if the allocation tracker count
+
+is equal to the limit
+
+Minting will fail
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" /%}
+
+
+{% /diagram %}
+
+## ガード設定
+
+Allocation ガードには以下の設定が含まれます:
+
+- **ID**: このガードの一意の識別子。異なる識別子は、指定されたウォレットによってミントされたアイテム数を追跡するために異なるカウンターを使用します。これは、ガードのグループを使用する際に特に有用です。各グループに異なるミント上限を設定したい場合があるためです。
+- **Limit**: ガードグループで許可されるミントの最大数。
+
+{% dialect-switcher title="Allocation ガードを使用した Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    allocation: some({ id: 1, limit: 5 }),
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [Allocation](https://mpl-core-candy-machine.typedoc.metaplex.com/types/Allocation.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+config.json ファイルの guard セクションに以下のオブジェクトを追加してください:
+
+```json
+"allocation" : {
+    "id": number,
+    "limit": number
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Allocation ガードには以下のミント設定が含まれます:
+
+- **ID**: このガードの一意の識別子。
+
+注: SDK を使用せずに命令を構築する予定がある場合は、これらのミント設定をさらに命令引数と残りのアカウントの組み合わせとして提供する必要があります。詳細については、[Candy Guard のプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#allocation)を参照してください。
+
+{% dialect-switcher title="Allocation ガードを使用したミント" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Allocation ガードのミント設定は、次のように `mintArgs` 引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    allocation: some({ id: 1 }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+_ガードが割り当てられると、sugar を使用してミントすることはできません。そのため、特定のミント設定はありません。_
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Route 命令
+
+Allocation ガードの route 命令は以下の機能をサポートします。
+
+### Allocation Tracker の初期化
+
+Allocation ガードを使用する場合、ミントを開始する前に Allocation Tracker アカウントを初期化する必要があります。これにより、ガード設定の id 属性から派生した PDA アカウントが作成されます。
+
+Allocation Tracker PDA アカウントは、ガードグループ内のミント数を追跡し、上限に達すると そのグループ内のミントをブロックします。
+
+この Allocation Tracker アカウントを初期化する際、ガードの route 命令に以下の引数を提供する必要があります:
+
+- **ID**: ガード設定の Allocation の id。
+- **Candy Guard Authority**: Core Candy Guard アカウントの権限(署名者として)。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="Owner: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guards" theme="mint" z=1/%}
+{% node #allocation label="Allocation" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="415" %}
+  {% node #candy-guard-route theme="pink" %}
+    Route from the
+
+    _Candy Guard Program_
+  {% /node %}
+{% /node %}
+{% node parent="candy-guard-route" y="-20" x="-4" theme="transparent" %}
+  Initialize Allocation Tracker
+{% /node %}
+
+{% edge from="guards" to="candy-guard-route" theme="pink" toPosition="left" /%}
+{% edge from="candy-guard-route" to="freezeEscrow-PDA3" theme="pink" path="straight" y="-10" /%}
+
+{% node #freezeEscrow-PDA3 parent="allocation" x="390" y="-10" %}
+{% node label="Allocation Tracker PDA" theme="blue" /%}
+{% node label="count = 0" theme="dimmed" /%}
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="allocation" to="freezeEscrow-PDA3" arrow="none" dashed=true path="straight" /%}
+{% edge from="candy-guard-route" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="Allocation Tracker PDA の初期化" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+デフォルトガード用の Allocation Tracker PDA を初期化するには:
+
+```ts
+route(umi, {
+  // ...
+  guard: 'allocation',
+  routeArgs: {
+    id: 1,
+    candyGuardAuthority: umi.identity,
+  },
+})
+```
+
+Allocation ガードが特定のグループに追加された場合、**group** 名を追加する必要があります:
+
+```ts
+route(umi, {
+  // ...
+  guard: 'allocation',
+  routeArgs: {
+    id: 1,
+    candyGuardAuthority: umi.identity,
+  },
+  group: some('GROUPA'),
+})
+```
+
+API リファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [AllocationRouteArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AllocationRouteArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+_Sugar は現在 route 命令をサポートしていません。_
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Allocation アカウント
+`Allocation` ガードが使用されると、route 命令の実行後に `allocationTracker` アカウントが作成されます。検証目的で次のように取得できます:
+
+```js
+import {
+  safeFetchAllocationTrackerFromSeeds,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allocationTracker = await safeFetchAllocationTrackerFromSeeds(umi, {
+  id: 1, // ガード設定で設定した allocation id
+  candyMachine: candyMachine.publicKey,
+  // または candyMachine: publicKey("Address") で CM アドレスを指定
+  candyGuard: candyMachine.mintAuthority,
+  // または candyGuard: publicKey("Address") で candyGuard アドレスを指定
+});
+```

+ 412 - 0
src/pages/ja/core-candy-machine/guards/allow-list.md

@@ -0,0 +1,412 @@
+---
+title: Allowlistガード
+metaTitle: Allowlistガード | Core Candy Machine
+description: "Core Candy Machineの「Allowlist」ガードは、Core Candy Machineからミントすることが許可されたウォレットの事前定義リストを設定できます"
+---
+
+## 概要
+
+**Allow List**ガードは、ミントを行うウォレットが事前定義されたウォレットリストに対して検証を行います。ミントを行うウォレットがこのリストに含まれていない場合、ミントは失敗します。
+
+このガードの設定に大きなウォレットリストを提供すると、ブロックチェーン上で多くのストレージが必要になり、それらをすべて挿入するために複数のトランザクションが必要になる可能性があります。そのため、Allow Listガードは[**Merkle Tree**](https://en.m.wikipedia.org/wiki/Merkle_tree)を使用して、ミントを行うウォレットが事前設定されたウォレットリストの一部であることを検証します。
+
+これは、すべてのリーフが2つずつハッシュ化され、**Merkle Root**として知られる最終的なハッシュに到達するまで続くハッシュのバイナリツリーを作成することで機能します。これは、いずれかのリーフが変更された場合、最終的なMerkle Rootが破損することを意味します。
+
+{% diagram %}
+{% node #hash-7 label="Hash 7" theme="brown" /%}
+{% node #merkle-root label="Merkle Root" theme="transparent" parent="hash-7" x="-90" y="8" /%}
+{% node #hash-5 label="Hash 5" parent="hash-7" y="100" x="-200" theme="orange" /%}
+{% node #hash-6 label="Hash 6" parent="hash-7" y="100" x="200" theme="orange" /%}
+
+{% node #leaves label="Leaves" parent="hash-5" y="105" x="-170" theme="transparent" /%}
+{% node #hash-1 label="Hash 1" parent="hash-5" y="100" x="-100" theme="orange" /%}
+{% node #hash-2 label="Hash 2" parent="hash-5" y="100" x="100" theme="orange" /%}
+{% node #hash-3 label="Hash 3" parent="hash-6" y="100" x="-100" theme="orange" /%}
+{% node #hash-4 label="Hash 4" parent="hash-6" y="100" x="100" theme="orange" /%}
+
+{% node #data label="Data" parent="hash-1" y="105" x="-80" theme="transparent" /%}
+{% node #Ur1C label="Ur1C...bWSG" parent="hash-1" y="100" x="-23" /%}
+{% node #sXCd label="sXCd...edkn" parent="hash-2" y="100" x="-20" /%}
+{% node #RbJs label="RbJs...Ek7u" parent="hash-3" y="100" x="-17" /%}
+{% node #rwAv label="rwAv...u1ud" parent="hash-4" y="100" x="-16" /%}
+
+{% edge from="hash-5" to="hash-7" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-6" to="hash-7" fromPosition="top" toPosition="bottom" /%}
+
+{% edge from="hash-1" to="hash-5" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-2" to="hash-5" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-3" to="hash-6" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-4" to="hash-6" fromPosition="top" toPosition="bottom" /%}
+
+{% edge from="Ur1C" to="hash-1" fromPosition="top" toPosition="bottom" path="straight" /%}
+{% edge from="sXCd" to="hash-2" fromPosition="top" toPosition="bottom" path="straight" /%}
+{% edge from="RbJs" to="hash-3" fromPosition="top" toPosition="bottom" path="straight" /%}
+{% edge from="rwAv" to="hash-4" fromPosition="top" toPosition="bottom" path="straight" /%}
+
+{% /diagram %}
+
+リーフがツリーの一部であることを検証するには、ツリーを上に向かって再計算し、Merkle Rootを再計算できるようにするすべての中間ハッシュのリストが必要です。この中間ハッシュのリストを**Merkle Proof**と呼びます。計算されたMerkle Rootが保存されているMerkle Rootと一致する場合、リーフがツリーの一部であり、したがって元のリストの一部であることを確認できます。
+
+{% diagram %}
+{% node #hash-7 label="Hash 7" theme="brown" /%}
+{% node #merkle-root label="Merkle Root" theme="transparent" parent="hash-7" x="-90" y="8" /%}
+{% node #hash-5 label="Hash 5" parent="hash-7" y="100" x="-200" theme="mint" /%}
+{% node #hash-6 label="Hash 6" parent="hash-7" y="100" x="200" theme="blue" /%}
+
+{% node #legend-merkle-proof label="Merkle Proof =" theme="transparent" parent="hash-7" x="200" y="10" /%}
+{% node #legend-hash-4 label="Hash 4" parent="legend-merkle-proof" x="100" y="-7" theme="mint" /%}
+{% node #plus label="+" parent="legend-hash-4" theme="transparent" x="81" y="8" /%}
+{% node #legend-hash-5 label="Hash 5" parent="legend-hash-4" x="100" theme="mint" /%}
+
+
+{% node #leaves label="Leaves" parent="hash-5" y="105" x="-170" theme="transparent" /%}
+{% node #hash-1 label="Hash 1" parent="hash-5" y="100" x="-100" theme="orange" /%}
+{% node #hash-2 label="Hash 2" parent="hash-5" y="100" x="100" theme="orange" /%}
+{% node #hash-3 label="Hash 3" parent="hash-6" y="100" x="-100" theme="blue" /%}
+{% node #hash-4 label="Hash 4" parent="hash-6" y="100" x="100" theme="mint" /%}
+
+{% node #data label="Data" parent="hash-1" y="105" x="-80" theme="transparent" /%}
+{% node #Ur1C label="Ur1C...bWSG" parent="hash-1" y="100" x="-23" /%}
+{% node #sXCd label="sXCd...edkn" parent="hash-2" y="100" x="-20" /%}
+{% node #RbJs label="RbJs...Ek7u" parent="hash-3" y="100" x="-17" theme="blue" /%}
+{% node #rwAv label="rwAv...u1ud" parent="hash-4" y="100" x="-16" /%}
+
+{% edge from="hash-5" to="hash-7" fromPosition="top" toPosition="bottom" theme="mint" /%}
+{% edge from="hash-6" to="hash-7" fromPosition="top" toPosition="bottom" theme="blue" /%}
+
+{% edge from="hash-1" to="hash-5" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-2" to="hash-5" fromPosition="top" toPosition="bottom" /%}
+{% edge from="hash-3" to="hash-6" fromPosition="top" toPosition="bottom" theme="blue" /%}
+{% edge from="hash-4" to="hash-6" fromPosition="top" toPosition="bottom" theme="mint" /%}
+
+{% edge from="Ur1C" to="hash-1" fromPosition="top" toPosition="bottom" path="straight" /%}
+{% edge from="sXCd" to="hash-2" fromPosition="top" toPosition="bottom" path="straight" /%}
+{% edge from="RbJs" to="hash-3" fromPosition="top" toPosition="bottom" path="straight" theme="blue" /%}
+{% edge from="rwAv" to="hash-4" fromPosition="top" toPosition="bottom" path="straight" /%}
+
+{% /diagram %}
+
+したがって、Allow Listガードの設定には、事前設定された許可ウォレットリストの真実のソースとして機能するMerkle Rootが必要です。ウォレットが許可リストに含まれていることを証明するには、プログラムがMerkle Rootを再計算し、ガードの設定と一致することを確認できる有効なMerkle Proofを提供する必要があります。
+
+SDKには、特定のウォレットリストに対してMerkle RootとMerkle Proofを簡単に作成するためのヘルパーが用意されています。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1 /%}
+{% node #allowList label="AllowList" /%}
+{% node #guardMerkleRoot label="- Merkle Root" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="allowList" x="250" y="10" %}
+{% node #merkleRoot theme="slate" %}
+Merkle Root {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="merkleRoot" x="170" %}
+{% node #merkleProof theme="slate" %}
+Merkle Proof {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="merkleRoot" y="100" x="-12" %}
+{% node #walletList  %}
+ミントが許可された
+
+ウォレットのリスト
+{%/node %}
+{% /node %}
+{% edge from="merkleProof" to="walletList" arrow="none" fromPosition="bottom" toPosition="top" arrow="start" /%}
+{% edge from="merkleRoot" to="walletList" arrow="none" fromPosition="bottom" toPosition="top" arrow="start" /%}
+
+
+{% node parent="merkleProof" y="100" %}
+{% node #payer label="Payer" theme="indigo" /%}
+{% node theme="dimmed"%}
+Owner: Any Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="merkleProof" to="payer" arrow="none" fromPosition="bottom" toPosition="top" arrow="start" path="straight" /%}
+
+{% node parent="candy-machine" x="740" %}
+  {% node #route-validation theme="pink" %}
+    _Candy Guard Program_
+
+    からのルート
+  {% /node %}
+{% /node %}
+{% node parent="route-validation" y="-20" x="100" theme="transparent" %}
+  Merkle Proofを検証
+{% /node %}
+
+{% node parent="route-validation" #allowList-pda y="130" x="32" %}
+{% node theme="slate" %}
+Allowlist PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="allowList-pda" #mint-candy-guard y="90" x="-31" %}
+  {% node theme="pink" %}
+    _Candy Guard Program_
+
+    からミント {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="110" x="-8" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="110" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="110" x="70" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="guardMerkleRoot" to="merkleRoot" arrow="start" path="straight" /%}
+{% edge from="merkleRoot" to="route-validation" arrow="none" fromPosition="top" dashed=true /%}
+{% edge from="merkleProof" to="route-validation" arrow="none" fromPosition="top" dashed=true  %}
+支払者のMerkle Proofがガードの
+
+Merkle Rootと一致しない場合、
+
+検証は失敗します
+{% /edge %}
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="route-validation" to="allowList-pda" path="straight" /%}
+{% edge from="allowList-pda" to="mint-candy-guard" path="straight" /%}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+
+{% /diagram %}
+
+## ガード設定
+
+Allow Listガードには以下の設定が含まれます:
+
+- **Merkle Root**: 許可リストを表すMerkle TreeのRoot。
+
+{% dialect-switcher title="Allowlistガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Merkle Treeを管理するために、UmiライブラリはこのT`getMerkleRoot`と`getMerkleProof`という2つのヘルパーメソッドを提供しています。
+
+```ts
+import {
+  getMerkleProof,
+  getMerkleRoot,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allowList = [
+  "Ur1CbWSGsXCdedknRbJsEk7urwAvu1uddmQv51nAnXB",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy",
+];
+
+const merkleRoot = getMerkleRoot(allowList);
+const validMerkleProof = getMerkleProof(
+  allowList,
+  "Ur1CbWSGsXCdedknRbJsEk7urwAvu1uddmQv51nAnXB"
+);
+const invalidMerkleProof = getMerkleProof(allowList, "invalid-address");
+```
+
+許可リストのMerkle Rootを計算したら、それを使用してCandy MachineにAllow Listガードを設定できます。
+
+```ts
+import { getMerkleRoot } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allowList = [
+  "Ur1CbWSGsXCdedknRbJsEk7urwAvu1uddmQv51nAnXB",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy",
+];
+
+create(umi, {
+  // ...
+  guards: {
+    allowList: some({ merkleRoot: getMerkleRoot(allowList) }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AllowList](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AllowList.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+Sugarには、Merkle Rootを管理する機能が含まれていません。Sugarで許可リストを使用する場合は、前述のJavaScript関数や[sol-tools](https://sol-tools.tonyboyle.io/cmv3/allow-list)などを使用して事前に計算し、以下のようにMerkle RootハッシュをconfigファイルJに追加する必要があります:
+
+```json
+"allowList" : {
+    "merkleRoot": "<HASH>"
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Allow Listガードには以下のミント設定が含まれます:
+
+- **Merkle Root**: 許可リストを表すMerkle TreeのRoot。
+
+**ミントできるようになる前に、Merkle Proofを提供してミントを行うウォレットを検証する必要があります**。詳細については、以下の[Merkle Proofを検証する](#merkle-proofを検証する)を参照してください。
+
+また、SDKを使用せずに手動で命令を構築する場合は、ミント命令の残りのアカウントにAllow List Proof PDAを追加する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#allowlist)を参照してください。
+
+{% dialect-switcher title="Allow Listガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Allow ListガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+import { getMerkleRoot } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allowList = [
+  "Ur1CbWSGsXCdedknRbJsEk7urwAvu1uddmQv51nAnXB",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy",
+];
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    allowList: some({ merkleRoot: getMerkleRoot(allowList) }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AllowListMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AllowListMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+_ガードが割り当てられるとすぐに、Sugarを使用してミントすることはできなくなります。したがって、特定のミント設定はありません。_
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+Allow Listルート命令は以下の機能をサポートしています。
+
+### Merkle Proofを検証する
+
+_パス: `proof`_
+
+Merkle Proofをミント命令に直接渡す代わりに、ミントを行うウォレットは、Allow Listガードのルート命令を使用して[事前検証](/core-candy-machine/mint#minting-with-pre-validation)を実行する必要があります。
+
+このルート命令は、提供されたMerkle ProofからMerkle Rootを計算し、有効な場合は、ミントを行うウォレットが許可リストの一部であることを証明する新しいPDAアカウントを作成します。したがって、ミント時に、Allow Listガードは、このPDAアカウントの存在を確認するだけで、ウォレットへのミントを承認または拒否できます。
+
+では、なぜミント命令内で直接Merkle Proofを検証できないのでしょうか?それは単に、大きな許可リストの場合、Merkle Proofが非常に長くなる可能性があるためです。特定のサイズ以降、既にかなりの数の命令を含むミントトランザクション内に含めることが不可能になります。検証プロセスをミントプロセスから分離することで、許可リストを必要なだけ大きくすることができます。
+
+このルート命令のこのパスは、以下の引数を受け入れます:
+
+- **Path** = `proof`: ルート命令で実行するパスを選択します。
+- **Merkle Root**: 許可リストを表すMerkle TreeのRoot。
+- **Merkle Proof**: Merkle Rootを計算し、ガードの設定に保存されているMerkle Rootと一致することを検証するために使用する必要がある中間ハッシュのリスト。
+- **Minter** (オプション): 支払者と異なる場合のミンターアカウント(署名者として)。提供された場合、このアカウントは、プルーフが有効であるために許可リストの一部である必要があります。
+
+{% dialect-switcher title="ウォレットを事前検証する" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Allow Listガードの「Proof」ルート設定は、次のように`routeArgs`引数を使用して渡すことができます。
+
+```ts
+import {
+  getMerkleProof,
+  getMerkleRoot,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+import { publicKey } from "@metaplex-foundation/umi";
+
+const allowList = [
+  "Ur1CbWSGsXCdedknRbJsEk7urwAvu1uddmQv51nAnXB",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy",
+];
+
+await route(umi, {
+  // ...
+  guard: "allowList",
+  routeArgs: {
+    path: "proof",
+    merkleRoot: getMerkleRoot(allowList),
+    merkleProof: getMerkleProof(allowList, publicKey(umi.identity)),
+  },
+}).sendAndConfirm(umi);
+```
+
+`umi.identity`ウォレットは、Candy Machineからミントすることが許可されるようになりました。
+
+APIリファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [AllowListRouteArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AllowListRouteArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+_Sugarは「Proof」ルートを呼び出すために使用できません。_
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Allowlistアカウント
+`Allowlist`ガードを使用すると、ルート命令の実行後に`AllowListProof`アカウントが作成されます。フェッチできる場合、ユーザーは許可リストに含まれており、ルートは既に実行されています。検証目的で次のようにフェッチできます:
+
+```js
+import {
+  safeFetchAllowListProofFromSeeds,
+  getMerkleRoot,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allowlist = [
+  "Tes1zkZkXhgTaMFqVgbgvMsVkRJpq4Y6g54SbDBeKVV",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy"
+];
+
+const allowListProof = await safeFetchAllowListProofFromSeeds(umi, {
+  candyMachine: candyMachine.publicKey,
+  // または candyMachine: publicKey("Address") でCMアドレスを指定
+  candyGuard: candyMachine.mintAuthority,
+  // または candyGuard: publicKey("Address") でcandyGuardアドレスを指定
+  merkleRoot: getMerkleRoot(allowlist),
+  user: umi.identity.publicKey,
+  // または「ミント」アカウントのpublicKey
+});
+```

+ 148 - 0
src/pages/ja/core-candy-machine/guards/asset-burn-multi.md

@@ -0,0 +1,148 @@
+---
+title: Asset Burn Multiガード
+metaTitle: Asset Burn Multiガード | Core Candy Machine
+description: "Core Candy Machineの「Asset Burn Multi」ガードは、事前定義されたコレクションの保有者へのミントを制限し、購入時に保有者のアセットをバーンします。"
+---
+
+## 概要
+
+**Asset Burn Multi**ガードは、事前定義されたコレクションの保有者へのミントを制限し、保有者のアセットをバーンします。したがって、バーンするアセットのアドレスは、ミント時に支払者によって提供される必要があります。
+
+これは[Asset Burnガード](/core-candy-machine/guards/asset-burn)に似ていますが、複数のアセットをバーンすることができます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #nftBurn label="nftBurnMulti" /%}
+{% node #requiredCollection label="- Required Collection" /%}
+{% node label="- Number" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="requiredCollection" x="270" y="-9"  %}
+{% node #collectionNftMint theme="blue" %}
+Collection {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="requiredCollection" to="collectionNftMint" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+このコレクションから
+
+n個のアセットをバーン
+{% /edge %}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="69" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Asset Burnガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのアドレス。ミントに使用するアセットは、このコレクションの一部である必要があります。
+- **Number**: 新しいアセットと交換にバーンする必要があるアセットの数。
+
+{% dialect-switcher title="Asset Burn Multiガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetBurnMulti: some({
+      requiredCollection: requiredCollection.publicKey,
+      num: 2,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AssetBurnMulti](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetBurnMulti.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Asset Burn Multiガードには以下のミント設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのミントアドレス。
+- **[Address]**: バーンするアセットのアドレスの配列。これらは、必要なコレクションの一部であり、ミンターに属している必要があります。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#asseturn)を参照してください。
+
+{% dialect-switcher title="Asset Burn Multiガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Asset Burn MultiガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    assetBurnMulti: some({
+      requiredCollection: requiredCollection.publicKey,
+      assets: [assetToBurn1.publicKey, assetToBurn2.publicKey],
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AssetBurnMultiMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetBurnMultiMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Burn Multiガードはルート命令をサポートしていません。_

+ 143 - 0
src/pages/ja/core-candy-machine/guards/asset-burn.md

@@ -0,0 +1,143 @@
+---
+title: Asset Burnガード
+metaTitle: Asset Burnガード | Core Candy Machine
+description: "Core Candy Machineの「Asset Burn」ガードは、事前定義されたコレクションの保有者へのミントを制限し、Core Candy Machineからの購入中に保有者のアセットをバーンします。"
+---
+
+## 概要
+
+**Asset Burn**ガードは、事前定義されたコレクションの保有者へのミントを制限し、保有者のアセットをバーンします。したがって、バーンするアセットのアドレスは、ミント時に支払者によって提供される必要があります。
+
+複数のアセットをバーンする場合は、[Asset Burn Multiガード](/core-candy-machine/guards/asset-burn-multi)を使用できます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #nftBurn label="nftBurn" /%}
+{% node #requiredCollection label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="requiredCollection" x="270" y="-9"  %}
+{% node #collectionNftMint theme="blue" %}
+Collection {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="requiredCollection" to="collectionNftMint" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+このコレクションから
+
+1つのアセットをバーン
+{% /edge %}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="69" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Asset Burnガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのアドレス。ミントに使用するアセットは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="Asset Burnガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetBurn: some({ requiredCollection: requiredCollection.publicKey }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AssetBurn](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetBurn.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Asset Burnガードには以下のミント設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのミントアドレス。
+- **Address**: バーンするアセットのアドレス。これは、必要なコレクションの一部であり、ミンターに属している必要があります。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#asseturn)を参照してください。
+
+{% dialect-switcher title="Asset Burnガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Asset BurnガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    assetBurn: some({
+      requiredCollection: requiredCollection.publicKey,
+      asset: assetToBurn.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AssetBurnMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetBurnMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Burnガードはルート命令をサポートしていません。_

+ 146 - 0
src/pages/ja/core-candy-machine/guards/asset-gate.md

@@ -0,0 +1,146 @@
+---
+title: "Core Candy Machine - Asset Gateガード"
+metaTitle: "Core Candy Machine - Guards - Asset Gate"
+description: "Core Candy Machineの「Asset Gate」ガードは、Core Candy Machineからミントを許可するために、ミントを行うウォレットが特定のコレクションから別のCore Assetを保持している必要があります"
+---
+
+## 概要
+
+**Asset Gate**ガードは、支払者が指定されたAssetコレクションのAssetの保有者である場合にミントを許可します。アセットは転送**されません**。
+
+支払者が必要なコレクションからアセットを所有していない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #assetGate label="assetGate" /%}
+{% node #requiredCollection label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="requiredCollection" x="270" y="-9"  %}
+{% node #collectionNftMint theme="blue" %}
+Collection {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="requiredCollection" to="collectionNftMint" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+支払者がこのコレクション
+
+から少なくとも1つの
+
+アセットを持っていることを確認
+{% /edge %}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="69" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Asset Gateガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのミントアドレス。所有権を証明するために使用するアセットは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="Asset Gateガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetGate: some({
+      requiredCollection: requiredCollection.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AssetGate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetGate.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Asset Gateガードには以下のミント設定が含まれます:
+- **Asset Address**: 所有権を証明するアセットのアドレス。これは、必要なコレクションの一部であり、ミンターに属している必要があります。
+- **Collection Address**: 所有権を証明するために使用されるコレクションのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#assetgate)を参照してください。
+
+{% dialect-switcher title="Asset Gateガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Asset GateガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    assetGate: some({
+      requiredCollection: publicKey(requiredCollection),
+      destination,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AssetGateMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetGateMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Gateガードはルート命令をサポートしていません。_

+ 160 - 0
src/pages/ja/core-candy-machine/guards/asset-mint-limit.md

@@ -0,0 +1,160 @@
+---
+title: Asset Mint Limitガード
+metaTitle: Asset Mint Limitガード | Core Candy Machine
+description: "Core Candy Machineの「Asset Mint Limit」ガードは、指定されたコレクションの保有者へのミントを制限し、Core Candy Machineで提供されたアセットに対して購入できるミントの量を制限します。"
+---
+
+## 概要
+
+Asset Mint Limitガードは、指定されたコレクションの保有者へのミントを制限し、提供されたCore Assetに対して実行できるミントの量を制限します。これは、Core Assetsの[NFT Gate](/core-candy-machine/guards/nft-gate)と[Mint Limit](/core-candy-machine/guards/mint-limit)ガードの組み合わせと考えることができ、ウォレットアドレスの代わりにAssetアドレスに基づいています。
+
+制限は、コレクションごと、Candy Machineごと、設定で提供される識別子ごとに設定され、同じCore Candy Machine内で複数のアセットミント制限を許可します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #mintLimit label="NftMintLimit" /%}
+{% node #limit label="- Limit" /%}
+{% node #id label="- ID" /%}
+{% node label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="id" x="270" y="-9"  %}
+{% node #nftMintCounterPda %}
+Asset Mint Counter PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="id" to="nftMintCounterPda" /%}
+
+{% node #nft parent="nftMintCounterPda" x="0" y="40"  label="Seeds: id, asset, candyGuard, candyMachine" theme="transparent"  /%}
+
+{% edge from="mintLimit" to="mint-candy-guard" theme="indigo" dashed=true/%}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-30" %}
+  {% node  theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #asset parent="mint-candy-machine" y="140" x="90" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="asset" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Mint Limitガードには以下の設定が含まれます:
+
+- **ID**: このガードの一意の識別子。異なる識別子は、特定のアセットを提供することでミントされたアイテムの数を追跡するために異なるカウンターを使用します。これは、ガードのグループを使用する場合に特に便利で、それぞれに異なるミント制限を持たせることができます。
+- **Limit**: その識別子のアセットごとに許可される最大ミント数。
+- **Required Collection**: 必要なコレクションのアドレス。ミント時に証明として提供するアセットは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="Asset Mint Limitガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetMintLimit: some({
+      id: 1,
+      limit: 5,
+      requiredCollection: requiredCollection.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [MintLimit](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetMintLimit.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+NFT Mint Limitガードには以下のミント設定が含まれます:
+
+- **ID**: このガードの一意の識別子。
+- **Asset**: 支払者が必要なコレクションからアセットを所有していることを証明するために提供するアセットのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#assetmintlimit)を参照してください。
+
+{% dialect-switcher title="Asset Mint Limitガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Mint LimitガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    nftMintLimit: some({ id: 1, asset: assetToVerify.publicKey }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Mint Limitガードはルート命令をサポートしていません。_
+
+## AssetMintLimitアカウント
+`AssetMintLimit`ガードを使用すると、各Core NFT Asset、CandyMachine、および`id`の組み合わせに対して`AssetMintCounter`アカウントが作成されます。検証目的で次のようにフェッチできます:
+
+```js
+import {
+  findAssetMintCounterPda,
+  fetchNftMintCounter
+ } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const pda = findAssetMintCounterPda(umi, {
+  id: 1, // ガード設定で設定したnftMintLimitのid
+  mint: asset.publicKey, // ユーザーが所有するNFTのアドレス
+  candyMachine: candyMachine.publicKey,
+  // または candyMachine: publicKey("Address") でCMアドレスを指定
+  candyGuard: candyMachine.mintAuthority
+  // または candyGuard: publicKey("Address") でcandyGuardアドレスを指定
+});
+
+const nftMintCounter = fetchAssetMintCounter(umi, pda)
+```

+ 170 - 0
src/pages/ja/core-candy-machine/guards/asset-payment-multi.md

@@ -0,0 +1,170 @@
+---
+title: "Asset Payment Multiガード"
+metaTitle: "Asset Payment Multiガード | Core Candy Machine"
+description: "Core Candy Machineの「Asset Payment Multi」ガードは、Core Candy Machineからのミントの支払いとして、特定のコレクションから他のCore Assetを請求します。"
+---
+
+## 概要
+
+**Asset Payment Multi**ガードは、指定されたAssetコレクションから1つ以上のCore Assetを支払者に請求することでミントを許可します。アセットは事前定義された宛先に転送されます。
+
+支払者が必要なコレクションからアセットを所有していない場合、ミントは失敗します。
+
+このガードは[Asset Paymentガード](/core-candy-machine/guards/asset-payment)に似ていますが、複数のアセットで支払うことができます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="assetPayment" /%}
+{% node #guardRequiredCollection label="- Required Collection" /%}
+{% node #guardDestinationWallet label="- Destination Wallet" /%}
+{% node label="- Number" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardRequiredCollection" #collectionNftMint x="270" y="-100"  %}
+{% node theme="blue" %}
+Collection
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardRequiredCollection" to="collectionNftMint" /%}
+
+{% node parent="guardDestinationWallet" #destinationWallet x="300"  %}
+{% node theme="blue" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardDestinationWallet" to="destinationWallet" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true arrow="none" /%}
+
+{% node parent="mint-candy-guard" theme="transparent" x="-180" y="20" %}
+このコレクションから
+
+n個のアセットを転送
+{% /node %}
+
+{% edge from="mint-candy-guard" to="destinationWallet" theme="indigo" %}
+{% /edge %}
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="92" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Asset Paymentガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのミントアドレス。支払いに使用するアセットは、このコレクションの一部である必要があります。
+- **Destination**: すべてのアセットを受け取るウォレットのアドレス。
+- **Number**: 支払う必要があるアセットの数。
+
+{% dialect-switcher title="Asset Payment Multiガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetPaymentMulti: some({
+      requiredCollection: requiredCollection.publicKey,
+      destination: umi.identity.publicKey,
+      num: 2
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AssetPaymentMulti](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetPaymentMulti.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Asset Paymentガードには以下のミント設定が含まれます:
+- **[Asset Address]**: 支払いに使用するアセットの配列。これらは、必要なコレクションの一部であり、ミンターに属している必要があります。
+- **Collection Address**: 支払いに使用されるコレクションのアドレス。
+- **Destination**: すべてのアセットを受け取るウォレットのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#assetpayment)を参照してください。
+
+{% dialect-switcher title="Asset Payment Multiガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Asset PaymentガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    assetPaymentMulti: some({
+      requiredCollection: publicKey(requiredCollection),
+      destination,
+      assets: [firstAssetToSend.publicKey, secondAssetToSend.publicKey],
+      num: 2
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AssetPaymentMultiMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetPaymentMultiMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Payment Multiガードはルート命令をサポートしていません。_

+ 166 - 0
src/pages/ja/core-candy-machine/guards/asset-payment.md

@@ -0,0 +1,166 @@
+---
+title: "Asset Paymentガード"
+metaTitle: "Asset Paymentガード | Core Candy Machine"
+description: "Core Candy Machineの「Asset Payment」ガードは、Core Candy Machineからのミントの支払いとして、特定のコレクションから別のCore Assetを必要とします"
+---
+
+## 概要
+
+**Asset Payment**ガードは、指定されたAssetコレクションからCore Assetを支払者に請求することでミントを許可します。アセットは事前定義された宛先に転送されます。
+
+支払者が必要なコレクションからアセットを所有していない場合、ミントは失敗します。
+
+複数のアセットで支払う場合は、[Asset Payment Multiガード](/core-candy-machine/guards/asset-payment-multi)を使用できます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="assetPayment" /%}
+{% node #guardRequiredCollection label="- Required Collection" /%}
+{% node #guardDestinationWallet label="- Destination Wallet" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardRequiredCollection" #collectionNftMint x="270" y="-100"  %}
+{% node theme="blue" %}
+Collection
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardRequiredCollection" to="collectionNftMint" /%}
+
+{% node parent="guardDestinationWallet" #destinationWallet x="300"  %}
+{% node theme="blue" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardDestinationWallet" to="destinationWallet" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true arrow="none" /%}
+
+{% node parent="mint-candy-guard" theme="transparent" x="-180" y="20" %}
+このコレクションから
+
+1つのアセットを転送
+{% /node %}
+
+{% edge from="mint-candy-guard" to="destinationWallet" theme="indigo" %}
+{% /edge %}
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="92" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Asset Paymentガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なコレクションのミントアドレス。支払いに使用するアセットは、このコレクションの一部である必要があります。
+- **Destination**: すべてのアセットを受け取るウォレットのアドレス。
+
+{% dialect-switcher title="Asset Paymentガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    assetPayment: some({
+      requiredCollection: requiredCollection.publicKey,
+      destination: umi.identity.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [AssetPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetPayment.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Asset Paymentガードには以下のミント設定が含まれます:
+- **Asset Address**: 支払いに使用するアセットのアドレス。これは、必要なコレクションの一部であり、ミンターに属している必要があります。
+- **Collection Address**: 支払いに使用されるコレクションのアドレス。
+- **Destination**: すべてのアセットを受け取るウォレットのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#assetpayment)を参照してください。
+
+{% dialect-switcher title="Asset Paymentガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Asset PaymentガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    assetPayment: some({
+      requiredCollection: publicKey(requiredCollection),
+      destination,
+      asset: assetToSend.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [AssetPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/AssetPaymentMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Asset Paymentガードはルート命令をサポートしていません。_

+ 105 - 0
src/pages/ja/core-candy-machine/guards/edition.md

@@ -0,0 +1,105 @@
+---
+title: "Edition ガード"
+metaTitle: "Edition ガード | Core Candy Machine"
+description: "Core Candy Machine の 'Edition' ガードは、Core Candy Machine からエディションをミントできるようにします。"
+---
+
+## 概要
+
+**Edition** ガードは特別な種類のガードです。購入者に課金したり、ミントが許可されている条件を確認したりするために使用されるものではありません。代わりに、Edition ガードは作成されたアセットが持つべきエディション番号を決定します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node label="Owner: Core Candy Machine Core Program" theme="dimmed" /%}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node label="Owner: Core Candy Guard Program" theme="dimmed" /%}
+{% node #candy-guard-guards label="Guards" theme="mint"/%}
+{% node #edition label="edition" /%}
+{% node #editionStartOffset label="- editionStartOffset" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="editionStartOffset" x="270" y="-9"  %}
+{% node #editionCounterPda %}
+Edition Counter PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="editionStartOffset" to="editionCounterPda" path="straight" /%}
+
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Core Candy Guard_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="60" theme="transparent" %}
+  Edition Number Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-8" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Core Candy Machine_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="110" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="120" x="65" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="editionCounterPda" to="mint-candy-guard" arrow="none" dashed=true %}
+Determine the
+
+edition number
+{% /edge %}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Edition ガードには以下の設定が含まれます:
+
+- **editionStartOffset**: エディション番号がカウントアップを開始する数値。
+
+{% dialect-switcher title="Edition ガードを使用した Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+
+create(umi, {
+  // ...
+  guards: {
+    edition: { editionStartOffset: 0 },
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_Edition ガードはミント設定を必要としません。_
+
+## Route 命令
+
+_Edition ガードは route 命令を必要としません。_

+ 112 - 0
src/pages/ja/core-candy-machine/guards/end-date.md

@@ -0,0 +1,112 @@
+---
+title: "End Date ガード"
+metaTitle: "End Date ガード | Core Candy Machine"
+description: "Core Candy Machine の 'End Date' ガードは、Core Candy Machine とそのフェーズのミントプロセスを終了する日付を決定します。"
+---
+
+## 概要
+
+**End Date** ガードは、ミントを終了する日付を指定します。この日付以降は、ミントが許可されなくなります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node label="Owner: Candy Machine Core Program" theme="dimmed" /%}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="Owner: Candy Guard Program" theme="dimmed" /%}
+{% node #candy-guard-guards label="Guards" theme="mint"/%}
+{% node #endDate label="endDate" /%}
+{% node #date label="- Date" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" #mint-candy-guard x="500" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Candy Guard Program_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  Access Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-8" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Candy Machine Program_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="110" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="120" x="73" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="date" to="mint-candy-guard" arrow="none" dashed=true %}
+After that date
+
+minting will fail
+{% /edge %}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+End Date ガードには以下の設定が含まれます:
+
+- **Date**: この日付以降はミントが許可されなくなります。
+
+{% dialect-switcher title="End Date ガードを使用した Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+import { dateTime } from "@metaplex-foundation/umi";
+
+create(umi, {
+  // ...
+  guards: {
+    endDate: some({ date: dateTime("2022-01-24T15:30:00.000Z") }),
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [EndDate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/EndDate.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+config.json ファイルの guard セクションに以下のオブジェクトを追加してください:
+
+```json
+"endDate" : {
+    "date": "string",
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_End Date ガードはミント設定を必要としません。_
+
+## Route 命令
+
+_End Date ガードは route 命令をサポートしません。_

+ 659 - 0
src/pages/ja/core-candy-machine/guards/freeze-sol-payment.md

@@ -0,0 +1,659 @@
+---
+title: 'Freeze Sol Payment ガード'
+metaTitle: Freeze Sol Payment ガード | Core Candy Machine
+description: "Core Candy Machine の 'Freeze Sol Payment' を使用すると、ミント価格を SOL で設定しつつ、購入されたCore NFT Asset を一定期間凍結することができます。"
+---
+
+## 概要
+
+**Freeze Sol Payment** ガードは、支払者から SOL で料金を徴収することで凍結された Asset のミントを可能にします。凍結された Asset は解凍されるまで転送やマーケットプレイスへの出品ができません。
+
+凍結された Asset は、以下のいずれかの条件が満たされていれば誰でも解凍できます:
+
+- Core Candy Machine がミントアウト(完売)した。
+- Core Candy Machine が削除された。
+- 設定された凍結期間(最大30日間)が経過した。
+
+資金は「Freeze Escrow」アカウントに転送されます。このアカウントは、ミントを開始する前に Candy Guard 権限者によって初期化される必要があります。すべての凍結された Asset が解凍されると、Candy Guard 権限者によって資金のロックが解除され、設定された宛先アカウントに転送されます。
+
+Freeze Escrow アカウントの初期化、Asset の解凍、資金のロック解除は、このガードの[ルート命令](#route-instruction)を介して行うことができます。
+
+{% diagram  %}
+
+{% node #initialize label="Initialize Freeze Escrow" theme="indigo" /%}
+{% node parent="initialize"  theme="transparent" x="-8" y="-1" %}
+①
+{% /node %}
+{% edge from="initialize" to="freezeEscrow-pda" path="straight" /%}
+{% node #freezeEscrow-pda label="Freeze Escrow PDA" theme="slate" parent="initialize" x="15" y="70" /%}
+{% node theme="transparent" parent="freezeEscrow-pda" x="178" y="-15"%}
+資金はエスクローアカウント
+
+に転送されます
+{% /node %}
+{% node #mintFrozen label="凍結された Asset をミント" theme="indigo" parent="initialize" x="250" /%}
+{% node parent="mintFrozen"  theme="transparent" x="-8" y="-1" %}
+②
+{% /node %}
+{% edge from="mintFrozen" to="frozen-NFT-bg2" path="straight" /%}
+{% edge from="mintFrozen" to="freezeEscrow-pda" toPosition="right" fromPosition="bottom" /%}
+{% node #frozen-NFT-bg2 label="凍結された Asset" theme="slate" parent="frozen-NFT" x="-10" y="-10" /%}
+{% node #frozen-NFT-bg1 label="凍結された Asset" theme="slate" parent="frozen-NFT" x="-5" y="-5" /%}
+{% node #frozen-NFT label="凍結された Asset" theme="slate" parent="mintFrozen" x="33" y="120" /%}
+
+{% node #clock label="🕑" theme="transparent" parent="mintFrozen" x="165" y="-30" /%}
+{% edge from="clock" to="clockDesc" arrow="none" theme="dimmed" path="straight" /%}
+{% node #clockDesc  theme="transparent" parent="clock" y="220" x="-91" %}
+_すべての Asset がミントされた場合_
+
+_または凍結期間の終了時。_
+{% /node %}
+
+{% edge from="frozen-NFT" to="thawed-NFT-bg2" path="straight" /%}
+
+{% node #thaw label="Asset を解凍" theme="indigo" parent="mintFrozen" x="200" /%}
+{% node parent="thaw"  theme="transparent" x="-8" y="-1" %}
+③
+{% /node %}
+{% edge from="thaw" to="thawed-NFT-bg2" path="straight" /%}
+{% node #thawed-NFT-bg2 label="解凍された Asset" theme="slate" parent="thawed-NFT" x="-10" y="-10" /%}
+{% node #thawed-NFT-bg1 label="解凍された Asset" theme="slate" parent="thawed-NFT" x="-5" y="-5" /%}
+{% node #thawed-NFT label="解凍された Asset" theme="slate" parent="thaw" y="130" x="3" /%}
+
+
+{% node #clock2 label="🕑" theme="transparent" parent="thaw" x="130" y="-30" /%}
+{% edge from="clock2" to="clockDesc2" arrow="none" theme="dimmed" path="straight" /%}
+{% node #clockDesc2  theme="transparent" parent="clock2" y="260" x="-91" %}
+_すべての Asset が解凍された場合。_
+{% /node %}
+
+{% node #unlock label="資金のロックを解除" theme="indigo" parent="thaw" x="180" /%}
+{% node parent="unlock"  theme="transparent" x="-8" y="-1"%}
+④
+{% /node %}
+{% node #freezeEscrow-pda2 label="Freeze Escrow PDA" theme="slate" parent="unlock" x="-20" y="70" /%}
+{% edge from="freezeEscrow-pda2" to="treasury" theme="dimmed" path="straight" /%}
+{% node #treasury label="Treasury" theme="slate" parent="freezeEscrow-pda2" y="70" x="40" /%}
+
+{% /diagram %}
+## ガード設定
+
+Freeze Sol Payment ガードには以下の設定が含まれます:
+
+- **Lamports**: 支払者に請求する SOL(またはlamports)の金額。
+- **Destination**: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
+
+{% dialect-switcher title="Freeze Sol Payment ガードを使用して Candy Machine を設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```tsx
+create(umi, {
+  // ...
+  guards: {
+    freezeSolPayment: some({
+      lamports: sol(1.5),
+      destination: umi.identity.publicKey,
+    }),
+  },
+})
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [FreezeSolPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeSolPayment.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+config.json ファイルの guard セクションに、このオブジェクトを追加します:
+
+```json
+"freezeSolPayment" : {
+    "value": SOL value,
+    "destination": "<PUBKEY>"
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Freeze Sol Payment ガードには以下のミント設定が含まれます:
+
+- **Destination**: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
+
+注意: SDK の助けを借りずに命令を構築する場合は、これらのミント設定とその他を命令引数と残りアカウントの組み合わせとして提供する必要があります。詳細については、[Candy Guard のプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#freezesolpayment)を参照してください。
+
+{% dialect-switcher title="Freeze Sol Payment ガードを使用してミント" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下のように `mintArgs` 引数を使用して、Freeze Sol Payment ガードのミント設定を渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    freezeSolPayment: some({ destination: umi.identity.publicKey }),
+  },
+})
+```
+
+API リファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [FreezeSolPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeSolPaymentMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+_ガードが割り当てられるとすぐに sugar を使用してミントすることはできません - そのため、特定のミント設定はありません。_
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+Freeze Sol Payment ルート命令は以下の機能をサポートしています。
+
+- [概要](#概要)
+- [ガード設定](#ガード設定)
+- [ミント設定](#ミント設定)
+- [ルート命令](#ルート命令)
+  - [Freeze Escrow の初期化](#freeze-escrow-の初期化)
+  - [凍結された Asset の解凍](#凍結された-asset-の解凍)
+  - [資金のロック解除](#資金のロック解除)
+- [Asset の凍結を停止](#asset-の凍結を停止)
+- [Freeze Escrow とガードグループ](#freeze-escrow-とガードグループ)
+
+### Freeze Escrow の初期化
+
+_パス: `initialize`_
+
+Freeze Sol Payment ガードを使用する場合、ミントを開始する前に Freeze Escrow アカウントを初期化する必要があります。これにより、ガードの設定の Destination 属性から派生した PDA アカウントが作成されます。
+
+Freeze Escrow PDA アカウントは、以下のような複数のパラメータを追跡します:
+
+- このガードを通じて何枚の凍結された Asset がミントされたか。
+- 凍結期間はその後からカウントされるため、このガードを介して最初の凍結された Asset がいつミントされたか。
+
+この Freeze Escrow アカウントを初期化する際は、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `initialize`: ルート命令で実行するパスを選択します。
+- **Destination**: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
+- **Period**: 凍結期間が継続すべき秒数での時間。これは最大30日間(2,592,000秒)で、このガードを介してミントされた最初の凍結された Asset から開始されます。凍結期間は、Candy Machine が完売しなくても、凍結された Asset が最終的に解凍されることを保証する安全機構を提供します。
+- **Candy Guard Authority**: 署名者としての Candy Guard アカウントの権限。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guards" theme="mint" z=1/%}
+{% node #freezeSolPayment label="Freeze Sol Payment" /%}
+{% node #amount label="- Amount"  /%}
+{% node #destination label="- Destination" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="415" %}
+  {% node #candy-guard-route theme="pink" %}
+    Path を使用したルート {% .whitespace-nowrap %}
+
+    = *Initialize*
+  {% /node %}
+  {% node parent="candy-guard-route" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="candy-guard-route" y="-20" x="-4" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+
+{% node #freeze-period parent="candy-guard-route" x="220" y="13" label="Freeze Period" theme="slate" /%}
+{% edge from="freeze-period" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="amount" to="candy-guard-route" theme="pink" toPosition="left" /%}
+
+
+{% edge from="candy-guard-route" to="freezeEscrow-PDA3" theme="pink" path="straight" y="-10" /%}
+
+{% node #freezeEscrow-PDA3 parent="destination" x="390" y="-10" %}
+  Freeze Escrow PDA
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="destination" to="freezeEscrow-PDA3" arrow="none" dashed=true path="straight" /%}
+
+{% edge from="candy-guard-route" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+最後に、Freeze Escrow PDA アカウントは、このガードを通じてミントされたすべての凍結された Asset の資金を受け取ります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guards" theme="mint" z=1 /%}
+{% node #freezeSolPayment label="Freeze Sol Payment" /%}
+{% node #amount label="Amount"  /%}
+{% node #destination label="Destination" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node #freezeEscrow-PDA4 parent="destination" x="300" y="-8" theme="slate" %}
+  Freeze Escrow PDA
+{% /node %}
+{% edge from="destination" to="freezeEscrow-PDA4" arrow="none" dashed=true path="straight" /%}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+    {% node parent="candy-guard-route" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+{% edge from="mint-candy-guard" to="freezeEscrow-PDA4" theme="pink" /%}
+
+{% node parent="mint-candy-guard" y="150" x="2" %}
+  {% node #mint-candy-machine theme="pink" %}
+    Mint
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Core Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="130" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+
+{% edge from="mint-candy-machine" to="frozen-NFT" path="straight" /%}
+{% node #frozen-NFT parent="mint-candy-machine" y="120" x="29" theme="slate" %}
+  凍結された Asset
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="Freeze Escrow を初期化" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、最大凍結期間を15日間として Freeze Escrow アカウントを初期化し、現在の identity を Candy Guard 権限として使用しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: 'freezeSolPayment',
+  routeArgs: {
+    path: 'initialize',
+    destination: umi.identity.publicKey,
+    period: 15 * 24 * 60 * 60, // 15日間。
+    candyGuardAuthority: umi.identity,
+  },
+})
+```
+
+API リファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [FreezeSolPaymentRouteArgsInitialize](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeSolPaymentRouteArgsInitialize.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+### 凍結された Asset の解凍
+
+_パス: `thaw`_
+
+凍結された Asset は、以下のいずれかの条件が満たされていれば誰でも解凍できます:
+
+- Candy Machine がミントアウトした。
+- Candy Machine が削除された。
+- 設定された凍結期間(最大30日間)が経過した。
+
+Freeze Escrow 内の資金はすべての Asset が解凍されるまで転送不可能であるため、これにより treasury はできるだけ早くすべての Asset を解凍するインセンティブが生まれます。
+
+凍結された Asset を解凍するには、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `thaw`: ルート命令で実行するパスを選択します。
+- **Destination**: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
+- **Asset Address**: 解凍する凍結された Asset のミントアドレス。
+- **Asset Owner**: 解凍する凍結された Asset の所有者のアドレス。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+  Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="-4" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Candy Machine Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #guards label="Guards" theme="mint" z=1 /%}
+{% node #freezeSolPayment label="Freeze Sol Payment" /%}
+{% node #amount label="Amount"  /%}
+{% node #destination label="Destination" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="427" y="-14" %}
+  {% node #candy-guard-route theme="pink" %}
+    Route with
+
+    Path = *thaw*
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Core Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="candy-guard-route" y="-20" x="80" theme="transparent" %}
+  凍結された Asset を解凍
+{% /node %}
+
+{% node #freeze-period parent="candy-guard-route" x="218" y="15" label="Freeze Escrow PDA" /%}
+{% edge from="freeze-period" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="candy-machine" to="candy-guard-route" theme="pink" /%}
+{% edge from="candy-guard" to="candy-guard-route" theme="pink" toPosition="left" /%}
+{% edge from="amount" to="candy-guard-route" theme="pink" toPosition="left" /%}
+
+
+{% edge from="candy-guard-route" to="freezeEscrow-PDA5" theme="pink" path="straight" /%}
+
+{% node #frozen-NFT parent="candy-guard-route" y="-100" x="29" label="凍結された Asset" /%}
+{% edge from="frozen-NFT" to="candy-guard-route" path="straight" /%}
+
+{% node #freezeEscrow-PDA5 parent="candy-guard-route" x="25" y="150" label="解凍された Asset" /%}
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="candy-guard-route" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="凍結された Asset を解凍" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、現在の identity に属する凍結された Asset を解凍しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: 'freezeSolPayment',
+  routeArgs: {
+    path: 'thaw',
+    destination,
+    nftMint: nftMint.publicKey,
+    nftOwner: umi.identity.publicKey,
+    nftTokenStandard: candyMachine.tokenStandard,
+  },
+})
+```
+
+API リファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [FreezeSolPaymentRouteArgsThaw](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeSolPaymentRouteArgsThaw.html)
+
+{% /totem %}
+{% /dialect %}
+
+{% /dialect-switcher %}
+
+### 資金のロック解除
+
+_パス: `unlockFunds`_
+
+すべての凍結された Asset が解凍されると、treasury は Freeze Escrow アカウントから資金のロックを解除できます。これにより、資金が設定された Destination アドレスに転送されます。
+
+資金のロックを解除するには、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `unlockFunds`: ルート命令で実行するパスを選択します。
+- **Destination**: このガードに関連するすべての支払いを最終的に受け取るウォレットのアドレス。
+- **Candy Guard Authority**: 署名者としての Candy Guard アカウントの権限。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="19" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Candy Machine Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #guards label="Guards" theme="mint" z=1/%}
+{% node #freezeSolPayment label="Freeze Sol Payment" /%}
+{% node #amount label="Amount"  /%}
+{% node #destination label="Destination" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="431" %}
+  {% node #candy-guard-route theme="pink" %}
+    Route with
+
+    Path = *unlockFunds*
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+
+{% node parent="candy-guard-route" y="-20" x="10" theme="transparent" %}
+  エスクローから資金のロックを解除
+{% /node %}
+
+{% node #freeze-period parent="candy-guard-route" x="220" y="15" label="Freeze Escrow PDA" /%}
+{% edge from="freeze-period" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="amount" to="candy-guard-route" theme="pink" toPosition="left" /%}
+
+
+{% node parent="candy-guard-route" y="209" x="-18" %}
+{% node #destination-wallet label="Destination Wallet" theme="indigo" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program
+{% /node %}
+{% /node %}
+{% edge from="destination-wallet" to="destination" arrow="none" dashed=true /%}
+{% edge from="candy-guard-route" to="destination-wallet" theme="pink" path="straight" %}
+Freeze Escrow Account から
+
+すべての資金を転送
+{% /edge %}
+
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+
+{% /diagram %}
+
+{% separator h="6" /%}
+
+{% dialect-switcher title="資金のロック解除" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、現在の identity を Candy Guard 権限として使用し、Freeze Escrow アカウントから資金のロックを解除しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: 'freezeSolPayment',
+  routeArgs: {
+    path: 'unlockFunds',
+    destination,
+    candyGuardAuthority: umi.identity,
+  },
+})
+```
+
+API リファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [FreezeSolPaymentRouteArgsUnlockFunds](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeSolPaymentRouteArgsUnlockFunds.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Asset の凍結を停止
+
+Freeze Sol Payment ガード内で Asset の凍結を停止することが可能です。つまり、新しくミントされる Asset は凍結されなくなりますが、**既存の凍結された Asset は凍結されたまま**です。
+
+これを実現するにはいくつかの方法があり、2つのカテゴリに分けることができます:
+
+- ☀️ **解凍可能**: 既存の凍結された Asset は、ルート命令の `thaw` パスを使用して誰でも解凍できます。
+- ❄️ **解凍不可**: 既存の凍結された Asset はまだ解凍できず、「解凍可能」の条件の1つが満たされるまで待つ必要があります。
+
+これを念頭に置いて、Asset の凍結を停止する方法と、それぞれが既存の凍結された Asset の解凍を許可するかどうかの完全なリストは以下の通りです:
+
+- Candy Machine がミントアウトした → ☀️ **解凍可能**。
+- 設定された凍結期間(最大30日間)が経過した → ☀️ **解凍可能**。
+- Candy Machine アカウントが削除された → ☀️ **解凍可能**。
+- Candy Guard アカウントが削除された → ❄️ **解凍不可**。
+- Freeze Sol Payment ガードが設定から削除された → ❄️ **解凍不可**。
+
+## Freeze Escrow とガードグループ
+
+様々な[ガードグループ](/core-candy-machine/guard-groups)内で複数の Freeze Sol Payment ガードを使用する場合、Freeze Sol Payment ガードと Freeze Escrow アカウントの関係を理解することが重要です。
+
+Freeze Escrow アカウントは Destination アドレスから派生した PDA です。つまり、**複数の Freeze Sol Payment ガード**が**同じ Destination アドレス**を使用するように設定されている場合、それらはすべて**同じ Freeze Escrow アカウントを共有**します。
+
+したがって、それらは同じ凍結期間を共有し、すべての資金は同じエスクローアカウントによって収集されます。これはまた、設定された Destination アドレスごとに `initialize` ルート命令を1回だけ呼び出す必要があることを意味します。これは、ルート命令が設定された Destination アドレスごとに1回だけ必要であることを意味します。`unlockFunds` についても同様です。`thaw` するには、同じエスクローアカウントを共有している限り、どのラベルでも使用できます。
+
+異なる Destination アドレスを持つ複数の Freeze Sol Payment ガードを使用することも可能です。この場合、各 Freeze Sol Payment ガードは独自の Freeze Escrow アカウントと独自の凍結期間を持ちます。
+
+以下の例は、3つのグループに3つの Freeze Sol Payment ガードを持つ Candy Machine を示しています:
+
+- グループ1と2は同じ Destination アドレスを共有しているため、同じ Freeze Escrow アカウントを共有します。
+- グループ3は独自の Destination アドレスを持っているため、独自の Freeze Escrow アカウントを持ちます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guard Group 1" theme="mint" z=1/%}
+{% node #freezeSolPayment label="Freeze Sol Payment" /%}
+{% node #amount label="Amount = 1 SOL" /%}
+{% node #destination label="Destination A" /%}
+{% node label="..." /%}
+{% node #guards-2 label="Guard Group 2" theme="mint" z=1/%}
+{% node #freezeSolPayment-2 label="Freeze Sol Payment" /%}
+{% node #amount-2 label="Amount = 2 SOL" /%}
+{% node #destination-2 label="Destination A" /%}
+{% node label="..." /%}
+{% node #guards-3 label="Guard Group 3" theme="mint" z=1/%}
+{% node #freezeSolPayment-3 label="Freeze Sol Payment" /%}
+{% node #amount-3 label="Amount = 3 SOL" /%}
+{% node #destination-3 label="Destination B" /%}
+{% node label="..." /%}
+{% /node %}
+{% /node %}
+
+{% node #freezeEscrow-PDA-A parent="destination" x="220" y="-22" %}
+  Freeze Escrow PDA
+
+  Destination A 用
+{% /node %}
+{% edge from="destination" to="freezeEscrow-PDA-A" arrow="none" dashed=true path="straight" /%}
+{% edge from="destination-2" to="freezeEscrow-PDA-A" arrow="none" dashed=true toPosition="bottom" /%}
+
+{% node parent="freezeEscrow-PDA-A" y="-125" x="-4" %}
+  {% node #route-init-a theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+  {% node theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="route-init-a" y="-20" x="50" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+{% edge from="route-init-a" to="freezeEscrow-PDA-A" theme="pink" path="straight" /%}
+
+{% node #freeze-period-a parent="route-init-a" x="240" y="15" theme="slate" %}
+  Freeze Period A
+{% /node %}
+{% edge from="freeze-period-a" to="route-init-a" theme="pink" path="straight" /%}
+
+{% node #freezeEscrow-PDA-B parent="destination-3" x="420" y="-22" %}
+  Freeze Escrow PDA
+
+  Destination B 用
+{% /node %}
+{% edge from="destination-3" to="freezeEscrow-PDA-B" arrow="none" dashed=true path="straight" /%}
+
+{% node parent="freezeEscrow-PDA-B" y="-125" x="-4" %}
+  {% node #route-init-b theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+  {% node theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="route-init-b" y="-20" x="50" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+{% edge from="route-init-b" to="freezeEscrow-PDA-B" theme="pink" path="straight" /%}
+
+{% node #freeze-period-b parent="route-init-b" x="240" y="15" theme="slate" %}
+  Freeze Period B
+{% /node %}
+{% edge from="freeze-period-b" to="route-init-b" theme="pink" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% /diagram %}

+ 682 - 0
src/pages/ja/core-candy-machine/guards/freeze-token-payment.md

@@ -0,0 +1,682 @@
+---
+title: 'Freeze Token Payment ガード'
+metaTitle: 'Freeze Token Payment ガード | Core Candy Machine'
+description: "Core Candy Machine の 'Freeze Token Payment' ガードを使用すると、SPL Token をミント通貨として設定し、その価値を定義しつつ、購入されたCore NFT Asset を一定期間凍結することができます。"
+---
+
+## 概要
+
+**Freeze Token Payment** ガードは、特定のミントアカウントから特定量のトークンを支払者に請求することで、凍結された Asset のミントを可能にします。凍結された Asset は解凍されるまで転送やマーケットプレイスへの出品ができません。
+
+凍結された Asset は、以下のいずれかの条件が満たされていれば誰でも解凍できます:
+
+- Candy Machine がミントアウト(完売)した。
+- Candy Machine が削除された。
+- 設定された凍結期間(最大30日間)が経過した。
+
+トークンは「Freeze Escrow」アカウントに転送されます。このアカウントは、ミントを開始する前に Candy Guard 権限者によって初期化される必要があります。すべての凍結された Asset が解凍されると、Candy Guard 権限者によって資金のロックが解除され、設定された宛先アカウントに転送されます。
+
+Freeze Escrow アカウントの初期化、Asset の解凍、資金のロック解除は、このガードの[ルート命令](#route-instruction)を介して行うことができます。
+
+{% diagram  %}
+
+{% node #initialize label="Initialize Freeze Escrow" theme="indigo" /%}
+{% node parent="initialize"  theme="transparent" x="-8" y="-1" %}
+①
+{% /node %}
+{% edge from="initialize" to="freezeEscrow-pda" path="straight" /%}
+{% node #freezeEscrow-pda label="Freeze Escrow PDA" theme="slate" parent="initialize" x="15" y="70" /%}
+{% node theme="transparent" parent="freezeEscrow-pda" x="178" y="-15"%}
+資金はエスクローアカウント
+
+に転送されます
+{% /node %}
+{% node #mintFrozen label="凍結された Asset をミント" theme="indigo" parent="initialize" x="250" /%}
+{% node parent="mintFrozen"  theme="transparent" x="-8" y="-1" %}
+②
+{% /node %}
+{% edge from="mintFrozen" to="frozen-Asset-bg2" path="straight" /%}
+{% edge from="mintFrozen" to="freezeEscrow-pda" toPosition="right" fromPosition="bottom" /%}
+{% node #frozen-Asset-bg2 label="凍結された Asset" theme="slate" parent="frozen-Asset" x="-10" y="-10" /%}
+{% node #frozen-Asset-bg1 label="凍結された Asset" theme="slate" parent="frozen-Asset" x="-5" y="-5" /%}
+{% node #frozen-Asset label="凍結された Asset" theme="slate" parent="mintFrozen" x="33" y="120" /%}
+
+{% node #clock label="🕑" theme="transparent" parent="mintFrozen" x="165" y="-30" /%}
+{% edge from="clock" to="clockDesc" arrow="none" theme="dimmed" path="straight" /%}
+{% node #clockDesc  theme="transparent" parent="clock" y="220" x="-91" %}
+_すべての Asset がミントされた場合_
+
+_または凍結期間の終了時。_
+{% /node %}
+
+{% edge from="frozen-Asset" to="thawed-Asset-bg2" path="straight" /%}
+
+{% node #thaw label="Asset を解凍" theme="indigo" parent="mintFrozen" x="200" /%}
+{% node parent="thaw"  theme="transparent" x="-8" y="-1" %}
+③
+{% /node %}
+{% edge from="thaw" to="thawed-Asset-bg2" path="straight" /%}
+{% node #thawed-Asset-bg2 label="解凍された Asset" theme="slate" parent="thawed-Asset" x="-10" y="-10" /%}
+{% node #thawed-Asset-bg1 label="解凍された Asset" theme="slate" parent="thawed-Asset" x="-5" y="-5" /%}
+{% node #thawed-Asset label="解凍された Asset" theme="slate" parent="thaw" y="130" x="3" /%}
+
+
+{% node #clock2 label="🕑" theme="transparent" parent="thaw" x="130" y="-30" /%}
+{% edge from="clock2" to="clockDesc2" arrow="none" theme="dimmed" path="straight" /%}
+{% node #clockDesc2  theme="transparent" parent="clock2" y="260" x="-91" %}
+_すべての Asset が解凍された場合。_
+{% /node %}
+
+{% node #unlock label="資金のロックを解除" theme="indigo" parent="thaw" x="180" /%}
+{% node parent="unlock"  theme="transparent" x="-8" y="-1"%}
+④
+{% /node %}
+{% node #freezeEscrow-pda2 label="Freeze Escrow PDA" theme="slate" parent="unlock" x="-20" y="70" /%}
+{% edge from="freezeEscrow-pda2" to="treasury" theme="dimmed" path="straight" /%}
+{% node #treasury label="Treasury" theme="slate" parent="freezeEscrow-pda2" y="70" x="40" /%}
+
+{% /diagram %}
+## ガード設定
+
+Freeze Token Payment ガードには以下の設定が含まれます:
+
+- **Amount**: 支払者に請求するトークンの数。
+- **Mint**: 支払いに使用する SPL Token を定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを最終的に送信する関連トークンアカウントのアドレス。このアドレスは、**Mint** 属性と、これらのトークンを受け取るべき任意のウォレットのアドレスを使用して、Associated Token Address PDA を見つけることで取得できます。
+
+{% dialect-switcher title="Freeze Token Payment ガードを使用して Candy Machine を設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下は、Freeze Token Payment ガードを使用して Candy Machine を作成する方法です。この例では、Umi の identity を宛先ウォレットとして使用しています。
+
+```tsx
+import { findAssociatedTokenPda } from "@metaplex-foundation/mpl-toolbox";
+
+create(umi, {
+  // ...
+  guards: {
+    freezeTokenPayment: some({
+      amount: 300,
+      mint: tokenMint.publicKey,
+      destinationAta: findAssociatedTokenPda(umi, {
+        mint: tokenMint.publicKey,
+        owner: umi.identity.publicKey,
+      }),
+    }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Freeze Token Payment ガードには以下のミント設定が含まれます:
+
+- **Mint**: 支払いに使用する SPL Token を定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを最終的に送信する関連トークンアカウントのアドレス。
+
+注意: SDK の助けを借りずに命令を構築する場合は、これらのミント設定とその他を命令引数と残りアカウントの組み合わせとして提供する必要があります。詳細については、[Candy Guard のプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#freezetokenpayment)を参照してください。
+
+{% dialect-switcher title="Freeze Token Payment ガードを使用して Candy Machine を設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下のように `mintArgs` 引数を使用して、Freeze Token Payment ガードのミント設定を渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    freezeTokenPayment: some({
+      mint: tokenMint.publicKey,
+      destinationAta,
+    }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+Freeze Token Payment ルート命令は以下の機能をサポートしています。
+
+- [概要](#概要)
+- [ガード設定](#ガード設定)
+- [ミント設定](#ミント設定)
+- [ルート命令](#ルート命令)
+  - [Freeze Escrow の初期化](#freeze-escrow-の初期化)
+  - [凍結された Asset の解凍](#凍結された-asset-の解凍)
+  - [資金のロック解除](#資金のロック解除)
+- [Asset の凍結を停止](#asset-の凍結を停止)
+- [Freeze Escrow とガードグループ](#freeze-escrow-とガードグループ)
+
+### Freeze Escrow の初期化
+
+_パス: `initialize`_
+
+Freeze Token Payment ガードを使用する場合、ミントを開始する前に Freeze Escrow アカウントを初期化する必要があります。これにより、ガードの設定の Destination ATA 属性から派生した PDA アカウントが作成されます。
+
+Freeze Escrow PDA アカウントは、以下のような複数のパラメータを追跡します:
+
+- このガードを通じて何枚の凍結された Asset がミントされたか。
+- 凍結期間はその後からカウントされるため、このガードを介して最初の凍結された Asset がいつミントされたか。
+
+この Freeze Escrow アカウントを初期化する際は、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `initialize`: ルート命令で実行するパスを選択します。
+- **Mint**: 支払いに使用する SPL Token を定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを最終的に送信する関連トークンアカウントのアドレス。
+- **Period**: 凍結期間が継続すべき秒数での時間。これは最大30日間(2,592,000秒)で、このガードを介してミントされた最初の凍結された Asset から開始されます。凍結期間は、Candy Machine が完売しなくても、凍結された Asset が最終的に解凍されることを保証する安全機構を提供します。
+- **Candy Guard Authority**: 署名者としての Candy Guard アカウントの権限。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guards" theme="mint" z=1/%}
+{% node #freezeTokenPayment label="Freeze Token Payment" /%}
+{% node #amount label="Amount = 300"  /%}
+{% node #mint label="Mint"  /%}
+{% node #destination-ata label="Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="415" %}
+  {% node #candy-guard-route theme="pink" %}
+    Path を使用したルート {% .whitespace-nowrap %}
+
+    = *Initialize*
+  {% /node %}
+  {% node parent="candy-guard-route" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="candy-guard-route" y="-20" x="-4" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+
+{% node #freeze-period parent="candy-guard-route" x="220" y="14" label="Freeze Period" theme="slate" /%}
+{% edge from="freeze-period" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="amount" to="candy-guard-route" theme="pink" toPosition="left" /%}
+
+
+{% edge from="candy-guard-route" to="freezeEscrow-PDA3" theme="pink" path="straight" y="-10" /%}
+
+{% node #freezeEscrow-PDA3 parent="destination-ata" x="397" y="-10" %}
+  Freeze Escrow PDA
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="destination-ata" to="freezeEscrow-PDA3" arrow="none" dashed=true path="straight" /%}
+
+{% edge from="candy-guard-route" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+最後に、Freeze Escrow PDA アカウントは、このガードを通じてミントされたすべての凍結された Asset の資金を受け取ります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="21" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guards" theme="mint" z=1 /%}
+{% node #freezeTokenPayment label="Freeze Token Payment" /%}
+{% node #amount label="Amount = 300"  /%}
+{% node #mint label="Mint"  /%}
+{% node #destination-ata label="Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node #freezeEscrow-PDA4 parent="destination-ata" x="300" y="-8" theme="slate" %}
+  Freeze Escrow PDA
+{% /node %}
+{% edge from="destination-ata" to="freezeEscrow-PDA4" arrow="none" dashed=true path="straight" /%}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+    {% node parent="candy-guard-route" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+{% edge from="mint-candy-guard" to="freezeEscrow-PDA4" theme="pink" toPosition="top"/%}
+{% node parent="freezeEscrow-PDA4" y="-250" x="90" theme="transparent" %}
+  300トークンを
+
+  Freeze Escrow の
+
+  Associated Token Address に転送
+{% /node %}
+
+{% node parent="mint-candy-guard" y="150" x="2" %}
+  {% node #mint-candy-machine theme="pink" %}
+    Mint
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Core Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="120" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+
+{% edge from="mint-candy-machine" to="frozen-Asset" path="straight" /%}
+{% node #frozen-Asset parent="mint-candy-machine" y="120" x="31" theme="slate" %}
+  凍結された Asset
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="Freeze Escrow を初期化" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、最大凍結期間を15日間として Freeze Escrow アカウントを初期化し、現在の identity を Core Candy Guard 権限として使用しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: "freezeTokenPayment",
+  routeArgs: {
+    path: "initialize",
+    mint: tokenMint.publicKey,
+    destinationAta,
+    period: 15 * 24 * 60 * 60, // 15日間。
+    candyGuardAuthority: umi.identity,
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+### 凍結された Asset の解凍
+
+_パス: `thaw`_
+
+凍結された Asset は、以下のいずれかの条件が満たされていれば誰でも解凍できます:
+
+- Core Candy Machine がミントアウトした。
+- Core Candy Machine が削除された。
+- 設定された凍結期間(最大30日間)が経過した。
+
+Freeze Escrow 内のトークンはすべての Asset が解凍されるまで転送不可能であるため、これにより treasury はできるだけ早くすべての Asset を解凍するインセンティブが生まれます。
+
+凍結された Asset を解凍するには、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `thaw`: ルート命令で実行するパスを選択します。
+- **Mint**: 支払いに使用する SPL Token を定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを最終的に送信する関連トークンアカウントのアドレス。
+- **Asset Address**: 解凍する凍結された Asset のミントアドレス。
+- **Asset Owner**: 解凍する凍結された Asset の所有者のアドレス。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+  Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="-3" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Candy Machine Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #guards label="Guards" theme="mint" z=1 /%}
+{% node #freezeTokenPayment label="Freeze Token Payment" /%}
+{% node #amount label="Amount = 300"  /%}
+{% node #mint label="Mint"  /%}
+{% node #destination-ata label="Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" x="427" y="-14" %}
+  {% node #candy-guard-route theme="pink" %}
+    Route with
+
+    Path = *thaw*
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Core Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="candy-guard-route" y="-20" x="80" theme="transparent" %}
+  凍結された Asset を解凍
+{% /node %}
+
+{% node #freeze-period parent="candy-guard-route" x="218" y="15" label="Freeze Escrow PDA" /%}
+{% edge from="freeze-period" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="candy-machine" to="candy-guard-route" theme="pink" /%}
+{% edge from="candy-guard" to="candy-guard-route" theme="pink" toPosition="left" /%}
+{% edge from="amount" to="candy-guard-route" theme="pink" toPosition="left" /%}
+
+
+{% edge from="candy-guard-route" to="freezeEscrow-PDA5" theme="pink" path="straight" /%}
+
+{% node #frozen-Asset parent="candy-guard-route" y="-100" x="29" label="凍結された Asset" /%}
+{% edge from="frozen-Asset" to="candy-guard-route" path="straight" /%}
+
+{% node #freezeEscrow-PDA5 parent="candy-guard-route" x="25" y="150" label="解凍された Asset" /%}
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="candy-guard-route" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="Freeze Token Payment ガードを使用して Candy Machine を設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、現在の identity に属する凍結された Asset を解凍しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: "freezeTokenPayment",
+  routeArgs: {
+    path: "thaw",
+    mint: tokenMint.publicKey,
+    destinationAta,
+    AssetMint: AssetMint.publicKey,
+    AssetOwner: umi.identity.publicKey,
+    AssetTokenStandard: candyMachine.tokenStandard,
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+### 資金のロック解除
+
+_パス: `unlockFunds`_
+
+すべての凍結された Asset が解凍されると、treasury は Freeze Escrow アカウントから資金のロックを解除できます。これにより、トークンが設定された Destination ATA アドレスに転送されます。
+
+資金のロックを解除するには、ガードのルート命令に以下の引数を提供する必要があります:
+
+- **Path** = `unlockFunds`: ルート命令で実行するパスを選択します。
+- **Mint**: 支払いに使用する SPL Token を定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを最終的に送信する関連トークンアカウントのアドレス。
+- **Candy Guard Authority**: 署名者としての Core Candy Guard アカウントの権限。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="19" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Candy Machine Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #guards label="Guards" theme="mint" z=1 /%}
+{% node #freezeTokenPayment label="Freeze Token Payment" /%}
+{% node #amount label="- Amount"  /%}
+{% node #mint label="- Mint" /%}
+{% node #destination-ata label="- Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+{% edge from="destination-ata" to="token-account" arrow="none" dashed=true arrow="none" /%}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #candy-guard-route theme="pink" %}
+    Route with
+
+    Path = *unlockFunds*
+  {% /node %}
+  {% node parent="mint-candy-guard" theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+
+{% node parent="candy-guard-route" y="-32" x="95" theme="transparent" %}
+  エスクローから
+
+  資金のロックを解除
+{% /node %}
+
+{% node #freeze-escrow parent="candy-guard-route" y="100" x="2" label="Freeze Escrow PDA" /%}
+{% edge from="freeze-escrow" to="candy-guard-route" theme="pink" path="straight" /%}
+
+{% edge from="guards" to="candy-guard-route" theme="pink" toPosition="top" /%}
+
+{% node parent="candy-guard" x="300" y="29" %}
+{% node #mint-account label="Mint Account" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="mint" to="mint-account" arrow="none" dashed=true arrow="none" /%}
+{% edge from="mint-account" to="token-account" /%}
+
+{% node parent="mint-account" y="100" %}
+{% node #token-account theme="blue" %}
+Token Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+所有者: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="token-account" y="90" x="-40" %}
+{% node #destination-wallet label="Destination Wallet" theme="indigo" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program  {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="token-account" to="destination-wallet" arrow="none" /%}
+{% edge from="candy-guard-route" to="token-account" theme="pink" /%}
+{% node parent="token-account" theme="transparent" x="210" y="-20" %}
+Freeze Escrow Account から
+
+すべての資金を転送
+{% /node %}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+
+{% /diagram %}
+
+{% seperator h="6" /%}
+
+{% dialect-switcher title="Freeze Token Payment ガードを使用して Candy Machine を設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+以下の例では、現在の identity を Candy Guard 権限として使用し、Freeze Escrow アカウントから資金のロックを解除しています。
+
+```ts
+route(umi, {
+  // ...
+  guard: 'freezeTokenPayment',
+  routeArgs: {
+    path: 'unlockFunds',
+    destination,
+    candyGuardAuthority: umi.identity,
+  },
+})
+```
+
+API リファレンス: [route](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/route.html), [freezeTokenPaymentRouteArgsUnlockFunds](https://mpl-core-candy-machine.typedoc.metaplex.com/types/FreezeTokenPaymentRouteArgsUnlockFunds.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Asset の凍結を停止
+
+Freeze Token Payment ガード内で Asset の凍結を停止することが可能です。つまり、新しくミントされる Asset は凍結されなくなりますが、**既存の凍結された Asset は凍結されたまま**です。
+
+これを実現するにはいくつかの方法があり、2つのカテゴリに分けることができます:
+
+- ☀️ **解凍可能**: 既存の凍結された Asset は、ルート命令の `thaw` パスを使用して誰でも解凍できます。
+- ❄️ **解凍不可**: 既存の凍結された Asset はまだ解凍できず、「解凍可能」の条件の1つが満たされるまで待つ必要があります。
+
+これを念頭に置いて、Asset の凍結を停止する方法と、それぞれが既存の凍結された Asset の解凍を許可するかどうかの完全なリストは以下の通りです:
+
+- Candy Machine がミントアウトした → ☀️ **解凍可能**。
+- 設定された凍結期間(最大30日間)が経過した → ☀️ **解凍可能**。
+- Candy Machine アカウントが削除された → ☀️ **解凍可能**。
+- Candy Guard アカウントが削除された → ❄️ **解凍不可**。
+- Freeze Token Payment ガードが設定から削除された → ❄️ **解凍不可**。
+
+## Freeze Escrow とガードグループ
+
+様々な[ガードグループ](/core-candy-machine/guard-groups)内で複数の Freeze Token Payment ガードを使用する場合、Freeze Token Payment ガードと Freeze Escrow アカウントの関係を理解することが重要です。
+
+Freeze Escrow アカウントは Destination アドレスから派生した PDA です。つまり、**複数の Freeze Token Payment ガード**が**同じ Destination アドレス**を使用するように設定されている場合、それらはすべて**同じ Freeze Escrow アカウントを共有**します。
+
+したがって、それらは同じ凍結期間を共有し、すべての資金は同じエスクローアカウントによって収集されます。これはまた、設定された Destination アドレスごとに `initialize` ルート命令を1回だけ呼び出す必要があることを意味します。これは、ルート命令が設定された Destination アドレスごとに1回だけ必要であることを意味します。`unlockFunds` についても同様です。`thaw` するには、同じエスクローアカウントを共有している限り、どのラベルでも使用できます。
+
+異なる Destination アドレスを持つ複数の Freeze Token Payment ガードを使用することも可能です。この場合、各 Freeze Token Payment ガードは独自の Freeze Escrow アカウントと独自の凍結期間を持ちます。
+
+以下の例は、3つのグループに3つの Freeze Token Payment ガードを持つ Candy Machine を示しています:
+
+- グループ1と2は同じ Destination アドレスを共有しているため、同じ Freeze Escrow アカウントを共有します。
+- グループ3は独自の Destination アドレスを持っているため、独自の Freeze Escrow アカウントを持ちます。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+所有者: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="21" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="所有者: Candy Guard Program" theme="dimmed" /%}
+{% node #guards label="Guard Group 1" theme="mint" /%}
+{% node #freezeTokenPayment label="Freeze Token Payment" /%}
+{% node #amount label="Amount = 300" /%}
+{% node #mint label="Mint" /%}
+{% node #destination-ata label="Destination ATA A" /%}
+{% node label="..." /%}
+{% node #guards-2 label="Guard Group 2" theme="mint" /%}
+{% node #freezeTokenPayment-2 label="Freeze Token Payment" /%}
+{% node #amount-2 label="Amount = 300" /%}
+{% node #mint-2 label="Mint" /%}
+{% node #destination-2 label="Destination ATA A" /%}
+{% node label="..." /%}
+{% node #guards-3 label="Guard Group 3" theme="mint" /%}
+{% node #freezeTokenPayment-3 label="Freeze Token Payment" /%}
+{% node #amount-3 label="Amount = 300" /%}
+{% node #mint-3 label="Mint" /%}
+{% node #destination-3 label="Destination ATA B" /%}
+{% node label="..." /%}
+{% /node %}
+{% /node %}
+
+{% node #freezeEscrow-PDA-A parent="destination-ata" x="213" y="-23" %}
+  Freeze Escrow PDA
+
+  Destination A 用
+{% /node %}
+{% edge from="destination-ata" to="freezeEscrow-PDA-A" arrow="none" dashed=true path="straight" /%}
+{% edge from="destination-2" to="freezeEscrow-PDA-A" arrow="none" dashed=true toPosition="bottom" /%}
+
+{% node parent="freezeEscrow-PDA-A" y="-125" x="-4" %}
+  {% node #route-init-a theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+  {% node theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="route-init-a" y="-20" x="50" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+{% edge from="route-init-a" to="freezeEscrow-PDA-A" theme="pink" path="straight" /%}
+
+{% node #freeze-period-a parent="route-init-a" x="240" y="15" theme="slate" %}
+  Freeze Period A
+{% /node %}
+{% edge from="freeze-period-a" to="route-init-a" theme="pink" path="straight" /%}
+
+{% node #freezeEscrow-PDA-B parent="destination-3" x="420" y="-22" %}
+  Freeze Escrow PDA
+
+  Destination B 用
+{% /node %}
+{% edge from="destination-3" to="freezeEscrow-PDA-B" arrow="none" dashed=true path="straight" /%}
+
+{% node parent="freezeEscrow-PDA-B" y="-125" x="-4" %}
+  {% node #route-init-b theme="pink" %}
+    Route with
+
+    Path = *Initialize*
+  {% /node %}
+  {% node theme="pink" %}
+    Candy Machine Guard Program {% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="route-init-b" y="-20" x="50" theme="transparent" %}
+  Freeze Escrow の初期化
+{% /node %}
+{% edge from="route-init-b" to="freezeEscrow-PDA-B" theme="pink" path="straight" /%}
+
+{% node #freeze-period-b parent="route-init-b" x="240" y="15" theme="slate" %}
+  Freeze Period B
+{% /node %}
+{% edge from="freeze-period-b" to="route-init-b" theme="pink" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+
+{% /diagram %}

+ 173 - 0
src/pages/ja/core-candy-machine/guards/gatekeeper.md

@@ -0,0 +1,173 @@
+---
+title: "Gatekeeperガード"
+metaTitle: "Gatekeeperガード | Core Candy Machine"
+description: "Core Candy Machineの`Gatekeeper`ガードは、ミントを行うウォレットが指定されたGatekeeper Networkから有効なGateway Tokenを持っているかどうかを確認します。"
+---
+
+## 概要
+
+**Gatekeeper**ガードは、ミントを行うウォレットが指定された**Gatekeeper Network**から有効な**Gateway Token**を持っているかどうかを確認します。
+
+ほとんどの場合、このトークンはCaptchaチャレンジを完了した後に取得されますが、任意のGatekeeper Networkを使用できます。
+
+Core Candy Machine側で設定することはあまりありませんが、選択したGatekeeper Networkによっては、必要なGateway Tokenを付与するために、ミントを行うウォレットに事前検証チェックを実行するよう求める必要がある場合があります。
+
+Gatekeep Networkを設定する際に役立つ追加の推奨資料をいくつか紹介します。
+
+- [The CIVIC Documentation](https://docs.civic.com/civic-pass/overview)
+- [Gateway JS Library](https://www.npmjs.com/package/@identity.com/solana-gateway-ts)
+- [Gateway React Components](https://www.npmjs.com/package/@civic/solana-gateway-react)
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node label="Owner: Core Candy Machine Core Program" theme="dimmed" /%}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node label="Owner: Candy Guard Program" theme="dimmed" /%}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #gatekeeper label="Gatekeeper" /%}
+{% node #gatekeeper-network label="- Gatekeeper Network" /%}
+{% node #expire label="- Expire on use" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="gatekeeper" x="250" y="-17" %}
+{% node #request-token theme="indigo" %}
+Gatekeeperネットワーク
+
+からGateway Tokenを
+
+リクエスト(例: Captcha)
+{% /node %}
+{% /node %}
+
+{% node parent="request-token" y="140" x="34" %}
+{% node #gateway-token theme="indigo" label="Gateway Token" /%}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" y="150" x="-30" %}
+  {% node #mint-candy-machine theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="92" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="gatekeeper-network" to="request-token" /%}
+{% edge from="request-token" to="gateway-token" /%}
+
+{% edge from="gateway-token" to="mint-candy-guard" arrow="none" dashed=true /%}
+{% node theme="transparent" parent="mint-candy-guard" x="-210" %}
+指定されたNetworkと支払者に対して
+
+有効なトークンが存在しない場合、
+
+ミントは失敗します
+{% /node %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+
+{% /diagram %}
+## ガード設定
+
+Gatekeeperガードには以下の設定が含まれます:
+
+- **Gatekeeper Network**: ミントを行うウォレットの有効性を確認するために使用されるGatekeeper NetworkのPublic Key。たとえば、「**Civic Captcha Pass**」Network(ミントを行うウォレットがCaptchaを通過したことを確認する)を使用する場合は、次のアドレスを使用できます: `ignREusXmGrscGNUesoU9mxfds9AiYTezUKex2PsZV6`。
+- **Expire On Use**: NFTがミントされた後、ミントを行うウォレットのGateway Tokenを期限切れとしてマークするかどうか。
+  - `true`に設定すると、別のNFTをミントするには、再度Gatekeeper Networkを通過する必要があります。
+  - `false`に設定すると、Gateway Tokenが自然に期限切れになるまで別のNFTをミントできます。
+
+{% dialect-switcher title="Gatekeeperガードを使用してCore Candy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    gatekeeper: some({
+      network: publicKey("ignREusXmGrscGNUesoU9mxfds9AiYTezUKex2PsZV6"),
+      expireOnUse: true,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [Gatekeeper](https://mpl-core-candy-machine.typedoc.metaplex.com/types/Gatekeeper.html)
+
+{% /totem %}
+{% /dialect %}
+{% dialect title="Sugar" id="sugar" %}
+{% totem %}
+
+config.jsonファイルのガードセクションにこのオブジェクトを追加します:
+
+```json
+"gatekeeper" : {
+    "gatekeeperNetwork": "<PUBKEY>",
+    "expireOnUse": boolean
+}
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Gatekeeperガードは以下のミント設定を受け入れます:
+
+- **Gatekeeper Network**: ミントを行うウォレットの有効性を確認するために使用されるGatekeeper NetworkのPublic Key。
+- **Expire On Use**: NFTがミントされた後、ミントを行うウォレットのGateway Tokenを期限切れとしてマークするかどうか。
+- **Token Account** (オプション): 免責事項として、この設定を提供する必要があることは非常にまれですが、必要な場合に備えてここにあります。これは、支払者とGatekeeper Networkから派生したGateway Token PDAを参照し、支払者がミントする資格があるかどうかを確認するために使用されます。このPDAアドレスはSDKによって推論できるため、提供する必要はありません。ただし、一部のGatekeeper Networkは同じウォレットに複数のGateway Tokenを発行する場合があります。PDAアドレスを区別するために、デフォルトで`[0, 0, 0, 0, 0, 0, 0, 0]`である**Seeds**配列を使用します。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#gatekeeper)を参照してください。
+
+{% dialect-switcher title="Gatekeeperガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+GatekeeperガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    gatekeeper: some({
+      network: publicKey("ignREusXmGrscGNUesoU9mxfds9AiYTezUKex2PsZV6"),
+      expireOnUse: true,
+    }),
+  },
+});
+```
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Gatekeeperガードはルート命令をサポートしていません。_

+ 156 - 0
src/pages/ja/core-candy-machine/guards/mint-limit.md

@@ -0,0 +1,156 @@
+---
+title: Mint Limitガード
+metaTitle: "Mint Limitガード | Core Candy Machine"
+description: "Core Candy Machineの「Mint Limit」ガードは、各ウォレットがミントできるアセットの数に制限を指定できます。"
+---
+
+## 概要
+
+**Mint Limit**ガードは、各ウォレットがミントできるアセットの数に制限を指定できます。
+
+制限は、ウォレットごと、Candy Machineごと、設定で提供される識別子ごとに設定され、同じCore Candy Machine内で複数のミント制限を許可します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #mintLimit label="MintLimit" /%}
+{% node #limit label="- Limit" /%}
+{% node #id label="- ID" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="id" x="270" y="-9"  %}
+{% node #mintCounterPda %}
+Mint Counter PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="payer" to="mintCounterPda" path="straight" /%}
+{% edge from="id" to="mintCounterPda" /%}
+
+{% node parent="mintCounterPda" x="18" y="100" %}
+{% node #payer label="Payer" theme="indigo" /%}
+{% node label="Owner: Any Program" theme="dimmed" /%}
+{% /node %}
+
+{% edge from="mintLimit" to="mint-candy-guard" theme="indigo" dashed=true/%}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-30" %}
+  {% node  theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="90" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Mint Limitガードには以下の設定が含まれます:
+
+- **ID**: このガードの一意の識別子。異なる識別子は、特定のウォレットによってミントされたアイテムの数を追跡するために異なるカウンターを使用します。これは、ガードのグループを使用する場合に特に便利で、それぞれに異なるミント制限を持たせることができます。
+- **Limit**: その識別子のウォレットごとに許可される最大ミント数。
+
+{% dialect-switcher title="Mint Limitガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    mintLimit: some({ id: 1, limit: 5 }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [MintLimit](https://mpl-core-candy-machine.typedoc.metaplex.com/types/MintLimit.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Mint Limitガードには以下のミント設定が含まれます:
+
+- **ID**: このガードの一意の識別子。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#mintlimit)を参照してください。
+
+{% dialect-switcher title="Mint Limitガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Mint LimitガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    mintLimit: some({ id: 1 }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Mint Limitガードはルート命令をサポートしていません。_
+
+## MintLimitアカウント
+`MintLimit`ガードを使用すると、各ウォレット、CandyMachine、および`id`の組み合わせに対して`MintCounter`アカウントが作成されます。検証目的で次のようにフェッチできます:
+
+```js
+import { safeFetchMintCounterFromSeeds } from "@metaplex-foundation/mpl-core-candy-machine";
+import { umi } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const mintCounter = await safeFetchMintCounterFromSeeds(umi, {
+  id: 1, // ガード設定で設定したmintLimitのid
+  user: umi.identity.publicKey,
+  candyMachine: candyMachine.publicKey,
+  // または candyMachine: publicKey("Address") でCMアドレスを指定
+  candyGuard: candyMachine.mintAuthority,
+  // または candyGuard: publicKey("Address") でcandyGuardアドレスを指定
+});
+
+// 既にミントされた量
+console.log(mintCounter.count)
+```

+ 147 - 0
src/pages/ja/core-candy-machine/guards/nft-burn.md

@@ -0,0 +1,147 @@
+---
+title: "NFT Burnガード"
+metaTitle: "NFT Burnガード  | Core Candy Machine"
+description: "Core Candy Machineの「NFT Burn」ガードは、事前定義されたToken Metadata NFT/pNFTコレクションの保有者へのミントを制限し、購入中に保有者のNFTをバーンします。"
+---
+
+## 概要
+
+**NFT Burn**ガードは、事前定義されたNFTコレクションの保有者へのミントを制限し、保有者のNFTをバーンします。したがって、バーンするNFTのミントアドレスは、ミント時に支払者によって提供される必要があります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #nftBurn label="nftBurn" /%}
+{% node #requiredCollection label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="requiredCollection" x="270" y="-23"  %}
+{% node #collectionNftMint theme="blue" %}
+Collection NFT {% .whitespace-nowrap %}
+
+Mint Account
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Metadata Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="requiredCollection" to="collectionNftMint" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+このコレクションから
+
+1つのNFTをバーン
+{% /edge %}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="70" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+NFT Burnガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なNFTコレクションのミントアドレス。ミントに使用するNFTは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="NFT Burnガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    nftBurn: some({ requiredCollection: requiredCollectionNft.publicKey }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [NftBurn](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftBurn.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+NFT Burnガードには以下のミント設定が含まれます:
+
+- **Required Collection**: 必要なNFTコレクションのミントアドレス。
+- **Mint**: バーンするNFTのミントアドレス。これは、必要なコレクションの一部であり、ミンターに属している必要があります。
+- **Token Standard**: バーンするNFTのトークン標準。
+- **Token Account** (オプション): NFTとその所有者を明示的にリンクするトークンアカウントをオプションで提供できます。デフォルトでは、支払者の関連トークンアカウントが使用されます。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#nftburn)を参照してください。
+
+{% dialect-switcher title="NFT Burnガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+NFT BurnガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+import { TokenStandard } from "@metaplex-foundation/mpl-token-metadata";
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    nftBurn: some({
+      requiredCollection: requiredCollectionNft.publicKey,
+      mint: nftToBurn.publicKey,
+      tokenStandard: TokenStandard.NonFungible,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [NftBurnMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftBurnMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_NFT Burnガードはルート命令をサポートしていません。_

+ 143 - 0
src/pages/ja/core-candy-machine/guards/nft-gate.md

@@ -0,0 +1,143 @@
+---
+title: "NFT Gateガード"
+metaTitle: "NFT Gateガード | Core Candy Machine"
+description: "Core Candy Machineの「NFT Gate」ガードは、指定されたNFT/pNFTコレクションの保有者へのミントを制限します。"
+---
+
+## 概要
+
+**NFT Gate**ガードは、指定されたNFTコレクションの保有者へのミントを制限します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="nftGate" /%}
+{% node #requiredCollection label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="requiredCollection" x="270" y="-23"  %}
+{% node #collectionNftMint theme="blue" %}
+Collection NFT {% .whitespace-nowrap %}
+
+Mint Account
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Metadata Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="requiredCollection" to="collectionNftMint" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+支払者がこのコレクション
+
+から1つのNFTを
+
+持っていることを確認
+{% /edge %}
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="71" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+NFT Gateガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なNFTコレクションのミントアドレス。ミント時に証明として提供するNFTは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="NFT Gateガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    nftGate: some({
+      requiredCollection: requiredCollectionNft.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [NftGate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftGate.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+NFT Gateガードには以下のミント設定が含まれます:
+
+- **Mint**: 支払者が必要なコレクションからNFTを所有していることを証明するために提供するNFTのミントアドレス。
+- **Token Account** (オプション): NFTとその所有者を明示的にリンクするトークンアカウントをオプションで提供できます。デフォルトでは、支払者の関連トークンアカウントが使用されます。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#nftgate)を参照してください。
+
+{% dialect-switcher title="NFT Gateガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Umiライブラリを介してミントする場合は、次のように`mint`属性を介して所有権の証明として使用するNFTのミントアドレスを提供するだけです。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    nftGate: some({ mint: nftToBurn.publicKey }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [NftGateMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftGateMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_NFT Gateガードはルート命令をサポートしていません。_

+ 160 - 0
src/pages/ja/core-candy-machine/guards/nft-mint-limit.md

@@ -0,0 +1,160 @@
+---
+title: "NFT Mint Limitガード"
+metaTitle: "NFT Mint Limitガード | Core Candy Machine"
+description: "Core Candy Machineの「NFT Mint Limit」ガードは、指定されたNFT/pNFTコレクションの保有者へのミントを制限し、提供されたNFTに対してミントできるアセットの量を制限します。"
+---
+
+## 概要
+
+NFT Mint Limitガードは、指定されたNFTコレクションの保有者へのミントを制限し、提供されたToken Metadata NFTに対して実行できるミントの量を制限します。これは、ウォレットの代わりにNFTアドレスに基づいた[NFT Gate](/core-candy-machine/guards/nft-gate)と[Mint Limit](/core-candy-machine/guards/mint-limit)ガードの組み合わせと考えることができます。
+
+制限は、NFTコレクションごと、Candy Machineごと、設定で提供される識別子ごとに設定され、同じCore Candy Machine内で複数のNFTミント制限を許可します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #mintLimit label="NftMintLimit" /%}
+{% node #limit label="- Limit" /%}
+{% node #id label="- ID" /%}
+{% node label="- Required Collection" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="id" x="270" y="-9"  %}
+{% node #nftMintCounterPda %}
+NFT Mint Counter PDA {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="id" to="nftMintCounterPda" /%}
+
+{% node #nft parent="nftMintCounterPda" x="0" y="40"  label="Seeds: candyGuard, candyMachine, id, mint" theme="transparent"  /%}
+
+{% edge from="mintLimit" to="mint-candy-guard" theme="indigo" dashed=true/%}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-30" %}
+  {% node  theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #asset parent="mint-candy-machine" y="140" x="90" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="asset" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Mint Limitガードには以下の設定が含まれます:
+
+- **ID**: このガードの一意の識別子。異なる識別子は、特定のNFTを提供することでミントされたアイテムの数を追跡するために異なるカウンターを使用します。これは、ガードのグループを使用する場合に特に便利で、それぞれに異なるミント制限を持たせることができます。
+- **Limit**: その識別子のNFTごとに許可される最大ミント数。
+- **Required Collection**: 必要なNFTコレクションのミントアドレス。ミント時に証明として提供するNFTは、このコレクションの一部である必要があります。
+
+{% dialect-switcher title="NFT Mint Limitガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    nftMintLimit: some({
+      id: 1,
+      limit: 5,
+      requiredCollection: requiredCollectionNft.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [MintLimit](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftMintLimit.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+NFT Mint Limitガードには以下のミント設定が含まれます:
+
+- **ID**: このガードの一意の識別子。
+- **Mint**: 支払者が必要なコレクションからNFTを所有していることを証明するために提供するNFTのミントアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#nftmintlimit)を参照してください。
+
+{% dialect-switcher title="NFT Mint Limitガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Mint LimitガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    nftMintLimit: some({ id: 1, mint: nftToVerify.publicKey }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_NFT Mint Limitガードはルート命令をサポートしていません。_
+
+## NftMintLimitアカウント
+`NftMintLimit`ガードを使用すると、各NFT、CandyMachine、および`id`の組み合わせに対して`NftMintCounter`アカウントが作成されます。検証目的で次のようにフェッチできます:
+
+```js
+import {
+  findNftMintCounterPda,
+  fetchNftMintCounter
+ } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const pda = findNftMintCounterPda(umi, {
+  id: 1, // ガード設定で設定したnftMintLimitのid
+  mint: asset.publicKey, // ユーザーが所有するNFTのアドレス
+  candyMachine: candyMachine.publicKey,
+  // または candyMachine: publicKey("Address") でCMアドレスを指定
+  candyGuard: candyMachine.mintAuthority
+  // または candyGuard: publicKey("Address") でcandyGuardアドレスを指定
+});
+
+const nftMintCounter = fetchNftMintCounter(umi, pda)
+```

+ 168 - 0
src/pages/ja/core-candy-machine/guards/nft-payment.md

@@ -0,0 +1,168 @@
+---
+title: "NFT Paymentガード"
+metaTitle: "NFT Paymentガード | Core Candy Machine"
+description: "Core Candy Machineの「NFT Payment」ガードは、支払者に指定されたNFTコレクションからNFT/pNFTを請求することでミントを許可します。支払いとして使用されるNFT/pNFTは、事前定義された宛先に転送されます。"
+---
+
+## 概要
+
+**NFT Payment**ガードは、支払者に指定されたNFTコレクションからNFTを請求することでミントを許可します。NFTは事前定義された宛先に転送されます。
+
+支払者が必要なコレクションからNFTを所有していない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="nftPayment" /%}
+{% node #guardRequiredCollection label="- Required Collection" /%}
+{% node #guardDestinationWallet label="- Destination Wallet" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardRequiredCollection" #collectionNftMint x="270" y="-100"  %}
+{% node theme="blue" %}
+Collection NFT {% .whitespace-nowrap %}
+
+Mint Account
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Metadata Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardRequiredCollection" to="collectionNftMint" /%}
+
+{% node parent="guardDestinationWallet" #destinationWallet x="300"  %}
+{% node theme="blue" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="guardDestinationWallet" to="destinationWallet" /%}
+
+
+{% edge from="collectionNftMint" to="mint-candy-guard" theme="indigo" dashed=true arrow="none" %}
+このコレクションから
+
+1つのNFTを転送
+{% /edge %}
+
+{% edge from="mint-candy-guard" to="destinationWallet" theme="indigo" %}
+{% /edge %}
+{% node parent="candy-machine" #mint-candy-guard x="600" %}
+  {% node theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="92" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+NFT Paymentガードには以下の設定が含まれます:
+
+- **Required Collection**: 必要なNFTコレクションのミントアドレス。支払いに使用するNFTは、このコレクションの一部である必要があります。
+- **Destination**: すべてのNFTを受け取るウォレットのアドレス。
+
+{% dialect-switcher title="NFT Paymentガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    nftPayment: some({
+      requiredCollection: requiredCollectionNft.publicKey,
+      destination: umi.identity.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [NftPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftPayment.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+NFT Paymentガードには以下のミント設定が含まれます:
+
+- **Destination**: すべてのNFTを受け取るウォレットのアドレス。
+- **Mint**: 支払いに使用するNFTのミントアドレス。これは、必要なコレクションの一部であり、ミンターに属している必要があります。
+- **Token Standard**: 支払いに使用するNFTのトークン標準。
+- **Token Account** (オプション): NFTとその所有者を明示的にリンクするトークンアカウントをオプションで提供できます。デフォルトでは、支払者の関連トークンアカウントが使用されます。
+- **Rule Set** (オプション): Rule Setを持つProgrammable NFTで支払う場合の、支払いに使用するNFTのRule Set。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#nftpayment)を参照してください。
+
+{% dialect-switcher title="NFT Paymentガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+NFT PaymentガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+import { TokenStandard } from "@metaplex-foundation/mpl-token-metadata";
+
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    nftPayment: some({
+      destination,
+      mint: nftToPayWith.publicKey,
+      tokenStandard: TokenStandard.NonFungible,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [NftPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/NftPaymentMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_NFT Paymentガードはルート命令をサポートしていません。_

+ 103 - 0
src/pages/ja/core-candy-machine/guards/program-gate.md

@@ -0,0 +1,103 @@
+---
+title: "Program Gateガード"
+metaTitle: "Program Gateガード | Core Candy Machine"
+description: "Core Candy Machineの「Program Gate」ガードは、ミントトランザクション中に使用できるプログラムを制限します。"
+---
+
+## 概要
+
+**Program Gate**ガードは、ミントトランザクションに含めることができるプログラムを制限します。これは、ミントと同じトランザクション内で任意のプログラムから悪意のある命令を追加するボットを防ぐのに役立ちます。
+
+このガードは、ミントに必要なプログラムと、設定で指定された他のプログラムを許可します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="21" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #addressGate label="ProgramGate" /%}
+{% node #additional label="- additional" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" #mint-candy-guard x="595" %}
+  {% node theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-10" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="additional" to="mint-candy-guard" arrow="none" dashed=true %}
+ミントトランザクションに追加の
+
+プログラムからの命令が含まれている場合、
+
+ミントは失敗します
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Program Gateガードには以下の設定が含まれます:
+
+- **Additional**: ミントトランザクションに命令を含めることが許可される追加のプログラムアドレスのリスト(最大5つのアドレス)。
+
+{% dialect-switcher title="Program Gateガードを使用してCore Candy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    programGate: some({ additional: [<PUBKEY 1>, <PUBKEY 2>, ..., <PUBKEY 5>] }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [ProgramGate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/ProgramGate.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_Program Gateガードはミント設定を必要としません。_
+
+## ルート命令
+
+_Program Gateガードはルート命令をサポートしていません。_

+ 136 - 0
src/pages/ja/core-candy-machine/guards/redeemed-amount.md

@@ -0,0 +1,136 @@
+---
+title: "Redeemed Amountガード"
+metaTitle: "Redeemed Amountガード | Core Candy Machine"
+description: "Core Candy Machineの「Redeemed Amount」ガードは、Core Candy Machine全体でミントされたアセットの数が設定された最大量に達したときにミントを禁止します。"
+---
+
+## 概要
+
+**Redeemed Amount**ガードは、Core Candy Machine全体でミントされたアセットの数が設定された最大量に達したときにミントを禁止します。
+
+このガードは、[ガードグループ](/core-candy-machine/guard-groups)と一緒に使用するとより面白くなります。グループにグローバルなミントしきい値を追加できるためです。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="21" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #redeemedAmount label="RedeemedAmount" /%}
+{% node #maximum label="- maximum" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" #mint-candy-guard x="595" %}
+  {% node theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="maximum" to="mint-candy-guard" arrow="none" dashed=true %}
+その量のアセットが
+
+ミントされると、
+
+ミントは失敗します
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Redeemed Amountガードには以下の設定が含まれます:
+
+- **Maximum**: ミントできるNFTの最大量。
+
+{% dialect-switcher title="Redeemed Amountガードを使用してCore Candy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  itemsAvailable: 500,
+  guards: {
+    redeemedAmount: some({ maximum: 300 }),
+  },
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+Candy Machineに500アイテムが含まれていても、このガードのために300アイテムしかミント可能にならないことに注意してください。
+
+したがって、このガードは[ガードグループ](/core-candy-machine/guard-groups)を使用する際により便利になります。以下は、2つのグループを使用した別の例で、最初の300アセットは1 SOLでミントできますが、最後の200は2 SOLが必要です。
+
+{% dialect-switcher title="グループを使用したRedeemed Amountガードの例" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  itemsAvailable: 500,
+  groups: [
+    {
+      label: "early",
+      guards: {
+        redeemedAmount: some({ maximum: 300 }),
+        solPayment: some({ lamports: sol(1), destination: treasury }),
+      },
+    },
+    {
+      label: "late",
+      guards: {
+        solPayment: some({ lamports: sol(2), destination: treasury }),
+      },
+    },
+  ],
+});
+```
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_Redeemed Amountガードはミント設定を必要としません。_
+
+## ルート命令
+
+_Redeemed Amountガードはルート命令をサポートしていません。_

+ 141 - 0
src/pages/ja/core-candy-machine/guards/sol-fixed-fee.md

@@ -0,0 +1,141 @@
+---
+title: Sol Fixed Feeガード
+metaTitle: Sol Fixed Feeガード | Core Candy Machine
+description: Core Candy Machineの「Sol Fixed Fee」ガードは、ミント時に支払者にSOLでの金額を請求します
+---
+
+## 概要
+
+**Sol Fixed Fee**ガードは、ミント時に支払者にSOLでの金額を請求できます。SOLの金額と宛先アドレスの両方を設定できます。[Sol Payment](/core-candy-machine/guards/sol-payment)ガードと同様に機能します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Sol Fixed Fee" /%}
+{% node #amount label="- Amount" /%}
+{% node #destination label="- Destination" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="destination" x="270" y="-9" %}
+{% node #payer theme="indigo" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="72" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="destination" to="payer" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="payer" %}
+支払者から
+
+SOLを転送
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Sol Paymentガードには以下の設定が含まれます:
+
+- **Lamports**: 支払者に請求するSOL(またはlamports)の金額。
+- **Destination**: このガードに関連するすべての支払いを受け取るウォレットのアドレス。
+
+{% dialect-switcher title="Sol Paymentガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+この例では、現在のアイデンティティを宛先ウォレットとして使用していることに注意してください。
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    solFixedFee: some({
+      lamports: sol(1.5),
+      destination: umi.identity.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [SolFixedFee](https://mpl-core-candy-machine.typedoc.metaplex.com/types/SolFixedFee.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Sol Fixed Feeガードには以下のミント設定が含まれます:
+
+- **Destination**: このガードに関連するすべての支払いを受け取るウォレットのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#solfixedfee)を参照してください。
+
+{% dialect-switcher title="Sol Fixed Feeガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Sol Fixed FeeガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    solFixedFee: some({ destination: treasury }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [SolFixedFeeMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/SolFixedFeeMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Sol Fixed Feeガードはルート命令をサポートしていません。_

+ 99 - 0
src/pages/ja/core-candy-machine/guards/start-date.md

@@ -0,0 +1,99 @@
+---
+title: "Start Date ガード"
+metaTitle: Start Date ガード | Core Candy Machine
+description: "Core Candy Machine の 'Start Date' ガードは、Core Candy Machine またはフェーズのミント開始日を決定します。"
+---
+
+## 概要
+
+**Start Date** ガードは、ミントの開始日を決定します。この日付より前は、ミントが許可されません。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node label="Owner: Core Candy Machine Core Program" theme="dimmed" /%}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="22" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node label="Owner: Core Candy Guard Program" theme="dimmed" /%}
+{% node #candy-guard-guards label="Guards" theme="mint"/%}
+{% node #startDate label="startDate" /%}
+{% node #date label="- Date" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="candy-machine" #mint-candy-guard x="500" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Core Candy Guard Program_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  Access Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-8" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Core Candy Machine Program_
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="150" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="120" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" /%}
+{% edge from="date" to="mint-candy-guard" arrow="none" dashed=true %}
+Before that date
+
+minting will fail
+{% /edge %}
+
+{% edge from="candy-guard-guards" to="guards" /%}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Start Date ガードには以下の設定が含まれます:
+
+- **Date**: この日付より前はミントが許可されません。
+
+{% dialect-switcher title="Start Date ガードを使用した Core Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+import { dateTime } from "@metaplex-foundation/umi";
+
+create(umi, {
+  // ...
+  guards: {
+    startDate: some({ date: dateTime("2022-01-24T15:30:00.000Z") }),
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [StartDate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/StartDate.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_Start Date ガードはミント設定を必要としません。_
+
+## Route 命令
+
+_Start Date ガードは route 命令をサポートしません。_

+ 137 - 0
src/pages/ja/core-candy-machine/guards/third-party-signer.md

@@ -0,0 +1,137 @@
+---
+title: Third Party Signer ガード
+metaTitle: Third Party Signer ガード | Core Candy Machine
+description: "Core Candy Machine の 'Third Party Signer' ガードは、各ミントトランザクションに事前定義されたアドレスの署名を要求し、署名がない場合はトランザクションが失敗します。"
+---
+
+## 概要
+
+**Third Party Signer** ガードは、各ミントトランザクションに事前定義されたアドレスの署名を要求します。署名者は、このガードのミント設定内で渡す必要があります。
+
+これにより、すべてのミントトランザクションが特定の署名者を経由する必要がある、より集中化されたミントが可能になります。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Third Party Signer" /%}
+{% node #guardSigner label="- Signer" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardSigner" #signer x="270" y="-19" %}
+{% node  theme="indigo" %}
+Signer {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Any Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    Mint from
+
+    _Core Candy Guard Program_{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  Access Control
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    Mint from
+
+    _Core Candy Machine Program_{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  Mint Logic
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="guardSigner" to="signer" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="signer" arrow="none" dashed=true  theme="pink" %}
+If this Signer Account does not
+
+sign the mint transaction
+
+minting will fail
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+## ガード設定
+
+Third Party Signer ガードには以下の設定が含まれます:
+
+- **Signer Key**: 各ミントトランザクションに署名する必要がある署名者のアドレス。
+
+{% dialect-switcher title="Third Party Signer ガードを使用した Candy Machine の設定" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+const myConfiguredSigner = generateSigner(umi);
+
+create(umi, {
+  // ...
+  guards: {
+    thirdPartySigner: some({ signerKey: myConfiguredSigner.publicKey }),
+  },
+});
+```
+
+API リファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [ThirdPartySigner](https://mpl-core-candy-machine.typedoc.metaplex.com/types/ThirdPartySigner.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Third Party Signer ガードには以下のミント設定が含まれます:
+
+- **Signer**: 必須のサードパーティ署名者。この署名者のアドレスは、ガード設定の Signer Key と一致する必要があります。
+
+{% dialect-switcher title="Third Party Signer ガードを使用したミント" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Umi ライブラリを介してミントする場合は、次のように `signer` 属性を介してサードパーティ署名者を提供するだけです。
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    thirdPartySigner: some({ signer: myConfiguredSigner }),
+  },
+});
+```
+
+myConfiguredSigner キーペアでトランザクションに署名することも忘れないでください。
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Route 命令
+
+_Third Party Signer ガードは route 命令をサポートしません。_

+ 139 - 0
src/pages/ja/core-candy-machine/guards/token-burn.md

@@ -0,0 +1,139 @@
+---
+title: Token Burnガード
+metaTitle: Token Burnガード | Core Candy Machine
+description: "Core Candy Machineの「Token Burn」ガードは、ミント通貨をSPLトークンアドレスと値に設定することでミントを許可します。"
+---
+
+## 概要
+
+**Token Burn**ガードは、設定されたミントアカウントから支払者のトークンの一部をバーンすることでミントを許可します。支払者がバーンするために必要な量のトークンを持っていない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Token Burn" /%}
+{% node #guardAmount label="- Amount" /%}
+{% node #guardMint label="- Mint" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardMint" #mint x="270" y="-19" %}
+{% node  theme="indigo" %}
+Mint Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="guardMint" to="mint" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="mint" arrow="none" dashed=true  theme="pink" %}
+支払者のトークンアカウント
+
+からトークンをバーン
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Token Burnガードには以下の設定が含まれます:
+
+- **Amount**: バーンするトークンの数。
+- **Mint**: バーンしたいSPLトークンを定義するミントアカウントのアドレス。
+
+{% dialect-switcher title="NFT Burnガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    tokenBurn: some({
+      amount: 300,
+      mint: tokenMint.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [TokenBurn](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenBurnArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Token Burnガードには以下のミント設定が含まれます:
+
+- **Mint**: バーンしたいSPLトークンを定義するミントアカウントのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#tokenburn)を参照してください。
+
+{% dialect-switcher title="NFT Burnガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Token BurnガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    tokenBurn: some({ mint: tokenMint.publicKey }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [TokenBurnMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenBurnMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Token Burnガードはルート命令をサポートしていません。_

+ 141 - 0
src/pages/ja/core-candy-machine/guards/token-gate.md

@@ -0,0 +1,141 @@
+---
+title: Token Gateガード
+metaTitle: Token Gateガード | Core Candy Machine
+description: "Core Candy Machineの「Token Gate」ガードは、設定されたSPLトークンの保有者へのミントを制限します。"
+---
+
+## 概要
+
+**Token Gate**ガードは、設定されたミントアカウントのトークン保有者へのミントを制限します。支払者が必要な量のトークンを持っていない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Token Gate" /%}
+{% node #guardAmount label="- Amount" /%}
+{% node #guardMint label="- Token Mint" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardMint" #mint x="270" y="-19" %}
+{% node  theme="indigo" %}
+Mint Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="guardMint" to="mint" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="mint" arrow="none" dashed=true  theme="pink" %}
+支払者のトークンアカウントに
+
+x量のトークンが含まれて
+
+いることを確認{% .whitespace-nowrap %}
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Token Gateガードには以下の設定が含まれます:
+
+- **Amount**: 必要なトークンの数。
+- **Mint**: ゲートに使用したいSPLトークンを定義するミントアカウントのアドレス。
+
+{% dialect-switcher title="Token Gateガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    tokenGate: some({
+      amount: 300,
+      mint: tokenMint.publicKey,
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [TokenGate](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenGateArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Token Gateガードには以下のミント設定が含まれます:
+
+- **Mint**: ゲートに使用したいSPLトークンを定義するミントアカウントのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#tokengate)を参照してください。
+
+{% dialect-switcher title="Token Gateガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Token GateガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    tokenGate: some({ mint: tokenMint.publicKey }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [TokenGateMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenGateMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Token Gateガードはルート命令をサポートしていません。_

+ 176 - 0
src/pages/ja/core-candy-machine/guards/token-payment.md

@@ -0,0 +1,176 @@
+---
+title: Token Paymentガード
+metaTitle: Token Paymentガード | Core Candy Machine
+description: "Core Candy Machineの「Token Payment」ガードは、支払者にSPLトークンの設定値を請求することでミントを許可します。"
+---
+
+## 概要
+
+**Token Payment**ガードは、設定されたミントアカウントから支払者にトークンを請求することでミントを許可します。トークンの数と宛先アドレスの両方も設定できます。
+
+支払者が支払うために必要な量のトークンを持っていない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Token Payment" /%}
+{% node #guardAmount label="- Amount" /%}
+{% node #guardMint label="- Token Mint" /%}
+{% node #guardDestinationAta label="- Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardMint" #mint x="270" y="-80" %}
+{% node  theme="blue" %}
+Mint Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="guardMint" #tokenAccount x="270" y="1" %}
+{% node  theme="blue" %}
+Token Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="guardMint" #destinationWallet x="258" y="80" %}
+{% node  theme="indigo" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% edge from="mint" to="tokenAccount" arrow="none" /%}
+{% edge from="tokenAccount" to="destinationWallet" arrow="none" /%}
+
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Core Candy Guard Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Core Candy Machine Program_
+
+    からミント{% .whitespace-nowrap %}
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="guardMint" to="mint" arrow="none" dashed=true /%}
+{% edge from="guardDestinationAta" to="tokenAccount" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="tokenAccount" theme="pink" %}
+支払者からx量の
+
+トークンを転送{% .whitespace-nowrap %}
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Token Paymentガードには以下の設定が含まれます:
+
+- **Amount**: 支払者に請求するトークンの数。
+- **Mint**: 支払いに使用したいSPLトークンを定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを送信する関連トークンアカウントのアドレス。このアドレスは、**Token Mint**属性とこれらのトークンを受け取る任意のウォレットのアドレスを使用して、Associated Token Address PDAを見つけることで取得できます。
+
+{% dialect-switcher title="Token Paymentガードを使用してCore Candy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+この例では、現在のアイデンティティを宛先ウォレットとして使用していることに注意してください。
+
+```ts
+import { findAssociatedTokenPda } from "@metaplex-foundation/mpl-toolbox";
+create(umi, {
+  // ...
+  guards: {
+    tokenPayment: some({
+      amount: 300,
+      mint: tokenMint.publicKey,
+      destinationAta: findAssociatedTokenPda(umi, {
+        mint: tokenMint.publicKey,
+        owner: umi.identity.publicKey,
+      })[0],
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [TokenPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenPaymentArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Token Paymentガードには以下のミント設定が含まれます:
+
+- **Mint**: 支払いに使用したいSPLトークンを定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを送信する関連トークンアカウントのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Core Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#tokenpayment)を参照してください。
+
+{% dialect-switcher title="NFT Burnガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Token PaymentガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    tokenPayment: some({
+      mint: tokenMint.publicKey,
+      destinationAta,
+    }),
+  },
+});
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [TokenPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenPaymentMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Token Paymentガードはルート命令をサポートしていません。_

+ 184 - 0
src/pages/ja/core-candy-machine/guards/token2022-payment.md

@@ -0,0 +1,184 @@
+---
+title: Token2022 Paymentガード
+metaTitle: Token2022 Paymentガード | Core Candy Machine
+description: "Core Candy Machineの「Token2022 Payment」ガードは、支払者にSPL Token2022の設定値を請求することでミントを許可します。"
+---
+
+## 概要
+
+**Token2022 Payment**ガードは、設定されたミントアカウントから支払者にトークンを請求することでミントを許可します。トークンの数と宛先アドレスの両方も設定できます。
+
+支払者が支払うために必要な量のトークンを持っていない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Core Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Core Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Core Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node label="Token 2022 Payment" /%}
+{% node #guardAmount label="- Amount" /%}
+{% node #guardMint label="- Token Mint" /%}
+{% node #guardDestinationAta label="- Destination ATA" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="guardMint" #mint x="270" y="-80" %}
+{% node  theme="blue" %}
+Mint Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token 2022 Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="guardMint" #tokenAccount x="270" y="1" %}
+{% node  theme="blue" %}
+Token Account {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: Token 2022 Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="guardMint" #destinationWallet x="272" y="80" %}
+{% node  theme="indigo" %}
+Destination Wallet {% .whitespace-nowrap %}
+{% /node %}
+{% node theme="dimmed" %}
+Owner: System Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% edge from="mint" to="tokenAccount" arrow="none" /%}
+{% edge from="tokenAccount" to="destinationWallet" arrow="none" /%}
+
+{% node parent="candy-machine" x="600" %}
+{% node #mint-candy-guard theme="pink" %}
+_Core Candy Guard Program_
+
+からミント{% .whitespace-nowrap %}
+
+{% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+{% node theme="pink" %}
+_Core Candy Machine Program_
+
+からミント{% .whitespace-nowrap %}
+
+{% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="93" theme="blue" %}
+Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+{% edge from="guardMint" to="mint" arrow="none" dashed=true /%}
+{% edge from="guardDestinationAta" to="tokenAccount" arrow="none" dashed=true /%}
+{% edge from="mint-candy-guard" to="tokenAccount" theme="pink" %}
+支払者からx量の
+
+トークンを転送{% .whitespace-nowrap %}
+{% /edge %}
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+{% callout %}
+
+**Token2022 Payment**ガードは**Token Payment**ガードと同じように機能します。唯一の違いは、ミントとトークンアカウントが[SPL Token-2022プログラム](https://spl.solana.com/token-2022)からのものである必要があることです。
+
+{% /callout %}
+
+## ガード設定
+
+Token Paymentガードには以下の設定が含まれます:
+
+- **Amount**: 支払者に請求するトークンの数。
+- **Mint**: 支払いに使用したいSPLトークンを定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを送信する関連トークンアカウントのアドレス。このアドレスは、**Token Mint**属性とこれらのトークンを受け取る任意のウォレットのアドレスを使用して、Associated Token Address PDAを見つけることで取得できます。
+
+{% dialect-switcher title="Token Paymentガードを使用してCore Candy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+この例では、現在のアイデンティティを宛先ウォレットとして使用していることに注意してください。
+
+```ts
+import { findAssociatedTokenPda } from '@metaplex-foundation/mpl-toolbox'
+create(umi, {
+  // ...
+  guards: {
+    token2022Payment: some({
+      amount: 300,
+      mint: tokenMint.publicKey,
+      destinationAta: findAssociatedTokenPda(umi, {
+        mint: tokenMint.publicKey,
+        owner: umi.identity.publicKey,
+      })[0],
+    }),
+  },
+})
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [TokenPayment](https://mpl-core-candy-machine.typedoc.metaplex.com/types/TokenPaymentArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+Token Paymentガードには以下のミント設定が含まれます:
+
+- **Mint**: 支払いに使用したいSPLトークンを定義するミントアカウントのアドレス。
+- **Destination Associated Token Address (ATA)**: トークンを送信する関連トークンアカウントのアドレス。
+
+SDKを使用せずに手動で命令を構築する場合は、これらのミント設定などを命令の引数と残りのアカウントの組み合わせとして提供する必要があることに注意してください。詳細については、[Candy Guardのプログラムドキュメント](https://github.com/metaplex-foundation/mpl-core-candy-machine/tree/main/programs/candy-guard#tokenpayment)を参照してください。
+
+{% dialect-switcher title="NFT Burnガードを使用してミントする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+Token PaymentガードのMint Settingsは、次のように`mintArgs`引数を使用して渡すことができます。
+
+```ts
+mintV1(umi, {
+  // ...
+  mintArgs: {
+    tokenPayment: some({
+      mint: tokenMint.publicKey,
+      destinationAta,
+    }),
+  },
+})
+```
+
+APIリファレンス: [mintV1](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/mintV1.html), [TokenPaymentMintArgs](https://mpl-core-candy-machine.typedoc.metaplex.com/types/Token2022PaymentMintArgs.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ルート命令
+
+_Token Paymentガードはルート命令をサポートしていません。_

+ 119 - 0
src/pages/ja/core-candy-machine/guards/vanity-mint.md

@@ -0,0 +1,119 @@
+---
+title: "Core Candy Machine - Vanity Mintガード"
+metaTitle: "Core Candy Machine - Guards - Vanity Mint"
+description: "Core Candy Machineの「Vanity Mint」ガードは、ミンターが特定のバニティミントをアセットアドレスとして提供する必要があります"
+---
+
+## 概要
+
+**Vanity Mint**ガードは、指定されたミントアドレスが特定の形式と一致する場合にミントを許可します。このガードは基本的に、ユーザーがパターンに一致するPublic Keyをグラインドする必要があるProof of Work (POW)要件を追加できます。
+
+ミンターが一致するミントアドレスを使用しない場合、ミントは失敗します。
+
+{% diagram  %}
+
+{% node %}
+{% node #candy-machine label="Candy Machine" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Machine Core Program {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+
+{% node parent="candy-machine" y="100" x="20" %}
+{% node #candy-guard label="Candy Guard" theme="blue" /%}
+{% node theme="dimmed" %}
+Owner: Candy Guard Program {% .whitespace-nowrap %}
+{% /node %}
+{% node #candy-guard-guards label="Guards" theme="mint" z=1/%}
+{% node #vanityMint label="vanityMint" /%}
+{% node #regEx label="- Regular Expression" /%}
+{% node label="..." /%}
+{% /node %}
+
+{% node parent="regEx" x="270" y="-9"  %}
+{% node #nftMint theme="blue" %}
+Mint {% .whitespace-nowrap %}
+{% /node %}
+{% /node %}
+{% edge from="regEx" to="nftMint" /%}
+
+
+{% edge from="nftMint" to="mint-candy-guard" theme="indigo" dashed=true %}
+ミントアドレスが
+
+正規表現と一致するかを確認
+{% /edge %}
+{% node parent="candy-machine" x="600" %}
+  {% node #mint-candy-guard theme="pink" %}
+    _Candy Guard Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-guard" y="-20" x="100" theme="transparent" %}
+  アクセス制御
+{% /node %}
+
+{% node parent="mint-candy-guard" #mint-candy-machine y="150" x="-9" %}
+  {% node theme="pink" %}
+    _Candy Machine Program_
+
+    からミント
+  {% /node %}
+{% /node %}
+{% node parent="mint-candy-machine" y="-20" x="140" theme="transparent" %}
+  ミントロジック
+{% /node %}
+
+{% node #nft parent="mint-candy-machine" y="140" x="69" theme="blue" %}
+  Asset
+{% /node %}
+{% edge from="mint-candy-machine" to="nft" path="straight" /%}
+
+{% edge from="candy-guard" to="candy-machine" path="straight" /%}
+
+{% edge from="mint-candy-guard" to="mint-candy-machine" path="straight" /%}
+
+{% /diagram %}
+
+## ガード設定
+
+Vanity Mintガードには以下の設定が含まれます:
+
+- **Regular Expression**: ミントアドレスが一致する必要がある正規表現。例えば、すべてのミントを文字列`mplx`で始めたい場合は、これを`regex`パラメータとして使用できます。
+
+使用できる正規表現のアイデアは次のとおりです:
+- 特定のパターンで始まる: `^mplx`
+- 特定のパターンで終わる: `mplx$`
+- 特定のパターンで始まり、終わる: `^mplx*mplx$`
+- 特定のパターンと完全に一致: `^mplx1111111111111111111111111111111111111mplx$`
+文字列`mplx`は期待される文字に置き換える必要があります。
+
+{% dialect-switcher title="ミントが`mplx`で始まり、終わるVanity Mintガードを使用してCandy Machineをセットアップする" %}
+{% dialect title="JavaScript" id="js" %}
+{% totem %}
+
+```ts
+create(umi, {
+  // ...
+  guards: {
+    vanityMint: some({
+      regex: "^mplx*mplx$",
+    }),
+  },
+});
+```
+
+APIリファレンス: [create](https://mpl-core-candy-machine.typedoc.metaplex.com/functions/create.html), [VanityMint](https://mpl-core-candy-machine.typedoc.metaplex.com/types/VanityMint.html)
+
+{% /totem %}
+{% /dialect %}
+{% /dialect-switcher %}
+
+## ミント設定
+
+_Vanity Mintガードはミント設定を必要としません。ミントアドレスが一致することを期待します。_
+
+## ルート命令
+
+_Vanity Mintガードはルート命令をサポートしていません。_

+ 791 - 0
src/pages/ja/core-candy-machine/guides/create-a-core-candy-machine-ui.md

@@ -0,0 +1,791 @@
+---
+title: Core Candy MachineからアセットをミントするためのWebサイトを作成する
+metaTitle: Core Candy MachineからアセットをミントするためのWebサイトを作成する | Core Candy Machine
+description: SolanaでCandy Machineミントプログラムと対話するUIの作成方法。
+---
+
+SolanaでCore NFTコレクションをローンチする場合、通常はユーザーがアセットを購入できるCandy Machineを使用します。ユーザーフレンドリーなエクスペリエンスを提供するために、Webサイトを用意することをお勧めします。このガイドでは、独自のミント機能を構築する方法に焦点を当てます。また、Candy Machineからデータを取得して、例えばミント可能な残り数量を表示する方法も示します。
+
+このガイドは、完全なWebサイトの実装ではなく、コアとなるCandy Machineの機能と対話に焦点を当てています。Webサイトにボタンを追加したり、ウォレットアダプターと統合したりする方法は含まれていません。代わりに、Core Candy Machineを操作するための重要な情報を提供します。
+
+UIエレメントやウォレット統合を含む完全なWebサイト実装については、[`metaplex-nextjs-tailwind-template`](https://github.com/metaplex-foundation/metaplex-nextjs-tailwind-template)のようなテンプレートから始めることをお勧めします。このテンプレートには、Wallet Adapterのようなコンポーネントの多くのセットアップ手順が含まれています。
+
+一般的なWeb開発の実践方法や特定のフレームワークの使用方法に関するガイダンスをお探しの場合は、Visual Studio Codeなどのツールが豊富なドキュメントとコミュニティリソースを提供しています。
+
+## 前提条件
+
+- すでに作成されたCandy Machine。作成方法の詳細は[こちら](https://developers.metaplex.com/core-candy-machine/create)をご覧ください。
+- Web開発と選択したフレームワークの基本的な知識。umiとの互換性を最も簡単にするために、Next JSをお勧めします。
+
+## 必要なパッケージ
+
+選択したテンプレートや実装に関係なく、Core Candy Machineと対話するために以下のパッケージをインストールする必要があります:
+
+{% packagesUsed packages=["umi", "umiDefaults", "core", "candyMachineCore"] type="npm" /%}
+
+```ts
+npm i @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-core-candy-machine
+```
+
+## オンチェーンデータの取得
+
+環境のセットアップ後、Candy Machineに焦点を当てることができます。ミントUIは通常、以下のようなデータを表示したいと考えます:
+
+- すでにミントされたアセットの数
+- Candy Machine内のアセットの数
+- ミント開始までの時間
+- アセットの価格
+- その他
+
+ユーザーには表示されないが、バックグラウンドの計算で使用される追加データを取得することも理にかなっています。たとえば、[Redeemed Amount](/core-candy-machine/guards/redeemed-amount) Guardを使用する場合、すでに償還された数量を取得して、ユーザーがさらにミントできるかどうかを確認する必要があります。
+
+### Candy Machineデータの取得
+Candy Machineアカウントには、利用可能および償還されたアセットの数などのデータが保存されています。また、`mintAuthority`も保存されており、これは通常、Candy Guardのアドレスです。
+
+Candy Machineを取得するには、以下のように`fetchCandyMachine`関数を使用できます:
+
+Metaplex Aura Devnetエンドポイントを使用します。
+SolanaおよびEclipseブロックチェーン上のMetaplex AuraネットワークへのアクセスはAura Appで取得できます。[こちら](https://aura-app.metaplex.com/)からエンドポイントとAPIキーを入手してください。
+
+```ts
+import {
+  mplCandyMachine,
+  fetchCandyMachine,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
+
+// 次の2行は、以前にumiをセットアップしていない場合のみ必要です
+// AuraデータネットワークのエンドポイントとしてSolana Devnetを使用します
+const umi = createUmi("https://devnet-aura.metaplex.com/<YOUR_API_KEY>")
+            .use(mplCandyMachine());
+
+const candyMachineId = "Ct5CWicvmjETYXarcUVJenfz3CCh2hcrCM3CMiB8x3k9";
+const candyMachine = await fetchCandyMachine(umi, publicKey(candyMachineId));
+console.log(candyMachine)
+```
+
+これは以下のようなCandy Machineデータを返します:
+
+{% dialect-switcher title="JSON Result" %}
+{% dialect title="JSON" id="json-cm" %}
+
+{% totem-accordion title="Candy Machine Data" %}
+```json
+{
+    "publicKey": "Ct5CWicvmjETYXarcUVJenfz3CCh2hcrCM3CMiB8x3k9",
+    "header": {
+        "executable": false,
+        "owner": "CMACYFENjoBMHzapRXyo1JZkVS6EtaDDzkjMrmQLvr4J",
+        "lamports": {
+            "basisPoints": "91814160",
+            "identifier": "SOL",
+            "decimals": 9
+        },
+        "rentEpoch": "18446744073709551616",
+        "exists": true
+    },
+    "discriminator": [
+        51,
+        173,
+        177,
+        113,
+        25,
+        241,
+        109,
+        189
+    ],
+    "authority": "Tes1zkZkXhgTaMFqVgbgvMsVkRJpq4Y6g54SbDBeKVV",
+    "mintAuthority": "ACJCHhsWCKw9Euu9nLdyxajqitvmwrXQMRWe2mrmva8u",
+    "collectionMint": "GPHD33NBaM8TgvbfgcxrusD6nyfhNLbeyKjxMRLAr9LM",
+    "itemsRedeemed": "13",
+    "data": {
+        "itemsAvailable": "16",
+        "maxEditionSupply": "0",
+        "isMutable": true,
+        "configLineSettings": {
+            "__option": "Some",
+            "value": {
+                "prefixName": "",
+                "nameLength": 32,
+                "prefixUri": "",
+                "uriLength": 200,
+                "isSequential": false
+            }
+        },
+        "hiddenSettings": {
+            "__option": "None"
+        }
+    },
+    "items": [
+        {
+            "index": 0,
+            "minted": true,
+            "name": "0.json",
+            "uri": ""
+        },
+        [...]
+    ],
+    "itemsLoaded": 16
+}
+```
+{% /totem-accordion  %}
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+UI観点から最も重要なフィールドは、`itemsRedeemed`、`itemsAvailable`、および`mintAuthority`です。場合によっては、Webサイトにティーザー画像として`items`のいくつかを表示することも興味深いかもしれません。
+
+#### 残りのアセット数を表示する
+`13 / 16 Assets minted`のようなセクションを表示するには、以下のようなものを使用します:
+
+```ts
+const mintedString = `${candyMachine.itemsRedeemed} / ${candyMachine.itemsAvailable} Assets minted`
+```
+
+`3 available`のように残りのミント可能なアセットを取得したい場合は、代わりに以下のような計算を実行します:
+
+```ts
+const availableString = `${candyMachine.itemsAvailable - candyMachine.itemsRedeemed} available`;
+```
+
+### Candy Guardデータの取得
+Candy Guardには、ミントを許可するために満たさなければならない条件が含まれています。これには、例えばSolまたはTokenの支払い、1つのウォレットがミントできるアセットの数の制限などが含まれます。Candy Guardの詳細については、[Candy Guardページ](/core-candy-machine/guards)をご覧ください。
+
+Candy Machineデータと同様に、guardアカウントを取得することは必須ではありません。そうすることで、Candy GuardのSOL価格を更新するだけで、Webサイトの数値も自動的に更新されるような柔軟性が得られます。
+
+複数のCandy Machineに使用できるより柔軟なUIを構築したい場合、Candy Guardを取得することで、ミント機能の構築と適格性の動的なチェックの両方が可能になります。
+
+次のスニペットは、`candyMachine`アカウントが以前に取得されていることを前提としています。または、`candyMachine.mintAuthority`の代わりにCandy GuardのpublicKeyをハードコーディングすることもできます。
+
+```ts
+import { safeFetchCandyGuard } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const candyGuard = await safeFetchCandyGuard(umi, candyMachine.mintAuthority);
+```
+
+{% dialect-switcher title="JSON Result" %}
+{% dialect title="JSON" id="json-cg" %}
+
+{% totem-accordion title="Candy Guard Data" %}
+{% totem-prose %}
+このオブジェクトでUI にとって最も重要なフィールドは`guards`オブジェクトです。これには、常に適用される`default` guardsが含まれています。`guards.groups`には、異なる[Guard Groups](/core-candy-machine/guard-groups)が含まれています。
+{% /totem-prose %}
+
+```json
+{
+    "publicKey": "ACJCHhsWCKw9Euu9nLdyxajqitvmwrXQMRWe2mrmva8u",
+    "header": {
+        "executable": false,
+        "owner": "CMAGAKJ67e9hRZgfC5SFTbZH8MgEmtqazKXjmkaJjWTJ",
+        "lamports": {
+            "basisPoints": "2561280",
+            "identifier": "SOL",
+            "decimals": 9
+        },
+        "rentEpoch": "18446744073709551616",
+        "exists": true
+    },
+    "discriminator": [
+        44,
+        207,
+        199,
+        184,
+        112,
+        103,
+        34,
+        181
+    ],
+    "base": "Ct5CWicvmjETYXarcUVJenfz3CCh2hcrCM3CMiB8x3k9",
+    "bump": 255,
+    "authority": "Tes1zkZkXhgTaMFqVgbgvMsVkRJpq4Y6g54SbDBeKVV",
+    "guards": {
+        "botTax": {
+            "__option": "None"
+        },
+        "solPayment": {
+            "__option": "None"
+        },
+        "tokenPayment": {
+            "__option": "None"
+        },
+        "startDate": {
+            "__option": "None"
+        },
+        "thirdPartySigner": {
+            "__option": "None"
+        },
+        "tokenGate": {
+            "__option": "None"
+        },
+        "gatekeeper": {
+            "__option": "None"
+        },
+        "endDate": {
+            "__option": "None"
+        },
+        "allowList": {
+            "__option": "None"
+        },
+        "mintLimit": {
+            "__option": "None"
+        },
+        "nftPayment": {
+            "__option": "None"
+        },
+        "redeemedAmount": {
+            "__option": "None"
+        },
+        "addressGate": {
+            "__option": "None"
+        },
+        "nftGate": {
+            "__option": "None"
+        },
+        "nftBurn": {
+            "__option": "None"
+        },
+        "tokenBurn": {
+            "__option": "None"
+        },
+        "freezeSolPayment": {
+            "__option": "None"
+        },
+        "freezeTokenPayment": {
+            "__option": "None"
+        },
+        "programGate": {
+            "__option": "None"
+        },
+        "allocation": {
+            "__option": "None"
+        },
+        "token2022Payment": {
+            "__option": "None"
+        },
+        "solFixedFee": {
+            "__option": "None"
+        },
+        "nftMintLimit": {
+            "__option": "None"
+        },
+        "edition": {
+            "__option": "None"
+        },
+        "assetPayment": {
+            "__option": "None"
+        },
+        "assetBurn": {
+            "__option": "None"
+        },
+        "assetMintLimit": {
+            "__option": "None"
+        },
+        "assetBurnMulti": {
+            "__option": "None"
+        },
+        "assetPaymentMulti": {
+            "__option": "None"
+        },
+        "assetGate": {
+            "__option": "None"
+        },
+        "vanityMint": {
+            "__option": "None"
+        }
+    },
+    "groups": [
+        {
+            "label": "group1",
+            "guards": {
+                "botTax": {
+                    "__option": "Some",
+                    "value": {
+                        "lamports": {
+                            "basisPoints": "10000000",
+                            "identifier": "SOL",
+                            "decimals": 9
+                        },
+                        "lastInstruction": false
+                    }
+                },
+                "solPayment": {
+                    "__option": "Some",
+                    "value": {
+                        "lamports": {
+                            "basisPoints": "100000000",
+                            "identifier": "SOL",
+                            "decimals": 9
+                        },
+                        "destination": "Tes1zkZkXhgTaMFqVgbgvMsVkRJpq4Y6g54SbDBeKVV"
+                    }
+                },
+                "tokenPayment": {
+                    "__option": "None"
+                },
+                "startDate": {
+                    "__option": "Some",
+                    "value": {
+                        "date": "1723996800"
+                    }
+                },
+                "thirdPartySigner": {
+                    "__option": "None"
+                },
+                "tokenGate": {
+                    "__option": "None"
+                },
+                "gatekeeper": {
+                    "__option": "None"
+                },
+                "endDate": {
+                    "__option": "Some",
+                    "value": {
+                        "date": "1729270800"
+                    }
+                },
+                "allowList": {
+                    "__option": "None"
+                },
+                "mintLimit": {
+                    "__option": "Some",
+                    "value": {
+                        "id": 1,
+                        "limit": 5
+                    }
+                },
+                "nftPayment": {
+                    "__option": "None"
+                },
+                "redeemedAmount": {
+                    "__option": "None"
+                },
+                "addressGate": {
+                    "__option": "None"
+                },
+                "nftGate": {
+                    "__option": "None"
+                },
+                "nftBurn": {
+                    "__option": "None"
+                },
+                "tokenBurn": {
+                    "__option": "None"
+                },
+                "freezeSolPayment": {
+                    "__option": "None"
+                },
+                "freezeTokenPayment": {
+                    "__option": "None"
+                },
+                "programGate": {
+                    "__option": "None"
+                },
+                "allocation": {
+                    "__option": "None"
+                },
+                "token2022Payment": {
+                    "__option": "None"
+                },
+                "solFixedFee": {
+                    "__option": "None"
+                },
+                "nftMintLimit": {
+                    "__option": "None"
+                },
+                "edition": {
+                    "__option": "None"
+                },
+                "assetPayment": {
+                    "__option": "None"
+                },
+                "assetBurn": {
+                    "__option": "None"
+                },
+                "assetMintLimit": {
+                    "__option": "None"
+                },
+                "assetBurnMulti": {
+                    "__option": "None"
+                },
+                "assetPaymentMulti": {
+                    "__option": "None"
+                },
+                "assetGate": {
+                    "__option": "None"
+                },
+                "vanityMint": {
+                    "__option": "None"
+                }
+            }
+        },
+    ]
+}
+```
+{% /totem-accordion  %}
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+### 追加のCandy Machine関連アカウントの取得
+実装するGuardの選択により、追加のアカウントを取得する必要がある場合があります。たとえば、ウォレットのミント適格性を確認する予定があり、`mintLimit` Guardを使用している場合は、`mintCounter`アカウントを取得する必要があります。このアカウントは、特定のウォレットがその特定のguard下でミントしたNFTの数を記録しています。
+
+#### `MintLimit`アカウント
+[`MintLimit`](/core-candy-machine/guards/mint-limit) guardがアクティブな場合、ユーザーのウォレットの`MintCounter`アカウントを取得することをお勧めします。これにより、ユーザーがミント制限に達しているか、まだ追加のアイテムをミントできるかどうかを確認できます。
+
+以下のコードスニペットは、`MintCounter`を取得する方法を示しています。この例は、すでにCandy MachineとCandy Guardデータを取得していることを前提としています:
+
+```ts
+import { safeFetchMintCounterFromSeeds } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const mintCounter = await safeFetchMintCounterFromSeeds(umi, {
+  id: 1, // Guard設定で設定したmintLimit id
+  user: umi.identity.publicKey,
+  candyMachine: candyMachine.publicKey,
+  candyGuard: candyMachine.mintAuthority,
+});
+```
+
+#### `NftMintLimit`アカウント
+`MintLimit` guardと同様に、[`NftMintLimit`](/core-candy-machine/guards/nft-mint-limit) guardの`NftMintCounter`アカウントを取得して適格性を確認することが理にかなっています。
+
+以下のコードスニペットは、`NftMintCounter`アカウントを取得する方法を示しています。この例は、すでにCandy MachineとCandy Guardデータを取得していることを前提としています:
+
+```ts
+import {
+  findNftMintCounterPda,
+  fetchNftMintCounter
+ } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const pda = findNftMintCounterPda(umi, {
+  id: 1, // Guard設定で設定したnftMintLimit id
+  mint: asset.publicKey, // ユーザーが所有するnftのアドレス
+  candyGuard: candyMachine.mintAuthority,
+  candyMachine: candyMachine.publicKey,
+});
+
+const nftMintCounter = fetchNftMintCounter(umi, pda)
+```
+
+#### `AssetMintLimit`アカウント
+`NftMintCounter` guardと同様に、[`AssetMintLimit`](/core-candy-machine/guards/asset-mint-limit) guardの`AssetMintCounter`アカウントを取得して適格性を確認することが理にかなっています。
+
+以下のコードスニペットは、`AssetMintCounter`アカウントを取得する方法を示しています。この例は、すでにCandy Machineデータを取得していることを前提としています:
+
+```ts
+import {
+  findAssetMintCounterPda,
+  fetchAssetMintCounter
+ } from "@metaplex-foundation/mpl-core-candy-machine";
+
+const pda = findAssetMintCounterPda(umi, {
+  id: 1, // Guard設定で設定したassetMintLimit id
+  asset: asset.publicKey, // ユーザーが所有するcore nftのアドレス
+  candyGuard: candyMachine.mintAuthority,
+  candyMachine: candyMachine.publicKey,
+});
+
+const assetMintCounter = fetchAssetMintCounter(umi, pda);
+```
+
+#### `Allocation`アカウント
+`Allocation` guardの場合、`AllocationTracker`アカウントを取得して、特定のグループから追加のNFTをミントできることを確認することが理にかなっています。
+
+以下のコードスニペットは、`AllocationTracker`アカウントを取得する方法を示しています。この例は、すでにCandy Machineデータを取得していることを前提としています:
+
+```ts
+import {
+  safeFetchAllocationTrackerFromSeeds,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allocationTracker = await safeFetchAllocationTrackerFromSeeds(umi, {
+  id: 1, // Guard設定で設定したallocation id
+  candyMachine: candyMachine.publicKey,
+  candyGuard: candyMachine.mintAuthority,
+});
+```
+
+#### `Allowlist`アカウント
+Allowlist guardを実装する場合、事前に`route`命令を実行することが重要です。この命令は、各ウォレットとCandy Machineの組み合わせに対して一意のアカウントを生成し、ウォレットがミントを承認されていることを効果的にマークします。
+
+UI観点から、このアカウントを照会することは有益です。これにより、`route`命令を実行する必要があるか、ユーザーがミント命令に直接進めるかを判断できます。
+
+以下のコードスニペットは、このアカウントを取得する方法を示しています。すでにCandy Machineデータを取得していることを前提としていますが、望む場合は、代わりに`candyGuard`と`candyMachine`のpublicKeyをハードコーディングすることもできます。
+
+```ts
+import {
+  safeFetchAllowListProofFromSeeds,
+  getMerkleRoot,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const allowlist = [
+  "Tes1zkZkXhgTaMFqVgbgvMsVkRJpq4Y6g54SbDBeKVV",
+  "GjwcWFQYzemBtpUoN5fMAP2FZviTtMRWCmrppGuTthJS",
+  "AT8nPwujHAD14cLojTcB1qdBzA1VXnT6LVGuUd6Y73Cy"
+];
+
+const allowListProof = await safeFetchAllowListProofFromSeeds(umi, {
+  candyGuard: candyMachine.mintAuthority,
+  candyMachine: candyMachine.publicKey,
+  merkleRoot: getMerkleRoot(allowlist),
+  user: umi.identity.publicKey,
+});
+```
+
+### ウォレットデータの取得
+適格性を検証するために、接続されたウォレットに関する情報を取得することもできます。使用しているGuardに応じて、ウォレット内のSOLの量、ウォレットが所有しているTokenとNFTを知りたい場合があります。
+
+SOL残高を取得するには、組み込みの`getAccount` umi関数を使用してウォレットアカウントを取得できます:
+```ts
+const account = await umi.rpc.getAccount(umi.identity.publicKey);
+const solBalance = account.lamports;
+```
+
+TokenまたはNFTを必要とするguardのいずれかを使用している場合は、それらも取得することをお勧めします。このためには[DAS API](/das-api/methods/get-asset-by-owner)を使用することをお勧めします。DASは、RPCプロバイダーによって維持されるTokenのインデックスです。これを使用すると、すべての必要な情報を1回の呼び出しで取得できます。UIでは、返されたオブジェクトを使用して、接続されたウォレットが必要なトークンまたはNFTを所有しているかどうかを確認できます。
+
+```ts
+import { publicKey } from '@metaplex-foundation/umi';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+
+// 以前のどこかでumiインスタンスを定義するときに、
+// すでに`.use(dasApi());`を追加できるので、umiを再度定義する必要はありません。
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+
+const assets = await umi.rpc.getAssetsByOwner({
+    umi.identity.publicKey
+});
+
+```
+
+## 適格性の検証
+すべての必要なデータを取得した後、接続されたウォレットがミントを許可されているかどうかを確認できます。
+
+Candy Machineにグループが添付されている場合、`default` guardsは作成されたすべてのグループに普遍的に適用されることに注意することが重要です。また、グループが有効になっている場合、`default`グループからミントする機能は無効になり、作成されたグループをミントに使用する必要があります。
+
+したがって、グループが定義されていない場合は、`default`グループのすべてのミント条件が満たされているかどうかを確認する必要があります。グループが定義されている場合は、`default` guardsと現在のミントグループのguardsの両方を検証する必要があります。
+
+グループを活用していない`startDate`、`SolPayment`、および`mintLimit` guardsが添付されたCandy Machineが与えられた場合、ユーザーがミント関数を呼び出すことを許可する前に、次の検証を行う必要があります。`candyGuard`が以前に取得されており、1つのCore NFTアセットをミントすることを前提としています。
+
+1. `startDate`が過去であることを検証します。ここではユーザーのデバイス時間を使用せず、代わりに現在の内部Solanaブロックタイムをフェッチしています。これは、Candy Machineがミント時の検証に使用する時間だからです:
+```ts
+import { unwrapOption } from '@metaplex-foundation/umi';
+
+let allowed = true;
+
+// 現在のスロットを取得してブロックタイムを読み取ります
+const slot = await umi.rpc.getSlot();
+let solanaTime = await umi.rpc.getBlockTime(slot);
+
+// `default` startDate guardが添付されているかを確認します
+const startDate = unwrapOption(candyGuard.guards.startDate);
+if (startDate) {
+  // startTimeが将来にあることを検証します
+  if (solanaTime < startDate) {
+        console.info(`StartDate not reached!`);
+        allowed = false;
+  }
+}
+```
+
+2. ウォレットがミントの支払いに十分なSOLを持っているかを確認します。ここでは取引手数料を含めておらず、`SolBalance`が上記のように取得されていると仮定しています。
+```ts
+import { unwrapOption } from '@metaplex-foundation/umi';
+
+const solPayment = unwrapOption(candyGuard.guards.solPayment);
+if (solPayment){
+  if (solPayment.lamports.basisPoints > solBalance){
+    console.info(`Not enough SOL!`);
+    allowed = false;
+  }
+}
+```
+
+3. `mintLimit`にまだ達していないことを確認します:
+```ts
+import { unwrapOption } from '@metaplex-foundation/umi';
+import {
+  safeFetchMintCounterFromSeeds,
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+const mintLimit = unwrapOption(candyGuard.guards.mintLimit);
+if (mintLimit){
+      const mintCounter = await safeFetchMintCounterFromSeeds(umi, {
+      id: mintLimit.id,
+      user: umi.identity.publicKey,
+      candyMachine: candyMachine.publicKey,
+      candyGuard: candyMachine.mintAuthority,
+    });
+
+    // mintCounter PDAが存在する(最初のミントではない)
+    if (mintCounter && mintLimit.limit >= mintCounter.count
+    ) {
+      allowed = false;
+    }
+}
+```
+
+ウォレットがミント不適格な場合、ミントボタンを無効にして、ミント不適格の理由をユーザーに表示すると役立ちます。例えば、`Not enough SOL!`メッセージなど。
+
+## Guard Routes
+特定のGuardは、ミントが発生する前に実行する必要がある特定の命令を必要とします。これらの命令は、データを保存するアカウントを作成するか、ウォレットのミント適格性の証明を提供します。これらの命令の実行頻度は、Guardのタイプによって異なります。
+
+{% callout type="note" title="このセクションの対象者" %}
+`Allocation`、`FreezeSolPayment`、`FreezeTokenPayment`、または`Allowlist` guardを使用していない場合は、このセクションをスキップしても安全です。
+{% /callout %}
+
+一部のGuardは、Candy Machine全体に対して一度だけルートを実行する必要があります。これらについては、UIに関数を含める必要はありませんが、スクリプトを介して一度事前に実行できます:
+- [Allocation](/core-candy-machine/guards/allocation)
+- [FreezeSolPayment](/core-candy-machine/guards/freeze-sol-payment)
+- [FreezeTokenPayment](/core-candy-machine/guards/freeze-token-payment)
+
+他のGuardは、個々のウォレットごとにルートを実行する必要があります。これらの場合、ルート命令はミントトランザクションの前に実行する必要があります:
+- [Allowlist](/core-candy-machine/guards/allow-list)
+
+Guardルートの実装方法の例として、**Allowlist** guardのケースを考えてみましょう。これは、`allowListProof`が前述のように取得されており、`allowlist`が適格なウォレットアドレスの配列を表していることを前提としています。以下のコードは、実装でこのシナリオを処理する方法を示しています。
+
+```ts
+import {
+  getMerkleRoot,
+  getMerkleProof,
+  route
+} from "@metaplex-foundation/mpl-core-candy-machine";
+import {
+  publicKey,
+} from "@metaplex-foundation/umi";
+
+// 上記で説明したようにAllowListProofを取得したと仮定します
+if (allowListProof === null) {
+  route(umi, {
+    guard: "allowList",
+    candyMachine: candyMachine.publicKey,
+    candyGuard: candyMachine.mintAuthority,
+    group: "default", // ここにguardラベルを追加します
+    routeArgs: {
+      path: "proof",
+      merkleRoot: getMerkleRoot(allowlist),
+      merkleProof: getMerkleProof(allowlist, publicKey(umi.identity)),
+    },
+  })
+}
+```
+
+## ミント関数の作成
+添付されているすべてのguardの適格性チェックを実装することをお勧めします。グループが添付されている場合、`default` guardsがすべての追加グループに適用される一方で、同時に`default`グループが無効になることに注意してください。
+
+これらのチェックが完了し、必要に応じてルート命令が実行された後、ミントトランザクションを構築できます。Guardに応じて、`mintArgs`を渡す必要がある場合があります。これらは、正しいアカウントとデータを渡すことでミントトランザクションを構築するのに役立つ引数です。たとえば、`mintLimit` guardは`mintCounter`アカウントを必要とします。Umi SDKはこれらの詳細を抽象化しますが、トランザクションを正しく構築するためには、いくつかの情報が必要です。
+
+再び`startDate`、`SolPayment`、および`mintLimit` Guardsが添付されたCandy Machineを仮定して、`mintArgs`を構築する方法を見てみましょう。
+
+```ts
+import { some, unwrapOption } from '@metaplex-foundation/umi';
+import {
+  DefaultGuardSetMintArgs
+} from "@metaplex-foundation/mpl-core-candy-machine";
+
+let mintArgs: Partial<DefaultGuardSetMintArgs> = {};
+
+// solPayment mintArgsを追加します
+const solPayment = unwrapOption(candyGuard.guards.solPayment)
+if (solPayment) {
+  mintArgs.solPayment = some({
+    destination: solPayment.destination,
+  });
+}
+
+// mintLimit mintArgsを追加します
+const mintLimit = unwrapOption(candyGuard.guards.mintLimit)
+if (mintLimit) {
+  mintArgs.mintLimit = some({ id: mintLimit.id });
+}
+```
+
+すべてのGuardが追加の`mintArgs`を渡す必要があるわけではありません。これが、上記のコードスニペットに`startDate`がない理由です。使用しているguardsが`mintArgs`を渡す必要があるかどうかを理解するには、[Developer Hub](/core-candy-machine) Guardページを確認することをお勧めします。「Mint Settings」が記述されている場合、このguardに対して`mintArgs`を渡す必要があります。
+
+`mintArgs`が構築されたので、ミント関数自体を呼び出す方法を見てみましょう。次のスニペットは、`candyMachine`と`candyGuard`が上記のように取得されていることを前提としています。技術的には、`candyMachine`、`collection`、`candyGuard`のpublicKeyとすべての`mintArgs`は、取得したくない場合は手動で渡すこともできます。
+
+```ts
+// NFTアドレスを生成します
+const nftMint = generateSigner(umi);
+
+await mintV1(umi, {
+  candyMachine: candyMachine.publicKey,
+  collection: candyMachine.collectionMint,
+  asset: nftMint,
+  candyGuard: candyGuard.publicKey,
+  mintArgs,
+}).sendAndConfirm(umi)
+
+console.log(`NFT ${nftMint.publicKey} minted!`)
+```
+
+
+## 高度なミントテクニック
+
+これまでに説明した基本的なミント関数はほとんどのケースでうまく機能しますが、ミントプロセスを強化するために使用できる高度なテクニックがいくつかあります。これらのいくつかを探ってみましょう:
+
+### 1つのトランザクションで複数のNFTをミントする
+
+効率性のために、ユーザーが1つのトランザクションで複数のNFTをミントできるようにすることができます。これを実現する方法は次のとおりです:
+
+特定の設定に応じて、[Transaction Builders](/umi/transactions#transaction-builders)を組み合わせることで、1つのトランザクションで複数のNFTをミントできるようにすると役立つ場合があります。
+
+```ts
+let builder = transactionBuilder()
+  .add(mintV1(...))
+  .add(mintV1(...))
+```
+
+トランザクションに`mintV1`命令を追加しすぎると、`Transaction too large`エラーが発生します。関数[`builder.fitsInOneTransaction(umi)`](/umi/transactions#transaction-builders)を使用すると、トランザクションを送信する前にこれを確認できるため、送信前にトランザクションを分割できます。分割が必要な場合は、[`signAllTransactions`](/umi/transactions#building-and-signing-transactions)を使用することをお勧めします。これにより、Wallet Adapterで承認する必要があるポップアップが1つだけになります。
+
+### Guard Groups
+
+Guard groupsは、異なる設定で複数のguardセットを定義できるCore Candy Machineの強力な機能です。以下のようなシナリオで特に役立ちます:
+
+1. 階層化されたミント:VIP、早期アクセス、一般販売用の異なるグループ。
+2. 複数の支払いオプション:SOL支払い、SPLトークン支払いなどのグループ。
+3. 時間ベースのミント:異なる開始日と終了日を持つグループ。
+4. Allowlistベースのミント:Allowlistユーザーと一般販売用のグループ。
+
+UIでguard groupsを実装するには、2つの主なアプローチがあります:
+
+1. 複数のボタンアプローチ:
+   各グループに個別のボタンを作成し、ユーザーが好みのミントオプションを選択できるようにします。
+
+2. 自動グループ選択:
+   ユーザーの適格性と現在の条件に基づいて、ユーザーに最適なグループを決定する関数を実装します。
+
+選択するシナリオまたはアプローチに関係なく、特定のグループで機能するように`mintV1`命令を調整する方法は次のとおりです。主な変更は、目的のラベルを指定する`group`パラメーターを含めることです。
+
+```ts
+// NFTアドレスを生成します
+const nftMint = generateSigner(umi);
+
+await mintV1(umi, {
+  candyMachine: candyMachine.publicKey,
+  collection: candyMachine.collectionMint,
+  asset: nftMint,
+  candyGuard: candyGuard.publicKey,
+  mintArgs,
+  group: "group1",
+}).sendAndConfirm(umi)
+
+console.log(`NFT ${nftMint.publicKey} minted!`)
+```
+
+
+## 次のステップ
+
+フロントエンドでCandy Machineと対話する基本をマスターしたので、プロジェクトをさらに強化および配布するために、次のステップを検討することをお勧めします:
+
+1. ホスティング:ホスティングプラットフォームにデプロイして、ユーザーがフロントエンドにアクセスできるようにします。開発者の間で人気のあるオプションには次のものがあります:
+   - Vercel
+   - Cloudflare Pages
+   - Netlify
+   - GitHub Pages
+
+2. テスト:スムーズなユーザーエクスペリエンスを確保するために、さまざまなデバイスとブラウザでUIを徹底的にテストします。
+
+3. 最適化:特にミントイベント中に高トラフィックが予想される場合は、パフォーマンスのためにフロントエンドを微調整します。
+
+8. モニタリング:Candy Machine UIのステータスを追跡し、発生する可能性のある問題に迅速に対処するために、監視ツールを設定します。
+
+これらの領域に焦点を当てることで、Core Candy Machineを使用して成功したNFTミントプロジェクトを立ち上げ、維持する準備が整います。

+ 320 - 0
src/pages/ja/core-candy-machine/guides/create-a-core-candy-machine-with-hidden-settings.md

@@ -0,0 +1,320 @@
+---
+title: 隠し設定を持つCore Candy Machineを作成する
+metaTitle: 隠し設定を持つCore Candy Machineを作成する | Core Candy Machine
+description: 隠し設定を使用してCore Candy Machineを作成し、隠蔽とリビールのNFTドロップを作成する方法。
+---
+
+隠蔽とリビールのNFTドロップを作成したい場合は、Core Candy Machineを使用してその目標を達成できます。このガイドは、プロセス全体の包括的なウォークスルーを確実にするために2つの部分に分かれています。
+
+このガイド(パート1)では、Core Candy Machineを使用して隠蔽とリビールのNFTドロップをセットアップしてミントするステップバイステップのプロセスをご案内します。経験豊富な開発者であれ、NFTドロップに初めて触れる方であれ、このガイドは始めるために必要なすべてを提供します。NFTドロップのリビールと検証については、パート2で取り上げます。
+
+隠蔽とリビールのNFTドロップは、ミント後にすべてのNFTをリビールしたい場合に便利です。
+
+仕組みは、Core Candy Machineをセットアップする際に、隠し設定フィールドを設定します。このフィールドには、リビール前にミントされたすべてのNFTに適用されるプレースホルダーメタデータ(汎用の名前とURI)が含まれます。さらに、メタデータの事前計算されたハッシュも含まれます。
+リビール前にミントされるすべてのNFTは、同じ名前とURIを持ちます。コレクションがミントされた後、アセットは正しい名前とURI(メタデータ)で更新されます。
+
+コレクションをミントした後、適切なメタデータでアセットを更新するリビールプロセスを実行する必要があります。
+
+アセットが正しく更新されたことを確認するために、検証ステップが実行されます。これには、リビールされたアセットの更新されたメタデータ(名前とURI)をハッシュ化し、隠し設定に保存されている元のハッシュと比較することが含まれます。これにより、すべてのNFTが正確に更新されたことが保証されます。
+
+リビールと検証のステップの両方は、このガイドのパート2で取り上げます。
+
+## 必要なパッケージ
+
+Core Candy Machineと対話するために、以下のパッケージをインストールする必要があります:
+
+{% packagesUsed packages=["umi", "umiDefaults", "core", "candyMachineCore", "mpl-toolbox"] type="npm" /%}
+
+```ts
+npm i @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-core-candy-machine
+```
+
+## umiのセットアップ
+
+環境をセットアップした後、umiのセットアップから始めましょう。
+
+Umiをセットアップする際、テスト用に新しいウォレットを作成したり、ファイルシステムからウォレットをインポートしたり、UI/フロントエンドで`walletAdapter`を使用したりすることもできます。
+この例では、秘密鍵を含むjsonファイル(wallet.json)からKeypairを作成します。
+
+devnet Auraエンドポイントを使用します。
+SolanaおよびEclipseブロックチェーン上のMetaplex Auraネットワークへのアクセスは、[こちら](https://aura-app.metaplex.com/)のAura AppでエンドポイントとAPIキーを入手できます。
+
+```ts
+import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
+import { generateSigner, some, none, createSignerFromKeypair, signerIdentity, transactionBuilder, dateTime } from "@metaplex-foundation/umi";
+import { mplCandyMachine as mplCoreCandyMachine } from '@metaplex-foundation/mpl-core-candy-machine';
+import * as fs from 'fs';
+
+// Metaplex AuraデータネットワークからSolana Devnetをエンドポイントとして使用し、`mplCoreCandyMachine()`プラグインも読み込みます。
+const umi = createUmi("https://devnet-aura.metaplex.com/<YOUR_API_KEY>")
+            .use(mplCoreCandyMachine());
+
+// 秘密鍵を含むwallet jsonファイルからKeypairを作成し、作成されたkeypairに基づいて署名者を作成しましょう
+const walletFile = fs.readFileSync('./wallet.json');
+
+let keypair = umi.eddsa.createKeypairFromSecretKey(new Uint8Array(walletFile));
+const signer = createSignerFromKeypair(umi, keypair);
+console.log("Signer: ", signer.publicKey);
+
+// 指定された署名者にアイデンティティとペイヤーを設定します
+umi.use(signerIdentity(signer));
+```
+
+UMIのセットアップの詳細については、[こちら](https://developers.metaplex.com/core/guides/javascript/how-to-create-a-core-nft-asset-with-javascript#setting-up-umi)をご覧ください。
+
+## リビールデータの準備
+次に、最終的にリビールされるNFTのメタデータを含むリビールデータを準備しましょう。このデータには、コレクション内の各NFTの名前とURIが含まれ、ミント後にプレースホルダーメタデータを更新するために使用されます。
+このメタデータは各アセットにアップロードされ、結果として得られるURIを使用します。
+
+リビールデータは自分でアップロードする必要があることに注意してください。
+このプロセスはデフォルトでは決定論的ではない可能性があります。決定論的な方法で行うには、[turbo](https://developers.metaplex.com/guides/general/create-deterministic-metadata-with-turbo)を使用できます。
+
+この例では、5つのアセットのコレクションを扱うため、リビールデータには5つのオブジェクトの配列が含まれ、それぞれが個々のNFTの名前とURIを表します。
+
+また、リビールデータのハッシュも生成します。このハッシュは、Core Candy Machineの隠し設定に保存され、検証ステップでメタデータが正しく更新されたことを確認するために使用されます。
+
+```ts
+import crypto from 'crypto';
+
+// リビールプロセス中に使用するアセットのリビールデータ
+const revealData = [
+      { name: 'Nft #1', uri: 'http://example.com/1.json' },
+      { name: 'Nft #2', uri: 'http://example.com/2.json' },
+      { name: 'Nft #3', uri: 'http://example.com/3.json' },
+      { name: 'Nft #4', uri: 'http://example.com/4.json' },
+      { name: 'Nft #5', uri: 'http://example.com/5.json' },
+    ]
+
+let string = JSON.stringify(revealData)
+let hash = crypto.createHash('sha256').update(string).digest()
+```
+
+## コレクションの作成
+
+次にCollectionアセットを作成しましょう。
+そのために、mpl-coreライブラリは、そのアクションを実行するのに役立つ`createCollection`メソッドを提供します。
+
+コレクションの詳細については、[こちら](https://developers.metaplex.com/core/collections)をご覧ください。
+
+```ts
+import { createCollection, ruleSet } from '@metaplex-foundation/mpl-core';
+
+const collectionMint = generateSigner(umi);
+
+const creator1 = generateSigner(umi).publicKey;
+const creator2 = generateSigner(umi).publicKey;
+
+console.log("collection update authority: ", collectionUpdateAuthority.publicKey);
+await createCollection(umi, {
+    collection: collectionMint,
+    name: 'My NFT',
+    uri: 'https://example.com/my-nft.json',
+    plugins: [
+        {
+            type: 'Royalties',
+            basisPoints: 500,
+            creators: [
+            {
+                address: creator1,
+                percentage: 20,
+            },
+            {
+                address: creator2,
+                percentage: 80,
+            },
+        ],
+        ruleSet: ruleSet('None'),
+        },
+    ],
+}).sendAndConfirm(umi)
+```
+
+`Royalties`タイプのプラグインを追加し、これらのロイヤルティを共有する2人の異なるクリエイターを追加しました。
+
+次に、作成したコレクションを取得して、その詳細を出力しましょう。
+
+```ts
+import { fetchCollection } from '@metaplex-foundation/mpl-core';
+
+const collection = await fetchCollection(umi, collectionMint.publicKey);
+
+console.log("Collection Details: \n", collection);
+```
+
+## 隠し設定を持つCore Candy Machineを作成する
+
+次のステップは、隠し設定を持つCore Candy Machineを作成することです。
+
+これを実現するために、mpl-core-candy-machineライブラリの`create`メソッドを使用し、プレースホルダーの名前、URI、および`revealData`から事前計算されたハッシュを使用して`hiddenSettings`を設定します。
+
+Core Candy Machineの作成とguardsの詳細については、[こちら](https://developers.metaplex.com/core-candy-machine/create)をご覧ください。
+
+さらに、ミントがいつ始まるかを決定するstartDate guardを設定します。これは利用可能な多くのguardの1つに過ぎず、利用可能なすべてのguardのリストは[こちら](https://developers.metaplex.com/candy-machine/guards)で見つけることができます。
+
+```ts
+import { create } from '@metaplex-foundation/mpl-core-candy-machine';
+
+const candyMachine = generateSigner(umi);
+
+const res = await create(umi, {
+    candyMachine,
+    collection: collectionMint.publicKey,
+    collectionUpdateAuthority: umi.identity,
+    itemsAvailable: 5,
+    configLineSettings: none(),
+    hiddenSettings: some({
+        name: 'My Hidden NFT Project',
+        uri: 'https://example.com/path/to/teaser.json',
+        hash: hash,
+    }),
+    guards: {
+        startDate: some({ date: dateTime('2024-01-01T16:00:00Z') }),
+    }
+});
+let tx = await res.sendAndConfirm(umi);
+```
+
+次に、作成したcandy machineを取得して、その詳細を出力しましょう。
+これを実現するために、mpl-core-candy-machineライブラリの`fetchCandyMachine`メソッドを使用します。
+
+```ts
+import { fetchCandyMachine } from '@metaplex-foundation/mpl-core-candy-machine';
+
+let candyMachineDetails = await fetchCandyMachine(umi, candyMachine.publicKey);
+
+console.log("Candy Machine Details: \n", candyMachineDetails);
+```
+
+これは以下のようなCandy Machineデータを返します:
+
+```json
+{
+  "publicKey": "FVQYpQxtT4ZqCmq3MNiWY1mZcEJsVA6DaaW6bMhERoVY",
+  "header": {
+    "executable": false,
+    "owner": "CMACYFENjoBMHzapRXyo1JZkVS6EtaDDzkjMrmQLvr4J",
+    "lamports": { "basisPoints": 5428800, "identifier": "SOL", "decimals": 9 },
+    "rentEpoch": 18446744073709551616,
+    "exists": true
+  },
+  "discriminator": [
+    51, 173, 177, 113,
+    25, 241, 109, 189
+  ],
+  "authority": "Cce2qGViiD1SqAiJMDJVJQrGfxcb3DMyLgyhaqYB8uZr",
+  "mintAuthority": "4P6VhHmNi9Qt5eRuQsE9SaE5bYWoLxpdPwmfNZeiU2mv",
+  "collectionMint": "3RLCk7G2ckGHt7XPNfzUYKLriME2BmMoumF8N4H5LvsS",
+  "itemsRedeemed": 0,
+  "data": {
+    "itemsAvailable": 5,
+    "maxEditionSupply": 0,
+    "isMutable": true,
+    "configLineSettings": { "__option": "None" },
+    "hiddenSettings": { "__option": "Some", "value": "[Object]" }
+  },
+  "items": [],
+  "itemsLoaded": 0
+}
+"Candy Guard Account":
+ {
+  "publicKey": "4P6VhHmNi9Qt5eRuQsE9SaE5bYWoLxpdPwmfNZeiU2mv",
+  "header": {
+    "executable": false,
+    "owner": "CMAGAKJ67e9hRZgfC5SFTbZH8MgEmtqazKXjmkaJjWTJ",
+    "lamports": { "basisPoints": 1538160, "identifier": "SOL", "decimals": 9 },
+    "rentEpoch": 18446744073709551616,
+    "exists": true
+  },
+  "discriminator": [
+     44, 207, 199, 184,
+    112, 103,  34, 181
+  ],
+  "base": "FVQYpQxtT4ZqCmq3MNiWY1mZcEJsVA6DaaW6bMhERoVY",
+  "bump": 251,
+  "authority": "Cce2qGViiD1SqAiJMDJVJQrGfxcb3DMyLgyhaqYB8uZr",
+  "guards": {
+    "botTax": { "__option": "None" },
+    "solPayment": { "__option": "None" },
+    "tokenPayment": { "__option": "None" },
+    "startDate": { "__option": "Some", "value": "[Object]" },
+    "thirdPartySigner": { "__option": "None" },
+    "tokenGate": { "__option": "None" },
+    "gatekeeper": { "__option": "None" },
+    "endDate": { "__option": "None" },
+    "allowList": { "__option": "None" },
+    "mintLimit": { "__option": "None" },
+    "nftPayment": { "__option": "None" },
+    "redeemedAmount": { "__option": "None" },
+    "addressGate": { "__option": "None" },
+    "nftGate": { "__option": "None" },
+    "nftBurn": { "__option": "None" },
+    "tokenBurn": { "__option": "None" },
+    "freezeSolPayment": { "__option": "None" },
+    "freezeTokenPayment": { "__option": "None" },
+    "programGate": { "__option": "None" },
+    "allocation": { "__option": "None" },
+    "token2022Payment": { "__option": "None" },
+    "solFixedFee": { "__option": "None" },
+    "nftMintLimit": { "__option": "None" },
+    "edition": { "__option": "None" },
+    "assetPayment": { "__option": "None" },
+    "assetBurn": { "__option": "None" },
+    "assetMintLimit": { "__option": "None" },
+    "assetBurnMulti": { "__option": "None" },
+    "assetPaymentMulti": { "__option": "None" },
+    "assetGate": { "__option": "None" },
+    "vanityMint": { "__option": "None" },
+  },
+  "groups": []
+}
+```
+
+ご覧のとおり、意図したとおり、実際には`startDate`のみが設定されているCandy Guard Accountも出力されます。
+
+## コレクションをミントする
+
+次に、Core Candy Machineから5つのNFTをミントしましょう。
+
+ミントされたこれらのアセットはすべて、作成したCore Candy Machineの`hiddenSettings`フィールドに設定したプレースホルダーの名前とURIを持ちます。
+
+これらのプレースホルダー要素は、リビールプロセス中に更新されます。
+
+```ts
+import { mintV1 } from '@metaplex-foundation/mpl-core-candy-machine';
+
+const nftMint = [
+    generateSigner(umi),
+    generateSigner(umi),
+    generateSigner(umi),
+    generateSigner(umi),
+    generateSigner(umi),
+];
+
+for(let i = 0; i < nftMint.length; i++) {
+    let mintNFT = await transactionBuilder()
+    .add(setComputeUnitLimit(umi, { units: 800_000 }))
+    .add(
+        mintV1(umi, {
+            candyMachine: candyMachine.publicKey,
+            asset: nftMint[i],
+            collection: collectionMint.publicKey,
+        })
+    ).sendAndConfirm(umi);
+
+    console.log("NFT minted!");
+};
+```
+
+## まとめ
+おめでとうございます!ガイドのパート1を完了し、隠し設定を持つCore Candy Machineのセットアップに成功しました。
+
+これまでに行ったことを振り返りましょう:
+- まずUMIをセットアップしました。
+- UMIをセットアップした後、最初のミント後にアセットを更新するために使用されるメタデータ(名前とURI)を含む配列を作成しました。これには、検証目的でハッシュを計算することが含まれます。
+- ミントされたアセットが属するCollectionアセットを作成しました。
+- 隠し設定、5つの利用可能なアイテム、および開始時間guardを持つCore Candy Machineを作成しました。
+- Core Candy Machineの隠し設定に保存されているプレースホルダー値を使用して、すべてのアセットをミントしました。
+
+パート2では、アセットをリビールし、そのメタデータを検証する手順を取り上げます。これには以下が含まれます:
+- コレクションアセットを取得し、準備されたリビールデータでそのメタデータを更新します。
+- リビールされたアセットのメタデータ(名前とURI)をハッシュ化し、期待されるハッシュと比較することで、リビールプロセスが成功したことを確認します。

+ 49 - 0
src/pages/ja/core-candy-machine/sdk/javascript.md

@@ -0,0 +1,49 @@
+---
+title: MPL Core Candy Machine Javascript SDK
+metaTitle: Javascript SDK | MPL Core Candy Machine
+description: MPL Core Candy Machine Javascript SDKを実行するためのプロジェクト設定方法を学びます。
+---
+
+Metaplexは、MPL Core Candy Machineプログラムと対話するために使用できるJavaScriptライブラリを提供しています。[Umi Framework](/umi)のおかげで、多くの独自の依存関係なしで出荷されるため、あらゆるJavaScriptプロジェクトで使用できる軽量なライブラリとなっています。
+
+始めるには、[Umiフレームワークのインストール](/umi/getting-started)とMPL-Core JavaScriptライブラリが必要です。
+
+## インストール
+
+インストールは、npm、yarn、bunなど、どのJSパッケージマネージャーでも実行できます。
+
+```sh
+npm install @metaplex-foundation/mpl-core-candy-machine
+```
+
+{% quick-links %}
+
+{% quick-link title="typedoc" target="_blank" icon="JavaScript" href="https://mpl-core-candy-machine.typedoc.metaplex.com/" description="MPL Core Candy Machine Javascript SDKの生成されたパッケージAPIドキュメント。" /%}
+
+{% quick-link title="npmjs.com" target="_blank" icon="JavaScript" href="https://www.npmjs.com/package/@metaplex-foundation/mpl-core-candy-machine" description="NPM上のMPL Core Candy Machine Javascript SDK。" /%}
+
+{% /quick-links %}
+
+## Umi セットアップ
+
+Metaplex Javascript SDKと対話するには、`umi`インスタンスが必要です。まだ`umi`インスタンスをセットアップおよび設定していない場合は、[Umi入門](/umi/getting-started)ページを確認して、RPCエンドポイントと`umi`のアイデンティティ/署名者を設定してください。
+
+`umi`インスタンスの初期化中に、以下を使用してmpl-coreパッケージを`umi`に追加できます。
+
+```js
+.use(mplCandyMachine())
+```
+
+`mpCandyMachine()`パッケージは、`.use()`を使用してumiインスタンス作成のどこにでも追加できます。
+
+```ts
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { mplCandyMachine } from '@metaplex-foundation/mpl-core-candy-machine'
+
+// お好みのRPCエンドポイントを使用してください。
+const umi = createUmi('http://api.devnet.solana.com')
+... // 追加のumi設定、パッケージ、署名者
+.use(mplCandyMachine())
+```
+
+ここから、あなたの`umi`インスタンスはmpl-coreパッケージにアクセスできるようになり、mpl-coreの機能セットを探索し始めることができます。

+ 45 - 0
src/pages/ja/core-candy-machine/sdk/rust.md

@@ -0,0 +1,45 @@
+---
+title: Core Candy Machine Rust SDK
+metaTitle: Core Candy Machine Rust SDK | Core Candy Machine
+description: MetaplexのCore Candy Machineプログラムのためのmpl-core-candy-machine Rust SDKを始めましょう。
+---
+
+## Core Candy Machine
+
+Core Candy Machineは、Core Candy Machineの初期化と充填を可能にするCandymachineの中核です。
+
+### インストール
+
+MPL-Core Rust SDKは、スクリプト/デスクトップ/モバイルアプリケーションだけでなく、Solanaオンチェーンプログラムでも使用できます。
+
+```rust
+cargo add mpl-core-candy-machine-core
+```
+
+{% quick-links %}
+
+{% quick-link title="crates.io" target="_blank" icon="Rust" href="https://crates.io/crates/mpl-core-candy-machine-core" description="MPL Core Candy Machine用Rust SDKを始めましょう。" /%}
+
+{% quick-link title="docs.rs" target="_blank" icon="Rust" href="https://docs.rs/mpl-core-candy-machine-core/" description="Core Candy Machineクレート用のRust SDK typedocプラットフォーム。" /%}
+
+{% /quick-links %}
+
+## Core Candy Guards
+
+Core Candy Guardsクレートは、Core Candy MachineにラップできるCore Candy Guardsの作成と管理を可能にします。
+
+### インストール
+
+MPL-Core Rust SDKは、スクリプト/デスクトップ/モバイルアプリケーションだけでなく、Solanaオンチェーンプログラムでも使用できます。
+
+```rust
+cargo add mpl-core-candy-guard
+```
+
+{% quick-links %}
+
+{% quick-link title="crates.io" target="_blank" icon="Rust" href="https://crates.io/crates/mpl-core-candy-guard" description="Core Candy Guards用Rust SDKを始めましょう。" /%}
+
+{% quick-link title="docs.rs" target="_blank" icon="Rust" href="https://docs.rs/mpl-core-candy-guard" description="Core Candy Guardsクレート用のRust SDK typedocプラットフォーム。" /%}
+
+{% /quick-links %}

+ 66 - 0
src/pages/ja/das-api/core-extension/methods/get-assets-by-authority.md

@@ -0,0 +1,66 @@
+---
+title: Authority kˆ‹ Core ¢»ÃÈnÖ—
+metaTitle: Authority kˆ‹ Core ¢»ÃÈnÖ— | DAS API Core á5_ý
+description: šUŒ_ Authority ’dYyfn MPL Core ¢»ÃÈnÅ1’ÔY
+---
+
+šUŒ_ Authority ’dYyfn MPL Core ¢»ÃÈnÅ1’á¿Çü¿@	ã�UŒ_×é°¤óÇü¿³ì¯·çóK‰™UŒ_Çü¿’+�fÔW~Y
+
+## ³üÉ‹
+
+`<ENDPOINT>` ’ºn RPC k`<PublicKey>` n$’ NFT ’Ö—W_D Authority nl‹uknMÛHfO`UD
+
+```js
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+import { das }  from '@metaplex-foundation/mpl-core-das';
+import { publicKey } from '@metaplex-foundation/umi';
+
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+
+const assets = await das.getAssetsByAuthority(umi, {authority:  publicKey('<PublicKey>')});
+console.log(assets);
+```
+
+
+## ì¹Ýó¹‹
+Sn‹goMk 1 dnªÖ¸§¯ÈnL+~ŒfD~Ypn Core ¢»ÃÈkþWf Authority ’dl‹un4MkoU‰kOn¨óÈêL+~Œ~Y
+
+```json
+[
+  {
+    publicKey: '8VrqN8b8Y7rqWsUXqUw7dxQw9J5UAoVyb6YDJs1mBCCz',
+    header: {
+      executable: false,
+      owner: 'CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d',
+      lamports: [Object],
+      rentEpoch: 18446744073709551616n,
+      exists: true
+    },
+    pluginHeader: { key: 3, pluginRegistryOffset: 179n },
+    royalties: {
+      authority: [Object],
+      offset: 138n,
+      basisPoints: 500,
+      creators: [Array],
+      ruleSet: [Object]
+    },
+    key: 1,
+    updateAuthority: {
+      type: 'Collection',
+      address: 'FgEKkVTSfLQ7a7BFuApypy4KaTLh65oeNRn2jZ6fiBav'
+    },
+    name: 'Number 1',
+    uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+    content: {
+      '$schema': 'https://schema.metaplex.com/nft1.0.json',
+      json_uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+      files: [Array],
+      metadata: [Object],
+      links: [Object]
+    },
+    owner: 'AUtnbwWJQfYZjJ5Mc6go9UancufcAuyqUZzR1jSe4esx',
+    seq: { __option: 'None' }
+  }
+]
+```

+ 67 - 0
src/pages/ja/das-api/core-extension/methods/get-assets-by-collection.md

@@ -0,0 +1,67 @@
+---
+title: Collection kˆ‹ Core ¢»ÃÈnÖ—
+metaTitle: Collection kˆ‹ Core ¢»ÃÈnÖ— | DAS API Core á5_ý
+description: šUŒ_ Collection …nYyfn MPL Core ¢»ÃÈnÅ1’ÔY
+---
+
+šUŒ_ Authority ’dYyfn MPL Core ¢»ÃÈnÅ1’á¿Çü¿@	ã�UŒ_×é°¤óÇü¿³ì¯·çóK‰™UŒ_Çü¿’+�fÔW~Y
+
+## ³üÉ‹
+
+`<ENDPOINT>` ’ºn RPC k`<PublicKey>` n$’ NFT ’Ö—W_D Collection nl‹uknMÛHfO`UD
+
+```js
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+import { das }  from '@metaplex-foundation/mpl-core-das';
+import { publicKey } from '@metaplex-foundation/umi';
+
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+const collection = publicKey('<PublicKey>');
+
+const assets = await das.getAssetsByCollection(umi, { collection });
+console.log(assets);
+```
+
+
+## ì¹Ýó¹‹
+Sn‹goMk 1 dnªÖ¸§¯ÈnL+~ŒfD~Ypn Core ¢»ÃÈ’d Collection n4MkoU‰kOn¨óÈêL+~Œ~Y
+
+```json
+[
+  {
+    publicKey: '8VrqN8b8Y7rqWsUXqUw7dxQw9J5UAoVyb6YDJs1mBCCz',
+    header: {
+      executable: false,
+      owner: 'CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d',
+      lamports: [Object],
+      rentEpoch: 18446744073709551616n,
+      exists: true
+    },
+    pluginHeader: { key: 3, pluginRegistryOffset: 179n },
+    royalties: {
+      authority: [Object],
+      offset: 138n,
+      basisPoints: 500,
+      creators: [Array],
+      ruleSet: [Object]
+    },
+    key: 1,
+    updateAuthority: {
+      type: 'Collection',
+      address: 'FgEKkVTSfLQ7a7BFuApypy4KaTLh65oeNRn2jZ6fiBav'
+    },
+    name: 'Number 1',
+    uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+    content: {
+      '$schema': 'https://schema.metaplex.com/nft1.0.json',
+      json_uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+      files: [Array],
+      metadata: [Object],
+      links: [Object]
+    },
+    owner: 'AUtnbwWJQfYZjJ5Mc6go9UancufcAuyqUZzR1jSe4esx',
+    seq: { __option: 'None' }
+  }
+]
+```

+ 67 - 0
src/pages/ja/das-api/core-extension/methods/get-assets-by-owner.md

@@ -0,0 +1,67 @@
+---
+title: Owner kˆ‹ Core ¢»ÃÈnÖ—
+metaTitle: Owner kˆ‹ Core ¢»ÃÈnÖ— | DAS API Core á5_ý
+description: Owner kˆ‹Yyfn MPL Core ¢»ÃÈnÅ1’ÔY
+---
+
+šUŒ_l‹uL@	Y‹Yyfn MPL Core ¢»ÃÈnÅ1’á¿Çü¿@	ã�UŒ_×é°¤óÇü¿³ì¯·çóK‰™UŒ_Çü¿’+�fÔW~Y
+
+## ³üÉ‹
+
+`<ENDPOINT>` ’ºn RPC k`<PublicKey>` n$’@	nl‹uknMÛHfO`UD
+
+```js
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+import { das }  from '@metaplex-foundation/mpl-core-das';
+import { publicKey } from '@metaplex-foundation/umi';
+
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+const owner = publicKey('<PublicKey>');
+
+const assets = await das.getAssetsByCollection(umi, { owner });
+console.log(assets);
+```
+
+
+## ì¹Ýó¹‹
+Sn‹goMk 1 dnªÖ¸§¯ÈnL+~ŒfD~Ypn Core ¢»ÃÈ’@	Y‹l‹un4MkoU‰kOn¨óÈêL+~Œ~Y
+
+```json
+[
+  {
+    publicKey: '8VrqN8b8Y7rqWsUXqUw7dxQw9J5UAoVyb6YDJs1mBCCz',
+    header: {
+      executable: false,
+      owner: 'CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d',
+      lamports: [Object],
+      rentEpoch: 18446744073709551616n,
+      exists: true
+    },
+    pluginHeader: { key: 3, pluginRegistryOffset: 179n },
+    royalties: {
+      authority: [Object],
+      offset: 138n,
+      basisPoints: 500,
+      creators: [Array],
+      ruleSet: [Object]
+    },
+    key: 1,
+    updateAuthority: {
+      type: 'Collection',
+      address: 'FgEKkVTSfLQ7a7BFuApypy4KaTLh65oeNRn2jZ6fiBav'
+    },
+    name: 'Number 1',
+    uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+    content: {
+      '$schema': 'https://schema.metaplex.com/nft1.0.json',
+      json_uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+      files: [Array],
+      metadata: [Object],
+      links: [Object]
+    },
+    owner: 'AUtnbwWJQfYZjJ5Mc6go9UancufcAuyqUZzR1jSe4esx',
+    seq: { __option: 'None' }
+  }
+]
+```

+ 67 - 0
src/pages/ja/das-api/core-extension/methods/get-collection.md

@@ -0,0 +1,67 @@
+---
+title: Core Collection nÖ—
+metaTitle: Collection nÖ— | DAS API Core á5_ý
+description: MPL Core Collection nÅ1’ÔY
+---
+
+á¿Çü¿@	ã�UŒ_×é°¤óÇü¿’+€MPL Core Collection nÅ1’ÔW~Y
+
+## ³üÉ‹
+
+`<ENDPOINT>` ’ºn RPC k`<PublicKey>` n$’Ö—W_D MPL Core Collection nl‹uknMÛHfO`UD
+
+```js
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+import { das }  from '@metaplex-foundation/mpl-core-das';
+import { publicKey } from '@metaplex-foundation/umi';
+
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+const collectionId = publicKey('<PublicKey>');
+
+const collection = await das.getCollection(umi, collectionId);
+console.log(collection);
+```
+
+
+## ì¹Ýó¹‹
+
+```json
+{
+  publicKey: 'FgEKkVTSfLQ7a7BFuApypy4KaTLh65oeNRn2jZ6fiBav',
+  uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+  name: 'Number Collection',
+  content: {
+    '$schema': 'https://schema.metaplex.com/nft1.0.json',
+    json_uri: 'https://arweave.net/TkklLLQKiO9t9_JPmt-eH_S-VBLMcRjFcgyvIrENBzA',
+    files: [ [Object] ],
+    metadata: {
+      attributes: [Array],
+      description: 'Collection of 10 numbers on the blockchain. This is the number 1/10.',
+      name: 'Number Collection',
+      symbol: ''
+    },
+    links: {
+      image: 'https://arweave.net/swS5eZNrKGtuu5ebdqotzPny4OBoM4wHneZ_Ld17ZU8?ext=png'
+    }
+  },
+  header: {
+    executable: false,
+    owner: 'CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d',
+    lamports: { basisPoints: 2268960n, identifier: 'SOL', decimals: 9 },
+    rentEpoch: 18446744073709551616n,
+    exists: true
+  },
+  royalties: {
+    authority: { type: 'UpdateAuthority' },
+    basisPoints: 500,
+    creators: [ [Object] ],
+    ruleSet: { __kind: 'None', type: 'None' },
+    offset: 138n
+  },
+  key: 5,
+  updateAuthority: 'AUtnbwWJQfYZjJ5Mc6go9UancufcAuyqUZzR1jSe4esx',
+  numMinted: 1,
+  currentSize: 1
+}
+```

BIN
src/pages/ja/das-api/core-extension/methods/search-assets.md


BIN
src/pages/ja/das-api/core-extension/methods/search-collections.md


+ 40 - 0
src/pages/ja/das-api/core-extension/plugin-derivation.md

@@ -0,0 +1,40 @@
+---
+title: ×é°¤óú
+metaTitle: DAS API Core á5_ý - ×é°¤óú
+description: KÕgúY‹KêÕú’!¹Y‹
+---
+
+Core DAS á5_ýo×é°¤óh™UŒ_×é°¤ó’êÕ„kúgM~YSŒ’Œhk!¹W_Šã�ŠkKÕgúW_D4oån³üɹËÚÃÈLyËa~Y
+
+## ×é°¤óún!¹
+SnêÕú’!¹W_D4oYyfn¢pg!nˆFk `skipDerivePlugins` ’(gM~Y:
+
+```js
+const assetsByOwner = await das.getAssetsByOwner(umi, {
+  owner: publicKey('<ownerPublicKey>'),
+  skipDerivePlugins: true,
+});
+```
+
+## KÕ×é°¤óú
+åMk³ì¯·çó’Ö—n4mpl-core JavaScript SDK ’(Wf¢»ÃÈn×é°¤ó’KÕgúY‹Sh‚gM~Y:
+
+```js
+import { deriveAssetPlugins } from '@metaplex-foundation/mpl-core'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
+import { das }  from '@metaplex-foundation/mpl-core-das';
+import { publicKey } from '@metaplex-foundation/umi';
+
+const umi = createUmi('<ENDPOINT>').use(dasApi());
+const collectionId = publicKey('<PublicKey>');
+//...
+
+const collection = await das.getCollection(umi, collectionId);
+const assetsByCollection = await das.getAssetsByCollection(umi, {
+  collection: collection.publicKey,
+  skipDerivePlugins: true,
+});
+
+const derivedAssets = assetsByCollection.map((asset) => deriveAssetPlugins(asset, collection))
+```

+ 276 - 0
src/pages/ja/das-api/guides/get-fungible-assets.md

@@ -0,0 +1,276 @@
+---
+title: オーナー別のFungible Asset取得
+metaTitle: Fungible Asset取得 | DAS APIガイド
+description: 特定のウォレットが所有するすべてのfungibleトークンを取得する方法を学びます
+---
+
+このガイドでは、DAS APIを使用して、特定のウォレットアドレスが所有するすべてのfungibleトークン(SPLトークン、SOLなど)を取得する方法を説明します。
+
+## 方法1: インターフェースフィルターを使用したSearch Assets(推奨)
+
+fungible assetを取得する最も効果的な方法は、`FungibleToken`インターフェースフィルターを使用した`searchAssets`です。これはfungible assetのみを返すため、フィルタリングの必要がありません。
+
+この方法は最も効果的ですが、現在すべてのDAS APIプロバイダーでサポートされているわけではありません。
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+
+```typescript
+import { publicKey } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
+
+(async () => {
+  const umi = createUmi('<ENDPOINT>').use(dasApi())
+
+  // ウォレットが所有するすべてのfungible assetを取得
+  const fungibleTokens = await umi.rpc.searchAssets({
+    owner: publicKey('WALLET_ADDRESS'),
+    interface: 'FungibleToken',
+    limit: 1000,
+    displayOptions: {
+      showFungible: true
+    }
+  })
+
+  console.log(`${fungibleTokens.items.length}個のfungible assetが見つかりました`)
+  fungibleTokens.items.forEach(asset => {
+    console.log(`トークン: ${asset.id}`)
+    console.log(`供給量: ${asset.supply}`)
+    console.log(`名前: ${asset.content.metadata?.name || '不明'}`)
+    console.log(`シンボル: ${asset.content.metadata?.symbol || '不明'}`)
+  })
+})();
+```
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+
+```javascript
+(async () => {
+  const response = await fetch('<ENDPOINT>', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      jsonrpc: '2.0',
+      id: 1,
+      method: 'searchAssets',
+      params: {
+        ownerAddress: 'WALLET_ADDRESS',
+        interface: 'FungibleToken',
+        limit: 10000,
+        options: {
+          showFungible: true
+        }
+      }
+    })
+  })
+
+  const data = await response.json()
+  console.log(`${data.result.items.length}個のfungible assetが見つかりました`)
+})();
+```
+{% /totem-accordion %}
+{% totem-accordion title="cURL例" %}
+```bash
+curl -X POST <ENDPOINT> \
+  -H "Content-Type: application/json" \
+  -d '{
+    "jsonrpc": "2.0",
+    "id": 1,
+    "method": "searchAssets",
+    "params": {
+      "ownerAddress": "WALLET_ADDRESS",
+      "interface": "FungibleToken",
+      "limit": 10000,
+      "options": {
+        "showFungible": true
+      }
+    }
+  }'
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## 方法2: フィルタリングを使用したGet Assets By Owner
+
+`getAssetsByOwner`を使用して、クライアント側で結果をフィルタリングすることもできます:
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+```typescript
+import { publicKey } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
+
+(async () => {
+  const umi = createUmi('<ENDPOINT>').use(dasApi())
+
+  // すべてのassetを取得してfungibleなものをフィルタリング
+  const allAssets = await umi.rpc.getAssetsByOwner({
+    owner: publicKey('WALLET_ADDRESS'),
+    limit: 10000,
+    displayOptions: {
+      showFungible: true
+    }
+  })
+
+  // fungible assetをフィルタリング
+  const fungibleTokens = allAssets.items.filter(
+    (asset) => asset.interface === 'FungibleToken',
+  )
+
+  console.log(
+    `全${allAssets.items.length}個のassetのうち${fungibleTokens.length}個のfungible assetが見つかりました`,
+  )
+})();
+```
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+```javascript
+(async () => {
+  const response = await fetch('<ENDPOINT>', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      jsonrpc: '2.0',
+      id: 1,
+      method: 'getAssetsByOwner',
+      params: {
+        ownerAddress: 'WALLET_ADDRESS',
+        options: {
+          showFungible: true
+        }
+      }
+    })
+  })
+
+  const data = await response.json()
+  const allAssets = data.result
+
+  // fungible assetをフィルタリング
+  const FungibleTokens = allAssets.items.filter(asset =>
+    asset.interface === 'FungibleToken'
+  )
+
+  console.log(`全${allAssets.items.length}個のassetのうち${FungibleTokens.length}個のfungible assetが見つかりました`)
+})();
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## 方法3: トークンプロパティによるフィルタリング
+
+様々なプロパティでfungibleトークンをフィルタリングできます:
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+```typescript
+import { publicKey } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
+
+const umi = createUmi('<ENDPOINT>').use(dasApi())
+
+// 特定の供給量範囲のトークンを取得
+const tokensBySupply = await umi.rpc.searchAssets({
+  owner: publicKey('WALLET_ADDRESS'),
+  interface: 'FungibleToken',
+  supply: 1000000, // 供給量 >= 100万のトークン
+  limit: 1000,
+  displayOptions: {
+    showFungible: true
+  }
+})
+
+// クリエーター別にトークンを取得
+const creatorTokens = await umi.rpc.searchAssets({
+  owner: publicKey('WALLET_ADDRESS'),
+  interface: 'FungibleToken',
+  creatorAddress: 'CREATOR_ADDRESS',
+  limit: 1000,
+  displayOptions: {
+    showFungible: true
+  }
+})
+
+console.log(`供給量別トークン: ${tokensBySupply.items.length}`)
+console.log(`クリエータートークン: ${creatorTokens.items.length}`)
+```
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+```javascript
+(async () => {
+  // 特定の供給量範囲のトークンを取得
+  const tokensBySupplyResponse = await fetch('<ENDPOINT>', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      jsonrpc: '2.0',
+      id: 1,
+      method: 'searchAssets',
+      params: {
+        ownerAddress: 'WALLET_ADDRESS',
+        interface: 'FungibleToken',
+        supply: 1000000, // 供給量 >= 100万のトークン
+        limit: 1000,
+        options: {
+          showFungible: true
+        }
+      }
+    })
+  })
+
+  const tokensBySupplyData = await tokensBySupplyResponse.json()
+  const tokensBySupply = tokensBySupplyData.result
+
+  // クリエーター別にトークンを取得
+  const creatorResponse = await fetch('<ENDPOINT>', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      jsonrpc: '2.0',
+      id: 1,
+      method: 'searchAssets',
+      params: {
+        ownerAddress: 'WALLET_ADDRESS',
+        interface: 'FungibleToken',
+        creatorAddress: 'CREATOR_ADDRESS',
+        limit: 1000,
+        options: {
+          showFungible: true
+        }
+      }
+    })
+  })
+
+  const creatorData = await creatorResponse.json()
+  const creatorTokens = creatorData.result
+
+  console.log(`供給量別トークン: ${tokensBySupply.items.length}`)
+  console.log(`クリエータートークン: ${creatorTokens.items.length}`)
+})();
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## ヒントとベストプラクティス
+
+1. **インターフェースフィルターを使用する**: 詳細については[基準によるAsset検索](/jp/das-api/guides/search-by-criteria)を参照してください。
+2. **Show Fungibleを有効化する**: [表示オプション](/jp/das-api/guides/display-options)に示されているように、display optionsで`showFungible: true`を使用して完全なトークン情報を取得します。
+3. **小数点を考慮する**: トークン量を適切にフォーマットするために`decimals`フィールドを確認してください。
+4. **結果をキャッシュする**: トークン残高は頻繁に変更されますが、トークンメタデータは比較的安定しています。
+
+## 関連ガイド
+
+- [ウォレット内のすべてのトークンを取得](/jp/das-api/guides/get-wallet-tokens)
+- [オーナー別のNFT取得](/jp/das-api/guides/get-nfts-by-owner)
+- [複数の基準によるAsset検索](/jp/das-api/guides/search-by-criteria)
+- [コレクション統計の分析](/jp/das-api/guides/collection-statistics)

+ 255 - 0
src/pages/ja/das-api/guides/get-nfts-by-owner.md

@@ -0,0 +1,255 @@
+---
+title: オーナー別のNFT取得
+metaTitle: オーナー別のNFT取得 | DAS APIガイド
+description: 特定のウォレットが所有するすべてのnon-fungibleトークンを取得する方法を学びます
+---
+
+# オーナー別のNFT取得
+
+このガイドでは、DAS APIを使用して、特定のウォレットアドレスが所有するすべてのnon-fungibleトークン(NFT)を取得する方法を説明します。これは、NFTギャラリー、ポートフォリオトラッカー、マーケットプレイス機能の構築に役立ちます。
+
+## 方法1: インターフェースフィルターを使用したGet Assets By Owner(推奨)
+
+`getAssetsByOwner`メソッドとインターフェースフィルタリングの組み合わせは、特定のウォレットが所有するNFTを取得する最も効率的な方法です。インターフェースフィルターに該当するNFTのみを返します。例えば、`MplCoreAsset`は圧縮NFTを返しません。
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+
+```typescript
+import { publicKey } from "@metaplex-foundation/umi";
+import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
+import { dasApi } from "@metaplex-foundation/digital-asset-standard-api";
+
+(async () => {
+  const umi = createUmi(
+    "<ENDPOINT>"
+  ).use(dasApi());
+  console.log("umi.rpc.getAssetsByOwner");
+  // 特定のウォレットが所有するすべてのNFTを取得
+  const ownerNfts = await umi.rpc.getAssetsByOwner({
+    owner: publicKey("WALLET_ADDRESS"),
+    interface: "MplCoreAsset", //オプション、これがないとウォレットが所有するすべてのassetを取得します
+    displayOptions: {
+      showCollectionMetadata: true,
+      showFungible: false, // fungibleトークンを除外
+    },
+  });
+
+  console.log(`このウォレットが所有する${ownerNfts.items.length}個のNFTが見つかりました`);
+  console.log(`合計asset数: ${ownerNfts.total}`);
+
+  // 各NFTを処理
+  ownerNfts.items.forEach((nft) => {
+    console.log(`NFT ID: ${nft.id}`);
+    console.log(`名前: ${nft.content.metadata?.name || "不明"}`);
+    console.log(
+      `コレクション: ${
+        nft.grouping?.find((g) => g.group_key === "collection")?.group_value ||
+        "なし"
+      }`
+    );
+    console.log("---");
+  });
+})();
+```
+
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+
+```javascript
+(async () => {
+  const response = await fetch("<ENDPOINT>", {
+    method: "POST",
+    headers: {
+      "Content-Type": "application/json",
+    },
+    body: JSON.stringify({
+      jsonrpc: "2.0",
+      id: 1,
+      method: "getAssetsByOwner",
+      params: {
+        ownerAddress: "WALLET_ADDRESS",
+        options: {
+          showCollectionMetadata: true,
+          showFungible: false, // fungibleトークンを除外
+        },
+      },
+    }),
+  });
+
+  const data = await response.json();
+  console.log(`${data.result.items.length}個のNFTが見つかりました`);
+})();
+```
+{% /totem-accordion %}
+{% totem-accordion title="cURL例" %}
+```bash
+curl -X POST <ENDPOINT> \
+  -H "Content-Type: application/json" \
+  -d '{
+    "jsonrpc": "2.0",
+    "id": 1,
+    "method": "getAssetsByOwner",
+    "params": {
+      "ownerAddress": "WALLET_ADDRESS",
+      "options": {
+        "showCollectionMetadata": true,
+        "showFungible": false
+      }
+    }
+  }'
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## 方法2: オーナーとインターフェースフィルターを使用したSearch Assets
+
+`searchAssets`を使用して、`MplCoreAsset`のみを取得するようなインターフェースなどの追加フィルターでより具体的な結果を得ることができます。
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+```typescript
+import { publicKey } from "@metaplex-foundation/umi";
+import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
+import { dasApi } from "@metaplex-foundation/digital-asset-standard-api";
+
+(async () => {
+  const umi = createUmi(
+    "<ENDPOINT>"
+  ).use(dasApi());
+
+  // 特定のウォレットが所有するNFTを検索
+  const ownerNfts = await umi.rpc.searchAssets({
+    owner: publicKey("WALLET_ADDRESS"),
+    limit: 1000,
+    interface: "MplCoreAsset",
+    displayOptions: {
+      showCollectionMetadata: true,
+    },
+  });
+
+  console.log(`${ownerNfts.items.length}個のCore Assetが見つかりました`);
+})();
+
+
+```
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+```javascript
+(async () => {
+  const response = await fetch("<ENDPOINT>", {
+    method: "POST",
+    headers: {
+      "Content-Type": "application/json",
+    },
+    body: JSON.stringify({
+      jsonrpc: "2.0",
+      id: 1,
+      method: "searchAssets",
+      params: {
+        ownerAddress: "WALLET_ADDRESS",
+        interface: "MplCoreAsset",
+        limit: 1000,
+        options: {
+          showCollectionMetadata: true,
+        },
+      },
+    }),
+  });
+
+  const data = await response.json();
+  console.log(`${data.result.items.length}個のCore Assetが見つかりました`);
+})();
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## 方法3 – コレクション別のNFTフィルタリング
+
+ウォレットアドレスに加えて、特定のコレクションでNFTをフィルタリングできます。例えば、自分のコレクションからNFTを探す場合などです。
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+```typescript
+import { publicKey } from "@metaplex-foundation/umi";
+import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
+import { dasApi } from "@metaplex-foundation/digital-asset-standard-api";
+
+(async () => {
+  const umi = createUmi(
+    "<ENDPOINT>"
+  ).use(dasApi());
+
+  // このウォレットが所有する特定のコレクションのNFTを取得
+  const collectionNfts = await umi.rpc.searchAssets({
+    owner: publicKey("WALLET_ADDRESS"),
+    grouping: ["collection", "COLLECTION_ADDRESS"],
+    limit: 1000,
+    displayOptions: {
+      showCollectionMetadata: true,
+      showFungible: false,
+    },
+  });
+
+  console.log(`このコレクションから${collectionNfts.items.length}個のNFTが見つかりました`);
+})();
+```
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+```javascript
+(async () => {
+  const response = await fetch(
+    "<ENDPOINT>",
+    {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json",
+      },
+      body: JSON.stringify({
+        jsonrpc: "2.0",
+        id: 1,
+        method: "searchAssets",
+        params: {
+          ownerAddress: "WALLET_ADDRESS",
+          grouping: [
+            "collection",
+            "COLLECTION_ADDRESS",
+          ],
+          options: {
+            showCollectionMetadata: true,
+          },
+        },
+      }),
+    }
+  );
+
+  const data = await response.json();
+  console.log(`このウォレット内のこのコレクションから${data.result.items.length}個のNFTが見つかりました`);
+})();
+
+```
+{% /totem-accordion %}
+{% /totem %}
+
+## 一般的なユースケース
+
+- **NFTギャラリー**: ユーザーが所有するすべてのNFTを表示
+- **ポートフォリオトラッカー**: NFT保有を監視
+- **マーケットプレイス統合**: ユーザーのNFTインベントリを表示
+- **コレクション管理**: コレクション別にNFTを整理
+- **ゲームアプリケーション**: ユーザーのNFTゲームアセットを読み込む
+
+## ヒントとベストプラクティス
+
+1. **インターフェースフィルタリングを使用する** NFTのみを取得(例: fungibleトークンを除外)
+2. **[ページネーション](/jp/das-api/guides/pagination)を実装する** 多数のNFTを持つウォレット用
+3. **結果をキャッシュする** 頻繁なクエリのパフォーマンスを向上
+4. **[表示オプション](/jp/das-api/guides/display-options)を含める** 追加のメタデータを取得
+5. **結果をソートする** 意味のある方法でデータを提示
+6. **コレクション別にフィルタリングする** 特定のNFTタイプに焦点を当てる
+
+## 関連情報
+
+- [クリエーター別のAsset取得](/jp/das-api/methods/get-assets-by-creator) - 特定のアドレスによって作成されたすべてのトークンを発見
+- [コレクション内のすべてのトークン取得](/jp/das-api/guides/get-collection-nfts) - 特定のコレクションからすべてのassetを取得
+- [複数の基準によるAsset検索](/jp/das-api/guides/search-by-criteria) - 高度なクエリのために複数のフィルターを組み合わせる

+ 124 - 0
src/pages/ja/das-api/guides/owner-and-collection.md

@@ -0,0 +1,124 @@
+---
+title: オーナーとコレクション別のAsset取得
+metaTitle: オーナーとコレクション別のAsset取得 | DAS APIガイド
+description: 特定のコレクションに属し、特定のウォレットが所有するデジタルアセットを見つける方法を学びます
+---
+
+# オーナーとコレクション別のAsset取得
+
+このガイドでは、特定のコレクションに属し、特定のウォレットアドレスが所有するデジタルアセットを見つける方法を説明します。これは、コレクション固有のポートフォリオビュー、マーケットプレイス機能、分析ツールの構築に役立ちます。
+
+## オーナーとコレクショングループ化を使用したSearch Assets
+
+`searchAssets`メソッドを使用すると、正確な結果を得るためにオーナーとコレクションのフィルターを組み合わせることができます。
+
+{% totem %}
+{% totem-accordion title="UMI例" %}
+
+```typescript
+import { publicKey } from '@metaplex-foundation/umi'
+import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
+import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
+
+(async () => {
+  const umi = createUmi(
+    "<ENDPOINT>"
+  ).use(dasApi());
+
+  // ウォレットが所有する特定のコレクションのassetを検索
+  const collectionAssets = await umi.rpc.searchAssets({
+    owner: publicKey("WALLET_ADDRESS"),
+    grouping: ["collection", "COLLECTION_ADDRESS"],
+    limit: 1000,
+    displayOptions: {
+      showCollectionMetadata: true,
+    }
+  })
+
+  console.log(`ウォレットが所有するコレクションから${collectionAssets.items.length}個のassetが見つかりました`)
+  console.log(`利用可能な合計: ${collectionAssets.total}`)
+
+  // 各assetを処理
+  collectionAssets.items.forEach(asset => {
+    console.log(`Asset ID: ${asset.id}`)
+    console.log(`名前: ${asset.content.metadata?.name || '不明'}`)
+    console.log(`インターフェース: ${asset.interface}`)
+    console.log('---')
+  })
+})();
+```
+
+{% /totem-accordion %}
+{% totem-accordion title="JavaScript例" %}
+
+```javascript
+(async () => {
+  const response = await fetch('<ENDPOINT>', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json',
+    },
+    body: JSON.stringify({
+      jsonrpc: '2.0',
+      id: 1,
+      method: 'searchAssets',
+      params: {
+        ownerAddress: 'WALLET_ADDRESS',
+        grouping: ['collection', 'COLLECTION_ADDRESS'],
+        limit: 1000,
+        options: {
+          showCollectionMetadata: true
+        }
+      }
+    })
+  })
+
+  const data = await response.json()
+  console.log(`ウォレットが所有するコレクションから${data.result.items.length}個のassetが見つかりました`)
+})();
+```
+
+{% /totem-accordion %}
+{% totem-accordion title="cURL例" %}
+
+```bash
+curl -X POST <ENDPOINT> \
+  -H "Content-Type: application/json" \
+  -d '{
+    "jsonrpc": "2.0",
+    "id": 1,
+    "method": "searchAssets",
+    "params": {
+      "ownerAddress": "WALLET_ADDRESS",
+      "grouping": ["collection", "COLLECTION_ADDRESS"],
+      "limit": 1000,
+      "options": {
+        "showCollectionMetadata": true
+      }
+    }
+  }'
+```
+
+{% /totem-accordion %}
+{% /totem %}
+
+## 一般的なユースケース
+
+- **コレクションポートフォリオ**: ユーザーが所有する特定のコレクションのすべてのassetを表示
+- **マーケットプレイス統合**: ユーザーのウォレット内のコレクションから利用可能なassetを表示
+- **コレクション分析**: 特定のコレクション内の保有を分析
+- **取引ツール**: 取引戦略のためにコレクション保有を追跡
+
+## ヒントとベストプラクティス
+
+1. **[ページネーション](/jp/das-api/guides/pagination)を使用する** 大規模なデータセット用
+2. **[表示オプション](/jp/das-api/guides/display-options)を含める** 追加のメタデータを取得
+3. **結果をソートする** 意味のある方法でデータを提示
+4. **空の結果を適切に処理する** コレクションが空の場合
+5. **コレクションアドレスを検証する** クエリ前に
+
+## 関連情報
+
+- [コレクション内のすべてのトークン取得](/jp/das-api/guides/get-collection-nfts) - 特定のコレクションからすべてのassetを取得
+- [オーナー別のNFT取得](/jp/das-api/guides/get-nfts-by-owner) - ウォレットが所有するすべてのNFTを検索
+- [複数の基準によるAsset検索](/jp/das-api/guides/search-by-criteria) - 高度なクエリのために複数のフィルターを組み合わせる

BIN
src/pages/ja/das-api/guides/search-by-criteria.md


+ 18 - 0
src/pages/ja/das-api/methods/get-asset-proofs.md

@@ -0,0 +1,18 @@
+---
+title: アセットプルーフの取得
+metaTitle: アセットプルーフの取得 | DAS API
+description: 複数の圧縮アセットのマークルツリープルーフ情報を返します
+tableOfContents: false
+---
+
+複数の圧縮アセットのマークルツリープルーフ情報を返します。このメソッドは、圧縮NFTのマークルプルーフを取得することで、その真正性を検証するために使用されます。
+
+## パラメータ
+
+| 名前            | 必須 | 説明                                |
+| --------------- | :------: | ------------------------------------------ |
+| `ids`           |    ✅    | プルーフを取得するアセットIDの配列。   |
+
+## プレイグラウンド
+
+{% apiRenderer method="getAssetProofs" /%}

+ 26 - 0
src/pages/ja/das-api/methods/get-asset-signatures.md

@@ -0,0 +1,26 @@
+---
+title: アセット署名の取得
+metaTitle: アセット署名の取得 | DAS API
+description: 圧縮アセットのトランザクション署名を返します
+tableOfContents: false
+---
+
+圧縮アセットに関連するトランザクション署名を返します。アセットはIDで識別するか、ツリーとリーフインデックスで識別できます。
+
+## パラメータ
+
+| 名前            | 必須 | 説明                                |
+| --------------- | :------: | ------------------------------------------ |
+| `assetId`       |    ✅ (またはtree + leafIndex)   | アセットのID。                       |
+| `tree`          |    ✅ (またはassetId)    | リーフに対応するツリー。        |
+| `leafIndex`     |    ✅ (またはassetId)    | アセットのリーフインデックス。               |
+| `limit`         |          | 取得する署名の最大数。 |
+| `page`          |          | 取得する「ページ」のインデックス。        |
+| `before`        |          | 指定された署名より前の署名を取得。 |
+| `after`         |          | 指定された署名より後の署名を取得。 |
+| `cursor`        |          | 署名のカーソル。               |
+| `sortDirection` |          | ソート方向。"asc"または"desc"のいずれか。 |
+
+## プレイグラウンド
+
+{% apiRenderer method="getAssetSignatures" /%}

+ 24 - 0
src/pages/ja/das-api/methods/get-assets-by-authority.md

@@ -0,0 +1,24 @@
+---
+title: 権限者別アセット取得
+metaTitle: 権限者別アセット取得 | DAS API
+description: 権限者アドレスを指定してアセットのリストを返します
+tableOfContents: false
+---
+
+権限者アドレスを指定してアセットのリストを返します。
+
+## パラメータ
+
+| 名前               | 必須 | 説明                                |
+| ------------------ | :------: | ------------------------------------------ |
+| `authorityAddress` |    ✅    | アセットの権限者のアドレス。|
+| `sortBy`           |          | ソート基準。これはオブジェクト`{ sortBy: <value>, sortDirection: <value> }`として指定されます。`sortBy`は`["created", "updated", "recentAction", "none"]`のいずれか、`sortDirection`は`["asc", "desc"]`のいずれかです。     |
+| `limit`            |          | 取得するアセットの最大数。  |
+| `page`             |          | 取得する「ページ」のインデックス。       |
+| `before`           |          | 指定されたIDより前のアセットを取得。   |
+| `after`            |          | 指定されたIDより後のアセットを取得。    |
+| `options`          |          | 表示オプションオブジェクト。詳細は[表示オプション](/das-api/display-options)を参照してください。 |
+
+## プレイグラウンド
+
+{% apiRenderer method="getAssetsByAuthority" /%}

+ 19 - 0
src/pages/ja/das-api/methods/get-assets.md

@@ -0,0 +1,19 @@
+---
+title: アセットの取得
+metaTitle: アセットの取得 | DAS API
+description: 複数の圧縮/標準アセットの情報を返します
+tableOfContents: false
+---
+
+メタデータと所有者を含む、複数の圧縮/標準アセットの情報を返します。
+
+## パラメータ
+
+| 名前  | 必須 | 説明            |
+| ----- | :------: | ---------------------- |
+| `ids` |    ✅    | アセットIDの配列。 |
+| `options` |          | 表示オプションオブジェクト。詳細は[表示オプション](/das-api/display-options)を参照してください。 |
+
+## プレイグラウンド
+
+{% apiRenderer method="getAssets" /%}

+ 35 - 0
src/pages/ja/das-api/methods/get-nft-editions.md

@@ -0,0 +1,35 @@
+---
+title: NFTエディションの取得
+metaTitle: NFTエディションの取得 | DAS API
+description: マスターエディションNFTミントのすべての印刷可能なエディションを取得
+---
+
+マスターエディションNFTミントのすべての印刷可能なエディションを返します—エディション番号、アドレス、供給情報を含みます。エディションアドレスを渡すことで、対応するマスターエディションとその兄弟エディションを取得することもできます。
+
+## パラメータ
+
+| 名前          | 必須 | 説明                                        |
+| ------------- | :------: | -------------------------------------------------- |
+| `mintAddress` |    ✅    | マスターエディションNFTのミントアドレス。       |
+| `cursor`      |         | ページネーション用のカーソル。                             |
+| `page`        |         | ページネーション用のページ番号。                        |
+| `limit`       |         | 返すエディションの最大数。              |
+| `before`      |         | このカーソルより前のエディションを返す。                |
+| `after`       |         | このカーソルより後のエディションを返す。                 |
+
+## レスポンス
+
+レスポンスには以下が含まれます:
+
+- `editions` - 以下を含むエディションオブジェクトの配列:
+  - `edition_address` - [エディションアカウント](/token-metadata#printing-editions)のアドレス
+  - `edition_number` - エディション番号(1, 2, 3など)
+  - `mint_address` - エディションのミントアドレス
+- `master_edition_address` - マスターエディションアカウントのアドレス
+- `supply` - 現在ミントされたエディション数
+- `max_supply` - ミント可能なエディションの最大数(無制限の場合はnull)
+
+
+## プレイグラウンド
+
+{% apiRenderer method="getNftEditions" noUmi=true /%}

+ 42 - 0
src/pages/ja/das-api/methods/get-token-accounts.md

@@ -0,0 +1,42 @@
+---
+title: トークンアカウントの取得
+metaTitle: トークンアカウントの取得 | DAS API
+description: 所有者またはミントでトークンアカウントのリストを取得
+tableOfContents: false
+---
+
+所有者アドレス、ミントアドレス、または両方でフィルタリングされたトークンアカウントのリストを返します。ウォレットに関連付けられたすべてのトークンアカウント、または特定のトークンを保持するすべてのアカウントを見つけるのに便利です。
+
+## パラメータ
+
+| 名前           | 必須 | 説明                                          |
+| -------------- | :------: | ---------------------------------------------------- |
+| `ownerAddress` |    (`mintAddress`が提供されていない場合のみ必須)    | 所有者アドレスでフィルタリング。                             |
+| `mintAddress`  |    (`ownerAddress`が提供されていない場合のみ必須)    | ミントアドレスでフィルタリング。                              |
+| `cursor`       |         | ページネーション用のカーソル。                               |
+| `page`         |         | ページネーション用のページ番号。                          |
+| `limit`        |         | 返すトークンアカウントの最大数。          |
+| `before`       |         | このカーソルより前のアカウントを返す。                  |
+| `after`        |         | このカーソルより後のアカウントを返す。                   |
+| `options`      |         | 追加の[表示オプション](/das-api/display-options)。              |
+
+## レスポンス
+
+レスポンスには以下が含まれます:
+
+- `token_accounts` - 以下を含むトークンアカウントオブジェクトの配列:
+  - `address` - トークンアカウントのアドレス
+  - `amount` - アカウント内のトークン残高
+  - `mint` - トークンのミントアドレス
+  - `owner` - アカウントの所有者アドレス
+  - `delegate` - デリゲートアドレス(存在する場合)
+  - `delegated_amount` - デリゲートに委任された量
+  - `frozen` - アカウントが凍結されているかどうか
+  - `close_authority` - クローズ権限アドレス(存在する場合)
+  - `extensions` - トークン拡張データ
+- `errors` - 処理中に発生したエラーの配列
+- ページネーションフィールド: `cursor`, `page`, `limit`, `before`, `after`, `total`
+
+## プレイグラウンド
+
+{% apiRenderer method="getTokenAccounts" noUmi=true /%}

+ 30 - 0
src/pages/ja/guides/translated/japanese.md

@@ -0,0 +1,30 @@
+---
+title: Japanese 日本語
+metaTitle: Japanese 日本語 | Guides
+description: A selection of guides translated into Japanese.
+---
+
+## Guides ガイド
+
+### How to Create an SPL Token On Solana
+[Solanaでトークン(SPL Token)を作成する方法](https://note.com/metaplex_japan/n/nc993285321a7)
+
+### How to Create NFTs with Solana
+[SolanaでNFTを作成する方法](https://note.com/metaplex_japan/n/n12fc1d251b34)
+
+### How to Create a Core NFT Asset
+[Core NFT Assetを作成する方法](https://note.com/metaplex_japan/n/nb24289e3bba6)
+
+### How to create an NFT with Token Metadata
+[「Token Metadata」でNFTを作成する方法](https://note.com/metaplex_japan/n/n7786dcb5ad69)
+
+### Create a Token Metadata NFT Collection on Solana with Candy Machine
+[「Candy Machine」でToken Metadata NFTコレクションを作成する方法](https://note.com/metaplex_japan/n/n8206451415f1)
+
+## Intermediate Guides 中級ガイド
+
+### Create a US Market Trading Experience Using the Oracle External Plugin
+[Oracle External Pluginを活用して「US Market Trading Experience」を作成してみよう!](https://note.com/metaplex_japan/n/nfaec1a4deea3)
+
+### Create an Event Ticketing Platform Leveraging the Appdata Plugin
+[Appdata Pluginを活用して「Event Ticketing Platform」を作成してみよう!](https://note.com/metaplex_japan/n/n5d4a524ae8b8)

+ 24 - 0
src/pages/ja/legacy-documentation/auction-house/auctioneer.md

@@ -0,0 +1,24 @@
+---
+title: Auctioneerを使用したタイムドオークション
+metaTitle: Auctioneerを使用したタイムドオークション | Auction House
+description: Auctioneerを使用してタイムドオークションを管理する方法を説明します。
+---
+
+Timed Auction Auctioneerは、Auction Houseの上に構築された英国式オークションルールを追加するAuctioneer実装です。
+
+# リスティング設定
+リスティング設定構造体は、各リスティングに添付されたすべての機能関連パラメータを保存するために使用されます。すべての機能は、リスティングごとに設定できます。
+
+# 機能
+* 開始日と終了日を持つ英国式オークション
+* 最高入札額の追跡
+* リザーブ価格(最低入札額)
+* 最低入札増分 - 新しい入札者に現在の入札額よりも一定額多く入札することを要求
+* 自動時間延長 - オークション終了間際(この期間はカスタマイズ可能)に行われた入札により、オークション終了日が設定可能な時間だけ延長されます
+* 最高入札者のキャンセル防止 - 最高入札者は入札をキャンセルできず、勝った場合はNFTを購入する必要があります*
+
+{% callout type="warning" %}
+
+*Auction Houseのエスクローレスの性質により、現時点では、ユーザーがリストされたトークンをウォレットから転送し、入札を無効にすることを防ぐことができません。
+
+{% /callout %}

+ 102 - 0
src/pages/ja/legacy-documentation/auction-house/buyer-escrow.md

@@ -0,0 +1,102 @@
+---
+title: バイヤーエスクローアカウントの管理
+metaTitle: バイヤーエスクローアカウントの管理 | Auction House
+description: "バイヤーエスクローアカウントの管理方法を説明します。"
+---
+## はじめに
+
+前のページでは、資産の入札とリスティングの作成方法、および販売の実行方法について説明しました。販売の実行について話したとき、**バイヤーエスクローアカウント**について簡単に触れました。このアカウントの用途は何で、なぜこれについて話す必要があるのでしょうか?
+
+このアカウントは、入札者の資金(SOLまたはSPLトークン)を一時的に保持するエスクローとして機能するプログラム派生アドレス(PDA)です。これらの資金は入札価格と等しく、販売が成立するまでこのPDAに保存されます。販売が実行されると、Auction Houseはこれらの資金をバイヤーエスクローアカウントPDAから販売者のウォレットに転送します。
+
+では、質問です:これらの資金は入札が行われたときに自動的に入札者のウォレットからバイヤーエスクローアカウントに転送されるのでしょうか?
+
+答えはノーです。これが、バイヤーエスクローアカウントとその資金の管理について話す必要がある理由です。これらの資金はAuction House権限によって管理されます。権限がこのアカウントをどのように管理するかを見てみましょう。
+
+## 残高の取得
+
+前のセクションの議論に追加すると、販売が成立するために、バイヤーエスクローアカウントに十分な資金があることを確認するのはAuction Houseの責任です。
+
+そのためには、まずAuction Houseは、バイヤーエスクローアカウントに現在どれだけの資金があるかを知る必要があります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、特定のAuction Houseのバイヤーエスクローアカウントの残高を取得するコードスニペットです。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const buyerBalance = await metaplex
+    .auctionHouse()
+    .getBuyerBalance({
+        auctionHouse,
+        buyerAddress: Keypair.generate() // バイヤーのアドレス
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 資金の入金
+
+この時点で、Auction Houseは、ユーザーに対応するバイヤーエスクローアカウントに現在どれだけの資金があるかを知っています。
+
+このユーザーが資産に入札した場合、Auction Houseは、資金が不足している場合、ユーザーのウォレットからバイヤーエスクローアカウントに資金を転送することを決定できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Auction Houseのバイヤーのウォレットからバイヤーエスクローアカウントに資金を転送する方法を見てみましょう。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const depositResponse = await metaplex
+    .auctionHouse()
+    .depositToBuyerAccount({
+        auctionHouse,              // エスクローバイヤーが資金を入金するAuction House。
+                                   // `AuctionHouse`モデルのサブセットのみが必要ですが、
+                                   // 資金の入金方法を知るために、
+                                   // その設定に関する十分な情報が必要です。
+        buyer: metaplex.identity() // 資金を入金するバイヤー。これはSignerを期待します
+        amount: 10                 // 入金する資金の額。これは
+                                   // SOLまたはAuction Houseが通貨として
+                                   // 使用するSPLトークンのいずれかです。
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 資金の引き出し
+
+Auction Houseは、ユーザーが資金を返却したい場合や入札をキャンセルした場合に、バイヤーエスクローウォレットからバイヤーのウォレットに資金を引き出すこともできる必要があります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+特定のAuction Houseのバイヤーエスクローウォレットからバイヤーのウォレットに資金を引き出す方法を見てみましょう。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const withdrawResponse = await metaplex
+    .auctionHouse()
+    .withdrawFromBuyerAccount({
+        auctionHouse,              // エスクローバイヤーが資金を引き出すAuction House
+        buyer: metaplex.identity() // 資金を引き出すバイヤー
+        amount: 10                 // 引き出す資金の額。これは
+                                   // SOLまたはAuction Houseが通貨として
+                                   // 使用するSPLトークンのいずれかです。
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 結論
+
+バイヤーエスクローアカウントの資金を管理する方法についても説明したので、独自のマーケットプレイスを完全に立ち上げて制御するのに非常に近づいています。
+
+現在欠けている重要な情報の1つ:マーケットプレイスはリスティング、入札、販売をどのように追跡するのでしょうか?Auction Houseプログラムには、これを行うための何かが用意されています。それが[レシート](receipts)です。

+ 56 - 0
src/pages/ja/legacy-documentation/auction-house/faq.md

@@ -0,0 +1,56 @@
+---
+title: FAQ
+metaTitle: FAQ | Auction House
+description: "Auction HouseのFAQ"
+---
+
+## 自分のAuction HouseでNFTが販売されたときに手数料を受け取れますか?
+はい、Auction Houseは`seller fee basis points`を取得するように設定できます。これは、createおよびupdateコマンドの一部です。CLIの使用例を参照してください。
+
+手数料はクリエイターに支払われ、次にAuction House、そして販売者が販売の残りを受け取ります。これは、NFTロイヤリティ、販売価格、Auction House手数料を取得し、バイヤーに総利益を表示することで、UI上で簡単に計算できます。
+
+## Auction Houseは、ユーザーが別の非Auction Houseマーケットプレイスで自分のNFTを販売することを制限しますか?
+いいえ、Auction Houseは、販売中のリスティングがあっても、ユーザーがNFTを送信することを止めることはできません。これが発生した場合、`execute_sale`操作は失敗し、バイヤーは入札をキャンセルすることで資金を取り戻すことができます。
+Auction Houseエクスペリエンスを作成するマーケットプレイスは、Buy/Sell trade stateアカウントを追跡し、販売者のTokenAccountsを監視する必要があります。これにより、元の販売者から転送されたNFTのリスティングと入札を自動的にキャンセルできます。
+
+具体的には、マーケットプレイスは現在、以下を保存する必要があります:
+
+1. Trade Stade Account Keys
+2. Trade Stateのシードの一部であるToken SizeとPrice
+3. trade stateに保存されているToken Account Keys
+4. Auction House Receipts (Listing Receipts、Bid Receipts、Purchase Receipts)
+
+具体的には、マーケットプレイスはToken Accountsでこれら2つのイベントを追跡する必要があります:
+
+1. 所有権がNFTの元の販売者から変更された
+2. Token Account Amountが0に変更された
+
+これらのイベントが発生した場合、Auction House Authorityは、販売者またはバイヤーが立ち会う必要なく、入札とリスティングをキャンセルする指示を呼び出すことができます。
+
+## 人々は自分のAuction Houseの設定を見ることができますか?
+はい、誰でもあなたのAuction Houseの設定、特に`Can Change Sale Price`パラメータを確認できますし、確認すべきです。
+これは、CLIの`show`コマンドで実行できます。
+
+
+## Auction Houseは自分のNFTの販売価格を変更できますか?
+はい、ただし特定のシナリオに限ります。Auction Houseがこの機能を使用できるようにするには、以下の条件が必要です:
+
+1. Auction Houseインスタンスで`Can Change Sale Price`が`true`に設定されている必要があります
+2. NFT販売者は、NFTを価格0で販売リストする必要があります。
+
+{% callout type="warning" %}
+Auction Houseは、あなたがキーでトランザクションに署名した場合のみ0で販売できますが、現在、任意に低い価格、例えば1 lamportで販売できます。信頼できるAuction Houseでのみリストすることが重要です。
+{% /callout %}
+
+3. Auction Houseは、#2で作成した`0`価格のtrade stateを使用して、異なる価格で新しい`sale`リスティングを作成できます。
+
+
+## パブリック入札とプライベート入札の違いは何ですか?
+標準入札は、プライベート入札とも呼ばれ、オークション固有の入札を指します。オークションが完了すると、入札はキャンセルされ、エスクローの資金は入札者に返金されます。ただし、Auction Houseは、特定のオークションではなくトークン自体に固有のパブリック入札もサポートしています。つまり、入札はオークションの終了を超えてアクティブなままで、そのトークンの後続のオークションの基準を満たせば解決できます。
+
+例:
+1. AliceがToken Aに1 SOLのパブリック入札を行います。
+2. BobもToken Aに2 SOLで入札します。
+3. Bobがオークションに勝ち、Token Aの新しい所有者になります。
+4. 1週間後、BobはToken Aをオークションに出品しますが、新しい入札者はいません。
+5. Aliceはパブリック入札をキャンセルしなかったため、彼女の入札がToken Aの新しいオークションで唯一の入札となり、彼女がオークションに勝ちます。

+ 140 - 0
src/pages/ja/legacy-documentation/auction-house/find.md

@@ -0,0 +1,140 @@
+---
+title: ビッド、リスティング、販売を検索
+metaTitle: 検索 | Auction House
+description: "ビッド、リスティング、販売を検索する方法について説明します。"
+---
+## はじめに
+
+前のページでは、ビッド、リスティング、販売のレシートを作成する方法を見ました。これらのレシートにより、マーケットプレイス運営者がこれらのアクションを追跡しやすくなります。しかし、これらのビッド、リスティング、販売をどのように取得するのでしょうか?
+
+ビッド、リスティング、販売を取得するために、3つのタイプの関数が提供されています:
+
+1. **オークションハウス内のすべてを検索**: このタイプの関数を使用すると、特定のオークションハウスのすべてのビッド / リスティング / 販売を検索できます。
+
+2. **レシートで検索**: このタイプの関数を使用すると、対応するレシートアカウントのアドレスを指定して、単一のビッド / リスティング / 販売を検索できます。
+
+3. **トレードステートで検索**: [概要ページでトレードステートについて説明しました](/legacy-documentation/auction-house)。ビッド / リスティング / 販売注文をエンコードするトレードステートPDAアカウントも、対応するアクションを検索するために使用できます。
+
+### オークションハウス内のすべてを検索
+
+オークションハウス内のすべてのビッド、リスティング、販売(または*購入*)を検索するための複数の基準があります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、複数の基準でビッドを検索するためのスニペットです。任意のキーの組み合わせを使用できます。
+
+```tsx
+// オークションハウス内のすべてのビッドを検索
+const bids = await metaplex
+  .auctionHouse()
+  .findBids({ auctionHouse });
+
+// 購入者とミントでビッドを検索
+const bids = await metaplex
+  .auctionHouse()
+  .findBids({ auctionHouse, buyer, mint });
+
+// メタデータでビッドを検索
+const bids = await metaplex
+  .auctionHouse()
+  .findBids({ auctionHouse, metadata });
+```
+
+以下は、複数の基準でリスティングを検索するためのスニペットです。これも、任意のキーの組み合わせを使用できます。
+
+```tsx
+// オークションハウス内のすべてのリスティングを検索
+const listings = await metaplex
+  .auctionHouse()
+  .findListings({ auctionHouse });
+
+// 出品者とミントでリスティングを検索
+const listings = await metaplex
+  .auctionHouse()
+  .findListings({ auctionHouse, seller, mint });
+```
+
+以下は、複数の基準で購入を検索するためのスニペットです。必須の`auctionHouse`属性を含めて、同時に3つの基準のみをサポートします。
+
+```ts
+// オークションハウス内のすべての購入を検索
+const purchases = await metaplex
+  .auctionHouse()
+  .findPurchases({ auctionHouse });
+
+// 購入者とミントで購入を検索
+const purchases = await metaplex
+  .auctionHouse()
+  .findPurchases({ auctionHouse, buyer, mint });
+
+// メタデータで購入を検索
+const purchases = await metaplex
+  .auctionHouse()
+  .findPurchases({ auctionHouse, metadata });
+
+// 出品者と購入者で購入を検索
+const purchases = await metaplex
+  .auctionHouse()
+  .findPurchases({ auctionHouse, seller, buyer });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+### レシートで検索
+
+以下は、対応するレシートアカウントアドレスでビッド、リスティング、販売を検索するためのスニペットです。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+```tsx
+// レシートでビッドを検索
+const nft = await metaplex
+  .auctionHouse()
+  .findBidByReceipt({ receiptAddress, auctionHouse };
+
+// レシートでリスティングを検索
+const nft = await metaplex
+  .auctionHouse()
+  .findListingByReceipt({ receiptAddress, auctionHouse };
+
+// レシートで販売 / 購入を検索
+const nft = await metaplex
+  .auctionHouse()
+  .findPurchaseByReceipt({ receiptAddress, auctionHouse };
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+### トレードステートで検索
+以下は、対応するトレードステートPDAアカウントでビッド、リスティング、販売を検索するためのスニペットです。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+```tsx
+// トレードステートでビッドを検索
+const nft = await metaplex
+  .auctionHouse()
+  .findBidByTradeState({ tradeStateAddress, auctionHouse };
+
+// トレードステートでリスティングを検索
+const nft = await metaplex
+  .auctionHouse()
+  .findListingByTradeState({ tradeStateAddress, auctionHouse };
+
+// トレードステートで販売 / 購入を検索
+const nft = await metaplex
+  .auctionHouse()
+  .findPurchaseByTradeState({ sellerTradeState, buyerTradeState, auctionHouse };
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## まとめ
+
+マーケットプレイスでの取引管理に関するすべての側面をカバーしました。ここまで説明したすべては、JS SDKを使用したコードスニペットで説明されました。

+ 76 - 0
src/pages/ja/legacy-documentation/auction-house/getting-started.md

@@ -0,0 +1,76 @@
+---
+title: 始めに
+metaTitle: 始めに | Auction House
+description: Auction Houseの管理に使用できるさまざまなライブラリとSDKをリストします。
+---
+
+Auction HouseはMainnet BetaとDevnet上で実行されているSolanaプログラムです。他のSolanaプログラムと同様に、Solanaノードにトランザクションを送信することで対話できますが、Metaplexは作業をはるかに簡単にするツールをいくつか構築しています。オークションハウスを管理できる**CLI**ツールと、ユーザーインターフェースのキックスタートに役立つ**JS SDK**があります。
+
+## SDK
+
+### JavaScript SDK
+**JS SDK**は、Web開発者に独自のオークションハウスを作成・設定するための使いやすいAPIを提供します。SDKにより、開発者は入札、リスティング、オークションハウスの財務およびフィーアカウントからの資金の引き出しなど、複雑な手順を実行できます。
+
+Auction Houseプログラムと対話するメインモジュールは[Auction Houseモジュール](https://github.com/metaplex-foundation/js/tree/main/packages/js/src/plugins/auctionHouseModule)です。このモジュールには、マーケットプレイスの作成プロセスを簡単にするいくつかのメソッドが含まれています。このクライアントには、`Metaplex`インスタンスの`auctionHouse()`メソッドを介してアクセスできます。
+```ts
+const auctionHouseClient = metaplex.auctionHouse();
+```
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、SDKが提供する便利なメソッドの一部です:
+
+```ts
+// オークションハウスの作成と更新
+metaplex.auctionHouse().create();
+metaplex.auctionHouse().update();
+
+// オークションハウスでの取引
+metaplex.auctionHouse().bid();
+metaplex.auctionHouse().list();
+metaplex.auctionHouse().executeSale();
+
+// ビッドまたはリスティングのキャンセル
+metaplex.auctionHouse().cancelBid();
+metaplex.auctionHouse().cancelListing();
+
+// ビッド、リスティング、購入の検索
+metaplex.auctionHouse().findBidBy();
+metaplex.auctionHouse().findBidByTradeState();
+metaplex.auctionHouse().findListingsBy();
+metaplex.auctionHouse().findListingByTradeState();
+metaplex.auctionHouse().findPurchasesBy();
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+
+Auction Houseモジュールには、すでに存在する他のメソッドもあり、将来的にはさらに多くのメソッドが追加される予定です。Auction Houseモジュールの*README*は、これらすべてのメソッドの詳細なドキュメントで間もなく更新されます。
+
+**役立つリンク:**
+* [Githubリポジトリ](https://github.com/metaplex-foundation/js/tree/main/packages/js/src/plugins/auctionHouseModule)
+* [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/js)
+
+## プログラムライブラリ
+プログラムライブラリは、Solitaを使用してプログラムのIDLから自動生成されます。独自の命令を接続してSolanaプログラムを理解する必要がありますが、SDKが実装に少し時間がかかる場合でも、最新の機能をすぐに使用できるという利点があります。
+
+### JavaScriptプログラムライブラリ
+これは、Auction Houseプログラム(Rustで記述)が更新されるたびに生成される、より低レベルの自動生成JavaScriptライブラリです。
+
+したがって、このライブラリは、命令を準備してトランザクションを直接送信することでプログラムと対話したい上級開発者を対象としています。
+
+**役立つリンク:**
+* [Githubリポジトリ](https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auction-house/js)
+* [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/mpl-auction-house)
+
+## Rust Crate
+Rustで開発している場合は、Rust crateを使用してMetaplexのプログラムと対話することもできます。プログラムはRustで記述されているため、これらのcrateにはアカウントを解析して命令を構築するために必要なすべてが含まれているはずです。
+
+これは、Rustクライアントを開発する際に役立ちますが、独自のプログラム内でMetaplexプログラムへのCPI呼び出しを行う場合にも役立ちます。
+
+**役立つリンク:**
+* [Githubリポジトリ](https://github.com/metaplex-foundation/metaplex-program-library/tree/master/auction-house/program)
+* [Crateページ](https://crates.io/crates/mpl-auction-house)
+* [APIリファレンス](https://docs.rs/mpl-auction-house/latest/mpl_auction_house/)

+ 163 - 0
src/pages/ja/legacy-documentation/auction-house/index.md

@@ -0,0 +1,163 @@
+---
+title: 概要
+metaTitle: 概要 | Auction House
+description: Auction Houseプログラムの概要を説明します
+---
+
+
+{% callout type="warning" %}
+
+このプログラムは非推奨とマークされており、Metaplex Foundationチームによって積極的にメンテナンスされていないことにご注意ください。新機能、セキュリティ修正、下位互換性は保証されません。ご使用の際は十分ご注意ください。
+
+{% /callout %}
+
+## はじめに
+
+Auction Houseは、Solanaブロックチェーン内でアセットを交換できるプログラムです。
+
+Solana上でアセットを交換する方法はたくさんありますが、なぜこの問題の解決に焦点を当てた別のプログラムがあるのでしょうか?詳しく見ていきましょう。
+
+このプログラムの理念は、誰でも独自のマーケットプレイスを作成・設定でき、アセットの交換方法に関するカスタムロジックを提供できるようにすることです。Auction Houseプロトコルの動機は、異なるユースケースに焦点を当てたマーケットプレイスの健全なエコシステムを作成し、さらに重要なことに、それぞれがユーザーのアセット取引を可能にする方法に独自の特色をもたらすことです。
+
+Auction Houseプログラムの最も重要な側面は、アセットの所有権をユーザーに提供することです。
+
+従来、ユーザーがマーケットプレイスにアセットをリストすると、アセットはユーザーのウォレットから、マーケットプレイスが所有する[エスクロー](https://www.investopedia.com/terms/e/escrow.asp)として知られるウォレットに移動され、アセットがデリストまたは売却されるまでそこに保管、つまり**エスクロー**されます。これにはいくつかの懸念があります:
+
+- ユーザーは同じアセットを複数のマーケットプレイスにリストできない
+- ユーザーはマーケットプレイスのエスクロー契約に頼ってアセットを安全に保持する必要がある
+
+ここでAuction Houseがその力を発揮します。これは、マーケットプレイスが**エスクローレス**の販売契約を実装できるようにするトランザクションプロトコルであり、アセットの所有権をユーザーに提供します。
+
+## オークションハウスの作成
+
+Auction Houseプログラムを使用して、新しい**Auction House**アカウントをインスタンス化することで、新しいマーケットプレイスを作成できます。Auction Houseアカウントは、特定の公開鍵と、オプションで通貨として使用するSPLトークン(詳細は後述)から派生した[プログラム派生アドレス(PDA)](../../understanding-programs#program-derived-addresses-pda)です。
+
+   ![Properties.PNG](https://i.imgur.com/2HPpM9g.png#radius)
+
+
+アカウントはユーザーが望む方法で設定できます。これらの設定については[専用ページで詳しく説明します](auction-house/settings)が、以下は興味深い設定可能なパラメータの一部です:
+
+- `requireSignOff`: これにより、マーケットプレイスはリストできるアセットと入札できるビッドをゲートできます。すべての関連する命令で、Auction Houseの[権限](https://docs.solana.com/staking/stake-accounts#understanding-account-authorities)がトランザクションに署名する必要があります。
+- `canChangeSalePrice`: このパラメータは、`requireSignOff`が`true`に設定されているAuction Houseでのみ使用することを目的としています。これにより、Auction Houseはカスタムオーダーマッチングを実行して、出品者に最適な価格を見つけることができます。
+- `sellerFeeBasisPoints`: これは、マーケットプレイスがすべての取引で受け取るシェアを表します。たとえば、これが`200`、つまり2%に設定されている場合、マーケットプレイスはプラットフォームで発生するすべての取引の2%を受け取ります。
+
+## リスティングと入札
+
+アクティブなAuction Houseができたら、ユーザーはマーケットプレイスでアセットのリストとアセットへの入札を開始できます。
+
+### リスティング
+
+ユーザーがアセットをリストすると、Auction Houseは2つのことを行います:
+
+1. Auction Houseは**売却注文**を作成します:つまり、アセットのリスティングを表す`SellerTradeState`として知られるPDAを作成します。トレードステートは、他のPDA/アカウントと比較して非常に安価な特別なPDAです。これは、これらのPDAが1バイトのデータのみを格納するためです。これはPDAの[バンプ](https://solanacookbook.com/core-concepts/pdas.html#generating-pdas)です。リスト価格、トークン数、ミントアカウントなどのリスティングに関連する他のすべての情報は、PDA内に格納する代わりに、PDAのシードにハッシュされます。したがって、PDAは非常にコスト効率的でありながら、そのリスティングの「存在証明」として機能します。
+
+![](https://i.imgur.com/ki27Ds8.png#radius)
+
+2. Auction Houseはまた、別のPDA: `programAsSigner` PDAを**デリゲート**として割り当てます。デリゲートはSolana SPL-tokenプログラムの機能であり、[こちら](https://spl.solana.com/token#authority-delegation)で詳しく説明されています。委任により、Auction Houseは後で販売が行われたときにトークンアカウントからアセットを引き出すことができます。このように、アセットはエスクローする必要がなく、販売が行われるまでユーザーのウォレットに留まることができます。
+
+![](https://i.imgur.com/aIRl7Hb.png#radius)
+
+### 入札
+
+リスティングの場合と同様に、ユーザーがビッドを配置すると、Auction Houseは**購入注文**を作成します。つまり、ビッドを表す`BuyerTradeState` PDAを作成します。ビッド額(ネイティブまたはSPLトークン)は、マーケットプレイスによって手動で`BuyerEscrowAccount` PDAに転送する必要があり、販売が行われるまでこの額を保持します。
+
+> 例:
+>
+> - AliceはアセットAを5 SOLでリストします。そうすることで、Auction Houseはビッドを表す`SellerTradeState` PDAを作成します。Auction Houseはまた、`programAsSigner` PDAを**デリゲート**として割り当て、販売が行われたときにAliceのウォレットからアセットを引き出す**権限**を与えます。
+> - BobはアセットAに5 SOLのビッドを配置します。そうすることで、マーケットプレイスはBobのウォレットから5 SOLを`BuyerEscrowAccount` PDAに引き出します。この額は販売が行われるまでここに留まります。
+
+## 販売の実行
+
+特定のアセットに対してリスティングと少なくとも1つのビッドがある場合、`executeSale`命令を呼び出すことで取引を完了できます。
+
+`executeSale`命令はパーミッションレスクランクです:つまり、手数料や報酬なしで誰でも実行できます。`executeSale`命令の実行時に、2つのことが起こります:
+
+- Auction Houseは`BuyerEscrowAccount`に保存されているビッド額を引き出し、この額をリスト者に転送します(Auction House手数料を差し引いて)。
+- Auction Houseが**デリゲート**として割り当てた`programAsSigner` PDAは、リスト者のウォレット(より具体的には、リスト者のウォレット内のトークンアカウント)からアセットを引き出し、アセットを入札者のウォレットに転送し、取引を完了します。
+  ![](https://i.imgur.com/gpAX63m.png#radius)
+
+`executeSale`命令がどのように機能するかがわかったので、`executeSale`命令がさまざまな方法で実行される3つの取引シナリオについて説明しましょう:
+
+1. _リスト価格での「購入」_: これは、ユーザーがリストされたアセットに対して、リストされた金額自体でビッドを配置する場合です。このような場合、`bid`と`executeSale`命令が同じトランザクションで実行されるため、入札者は事実上アセットを「購入」します。
+
+> 例:
+>
+> - AliceはアセットAを5 SOLでリストします。これにより、アセットAの**売却注文**が作成されます。
+> - Bobはリスティングに気づき、アセットAに5 SOLのビッドを配置します。これにより、アセットAの**購入注文**が作成されます。
+> - これにより、マーケットプレイスはアセットにビッドを配置し、同じトランザクションで販売を実行できるようになり、実際にはBobがアセットAを「購入」できるようになります。
+
+2. _ビッド価格での「販売」_: これは、リストされていないアセットに興味を持ったユーザーがビッドを配置する場合です。アセット所有者がビッド額でアセットをリストすると、`list`と`executeSale`命令が同じ命令で実行されるため、リスト者は事実上要求された価格でアセットを「販売」します。
+
+> 例:
+>
+> - Bobは、リストされていないアセットAに5 SOLのビッドを配置します。これにより、アセットAの**購入注文**が作成されます。
+> - Aliceはビッドに気づき、アセットAを5 SOLでリストします。これにより、アセットAの**売却注文**が作成されます。
+> - これにより、マーケットプレイスはアセットをリストし、同じトランザクションで販売を実行できるようになり、実際にはAliceがアセットAを「販売」できるようになります。
+
+3. _リスト者がビッドに同意_: これは、特定のアセットに対して**購入注文**と**売却注文**が存在した後、`executeSale`命令が独立して実行される場合です。
+
+> 例:
+>
+> - AliceはアセットAを5 SOLでリストします。これにより、アセットAの**売却注文**が作成されます。
+> - BobはAliceのリスティングを知らずに、アセットAに5 SOLのビッドを配置します。これにより、アセットAの**購入注文**が作成されます。
+> - Aliceは一致するビッドに気づき、販売を実行します。
+
+## 代替可能なアセットのオークション
+
+これまで、Auction Houseアカウントを使用してアセットを交換することについて話してきましたが、どのタイプのアセットをこの方法で交換できるかについては掘り下げていません。Auction Houseでリストできる最も人気のあるアセットは、[非代替性トークン(NFT)](/token-metadata/token-standard#the-non-fungible-standard)です。
+
+ただし、これらがAuction Houseプログラムから恩恵を受けることができる唯一のアセットではありません。実際、アセットはミントアカウントにメタデータアカウントが添付されている限り、任意のSPLトークンにすることができます。SPLトークンとメタデータアカウントについて詳しく知りたい場合は、[Token Metadataプログラムの概要で詳細を読むことができます](/token-metadata)。
+
+## カスタムSPLトークンを使用してアセットを購入
+
+上記の例では、Auction Houseプログラムがどのように機能するかを説明するために、交換通貨としてSOLを使用しました。しかし、SOLはアセットを交換するために設定できる唯一の通貨ではありません。Auction Houseプログラムにより、マーケットプレイスは任意のSPL-tokenを通貨として機能するように設定できます。
+
+これは、Auction Houseアカウントの`treasuryMint`パラメータを、お好みのSPL-tokenのミントアカウントに設定することで実現できます。
+
+## カスタムオーダーマッチング
+
+トレードステートについて説明したとき、トレードステート図に示されていた3番目のトレードステートがありました:`FreeSellerTradeState`。このトレードステートの有用性は何でしょうか?
+
+Auction Houseプログラムの紹介中に、Auction Houseがマーケットプレイスでアセットの交換方法に独自のカスタムロジックを提供するために使用できる方法について簡単に説明しました。ここで`FreeSellerTradeState`が登場します。
+
+購入者が意図的にアセットを0 SOL / SPL-tokenの価格でリストすると、`FreeSellerTradeState`が生成されます。その後、Auction Houseは販売価格を変更して、0より大きい一致するビッドと一致させることができます。これにより、Auction Houseは複雑なオーダーマッチングを行い、出品者に最適な価格を見つけることができ、マーケットプレイスはこのオーダーマッチングを行うための独自のカスタムロジックを作成できます。
+
+## オークショニア
+
+これまで見てきたすべてのオークションには共通点が1つあります。それらは[**ダブルオークション**](https://blogs.cornell.edu/info2040/2021/11/29/four-common-types-of-auctions/#:~:text=sealed%2Dbid%20auction.-,DOUBLE%20AUCTION,-Both%20buyers%20and)と呼ばれるものです。つまり、購入者と出品者が共通の基盤を見つけるまで入札とリストを行う、時間制限のないオークションです。
+ただし、Solanaエコシステムで人気を博している英国式オークションやオランダ式オークションなど、他の形式のオークションがいくつかあります。
+Auction Houseの実装は、即時販売を念頭に置いて意図的に設計されており、他のオークションタイプはすぐには提供していません。
+
+**オークショニア**は、ユーザーが作成したカスタマイズされた契約タイプで、Auction Houseの組み合わせパターンを使用して個別のAuction Houseアカウントを制御します。
+
+Auction Houseでオークショニアインスタンスを有効にするには、最初に明示的に委任する必要があります。このオークショニアインスタンスは、ほとんどのAuction House命令をインターセプトして、独自のカスタムロジックを注入できるようになります。Metaplexは、タイムドオークションのようないくつかのオークショニア実装も提供しています。これについては、このドキュメントの後のページで詳しく説明します。
+
+![](https://i.imgur.com/RyZUfR9.png#radius)
+
+## 次のステップ
+
+このページでは、Auction Houseプロトコルの基本とそれが持つ力について説明しました。Auction Houseができることはまだまだたくさんあります。
+
+まず、このプログラムの使用を開始するために使用できるさまざまなライブラリをリストします:
+
+- [始めに](auction-house/getting-started)
+
+Auction Houseの設定と、Auction Houseインスタンスの管理方法について詳しく掘り下げます:
+
+- [Auction House設定](auction-house/settings)
+- [Auction Houseの管理](auction-house/manage)
+
+Auction Houseの基本を理解したら、Auction House対応マーケットプレイスでアセットを取引する方法を学び始めることができます:
+
+- [Auction Houseでのアセットの取引](auction-house/trading-assets)
+- [バイヤーアカウントの管理](auction-house/buyer-escrow)
+
+また、Auction Houseでのリスティング、ビッド、販売を追跡する方法と、それらを取得する方法についても調査します:
+
+- [レシートの印刷](auction-house/receipts)
+- [ビッド、リスティング、購入の検索](auction-house/find)
+
+## 追加の資料
+
+- [Jordanのツイッタースレッド](https://twitter.com/redacted_j/status/1453926144248623104)
+- [Armaniのツイッタースレッド](https://twitter.com/armaniferrante/status/1460760940454965248)

+ 259 - 0
src/pages/ja/legacy-documentation/auction-house/manage-using-cli.md

@@ -0,0 +1,259 @@
+---
+title: CLIを使用したAuction Houseの管理
+metaTitle: CLIを使用したAuction Houseの管理 | Auction House
+description: "CLIを使用してAuction Houseを管理する方法"
+---
+
+## 前提条件
+
+- `ts-node`
+- `git`
+- `yarn`
+
+## セットアップ
+
+Auction House CLIを使い始めるには、以下の手順に従ってください。
+
+```sh
+git clone https://github.com/metaplex-foundation/metaplex-program-library.git
+cd auction-house/cli
+```
+注意: デフォルトでは、`main`ブランチの先端にある最新のコードを使用します。
+
+次に:
+```sh
+cd js && yarn install && yarn bootstrap
+cd src
+```
+
+リポジトリをクローンし、パッケージをインストールしたら、ローカルの`Keypair`が設定されていることを確認してください。これについてサポートが必要な場合は、これらのガイドを参照してください。
+
+- https://docs.solana.com/cli/install-solana-cli-tools
+- https://docs.solana.com/wallet-guide/file-system-wallet
+
+## コマンドの実行
+
+コマンドを実行するには、次を使用します
+`ts-node auction-house-cli.ts`
+
+### ヘルプ
+
+```
+ts-node auction-house-cli.ts
+Usage: auction-house-cli [options] [command]
+
+Options:
+-V, --version                     output the version number
+-h, --help                        display help for command
+
+Commands:
+show_escrow [options]
+withdraw [options]
+sell [options]
+withdraw_from_treasury [options]
+withdraw_from_fees [options]
+cancel [options]
+execute_sale [options]
+buy [options]
+deposit [options]
+show [options]
+create_auction_house [options]
+update_auction_house [options]
+help [command]                    display help for command
+
+```
+
+### 作成
+
+Auction Houseを作成します
+
+次のコマンドでコマンドヘルプを表示できます
+
+```
+ts-node auction-house-cli.ts help create_auction_house
+```
+
+現在のKeypairを見つけます。たとえば、`~/mywallet.key`またはWindowsの場合は`C:\Users\windowsuser\mywallet.key`にあるとします。Auction Houseを作成するには、次を実行します。
+
+```
+ts-node auction-house-cli.ts create_auction_house --keypair ~/mywallet.key -e devnet -sfbp 1000 -ccsp false -rso false
+```
+
+この場合、完全に分散化されたオークションハウスを作成したいので、サインオフを要求する必要はありません。`-tm, --treasury-mint <string>`を指定しなかったため、支払いの通貨はSOLになります。
+また、以下のオプションは、`~/mywallet.key`の公開鍵として設定されるデフォルトになります
+
+```
+-twd, --treasury-withdrawal-destination <string>
+-fwd, --fee-withdrawal-destination <string>
+```
+
+すべてがうまくいけば、次のように表示されます
+
+```
+wallet public key: Gsv13oph2i6nkJvNkVfuzkcbHWchz6viUtEg2vsxQMtM
+No treasury withdrawal dest detected, using keypair
+No fee withdrawal dest detected, using keypair
+No treasury mint detected, using SOL.
+Created auction house HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS <--- あなたのオークションハウスキーは異なります
+```
+
+このキー`HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS`を保存してください。これはAuction Houseを保持するsolanaアカウントの公開鍵です。後続のすべてのコマンドで、このキーを`-ah`オプションで渡します。
+
+## 表示
+
+オークションハウス用に設定された手数料と財務ウォレットの残高と、その現在の設定オプションを出力します。
+
+次のコマンドでコマンドヘルプを表示できます
+
+```
+ts-node auction-house-cli.ts help show
+```
+
+`--keypair`を`-k`に変更したことに注意してください。これは省略形ですが、同じように機能します。
+
+```
+ts-node auction-house-cli.ts show -k ~/mywallet.key -ah HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS
+```
+
+出力は異なりますが、以下のようになります。
+
+```
+No treasury mint detected, using SOL.
+-----
+Auction House: HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS
+Mint: So11111111111111111111111111111111111111112
+Authority: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Creator: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Fee Payer Acct: AcWpR41NPMq73FZUspCiXxoLrJnW7zytgHKY5xqtETkU
+Treasury Acct: HFW5CY73qN3XK3qEP7ZFxbpBBkQtipPfPQzaDj3mbbY1
+Fee Payer Withdrawal Acct: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Treasury Withdrawal Acct: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Fee Payer Bal: 0
+Treasury Bal: 0
+Seller Fee Basis Points: 1000
+Requires Sign Off: false
+Can Change Sale Price: false
+AH Bump: 255
+AH Fee Bump: 252
+AH Treasury Bump: 254
+```
+
+### 手数料アカウント
+
+上記のShowコマンドでは、Fee Payerアカウントが表示されます。
+このアカウントは、販売実行、転送、アカウント作成のためのチェーン上の手数料を支払うために使用できます。この演習では、devnetでSOLをエアドロップしてそのアカウントに資金を提供する方法を教えます。Auction Houseの手数料アカウントは、Auction House権限がトランザクションに署名している場合にのみ使用されます。これは通常、`Requires Sign Off`の場合のみです
+
+```
+$ solana airdrop 2 AcWpR41NPMq73FZUspCiXxoLrJnW7zytgHKY5xqtETkU
+Requesting airdrop of 2 SOL
+Signature: 4qYFoD8GN6TZLDjLsqyyt6mhjYEjwKF36LJCDLtL88nTD3y3bFzXmVFHP6Nczf5Dn4GnmBJYtbqV9tN2WbsYynpX
+2 SOL
+```
+
+{% callout type="warning" %}
+
+`solana airdrop`コマンドは時々信頼性がありません。コマンドが機能しない場合は、https://solfaucet.comのエアドロップツールを使用できます。
+
+{% /callout %}
+
+## 販売
+
+NFTを販売します。
+
+次のコマンドでコマンドヘルプを表示できます
+
+```
+ts-node auction-house-cli.ts help sell
+```
+
+オークションハウスでミントアドレスによってNFTを1 SOLで販売します。
+
+```
+ts-node auction-house-cli.ts sell \
+  -k ~/mywallet.key \
+  -ah HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS \
+  --buy-price 1 \
+  --mint F7fejo7cT1fRyJxj1W2aWy3aeJz8iqLU9YvbBAzwJGh2 \
+  --token-size 1
+```
+
+出力:
+
+```
+wallet public key: CCJC2s8FDGAs8GqmngE9gviusEuNnkdUwchcYMZ8ZmHB
+wallet public key: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Set 1 F7fejo7cT1fRyJxj1W2aWy3aeJz8iqLU9YvbBAzwJGh2 for sale for 1 from your account with Auction House Ee53kiwLVw5XG98gSLNHoQRi4J22XEhz3zsKYY2ttsb7
+```
+
+### サインオフの要求
+
+オークションハウスがそのウォレットのサインオフを要求するように設定されている場合、出品者と同様に、コマンドに提供されます。
+これを行うには、`-ak`オプションを使用します。
+
+次のコマンドでコマンドヘルプを表示できます
+
+```
+ts-node auction-house-cli.ts help sell
+```
+
+オークションハウスのkeypairが組織が管理するサーバーに保存されている本番シナリオでは、トランザクションはクライアントから出品者によって部分的に署名され、Solanaに送信する前にオークションハウスによる署名のためにサーバーに渡される必要があります。
+
+## 購入
+
+SOLをネイティブSOLとして使用する場合、ミントアドレスによってNFTに何らかの価格のSOLでオファーを行います。
+
+次のコマンドでコマンドヘルプを表示できます
+
+```
+ts-node auction-house-cli.ts help buy
+```
+
+buyコマンドはNFTへのオファーであり、`execute_sale`アクションがトリガーされるまで販売にはなりません。このコマンドは、NFTに2 SOLをオファーします。
+
+```
+ts-node auction-house-cli.ts buy \
+  -k ~/mywallet.key \
+  -ah HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS \
+  --buy-price 2 \
+  --token-size 1 \
+  --mint 7v8kcqCHLih31bp2xwMojGWTMdrcFfzZsYXNbiLiRYgE
+wallet public key: 3DikCrEsfAVHv9rXENg2Hdmc16L71EjveQEF4NbSfRak
+wallet public key: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Made offer for  2
+```
+
+## 販売の実行
+
+出品者が設定した価格で購入者にNFTを販売します。これには現在、オークションハウス権限、購入者、または出品者が手数料支払者である必要があり、したがってトランザクションに署名する必要があることに注意してください。
+
+```
+$ ts-node auction-house-cli.ts execute_sale
+  -k ~/mywallet.key \
+  -ah HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS \
+  --buy-price 2 \
+  --mint DCqt9QQ3ot3qv53EhWrYAWFuh4XgSvFJvLRjgsDnhLTp \
+  --buyer-wallet 3DikCrEsfAVHv9rXENg2Hdmc16L71EjveQEF4NbSfRak \
+  --seller-wallet CCJC2s8FDGAs8GqmngE9gviusEuNnkdUwchcYMZ8ZmHB \
+  --token-size 1
+wallet public key: CCJC2s8FDGAs8GqmngE9gviusEuNnkdUwchcYMZ8ZmHB
+wallet public key: DCDcpZaJUghstQNMHy9VAPnwQe1cGsHq7fbeqkti4kM3
+Accepted 1 DCqt9QQ3ot3qv53EhWrYAWFuh4XgSvFJvLRjgsDnhLTp sale from wallet CCJC2s8FDGAs8GqmngE9gviusEuNnkdUwchcYMZ8ZmHB to 3DikCrEsfAVHv9rXENg2Hdmc16L71EjveQEF4NbSfRak for 2 from your account with Auction House HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS
+```
+
+## その他のアクション
+
+その他のアクションはCLIに文書化されており、`help`と`<command> help`サブコマンドを使用して見つけることができます:
+
+- _Cancel_ - 潜在的な購入者がオファーを取り消します。
+
+- _Show Escrow_ - 特定のウォレットのオークションハウスエスクローアカウントの残高を出力します。
+
+- _Withdraw_ - オークションハウスのユーザーの購入者エスクローアカウントからウォレットに資金を転送します。
+
+- _Deposit_ - オークションハウスのユーザーの購入者エスクローアカウントに資金を追加します。
+
+- _Withdraw from Fee_ - オークションハウス手数料ウォレットからオークションハウス権限に資金を転送します。
+
+- _Withdraw from Treasury_ - オークションハウス財務ウォレットからオークションハウス権限に資金を転送します。
+
+- _Update Auction House_ - 権限や出品者手数料を含むオークションハウス設定を更新します。

+ 186 - 0
src/pages/ja/legacy-documentation/auction-house/manage.md

@@ -0,0 +1,186 @@
+---
+title: Auction Houseの管理
+metaTitle: Auction Houseの管理 | Auction House
+description: Auction Houseの管理方法について説明します。
+---
+
+## はじめに
+
+[前のページ](/legacy-documentation/auction-house/settings)では、Auction Houseのさまざまな設定について説明しました。それでは、これらの設定を使用してAuction Houseを作成および更新する方法を見ていきましょう。
+
+また、Auction Houseを取得するさまざまな方法についても説明します。最後に、Auction Houseの手数料と財務アカウントから資金を引き出す方法を見ていきます。
+
+## Auction Houseの作成
+
+Auction Houseは、前のページで説明したすべての設定で作成できます。作成されたAuction HouseアカウントはAuction House**インスタンス**と呼ばれます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Metaplex JS SDKを使用してAuction Houseを作成する例を見ていきましょう。デフォルトでは、現在のアイデンティティがAuction Houseの権限として使用されることに注意してください。さらに、デフォルトでは`SOL`が`treasuryMint`として設定されます。最後に、前のページで説明したヘルパーアカウントはAuction Houseによって自動的に生成されますが、Auction House作成時に手動で設定することもできます。
+
+```tsx
+const auctionHouseSettings = await metaplex
+    .auctionHouse()
+    .create({
+        sellerFeeBasisPoints: 500 // 5%手数料
+        authority: metaplex.identity(),
+        requireSignOff: true,
+        canChangeSalePrice: true,
+        hasAuctioneer: true, // オークショニアを有効にする
+        auctioneerAuthority: metaplex.identity(),
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+
+## Auction Houseアカウント
+
+Auction Houseインスタンスを作成したので、その中にどのようなデータが保存されているかを見てみましょう。
+
+まず、すでに説明したすべての設定が保存されます。これらの設定に加えて、Auction Houseアカウントには、Auction Houseインスタンスの作成に使用されたウォレットのアドレスを指す`creator`フィールドが保存されます。
+
+最後に、Auction HouseインスタンスはPDAアカウントのアドレスを導出するために使用されるPDAバンプも保存します。
+
+> PDAで構築する場合、アカウントデータ自体にバンプシードを保存するのが一般的です。これにより、開発者はバンプを命令引数として渡すことなく、PDAを簡単に検証できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Auction Houseアカウントモデルは、[`AuctionHouse`モデルのAPIリファレンス](https://metaplex-foundation.github.io/js/types/js.AuctionHouse.html)で調べることができます。
+
+以下は、Auction Houseの属性のいくつかを示す小さなコード例です。
+
+```tsx
+const { auctionHouse } = await metaplex.auctionHouse().create({...});
+
+auctionHouse.address;                   // Auction Houseアカウントの公開鍵
+auctionHouse.auctionHouseFeeAccount;    // Auction House手数料アカウントの公開鍵
+auctionHouse.feeWithdrawalDestination;  // Auction House手数料アカウントから資金を引き出すアカウントの公開鍵
+auctionHouse.treasuryMint;              // Auction House通貨として使用されるトークンのミントアドレス
+auctionHouse.authority;                 // Auction House権限の公開鍵
+auctionHouse.creator;                   // Auction Houseインスタンスの作成に使用されたアカウントの公開鍵
+auctionHouse.bump;                      // Auction Houseインスタンスの`Bump`
+auctionHouse.feePayerBump;              // 手数料アカウントの`Bump`
+auctionHouse.treasuryBump;              // 財務アカウントの`Bump`
+auctionHouse.auctioneerAddress;         // `Auctioneer`アカウントの公開鍵
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## Auction Houseの取得
+
+作成されると、Auction Houseインスタンスを取得できます。Auction Houseは、そのPDAアカウントアドレスまたはクリエーターアドレスと財務ミントアドレスの組み合わせによって一意に識別できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Auction Houseは2つの方法で取得できます:
+
+1. **アドレスで**: Auction Houseアドレスを使用
+2. **クリエーターとミントで**: `creator`アドレスと財務ミントの組み合わせを使用。Auction Houseでオークショニアが有効になっている場合、クリエーターとミントに加えて`auctioneerAuthority`も必要であることに注意してください。
+
+```tsx
+// アドレスで
+const auctionHouse = await metaplex
+    .auctionHouse()
+    .findByAddress({ address: new PublicKey("Gjwc...thJS") });
+
+// クリエーターとミントで
+// この例では、Auction Houseで
+// オークショニアが有効になっていないと仮定します
+const auctionHouse = await metaplex
+    .auctionHouse()
+    .findByCreatorAndMint({
+        creator: new PublicKey("Gjwc...thJS"),
+        treasuryMint: new PublicKey("DUST...23df")
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 設定の更新
+
+Candy Machineの場合と同様に、Auction Houseインスタンスを作成したら、Auction Houseインスタンスの権限である限り、ほとんどの設定を後で更新できます。以下の設定を更新できます:`authority`、`sellerFeeBasisPoints`、`requiresSignOff`、`canChangeSalePrice`、`feeWithdrawalDestination`、`treasuryWithdrawalDestination`、`auctioneerScopes`。
+
+すでに説明したように、Auction Houseの権限は更新できる設定の1つであり、現在の権限が署名者であり、新しい権限のアドレスが記載されている限りです。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+設定を更新するには、現在のデータと提供されたデータを比較するために完全なモデルが必要です。たとえば、`feeWithdrawalDestination`のみを更新したい場合は、他のすべてのプロパティを同じに保ちながらデータを更新する命令を送信する必要があります。
+
+また、デフォルトでは、`feeWithdrawalDestination`と`treasuryWithdrawalDestination`は`metaplex.identity()`、つまり、デフォルトで権限とクリエーターとして設定されているのと同じウォレットに設定されます。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const currentAuthority = Keypair.generate();
+const newAuthority = Keypair.generate();
+const newFeeWithdrawalDestination = Keypair.generate();
+const newTreasuryWithdrawalDestination = Keypair.generate();
+const auctionHouse = await metaplex
+    .auctionHouse()
+    .findByAddress({...});
+
+const updatedAuctionHouse = await metaplex
+    .auctionHouse()
+    .update({
+        auctionHouse,
+        authority: currentAuthority,
+        newAuthority: newAuthority.address,
+        sellerFeeBasisPoints: 100,
+        requiresSignOff: true,
+        canChangeSalePrice: true,
+        feeWithdrawalDestination: newFeeWithdrawalDestination,
+        treasuryWithdrawalDestination: newTreasuryWithdrawalDestination
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 資金の引き出し
+
+前のページでAuction Houseのさまざまなヘルパーアカウントについて説明しました。これらは**手数料アカウント**と**財務アカウント**です。
+
+これらのアカウントの両方から、資金を「宛先」ウォレットに戻すことができます。これらの引き出し先アカウントは、Auction House権限によって設定できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、資金を転送するコードスニペットです。
+
+1. Auction House手数料ウォレットから手数料引き出し先ウォレットへ。
+2. Auction House財務ウォレットから財務引き出し先ウォレットへ資金を転送します。
+
+どちらの場合も、資金が転送されるAuction Houseと引き出される資金の額を指定する必要があります。この額は、SOLまたはAuction Houseが通貨として使用するSPLトークンのいずれかになります。
+
+```tsx
+// 手数料アカウントから資金を引き出す
+await metaplex
+    .auctionHouse()
+    .withdrawFromFeeAccount({
+        auctionHouse,
+        amount: 5
+    });
+
+// 財務アカウントから資金を引き出す
+await metaplex
+    .auctionHouse()
+    .withdrawFromTreasuryAccount({
+        auctionHouse,
+        amount: 10
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## まとめ
+
+この時点で、Auction Houseの設定、Auction Houseインスタンスが保存するデータ、このデータを作成および更新する方法について説明しました。ただし、Auction Houseでアセットがどのように取引されるかはまだわかっていません。これについては[次のページ](/legacy-documentation/auction-house/trading-assets)で説明します。

+ 63 - 0
src/pages/ja/legacy-documentation/auction-house/receipts.md

@@ -0,0 +1,63 @@
+---
+title: レシート
+metaTitle: レシート | Auction House
+description: Auction Houseレシートの生成方法について説明します。
+---
+## はじめに
+
+マーケットプレイスでのトランザクション/アクティビティ追跡を支援するために、Auction Houseプログラムはリスティング、ビッド、販売のレシート生成をサポートしています。
+
+レシートの印刷に加えて、Auction Houseは対応する命令(ビッド、リスティング、または販売)がキャンセルされたときにレシートをキャンセルします。
+
+レシートがどのように印刷されるかを見てみましょう。
+
+## レシートの印刷
+
+これらのレシートを生成するには、対応するトランザクション(`PrintListingReceipt`、`PrintBidReceipt`、および`PrintPurchaseReceipt`)の直後にレシート印刷関数を呼び出す必要があります。
+
+さらに、キャンセルされたリスティングとビッドの場合、`CancelListingReceipt`と`CancelBidReceipt`命令を呼び出す必要があります。これら2つの命令を呼び出すと、`ListingReceipt`と`BidReceipt`アカウントの`canceled_at`フィールドが埋められます。
+
+> レシートは標準のgetProgramAccountsデータフローを使用して取得できますが、公式の推奨事項は、SolanaのAccountsDBプラグインを使用して生成されたレシートをインデックス化および追跡することです。
+
+上記の各関数にレシートを印刷するために導入できる2つのフィールドがあります:
+
+1. `printReceipt`: これはデフォルトで`true`になるブールフィールドです。このフィールドが`true`に設定されている場合、対応する関数のレシートが印刷されます。
+
+2. `bookkeeper`: レシートを担当するブックキーパーウォレットのアドレス。つまり、ブックキーパーはレシートの支払いを行ったウォレットです。現時点でのその唯一の責任は、将来アカウントを閉じることが許可された場合にプログラムが家賃の払い戻しを受けるべき人を知ることができるように、レシートの支払者を追跡することです。このフィールドはデフォルトで`metaplex.identity()`になります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+以下は、ビッド、リスト、販売実行命令のレシートを印刷する例です。
+
+```tsx
+// ListReceiptを印刷
+await metaplex
+    .auctionHouse()
+    .createListing({
+        printReceipt: true,
+        bookkeeper: metaplex.identity()
+    })
+
+// BidReceiptを印刷
+await metaplex
+    .auctionHouse()
+    .createBid({
+        printReceipt: true,
+        bookkeeper: metaplex.identity()
+    })
+
+// PurchaseReceiptを印刷
+await metaplex
+    .auctionHouse()
+    .executeSale({
+        printReceipt: true,
+        bookkeeper: metaplex.identity()
+    })
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## まとめ
+
+簡単なトランザクション追跡のためにレシートを印刷する方法がわかったので、実際にこれらのアクションに関する詳細をどのように取得するのでしょうか?Auction Houseのビッド、リスティング、販売を検索する方法を[次のページ](find)で探ってみましょう。

+ 190 - 0
src/pages/ja/legacy-documentation/auction-house/settings.md

@@ -0,0 +1,190 @@
+---
+title: 設定
+metaTitle: 設定 | Auction House
+description: Auction House設定について詳しく説明します。
+---
+
+## はじめに
+
+このページでは、Auction Houseで利用可能な設定について説明します。これらの設定には、Auction Houseの動作を定義する一般的な設定、Auction Houseの操作をサポートするアカウント(PDA)の定義、Auction Houseプログラムにさらなる設定可能性を提供するより具体的な設定が含まれます。
+
+## 権限
+
+権限は、アカウント、この場合はAuction Houseインスタンスの使用を制御するウォレットです。権限アドレスは、Auction Houseを作成するときに指定できます。指定されていない場合、Auction Houseの作成に使用されているウォレットがデフォルトで権限になります。
+
+権限は、Auction Houseの作成後に別のウォレットに転送することもでき、Auction Houseの制御が転送されます。このアクションは慎重に実行する必要があります。
+
+権限ウォレットは、マーケットプレイスでリストできるアセットと入札できるビッドを保護するという別の重要な役割も果たします。[`requireSignOff`](#requiresignoff)について説明するときに、権限のこの機能についてさらに詳しく説明します。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+JS SDKを使用する場合、Auction Houseの権限は常にAuction Houseの作成に使用されているウォレットにデフォルト設定されます。authorityプロパティに有効な署名者を提供することで、この権限を明示的に設定できます。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const myCustomAuthority = Keypair.generate();
+const auctionHouseSettings = {
+  authority: myCustomAuthority,
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 取引設定
+
+これらは、Auction Houseで設定できる取引固有の設定です。これらの設定は、ユーザーがマーケットプレイスとどのように対話するかを定義するのに役立ちます:
+
+1. `treasuryMint`: これは、マーケットプレイスで交換通貨として使用されるSPL-tokenのミントアカウントを定義します。Solanaのほとんどのマーケットプレイスは通常、交換通貨として、またアセットの取引にSOLを使用します。この設定を使用して、Auction Houseの権限は、特定のマーケットプレイスでアセットの売買に使用される任意のSPL-tokenを設定できます。
+
+2. `sellerFeeBasisPoints`: これは、マーケットプレイスが特定のマーケットプレイスでのすべてのアセットの各販売で受け取るセカンダリセールロイヤリティを定義します。`250`は`2.5%`のロイヤリティシェアを意味します。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+このスニペットでは、spl-tokenを作成し、それをAuction Houseの`treasuryMint`として設定しています。また、`sellerFeeBasisPoints`を使用してマーケットプレイスロイヤリティを設定しています。
+
+```tsx
+import { clusterApiUrl, Connection, Keypair } from "@solana/web3.js";
+import { Token, TOKEN_PROGRAM_ID } from "@solana/spl-token";
+
+const myKeypair = Keypair.generate();
+const connection = new Connection(
+    clusterApiUrl('devnet'),
+    'confirmed',
+);
+const myCustomToken = splToken.Token.createMint(connection, myKeypair, myKeypair.publicKey, null, 9, splToken.TOKEN_PROGRAM_ID)
+const auctionHouseSettings = {
+    treasuryMint: myCustomToken,
+    sellerFeeBasisPoints: 150
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+
+## ヘルパーアカウント
+
+Auction Houseが適切に機能するために必要ないくつかのアカウントがあります。Auction Houseによって設定されると、権限はこれらのアカウントをリセットして、好みに応じて設定できます。
+
+Auction Houseプログラムによって作成および制御されるアカウントがいくつかあります。これらのアカウントはプログラム派生アドレス(PDA)であり、[こちら](https://solanacookbook.com/core-concepts/pdas.html)で詳しく読むことができます。これらは、これらのアカウントを設定するために使用できる2つの設定です:
+
+1. `auctionHouseFeeAccount`: ユーザーに代わってAuction House関連のトランザクションの支払いに資金を保存する手数料アカウントの公開鍵。
+
+2. `auctionHouseTreasury`: マーケットプレイスロイヤリティとして、すべての販売で受け取った資金を保存する財務アカウントの公開鍵。
+
+Auction Houseプログラムによって作成されたものではなく、Auction Houseからさまざまなタイプの資金を権限に引き出すために不可欠な他のアカウントがあります:
+
+1. `feeWithdrawalDestination`: 手数料アカウントから資金を引き出すことができるアカウントの公開鍵。
+
+2. `treasuryWithdrawalDestination`: 財務アカウントから資金を引き出すことができるアカウントの公開鍵。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下のコードスニペットは、上記で説明した4つのアカウントに対応する4つの異なるkeypairを構築し、それらを設定します。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+
+const feeAccount = Keypair.generate();
+const treasuryAccount = Keypair.generate();
+const feeWithdrawalDestination = Keypair.generate();
+const treasuryWithdrawalDestination = Keypair.generate();
+const auctionHouseSettings = {
+    auctionHouseFeeAccount: feeAccount,
+    auctionHouseTreasury: treasuryAccount,
+    feeWithdrawalDestination: feeWithdrawalDestination,
+    treasuryWithdrawalDestination: treasuryWithdrawalDestination,
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+
+## サインオフを要求
+
+この設定により、マーケットプレイスはアセットリストと販売をゲートできます。権限セクションで説明したように、Auction House権限はアセットのゲートに役割を果たします。この検閲または集中制御は、`requireSignOff = true`の場合にのみ発生します。
+
+これが発生すると、マーケットプレイスでのすべてのトランザクション:リスティング、入札、販売の実行は、Auction House権限によって署名される必要があります。完全に分散化されたマーケットプレイスは、そのマーケットプレイスでのアクションの検閲または集中制御を避けるために、`requireSignOff`設定を`false`のままにすることを選択できます。
+
+`requireSignOff = true`を設定すると、他の力もあります:マーケットプレイスが独自のカスタムオーダーマッチングアルゴリズムを実装できるようになります。これについては次のセクションで詳しく説明します。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下のコードスニペットは、`requireSignOff`を`true`に設定します。
+
+```tsx
+const auctionHouseSettings = {
+    requireSignOff: true
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## 販売価格の変更可能性
+
+`canChangeSalePrice`により、マーケットプレイスは、ユーザーが意図的にアセットを無料で、または0 SOL(または他のSPL-token)でリストしたときに、アセットの販売価格を変更できます。アセットを0 SOLでリストすることにより、ユーザーはマーケットプレイスがカスタムマッチングアルゴリズムを適用して、「無料で」リストされたアセットに最適な価格マッチを見つけることを許可します。
+
+
+ここで注意すべき重要な点は、`canChangeSalePrice`は、`requireSignOff`も`true`に設定されている場合にのみ`true`に設定できることです。これは、パーミッションレスのリストと入札の場合、カスタムマッチングは不可能だからです。Auction Houseは、一致するビッドに「サインオフ」してアセットの販売を実行できる必要があります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下のコードスニペットは、`canChangeSalePrice`を`true`に設定し、同時に`requireSignOff`も`true`であることを確認します
+
+```tsx
+const auctionHouseSettings = {
+    requireSignOff: true,
+    canChangeSalePrice: true
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## オークショニア設定
+
+`Auctioneer`アカウントは、Auction HouseプログラムのコンポーザビリティパターンをAuction Houseインスタンスを制御するために使用するPDAです。
+
+オークショニアは、オークショニアガイド(*近日公開*)で説明する`DelegateAuctioneer`命令を使用して、Auction Houseインスタンスに制御または委任を与えることができます。
+
+Auction Houseで設定できるオークショニアに関連する3つの設定があります:
+
+1. `hasAuctioneer`: 特定のAuction Houseインスタンスに`Auctioneer`インスタンスが存在する場合はTrue。
+2. `auctioneerAuthority`: オークショニア権限キー。Auction Houseでオークショニアを有効にする場合に必要です。
+3. `auctioneerScopes`: オークショニアでユーザーが利用できるスコープのリスト、例:Bid、List、Execute Sale。Auction Houseでオークショニアが有効になっている場合にのみ適用されます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下のコードスニペットは、`hasAuctioneer`を`true`に設定します。また、`auctioneerAuthority`を生成された公開鍵に向け、`auctioneerScopes`を設定して、オークショニアがAuction Houseに代わって購入、販売、販売の実行を許可します。
+
+```tsx
+import { Keypair } from "@solana/web3.js";
+import { AuthorityScope } from '@metaplex-foundation/mpl-auction-house';
+
+const newAuthority = Keypair.generate();
+const auctionHouseSettings = {
+    hasAuctioneer: true,
+    auctioneerAuthority: newAuthority,
+    auctioneerScopes: [
+        AuthorityScope.Buy,
+        AuthorityScope.Sell,
+        AuthorityScope.ExecuteSale,
+    ]
+};
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## まとめ
+Auction House設定について理解したので、[次のページ](/legacy-documentation/auction-house/manage)では、それらを使用して独自のAuction Houseを作成および更新する方法を見ていきます。

+ 244 - 0
src/pages/ja/legacy-documentation/auction-house/trading-assets.md

@@ -0,0 +1,244 @@
+---
+title: アセットの取引
+metaTitle: アセットの取引 | Auction House
+description: Auction Houseでのアセットの取引管理方法について説明します。
+---
+## はじめに
+前のページでは、Auction Houseとその作成・管理方法について説明しました。Auction Houseが作成されると、その上でアセットを取引できます。マーケットプレイスでの簡単な取引は通常、3つのアクションで構成されます:
+
+1. 出品者がアセットをリストする
+2. 購入者がアセットにビッドを行う
+3. リスティングに一致するビッドが見つかると、販売が実行される
+
+このページでは、これら3つのアクションについて説明し、これらのアクションを簡単に実行するコード例を見ていきます。また、上記の簡単な取引シナリオとは異なる取引シナリオを見て、各シナリオを実行するコード例を見ていきます。最後に、作成されたリスティングとビッドをキャンセルする方法についても調査します。
+
+Auction Houseでのアセットのリスティングから始めましょう。
+
+## アセットのリスティング
+
+[概要ページ](../auction-house)でアセットをリストするプロセスを見ました。このアクションは**売却注文**の作成とも呼ばれます。Auction Houseを使用して売却注文が作成されると、リストされているアセットは出品者のウォレットに残ります。これはAuction Houseの非常に重要な機能であり、ユーザーがエスクローレスの方法でアセットをリストできるため、アセットがリストされている間もユーザーはアセットの管理を維持します。
+
+アセット出品者は、アセットをリストする価格に応じて、2つのタイプのリスティングを作成できます:
+
+1. **0より大きい価格でのリスティング**: ユーザーが0 SOL(または他のSPL-token)より大きい価格でアセットをリストする場合。この場合、出品者のウォレットが署名者である必要があります
+
+2. **0の価格でのリスティング**: ユーザーが0 SOL(または他のSPL-token)でアセットをリストする場合。この場合、[Auction House設定ページ](settings)で説明した`canChangeSalePrice`オプションが`true`に設定されている場合、権限は出品者に代わって署名できます。これが発生すると、Auction Houseは出品者に代わって0以外の一致するビッドを見つけます。アセットは、出品者が署名者として行動する場合にのみ、0の価格でリストおよび販売できます。署名者は1人だけである必要があります。権限または出品者が署名する必要があります。
+
+リストされているトークンのタイプに応じて、売却注文を作成するときにリストするトークンの数も指定できます:
+
+1. **非代替性トークン(NFT)の場合**: すべてのトークンの非代替性と一意性のため、1つのトークンのみをリストできます。
+
+2. **代替可能なアセットの場合**: 出品者はリストごとに1つ以上のトークンをリストできます。例:Aliceが5つのDUSTトークンを所有している場合、同じ売却注文でこれらのDUSTトークンの1つ以上(ただし5以下)をリストできます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Auction Houseでリスティングまたは売却注文を行う例を見てみましょう。
+
+以下のコードスニペットでは、3つのDUSTトークン(代替可能なトークン)を合計5 SOLで売却注文を行っています。ここで注意すべき重要な点は、NFTの売却注文を作成している場合、リストするトークンの数を指定する必要がないことです。デフォルトで1トークンになります。他の金額を指定するとエラーになります。
+
+
+```tsx
+await metaplex
+    .auctionHouse()
+    .createListing({
+        auctionHouse,                              // このリスティングに関連するAuction Houseのモデル
+        seller: Keypair.generate(),                // リスティングの作成者
+        authority: Keypair.generate(),             // Auction House権限
+        mintAccount: new PublicKey("DUST...23df"), // リスティングを作成するミントアカウント、メタデータの検索に使用
+        tokenAccount: new PublicKey("soC...87g4"), // リスティングが作成されるアセットに関連付けられたトークンアカウントアドレス
+        price: 5,                                  // リスティング価格
+        tokens: 3                                  // リストするトークンの数、NFTリスティングの場合は1トークンである必要があります
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## アセットへの入札
+
+アセットを購入したいユーザーは、そのアセットにビッド、または**購入注文**を行うことができます。
+
+アセットがリストされているかどうかに応じて、2つのタイプの購入注文があります:
+
+1. **プライベートビッド**: これは最も一般的なタイプのビッドです。Auction Houseでリストされたアセットに興味を持ったユーザーが、特定のアセットにプライベートビッドを作成します。このビッドは、アセット自体ではなく、特定のオークションに結び付けられています。これは、オークションが終了すると(ビッドが拒否されてリスティングがキャンセルされるか、ビッドが受け入れられてアセットが販売される)、ビッドも終了することを意味します。
+
+2. **パブリックビッド**: ユーザーは、sellerとtokenAccountプロパティをスキップすることで、リストされていないNFTにパブリックビッドを投稿できます。パブリックビッドは、特定のオークションではなく、トークン自体に固有です。これは、ビッドがオークションの終了後もアクティブなままになり、そのトークンの後続のオークションが基準を満たす場合に解決できることを意味します。
+
+売却注文の場合と同様に、購入注文も、リストされたアセットのタイプに応じて、入札するトークンの数を指定できます:
+
+1. **部分購入注文**: 代替可能なアセットをリストするときに1つ以上のトークンをリストする場合について説明しました。このような売却注文が存在する場合、ユーザーはリストされたトークンの一部のみを購入するビッドを行うことができます。つまり、部分購入注文を行うことができます。例:Aliceが`3 DUST`トークンを`5 SOL`でリストした場合、Aliceは`2 DUST`トークンを`2 SOL`で購入するビッドを行うことができます。つまり、ユーザーは売却注文の`token_size`より少ない前述のアセットの購入注文を作成できます。
+
+2. **完全購入注文**: これは、購入者が売却注文でリストされているすべてのトークンを購入するビッドを作成する場合です。売却注文ごとに1つのトークンのみをリストできる非代替性アセット(NFT)の場合、完全購入注文が作成されます。完全購入注文は、代替可能なトークンの場合にも作成できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+Auction Houseでビッドまたは購入注文を行う例を見てみましょう。
+
+以下のコードスニペットでは、3つのDUSTトークン(代替可能なトークン)を合計5 SOLで購入注文を行っています。ここで注意すべき重要な点は、NFTの売却注文を作成している場合、リストするトークンの数を指定する必要がないことです。デフォルトで1トークンになります。他の金額を指定するとエラーになります。
+
+これは、出品者アカウントとトークンアカウントを指定しているため、プライベートビッドの例です。ビッドの作成時にどちらかが指定されていない場合、ビッドはパブリックになります。
+
+```tsx
+await metaplex
+    .auctionHouse()
+    .createBid({
+        auctionHouse,                              // このリスティングに関連するAuction Houseのモデル
+        buyer: Keypair.generate(),                 // ビッドの作成者
+        seller: Keypair,generate(),                // ビッドが作成されるアセットを保持するアカウントアドレス、これまたはtokenAccountが提供されていない場合、ビッドはパブリックになります
+        authority: Keypair.generate(),             // Auction House権限
+        mintAccount: new PublicKey("DUST...23df"), // ビッドを作成するミントアカウント
+        tokenAccount: new PublicKey("soC...87g4"), // ビッドが作成されるアセットに関連付けられたトークンアカウントアドレス、これまたはsellerが提供されていない場合、ビッドはパブリックになります
+        price: 5,                                  // 購入者の価格
+        tokens: 3                                  // 入札するトークンの数、NFTビッドの場合は1トークンである必要があります
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## アセットの販売の実行
+
+リスティング(売却注文)とビッド(購入注文)の作成方法がわかったので、アセットの販売を実行する方法を学びましょう。アセットの販売が実行されると:
+
+1. Auction Houseは、購入者エスクローアカウントから出品者のウォレットにビッド額を転送します。購入者エスクローアカウントと、マーケットプレイス権限がそのアカウントの資金を管理する方法については、さらに詳しく説明します。
+
+2. Auction Houseは、出品者のウォレットから購入者のウォレットにアセットを転送します。
+
+販売の実行が何を意味するかがわかったので、Auction Houseを使用してアセットを販売できるさまざまな取引シナリオを探ってみましょう。[概要ページ]ですでに詳しく説明しましたが、各シナリオのコードスニペットに加えて簡単な説明を以下に示します:
+
+1. **直接購入**、または*「リスト価格での購入」*: これは、ユーザーがリストされたアセットにビッドを行ったときに販売の実行が行われる場合です。つまり、直接購入操作は、特定のアセットにビッドを作成し、作成されたビッドとリスティングで販売を実行します。
+
+    ほとんどの場合、このシナリオは、購入者がアセットのリスト価格でビッドを行うときに発生します。ただし、マーケットプレイスがしきい値で機能するカスタムオーダーマッチングアルゴリズムを持っている場合もあります。例:マーケットプレイスには、リスト価格から+-20%の範囲内にあるビッドがあるとすぐに、特定のアセットの販売を実行するルールがある場合があります。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、リストされたアセットに興味を持ったユーザーによるアセットの直接購入の例です。
+
+```tsx
+const listing = await metaplex
+    .auctionHouse()
+    .findListingByReceipt({...}) // 今後のページでリスティングの取得方法を見ます
+
+const directBuyResponse = await metaplex
+    .auctionHouse()
+    .buy({
+        auctionHouse,                   // ビッドを作成して販売を実行するAuction House
+        buyer: Keypair.generate(),      // ビッドの作成者、リスティングを作成する出品者と同じであってはなりません
+        authority: Keypair.generate(),  // Auction House権限、これが署名者の場合
+                                        // トランザクション手数料はAuction House手数料アカウントから支払われます
+        listing: listing,               // 販売で使用されるリスティング、`Listing`モデルのサブセットのみが必要ですが、
+                                        // 販売の実行方法を知るために、その設定に関する十分な情報が必要です
+        price: 5,                       // 購入者の価格
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+2. **直接販売**、または*「ビッド価格での販売」*: 直接購入の場合の対応として、これは、リストされていないアセットに興味を持ったユーザーがビッドを配置する場合です。アセット所有者がビッド額でアセットをリストすると、販売の実行が行われ、アセットを直接販売できます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、アセットへのビッドに興味を持ったユーザーによるアセットの直接販売の例です。
+
+```tsx
+const bid = await metaplex
+    .auctionHouse()
+    .findBidByReceipt({...}) // 今後のページでビッドの取得方法を見ます
+
+const directSellResponse = await metaplex
+    .auctionHouse()
+    .sell({
+        auctionHouse,                              // リスティングを作成して販売を実行するAuction House
+        seller: Keypair.generate(),                // リスティングの作成者、署名者は1人だけである必要があります。権限または出品者が署名する必要があります
+        authority: Keypair.generate(),             // Auction House権限、これが署名者の場合
+                                                   // トランザクション手数料はAuction House手数料アカウントから支払われます
+        bid: bid,                                  // 販売で使用されるパブリックビッド、`Bid`モデルのサブセットのみが必要ですが、
+                                                   // 販売の実行方法を知るために、その設定に関する十分な情報が必要です
+        sellerToken: new PublicKey("DUST...23df")  // 販売するアセットのトークンアカウント、パブリックビッドには
+                                                   // トークンが含まれていないため、このパラメータを介して外部で提供する必要があります
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+3. **独立した販売実行**、または*リスト者がビッドに同意*: これは、特定のアセットに対して**購入注文**(ビッド)と**売却注文**(リスティング)が存在した後、販売の実行が独立して行われる場合です。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、独立した販売実行の例です。
+
+```tsx
+const listing = await metaplex
+    .auctionHouse()
+    .findListingByReceipt({...}) // 今後のページでリスティングの取得方法を見ます
+
+const bid = await metaplex
+    .auctionHouse()
+    .findBidByReceipt({...})     // 今後のページでビッドの取得方法を見ます
+
+const executeSaleResponse = await metaplex
+    .auctionHouse()
+    .executeSale({
+        auctionHouse,                   // ビッドを作成して販売を実行するAuction House
+        authority: Keypair.generate(),  // Auction House権限、これが署名者の場合
+                                        // トランザクション手数料はAuction House手数料アカウントから支払われます
+        listing: listing,               // 販売で使用されるリスティング、`Listing`モデルのサブセットのみが必要ですが、
+                                        // 販売の実行方法を知るために、その設定に関する十分な情報が必要です
+        bid: bid,                       // 販売で使用されるパブリックビッド、`Bid`モデルのサブセットのみが必要ですが、
+                                        // 販売の実行方法を知るために、その設定に関する十分な情報が必要です
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## リスティングとビッドのキャンセル
+
+ここまでで、ビッドとリスティングの作成方法、およびAuction Houseでのアセットの販売の実行方法を見てきました。Auction Houseでリスティングとビッドが作成されると、権限を介してキャンセルできます。
+
+{% dialect-switcher title="JS SDK" %}
+{% dialect title="JavaScript" id="js" %}
+
+以下は、JS SDKを使用してビッドとリスティングをキャンセルする例です。
+
+```tsx
+const listing = await metaplex
+    .auctionHouse()
+    .findListingByReceipt({...}) // 今後のページでリスティングの取得方法を見ます
+
+const bid = await metaplex
+    .auctionHouse()
+    .findBidByReceipt({...})     // 今後のページでビッドの取得方法を見ます
+
+// ビッドをキャンセル
+const cancelBidResponse = await metaplex
+    .auctionHouse()
+    .cancelBid({
+        auctionHouse,            // ビッドをキャンセルするAuction House
+        bid: bid,                // キャンセルするビッド
+    });
+
+// リスティングをキャンセル
+const cancelListingResponse = await metaplex
+    .auctionHouse()
+    .cancelListing({
+        auctionHouse,            // リスティングをキャンセルするAuction House
+        listing: listing,        // キャンセルするリスティング
+    });
+```
+
+{% /dialect %}
+{% /dialect-switcher %}
+
+## まとめ
+
+このページでは、マーケットプレイスでのアセットの取引を管理するすべてのコンポーネントをカバーしました。
+
+まだ説明していない重要なポイントの1つは、購入者エスクローアカウントです。これは、購入者がアセットにビッドを行ったときに購入者の資金を一時的に保持するために必要です。このアカウントの資金はどのように管理され、誰がこれらの資金を追跡する責任がありますか?[次のページ](buyer-escrow)で見つけましょう。

+ 14 - 0
src/pages/ja/legacy-documentation/developer-tools/beet.md

@@ -0,0 +1,14 @@
+---
+title: Beet
+metaTitle: Beet | Developer Tools
+description: 厳密なborsh互換のde/serializerおよび関連拡張機能
+---
+
+厳密なborsh互換のde/serializerおよび関連拡張機能。Beetは[Solita](solita)によって型安全性を向上させるために使用されます。Solana固有の拡張
+パッケージ[@metaplex-foundation/beet-solana](https://www.npmjs.com/package/@metaplex-foundation/beet)は、Beetのアカウントレイアウトに関する知識により、GPAビルダーなどの新機能を追加します。
+
+🔗 **役立つリンク:**
+
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/beet)
+- [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/beet-solana)
+- [APIドキュメント](https://metaplex-foundation.github.io/beet/docs/beet/)

+ 14 - 0
src/pages/ja/legacy-documentation/developer-tools/cusper.md

@@ -0,0 +1,14 @@
+---
+title: Cusper
+metaTitle: Developer Tools | Cusper
+description: Solanaプログラムのログまたはエラーコードからカスタムプログラムエラーを解決します
+---
+# Cusper
+
+Cusperは、Solanaプログラムのログまたはエラーコードから**Cus**tom **P**rogram **Er**rors(カスタムプログラムエラー)を解決します。[Solita](solita)によってプログラムエラーの処理を大幅に簡単にするために使用されます。
+
+🔗 **役立つリンク:**
+
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/cusper)
+- [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/cusper)
+- [APIドキュメント](https://metaplex-foundation.github.io/cusper/docs/)

+ 13 - 0
src/pages/ja/legacy-documentation/developer-tools/rust-bin.md

@@ -0,0 +1,13 @@
+---
+title: Rust Bin
+metaTitle: Developer Tools | Rust Bin
+description: Rustバイナリバージョンを関連するRustクレートと同期します
+---
+
+Rustバイナリバージョンを関連するRustクレートと同期します。
+
+🔗 **役立つリンク:**
+
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/rustbin)
+- [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/rustbin)
+- [APIドキュメント](https://metaplex-foundation.github.io/rustbin/docs/)

+ 12 - 0
src/pages/ja/legacy-documentation/developer-tools/solita.md

@@ -0,0 +1,12 @@
+---
+title: Solita
+metaTitle: Developer Tools | Solita
+description: SolanaのRustプログラム用の低レベルTypeScript SDKを生成します
+---
+
+SolitaはAnchorまたは[Shank](shank)によって抽出されたIDLから、SolanaのRustプログラム用の低レベルTypeScript SDKを生成します。
+
+🔗 **役立つリンク:**
+
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/solita)
+- [NPMパッケージ](https://www.npmjs.com/package/@metaplex-foundation/solita)

+ 24 - 0
src/pages/ja/legacy-documentation/fixed-price-sale/index.md

@@ -0,0 +1,24 @@
+---
+title: 概要
+metaTitle: 概要 | Fixed Price Sale
+description: Master Edition NFTからプリントを販売
+---
+
+{% callout type="warning" %}
+
+このプログラムは非推奨としてマークされており、Metaplex Foundationチームによって積極的にメンテナンスされていないことにご注意ください。新機能、セキュリティ修正、および後方互換性は保証されません。注意してご使用ください。
+
+{% /callout %}
+
+# はじめに
+
+MetaplexのFixed-Price Saleプログラムは、ブランドが大規模なオーディエンスに配布できるメンバーシップNFTを作成するためのSolanaプログラムです。このNFTは、将来の日付で特定のもの(ゲーム、イベント、ローンチなど)へのアクセスをゲートするために使用できます。
+その名前が示すように、プログラムからのすべてのNFTは、単一のマスターエディションNFTから[プリントエディション](/token-metadata/print)をミントすることで固定価格で販売されます。その結果、すべてのNFTは同じメタデータを持ちます(エディション番号を除く)。
+
+Fixed-Price Saleプログラムは、コレクションによるゲーティングもサポートしています。したがって、クリエイターはコレクションNFTによって販売をゲートできます。つまり、オンチェーンコレクションの保有者のみがNFTを購入できます。販売の複数のステージを持つこともできます:ゲートされたものとゲートされていないもの。例えば、合計5時間の期間を持つマーケットを作成し、最初の3時間をゲートすることで、保有者のみがNFTを購入できます。
+
+🔗 **役立つリンク:**
+
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/metaplex-program-library/tree/master/fixed-price-sale)
+- [自動生成API](https://www.npmjs.com/package/@metaplex-foundation/mpl-fixed-price-sale)
+- [Rustクレート](https://crates.io/crates/mpl-fixed-price-sale)

+ 281 - 0
src/pages/ja/legacy-documentation/fixed-price-sale/tech-description.md

@@ -0,0 +1,281 @@
+---
+title: 技術的説明
+metaTitle: 技術的説明 | Fixed Price Sale
+description: Fixed Price Saleプログラムの技術的説明
+---
+
+## クリエーターが何かを販売するには:
+
+1. ストアを作成
+
+    - マーケットを何らかの方法でフィルタリングする必要があるため、これは必要です
+
+    - 名前、管理者キー、説明が含まれます
+
+2. 販売リソースを初期化します。作成されたものか、プラットフォームが作成します。
+
+    - ユーザーが販売リソースを初期化すると、販売できるリソースを持つオブジェクトができます
+
+3. マーケットを作成
+
+    - 販売するアイテムに関する情報を含むオブジェクトを作成します。販売リソースで定義した最大供給量以外のすべて
+
+## ユーザーがトークンを購入するには:
+
+1. ストアに移動します。
+
+2. トークンを選択して「購入」をクリック
+
+    - 内部的に次のことが起こります:
+
+        - TradeHistoryアカウントが作成され、このユーザーがすでに購入したトークンの数を追跡します
+
+        - デビットとクレジット操作
+
+        - 新しいNFTが作成されます(ミントの作成、トークンのミント、メタデータの作成、MasterEditionの作成)
+
+3. トークンがウォレットに表示されます
+
+# アカウント
+
+## Store
+
+| フィールド      | タイプ |説明|
+| ----------- | ----------- | ------ |
+| admin      | `Pubkey`       | 特定のストアで販売リソースとマーケットを作成できる管理者キー       |
+|  name  |  `String`  |   |
+|  description  |  `String`  |   |
+
+## Selling resource
+
+| フィールド      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  store  |  `Pubkey`  |    |
+|  owner  |  `Pubkey`  |  リソースの所有者。このアカウントは、販売が終了したらリソースを取り戻すことができます  |
+|  resource  |  `Pubkey`  |  メタデータが添付されているミントアカウント。ミントキーがわかればPDAを計算できるため、メタデータキーを保存する必要はありません  |
+|  vault  |  `Pubkey`  |  MasterEditionを保持するトークンアカウント  |
+|  vault_owner  |  `Pubkey`  |  シードが["mt_vault", resource.key(), store.key()]のPDA  |
+|  supply  |  `u64`  |  すでに販売されたトークンの量  |
+|  max_supply  |  `Option<u64>`  |  販売できるトークンの最大量  |
+|  state  |  `Enum{Uninitialised, Created, InUse, Exhausted, Stoped,}`  |  リソースの状態  |
+
+## Market
+
+| フィールド      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  store  |  `Pubkey`  |    |
+|  selling_resource  |  `Pubkey`  |    |
+|  treasury_mint  |  `Pubkey`  |  マーケットが支払いとして受け入れるトークンのミントアカウント  |
+|  treasury_holder  |  `Pubkey`  |  購入者がトークンを送信するトークンアカウント。マーケット所有者のみがアセットを引き出すことができます  |
+|  treasury_owner  |  `Pubkey`  |  PDA["holder", treasury_mint.key(), selling_resource.key()]  |
+|  owner  |  `Pubkey`  |  マーケット所有者  |
+|  name  |  `String`  |    |
+|  description  |  `String`  |    |
+|  mutable  |  `bool`  |    |
+|  price  |  `u64`  |    |
+|  pieces_in_one_wallet  |  `Option<u64>`  |  1つのウォレットに販売できるトークンの数  |
+|  start_date  |  `u64`  |    |
+|  end_date  |  `Option<u64>`  |    |
+|  state  |  `Enum {Uninitialised, Created, Active, Ended,}`  |    |
+|  funds_collected  |  `u64`  |    |
+
+
+## TradeHistory
+
+### PDA ["history", wallet.key(), market.key()]
+
+| フィールド      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  `Pubkey`  |    |
+|  wallet  |  `Pubkey`  |    |
+|  already_bought  |  `u64`  |  ユーザーが特定のマーケットからすでに購入したトークンの数  |
+
+## PrimaryMetadataCreators
+
+### PDA ["primary_creators", metadata.key()]
+
+| フィールド      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  creators  |  `Vec<mpl_token_metadata::state::Creator>`  |  プライマリセールスロイヤリティを受け取るクリエーターのリスト  |
+
+# 命令
+
+## CreateStore
+
+新しいStoreアカウントを作成します。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  admin  |  Key, Signer, Writable  |    |
+|  store  |  Key, Signer, Writable  |  初期化されていないアカウント  |
+|  name  |  `String`  |    |
+|  description  |  `String`  |    |
+
+## InitSellingResource
+
+マーケットで使用されるSellingResourceアカウントを初期化します。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  store  |  Key  |    |
+|  store_admin  |  Key, Signer, Writable  |  resource_tokenを保持し、selling_resourceアカウント作成の支払いを行います  |
+|  selling_resource  |  Key, Signer, Writable  |  初期化されていないアカウント  |
+|  selling_resource_owner  |  Key  |  販売が終了したらMasterEditionを引き出すことができるキー  |
+|  resource_mint  |  Key  |  メタデータが添付されているミントアカウント  |
+|  master_edition  |  Key  |  シードが["metadata", tokenMetadataProgramID, resource_mint, "edition"]のPDA  |
+|  metadata  |  Key  |  マスターエディションのメタデータ  |
+|  vault  |  Key, Writable  |  リソースを保持するトークンアカウント  |
+|  vault_owner  |  PDA ["mt_vault", resource_mint.key(), store.key()]  |  vaultトークンアカウントの所有者  |
+|  resource_token  |  Key, Writable  |  resource_mintからのトークンを保持するユーザーのトークンアカウント  |
+|  max_supply  |  `Option<u64>`  |  販売するトークンの最大量  |
+
+## CreateMarket
+
+Marketアカウントを初期化します。状態をCreatedに設定します。これは、所有者がアクティブ化される前にデータを変更できることを意味します。もちろん、Marketがmutableとマークされている場合。
+
+:::warning
+
+ユーザーが`treasury_mint`としてネイティブSOLでアートを販売したい場合、`11111111111111111111111111111111`を設定する必要があります。また、treasury_holderとtreasury_ownerは同じアカウントPDAである必要があります。これはセキュリティ上の理由から必要であり、プログラムのみがそのSOLを使用できるようにするためです。
+
+:::
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Signer, Writable  |  初期化されていないアカウント  |
+|  store  |  Key  |    |
+|  selling_resource_owner  |  Key, Signer, Writable  |    |
+|  selling_resource  |  Key, Writable  |    |
+|  treasury_mint  |  Key  |  支払いとして受け取るアセットのミント  |
+|  treasury_holder  |  Key  |  トークンアカウント  |
+|  treasury_owner  |  PDA ["holder", treasury_mint.key(), selling_resource.key()]  |    |
+|  name  |  `String`  |    |
+|  description  |  `String`  |    |
+|  mutable  |  `bool`  |    |
+|  price  |  `u64`  |    |
+|  pieces_in_one_wallet  |  `Option<u64>`  |    |
+|  start_date  |  `u64`  |    |
+|  end_date  |  `Option<u64>`  |    |
+|  gating_config  |  `Option<GatingConfig{collection: Pubkey, expire_on_use: bool, gating_time: Option<u64>}>`  |  ゲーティングトークン。この値が設定されている場合、指定されたコレクションのNFTを持つユーザーのみがマーケットから新しいNFTを購入できます。  |
+
+## ChangeMarket
+
+Market::mutable == trueの場合にのみ利用可能。変更可能:name、description、mutable、price、pieces_in_one_wallet。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Writable  |    |
+|  market_owner  |  Key, Signer  |    |
+|  new_name  |  `Option<String>`  |    |
+|  new_description  |  `Option<String>`  |    |
+|  mutable  |  `Option<bool>`  |    |
+|  new_price  |  `Option<u64>`  |    |
+|  new_pieces_in_one_wallet  |  `Option<u64>`  |    |
+
+## Buy
+
+現在の日付 > Market::start_dateの場合にのみユーザーが呼び出すことができます。
+
+:::warning
+
+ユーザーがネイティブSOLでアートを購入する場合、user_token_accとuser_walletアカウントは同じである必要があります。
+
+:::
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Writable  |    |
+|  selling_resource  |  Key, Writable  |    |
+|  user_token_acc  |  Key, Writable  |  メンバートークンの支払いに使用するトークンアカウント。このトークンaccのミントはtreasury_mintと同じである必要があります  |
+|  user_wallet  |  Key, Signer, Writable  |    |
+|  trade_history  |  Key, Writable  |  ユーザーがすでに購入したNFTの数を追跡するアカウント  |
+|  treasury_holder  |  Key, Writable  |    |
+|  new_metadata_acc  |  Key, Writable  |    |
+|  new_edition_acc  |  Key, Writable  |    |
+|  master_edition_acc  |  Key, Writable  |    |
+|  new_mint  |  Key, Writable  |    |
+|  edition_marker  |  Key, Writable  |  PDA、シードはtoken-metadataプログラムで見つけることができます  |
+|  vault  |  Key  |    |
+|  vault_owner  |  PDA ["mt_vault", resource.key(), store.key()]  |    |
+|  master_edition_metadata  |  Key  |    |
+|    |  以下のアカウントはオプションであり、ゲート機能が有効な場合にのみ渡す必要があります ↓  |    |
+|  user_collection_token_account  |  Key, Writable  |  コレクションからのユーザーのトークンアカウント  |
+|  token_account_mint  |  Key, Writable  |  トークンのミントアカウント  |
+|  metadata_account  |  Key  |  上記のミントのメタデータアカウント  |
+
+## SuspendMarket
+
+誰もアイテムを購入できず、マーケット所有者がデータを変更できるようにマーケットを一時停止します。命令は、Market::mutable == trueの場合にのみ利用可能である必要があります。他の場合は、それを一時停止する理由がないためです。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Writable  |    |
+|  market_owner  |  Key, Signer  |    |
+|  clock  |  Key  |    |
+
+## ResumeMarket
+
+一時停止されたマーケットを再開する命令。マーケットが一時停止状態にある場合にのみ呼び出すことができます。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Writable  |    |
+|  market_owner  |  Key, Signer  |    |
+|  clock  |  Key  |    |
+
+## CloseMarket
+
+この命令は、マーケットが無制限の期間で作成された場合にのみ呼び出すことができます。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key, Writable  |    |
+|  market_owner  |  Key, Signer  |    |
+|  clock  |  Key  |    |
+
+## Withdraw
+
+マーケット所有者が収集された財務資金を引き出すために呼び出します。Market::state == Endedの場合にのみ利用可能。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key  |    |
+|  selling_resource  |  Key  |    |
+|  metadata  |  Key  |    |
+|  treasury_holder  |  Key, Writable  |  Market::treasury_holder。販売中にユーザーから受け取ったすべてのトークンを保持するトークンアカウント  |
+|  treasury_mint  |  Key  |    |
+|  funder  |  Key  |    |
+|  payer  |  Key, Signer  |    |
+|  payout_ticket  |  Key, Writable  |  PDA["payout_ticket", market.key(), funder.key()]  |
+|  treasury_owner  |  Key  |  PDA["holder", treasury_mint.key(), selling_resource.key()]  |
+|  destination  |  Key, Writable  |  トークンを転送するトークンアカウント  |
+|    |  以下のアカウントはオプションであり、プライマリセール中にのみ渡す必要があります ↓  |    |
+|  primary_metadata_creators_data  |  Key  |  プライマリセールからロイヤリティを受け取るべきクリエーターのリスト  |
+
+## ClaimResource
+
+リソース所有者によって呼び出されます。SellingResource::state == ExhaustedまたはMarket::state == Endedの場合にのみ利用可能。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  market  |  Key  |    |
+|  treasury_holder  |  Key  |    |
+|  selling_resource  |  Key  |    |
+|  selling_resource_owner  |  Key, Signer  |    |
+|  source  |  Key, Writable  |  SellingResource::vault。マスターエディションを保持するトークンアカウント  |
+|  metadata  |  Key  |  販売されたトークンのメタデータ  |
+|  vault_owner  |  Key  |  シードが["mt_vault", resource.key(), store.key()]のPDA  |
+|  secondary_metadata_creators  |  Key  |    |
+|  destination  |  Key, Writable  |  マスターエディションを転送するトークンアカウント  |
+
+## SavePrimaryMetadataCreators
+
+マーケットが作成される前に呼び出されます。このクリエーターのリストは、ロイヤリティを配分するためにwithdraw命令で使用されます。`primary_sale_happen = true`のマスターエディションからNFTを販売する場合は、この命令を呼び出す必要がないことに注意してください。
+
+| パラメータ      | タイプ |説明|
+| ----------- | ----------- | ------ |
+|  admin  |  Key, Signer, Writable  |  メタデータの更新権限  |
+|  metadata  |  Key, Writable  |    |
+|  primary_metadata_creators  |  Key, Writable  |  シードが["primary_creators", metadata.key()]のPDA  |
+|  system_program  |  Key  |    |
+|  primary_metadata_creators  |  `u8`  |  primary_metadata_creatorsキーのバンプ  |
+|  creators  |  `Vec<mpl_token_metadata::state::Creator>`  |  プライマリロイヤリティを受け取るクリエーターのリスト  |

+ 21 - 0
src/pages/ja/legacy-documentation/gumdrop.md

@@ -0,0 +1,21 @@
+---
+title: Gumdrop
+metaTitle: Gumdrop | Developer Hub
+description: 高額な前払いレント費用を必要としない、簡単なトークンエアドロップとプリントエディションエアドロップ
+---
+
+{% callout type="warning" %}
+
+このプログラムは非推奨としてマークされており、Metaplex Foundationチームによって積極的にメンテナンスされていないことにご注意ください。新機能、セキュリティ修正、および後方互換性は保証されません。注意してご使用ください。
+
+{% /callout %}
+
+Gumdropプログラムは、高額な前払いレント費用を必要としない、簡単なトークンエアドロップとプリントエディションエアドロップを可能にします。
+元々は[Uniswap](https://github.com/Uniswap/merkle-distributor)によってトークンエアドロップのために開拓され、[Saber](https://github.com/saber-hq/merkle-distributor)によってSolanaに移植されたものが、マスターコピーのエディション印刷を可能にするように拡張されました。
+さらに、Gumdropは、オフチェーンハンドル(例:メール、Discordなど)でツリーを構築し、ユーザーが任意のウォレットに償還できるようにすることで、クリエイターがホワイトリストに登録されたユーザーに直接ドロップ回収リンクを送信できるようにします。
+
+🔗 **役立つリンク:**
+
+- [Gumdrop CLI/UI](https://github.com/metaplex-foundation/gumdrop)
+- [GitHubリポジトリ](https://github.com/metaplex-foundation/metaplex-program-library/tree/master/gumdrop)
+- [Mark SackerbergによるGumdropガイド](https://www.sackerberg.dev/blog/gumdrop)

+ 23 - 0
src/pages/ja/legacy-documentation/index.md

@@ -0,0 +1,23 @@
+---
+title: 概要
+metaTitle: レガシードキュメンテーション | Developer Hub
+description: 現在使用されていない、または非推奨となっている古いプログラムやツールのドキュメンテーションのコレクション。完全性を期すため、古いドキュメントから移行されました。
+---
+
+現在使用されていない、または非推奨となっている古いプログラムやツールのドキュメンテーションのコレクション。完全性を期すため、古いドキュメントから移行されました。 {% .lead %}
+
+{% quick-links %}
+
+{% quick-link title="Auction House" icon="BookOpen" href="/legacy-documentation/auction-house" description="Solanaブロックチェーン内でユーザーが資産を交換できるようにします。" /%}
+
+{% quick-link title="Fixed Price Sale" icon="BookOpen" href="/legacy-documentation/fixed-price-sale" description="単一のマスターエディションからプリントエディションをミントすることで、固定価格でNFTを販売します。" /%}
+
+{% quick-link title="Gumdrop" icon="BookOpen" href="/legacy-documentation/gumdrop" description="コミュニティがトークンを請求できるようにし、自分でエアドロップを行い、手数料を支払う必要がありません。" /%}
+
+{% quick-link title="Token Entangler" icon="BookOpen" href="/legacy-documentation/token-entangler" description="NFTを相互に絡ませます。例えば、プロジェクトをデラグしたり、不変のメタデータが壊れたものを修正したりします。" /%}
+
+{% quick-link title="Mobile SDKs" icon="CodeBracketSquare" href="" description="AndroidまたはiOS開発を検討する際に役立つ可能性があります。" /%}
+
+{% quick-link title="Developer Tools" icon="CodeBracketSquare" href="" description="開発を支援する可能性のある古い開発者ツール。" /%}
+
+{% /quick-links %}

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików