Compare commits

..

240 Commits

Author SHA1 Message Date
akcodez
26d1cf102c test 2026-02-13 10:50:27 -08:00
akcodez
a41a9e31cc fix optimization 2026-02-10 10:54:28 -08:00
akcodez
159ac52acc stashing work 2026-02-10 10:36:41 -08:00
Calvin
c7e01d322a Merge pull request #3485 from XRPLF/pattern/tile-link
Add TileLink Component and LinkSmallGrid Pattern
2026-02-09 15:03:21 -08:00
Calvin Jhunjhuwala
17582d543d updating comments in scss file 2026-02-09 14:58:48 -08:00
Calvin Jhunjhuwala
986ca23ff7 removing import for break points 2026-02-09 14:54:44 -08:00
Calvin Jhunjhuwala
acb2476d7d tweaks to pattern and section 2026-02-07 10:55:48 -08:00
Calvin Jhunjhuwala
f5c38ffe77 cleaning up key 2026-02-06 23:51:37 -08:00
Calvin Jhunjhuwala
ee6a32d159 adding TileLinks pattern, adding LinkSmallGrid 2026-02-06 23:37:57 -08:00
Calvin
e1d18bd621 Merge pull request #3480 from XRPLF/section/feature-single-topic
Add FeatureSingleTopic pattern component with associated styles
2026-02-05 09:59:59 -08:00
Calvin Jhunjhuwala
a85dc47781 fix button utils, remove separate file, enhance within main BUttonGroup file 2026-02-05 09:48:40 -08:00
Calvin Jhunjhuwala
eecd14d763 adding button group utils for validation, cleaning up styling for FeatureSingleTopic 2026-02-04 16:20:03 -08:00
Calvin Jhunjhuwala
42282a2012 Merge branch 'xrpl-brand-update-2026' of github.com:XRPLF/xrpl-dev-portal into section/feature-single-topic 2026-02-04 14:57:33 -08:00
akcodez
6442318205 Enhance FeatureSingleTopic component with button variant support and responsive behavior updates
- Updated the FeatureSingleTopic component to allow configurable button variants (primary or secondary) based on the `singleButtonVariant` prop.
- Improved mobile and tablet responsiveness by ensuring content always appears above the image, regardless of orientation.
- Refined button rendering logic for better clarity in the README and component documentation.
- Adjusted SCSS styles for improved spacing and alignment across different screen sizes.
2026-02-04 11:29:56 -08:00
Calvin
1ee76bfbea Merge pull request #3482 from XRPLF/quick-fix-020426
fix back to html.light, will consolidate later
2026-02-04 11:24:33 -08:00
Calvin Jhunjhuwala
d558b7474d fix back to html.light, will consolidate later 2026-02-04 11:22:59 -08:00
Calvin
da49b0a154 Merge pull request #3477 from XRPLF/section/carousel-feature-image
Add CarouselButton component and integrate into CarouselCardList and …
2026-02-04 11:19:14 -08:00
Calvin Jhunjhuwala
01931bd177 stylesheet clean up 2026-02-04 11:14:42 -08:00
Calvin Jhunjhuwala
c2ef761b01 cleaning up the files, removing dead css, leveraging the grid more 2026-02-03 16:26:47 -08:00
akcodez
d6ce246420 Add FeatureSingleTopic pattern component with associated styles
- Introduced the FeatureSingleTopic component, enhancing layout flexibility with responsive design.
- Added SCSS styles for various screen sizes, including media queries for improved spacing and alignment.
- Implemented dark mode styles for better accessibility and visual consistency.
2026-02-03 13:29:24 -08:00
akcodez
33c6315510 Refactor CarouselCardList and CarouselFeatured to streamline button rendering logic using a map function for navigation buttons, enhancing code maintainability and consistency across components. 2026-02-03 10:40:08 -08:00
akcodez
af0b8cd40a Refactor CarouselFeatured to use ButtonGroup for button management, simplifying button rendering logic and improving code maintainability. 2026-02-03 10:38:45 -08:00
akcodez
95c4ffaa1b merge buttongroup in 2026-02-03 10:29:25 -08:00
Calvin
08c5572f16 Merge pull request #3475 from XRPLF/go/feat/FeaturedVideoSection
Add FeaturedVideoHero pattern component with showcase and styles
2026-02-03 10:25:12 -08:00
Calvin Jhunjhuwala
b49bc02dd2 fixing button and button groups for feature 2 column 2026-02-02 17:03:04 -08:00
Calvin Jhunjhuwala
65a61c5e47 fixing spacing and alignments 2026-02-02 16:20:50 -08:00
Calvin Jhunjhuwala
237ddc3c74 cleaning up styles, aligning text to bottom for section 2026-02-02 15:57:20 -08:00
Calvin
dd6cfd34fe Merge pull request #3474 from XRPLF/pattern/button-group
Add ButtonGroup pattern component
2026-02-02 14:30:26 -08:00
akcodez
607f8bdf07 Add CarouselButton component and integrate into CarouselCardList and CarouselFeatured showcases
- Introduced CarouselButton component for navigation with multiple color variants (neutral, green, black).
- Enhanced CarouselCardListShowcase to include a visual showcase of CarouselButton in various states.
- Created CarouselFeatured component showcasing featured images with navigation and responsive behavior.
- Updated styles for CarouselButton and integrated it into existing patterns for improved navigation experience.
2026-02-02 13:56:00 -08:00
Calvin Jhunjhuwala
7b601da3a0 updating to add more warnings/dev feedback 2026-02-02 13:20:12 -08:00
Aria Keshmiri
dc85b8c241 Merge pull request #3472 from XRPLF/navbar/updates
Update navigation constants and submenu data for improved routing
2026-02-02 08:59:34 -08:00
akcodez
0a25b1b9c0 hide scroll on open mobile menu 2026-02-02 08:59:13 -08:00
gabriel-ortiz
6021b458e6 Add FeaturedVideoHero pattern component with showcase and styles
- Introduced the FeaturedVideoHero component featuring a responsive layout with a headline, optional subtitle, call-to-action buttons, and a video element.
- Added associated SCSS styles for the component to ensure proper spacing and theming.
- Created a showcase page to demonstrate the usage of the FeaturedVideoHero pattern.
- Updated types to include design constraints for buttons and video elements.
- Implemented validation for required props to enhance development experience.
2026-01-30 13:47:38 -08:00
Calvin Jhunjhuwala
e5f3bf75e3 minor add for maxnumber 2026-01-30 10:30:53 -08:00
Calvin Jhunjhuwala
7dd32d63da working button group, updated examples 2026-01-29 16:50:32 -08:00
akcodez
7376dce9ef Update navigation constants and submenu data for improved routing
- Changed hrefs for main navigation items to reflect new paths.
- Updated submenu data for 'Develop' and 'Use Cases' sections with new links.
- Adjusted community submenu links for better resource access.
- Refined network submenu data to include relevant resources and insights.
2026-01-29 10:21:57 -08:00
Aria Keshmiri
ce9012f26f Merge pull request #3465 from XRPLF/section/cards-two-column
Add CardsTwoColumn pattern styles and integrate into XRPL styles
2026-01-29 09:51:13 -08:00
akcodez
9042a60b28 Refactor TextCard component structure and styles
- Removed unnecessary wrapper elements for header and footer in TextCard, simplifying the markup.
- Updated class names in SCSS for better clarity and consistency.
- Enhanced CardsTwoColumnProps documentation to specify that description and secondaryDescription can be either string or ReactNode.
- Cleaned up CSS by removing redundant vendor prefixes for better maintainability.
2026-01-29 09:50:59 -08:00
akcodez
9ff586b172 merge main branch in 2026-01-29 09:46:07 -08:00
Aria Keshmiri
a082d9030c Merge pull request #3457 from XRPLF/section/card-stats
Add Section Card Stat + slight optimizations to card stat component
2026-01-28 15:02:03 -08:00
akcodez
9814a24dcf merge 2026-01-28 15:01:49 -08:00
Aria Keshmiri
05c36beae2 Merge pull request #3454 from XRPLF/section/carousel-card-list
Add CarouselCardList pattern component and showcase
2026-01-28 15:00:03 -08:00
akcodez
41e01b51bd Refactor CarouselCardList component to improve code clarity and maintainability
- Introduced a constant for the BEM class name to enhance readability.
- Updated buttonVariant prop type to derive from ButtonProps for consistency.
- Replaced hardcoded class name with the new constant in the component's render method.
2026-01-28 14:59:46 -08:00
akcodez
4c2b2d487c merg 2026-01-28 14:58:33 -08:00
gabriel-ortiz
dec76b1f71 Merge pull request #3467 from XRPLF/go/feat/cardStandardSection
Add StandardCardGroupSection pattern component and related styles
2026-01-28 14:53:41 -08:00
gabriel-ortiz
b26b185c04 Merge branch 'xrpl-brand-update-2026' into go/feat/cardStandardSection 2026-01-28 14:52:55 -08:00
akcodez
fb7707c6b6 Update TextCard and CardsTwoColumn documentation to reflect new features 2026-01-28 14:48:51 -08:00
akcodez
ee80283265 Add disabled state to TextCard component and update showcase
- Implemented a disabled state for the TextCard component, enhancing accessibility and user experience.
- Updated the CardsTwoColumnShowcase to include examples of disabled TextCards in both light and dark modes.
- Refined styles for the disabled state to ensure visual clarity and consistency across themes.
- Enhanced documentation to reflect the new disabled functionality in the TextCard component.
2026-01-28 14:39:53 -08:00
gabriel-ortiz
a3119f9fc0 Fix typo in DesignContrainedButtonProps to DesignConstrainedButtonProps across multiple components and utility files for consistency. 2026-01-28 14:36:46 -08:00
akcodez
5c87e7e1cb Enhance TextCard component and update CardsTwoColumn pattern
- Introduced the TextCard component with 6 color variants and interactive states, including hover and pressed effects.
- Updated CardsTwoColumn pattern to utilize the new TextCard component, showcasing all 6 color variants in a responsive layout.
- Improved documentation for both TextCard and CardsTwoColumn, detailing usage, props, and responsive behavior.
- Refactored styles to ensure consistency and maintainability across components.
2026-01-28 13:53:03 -08:00
Calvin
9084d37db3 Merge pull request #3468 from XRPLF/qa-card-stats-section
CardStats Component Refactoring and Grid Integration
2026-01-28 12:43:04 -08:00
Calvin
bf7bd6fbd7 Merge pull request #3460 from XRPLF/pattern/logo-rectangle-grid
Pattern/logo rectangle grid
2026-01-28 09:22:37 -08:00
Calvin Jhunjhuwala
50df631f8a merging master 2026-01-27 21:54:28 -08:00
Calvin Jhunjhuwala
0d779b4d47 code clean up, ready for additional review 2026-01-27 21:50:04 -08:00
Calvin Jhunjhuwala
071e940e6b merging main branch 2026-01-27 18:06:41 -08:00
Calvin Jhunjhuwala
9fe2a7377f cleaning up code, consolidating and attaching the CardStat to the grid, less css 2026-01-27 17:09:59 -08:00
gabriel-ortiz
e40ea50259 Update error handling and clean up imports in StandardCardGroupSection and helpers
- Changed console warning to error for better visibility when no cards are provided in StandardCardGroupSection.
- Simplified imports in helpers by removing unused React types to enhance code clarity.
2026-01-27 14:36:05 -08:00
gabriel-ortiz
41e3e82984 Refactor StandardCard component and utility functions
- Replaced the hasChildren utility function with isEmpty for better clarity in child element checks.
- Updated SCSS styles for the StandardCard buttons to maintain consistent alignment and spacing across breakpoints.
- Removed the deprecated hasChildren function from the helpers module to streamline utility functions.
2026-01-27 14:14:37 -08:00
gabriel-ortiz
1ba6c9753d Add StandardCardGroupSection pattern component and related styles
- Introduced the StandardCardGroupSection component, which displays a headline, description, and a responsive grid of StandardCard components.
- Implemented SCSS styles for the StandardCardGroupSection, ensuring consistent spacing and dark mode support.
- Added utility functions for key generation and environment checks to enhance component functionality.
- Created a README file detailing usage, props, and best practices for the StandardCardGroupSection.
- Included new StandardCard component with customizable variants and button handling.
2026-01-27 14:05:48 -08:00
gabriel-ortiz
0fe57025c6 Merge pull request #3462 from XRPLF/go/primaryHeaderTertiaryHotfix
Update padding for CTA buttons in HeaderHeroPrimaryMedia component
2026-01-26 13:21:50 -08:00
akcodez
e43ce195a4 rm dead code 2026-01-26 13:16:09 -08:00
akcodez
c192ccec70 Add CardsTwoColumn pattern styles and integrate into XRPL styles
- Introduced new styles for the CardsTwoColumn pattern, including responsive layouts and various card designs.
- Updated the xrpl.scss file to import the new CardsTwoColumn styles, ensuring they are included in the overall styling framework.
2026-01-26 13:14:52 -08:00
gabriel-ortiz
8a2ff6e69f Update padding for CTA buttons in HeaderHeroPrimaryMedia component
- Added !important to padding for hover and focus states of tertiary buttons to ensure consistent styling across interactions.
2026-01-22 18:08:30 -08:00
gabriel-ortiz
6bce7efae0 Merge pull request #3450 from XRPLF/go/xrpl-brand-update/PrimaryHero
Add HeaderHeroPrimaryMedia component and styles
2026-01-22 14:15:03 -08:00
Calvin Jhunjhuwala
df1ab88ef7 cleaning up duplicate, cleaning up button group, useMemo for rectangle grid 2026-01-21 18:41:19 -08:00
Calvin Jhunjhuwala
8f931a2a4c working ofset for large and medium 2026-01-21 17:06:57 -08:00
Calvin Jhunjhuwala
be46c362cf merging master 2026-01-21 16:02:20 -08:00
Calvin
99d3442bef Merge pull request #3451 from XRPLF/pattern/logo-square-grid
Pattern/Logo Square Grid
2026-01-21 15:51:58 -08:00
Calvin Jhunjhuwala
e66a877868 merging master 2026-01-21 15:20:22 -08:00
Calvin Jhunjhuwala
b9410305ef merging master, fixing merge conflicts 2026-01-21 15:19:30 -08:00
akcodez
d5e7fceb21 add forceCOlor 2026-01-21 12:31:36 -08:00
akcodez
7be7ad4806 Merge remote-tracking branch 'origin' into section/card-stats 2026-01-21 12:29:19 -08:00
Aria Keshmiri
7498f9820c Merge pull request #3446 from XRPLF/pattern/feature-two-column
Pattern/feature two column
2026-01-21 12:29:04 -08:00
Calvin Jhunjhuwala
9d4ed9a477 updates to logo rectangle, need to work on the offsetting 2026-01-21 11:46:18 -08:00
akcodez
7a6aab6493 design changes 2026-01-21 11:20:09 -08:00
akcodez
a992f0ddf3 Refactor CardStat component buttons and add CardStats styles
- Simplified button rendering in CardStat component by consolidating href and onClick handling.
- Introduced new styles for CardStats, including responsive design for various screen sizes and dark mode support.
- Updated SCSS imports to include CardStats styles.
2026-01-21 10:27:17 -08:00
akcodez
87c3c6ef19 fix 2026-01-21 09:58:17 -08:00
akcodez
8c5f6f79c1 update 2026-01-21 09:56:23 -08:00
akcodez
a6fde81c36 Refactor FeatureTwoColumn styles and improve button key handling
- Centralized background color variants for light and dark modes using a map structure in SCSS.
- Updated the button rendering logic to use a unique key based on link properties, enhancing performance and preventing potential key collisions.
- Improved code readability and maintainability by reducing redundancy in background color definitions.
2026-01-21 09:55:53 -08:00
gabriel-ortiz
b085502a4d Refactor HeaderHeroPrimaryMedia styles and component structure
- Updated SCSS styles for improved layout and responsiveness, including adjustments to padding and margin for various breakpoints.
- Enhanced the HeaderHeroPrimaryMedia component by refining the media rendering logic and updating prop types for better type safety.
- Changed subtitle class from 'label-l' to 'body-l' for consistent styling.
- Ensured proper handling of empty values in the isEmpty utility function.
2026-01-20 19:54:31 -08:00
Calvin Jhunjhuwala
4da20f1ac1 correct layout, working on right align next 2026-01-20 17:50:08 -08:00
akcodez
ef200ee737 Add CarouselCardList pattern component and showcase
- Introduced the CarouselCardList component for a horizontal scrolling card carousel with navigation buttons.
- Implemented responsive design for mobile, tablet, and desktop views.
- Added SCSS styles for light and dark mode support.
- Created a dedicated showcase page demonstrating the CarouselCardList features and usage examples.
- Included comprehensive documentation for props and variants.
2026-01-20 12:41:58 -08:00
Aria Keshmiri
9b05da7131 Merge pull request #3448 from XRPLF/pattern/cards-featured
Add CardsFeatured pattern component and styles
2026-01-20 10:12:57 -08:00
Calvin Jhunjhuwala
f7c80a5c04 fixing size on tablet for text 2026-01-19 15:49:22 -08:00
Calvin Jhunjhuwala
1e61c71c94 logo square grid ready for review 2026-01-17 17:52:46 -08:00
gabriel-ortiz
bf88924d3d Add HeaderHeroPrimaryMedia component and styles
- Introduced HeaderHeroPrimaryMedia component for a responsive hero section featuring a headline, subtitle, call-to-action buttons, and media elements (images, videos, or custom React components).
- Implemented associated SCSS styles to ensure proper layout and design constraints, including aspect ratios and object-fit properties.
- Added README documentation detailing usage, props, and best practices for the component.
- Included validation for required props with console warnings for missing fields.
2026-01-16 17:47:10 -08:00
akcodez
daa8b7d292 add markdoc 2026-01-15 12:08:09 -08:00
akcodez
3873ae0085 design QA and changes with Design team 2026-01-15 11:23:24 -08:00
akcodez
f630796da0 53 ---> 52 2026-01-15 10:34:41 -08:00
akcodez
eac1859507 changes with design review 2026-01-15 10:31:35 -08:00
akcodez
2d75a0a727 Add CardsFeatured pattern component and styles
- Introduced the CardsFeatured component to showcase a grid of card images with headings and descriptions.
- Implemented responsive design for mobile, tablet, and desktop views.
- Added SCSS styles for light and dark mode support.
- Created a dedicated page for the CardsFeatured pattern showcase, including design specifications and examples.
2026-01-15 09:44:08 -08:00
akcodez
f62c99b387 fix tablet 2026-01-14 14:07:59 -08:00
akcodez
7383bf8044 add back bundle 2026-01-14 14:05:49 -08:00
akcodez
e12b1bf8dc complete pattern and showcase 2026-01-14 14:04:58 -08:00
akcodez
0b52e5f747 Add FeatureTwoColumn pattern and button enhancements
- Introduced the FeatureTwoColumn pattern for showcasing features in a two-column layout, supporting multiple color themes and responsive design.
- Implemented button behavior based on the number of links, with configurations for 1 to 5 links.
- Added `forceColor` prop to Button component to maintain button color across light and dark themes, particularly useful for colored backgrounds.
- Updated styles and documentation for both the FeatureTwoColumn pattern and Button component to reflect new features and usage guidelines.
2026-01-14 14:04:17 -08:00
akcodez
161e4305e6 add bun lock as build container is using bun 2026-01-14 10:30:58 -08:00
akcodez
8e7d7ecba1 resolve build erros 2026-01-14 10:27:07 -08:00
Aria Keshmiri
32f6a1de2d Merge pull request #3436 from XRPLF/go/feat/pattern/smallTiles
[feat][site] - Add SmallTilesSection component and styles
2026-01-14 10:22:42 -08:00
akcodez
e3459b336e merge main branch in rebundle css 2026-01-14 10:21:36 -08:00
Aria Keshmiri
1a1e1b30a6 Merge pull request #3445 from XRPLF/brand/merge-master-in
Brand/merge master in
2026-01-14 10:19:02 -08:00
akcodez
5eb98cacac merge master in, resolve conflicts 2026-01-14 10:06:48 -08:00
gabriel-ortiz
9a7f9479d4 Merge branch 'xrpl-brand-update-2026' into go/feat/pattern/smallTiles 2026-01-13 16:12:21 -08:00
Aria Keshmiri
c21785855f Merge pull request #3443 from XRPLF/brand-update-header
Brand update header
2026-01-13 13:19:10 -08:00
akcodez
887e1f38f5 Enhance Navbar and Submenu components for improved accessibility and keyboard navigation
- Added keyboard navigation support to NavItems, allowing users to close submenus with the Escape key and toggle with Enter/Space.
- Implemented onClose callback in Submenu components to facilitate submenu closure.
- Updated Navbar to handle submenu closing for keyboard navigation.
- Adjusted styles for better layout and responsiveness in submenus.
2026-01-13 12:30:51 -08:00
Aria Keshmiri
79294acb05 Merge pull request #3434 from XRPLF/pattern/header-hero-split-media
Pattern/header hero split media
2026-01-13 12:13:30 -08:00
akcodez
5cb06eaf86 merge xrpl branch in, resolve comments 2026-01-13 12:11:34 -08:00
Calvin Jhunjhuwala
fe0057aa9f css clean up 2026-01-13 12:07:29 -08:00
Calvin Jhunjhuwala
1e3ca30ace fixing per comments 2026-01-13 12:07:29 -08:00
Calvin Jhunjhuwala
66356984b4 added light image variant for example page 2026-01-13 12:07:29 -08:00
Calvin Jhunjhuwala
1fcc294ffb fixing button spacing + image background 2026-01-13 12:07:29 -08:00
Calvin Jhunjhuwala
0d0fc38344 cleaning up css 2026-01-13 12:07:28 -08:00
Calvin Jhunjhuwala
cd1759332d fixing errors 2026-01-13 12:07:28 -08:00
Calvin Jhunjhuwala
62d23ce36b updated and working showcase for call out media 2026-01-13 12:07:28 -08:00
Calvin Jhunjhuwala
678e168029 adding a README 2026-01-13 12:07:28 -08:00
akcodez
31a9cac20b merge main in, resolve comments 2026-01-13 12:06:52 -08:00
akcodez
79f40fb2c6 fix card 2026-01-13 12:05:49 -08:00
akcodez
9738402921 Focus should not activate button hover - cardimage 2026-01-13 12:05:49 -08:00
akcodez
e064ce02d0 Card - image : hovering card should not activate button hover state 2026-01-13 12:05:49 -08:00
akcodez
862a5c42d8 fix disasbled dark mode link color 2026-01-13 12:05:49 -08:00
akcodez
d29a5083d1 Refactor button typography for responsiveness and consistency
- Updated Button component styles to use responsive typography mixins for better adaptability across devices.
- Removed redundant media queries and adjusted font sizes and line heights for both button types.
- Ensured margin resets to maintain consistent spacing in various contexts.
- Enhanced CSS for improved readability and maintainability.
2026-01-13 12:05:49 -08:00
akcodez
60fc8eb22e Update CardImage and TileLogo components for improved responsiveness and layout
- Adjusted column spans in CardImage showcase to support a 4-column layout on larger screens.
- Updated TileLogo showcase to reflect changes in aspect ratios and responsive behavior, ensuring proper display across different screen sizes.
- Enhanced SCSS styles for both components to maintain consistency in appearance and functionality in light and dark themes.
- Refined documentation to clarify usage and responsive design principles for both CardImage and TileLogo components.
2026-01-13 12:05:49 -08:00
akcodez
ec4ef6e9fc Update HeaderHeroSplitMedia styles for aspect ratio and title alignment
- Changed tablet aspect ratio from 2:1 to 16:9 for better compatibility with an 8-column grid.
- Adjusted title alignment in the title-only layout from center to top for improved visual hierarchy.
2026-01-13 12:02:11 -08:00
akcodez
42552e4d24 add translations 2026-01-13 11:56:47 -08:00
akcodez
e46e4006d5 Refactor submenu styles for improved layout and spacing
- Updated .bds-submenu__section to use justify-content: space-between for better distribution of space between header and items.
- Removed gap property and set margin-top to 0 for .bds-submenu__tier2 to enhance visual alignment in Use Cases section.
2026-01-13 10:25:35 -08:00
akcodez
5cf22174dc Add LanguageDropdown component to Navbar and enhance LanguagePill functionality
- Introduced LanguageDropdown for improved language selection in Navbar and MobileMenu.
- Updated LanguagePill to display the current language dynamically and manage dropdown state.
- Enhanced styles for language-related components to support open/close states and transitions.
- Added mobile-specific dropdown positioning and styles for better user experience.
2026-01-13 10:20:37 -08:00
akcodez
7fd39abb2b Integrate search functionality into Navbar and MobileMenu components, utilizing Redocly's search dialog. Update AlertBanner to prevent hydration mismatch with null initial state for displayDate. Adjust NavControls and NetworkSubmenu to handle theme detection more effectively. 2026-01-13 10:05:02 -08:00
Calvin
d7e042bdb6 Merge pull request #3437 from XRPLF/layout/callout-media-banner
Layout/callout media banner
2026-01-13 09:40:31 -08:00
akcodez
9006dc3812 Refactor Navbar component structure by modularizing subcomponents and removing legacy exports for improved maintainability and clarity. 2026-01-13 09:33:25 -08:00
gabriel-ortiz
f3bef3784f Add theme mode mixin and update CardIcon focus styles
- Introduced a new SCSS mixin for theme mode that applies styles based on light or dark themes, with validation for mode parameters.
- Updated CardIcon styles to maintain background color on focus for both light and green themes, enhancing accessibility and user experience.
- Removed unnecessary import from SmallTilesSection styles to streamline the codebase.
2026-01-12 21:02:29 -08:00
Calvin Jhunjhuwala
b8286bf6b4 css clean up 2026-01-12 19:30:21 -08:00
Calvin Jhunjhuwala
3feb69a1da fixing per comments 2026-01-12 14:28:57 -08:00
akcodez
e94be3ca20 PERFECT THE ANIMATION 2026-01-12 13:01:19 -08:00
akcodez
4776c45c33 Enhance Navbar with XRP Ledger text animation and update styles for dark mode and submenu transitions 2026-01-12 12:55:28 -08:00
akcodez
1278b1aca9 add proper icons 2026-01-12 11:25:24 -08:00
akcodez
da529fd71e add arrow moving logic 2026-01-12 10:05:17 -08:00
akcodez
e467e27448 add dark mode styles 2026-01-12 09:59:32 -08:00
Calvin Jhunjhuwala
de84fa25a8 added light image variant for example page 2026-01-09 15:50:48 -08:00
Calvin Jhunjhuwala
b4ddfa7955 fixing button spacing + image background 2026-01-09 15:29:22 -08:00
akcodez
ce75b4388c minor qa changes 2026-01-09 12:58:07 -08:00
Calvin Jhunjhuwala
46add22436 cleaning up css 2026-01-08 16:41:47 -08:00
Calvin Jhunjhuwala
93ca38ed76 fixing errors 2026-01-08 15:24:04 -08:00
Calvin Jhunjhuwala
e0430b9899 updated and working showcase for call out media 2026-01-08 14:08:51 -08:00
akcodez
5df5f38e83 fix animation 2026-01-08 13:18:17 -08:00
akcodez
2b15495835 udpate animations 2026-01-08 13:14:36 -08:00
gabriel-ortiz
ab366c79ef Add warning for empty cards in SmallTilesSection
- Implemented a console warning in the SmallTilesSection component to notify when no cards are provided, improving debugging and user feedback.
2026-01-08 11:29:01 -08:00
akcodez
1074670da7 fix nav heights 2026-01-08 11:27:42 -08:00
akcodez
1a2cb105f3 add all submenus 2026-01-08 11:23:41 -08:00
gabriel-ortiz
3badef78c1 Add SmallTilesSection component and styles
- Introduced the SmallTilesSection component for displaying multiple CardIcon components in a responsive grid layout.
- Implemented SCSS styles for the SmallTilesSection, including responsive grid behavior and spacing adjustments.
- Added documentation for the SmallTilesSection component, detailing usage, props, and examples.
- Updated main stylesheet to include SmallTilesSection styles.
2026-01-08 10:09:48 -08:00
Calvin Jhunjhuwala
a1f4c82e3a adding a README 2026-01-07 16:30:43 -08:00
Calvin Jhunjhuwala
478f5784ee updating callout media banner, styling for extra width 2026-01-07 16:28:21 -08:00
akcodez
471bf7f193 add basis for navbar 2026-01-07 13:48:30 -08:00
akcodez
f346a80ce0 Refactor HeaderHeroSplitMedia styles for tablet and accent surfaces
- Updated spacing variables for tablet view to enhance layout consistency.
- Introduced accent-specific spacing for title and description groups on tablet and desktop.
- Adjusted margin and gap values for improved responsiveness and visual hierarchy.
2026-01-06 13:28:20 -08:00
akcodez
e849cc95b9 Update HeaderHeroSplitMedia styles for improved color consistency and dark mode support
- Refactored color variables to use design tokens for better maintainability.
- Ensured consistent text colors for titles and descriptions in both light and dark modes.
- Adjusted color values for better contrast and readability across themes.
2026-01-06 13:20:09 -08:00
akcodez
0bff1aab4c Add HeaderHeroSplitMedia styles and adjust typography margins
- Introduced new styles for the HeaderHeroSplitMedia component, including layout, typography, and responsive design adjustments.
- Updated margin-bottom for paragraph and label-r elements to enhance spacing consistency.
2026-01-06 13:15:12 -08:00
Aria Keshmiri
e6aa704841 Merge pull request #3431 from XRPLF/design-qa-review
Design qa review
2026-01-06 10:43:41 -08:00
akcodez
9415ae085a fix card 2026-01-05 13:10:51 -08:00
akcodez
4cb232a068 Focus should not activate button hover - cardimage 2026-01-05 13:01:02 -08:00
akcodez
35958ebede Card - image : hovering card should not activate button hover state 2026-01-05 12:59:59 -08:00
akcodez
688ac5dc91 fix disasbled dark mode link color 2026-01-05 12:54:05 -08:00
Aria Keshmiri
e298a45902 Merge pull request #3430 from XRPLF/fix-typography-010526
fixing typography for label-r
2026-01-05 12:53:31 -08:00
akcodez
176e187c6a Refactor button typography for responsiveness and consistency
- Updated Button component styles to use responsive typography mixins for better adaptability across devices.
- Removed redundant media queries and adjusted font sizes and line heights for both button types.
- Ensured margin resets to maintain consistent spacing in various contexts.
- Enhanced CSS for improved readability and maintainability.
2026-01-05 12:44:14 -08:00
Calvin Jhunjhuwala
15046f431e fixing typography for label-r 2026-01-05 12:44:11 -08:00
akcodez
ecd4a1bb66 Merge remote-tracking branch 'origin/xrpl-brand-update-2026' into design-qa-review 2026-01-05 12:22:06 -08:00
Calvin
3fbed79209 Merge pull request #3421 from XRPLF/fix-bds-session-121125
Fix typography
2026-01-05 12:07:55 -08:00
Aria Keshmiri
fc472a4f77 Merge pull request #3417 from XRPLF/link-rename
rename link
2026-01-05 11:55:15 -08:00
Aria Keshmiri
bebc019daa Merge pull request #3420 from XRPLF/component/button-href-fix
Add link button functionality and styles
2026-01-05 11:55:04 -08:00
Calvin Jhunjhuwala
b3f235ded6 adding typography showcase page 2026-01-05 11:33:11 -08:00
akcodez
7b223aafc2 Update CardImage and TileLogo components for improved responsiveness and layout
- Adjusted column spans in CardImage showcase to support a 4-column layout on larger screens.
- Updated TileLogo showcase to reflect changes in aspect ratios and responsive behavior, ensuring proper display across different screen sizes.
- Enhanced SCSS styles for both components to maintain consistency in appearance and functionality in light and dark themes.
- Refined documentation to clarify usage and responsive design principles for both CardImage and TileLogo components.
2026-01-05 10:12:11 -08:00
Calvin Jhunjhuwala
ffe0eff61a lg + xl separate for the display-lg font class 2025-12-11 15:29:01 -08:00
Calvin Jhunjhuwala
be0e324d0b working font styles and updated card grid 2025-12-11 15:01:08 -08:00
akcodez
fadfde1775 Add link button functionality and styles
- Introduced link button support in the Button component, allowing buttons to render as anchor elements when an `href` prop is provided.
- Updated Button showcase to demonstrate link buttons for internal and external navigation.
- Enhanced Button SCSS styles to ensure proper appearance and behavior for link buttons in both light and dark themes.
- Added documentation for link button usage in the Button showcase.
2025-12-11 11:23:23 -08:00
akcodez
32899e9c41 rename link 2025-12-10 13:53:21 -08:00
Aria Keshmiri
15f48991c3 Merge pull request #3415 from XRPLF/component/card-image
Add CardImage component with showcase and documentation
2025-12-10 12:45:37 -08:00
akcodez
642c0dd2ce add bottom padding 2025-12-10 12:45:04 -08:00
akcodez
a08b24ed5d Enhance CardImage showcase with image scaling demo and responsive layout adjustments
- Added a new image scaling demonstration to the CardImage showcase, illustrating a zoom effect on hover.
- Updated layout of CardImage components to improve responsiveness, adjusting column spans for various screen sizes.
- Introduced a new image from Figma for the scaling demo and included detailed descriptions of the scaling behavior.
- Refined SCSS styles to support the new layout and ensure consistent spacing across different screen sizes.
2025-12-10 10:35:14 -08:00
Aria Keshmiri
74e8be5a13 Merge pull request #3413 from XRPLF/component/card-icon
Add CardIcon component with showcase and documentation
2025-12-10 09:37:01 -08:00
Calvin
7895d6dee9 Merge pull request #3410 from XRPLF/component/card-stat
[feat][site] Component/Card-Stat
2025-12-09 12:33:19 -08:00
akcodez
8e6d8f7c30 Add CardImage component with showcase and documentation
- Introduced the CardImage component, a responsive card designed to display an image, title, subtitle, and call-to-action button.
- Implemented three responsive size variants (LG, MD, SM) that adapt to viewport width.
- Added interactive states including default, hover, focus, pressed, and disabled.
- Created a comprehensive showcase page demonstrating all variants and states of the CardImage component.
- Included detailed documentation covering usage examples, props API, design tokens, and accessibility features.
- Added SCSS styles for the CardImage component, ensuring compatibility with both light and dark themes.
2025-12-09 12:29:03 -08:00
Calvin Jhunjhuwala
36785bc0f1 fixing css conflict 2025-12-09 12:28:14 -08:00
Calvin Jhunjhuwala
977c37ef83 minor copy change, pushiong fixed color 2025-12-09 12:00:11 -08:00
Calvin Jhunjhuwala
52d895b1d0 edits for dark mode card 2025-12-09 11:56:34 -08:00
akcodez
230ddcbe21 Add CardIcon component with showcase and documentation
- Introduced the CardIcon component, a clickable card featuring an icon and label text, supporting two color variants (Neutral and Green) and five interaction states (Default, Hover, Focused, Pressed, Disabled).
- Implemented responsive sizing that adapts at breakpoints (SM, MD, LG).
- Created a comprehensive showcase page demonstrating all variants, states, and usage examples.
- Added detailed documentation covering usage guidelines, best practices, and API reference.
- Included SCSS styles for the CardIcon component, ensuring compatibility with both light and dark themes.
2025-12-09 10:37:40 -08:00
Aria Keshmiri
1ee5828747 Merge pull request #3406 from XRPLF/component/card-offgrid
Add CardOffgrid component with showcase and documentation
2025-12-09 10:13:16 -08:00
Aria Keshmiri
314980a667 Merge pull request #3409 from XRPLF/component/tile-logo
Add TileLogo component with showcase and documentation
2025-12-09 10:13:06 -08:00
akcodez
2783d90cf6 Refactor CardOffgrid typography styles to utilize predefined classes
- Updated CardOffgrid component to use .subhead-lg-l and .body-l classes for title and description typography, respectively.
- Removed custom font size and line height definitions from SCSS and CSS files for improved consistency and maintainability.
- Adjusted related styles to ensure compatibility with the new typography approach.
2025-12-09 06:15:22 -08:00
akcodez
5fbdbb8d42 Refactor TileLogo showcase layout to use PageGrid components
- Replaced div-based layout with PageGridRow and PageGridCol components for better responsiveness and alignment.
- Updated all instances of logo displays within the TileLogo showcase to utilize the new grid structure.
- Ensured consistent spacing and alignment across different logo variants and states.
2025-12-09 06:05:54 -08:00
Calvin Jhunjhuwala
b7ba976fb2 consolidating classes, still need superscript specs 2025-12-08 21:06:56 -08:00
Calvin Jhunjhuwala
a6eb9e63e5 complete showcase pagfe 2025-12-08 15:30:42 -08:00
Calvin Jhunjhuwala
7d694c76a5 working card stat, finalizing sup, cleaning up code cleanliness 2025-12-08 13:58:57 -08:00
akcodez
cbc56937e6 Refactor TileLogo component styles and class naming to align with BDS conventions
- Updated SCSS styles to replace 'tile-logo' namespace with 'bds-tile-logo' for consistency with the Brand Design System.
- Adjusted class names in the TileLogo component to reflect the new naming convention.
- Ensured all styles and variants (square, rectangle, neutral, green) are updated accordingly for both light and dark themes.
2025-12-08 10:57:02 -08:00
akcodez
1a9fa9b970 Add TileLogo component with showcase and documentation
- Introduced the TileLogo component, designed for displaying brand logos with interactive states.
- Implemented two shape variants (Square and Rectangle) and two color variants (Neutral and Green), with responsive sizing.
- Created a comprehensive showcase page demonstrating all variants, states, and usage examples.
- Added detailed documentation covering usage guidelines, best practices, and API reference.
- Included SCSS styles for the TileLogo component, ensuring compatibility with both light and dark themes.
2025-12-08 10:52:37 -08:00
akcodez
cd82ea5484 rm link 2025-12-08 10:13:05 -08:00
akcodez
57898ab010 Add CardOffgrid component with showcase and documentation
- Introduced the CardOffgrid component, designed for displaying feature highlights with customizable icons, titles, and descriptions.
- Implemented two color variants: neutral and green, with interactive states and a unique hover animation.
- Created a comprehensive showcase page demonstrating all variants and states of the CardOffgrid component.
- Added detailed documentation covering usage guidelines, best practices, and API reference.
- Included SCSS styles for the CardOffgrid component, ensuring compatibility with both light and dark themes.
2025-12-05 11:41:18 -08:00
Aria Keshmiri
2dbb111943 Merge pull request #3405 from XRPLF/component/divider
Add Divider component and documentation
2025-12-04 15:34:04 -08:00
akcodez
cb6323d153 Update Divider component to replace 'black' color variant with 'base' for improved theme adaptability
- Changed all instances of 'black' to 'base' in the Divider component and its documentation to reflect the new high-contrast color that adapts to light and dark themes.
- Updated showcase page and styles to ensure consistency with the new color naming convention.
2025-12-04 15:33:32 -08:00
akcodez
08941588aa fix colors 2025-12-04 13:51:04 -08:00
akcodez
e183369ef6 add height 2025-12-04 13:48:23 -08:00
akcodez
702e180de6 Add Divider component and documentation
- Introduced the Divider component following the XRPL Brand Design System, supporting horizontal and vertical orientations, three stroke weights (thin, regular, strong), and three color variants (gray, black, green).
- Created a comprehensive showcase page for the Divider component, demonstrating its usage and variations.
- Added detailed documentation for the Divider component, including props API, usage examples, and best practices.
- Included styles for the Divider component in SCSS format, ensuring compatibility with light and dark themes.
2025-12-04 12:20:18 -08:00
Calvin
a265f82980 Merge pull request #3404 from XRPLF/grid-optimization
[fix] Grid optimization
2025-12-03 16:17:54 -08:00
Calvin Jhunjhuwala
021899906d removing unnecessary npm package 2025-12-03 16:14:09 -08:00
Calvin Jhunjhuwala
f022c48f6c changing showcase file 2025-12-03 16:06:59 -08:00
Calvin Jhunjhuwala
3e07b8400d removing extra css 2025-12-03 16:02:08 -08:00
Calvin Jhunjhuwala
5433894f20 renaming class name to bds 2025-12-03 14:51:59 -08:00
Calvin Jhunjhuwala
a6d84de417 working grid for fill and auto 2025-12-03 13:34:05 -08:00
Calvin Jhunjhuwala
6f76d4ece5 clean up of grid, working on all screen sizes, logic built out 2025-12-03 13:09:39 -08:00
Aria Keshmiri
17778ad84b Merge pull request #3399 from XRPLF/component/button
Component/button
2025-12-03 10:58:04 -08:00
Aria Keshmiri
518585227d Merge pull request #3401 from XRPLF/component/link
Add BDS link styles and update existing link styles
2025-12-03 10:57:25 -08:00
akcodez
ad0631f701 add arialbel 2025-12-03 10:56:43 -08:00
akcodez
01c19628a9 fix link spacing 2025-12-02 15:27:52 -08:00
akcodez
44614dba9d Refactor Button Styles for Responsive Design
Updated button styles to enhance responsiveness across devices by replacing fixed breakpoints with a mixin for the xl breakpoint. Adjusted typography and padding for smaller screens to ensure consistent appearance and usability. Improved comments for clarity on the import order and design tokens.
2025-12-02 12:40:27 -08:00
akcodez
621db81c7d add proper breakpoint sizing 2025-12-02 12:23:35 -08:00
akcodez
c01749eba2 rm deprecated linkCOlor 2025-12-02 11:52:23 -08:00
akcodez
2ff14e4224 Add BDS link styles and update existing link styles
- Introduced new styles for BDS link icons, including hover and focus states.
- Updated existing link styles to exclude BDS links from certain color and hover effects.
- Ensured consistent styling across light and dark themes for BDS links.
- Refactored landing page link styles to accommodate new BDS link classes.
2025-12-02 10:21:52 -08:00
akcodez
7685c2eb1e Refactor Tertiary Button Styles for Dark Mode
Updated the styles for the tertiary button in dark mode, including hover, focus, active, and disabled states. Adjusted padding and added text decoration for better visual feedback. Enhanced responsiveness for smaller screens to ensure consistent behavior across devices.
2025-12-01 14:27:02 -08:00
akcodez
2de2bac211 Enhance dark mode styles for primary and secondary buttons, adding detailed states for hover, focus, active, and disabled conditions. Update CSS to reflect new design specifications for secondary button in dark mode. 2025-12-01 14:21:14 -08:00
akcodez
bdc69f047a add primary dark mode 2025-12-01 14:17:25 -08:00
akcodez
f20177b5f9 Add Tertiary Button Showcase Component
Introduced a new ButtonShowcaseTertiary component to demonstrate the BDS Tertiary Button, including its various states and usage examples. Removed the previous ButtonShowcase component to streamline the showcase and focus on the Tertiary variant. Updated Button component to support the new variant and adjusted related styles in the CSS for both green and black themes.
2025-12-01 14:07:29 -08:00
akcodez
73b2127f87 add proper focus and active / hover states 2025-12-01 13:45:21 -08:00
akcodez
32b309c878 merge main brand branch in 2025-12-01 12:03:09 -08:00
akcodez
9cf1b07954 add full primary button 2025-12-01 12:01:50 -08:00
Calvin
5b73ccb8be Merge pull request #3393 from XRPLF/bds-font-update
[fix][fonts] Clean up of fonts, folder re-structuring
2025-12-01 11:01:58 -08:00
Calvin Jhunjhuwala
c4188c47d6 updating css for medium 2025-11-26 16:06:00 -08:00
Calvin Jhunjhuwala
2429574182 removing px reversion for medium 2025-11-26 16:03:51 -08:00
Calvin Jhunjhuwala
42ec50df27 removing fake button folder 2025-11-26 16:00:14 -08:00
Calvin Jhunjhuwala
37e96a9dae more documentation around page grid 2025-11-25 21:36:38 -08:00
Calvin Jhunjhuwala
f3ae760c40 move page grid css to page grid folder, removing more text class styling 2025-11-25 21:30:25 -08:00
Calvin Jhunjhuwala
97c302822a adding folder structure, cleaning up font, add readme for page grid 2025-11-25 17:29:58 -08:00
Calvin Jhunjhuwala
e92929e148 removing old background images, updating font classes 2025-11-13 12:08:33 -08:00
Calvin Jhunjhuwala
9d3d11800a adding page grid component + stylersheet 2025-11-03 10:42:35 -08:00
Calvin Jhunjhuwala
a956d5ae78 removing empty card footer 2025-10-30 10:42:30 -07:00
Calvin Jhunjhuwala
52e070dcf6 removing background from css as well 2025-10-30 10:38:53 -07:00
Calvin Jhunjhuwala
605eb70aed removed all old fonts, remove all old backgrounds 2025-10-30 10:33:42 -07:00
akcodez
0c2a1bc249 Refactor color migration strategy to a clean implementation, removing backward compatibility aliases and consolidating color scales. Update SCSS files to reflect new design tokens and ensure all references are migrated. Adjust event card layout in community events page for improved responsiveness. Modify CSS styles for better alignment with updated color palette and remove unnecessary padding in card components. 2025-10-21 14:04:55 -07:00
akcodez
51e763b967 Enhance PostCSS configuration with expanded safelist for Bootstrap utility classes, update layout in about and resources pages, and refine color palette in CSS files for improved design consistency. Adjusted card styles and link behaviors to align with new design tokens. 2025-10-21 13:42:07 -07:00
akcodez
86998c82d6 Implement CSS optimization pipeline with PurgeCSS, Autoprefixer, and cssnano; reduce bundle size by 42% (uncompressed) and 39% (gzipped). Add analysis tool for CSS metrics and update build scripts in package.json. Create comprehensive documentation for CSS optimization process. 2025-10-21 10:06:53 -07:00
akcodez
c2287a7fe6 run css compiler 2025-10-21 09:23:47 -07:00
akcodez
f09ab44280 upgrade bootstrap, add new fonts 2025-10-21 09:22:02 -07:00
Calvin Jhunjhuwala
08807db2e9 ran css 2025-10-21 09:17:17 -07:00
Calvin Jhunjhuwala
201479ced6 new fonts added working across website 2025-10-21 09:09:56 -07:00
Calvin Jhunjhuwala
ce49c8b6ba updating bootstrap to v5 2025-10-17 16:28:07 -07:00
806 changed files with 85088 additions and 15606 deletions

3
.gitignore vendored
View File

@@ -8,7 +8,8 @@ yarn-error.log
*.iml
.venv/
_code-samples/*/js/package-lock.json
_code-samples/*/js/*[Ss]etup.json
*.css.map
# PHP
composer.lock
.cursor/

View File

@@ -24,7 +24,7 @@ Si piensas que has sido estafado, asegúrate de recoleccionar toda la informaci
- [Uphold](https://support.uphold.com/hc/en-us/requests/new)
- [Bitrue](https://www.bitrue.com/exchange-web/footer/contactus.html)
4. Si el estafador intercambió XRP por otro token en el XRP Ledger, contacta con el emisor del token. El emisor podría ser capaz [congelar la línea de confianza del estafador]((../docs/tutorials/tokens/fungible-tokens/freeze-a-trust-line.md) de prevenir que el estafador pueda enviar esos tokens a otras personas.
4. Si el estafador intercambió XRP por otro token en el XRP Ledger, contacta con el emisor del token. El emisor podría ser capaz [congelar la línea de confianza del estafador]((../docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md) de prevenir que el estafador pueda enviar esos tokens a otras personas.
Para más detalles sobre reportar estafadores, consultar [Ayuda de Xrplorer Forensics](https://xrplorer.com/forensics/help).

View File

@@ -74,8 +74,8 @@ Si una dirección de reserva se ve comprometida, las consecuencias son similares
- [Cuentas](index.md)
- [Claves criptográficas](cryptographic-keys.md)
- **Tutoriales:**
- [Asignar par de claves regulares](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
- [Cambiar o eliminar par de claves regulares](/docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- [Asignar par de claves regulares](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md)
- [Cambiar o eliminar par de claves regulares](../../tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md)
- **Referencias:**
- [metodo account_info][]
- [Transacción SetRegularKey][]

View File

@@ -88,7 +88,7 @@ El [metodo wallet_propose][] es una forma de generar el par de claves maestras.
**Atención:** Si un actor malicioso conoce tu clave privada maestra (o semilla), tendrá control completo sobre tu cuenta, a no ser que tu par de claves maestras se inhabilite. Puedes tomar todo tu dinero de la cuenta posee y causar un daño irreparable. ¡Trata tus valores secretos con cuidado!
Dado que cambiar el par de claves maestras es imposible, debes cuidarlo en proporción al valor de lo que posea. Una buena práctica es [guardar tu par de claves maestras offline](/docs/tutorials/best-practices/key-management/offline-account-setup.md) y configurar un par de claves normales para firmar transacciones en tu cuenta. Al mantener el par de claves maestras activadas pero offline, puedes estar razonablemente seguro de que nadie puede acceder a él a través de Internet, pero aun así deberías encontrarlo en caso de una emergencia.
Dado que cambiar el par de claves maestras es imposible, debes cuidarlo en proporción al valor de lo que posea. Una buena práctica es [guardar tu par de claves maestras offline](../../tutorials/how-tos/manage-account-settings/offline-account-setup.md) y configurar un par de claves normales para firmar transacciones en tu cuenta. Al mantener el par de claves maestras activadas pero offline, puedes estar razonablemente seguro de que nadie puede acceder a él a través de Internet, pero aun así deberías encontrarlo en caso de una emergencia.
Mantener tu par de claves maestras offline significa no colocar tu información secreta (passphrase, semilla, or clave privada) en cualquier sitio en que los actores maliciosos puedan tener acceso a él. En general, esto quiere decir que no está al alcance de un programa inofrmático que interactúe con Internet. Por ejemplo, puedes guardarlo en un equipo que no se conecta nunca a Internet, en un trozo de papel guardado en una caja fuerte, o tenerla completamente memorizada. (Memorizarla tiene algunos puntos inconvenientes, incluido ser imposible pasar la clave una vez muerto.)
@@ -119,7 +119,7 @@ Una buena práctica de seguridad es guardar tu clave privada maestra en algun si
El par de claves normales tiene el mismo formato que el par de claves maestras. Las generas de la misma forma (por ejemplo, usando el [método wallet_propose][]). La única diferencia es que el par de claves normales es que el par no está intrínsicamente vinculado a la cuenta para la que firma transacciones. Es posible (pero no es buena idea) utilizar el par de claves maestras de una cuenta como lel par de claves normales para otra cuenta.
La [transacción SetRegularKey][] asigna o cambia el par de claves normales de una cuenta. Para un tutorial de asignación o cambio de un par de claves normales, ver [Asignar par de claves normales](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md).
La [transacción SetRegularKey][] asigna o cambia el par de claves normales de una cuenta. Para un tutorial de asignación o cambio de un par de claves normales, ver [Asignar par de claves normales](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md).
## Algorítmos de firma
@@ -248,8 +248,8 @@ Los pasos para derivar par de claves de cuenta XRP Ledger secp256k1 desde un val
- **Conceptos:**
- [Direcciones de emisión y operacionales](account-types.md)
- **Tutoriales:**
- [Asignación de par de claves normales](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
- [Cambiar o eliminar par de claves normales](/docs/tutorials/best-practices/key-management/change-or-remove-a-regular-key-pair.md)
- [Asignación de par de claves normales](../../tutorials/how-tos/manage-account-settings/assign-a-regular-key-pair.md)
- [Cambiar o eliminar par de claves normales](../../tutorials/how-tos/manage-account-settings/change-or-remove-a-regular-key-pair.md)
- **Referencias:**
- [Transacción SetRegularKey][]
- [Objeto de ledger AccountRoot](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md)

View File

@@ -63,7 +63,7 @@ La forma típica de obtener una cuenta en el XRP Ledger es la siguiente:
- [Transacción Payment][]
- [Objeto AccountRoot](../../references/protocol/ledger-data/ledger-entry-types/accountroot.md)
- **Tutoriales:**
- [Administrar configuración de la cuenta (Categoría)](/docs/tutorials/best-practices/key-management/assign-a-regular-key-pair.md)
- [Monitorizar pagos entrantes con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [Administrar configuración de la cuenta (Categoría)](../../tutorials/how-tos/manage-account-settings/index.md)
- [Monitorizar pagos entrantes con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}

View File

@@ -60,7 +60,7 @@ Podría darse el caso donde crees una lista de multi firma como "plan de respald
Para enviar transacciones multi-signed de forma satisfactoria, debes de hacer todo lo siguiente:
* La dirección que envía la transacción (especificada en el campo `Account`) debe tener un [objeto `SignerList` en el ledger ](../../references/protocol/ledger-data/ledger-entry-types/signerlist.md). Para instrucciones de cómo hacer esto, ver [Set Up Multi-Signing](/docs/tutorials/best-practices/key-management/set-up-multi-signing.md).
* La dirección que envía la transacción (especificada en el campo `Account`) debe tener un [objeto `SignerList` en el ledger ](../../references/protocol/ledger-data/ledger-entry-types/signerlist.md). Para instrucciones de cómo hacer esto, ver [Set Up Multi-Signing](../../tutorials/how-tos/manage-account-settings/set-up-multi-signing.md).
* La transacción debe incluir el campo `SigningPubKey` como un valor vacío.
* La transacción debe incluir el [campo `Signers`](../../references/protocol/transactions/common-fields.md#signers-field) conteniendo un array de firmas.
* Las firmas presentadas en el array `Signers` debe coincidir con los firmantes definidos en la `SignerList`.
@@ -72,8 +72,8 @@ Para enviar transacciones multi-signed de forma satisfactoria, debes de hacer to
## Ver también
- **Tutoriales:**
- [Configurar Multi-Signing](/docs/tutorials/best-practices/key-management/set-up-multi-signing.md)
- [Envíar una transacción Multi-Signed](/docs/tutorials/best-practices/key-management/send-a-multi-signed-transaction.md)
- [Configurar Multi-Signing](../../tutorials/how-tos/manage-account-settings/set-up-multi-signing.md)
- [Envíar una transacción Multi-Signed](../../tutorials/how-tos/manage-account-settings/send-a-multi-signed-transaction.md)
- **Conceptos:**
- [Claves criptográficas](cryptographic-keys.md)
- [Coste de transacción especial para transacciones Multi-signed](../transactions/transaction-cost.md#special-transaction-costs)

View File

@@ -54,7 +54,7 @@ Las aplicaciones pueden buscar los valores de las reservas base e incremental ac
Para determinar las reservas de propietario de una cuenta, hay que multiplicar la reserva incremental por el número de objetos que la cuenta posee. Para mirar el número de objetos que una cuenta posee, llama al [método account_info][] y toma `account_data.OwnerCount`.
Para calcular el requisito total de direcciones, multiplica `OwnerCount` por `reserve_inc_xrp`, y luego suma `reserve_base_xrp`. [Aquí tienes una demostración](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#codeblock-17) del cálculo en Python.
Para calcular el requisito total de direcciones, multiplica `OwnerCount` por `reserve_inc_xrp`, y luego suma `reserve_base_xrp`. [Aquí tienes una demostración](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#codeblock-17) del cálculo en Python.
## Quedarse por debajo del requisito de reserva
@@ -76,6 +76,6 @@ El XRP Ledger tiene un mecanismo para ajustar los requisitos de reserva. Estos a
- [Objeto AccountRoot][]
- [Votación de Fee](../consensus-protocol/fee-voting.md)
- [Pseudo-transacción SetFee][]
- [Tutorial: Calcular y mostrar los requisitos de reserva (Python)](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
- [Tutorial: Calcular y mostrar los requisitos de reserva (Python)](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
{% raw-partial file="/docs/_snippets/common-links.md" /%}

View File

@@ -63,7 +63,7 @@ Cualquier cuenta puede crear y utilizar Tickets en cualquier tipo de transaccion
- **Conceptos:**
- [Multi-Signing](multi-signing.md)
- **Tutoriales:**
- [Usar Tickets](/docs/tutorials/best-practices/transaction-sending/use-tickets.md)
- [Usar Tickets](../../tutorials/how-tos/manage-account-settings/use-tickets.md)
- **Referencias:**
- [Transacción TicketCreate][]
- [Campos comunes de una transacción](../../references/protocol/transactions/common-fields.md)

View File

@@ -27,7 +27,7 @@ Necesitas confiar en el servidor que utilizas. Si te conectas a un servidor mali
* Podría selectivamente mostrar u ocultar los caminos (o paths) de pago y las foertas de intercambio de divisas para garantizar su propio beneficio mientras no te ofrece la mejor oferta.
* Si le enviaste la clave secreta de tu dirección, esto podría generar transacciones arbitrarias en tu nombre e incluso transferir o destruir todo el dinero que la dirección posee.
Adicionalmente, ejecutar tu propio servidor te da [acceso de administrador](/docs/tutorials/get-started/get-started-http-websocket-apis.md#admin-access), lo que te permite ejecutar comandos exclusivos de administrador y de carga intensa. Si utilizas un servidor compartido, debes preocuparte por los otros usuarios del mismo servidor compitiendo contra ti por el poder de computación del servidor. Muchos de los comandos en el API WebSocket puede poner mucha presión sobre el servidor, por lo que el servidor tiene la opción de reducir sus respuestas cuando lo necesite. Si compartes un servidor con otros, puede que no siempre consigas los mejores resultados posibles.
Adicionalmente, ejecutar tu propio servidor te da [acceso de administrador](../../tutorials/http-websocket-apis/build-apps/get-started.md#admin-access), lo que te permite ejecutar comandos exclusivos de administrador y de carga intensa. Si utilizas un servidor compartido, debes preocuparte por los otros usuarios del mismo servidor compitiendo contra ti por el poder de computación del servidor. Muchos de los comandos en el API WebSocket puede poner mucha presión sobre el servidor, por lo que el servidor tiene la opción de reducir sus respuestas cuando lo necesite. Si compartes un servidor con otros, puede que no siempre consigas los mejores resultados posibles.
Finalmente, si ejecutas un servidor de validación, puedes utilizar un servidor común como proxy a la red pública mientras mantienes tu servidor de vaalidación en una red privada la cual es solo accesible desde el mundo exterior desde tu servidor común. Esto hace más difícil comprometer la integridad de tu servidor de validación.

View File

@@ -12,7 +12,7 @@ El software del servidor `rippled` puede ejecutarse en varios modos dependiendo
- [**Modo P2P**](#modo-p2p) - Este es el modo principal del servidor: sigue la red peer-to-peer, procesa transacciones, y mantiene cierta cantidad de [histórico del ledger](ledger-history.md). Este modo se puede configurar para alguno o todos los siguientes roles:
- [**Validador**](#validadores) - Ayuda a asegurar la red participando en el consenso.
- [**Servidor API**](#servidores-api) - Proporciona [acceso API](/docs/tutorials/get-started/get-started-http-websocket-apis.md) para leer datos del ledger compartido, enviar transacciones, y mirar la actividad en el ledger. Opcionalmente, puede ser un [**servidor full history**](#servidores-full-history), el cual guarda un registro completo de transacciones y el histórico del ledger.
- [**Servidor API**](#servidores-api) - Proporciona [acceso API](../../tutorials/http-websocket-apis/build-apps/get-started.md) para leer datos del ledger compartido, enviar transacciones, y mirar la actividad en el ledger. Opcionalmente, puede ser un [**servidor full history**](#servidores-full-history), el cual guarda un registro completo de transacciones y el histórico del ledger.
- [**Servidor hub**](#hubs-públicos) - Transmite mensajes entre muchos otros miembros de la red peer-to-peer.
- [**Modo solitario**](#modo-solitario) - Un modo offline para pruebas. No se conecta a la red peer-to-peer ni usa consenso.

View File

@@ -49,18 +49,18 @@ Para más información sobre Cheques en el XRP Ledger, ver:
- [CheckCreate][]
- [CheckCash][]
- [CheckCancel][]
- **Tutoriales de cheques:**
- [Enviar un cheque](/docs/tutorials/payments/send-a-check.md)
- [Buscar cheques](/docs/tutorials/ /how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
- [Canjear un cheque por la cantidad exacta](/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md)
- [Canjear un cheque por una cantidad flexible](/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md)
- [Cancelar un cheque](/docs/tutorials/payments/cancel-a-check.md)
- [Tutoriales de cheques](../../tutorials/how-tos/use-specialized-payment-types/use-checks/index.md)
- [Enviar un cheque](../../tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md)
- [Buscar cheques](../../tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
- [Canjear un cheque por la cantidad exacta](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md)
- [Canjear un cheque por una cantidad flexible](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md)
- [Cancelar un cheque](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md)
- [Enmienda Cheques][]
Para más información sobre funciones relacionadas, ver:
* [Autorización de deposito](../accounts/depositauth.md)
* [Escrow](escrow.md)
* [Tutorial de canales de pago](../../tutorials/payments/use-payment-channels.md)
* [Tutorial de canales de pago](../../tutorials/how-tos/use-specialized-payment-types/use-payment-channels/index.md)
{% raw-partial file="/docs/_snippets/common-links.md" /%}

View File

@@ -39,8 +39,8 @@ La base de cualquier sistema financiero es la transferencia de valor. El método
## Ver también
- **Tutoriales:**
- [Enviar XRP (Tutorial interactivo)](/docs/tutorials/payments/send-xrp.md)
- [Monitorizar pagos entrantes con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [Enviar XRP (Tutorial interactivo)](../../tutorials/how-tos/send-xrp.md)
- [Monitorizar pagos entrantes con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
- **Referencias:**
- [Transacción Payment][]
- [Resultados de Transaction](../../references/protocol/transactions/transaction-results/index.md)

View File

@@ -82,7 +82,7 @@ reference_fee * (signer_count + 33 + (fulfillment_bytes / 16))
Para más información sobre Escrow en el XRP Ledger, consulta lo siguiente:
<!-- TODO: add links to individual Escrow tutorials with translated names -->
- [Tutoriales Escrow](../../tutorials/how-tos/use-specialized-payment-types/use-escrows/index.md)
- [Referencia de transacciones](../../references/protocol/transactions/index.md)
- [Transacción EscrowCreate][]
- [Transacción EscrowFinish][]

View File

@@ -126,9 +126,10 @@ Utilizar [el campo `delivered_amount`](#the-delivered_amount-field) al procesar
- [Remitente de la transacción](/resources/dev-tools/tx-sender)
- **Conceptos:**
- [Transacciones](../transactions/index.md)
- [Buscar resultados de transacciones](../transactions/finality-of-results/look-up-transaction-results.md)
- **Tutoriales:**
- [Monitorear pagos recibidos con WebSocket](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [Buscar resultados de transacciones](../transactions/finality-of-results/look-up-transaction-results.md)
- [Monitorear pagos recibidos con WebSocket](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
- [Usar tipos de pagos especializados](../../tutorials/how-tos/use-specialized-payment-types/index.md)
- [Listar XRP en un Exchange](../../use-cases/defi/list-xrp-as-an-exchange.md)
- **Referencias:**
- [Transacción de Pago][]

View File

@@ -39,7 +39,8 @@ El siguiente diagrama resume el ciclo de vida de un canal de pago:
- **Conceptos relacionados:**
- [Escrow](escrow.md), una función similar para pagos XRP condicionales de mayor valor y menor velocidad.
- **Tutoriales y casos de uso:**
- [Utilizar canales de pago](../../tutorials/payments/use-payment-channels.md), un tutorial que guía a través del proceso de utilizar un canal de pago.
- [Utilizar canales de pago](../../tutorials/how-tos/use-specialized-payment-types/use-payment-channels/index.md), un tutorial que guía a través del proceso de utilizar un canal de pago.
- [Abrir un canal de pago para activar una red de intercambio](../../tutorials/how-tos/use-specialized-payment-types/use-payment-channels/open-a-payment-channel-to-enable-an-inter-exchange-network.md)
- **Referencias:**
- [Método channel_authorize][]
- [Método channel_verify][]

View File

@@ -19,6 +19,6 @@ Generalmente, al enviar stablecoins, utilizas una [transacción Payment][]. Algu
- Omitir el campo `Paths`. Este campo es innecesario cuando se envía directamente desde el emisor, o desde una cartera caliente siempre y cuando los tokens que se envían y los que se reciben tengan el mismo código de divisa y emisor, es decir, sean la misma stablecoin. El campo `Paths` está destinado a [Pagos entre divisas](cross-currency-payments.md) y a pagos multi-salto (rippling) más largos. Si realizas una búsqueda de rutas (paths) de manera ingenua y adjuntas las rutas a tu transacción, tu pago puede tomar un camino indirecto más costoso en lugar de fallar si el camino directo no está disponible; los usuarios malintencionados incluso pueden configurar esto.
- Si recibes un código de resultado `tecPATH_DRY`, esto suele indicar que el cliente no tiene configurada la línea de confianza (trustline) necesaria, o que los ajustes de rippling de tu emisor no están configurados correctamente.
Para un tutorial detallado sobre cómo emitir un token en el XRP Ledger, ya sea una stablecoin u otro tipo, visita [Emitir un token fungible](../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md).
Para un tutorial detallado sobre cómo emitir un token en el XRP Ledger, ya sea una stablecoin u otro tipo, visita [Emitir un token fungible](../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md).
{% raw-partial file="/docs/_snippets/common-links.md" /%}

View File

@@ -12,7 +12,7 @@ targets:
El XRP Ledger posiblemente tenga el _exchange descentralizado_ más antiguo del mundo (a veces abreviado como "DEX"), operando de manera continua desde el lanzamiento del XRP Ledger en 2012. Este exchange permite a los usuarios comprar y vender [tokens](../index.md) por XRP u otros tokens, con [costes](../../transactions/fees.md) mínimos cargados a la red misma (no pagados a ninguna parte).
**Atención**: Cualquiera puede [emitir un token](../../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md) con el código de moneda o símbolo de ticker que desee y venderlo en el exchange descentralizado. Siempre realiza una debida diligencia antes de comprar un token y presta atención al emisor. De lo contrario, podrías entregar algo de valor y recibir tokens sin valor a cambio.
**Atención**: Cualquiera puede [emitir un token](../../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md) con el código de moneda o símbolo de ticker que desee y venderlo en el exchange descentralizado. Siempre realiza una debida diligencia antes de comprar un token y presta atención al emisor. De lo contrario, podrías entregar algo de valor y recibir tokens sin valor a cambio.
## Estructura

View File

@@ -24,7 +24,7 @@ parent: contribute.html
- [Uphold](https://support.uphold.com/hc/en-us/requests/new)
- [Bitrue](https://www.bitrue.com/exchange-web/footer/contactus.html)
4. 詐欺業者がXRP Ledger上でXRPを他のトークンと交換した場合、そのトークンの発行者に連絡してください。発行者は[詐欺業者のトラストラインをフリーズする](../docs/tutorials/tokens/fungible-tokens/freeze-a-trust-line.md)ことができるかもしれません。
4. 詐欺業者がXRP Ledger上でXRPを他のトークンと交換した場合、そのトークンの発行者に連絡してください。発行者は[詐欺業者のトラストラインをフリーズする](../docs/tutorials/how-tos/use-tokens/freeze-a-trust-line.md)ことができるかもしれません。
詐欺業者の報告に関する詳細は、[Xrplorer Forensicsのヘルプ](https://xrplorer.com/forensics/help)をご覧ください。

View File

@@ -6,4 +6,4 @@ Checkを換金するための前提条件は、正確な金額を換金する場
- 発行済み通貨用のCheckの場合は、ご自身受取人にイシュアーに対するトラストラインがある必要があります。このトラストライン上のご自身の限度額は、受け取る金額を追加するための残高より十分高くなければなりません。
- トラストラインと限度額について詳しくは、[トークン](../concepts/tokens/index.md)および[トラストラインと発行](../concepts/tokens/fungible-tokens/index.md)をご覧ください。
- [トランザクションに安全に署名できる手段](../concepts/transactions/secure-signing.md)。
- XRP Ledgerに接続できる[クライアントライブラリ](../references/client-libraries.md)か、それとも[HTTPライブラリ、WebSocketライブラリなど](../tutorials/http-websocket-apis/get-started.md)。
- XRP Ledgerに接続できる[クライアントライブラリ](../references/client-libraries.md)か、それとも[HTTPライブラリ、WebSocketライブラリなど](../tutorials/http-websocket-apis/build-apps/get-started.md)。

View File

@@ -2,7 +2,7 @@
`rippled`ログメッセージの詳細は、[ログメッセージについて](../infrastructure/troubleshooting/understanding-log-messages.md)をご覧ください。
`rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバが完全に機能するようになります。このサーバを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバがネットワークと同期されているかどうかを判別するには、[`rippled`サーバの状況](../references/http-websocket-apis/api-conventions/rippled-server-states.md)を使用します。[`rippled`のコマンドラインインターフェイス](../tutorials/http-websocket-apis/get-started.md#コマンドライン)を使用すれば、これを迅速にテストできます。
`rippled`が残りのネットワークと同期されたら、ストック`rippled`サーバが完全に機能するようになります。このサーバを、ローカル署名やXRP LedgerへのAPIアクセスに使用できます。`rippled`サーバがネットワークと同期されているかどうかを判別するには、[`rippled`サーバの状況](../references/http-websocket-apis/api-conventions/rippled-server-states.md)を使用します。[`rippled`のコマンドラインインターフェイス](../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用すれば、これを迅速にテストできます。
```sh
rippled server_info

View File

@@ -54,7 +54,7 @@ XRP Ledgerでは、スパムや悪意のある使用によって、共有グロ
アカウントの所有者準備金を決定するには、増分準備金にアカウントが所有するオブジェクトの数を掛けます。アカウントが所有しているオブジェクトの数を調べるには、[account_infoメソッド][]を呼び出し、`account_data.OwnerCount`を取得します。
アドレスの必要となる合計準備金を計算するには、`OwnerCount``reserve_inc_xrp`を掛け、次に`reserve_base_xrp`を加えます。[この計算をPythonで行うデモ](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#codeblock-17)があります。
アドレスの必要となる合計準備金を計算するには、`OwnerCount``reserve_inc_xrp`を掛け、次に`reserve_base_xrp`を加えます。[この計算をPythonで行うデモ](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#codeblock-17)があります。
## 必要準備金を下回る
@@ -76,6 +76,6 @@ XRP Ledgerには、準備金要件を調整する仕組みがあります。こ
- [AccountRootオブジェクト][]
- [手数料の投票](../consensus-protocol/fee-voting.md)
- [SetFee疑似トランザクション][]疑似トランザクション
- [チュートリアル: 必要準備金の計算と表示Python](/docs/tutorials/sample-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
- [チュートリアル: 必要準備金の計算と表示Python](../../tutorials/python/build-apps/build-a-desktop-wallet-in-python.md#3-display-an-account)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -27,7 +27,7 @@ XRP Ledgerを動かすサーバソフトウェアは、主に2種類あります
* 選択的に支払いパスや通貨交換のオファーを表示または非表示にすることができ、最良の取引を提供せず、彼ら自身の利益を確保する可能性があります。
* もし、アドレスの秘密鍵を送信してしまった場合、サーバの管理者はあなたに代わって任意のトランザクションを実行し、アドレスが保有するすべての資金を転送または破棄する可能性があります。
さらに、独自のサーバを運営することで、[管理者アクセス権限](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)が与えられ、重要な管理者専用コマンドや負荷の高いコマンドを実行することができます。共有サーバを使用する場合、同じサーバの他のユーザとサーバの計算能力を共有することを考慮しなければいけません。WebSocket APIのコマンドの多くはサーバに大きな負担をかけるので、サーバには必要なときにレスポンスを縮小するオプションがあります。サーバを他人と共有する場合、常に最良の結果を得られるとは限りません。
さらに、独自のサーバを運営することで、[管理者アクセス権限](../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)が与えられ、重要な管理者専用コマンドや負荷の高いコマンドを実行することができます。共有サーバを使用する場合、同じサーバの他のユーザとサーバの計算能力を共有することを考慮しなければいけません。WebSocket APIのコマンドの多くはサーバに大きな負担をかけるので、サーバには必要なときにレスポンスを縮小するオプションがあります。サーバを他人と共有する場合、常に最良の結果を得られるとは限りません。
最後に、バリデーションサーバを運用する場合、パブリックネットワークへのプロキシとしてストックサーバを使用し、バリデーションサーバをプライベートネットワークに置いて、ストックサーバを通してのみ外部にアクセスできるようにすることができます。これにより、バリデーションサーバに侵入することがより困難になります。

View File

@@ -12,7 +12,7 @@ labels:
- [**P2Pモード**](#p2pモード) - ピアツーピアネットワークをフォローし、トランザクションを処理し、ある程度の[レジャー履歴](ledger-history.md)を維持します。このモードは、以下の役割のいずれか、またはすべてを行うように設定することができます。
- [**バリデータ**](#バリデータ) - コンセンサスに参加することで、ネットワークの安全確保に貢献します。
- [**APIサーバ**](#apiサーバ) - 共有レジャーからデータを読み込んだり、トランザクションを送信したり、レジャーのアクティビティを監視するための[APIアクセス](/docs/tutorials/get-started/get-started-http-websocket-apis.md)を提供します。オプションとして、トランザクションやレジャーの履歴を完全に記録する [**全履歴サーバ**](#全履歴サーバ) とすることができます。
- [**APIサーバ**](#apiサーバ) - 共有レジャーからデータを読み込んだり、トランザクションを送信したり、レジャーのアクティビティを監視するための[APIアクセス](../../tutorials/http-websocket-apis/build-apps/get-started.md)を提供します。オプションとして、トランザクションやレジャーの履歴を完全に記録する [**全履歴サーバ**](#全履歴サーバ) とすることができます。
- [**ハブサーバ**](#公開ハブ) - ピアツーピアネットワークの他の多くのメンバー間のメッセージを中継します。
- [**レポートモード**](#レポートモード) - リレーショナルデータベースからのAPIリクエストに対応するための専用モードです。ピアツーピアネットワークには参加しないため、P2Pモードサーバを実行し、信頼できるgRPC接続を使用してレポートモードサーバに接続する必要があります。 {% badge href="https://github.com/XRPLF/rippled/releases/tag/1.7.0" %}新規: rippled 1.7.0{% /badge %}
- [**スタンドアロンモード**](#スタンドアロンモード) - テスト用のオフラインモードです。ピアツーピアネットワークに接続せず、コンセンサスも使用しません。

View File

@@ -97,12 +97,12 @@ XRP LedgerのChecksの詳細は、以下をご覧ください。
- [CheckCreate][]
- [CheckCash][]
- [CheckCancel][]
- Checksのチュートリアル
- [Checkの送信](/docs/tutorials/payments/send-a-check.md)
- [Checksの検索](/docs/tutorials/payments/look-up-checks.md)
- [Checkの指定された金額での換金](/docs/tutorials/payments/cash-a-check-for-an-exact-amount.md)
- [Checkの変動金額での換金](/docs/tutorials/payments/cash-a-check-for-a-flexible-amount.md)
- [Checkの取消し](/docs/tutorials/payments/cancel-a-check.md)
- [Checksのチュートリアル](../../tutorials/how-tos/use-specialized-payment-types/use-checks/index.md)
- [Checkの送信](../../tutorials/how-tos/use-specialized-payment-types/use-checks/send-a-check.md)
- [Checksの検索](../../tutorials/how-tos/use-specialized-payment-types/use-checks/look-up-checks.md)
- [Checkの指定された金額での換金](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-an-exact-amount.md)
- [Checkの変動金額での換金](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cash-a-check-for-a-flexible-amount.md)
- [Checkの取消し](../../tutorials/how-tos/use-specialized-payment-types/use-checks/cancel-a-check.md)
- [Checks Amendment][]
関連機能の詳細については、以下をご覧ください。

View File

@@ -19,6 +19,6 @@ labels:
- `Paths`フィールドを省略します。このフィールドは、発行元から直接送信する場合や、送信するトークンと受信するトークンの通貨コードと発行元が同じである限り、つまり同じステーブルコインである限り、ホットウォレットから設定する必要はありません。`Paths`フィールドは[クロスカレンシー支払い](cross-currency-payments.md)やより長いマルチホップ(rippling)支払いを対象としています。単純に経路探索を行い、トランザクションにパスを設定すると、直接の経路が利用できない場合、支払いは失敗するのではなく、より高価な遠回りのパスを取るかもしれません。悪意のあるユーザはこれを利用して利益を得る可能性があります。
- `tecPATH_DRY`の結果コードが表示された場合、通常、必要なトラストラインを顧客がまだ設定していないか、発行者のripplingが正しく設定されていないことを意味します
XRP Ledger上でステーブルコインやその他のトークンを発行するための詳しいチュートリアルは、[代替可能トークンの発行](../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md)をご覧ください。
XRP Ledger上でステーブルコインやその他のトークンを発行するための詳しいチュートリアルは、[代替可能トークンの発行](../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md)をご覧ください。
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -10,7 +10,7 @@ seo:
XRP Ledgerには、世界でおそらく最も古い _分散型取引所_ (「DEX」と略されることもあります)があり、2012年のXRP Ledgerのローンチ以来、現在まで稼働し続けています。この取引所では、ユーザが[トークン](../index.md)をXRPや他のトークンと売買することができ、ネットワーク自体に課される[手数料](../../transactions/fees.md)はごく僅かです。(いかなる当事者にも支払われることはありません)
{% admonition type="warning" name="注意" %}誰でも好きな通貨コードやティッカーシンボルで[トークンを発行](../../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md)して、分散型取引所で販売することができます。トークンを購入する前に必ずデューデリジェンスを行い、発行者に注意を払うようにしてください。さもなければ、価値あるものを手放し、それと引き換えに価値のないトークンを受け取ることになるかもしれません。{% /admonition %}
{% admonition type="warning" name="注意" %}誰でも好きな通貨コードやティッカーシンボルで[トークンを発行](../../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md)して、分散型取引所で販売することができます。トークンを購入する前に必ずデューデリジェンスを行い、発行者に注意を払うようにしてください。さもなければ、価値あるものを手放し、それと引き換えに価値のないトークンを受け取ることになるかもしれません。{% /admonition %}
## 構造

View File

@@ -87,9 +87,9 @@ No Freeze設定は、アドレスのマスターキーのシークレットキ
- **コンセプト:**
- [トラストラインとトークンの発行](index.md)
- **Tutorials:**
- [No Freezeを有効化](../../../tutorials/tokens/fungible-tokens/enable-no-freeze.md)
- [Global Freezeの実行](../../../tutorials/tokens/fungible-tokens/enact-global-freeze.md)
- [トラストラインのフリーズ](../../../tutorials/tokens/fungible-tokens/freeze-a-trust-line.md)
- [No Freezeを有効化](../../../tutorials/how-tos/use-tokens/enable-no-freeze.md)
- [Global Freezeの実行](../../../tutorials/how-tos/use-tokens/enact-global-freeze.md)
- [トラストラインのフリーズ](../../../tutorials/how-tos/use-tokens/freeze-a-trust-line.md)
- **References:**
- [account_linesメソッド][]
- [account_infoメソッド][]

View File

@@ -8,7 +8,7 @@ labels:
---
# ステーブルコイン発行者の設定
トークンの発行を始める前に、XRP Ledgerアカウントで設定する必要がある項目がいくつかあります。これらの設定の例については、[代替可能トークンの発行](../../../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md)をご覧ください。
トークンの発行を始める前に、XRP Ledgerアカウントで設定する必要がある項目がいくつかあります。これらの設定の例については、[代替可能トークンの発行](../../../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md)をご覧ください。
設定すべき項目は以下の通りです。

View File

@@ -54,7 +54,7 @@ XRP Ledgerにおけるトークンは、[XRPと異なる性質](../../references
発行者は、ユーザがトークンを送金する際に自動で差し引かれる「送金手数料」(transfer-fees.html)を設定することができます。発行者は、自分のトークンを含む取引レートの[ティックサイズ](decentralized-exchange/ticksize.md)を定義することもできます。発行者と一般アカウントのどちらも、トラストラインを[フリーズ](fungible-tokens/freezes.md)することができ、トラストライン内のトークンの使用方法を制限することができます。( XRPにはこのいずれも適用されません。)
トークン発行の技術的な手順については、[代替可能トークンの発行](../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md) をご覧ください。
トークン発行の技術的な手順については、[代替可能トークンの発行](../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md) をご覧ください。
## 関連項目
@@ -63,7 +63,7 @@ XRP Ledgerにおけるトークンは、[XRPと異なる性質](../../references
- [クロスカレンシー支払い](../payment-types/cross-currency-payments.md)
- [分散型取引所](decentralized-exchange/index.md)
- **チュートリアル:**
- [代替可能トークンの発行](../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md)
- [代替可能トークンの発行](../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md)
- [XRP Ledgerゲートウェイの開設](../../use-cases/tokenization/stablecoin-issuer.md)
- [トランザクションの結果の確認](../transactions/finality-of-results/look-up-transaction-results.md)
- [専門化した支払いタイプの使用](../../tutorials/how-tos/use-specialized-payment-types/index.md)

View File

@@ -28,7 +28,7 @@ NFTokenオブジェクトの初回販売以前の市場活動は、XRP Ledgerに
プログラムまたはスクリプトを使用して、一度に多数のトークンをMintします。[チケット](../../accounts/tickets.md)を使えば、1度に200件までのトランザクションを並行して処理することができます。
実用例としては、チュートリアルの[JavaScriptでNFTをバッチMint](../../../tutorials/tokens/nfts/batch-mint-nfts-js.md)をご覧ください
実用例としては、チュートリアルの[JavaScriptでNFTをバッチMint](../../../tutorials/javascript/nfts/batch-mint-nfts.md)をご覧ください
### メリット

View File

@@ -207,7 +207,7 @@ XRP Ledgerは、トランザクションオブジェクトが送信元アドレ
- [安全な署名の設定](secure-signing.md)
- [XRPの送金](../../tutorials/how-tos/send-xrp.md)
- [トランザクションの結果の確認](finality-of-results/look-up-transaction-results.md)
- [WebSocketを使用した着信ペイメントの監視](/docs/tutorials/advanced-developer-topics/client-library-development/monitor-incoming-payments-with-websocket.md)
- [WebSocketを使用した着信ペイメントの監視](../../tutorials/http-websocket-apis/build-apps/monitor-incoming-payments-with-websocket.md)
- [トランザクションの取り消しまたはスキップ](finality-of-results/canceling-a-transaction.md)
- [信頼できるトランザクションの送信](reliable-transaction-submission.md)
- **リファレンス:**

View File

@@ -48,7 +48,7 @@ labels:
[構成ファイルの例](https://github.com/XRPLF/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上127.0.0.1のポート5005でJSON-RPCHTTP、ポート6006でWebSocketWSの接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。
{% admonition type="warning" name="注意" %}署名に[コマンドラインAPI](../../references/http-websocket-apis/api-conventions/request-formatting.md#コマンドライン形式)を使用する場合は、コマンドラインでないクライアントで[Websocket APIやJSON-RPC APIを使用](/docs/tutorials/get-started/get-started-http-websocket-apis.md)する場合よりもセキュリティが弱くなります。コマンドライン構文を使用すると、秘密鍵がシステムのプロセスリストで他のユーザに見える可能性があり、シェル履歴にプレーンテキスト形式でキーが保存される可能性があります。{% /admonition %}
{% admonition type="warning" name="注意" %}署名に[コマンドラインAPI](../../references/http-websocket-apis/api-conventions/request-formatting.md#コマンドライン形式)を使用する場合は、コマンドラインでないクライアントで[Websocket APIやJSON-RPC APIを使用](../../tutorials/http-websocket-apis/build-apps/get-started.md)する場合よりもセキュリティが弱くなります。コマンドライン構文を使用すると、秘密鍵がシステムのプロセスリストで他のユーザに見える可能性があり、シェル履歴にプレーンテキスト形式でキーが保存される可能性があります。{% /admonition %}
3. サーバの使用中は、稼働状態と最新状態を維持して、ネットワークと同期されるようにしておく必要があります。

View File

@@ -9,7 +9,7 @@ labels:
---
# Amendment投票機能の設定
バリデータとして設定されたサーバは、[featureメソッド][]を使ってXRP Ledgerプロトコルの[Amendment](../../concepts/networks-and-servers/amendments.md)に投票することができます。(この方法には[管理者アクセス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)が必要です).
バリデータとして設定されたサーバは、[featureメソッド][]を使ってXRP Ledgerプロトコルの[Amendment](../../concepts/networks-and-servers/amendments.md)に投票することができます。(この方法には[管理者アクセス](../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)が必要です).
例えば、「SHAMapV2」Amendmentに反対票を投じるには、以下のコマンドを実行します。

View File

@@ -49,7 +49,7 @@ gRPCを有効にするには、次の前提条件を満たす必要がありま
- [XRP Ledgerの概要](/about/)
- [`rippled`サーバのモード](../../concepts/networks-and-servers/rippled-server-modes.md)
- **チュートリアル:**
- [HTTP / WebSocketAPIを使ってみる](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [HTTP / WebSocketAPIを使ってみる](../../tutorials/http-websocket-apis/build-apps/get-started.md)
- [信頼できるトランザクションの送信](../../concepts/transactions/reliable-transaction-submission.md)
- [rippledサーバの管理](../installation/install-rippled-on-ubuntu.md)
- **リファレンス:**

View File

@@ -57,7 +57,7 @@ labels:
2. サーバに対してオンライン削除を指示する[can_deleteメソッド][]の実行をテストします。
このコマンドの実行には[`rippled`コマンドラインインターフェイス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#コマンドライン)を使用できます。例:
このコマンドの実行には[`rippled`コマンドラインインターフェイス](../../../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用できます。例:
```
$ rippled --conf=/etc/opt/ripple/rippled.cfg can_delete now

View File

@@ -11,7 +11,7 @@ labels:
{% badge href="https://github.com/XRPLF/rippled/releases/tag/1.1.0" %}新規: rippled 1.1.0{% /badge %}デフォルトでは、`rippled`の署名メソッドは管理者接続に限定されています。v1.1.0以前のバージョンの`rippled`のように、署名メソッドをパブリックAPIメソッドとして使用できるようにするには、構成を変更することで、これを使用できるようにします。
これにより、サーバが「パブリック」[JSON-RPC接続およびWebSocket接続](/docs/tutorials/get-started/get-started-http-websocket-apis.md)を受け入れる場合は、これらのパブリック接続で以下のメソッドが使用できるようになります。
これにより、サーバが「パブリック」[JSON-RPC接続およびWebSocket接続](../../tutorials/http-websocket-apis/build-apps/get-started.md)を受け入れる場合は、これらのパブリック接続で以下のメソッドが使用できるようになります。
- [sign][signメソッド]
- [sign_for][sign_forメソッド]

View File

@@ -80,7 +80,7 @@ labels:
- **チュートリアル:**
- [rippledの構成](../configuration/index.md)
- [rippledのトラブルシューティング](../troubleshooting/index.md)
- [rippled APIの使用開始](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [rippled APIの使用開始](../../tutorials/http-websocket-apis/build-apps/get-started.md)
- **リファレンス:**
- [rippled APIリファレンス](../../references/http-websocket-apis/index.md)
- [`rippled`コマンドラインの使用](../commandline-usage.md)

View File

@@ -0,0 +1,128 @@
---
html: rippled-1-3-migration-instructions.html
parent: install-rippled.html
seo:
description: rippled 1.2.4以前のバージョンからrippled v1.3以降に移行するプロセスについて説明します。
---
# rippled v1.3.xへの移行手順
このドキュメントでは、`rippled` 1.2.4以前のバージョンから`rippled` v1.3以降に移行するプロセスについて説明します。`rippled`のインストールプロセスがバージョン1.3では変更されたため、この移行プロセスは必須です。
このドキュメントでは、サポートされるプラットフォームでアップグレードするための移行手順について説明します。
- [CentOSまたはRed Hat Enterprise LinuxRHEL](#centosまたはred-hat-enterprise-linuxrhelでの移行)
- [Ubuntu Linux](#ubuntu-linuxでの移行)
その他のプラットフォームについては、ソースからコンパイルするためのアップデート手順をご覧ください。([Ubuntu](build-on-linux-mac-windows.md)、[macOS](build-on-linux-mac-windows.md)、または[Windows](https://github.com/XRPLF/rippled/tree/develop/Builds/VisualStudio2017)
## CentOSまたはRed Hat Enterprise LinuxRHELでの移行
Rippleの公式RPMリポジトリとそれを使用するための手順が変更されました。[自動更新](update-rippled-automatically-on-linux.md)を有効にしている場合は、システムで移行が自動的に実行されます。以前のリポジトリから新しいリポジトリに手動で移行するには、以下の手順を実行します。
1. `rippled`サーバを停止します。
```
$ sudo systemctl stop rippled.service
```
2. 以前のRippleリポジトリパッケージを削除します。
```
$ sudo rpm -e ripple-repo
```
`rippled-repo`パッケージは、現在**廃止予定**です。このパッケージはバージョン1.3.1に対応するために、最後にもう一度だけ更新されました。今後は、リポジトリに変更があれば、`ripple.repo`ファイルに手動で変更を加える必要があります。
3. Rippleの新しいyumリポジトリを追加します。
```
$ cat << REPOFILE | sudo tee /etc/yum.repos.d/ripple.repo
[ripple-stable]
name=XRP Ledger Packages
baseurl=https://repos.ripple.com/repos/rippled-rpm/stable/
enabled=1
gpgcheck=0
gpgkey=https://repos.ripple.com/repos/rippled-rpm/stable/repodata/repomd.xml.key
repo_gpgcheck=1
REPOFILE
```
4. 新しい`rippled`パッケージをインストールします。
```
$ sudo yum install rippled
```
バージョン1.3.1では、構成ファイル(`rippled.cfg`および`validators.txt`)を変更する必要はありません。このアップデート手順では、既存の構成ファイルが現在のまま残ります。
5. systemdユニットファイルを再度読み込みます。
```
$ sudo systemctl daemon-reload
```
6. `rippled`サービスを開始します。
```
$ sudo systemctl start rippled.service
```
{% admonition type="danger" name="警告" %}[自動更新](update-rippled-automatically-on-linux.md)を使用している場合、この移行プロセスを実行した後も自動更新が続きます。ただし、**`ripple-repo`パッケージは、現在は廃止予定**です。そのため、今後は、Rippleのリポジトリへの変更があれば、各自がrepoファイルを手動で更新する必要があります。{% /admonition %}
## Ubuntu Linuxでの移行
バージョン1.3より前では、Ubuntu Linuxに`rippled`をインストールする方法として、Alienを使用してRPMパッケージをインストールする方法がサポートされていました。`rippled`v1.3.1から、RippleはUbuntuおよびDebian Linux向けのネイティブパッケージを提供しており、これが推奨のインストール方法となります。すでにRPMパッケージをインストールしている場合は、[インストール手順](install-rippled-on-ubuntu.md)を実行して、パッケージをアップグレードし、ネイティブAPT`.deb`)パッケージに切り替えます。
構成ファイル(`/opt/ripple/etc/rippled.cfg`および`/opt/ripple/etc/validators.txt`)に変更を加えている場合は、インストール中に`apt`から、構成ファイルをパッケージからの最新バージョンで上書きするかどうかを尋ねられる場合があります。バージョン1.3では、構成ファイルに変更を加える必要はありません。そのため、既存の構成ファイルはそのまま維持できます。
1.3用のネイティブAPTパッケージをインストールした後で、サービスを再読み込み/再起動する必要があります。
1. systemdユニットファイルを再度読み込みます。
```
$ sudo systemctl daemon-reload
```
2. `rippled`サービスを再起動します。
```
$ sudo systemctl restart rippled.service
```
他のパッケージ用にAlienを使用する必要がなくなった場合は、必要に応じて、次の手順でAlienとその依存関係をアンインストールできます。
1. Alienをアンインストールします。
```
$ sudo apt -y remove alien
```
2. 使用していない依存関係をアンインストールします。
```
$ sudo apt -y autoremove
```
### 自動更新
`rippled` v1.3パッケージには、UbuntuおよびDebian Linuxで動作する最新のauto-updateスクリプトが含まれています。詳細は、[Linuxでの`rippled`の自動更新](update-rippled-automatically-on-linux.md)をご覧ください。
## 関連項目
- **[`rippled` v1.3.1リリースノート](https://github.com/XRPLF/rippled/releases/1.3.1)**
- **コンセプト:**
- [`rippled`サーバ](../../concepts/networks-and-servers/index.md)
- [コンセンサスについて](../../concepts/consensus-protocol/index.md)
- **チュートリアル:**
- [Linuxでの自動更新](update-rippled-automatically-on-linux.md)
- [rippledのトラブルシューティング](../troubleshooting/index.md)
- [rippled APIの使用開始](../../tutorials/http-websocket-apis/get-started.md)
- **リファレンス:**
- [rippled APIリファレンス](../../references/http-websocket-apis/index.md)
- [`rippled`コマンドラインの使用](../commandline-usage.md)
- [server_infoメソッド][]
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -182,7 +182,7 @@ Terminating thread doJob:AcquisitionDone: unhandled
11. `rippled`サービスが正常に起動したかどうかを確認します。
[コマンドラインインターフェイス](/docs/tutorials/get-started/get-started-http-websocket-apis.md#コマンドライン)を使用してサーバの状況を確認できますサーバがJSON-RPCリクエストを受け入れないように設定している場合を除く。次に例を示します。
[コマンドラインインターフェイス](../../tutorials/http-websocket-apis/build-apps/get-started.md#コマンドライン)を使用してサーバの状況を確認できますサーバがJSON-RPCリクエストを受け入れないように設定している場合を除く。次に例を示します。
```
/opt/ripple/bin/rippled server_info

View File

@@ -12,10 +12,10 @@ seo:
| 言語 | ライブラリ名 | Get Started | APIリファレンス | ソースコード |
|---------------------------------|------------------------|--------------|---------------|-------------|
| **Python** | `xrpl-py` | [Pythonを使ってみよう](/docs/tutorials/get-started/get-started-python.md) | [API リファレンス](https://xrpl-py.readthedocs.io/) | [リポジトリ](https://github.com/XRPLF/xrpl-py) |
| **JavaScript** / **TypeScript** | `xrpl.js` | [JavaScriptを使ってみよう](/docs/tutorials/get-started/get-started-javascript.md) | [API リファレンス](https://js.xrpl.org/) | [リポジトリ](https://github.com/XRPLF/xrpl.js) |
| **Python** | `xrpl-py` | [Pythonを使ってみよう](../tutorials/python/build-apps/get-started.md) | [API リファレンス](https://xrpl-py.readthedocs.io/) | [リポジトリ](https://github.com/XRPLF/xrpl-py) |
| **JavaScript** / **TypeScript** | `xrpl.js` | [JavaScriptを使ってみよう](../tutorials/javascript/build-apps/get-started.md) | [API リファレンス](https://js.xrpl.org/) | [リポジトリ](https://github.com/XRPLF/xrpl.js) |
| **JavaScript** / **TypeScript** | `xrpl-client` | [触ってみる](https://jsfiddle.net/WietseWind/35az6p1b/) | [NPM リファレンス](https://www.npmjs.com/package/xrpl-client) | [リポジトリ](https://github.com/XRPL-Labs/xrpl-client) |
| **JavaScript** / **TypeScript** | `xrpl-accountlib` | [触ってみる](https://jsfiddle.net/WietseWind/gkefpnu0/) | [NPM リファレンス](https://www.npmjs.com/package/xrpl-accountlib) | [リポジトリ](https://github.com/WietseWind/xrpl-accountlib) |
| **C++** | `rippled` 署名ライブラリ | [署名ライブラリを使ってみよう](https://github.com/XRPLF/rippled/tree/develop/Builds/linux#signing-library) | | ([`rippled`](https://github.com/XRPLF/rippled/))の一部 |
| **Java** | `xrpl4j` | [Javaを使ってみよう](/docs/tutorials/get-started/get-started-java.md) | [API リファレンス](https://javadoc.io/doc/org.xrpl/) | [リポジトリ](https://github.com/XRPLF/xrpl4j) |
| **PHP** | `XRPL_PHP` | [PHPを使ってみよう](/docs/tutorials/get-started/get-started-php.md) | [XRPL_PHP ドキュメント](https://alexanderbuzz.github.io/xrpl-php-docs/) | [リポジトリ](https://github.com/AlexanderBuzz/xrpl-php) |
| **Java** | `xrpl4j` | [Javaを使ってみよう](../tutorials/java/build-apps/get-started.md) | [API リファレンス](https://javadoc.io/doc/org.xrpl/) | [リポジトリ](https://github.com/XRPLF/xrpl4j) |
| **PHP** | `XRPL_PHP` | [PHPを使ってみよう](../tutorials/php/build-apps/get-started.md) | [XRPL_PHP ドキュメント](https://alexanderbuzz.github.io/xrpl-php-docs/) | [リポジトリ](https://github.com/AlexanderBuzz/xrpl-php) |

View File

@@ -14,6 +14,6 @@ nav_omit: true
## Alternatives
アカウント残高や取引履歴のリクエストなど、ほとんどの一般的な操作では、[WebSocket接続](/docs/tutorials/get-started/get-started-http-websocket-apis.md#websocket-api)または[JSON-RPCHTTP POST](/docs/tutorials/get-started/get-started-http-websocket-apis.md#json-rpc)を使用して、セルフホストまたは[公開XRP Ledgerサーバ](../tutorials/public-servers.md)にリクエストすることとができます。
アカウント残高や取引履歴のリクエストなど、ほとんどの一般的な操作では、[WebSocket接続](../tutorials/http-websocket-apis/get-started.md#websocket-api)または[JSON-RPCHTTP POST](../tutorials/http-websocket-apis/build-apps/get-started.md#json-rpc)を使用して、セルフホストまたは[公開XRP Ledgerサーバ](../tutorials/public-servers.md)にリクエストすることとができます。
詳細については、[HTTP / WebSocket APIsの使用を開始する](/docs/tutorials/get-started/get-started-http-websocket-apis.md)ページをご覧ください。
詳細については、[HTTP / WebSocket APIsの使用を開始する](../tutorials/http-websocket-apis/build-apps/get-started.md)ページをご覧ください。

View File

@@ -10,7 +10,7 @@ labels:
`rippled`サーバと直接通信する際には管理APIメソッドを使用します。管理メソッドは、信頼できるサーバ運用担当者のみを対象としています。管理メソッドには、サーバの管理、監視、デバッグのためのコマンドが含まれています。
管理コマンドを使用できるのは、管理者として、`rippled.cfg`ファイルに指定されているホストとポートで`rippled`サーバに接続している場合に限られます。デフォルトでは、コマンドラインクライアントが管理接続を使用します。`rippled`への接続についての詳細は、[rippled API入門](/docs/tutorials/get-started/get-started-http-websocket-apis.md)をご覧ください。
管理コマンドを使用できるのは、管理者として、`rippled.cfg`ファイルに指定されているホストとポートで`rippled`サーバに接続している場合に限られます。デフォルトでは、コマンドラインクライアントが管理接続を使用します。`rippled`への接続についての詳細は、[rippled API入門](../../../tutorials/http-websocket-apis/build-apps/get-started.md)をご覧ください。
## [キー生成メソッド](key-generation-methods/index.md)

View File

@@ -0,0 +1,99 @@
---
html: validation_seed.html
parent: server-control-methods.html
seo:
description: 無効。rippledが検証の署名に使用するシークレット値を一時的に設定します。
status: removed
labels:
- コアサーバ
---
# validation_seed
[[ソース]](https://github.com/XRPLF/rippled/blob/a61ffab3f9010d8accfaa98aa3cacc7d38e74121/src/ripple/rpc/handlers/ValidationSeed.cpp "Source")
`validation_seed`コマンドは、rippledが検証の署名に使用するシークレット値を一時的に設定します。サーバを再起動すると、この値は構成ファイルに基づいてリセットされます。{% badge href="https://github.com/XRPLF/rippled/releases/tag/0.29.1-rc1" %}rippled 0.29.1 以降では無効{% /badge %}
*`validation_seed`リクエストは、権限のないユーザは実行できない[管理メソッド](../index.md)です。*
### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"id": "set_seed_1",
"command": "validation_seed",
"secret": "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE"
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: validation_seed [secret]
rippled validation_seed 'BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE'
```
{% /tab %}
{% /tabs %}
リクエストには以下のパラメーターが含まれます。
| `Field` | 型 | 説明 |
|:---------|:-------|:---------------------------------------------------------|
| `secret` | 文字列 | _省略可_ 指定されている場合は、この値はキーペアの検証のためのシークレット値として使用されます。有効なフォーマットには、XRP Ledgerの[base58][]フォーマット、[RFC-1751](https://tools.ietf.org/html/rfc1751)、またはパスフレーズがあります。省略されている場合は、ネットワークへの検証の提案が無効になります。 |
### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="JSON-RPC" %}
```json
200 OK
{
"result" : {
"status" : "success",
"validation_key" : "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE",
"validation_public_key" : "n9Jx6RS6zSgqsgnuWJifNA9EqgjTKAywqYNReK5NRd1yLBbfC3ng",
"validation_seed" : "snjJkyBGogTem5dFGbcRaThKq2Rt3"
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
Loading: "/etc/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"status" : "success",
"validation_key" : "BAWL MAN JADE MOON DOVE GEM SON NOW HAD ADEN GLOW TIRE",
"validation_public_key" : "n9Jx6RS6zSgqsgnuWJifNA9EqgjTKAywqYNReK5NRd1yLBbfC3ng",
"validation_seed" : "snjJkyBGogTem5dFGbcRaThKq2Rt3"
}
}
```
{% /tab %}
{% /tabs %}
このレスポンスは[標準フォーマット][]に従っており、正常に完了した場合は結果に次のフィールドが含まれています。
| `Field` | 型 | 説明 |
|:------------------------|:-------|:------------------------------------------|
| `validation_key` | 文字列 | (提案が無効な場合には省略可)これらの検証クレデンシャルのシークレットキー([RFC-1751](https://tools.ietf.org/html/rfc1751)フォーマット)。 |
| `validation_public_key` | 文字列 | 提案が無効な場合には省略可これらの検証クレデンシャルの公開鍵XRP Ledgerの[base58][]エンコード文字列フォーマット) |
| `validation_seed` | 文字列 | 提案が無効な場合には省略可これらの検証クレデンシャルのシークレットキーXRP Ledgerの[base58][]エンコード文字列フォーマット) |
### 考えられるエラー
* [汎用エラータイプ][]のすべて。
* `badSeed` - リクエストに無効なシークレット値が指定されていました。この場合は通常、シークレット値が異なるフォーマットの有効文字列(アカウントアドレス、検証の公開鍵など)である可能性があります。
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -10,7 +10,7 @@ labels:
`rippled`サーバはAPIクライアントが公開APIにリクエストできるレートを制限できます。レート制限はクライアントのIPアドレスに基づいて行われるため、[ネットワークアドレス変換](https://ja.wikipedia.org/wiki/ネットワークアドレス変換)の背後にいるクライアントは公開IPアドレスに基づく制限を共有します。
{% admonition type="success" name="ヒント" %}レート制限は、クライアントが[管理者](/docs/tutorials/get-started/get-started-http-websocket-apis.md#管理者アクセス権限)として接続されているときには適用されません{% /admonition %}
{% admonition type="success" name="ヒント" %}レート制限は、クライアントが[管理者](../../../tutorials/http-websocket-apis/build-apps/get-started.md#管理者アクセス権限)として接続されているときには適用されません{% /admonition %}
クライアントがレート制限に近づいている場合、サーバは[APIレスポンス](response-formatting.md)のトップレベルにフィールド`"warning" "load"`というフィールドを[APIレスポンス](response-formatting.md)のトップレベルに追加します。この警告はすべてのレスポンスに追加されるわけではありませんが、サーバはクライアントを切断する前に何度かこのような警告を送ることがあります。
@@ -58,7 +58,7 @@ Server is overloaded
- [`rippled`サーバ](../../../concepts/networks-and-servers/index.md)
- [ソフトウェアエコシステム](../../../introduction/software-ecosystem.md)
- **チュートリアル:**
- [XRP Ledger APIの使用開始](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [XRP Ledger APIの使用開始](../../../tutorials/http-websocket-apis/build-apps/get-started.md)
- [rippledのトラブルシューティング](../../../infrastructure/troubleshooting/index.md)
- **リファレンス:**
- [rippled APIリファレンス](../index.md)

View File

@@ -130,7 +130,7 @@ HTTP Status: 200 OK
この警告は、XRP Ledgerプロトコルの1つ以上の[Amendment](../../../concepts/networks-and-servers/amendments.md)が有効になる予定であるが、現在のサーバにはそれらのAmendmentの実装がないことを示しています。これらのAmendmentが有効になると、現在のサーバは[Amendmentブロック](../../../concepts/networks-and-servers/amendments.md#amendment-blocked-servers)されるため、できるだけ早く[最新の`rippled`バージョンにアップグレード](../../../infrastructure/installation/index.md)する必要があります。
サーバは、この警告を送信するのは、クライアントが[管理者として接続している](/docs/tutorials/get-started/get-started-http-websocket-apis.md#admin-access)場合のみです。
サーバは、この警告を送信するのは、クライアントが[管理者として接続している](../../../tutorials/http-websocket-apis/build-apps/get-started.md#admin-access)場合のみです。
この警告には、以下のフィールドを含む`details`フィールドが含まれます。
@@ -189,7 +189,7 @@ HTTP Status: 200 OK
- [Amendment](../../../concepts/networks-and-servers/amendments.md)
- [既知のAmendment](/resources/known-amendments.md)
- **チュートリアル:**
- [XRP LedgerのAPIを触ってみよう](/docs/tutorials/get-started/get-started-http-websocket-apis.md)
- [XRP LedgerのAPIを触ってみよう](../../../tutorials/http-websocket-apis/build-apps/get-started.md)
- [`rippled`のインストールと更新](../../../infrastructure/installation/index.md)
- **リファレンス:**
- [featureメソッド][]

View File

@@ -34,7 +34,7 @@ AccountSetトランザクションは、[XRP Ledgerのアカウント](../../led
| [`Domain`](#domain) | 文字列 | Blob | _省略可_ このアカウントを保有するドメインのASCII小文字を表現する16進文字列。[256バイトを超える長さは使用できません。](https://github.com/XRPLF/rippled/blob/55dc7a252e08a0b02cd5aa39e9b4777af3eafe77/src/ripple/app/tx/impl/SetAccount.h#L34) |
| `EmailHash` | 文字列 | Hash128 | _省略可_ アバターイメージの生成に使用されるメールアドレスのハッシュ。一般的に、クライアントは[Gravatar](http://en.gravatar.com/site/implement/hash/)を使用してこのイメージを表示しています。 |
| `MessageKey` | 文字列 | Blob | _省略可_ 暗号化されたメッセージをこのアカウントに送信するための公開鍵です。キーを設定するには、正確に33バイトである必要があり、最初のバイトはキーの種類を示します。secp256k1鍵の場合は`0x02`または`0x03`、Ed25519鍵の場合は`0xED`です。キーを削除するには、空の値を使用します。 |
| `NFTokenMinter` | 文字列 | Blob | _(省略可)_ あなたのために[NFTokensをミントする](../../../../tutorials/tokens/nfts/assign-an-authorized-minter-js.md)ことができる別のアカウント。 {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |
| `NFTokenMinter` | 文字列 | Blob | _(省略可)_ あなたのために[NFTokensをミントする](../../../../tutorials/javascript/nfts/assign-an-authorized-minter.md)ことができる別のアカウント。 {% amendment-disclaimer name="NonFungibleTokensV1_1" /%} |
| [`SetFlag`](#accountsetのフラグ) | 数値 | UInt32 | _省略可_ このアカウントについてオプションを有効にするための整数フラグ。 |
| [`TransferRate`](#transferrate) | 符号なし整数 | UInt32 | _省略可_ ユーザがこのアカウントのトークンを送金するときに請求される手数料。通貨単位の10億分の1で表現されます。手数料なしを意味する特殊なケースの`0`を除いて、`2000000000`より大きくしたり、`1000000000`より小さくしたりすることはできません。 |
| [`TickSize`](../../../../concepts/tokens/decentralized-exchange/ticksize.md) | 符号なし整数 | UInt8 | _省略可_このアドレスによって発行されている通貨が関係するオファーに使用する為替レートの呼値の単位。それらのオファーの為替レートは、この有効桁数へと丸められます。有効な値は`3`から`15`、または無効にするための`0`です{% amendment-disclaimer name="TickSize" /%} |

View File

@@ -0,0 +1,13 @@
---
html: tasks.html
parent: tutorials.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# タスク
XRP Ledgerの代表的なタスクです。
{% child-pages /%}

View File

@@ -0,0 +1,681 @@
---
html: assign-a-regular-key-pair.html
parent: manage-account-settings.html
seo:
description: アカウントからトランザクションに署名できるように第2キーペアを承認します。このキーペアは後から変更や削除が可能です。
labels:
- セキュリティ
- アカウント
---
# レギュラーキーペアの割り当て
XRP Ledgerでは、アカウントはその後のトランザクションには _レギュラーキーペア_ と呼ばれるセカンダリキーペアで署名することができます。レギュラーキーペアの秘密鍵が漏えいした場合は、秘密鍵を削除または交換できます。その際に、アカウントの秘密鍵以外の設定を変更したり、他のアカウントとの関係を再設定する必要はありません。レギュラーキーペアを積極的にローテーションすることも可能です。(アカウントのアドレスに固有に関連付けられているアカウントのマスターキーペアでは、このような操作は実行できません。)
マスターキーペアとレギュラーキーペアの詳細は、[暗号鍵](../../../concepts/accounts/cryptographic-keys.md)をご覧ください。
このチュートリアルでは、レギュラーキーペアをアカウントに割り当てるために必要な手順を説明します。
1. [キーペアの生成](#1-キーペアの生成)
2. [生成したキーペアをレギュラーキーペアとしてアカウントに割り当てる](#2-生成したキーペアをレギュラーキーペアとしてアカウントに割り当てる)
3. [レギュラーキーペアの検証](#3-レギュラーキーペアの検証)
4. [次のステップ](#4-次のステップ)
## 1. キーペアの生成
[wallet_proposeメソッド][]を使用して、アカウントにレギュラーキーペアとして割り当てるキーペアを生成します。
### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command":"wallet_propose"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"wallet_propose"
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: wallet_propose
rippled wallet_propose
```
{% /tab %}
{% /tabs %}
### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result":{
"account_id":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"key_type":"secp256k1",
"master_key":"KNEW BENT LYNN LED GAD BEN KENT SHAM HOBO RINK WALT ALLY",
"master_seed":"sh8i92YRnEjJy3fpFkL8txQSCVo79",
"master_seed_hex":"966C0F68643EFBA50D58D191D4CA8AA7",
"public_key":"aBRNH5wUurfhZcoyR6nRwDSa95gMBkovBJ8V4cp1C1pM28H7EPL1",
"public_key_hex":"03AEEFE1E8ED4BBC009DE996AC03A8C6B5713B1554794056C66E5B8D1753C7DD0E"
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result":{
"account_id":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"key_type":"secp256k1",
"master_key":"KNEW BENT LYNN LED GAD BEN KENT SHAM HOBO RINK WALT ALLY",
"master_seed":"sh8i92YRnEjJy3fpFkL8txQSCVo79",
"master_seed_hex":"966C0F68643EFBA50D58D191D4CA8AA7",
"public_key":"aBRNH5wUurfhZcoyR6nRwDSa95gMBkovBJ8V4cp1C1pM28H7EPL1",
"public_key_hex":"03AEEFE1E8ED4BBC009DE996AC03A8C6B5713B1554794056C66E5B8D1753C7DD0E"
"status":"success"
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
{
"result" :{
"account_id" :"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"key_type" :"secp256k1",
"master_key" :"KNEW BENT LYNN LED GAD BEN KENT SHAM HOBO RINK WALT ALLY",
"master_seed" :"sh8i92YRnEjJy3fpFkL8txQSCVo79",
"master_seed_hex" :"966C0F68643EFBA50D58D191D4CA8AA7",
"public_key" :"aBRNH5wUurfhZcoyR6nRwDSa95gMBkovBJ8V4cp1C1pM28H7EPL1",
"public_key_hex" :"03AEEFE1E8ED4BBC009DE996AC03A8C6B5713B1554794056C66E5B8D1753C7DD0E",
"status" :"success"
}
}
```
{% /tab %}
{% /tabs %}
次のステップでは、このレスポンスの`account_id`を使用してキーペアをレギュラーキーペアとしてアカウントに割り当てます。また、`master_seed`値を安全な場所に保管してください。(この値以外は特に覚えておく必要はありません。)
## 2. 生成したキーペアをレギュラーキーペアとしてアカウントに割り当てる
[SetRegularKeyトランザクション][]を使用して、ステップ1で生成したキーペアをレギュラーキーペアとしてアカウントに割り当てます。
SetRegularKeyトランザクションでレギュラーキーペアを初めてアカウントに割り当てる際には、アカウントのマスター秘密鍵シークレットによる署名が必要です。マスター秘密鍵の送信は危険であるため、トランザクションの署名とネットワークへのトランザクション送信を切り離した2段階方式でこのトランザクションを実行します。
それ以降のSetRegularKeyトランザクションの送信時には、既存のレギュラー秘密鍵で署名し、レギュラー秘密鍵自体を置換または[削除](change-or-remove-a-regular-key-pair.md)できます。ネットワーク上でレギュラー秘密鍵を送信してはならないことに注意してください。
### トランザクションの署名
{% partial file="/@l10n/ja/docs/_snippets/tutorial-sign-step.md" /%}
リクエストフィールドに以下の値を指定します。
| リクエストフィールド | 値 |
|:--------------|:-------------------------------------------------------------|
| `Account` | アカウントのアドレス。 |
| `RegularKey` | ステップ1で生成された`account_id`。 |
| `secret` | アカウントの`master_key``master_seed`、または`master_seed_hex`(マスター秘密鍵)。|
#### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command":"sign",
"tx_json":{
"TransactionType":"SetRegularKey",
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7"
},
"secret":"ssCATR7CBvn4GLd1UuU2bqqQffHki"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"sign",
"params":[
{
"tx_json":{
"TransactionType":"SetRegularKey",
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7"
},
"secret":"ssCATR7CBvn4GLd1UuU2bqqQffHki"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: sign secret tx_json
rippled sign ssCATR7CBvn4GLd1UuU2bqqQffHki '{"TransactionType":"SetRegularKey", "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93", "RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7"}'
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result":{
"tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence":4,
"SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType":"SetRegularKey",
"TxnSignature":"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
"hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result":{
"status":"success",
"tx_blob":"1200052280000000240000000768400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402201453CA3D4D17F0EE3828B9E3D6ACF65327F5D4FC2BA30953CACF6CBCB4145E3502202F2154BED1D7462CAC1E3DBB31864E48C3BA0B3133ACA5E37EC54F0D0C339E2D8114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence":4,
"SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType":"SetRegularKey",
"TxnSignature":"304402201453CA3D4D17F0EE3828B9E3D6ACF65327F5D4FC2BA30953CACF6CBCB4145E3502202F2154BED1D7462CAC1E3DBB31864E48C3BA0B3133ACA5E37EC54F0D0C339E2D",
"hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
{
"result" :{
"status" :"success",
"tx_blob" :"1200052280000000240000000768400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402201453CA3D4D17F0EE3828B9E3D6ACF65327F5D4FC2BA30953CACF6CBCB4145E3502202F2154BED1D7462CAC1E3DBB31864E48C3BA0B3133ACA5E37EC54F0D0C339E2D8114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json" :{
"Account" :"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee" :"10",
"Flags" :2147483648,
"RegularKey" :"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence" :4,
"SigningPubKey" :"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType" :"SetRegularKey",
"TxnSignature" :"304402201453CA3D4D17F0EE3828B9E3D6ACF65327F5D4FC2BA30953CACF6CBCB4145E3502202F2154BED1D7462CAC1E3DBB31864E48C3BA0B3133ACA5E37EC54F0D0C339E2D",
"hash" :"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
}
}
```
{% /tab %}
{% /tabs %}
`sign`コマンドのレスポンスには上記のような`tx_blob`値が含まれています。オフライン署名レスポンスには`signedTransaction`値が含まれています。いずれもトランザクションの署名済みバイナリ表現(ブロブ)です。
次に`submit`コマンドを使用して、トランザクションブロブ(`tx_blob`または`signedTransaction`)をネットワークに送信します。
### トランザクションの送信
オフライン署名レスポンスの`signedTransaction`値、または`sign`コマンドレスポンスの`tx_blob`値をとり、[submitメソッド][]を使用して`tx_blob`として値として送信します。
#### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command":"submit",
"tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"submit",
"params":[
{
"tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: submit tx_blob
rippled submit 1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence":4,
"SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType":"SetRegularKey",
"TxnSignature":"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
"hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"status":"success",
"tx_blob":"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"RegularKey":"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence":4,
"SigningPubKey":"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType":"SetRegularKey",
"TxnSignature":"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
"hash":"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
{
"result" :{
"engine_result" :"tesSUCCESS",
"engine_result_code" :0,
"engine_result_message" :"The transaction was applied.Only final in a validated ledger.",
"status" :"success",
"tx_blob" :"1200052280000000240000000468400000000000000A73210384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A7446304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C268114830923439D307E642CED308FD91EF701A7BAA74788141620D685FB08D81A70D0B668749CF2E130EA7540",
"tx_json" :{
"Account" :"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee" :"10",
"Flags" :2147483648,
"RegularKey" :"rsprUqu6BHAffAeG4HpSdjBNvnA6gdnZV7",
"Sequence" :4,
"SigningPubKey" :"0384CA3C528F10C75F26E0917F001338BD3C9AA1A39B9FBD583DFFFD96CF2E2D7A",
"TransactionType" :"SetRegularKey",
"TxnSignature" :"304402204BCD5663F3A2BA02D2CE374439096EC6D27273522CD6E6E0BDBFB518730EAAE402200ECD02D8D2525D6FA4642613E71E395ECCEA01C42C35A668BF092A00EB649C26",
"hash" :"AB73BBF7C99061678B59FB48D72CA0F5FC6DD2815B6736C6E9EB94439EC236CE"
}
}
}
```
{% /tab %}
{% /tabs %}
レスポンスに含まれるトランザクションの`hash`は、[トランザクションの最終結果を検索する](../../../references/http-websocket-apis/public-api-methods/transaction-methods/tx.md)ときに使用できることに注意してください。
## 3. レギュラーキーペアの検証
アカウントにレギュラーキーペアが正しく設定されていることを検証するため、ステップ2でアカウントに割り当てたレギュラー秘密鍵で[AccountSetトランザクション][]に署名し、アカウントからこのトランザクションを送信します。
ステップ2で説明したように、マスター秘密鍵の送信は危険です。レギュラー秘密鍵の送信も同様に危険です。そのため、トランザクションの署名とネットワークへのトランザクションの送信を切り離した2段階方式でこのトランザクションを実行します。
### トランザクションの署名
{% partial file="/@l10n/ja/docs/_snippets/tutorial-sign-step.md" /%}
リクエストフィールドに以下の値を指定します。
| リクエストフィールド | 値 |
|:--------------|:-------------------------------------------------------------|
| `Account` | アカウントのアドレス。 |
| `secret` | ステップ1で生成し、ステップ2でアカウントに割り当てた`master_key``master_seed`、または`master_seed_hex`(レギュラー秘密鍵)。 |
#### リクエストのフォーマット
リクエストのフォーマットの例を示します。このリクエストには`AccountSet`オプションが含まれていないことに注意してください。つまり、トランザクションの成功による影響は、アカウントのレギュラーキーペアが正しく設定されていることを確認する(およびトランザクションコストを消却する)こと以外に何もありません。
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command":"sign",
"tx_json":{
"TransactionType":"AccountSet",
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93"
},
"secret":"sh8i92YRnEjJy3fpFkL8txQSCVo79"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"sign",
"params":[
{
"tx_json":{
"TransactionType":"AccountSet",
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93"
},
"secret":"sh8i92YRnEjJy3fpFkL8txQSCVo79"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: sign secret tx_json
rippled sign sh8i92YRnEjJy3fpFkL8txQSCVo79 '{"TransactionType":"AccountSet", "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93"}'
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result":{
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"Sequence":4,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"AccountSet",
"TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result":{
"status":"success",
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"Sequence":4,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"AccountSet",
"TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
{
"result" :{
"status" :"success",
"tx_blob" :"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json" :{
"Account" :"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee" :"10",
"Flags" :2147483648,
"Sequence" :4,
"SigningPubKey" :"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType" :"AccountSet",
"TxnSignature" :"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash" :"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
}
}
```
{% /tab %}
{% /tabs %}
`sign`コマンドのレスポンスには上記のような`tx_blob`値が含まれています。オフライン署名レスポンスには`signedTransaction`値が含まれています。いずれもトランザクションの署名済みバイナリ表現(ブロブ)です。
次に`submit`コマンドを使用して、トランザクションブロブ(`tx_blob`または`signedTransaction`)をネットワークに送信します。
### トランザクションの送信
オフライン署名レスポンスの`signedTransaction`値、または`sign`コマンドレスポンスの`tx_blob`値をとり、[submitメソッド][]を使用して`tx_blob`値として送信します。
#### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command":"submit",
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"submit",
"params":[
{
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
#Syntax: submit tx_blob
rippled submit 1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"Sequence":4,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"AccountSet",
"TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"status":"success",
"tx_blob":"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee":"10",
"Flags":2147483648,
"Sequence":4,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"AccountSet",
"TxnSignature":"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash":"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```json
{
"result" :{
"engine_result" :"tesSUCCESS",
"engine_result_code" :0,
"engine_result_message" :"The transaction was applied.Only final in a validated ledger.",
"status" :"success",
"tx_blob" :"1200032280000000240000000468400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB88114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json" :{
"Account" :"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93",
"Fee" :"10",
"Flags" :2147483648,
"Sequence" :4,
"SigningPubKey" :"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType" :"AccountSet",
"TxnSignature" :"3045022100A50E867D3B1B5A39F23F1ABCA5C7C3EC755442FDAA357EFD897B865ACA7686DB02206077BF459BCE39BCCBFE1A128DA986D1E00CBEC5F0D6B0E11710F60BE2976FB8",
"hash" :"D9B305CB6E861D0994A5CDD4726129D91AC4277111DC444DE4CEE44AD4674A9F"
}
}
}
```
{% /tab %}
{% /tabs %}
## 4. 次のステップ
これで、レギュラーキーペアをアカウントに割り当てるメリットについて理解しました。次に以下の関連トピックとチュートリアルをご覧ください。
- [レギュラーキーペアの変更または削除](change-or-remove-a-regular-key-pair.md)
- [マルチシグの設定](set-up-multi-signing.md)
- [発行アドレスと運用アドレス](../../../concepts/accounts/account-types.md)
- [取引所としてのXRPの上場](../../../use-cases/defi/list-xrp-as-an-exchange.md)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,367 @@
---
html: change-or-remove-a-regular-key-pair.html
parent: manage-account-settings.html
seo:
description: アカウントですでに承認されているレギュラーキーペアを削除するか更新します。
labels:
- セキュリティ
- アカウント
---
# レギュラーキーペアの変更または削除
XRP Ledgerでは、アカウントはその後のトランザクションには _レギュラーキーペア_ と呼ばれるセカンダリキーペアで署名することができます。アカウントのレギュラーキーペアが漏えいした場合、またはセキュリティ対策としてレギュラーキーペアを定期的に変更する必要がある場合は、[SetRegularKeyトランザクション][]を使用してアカウントレギュラーキーペアを削除または変更します。
マスターキーペアとレギュラーキーペアの詳細は、[暗号鍵](../../../concepts/accounts/cryptographic-keys.md)をご覧ください。
## レギュラーキーペアの変更
既存のレギュラーキーペアを変更する手順は、初めて[レギュラーキーを割り当てる](assign-a-regular-key-pair.md)手順とほぼ同じです。キーペアを生成し、レギュラーキーペアとしてアカウントに割り当てます。これにより既存のレギュラーキーペアが上書きされます。ただし大きく異なる点は、既存のレギュラーキーペアを変更するときには既存のレギュラー秘密鍵を使用して秘密鍵自体を置き換えることができますが、レギュラーキーペアをアカウントに初めて割り当てるときにはアカウントのマスター秘密鍵を使用する必要があることです。
マスターキーペアとレギュラーキーペアの詳細は、[暗号鍵](../../../concepts/accounts/cryptographic-keys.md)をご覧ください。
## レギュラーキーペアの削除
漏えいしたレギュラーキーペアを単にアカウントから削除する場合は、キーペアを最初に生成する必要はありません。`RegularKey`フィールドを省略した[SetRegularKeyトランザクション][]を使用します。アカウントの別の署名手段(マスターキーペアまたは[署名者リスト](../../../concepts/accounts/multi-signing.md))が現在有効になっていない場合は、トランザクションが失敗することに注意してください。
アカウントのレギュラーキーペアを削除する場合、`SetRegularKey`トランザクションでは、アカウントのマスター秘密鍵シークレットまたは既存のレギュラーキーペアによる署名が必要です。マスター秘密鍵またはレギュラー秘密鍵の送信は危険であるため、トランザクションの署名とネットワークへのトランザクションの送信を切り離した2段階方式でこのトランザクションを実行します。
### トランザクションの署名
{% partial file="/@l10n/ja/docs/_snippets/tutorial-sign-step.md" /%}
リクエストフィールドに以下の値を指定します。
| リクエストフィールド | 値 |
|:--------------|:-------------------------------------------------------------|
| `Account` | アカウントのアドレス。 |
| `secret` | アカウントの`master_key``master_seed`、または`master_seed_hex`(マスター秘密鍵またはレギュラー秘密鍵) |
#### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```
{
"command":"sign",
"tx_json":{
"TransactionType":"SetRegularKey",
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8"
},
"secret":"snoPBrXtMeMyMHUVTgbuqAfg1SUTb"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```
{
"method":"sign",
"params":[
{
"secret" :"snoPBrXtMeMyMHUVTgbuqAfg1SUTb",
"tx_json" :{
"TransactionType" :"SetRegularKey",
"Account" :"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8"
}
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
#Syntax: sign secret tx_json
rippled sign snoPBrXtMeMyMHUVTgbuqAfg1SUTb '{"TransactionType":"SetRegularKey", "Account":"rUAi7pipxGpYfPNg3LtPcf2ApiS8aw9A93"}'
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```
{
"result":{
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee":"10",
"Flags":2147483648,
"Sequence":2,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"SetRegularKey",
"TxnSignature":"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash":"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```
{NEWWWWWWWWWWWW
"result":{
"status":"success",
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee":"10",
"Flags":2147483648,
"Sequence":2,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"SetRegularKey",
"TxnSignature":"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash":"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
{
"result" :{
"status" :"success",
"tx_blob" :"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json" :{
"Account" :"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee" :"10",
"Flags" :2147483648,
"Sequence" :2,
"SigningPubKey" :"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType" :"SetRegularKey",
"TxnSignature" :"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash" :"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
}
}
```
{% /tab %}
{% /tabs %}
`sign`コマンドのレスポンスには上記のような`tx_blob`値が含まれています。オフライン署名レスポンスには`signedTransaction`値が含まれています。いずれもトランザクションの署名済みバイナリ表現(ブロブ)です。
次に`submit`コマンドを使用して、トランザクションブロブ(`tx_blob`または`signedTransaction`)をネットワークに送信します。
### トランザクションの送信
オフライン署名レスポンスの`signedTransaction`値、または`sign`コマンドレスポンスの`tx_blob`値をとり、[submitメソッド][]を使用して`tx_blob`として送信します。
#### リクエストのフォーマット
リクエストのフォーマットの例:
{% tabs %}
{% tab label="WebSocket" %}
```
{
"command":"submit",
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```
{
"method":"submit",
"params":[
{
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
#Syntax: submit tx_blob
rippled submit 1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E
```
{% /tab %}
{% /tabs %}
#### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee":"10",
"Flags":2147483648,
"Sequence":2,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"SetRegularKey",
"TxnSignature":"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash":"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
},
"status":"success",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"status":"success",
"tx_blob":"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee":"10",
"Flags":2147483648,
"Sequence":2,
"SigningPubKey":"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType":"SetRegularKey",
"TxnSignature":"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash":"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
{
"result" :{
"engine_result" :"tesSUCCESS",
"engine_result_code" :0,
"engine_result_message" :"The transaction was applied.Only final in a validated ledger.",
"status" :"success",
"tx_blob" :"1200052280000000240000000268400000000000000A73210330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD02074473045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E838114623B8DA4A0BFB3B61AB423391A182DC693DC159E",
"tx_json" :{
"Account" :"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"Fee" :"10",
"Flags" :2147483648,
"Sequence" :2,
"SigningPubKey" :"0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020",
"TransactionType" :"SetRegularKey",
"TxnSignature" :"3045022100CAB9A6F84026D57B05760D5E2395FB7BE86BF39F10DC6E2E69DC91238EE0970B022058EC36A8EF9EE65F5D0D8CAC4E88C8C19FEF39E40F53D4CCECBB59701D6D1E83",
"hash" :"59BCAB8E5B9D4597D6A7BFF22F6C555D0F41420599A2E126035B6AF19261AD97"
}
}
}
```
{% /tab %}
{% /tabs %}
レギュラーキーペアの削除が成功したかどうかを確認するには、削除したレギュラー秘密鍵を使用してトランザクションを送信できないことを確認します。
前述の`SetRegularKey`トランザクションにより削除されたレギュラー秘密鍵を使用して[AccountSetトランザクション][]に署名した際のエラーレスポンスの例を以下に示します。
### レスポンスのフォーマット
処理が成功したレスポンスの例:
{% tabs %}
{% tab label="WebSocket" %}
```
{
"error":"badSecret",
"error_code":41,
"error_message":"Secret does not match account.",
"request":{
"command":"submit",
"secret":"snoPBrXtMeMyMHUVTgbuqAfg1SUTb",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"TransactionType":"AccountSet"
}
},
"status":"error",
"type":"response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```
{NEWWWWWWWWWWWW
"result":{
"error":"badSecret",
"error_code":41,
"error_message":"Secret does not match account.",
"request":{
"command":"submit",
"secret":"snoPBrXtMeMyMHUVTgbuqAfg1SUTb",
"tx_json":{
"Account":"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"TransactionType":"AccountSet"
}
},
"status":"error"
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
{
"result" :{
"error" :"badSecret",
"error_code" :41,
"error_message" :"Secret does not match account.",
"request" :{
"command" :"submit",
"secret" :"snoPBrXtMeMyMHUVTgbuqAfg1SUTb",
"tx_json" :{
"Account" :"r9xQZdFGwbwTB3g9ncKByWZ3du6Skm7gQ8",
"TransactionType" :"AccountSet"
}
},
"status" :"error"
}
}
```
{% /tab %}
{% /tabs %}
場合によっては、`SetRegularKey`トランザクションを使用して、[トランザクションコスト](../../../concepts/transactions/transaction-cost.md)を支払わずに[Key Resetトランザクション](../../../concepts/transactions/transaction-cost.md#key-resetトランザクション)を送信できます。FeeEscalation Amendmentを有効にすると、Key Resetトランザクションの名目トランザクションコストがゼロであっても、`rippled`は他のトランザクションよりもKey Resetトランザクションを優先します。
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,503 @@
---
html: disable-master-key-pair.html
parent: manage-account-settings.html
seo:
description: アドレスに数学的に関連付けられたマスターキーを無効にする。
labels:
- セキュリティ
- アカウント
---
# マスターキーペアの無効化
このページでは、[アカウント](../../../concepts/accounts/index.md)のアドレスに数学的に関連付けられた[マスターキーペア](../../../concepts/accounts/cryptographic-keys.md)を無効化する方法について説明します。あなたのアカウントのマスターキーペアが漏洩した可能性がある場合、または[マルチシグ](../../../concepts/accounts/multi-signing.md)をあなたのアカウントからトランザクションを送信する _唯一_ の方法としたい場合、これを行う必要があります。
{% admonition type="warning" name="注意" %}マスターキーペアを無効にすると、[トランザクションの承認](../../../concepts/transactions/index.md#トランザクションの承認)の方法の1つが削除されます。マスターキーペアを無効にする前に、レギュラーキーやマルチ・サインなど、他のトランザクションの承認方法のいずれかを使用できることを確認する必要があります。(例えば、[レギュラーキーペアを割り当てた場合](assign-a-regular-key-pair.md)は、そのレギュラーキーで正常にトランザクションを送信できることを確認してください)。XRP Ledgerは分散型であるため、残りの取引承認方法を使用できない場合、誰もあなたのアカウントへのアクセスを回復することができません。{% /admonition %}
**マスターキーペアを無効にするには、マスターキーペアを使用する必要があります。**
ただし、他のトランザクションの認証方法を使用してマスターキーペアを _再有効化_ することは可能です。
## 前提条件
アカウントのマスターキーペアを無効にするには、次の前提条件を満たしている必要があります。
- XRP Ledger[アカウント](../../../concepts/accounts/index.md)を持ち、そのアカウントからマスターキーペアを用いてトランザクションの署名と提出ができることが必要です。[安全な署名の設定](../../../concepts/transactions/secure-signing.md) をご覧ください。これには2つの一般的な方法があります。
- アカウントのマスターシード値を知っている。シード値は一般的に `sn3nxiW7v8KXzPzAqzyHXbSSKNuN9`のような "s" で始まる [base58][] 値で表されます。
- あるいは、シード値を知る必要がなく、安全に保存する[専用の署名デバイス](../../../concepts/transactions/secure-signing.md#専用の署名デバイスを使用する) を使用します
- あなたのアカウントには、マスターキーペア以外のトランザクションを認証する方法が少なくとも1つ必要です。つまり、以下のいずれか、または両方を行う必要があります。
- [レギュラーキーペアを割り当てる](assign-a-regular-key-pair.md).
- [マルチシグの設定](set-up-multi-signing.md).
## 手順
### 1. トランザクションJSONの作成
アカウントから、`"SetValue": 4`のフィールドを持つ[AccountSetトランザクション][]を準備します。これは AccountSet フラグ "Disable Master" (`asfDisableMaster`) に対応する値です。このトランザクションの他の必須フィールドは、必須の[共通フィールド](../../../references/protocol/transactions/common-fields.md)のみです。例えば、[自動入力可能なフィールド](../../../references/protocol/transactions/common-fields.md#自動入力可能なフィールド) を省けば、以下のトランザクション指示で十分である。
```json
{
"TransactionType": "AccountSet",
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"SetFlag": 4
}
```
{% admonition type="success" name="ヒント" %}[予測可能な時間内にトランザクションの結果を確実に得る](../../../concepts/transactions/reliable-transaction-submission.md)ために、`LastLedgerSequence`フィールドも提供することが強く推奨されています。{% /admonition %}
### 2. トランザクションへの署名
トランザクションの署名には、**マスターキーペア**を使用する必要があります。
{% admonition type="warning" name="注意" %}自分が管理していないサーバに秘密鍵を提出したり、暗号化されていない状態でネットワーク上に送信したりしないでください。これらの例は、[ローカルの `rippled` サーバ](../../../concepts/transactions/secure-signing.md#ローカルでrippledを実行する) を使っていることを前提にしています。他の[安全な署名方法](../../../concepts/transactions/secure-signing.md)を使っている場合は、これらの手順を変更する必要があります。{% /admonition %}
#### リクエストの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command": "sign",
"tx_json": {
"TransactionType": "AccountSet",
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"SetFlag": 4
},
"secret": "s████████████████████████████"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method": "sign",
"params": [
{
"tx_json": {
"TransactionType": "AccountSet",
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"SetFlag": 4
},
"secret": "s████████████████████████████"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
$ rippled sign s████████████████████████████ '{"TransactionType":"AccountSet",
"Account":"rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", "SetFlag":4}'
```
{% /tab %}
{% /tabs %}
#### レスポンスの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result": {
"deprecated": "This command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"tx_blob": "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"Flags": 2147483648,
"Sequence": 380,
"SetFlag": 4,
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType": "AccountSet",
"TxnSignature": "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
},
"status": "success",
"type": "response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result": {
"deprecated": "This command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"status": "success",
"tx_blob": "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee": "10",
"Flags": 2147483648,
"Sequence": 380,
"SetFlag": 4,
"SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType": "AccountSet",
"TxnSignature": "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
Loading: "/etc/opt/ripple/rippled.cfg"
2020-Feb-13 00:13:24.783570867 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"deprecated" : "This command has been deprecated and will be removed in a future version of the server. Please migrate to a standalone signing tool.",
"status" : "success",
"tx_blob" : "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 380,
"SetFlag" : 4,
"SigningPubKey" : "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType" : "AccountSet",
"TxnSignature" : "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
}
}
```
{% /tab %}
{% /tabs %}
サーバがトランザクションに正常に署名したことを示す `"status": "success"` を探してください。代わりに `"status": "error"` が表示された場合は、 `error``error_message` フィールドをチェックして、より詳しい情報を確認してください。よくある可能性としては、以下のようなものがあります。
- `"error": "badSecret"` は通常、リクエストの`secret`にタイプミスがあったことを意味します。
- `"error": "masterDisabled"` は、このアドレスのマスターキーペアが _既に_ 無効であることを意味します。
レスポンスに含まれる `tx_blob` の値をメモしておきます。これはネットワークに送信できる署名済みトランザクションバイナリである。
### 3. トランザクションの送信
前のステップで署名されたトランザクションblobをXRP Ledgerに提出します。
#### リクエストの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command": "submit",
"tx_blob": "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method":"submit",
"params": [
{
"tx_blob": "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9"
}
]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```
$ rippled submit 1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9
```
{% /tab %}
{% /tabs %}
#### レスポンスの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result": {
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"tx_blob" : "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 380,
"SetFlag" : 4,
"SigningPubKey" : "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType" : "AccountSet",
"TxnSignature" : "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
},
"status": "success",
"type": "response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result" : {
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success",
"tx_blob" : "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 380,
"SetFlag" : 4,
"SigningPubKey" : "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType" : "AccountSet",
"TxnSignature" : "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
Loading: "/etc/opt/ripple/rippled.cfg"
2020-Feb-13 00:25:49.361743460 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success",
"tx_blob" : "1200032280000000240000017C20210000000468400000000000000A732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D81144B4E9C06F24296074F7BC48F92A97916C6DC5EA9",
"tx_json" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"Fee" : "10",
"Flags" : 2147483648,
"Sequence" : 380,
"SetFlag" : 4,
"SigningPubKey" : "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB",
"TransactionType" : "AccountSet",
"TxnSignature" : "304402204457A890BC06F48061F8D61042975702B57EBEF3EA2C7C484DFE38CFD42EA11102202505A7C62FF41E68FDE10271BADD75BD66D54B2F96A326BE487A2728A352442D",
"hash" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70"
}
}
}
```
{% /tab %}
{% /tabs %}
トランザクションが `tecNO_ALTERNATIVE_KEY` という結果で失敗した場合、あなたのアカウントでは現在トランザクションを認証するための別の方法が有効になっていません。[レギュラーキーペアを割り当てる](assign-a-regular-key-pair.md)か [マルチシグを設定](set-up-multi-signing.md) した後、再度マスターキーペアの無効化を試してみてください。
### 4. 検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
### 5. アカウントフラグの確認
[account_infoメソッド][]で、アカウントのマスターキーが無効になっていることを確認します。以下のパラメータを必ず指定してください。
| フィールド | 値 |
|:---------------|:-----------------------------------------------------------------------------|
| `account` | アカウントのアドレス |
| `ledger_index` | `"validated"` とすると、検証済みの最新バージョンのレジャーから結果を得ることができます。 |
#### リクエストの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"command": "account_info",
"account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"ledger_index": "validated"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"method": "account_info",
"params": [{
"account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"ledger_index": "validated"
}]
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
rippled account_info rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn validated
```
{% /tab %}
{% /tabs %}
#### レスポンスの例
{% tabs %}
{% tab label="WebSocket" %}
```json
{
"result": {
"account_data": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"Balance": "423013688",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 9633792,
"LedgerEntryType": "AccountRoot",
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 9,
"PreviousTxnID": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"PreviousTxnLgrSeq": 53391321,
"RegularKey": "rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ",
"Sequence": 381,
"TransferRate": 4294967295,
"index": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"urlgravatar": "http://www.gravatar.com/avatar/98b4375e1d753e5b91627516f6d70977"
},
"ledger_hash": "A90CEBD4AEDA24470AAC5CD307B6D26267ACE79C03669A0A0B8C41ACAEDAA6F0",
"ledger_index": 53391576,
"validated": true
},
"status": "success",
"type": "response"
}
```
{% /tab %}
{% tab label="JSON-RPC" %}
```json
{
"result": {
"account_data": {
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"Balance": "423013688",
"Domain": "6D64756F31332E636F6D",
"EmailHash": "98B4375E1D753E5B91627516F6D70977",
"Flags": 9633792,
"LedgerEntryType": "AccountRoot",
"MessageKey": "0000000000000000000000070000000300",
"OwnerCount": 9,
"PreviousTxnID": "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"PreviousTxnLgrSeq": 53391321,
"RegularKey": "rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ",
"Sequence": 381,
"TransferRate": 4294967295,
"index": "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"urlgravatar": "http://www.gravatar.com/avatar/98b4375e1d753e5b91627516f6d70977"
},
"ledger_hash": "4C4AC95149B13B539369998675FE6860C52695E83658366F18872181C9F1AEBF",
"ledger_index": 53391589,
"status": "success",
"validated": true
}
}
```
{% /tab %}
{% tab label="コマンドライン" %}
```sh
Loading: "/etc/opt/ripple/rippled.cfg"
2020-Feb-13 00:41:38.642710734 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"account_data" : {
"Account" : "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"AccountTxnID" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"Balance" : "423013688",
"Domain" : "6D64756F31332E636F6D",
"EmailHash" : "98B4375E1D753E5B91627516F6D70977",
"Flags" : 9633792,
"LedgerEntryType" : "AccountRoot",
"MessageKey" : "0000000000000000000000070000000300",
"OwnerCount" : 9,
"PreviousTxnID" : "327FD263132A4D08170E1B01FE1BB2E21D0126CE58165C97A9173CA9551BCD70",
"PreviousTxnLgrSeq" : 53391321,
"RegularKey" : "rD9iJmieYHn8jTtPjwwkW2Wm9sVDvPXLoJ",
"Sequence" : 381,
"TransferRate" : 4294967295,
"index" : "13F1A95D7AAB7108D5CE7EEAF504B2894B8C674E6D68499076441C4837282BF8",
"urlgravatar" : "http://www.gravatar.com/avatar/98b4375e1d753e5b91627516f6d70977"
},
"ledger_hash" : "BBA4034FB5D5D89987E0987A9491E7B62B16708EECFF04CDB0367BD4D28EB1B5",
"ledger_index" : 53391568,
"status" : "success",
"validated" : true
}
}
```
{% /tab %}
{% /tabs %}
レスポンスの `account_data` オブジェクトで、 `Flags` フィールドと `lsfDisableMaster` フラグの値 (16 進数では `0x00100000`、10 進数では `1048576`) を ビット論理積 (ほとんどのプログラミング言語では `&` オペレーター) で比較します。
コード例:
{% tabs %}
{% tab label="JavaScript" %}
```js
// 上記のJSON-RPCレスポンスがaccount_info_responseとして保存されていると仮定します。
const lsfDisableMaster = 0x00100000;
let acct_flags = account_info_response.result.account_data.Flags;
if ((lsfDisableMaster & acct_flags) === lsfDisableMaster) {
console.log("マスターキーペアが無効化されています");
} else {
console.log("マスターキーペアが使用可能です");
}
```
{% /tab %}
{% tab label="Python" %}
```python
# 上記のJSON-RPCレスポンスがJSONから解析され、
# 変数account_info_responseとして保存されたと仮定すると、以下のようになります。
lsfDisableMaster = 0x00100000
acct_flags = account_info_response["result"]["account_data"]["Flags"]
if lsfDisableMaster & acct_flags == lsfDisableMaster:
console.log("マスターキーペアが無効化されています");
else:
console.log("マスターキーペアが使用可能です");
```
{% /tab %}
{% /tabs %}
この操作の結果は次の2つしかありません。
- 結果が0でない場合は `lsfDisableMaster` の値と等しく、 **マスターキーが正常に無効化されたこと** を示します。
- 結果が0の場合は、そのアカウントのマスターキーが無効になっていないことを示します。
結果が予想と異なる場合は、前の手順で送信したトランザクションが正常に実行されたかどうかを確認してください。それは、その口座のトランザクション履歴([account_txメソッド][])の中で最も新しいもので、結果コード `tesSUCCESS` がついているはずです。それ以外の[結果コード](../../../references/protocol/transactions/transaction-results/index.md)が表示された場合、そのトランザクションは正常に実行されませんでした。エラーの原因によっては、これらの手順を最初からやり直した方がよいかもしれません。
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,12 @@
---
html: manage-account-settings.html
parent: tasks.html
metadata:
indexPage: true
---
# アカウントの設定の利用
XRP Ledgerアカウントを設定して、思い通りの支払いをしましょう。
{% child-pages /%}

View File

@@ -0,0 +1,403 @@
---
html: send-a-multi-signed-transaction.html
parent: manage-account-settings.html
seo:
description: マルチシグトランザクションを作成、署名、送信する。
labels:
- セキュリティ
---
# マルチシグトランザクションの送信
マルチシグトランザクションを作成、署名、送信する方法を以下で説明します。
## 前提条件
- 事前にアドレスの[マルチシグの設定](set-up-multi-signing.md)をする必要があります。
- マルチシグは使用可能である必要があります。マルチシグは、XRP Ledgerコンセンサスプロトコルに対する[**Amendment**](../../../concepts/networks-and-servers/amendments.md)により2016/06/27以降利用可能になりました。
## 1.トランザクションの作成
送信するトランザクションを表すJSONオブジェクトを作成します。`Fee``Sequence`をはじめ、このトランザクションに関する _すべての_ 情報を指定する必要があります。また、トランザクションがマルチシグトランザクションであることを示すため、`SigningPubKey`を空の文字列として指定します。
マルチシグトランザクションの`Fee`は、標準の署名済みトランザクションよりもかなり高額ですので、ご注意ください。手数料は通常の[トランザクションコスト](../../../concepts/transactions/transaction-cost.md)のN+1倍以上となりますNは付与する予定の署名数です。複数のソースから署名を収集するのに時間がかかることがあるため、その間に[トランザクションコスト](../../../concepts/transactions/transaction-cost.md)の増加に備えて現行の最小値よりも大きな値を指定できます。
マルチシグが可能なトランザクションの例を以下に示します。
```
{
"TransactionType":"TrustSet",
"Account":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Flags":262144,
"LimitAmount":{
"currency":"USD",
"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value":"100"
},
"Sequence":2,
"SigningPubKey":"",
"Fee":"30000"
}
```
このトランザクションは、残高上限額が100 USDのrEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQCから rHb9CJAWyB4rj91VRWn96DkukG4bwdtyThへの会計上の関係を作成します。
## 2.1つの署名の取得
SlignerListのメンバーの1人のシークレットキーとアドレスを指定した[sign_forメソッド][]を使用して、そのメンバーの署名を取得します。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
```
$ rippled sign_for rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW <rsA2L..'s secret> '{
> "TransactionType":"TrustSet",
> "Account":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Flags":262144,
> "LimitAmount":{
> "currency":"USD",
> "issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value":"100"
> },
> "Sequence":2,
> "SigningPubKey":"",
> "Fee":"30000"
> }'
Loading:"/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" :{
"status" :"success",
"tx_blob" :"1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1F1",
"tx_json" :{
"Account" :"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Fee" :"30000",
"Flags" :262144,
"LimitAmount" :{
"currency" :"USD",
"issuer" :"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value" :"100"
},
"Sequence" :2,
"Signers" :[
{
"Signer" :{
"Account" :"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SigningPubKey" :"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
"TxnSignature" :"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
}
}
],
"SigningPubKey" :"",
"TransactionType" :"TrustSet",
"hash" :"A94A6417D1A7AAB059822B894E13D322ED3712F7212CE9257801F96DE6C3F6AE"
}
}
}
```
レスポンスの`tx_json`フィールドを保存します。このフィールドの`Signers`フィールドに新しい署名が入力されています。`tx_blob`フィールドの値は無視できます。
スタンドアロンモードまたは本番環境以外のネットワークで問題が発生した場合は、[マルチシグが有効であること](../../../infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md#新しいジェネシスレジャーの設定)を確認してください。
## 3.追加の署名の取得
追加の署名は平行して取得するか、または順次取得することができます。 
* 並行して取得する場合: トランザクションの元のJSONを指定した`sign_for`コマンドを使用します。各レスポンスの`Signers`配列に1つの署名が含まれています。
* 順次取得する場合: 前の`sign_for`レスポンスの`tx_json`値を指定した`sign_for`コマンドを使用します。各レスポンスの既存の`Signers`配列に新しい署名が追加されます。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
```
$ rippled sign_for rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v <rUpy..'s secret> '{
> "Account" :"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Fee" :"30000",
> "Flags" :262144,
> "LimitAmount" :{
> "currency" :"USD",
> "issuer" :"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value" :"100"
> },
> "Sequence" :2,
> "Signers" :[
> {
> "Signer" :{
> "Account" :"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SigningPubKey" :"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
> "TxnSignature" :"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
> }
> }
> ],
> "SigningPubKey" :"",
> "TransactionType" :"TrustSet",
> "hash" :"A94A6417D1A7AAB059822B894E13D322ED3712F7212CE9257801F96DE6C3F6AE"
> }'
Loading:"/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" :{
"status" :"success",
"tx_blob" :"1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1",
"tx_json" :{
"Account" :"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Fee" :"30000",
"Flags" :262144,
"LimitAmount" :{
"currency" :"USD",
"issuer" :"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value" :"100"
},
"Sequence" :2,
"Signers" :[
{
"Signer" :{
"Account" :"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SigningPubKey" :"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
"TxnSignature" :"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
}
},
{
"Signer" :{
"Account" :"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
"SigningPubKey" :"028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
"TxnSignature" :"30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
}
}
],
"SigningPubKey" :"",
"TransactionType" :"TrustSet",
"hash" :"BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
}
}
}
```
構成したSignerListによっては、必要なすべての当事者からの署名を取得するためにこのステップを複数回繰り返す必要があります。
## 4.署名の結合と送信
署名を順次収集した場合、最後の`sign_for`レスポンスの`tx_json`ではすべての署名が結合されているので、これを[submit_multisignedメソッド][]の引数として使用できます。
署名を並行して収集した場合、すべての署名を含む`tx_json`オブジェクトを手動で作成する必要があります。すべての`sign_for`レスポンスの`Signers`配列の内容を1つの`Signers`配列に結合します。この配列には各署名が含まれます。結合された`Signers`配列を元のトランザクションのJSON値に追加し、これを[submit_multisignedメソッド][]の引数として使用します。
```
$ rippled submit_multisigned '{
> "Account" :"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Fee" :"30000",
> "Flags" :262144,
> "LimitAmount" :{
> "currency" :"USD",
> "issuer" :"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value" :"100"
> },
> "Sequence" :2,
> "Signers" :[
> {
> "Signer" :{
> "Account" :"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SigningPubKey" :"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
> "TxnSignature" :"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
> }
> },
> {
> "Signer" :{
> "Account" :"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
> "SigningPubKey" :"028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
> "TxnSignature" :"30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
> }
> }
> ],
> "SigningPubKey" :"",
> "TransactionType" :"TrustSet",
> "hash" :"BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
> }'
Loading:"/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result":{
"engine_result":"tesSUCCESS",
"engine_result_code":0,
"engine_result_message":"The transaction was applied.Only final in a validated ledger.",
"status":"success",
"tx_blob":"1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1",
"tx_json":{
"Account":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Fee":"30000",
"Flags":262144,
"LimitAmount":{
"currency":"USD",
"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value":"100"
},
"Sequence":2,
"Signers":[{
"Signer":{
"Account":"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SigningPubKey":"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
"TxnSignature":"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
}
}, {
"Signer":{
"Account":"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
"SigningPubKey":"028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
"TxnSignature":"30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
}
}],
"SigningPubKey":"",
"TransactionType":"TrustSet",
"hash":"BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
}
}
}
```
レスポンスの`hash`値をメモしておきます。これにより、後でトランザクションの結果を確認できます。(この例ではハッシュは`BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6`です。)
## 5.レジャーの閉鎖
本番環境のネットワークを使用している場合は、レジャーが自動的に閉鎖するまで47秒待つことがあります。
スタンドアロンモードで`rippled`を実行している場合は、[ledger_acceptメソッド][]を使用してレジャーを手動で閉鎖します。
```
$ rippled ledger_accept
Loading:"/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" :{
"ledger_current_index" :7,
"status" :"success"
}
}
```
## 6.トランザクション結果の確認
`submit_multisigned`コマンドのレスポンスのハッシュ値を使用して、[txメソッド][]でトランザクションを検索します。特に`TransactionResult`が文字列`tesSUCCESS`であることを確認してください。
本番環境のネットワークでは、`validated`フィールドがブール値`true`に設定されていることも確認する必要があります。このフィールドが`true`ではない場合は、コンセンサスプロセスの完了までしばらく待機する必要があるか、または何らかの理由でトランザクションをレジャーに記録できない可能性があります。
スタンドアロンモードでは、サーバは手動で閉鎖されたレジャーを自動的に`validated`とみなします。
```
$ rippled tx BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6
Loading:"/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result":{
"Account":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Fee":"30000",
"Flags":262144,
"LimitAmount":{
"currency":"USD",
"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value":"100"
},
"Sequence":2,
"Signers":[{
"Signer":{
"Account":"rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SigningPubKey":"02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
"TxnSignature":"30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
}
}, {
"Signer":{
"Account":"rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
"SigningPubKey":"028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
"TxnSignature":"30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
}
}],
"SigningPubKey":"",
"TransactionType":"TrustSet",
"date":512172510,
"hash":"BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6",
"inLedger":6,
"ledger_index":6,
"meta":{
"AffectedNodes":[{
"ModifiedNode":{
"LedgerEntryType":"AccountRoot",
"LedgerIndex":"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8",
"PreviousTxnID":"B7E1D33DB7DEA3BB65BFAB2C80E02125F47FCCF6C957A7FDECD915B3EBE0C1DD",
"PreviousTxnLgrSeq":4
}
}, {
"CreatedNode":{
"LedgerEntryType":"RippleState",
"LedgerIndex":"93E317B32022977C77810A2C558FBB28E30E744C68E73720622B797F957EC5FA",
"NewFields":{
"Balance":{
"currency":"USD",
"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji",
"value":"0"
},
"Flags":2162688,
"HighLimit":{
"currency":"USD",
"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"value":"0"
},
"LowLimit":{
"currency":"USD",
"issuer":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"value":"100"
}
}
}
}, {
"ModifiedNode":{
"FinalFields":{
"Account":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"Balance":"999960000",
"Flags":0,
"OwnerCount":6,
"Sequence":3
},
"LedgerEntryType":"AccountRoot",
"LedgerIndex":"A6B1BA6F2D70813100908EA84ABB7783695050312735E2C3665259F388804EA0",
"PreviousFields":{
"Balance":"999990000",
"OwnerCount":5,
"Sequence":2
},
"PreviousTxnID":"8FDC18960455C196A8C4DE0D24799209A21F4A17E32102B5162BD79466B90222",
"PreviousTxnLgrSeq":5
}
}, {
"ModifiedNode":{
"FinalFields":{
"Flags":0,
"Owner":"rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"RootIndex":"C2728175908D82FB1DE6676F203D8D3C056995A9FA9B369EF326523F1C65A1DE"
},
"LedgerEntryType":"DirectoryNode",
"LedgerIndex":"C2728175908D82FB1DE6676F203D8D3C056995A9FA9B369EF326523F1C65A1DE"
}
}, {
"CreatedNode":{
"LedgerEntryType":"DirectoryNode",
"LedgerIndex":"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204",
"NewFields":{
"Owner":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
"RootIndex":"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204"
}
}
}],
"TransactionIndex":0,
"TransactionResult":"tesSUCCESS"
},
"status":"success",
"validated": true
}
}
```
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,233 @@
---
html: set-up-multi-signing.html
parent: manage-account-settings.html
seo:
description: アカウントに署名者リストを追加して、マルチシグを有効にします。
labels:
- セキュリティ
---
# マルチシグの設定
[マルチシグ](../../../concepts/accounts/multi-signing.md)は、XRP Ledgerの[トランザクション](../../../concepts/transactions/index.md)を承認する3種類の方法の1つです。マルチシグの他に[レギュラーキーとマスターキー](../../../concepts/accounts/cryptographic-keys.md)で署名する方法があります。3種類のトランザクション承認方法を自由に組み合わせて使用できるように[アドレス](../../../concepts/accounts/index.md)を設定できます。
このチュートリアルでは、アドレスのマルチシグを有効にする方法を説明します。
## 前提条件
- トランザクションを送信するための十分なXRPが供給されていて、新しい署名者リストの[必要準備金](../../../concepts/accounts/reserves.md)を満たしている資金供給のあるXRP Ledger[アドレス](../../../concepts/accounts/index.md)が必要です。
- [MultiSignReserve Amendment][]が有効な場合、マルチシグを使用するには、使用する署名と署名者の数に関わらず、アカウントの準備金として{% $env.PUBLIC_OWNER_RESERVE %}が必要です。MultiSignReserve Amendmentは**2019年4月7日**以降、本番環境のXRP Ledgerで有効になっています。)
- [MultiSignReserve Amendment][]が有効ではないテストネットワークでは、マルチシグを使用するには[アカウント準備金](../../../concepts/accounts/reserves.md)に通常よりも多くのXRPが必要となります。必要額は、リストの署名者の数に応じて増加します。
- XRP Ledgerフォーマットでキーペアを生成するツールを利用できる必要があります。この処理に`rippled`サーバを使用する場合は、[wallet_proposeメソッド][]が管理者専用であるため、管理者アクセス権限が必要です。
- あるいは、すでにXRP Ledgerアドレスを持っている人をあなたのアドレスの署名者として承認するには、その人または組織のアカウントアドレスを知っている必要があります。
- マルチシグは使用可能である必要があります。MultiSign Amendmentは**2016年6月27日**以降、本番環境のXRP Ledgerで有効になっています。)
## 1. 構成の設計
含めたい署名者の数を決定します最大8。特定のトランザクションに必要な署名の数に基づいて、署名者リストの定数と署名者の重みを選択します。シンプルな「M-of-N」の署名設定では、各署名者に重み **`1`** を割り当て、リストの定数が「M」になるように設定します。これが必要な署名の数です。
## 2. メンバーキーの準備
署名者リストにメンバーとして加える有効な形式のXRP Ledgerアドレスが1つ以上必要です。あなた、またはあなたが選択した署名者は、これらのアドレスに関連付けられた秘密鍵を知っておく必要があります。アドレスは、レジャーに存在する資金供給されたアカウントにすることもできますが、必ずしもそうである必要はありません。
[wallet_proposeメソッド][]を使用して新しいアドレスを生成できます。例:
```
$ rippled wallet_propose
Loading: "/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"account_id" : "rnRJ4dpSBKDR2M1itf4Ah6tZZm5xuNZFPH",
"key_type" : "secp256k1",
"master_key" : "FLOG SEND GOES CUFF GAGE FAT ANTI DEL GUM TIRE ISLE BEAR",
"master_seed" : "snheH5UUjU4CWqiNVLny2k21TyKPC",
"master_seed_hex" : "A9F859765EB8614D26809836382AFB82",
"public_key" : "aBR4hxFXcDNHnGYvTiqb2KU8TTTV1cYV9wXTAuz2DjBm7S8TYEBU",
"public_key_hex" : "03C09A5D112B393D531E4F092E3A5769A5752129F0A9C55C61B3A226BB9B567B9B",
"status" : "success"
}
}
```
生成した各アドレスの`account_id`XRP Ledgerアドレス`master_seed`(シークレットキー)をメモします。
## 3. SignerListSetトランザクションの送信
通常の方法(シングルシグネチャー)で[SignerListSetトランザクション][]に[署名して送信](../../../concepts/transactions/index.md#トランザクションへの署名とトランザクションの送信)します。これによりSignerListがXRP Ledgerのアドレスに関連付けられるので、これ以降はSignerListの複数メンバーがあなたの代わりにトランザクションに署名するマルチシグが可能となります。
この例ではSignerListに3人のメンバーが含まれています。また、マルチシグトランザクションにはrsA2LpzuawewSBQXkiju3YQTMzW13pAAdWの署名と、リストの他の2人のメンバーからの少なくとも1つの署名を必要とするように、重みと定数が設定されています。
{% partial file="/@l10n/ja/docs/_snippets/secret-key-warning.md" /%}
```
$ rippled submit shqZZy2Rzs9ZqWTCQAdqc3bKgxnYq '{
> "Flags": 0,
> "TransactionType": "SignerListSet",
> "Account": "rnBFvgZphmN39GWzUJeUitaP22Fr9be75H",
> "Fee": "10000",
> "SignerQuorum": 3,
> "SignerEntries": [
> {
> "SignerEntry": {
> "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SignerWeight": 2
> }
> },
> {
> "SignerEntry": {
> "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
> "SignerWeight": 1
> }
> },
> {
> "SignerEntry": {
> "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n",
> "SignerWeight": 1
> }
> }
> ]
> }'
Loading: "/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"engine_result" : "tesSUCCESS",
"engine_result_code" : 0,
"engine_result_message" : "The transaction was applied. Only final in a validated ledger.",
"status" : "success",
"tx_blob" : "12000C2200000000240000000120230000000368400000000000271073210303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D74473045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F04281142DECAB42CA805119A9BA2FF305C9AFA12F0B86A1F4EB1300028114204288D2E47F8EF6C99BCC457966320D12409711E1EB13000181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1EB13000181143A4C02EA95AD6AC3BED92FA036E0BBFB712C030CE1F1",
"tx_json" : {
"Account" : "rnBFvgZphmN39GWzUJeUitaP22Fr9be75H",
"Fee" : "10000",
"Flags" : 0,
"Sequence" : 1,
"SignerEntries" : [
{
"SignerEntry" : {
"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 2
}
},
{
"SignerEntry" : {
"Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
"SignerWeight" : 1
}
},
{
"SignerEntry" : {
"Account" : "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n",
"SignerWeight" : 1
}
}
],
"SignerQuorum" : 3,
"SigningPubKey" : "0303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D",
"TransactionType" : "SignerListSet",
"TxnSignature" : "3045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F042",
"hash" : "3950D98AD20DA52EBB1F3937EF32F382D74092A4C8DF9A0B1A06ED25200B5756"
}
}
}
```
[トランザクションの結果](../../../references/protocol/transactions/transaction-results/index.md)が[**tesSUCCESS**](../../../references/protocol/transactions/transaction-results/tes-success.md)であることを確認します。それ以外の場合、トランザクションは失敗しています。スタンドアロンモードまたは本番環境以外のネットワークで問題が発生した場合は、[マルチシグが有効であること](../../../infrastructure/testing-and-auditing/start-a-new-genesis-ledger-in-stand-alone-mode.md#新しいジェネシスレジャーの設定)を確認してください。
{% admonition type="info" name="注記" %}[MultiSignReserve Amendment][]が有効ではない場合は、SignerListのメンバーの増加に応じて、アドレスの[所有者準備金](../../../concepts/accounts/reserves.md#所有者準備金)のXRP額を増加する必要があります。アドレスに十分なXRPがないと、トランザクションは[tecINSUFFICIENT_RESERVE](../../../references/protocol/transactions/transaction-results/tec-codes.md)で失敗します。[MultiSignReserve Amendment][]が有効な場合は、SignerListの署名者の数に関係なく[所有者準備金](../../../concepts/accounts/reserves.md#所有者準備金)として必要なXRPは5 XRPです。関連項目: [SignerListと準備金](../../../references/protocol/ledger-data/ledger-entry-types/signerlist.md#signerlistと準備金){% /admonition %}
## 4. 検証の待機
{% partial file="/@l10n/ja/docs/_snippets/wait-for-validation.md" /%}
## 5. 新しい署名者リストの確認
[account_objectsメソッド][]を使用して、SignerListに最新の検証済みレジャーのアドレスが関連付けられていることを確認します。
通常、アカウントは異なるタイプのオブジェクトトラストラインやオファーなどを複数所有できます。このチュートリアルで新しいアドレスに資金を供給した場合、SignerListがレスポンスの唯一のオブジェクトになります。
```
$ rippled account_objects rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC validated
Loading: "/etc/opt/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{
"result" : {
"account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
"account_objects" : [
{
"Flags" : 0,
"LedgerEntryType" : "SignerList",
"OwnerNode" : "0000000000000000",
"PreviousTxnID" : "8FDC18960455C196A8C4DE0D24799209A21F4A17E32102B5162BD79466B90222",
"PreviousTxnLgrSeq" : 5,
"SignerEntries" : [
{
"SignerEntry" : {
"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 2
}
},
{
"SignerEntry" : {
"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 2
}
},
{
"SignerEntry" : {
"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
"SignerWeight" : 2
}
}
],
"SignerListID" : 0,
"SignerQuorum" : 3,
"index" : "79FD203E4DDDF2EA78B798C963487120C048C78652A28682425E47C96D016F92"
}
],
"ledger_hash" : "56E81069F06492FB410A70218C08169BE3AB3CFD5AEA20E999662D81DC361D9F",
"ledger_index" : 5,
"status" : "success",
"validated" : true
}
}
```
SignerListが予期した内容で存在していれば、アドレスでマルチシグができるようになります。
## 6. その他のステップ
これで、アドレスから[マルチシグトランザクションを送信](send-a-multi-signed-transaction.md)できます。次の操作も実行できます。
* `asfDisableMaster`フラグを使用して[AccountSetトランザクション][]を送信し、アドレスのマスターキーペアを無効化。
* [SetRegularKeyトランザクション][]を送信して[アドレスのレギュラーキーペアを削除](change-or-remove-a-regular-key-pair.md)(レギュラーキーペアをすでに設定している場合)。
## 関連項目
- **コンセプト:**
- [暗号鍵](../../../concepts/accounts/cryptographic-keys.md)
- [マルチシグ](../../../concepts/accounts/multi-signing.md)
- **チュートリアル:**
- [rippledのインストール](../../../infrastructure/installation/index.md)
- [レギュラーキーペアの割り当て](assign-a-regular-key-pair.md)
- [信頼できるトランザクションの送信](../../../concepts/transactions/reliable-transaction-submission.md)
- [パブリック署名の有効化](../../../infrastructure/configuration/enable-public-signing.md)
- **リファレンス:**
- [wallet_proposeメソッド][]
- [account_objectsメソッド][]
- [sign_forメソッド][]
- [submit_multisignedメソッド][]
- [SignerListSetトランザクション][]
- [SignerListオブジェクト](../../../references/protocol/ledger-data/ledger-entry-types/signerlist.md)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -20,7 +20,7 @@ steps: ['Generate', 'Connect', 'Check Sequence', 'Prepare & Sign', 'Submit', 'Wa
<script type="application/javascript" src="/js/interactive-tutorial.js"></script>
<script type="application/javascript" src="/js/tutorials/use-tickets.js"></script>
このページでは、[xrpl.js](https://js.xrpl.org/)ライブラリを使用したJavaScriptのサンプルを提供しています。設定方法は、[JavaScriptを使ってみよう](/docs/tutorials/get-started/get-started-javascript.md)をご覧ください。
このページでは、[xrpl.js](https://js.xrpl.org/)ライブラリを使用したJavaScriptのサンプルを提供しています。設定方法は、[JavaScriptを使ってみよう](../../javascript/build-apps/get-started.md)をご覧ください。
JavaScriptはWebブラウザ上で動作するため、セットアップなしで読み進められ、インタラクティブな手順を利用することができます。

View File

@@ -23,7 +23,7 @@ steps: ['Generate', 'Connect', 'Prepare', 'Sign', 'Submit', 'Wait', 'Check']
<script type="application/javascript" src="/js/interactive-tutorial.js"></script>
<script type="application/javascript" src="/js/tutorials/send-xrp.js"></script>
- このページでは、xrpl.jsライブラリーを使用するJavaScriptの例を紹介します。[xrpl.js入門ガイド](/docs/tutorials/get-started/get-started-javascript.md)に、xrpl.jsを使用してJavaScriptからXRP Ledgerデータにアクセスする方法の説明があります。
- このページでは、xrpl.jsライブラリーを使用するJavaScriptの例を紹介します。[xrpl.js入門ガイド](../javascript/build-apps/get-started.md)に、xrpl.jsを使用してJavaScriptからXRP Ledgerデータにアクセスする方法の説明があります。
- XRP Ledgerでトランザクションを送信するには、まずアドレスと秘密鍵、そしていくらかのXRPが必要となります。次のインターフェイスを使用して、XRP Test NetにあるアドレスとTestnet XRPを入手できます。

View File

@@ -0,0 +1,12 @@
---
html: use-specialized-payment-types.html
parent: tasks.html
metadata:
indexPage: true
---
# 高度な支払い機能の利用
EscrowやPayment Channelなどの高度な機能を使用して、XRP Ledgerでスマートアプリケーションを構築しましょう。
{% child-pages /%}

View File

@@ -0,0 +1,18 @@
---
html: use-checks.html
parent: use-specialized-payment-types.html
seo:
description: XRP LedgerのCheckは、紙の小切手と同じように、別のアカウントに資金を振り込ませることができます。
metadata:
indexPage: true
labels:
- Checks
---
# Checkの使用
XRP LedgerのChecksでは、別のアカウントが後で支払いを請求することが認められていており、個人用の紙の小切手の仕組みと似ています。
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}
{% child-pages /%}

View File

@@ -0,0 +1,12 @@
---
html: use-escrows.html
parent: use-specialized-payment-types.html
metadata:
indexPage: true
---
# Escrowの使用
XRP Ledgerは、一定時間の経過後か暗号条件が満たされた場合にのみ実行されるEscrowをサポートします。Escrowが送金できるのはXRPのみで、トークンは送金できません。
{% child-pages /%}

View File

@@ -0,0 +1,12 @@
---
html: use-tokens.html
parent: tasks.html
metadata:
indexPage: true
---
# トークンの利用
XRP Ledgerでトークン(代替型やそれ以外)を発行し、取引しましょう
{% child-pages /%}

View File

@@ -0,0 +1,113 @@
---
html: get-started-using-http-websocket-apis.html
parent: http-websocket-apis-tutorials.html
seo:
description: XRP Ledgerの操作に使用できるAPIとライブラリを使い始めましょう。
cta_text: 開始しよう
top_nav_name: HTTP / WebSocket
top_nav_grouping: 始めましょう
labels:
- 開発
showcase_icon: assets/img/logos/globe.svg
---
# HTTP / WebSocket APIの使用開始
自分の好みのプログラミング言語の[クライアント・ライブラリ](../../references/client-libraries.md)を持っていなかったり、使いたくなかったりする場合は、XRP Ledgerのコアサーバソフトウェアである[`rippled`](../../concepts/networks-and-servers/index.md)のAPIを通して直接XRP Ledgerにアクセスすることができます。このサーバはJSON-RPCとWebSocketプロトコルでAPIを提供します。もし`rippled`(install-rippled.html)のインスタンスを実行しない場合でも、[公開サーバ][public servers]を利用することができます。
{% admonition type="success" name="ヒント" %}[**WebSocket API ツール**](/resources/dev-tools/websocket-api-tool)を使ってAPIを利用することもできますし、[XRP Ledger Explorer](https://livenet.xrpl.org/)を使ってレジャーの進捗をライブで見ることもできます。{% /admonition %}
## JSON-RPCとWebSocketの違い
JSON-RPCとWebSocketはどちらもHTTPベースのプロトコルであり、ほとんどの場合、両方のプロトコルで提供されるデータは同じです。主な違いは次の通りです。
- JSON-RPCは、RESTful APIと同様に、呼び出しごとに個別のHTTPリクエストとレスポンスを使用します。このAPIにアクセスするには、[curl](https://curl.se/)、[Postman](https://www.postman.com/downloads/)、[Requests](https://requests.readthedocs.io/)などの一般的なHTTPクライアントを使用できます。
- WebSocketは、サーバがクライアントにデータをプッシュできる持続的な接続を使用します。[イベント購読](../../references/http-websocket-apis/public-api-methods/subscription-methods/subscribe.md)のようなプッシュメッセージを必要とする機能は、WebSocketを使用してのみ利用可能です。
どちらのAPIも暗号化されていない接続(`http://``ws://`)とTLSを使って暗号化された接続(`https://``wss://`)があります。暗号化されていない接続はオープンネットワーク上で提供すべきではありませんが、クライアントがサーバと同じマシン上にある場合は使用できます。
## 管理者アクセス権限
`rippled`サーバの[管理メソッド](../../references/http-websocket-apis/admin-api-methods/index.md)を使用するには、次のように行います。この場合、サーバのバインド用として設定したIPアドレスとポートを使用する必要があります例えば`127.0.0.1:54321`)。また、管理機能にアクセスするには、構成ファイルで**管理用としてマークされているポートおよびIPアドレス**から接続しなければなりません。
[構成ファイルの例](https://github.com/XRPLF/rippled/blob/8429dd67e60ba360da591bfa905b58a35638fda1/cfg/rippled-example.cfg#L1050-L1073)では、ローカルループバックネットワーク上127.0.0.1のポート5005でJSON-RPCHTTP、ポート6006でWebSocketWSの接続をリッスンし、接続されるすべてのクライアントを管理者として扱っています。
## WebSocket API
いくつかのメソッドをXRP Ledgerで試すことを予定している場合は、独自のWebSocketコードを記述することなく、[WebSocket APIツール](/resources/dev-tools/websocket-api-tool)でAPIをすぐに使用できます。後ほど、独自の`rippled`サーバへの接続が必要となった時点で、Web Socket接続をサポートした[独自のクライアントを構築](monitor-incoming-payments-with-websocket.md)したり[クライアントライブラリ](../../references/client-libraries.md)を利用することが可能です。
WebSocket APIによるリクエストの例:
```json
{
"id": "my_first_request",
"command": "server_info",
"api_version": 1
}
```
レスポンスには、サーバの現在のステータスが表示されます。
さらに見る: [リクエストのフォーマット >](../../references/http-websocket-apis/api-conventions/request-formatting.md) [レスポンスのフォーマット >](../../references/http-websocket-apis/api-conventions/response-formatting.md) [server_infoメソッドについて >][server_infoメソッド]
## JSON-RPC
任意のHTTPクライアント[RESTED for Firefox](https://addons.mozilla.org/en-US/firefox/addon/rested/)、[Postman for Chrome](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en)、[Online HTTP client ExtendsClass](https://extendsclass.com/rest-client-online.html)などを使用して、JSON-RPCで`rippled`サーバを呼び出すことができます。ほとんどのプログラミング言語には、HTTPリクエストを組み込むためのライブラリが用意されています。
JSON-RPCによるリクエストの例:
```json
POST http://s1.ripple.com:51234/
Content-Type: application/json
{
"method": "server_info",
"params": [
{
"api_version": 1
}
]
}
```
レスポンスには、サーバの現在のステータスが表示されます。
さらに見る: [リクエストのフォーマット >](../../references/http-websocket-apis/api-conventions/request-formatting.md#json-rpcフォーマット) [レスポンスのフォーマット >](../../references/http-websocket-apis/api-conventions/response-formatting.md) [server_infoメソッドについて >][server_infoメソッド]
## コマンドライン
このコマンドラインインターフェイスは、JSON-RPCのものと同一のサービスに接続するため、公開サーバおよびサーバ構成は同一です。コマンドラインクライアントとして、`rippled`がローカルインスタンスに接続します。
コマンドラインによるリクエストの例:
```
rippled --conf=/etc/rippled.cfg server_info
```
さらに見る: [dコマンドライン使用リファレンス >](../../infrastructure/commandline-usage.md)
{% admonition type="info" name="注記" %}コマンドラインインターフェイスは、管理の目的でのみ使用されることを想定しており _サポートされるAPIではありません_`rippled`の将来のバージョンでは、警告なしにコマンドラインAPIに破壊的変更を加える可能性があります{% /admonition %}
## 利用可能なメソッド
APIメソッドの完全なリストについては、こちらをご覧ください。
- [パブリックな`rippled`メソッド](../../references/http-websocket-apis/public-api-methods/index.md): レジャーからのデータの検索やトランザクションの送信など、パブリックサーバで利用可能なメソッドです。
- [管理用`rippled`メソッド](../../references/http-websocket-apis/admin-api-methods/index.md): [管理者向け](../../infrastructure/installation/install-rippled-on-ubuntu.md)の`rippled`サーバを管理するためのメソッドです。
## 関連項目
- **コンセプト:**
- [XRP Ledgerの概要](/about/)
- [ソフトウェアエコシステム](../../introduction/software-ecosystem.md)
- [並列ネットワーク](../../concepts/networks-and-servers/parallel-networks.md)
- **チュートリアル:**
- [JavaScriptの使用開始](get-started.md)
- [信頼できるトランザクションの送信](../../concepts/transactions/reliable-transaction-submission.md)
- [rippledサーバの管理](../../infrastructure/installation/install-rippled-on-ubuntu.md)
- **リファレンス:**
- [rippled APIリファレンス](../../references/http-websocket-apis/index.md)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,13 @@
---
html: http-websocket-apis-tutorials.html
parent: tutorials.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# HTTP / Websocket API
HTTP / Websocket APIのXRPLチュートリアルです。
{% child-pages /%}

View File

@@ -12,16 +12,30 @@ XRP Ledgerを学び、使い始め、そして高度なユースケースで使
{% card-grid %}
{% xrpl-card title="Javascript" body="クライアントライブラリxrpl.jsを使用" href="/docs/tutorials/get-started/get-started-javascript/" image="/img/logos/javascript.svg" imageAlt="Javascript logo" /%}
{% xrpl-card title="Javascript" body="クライアントライブラリxrpl.jsを使用" href="/docs/tutorials/javascript/" image="/img/logos/javascript.svg" imageAlt="Javascript logo" /%}
{% xrpl-card title="Python" body="Pythonライブラリxrpl.pyを使用" href="/docs/tutorials/get-started/get-started-python/" image="/img/logos/python.svg" imageAlt="Python logo" /%}
{% xrpl-card title="Python" body="Pythonライブラリxrpl.pyを使用" href="/docs/tutorials/python/" image="/img/logos/python.svg" imageAlt="Python logo" /%}
<br/>
{% xrpl-card title="Java" body="Javaライブラリを使用" href="/docs/tutorials/get-started/get-started-java/" image="/img/logos/java.svg" imageAlt="Java logo" /%}
{% xrpl-card title="Java" body="Javaライブラリを使用" href="/docs/tutorials/java/" image="/img/logos/java.svg" imageAlt="Java logo" /%}
{% xrpl-card title="PHP" body="PHPライブラリXRPL_PHPを使用" href="/docs/tutorials/get-started/get-started-php/" image="/img/logos/php.svg" imageAlt="PHP logo" /%}
{% xrpl-card title="PHP" body="PHPライブラリXRPL_PHPを使用" href="/docs/tutorials/php/" image="/img/logos/php.svg" imageAlt="PHP logo" /%}
{% xrpl-card title="HTTP & WebSocket API" body="コアサーバのAPIを通じてXRP Ledgerに直接アクセス" href="/docs/tutorials/http-websocket-apis/" image="/img/logos/globe.svg" imageAlt="globe icon" /%}
{% /card-grid %}
## 使い方
これらの例では、順を追って操作方法を説明しています。
{% card-grid %}
{% xrpl-card title="アカウントの設定" body="XRP Ledgerアカウントを設定して、自由に支払いを行いましょう。" href="/docs/tutorials/how-tos/manage-account-settings/" /%}
{% xrpl-card title="高度な支払い機能" body="エスクローやペイメントチャネルなどの高度な支払い機能を使って、XRP Ledger上に新しいアプリケーションを構築しましょう。" href="/docs/tutorials/how-tos/use-specialized-payment-types/" /%}
{% xrpl-card title="トークンの利用" body="XRP Ledgerでトークン(代替可能またはそれ以外)を作成し、取引しましょう。" href="/docs/tutorials/how-tos/use-tokens/" /%}
{% xrpl-card title="XRPLサイドチェーンの利用" body="メインネットからXRPLサイドチェーンにXRPやトークンをブリッジしましょう。" href="/docs/tutorials/how-tos/use-xrpl-sidechains/" /%}
{% /card-grid %}

View File

@@ -0,0 +1,13 @@
---
html: java.html
parent: tutorials.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# Java
JavaでのXRPLチュートリアルです。
{% child-pages /%}

View File

@@ -0,0 +1,174 @@
---
html: get-started-using-javascript.html
parent: javascript.html
seo:
description: XRP Ledgerを参照するためのエントリレベルのJavaScriptアプリケーションを構築します。
top_nav_name: JavaScript
top_nav_grouping: 始めましょう
labels:
- 開発
showcase_icon: assets/img/logos/javascript.svg
---
# JavaScriptを使ってみよう
このチュートリアルでは、JavaScriptまたはTypeScript向けのクライアントライブラリである [`xrpl.js`](https://github.com/XRPLF/xrpl.js/) を使用して、Node.jsまたはウェブブラウザでXRP Ledgerに接続されたアプリケーションを構築するための基本的な手順を説明します。
本ガイドで使用しているスクリプトや設定ファイルは、{% repo-link path="_code-samples/get-started/js/" %}本サイトのGitHubリポジトリ{% /repo-link %}で公開されています。
## 学習目標
このチュートリアルでは、以下のことを学びます。
* XRP Ledgerベースのアプリケーションの基本構成要素。
* xrpl.jsを使ったXRP Ledgerへの接続方法。
* xrpl.jsを使った[テストネット](/resources/dev-tools/xrp-faucets)でのウォレット生成方法。
* `xrpl.js`ライブラリを使った、XRP Ledgerアカウント情報の検索方法。
* How to put these steps together to create a simple JavaScript app or web-app.
## 前提条件
このチュートリアルを実行するには、JavaScriptでコードを書き、小さなJavaScriptプロジェクトを管理することにある程度慣れている必要があります。ブラウザでは、JavaScriptをサポートする最新のWebブラウザであれば問題なく使用できます。Node.jsでは、**バージョン14**を推奨します。Node.jsのバージョン12と16も定期的にテストされています。
## npmを使用したインストール
空のフォルダを作成して新しいプロジェクトを開始し、そのフォルダに移動して[NPM](https://www.npmjs.com/)で最新版のxrpl.jsをインストールします。
```sh
npm install xrpl
```
## 作り始めましょう
XRP Ledgerを使用する際には、XRPを[ウォレット](../../introduction/crypto-wallets.md)に追加したり、[分散型取引所](../../concepts/tokens/decentralized-exchange/index.md)と統合したり、[トークンを発行](../../concepts/tokens/index.md)したりと、管理しなければならないことがいくつかあります。このチュートリアルでは、これらすべてのユースケースを始めるための共通の基本パターンを説明し、それらを実装するためのサンプルコードを提供します。
多くのXRP Ledgerプロジェクトで使用している手順をご紹介します。
1. [ライブラリのインポート](#1-ライブラリのインポート)
1. [XRP Ledgerへの接続](#2-xrp-ledgerへの接続)
1. [ウォレットの作成](#3-ウォレットの作成)
1. [XRP Ledgerの参照](#4-xrp-ledgerの参照)
1. [イベントのListen](#5-イベントのlisten)
### 1. ライブラリのインポート
プロジェクトに `xrpl.js` をどのように読み込むかは、開発環境によって異なります。
#### ブラウザ
以下のような`<script>`タグをHTMLに追加してください。
```html
<script src="https://unpkg.com/xrpl@2.0.0/build/xrpl-latest-min.js"></script>
```
上記の例のようにCDNからライブラリをロードすることも、リリースをダウンロードして自分のウェブサイトでホストすることもできます。
これは、モジュールを `xrpl` としてトップレベルにロードします。
#### Node.js
[npm](https://www.npmjs.com/)を使って、ライブラリを追加します。これにより、`package.json`ファイルが更新されます。まだ存在していなければ新しいファイルが作成されます。
```sh
npm install xrpl
```
その後、ライブラリをインポートします。
```js
const xrpl = require("xrpl")
```
### 2. XRP Ledgerへの接続
参照や取引を行うには、XRP Ledgerへの接続を確立する必要があります。`xrpl.js`でこれを行うには、`Client`クラスのインスタンスを作成し、`connect()`メソッドを使用します。
{% admonition type="success" name="Tip" %}`xrpl.js` の多くのネットワーク関数は、[Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)を使って非同期に値を返します。ここで紹介するコードサンプルでは、[`async/await` パターン](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await)を使用して、Promises の実際の結果を待ちます。{% /admonition %}
{% code-snippet file="/_code-samples/get-started/js/base.js" language="js" /%}
#### XRP Ledger メインネットへの接続
前節のサンプルコードでは、利用可能な[並列ネットワーク](../../concepts/networks-and-servers/parallel-networks.md)の1つであるTestnetに接続する方法を紹介しました。本番環境に移行するには、XRP Ledger Mainnetに接続する必要があります。それには2つの方法があります。
* [コアサーバをインストール](../../infrastructure/installation/index.md) (`rippled`)して、自分でードを動かしてみましょう。コアサーバはデフォルトではMainnetに接続しますが、設定を変更してTestnetやDevnetを使うこともできます](connect-your-rippled-to-thexrp-test-net.html)。[独自のコアサーバを運用するのには良い理由があります](../../concepts/networks-and-servers/index.md#reasons-to-run-your-own-server)。独自のサーバを走らせた場合、次のようにして接続することができます。
```
const MY_SERVER = "ws://localhost:6006/"
const client = new xrpl.Client(MY_SERVER)
await client.connect()
```
デフォルト値の詳細については、[コアサーバ設定ファイル](https://github.com/XRPLF/rippled/blob/c0a0b79d2d483b318ce1d82e526bd53df83a4a2c/cfg/rippled-example.cfg#L1562)の例をご覧ください。
* 利用可能な[公開サーバ][]を利用する:
```
const PUBLIC_SERVER = "wss://xrplcluster.com/"
const client = new xrpl.Client(PUBLIC_SERVER)
await client.connect()
```
### 3. ウォレットの作成
`xrpl.js` ライブラリには、XRP Ledgerアカウントのキーとアドレスを扱うための "Wallet "クラスが用意されています。Testnetでは、次のようにして新しいウォレットに資金を供給することができます。
{% code-snippet file="/_code-samples/get-started/js/get-acct-info.js" from="// Create a wallet" before="// Get info" language="js" /%}
キーを生成するだけであれば、次のように新しいWalletインスタンスを作成することができます。
```js
const test_wallet = xrpl.Wallet.generate()
```
また、[base58][]でエンコードされたシードをすでに持っている場合は、次のようにしてそのシードからWalletをインスタンス化することができます。
```js
const test_wallet = xrpl.Wallet.fromSeed("sn3nxiW7v8KXzPzAqzyHXbSSKNuN9") // テスト用シークレット、本番環境では使用しないでください
```
### 4. XRP Ledgerの参照
クライアントの`request()`メソッドを使って、XRP Ledgerの[WebSocket API](../../references/http-websocket-apis/api-conventions/request-formatting.md)にアクセスします。例えば、以下のようになります。
{% code-snippet file="/_code-samples/get-started/js/get-acct-info.js" from="// Get info" before="// Listen to ledger close events" language="js" /%}
### 5. イベントのListen
XRP Ledgerの[コンセンサス プロセス](../../concepts/consensus-protocol/index.md)が新しい[レジャーバージョン](../../concepts/ledgers/index.md)を生成したときなど、`xrpl.js`ではさまざまなタイプのイベントのハンドラを設定することができます。そのためには、まず[subscribeメソッド][]を呼び出して欲しいイベントの種類を取得し、クライアントの`on(eventType, callback)`メソッドを使ってイベントハンドラをアタッチします。
{% code-snippet file="/_code-samples/get-started/js/get-acct-info.js" from="// Listen to ledger close events" before="// Disconnect when done" language="js" /%}
## 作り続けましょう
これで、`xrpl.js`を使って、XRP Ledgerに接続したり、ウォレットを生成したり、アカウントの情報を調べたりする方法がわかりました。
次のようなことも可能です。
* [XRPの送信](../how-tos/send-xrp.md).
* [代替可能トークンの発行](../how-tos/use-tokens/issue-a-fungible-token.md)
* アカウントに[安全な署名](../../concepts/transactions/secure-signing.md) を設定する。
## 関連記事
- **概念:**
- [XRP Ledger Overview](/about/)
- [クライアントライブラリ](../../references/client-libraries.md)
- **Tutorials:**
- [XRPの送信](../how-tos/send-xrp.md)
- **References:**
- [`xrpl.js` リファレンス](https://js.xrpl.org/)
- [Public API Methods](../../references/http-websocket-apis/public-api-methods/index.md)
- [API規約](../../references/http-websocket-apis/api-conventions/index.md)
- [base58 エンコード](../../references/protocol/data-types/base58-encodings.md)
- [トランザクションフォーマット](../../references/protocol/transactions/index.md)
{% raw-partial file="/@l10n/ja/docs/_snippets/common-links.md" /%}

View File

@@ -0,0 +1,13 @@
---
html: javascript.html
parent: tutorials.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# JavaScript
JavaScriptでのXRPLチュートリアルです。
{% child-pages /%}

View File

@@ -0,0 +1,13 @@
---
html: nfts-using-javascript.html
parent: modular-tutorials-in-javascript.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# JavaScriptを使ったNFT
XRP Ledger上でNFTのミントと販売を行います。
{% child-pages /%}

View File

@@ -0,0 +1,13 @@
---
html: python.html
parent: tutorials.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
---
# Python
PythonでのXRPLチュートリアルです。
{% child-pages /%}

View File

@@ -72,9 +72,9 @@ XRP Ledgerの分散型取引所(DEX)には、「アルゴリズムトレード
### トレードの発注
XRP Ledgerの分散型取引所で _代替可能_ トークンとXRPを売買するには、通常[OfferCreateトランザクション](../../references/protocol/transactions/types/offercreate.md)を送信します。この方法でトレードを行うためのコードと技術的ステップの詳細なウォークスルーについては、[分散型取引所でのトレード](../../tutorials/defi/dex/trade-in-the-decentralized-exchange.md)をご覧ください。[Paymentトランザクション](../../references/protocol/transactions/types/payment.md)を使用して通貨を両替することも可能です。[クロスカレンシー支払い](../../concepts/payment-types/cross-currency-payments.md)を他のユーザに送ったり、長い[パス](../../concepts/tokens/fungible-tokens/paths.md)を使って裁定取引の機会を1つの操作にまとめることで、自分自身に送り返すこともできます。
XRP Ledgerの分散型取引所で _代替可能_ トークンとXRPを売買するには、通常[OfferCreateトランザクション](../../references/protocol/transactions/types/offercreate.md)を送信します。この方法でトレードを行うためのコードと技術的ステップの詳細なウォークスルーについては、[分散型取引所でのトレード](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md)をご覧ください。[Paymentトランザクション](../../references/protocol/transactions/types/payment.md)を使用して通貨を両替することも可能です。[クロスカレンシー支払い](../../concepts/payment-types/cross-currency-payments.md)を他のユーザに送ったり、長い[パス](../../concepts/tokens/fungible-tokens/paths.md)を使って裁定取引の機会を1つの操作にまとめることで、自分自身に送り返すこともできます。
NFTをトレードするためのコードと技術的な手順については、[JavaScriptを使用したNFTokenの送信](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTをトレードするためのコードと技術的な手順については、[JavaScriptを使用したNFTokenの送信](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
### トレードデータの確認
@@ -89,7 +89,7 @@ XRP Ledgerのトレード活動に関する情報源は数多くあります。
XRP Ledgerは既存の中央指値注文ベース(CLOB)の分散型取引所と連携するネイティブな自動マーケットメーカー(AMM)の機能をネイティブサポートしています。AMMはXRP Ledger上のトレードにおいて重要な要素となっています。詳しくは以下のリンクをご覧ください。
- [自動マーケットメーカー](../../concepts/tokens/decentralized-exchange/automated-market-makers.md)
- [AMMのオークションスロットを利用して低い取引手数料でトレードする](/docs/tutorials/defi/dex/add-assets-to-amm-in-javascript.md)
- [AMMのオークションスロットを利用して低い取引手数料でトレードする](../../tutorials/javascript/amm/add-assets-to-amm.md)
- [XLS-30 標準規格](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0030-automated-market-maker#readme)
## さらに詳しく

View File

@@ -0,0 +1,15 @@
---
html: payments-uc.html
parent: use-cases.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
seo:
description: XRP Ledgerで様々なタイプの支払いを利用するための実例を紹介します。
---
# Payment
XRP Ledgerで様々なタイプの支払いを利用するための実例を紹介します。
{% child-pages /%}

View File

@@ -37,7 +37,7 @@ XRP Ledger上のスマートコントラクトは、条件付きで保有する
オラクルのプログラムが条件を満たしたことを検知した後、エスクローの受取人にfulfillmentの16進数値を渡します。この時点以降、オラクルはエスクローを終了させるなど、何も行いません。エスクローの受取人は、ほとんどの場合、エスクローを終了することになります。
[条件に基づくEscrowの送信](../../tutorials/payments/send-a-conditional-escrow.md)をご覧ください。
[条件に基づくEscrowの送信](../../tutorials/how-tos/use-specialized-payment-types/use-escrows/send-a-conditional-escrow.md)をご覧ください。
## 例

View File

@@ -12,7 +12,7 @@ _私は認可Minterとして、トークン発行者のために合意された
トークン発行者の認可Minterとして活動することができます。この場合、NFTの所有者はあなたになりますが、ロイヤリティはNFTokenの発行者に送られます。そのNFTokenを販売すると、最初の販売収益はあなたのものになります。発行者と合意の上、初回売却額の一部または全部を発行者に支払うことも可能です。
詳しくは、チュートリアル[認可Minterの割り当て](../../tutorials/tokens/nfts/assign-an-authorized-minter-js.md)をご覧ください。
詳しくは、チュートリアル[認可Minterの割り当て](../../tutorials/javascript/nfts/assign-an-authorized-minter.md)をご覧ください。
[![認可Minterのフロー](/docs/img/nft-mkt-auth-minter.png "認可Minterのフロー")](/docs/img/nft-mkt-auth-minter.png)
@@ -26,7 +26,7 @@ NFTを自分で設計するのではなく、NFTクリエイターと連携し
NFTの作成を終了すると、作成者は認可Minterの権限を取り消し、NFTに対する権限を取り戻すことができます。また、NFTの販売を行うマーケットプレイスにトークンを譲渡することもできます。あなたは、売りオファーと買いオファーのマッチングを行うブローカーとして機能することができます。[NFTオークションの実行](../../concepts/tokens/nfts/running-an-nft-auction.md)をご覧ください。
他のアカウントに代わって最初のNFTをミントする場合は、[他アカウントからのNFTミントを許可する](../../tutorials/tokens/nfts/assign-an-authorized-minter-js.md)をご覧ください。
他のアカウントに代わって最初のNFTをミントする場合は、[他アカウントからのNFTミントを許可する](../../tutorials/javascript/nfts/assign-an-authorized-minter.md)をご覧ください。
発行者として将来的にトークンをバーンできるようにしたい場合は、`Flags`フィールドを _1_ に設定します。NFTを譲渡可能にするには、`Flags`フィールドを _8_ に設定します。NFTをバーン可能かつ譲渡可能にするには、`Flags`フィールドを _9_ に設定します。[Burnableフラグ](../../references/protocol/data-types/nftoken.md#nftoken-flags)および[Transferableフラグ](../../references/protocol/data-types/nftoken.md#nftoken-flags)をご覧ください。
@@ -43,11 +43,11 @@ TokenTaxonフィールドを使用して、特定のテーマや目的に基づ
## NFTの取引
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
NFTをオークション形式で販売することができます。[NFTオークションの実行](../../concepts/tokens/nfts/running-an-nft-auction.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、販売価格の一部を報酬として得ることもできます。[NFTokenの取引を仲介する](../../tutorials/tokens/nfts/broker-an-nft-sale-js.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、販売価格の一部を報酬として得ることもできます。[NFTokenの取引を仲介する](../../tutorials/javascript/nfts/broker-an-nft-sale.md)をご覧ください。
### 準備金要件
@@ -65,9 +65,9 @@ NFTをオークション形式で販売することができます。[NFTオー
### 支払い
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/defi/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
## NFTのインデックス

View File

@@ -18,7 +18,7 @@ NFTokenを作成すると、実際の物理的またはデジタル資産の実
[Xaman](https://xaman.app)などのアプリを使用してNFTokenを作成することができます。
より実践的な体験をしたい方は、[クイックスタート・チュートリアル3 - NFTokenのミントとバーン](../../tutorials/tokens/nfts/mint-and-burn-nfts-js.md)をご覧ください。
より実践的な体験をしたい方は、[クイックスタート・チュートリアル3 - NFTokenのミントとバーン](../../tutorials/javascript/nfts/mint-and-burn-nfts.md)をご覧ください。
[![デジタルアーティストのフロー](/docs/img/nft-mkt-digital-artist.png "デジタルアーティストのフロー")](/docs/img/nft-mkt-digital-artist.png)
@@ -38,13 +38,13 @@ NFTをミントして販売することで、マーケットプレイスを構
* `TokenTaxon`フィールドを使用すると、NFTを論理的なコレクションとしてミントすることができます。[NFTをコレクションとしてミントする](../../concepts/tokens/nfts/collections.md)をご覧ください。
* 発行者として将来的にトークンをバーンできるようにしたい場合は、`Flags`フィールドを _1_ に設定します。NFTを譲渡可能にするには、`Flags`フィールドを _8_ に設定します。NFTをバーン可能かつ譲渡可能にするには、`Flags`フィールドを _9_ に設定します。[Burnableフラグ](../../references/protocol/data-types/nftoken.md#nftoken-flags)および[Transferableフラグ](../../references/protocol/data-types/nftoken.md#nftoken-flags)をご覧ください。
[NFTokenのミントとバーン](../../tutorials/tokens/nfts/mint-and-burn-nfts-js.md)をご覧ください。
[NFTokenのミントとバーン](../../tutorials/javascript/nfts/mint-and-burn-nfts.md)をご覧ください。
## NFTの販売
NFTを売却する場合は、売却オファーを作成する必要があります。[NFTokensの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTを売却する場合は、売却オファーを作成する必要があります。[NFTokensの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
NFTをオークション形式で販売することができます。[NFTオークションの実行](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTをオークション形式で販売することができます。[NFTオークションの実行](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
### 準備金要件
@@ -62,9 +62,9 @@ NFTをオークション形式で販売することができます。[NFTオー
### 支払い
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md))をご覧ください。
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md))をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/defi/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
## NFTのインデックス化

View File

@@ -0,0 +1,15 @@
---
html: tokenization.html
parent: use-cases.html
top_nav_grouping: カテゴリ
metadata:
indexPage: true
seo:
description: XRP Ledgerが対応する様々なトークンを使用できます。
---
# Tokenization
XRP Ledgerが対応する様々なトークンを使用できます。
{% child-pages /%}

View File

@@ -52,7 +52,7 @@ NFTビジネスを始めるにあたって、必要不可欠な4つの準備項
NFTをいくつかミントして販売することで、マーケットプレイスを構築し始めることができます。
最初のNFTを作成するには、チュートリアル _NFTonenのミントとバーン_ の指示に従います。[NFTのミントとバーン](../../tutorials/tokens/nfts/mint-and-burn-nfts-js.md)をご覧ください。
最初のNFTを作成するには、チュートリアル _NFTonenのミントとバーン_ の指示に従います。[NFTのミントとバーン](../../tutorials/javascript/nfts/mint-and-burn-nfts.md)をご覧ください。
NFTokenのURLは、NFTのコンテンツが保存されている場所へのリンクです。IPFSアカウントを作成し、永続的なURLにNFTokenのコンテンツを保存するのも1つの方法です。[NFTデータ保存のベストプラクティス](https://docs.ipfs.io/how-to/best-practices-for-nft-data)をご覧ください。
@@ -81,11 +81,11 @@ NFTokenのURLは、NFTのコンテンツが保存されている場所へのリ
### NFTの取引
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
NFTをオークション形式で販売することができます。[NFTオークションの実行](../../concepts/tokens/nfts/running-an-nft-auction.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、購入価格の何パーセントかを保持することができます。[NFTokenの取引を仲介する](../../tutorials/tokens/nfts/broker-an-nft-sale-js.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、購入価格の何パーセントかを保持することができます。[NFTokenの取引を仲介する](../../tutorials/javascript/nfts/broker-an-nft-sale.md)をご覧ください。
#### 準備金要件
@@ -103,9 +103,9 @@ NFTをオークション形式で販売することができます。[NFTオー
#### 支払い
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/defi/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
<!--

View File

@@ -35,11 +35,11 @@ Current wallet options on XRPL: This is a good opportunity for XRPL to highlight
### NFTの取引
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
NFTの取引は、売りオファーの作成または買いオファーの承諾によって行われます。[NFTokensの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
NFTをオークション形式で販売することができます。[NFTオークションの実行](../../concepts/tokens/nfts/running-an-nft-auction.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、購入価格の何パーセントかを保持することができます。[NFTokenの取引を仲介する](../../tutorials/tokens/nfts/broker-an-nft-sale-js.md)をご覧ください。
あなたはブローカーとして、売り手と入札者をつなぎ、取引を完了させ、購入価格の何パーセントかを保持することができます。[NFTokenの取引を仲介する](../../tutorials/javascript/nfts/broker-an-nft-sale.md)をご覧ください。
### 準備金要件
@@ -61,13 +61,13 @@ NFTをオークション形式で販売することができます。[NFTオー
トークン取引手数料については、[取引手数料](../../concepts/tokens/fungible-tokens/transfer-fees.md)で詳しく解説しています。
[NFToken Saleの仲介](../../tutorials/tokens/nfts/broker-an-nft-sale-js.md)の手順に従って、ブローカー販売市場の構築を開始することができます。
[NFToken Saleの仲介](../../tutorials/javascript/nfts/broker-an-nft-sale.md)の手順に従って、ブローカー販売市場の構築を開始することができます。
#### 支払い
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/tokens/nfts/transfer-nfts-js.md)をご覧ください。
XRPL NFTの最もシンプルな支払い方法はXRPです。XRPを使ったNFTの売り買いの例については、[NFTokenの取引](../../tutorials/javascript/nfts/transfer-nfts.md)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](/docs/tutorials/defi/dex/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
他の通貨での取引は、DEXを活用してあらゆる種類の発行通貨を受け入れ、取引することができます。[分散型取引所での取引](../../tutorials/how-tos/use-tokens/trade-in-the-decentralized-exchange.md#trade-in-the-decentralized-exchange)をご覧ください。
## NFTのインデックス化

View File

@@ -114,7 +114,7 @@ How to transparently report the current number of stablecoins held in reserve.
- [ステーブルコイン発行者 - 注意事項](../../concepts/tokens/fungible-tokens/stablecoins/precautions.md)
- [ステーブルコイン発行者 - コンプライアンス指針](../../concepts/tokens/fungible-tokens/stablecoins/compliance-guidelines.md)
- [代替可能トークンの発行](../../tutorials/tokens/fungible-tokens/issue-a-fungible-token.md)
- [代替可能トークンの発行](../../tutorials/how-tos/use-tokens/issue-a-fungible-token.md)
### トラストラインの作成
@@ -154,7 +154,7 @@ _No Freeze_ 設定を有効にしない場合、アカウントが疑わしい
![Global Freeze](/docs/img/uc-stablecoin-global-freeze.png)
[Global Freezeの実行](../../tutorials/tokens/fungible-tokens/enact-global-freeze.md)をご覧ください。
[Global Freezeの実行](../../tutorials/how-tos/use-tokens/enact-global-freeze.md)をご覧ください。
### Clawback

View File

@@ -155,8 +155,6 @@ amendment.table.status: ステータス
amendment.status.enabled: 有効
amendment.status.eta: 予定
amendment.status.openForVoting: 投票中
amendment.status.inactive: 無効
amendment.status.inactiveButton: 詳細を取得する
# index.page.tsx
home.hero.h1part1: ビジネスのための

View File

@@ -23,7 +23,6 @@ type AmendmentsCachePayload = {
// API data caching
const amendmentsEndpoint = 'https://vhs.prod.ripplex.io/v1/network/amendments/vote/main/'
const amendmentsInfoEndpoint = 'https://vhs.prod.ripplex.io/v1/network/amendments/info/main/'
const amendmentsCacheKey = 'xrpl.amendments.mainnet.cache'
const amendmentsTTL = 15 * 60 * 1000 // 15 minutes in milliseconds
@@ -181,8 +180,6 @@ function AmendmentBadge(props: { amendment: Amendment }) {
const enabledLabel = translate("amendment.status.enabled", "Enabled")
const votingLabel = translate("amendment.status.openForVoting", "Open for Voting")
const etaLabel = translate("amendment.status.eta", "Expected")
const inactiveLabel = translate("amendment.status.inactive", "Inactive")
const inactiveButton = translate("amendment.status.inactiveButton", "Get details")
React.useEffect(() => {
const amendment = props.amendment
@@ -205,16 +202,10 @@ function AmendmentBadge(props: { amendment: Amendment }) {
else if (amendment.consensus) {
setStatus(`${votingLabel}: ${amendment.consensus}`)
setColor('80d0e0')
setHref(undefined)
setHref(undefined) // No link for voting amendments
}
// Fallback: amendment is inactive
else {
setStatus(`${inactiveLabel}: ${inactiveButton}`)
setColor('lightgrey')
setHref(`/resources/known-amendments#${amendment.name.toLowerCase()}`)
}
}, [props.amendment, enabledLabel, etaLabel, votingLabel, inactiveLabel])
}, [props.amendment, enabledLabel, etaLabel, votingLabel])
// Split the status at the colon to create two-color badge
const parts = status.split(':')
const label = shieldsIoEscape(parts[0])
@@ -266,32 +257,15 @@ export function AmendmentDisclaimer(props: {
const response = await fetch(amendmentsEndpoint)
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`)
throw new Error(`HTTP error! status: ${response.status}`)
}
const data: AmendmentsResponse = await response.json()
writeAmendmentsCache(data.amendments)
const found = data.amendments.find(a => a.name === props.name)
// 3. If not found in live data, try the info endpoint.
if (!found) {
const infoResponse = await fetch(amendmentsInfoEndpoint)
if (!infoResponse.ok) {
throw new Error(`HTTP error from info endpoint! Status: ${infoResponse.status}`)
}
const infoData: AmendmentsResponse = await infoResponse.json()
const foundInInfo = infoData.amendments.find(a => a.name === props.name)
if (!foundInInfo) {
throw new Error(`Couldn't find ${props.name} amendment in status tables.`)
}
setStatus(foundInInfo)
return
throw new Error(`Couldn't find ${props.name} amendment in status table.`)
}
setStatus(found)
@@ -415,8 +389,6 @@ export function Badge(props: {
"更新": "blue", // ja: updated in
"in development": "lightgrey",
"開発中": "lightgrey", // ja: in development
"inactive": "lightgrey",
"無効": "lightgrey" // ja: inactive
}
let childstrings = ""

View File

@@ -1,449 +1,152 @@
import * as React from "react";
import { useThemeConfig, useThemeHooks } from "@redocly/theme/core/hooks";
import { LanguagePicker } from "@redocly/theme/components/LanguagePicker/LanguagePicker";
import { slugify } from "../../helpers";
import { Link } from "@redocly/theme/components/Link/Link";
import { ColorModeSwitcher } from "@redocly/theme/components/ColorModeSwitcher/ColorModeSwitcher";
import { Search } from "@redocly/theme/components/Search/Search";
import arrowUpRight from "../../../static/img/icons/arrow-up-right-custom.svg";
import moment from "moment-timezone";
import { useSearchDialog } from "@redocly/theme/core/hooks";
import { SearchDialog } from "@redocly/theme/components/Search/SearchDialog";
// @ts-ignore
// Import from modular components
import { AlertBanner } from "./components/AlertBanner";
import { NavLogo } from "./components/NavLogo";
import { NavItems } from "./components/NavItems";
import { NavControls, HamburgerButton } from "./controls";
import { DevelopSubmenu, UseCasesSubmenu, CommunitySubmenu, NetworkSubmenu } from "./submenus";
import { MobileMenu } from "./mobile-menu";
import { alertBanner } from "./constants/navigation";
const alertBanner = {
show: false,
message: "APEX 2025",
button: "REGISTER",
link: "https://www.xrpledgerapex.com/?utm_source=xrplwebsite&utm_medium=direct&utm_campaign=xrpl-event-ho-xrplapex-glb-2025-q1_xrplwebsite_ari_arp_bf_rsvp&utm_content=cta_btn_english_pencilbanner"
};
// Re-export AlertBanner for backwards compatibility
export { AlertBanner } from "./components/AlertBanner";
export function AlertBanner({ message, button, link, show }) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
const bannerRef = React.useRef(null);
const [displayDate, setDisplayDate] = React.useState("JUNE 10-12");
React.useEffect(() => {
const calculateCountdown = () => {
// Calculate days until June 11, 2025 8AM Singapore time
// This will automatically adjust for the user's timezone
const target = moment.tz('2025-06-11 08:00:00', 'Asia/Singapore');
const now = moment();
const daysUntil = target.diff(now, 'days');
// Show countdown if event is in the future, otherwise show the provided date
let newDisplayDate = "JUNE 10-12";
if (daysUntil > 0) {
newDisplayDate = daysUntil === 1 ? 'IN 1 DAY' : `IN ${daysUntil} DAYS`;
} else if (daysUntil === 0) {
// Check if it's today
const hoursUntil = target.diff(now, 'hours');
newDisplayDate = hoursUntil > 0 ? 'TODAY' : "JUNE 10-12";
}
setDisplayDate(newDisplayDate);
};
// Calculate immediately
calculateCountdown();
// Update every hour
const interval = setInterval(calculateCountdown, 60 * 60 * 1000);
return () => clearInterval(interval);
}, []);
React.useEffect(() => {
const banner = bannerRef.current;
if (!banner) return;
const handleMouseEnter = () => {
banner.classList.add("has-hover");
};
// Attach the event listener
banner.addEventListener("mouseenter", handleMouseEnter);
// Clean up the event listener on unmount
return () => {
banner.removeEventListener("mouseenter", handleMouseEnter);
};
}, []);
if (show) {
return (
<a
href={link}
target="_blank"
ref={bannerRef}
className="top-banner fixed-top web-banner"
rel="noopener noreferrer"
aria-label="Get Tickets for the APEX 2025 Event"
>
<div className="banner-event-details">
<div className="event-info">{translate(message)}</div>
<div className="event-date">{displayDate}</div>
</div>
<div className="banner-button">
<div className="button-text">{translate(button)}</div>
<img
className="button-icon"
src={arrowUpRight}
alt="Get Tickets Icon"
/>
</div>
</a>
);
}
return null;
// Props interface for Navbar (extensible for future use)
interface NavbarProps {
className?: string;
}
export function Navbar(props) {
// const [isOpen, setIsOpen] = useMobileMenu(false);
const themeConfig = useThemeConfig();
const { useL10n } = useThemeHooks();
const { changeLanguage } = useL10n();
const menu = themeConfig.navbar?.items;
const logo = themeConfig.logo;
const { href, altText, items } = props;
const pathPrefix = "";
/**
* Main Navbar Component.
* Renders the complete navigation bar including:
* - Alert banner (when enabled)
* - Logo
* - Navigation items with desktop submenus
* - Control buttons (search, theme toggle, language)
* - Mobile menu
*/
export function Navbar(_props: NavbarProps = {}) {
const [mobileMenuOpen, setMobileMenuOpen] = React.useState(false);
const [activeSubmenu, setActiveSubmenu] = React.useState<string | null>(null);
const [closingSubmenu, setClosingSubmenu] = React.useState<string | null>(null);
const submenuTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);
const closingTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);
const navItems = menu.map((item, index) => {
if (item.type === "group") {
return (
<NavDropdown
key={index}
label={item.label}
labelTranslationKey={item.labelTranslationKey}
items={item.items}
pathPrefix={pathPrefix}
/>
);
} else {
return (
<NavItem key={index}>
<Link to={item.link} className="nav-link">
{item.label}
</Link>
</NavItem>
);
// Use Redocly's search dialog hook - shared across navbar and mobile menu
const { isOpen: isSearchOpen, onOpen: onSearchOpen, onClose: onSearchClose } = useSearchDialog();
const handleHamburgerClick = () => {
setMobileMenuOpen(true);
};
const handleMobileMenuClose = () => {
setMobileMenuOpen(false);
};
const handleSubmenuMouseEnter = (itemLabel: string) => {
// Clear any pending close/closing timeouts
if (submenuTimeoutRef.current) {
clearTimeout(submenuTimeoutRef.current);
submenuTimeoutRef.current = null;
}
});
if (closingTimeoutRef.current) {
clearTimeout(closingTimeoutRef.current);
closingTimeoutRef.current = null;
}
// Cancel closing state and activate the new submenu
setClosingSubmenu(null);
setActiveSubmenu(itemLabel);
};
const handleSubmenuMouseLeave = () => {
submenuTimeoutRef.current = setTimeout(() => {
// Start closing animation
const currentSubmenu = activeSubmenu;
if (currentSubmenu) {
setClosingSubmenu(currentSubmenu);
setActiveSubmenu(null);
// After animation completes (300ms), clear closing state
closingTimeoutRef.current = setTimeout(() => {
setClosingSubmenu(null);
}, 350); // Slightly longer than animation to ensure completion
}
}, 150);
};
const handleSubmenuClose = () => {
// Close submenu immediately (for keyboard navigation)
if (activeSubmenu) {
setClosingSubmenu(activeSubmenu);
setActiveSubmenu(null);
// After animation completes, clear closing state
closingTimeoutRef.current = setTimeout(() => {
setClosingSubmenu(null);
}, 350);
}
};
// Handle scroll lock when submenu is open or closing
React.useEffect(() => {
if (activeSubmenu || closingSubmenu) {
document.body.classList.add('bds-submenu-open');
} else {
document.body.classList.remove('bds-submenu-open');
}
return () => {
document.body.classList.remove('bds-submenu-open');
};
}, [activeSubmenu, closingSubmenu]);
React.useEffect(() => {
// Turns out jQuery is necessary for firing events on Bootstrap v4
// dropdowns. These events set classes so that the search bar and other
// submenus collapse on mobile when you expand one submenu.
const dds = $("#topnav-pages .dropdown");
const top_main_nav = document.querySelector("#top-main-nav");
dds.on("show.bs.dropdown", (evt) => {
top_main_nav.classList.add("submenu-expanded");
});
dds.on("hidden.bs.dropdown", (evt) => {
top_main_nav.classList.remove("submenu-expanded");
});
// Close navbar on .dropdown-item click
const toggleNavbar = () => {
const navbarToggler = document.querySelector(".navbar-toggler");
const isNavbarCollapsed =
navbarToggler.getAttribute("aria-expanded") === "true";
if (isNavbarCollapsed) {
navbarToggler?.click(); // Simulate click to toggle navbar
return () => {
if (submenuTimeoutRef.current) {
clearTimeout(submenuTimeoutRef.current);
}
if (closingTimeoutRef.current) {
clearTimeout(closingTimeoutRef.current);
}
};
const dropdownItems = document.querySelectorAll(".dropdown-item");
dropdownItems.forEach((item) => {
item.addEventListener("click", toggleNavbar);
});
// Cleanup function to remove event listeners
return () => {
dropdownItems.forEach((item) => {
item.removeEventListener("click", toggleNavbar);
});
};
}, []);
const navbarClasses = [
"bds-navbar",
alertBanner.show ? "bds-navbar--with-banner" : ""
].filter(Boolean).join(" ");
return (
<>
<AlertBanner {...alertBanner} />
<NavWrapper belowAlertBanner={alertBanner.show}>
<LogoBlock to={href} img={logo} alt={altText} />
<NavControls>
<MobileMenuIcon />
</NavControls>
<TopNavCollapsible>
<NavItems>
{navItems}
<div id="topnav-search" className="nav-item search">
<Search className="topnav-search" />
</div>
<div id="topnav-language" className="nav-item">
<LanguagePicker
onChangeLanguage={changeLanguage}
onlyIcon
alignment="end"
/>
</div>
<div id="topnav-theme" className="nav-item">
<ColorModeSwitcher />
</div>
</NavItems>
</TopNavCollapsible>
</NavWrapper>
{/* Backdrop blur overlay when submenu is open or closing */}
<div
className={`bds-submenu-backdrop ${activeSubmenu || closingSubmenu ? 'bds-submenu-backdrop--active' : ''}`}
onClick={() => setActiveSubmenu(null)}
/>
<header
className={navbarClasses}
onMouseLeave={handleSubmenuMouseLeave}
>
<div className="bds-navbar__content">
<NavLogo />
<NavItems activeSubmenu={activeSubmenu} onSubmenuEnter={handleSubmenuMouseEnter} onSubmenuClose={handleSubmenuClose} />
<NavControls onSearch={onSearchOpen} />
<HamburgerButton onClick={handleHamburgerClick} />
</div>
{/* Submenus positioned relative to navbar */}
<div onMouseEnter={() => activeSubmenu && handleSubmenuMouseEnter(activeSubmenu)}>
<DevelopSubmenu isActive={activeSubmenu === 'Develop'} isClosing={closingSubmenu === 'Develop'} onClose={handleSubmenuClose} />
<UseCasesSubmenu isActive={activeSubmenu === 'Use Cases'} isClosing={closingSubmenu === 'Use Cases'} onClose={handleSubmenuClose} />
<CommunitySubmenu isActive={activeSubmenu === 'Community'} isClosing={closingSubmenu === 'Community'} onClose={handleSubmenuClose} />
<NetworkSubmenu isActive={activeSubmenu === 'Network'} isClosing={closingSubmenu === 'Network'} onClose={handleSubmenuClose} />
</div>
</header>
<MobileMenu isOpen={mobileMenuOpen} onClose={handleMobileMenuClose} onSearch={onSearchOpen} />
{/* Render SearchDialog when open - this is the actual search modal */}
{isSearchOpen && <SearchDialog onClose={onSearchClose} />}
</>
);
}
export function TopNavCollapsible({ children }) {
return (
<div
className="collapse navbar-collapse justify-content-between"
id="top-main-nav"
>
{children}
</div>
);
}
export function NavDropdown(props) {
const { label, items, pathPrefix, labelTranslationKey } = props;
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
const dropdownGroups = items.map((item, index) => {
if (item.items) {
const groupLinks = item.items.map((item2, index2) => {
const cls2 = item2.external
? "dropdown-item external-link"
: "dropdown-item";
let item2_href = item2.link;
if (item2_href && !item2_href.match(/^https?:/)) {
item2_href = pathPrefix + item2_href;
}
//conditional specific for brand kit
if (item2.link === "/XRPL_Brand_Kit.zip") {
return (
<a target="_blank" key={index2} href="/XRPL_Brand_Kit.zip" className={cls2}>
{translate(item2.labelTranslationKey, item2.label)}
</a>
);
}
return (
<Link key={index2} className={cls2} to={item2_href}>
{translate(item2.labelTranslationKey, item2.label)}
</Link>
);
});
const clnm = "navcol col-for-" + slugify(item.label);
return (
<div key={index} className={clnm}>
<h5 className="dropdown-item">
{translate(item.labelTranslationKey, item.label)}
</h5>
{groupLinks}
</div>
);
} else if (item.icon) {
const hero_id = "dropdown-hero-for-" + slugify(label);
const img_alt = item.label + " icon";
let hero_href = item.link;
if (hero_href && !hero_href.match(/^https?:/)) {
hero_href = pathPrefix + hero_href;
}
const splitlabel = item.label.split(" || ");
let splittranslationkey = ["", ""];
if (item.labelTranslationKey) {
splittranslationkey = item.labelTranslationKey.split(" || ");
}
const newlabel = translate(splittranslationkey[0], splitlabel[0]);
const description = translate(splittranslationkey[1], splitlabel[1]); // splitlabel[1] might be undefined, that's ok
return (
<Link
key={index}
className="dropdown-item dropdown-hero"
id={hero_id}
to={hero_href}
>
<img id={item.hero} alt={img_alt} src={item.icon} />
<div className="dropdown-hero-text">
<h4>{newlabel}</h4>
<p>{description}</p>
</div>
</Link>
);
} else {
const cls = item.external
? "dropdown-item ungrouped external-link"
: "dropdown-item ungrouped";
let item_href = item.link;
if (item_href && !item_href.match(/^https?:/)) {
item_href = pathPrefix + item_href;
}
return (
<Link key={index} className={cls} to={item_href}>
{translate(item.labelTranslationKey, item.label)}
</Link>
);
}
});
const toggler_id = "topnav_" + slugify(label);
const dd_id = "topnav_dd_" + slugify(label);
return (
<li className="nav-item dropdown">
<a
className="nav-link dropdown-toggle"
href="#"
id={toggler_id}
role="button"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
<span>{translate(labelTranslationKey, label)}</span>
</a>
<div className="dropdown-menu" aria-labelledby={toggler_id} id={dd_id}>
{dropdownGroups}
</div>
</li>
);
}
export function NavWrapper(props) {
return (
<nav
className="top-nav navbar navbar-expand-lg navbar-dark fixed-top"
style={props.belowAlertBanner ? { marginTop: "52px" } : {}}
>
{props.children}
</nav>
);
}
export function NavControls(props) {
return (
<button
className="navbar-toggler collapsed"
type="button"
data-toggle="collapse"
data-target="#top-main-nav"
aria-controls="navbarHolder"
aria-expanded="false"
aria-label="Toggle navigation"
>
{props.children}
</button>
);
}
export function MobileMenuIcon() {
return (
<span className="navbar-toggler-icon">
<div></div>
</span>
);
}
export function GetStartedButton() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
return (
<Link
className="btn btn-primary"
to={"/docs/tutorials"}
style={{ height: "38px", paddingTop: "11px" }}
>
{translate("Get Started")}
</Link>
);
}
export function NavItems(props) {
return (
<ul className="nav navbar-nav" id="topnav-pages">
{props.children}
</ul>
);
}
export function NavItem(props) {
return <li className="nav-item">{props.children}</li>;
}
export function LogoBlock(props) {
const { to, img, altText } = props;
return (
<Link className="navbar-brand" to="/">
<img className="logo" alt={"XRP LEDGER"} height="40" src="data:," />
</Link>
);
}
export class ThemeToggle extends React.Component {
auto_update_theme() {
const upc = window.localStorage.getItem("user-prefers-color");
let theme = "dark"; // Default to dark theme
if (!upc) {
// User hasn't saved a preference specifically for this site; check
// the browser-level preferences.
if (
window.matchMedia &&
window.matchMedia("(prefers-color-scheme: light)").matches
) {
theme = "light";
}
} else {
// Follow user's saved setting.
theme = upc == "light" ? "light" : "dark";
}
const disable_theme = theme == "dark" ? "light" : "dark";
document.documentElement.classList.add(theme);
document.documentElement.classList.remove(disable_theme);
}
user_choose_theme() {
const new_theme = document.documentElement.classList.contains("dark")
? "light"
: "dark";
window.localStorage.setItem("user-prefers-color", new_theme);
document.body.style.transition = "background-color .2s ease";
const disable_theme = new_theme == "dark" ? "light" : "dark";
document.documentElement.classList.add(new_theme);
document.documentElement.classList.remove(disable_theme);
}
render() {
return (
<div className="nav-item" id="topnav-theme">
<form className="form-inline">
<div
className="custom-control custom-theme-toggle form-inline-item"
title=""
data-toggle="tooltip"
data-placement="left"
data-original-title="Toggle Dark Mode"
>
<input
type="checkbox"
className="custom-control-input"
id="css-toggle-btn"
onClick={this.user_choose_theme}
/>
<label className="custom-control-label" htmlFor="css-toggle-btn">
<span className="d-lg-none">Light/Dark Theme</span>
</label>
</div>
</form>
</div>
);
}
componentDidMount() {
this.auto_update_theme();
}
}

View File

@@ -0,0 +1,82 @@
import * as React from "react";
import { useThemeHooks } from "@redocly/theme/core/hooks";
import moment from "moment-timezone";
import { arrowUpRight } from "../constants/icons";
interface AlertBannerProps {
message: string;
button: string;
link: string;
show: boolean;
}
/**
* Alert Banner Component.
* Displays a promotional banner at the top of the page.
*/
export function AlertBanner({ message, button, link, show }: AlertBannerProps) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
const bannerRef = React.useRef<HTMLAnchorElement>(null);
// Use null initial state to avoid hydration mismatch - server and client both render null initially
const [displayDate, setDisplayDate] = React.useState<string | null>(null);
React.useEffect(() => {
const calculateCountdown = () => {
const target = moment.tz('2025-06-11 08:00:00', 'Asia/Singapore');
const now = moment();
const daysUntil = target.diff(now, 'days');
let newDisplayDate = "JUNE 10-12";
if (daysUntil > 0) {
newDisplayDate = daysUntil === 1 ? 'IN 1 DAY' : `IN ${daysUntil} DAYS`;
} else if (daysUntil === 0) {
const hoursUntil = target.diff(now, 'hours');
newDisplayDate = hoursUntil > 0 ? 'TODAY' : "JUNE 10-12";
}
setDisplayDate(newDisplayDate);
};
calculateCountdown();
const interval = setInterval(calculateCountdown, 60 * 60 * 1000);
return () => clearInterval(interval);
}, []);
React.useEffect(() => {
const banner = bannerRef.current;
if (!banner) return;
const handleMouseEnter = () => {
banner.classList.add("has-hover");
};
banner.addEventListener("mouseenter", handleMouseEnter);
return () => {
banner.removeEventListener("mouseenter", handleMouseEnter);
};
}, []);
if (!show) return null;
return (
<a
href={link}
target="_blank"
ref={bannerRef}
className="top-banner fixed-top web-banner"
rel="noopener noreferrer"
aria-label={translate("Get Tickets for the APEX 2025 Event")}
>
<div className="banner-event-details">
<div className="event-info">{translate(message)}</div>
<div className="event-date">{displayDate ?? translate("JUNE 10-12")}</div>
</div>
<div className="banner-button">
<div className="button-text">{translate(button)}</div>
<img className="button-icon" src={arrowUpRight} alt="" />
</div>
</a>
);
}

View File

@@ -0,0 +1,114 @@
import * as React from "react";
import { useThemeHooks } from "@redocly/theme/core/hooks";
import { BdsLink } from "../../../../shared/components/Link/Link";
import { navItems } from "../constants/navigation";
interface NavItemsProps {
activeSubmenu: string | null;
onSubmenuEnter: (itemLabel: string) => void;
onSubmenuClose?: () => void;
}
/**
* Nav Items Component.
* Centered navigation links with submenu support.
* ARIA compliant with full keyboard navigation support.
*/
export function NavItems({ activeSubmenu, onSubmenuEnter, onSubmenuClose }: NavItemsProps) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
const [activeItem, setActiveItem] = React.useState<string | null>(null);
const handleMouseEnter = (itemLabel: string, hasSubmenu: boolean) => {
setActiveItem(itemLabel);
if (hasSubmenu) {
onSubmenuEnter(itemLabel);
}
};
const handleMouseLeave = (hasSubmenu: boolean) => {
if (!hasSubmenu) {
setActiveItem(null);
}
// Don't close submenu on leave - let the parent Navbar handle that
};
const handleKeyDown = (event: React.KeyboardEvent, itemLabel: string) => {
switch (event.key) {
case 'Enter':
case ' ':
event.preventDefault();
// Toggle submenu on Enter/Space
if (activeSubmenu === itemLabel) {
onSubmenuClose?.();
} else {
onSubmenuEnter(itemLabel);
}
break;
case 'Escape':
event.preventDefault();
onSubmenuClose?.();
break;
case 'Tab':
// If submenu is open and Tab is pressed (without Shift), move focus into submenu
if (activeSubmenu === itemLabel && !event.shiftKey) {
event.preventDefault();
// Focus first focusable element in submenu
const submenu = document.querySelector('.bds-submenu--active');
const firstFocusable = submenu?.querySelector<HTMLElement>('a, button');
firstFocusable?.focus();
}
break;
case 'ArrowDown':
// If submenu is open, move focus into submenu
if (activeSubmenu === itemLabel) {
event.preventDefault();
// Focus first focusable element in submenu
const submenu = document.querySelector('.bds-submenu--active');
const firstFocusable = submenu?.querySelector<HTMLElement>('a, button');
firstFocusable?.focus();
}
break;
}
};
// Sync activeItem with activeSubmenu state
React.useEffect(() => {
if (!activeSubmenu) {
setActiveItem(null);
}
}, [activeSubmenu]);
return (
<nav className="bds-navbar__items" aria-label={translate("Main navigation")}>
{navItems.map((item) => (
item.hasSubmenu ? (
<button
key={item.label}
type="button"
className={`bds-navbar__item ${activeItem === item.label || activeSubmenu === item.label ? 'bds-navbar__item--active' : ''}`}
onMouseEnter={() => handleMouseEnter(item.label, true)}
onMouseLeave={() => handleMouseLeave(true)}
onKeyDown={(e) => handleKeyDown(e, item.label)}
aria-expanded={activeSubmenu === item.label}
aria-haspopup="menu"
>
{translate(item.labelTranslationKey, item.label)}
</button>
) : (
<BdsLink
key={item.label}
href={item.href}
className={`bds-navbar__item ${activeItem === item.label ? 'bds-navbar__item--active' : ''}`}
onMouseEnter={() => handleMouseEnter(item.label, false)}
onMouseLeave={() => handleMouseLeave(false)}
variant="inline"
>
{translate(item.labelTranslationKey, item.label)}
</BdsLink>
)
))}
</nav>
);
}

View File

@@ -0,0 +1,34 @@
import { useThemeHooks } from "@redocly/theme/core/hooks";
import { BdsLink } from "../../../../shared/components/Link/Link";
import { xrpSymbolBlack, xrpLogotypeBlack, xrpLedgerNav } from "../constants/icons";
/**
* Nav Logo Component.
* Shows symbol on desktop/mobile, full logotype on tablet.
* On desktop hover, the "XRP LEDGER" text animates out to the right.
*/
export function NavLogo() {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
return (
<BdsLink href="/" className="bds-navbar__logo" aria-label={translate("XRP Ledger Home")} variant="inline">
<img
src={xrpSymbolBlack}
alt={translate("XRP Ledger")}
className="bds-navbar__logo-symbol"
/>
<img
src={xrpLedgerNav}
alt=""
className="bds-navbar__logo-text"
/>
<img
src={xrpLogotypeBlack}
alt={translate("XRP Ledger")}
className="bds-navbar__logo-full"
/>
</BdsLink>
);
}

View File

@@ -0,0 +1,5 @@
// Re-export navbar components
export { AlertBanner } from './AlertBanner';
export { NavLogo } from './NavLogo';
export { NavItems } from './NavItems';

View File

@@ -0,0 +1,83 @@
// Navbar icon imports
// Main navbar icons
export { default as xrpSymbolBlack } from "../../../../static/img/navbar/xrp-symbol-black.svg";
export { default as xrpLogotypeBlack } from "../../../../static/img/navbar/xrp-logotype-black.svg";
export { default as xrpLedgerNav } from "../../../../static/img/navbar/xrp-ledger-nav.svg";
export { default as searchIcon } from "../../../../static/img/navbar/search-icon.svg";
export { default as modeToggleIcon } from "../../../../static/img/navbar/mode-toggle.svg";
export { default as globeIcon } from "../../../../static/img/navbar/globe-icon.svg";
export { default as chevronDown } from "../../../../static/img/navbar/chevron-down.svg";
export { default as hamburgerIcon } from "../../../../static/img/navbar/hamburger-icon.svg";
export { default as arrowUpRight } from "../../../../static/img/icons/arrow-up-right-custom.svg";
// Wallet icons for submenu
export { default as greenWallet } from "../../../../static/img/navbar/green-wallet.svg";
export { default as lilacWallet } from "../../../../static/img/navbar/lilac-wallet.svg";
export { default as yellowWallet } from "../../../../static/img/navbar/yellow-wallet.svg";
export { default as pinkWallet } from "../../../../static/img/navbar/pink-wallet.svg";
export { default as blueWallet } from "../../../../static/img/navbar/blue-wallet.svg";
// Develop submenu icons
export { default as devHomeIcon } from "../../../../static/img/navbar/dev_home.svg";
export { default as learnIcon } from "../../../../static/img/navbar/learn.svg";
export { default as codeSamplesIcon } from "../../../../static/img/navbar/code_samples.svg";
export { default as docsIcon } from "../../../../static/img/navbar/docs.svg";
export { default as clientLibIcon } from "../../../../static/img/navbar/client_lib.svg";
// Use Cases submenu icons
export { default as paymentsIcon } from "../../../../static/img/navbar/payments.svg";
export { default as tokenizationIcon } from "../../../../static/img/navbar/tokenization.svg";
export { default as creditIcon } from "../../../../static/img/navbar/credit.svg";
export { default as tradingIcon } from "../../../../static/img/navbar/trading.svg";
// Community submenu icons
export { default as communityIcon } from "../../../../static/img/navbar/community.svg";
// Network submenu icons
export { default as insightsIcon } from "../../../../static/img/navbar/insights.svg";
export { default as resourcesIcon } from "../../../../static/img/navbar/resources.svg";
// Network submenu pattern images (used for both light and dark mode)
export { default as resourcesIconPattern } from "../../../../static/img/navbar/resources-icon.svg";
export { default as insightsIconPattern } from "../../../../static/img/navbar/insights-icon.svg";
// Wallet icon mapping for dynamic icon lookup
import greenWallet from "../../../../static/img/navbar/green-wallet.svg";
import lilacWallet from "../../../../static/img/navbar/lilac-wallet.svg";
import yellowWallet from "../../../../static/img/navbar/yellow-wallet.svg";
import pinkWallet from "../../../../static/img/navbar/pink-wallet.svg";
import blueWallet from "../../../../static/img/navbar/blue-wallet.svg";
import devHomeIcon from "../../../../static/img/navbar/dev_home.svg";
import learnIcon from "../../../../static/img/navbar/learn.svg";
import codeSamplesIcon from "../../../../static/img/navbar/code_samples.svg";
import docsIcon from "../../../../static/img/navbar/docs.svg";
import clientLibIcon from "../../../../static/img/navbar/client_lib.svg";
import paymentsIcon from "../../../../static/img/navbar/payments.svg";
import tokenizationIcon from "../../../../static/img/navbar/tokenization.svg";
import creditIcon from "../../../../static/img/navbar/credit.svg";
import tradingIcon from "../../../../static/img/navbar/trading.svg";
import communityIcon from "../../../../static/img/navbar/community.svg";
import insightsIcon from "../../../../static/img/navbar/insights.svg";
import resourcesIcon from "../../../../static/img/navbar/resources.svg";
export const walletIcons: Record<string, string> = {
green: greenWallet,
lilac: lilacWallet,
yellow: yellowWallet,
pink: pinkWallet,
blue: blueWallet,
dev_home: devHomeIcon,
learn: learnIcon,
code_samples: codeSamplesIcon,
docs: docsIcon,
client_lib: clientLibIcon,
payments: paymentsIcon,
tokenization: tokenizationIcon,
credit: creditIcon,
trading: tradingIcon,
community: communityIcon,
insights: insightsIcon,
resources: resourcesIcon,
};

View File

@@ -0,0 +1,4 @@
// Re-export all constants
export * from './icons';
export * from './navigation';

View File

@@ -0,0 +1,160 @@
import type { NavItem, SubmenuItemBase, SubmenuItemWithChildren, SubmenuItem, NetworkSubmenuSection } from '../types';
// Alert Banner Configuration
export const alertBanner = {
show: false,
message: "APEX 2025",
button: "REGISTER",
link: "https://www.xrpledgerapex.com/?utm_source=xrplwebsite&utm_medium=direct&utm_campaign=xrpl-event-ho-xrplapex-glb-2025-q1_xrplwebsite_ari_arp_bf_rsvp&utm_content=cta_btn_english_pencilbanner"
};
// Main navigation items
export const navItems: NavItem[] = [
{ label: "Develop", labelTranslationKey: "navbar.develop", href: "/develop", hasSubmenu: true },
{ label: "Use Cases", labelTranslationKey: "navbar.usecases", href: "/use-cases", hasSubmenu: true },
{ label: "Community", labelTranslationKey: "navbar.community", href: "/community", hasSubmenu: true },
{ label: "Network", labelTranslationKey: "navbar.network", href: "/resources", hasSubmenu: true },
];
// Develop submenu data structure
export const developSubmenuData: {
left: SubmenuItemBase[];
right: SubmenuItemWithChildren[];
} = {
left: [
{ label: "Developer's Home", href: "/develop", icon: "dev_home" },
{ label: "Learn", href: "https://learn.xrpl.org", icon: "learn" },
{ label: "Code Samples", href: "/resources/code-samples", icon: "code_samples" },
],
right: [
{
label: "Docs",
href: "/docs",
icon: "docs",
children: [
{ label: "API Reference", href: "/references" },
{ label: "Tutorials", href: "/docs/tutorials" },
{ label: "Concepts", href: "/concepts" },
{ label: "Infrastructure", href: "/docs/infrastructure" },
],
},
{
label: "Client Libraries",
href: "#",
icon: "client_lib",
children: [
{ label: "JavaScript", href: "#" },
{ label: "Python", href: "#" },
{ label: "PHP", href: "#" },
{ label: "Go", href: "#" },
],
},
],
};
// Use Cases submenu data structure
export const useCasesSubmenuData: {
left: SubmenuItemWithChildren[];
right: SubmenuItemWithChildren[];
} = {
left: [
{
label: "Payments",
href: "/use-cases/payments",
icon: "payments",
children: [
{ label: "Direct XRP Payments", href: "/use-cases/payments/direct-xrp-payments" },
{ label: "Cross-currency Payments", href: "/use-cases/payments/cross-currency-payments" },
{ label: "Escrow", href: "/use-cases/payments/escrow" },
{ label: "Checks", href: "/use-cases/payments/checks" },
],
},
{
label: "Tokenization",
href: "/use-cases/tokenization",
icon: "tokenization",
children: [
{ label: "Stablecoin", href: "/use-cases/tokenization/stablecoin" },
{ label: "NFT", href: "/use-cases/tokenization/nft" },
],
},
],
right: [
{
label: "Credit",
href: "/use-cases/credit",
icon: "credit",
children: [
{ label: "Lending", href: "/use-cases/credit/lending" },
{ label: "Collateralization", href: "/use-cases/credit/collateralization" },
{ label: "Sustainability", href: "/use-cases/credit/sustainability" },
],
},
{
label: "Trading",
href: "/use-cases/trading",
icon: "trading",
children: [
{ label: "DEX", href: "/use-cases/trading/dex" },
{ label: "Permissioned Trading", href: "/use-cases/trading/permissioned-trading" },
{ label: "AMM", href: "/use-cases/trading/amm" },
],
},
],
};
// Community submenu data structure
export const communitySubmenuData: {
left: SubmenuItem[];
right: SubmenuItem[];
} = {
left: [
{
label: "Community",
href: "/community",
icon: "community",
children: [
{ label: "Events", href: "/community/events" },
{ label: "Blog", href: "/blog" },
],
},
{ label: "Funding", href: "/community/developer-funding", icon: "code_samples" },
],
right: [
{
label: "Contribute",
href: "/community/contribute",
icon: "client_lib",
children: [
{ label: "Bug Bounty", href: "/blog/2020/rippled-1.5.0#bug-bounties-and-responsible-disclosures" },
{ label: "Research", href: "https://xls.xrpl.org/" },
],
},
{ label: "Ecosystem Map", href: "/about/uses", icon: "learn" },
],
};
// Network submenu data
export const networkSubmenuData: NetworkSubmenuSection[] = [
{
label: "Resources",
href: "/resources",
icon: "resources",
children: [
{ label: "About", href: "/about/history" },
{ label: "XRPL Brand Kit", href: "/community/brand-kit" },
],
patternColor: 'lilac',
},
{
label: "Insights",
href: "/insights",
icon: "insights",
children: [
{ label: "Explorer", href: "https://livenet.xrpl.org" },
{ label: "Amendment Voting Status", href: "https://xrpl.org/resources/known-amendments" },
],
patternColor: 'green',
},
];

View File

@@ -0,0 +1,19 @@
import { useThemeHooks } from "@redocly/theme/core/hooks";
import { IconButton } from "./IconButton";
import { hamburgerIcon } from "../constants/icons";
interface HamburgerButtonProps {
onClick?: () => void;
}
/**
* Hamburger Menu Button Component.
* Mobile-only button that opens the mobile menu.
*/
export function HamburgerButton({ onClick }: HamburgerButtonProps) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
return <IconButton icon={hamburgerIcon} ariaLabel={translate("Open menu")} className="bds-navbar__hamburger" onClick={onClick} />;
}

View File

@@ -0,0 +1,28 @@
interface IconButtonProps {
/** The icon image source */
icon: string;
/** Accessible label for the button */
ariaLabel: string;
/** Optional click handler */
onClick?: () => void;
/** CSS class name for styling variants */
className?: string;
}
/**
* Unified Icon Button component.
* Used for search, mode toggle, hamburger menu, and other icon-only buttons.
*/
export function IconButton({ icon, ariaLabel, onClick, className = "bds-navbar__icon" }: IconButtonProps) {
return (
<button
type="button"
className={className}
aria-label={ariaLabel}
onClick={onClick}
>
<img src={icon} alt="" />
</button>
);
}

View File

@@ -0,0 +1,85 @@
import * as React from "react";
import { useLanguagePicker, useThemeHooks } from "@redocly/theme/core/hooks";
interface LanguageDropdownProps {
isOpen: boolean;
onClose: () => void;
}
/**
* Language Dropdown Component.
* Displays available language options in a dropdown menu.
* Based on Figma design: dark background with rounded corners.
*/
export function LanguageDropdown({ isOpen, onClose }: LanguageDropdownProps) {
const { currentLocale, locales, setLocale } = useLanguagePicker();
const { useL10n, useTranslate } = useThemeHooks();
const { changeLanguage } = useL10n();
const { translate } = useTranslate();
const dropdownRef = React.useRef<HTMLDivElement>(null);
// Handle clicking outside to close
React.useEffect(() => {
if (!isOpen) return;
const handleClickOutside = (event: MouseEvent) => {
if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
// Check if click was on the language pill (parent trigger)
const target = event.target as HTMLElement;
if (!target.closest('.bds-navbar__lang-pill')) {
onClose();
}
}
};
const handleEscape = (event: KeyboardEvent) => {
if (event.key === 'Escape') {
onClose();
}
};
document.addEventListener('mousedown', handleClickOutside);
document.addEventListener('keydown', handleEscape);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
document.removeEventListener('keydown', handleEscape);
};
}, [isOpen, onClose]);
if (!isOpen || locales.length < 2) {
return null;
}
const handleLanguageSelect = (localeCode: string) => {
setLocale(localeCode);
changeLanguage(localeCode);
onClose();
};
return (
<div
ref={dropdownRef}
className="bds-lang-dropdown"
role="menu"
aria-label={translate("Language selection")}
>
{locales.map((locale) => {
const isActive = locale.code === currentLocale?.code;
return (
<button
key={locale.code}
type="button"
role="menuitem"
className={`bds-lang-dropdown__item ${isActive ? 'bds-lang-dropdown__item--active' : ''}`}
onClick={() => handleLanguageSelect(locale.code)}
aria-current={isActive ? 'true' : undefined}
>
{locale.name || locale.code}
</button>
);
})}
</div>
);
}

View File

@@ -0,0 +1,53 @@
import { useLanguagePicker, useThemeHooks } from "@redocly/theme/core/hooks";
import { globeIcon, chevronDown } from "../constants/icons";
interface LanguagePillProps {
onClick?: () => void;
isOpen?: boolean;
}
/**
* Get short display name for a locale code.
* e.g., "en-US" -> "En", "ja" -> "日本語"
*/
function getLocaleShortName(code: string | undefined): string {
if (!code) return "En";
// Map locale codes to short display names
const shortNames: Record<string, string> = {
"en-US": "En",
"en": "En",
"ja": "日本語",
};
return shortNames[code] || code.substring(0, 2).toUpperCase();
}
/**
* Language Pill Button Component.
* Shows current language and opens language selector.
*/
export function LanguagePill({ onClick, isOpen }: LanguagePillProps) {
const { currentLocale } = useLanguagePicker();
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
const displayName = getLocaleShortName(currentLocale?.code);
return (
<button
type="button"
className={`bds-navbar__lang-pill ${isOpen ? 'bds-navbar__lang-pill--open' : ''}`}
aria-label={translate("Select language")}
aria-expanded={isOpen}
aria-haspopup="menu"
onClick={onClick}
>
<img src={globeIcon} alt="" className="bds-navbar__lang-pill-icon" />
<span className="bds-navbar__lang-pill-text">
<span>{displayName}</span>
<img src={chevronDown} alt="" className="bds-navbar__lang-pill-chevron" />
</span>
</button>
);
}

View File

@@ -0,0 +1,19 @@
import { useThemeHooks } from "@redocly/theme/core/hooks";
import { IconButton } from "./IconButton";
import { modeToggleIcon } from "../constants/icons";
interface ModeToggleButtonProps {
onClick?: () => void;
}
/**
* Mode Toggle Button Component.
* Icon button that toggles between light and dark mode.
*/
export function ModeToggleButton({ onClick }: ModeToggleButtonProps) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
return <IconButton icon={modeToggleIcon} ariaLabel={translate("Toggle color mode")} onClick={onClick} />;
}

View File

@@ -0,0 +1,46 @@
import * as React from "react";
import { SearchButton } from "./SearchButton";
import { ModeToggleButton } from "./ModeToggleButton";
import { LanguagePill } from "./LanguagePill";
import { LanguageDropdown } from "./LanguageDropdown";
interface NavControlsProps {
onSearch?: () => void;
}
/**
* Nav Controls Component.
* Right side of the navbar containing search, mode toggle, and language selector.
*/
export function NavControls({ onSearch }: NavControlsProps) {
const [isLanguageDropdownOpen, setIsLanguageDropdownOpen] = React.useState(false);
const handleModeToggle = () => {
// Toggle between light and dark theme
const newTheme = document.documentElement.classList.contains("dark") ? "light" : "dark";
window.localStorage.setItem("user-prefers-color", newTheme);
document.body.style.transition = "background-color .2s ease";
document.documentElement.classList.remove("dark", "light");
document.documentElement.classList.add(newTheme);
};
const handleLanguageClick = () => {
setIsLanguageDropdownOpen(!isLanguageDropdownOpen);
};
const handleLanguageDropdownClose = () => {
setIsLanguageDropdownOpen(false);
};
return (
<div className="bds-navbar__controls">
<SearchButton onClick={onSearch} />
<ModeToggleButton onClick={handleModeToggle} />
<div className="bds-navbar__lang-wrapper">
<LanguagePill onClick={handleLanguageClick} isOpen={isLanguageDropdownOpen} />
<LanguageDropdown isOpen={isLanguageDropdownOpen} onClose={handleLanguageDropdownClose} />
</div>
</div>
);
}

View File

@@ -0,0 +1,19 @@
import { useThemeHooks } from "@redocly/theme/core/hooks";
import { IconButton } from "./IconButton";
import { searchIcon } from "../constants/icons";
interface SearchButtonProps {
onClick?: () => void;
}
/**
* Search Button Component.
* Icon button that triggers the search modal.
*/
export function SearchButton({ onClick }: SearchButtonProps) {
const { useTranslate } = useThemeHooks();
const { translate } = useTranslate();
return <IconButton icon={searchIcon} ariaLabel={translate("Search")} onClick={onClick} />;
}

View File

@@ -0,0 +1,11 @@
// Unified base component
export { IconButton } from './IconButton';
// Specific button implementations (use IconButton internally)
export { NavControls } from './NavControls';
export { SearchButton } from './SearchButton';
export { ModeToggleButton } from './ModeToggleButton';
export { LanguagePill } from './LanguagePill';
export { LanguageDropdown } from './LanguageDropdown';
export { HamburgerButton } from './HamburgerButton';

View File

@@ -0,0 +1,30 @@
import * as React from "react";
interface ChevronIconProps {
expanded: boolean;
}
/**
* Chevron Icon Component for Mobile Accordion
*/
export function ChevronIcon({ expanded }: ChevronIconProps) {
return (
<svg
className={`bds-mobile-menu__chevron ${expanded ? 'bds-mobile-menu__chevron--expanded' : ''}`}
width="13"
height="8"
viewBox="0 0 13 8"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M1 1L6.5 6.5L12 1"
stroke="currentColor"
strokeWidth="1.5"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
);
}

View File

@@ -0,0 +1,14 @@
import * as React from "react";
/**
* Close Icon Component for Mobile Menu
*/
export function CloseIcon() {
return (
<svg width="28" height="28" viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<line x1="7" y1="7" x2="21" y2="21" stroke="#141414" strokeWidth="2" strokeLinecap="round" />
<line x1="21" y1="7" x2="7" y2="21" stroke="#141414" strokeWidth="2" strokeLinecap="round" />
</svg>
);
}

View File

@@ -0,0 +1,56 @@
interface ArrowIconProps {
className?: string;
color?: string;
/**
* When true, the horizontal line has a class for CSS animation (parent links).
* When false, the full arrow is shown without animation class (child links).
*/
animated?: boolean;
}
/**
* Unified Arrow Icon component.
* - For parent links (animated=true): horizontal line animates away on hover
* - For child links (animated=false): full static arrow
*/
export function ArrowIcon({ className, color = "currentColor", animated = true }: ArrowIconProps) {
return (
<svg
className={className}
width="15"
height="14"
viewBox="0 0 26 22"
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-hidden="true"
>
{/* Chevron part */}
<path
d="M14.0019 1.00191L24.0015 11.0015L14.0019 21.001"
stroke={color}
strokeWidth="2"
strokeMiterlimit="10"
strokeLinecap="round"
/>
{/* Horizontal line */}
<path
d="M23.999 10.999H0"
stroke={color}
strokeWidth="2"
strokeMiterlimit="10"
strokeLinecap="round"
className={animated ? "arrow-horizontal" : undefined}
/>
</svg>
);
}
// Backwards-compatible aliases
export const SubmenuArrow = (props: Omit<ArrowIconProps, 'animated'>) => (
<ArrowIcon {...props} animated={true} />
);
export const SubmenuChildArrow = (props: Omit<ArrowIconProps, 'animated'>) => (
<ArrowIcon {...props} animated={false} />
);

View File

@@ -0,0 +1,6 @@
// Re-export all icon components
// Unified arrow icon with backwards-compatible aliases
export { ArrowIcon, SubmenuArrow, SubmenuChildArrow } from './SubmenuArrow';
export { CloseIcon } from './CloseIcon';
export { ChevronIcon } from './ChevronIcon';

Some files were not shown because too many files have changed in this diff Show More